<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>Webservice-CustomerOperations</Name>
    <Version>11.1.1</Version>
    <Vendor>Perl-Services.de</Vendor>
    <URL>http://www.perl-services.de</URL>
    <License>GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007</License>
    <ChangeLog Date="2026-10-09 14:41:41" Version="11.1.1">Initial Release.</ChangeLog>
    <Description Lang="de">Verbesserungen am GenericInterface</Description>
    <Description Lang="en">Enhancements for the GenericInterface</Description>
    <Framework>11.1.x</Framework>
    <BuildCommitID>5a1a820bc14fe1107bcee5bbfead341bbc44fa29</BuildCommitID>
    <BuildDate>2026-10-09 14:41:41</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Kernel/GenericInterface/Operation/Customer/Common.pm" Permission="660" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAxOCBQZXJsLVNlcnZpY2VzLmRlLCBodHRwOi8vcGVybC1zZXJ2aWNlcy5kZQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkN1c3RvbWVyOjpDb21tb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwp1c2UgTUlNRTo6QmFzZTY0KCk7CnVzZSBNYWlsOjpBZGRyZXNzOwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkN1c3RvbWVyOjpDb21tb24gLSBCYXNlIGNsYXNzIGZvciBhbGwgQ3VzdG9tZXIgT3BlcmF0aW9ucwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBJbml0KCkKCmluaXRpYWxpemUgdGhlIG9wZXJhdGlvbiBieSBjaGVja2luZyB0aGUgd2ViIHNlcnZpY2UgY29uZmlndXJhdGlvbiBhbmQgZ2F0aGVyIG9mIHRoZSBkeW5hbWljIGZpZWxkcwoKICAgIG15ICRSZXR1cm4gPSAkQ29tbW9uT2JqZWN0LT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAxLAogICAgKTsKCnJldHVybnM6CgogICAgJFJldHVybiA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAgaW4gY2FzZSBvZiBmYWlsdXJlLAogICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgTWVzc2FnZScsCiAgICB9Cgo9Y3V0CgpzdWIgSW5pdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkCiAgICBpZiAoICEkUGFyYW17V2Vic2VydmljZUlEfSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gV2Vic2VydmljZUlEISIsCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGdldCB3ZWIgc2VydmljZSBjb25maWd1cmF0aW9uCiAgICBteSAkV2Vic2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyktPldlYnNlcnZpY2VHZXQoCiAgICAgICAgSUQgPT4gJFBhcmFte1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRXZWJzZXJ2aWNlKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnQ291bGQgbm90IGRldGVybWluZSBXZWIgc2VydmljZSBjb25maWd1cmF0aW9uJwogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDdXN0b21lcjo6Q29tbW9uOjpuZXcoKScsCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMKICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlID0+IFsgJ0N1c3RvbWVyVXNlcicsICdDdXN0b21lckNvbXBhbnknLCBdLAogICAgKTsKCiAgICAjIGNyZWF0ZSBhIER5bmFtaWMgRmllbGRzIGxvb2t1cCB0YWJsZSAoYnkgbmFtZSkKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkICggJER5bmFtaWNGaWVsZExpc3QtPkAqICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIHVubGVzcyAkRHluYW1pY0ZpZWxkOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIHVubGVzcyBJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkKTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCB1bmxlc3MgJER5bmFtaWNGaWVsZC0+e05hbWV9OwoKICAgICAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZExvb2t1cH0tPnsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgfTsKfQoKPWhlYWQyIFZhbGlkYXRlVXNlcklEKCkKCmNoZWNrcyBpZiB0aGUgZ2l2ZW4gdXNlciBJRCBpcyB2YWxpZC4KCiAgICBteSAkU3VjY2VzcyA9ICRDb21tb25PYmplY3QtPlZhbGlkYXRlVXNlcklEKAogICAgICAgIFVzZXJJRCA9PiAxMjMsCiAgICApOwoKcmV0dXJucwoKICAgICRTdWNjZXNzID0gMSAgICAgICAgICAgICMgb3IgdW5kZWYKCj1jdXQKCnN1YiBWYWxpZGF0ZVVzZXJJRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtVc2VySUR9OwoKICAgIHJldHVybiAkU2VsZi0+X1ZhbGlkYXRlVXNlcigKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gfHwgJycsCiAgICApOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==</File>
        <File Location="Kernel/GenericInterface/Operation/Customer/CustomerUpsert.pm" Permission="660" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAxOCBQZXJsLVNlcnZpY2VzLmRlLCBodHRwOi8vcGVybC1zZXJ2aWNlcy5kZQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkN1c3RvbWVyOjpDdXN0b21lclVwc2VydDsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb21tb24KICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDdXN0b21lcjo6Q29tbW9uCik7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNBcnJheVJlZldpdGhEYXRhIElzSGFzaFJlZldpdGhEYXRhIElzU3RyaW5nIElzU3RyaW5nV2l0aERhdGEpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDdXN0b21lcjo6Q3VzdG9tZXJVcHNlcnQgLSBHZW5lcmljSW50ZXJmYWNlIEN1c3RvbWVyIEN1c3RvbWVyVXBzZXJ0IE9wZXJhdGlvbiBiYWNrZW5kCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIERlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRCApKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkN1c3RvbWVyVXBzZXJ0Jyk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUnVuKCkKCnBlcmZvcm0gQ3VzdG9tZXJVcHNlcnQgT3BlcmF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGFibGUgdG8gYWNjZXB0Cm9uZSBvciBtb3JlIGN1c3RvbWVyIGVudHJpZXMgaW4gb25lIGNhbGwgYW5kIHJldHVybnMgc3VjY2Vzc2Z1bGx5Cmluc2VydGVkIG9yIHVwZGF0ZWQgY3VzdG9tZXIgSURzLgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAnc29tZSBhZ2VudCBsb2dpbicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlckxvZ2luIG9yIFNlc3Npb25JRCBpcyByZXF1aXJlZAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gMTIzLAogICAgICAgICAgICBQYXNzd29yZCAgPT4gJ3NvbWUgcGFzc3dvcmQnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIFVzZXJMb2dpbiBpcyBzZW50IHRoZW4gUGFzc3dvcmQgaXMgcmVxdWlyZWQKCiAgICAgICAgICAgIEN1c3RvbWVyID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2luZ2xlIGN1c3RvbWVyIG9yIGN1c3RvbWVyIGxpc3QgaXMgcmVxdWlyZWQKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICAgICAgICAgICAgID0+ICd0ZXN0LmNvbScsCiAgICAgICAgICAgICAgICBDdXN0b21lckNvbXBhbnlJRCAgICAgICA9PiAnb2xkdGVzdC5jb20nLCAgICAgICAgICAgICAgICMgcmVxdWlyZWQgZm9yIEN1c3RvbWVySUQtdXBkYXRlIChpZiBubyBzdWNoIGN1c3RvbWVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZXhpc3RzLCB0aGlzIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgZGVmYXVsdCBtYXBwaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIGluc3RlYWQgYSBuZXcgY3VzdG9tZXIgdmlhIEN1c3RvbWVySUQgaXMgaW5zZXJ0ZWQpCiAgICAgICAgICAgICAgICBDdXN0b21lckNvbXBhbnlOYW1lICAgICA9PiAnVGVzdCBJbmMuJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueVN0cmVldCAgID0+ICc1MjAxIEJsdWUgTGFnb29uIERyaXZlJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueVpJUCAgICAgID0+ICczMzEyNicsCiAgICAgICAgICAgICAgICBDdXN0b21lckNvbXBhbnlMb2NhdGlvbiA9PiAnTWlhbWknLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55Q291bnRyeSAgPT4gJ1VTQScsCiAgICAgICAgICAgICAgICBDdXN0b21lckNvbXBhbnlVUkwgICAgICA9PiAnaHR0cDovL2V4YW1wbGUuY29tJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueUNvbW1lbnQgID0+ICdzb21lIGNvbW1lbnQnLAogICAgICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ3VzdG9tZXIgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICAgICAgICAgPT4gJ3Rlc3QuY29tJywKICAgICAgICAgICAgICAgICAgICBDdXN0b21lckNvbXBhbnlJRCAgID0+ICdvbGR0ZXN0LmNvbScsCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55TmFtZSA9PiAnVGVzdCBJbmMuJywKICAgICAgICAgICAgICAgICAgICBDdXN0b21lckNvbXBhbnlTdHJlZXQgICA9PiAnNTIwMSBCbHVlIExhZ29vbiBEcml2ZScsCiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJDb21wYW55WklQICAgICAgPT4gJzMzMTI2JywKICAgICAgICAgICAgICAgICAgICBDdXN0b21lckNvbXBhbnlMb2NhdGlvbiA9PiAnTWlhbWknLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueUNvdW50cnkgID0+ICdVU0EnLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueVVSTCAgICAgID0+ICdodHRwOi8vZXhhbXBsZS5jb20nLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyQ29tcGFueUNvbW1lbnQgID0+ICdzb21lIGNvbW1lbnQnLAogICAgICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICMgLiAuIC4KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEKICAgICAgICBFcnJvck1lc3NhZ2UgICAgPT4gJycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICAgICAgICAgID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVzdWx0IGRhdGEgcGF5bG9hZCBhZnRlciBPcGVyYXRpb24KICAgICAgICAgICAgQ3VzdG9tZXJJRCA9PiAnMTIzJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm5zIHNpbmdsZSBjdXN0b21lciBvciBsaXN0IG9mIGFsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN1Y2Nlc3NmdWxseSBpbnNlcnRlZC91cGRhdGVkIGN1c3RvbWVyCiAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gWycxMjMnLCAnNDU2J10sCiAgICAgICAgICAgIEVycm9yICAgICAgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdWxkIG5vdCByZXR1cm4gZXJyb3JzCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0N1c3RvbWVyLlVwc2VydC5FcnJvckNvZGUnCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0Vycm9yIERlc2NyaXB0aW9uJwogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRJbml0UmVzdWx0ID0gJFNlbGYtPkluaXQoCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICk7CgogICAgaWYgKCAhJEluaXRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1dlYnNlcnZpY2UuSW52YWxpZENvbmZpZ3VyYXRpb24nLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJEluaXRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICgKICAgICAgICAhJFBhcmFte0RhdGF9LT57VXNlckxvZ2lufQogICAgICAgICYmICEkUGFyYW17RGF0YX0tPntTZXNzaW9uSUR9CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQ3VzdG9tZXJVcHNlcnQuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQ3VzdG9tZXJVcHNlcnQ6IFVzZXJMb2dpbiBvciBTZXNzaW9uSUQgaXMgcmVxdWlyZWQhIiwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0RhdGF9LT57VXNlckxvZ2lufSApIHsKCiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9LT57UGFzc3dvcmR9ICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0N1c3RvbWVyVXBzZXJ0Lk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJDdXN0b21lclVwc2VydDogUGFzc3dvcmQgb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYXV0aGVudGljYXRlIHVzZXIKICAgIG15ICggJFVzZXJJRCwgJFVzZXJUeXBlICkgPSAkU2VsZi0+QXV0aCgKICAgICAgICAlUGFyYW0sCiAgICApOwoKICAgIGlmICggISRVc2VySUQgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDdXN0b21lclVwc2VydC5BdXRoRmFpbCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQ3VzdG9tZXJVcHNlcnQ6IFVzZXIgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQhIiwKICAgICAgICApOwogICAgfQoKICAgIG15ICRQZXJtaXNzaW9uVXNlcklEID0gJFVzZXJJRDsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEN1c3RvbWVyKSkgewogICAgICAgIGlmICggISRQYXJhbXtEYXRhfS0+eyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDdXN0b21lclVwc2VydC5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQ3VzdG9tZXJVcHNlcnQ6ICROZWVkZWQgcGFyYW1ldGVyIGlzIG1pc3Npbmcgb3Igbm90IHZhbGlkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRTaW5nbGVDdXN0b21lcjsKICAgIG15ICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIERhdGEgICAgPT4ge30sCiAgICB9OwoKICAgICMgdHJhbnNmb3JtIHNpbmdsZSBjdXN0b21lcnMgdG8gYW4gYXJyYXkgcmVmZXJlbmNlCiAgICBpZiAoICFJc0FycmF5UmVmV2l0aERhdGEoICRQYXJhbXtEYXRhfXtDdXN0b21lcn0gKSApIHsKICAgICAgICAkUGFyYW17RGF0YX17Q3VzdG9tZXJ9ID0gWyAkUGFyYW17RGF0YX17Q3VzdG9tZXJ9IF07CiAgICAgICAgJFNpbmdsZUN1c3RvbWVyID0gMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRSZXN1bHQtPntEYXRhfS0+e0N1c3RvbWVySUR9ID0gW107CiAgICB9CgogICAgIyB1cHNlcnQgZWFjaCBjdXN0b21lcgogICAgZm9yIG15ICRDdXN0b21lciAoIEB7ICRQYXJhbXtEYXRhfXtDdXN0b21lcn0gfSApIHsKCiAgICAgICAgIyByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7JEN1c3RvbWVyfSApIHsKICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRDdXN0b21lci0+eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiByZWYgJEN1c3RvbWVyLT57JEF0dHJpYnV0ZX0gZXEgJ0hBU0gnOwogICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiByZWYgJEN1c3RvbWVyLT57JEF0dHJpYnV0ZX0gZXEgJ0FSUkFZJzsKCiAgICAgICAgICAgICRDdXN0b21lci0+eyRBdHRyaWJ1dGV9ID1+IHN7XEFccyt9e307CiAgICAgICAgICAgICRDdXN0b21lci0+eyRBdHRyaWJ1dGV9ID1+IHN7XHMrXHp9e307CiAgICAgICAgfQoKICAgICAgICBteSAkQ3VzdG9tZXJDaGVjayA9ICRTZWxmLT5fQ2hlY2tDdXN0b21lciggQ3VzdG9tZXIgPT4gJEN1c3RvbWVyICk7CgogICAgICAgICMgaWYgYW4gZXJyb3Igb2NjdXJzLCByZXR1cm4sIGJ1dCBzdGlsbCBpbmNsdWRlIGFsbCBjdXN0b21lcnMgYWxyZWFkeSB1cHNlcnRlZAogICAgICAgIGlmICggISRDdXN0b21lckNoZWNrLT57U3VjY2Vzc30gKSB7CiAgICAgICAgICAgICRSZXN1bHQtPntTdWNjZXNzfSAgICAgICA9IDA7CiAgICAgICAgICAgICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9ICA9ICIkQ3VzdG9tZXJDaGVjay0+e0Vycm9yQ29kZX06ICRDdXN0b21lckNoZWNrLT57RXJyb3JNZXNzYWdlfSI7CiAgICAgICAgICAgICRSZXN1bHQtPntEYXRhfS0+e0Vycm9yfSA9IHsKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAkQ3VzdG9tZXJDaGVjay0+e0Vycm9yQ29kZX0sCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJEN1c3RvbWVyQ2hlY2stPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICB9OwoKICAgICAgICAgICAgcmV0dXJuICRSZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICBteSAkVXBzZXJ0UmVzdWx0ID0gJFNlbGYtPl9DdXN0b21lclVwc2VydCgKICAgICAgICAgICAgQ3VzdG9tZXIgPT4gJEN1c3RvbWVyLAogICAgICAgICAgICBVc2VySUQgICA9PiAkVXNlcklELAogICAgICAgICk7CgogICAgICAgICMgaWYgYW4gZXJyb3Igb2NjdXJzLCByZXR1cm4sIGJ1dCBzdGlsbCBpbmNsdWRlIGFsbCBjdXN0b21lcnMgYWxyZWFkeSB1cHNlcnRlZAogICAgICAgIGlmICggISRVcHNlcnRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgJFJlc3VsdC0+e1N1Y2Nlc3N9ICAgICAgPSAwOwogICAgICAgICAgICAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSA9ICRVcHNlcnRSZXN1bHQtPntFcnJvck1lc3NhZ2V9OwoKICAgICAgICAgICAgcmV0dXJuICRSZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoJFNpbmdsZUN1c3RvbWVyKSB7CiAgICAgICAgICAgICRSZXN1bHQtPntEYXRhfS0+e0N1c3RvbWVySUR9ID0gJFVwc2VydFJlc3VsdC0+e0N1c3RvbWVySUR9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHVzaCBAeyAkUmVzdWx0LT57RGF0YX0tPntDdXN0b21lcklEfSB9LCAkVXBzZXJ0UmVzdWx0LT57Q3VzdG9tZXJJRH07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUmVzdWx0Owp9Cgo9YmVnaW4gSW50ZXJuYWw6Cgo9aGVhZDIgX0NoZWNrQ3VzdG9tZXIoKQoKY2hlY2tzIGlmIHRoZSBnaXZlbiBjdXN0b21lciBwYXJhbWV0ZXJzIGFyZSB2YWxpZC4KCiAgICBteSAkQ3VzdG9tZXJDaGVjayA9ICRPcGVyYXRpb25PYmplY3QtPl9DaGVja0N1c3RvbWVyKAogICAgICAgIEN1c3RvbWVyID0+ICRDdXN0b21lciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGwgY3VzdG9tZXIgcGFyYW1ldGVycwogICAgKTsKCiAgICByZXR1cm5zOgoKICAgICRDdXN0b21lckNoZWNrID0gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBldmVyeXRoaW5nIGlzIE9LCiAgICB9CgogICAgJEN1c3RvbWVyQ2hlY2sgPSB7CiAgICAgICAgRXJyb3JDb2RlICAgID0+ICdGdW5jdGlvbi5FcnJvcicsICAgICAgICAgICAgICAgICAgICAjIGlmIGVycm9yCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdFcnJvciBkZXNjcmlwdGlvbicsCiAgICB9Cgo9Y3V0CgpzdWIgX0NoZWNrQ3VzdG9tZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ3VzdG9tZXIgPSAkUGFyYW17Q3VzdG9tZXJ9OwoKICAgICMgY2hlY2sgY3VzdG9tZXIgaW50ZXJuYWxseQogICAgZm9yIG15ICROZWVkZWQgKHF3KEN1c3RvbWVySUQgQ3VzdG9tZXJDb21wYW55TmFtZSkpIHsKICAgICAgICBpZiAoICEkQ3VzdG9tZXItPnskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQ3VzdG9tZXJVcHNlcnQuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkN1c3RvbWVyVXBzZXJ0OiBDdXN0b21lci0+JE5lZWRlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZyEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGlmIGV2ZXJ5dGhpbmcgaXMgT0sgdGhlbiByZXR1cm4gU3VjY2VzcwogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9Owp9Cgo9aGVhZDIgX0N1c3RvbWVyVXBzZXJ0KCkKCnVwZGF0ZXMgb3IgaW5zZXJ0cyBhIGN1c3RvbWVyLgoKICAgIG15ICRSZXNwb25zZSA9ICRPcGVyYXRpb25PYmplY3QtPl9DdXN0b21lclVwc2VydCgKICAgICAgICBDdXN0b21lciA9PiAkQ3VzdG9tZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxsIGN1c3RvbWVyIHBhcmFtZXRlcnMKICAgICAgICBVc2VySUQgICA9PiAxMjMsCiAgICApOwoKICAgIHJldHVybnM6CgogICAgJFJlc3BvbnNlID0gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBldmVyZXRoaW5nIGlzIE9LCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gMTIzLAogICAgICAgIH0KICAgIH0KCiAgICAkUmVzcG9uc2UgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIHVuZXhwZWN0ZWQgZXJyb3IKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIiRQYXJhbXtFcnJvckNvZGV9OiAkUGFyYW17RXJyb3JNZXNzYWdlfSIsCiAgICB9Cgo9Y3V0CgpzdWIgX0N1c3RvbWVyVXBzZXJ0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEN1c3RvbWVyICAgPSAkUGFyYW17Q3VzdG9tZXJ9OwogICAgbXkgJEN1c3RvbWVySUQgPSAkQ3VzdG9tZXItPntDdXN0b21lcklEfTsKCiAgICAjIGN1c3RvbWVycyBhcmUgYnkgZGVmYXVsdCB2YWxpZAogICAgJEN1c3RvbWVyLT57VmFsaWRJRH0gLy89IDE7CgogICAgIyBnZXQgY3VzdG9tZXIgb2JqZWN0CiAgICBteSAkQ3VzdG9tZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJDb21wYW55Jyk7CgogICAgIyBjaGVjayB3aGV0aGVyIHRoaXMgY3VzdG9tZXIgZXhpc3RzICh1cGRhdGUpIG9yIGlzIG5ldyAoaW5zZXJ0KQogICAgJEN1c3RvbWVyLT57Q3VzdG9tZXJDb21wYW55SUR9IHx8PSAkQ3VzdG9tZXItPntDdXN0b21lcklEfTsKCiAgICBteSAlQ29tcGFueSA9ICRDdXN0b21lck9iamVjdC0+Q3VzdG9tZXJDb21wYW55R2V0KCBDdXN0b21lcklEID0+ICRDdXN0b21lci0+e0N1c3RvbWVyQ29tcGFueUlEfSApOwogICAgaWYgKCVDb21wYW55KSB7CgogICAgICAgICMgY2hlY2sgaWYgbmV3IEN1c3RvbWVySUQgYWxyZWFkeSBleGlzdHMKICAgICAgICBpZiAoICRDdXN0b21lci0+e0N1c3RvbWVySUR9IG5lICRDdXN0b21lci0+e0N1c3RvbWVyQ29tcGFueUlEfSApIHsKICAgICAgICAgICAgbXkgJVJlc3VsdCA9ICRDdXN0b21lck9iamVjdC0+Q3VzdG9tZXJDb21wYW55R2V0KCBVc2VyID0+ICRDdXN0b21lci0+e0N1c3RvbWVySUR9ICk7CiAgICAgICAgICAgIGlmICglUmVzdWx0KSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCAnQ3VzdG9tZXIgIiVzIiBhbHJlYWR5IGV4aXN0cy4nLCAkQ3VzdG9tZXItPntDdXN0b21lcklEfSApLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ3VzdG9tZXJPYmplY3QtPkN1c3RvbWVyQ29tcGFueVVwZGF0ZSgKICAgICAgICAgICAgJXskQ3VzdG9tZXJ9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ3VzdG9tZXIgY291bGQgbm90IGJlIHVwZGF0ZWQsIHBsZWFzZSBjb250YWN0IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvcicsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgJEN1c3RvbWVySUQgPSAkQ3VzdG9tZXJPYmplY3QtPkN1c3RvbWVyQ29tcGFueUFkZCgKICAgICAgICAgICAgJXskQ3VzdG9tZXJ9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJEN1c3RvbWVySUQgKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ3VzdG9tZXIgY291bGQgbm90IGJlIGluc2VydGVkLCBwbGVhc2UgY29udGFjdCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3InLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICBteSAlQ3VzdG9tZXJEYXRhID0gJEN1c3RvbWVyT2JqZWN0LT5DdXN0b21lckNvbXBhbnlHZXQoCiAgICAgICAgQ3VzdG9tZXJJRCA9PiAkQ3VzdG9tZXJJRCwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVDdXN0b21lckRhdGEgKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdDb3VsZCBub3QgZ2V0IG5ldyBjdXN0b21lciBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnRhY3QgdGhlIHN5c3RlbScKICAgICAgICAgICAgICAgIC4gJyBhZG1pbmlzdHJhdG9yJywKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyAgICA9PiAxLAogICAgICAgIEN1c3RvbWVySUQgPT4gJEN1c3RvbWVySUQsCiAgICB9Owp9CgoxOwoKPWVuZCBJbnRlcm5hbDoKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=</File>
        <File Location="Kernel/GenericInterface/Operation/Customer/CustomerUserUpsert.pm" Permission="660" Encode="Base64">IyAtLQojIENvcHlyaWdodCAoQykgMjAxOCBQZXJsLVNlcnZpY2VzLmRlLCBodHRwOi8vcGVybC1zZXJ2aWNlcy5kZQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkN1c3RvbWVyOjpDdXN0b21lclVzZXJVcHNlcnQ7Cgp1c2UgdjUuMjQ7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBwYXJlbnQgcXcoCiAgICBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uCiAgICBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q3VzdG9tZXI6OkNvbW1vbgopOwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZyBJc1N0cmluZ1dpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q3VzdG9tZXI6OkN1c3RvbWVyVXNlclVwc2VydCAtIEdlbmVyaWNJbnRlcmZhY2UgQ3VzdG9tZXIgQ3VzdG9tZXJVc2VyVXBzZXJ0IE9wZXJhdGlvbiBiYWNrZW5kCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIERlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRCApKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkN1c3RvbWVyVXNlclVwc2VydCcpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFJ1bigpCgpwZXJmb3JtIEN1c3RvbWVyVXNlclVwc2VydCBPcGVyYXRpb24uIFRoaXMgZnVuY3Rpb24gaXMgYWJsZSB0byBhY2NlcHQKb25lIG9yIG1vcmUgY3VzdG9tZXIgdXNlciBlbnRyaWVzIGluIG9uZSBjYWxsIGFuZCByZXR1cm5zIHN1Y2Nlc3NmdWxseQppbnNlcnRlZCBvciB1cGRhdGVkIGN1c3RvbWVyIHVzZXIgbG9naW5zLgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAnc29tZSBhZ2VudCBsb2dpbicsICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXJMb2dpbiBvciBTZXNzaW9uSUQgaXMgcmVxdWlyZWQKICAgICAgICAgICAgU2Vzc2lvbklEID0+IDEyMywKICAgICAgICAgICAgUGFzc3dvcmQgID0+ICdzb21lIHBhc3N3b3JkJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgVXNlckxvZ2luIGlzIHNlbnQgdGhlbiBQYXNzd29yZCBpcyByZXF1aXJlZAoKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2luZ2xlIGN1c3RvbWVyIHVzZXIgb3IgY3VzdG9tZXIgdXNlciBsaXN0IGlzIHJlcXVpcmVkCiAgICAgICAgICAgICAgICBVc2VyTG9naW4gICAgICA9PiAndGMnLAogICAgICAgICAgICAgICAgSUQgICAgICAgICAgICAgPT4gJ29sZHRjJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXF1aXJlZCBmb3IgVXNlckxvZ2luLXVwZGF0ZSAoaWYgbm8gc3VjaCBjdXN0b21lciB1c2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGV4aXN0cywgdGhpcyB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGRlZmF1bHQgbWFwcGluZyBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5zdGVhZCBhIG5ldyBjdXN0b21lciB1c2VyIHZpYSBVc2VyTG9naW4gaXMgaW5zZXJ0ZWQpCiAgICAgICAgICAgICAgICBVc2VyRmlyc3RuYW1lICA9PiAnVGVzdCcsCiAgICAgICAgICAgICAgICBVc2VyTGFzdG5hbWUgICA9PiAnQ3VzdG9tZXInLAogICAgICAgICAgICAgICAgVXNlclBhc3N3b3JkICAgPT4gJ3NvbWUtcGFzcycsICAgICAgICAgICAgICAgICAgICAgICAgIyBub3QgcmVxdWlyZWQKICAgICAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgID0+ICd0ZXN0LmN1c3RvbWVyQGV4YW1wbGUuY29tJywKICAgICAgICAgICAgICAgIFVzZXJDdXN0b21lcklEID0+ICcxMjM0NScsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVxdWlyZWQgd2hlbiBpbnNlcnRpbmcKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luICAgICAgPT4gJ3RjJywKICAgICAgICAgICAgICAgICAgICBVc2VyUGFzc3dvcmQgICA9PiAnc29tZS1wYXNzJywKICAgICAgICAgICAgICAgICAgICBVc2VyRmlyc3RuYW1lICA9PiAnVGVzdCcsCiAgICAgICAgICAgICAgICAgICAgVXNlckxhc3RuYW1lICAgPT4gJ0N1c3RvbWVyJywKICAgICAgICAgICAgICAgICAgICBVc2VyRW1haWwgICAgICA9PiAndGVzdC5jdXN0b21lckBleGFtcGxlLmNvbScsCiAgICAgICAgICAgICAgICAgICAgVXNlckN1c3RvbWVySUQgPT4gJzEyMzQ1JywKICAgICAgICAgICAgICAgICAgICBWYWxpZElEICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAjIC4gLiAuCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICApOwoKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICAgICAgICAgID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlc3VsdCBkYXRhIHBheWxvYWQgYWZ0ZXIgT3BlcmF0aW9uCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAndGMnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJldHVybnMgc2luZ2xlIGN1c3RvbWVyIHVzZXIgb3IgbGlzdCBvZiBhbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3VjY2Vzc2Z1bGx5IGluc2VydGVkL3VwZGF0ZWQgY3VzdG9tZXIgdXNlcnMKICAgICAgICAgICAgVXNlckxvZ2luID0+IFsndGMnLCAndGMyJ10sCiAgICAgICAgICAgIEVycm9yICAgICA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNob3VsZCBub3QgcmV0dXJuIGVycm9ycwogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDdXN0b21lclVzZXIuVXBzZXJ0LkVycm9yQ29kZScKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgRGVzY3JpcHRpb24nCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEluaXRSZXN1bHQgPSAkU2VsZi0+SW5pdCgKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgKTsKCiAgICBpZiAoICEkSW5pdFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnV2Vic2VydmljZS5JbnZhbGlkQ29uZmlndXJhdGlvbicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkSW5pdFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKAogICAgICAgICEkUGFyYW17RGF0YX0tPntVc2VyTG9naW59CiAgICAgICAgJiYgISRQYXJhbXtEYXRhfS0+e1Nlc3Npb25JRH0KICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDdXN0b21lclVzZXJVcHNlcnQuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQ3VzdG9tZXJVc2VyVXBzZXJ0OiBVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1VzZXJMb2dpbn0gKSB7CgogICAgICAgIGlmICggISRQYXJhbXtEYXRhfS0+e1Bhc3N3b3JkfSApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDdXN0b21lclVzZXJVcHNlcnQuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkN1c3RvbWVyVXNlclVwc2VydDogUGFzc3dvcmQgb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYXV0aGVudGljYXRlIHVzZXIKICAgIG15ICggJFVzZXJJRCwgJFVzZXJUeXBlICkgPSAkU2VsZi0+QXV0aCgKICAgICAgICAlUGFyYW0sCiAgICApOwoKICAgIGlmICggISRVc2VySUQgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDdXN0b21lclVzZXJVcHNlcnQuQXV0aEZhaWwnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkN1c3RvbWVyVXNlclVwc2VydDogVXNlciBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJFBlcm1pc3Npb25Vc2VySUQgPSAkVXNlcklEOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ3VzdG9tZXJVc2VyKSkgewogICAgICAgIGlmICggISRQYXJhbXtEYXRhfS0+eyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDdXN0b21lclVzZXJVcHNlcnQuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkN1c3RvbWVyVXNlclVwc2VydDogJE5lZWRlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZyBvciBub3QgdmFsaWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFNpbmdsZUN1c3RvbWVyVXNlcjsKICAgIG15ICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIERhdGEgICAgPT4ge30sCiAgICB9OwoKICAgICMgdHJhbnNmb3JtIHNpbmdsZSBjdXN0b21lciB1c2VycyB0byBhbiBhcnJheSByZWZlcmVuY2UKICAgIGlmICggIUlzQXJyYXlSZWZXaXRoRGF0YSggJFBhcmFte0RhdGF9e0N1c3RvbWVyVXNlcn0gKSApIHsKICAgICAgICAkUGFyYW17RGF0YX17Q3VzdG9tZXJVc2VyfSA9IFsgJFBhcmFte0RhdGF9e0N1c3RvbWVyVXNlcn0gXTsKICAgICAgICAkU2luZ2xlQ3VzdG9tZXJVc2VyID0gMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRSZXN1bHQtPntEYXRhfS0+e1VzZXJMb2dpbn0gPSBbXTsKICAgIH0KCiAgICAjIHVwc2VydCBlYWNoIGN1c3RvbWVyIHVzZXIKICAgIGZvciBteSAkQ3VzdG9tZXJVc2VyICggQHsgJFBhcmFte0RhdGF9e0N1c3RvbWVyVXNlcn0gfSApIHsKCiAgICAgICAgIyByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7JEN1c3RvbWVyVXNlcn0gKSB7CiAgICAgICAgICAgIG5leHQgQVRUUklCVVRFIGlmICEkQ3VzdG9tZXJVc2VyLT57JEF0dHJpYnV0ZX07CiAgICAgICAgICAgIG5leHQgQVRUUklCVVRFIGlmIHJlZiAkQ3VzdG9tZXJVc2VyLT57JEF0dHJpYnV0ZX0gZXEgJ0hBU0gnOwogICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiByZWYgJEN1c3RvbWVyVXNlci0+eyRBdHRyaWJ1dGV9IGVxICdBUlJBWSc7CgogICAgICAgICAgICAkQ3VzdG9tZXJVc2VyLT57JEF0dHJpYnV0ZX0gPX4gc3tcQVxzK317fTsKICAgICAgICAgICAgJEN1c3RvbWVyVXNlci0+eyRBdHRyaWJ1dGV9ID1+IHN7XHMrXHp9e307CiAgICAgICAgfQoKICAgICAgICBteSAkQ3VzdG9tZXJVc2VyQ2hlY2sgPSAkU2VsZi0+X0NoZWNrQ3VzdG9tZXJVc2VyKCBDdXN0b21lclVzZXIgPT4gJEN1c3RvbWVyVXNlciApOwoKICAgICAgICAjIGlmIGFuIGVycm9yIG9jY3VycywgcmV0dXJuLCBidXQgc3RpbGwgaW5jbHVkZSBhbGwgY3VzdG9tZXIgdXNlcnMgYWxyZWFkeSB1cHNlcnRlZAogICAgICAgIGlmICggISRDdXN0b21lclVzZXJDaGVjay0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAkUmVzdWx0LT57U3VjY2Vzc30gICAgICAgPSAwOwogICAgICAgICAgICAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSAgPSAiJEN1c3RvbWVyVXNlckNoZWNrLT57RXJyb3JDb2RlfTogJEN1c3RvbWVyVXNlckNoZWNrLT57RXJyb3JNZXNzYWdlfSI7CiAgICAgICAgICAgICRSZXN1bHQtPntEYXRhfS0+e0Vycm9yfSA9IHsKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAkQ3VzdG9tZXJVc2VyQ2hlY2stPntFcnJvckNvZGV9LAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRDdXN0b21lclVzZXJDaGVjay0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgIH07CgogICAgICAgICAgICByZXR1cm4gJFJlc3VsdDsKICAgICAgICB9CgogICAgICAgIG15ICRVcHNlcnRSZXN1bHQgPSAkU2VsZi0+X0N1c3RvbWVyVXNlclVwc2VydCgKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRDdXN0b21lclVzZXIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkVXNlcklELAogICAgICAgICk7CgogICAgICAgICMgaWYgYW4gZXJyb3Igb2NjdXJzLCByZXR1cm4sIGJ1dCBzdGlsbCBpbmNsdWRlIGFsbCBjdXN0b21lciB1c2VycyBhbHJlYWR5IHVwc2VydGVkCiAgICAgICAgaWYgKCAhJFVwc2VydFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAkUmVzdWx0LT57U3VjY2Vzc30gICAgICA9IDA7CiAgICAgICAgICAgICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9ID0gJFVwc2VydFJlc3VsdC0+e0Vycm9yTWVzc2FnZX07CgogICAgICAgICAgICByZXR1cm4gJFJlc3VsdDsKICAgICAgICB9CgogICAgICAgIGlmICgkU2luZ2xlQ3VzdG9tZXJVc2VyKSB7CiAgICAgICAgICAgICRSZXN1bHQtPntEYXRhfS0+e1VzZXJMb2dpbn0gPSAkVXBzZXJ0UmVzdWx0LT57VXNlckxvZ2lufTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHB1c2ggQHsgJFJlc3VsdC0+e0RhdGF9LT57VXNlckxvZ2lufSB9LCAkVXBzZXJ0UmVzdWx0LT57VXNlckxvZ2lufTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRSZXN1bHQ7Cn0KCj1iZWdpbiBJbnRlcm5hbDoKCj1oZWFkMiBfQ2hlY2tDdXN0b21lclVzZXIoKQoKY2hlY2tzIGlmIHRoZSBnaXZlbiBjdXN0b21lciB1c2VyIHBhcmFtZXRlcnMgYXJlIHZhbGlkLgoKICAgIG15ICRDdXN0b21lclVzZXJDaGVjayA9ICRPcGVyYXRpb25PYmplY3QtPl9DaGVja0N1c3RvbWVyVXNlcigKICAgICAgICBDdXN0b21lclVzZXIgPT4gJEN1c3RvbWVyVXNlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGwgY3VzdG9tZXIgdXNlciBwYXJhbWV0ZXJzCiAgICApOwoKICAgIHJldHVybnM6CgogICAgJEN1c3RvbWVyVXNlckNoZWNrID0gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGV2ZXJ5dGhpbmcgaXMgT0sKICAgIH0KCiAgICAkQ3VzdG9tZXJVc2VyQ2hlY2sgPSB7CiAgICAgICAgRXJyb3JDb2RlICAgID0+ICdGdW5jdGlvbi5FcnJvcicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgZXJyb3IKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0Vycm9yIGRlc2NyaXB0aW9uJywKICAgIH0KCj1jdXQKCnN1YiBfQ2hlY2tDdXN0b21lclVzZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ3VzdG9tZXJVc2VyID0gJFBhcmFte0N1c3RvbWVyVXNlcn07CgogICAgIyBjaGVjayBjdXN0b21lciB1c2VyIGludGVybmFsbHkKICAgIGZvciBteSAkTmVlZGVkIChxdyhVc2VyRmlyc3RuYW1lIFVzZXJMYXN0bmFtZSBVc2VyTG9naW4gVXNlckVtYWlsKSkgewogICAgICAgIGlmICggISRDdXN0b21lclVzZXItPnskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQ3VzdG9tZXJVc2VyVXBzZXJ0Lk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJDdXN0b21lclVzZVVwc2VydHQ6IEN1c3RvbWVyVXNlci0+JE5lZWRlZCBwYXJhbWV0ZXIgaXMgbWlzc2luZyEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGlmIGV2ZXJ5dGhpbmcgaXMgT0sgdGhlbiByZXR1cm4gU3VjY2VzcwogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9Owp9Cgo9aGVhZDIgX0N1c3RvbWVyVXNlclVwc2VydCgpCgp1cGRhdGVzIG9yIGluc2VydHMgYSBjdXN0b21lciB1c2VyLgoKICAgIG15ICRSZXNwb25zZSA9ICRPcGVyYXRpb25PYmplY3QtPl9DdXN0b21lclVzZXJVcHNlcnQoCiAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICRDdXN0b21lclVzZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsbCBjdXN0b21lciB1c2VyIHBhcmFtZXRlcnMKICAgICAgICBVc2VySUQgICAgICAgPT4gMTIzLAogICAgKTsKCiAgICByZXR1cm5zOgoKICAgICRSZXNwb25zZSA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgZXZlcmV0aGluZyBpcyBPSwogICAgICAgIERhdGEgICAgPT4gewogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAxMjMsCiAgICAgICAgfQogICAgfQoKICAgICRSZXNwb25zZSA9IHsKICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgdW5leHBlY3RlZCBlcnJvcgogICAgICAgIEVycm9yTWVzc2FnZSA9PiAiJFBhcmFte0Vycm9yQ29kZX06ICRQYXJhbXtFcnJvck1lc3NhZ2V9IiwKICAgIH0KCj1jdXQKCnN1YiBfQ3VzdG9tZXJVc2VyVXBzZXJ0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEN1c3RvbWVyVXNlciA9ICRQYXJhbXtDdXN0b21lclVzZXJ9OwogICAgbXkgJFVzZXJMb2dpbiAgICA9ICRDdXN0b21lclVzZXItPntVc2VyTG9naW59OwoKICAgICMgY3VzdG9tZXIgdXNlcnMgYXJlIGJ5IGRlZmF1bHQgdmFsaWQKICAgICRDdXN0b21lclVzZXItPntWYWxpZElEfSAvLz0gMTsKCiAgICAjIGdldCBjdXN0b21lciB1c2VyIG9iamVjdAogICAgbXkgJEN1c3RvbWVyVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKTsKCiAgICAjIGNoZWNrIHdoZXRoZXIgdGhpcyBjdXN0b21lciB1c2VyIGV4aXN0cyAodXBkYXRlKSBvciBpcyBuZXcgKGluc2VydCkKICAgICRDdXN0b21lclVzZXItPntJRH0gfHw9ICRDdXN0b21lclVzZXItPntVc2VyTG9naW59OwoKICAgIG15ICVVc2VyID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICBVc2VyICAgPT4gJEN1c3RvbWVyVXNlci0+e0lEfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwogICAgaWYgKCVVc2VyKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJVcGRhdGUoCiAgICAgICAgICAgICV7JEN1c3RvbWVyVXNlcn0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdDdXN0b21lciBjb3VsZCBub3QgYmUgdXBkYXRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yJywKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIHdoZW4gYWRkaW5nIGEgbmV3IGN1c3RvbWVyIHVzZXIsIHRoZSBjdXN0b21lciAoY29tcGFueSkgaXMgcmVxdWlyZWQKICAgICAgICBpZiAoICEkQ3VzdG9tZXJVc2VyLT57VXNlckN1c3RvbWVySUR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdDdXN0b21lclVzZXJVcHNlcnQuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkN1c3RvbWVyVXNlVXBzZXJ0dDogQ3VzdG9tZXJVc2VyLT5Vc2VyQ3VzdG9tZXJJRCBwYXJhbWV0ZXIgaXMgbWlzc2luZyEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFVzZXJMb2dpbiA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckFkZCgKICAgICAgICAgICAgJXskQ3VzdG9tZXJVc2VyfSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRVc2VyTG9naW4gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ3VzdG9tZXIgY291bGQgbm90IGJlIGluc2VydGVkLCBwbGVhc2UgY29udGFjdCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3InLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICBteSAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgVXNlciAgID0+ICRVc2VyTG9naW4sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVDdXN0b21lclVzZXJEYXRhICkgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnQ291bGQgbm90IGdldCBuZXcgY3VzdG9tZXIgdXNlciBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnRhY3QgdGhlIHN5c3RlbScKICAgICAgICAgICAgICAgIC4gJyBhZG1pbmlzdHJhdG9yJywKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyAgID0+IDEsCiAgICAgICAgVXNlckxvZ2luID0+ICRVc2VyTG9naW4sCiAgICB9Owp9CgoxOwoKPWVuZCBJbnRlcm5hbDoKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=</File>
        <File Location="Kernel/Config/Files/XML/WebserviceCustomerOperations.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI0N1c3RvbWVyOjpDdXN0b21lclVwc2VydCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gbGF5ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5DdXN0b21lclVwc2VydDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+Q3VzdG9tZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI0N1c3RvbWVyOjpDdXN0b21lclVzZXJVcHNlcnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+Q3VzdG9tZXJVc2VyVXBzZXJ0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5DdXN0b21lcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkdlbmVyaWNJbnRlcmZhY2VPcGVyYXRpb25EZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+Cg==</File>
    </Filelist>
</otrs_package>