Benchmark 1.2.5 OTRS AG http://otrs.org/ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Fixed bug# 2903 - typo, added extended delete action. Improved shown reference times. 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-23 22:13:33 opms.otrs.com PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8b3Ryc19jb25maWcgdmVyc2lvbj0iMS4wIiBpbml0PSJBcHBsaWNhdGlvbiI+CiAgICA8Q1ZTPiRJZDogQmVuY2htYXJrLnhtbCx2IDEuMyAyMDA3LzAxLzE5IDE4OjEzOjE2IG1oIEV4cCAkPC9DVlM+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5CZW5jaG1hcmsiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5CZW5jaCBvYmplY3QgIGluIHRoZSBhZG1pbiBhcmVhLjwvRGVzY3JpcHRpb24+RGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5Gcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWRtaW5CZW5jaC1PYmpla3RzIGltIEFkbWluLUJlcmVpY2guPC9EZXNjcmlwdGlvbj5EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+QmVuY2htYXJrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8VGl0bGU+QmVuY2htYXJrPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxHcm91cD5hZG1pbjwvR3JvdXA+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+QWRtaW4tQmVuY2g8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+QWRtaW48L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTW9kdWxlPgogICAgICAgICAgICAgICAgICAgIDxNb2R1bGU+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5hdkJhck1vZHVsZUFkbWluPC9Nb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+QmVuY2htYXJrPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz5CbG9jazQ8L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjIxMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+ IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluQmVuY2htYXJrLnBtIC0gYSBiZW5jaCBtYXJrIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDA4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWRtaW5CZW5jaG1hcmsucG0sdiAxLjMuNC4zIDIwMDgvMDQvMjMgMjA6MTM6MTMgbWFydGluIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbkJlbmNobWFyazsKCnVzZSBzdHJpY3Q7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RmlsZVRlbXA7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjMuNC4zICQpIFsxXTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyAoJFNlbGYsICRUeXBlKTsKCiAgICBmb3JlYWNoIChrZXlzICVQYXJhbSkgewogICAgICAgICRTZWxmLT57JF99ID0gJFBhcmFteyRffTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBPYmplY3RzCiAgICBmb3JlYWNoIChxdyhQYXJhbU9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkpIHsKICAgICAgICBpZiAoISRTZWxmLT57JF99KSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcihNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIik7CiAgICAgICAgfQogICAgfQoKICAgICRTZWxmLT57RmlsZVRlbXBPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkZpbGVUZW1wLT5uZXcoJVBhcmFtKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgIGlmICgkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NRTCcpIHsKICAgICAgICBteSAkSW5zZXJ0ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdJbnNlcnQnKTsKICAgICAgICBteSAkVXBkYXRlID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdVcGRhdGUnKTsKICAgICAgICBteSAkU2VsZWN0ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdTZWxlY3QnKTsKICAgICAgICBteSAkTW9kZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAnTW9kZScpOwogICAgICAgIGZvcmVhY2ggKDEuLiRNb2RlKSB7CiAgICAgICAgICAgICRTZWxmLT57IkRCT2JqZWN0JF8ifSA9IEtlcm5lbDo6U3lzdGVtOjpEQi0+bmV3KCV7JFNlbGZ9KTsKICAgICAgICB9CiAgICAgICAgJFBhcmFte0luc2VydFRpbWV9ID0gMDsKICAgICAgICAkUGFyYW17VXBkYXRlVGltZX0gPSAwOwogICAgICAgICRQYXJhbXtTZWxlY3RUaW1lfSA9IDA7CiAgICAgICAgJFBhcmFte0RlbGV0ZVRpbWV9ID0gMDsKICAgICAgICBteSAkVGltZVN0YXJ0ID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpOwogICAgICAgICRTZWxmLT5fU1FMSW5zZXJ0KCRJbnNlcnQsICRNb2RlKTsKICAgICAgICBteSAkVGltZTEgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCk7CiAgICAgICAgJFNlbGYtPl9TUUxVcGRhdGUoJFVwZGF0ZSwgJE1vZGUpOwogICAgICAgIG15ICRUaW1lMiA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKTsKICAgICAgICAkU2VsZi0+X1NRTFNlbGVjdCgkU2VsZWN0LCAkTW9kZSk7CiAgICAgICAgbXkgJFRpbWUzID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpOwogICAgICAgICRTZWxmLT5fU1FMRGVsZXRlKCRJbnNlcnQsICRNb2RlKTsKICAgICAgICBteSAkVGltZTQgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCk7CiAgICAgICAgJFBhcmFte0luc2VydFRpbWV9ID0gJFBhcmFte0luc2VydFRpbWV9KyRUaW1lMS0kVGltZVN0YXJ0OwogICAgICAgICRQYXJhbXtVcGRhdGVUaW1lfSA9ICRQYXJhbXtVcGRhdGVUaW1lfSskVGltZTItJFRpbWUxOwogICAgICAgICRQYXJhbXtTZWxlY3RUaW1lfSA9ICRQYXJhbXtTZWxlY3RUaW1lfSskVGltZTMtJFRpbWUyOwogICAgICAgICRQYXJhbXtEZWxldGVUaW1lfSA9ICRQYXJhbXtEZWxldGVUaW1lfSskVGltZTQtJFRpbWUzOwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3VsdCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgSGVhZCA9PiAnU1FMJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgIG15ICRJbnNlcnRUaW1lID0gKCRQYXJhbXtJbnNlcnRUaW1lfS8kTW9kZSkqKDEwMDAwLyRJbnNlcnQpOwogICAgICAgIGlmICggJEluc2VydFRpbWUgPD0gMyApIHsKICAgICAgICAgICAgJFBhcmFte0luc2VydE1vb2R9ID0gJzotKSc7CiAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSAgICA9ICckVGV4dHsiTG9va3MgZmluZSEifScsCiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEluc2VydFRpbWUgPD0gNSApIHsKICAgICAgICAgICAgJFBhcmFte0luc2VydE1vb2R9ID0gJzotfCc7CiAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSAgICA9ICckVGV4dHsiT2sifSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17SW5zZXJ0TW9vZH0gPSAnOi0oJzsKICAgICAgICAgICAgbXkgJFNob3VsZFRha2UgID0gaW50KCAkTW9kZSAqIDUgKTsKICAgICAgICAgICAgJFBhcmFte0NvbW1lbnR9ID0gJyRUZXh0eyJTaG91bGQgbm90IHRha2UgbG9uZ2VyIHRoZW4gJXMgb24gYSByZWd1bGFyIHN5c3RlbS4iLCAiJyAuICRTaG91bGRUYWtlIC4gJ3MifScsCiAgICAgICAgfQogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3VsdFJvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgICA9PiAnSW5zZXJ0IFRpbWUnLAogICAgICAgICAgICAgICAgVGltZSAgICA9PiAiJFBhcmFte0luc2VydFRpbWV9IHMgJFBhcmFte0luc2VydE1vb2R9IiwKICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gKCRJbnNlcnQqJE1vZGUpLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAkUGFyYW17Q29tbWVudH0gfHwgJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICBteSAkVXBkYXRlVGltZSA9ICgkUGFyYW17VXBkYXRlVGltZX0vJE1vZGUpKigxMDAwMC8kVXBkYXRlKTsKICAgICAgICBpZiAoICRVcGRhdGVUaW1lIDw9IDUgKSB7CiAgICAgICAgICAgICRQYXJhbXtVcGRhdGVNb29kfSA9ICc6LSknOwogICAgICAgICAgICAkUGFyYW17Q29tbWVudH0gPSAnJFRleHR7Ikxvb2tzIGZpbmUhIn0nLAogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRVcGRhdGVUaW1lIDw9IDkgKSB7CiAgICAgICAgICAgICRQYXJhbXtVcGRhdGVNb29kfSA9ICc6LXwnOwogICAgICAgICAgICAkUGFyYW17Q29tbWVudH0gICAgPSAnJFRleHR7Ik9rIn0nOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFBhcmFte1VwZGF0ZU1vb2R9ID0gJzotKCc7CiAgICAgICAgICAgIG15ICRTaG91bGRUYWtlICA9IGludCggJE1vZGUgKiA5ICk7CiAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSA9ICckVGV4dHsiU2hvdWxkIG5vdCB0YWtlIGxvbmdlciB0aGVuICVzIG9uIGEgcmVndWxhciBzeXN0ZW0uIiwgIicgLiAkU2hvdWxkVGFrZSAuICdzIn0nLAogICAgICAgIH0KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSZXN1bHRSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEtleSAgICAgPT4gJ1VwZGF0ZSBUaW1lJywKICAgICAgICAgICAgICAgIFRpbWUgICAgPT4gIiRQYXJhbXtVcGRhdGVUaW1lfSBzICRQYXJhbXtVcGRhdGVNb29kfSIsCiAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICgkVXBkYXRlKiRNb2RlKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gJFBhcmFte0NvbW1lbnR9IHx8ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIG15ICRTZWxlY3RUaW1lID0gKCRQYXJhbXtTZWxlY3RUaW1lfS8kTW9kZSkqKDEwMDAwLyRTZWxlY3QpOwogICAgICAgIGlmICggJFNlbGVjdFRpbWUgPD0gNSApIHsKICAgICAgICAgICAgJFBhcmFte1NlbGVjdE1vb2R9ID0gJzotKSc7CiAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSA9ICckVGV4dHsiTG9va3MgZmluZSEifScsCiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFNlbGVjdFRpbWUgPD0gNiApIHsKICAgICAgICAgICAgJFBhcmFte1NlbGVjdE1vb2R9ID0gJzotfCc7CiAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSAgICA9ICckVGV4dHsiT2sifSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17U2VsZWN0TW9vZH0gPSAnOi0oJzsKICAgICAgICAgICAgbXkgJFNob3VsZFRha2UgID0gaW50KCAkTW9kZSAqIDYgKTsKICAgICAgICAgICAgJFBhcmFte0NvbW1lbnR9ID0gJyRUZXh0eyJTaG91bGQgbm90IHRha2UgbG9uZ2VyIHRoZW4gJXMgb24gYSByZWd1bGFyIHN5c3RlbS4iLCAiJyAuICRTaG91bGRUYWtlIC4gJ3MifScsCiAgICAgICAgfQogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3VsdFJvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgICA9PiAnU2VsZWN0IFRpbWUnLAogICAgICAgICAgICAgICAgVGltZSAgICA9PiAiJFBhcmFte1NlbGVjdFRpbWV9IHMgJFBhcmFte1NlbGVjdE1vb2R9IiwKICAgICAgICAgICAgICAgIFZhbHVlICAgPT4gKCRTZWxlY3QqJE1vZGUpLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiAkUGFyYW17Q29tbWVudH0gfHwgJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJERlbGV0ZVRpbWUgPSAoJFBhcmFte0RlbGV0ZVRpbWV9LyRNb2RlKTsKICAgICAgICBpZiAoICREZWxldGVUaW1lIDw9ICA0ICkgewogICAgICAgICAgICAkUGFyYW17RGVsZXRlTW9vZH0gPSAnOi0pJzsKICAgICAgICAgICAgJFBhcmFte0NvbW1lbnR9ID0gJyRUZXh0eyJMb29rcyBmaW5lISJ9JywKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkRGVsZXRlVGltZSA8PSA1ICkgewogICAgICAgICAgICAkUGFyYW17RGVsZXRlTW9vZH0gPSAnOi18JzsKICAgICAgICAgICAgJFBhcmFte0NvbW1lbnR9ICAgID0gJyRUZXh0eyJPayJ9JzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQYXJhbXtEZWxldGVNb29kfSA9ICc6LSgnOwogICAgICAgICAgICBteSAkU2hvdWxkVGFrZSAgPSBpbnQoICRNb2RlICogNSApOwogICAgICAgICAgICAkUGFyYW17Q29tbWVudH0gPSAnJFRleHR7IlNob3VsZCBub3QgdGFrZSBsb25nZXIgdGhlbiAlcyBvbiBhIHJlZ3VsYXIgc3lzdGVtLiIsICInIC4gJFNob3VsZFRha2UgLiAncyJ9JywKICAgICAgICB9CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUmVzdWx0Um93JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBLZXkgICAgID0+ICdEZWxldGUgVGltZScsCiAgICAgICAgICAgICAgICBUaW1lICAgID0+ICIkUGFyYW17RGVsZXRlVGltZX0gcyAkUGFyYW17RGVsZXRlTW9vZH0iLAogICAgICAgICAgICAgICAgVmFsdWUgICA9PiAoJEluc2VydCokTW9kZSksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+ICRQYXJhbXtDb21tZW50fSB8fCAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3VsdFJvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ011bHRpcGxpZXInLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gIiogJE1vZGUiLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluQmVuY2htYXJrJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQogICAgZWxzaWYgKCRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRnJvbnRlbmQnKSB7CiAgICAgICAgbXkgJE1vZHVsZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAnTW9kdWxlJyk7CiAgICAgICAgbXkgJFRpbWVzID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdUaW1lcycpOwoKICAgICAgICAjIGNoZWNrIG1vZHVsZSByZWdpc3RyeQogICAgICAgIG15ICRNb2R1bGVSZWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JE1vZHVsZX07CiAgICAgICAgJFNlbGYtPntNYWluT2JqZWN0fS0+UmVxdWlyZSgnS2VybmVsOjpNb2R1bGVzOjonLiRNb2R1bGUpOwogICAgICAgICMgcHJvdmUgb2YgY29uY2VwdCEgLSBjcmVhdGUgJEdlbmVyaWNPYmplY3QKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSZXN1bHQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIEhlYWQgPT4gJ0Zyb250ZW5kJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgIG15ICRUaW1lU3RhcnQgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCk7CgogICAgICAgICMgY3JlYXRlIHRtcCBmaWxlIGhhbmRsZQogICAgICAgIG9wZW4oT0xET1VULCAiPiZTVERPVVQiKTsKICAgICAgICAjIG1vdmUgU1RET1VUIHRvIHRtcCBmaWxlCiAgICAgICAgbXkgKCRGSCwgJEZpbGVuYW1lKSA9ICRTZWxmLT57RmlsZVRlbXBPYmplY3R9LT5UZW1wRmlsZSgpOwogICAgICAgIG9wZW4oU1RET1VULCAiPiAkRmlsZW5hbWUiKTsKCiAgICAgICAgZm9yZWFjaCAoMS4uJFRpbWVzKSB7CiAgICAgICAgICAgIG15ICRUaW1lU3RhcnQgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCk7CiAgICAgICAgICAgIG15ICRHZW5lcmljT2JqZWN0ID0gKCdLZXJuZWw6Ok1vZHVsZXM6OicuJE1vZHVsZSktPm5ldygKICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgTW9kdWxlUmVnID0+ICRNb2R1bGVSZWcsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICMgLT5SdW4gJEFjdGlvbiB3aXRoICRHZW5lcmljT2JqZWN0CiMgICAgICAgICAgICAkT3V0cHV0IC49ICRHZW5lcmljT2JqZWN0LT5SdW4oKTsKICAgICAgICAgICAgJEdlbmVyaWNPYmplY3QtPlJ1bigpOwogICAgICAgICAgICBteSAkVGltZTEgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCk7CiAgICAgICAgICAgIG15ICRUaW1lID0gJFRpbWUxLSRUaW1lU3RhcnQ7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdSZXN1bHRSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0+ICdSZXF1ZXN0JywKICAgICAgICAgICAgICAgICAgICBUaW1lID0+ICIkVGltZSBzIiwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAiJF8iLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgIyByZXN0b3JlIFNURE9VVCBmaWxlIGhhbmRsZQogICAgICAgIG9wZW4oU1RET1VULCAiPiZPTERPVVQiKTsKICAgICAgICBjbG9zZShPTERPVVQpOwoKICAgICAgICBteSAkVGltZTEgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCk7CiAgICAgICAgJFBhcmFte1RpbWV9ID0gJFRpbWUxLSRUaW1lU3RhcnQ7CgogICAgICAgIGlmICgoJFBhcmFte1RpbWV9LyRUaW1lcykgPCAyKSB7CiAgICAgICAgICAgICRQYXJhbXtNb29kfSA9ICc6LSknOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoKCRQYXJhbXtUaW1lfS8kVGltZXMpIDwgMykgewogICAgICAgICAgICAkUGFyYW17TW9vZH0gPSAnOi18JzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQYXJhbXtNb29kfSA9ICc6LSgnOwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUmVzdWx0Um93JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBLZXkgPT4gJ01vZHVsZScsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAiJE1vZHVsZSIsCiAgICAgICAgICAgICAgICBUaW1lID0+ICIkUGFyYW17VGltZX0gcyAkUGFyYW17TW9vZH0iLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkJlbmNobWFyaycsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRQYXJhbXsnTW9kZVN0cmcnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3B0aW9uU3RyZ0hhc2hSZWYoCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMSA9PiAnMSAqIE5vcm1hbCcsCiAgICAgICAgICAgICAgICAzID0+ICczICogSGlnaCcsCiAgICAgICAgICAgICAgICA1ID0+ICc1ICogSGVhdnknLAogICAgICAgICAgICB9LAogICAgICAgICAgICBOYW1lID0+ICdNb2RlJywKICAgICAgICApOwogICAgICAgICRQYXJhbXsnTW9kdWxlJ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6OkNvbW1vblBhcmFtJyktPntBY3Rpb259OwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluQmVuY2htYXJrJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgpzdWIgX1NRTEluc2VydCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJENvdW50ID0gc2hpZnQ7CiAgICBteSAkTW9kZSA9IHNoaWZ0OwogICAgZm9yZWFjaCBteSAkQyAoMS4uJENvdW50KSB7CiAgICAgICAgZm9yZWFjaCBteSAkTSAoMS4uJE1vZGUpIHsKICAgICAgICAgICAgbXkgJFZhbHVlMSAgPSAiYWFhJEMtJE0iOwogICAgICAgICAgICBteSAkVmFsdWUyICA9ICdiYmInOwogICAgICAgICAgICAkU2VsZi0+eyJEQk9iamVjdCRNIn0tPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBiZW5jaF90ZXN0IChuYW1lX2EsIG5hbWVfYikgdmFsdWVzICg/LCA/KScsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRWYWx1ZTEsIFwkVmFsdWUyLCBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1NRTFVwZGF0ZSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJENvdW50ID0gc2hpZnQ7CiAgICBteSAkTW9kZSA9IHNoaWZ0OwogICAgZm9yZWFjaCBteSAkQyAoMS4uJENvdW50KSB7CiAgICAgICAgZm9yZWFjaCBteSAkTSAoMS4uJE1vZGUpIHsKICAgICAgICAgICAgbXkgJFZhbHVlICA9ICJhYWEkQy0kTSI7CiAgICAgICAgICAgIG15ICRWYWx1ZTEgPSAiMTExJEMtJE0iOwogICAgICAgICAgICBteSAkVmFsdWUyID0gJzIyMic7CiAgICAgICAgICAgICRTZWxmLT57IkRCT2JqZWN0JE0ifS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gJ1VQREFURSBiZW5jaF90ZXN0IFNFVCBuYW1lX2EgPSA/LCBuYW1lX2IgPSA/IFdIRVJFIG5hbWVfYSA9ID8nLAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkVmFsdWUxLCBcJFZhbHVlMiwgXCRWYWx1ZSBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1NRTFNlbGVjdCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJENvdW50ID0gc2hpZnQ7CiAgICBteSAkTW9kZSA9IHNoaWZ0OwogICAgZm9yZWFjaCBteSAkQyAoMS4uJENvdW50KSB7CiAgICAgICAgZm9yZWFjaCBteSAkTSAoMS4uJE1vZGUpIHsKICAgICAgICAgICAgbXkgJFZhbHVlID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCJhYWEkQy0kTSIpOwogICAgICAgICAgICAkU2VsZi0+eyJEQk9iamVjdCRNIn0tPlByZXBhcmUoCiAgICAgICAgICAgICAgICBTUUwgID0+ICJTRUxFQ1QgbmFtZV9hLCBuYW1lX2IgRlJPTSBiZW5jaF90ZXN0IFdIRVJFIG5hbWVfYSA9ICckVmFsdWUnIiwKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJFZhbHVlIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHdoaWxlIChteSBAUm93ID0gJFNlbGYtPnsiREJPYmplY3QkTSJ9LT5GZXRjaHJvd0FycmF5KCkpIHsKICAgICAgICAgICAgICAgICMgZG8gbm90aGluZwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBfU1FMRGVsZXRlIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICBteSAkQ291bnQgPSBzaGlmdDsKICAgIG15ICRNb2RlID0gc2hpZnQ7CiAgICBmb3JlYWNoIG15ICRDICgxLi4kQ291bnQpIHsKICAgICAgICBmb3JlYWNoIG15ICRNICgxLi4kTW9kZSkgewogICAgICAgICAgICBteSAkVmFsdWUgID0gIjExMSRDLSRNIjsKICAgICAgICAgICAgJFNlbGYtPnsiREJPYmplY3QkTSJ9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAnREVMRVRFIEZST00gYmVuY2hfdGVzdCBXSEVSRSBuYW1lX2EgPSA/JywKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJFZhbHVlIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCjE7Cg== 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