Benchmark
1.2.3
OTRS AG
http://otrs.org/
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
Improved shown result summary, added expected SQL result times.
Build release with new into tags.
Updated to 2.2 framework.
A simple benchmark application.
Ein einfache Benchmark Applikation.
2.2.x
The Benchmark Application will be found at the admin navigation bar in the fourth column and can be used for SQL and Web performance test.
Die Benchmark Applikation ist in der Admin-Navigationsleiste, in der vierten Spalte zu finden. Mit ihr koennen SQL und Web Performance-Tests durchgefuehrt werden.
2008-04-19 19:15:55
opms.otrs.com
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8b3Ryc19jb25maWcgdmVyc2lvbj0iMS4wIiBpbml0PSJBcHBsaWNhdGlvbiI+CiAgICA8Q1ZTPiRJZDogQmVuY2htYXJrLnhtbCx2IDEuMyAyMDA3LzAxLzE5IDE4OjEzOjE2IG1oIEV4cCAkPC9DVlM+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5CZW5jaG1hcmsiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5CZW5jaCBvYmplY3QgIGluIHRoZSBhZG1pbiBhcmVhLjwvRGVzY3JpcHRpb24+RGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5Gcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWRtaW5CZW5jaC1PYmpla3RzIGltIEFkbWluLUJlcmVpY2guPC9EZXNjcmlwdGlvbj5EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+QmVuY2htYXJrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8VGl0bGU+QmVuY2htYXJrPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxHcm91cD5hZG1pbjwvR3JvdXA+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+QWRtaW4tQmVuY2g8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+QWRtaW48L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTW9kdWxlPgogICAgICAgICAgICAgICAgICAgIDxNb2R1bGU+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5hdkJhck1vZHVsZUFkbWluPC9Nb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+QmVuY2htYXJrPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz5CbG9jazQ8L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjIxMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluQmVuY2htYXJrLnBtIC0gYSBiZW5jaCBtYXJrIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDA4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWRtaW5CZW5jaG1hcmsucG0sdiAxLjMuNC4xIDIwMDgvMDQvMTkgMTc6MDk6NTcgbWFydGluIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbkJlbmNobWFyazsKCnVzZSBzdHJpY3Q7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RmlsZVRlbXA7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjMuNC4xICQpIFsxXTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyAoJFNlbGYsICRUeXBlKTsKCiAgICBmb3JlYWNoIChrZXlzICVQYXJhbSkgewogICAgICAgICRTZWxmLT57JF99ID0gJFBhcmFteyRffTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBPYmplY3RzCiAgICBmb3JlYWNoIChxdyhQYXJhbU9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkpIHsKICAgICAgICBpZiAoISRTZWxmLT57JF99KSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcihNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIik7CiAgICAgICAgfQogICAgfQoKICAgICRTZWxmLT57RmlsZVRlbXBPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkZpbGVUZW1wLT5uZXcoJVBhcmFtKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgIGlmICgkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NRTCcpIHsKICAgICAgICBteSAkSW5zZXJ0ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdJbnNlcnQnKTsKICAgICAgICBteSAkVXBkYXRlID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdVcGRhdGUnKTsKICAgICAgICBteSAkU2VsZWN0ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdTZWxlY3QnKTsKICAgICAgICBteSAkTW9kZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAnTW9kZScpOwogICAgICAgIGZvcmVhY2ggKDEuLiRNb2RlKSB7CiAgICAgICAgICAgICRTZWxmLT57IkRCT2JqZWN0JF8ifSA9IEtlcm5lbDo6U3lzdGVtOjpEQi0+bmV3KCV7JFNlbGZ9KTsKICAgICAgICB9CiAgICAgICAgJFBhcmFte0luc2VydFRpbWV9ID0gMDsKICAgICAgICAkUGFyYW17VXBkYXRlVGltZX0gPSAwOwogICAgICAgICRQYXJhbXtTZWxlY3RUaW1lfSA9IDA7CiAgICAgICAgJFBhcmFte0RlbGV0ZVRpbWV9ID0gMDsKICAgICAgICBteSAkVGltZVN0YXJ0ID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpOwogICAgICAgICRTZWxmLT5fU1FMSW5zZXJ0KCRJbnNlcnQsICRNb2RlKTsKICAgICAgICBteSAkVGltZTEgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCk7CiAgICAgICAgJFNlbGYtPl9TUUxVcGRhdGUoJFVwZGF0ZSwgJE1vZGUpOwogICAgICAgIG15ICRUaW1lMiA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKTsKICAgICAgICAkU2VsZi0+X1NRTFNlbGVjdCgkU2VsZWN0LCAkTW9kZSk7CiAgICAgICAgbXkgJFRpbWUzID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpOwogICAgICAgICRTZWxmLT5fU1FMRGVsZXRlKCk7CiAgICAgICAgbXkgJFRpbWU0ID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpOwogICAgICAgICRQYXJhbXtJbnNlcnRUaW1lfSA9ICRQYXJhbXtJbnNlcnRUaW1lfSskVGltZTEtJFRpbWVTdGFydDsKICAgICAgICAkUGFyYW17VXBkYXRlVGltZX0gPSAkUGFyYW17VXBkYXRlVGltZX0rJFRpbWUyLSRUaW1lMTsKICAgICAgICAkUGFyYW17U2VsZWN0VGltZX0gPSAkUGFyYW17U2VsZWN0VGltZX0rJFRpbWUzLSRUaW1lMjsKICAgICAgICAkUGFyYW17RGVsZXRlVGltZX0gPSAkUGFyYW17RGVsZXRlVGltZX0rJFRpbWU0LSRUaW1lMzsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSZXN1bHQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIEhlYWQgPT4gJ1NRTCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoKCRQYXJhbXtJbnNlcnRUaW1lfS8kTW9kZSkqKDEwMDAwLyRJbnNlcnQpIDwgMykgewogICAgICAgICAgICAkUGFyYW17SW5zZXJ0TW9vZH0gPSAnOi0pJzsKICAgICAgICAgICAgJFBhcmFte0NvbW1lbnR9ICAgID0gJyRUZXh0eyJMb29rcyBmaW5lISJ9JywKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCgkUGFyYW17SW5zZXJ0VGltZX0vJE1vZGUpKigxMDAwMC8kSW5zZXJ0KSA8IDUpIHsKICAgICAgICAgICAgJFBhcmFte0luc2VydE1vb2R9ID0gJzotfCc7CiAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSAgICA9ICckVGV4dHsiT2sifSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17SW5zZXJ0TW9vZH0gPSAnOi0oJzsKICAgICAgICAgICAgbXkgJFNob3VsZFRha2UgID0gaW50KCAkTW9kZSAqIDcgKTsKICAgICAgICAgICAgJFBhcmFte0NvbW1lbnR9ID0gJyRUZXh0eyJTaG91bGQgbm90IHRha2UgbG9uZ2VyIHRoZSAlcyBvbiBhIG5vcm1hbCBzeXN0ZW0uIiwgIicgLiAkU2hvdWxkVGFrZSAuICdzIn0nLAogICAgICAgIH0KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSZXN1bHRSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEtleSAgICAgPT4gJ0luc2VydCBUaW1lJywKICAgICAgICAgICAgICAgIFRpbWUgICAgPT4gIiRQYXJhbXtJbnNlcnRUaW1lfSBzICRQYXJhbXtJbnNlcnRNb29kfSIsCiAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICgkSW5zZXJ0KiRNb2RlKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJFBhcmFte0NvbW1lbnR9IHx8ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgaWYgKCgkUGFyYW17VXBkYXRlVGltZX0vJE1vZGUpKigxMDAwMC8kVXBkYXRlKSA8IDUpIHsKICAgICAgICAgICAgJFBhcmFte1VwZGF0ZU1vb2R9ID0gJzotKSc7CiAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSA9ICckVGV4dHsiTG9va3MgZmluZSEifScsCiAgICAgICAgfQogICAgICAgIGVsc2lmICgoJFBhcmFte1VwZGF0ZVRpbWV9LyRNb2RlKSooMTAwMDAvJFVwZGF0ZSkgPCA5KSB7CiAgICAgICAgICAgICRQYXJhbXtVcGRhdGVNb29kfSA9ICc6LXwnOwogICAgICAgICAgICAkUGFyYW17Q29tbWVudH0gICAgPSAnJFRleHR7Ik9rIn0nOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFBhcmFte1VwZGF0ZU1vb2R9ID0gJzotKCc7CiAgICAgICAgICAgIG15ICRTaG91bGRUYWtlICA9IGludCggJE1vZGUgKiAxMCApOwogICAgICAgICAgICAkUGFyYW17Q29tbWVudH0gPSAnJFRleHR7IlNob3VsZCBub3QgdGFrZSBsb25nZXIgdGhlICVzIG9uIGEgbm9ybWFsIHN5c3RlbS4iLCAiJyAuICRTaG91bGRUYWtlIC4gJ3MifScsCiAgICAgICAgfQogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3VsdFJvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgICA9PiAnVXBkYXRlIFRpbWUnLAogICAgICAgICAgICAgICAgVGltZSAgICA9PiAiJFBhcmFte1VwZGF0ZVRpbWV9IHMgJFBhcmFte1VwZGF0ZU1vb2R9IiwKICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gKCRVcGRhdGUqJE1vZGUpLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAkUGFyYW17Q29tbWVudH0gfHwgJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoKCRQYXJhbXtTZWxlY3RUaW1lfS8kTW9kZSkqKDEwMDAwLyRTZWxlY3QpIDwgNSkgewogICAgICAgICAgICAkUGFyYW17U2VsZWN0TW9vZH0gPSAnOi0pJzsKICAgICAgICAgICAgJFBhcmFte0NvbW1lbnR9ID0gJyRUZXh0eyJMb29rcyBmaW5lISJ9JywKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCgkUGFyYW17U2VsZWN0VGltZX0vJE1vZGUpKigxMDAwMC8kU2VsZWN0KSA8IDYpIHsKICAgICAgICAgICAgJFBhcmFte1NlbGVjdE1vb2R9ID0gJzotfCc7CiAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSAgICA9ICckVGV4dHsiT2sifSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17U2VsZWN0TW9vZH0gPSAnOi0oJzsKICAgICAgICAgICAgbXkgJFNob3VsZFRha2UgID0gaW50KCAkTW9kZSAqIDcgKTsKICAgICAgICAgICAgJFBhcmFte0NvbW1lbnR9ID0gJyRUZXh0eyJTaG91bGQgbm90IHRha2UgbG9uZ2VyIHRoZSAlcyBvbiBhIG5vcm1hbCBzeXN0ZW0uIiwgIicgLiAkU2hvdWxkVGFrZSAuICdzIn0nLAogICAgICAgIH0KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSZXN1bHRSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEtleSAgICAgPT4gJ1NlbGVjdCBUaW1lJywKICAgICAgICAgICAgICAgIFRpbWUgICAgPT4gIiRQYXJhbXtTZWxlY3RUaW1lfSBzICRQYXJhbXtTZWxlY3RNb29kfSIsCiAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICgkU2VsZWN0KiRNb2RlKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJFBhcmFte0NvbW1lbnR9IHx8ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgaWYgKCgkUGFyYW17RGVsZXRlVGltZX0vJE1vZGUpIDwgMS41KSB7CiAgICAgICAgICAgICRQYXJhbXtEZWxldGVNb29kfSA9ICc6LSknOwogICAgICAgICAgICAkUGFyYW17Q29tbWVudH0gPSAnJFRleHR7Ikxvb2tzIGZpbmUhIn0nLAogICAgICAgIH0KICAgICAgICBlbHNpZiAoKCRQYXJhbXtEZWxldGVUaW1lfS8kTW9kZSkgPCAyLjUpIHsKICAgICAgICAgICAgJFBhcmFte0RlbGV0ZU1vb2R9ID0gJzotfCc7CiAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSAgICA9ICckVGV4dHsiT2sifSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17RGVsZXRlTW9vZH0gPSAnOi0oJzsKICAgICAgICAgICAgbXkgJFNob3VsZFRha2UgID0gaW50KCAkTW9kZSAqIDEuMiApOwogICAgICAgICAgICAkUGFyYW17Q29tbWVudH0gPSAnJFRleHR7IlNob3VsZCBub3QgdGFrZSBsb25nZXIgdGhlICVzIG9uIGEgbm9ybWFsIHN5c3RlbS4iLCAiJyAuICRTaG91bGRUYWtlIC4gJ3MifScsCiAgICAgICAgfQogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3VsdFJvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgICA9PiAnRGVsZXRlIFRpbWUnLAogICAgICAgICAgICAgICAgVGltZSAgICA9PiAiJFBhcmFte0RlbGV0ZVRpbWV9IHMgJFBhcmFte0RlbGV0ZU1vb2R9IiwKICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gMSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJFBhcmFte0NvbW1lbnR9IHx8ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUmVzdWx0Um93JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnTXVsdGlwbGllcicsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAiKiAkTW9kZSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5CZW5jaG1hcmsnLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CiAgICBlbHNpZiAoJFNlbGYtPntTdWJhY3Rpb259IGVxICdGcm9udGVuZCcpIHsKICAgICAgICBteSAkTW9kdWxlID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdNb2R1bGUnKTsKICAgICAgICBteSAkVGltZXMgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gJ1RpbWVzJyk7CgogICAgICAgICMgY2hlY2sgbW9kdWxlIHJlZ2lzdHJ5CiAgICAgICAgbXkgJE1vZHVsZVJlZyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnskTW9kdWxlfTsKICAgICAgICAkU2VsZi0+e01haW5PYmplY3R9LT5SZXF1aXJlKCdLZXJuZWw6Ok1vZHVsZXM6OicuJE1vZHVsZSk7CiAgICAgICAgIyBwcm92ZSBvZiBjb25jZXB0ISAtIGNyZWF0ZSAkR2VuZXJpY09iamVjdAogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3VsdCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgSGVhZCA9PiAnRnJvbnRlbmQnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgbXkgJFRpbWVTdGFydCA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKTsKCiAgICAgICAgIyBjcmVhdGUgdG1wIGZpbGUgaGFuZGxlCiAgICAgICAgb3BlbihPTERPVVQsICI+JlNURE9VVCIpOwogICAgICAgICMgbW92ZSBTVERPVVQgdG8gdG1wIGZpbGUKICAgICAgICBteSAoJEZILCAkRmlsZW5hbWUpID0gJFNlbGYtPntGaWxlVGVtcE9iamVjdH0tPlRlbXBGaWxlKCk7CiAgICAgICAgb3BlbihTVERPVVQsICI+ICRGaWxlbmFtZSIpOwoKICAgICAgICBmb3JlYWNoICgxLi4kVGltZXMpIHsKICAgICAgICAgICAgbXkgJFRpbWVTdGFydCA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKTsKICAgICAgICAgICAgbXkgJEdlbmVyaWNPYmplY3QgPSAoJ0tlcm5lbDo6TW9kdWxlczo6Jy4kTW9kdWxlKS0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICBNb2R1bGVSZWcgPT4gJE1vZHVsZVJlZywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgIyAtPlJ1biAkQWN0aW9uIHdpdGggJEdlbmVyaWNPYmplY3QKIyAgICAgICAgICAgICRPdXRwdXQgLj0gJEdlbmVyaWNPYmplY3QtPlJ1bigpOwogICAgICAgICAgICAkR2VuZXJpY09iamVjdC0+UnVuKCk7CiAgICAgICAgICAgIG15ICRUaW1lMSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKTsKICAgICAgICAgICAgbXkgJFRpbWUgPSAkVGltZTEtJFRpbWVTdGFydDsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3VsdFJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1JlcXVlc3QnLAogICAgICAgICAgICAgICAgICAgIFRpbWUgPT4gIiRUaW1lIHMiLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICIkXyIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAjIHJlc3RvcmUgU1RET1VUIGZpbGUgaGFuZGxlCiAgICAgICAgb3BlbihTVERPVVQsICI+Jk9MRE9VVCIpOwogICAgICAgIGNsb3NlKE9MRE9VVCk7CgogICAgICAgIG15ICRUaW1lMSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKTsKICAgICAgICAkUGFyYW17VGltZX0gPSAkVGltZTEtJFRpbWVTdGFydDsKCiAgICAgICAgaWYgKCgkUGFyYW17VGltZX0vJFRpbWVzKSA8IDIpIHsKICAgICAgICAgICAgJFBhcmFte01vb2R9ID0gJzotKSc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgoJFBhcmFte1RpbWV9LyRUaW1lcykgPCAzKSB7CiAgICAgICAgICAgICRQYXJhbXtNb29kfSA9ICc6LXwnOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFBhcmFte01vb2R9ID0gJzotKCc7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSZXN1bHRSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEtleSA9PiAnTW9kdWxlJywKICAgICAgICAgICAgICAgIFZhbHVlID0+ICIkTW9kdWxlIiwKICAgICAgICAgICAgICAgIFRpbWUgPT4gIiRQYXJhbXtUaW1lfSBzICRQYXJhbXtNb29kfSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluQmVuY2htYXJrJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFBhcmFteydNb2RlU3RyZyd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PcHRpb25TdHJnSGFzaFJlZigKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxICogTm9ybWFsJywKICAgICAgICAgICAgICAgIDMgPT4gJzMgKiBIaWdoJywKICAgICAgICAgICAgICAgIDUgPT4gJzUgKiBIZWF2eScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5hbWUgPT4gJ01vZGUnLAogICAgICAgICk7CiAgICAgICAgJFBhcmFteydNb2R1bGUnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGcm9udGVuZDo6Q29tbW9uUGFyYW0nKS0+e0FjdGlvbn07CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5CZW5jaG1hcmsnLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCnN1YiBfU1FMSW5zZXJ0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICBteSAkQ291bnQgPSBzaGlmdDsKICAgIG15ICRNb2RlID0gc2hpZnQ7CiAgICBmb3JlYWNoIG15ICRDICgxLi4kQ291bnQpIHsKICAgICAgICBmb3JlYWNoIG15ICRNICgxLi4kTW9kZSkgewogICAgICAgICAgICBteSAkVmFsdWUxICA9ICJhYWEkQy0kTSI7CiAgICAgICAgICAgIG15ICRWYWx1ZTIgID0gJ2JiYic7CiAgICAgICAgICAgICRTZWxmLT57IkRCT2JqZWN0JE0ifS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGJlbmNoX3Rlc3QgKG5hbWVfYSwgbmFtZV9iKSB2YWx1ZXMgKD8sID8pJywKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJFZhbHVlMSwgXCRWYWx1ZTIsIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBfU1FMVXBkYXRlIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICBteSAkQ291bnQgPSBzaGlmdDsKICAgIG15ICRNb2RlID0gc2hpZnQ7CiAgICBteSAkVmFsdWUxID0gJzExMSc7CiAgICBteSAkVmFsdWUyID0gJzIyMic7CiAgICBmb3JlYWNoIG15ICRDICgxLi4kQ291bnQpIHsKICAgICAgICBmb3JlYWNoIG15ICRNICgxLi4kTW9kZSkgewogICAgICAgICAgICBteSAkVmFsdWUgID0gImFhYSRDLSRNIjsKICAgICAgICAgICAgJFNlbGYtPnsiREJPYmplY3QkTSJ9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGJlbmNoX3Rlc3QgU0VUIG5hbWVfYSA9ID8sIG5hbWVfYiA9ID8gV0hFUkUgbmFtZV9hID0gPycsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRWYWx1ZTEsIFwkVmFsdWUyLCBcJFZhbHVlIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBfU1FMU2VsZWN0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICBteSAkQ291bnQgPSBzaGlmdDsKICAgIG15ICRNb2RlID0gc2hpZnQ7CiAgICBmb3JlYWNoIG15ICRDICgxLi4kQ291bnQpIHsKICAgICAgICBmb3JlYWNoIG15ICRNICgxLi4kTW9kZSkgewogICAgICAgICAgICBteSAkVmFsdWUgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoImFhYSRDLSRNIik7CiAgICAgICAgICAgICRTZWxmLT57IkRCT2JqZWN0JE0ifS0+UHJlcGFyZSgKICAgICAgICAgICAgICAgIFNRTCAgPT4gIlNFTEVDVCBuYW1lX2EsIG5hbWVfYiBGUk9NIGJlbmNoX3Rlc3QgV0hFUkUgbmFtZV9hID0gJyRWYWx1ZSciLAogICAgICAgICAgICApOwogICAgICAgICAgICB3aGlsZSAobXkgQFJvdyA9ICRTZWxmLT57IkRCT2JqZWN0JE0ifS0+RmV0Y2hyb3dBcnJheSgpKSB7CiAgICAgICAgICAgICAgICAjIGRvIG5vdGhpbmcKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1NRTERlbGV0ZSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gYmVuY2hfdGVzdCIsCiAgICApOwogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEFkbWluQmVuY2htYXJrLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgYmVuY2ggbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDggT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZG1pbkJlbmNobWFyay5kdGwsdiAxLjIuNC4xIDIwMDgvMDQvMTkgMTc6MTA6NDUgbWFydGluIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMgLS0KCjwhLS0gc3RhcnQgZm9ybSAtLT4KPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyI+CiAgPHRyPgogICAgPHRkIGNsYXNzPSJtYWluaGVhZCI+CiAgICAgICRFbnZ7IkJveDAifSRUZXh0eyJCZW5jaG1hcmsifSRFbnZ7IkJveDEifQogICAgPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCBjbGFzcz0ibWFpbmJvZHkiPgogICAgICA8YnI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPgogICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9ImNvbXBvc2UiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTUUwiPgogICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI3MDAiIGFsaWduPSJjZW50ZXIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0iY29udGVudGhlYWQiPiRUZXh0eyJCZW5jaG1hcmsifTogJFRleHR7IlNRTCJ9PC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPgogICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiIGNsYXNzPSJjb250ZW50a2V5Ij5JbnNlcnQ6PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI4MCUiIGNsYXNzPSJjb250ZW50dmFsdWUiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJJbnNlcnQiIHZhbHVlPSIxMDAwMCIgc2l6ZT0iNjAiPjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlVwZGF0ZTo8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlVwZGF0ZSIgdmFsdWU9IjEwMDAwIiBzaXplPSI2MCI+PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+U2VsZWN0OjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iU2VsZWN0IiB2YWx1ZT0iMTAwMDAiIHNpemU9IjYwIj48L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij5NdWx0aXBsaWVyOjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kRGF0YXsiTW9kZVN0cmcifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRmb290ZXIiPgogICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYnV0dG9uIiBhY2Nlc3NrZXk9ImciIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSI+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZm9ybT4KICAgICAgPGJyPgogICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9ImNvbXBvc2UiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJGcm9udGVuZCI+CiAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjcwMCIgYWxpZ249ImNlbnRlciIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiIGNsYXNzPSJjb250ZW50aGVhZCI+JFRleHR7IkJlbmNobWFyayJ9OiAkVGV4dHsiRnJvbnRlbmQifTwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRib2R5Ij4KICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjAlIiBjbGFzcz0iY29udGVudGtleSI+JFRleHR7Ik1vZHVsZSJ9OjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iODAlIiBjbGFzcz0iY29udGVudHZhbHVlIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTW9kdWxlIiB2YWx1ZT0iJFFEYXRheyJNb2R1bGUifSIgc2l6ZT0iNjAiPjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJSZXF1ZXN0cyJ9OjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVGltZXMiIHZhbHVlPSIxMCIgc2l6ZT0iNjAiPjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRmb290ZXIiPgogICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYnV0dG9uIiBhY2Nlc3NrZXk9ImciIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSI+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZm9ybT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+CjwhLS0gZHRsOmJsb2NrOlJlc3VsdCAtLT4KICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjcwMCIgYWxpZ249ImNlbnRlciIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQgY29sc3Bhbj0iMiIgY2xhc3M9ImNvbnRlbnRoZWFkIj4kVGV4dHsiUmVzdWx0In06ICRUZXh0eyIkUURhdGF7IkhlYWQifSJ9PC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiS2V5In08L3RkPgogICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiVmFsdWUifTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjIwJSIgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJUaW1lIn08L3RkPgogICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI0MCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ29tbWVudCJ9PC90ZD4KICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpSZXN1bHRSb3cgLS0+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kUURhdGF7IktleSJ9OjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JFFEYXRheyJWYWx1ZSJ9PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kUURhdGF7IlRpbWUifTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JERhdGF7IkNvbW1lbnQifTwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UmVzdWx0Um93IC0tPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGZvb3RlciI+CiAgICAgICAgICAgICZuYnNwOwogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICA8L3RhYmxlPgo8IS0tIGR0bDpibG9jazpSZXN1bHQgLS0+CiAgICAgIDxicj4KICAgIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPCEtLSBlbmQgZm9ybSAtLT4K