CTI
9.0.9
OFORK
https://o-fork.de/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
New release.
New release.
New release.
New release.
New release.
Init release.
The CTI module.
Das CTI Modul.
9.0.x
2020-05-31 13:25:46
localhost
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvZm9ya19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJBcHBsaWNhdGlvbiI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRUaWNrZXRQaG9uZUNUSSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLiBFLiBnLiAnb3Rycy9pbmRleC5wbD9BY3Rpb249QWdlbnRUaWNrZXRQaG9uZUNUSTtDYWxsZXJJRD1YWFg7TVNOPVhYWCcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5DVEk8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkNUSTo6TVNOOjpBY3Rpb246Ok1hcCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5FeHBlcnQgU2V0dGluZyAtIG5vdCBuZWVkZWQgaW4gc3RhbmRhcmQgc2V0dXAhIERlZmluZXMgdGhlIEFjdGlvbiBiYXNlZCBvbiBNU04sIGUuIGcuIHJvdXRlIGluY29taW5nIGNhbGxzIHRvIGRpZmZlcmVudCBmcm9udGVuZCBtb2R1bGVzIChLZXk9TnVtYmVyLFZhbHVlPUZyb250ZW5kLU1vZHVsZSBlLiBnLiBLZXk9MTIyMixWYWx1ZT1BZ2VudFRpY2tldFBob25lSG90bGluZSkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpDVEk8L05hdmlnYXRpb24+CiAgICAgICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iIj5BZ2VudFRpY2tldFBob25lPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iQ1RJOjpNYXhVc2VycyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIGNvbmZpZ3VyYXRpb24gZGVmaW5lcyB0aGUgbWF4aW11bSBvZiBDdXN0b21lclVzZXJzIHRoYXQgc2hvdWxkIGdldCBhZGRlZCB0byB0aGUgdGhlIEFnZW50VGlja2V0UGhvbmUgdmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkNUSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSJeXGQrJCI+MTA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkNUSTo6Q2FsbGVySURSZWdFeCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSBDYWxsZXJJRC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkNUSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPl4uKyQ8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkNUSTo6RmlsdGVyQ2FsbGVyUmVnRXgiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBjb25maWd1cmF0aW9uIGRlZmluZXMgYSBsaXN0IG9mIHJlcGxhY2VtZW50IHJlZ2V4ZXMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGZpbHRlciB0aGUgY2FsbGVyIGlkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6Q1RJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IltcKFwpXSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJcLSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJccyoiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iXCsiPio8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L29mb3JrX2NvbmZpZz4K
IyAtLQojIEtlcm5lbC9Db25maWcvQ1RJLnBtCiMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgT0ZPUkssIGh0dHBzOi8vby1mb3JrLmRlCiMgLS0KIyAkSWQ6IENUSS5wbSx2IDEuMS4xLjEgMjAyMC8wNC8wMSAxMzoyODo0OCB1ZCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OkNvbmZpZzo6RmlsZXM6OkNUSTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSB1dGY4OwoKc3ViIExvYWQgewogICAgbXkgKCAkRmlsZSwgJFNlbGYgKSA9IEBfOwoKICAgICMgY2hhbmdlZCBjb25maWcgdG8gYWxzbyB1c2UgcGhvbmUgbnVtYmVyIGFzIHNlYWNoIGZpZWxkCiAgICBTT1VSQ0U6CiAgICBmb3IgbXkgJENvdW50ICggJycsIDEgLi4gMTAgKSB7CgogICAgICAgIG5leHQgU09VUkNFIGlmICEkU2VsZi0+eyJDdXN0b21lclVzZXIkQ291bnQifTsKCiAgICAgICAgbXkgJE1hcCA9ICRTZWxmLT57IkN1c3RvbWVyVXNlciRDb3VudCJ9LT57TWFwfTsKICAgICAgICBuZXh0IFNPVVJDRSBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRNYXApOwoKICAgICAgICBFTlRSWToKICAgICAgICBmb3IgbXkgJE1hcEVudHJ5ICggQHskTWFwfSApIHsKICAgICAgICAgICAgbmV4dCBFTlRSWSBpZiAkTWFwRW50cnktPlswXSBuZSAnVXNlclBob25lJzsKCiAgICAgICAgICAgIG15ICRQaG9uZUtleSA9ICRNYXBFbnRyeS0+WzJdOwoKICAgICAgICAgICAgbGFzdCBFTlRSWSBpZiBncmVwIHsgJFBob25lS2V5IGVxICRfIH0gQHsgJFNlbGYtPnsiQ3VzdG9tZXJVc2VyJENvdW50In0tPntDdXN0b21lclVzZXJTZWFyY2hGaWVsZHN9IH07CgogICAgICAgICAgICBwdXNoIEB7ICRTZWxmLT57IkN1c3RvbWVyVXNlciRDb3VudCJ9LT57Q3VzdG9tZXJVc2VyU2VhcmNoRmllbGRzfSB9LCAkUGhvbmVLZXk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9DVEkucG0KIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBPRk9SSywgaHR0cHM6Ly9vLWZvcmsuZGUKIyAtLQojICRJZDogZGVfQ1RJLnBtLHYgMS4xLjEuMSAyMDIwLzA0LzAxIDEzOjI4OjQ4IHVkIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX0NUSTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyJGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLiBFLiBnLiAnb3Rycy9pbmRleC5wbD9BY3Rpb249QWdlbnRUaWNrZXRQaG9uZUNUSTtDYWxsZXJJRD1YWFg7TVNOPVhYWCcuIn0gPSAiRnJvbnRlbmQtTW9kdWwtUmVnaXN0cmllcnVuZyBmw7xyIGRpZSBBZ2VudC1TY2huaXR0c3RlbGxlLiBaLkIuICdvdHJzL2luZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldFBob25lQ1RJO0NhbGxlcklEPVhYWDtNU049WFhYJy4iOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsiRXhwZXJ0IFNldHRpbmcgLSBub3QgbmVlZGVkIGluIHN0YW5kYXJkIHNldHVwISBEZWZpbmVzIHRoZSBBY3Rpb24gYmFzZWQgb24gTVNOLCBlLiBnLiByb3V0ZSBpbmNvbWluZyBjYWxscyB0byBkaWZmZXJlbnQgZnJvbnRlbmQgbW9kdWxlcyAoS2V5PU51bWJlcixWYWx1ZT1Gcm9udGVuZC1Nb2R1bGUgZS4gZy4gS2V5PTEyMjIsVmFsdWU9QWdlbnRUaWNrZXRQaG9uZUhvdGxpbmUpLiJ9ID0gIkV4cGVydCBTZXR0aW5nIC0gd2lyZCBiZWkgZGVyIFN0YW5kYXJkaW5zdGFsbGF0aW9uIG5pY2h0IGJlbsO2dGlndCEgRGVmaW5pZXJ0IGRpZSBBa3Rpb24gYmFzaWVyZW5kIGF1ZiBNU04sIGUuIEcuIFJvdXRldCBlaW5nZWhlbmRlIEFucnVmZSBhbiB2ZXJzY2hpZWRlbmUgRnJvbnRlbmQtTW9kdWxlIChLZXkgPSBOdW1iZXIsIFZhbHVlID0gRnJvbnRlbmQtTW9kdWwgZS4gRy4gS2V5ID0gMTIyMiwgVmFsdWUgPSBBZ2VudFRpY2tldFBob25lSG90bGluZSkuIjsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57IlRoaXMgY29uZmlndXJhdGlvbiBkZWZpbmVzIHRoZSBtYXhpbXVtIG9mIEN1c3RvbWVyVXNlcnMgdGhhdCBzaG91bGQgZ2V0IGFkZGVkIHRvIHRoZSB0aGUgQWdlbnRUaWNrZXRQaG9uZSB2aWV3LiJ9ID0gIkRpZXNlIEtvbmZpZ3VyYXRpb24gZGVmaW5pZXJ0IGRhcyBNYXhpbXVtIGRlciBDdXN0b21lclVzZXJzLCBkaWUgaW4gZGVyIEFnZW50VGlja2V0UGhvbmUtQW5zaWNodCBoaW56dWdlZsO8Z3Qgd2VyZGVuIHNvbGxlbi4iOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsiUmVndWxhciBleHByZXNzaW9uIGZvciB0aGUgQ2FsbGVySUQuIn0gPSAiUmVndWzDpHJlciBBdXNkcnVjayBmw7xyIGRpZSBDYWxsZXJJRC4iOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsiVGhpcyBjb25maWd1cmF0aW9uIGRlZmluZXMgYSBsaXN0IG9mIHJlcGxhY2VtZW50IHJlZ2V4ZXMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGZpbHRlciB0aGUgY2FsbGVyIGlkLiJ9ID0gIkRpZXNlIEtvbmZpZ3VyYXRpb24gZGVmaW5pZXJ0IGVpbmUgTGlzdGUgdm9uIHp1IGVyc2V0emVuZGVuIHJlZ3Vsw6RyZW4gQXVzZHLDvGNrZW4genVyIEZpbHRlcnVuZyBkZXIgVGVsZWZvbm51bW1lciAoQ2FsbGVySUQpLiI7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50VGlja2V0UGhvbmVDVEkucG0KIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBPRk9SSywgaHR0cHM6Ly9vLWZvcmsuZGUKIyAtLQojICRJZDogQWdlbnRUaWNrZXRQaG9uZUNUSS5wbSx2IDEuMS4xLjEgMjAyMC8wNC8wMSAxMzoyODo0OCB1ZCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50VGlja2V0UGhvbmVDVEk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXI7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDdXN0b21lclVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IGNhbGwgcGFyYW1zCiAgICBteSAkQ2FsbGVySUQgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2FsbGVySUQnICk7CiAgICBteSAkTVNOICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnTVNOJyApOwogICAgbXkgJFNlbGVjdGVkU2NyZWVuID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NjcmVlbicgKSB8fCAnJzsKCiAgICAjIGdldCByb3V0ZSBmb3IgTVNOCiAgICBteSAkU2NyZWVuID0gJ0FjdGlvbj1BZ2VudFRpY2tldFBob25lJzsKCiAgICAjIHJlZGlyZWN0IHRvIHNjcmVlbiBpZiBubyBjYWxsZXIgSUQgb3IgY2FsbGVyIElEIGRvZXMgbm90IG1hdGNoIGNhbGxlciBJRCByZWd1bGFyIGV4cHJlc3Npb24KICAgIG15ICRDYWxsZXJJRFJlZ0V4ID0gJENvbmZpZ09iamVjdC0+R2V0KCdDVEk6OkNhbGxlcklEUmVnRXgnKTsKICAgIGlmICgKICAgICAgICAhZGVmaW5lZCAkQ2FsbGVySUQKICAgICAgICB8fCAoCiAgICAgICAgICAgIGRlZmluZWQgJENhbGxlcklEUmVnRXgKICAgICAgICAgICAgJiYgJENhbGxlcklEICF+IG17JENhbGxlcklEUmVnRXh9CiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICRTY3JlZW4gKTsKICAgIH0KCiAgICBpZiAoJE1TTikgewogICAgICAgIG15ICRNU05NYXAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NUSTo6TVNOOjpBY3Rpb246Ok1hcCcpOwogICAgICAgIGlmICgkTVNOTWFwKSB7CiAgICAgICAgICAgIG15ICRTY3JlZW5NYXAgPSAnJzsKICAgICAgICAgICAgS0VZOgogICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyRNU05NYXB9ICkgewoKICAgICAgICAgICAgICAgICMgc2V0IGRlZmF1bHQKICAgICAgICAgICAgICAgIGlmICggISRLZXkgJiYgISRTY3JlZW5NYXAgJiYgJE1TTk1hcC0+eyRLZXl9ICkgewogICAgICAgICAgICAgICAgICAgICRTY3JlZW5NYXAgPSAkTVNOTWFwLT57JEtleX07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbmV4dCBLRVkgaWYgJE1TTiAhfiAvJEtleS87CgogICAgICAgICAgICAgICAgIyBzZXQgbmV3IHJvdXRlCiAgICAgICAgICAgICAgICAkU2NyZWVuTWFwID0gJE1TTk1hcC0+eyRLZXl9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNldCBuZXcgc2NyZWVuCiAgICAgICAgICAgIGlmICgkU2NyZWVuTWFwKSB7CiAgICAgICAgICAgICAgICAkU2NyZWVuID0gIkFjdGlvbj0kU2NyZWVuTWFwIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGZpbHRlciBjYWxsZXIgaWQKICAgICRDYWxsZXJJRCA9ICRTZWxmLT5GaWx0ZXJDYWxsZXJJRCgKICAgICAgICBDYWxsZXJJRCA9PiAkQ2FsbGVySUQsCiAgICApOwoKICAgICMgZmluZCBjdXN0b21lcgogICAgbXkgJUN1c3RvbWVyVXNlckxpc3QgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclNlYXJjaCgKICAgICAgICBTZWFyY2ggPT4gJENhbGxlcklELAogICAgKTsKICAgIGlmICggISVDdXN0b21lclVzZXJMaXN0ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gJFNjcmVlbiApOwogICAgfQoKICAgIGlmICggJFNlbGVjdGVkU2NyZWVuIGVxICdBZ2VudEN1c3RvbWVySW5mb3JtYXRpb25DZW50ZXInICkgewoKICAgICAgICBteSAkVXNlcklEICAgICA9ICcnOwogICAgICAgIG15ICRVc2VyTmFtZSAgID0gJyc7CiAgICAgICAgbXkgJEN1c3RvbWVySUQgPSAnJzsKCiAgICAgICAgIyBub3RlOiB1c2VkIGxhc3QgdXNlcgogICAgICAgIGZvciBteSAkS2V5Q3VzdG9tZXJVc2VyICggc29ydCBrZXlzICVDdXN0b21lclVzZXJMaXN0ICkgewogICAgICAgICAgICAkVXNlcklEICAgPSAkS2V5Q3VzdG9tZXJVc2VyOwogICAgICAgICAgICAkVXNlck5hbWUgPSAkQ3VzdG9tZXJVc2VyTGlzdHskS2V5Q3VzdG9tZXJVc2VyfTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGN1c3RvbWVyIGRhdGEgZm9yIEFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcgogICAgICAgIG15ICVDdXN0b21lclVzZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgVXNlciA9PiAkVXNlcklELAogICAgICAgICk7CgogICAgICAgICRVc2VyTmFtZSAgID0gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkVXNlck5hbWUpOwogICAgICAgICRDdXN0b21lcklEID0gJExheW91dE9iamVjdC0+TGlua0VuY29kZSggJEN1c3RvbWVyVXNlckRhdGF7VXNlckN1c3RvbWVySUR9ICk7CgogICAgICAgICRTY3JlZW4gPSAnQWN0aW9uPUFnZW50Q3VzdG9tZXJJbmZvcm1hdGlvbkNlbnRlcic7CiAgICAgICAgJFNjcmVlbiAuPSAiO0N1c3RvbWVySUQ9JEN1c3RvbWVySUQiOwogICAgfQogICAgZWxzaWYgKCAkU2VsZWN0ZWRTY3JlZW4gZXEgJ0FnZW50Q3VzdG9tZXJVc2VySW5mb3JtYXRpb25DZW50ZXInICkgewogICAgICAgIG15ICRDdXN0b21lclVzZXJJRDsKCiAgICAgICAgIyBub3RlOiB1c2VkIGxhc3QgdXNlcgogICAgICAgIGZvciBteSAkS2V5Q3VzdG9tZXJVc2VyICggc29ydCBrZXlzICVDdXN0b21lclVzZXJMaXN0ICkgewogICAgICAgICAgICAkQ3VzdG9tZXJVc2VySUQgPSAkS2V5Q3VzdG9tZXJVc2VyOwogICAgICAgIH0KCiAgICAgICAgJEN1c3RvbWVyVXNlcklEID0gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkQ3VzdG9tZXJVc2VySUQpOwoKICAgICAgICAkU2NyZWVuID0gJ0FjdGlvbj1BZ2VudEN1c3RvbWVyVXNlckluZm9ybWF0aW9uQ2VudGVyJzsKICAgICAgICAkU2NyZWVuIC49ICI7Q3VzdG9tZXJVc2VySUQ9JEN1c3RvbWVyVXNlcklEIjsKICAgIH0KICAgIGVsc2UgewogICAgICAgICMgcmVkaXJlY3QgdG8gbmV3IHNjcmVlbiB3aXRoIHNlbGVjdGVkIGN1c3RvbWVyCiAgICAgICAgJFNjcmVlbiAuPSAiO1N1YmFjdGlvbj1TdG9yZU5ldztDdXN0b21lclNlbGVjdGVkPTEiOwoKICAgICAgICBteSAkTWF4VXNlcnMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NUSTo6TWF4VXNlcnMnKTsKCiAgICAgICAgbXkgJEN1c3RvbWVySUQgICAgICAgICAgICAgPSAnJzsKICAgICAgICBteSAkU2VsZWN0ZWRDdXN0b21lclVzZXJJRCA9ICcnOwogICAgICAgIG15ICRDb3VudGVyICAgICAgICAgICAgICAgID0gMDsKICAgICAgICBDVVNUT01FUjoKICAgICAgICBmb3IgbXkgJEN1c3RvbWVyVXNlcklEICggc29ydCBrZXlzICVDdXN0b21lclVzZXJMaXN0ICkgewoKICAgICAgICAgICAgbXkgJFVzZXJOYW1lID0gJEN1c3RvbWVyVXNlckxpc3R7JEN1c3RvbWVyVXNlcklEfTsKCiAgICAgICAgICAgIG15ICVDdXN0b21lclVzZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgIFVzZXIgPT4gJEN1c3RvbWVyVXNlcklELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzdG9yZSBmaXJzdCB0byBzZWxlY3QgaXQKICAgICAgICAgICAgaWYgKCAhJENvdW50ZXIgKSB7CiAgICAgICAgICAgICAgICAkU2VsZWN0ZWRDdXN0b21lclVzZXJJRCA9ICRDdXN0b21lclVzZXJJRDsKICAgICAgICAgICAgICAgICRDdXN0b21lcklEICAgICAgICAgICAgID0gJEN1c3RvbWVyVXNlckRhdGF7VXNlckN1c3RvbWVySUR9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAgICAgJFVzZXJOYW1lID0gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkVXNlck5hbWUpOwogICAgICAgICAgICAkU2NyZWVuIC49ICI7Q3VzdG9tZXJLZXlfJENvdW50ZXI9JEN1c3RvbWVyVXNlcklEO0N1c3RvbWVyVGlja2V0VGV4dF8kQ291bnRlcj0kVXNlck5hbWUiOwoKICAgICAgICAgICAgbmV4dCBDVVNUT01FUiBpZiAhJE1heFVzZXJzOwogICAgICAgICAgICBuZXh0IENVU1RPTUVSIGlmICRDb3VudGVyIDwgJE1heFVzZXJzOwogICAgICAgICAgICBsYXN0IENVU1RPTUVSOwogICAgICAgIH0KICAgICAgICAkQ3VzdG9tZXJJRCA9ICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJEN1c3RvbWVySUQpOwoKICAgICAgICAkU2NyZWVuIC49ICI7U3ViamVjdD07Q2hhbGxlbmdlVG9rZW49JFNlbGYtPntVc2VyQ2hhbGxlbmdlVG9rZW59IjsKICAgICAgICAkU2NyZWVuIC49ICI7U2VsZWN0ZWRDdXN0b21lclVzZXI9JFNlbGVjdGVkQ3VzdG9tZXJVc2VySUQ7Q3VzdG9tZXJJRD0kQ3VzdG9tZXJJRCI7CiAgICAgICAgJFNjcmVlbiAuPSAiO0N1c3RvbWVyVGlja2V0Q291bnRlckZyb21DdXN0b21lcj0kQ291bnRlcjtFeHBhbmRDdXN0b21lck5hbWU9MyI7CiAgICB9CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAkU2NyZWVuICk7Cn0KCj1oZWFkMiBGaWx0ZXJDYWxsZXJJRCgpCgpUaGlzIGZ1bmN0aW9uIHdpbGwgZmlsdGVyIHRoZSBjYWxsZXIgaWQgYmFzZWQgb24gYSByZWdleCBsaXN0LgpUaGUgcmVzdWx0IGlzIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIGluOgpDVEk6OkZpbHRlckNhbGxlclJlZ0V4CgogICAgbXkgJENhbGxlcklEID0gJEZyb250ZW5kT2JqZWN0LT5GaWx0ZXJDYWxsZXJJRCgKICAgICAgICBDYWxsZXJJRCA9PiAnKzQ5IDExMTEnLAogICAgKTsKClJldHVybnM6CgogICAgbXkgJENhbGxlcklEID0gJzAwNDkxMTExJzsKCj1jdXQKCnN1YiBGaWx0ZXJDYWxsZXJJRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJExvZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgTkVFREVEOgogICAgZm9yIG15ICROZWVkZWQgKHF3KENhbGxlcklEKSkgewogICAgICAgIG5leHQgTkVFREVEIGlmIGRlZmluZWQgJFBhcmFteyROZWVkZWR9OwoKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJQYXJhbWV0ZXIgJyROZWVkZWQnIGlzIG5lZWRlZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRDYWxsZXJJRCA9ICRQYXJhbXtDYWxsZXJJRH07CgogICAgbXkgJUZpbHRlclJlZ0V4ID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdDVEk6OkZpbHRlckNhbGxlclJlZ0V4JykgfHwge30gfTsKCiAgICBmb3IgbXkgJFJlZ0V4U2VhcmNoICggc29ydCBrZXlzICVGaWx0ZXJSZWdFeCApIHsKICAgICAgICBteSAkUmVnRXhSZXBsYWNlID0gJEZpbHRlclJlZ0V4eyRSZWdFeFNlYXJjaH07CgogICAgICAgICRDYWxsZXJJRCA9fiBzeyRSZWdFeFNlYXJjaH17JFJlZ0V4UmVwbGFjZX14bXNpZzsKCiAgICAgICAgbXkgJU5hbWVkQ2FwdHVyZXMgPSAlKzsKCiAgICAgICAgJENhbGxlcklEID1+IHMvXFtcKlwqIFxcKFx3KykgXCpcKlxdLyROYW1lZENhcHR1cmVzeyQxfS94bXNnOwogICAgfQoKICAgIHJldHVybiAkQ2FsbGVySUQ7Cn0KCjE7Cg==