RotherOSS-LongEscalationPerformanceBoost
6.0.1
Rother OSS GmbH
https://otrs.ch/
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
Initial.
Caches parts of the TicketEscalationDateCalculation to boost performance of TicketGet and other modules for long escalation times.
6.0.x
2019-11-08 17:22:56
opms
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjIuMCIgaW5pdD0iQXBwbGljYXRpb24iPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpDdXN0b21Nb2R1bGUjIyNSb3RoZXJPU1MtTG9uZ0VzY2FsYXRpb25QZXJmb3JtYW5jZUJvb3N0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNhY2hlcyBwYXJ0cyBvZiB0aGUgVGlja2V0RXNjYWxhdGlvbkRhdGVDYWxjdWxhdGlvbiB0byBib29zdCBwZXJmb3JtYW5jZSBvZiBUaWNrZXRHZXQgYW5kIG90aGVyIG1vZHVsZXMgZm9yIGxvbmcgZXNjYWxhdGlvbiB0aW1lcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OlRpY2tldDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPktlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OlJvdGhlck9TU0VzY2FsYXRpb25EYXRlQ2FsYzwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L290cnNfY29uZmlnPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE5IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdHJzLmNoLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQojIC0tLQojIFJvdGhlck9TUyBMb25nRXNjYWxhdGlvblBlcmZvcm1hbmNlQm9vc3QKIyAtLS0KIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UUlM6OlBlcmw6OlBlcmxDcml0aWMpCiMgLS0tCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6Um90aGVyT1NTRXNjYWxhdGlvbkRhdGVDYWxjOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKIyBkaXNhYmxlIHJlZGVmaW5lIHdhcm5pbmdzIGluIHRoaXMgc2NvcGUKewogICAgbm8gd2FybmluZ3MgJ3JlZGVmaW5lJzsKCiAgICAjIHJlZGVmaW5lIFRpY2tldEVzY2FsYXRpb25JbmRleEJ1aWxkKCkgb2YgS2VybmVsOjpTeXN0ZW06OlRpY2tldAogICAgc3ViIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OlRpY2tldEVzY2FsYXRpb25EYXRlQ2FsY3VsYXRpb24gewogICAgICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldCBVc2VySUQpKSB7CiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IHRpY2tldCBhdHRyaWJ1dGVzCiAgICAgICAgbXkgJVRpY2tldCA9ICV7ICRQYXJhbXtUaWNrZXR9IH07CgogICAgICAgICMgZG8gbm8gZXNjYWxhdGlvbnMgb24gKG1lcmdlfGNsb3NlfHJlbW92ZSkgdGlja2V0cwogICAgICAgIHJldHVybiBpZiAkVGlja2V0e1N0YXRlVHlwZX0gZXEgJ21lcmdlZCc7CiAgICAgICAgcmV0dXJuIGlmICRUaWNrZXR7U3RhdGVUeXBlfSBlcSAnY2xvc2VkJzsKICAgICAgICByZXR1cm4gaWYgJFRpY2tldHtTdGF0ZVR5cGV9IGVxICdyZW1vdmVkJzsKCiAgICAgICAgIyBnZXQgZXNjYWxhdGlvbiBwcm9wZXJ0aWVzCiAgICAgICAgbXkgJUVzY2FsYXRpb24gPSAkU2VsZi0+VGlja2V0RXNjYWxhdGlvblByZWZlcmVuY2VzKAogICAgICAgICAgICBUaWNrZXQgPT4gJFBhcmFte1RpY2tldH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSB8fCAxLAogICAgICAgICk7CgogICAgICAgICMgcmV0dXJuIGlmIHdlIGRvIG5vdCBoYXZlIGFueSBlc2NhbGF0aW9uIGF0dHJpYnV0ZXMKICAgICAgICBteSAlTWFwID0gKAogICAgICAgICAgICBFc2NhbGF0aW9uUmVzcG9uc2VUaW1lID0+ICdGaXJzdFJlc3BvbnNlJywKICAgICAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWUgICA9PiAnVXBkYXRlJywKICAgICAgICAgICAgRXNjYWxhdGlvblNvbHV0aW9uVGltZSA9PiAnU29sdXRpb24nLAogICAgICAgICk7CiAgICAgICAgbXkgJEVzY2FsYXRpb25BdHRyaWJ1dGU7CiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVNYXAgKSB7CiAgICAgICAgICAgIGlmICggJEVzY2FsYXRpb257ICRNYXB7JEtleX0gLiAnVGltZScgfSApIHsKICAgICAgICAgICAgICAgICRFc2NhbGF0aW9uQXR0cmlidXRlID0gMTsKICAgICAgICAgICAgICAgIGxhc3QgS0VZOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaWYgISRFc2NhbGF0aW9uQXR0cmlidXRlOwoKICAgICAgICAjIGNyZWF0ZSBkYXRldGltZSBvYmplY3QKICAgICAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKCiAgICAgICAgIyBjYWxjdWxhdGUgZXNjYWxhdGlvbiB0aW1lcyBiYXNlZCBvbiBlc2NhbGF0aW9uIHByb3BlcnRpZXMKICAgICAgICBteSAlRGF0YTsKCiMgUm90aGVyIE9TUyAvIGF2b2lkIGxvbmcgZXNjYWxhdGlvbiBjYWxjdWxhdGlvbnMKICAgICAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKICAgICAgICBteSAkTWF4VW5jYWNoZWQgPSA2MCAqIDYwICogMjQgKiAzOyAjIHRocmVlIGRheXMgVE9ETzogU3lzQ29uZmlnT3B0aW9uIGFuZCB0ZXN0IGZvciBvcHRpbXVtCiMgRU8gUm90aGVyCgogICAgICAgIFRJTUU6CiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJU1hcCApIHsKCiAgICAgICAgICAgIG5leHQgVElNRSBpZiAhJFRpY2tldHskS2V5fTsKCiAgICAgICAgICAgICMgZ2V0IHRpbWUgYmVmb3JlIG9yIG92ZXIgZXNjYWxhdGlvbiAoZXNjYWxhdGlvbl9kZXN0aW5hdGlvbl91bml4dGltZSAtIG5vdykKICAgICAgICAgICAgbXkgJFRpbWVUaWxsRXNjYWxhdGlvbiA9ICRUaWNrZXR7JEtleX0gLSAkRGF0ZVRpbWVPYmplY3QtPlRvRXBvY2goKTsKCiAgICAgICAgICAgICMgdGlja2V0IGlzIG5vdCBlc2NhbGF0ZWQgdGlsbCBub3cgKCRUaW1lVGlsbEVzY2FsYXRpb24gPiAwKQogICAgICAgICAgICBteSAkV29ya2luZ1RpbWUgPSAwOwoKIyBSb3RoZXIgT1NTIC8gYXZvaWQgbG9uZyBlc2NhbGF0aW9uIGNhbGN1bGF0aW9ucwogICAgICAgICAgICBteSAkU3RvcmVkVGltZTsKICAgICAgICAgICAgbXkgJEVzY2FsYXRpb25UaW1lID0gJFRpY2tldHskS2V5fTsKICAgICAgICAgICAgbXkgJEVzY2FsYXRlZCA9ICggJFRpbWVUaWxsRXNjYWxhdGlvbiA+IDAgKSA/IDAgOiAxOwogICAgICAgICAgICAjIGlmIG1vcmUgdGhhbiAkTWF4VW5jYWNoZWQgdGltZSB3b3VsZCBoYXZlIHRvIGJlIGNhbGN1bGF0ZWQsIHVzZSB0aGUgY2FjaGUKICAgICAgICAgICAgaWYgKCBhYnMoICRUaW1lVGlsbEVzY2FsYXRpb24gKSA+ICRNYXhVbmNhY2hlZCApIHsKICAgICAgICAgICAgICAgICRTdG9yZWRUaW1lID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRXNjYWxhdGlvbldvcmtpbmdUaW1lJywKICAgICAgICAgICAgICAgICAgICBLZXkgID0+ICRUaWNrZXR7VGlja2V0SUR9Lic6OicuJEtleS4nOjonLiRFc2NhbGF0ZWQsCiAgICAgICAgICAgICAgICApOwogICAgICAgIAogICAgICAgICAgICAgICAgIyBpZiB0aGUgY2FjaGUgYXBwbGllcyB0byB0aGUgc2FtZSBlc2NhbGF0aW9uIHRpbWUuLi4KICAgICAgICAgICAgICAgIGlmICggJFN0b3JlZFRpbWUgJiYgJFN0b3JlZFRpbWUtPntFc2NhbGF0aW9uVGltZX0gPT0gJEVzY2FsYXRpb25UaW1lICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJEVzY2FsYXRlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFdvcmtpbmdUaW1lID0gJFN0b3JlZFRpbWUtPntXb3JraW5nVGltZX07CiAgICAgICAgICAgICAgICAgICAgICAgICRFc2NhbGF0aW9uVGltZSA9ICRTdG9yZWRUaW1lLT57TGFzdFRpbWV9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAjIGlmIGl0IGlzIG5vdCBlc2NhbGF0ZWQgb25seSB1c2UgdGhlIGNhY2hlLCBpZiB0aGUgbGFzdCB1cGRhdGUgd2FzIG5vdCB0b28gbG9uZyBhZ28KICAgICAgICAgICAgICAgICAgICBlbHNpZiggJFRpbWVUaWxsRXNjYWxhdGlvbiA+ICREYXRlVGltZU9iamVjdC0+VG9FcG9jaCgpIC0gJFN0b3JlZFRpbWUtPntMYXN0VGltZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRXb3JraW5nVGltZSA9ICRTdG9yZWRUaW1lLT57V29ya2luZ1RpbWV9OwogICAgICAgICAgICAgICAgICAgICAgICAkRXNjYWxhdGlvblRpbWUgPSAyKiREYXRlVGltZU9iamVjdC0+VG9FcG9jaCgpIC0gJFN0b3JlZFRpbWUtPntMYXN0VGltZX07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiMgRU8gUm90aGVyCgogICAgICAgICAgICBpZiAoICRUaW1lVGlsbEVzY2FsYXRpb24gPiAwICkgewoKICAgICAgICAgICAgICAgIG15ICRTdG9wVGltZU9iaiA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKIyBSb3RoZXIgT1NTIC8gYXZvaWQgbG9uZyBlc2NhbGF0aW9uIGNhbGN1bGF0aW9ucwojICAgICAgICAgICAgICAgICAgICAgICBFcG9jaCA9PiAkVGlja2V0eyRLZXl9CiAgICAgICAgICAgICAgICAgICAgICAgIEVwb2NoID0+ICRFc2NhbGF0aW9uVGltZSwKIyBFTyBSb3RoZXIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICREZWx0YU9iaiA9ICREYXRlVGltZU9iamVjdC0+RGVsdGEoCiAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWVPYmplY3QgPT4gJFN0b3BUaW1lT2JqLAogICAgICAgICAgICAgICAgICAgIEZvcldvcmtpbmdUaW1lID0+IDEsCiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgPT4gJEVzY2FsYXRpb257Q2FsZW5kYXJ9LAogICAgICAgICAgICAgICAgKTsKCiMgUm90aGVyIE9TUyAvIGF2b2lkIGxvbmcgZXNjYWxhdGlvbiBjYWxjdWxhdGlvbnMKIyAgICAgICAgICAgICAgICRXb3JraW5nVGltZSA9ICREZWx0YU9iaiA/ICREZWx0YU9iai0+e0Fic29sdXRlU2Vjb25kc30gOiAwOwogICAgICAgICAgICAgICAgIyBzdWJ0cmFjdCB0aW1lIGJldHdlZW4gcG9pbnRzIGZyb20gbGFzdCB3b3JraW5nIHRpbWUKICAgICAgICAgICAgICAgICRXb3JraW5nVGltZSAtPSAkRGVsdGFPYmogPyAkRGVsdGFPYmotPntBYnNvbHV0ZVNlY29uZHN9IDogMDsKICAgICAgICAgICAgICAgICRXb3JraW5nVGltZSA9IGFicyggJFdvcmtpbmdUaW1lICk7CiMgRU8gUm90aGVyCgogICAgICAgICAgICAgICAgIyBleHRyYWN0IG5lZWRlZCBkYXRhCiAgICAgICAgICAgICAgICBteSAkTm90aWZ5ID0gJEVzY2FsYXRpb257ICRNYXB7JEtleX0gLiAnTm90aWZ5JyB9OwogICAgICAgICAgICAgICAgbXkgJFRpbWUgICA9ICRFc2NhbGF0aW9ueyAkTWFweyRLZXl9IC4gJ1RpbWUnIH07CgogICAgICAgICAgICAgICAgIyBzZXQgbm90aWZpY2F0aW9uIGlmIG5vdGlmeSAlIGlzIHJlYWNoZWQKICAgICAgICAgICAgICAgIGlmICggJE5vdGlmeSAmJiAkVGltZSApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJFJlYWNoZWQgPSAxMDAgLSAoICRXb3JraW5nVGltZSAvICggJFRpbWUgKiA2MCAvIDEwMCApICk7CgogICAgICAgICAgICAgICAgICAgIGlmICggJFJlYWNoZWQgPj0gJE5vdGlmeSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7ICRNYXB7JEtleX0gLiAnVGltZU5vdGlmaWNhdGlvbicgfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHRpY2tldCBpcyBvdmVydGltZSAoJFRpbWVUaWxsRXNjYWxhdGlvbiA8IDApCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbXkgJFN0YXJ0VGltZU9iaiA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKIyBSb3RoZXIgT1NTIC8gYXZvaWQgbG9uZyBlc2NhbGF0aW9uIGNhbGN1bGF0aW9ucwojICAgICAgICAgICAgICAgICAgICAgICBFcG9jaCA9PiAkVGlja2V0eyRLZXl9CiAgICAgICAgICAgICAgICAgICAgICAgIEVwb2NoID0+ICRFc2NhbGF0aW9uVGltZSwKIyBFTyBSb3RoZXIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICREZWx0YU9iaiA9ICRTdGFydFRpbWVPYmotPkRlbHRhKAogICAgICAgICAgICAgICAgICAgIERhdGVUaW1lT2JqZWN0ID0+ICREYXRlVGltZU9iamVjdCwKICAgICAgICAgICAgICAgICAgICBGb3JXb3JraW5nVGltZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIENhbGVuZGFyICAgICAgID0+ICRFc2NhbGF0aW9ue0NhbGVuZGFyfSwKICAgICAgICAgICAgICAgICk7CgojIFJvdGhlciBPU1MgLyBhdm9pZCBsb25nIGVzY2FsYXRpb24gY2FsY3VsYXRpb25zCiMgICAgICAgICAgICAgICAkV29ya2luZ1RpbWUgPSAwOwojICAgICAgICAgICAgICAgaWYgKCAkRGVsdGFPYmogJiYgJERlbHRhT2JqLT57QWJzb2x1dGVTZWNvbmRzfSApIHsKIyAgICAgICAgICAgICAgICAgICAkV29ya2luZ1RpbWUgPSAnLScgLiAkRGVsdGFPYmotPntBYnNvbHV0ZVNlY29uZHN9OwojICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJFdvcmtpbmdUaW1lIC09ICREZWx0YU9iaiA/ICREZWx0YU9iai0+e0Fic29sdXRlU2Vjb25kc30gOiAwOwojIEVPIFJvdGhlcgoKICAgICAgICAgICAgICAgICMgc2V0IGVzY2FsYXRpb24KICAgICAgICAgICAgICAgICREYXRheyAkTWFweyRLZXl9IC4gJ1RpbWVFc2NhbGF0aW9uJyB9ID0gMTsKICAgICAgICAgICAgfQoKIyBSb3RoZXIgT1NTIC8gYXZvaWQgbG9uZyBlc2NhbGF0aW9uIGNhbGN1bGF0aW9ucwogICAgICAgICAgICAjIGNhY2hlIHRoZSB2YWx1ZXMgZm9yIGxvbmcgdGltZXNwYW5zCiAgICAgICAgICAgIGlmICggYWJzKCAkVGltZVRpbGxFc2NhbGF0aW9uICkgPiAkTWF4VW5jYWNoZWQgJiYKICAgICAgICAgICAgICAgICMgYW5kIGEgc3VjY2Vzc2Z1bCBjYWxjdWxhdGlvbiBvZiAkV29ya2luZ1RpbWUKICAgICAgICAgICAgICAgICggKCAhJFN0b3JlZFRpbWUgJiYgJFdvcmtpbmdUaW1lICkgfHwgKCAkV29ya2luZ1RpbWUgIT0gJFN0b3JlZFRpbWUtPntXb3JraW5nVGltZX0gKSApICkgewoKICAgICAgICAgICAgICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgICAgIFR5cGUgID0+ICdFc2NhbGF0aW9uV29ya2luZ1RpbWUnLAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRUaWNrZXR7VGlja2V0SUR9Lic6OicuJEtleS4nOjonLiRFc2NhbGF0ZWQsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBFc2NhbGF0aW9uVGltZSA9PiAkVGlja2V0eyAkS2V5IH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtpbmdUaW1lICAgID0+ICRXb3JraW5nVGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgTGFzdFRpbWUgICAgICAgPT4gJERhdGVUaW1lT2JqZWN0LT5Ub0Vwb2NoKCksCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBUVEwgICA9PiA2MCAqIDYwICogMjQgKiA1LCAjIGZpdmUgZGF5cwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQojIEVPIFJvdGhlcgoKICAgICAgICAgICAgbXkgJERlc3RpbmF0aW9uRGF0ZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRXBvY2ggPT4gJFRpY2tldHskS2V5fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApOwoKICAgICAgICAgICAgJERhdGF7ICRNYXB7JEtleX0gLiAnVGltZURlc3RpbmF0aW9uVGltZScgfSA9ICRUaWNrZXR7JEtleX07CiAgICAgICAgICAgICREYXRheyAkTWFweyRLZXl9IC4gJ1RpbWVEZXN0aW5hdGlvbkRhdGUnIH0gPSAkRGVzdGluYXRpb25EYXRlLT5Ub1N0cmluZygpOwogICAgICAgICAgICAkRGF0YXsgJE1hcHskS2V5fSAuICdUaW1lV29ya2luZ1RpbWUnIH0gICAgID0gJFdvcmtpbmdUaW1lOwogICAgICAgICAgICAkRGF0YXsgJE1hcHskS2V5fSAuICdUaW1lJyB9ICAgICAgICAgICAgICAgID0gJFRpbWVUaWxsRXNjYWxhdGlvbjsKCiAgICAgICAgICAgICMgc2V0IGdsb2JhbCBlc2NhbGF0aW9uIGF0dHJpYnV0ZXMgKHNldCB0aGUgZXNjYWxhdGlvbiB3aGljaCBpcyB0aGUgZmlyc3QgaW4gdGltZSkKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgISREYXRhe0VzY2FsYXRpb25EZXN0aW5hdGlvblRpbWV9CiAgICAgICAgICAgICAgICB8fCAkRGF0YXtFc2NhbGF0aW9uRGVzdGluYXRpb25UaW1lfSA+ICRUaWNrZXR7JEtleX0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJERhdGF7RXNjYWxhdGlvbkRlc3RpbmF0aW9uVGltZX0gPSAkVGlja2V0eyRLZXl9OwogICAgICAgICAgICAgICAgJERhdGF7RXNjYWxhdGlvbkRlc3RpbmF0aW9uRGF0ZX0gPSAkRGVzdGluYXRpb25EYXRlLT5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgJERhdGF7RXNjYWxhdGlvblRpbWVXb3JraW5nVGltZX0gPSAkV29ya2luZ1RpbWU7CiAgICAgICAgICAgICAgICAkRGF0YXtFc2NhbGF0aW9uVGltZX0gICAgICAgICAgICA9ICRUaW1lVGlsbEVzY2FsYXRpb247CgogICAgICAgICAgICAgICAgIyBlc2NhbGF0aW9uIHRpbWUgaW4gcmVhZGFibGUgd2F5CiAgICAgICAgICAgICAgICAkRGF0YXtFc2NhbGF0aW9uRGVzdGluYXRpb25Jbn0gPSAnJzsKICAgICAgICAgICAgICAgICRXb3JraW5nVGltZSA9IGFicygkV29ya2luZ1RpbWUpOwogICAgICAgICAgICAgICAgaWYgKCAkV29ya2luZ1RpbWUgPj0gMzYwMCApIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtFc2NhbGF0aW9uRGVzdGluYXRpb25Jbn0gLj0gaW50KCAkV29ya2luZ1RpbWUgLyAzNjAwICkgLiAnaCAnOwogICAgICAgICAgICAgICAgICAgICRXb3JraW5nVGltZSA9ICRXb3JraW5nVGltZQogICAgICAgICAgICAgICAgICAgICAgICAtICggaW50KCAkV29ya2luZ1RpbWUgLyAzNjAwICkgKiAzNjAwICk7ICAgICMgcmVtb3ZlIGFscmVhZHkgc2hvd24gaG91cnMKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggJFdvcmtpbmdUaW1lIDw9IDM2MDAgfHwgaW50KCAkV29ya2luZ1RpbWUgLyA2MCApICkgewogICAgICAgICAgICAgICAgICAgICREYXRhe0VzY2FsYXRpb25EZXN0aW5hdGlvbklufSAuPSBpbnQoICRXb3JraW5nVGltZSAvIDYwICkgLiAnbSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAlRGF0YTsKICAgIH0KCn0KCjE7Cgo=