Our Logo
WebAsOne
Home
How To
Join US
Design
Design Block
Design Patterns
Animation
Themes
Fonts
Marketing
Hero
About
BIO
Contact
CTA
FAQ
Footer
Portfolio
Price
Service
Team
Testimonials
Pages
UI
ReactJS
SvelteJS
VueJS
Apps
OpenSource
Mini-Apps
Opencart-3
EasyAppointment1
Yii2
Yii2-Extra
RoleCommand
GoogleLogin
GoogleLogin-A
OpenSource
->
Yii2-Extra
->
RoleCommand
GoogleLogin
GoogleLogin-A
This version uses user/security/login
See
yii2-rbac.asoneshare.com/
b_codeEditor/id15-41,Click to clipboard
ezE6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6ICcnLAogICAgICAgICAgICAnRGF0YSc6ICc8P3BocCBcclxuJwogICAgICAgICAgICAgICAgICAgICcgICRjbGllbnRJRCA9ICcKICAgICAgICAgICAgICAgICAgICAiJzc2NDk5NzQzMTc1NC1wZmNpc2VmaXVlanNpbjNkNTVzaW0yNzB2MTVuNTRpMC5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAkY2xpZW50U2VjcmV0ID0gJwogICAgICAgICAgICAgICAgICAgICInR09DU1BYLW1UV2FqckFsa3lJeXEtenpvQ19QeDFGelV3ZTEnO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgJHJlZGlyZWN0VXJpID0gJ2h0dHBzOi8vX0hPU1RfJztcclxuIgogICAgICAgICAgICAgICAgICAgICc/PicsCiAgICAgICAgICAgICdGaWxlTmFtZSc6ICcuLi9waHAvZ2NvbmZpZy5waHAnLAogICAgICAgICAgICAnSXNUZXh0JzogJycsCiAgICAgICAgICAgICdNeU1vZHVsZSc6ICdiX2NvZGVFZGl0b3InLAogICAgICAgICAgICAnTmVlZENvcHknOiAnJywKICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAnJywKICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdhRmlsZScsCiAgICAgICAgICAgICdhTGFiZWwnOiAnZ2NvbmZpZy5waHAnLAogICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgJ3ljb2RlJzogJyd9LAogICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICdDb3B5VG9NeVBhZ2VPbmx5JzogJycsCiAgICAgICAgICAgICAgICdEYXRhJzogJzw/cGhwIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudElEID0gJwogICAgICAgICAgICAgICAgICAgICAgICInNzY0OTk3NDMxNzU0LXBmY2lzZWZpdWVqc2luM2Q1NXNpbTI3MHYxNW41NGkwLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tJztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnRTZWNyZXQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIidHT0NTUFgtbVRXYWpyQWxreUl5cS16em9DX1B4MUZ6VXdlMSc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAkcmVkaXJlY3RVcmkgPSAnaHR0cHM6Ly9fSE9TVF8nO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJz8+JywKICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJy4uL3BocC9nY29uZmlnLnBocCcsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAnJywKICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICAgICdOZWVkQ29weSc6ICcnLAogICAgICAgICAgICAgICAnTm90ZXMnOiAnJywKICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6ICcnLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICdnY29uZmlnLnBocCcsCiAgICAgICAgICAgICAgICdhc3ZnZmlsZSc6ICcnLAogICAgICAgICAgICAgICAneWNvZGUnOiAnJ319LAogMjogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJy8uLi9waHAvZ29vZ2xlJywKICAgICAgICAgICAgJ0NvcHlUb015UGFnZU9ubHknOiAxLAogICAgICAgICAgICAnRGF0YSc6ICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICJyZXF1aXJlIjoge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgImdvb2dsZS9hcGljbGllbnQiOiAiXjIuMTUuMCJcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfSxcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgInNjcmlwdHMiOiB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAicHJlLWF1dG9sb2FkLWR1bXAiOiAnCiAgICAgICAgICAgICAgICAgICAgJyJHb29nbGVcXFxcVGFza1xcXFxDb21wb3Nlcjo6Y2xlYW51cCJcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ31cclxuJywKICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ2NvbXBvc2VyLmpzb24nLAogICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICdOb3Rlcyc6ICcnLAogICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdhRmlsZScsCiAgICAgICAgICAgICdhTGFiZWwnOiAnY29tcG9zZXIuanNvbicsCiAgICAgICAgICAgICdhc3ZnZmlsZSc6ICcnLAogICAgICAgICAgICAneWNvZGUnOiAnJ30sCiAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnLy4uL3BocC9nb29nbGUnLAogICAgICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICAgICdEYXRhJzogJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgInJlcXVpcmUiOiB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAiZ29vZ2xlL2FwaWNsaWVudCI6ICJeMi4xNS4wIlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9LFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAic2NyaXB0cyI6IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICJwcmUtYXV0b2xvYWQtZHVtcCI6ICcKICAgICAgICAgICAgICAgICAgICAgICAnIkdvb2dsZVxcXFxUYXNrXFxcXENvbXBvc2VyOjpjbGVhbnVwIlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nLAogICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnY29tcG9zZXIuanNvbicsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnYl9jb2RlRWRpdG9yJywKICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICdjb21wb3Nlci5qc29uJywKICAgICAgICAgICAgICAgJ2FzdmdmaWxlJzogJycsCiAgICAgICAgICAgICAgICd5Y29kZSc6ICcnfX0sCiAzOiB7J2VuJzogeydDb3B5VG9NeVBhZ2VPbmx5JzogMSwKICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICdOb3Rlcyc6ICcnLAogICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0dQcmVJbmMnLAogICAgICAgICAgICAnYUxhYmVsJzogJ2ZvciBpbmRleC5waHAnLAogICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgJ2NvZGUnOiAnPD9waHBcclxuJwogICAgICAgICAgICAgICAgICAgICJpZiAoaXNzZXQoJF9HRVRbJ2NvZGUnXSkpIHtcclxuIgogICAgICAgICAgICAgICAgICAgICIgIHJlcXVpcmVfb25jZSAnLi4vcGhwL2dvb2dsZS92ZW5kb3IvYXV0b2xvYWQucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICIgIHJlcXVpcmVfb25jZSAnLi4vcGhwL2djb25maWcucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgIC8vIGNyZWF0ZSBDbGllbnQgUmVxdWVzdCB0byBhY2Nlc3MgR29vZ2xlIEFQSVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudCA9IG5ldyBHb29nbGVfQ2xpZW50KCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAkY2xpZW50LT5zZXRDbGllbnRJZCgkY2xpZW50SUQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0Q2xpZW50U2VjcmV0KCRjbGllbnRTZWNyZXQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0UmVkaXJlY3RVcmkoJHJlZGlyZWN0VXJpKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPmFkZFNjb3BlKCJlbWFpbCIpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+YWRkU2NvcGUoInByb2ZpbGUiKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICIgICRjbGllbnQtPmF1dGhlbnRpY2F0ZSgkX0dFVFsnY29kZSddKTtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICRnb29nbGVUb2tlbiA9ICRjbGllbnQtPmdldEFjY2Vzc1Rva2VuKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICBpZiAoIWlzc2V0KCRfU0VTU0lPTlsnZ29vZ2xlVG9rZW4nXSkpIHtcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgJF9TRVNTSU9OWydnb29nbGVUb2tlbiddID0gJGdvb2dsZVRva2VuO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICB0cnkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICRjbGllbnQtPnNldEFjY2Vzc1Rva2VuKCRnb29nbGVUb2tlbik7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICBoZWFkZXIoJ2xvY2F0aW9uOiBodHRwczovL19IT1NUXycpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIC8vIGdldCBwcm9maWxlIGluZm9cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJGdvb2dsZV9vYXV0aCA9IG5ldyAnCiAgICAgICAgICAgICAgICAgICAgJ0dvb2dsZV9TZXJ2aWNlX09hdXRoMigkY2xpZW50KTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJGdvb2dsZV9hY2NvdW50X2luZm8gPSAnCiAgICAgICAgICAgICAgICAgICAgJyRnb29nbGVfb2F1dGgtPnVzZXJpbmZvLT5nZXQoKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJGVtYWlsID0gICRnb29nbGVfYWNjb3VudF9pbmZvLT5lbWFpbDtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJG5hbWUgPSAgJGdvb2dsZV9hY2NvdW50X2luZm8tPm5hbWU7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICRjb25maWdbJ3BhcmFtcyddWydnbWFpbCddID0gJGVtYWlsO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAvL2VjaG8gImVtYWlsICIuJGVtYWlsLiIgbmFtZSAiLiRuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAvL2V4aXQoMCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICR1cmwgPSAiaHR0cHM6Ly9fSE9TVF8vd2ViYXNvbmVZaWkvY3JlYXRlVXNlci5waHAiOyAnCiAgICAgICAgICAgICAgICAgICAgJy8vIFJlcGxhY2Ugd2l0aCB5b3VyIHRhcmdldCBVUkxcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJGRhdGEgPSBhcnJheSgiZW1haWwiID0+ICRlbWFpbCwgIm5hbWUiID0+ICRuYW1lKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJG9wdGlvbnMgPSBhcnJheShcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAnaHR0cCcgPT4gYXJyYXkoXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICBcJ2hlYWRlclwnICA9PiAiQ29udGVudC10eXBlOiAnCiAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxcclxcbiIsXHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAnbWV0aG9kJyAgPT4gJ1BPU1QnLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgJ2NvbnRlbnQnID0+IGh0dHBfYnVpbGRfcXVlcnkoJGRhdGEpXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICApO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkY29udGV4dCAgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoJG9wdGlvbnMpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkcmVzdWx0ID0gZmlsZV9nZXRfY29udGVudHMoJHVybCwgZmFsc2UsICcKICAgICAgICAgICAgICAgICAgICAnJGNvbnRleHQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBpZiAoJHJlc3VsdCA9PT0gRkFMU0UpIHsgLyogSGFuZGxlIGVycm9yICovIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgJHBhc3N3b3JkPSIiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkdXNlcm5hbWU9IiI7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICRyID0gZXhwbG9kZSgnfCcsICAkcmVzdWx0KTtcclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgZm9yZWFjaCAoJHIgYXMgJHYpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICBlY2hvICR2LiI8YnIgLz4iO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICRhID0gZXhwbG9kZSgnOicsICR2KTtcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICBpZiAoJGFbMF0gPT0gJ1Bhc3N3b3JkJykge1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHBhc3N3b3JkID0gJGFbMV07XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICBpZiAoJGFbMF0gPT0gJ1VzZXJuYW1lJykge1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHVzZXJuYW1lID0gJGFbMV07XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIGVjaG8gIjxzY3JpcHQ+ICAgICAnCiAgICAgICAgICAgICAgICAgICAgImxvY2FsU3RvcmFnZS5zZXRJdGVtKCdnbWFpbFVzZXInLCAiCiAgICAgICAgICAgICAgICAgICAgJ1wnIi4kdXNlcm5hbWUuIlwnKTsiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAvL2VjaG8gIiAgICAgc2V0Y29va2llKFwnZ21haWxVc2VyLCAnCiAgICAgICAgICAgICAgICAgICAgJ1wnIi4kdXNlcm5hbWUuIlwnKTsiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAvL2VjaG8gIiAgICAgc2V0Y29va2llKFwnZ21haWxQYXNzd29yZFwnLCAnCiAgICAgICAgICAgICAgICAgICAgJ1wnIi4kcGFzc3dvcmQuIlwnKTsiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBlY2hvICIgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwnZ21haWxQYXNzd29yZFwnLCAnCiAgICAgICAgICAgICAgICAgICAgJ1wnIi4kcGFzc3dvcmQuIlwnKTsiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBlY2hvICI8L3NjcmlwdD4iO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICBlY2hvICc8c2NyaXB0PiB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICIKICAgICAgICAgICAgICAgICAgICAnImh0dHBzOi8vX0hPU1RfL2RlZmF1bHQvZW4tVVMvbmF2NmgwL3MvTG9naW4vP3I9dXNlciUyRnNlY3VyaXR5JTJGbG9naW4iOzwvc2NyaXB0PlwnO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgdW5zZXQoJF9TRVNTSU9OWyJnb29nbGVUb2tlbiJdKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAnICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJz8+JywKICAgICAgICAgICAgJ2Rlc2MnOiAnbWFpbiBpbmNsdWRlJ30sCiAgICAgJ2VuLVVTJzogeydDb3B5VG9NeVBhZ2VPbmx5JzogMSwKICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICAgICdOb3Rlcyc6ICcnLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0dQcmVJbmMnLAogICAgICAgICAgICAgICAnYUxhYmVsJzogJ2ZvciBpbmRleC5waHAnLAogICAgICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgICAgJ2NvZGUnOiAnPD9waHBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICJpZiAoaXNzZXQoJF9HRVRbJ2NvZGUnXSkpIHtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgIHJlcXVpcmVfb25jZSAnLi4vcGhwL2dvb2dsZS92ZW5kb3IvYXV0b2xvYWQucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgIHJlcXVpcmVfb25jZSAnLi4vcGhwL2djb25maWcucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIC8vIGNyZWF0ZSBDbGllbnQgUmVxdWVzdCB0byBhY2Nlc3MgR29vZ2xlIEFQSVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudCA9IG5ldyBHb29nbGVfQ2xpZW50KCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAkY2xpZW50LT5zZXRDbGllbnRJZCgkY2xpZW50SUQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0Q2xpZW50U2VjcmV0KCRjbGllbnRTZWNyZXQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0UmVkaXJlY3RVcmkoJHJlZGlyZWN0VXJpKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPmFkZFNjb3BlKCJlbWFpbCIpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+YWRkU2NvcGUoInByb2ZpbGUiKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICRjbGllbnQtPmF1dGhlbnRpY2F0ZSgkX0dFVFsnY29kZSddKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICRnb29nbGVUb2tlbiA9ICRjbGllbnQtPmdldEFjY2Vzc1Rva2VuKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICBpZiAoIWlzc2V0KCRfU0VTU0lPTlsnZ29vZ2xlVG9rZW4nXSkpIHtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgJF9TRVNTSU9OWydnb29nbGVUb2tlbiddID0gJGdvb2dsZVRva2VuO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB0cnkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICRjbGllbnQtPnNldEFjY2Vzc1Rva2VuKCRnb29nbGVUb2tlbik7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICBoZWFkZXIoJ2xvY2F0aW9uOiBodHRwczovL19IT1NUXycpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIC8vIGdldCBwcm9maWxlIGluZm9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJGdvb2dsZV9vYXV0aCA9IG5ldyAnCiAgICAgICAgICAgICAgICAgICAgICAgJ0dvb2dsZV9TZXJ2aWNlX09hdXRoMigkY2xpZW50KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJGdvb2dsZV9hY2NvdW50X2luZm8gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRnb29nbGVfb2F1dGgtPnVzZXJpbmZvLT5nZXQoKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJGVtYWlsID0gICRnb29nbGVfYWNjb3VudF9pbmZvLT5lbWFpbDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJG5hbWUgPSAgJGdvb2dsZV9hY2NvdW50X2luZm8tPm5hbWU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICRjb25maWdbJ3BhcmFtcyddWydnbWFpbCddID0gJGVtYWlsO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAvL2VjaG8gImVtYWlsICIuJGVtYWlsLiIgbmFtZSAiLiRuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAvL2V4aXQoMCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICR1cmwgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgJyJodHRwczovL19IT1NUXy93ZWJhc29uZVlpaS9jcmVhdGVVc2VyLnBocCI7IC8vICcKICAgICAgICAgICAgICAgICAgICAgICAnUmVwbGFjZSB3aXRoIHlvdXIgdGFyZ2V0IFVSTFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAkZGF0YSA9IGFycmF5KCJlbWFpbCIgPT4gJGVtYWlsLCAibmFtZSIgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICckbmFtZSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICRvcHRpb25zID0gYXJyYXkoXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgJ2h0dHAnID0+IGFycmF5KFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgXCdoZWFkZXJcJyAgPT4gIkNvbnRlbnQtdHlwZTogJwogICAgICAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXHJcXG4iLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgJ21ldGhvZCcgID0+ICdQT1NUJyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICdjb250ZW50JyA9PiBodHRwX2J1aWxkX3F1ZXJ5KCRkYXRhKVxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJGNvbnRleHQgID0gc3RyZWFtX2NvbnRleHRfY3JlYXRlKCRvcHRpb25zKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJHJlc3VsdCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwsIGZhbHNlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRjb250ZXh0KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgaWYgKCRyZXN1bHQgPT09IEZBTFNFKSB7IC8qIEhhbmRsZSBlcnJvciAqLyB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICRwYXNzd29yZD0iIjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJHVzZXJuYW1lPSIiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAkciA9IGV4cGxvZGUoJ3wnLCAgJHJlc3VsdCk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIGZvcmVhY2ggKCRyIGFzICR2KSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgZWNobyAkdi4iPGJyIC8+IjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAkYSA9IGV4cGxvZGUoJzonLCAkdik7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgaWYgKCRhWzBdID09ICdQYXNzd29yZCcpIHtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICRwYXNzd29yZCA9ICRhWzFdO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgaWYgKCRhWzBdID09ICdVc2VybmFtZScpIHtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICR1c2VybmFtZSA9ICRhWzFdO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBlY2hvICI8c2NyaXB0PiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICJsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZ21haWxVc2VyJywgIgogICAgICAgICAgICAgICAgICAgICAgICdcJyIuJHVzZXJuYW1lLiJcJyk7IjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgLy9lY2hvICIgICAgIHNldGNvb2tpZShcJ2dtYWlsVXNlciwgJwogICAgICAgICAgICAgICAgICAgICAgICdcJyIuJHVzZXJuYW1lLiJcJyk7IjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgLy9lY2hvICIgICAgIHNldGNvb2tpZShcJ2dtYWlsUGFzc3dvcmRcJywgJwogICAgICAgICAgICAgICAgICAgICAgICdcJyIuJHBhc3N3b3JkLiJcJyk7IjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgZWNobyAiICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcJ2dtYWlsUGFzc3dvcmRcJywgJwogICAgICAgICAgICAgICAgICAgICAgICdcJyIuJHBhc3N3b3JkLiJcJyk7IjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgZWNobyAiPC9zY3JpcHQ+IjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgZWNobyAnPHNjcmlwdD4gd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiCiAgICAgICAgICAgICAgICAgICAgICAgJyJodHRwczovL19IT1NUXy9kZWZhdWx0L2VuLVVTL25hdjZoMC9zL0xvZ2luLz9yPXVzZXIlMkZzZWN1cml0eSUyRmxvZ2luIjs8L3NjcmlwdD5cJztcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHVuc2V0KCRfU0VTU0lPTlsiZ29vZ2xlVG9rZW4iXSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc/PicsCiAgICAgICAgICAgICAgICdkZXNjJzogJ21haW4gaW5jbHVkZSd9fSwKIDQ6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICdEYXRhJzogJzw/cGhwXHJcbicKICAgICAgICAgICAgICAgICAgICAnJGNvbmZpZyA9ICcKICAgICAgICAgICAgICAgICAgICAicmVxdWlyZSgnLi4vLi4vc3JjL3lpaTIvYWR2YW5jZWQvY29tbW9uL2NvbmZpZy9tYWluLWxvY2FsLnBocCcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiRjbWQgPSAnLi4vLi4vc3JjL3lpaTIvYWR2YW5jZWQveWlpICc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAiJHVzZXJuYW1lID0gICd1Jy5zdWJzdHIobWQ1KG10X3JhbmQoKSksIDAsIDcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiRlbWFpbCA9ICdjeXVhbjEyM0BnbWFpbC5jb20nO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyRsYXN0bmFtZT0iIjtcclxuJwogICAgICAgICAgICAgICAgICAgICckZmlyc3RuYW1lPSIiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ2lmIChpc3NldCgkX1BPU1RbImVtYWlsIl0pKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkZW1haWwgPSAkX1BPU1RbImVtYWlsIl07XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAvLyR1c2VybmFtZSA9IHN0cl9yZXBsYWNlKCdAJywnJywgJGVtYWlsKTtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICRuYW1lID0gJF9QT1NUWyJuYW1lIl07XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkbmEgPSBleHBsb2RlKFwnIFwnLCRfUE9TVFsibmFtZSJdKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICRsYXN0bmFtZSA9IGVuZCgkbmEpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGZpcnN0bmFtZSA9ICRuYVswXTtcclxuJwogICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnJHVzZXJFeGlzdCA9IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAiJGRiID0gJGNvbmZpZ1snY29tcG9uZW50cyddWydkYiddO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiRjb25uID0gbmV3IFBETygkZGJbJ2RzbiddLCAkZGJbJ3VzZXJuYW1lJ10sICIKICAgICAgICAgICAgICAgICAgICAiJGRiWydwYXNzd29yZCddKTtcclxuIgogICAgICAgICAgICAgICAgICAgICckY29ubi0+c2V0QXR0cmlidXRlKFBETzo6QVRUUl9FUlJNT0RFLCAnCiAgICAgICAgICAgICAgICAgICAgJ1BETzo6RVJSTU9ERV9FWENFUFRJT04pO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyMgY2hlY2sgaWYgZW1haWwgZXhpc3RcclxuJwogICAgICAgICAgICAgICAgICAgICd0cnkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkc3FsID0gIlNFTEVDVCAqICBGUk9NIHVzZXIgV0hFUkUgZW1haWwgPSA6ZW1haWwiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkc3RtdCA9ICRjb25uLT5wcmVwYXJlKCRzcWwpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAkc3RtdC0+YmluZFBhcmFtKCc6ZW1haWwnLCAkZW1haWwpOyAvLyBCaW5kIHRoZSAiCiAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkc3RtdC0+ZXhlY3V0ZSgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAvLyBGZXRjaCB0aGUgcmVzdWx0c1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAkcm93ID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAjZWNobyAnfGZldGNoRHVtcDonLiR1aWQ7XHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgIGlmIChpc3NldCgkcm93Wyd1c2VybmFtZSddKSkge1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAvL3Zhcl9kdW1wKCRyb3dbJ3VzZXJuYW1lJ10pO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAkdXNlcm5hbWUgPSAkcm93Wyd1c2VybmFtZSddO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAkdXNlckV4aXN0ID0gMTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ30gY2F0Y2goUERPRXhjZXB0aW9uICRlKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIGVjaG8gIkNvbm5lY3Rpb24gZmFpbGVkOiAiIC4gJGUtPmdldE1lc3NhZ2UoKTtcclxuJwogICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAiJHVybCA9ICdfSE9TVF8nO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiRwbGFpbl9wYXNzd29yZCA9ICAncCcuc3Vic3RyKG1kNShtdF9yYW5kKCkpLCAwLCAxMCk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAiIyRwbGFpbl9wYXNzd29yZCA9ICAnTmNodW5nbGkxMjMnO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJ2lmICgkdXNlckV4aXN0ID09IDApIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAjZWNobyAkY21kO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICRjY21kID0gJGNtZC4ndXNlci9jcmVhdGUgJy4kZW1haWwuJyAnLiR1c2VybmFtZS4nICIKICAgICAgICAgICAgICAgICAgICAiJy4kdXJsLicgJy4kcGxhaW5fcGFzc3dvcmQ7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgZWNobyAkY2NtZDtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAkcmV0ID0gc2hlbGxfZXhlYygkY2NtZCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgI2VjaG8gJHJldDtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAkcmNtZCA9ICRjbWQuJ3VzZXIvcm9sZSAnLiRlbWFpbC4nIFJlZ2lzdGVyZWQnO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICRyZXQgPSBzaGVsbF9leGVjKCRyY21kKTtcclxuJwogICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAnLy95aWkgdXNlci9wYXNzd29yZCA8dXNlcm5hbWVPckVtYWlsPiA8cGFzc3dvcmQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAiJGNjbWQgPSAkY21kLid1c2VyL3Bhc3N3b3JkICcuJGVtYWlsLicgIgogICAgICAgICAgICAgICAgICAgICInLiRwbGFpbl9wYXNzd29yZDtcclxuIgogICAgICAgICAgICAgICAgICAgICckcmV0ID0gc2hlbGxfZXhlYygkY2NtZCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnZWNobyAkcmV0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gInxFbWFpbDoiLiRlbWFpbDtcclxuJwogICAgICAgICAgICAgICAgICAgICdlY2hvICJ8VXNlcm5hbWU6Ii4kdXNlcm5hbWU7XHJcbicKICAgICAgICAgICAgICAgICAgICAnZWNobyAifEZ1bGxOYW1lOiIuJG5hbWU7XHJcbicKICAgICAgICAgICAgICAgICAgICAnZWNobyAifExhc3ROYW1lOiIuJGxhc3RuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ2VjaG8gInxGaXJzdE5hbWU6Ii4kZmlyc3RuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyNlY2hvICJ8UGxhaW5QYXNzd29yZDoiLiRwbGFpbl9wYXNzd29yZDtcclxuJwogICAgICAgICAgICAgICAgICAgICdlY2hvICJ8UGFzc3dvcmQ6Ii4kcGxhaW5fcGFzc3dvcmQ7JywKICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ3dlYmFzb25lWWlpL2NyZWF0ZVVzZXIucGhwJywKICAgICAgICAgICAgJ0lzVGV4dCc6ICcnLAogICAgICAgICAgICAnTXlNb2R1bGUnOiAnYl9jb2RlRWRpdG9yJywKICAgICAgICAgICAgJ05lZWRDb3B5JzogJycsCiAgICAgICAgICAgICdOb3Rlcyc6ICcnLAogICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogJycsCiAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnYUZpbGUnLAogICAgICAgICAgICAnYUxhYmVsJzogJ2NyZWF0ZVVzZXIucGhwJywKICAgICAgICAgICAgJ2FzdmdmaWxlJzogJycsCiAgICAgICAgICAgICd5Y29kZSc6ICcnfSwKICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICAgICdEYXRhJzogJzw/cGhwXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnJGNvbmZpZyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZSgnLi4vLi4vc3JjL3lpaTIvYWR2YW5jZWQvY29tbW9uL2NvbmZpZy9tYWluLWxvY2FsLnBocCcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiRjbWQgPSAnLi4vLi4vc3JjL3lpaTIvYWR2YW5jZWQveWlpICc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiJHVzZXJuYW1lID0gICd1Jy5zdWJzdHIobWQ1KG10X3JhbmQoKSksIDAsIDcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiRlbWFpbCA9ICdjeXVhbjEyM0BnbWFpbC5jb20nO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyRsYXN0bmFtZT0iIjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICckZmlyc3RuYW1lPSIiO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2lmIChpc3NldCgkX1BPU1RbImVtYWlsIl0pKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkZW1haWwgPSAkX1BPU1RbImVtYWlsIl07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAvLyR1c2VybmFtZSA9IHN0cl9yZXBsYWNlKCdAJywnJywgJGVtYWlsKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICRuYW1lID0gJF9QT1NUWyJuYW1lIl07XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkbmEgPSBleHBsb2RlKFwnIFwnLCRfUE9TVFsibmFtZSJdKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICRsYXN0bmFtZSA9IGVuZCgkbmEpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGZpcnN0bmFtZSA9ICRuYVswXTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnJHVzZXJFeGlzdCA9IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiJGRiID0gJGNvbmZpZ1snY29tcG9uZW50cyddWydkYiddO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiRjb25uID0gbmV3IFBETygkZGJbJ2RzbiddLCAkZGJbJ3VzZXJuYW1lJ10sICIKICAgICAgICAgICAgICAgICAgICAgICAiJGRiWydwYXNzd29yZCddKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICckY29ubi0+c2V0QXR0cmlidXRlKFBETzo6QVRUUl9FUlJNT0RFLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ1BETzo6RVJSTU9ERV9FWENFUFRJT04pO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyMgY2hlY2sgaWYgZW1haWwgZXhpc3RcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd0cnkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAkc3FsID0gIlNFTEVDVCAqICBGUk9NIHVzZXIgV0hFUkUgZW1haWwgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgJzplbWFpbCI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICRzdG10ID0gJGNvbm4tPnByZXBhcmUoJHNxbCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICRzdG10LT5iaW5kUGFyYW0oJzplbWFpbCcsICRlbWFpbCk7IC8vIEJpbmQgdGhlICIKICAgICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICRzdG10LT5leGVjdXRlKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIC8vIEZldGNoIHRoZSByZXN1bHRzXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICRyb3cgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICNlY2hvICd8ZmV0Y2hEdW1wOicuJHVpZDtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgaWYgKGlzc2V0KCRyb3dbJ3VzZXJuYW1lJ10pKSB7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgIC8vdmFyX2R1bXAoJHJvd1sndXNlcm5hbWUnXSk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICR1c2VybmFtZSA9ICRyb3dbJ3VzZXJuYW1lJ107XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICR1c2VyRXhpc3QgPSAxO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfSBjYXRjaChQRE9FeGNlcHRpb24gJGUpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgZWNobyAiQ29ubmVjdGlvbiBmYWlsZWQ6ICIgLiAkZS0+Z2V0TWVzc2FnZSgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIkdXJsID0gJ19IT1NUXyc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiJHBsYWluX3Bhc3N3b3JkID0gICdwJy5zdWJzdHIobWQ1KG10X3JhbmQoKSksIDAsICIKICAgICAgICAgICAgICAgICAgICAgICAnMTApO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiMkcGxhaW5fcGFzc3dvcmQgPSAgJ05jaHVuZ2xpMTIzJztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICdpZiAoJHVzZXJFeGlzdCA9PSAwKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgI2VjaG8gJGNtZDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAkY2NtZCA9ICRjbWQuJ3VzZXIvY3JlYXRlICcuJGVtYWlsLicgJy4kdXNlcm5hbWUuJyAiCiAgICAgICAgICAgICAgICAgICAgICAgIicuJHVybC4nICcuJHBsYWluX3Bhc3N3b3JkO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgIGVjaG8gJGNjbWQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgJHJldCA9IHNoZWxsX2V4ZWMoJGNjbWQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICNlY2hvICRyZXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgJHJjbWQgPSAkY21kLid1c2VyL3JvbGUgJy4kZW1haWwuJyBSZWdpc3RlcmVkJztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAkcmV0ID0gc2hlbGxfZXhlYygkcmNtZCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJy8veWlpIHVzZXIvcGFzc3dvcmQgPHVzZXJuYW1lT3JFbWFpbD4gPHBhc3N3b3JkPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiRjY21kID0gJGNtZC4ndXNlci9wYXNzd29yZCAnLiRlbWFpbC4nICIKICAgICAgICAgICAgICAgICAgICAgICAiJy4kcGxhaW5fcGFzc3dvcmQ7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnJHJldCA9IHNoZWxsX2V4ZWMoJGNjbWQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2VjaG8gJHJldDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdlY2hvICJ8RW1haWw6Ii4kZW1haWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnZWNobyAifFVzZXJuYW1lOiIuJHVzZXJuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2VjaG8gInxGdWxsTmFtZToiLiRuYW1lO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2VjaG8gInxMYXN0TmFtZToiLiRsYXN0bmFtZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdlY2hvICJ8Rmlyc3ROYW1lOiIuJGZpcnN0bmFtZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcjZWNobyAifFBsYWluUGFzc3dvcmQ6Ii4kcGxhaW5fcGFzc3dvcmQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnZWNobyAifFBhc3N3b3JkOiIuJHBsYWluX3Bhc3N3b3JkOycsCiAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICd3ZWJhc29uZVlpaS9jcmVhdGVVc2VyLnBocCcsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAnJywKICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICAgICdOZWVkQ29weSc6ICcnLAogICAgICAgICAgICAgICAnTm90ZXMnOiAnJywKICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6ICcnLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICdjcmVhdGVVc2VyLnBocCcsCiAgICAgICAgICAgICAgICdhc3ZnZmlsZSc6ICcnLAogICAgICAgICAgICAgICAneWNvZGUnOiAnJ319LAogNTogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICdDb3B5VG9NeVBhZ2VPbmx5JzogMSwKICAgICAgICAgICAgJ0RhdGEnOiAnPD9waHAgICAgICAgICAgICAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJy8qICAgICAgICAgICAgICAgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAnICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIDJhbWlnb3MveWlpMi11c3VhcmlvICcKICAgICAgICAgICAgICAgICAgICAncHJvamVjdC5cclxuJwogICAgICAgICAgICAgICAgICAgICcgKiAgICAgICAgICAgICAgICAgICAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICcgKiAoYykgMmFtaWdPUyEgPGh0dHA6Ly8yYW1pZ29zLnVzLz5cclxuJwogICAgICAgICAgICAgICAgICAgICcgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSAnCiAgICAgICAgICAgICAgICAgICAgJ3ZpZXdcclxuJwogICAgICAgICAgICAgICAgICAgICcgKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICdjb2RlLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqLyAgICAgICAgICAgICAgICAgICAgICAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxXaWRnZXRcXENvbm5lY3RXaWRnZXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcaGVscGVyc1xcSHRtbDtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFx3aWRnZXRzXFxBY3RpdmVGb3JtO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJy8qKiAgICAgICAgICAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICcgKiBAdmFyIHlpaVxcd2ViXFxWaWV3ICAgICAgICAgICAgJHRoaXMgXHJcbicKICAgICAgICAgICAgICAgICAgICAnICogQHZhciBcXERhXFxVc2VyXFxGb3JtXFxMb2dpbkZvcm0gJG1vZGVsXHJcbicKICAgICAgICAgICAgICAgICAgICAnICogQHZhciBcXERhXFxVc2VyXFxNb2R1bGUgICAgICAgICAkbW9kdWxlXHJcbicKICAgICAgICAgICAgICAgICAgICAnICovXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiR0aGlzLT50aXRsZSA9IFlpaTo6dCgndXN1YXJpbycsICdTaWduIGluJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAiJHRoaXMtPnBhcmFtc1snYnJlYWRjcnVtYnMnXVtdID0gJHRoaXMtPnRpdGxlO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAiJHJlbFJvb3QgPScuLi8uLi8uLi8uLi8uLi8uLic7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnaWYgJwogICAgICAgICAgICAgICAgICAgICIoZmlsZV9leGlzdHMoJHJlbFJvb3QuJy9waHAvZ29vZ2xlL3ZlbmRvci9hdXRvbG9hZC5waHAnKSkgIgogICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAjIG9ubHkgcnVuIG9uIERvY1Jvb3QgUGFnZVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgcmVxdWlyZV9vbmNlICcKICAgICAgICAgICAgICAgICAgICAiJHJlbFJvb3QuJy9waHAvZ29vZ2xlL3ZlbmRvci9hdXRvbG9hZC5waHAnO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgcmVxdWlyZV9vbmNlICRyZWxSb290LicvcGhwL2djb25maWcucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgLy8gY3JlYXRlIENsaWVudCBSZXF1ZXN0IHRvIGFjY2VzcyBHb29nbGUgQVBJIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudCA9IG5ldyBHb29nbGVfQ2xpZW50KCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAkY2xpZW50LT5zZXRDbGllbnRJZCgkY2xpZW50SUQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0Q2xpZW50U2VjcmV0KCRjbGllbnRTZWNyZXQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0UmVkaXJlY3RVcmkoJHJlZGlyZWN0VXJpKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPmFkZFNjb3BlKCJlbWFpbCIpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+YWRkU2NvcGUoInByb2ZpbGUiKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAvLyBhdXRoZW50aWNhdGUgY29kZSBmcm9tIEdvb2dsZSBPQXV0aCBGbG93XHJcbicKICAgICAgICAgICAgICAgICAgICAiICBpZiAoIWlzc2V0KCRfR0VUWydjb2RlJ10pKSB7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgIGVjaG8gIjxkaXYgY2xhc3M9XCdjb250YWluZXJcJz4gPGRpdiBjbGFzcz1cJ3Jvd1wnPiAnCiAgICAgICAgICAgICAgICAgICAgIjxkaXYgY2xhc3M9J2NvbC14cy0xMic+PGEgY2xhc3M9J2J0biBidG4td2FybmluZyAiCiAgICAgICAgICAgICAgICAgICAgJ2J0bi1ibG9ja1wnIGhyZWY9XCciLiRjbGllbnQtPmNyZWF0ZUF1dGhVcmwoKS4iXCc+R29vZ2xlICcKICAgICAgICAgICAgICAgICAgICAnTG9naW48L2E+PC9kaXY+PC9kaXY+PC9kaXY+IjtcclxuJwogICAgICAgICAgICAgICAgICAgICcgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAnPz5cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICI8Pz0gJHRoaXMtPnJlbmRlcignL3NoYXJlZC9fYWxlcnQnLCBbJ21vZHVsZScgPT4gIgogICAgICAgICAgICAgICAgICAgICJZaWk6OiRhcHAtPmdldE1vZHVsZSgndXNlcicpXSkgPz5cclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJyb3ciPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICA8ZGl2IGNsYXNzPVwnY29sLXhzLTEyXCc+IDxoMz4gPGJ1dHRvbiBjbGFzcz0iYnRuICcKICAgICAgICAgICAgICAgICAgICAnYnRuLXByaW1hcnkgdy0xMDAiIG9uY2xpY2s9InVzZXJMb2dpbigpIj4gVXNlIHVzZXJuYW1lICcKICAgICAgICAgICAgICAgICAgICAnbG9naW4sIG5vdCBlbWFpbCA8L2J1dHRvbj4gPC9oMz4gPC9kaXY+PC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAnPGRpdiBpZD0idXNlcmxvZ2luaWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiA+XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIDxkaXYgY2xhc3M9ImNvbC14cy0xMiI+XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCBwYW5lbC1kZWZhdWx0IG0tYXV0byI+XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtaGVhZGluZyI+XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0icGFuZWwtdGl0bGUiPjw/PSAnCiAgICAgICAgICAgICAgICAgICAgJ0h0bWw6OmVuY29kZSgkdGhpcy0+dGl0bGUpID8+PC9oMz5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1ib2R5Ij5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgPD9waHAgJGZvcm0gPSBBY3RpdmVGb3JtOjpiZWdpbihcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIFtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAnaWQnID0+ICRtb2RlbC0+Zm9ybU5hbWUoKSxcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAvLydpZCcgPT4gJ3lzdWJtaXQnLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICdlbmFibGVBamF4VmFsaWRhdGlvbicgPT4gIgogICAgICAgICAgICAgICAgICAgICd0cnVlLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICdlbmFibGVDbGllbnRWYWxpZGF0aW9uJyA9PiAiCiAgICAgICAgICAgICAgICAgICAgJ2ZhbHNlLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICd2YWxpZGF0ZU9uQmx1cicgPT4gZmFsc2UsXHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbGlkYXRlT25UeXBlJyA9PiBmYWxzZSxcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAndmFsaWRhdGVPbkNoYW5nZScgPT4gZmFsc2UsXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICBdXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgPD89ICRmb3JtLT5maWVsZChcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICRtb2RlbCxcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICdsb2dpbicsXHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICBbJ2lucHV0T3B0aW9ucycgPT4gWydhdXRvZm9jdXMnID0+ICIKICAgICAgICAgICAgICAgICAgICAiJ2F1dG9mb2N1cycsICdjbGFzcycgPT4gJ2Zvcm0tY29udHJvbCcsICd0YWJpbmRleCcgPT4gIgogICAgICAgICAgICAgICAgICAgICInMSddXVxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICApID8+XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIDw/PSAkZm9ybVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgLT5maWVsZChcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICAkbW9kZWwsXHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3N3b3JkJyxcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICBbJ2lucHV0T3B0aW9ucycgPT4gWydjbGFzcycgPT4gIgogICAgICAgICAgICAgICAgICAgICInZm9ybS1jb250cm9sJywgJ3RhYmluZGV4JyA9PiAnMiddXVxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgLT5wYXNzd29yZElucHV0KClcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIC0+bGFiZWwoXHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgWWlpOjp0KCd1c3VhcmlvJywgJ1Bhc3N3b3JkJylcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICAuICgkbW9kdWxlLT5hbGxvd1Bhc3N3b3JkUmVjb3ZlcnkgJwogICAgICAgICAgICAgICAgICAgICc/XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcgLiBIdG1sOjphKFxyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWWlpOjp0KCd1c3VhcmlvJywgJ0ZvcmdvdCAiCiAgICAgICAgICAgICAgICAgICAgInBhc3N3b3JkPycpLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICJbJy91c2VyL3JlY292ZXJ5L3JlcXVlc3QnXSxcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsndGFiaW5kZXgnID0+ICc1J11cclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICcpJyA6ICcnKVxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgKSA/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICA8Pz0gJGZvcm0tPmZpZWxkKCRtb2RlbCwgJwogICAgICAgICAgICAgICAgICAgICIncmVtZW1iZXJNZScpLT5jaGVja2JveChbJ3RhYmluZGV4JyA9PiAnNCddKSA/PlxyXG4iCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICA8Pz0gSHRtbDo6c3VibWl0QnV0dG9uKFxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgWWlpOjp0KCd1c3VhcmlvJywgJ1NpZ24gaW4nKSxcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIFsnb25jbGljaycgPT4gJ2Zvcm1Mb2dpbigpJywgJ2NsYXNzJyAiCiAgICAgICAgICAgICAgICAgICAgIj0+ICdidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrJywgJ3RhYmluZGV4JyA9PiAnMyddXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgPD9waHAgQWN0aXZlRm9ybTo6ZW5kKCk7ID8+XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIDw/cGhwIGlmICgkbW9kdWxlLT5lbmFibGVFbWFpbENvbmZpcm1hdGlvbik6ICcKICAgICAgICAgICAgICAgICAgICAnPz5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1jZW50ZXIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICA8Pz0gSHRtbDo6YShcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIFlpaTo6dCgndXN1YXJpbycsICdEaWRuXFwndCByZWNlaXZlICIKICAgICAgICAgICAgICAgICAgICAiY29uZmlybWF0aW9uIG1lc3NhZ2U/JyksXHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICBbJy91c2VyL3JlZ2lzdHJhdGlvbi9yZXNlbmQnXVxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICApID8+XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgPC9wPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgPD9waHAgZW5kaWYgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIDw/cGhwIGlmICgkbW9kdWxlLT5lbmFibGVSZWdpc3RyYXRpb24pOiA/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWNlbnRlciI+XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIDw/PSBIdG1sOjphKFlpaTo6dCgndXN1YXJpbycsICdEb25cXCd0ICIKICAgICAgICAgICAgICAgICAgICAiaGF2ZSBhbiBhY2NvdW50PyBTaWduIHVwIScpLCAiCiAgICAgICAgICAgICAgICAgICAgIlsnL3VzZXIvcmVnaXN0cmF0aW9uL3JlZ2lzdGVyJ10pID8+XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgPC9wPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgPD9waHAgZW5kaWYgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIDw/PSBDb25uZWN0V2lkZ2V0Ojp3aWRnZXQoXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgW1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAnYmFzZUF1dGhVcmwnID0+ICIKICAgICAgICAgICAgICAgICAgICAiWycvdXNlci9zZWN1cml0eS9hdXRoJ10sXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgXVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgKSA/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICc8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICc8c2NyaXB0PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgIGNvbnN0IG15YUZvcm0gPSAnCiAgICAgICAgICAgICAgICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdMb2dpbkZvcm0nKTtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICBmdW5jdGlvbiBmb3JtTG9naW4oKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICBteWFGb3JtLnN1Ym1pdCgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgZnVuY3Rpb24gdXNlckxvZ2luKCkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgIGNvbnNvbGUubG9nKCd1c2VyTG9naW4nKTtcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAkKCcjdXNlcmxvZ2luaWQnKS50b2dnbGUoJ3Nsb3cnKVxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnICBcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgbGV0IGdtYWlsVXNlcj0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2dtYWlsVXNlcicpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICBsZXQgZ21haWxQYXNzd29yZD0gJwogICAgICAgICAgICAgICAgICAgICJsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZ21haWxQYXNzd29yZCcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICBpZiAoZ21haWxVc2VyKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgY29uc29sZS5sb2coJ2xvZ2luLnBocDonLCBnbWFpbFVzZXIsICIKICAgICAgICAgICAgICAgICAgICAnZ21haWxQYXNzd29yZCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2dtYWlsVXNlcicpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdnbWFpbFBhc3N3b3JkJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgbGV0IHVlbGVtZW50ID0gJwogICAgICAgICAgICAgICAgICAgICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW5mb3JtLWxvZ2luJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgdWVsZW1lbnQudmFsdWU9IGdtYWlsVXNlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICBsZXQgcGVsZW1lbnQgPSAnCiAgICAgICAgICAgICAgICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbmZvcm0tcGFzc3dvcmQnKTtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICBwZWxlbWVudC52YWx1ZT0gZ21haWxQYXNzd29yZDtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAvLy8gcGVyZm9ybSBzdWJtaXRcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICBjb25zdCBteUZvcm0gPSAnCiAgICAgICAgICAgICAgICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdMb2dpbkZvcm0nKTtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICBteUZvcm0uc3VibWl0KCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICc8L3NjcmlwdD4nLAogICAgICAgICAgICAnRmlsZU5hbWUnOiAnLi4vc3JjL3lpaTIvYWR2YW5jZWQvdmVuZG9yLzJhbWlnb3MveWlpMi11c3VhcmlvL3NyYy9Vc2VyL3Jlc291cmNlcy92aWV3cy9zZWN1cml0eS9sb2dpbi5waHAnLAogICAgICAgICAgICAnSXNUZXh0JzogJycsCiAgICAgICAgICAgICdNeU1vZHVsZSc6ICdiX2NvZGVFZGl0b3InLAogICAgICAgICAgICAnTmVlZENvcHknOiAnJywKICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAnJywKICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdhRmlsZScsCiAgICAgICAgICAgICdhTGFiZWwnOiAnbG9naW4ucGhwJywKICAgICAgICAgICAgJ2FzdmdmaWxlJzogJycsCiAgICAgICAgICAgICd5Y29kZSc6ICcnfSwKICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICAgICdEYXRhJzogJzw/cGhwICAgICAgICAgICAgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcvKiAgICAgICAgICAgICAgICAgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSAyYW1pZ29zL3lpaTItdXN1YXJpbyAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3QuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICogICAgICAgICAgICAgICAgICAgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICogKGMpIDJhbWlnT1MhIDxodHRwOi8vMmFtaWdvcy51cy8+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3BsZWFzZSB2aWV3XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICogdGhlIExJQ0VOU0UgZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgJwogICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2UgY29kZS5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKi8gICAgICAgICAgICAgICAgICAgICAgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcV2lkZ2V0XFxDb25uZWN0V2lkZ2V0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSB5aWlcXGhlbHBlcnNcXEh0bWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcd2lkZ2V0c1xcQWN0aXZlRm9ybTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcvKiogICAgICAgICAgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICogQHZhciB5aWlcXHdlYlxcVmlldyAgICAgICAgICAgICR0aGlzIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqIEB2YXIgXFxEYVxcVXNlclxcRm9ybVxcTG9naW5Gb3JtICRtb2RlbFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqIEB2YXIgXFxEYVxcVXNlclxcTW9kdWxlICAgICAgICAgJG1vZHVsZVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIkdGhpcy0+dGl0bGUgPSBZaWk6OnQoJ3VzdWFyaW8nLCAnU2lnbiBpbicpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiR0aGlzLT5wYXJhbXNbJ2JyZWFkY3J1bWJzJ11bXSA9ICR0aGlzLT50aXRsZTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiRyZWxSb290ID0nLi4vLi4vLi4vLi4vLi4vLi4nO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJ2lmICcKICAgICAgICAgICAgICAgICAgICAgICAiKGZpbGVfZXhpc3RzKCRyZWxSb290LicvcGhwL2dvb2dsZS92ZW5kb3IvYXV0b2xvYWQucGhwJykpICIKICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgIyBvbmx5IHJ1biBvbiBEb2NSb290IFBhZ2VcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIHJlcXVpcmVfb25jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIiRyZWxSb290LicvcGhwL2dvb2dsZS92ZW5kb3IvYXV0b2xvYWQucGhwJztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgIHJlcXVpcmVfb25jZSAkcmVsUm9vdC4nL3BocC9nY29uZmlnLnBocCc7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIC8vIGNyZWF0ZSBDbGllbnQgUmVxdWVzdCB0byBhY2Nlc3MgR29vZ2xlIEFQSSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQgPSBuZXcgR29vZ2xlX0NsaWVudCgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgJGNsaWVudC0+c2V0Q2xpZW50SWQoJGNsaWVudElEKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPnNldENsaWVudFNlY3JldCgkY2xpZW50U2VjcmV0KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPnNldFJlZGlyZWN0VXJpKCRyZWRpcmVjdFVyaSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAkY2xpZW50LT5hZGRTY29wZSgiZW1haWwiKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICRjbGllbnQtPmFkZFNjb3BlKCJwcm9maWxlIik7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgLy8gYXV0aGVudGljYXRlIGNvZGUgZnJvbSBHb29nbGUgT0F1dGggRmxvd1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgaWYgKCFpc3NldCgkX0dFVFsnY29kZSddKSkge1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBlY2hvICI8ZGl2IGNsYXNzPVwnY29udGFpbmVyXCc+IDxkaXYgJwogICAgICAgICAgICAgICAgICAgICAgICJjbGFzcz0ncm93Jz4gPGRpdiBjbGFzcz0nY29sLXhzLTEyJz48YSBjbGFzcz0nYnRuICIKICAgICAgICAgICAgICAgICAgICAgICAiYnRuLXdhcm5pbmcgYnRuLWJsb2NrJyAiCiAgICAgICAgICAgICAgICAgICAgICAgJ2hyZWY9XCciLiRjbGllbnQtPmNyZWF0ZUF1dGhVcmwoKS4iXCc+R29vZ2xlICcKICAgICAgICAgICAgICAgICAgICAgICAnTG9naW48L2E+PC9kaXY+PC9kaXY+PC9kaXY+IjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICI8Pz0gJHRoaXMtPnJlbmRlcignL3NoYXJlZC9fYWxlcnQnLCBbJ21vZHVsZScgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICJZaWk6OiRhcHAtPmdldE1vZHVsZSgndXNlcicpXSkgPz5cclxuIgogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJyb3ciPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICA8ZGl2IGNsYXNzPVwnY29sLXhzLTEyXCc+IDxoMz4gPGJ1dHRvbiBjbGFzcz0iYnRuICcKICAgICAgICAgICAgICAgICAgICAgICAnYnRuLXByaW1hcnkgdy0xMDAiIG9uY2xpY2s9InVzZXJMb2dpbigpIj4gVXNlIHVzZXJuYW1lICcKICAgICAgICAgICAgICAgICAgICAgICAnbG9naW4sIG5vdCBlbWFpbCA8L2J1dHRvbj4gPC9oMz4gPC9kaXY+PC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBpZD0idXNlcmxvZ2luaWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiA+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIDxkaXYgY2xhc3M9ImNvbC14cy0xMiI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCBwYW5lbC1kZWZhdWx0IG0tYXV0byI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtaGVhZGluZyI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0icGFuZWwtdGl0bGUiPjw/PSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ0h0bWw6OmVuY29kZSgkdGhpcy0+dGl0bGUpID8+PC9oMz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1ib2R5Ij5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgPD9waHAgJGZvcm0gPSBBY3RpdmVGb3JtOjpiZWdpbihcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIFtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAnaWQnID0+ICRtb2RlbC0+Zm9ybU5hbWUoKSxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAvLydpZCcgPT4gJ3lzdWJtaXQnLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICdlbmFibGVBamF4VmFsaWRhdGlvbicgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICd0cnVlLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICdlbmFibGVDbGllbnRWYWxpZGF0aW9uJyA9PiAiCiAgICAgICAgICAgICAgICAgICAgICAgJ2ZhbHNlLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICd2YWxpZGF0ZU9uQmx1cicgPT4gZmFsc2UsXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbGlkYXRlT25UeXBlJyA9PiBmYWxzZSxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAndmFsaWRhdGVPbkNoYW5nZScgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICdmYWxzZSxcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIF1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgKSA/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICA8Pz0gJGZvcm0tPmZpZWxkKFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgJG1vZGVsLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgJ2xvZ2luJyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIFsnaW5wdXRPcHRpb25zJyA9PiBbJ2F1dG9mb2N1cycgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICInYXV0b2ZvY3VzJywgJ2NsYXNzJyA9PiAnZm9ybS1jb250cm9sJywgJ3RhYmluZGV4JyA9PiAiCiAgICAgICAgICAgICAgICAgICAgICAgIicxJ11dXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgPD89ICRmb3JtXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAtPmZpZWxkKFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlbCxcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAncGFzc3dvcmQnLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIFsnaW5wdXRPcHRpb25zJyA9PiBbJ2NsYXNzJyA9PiAiCiAgICAgICAgICAgICAgICAgICAgICAgIidmb3JtLWNvbnRyb2wnLCAndGFiaW5kZXgnID0+ICcyJ11dXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICApXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAtPnBhc3N3b3JkSW5wdXQoKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgLT5sYWJlbChcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICBZaWk6OnQoJ3VzdWFyaW8nLCAiCiAgICAgICAgICAgICAgICAgICAgICAgIidQYXNzd29yZCcpXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgLiAnCiAgICAgICAgICAgICAgICAgICAgICAgJygkbW9kdWxlLT5hbGxvd1Bhc3N3b3JkUmVjb3ZlcnkgP1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICgnIC4gSHRtbDo6YShcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlpaTo6dCgndXN1YXJpbycsICIKICAgICAgICAgICAgICAgICAgICAgICAiJ0ZvcmdvdCBwYXNzd29yZD8nKSxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAiWycvdXNlci9yZWNvdmVyeS9yZXF1ZXN0J10sXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3RhYmluZGV4JyA9PiAnNSddXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnKScgOiAnJylcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgPD89ICRmb3JtLT5maWVsZCgkbW9kZWwsICcKICAgICAgICAgICAgICAgICAgICAgICAiJ3JlbWVtYmVyTWUnKS0+Y2hlY2tib3goWyd0YWJpbmRleCcgPT4gJzQnXSkgPz5cclxuIgogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgPD89IEh0bWw6OnN1Ym1pdEJ1dHRvbihcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIFlpaTo6dCgndXN1YXJpbycsICdTaWduIGluJyksXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICBbJ29uY2xpY2snID0+ICdmb3JtTG9naW4oKScsICIKICAgICAgICAgICAgICAgICAgICAgICAiJ2NsYXNzJyA9PiAnYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9jaycsICd0YWJpbmRleCcgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICInMyddXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgPD9waHAgQWN0aXZlRm9ybTo6ZW5kKCk7ID8+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIDw/cGhwIGlmICgkbW9kdWxlLT5lbmFibGVFbWFpbENvbmZpcm1hdGlvbik6ICcKICAgICAgICAgICAgICAgICAgICAgICAnPz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1jZW50ZXIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICA8Pz0gSHRtbDo6YShcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIFlpaTo6dCgndXN1YXJpbycsICdEaWRuXFwndCAiCiAgICAgICAgICAgICAgICAgICAgICAgInJlY2VpdmUgY29uZmlybWF0aW9uIG1lc3NhZ2U/JyksXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICBbJy91c2VyL3JlZ2lzdHJhdGlvbi9yZXNlbmQnXVxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICApID8+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgPC9wPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgPD9waHAgZW5kaWYgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIDw/cGhwIGlmICgkbW9kdWxlLT5lbmFibGVSZWdpc3RyYXRpb24pOiA/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWNlbnRlciI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIDw/PSBIdG1sOjphKFlpaTo6dCgndXN1YXJpbycsICdEb25cXCd0ICIKICAgICAgICAgICAgICAgICAgICAgICAiaGF2ZSBhbiBhY2NvdW50PyBTaWduIHVwIScpLCAiCiAgICAgICAgICAgICAgICAgICAgICAgIlsnL3VzZXIvcmVnaXN0cmF0aW9uL3JlZ2lzdGVyJ10pID8+XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgPC9wPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgPD9waHAgZW5kaWYgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIDw/PSBDb25uZWN0V2lkZ2V0Ojp3aWRnZXQoXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgW1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAnYmFzZUF1dGhVcmwnID0+ICIKICAgICAgICAgICAgICAgICAgICAgICAiWycvdXNlci9zZWN1cml0eS9hdXRoJ10sXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgXVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgKSA/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8c2NyaXB0PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIGNvbnN0IG15YUZvcm0gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdMb2dpbkZvcm0nKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICBmdW5jdGlvbiBmb3JtTG9naW4oKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICBteWFGb3JtLnN1Ym1pdCgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgZnVuY3Rpb24gdXNlckxvZ2luKCkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgIGNvbnNvbGUubG9nKCd1c2VyTG9naW4nKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAkKCcjdXNlcmxvZ2luaWQnKS50b2dnbGUoJ3Nsb3cnKVxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgbGV0IGdtYWlsVXNlcj0gJwogICAgICAgICAgICAgICAgICAgICAgICJsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZ21haWxVc2VyJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgIGxldCBnbWFpbFBhc3N3b3JkPSAnCiAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsU3RvcmFnZS5nZXRJdGVtKCdnbWFpbFBhc3N3b3JkJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgIGlmIChnbWFpbFVzZXIpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICBjb25zb2xlLmxvZygnbG9naW4ucGhwOicsIGdtYWlsVXNlciwgIgogICAgICAgICAgICAgICAgICAgICAgICdnbWFpbFBhc3N3b3JkKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZ21haWxVc2VyJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2dtYWlsUGFzc3dvcmQnKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICBsZXQgdWVsZW1lbnQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dpbmZvcm0tbG9naW4nKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICB1ZWxlbWVudC52YWx1ZT0gZ21haWxVc2VyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIGxldCBwZWxlbWVudCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luZm9ybS1wYXNzd29yZCcpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIHBlbGVtZW50LnZhbHVlPSBnbWFpbFBhc3N3b3JkO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIC8vLyBwZXJmb3JtIHN1Ym1pdFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIGNvbnN0IG15Rm9ybSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0xvZ2luRm9ybScpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgIG15Rm9ybS5zdWJtaXQoKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwvc2NyaXB0PicsCiAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICcuLi9zcmMveWlpMi9hZHZhbmNlZC92ZW5kb3IvMmFtaWdvcy95aWkyLXVzdWFyaW8vc3JjL1VzZXIvcmVzb3VyY2VzL3ZpZXdzL3NlY3VyaXR5L2xvZ2luLnBocCcsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAnJywKICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICAgICdOZWVkQ29weSc6ICcnLAogICAgICAgICAgICAgICAnTm90ZXMnOiAnJywKICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6ICcnLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICdsb2dpbi5waHAnLAogICAgICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgICAgJ3ljb2RlJzogJyd9fSwKIDY6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICdEYXRhJzogJzw/cGhwIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJy8qXHJcbicKICAgICAgICAgICAgICAgICAgICAnICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIDJhbWlnb3MveWlpMi11c3VhcmlvICcKICAgICAgICAgICAgICAgICAgICAncHJvamVjdC5cclxuJwogICAgICAgICAgICAgICAgICAgICcgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqIChjKSAyYW1pZ09TISA8aHR0cDovLzJhbWlnb3MudXMvPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqXHJcbicKICAgICAgICAgICAgICAgICAgICAnICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlICcKICAgICAgICAgICAgICAgICAgICAndmlld1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgJ2NvZGUuXHJcbicKICAgICAgICAgICAgICAgICAgICAnICovXHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnbmFtZXNwYWNlIERhXFxVc2VyXFxDb21tYW5kO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcRmFjdG9yeVxcTWFpbEZhY3Rvcnk7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxNb2RlbFxcVXNlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXFNlcnZpY2VcXFVzZXJDcmVhdGVTZXJ2aWNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcVHJhaXRzXFxDb250YWluZXJBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBZaWk7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcY29uc29sZVxcQ29udHJvbGxlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxoZWxwZXJzXFxDb25zb2xlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ2NsYXNzIENyZWF0ZUNvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyXHJcbicKICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB1c2UgQ29udGFpbmVyQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgLyoqXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgbmV3IHVzZXIgYWNjb3VudC4gSWYgbm8gJwogICAgICAgICAgICAgICAgICAgICdwYXNzd29yZCBpcyBub3Qgc2V0LCBhbiA4LWNoYXIgcGFzc3dvcmQgd2lsbCBiZSAnCiAgICAgICAgICAgICAgICAgICAgJ2dlbmVyYXRlZC4gQWZ0ZXJcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogc2F2aW5nIHVzZXIgdG8gZGF0YWJhc2UsIHRoaXMgY29tbWFuZCB1c2VzIG1haWxlciAnCiAgICAgICAgICAgICAgICAgICAgJ2NvbXBvbmVudCB0byBzZW5kIGNyZWRlbnRpYWxzICh1c2VybmFtZSBhbmQgcGFzc3dvcmQpIHRvICcKICAgICAgICAgICAgICAgICAgICAndXNlclxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKiB2aWEgZW1haWwuIEEgcm9sZSBjYW4gYmUgYWxzbyBhc3NpZ25lZCBidXQgaXQgbXVzdCAnCiAgICAgICAgICAgICAgICAgICAgJ2V4aXN0cyBwcmV2aW91c2x5IG9uIHRoZSBkYXRhYmFzZS5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogQHBhcmFtIHN0cmluZyAgICAgICRlbWFpbCAgICBFbWFpbFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHVzZXJuYW1lIFVzZXJuYW1lXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkdXJsIHdlYnNpdGUgdXJsXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFzc3dvcmQgVGhlIHBhc3N3b3JkLiBJZiBudWxsICcKICAgICAgICAgICAgICAgICAgICAnaXQgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJvbGUgICAgIFJvbGUgdG8gYXNzaWduIChtdXN0ICcKICAgICAgICAgICAgICAgICAgICAnYWxyZWFkeSBleGlzdClcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogQHRocm93cyBcXHlpaVxcYmFzZVxcSW52YWxpZENvbmZpZ0V4Y2VwdGlvblxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgcHVibGljIGZ1bmN0aW9uIGFjdGlvbkluZGV4KCRlbWFpbCwgJHVzZXJuYW1lLCAkdXJsLCAnCiAgICAgICAgICAgICAgICAgICAgJyRwYXNzd29yZCA9IG51bGwsICRyb2xlID0gbnVsbClcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgLyoqIEB2YXIgVXNlciAkdXNlciAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHVzZXIgPSAkdGhpcy0+bWFrZShcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBVc2VyOjpjbGFzcyxcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBbXSxcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBbJ3NjZW5hcmlvJyA9PiAnY3JlYXRlJywgJ2VtYWlsJyA9PiAkZW1haWwsICIKICAgICAgICAgICAgICAgICAgICAiJ3VzZXJuYW1lJyA9PiAkdXNlcm5hbWUsICdwYXNzd29yZCcgPT4gJHBhc3N3b3JkXVxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcdCNwcmludF9yKCR1c2VyLT51c2VybmFtZSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHQjcmV0dXJuO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJG1haWxTZXJ2aWNlID0gJwogICAgICAgICAgICAgICAgICAgICdNYWlsRmFjdG9yeTo6bWFrZVdlbGNvbWVNYWlsZXJTZXJ2aWNlKCR1c2VyLCB0cnVlLCAnCiAgICAgICAgICAgICAgICAgICAgIihvYmplY3QpWyd1cmwnID0+ICR1cmxdKTtcclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIGlmICgkdGhpcy0+bWFrZShVc2VyQ3JlYXRlU2VydmljZTo6Y2xhc3MsIFskdXNlciwgJwogICAgICAgICAgICAgICAgICAgICckbWFpbFNlcnZpY2VdKS0+cnVuKCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAkdGhpcy0+c3Rkb3V0KFlpaTo6dCgndXN1YXJpbycsICdVc2VyIGhhcyAiCiAgICAgICAgICAgICAgICAgICAgJ2JlZW4gY3JlYXRlZFwnKSAuICIhXFxuIiwgQ29uc29sZTo6RkdfR1JFRU4pO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGlmIChudWxsICE9PSAkcm9sZSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAkdGhpcy0+YXNzaWduUm9sZSgkdXNlciwgJHJvbGUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIH0gZWxzZSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgJHRoaXMtPnN0ZG91dChZaWk6OnQoJ3VzdWFyaW8nLCAnUGxlYXNlIGZpeCAiCiAgICAgICAgICAgICAgICAgICAgJ2ZvbGxvd2luZyBlcnJvcnM6XCcpIC4gIlxcbiIsIENvbnNvbGU6OkZHX1JFRCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgZm9yZWFjaCAoJHVzZXItPmVycm9ycyBhcyAkZXJyb3JzKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlcnJvcnMgYXMgJGVycm9yKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c3Rkb3V0KCcgLSAnIC4gJGVycm9yIC4gIgogICAgICAgICAgICAgICAgICAgICciXFxuIiwgQ29uc29sZTo6RkdfUkVEKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYXNzaWduUm9sZShVc2VyICR1c2VyLCAkcm9sZSlcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGF1dGggPSBZaWk6OiRhcHAtPmdldEF1dGhNYW5hZ2VyKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICBpZiAoZmFsc2UgPT09ICRhdXRoKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJHRoaXMtPnN0ZG91dChcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgWWlpOjp0KFxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgJ3VzdWFyaW8nLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgXCdDYW5ub3QgYXNzaWduIHJvbGUgInswfSIgYXMgdGhlICcKICAgICAgICAgICAgICAgICAgICAnQXV0aE1hbmFnZXIgaXMgbm90IGNvbmZpZ3VyZWQgb24geW91ciBjb25zb2xlICcKICAgICAgICAgICAgICAgICAgICAiYXBwbGljYXRpb24uJyxcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICRyb2xlXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICkgLiAiXFxuIixcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgQ29uc29sZTo6RkdfUkVEXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIH0gZWxzZSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJHVzZXJSb2xlID0gJGF1dGgtPmdldFJvbGUoJHJvbGUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGlmIChudWxsID09PSAkdXNlclJvbGUpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgJHRoaXMtPnN0ZG91dChZaWk6OnQoJ3VzdWFyaW8nLCAnUm9sZSAiCiAgICAgICAgICAgICAgICAgICAgJyJ7MH0iIG5vdCBmb3VuZC4gQ3JlYXRpbmcgaXQuXCcsIFskcm9sZV0pIC4gIiFcXG4iLCAnCiAgICAgICAgICAgICAgICAgICAgJ0NvbnNvbGU6OkZHX0dSRUVOKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJHVzZXJSb2xlID0gJGF1dGgtPmNyZWF0ZVJvbGUoJHJvbGUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAkYXV0aC0+YWRkKCR1c2VyUm9sZSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICRhdXRoLT5hc3NpZ24oJHVzZXJSb2xlLCAkdXNlci0+aWQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnfVxyXG4nLAogICAgICAgICAgICAnRmlsZU5hbWUnOiAnLi4vc3JjL3lpaTIvYWR2YW5jZWQvdmVuZG9yLzJhbWlnb3MveWlpMi11c3VhcmlvL3NyYy9Vc2VyL0NvbW1hbmQvQ3JlYXRlQ29udHJvbGxlci5waHAnLAogICAgICAgICAgICAnSXNUZXh0JzogJycsCiAgICAgICAgICAgICdNeU1vZHVsZSc6ICdiX2NvZGVFZGl0b3InLAogICAgICAgICAgICAnTmVlZENvcHknOiAnJywKICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgJ2FMYWJlbCc6ICd5aWkyIGNvbnNvbGUgY29tbWFuZCB1c3IvY3JlYXRlJywKICAgICAgICAgICAgJ2FzdmdmaWxlJzogJycsCiAgICAgICAgICAgICd5Y29kZSc6ICcnfSwKICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6IDEsCiAgICAgICAgICAgICAgICdEYXRhJzogJzw/cGhwIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJy8qXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIDJhbWlnb3MveWlpMi11c3VhcmlvICcKICAgICAgICAgICAgICAgICAgICAgICAncHJvamVjdC5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqIChjKSAyYW1pZ09TISA8aHR0cDovLzJhbWlnb3MudXMvPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgJwogICAgICAgICAgICAgICAgICAgICAgICdwbGVhc2Ugdmlld1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzICcKICAgICAgICAgICAgICAgICAgICAgICAnc291cmNlIGNvZGUuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnbmFtZXNwYWNlIERhXFxVc2VyXFxDb21tYW5kO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcRmFjdG9yeVxcTWFpbEZhY3Rvcnk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxNb2RlbFxcVXNlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXFNlcnZpY2VcXFVzZXJDcmVhdGVTZXJ2aWNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcVHJhaXRzXFxDb250YWluZXJBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBZaWk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcY29uc29sZVxcQ29udHJvbGxlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxoZWxwZXJzXFxDb25zb2xlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzIENyZWF0ZUNvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB1c2UgQ29udGFpbmVyQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgLyoqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAqIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgbmV3IHVzZXIgYWNjb3VudC4gSWYgbm8gJwogICAgICAgICAgICAgICAgICAgICAgICdwYXNzd29yZCBpcyBub3Qgc2V0LCBhbiA4LWNoYXIgcGFzc3dvcmQgd2lsbCBiZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ2dlbmVyYXRlZC4gQWZ0ZXJcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogc2F2aW5nIHVzZXIgdG8gZGF0YWJhc2UsIHRoaXMgY29tbWFuZCB1c2VzICcKICAgICAgICAgICAgICAgICAgICAgICAnbWFpbGVyIGNvbXBvbmVudCB0byBzZW5kIGNyZWRlbnRpYWxzICh1c2VybmFtZSBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICdwYXNzd29yZCkgdG8gdXNlclxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiB2aWEgZW1haWwuIEEgcm9sZSBjYW4gYmUgYWxzbyBhc3NpZ25lZCBidXQgaXQgJwogICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGV4aXN0cyBwcmV2aW91c2x5IG9uIHRoZSBkYXRhYmFzZS5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogQHBhcmFtIHN0cmluZyAgICAgICRlbWFpbCAgICBFbWFpbFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHVzZXJuYW1lIFVzZXJuYW1lXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkdXJsIHdlYnNpdGUgdXJsXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFzc3dvcmQgVGhlIHBhc3N3b3JkLiBJZiAnCiAgICAgICAgICAgICAgICAgICAgICAgJ251bGwgaXQgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJvbGUgICAgIFJvbGUgdG8gYXNzaWduICcKICAgICAgICAgICAgICAgICAgICAgICAnKG11c3QgYWxyZWFkeSBleGlzdClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogQHRocm93cyBcXHlpaVxcYmFzZVxcSW52YWxpZENvbmZpZ0V4Y2VwdGlvblxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgcHVibGljIGZ1bmN0aW9uIGFjdGlvbkluZGV4KCRlbWFpbCwgJHVzZXJuYW1lLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJyR1cmwsICRwYXNzd29yZCA9IG51bGwsICRyb2xlID0gbnVsbClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgLyoqIEB2YXIgVXNlciAkdXNlciAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHVzZXIgPSAkdGhpcy0+bWFrZShcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBVc2VyOjpjbGFzcyxcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBbXSxcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICBbJ3NjZW5hcmlvJyA9PiAnY3JlYXRlJywgJ2VtYWlsJyA9PiAiCiAgICAgICAgICAgICAgICAgICAgICAgIiRlbWFpbCwgJ3VzZXJuYW1lJyA9PiAkdXNlcm5hbWUsICdwYXNzd29yZCcgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICckcGFzc3dvcmRdXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICApO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1x0I3ByaW50X3IoJHVzZXItPnVzZXJuYW1lKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcdCNyZXR1cm47XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkbWFpbFNlcnZpY2UgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ01haWxGYWN0b3J5OjptYWtlV2VsY29tZU1haWxlclNlcnZpY2UoJHVzZXIsIHRydWUsICcKICAgICAgICAgICAgICAgICAgICAgICAiKG9iamVjdClbJ3VybCcgPT4gJHVybF0pO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgaWYgKCR0aGlzLT5tYWtlKFVzZXJDcmVhdGVTZXJ2aWNlOjpjbGFzcywgJwogICAgICAgICAgICAgICAgICAgICAgICdbJHVzZXIsICRtYWlsU2VydmljZV0pLT5ydW4oKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICR0aGlzLT5zdGRvdXQoWWlpOjp0KCd1c3VhcmlvJywgJ1VzZXIgaGFzICIKICAgICAgICAgICAgICAgICAgICAgICAnYmVlbiBjcmVhdGVkXCcpIC4gIiFcXG4iLCBDb25zb2xlOjpGR19HUkVFTik7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgaWYgKG51bGwgIT09ICRyb2xlKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICR0aGlzLT5hc3NpZ25Sb2xlKCR1c2VyLCAkcm9sZSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfSBlbHNlIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAkdGhpcy0+c3Rkb3V0KFlpaTo6dCgndXN1YXJpbycsICdQbGVhc2UgIgogICAgICAgICAgICAgICAgICAgICAgICdmaXggZm9sbG93aW5nIGVycm9yczpcJykgLiAiXFxuIiwgQ29uc29sZTo6RkdfUkVEKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBmb3JlYWNoICgkdXNlci0+ZXJyb3JzIGFzICRlcnJvcnMpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGVycm9ycyBhcyAkZXJyb3IpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zdGRvdXQoJyAtICcgLiAkZXJyb3IgLiAiCiAgICAgICAgICAgICAgICAgICAgICAgJyJcXG4iLCBDb25zb2xlOjpGR19SRUQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhc3NpZ25Sb2xlKFVzZXIgJHVzZXIsICcKICAgICAgICAgICAgICAgICAgICAgICAnJHJvbGUpXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICRhdXRoID0gWWlpOjokYXBwLT5nZXRBdXRoTWFuYWdlcigpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgaWYgKGZhbHNlID09PSAkYXV0aCkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICR0aGlzLT5zdGRvdXQoXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIFlpaTo6dChcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICd1c3VhcmlvJyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIFwnQ2Fubm90IGFzc2lnbiByb2xlICJ7MH0iIGFzIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhNYW5hZ2VyIGlzIG5vdCBjb25maWd1cmVkIG9uIHlvdXIgY29uc29sZSAnCiAgICAgICAgICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uLicsXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAkcm9sZVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICApIC4gIlxcbiIsXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIENvbnNvbGU6OkZHX1JFRFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9IGVsc2Uge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICR1c2VyUm9sZSA9ICRhdXRoLT5nZXRSb2xlKCRyb2xlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBpZiAobnVsbCA9PT0gJHVzZXJSb2xlKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICR0aGlzLT5zdGRvdXQoWWlpOjp0KCd1c3VhcmlvJywgJ1JvbGUgIgogICAgICAgICAgICAgICAgICAgICAgICciezB9IiBub3QgZm91bmQuIENyZWF0aW5nIGl0LlwnLCBbJHJvbGVdKSAuICIhXFxuIiwgJwogICAgICAgICAgICAgICAgICAgICAgICdDb25zb2xlOjpGR19HUkVFTik7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICR1c2VyUm9sZSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAnJGF1dGgtPmNyZWF0ZVJvbGUoJHJvbGUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAkYXV0aC0+YWRkKCR1c2VyUm9sZSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICRhdXRoLT5hc3NpZ24oJHVzZXJSb2xlLCAkdXNlci0+aWQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nLAogICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnLi4vc3JjL3lpaTIvYWR2YW5jZWQvdmVuZG9yLzJhbWlnb3MveWlpMi11c3VhcmlvL3NyYy9Vc2VyL0NvbW1hbmQvQ3JlYXRlQ29udHJvbGxlci5waHAnLAogICAgICAgICAgICAgICAnSXNUZXh0JzogJycsCiAgICAgICAgICAgICAgICdNeU1vZHVsZSc6ICdiX2NvZGVFZGl0b3InLAogICAgICAgICAgICAgICAnTmVlZENvcHknOiAnJywKICAgICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICd5aWkyIGNvbnNvbGUgY29tbWFuZCB1c3IvY3JlYXRlJywKICAgICAgICAgICAgICAgJ2FzdmdmaWxlJzogJycsCiAgICAgICAgICAgICAgICd5Y29kZSc6ICcnfX0sCiA3OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgJ0NvcHlUb015UGFnZU9ubHknOiAnJywKICAgICAgICAgICAgJ0RhdGEnOiAnPD9waHBcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcvKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSAyYW1pZ29zL3lpaTItdXN1YXJpbyAnCiAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3QuXHJcbicKICAgICAgICAgICAgICAgICAgICAnICpcclxuJwogICAgICAgICAgICAgICAgICAgICcgKiAoYykgMmFtaWdPUyEgPGh0dHA6Ly8yYW1pZ29zLnVzLz5cclxuJwogICAgICAgICAgICAgICAgICAgICcgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSAnCiAgICAgICAgICAgICAgICAgICAgJ3ZpZXdcclxuJwogICAgICAgICAgICAgICAgICAgICcgKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICdjb2RlLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ25hbWVzcGFjZSBEYVxcVXNlclxcU2VydmljZTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXENvbnRyYWN0c1xcU2VydmljZUludGVyZmFjZTtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXEV2ZW50XFxVc2VyRXZlbnQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxIZWxwZXJcXFNlY3VyaXR5SGVscGVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcTW9kZWxcXFVzZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxUcmFpdHNcXE1haWxBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcVHJhaXRzXFxNb2R1bGVBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBFeGNlcHRpb247XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIFlpaTtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxiYXNlXFxJbnZhbGlkQ2FsbEV4Y2VwdGlvbjtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICdjbGFzcyBVc2VyQ3JlYXRlU2VydmljZSBpbXBsZW1lbnRzIFNlcnZpY2VJbnRlcmZhY2VcclxuJwogICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHVzZSBNYWlsQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgdXNlIE1vZHVsZUF3YXJlVHJhaXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkbW9kZWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkc2VjdXJpdHlIZWxwZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkbWFpbFNlcnZpY2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChVc2VyICRtb2RlbCwgTWFpbFNlcnZpY2UgJwogICAgICAgICAgICAgICAgICAgICckbWFpbFNlcnZpY2UsIFNlY3VyaXR5SGVscGVyICRzZWN1cml0eUhlbHBlcilcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHRoaXMtPm1vZGVsID0gJG1vZGVsO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHRoaXMtPm1haWxTZXJ2aWNlID0gJG1haWxTZXJ2aWNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHRoaXMtPnNlY3VyaXR5SGVscGVyID0gJHNlY3VyaXR5SGVscGVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIC8qKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAdGhyb3dzIEludmFsaWRDYWxsRXhjZXB0aW9uXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIEB0aHJvd3MgXFx5aWlcXGRiXFxFeGNlcHRpb25cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogQHJldHVybiBib29sXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBwdWJsaWMgZnVuY3Rpb24gcnVuKClcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJG1vZGVsID0gJHRoaXMtPm1vZGVsO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgaWYgKCRtb2RlbC0+Z2V0SXNOZXdSZWNvcmQoKSA9PT0gZmFsc2UpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENhbGxFeGNlcHRpb24oJ0Nhbm5vdCBjcmVhdGUgIgogICAgICAgICAgICAgICAgICAgICJhIG5ldyB1c2VyIGZyb20gYW4gZXhpc3Rpbmcgb25lLicpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHRyYW5zYWN0aW9uID0gJwogICAgICAgICAgICAgICAgICAgICckbW9kZWw6OmdldERiKCktPmJlZ2luVHJhbnNhY3Rpb24oKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIHRyeSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJG1vZGVsLT5jb25maXJtZWRfYXQgPSB0aW1lKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJG1vZGVsLT5wYXNzd29yZCA9ICcKICAgICAgICAgICAgICAgICAgICAnIWVtcHR5KCRtb2RlbC0+cGFzc3dvcmQpXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgID8gJG1vZGVsLT5wYXNzd29yZFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICA6ICcKICAgICAgICAgICAgICAgICAgICAnJHRoaXMtPnNlY3VyaXR5SGVscGVyLT5nZW5lcmF0ZVBhc3N3b3JkKDgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIC8qKiBAdmFyIFVzZXJFdmVudCAkZXZlbnQgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAkZXZlbnQgPSAkdGhpcy0+bWFrZShVc2VyRXZlbnQ6OmNsYXNzLCAnCiAgICAgICAgICAgICAgICAgICAgJ1skbW9kZWxdKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgJyRtb2RlbC0+dHJpZ2dlcihVc2VyRXZlbnQ6OkVWRU5UX0JFRk9SRV9DUkVBVEUsICcKICAgICAgICAgICAgICAgICAgICAnJGV2ZW50KTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBpZiAoISRtb2RlbC0+c2F2ZSgpKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICR0cmFuc2FjdGlvbi0+cm9sbEJhY2soKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgJyRtb2RlbC0+dHJpZ2dlcihVc2VyRXZlbnQ6OkVWRU5UX0FGVEVSX0NSRUFURSwgJwogICAgICAgICAgICAgICAgICAgICckZXZlbnQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGlmICghJHRoaXMtPnNlbmRNYWlsKCRtb2RlbCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJGVycm9yX21zZyA9IFlpaTo6dChcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICd1c3VhcmlvJyxcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICdFcnJvciBzZW5kaW5nIHdlbGNvbWUgbWVzc2FnZSB0byAiCiAgICAgICAgICAgICAgICAgICAgJyJ7ZW1haWx9Ii4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cJyxcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIFsnZW1haWwnID0+ICRtb2RlbC0+ZW1haWxdXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIC8vIGZyb20gd2ViIGRpc3BsYXkgYSBmbGFzaCBtZXNzYWdlIChpZiAnCiAgICAgICAgICAgICAgICAgICAgJ2VuYWJsZWQpXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAnKCR0aGlzLT5nZXRNb2R1bGUoKS0+ZW5hYmxlRmxhc2hNZXNzYWdlcyA9PT0gdHJ1ZSAmJiAnCiAgICAgICAgICAgICAgICAgICAgJ2lzX2EoWWlpOjokYXBwLCB5aWlcXHdlYlxcQXBwbGljYXRpb246OmNsYXNzKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgWWlpOjokYXBwLT5zZXNzaW9uLT5zZXRGbGFzaChcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAnd2FybmluZycsXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yX21zZ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBmcm9tIGNvbnNvbGUgYWRkIGFuIGVycm9yIHRvICIKICAgICAgICAgICAgICAgICAgICAndGhlIG1vZGVsIGluIG9yZGVyIHRvIHJldHVybiBhbiBlcnJvciBtZXNzYWdlXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIGlmIChpc19hKFlpaTo6JGFwcCwgJwogICAgICAgICAgICAgICAgICAgICd5aWlcXGNvbnNvbGVcXEFwcGxpY2F0aW9uOjpjbGFzcykpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICRtb2RlbC0+YWRkRXJyb3IoJ3VzZXJuYW1lJywgIgogICAgICAgICAgICAgICAgICAgICckZXJyb3JfbXNnKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgLy8gV29uJ3Qgc3RvcCBpZiBlbWFpbCBtYWlsIGZhaWxlZC5cclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgLy8kdHJhbnNhY3Rpb24tPnJvbGxCYWNrKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIC8vcmV0dXJuIGZhbHNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAkdHJhbnNhY3Rpb24tPmNvbW1pdCgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJHRyYW5zYWN0aW9uLT5yb2xsQmFjaygpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIFlpaTo6ZXJyb3IoJGUtPmdldE1lc3NhZ2UoKSwgJ3VzdWFyaW8nKTtcclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICd9XHJcbicsCiAgICAgICAgICAgICdGaWxlTmFtZSc6ICcuLi9zcmMveWlpMi9hZHZhbmNlZC92ZW5kb3IvMmFtaWdvcy95aWkyLXVzdWFyaW8vc3JjL1VzZXIvU2VydmljZS9Vc2VyQ3JlYXRlU2VydmljZS5waHAnLAogICAgICAgICAgICAnSXNUZXh0JzogJycsCiAgICAgICAgICAgICdNeU1vZHVsZSc6ICdiX2NvZGVFZGl0b3InLAogICAgICAgICAgICAnTmVlZENvcHknOiAnJywKICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAnJywKICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdhRmlsZScsCiAgICAgICAgICAgICdhTGFiZWwnOiAnVXNlckNyZWF0ZVNlcnZpY2UucGhwIHVwZGF0ZScsCiAgICAgICAgICAgICdhc3ZnZmlsZSc6ICcnLAogICAgICAgICAgICAneWNvZGUnOiAnJ30sCiAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgJ0NvcHlUb015UGFnZU9ubHknOiAnJywKICAgICAgICAgICAgICAgJ0RhdGEnOiAnPD9waHBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcvKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSAyYW1pZ29zL3lpaTItdXN1YXJpbyAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3QuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICpcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKiAoYykgMmFtaWdPUyEgPGh0dHA6Ly8yYW1pZ29zLnVzLz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sICcKICAgICAgICAgICAgICAgICAgICAgICAncGxlYXNlIHZpZXdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZSBjb2RlLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ25hbWVzcGFjZSBEYVxcVXNlclxcU2VydmljZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXENvbnRyYWN0c1xcU2VydmljZUludGVyZmFjZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXEV2ZW50XFxVc2VyRXZlbnQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxIZWxwZXJcXFNlY3VyaXR5SGVscGVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcTW9kZWxcXFVzZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxUcmFpdHNcXE1haWxBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcVHJhaXRzXFxNb2R1bGVBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBFeGNlcHRpb247XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIFlpaTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxiYXNlXFxJbnZhbGlkQ2FsbEV4Y2VwdGlvbjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdjbGFzcyBVc2VyQ3JlYXRlU2VydmljZSBpbXBsZW1lbnRzIFNlcnZpY2VJbnRlcmZhY2VcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHVzZSBNYWlsQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgdXNlIE1vZHVsZUF3YXJlVHJhaXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkbW9kZWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkc2VjdXJpdHlIZWxwZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkbWFpbFNlcnZpY2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChVc2VyICRtb2RlbCwgJwogICAgICAgICAgICAgICAgICAgICAgICdNYWlsU2VydmljZSAkbWFpbFNlcnZpY2UsIFNlY3VyaXR5SGVscGVyICcKICAgICAgICAgICAgICAgICAgICAgICAnJHNlY3VyaXR5SGVscGVyKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkdGhpcy0+bW9kZWwgPSAkbW9kZWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkdGhpcy0+bWFpbFNlcnZpY2UgPSAkbWFpbFNlcnZpY2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkdGhpcy0+c2VjdXJpdHlIZWxwZXIgPSAkc2VjdXJpdHlIZWxwZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgLyoqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAqIEB0aHJvd3MgSW52YWxpZENhbGxFeGNlcHRpb25cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogQHRocm93cyBcXHlpaVxcZGJcXEV4Y2VwdGlvblxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcmV0dXJuIGJvb2xcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHB1YmxpYyBmdW5jdGlvbiBydW4oKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkbW9kZWwgPSAkdGhpcy0+bW9kZWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICBpZiAoJG1vZGVsLT5nZXRJc05ld1JlY29yZCgpID09PSBmYWxzZSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2FsbEV4Y2VwdGlvbignQ2Fubm90ICIKICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlIGEgbmV3IHVzZXIgZnJvbSBhbiBleGlzdGluZyBvbmUuJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkdHJhbnNhY3Rpb24gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRtb2RlbDo6Z2V0RGIoKS0+YmVnaW5UcmFuc2FjdGlvbigpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgdHJ5IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAkbW9kZWwtPmNvbmZpcm1lZF9hdCA9IHRpbWUoKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAkbW9kZWwtPnBhc3N3b3JkID0gJwogICAgICAgICAgICAgICAgICAgICAgICchZW1wdHkoJG1vZGVsLT5wYXNzd29yZClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgPyAkbW9kZWwtPnBhc3N3b3JkXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIDogJwogICAgICAgICAgICAgICAgICAgICAgICckdGhpcy0+c2VjdXJpdHlIZWxwZXItPmdlbmVyYXRlUGFzc3dvcmQoOCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgLyoqIEB2YXIgVXNlckV2ZW50ICRldmVudCAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICRldmVudCA9ICR0aGlzLT5tYWtlKFVzZXJFdmVudDo6Y2xhc3MsICcKICAgICAgICAgICAgICAgICAgICAgICAnWyRtb2RlbF0pO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAnJG1vZGVsLT50cmlnZ2VyKFVzZXJFdmVudDo6RVZFTlRfQkVGT1JFX0NSRUFURSwgJwogICAgICAgICAgICAgICAgICAgICAgICckZXZlbnQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGlmICghJG1vZGVsLT5zYXZlKCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJHRyYW5zYWN0aW9uLT5yb2xsQmFjaygpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAnJG1vZGVsLT50cmlnZ2VyKFVzZXJFdmVudDo6RVZFTlRfQUZURVJfQ1JFQVRFLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRldmVudCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgaWYgKCEkdGhpcy0+c2VuZE1haWwoJG1vZGVsKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAkZXJyb3JfbXNnID0gWWlpOjp0KFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgJ3VzdWFyaW8nLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgJ0Vycm9yIHNlbmRpbmcgd2VsY29tZSBtZXNzYWdlIHRvICIKICAgICAgICAgICAgICAgICAgICAgICAnIntlbWFpbH0iLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwnLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgWydlbWFpbCcgPT4gJG1vZGVsLT5lbWFpbF1cclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgLy8gZnJvbSB3ZWIgZGlzcGxheSBhIGZsYXNoIG1lc3NhZ2UgJwogICAgICAgICAgICAgICAgICAgICAgICcoaWYgZW5hYmxlZClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICcoJHRoaXMtPmdldE1vZHVsZSgpLT5lbmFibGVGbGFzaE1lc3NhZ2VzID09PSB0cnVlICYmICcKICAgICAgICAgICAgICAgICAgICAgICAnaXNfYShZaWk6OiRhcHAsIHlpaVxcd2ViXFxBcHBsaWNhdGlvbjo6Y2xhc3MpKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICBZaWk6OiRhcHAtPnNlc3Npb24tPnNldEZsYXNoKFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICd3YXJuaW5nJyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JfbXNnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICApO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGZyb20gY29uc29sZSBhZGQgYW4gZXJyb3IgIgogICAgICAgICAgICAgICAgICAgICAgICd0byB0aGUgbW9kZWwgaW4gb3JkZXIgdG8gcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2VcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgaWYgKGlzX2EoWWlpOjokYXBwLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3lpaVxcY29uc29sZVxcQXBwbGljYXRpb246OmNsYXNzKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgJG1vZGVsLT5hZGRFcnJvcigndXNlcm5hbWUnLCAiCiAgICAgICAgICAgICAgICAgICAgICAgJyRlcnJvcl9tc2cpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAvLyBXb24ndCBzdG9wIGlmIGVtYWlsIG1haWwgZmFpbGVkLlxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAvLyR0cmFuc2FjdGlvbi0+cm9sbEJhY2soKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgLy9yZXR1cm4gZmFsc2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICR0cmFuc2FjdGlvbi0+Y29tbWl0KCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAkdHJhbnNhY3Rpb24tPnJvbGxCYWNrKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgWWlpOjplcnJvcigkZS0+Z2V0TWVzc2FnZSgpLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIid1c3VhcmlvJyk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nLAogICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnLi4vc3JjL3lpaTIvYWR2YW5jZWQvdmVuZG9yLzJhbWlnb3MveWlpMi11c3VhcmlvL3NyYy9Vc2VyL1NlcnZpY2UvVXNlckNyZWF0ZVNlcnZpY2UucGhwJywKICAgICAgICAgICAgICAgJ0lzVGV4dCc6ICcnLAogICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnYl9jb2RlRWRpdG9yJywKICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogJycsCiAgICAgICAgICAgICAgICdOb3Rlcyc6ICcnLAogICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogJycsCiAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnYUZpbGUnLAogICAgICAgICAgICAgICAnYUxhYmVsJzogJ1VzZXJDcmVhdGVTZXJ2aWNlLnBocCB1cGRhdGUnLAogICAgICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgICAgJ3ljb2RlJzogJyd9fSwKIDg6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6ICcnLAogICAgICAgICAgICAnRGF0YSc6ICc8P3BocCBcclxuJwogICAgICAgICAgICAgICAgICAgICcvKiB1cGRhdGVkIGZyb20gdGhlIG1hbmFnZW1lbnQgc2VydmVyXHJcbicKICAgICAgICAgICAgICAgICAgICAnICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIDJhbWlnb3MveWlpMi11c3VhcmlvICcKICAgICAgICAgICAgICAgICAgICAncHJvamVjdC5cclxuJwogICAgICAgICAgICAgICAgICAgICcgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqIChjKSAyYW1pZ09TISA8aHR0cDovLzJhbWlnb3MudXMvPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqXHJcbicKICAgICAgICAgICAgICAgICAgICAnICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlICcKICAgICAgICAgICAgICAgICAgICAndmlld1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgJ2NvZGUuXHJcbicKICAgICAgICAgICAgICAgICAgICAnICovXHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnbmFtZXNwYWNlIERhXFxVc2VyXFxDb250cm9sbGVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcQ29udHJhY3RzXFxBdXRoQ2xpZW50SW50ZXJmYWNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcRXZlbnRcXEZvcm1FdmVudDtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXEV2ZW50XFxVc2VyRXZlbnQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxGb3JtXFxMb2dpbkZvcm07XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxRdWVyeVxcU29jaWFsTmV0d29ya0FjY291bnRRdWVyeTtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgJwogICAgICAgICAgICAgICAgICAgICdEYVxcVXNlclxcU2VydmljZVxcU29jaWFsTmV0d29ya0FjY291bnRDb25uZWN0U2VydmljZTtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgJwogICAgICAgICAgICAgICAgICAgICdEYVxcVXNlclxcU2VydmljZVxcU29jaWFsTmV0d29ya0F1dGhlbnRpY2F0ZVNlcnZpY2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxUcmFpdHNcXENvbnRhaW5lckF3YXJlVHJhaXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxUcmFpdHNcXE1vZHVsZUF3YXJlVHJhaXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIFlpaTtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxhdXRoY2xpZW50XFxBdXRoQWN0aW9uO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSB5aWlcXGJhc2VcXEludmFsaWRDb25maWdFeGNlcHRpb247XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcYmFzZVxcSW52YWxpZFBhcmFtRXhjZXB0aW9uO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSB5aWlcXGJhc2VcXE1vZHVsZTtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxmaWx0ZXJzXFxBY2Nlc3NDb250cm9sO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSB5aWlcXGZpbHRlcnNcXFZlcmJGaWx0ZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcd2ViXFxDb250cm9sbGVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ3VzZSB5aWlcXHdlYlxcUmVzcG9uc2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcd2lkZ2V0c1xcQWN0aXZlRm9ybTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICdjbGFzcyBTZWN1cml0eUNvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyXHJcbicKICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB1c2UgQ29udGFpbmVyQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgdXNlIE1vZHVsZUF3YXJlVHJhaXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHByb3RlY3RlZCAkc29jaWFsTmV0d29ya0FjY291bnRRdWVyeTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgLyoqXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIFNlY3VyaXR5Q29udHJvbGxlciBjb25zdHJ1Y3Rvci5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgJGlkXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIEBwYXJhbSBNb2R1bGUgICAgICAgICAgICAgICAgICAgICRtb2R1bGVcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogQHBhcmFtIFNvY2lhbE5ldHdvcmtBY2NvdW50UXVlcnkgJwogICAgICAgICAgICAgICAgICAgICckc29jaWFsTmV0d29ya0FjY291bnRRdWVyeVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAgICAgICAkY29uZmlnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkaWQsXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICBNb2R1bGUgJG1vZHVsZSxcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIFNvY2lhbE5ldHdvcmtBY2NvdW50UXVlcnkgJwogICAgICAgICAgICAgICAgICAgICckc29jaWFsTmV0d29ya0FjY291bnRRdWVyeSxcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIGFycmF5ICRjb25maWcgPSBbXVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICApIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICR0aGlzLT5zb2NpYWxOZXR3b3JrQWNjb3VudFF1ZXJ5ID0gJwogICAgICAgICAgICAgICAgICAgICckc29jaWFsTmV0d29ya0FjY291bnRRdWVyeTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGlkLCAkbW9kdWxlLCAkY29uZmlnKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAvKipcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICoge0Bpbmhlcml0ZG9jfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgcHVibGljIGZ1bmN0aW9uIGJlaGF2aW9ycygpXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybiBbXHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgJ2FjY2VzcycgPT4gW1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAnY2xhc3MnID0+IEFjY2Vzc0NvbnRyb2w6OmNsYXNzLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAncnVsZXMnID0+IFtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIFtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAnYWxsb3cnID0+IHRydWUsXHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbnMnID0+IFsnbG9naW4nLCAnY29uZmlybScsICIKICAgICAgICAgICAgICAgICAgICAiJ2F1dGgnLCAnYmxvY2tlZCddLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICdyb2xlcycgPT4gWyc/J10sXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICBdLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgW1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICdhbGxvdycgPT4gdHJ1ZSxcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucycgPT4gWydsb2dpbicsICdhdXRoJywgIgogICAgICAgICAgICAgICAgICAgICInbG9nb3V0J10sXHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgJ3JvbGVzJyA9PiBbJ0AnXSxcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIF0sXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIF0sXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgXSxcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAndmVyYnMnID0+IFtcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgJ2NsYXNzJyA9PiBWZXJiRmlsdGVyOjpjbGFzcyxcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBdLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgXTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAvKipcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICoge0Bpbmhlcml0ZG9jfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgcHVibGljIGZ1bmN0aW9uIGFjdGlvbnMoKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICByZXR1cm4gW1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICdhdXRoJyA9PiBbXHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICdjbGFzcycgPT4gQXV0aEFjdGlvbjo6Y2xhc3MsXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIC8vIGlmIHVzZXIgaXMgbm90IGxvZ2dlZCBpbiwgd2lsbCB0cnkgdG8gJwogICAgICAgICAgICAgICAgICAgICdsb2cgaGltIGluLCBvdGhlcndpc2VcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgLy8gd2lsbCB0cnkgdG8gY29ubmVjdCBzb2NpYWwgYWNjb3VudCB0byAnCiAgICAgICAgICAgICAgICAgICAgJ3VzZXIuXHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICdzdWNjZXNzQ2FsbGJhY2snID0+ICIKICAgICAgICAgICAgICAgICAgICAnWWlpOjokYXBwLT51c2VyLT5pc0d1ZXN0XHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICA/IFskdGhpcywgJ2F1dGhlbnRpY2F0ZSddXHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICA6IFskdGhpcywgJ2Nvbm5lY3QnXSxcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBdLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgXTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAvKipcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogQ29udHJvbGxlciBhY3Rpb24gcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGxvZ2luICcKICAgICAgICAgICAgICAgICAgICAncGFnZSBhbmQgYWN0aW9ucy5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICpcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICogQHRocm93cyBJbnZhbGlkQ29uZmlnRXhjZXB0aW9uXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIEB0aHJvd3MgSW52YWxpZFBhcmFtRXhjZXB0aW9uXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqIEByZXR1cm4gYXJyYXl8c3RyaW5nfFJlc3BvbnNlXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBwdWJsaWMgZnVuY3Rpb24gYWN0aW9uTG9naW4oKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICBpZiAoIVlpaTo6JGFwcC0+dXNlci0+Z2V0SXNHdWVzdCgpKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nb0hvbWUoKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIC8qKiBAdmFyIExvZ2luRm9ybSAkZm9ybSAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGZvcm0gPSAkdGhpcy0+bWFrZShMb2dpbkZvcm06OmNsYXNzKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIC8qKiBAdmFyIEZvcm1FdmVudCAkZXZlbnQgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICRldmVudCA9ICR0aGlzLT5tYWtlKEZvcm1FdmVudDo6Y2xhc3MsICcKICAgICAgICAgICAgICAgICAgICAnWyRmb3JtXSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICBpZiAoWWlpOjokYXBwLT5yZXF1ZXN0LT5pc0FqYXggJiYgJwogICAgICAgICAgICAgICAgICAgICckZm9ybS0+bG9hZChZaWk6OiRhcHAtPnJlcXVlc3QtPnBvc3QoKSkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBZaWk6OiRhcHAtPnJlc3BvbnNlLT5mb3JtYXQgPSAnCiAgICAgICAgICAgICAgICAgICAgJ1Jlc3BvbnNlOjpGT1JNQVRfSlNPTjtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICByZXR1cm4gQWN0aXZlRm9ybTo6dmFsaWRhdGUoJGZvcm0pO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgaWYgKCRmb3JtLT5sb2FkKFlpaTo6JGFwcC0+cmVxdWVzdC0+cG9zdCgpKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAnKCR0aGlzLT5tb2R1bGUtPmVuYWJsZVR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uICYmICcKICAgICAgICAgICAgICAgICAgICAnJGZvcm0tPnZhbGlkYXRlKCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgaWYgKCRmb3JtLT5nZXRVc2VyKCktPmF1dGhfdGZfZW5hYmxlZCkgJwogICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgIllpaTo6JGFwcC0+c2Vzc2lvbi0+c2V0KCdjcmVkZW50aWFscycsIFsnbG9naW4nID0+ICIKICAgICAgICAgICAgICAgICAgICAiJGZvcm0tPmxvZ2luLCAncHdkJyA9PiAkZm9ybS0+cGFzc3dvcmRdKTtcclxuIgogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgIiR0aGlzLT5yZWRpcmVjdChbJ2NvbmZpcm0nXSk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJHRoaXMtPnRyaWdnZXIoRm9ybUV2ZW50OjpFVkVOVF9CRUZPUkVfTE9HSU4sICcKICAgICAgICAgICAgICAgICAgICAnJGV2ZW50KTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBpZiAoJGZvcm0tPmxvZ2luKCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJGZvcm0tPmdldFVzZXIoKS0+dXBkYXRlQXR0cmlidXRlcyhbXHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAnbGFzdF9sb2dpbl9hdCcgPT4gdGltZSgpLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgJ2xhc3RfbG9naW5faXAnID0+ICIKICAgICAgICAgICAgICAgICAgICAnWWlpOjokYXBwLT5yZXF1ZXN0LT5nZXRVc2VySVAoKSxcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgXSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAnJHRoaXMtPnRyaWdnZXIoRm9ybUV2ZW50OjpFVkVOVF9BRlRFUl9MT0dJTiwgJGV2ZW50KTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nb0JhY2soKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgZWxzZVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICckdGhpcy0+dHJpZ2dlcihGb3JtRXZlbnQ6OkVWRU5UX0ZBSUxFRF9MT0dJTiwgJwogICAgICAgICAgICAgICAgICAgICckZXZlbnQpOyAgICBcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICByZXR1cm4gJHRoaXMtPnJlbmRlcihcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAnbG9naW4nLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIFtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgJ21vZGVsJyA9PiAkZm9ybSxcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgJ21vZHVsZScgPT4gJHRoaXMtPm1vZHVsZSxcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBdXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICApO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHB1YmxpYyBmdW5jdGlvbiBhY3Rpb25Db25maXJtKClcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgaWYgKCFZaWk6OiRhcHAtPnVzZXItPmdldElzR3Vlc3QoKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Z29Ib21lKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICBpZiAoIVlpaTo6JGFwcC0+c2Vzc2lvbi0+aGFzKCdjcmVkZW50aWFscycpKSB7XHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZWRpcmVjdChbJ2xvZ2luJ10pO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGNyZWRlbnRpYWxzID0gJwogICAgICAgICAgICAgICAgICAgICJZaWk6OiRhcHAtPnNlc3Npb24tPmdldCgnY3JlZGVudGlhbHMnKTtcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgIC8qKiBAdmFyIExvZ2luRm9ybSAkZm9ybSAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGZvcm0gPSAkdGhpcy0+bWFrZShMb2dpbkZvcm06OmNsYXNzKTtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICRmb3JtLT5sb2dpbiA9ICRjcmVkZW50aWFsc1snbG9naW4nXTtcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICRmb3JtLT5wYXNzd29yZCA9ICRjcmVkZW50aWFsc1sncHdkJ107XHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAkZm9ybS0+c2V0U2NlbmFyaW8oJzJmYScpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgLyoqIEB2YXIgRm9ybUV2ZW50ICRldmVudCAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGV2ZW50ID0gJHRoaXMtPm1ha2UoRm9ybUV2ZW50OjpjbGFzcywgJwogICAgICAgICAgICAgICAgICAgICdbJGZvcm1dKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIGlmIChZaWk6OiRhcHAtPnJlcXVlc3QtPmlzQWpheCAmJiAnCiAgICAgICAgICAgICAgICAgICAgJyRmb3JtLT5sb2FkKFlpaTo6JGFwcC0+cmVxdWVzdC0+cG9zdCgpKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIFlpaTo6JGFwcC0+cmVzcG9uc2UtPmZvcm1hdCA9ICcKICAgICAgICAgICAgICAgICAgICAnUmVzcG9uc2U6OkZPUk1BVF9KU09OO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIHJldHVybiBBY3RpdmVGb3JtOjp2YWxpZGF0ZSgkZm9ybSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICBpZiAoJGZvcm0tPmxvYWQoWWlpOjokYXBwLT5yZXF1ZXN0LT5wb3N0KCkpKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgJHRoaXMtPnRyaWdnZXIoRm9ybUV2ZW50OjpFVkVOVF9CRUZPUkVfTE9HSU4sICcKICAgICAgICAgICAgICAgICAgICAnJGV2ZW50KTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBpZiAoJGZvcm0tPmxvZ2luKCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgWWlpOjokYXBwLT5zZXNzaW9uLT5zZXQoJ2NyZWRlbnRpYWxzJywgIgogICAgICAgICAgICAgICAgICAgICdudWxsKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICIkZm9ybS0+Z2V0VXNlcigpLT51cGRhdGVBdHRyaWJ1dGVzKFsnbGFzdF9sb2dpbl9hdCcgPT4gIgogICAgICAgICAgICAgICAgICAgICd0aW1lKCldKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICckdGhpcy0+dHJpZ2dlcihGb3JtRXZlbnQ6OkVWRU5UX0FGVEVSX0xPR0lOLCAkZXZlbnQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmdvQmFjaygpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybiAkdGhpcy0+cmVuZGVyKFxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICdjb25maXJtJyxcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBbXHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICdtb2RlbCcgPT4gJGZvcm0sXHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICdtb2R1bGUnID0+ICR0aGlzLT5tb2R1bGUsXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgXVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBwdWJsaWMgZnVuY3Rpb24gYWN0aW9uTG9nb3V0KClcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGV2ZW50ID0gJHRoaXMtPm1ha2UoVXNlckV2ZW50OjpjbGFzcywgJwogICAgICAgICAgICAgICAgICAgICdbWWlpOjokYXBwLT5nZXRVc2VyKCktPmdldElkZW50aXR5KCldKTtcclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICR0aGlzLT50cmlnZ2VyKFVzZXJFdmVudDo6RVZFTlRfQkVGT1JFX0xPR09VVCwgJwogICAgICAgICAgICAgICAgICAgICckZXZlbnQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgaWYgKFlpaTo6JGFwcC0+Z2V0VXNlcigpLT5sb2dvdXQoKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICR0aGlzLT50cmlnZ2VyKFVzZXJFdmVudDo6RVZFTlRfQUZURVJfTE9HT1VULCAnCiAgICAgICAgICAgICAgICAgICAgJyRldmVudCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICAgICByZXR1cm4gJHRoaXMtPmdvSG9tZSgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHB1YmxpYyBmdW5jdGlvbiBhdXRoZW50aWNhdGUoQXV0aENsaWVudEludGVyZmFjZSAnCiAgICAgICAgICAgICAgICAgICAgJyRjbGllbnQpXHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAnJHRoaXMtPm1ha2UoU29jaWFsTmV0d29ya0F1dGhlbnRpY2F0ZVNlcnZpY2U6OmNsYXNzLCAnCiAgICAgICAgICAgICAgICAgICAgJ1skdGhpcywgJHRoaXMtPmFjdGlvbiwgJGNsaWVudF0pLT5ydW4oKTtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBwdWJsaWMgZnVuY3Rpb24gY29ubmVjdChBdXRoQ2xpZW50SW50ZXJmYWNlICcKICAgICAgICAgICAgICAgICAgICAnJGNsaWVudClcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgaWYgKFlpaTo6JGFwcC0+dXNlci0+aXNHdWVzdCkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIFlpaTo6JGFwcC0+c2Vzc2lvbi0+c2V0Rmxhc2goJ2RhbmdlcicsICIKICAgICAgICAgICAgICAgICAgICAiWWlpOjp0KCd1c3VhcmlvJywgJ1NvbWV0aGluZyB3ZW50IHdyb25nJykpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIHJldHVybjtcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAnJHRoaXMtPm1ha2UoU29jaWFsTmV0d29ya0FjY291bnRDb25uZWN0U2VydmljZTo6Y2xhc3MsICcKICAgICAgICAgICAgICAgICAgICAnWyR0aGlzLCAkY2xpZW50XSktPnJ1bigpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAnfVxyXG4nLAogICAgICAgICAgICAnRmlsZU5hbWUnOiAnLi4vc3JjL3lpaTIvYWR2YW5jZWQvdmVuZG9yLzJhbWlnb3MveWlpMi11c3VhcmlvL3NyYy9Vc2VyL0NvbnRyb2xsZXIvU2VjdXJpdHlDb250cm9sbGVyLnBocCcsCiAgICAgICAgICAgICdJc1RleHQnOiAnJywKICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICdOZWVkQ29weSc6ICcnLAogICAgICAgICAgICAnTm90ZXMnOiAnJywKICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6ICcnLAogICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgJ2FMYWJlbCc6ICdTZWNpcml0eUNvbnRyb2xsZXInLAogICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgJ3ljb2RlJzogJyd9LAogICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICdDb3B5VG9NeVBhZ2VPbmx5JzogJycsCiAgICAgICAgICAgICAgICdEYXRhJzogJzw/cGhwIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJy8qIHVwZGF0ZWQgZnJvbSB0aGUgbWFuYWdlbWVudCBzZXJ2ZXJcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgMmFtaWdvcy95aWkyLXVzdWFyaW8gJwogICAgICAgICAgICAgICAgICAgICAgICdwcm9qZWN0LlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICogKGMpIDJhbWlnT1MhIDxodHRwOi8vMmFtaWdvcy51cy8+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICpcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3BsZWFzZSB2aWV3XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICogdGhlIExJQ0VOU0UgZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgJwogICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2UgY29kZS5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICduYW1lc3BhY2UgRGFcXFVzZXJcXENvbnRyb2xsZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxDb250cmFjdHNcXEF1dGhDbGllbnRJbnRlcmZhY2U7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIERhXFxVc2VyXFxFdmVudFxcRm9ybUV2ZW50O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBEYVxcVXNlclxcRXZlbnRcXFVzZXJFdmVudDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXEZvcm1cXExvZ2luRm9ybTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXFF1ZXJ5XFxTb2NpYWxOZXR3b3JrQWNjb3VudFF1ZXJ5O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ0RhXFxVc2VyXFxTZXJ2aWNlXFxTb2NpYWxOZXR3b3JrQWNjb3VudENvbm5lY3RTZXJ2aWNlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ0RhXFxVc2VyXFxTZXJ2aWNlXFxTb2NpYWxOZXR3b3JrQXV0aGVudGljYXRlU2VydmljZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXFRyYWl0c1xcQ29udGFpbmVyQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgRGFcXFVzZXJcXFRyYWl0c1xcTW9kdWxlQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgWWlpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSB5aWlcXGF1dGhjbGllbnRcXEF1dGhBY3Rpb247XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcYmFzZVxcSW52YWxpZENvbmZpZ0V4Y2VwdGlvbjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxiYXNlXFxJbnZhbGlkUGFyYW1FeGNlcHRpb247XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcYmFzZVxcTW9kdWxlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSB5aWlcXGZpbHRlcnNcXEFjY2Vzc0NvbnRyb2w7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcZmlsdGVyc1xcVmVyYkZpbHRlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFx3ZWJcXENvbnRyb2xsZXI7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcd2ViXFxSZXNwb25zZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFx3aWRnZXRzXFxBY3RpdmVGb3JtO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzIFNlY3VyaXR5Q29udHJvbGxlciBleHRlbmRzIENvbnRyb2xsZXJcclxuJwogICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHVzZSBDb250YWluZXJBd2FyZVRyYWl0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB1c2UgTW9kdWxlQXdhcmVUcmFpdDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgcHJvdGVjdGVkICRzb2NpYWxOZXR3b3JrQWNjb3VudFF1ZXJ5O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAvKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogU2VjdXJpdHlDb250cm9sbGVyIGNvbnN0cnVjdG9yLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAkaWRcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogQHBhcmFtIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgJG1vZHVsZVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAcGFyYW0gU29jaWFsTmV0d29ya0FjY291bnRRdWVyeSAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRzb2NpYWxOZXR3b3JrQWNjb3VudFF1ZXJ5XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICAgICAgICRjb25maWdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICRpZCxcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIE1vZHVsZSAkbW9kdWxlLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgU29jaWFsTmV0d29ya0FjY291bnRRdWVyeSAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRzb2NpYWxOZXR3b3JrQWNjb3VudFF1ZXJ5LFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgYXJyYXkgJGNvbmZpZyA9IFtdXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJHRoaXMtPnNvY2lhbE5ldHdvcmtBY2NvdW50UXVlcnkgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRzb2NpYWxOZXR3b3JrQWNjb3VudFF1ZXJ5O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkaWQsICRtb2R1bGUsICRjb25maWcpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIC8qKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiB7QGluaGVyaXRkb2N9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBwdWJsaWMgZnVuY3Rpb24gYmVoYXZpb3JzKClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuIFtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAnYWNjZXNzJyA9PiBbXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICdjbGFzcycgPT4gQWNjZXNzQ29udHJvbDo6Y2xhc3MsXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICdydWxlcycgPT4gW1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgW1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICdhbGxvdycgPT4gdHJ1ZSxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucycgPT4gWydsb2dpbicsICIKICAgICAgICAgICAgICAgICAgICAgICAiJ2NvbmZpcm0nLCAnYXV0aCcsICdibG9ja2VkJ10sXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgJ3JvbGVzJyA9PiBbJz8nXSxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIF0sXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICBbXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgJ2FsbG93JyA9PiB0cnVlLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25zJyA9PiBbJ2xvZ2luJywgJ2F1dGgnLCAiCiAgICAgICAgICAgICAgICAgICAgICAgIidsb2dvdXQnXSxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAncm9sZXMnID0+IFsnQCddLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgXSxcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgXSxcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBdLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICd2ZXJicycgPT4gW1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAnY2xhc3MnID0+IFZlcmJGaWx0ZXI6OmNsYXNzLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIF0sXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICBdO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIC8qKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiB7QGluaGVyaXRkb2N9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBwdWJsaWMgZnVuY3Rpb24gYWN0aW9ucygpXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybiBbXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgJ2F1dGgnID0+IFtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgJ2NsYXNzJyA9PiBBdXRoQWN0aW9uOjpjbGFzcyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgLy8gaWYgdXNlciBpcyBub3QgbG9nZ2VkIGluLCB3aWxsIHRyeSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGxvZyBoaW0gaW4sIG90aGVyd2lzZVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAvLyB3aWxsIHRyeSB0byBjb25uZWN0IHNvY2lhbCBhY2NvdW50ICcKICAgICAgICAgICAgICAgICAgICAgICAndG8gdXNlci5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgJ3N1Y2Nlc3NDYWxsYmFjaycgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICdZaWk6OiRhcHAtPnVzZXItPmlzR3Vlc3RcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgID8gWyR0aGlzLCAnYXV0aGVudGljYXRlJ11cclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIDogWyR0aGlzLCAnY29ubmVjdCddLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIF0sXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICBdO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIC8qKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBDb250cm9sbGVyIGFjdGlvbiByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICdsb2dpbiBwYWdlIGFuZCBhY3Rpb25zLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgKiBAdGhyb3dzIEludmFsaWRDb25maWdFeGNlcHRpb25cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogQHRocm93cyBJbnZhbGlkUGFyYW1FeGNlcHRpb25cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICogQHJldHVybiBhcnJheXxzdHJpbmd8UmVzcG9uc2VcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHB1YmxpYyBmdW5jdGlvbiBhY3Rpb25Mb2dpbigpXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIGlmICghWWlpOjokYXBwLT51c2VyLT5nZXRJc0d1ZXN0KCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmdvSG9tZSgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgLyoqIEB2YXIgTG9naW5Gb3JtICRmb3JtICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAkZm9ybSA9ICR0aGlzLT5tYWtlKExvZ2luRm9ybTo6Y2xhc3MpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgLyoqIEB2YXIgRm9ybUV2ZW50ICRldmVudCAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGV2ZW50ID0gJHRoaXMtPm1ha2UoRm9ybUV2ZW50OjpjbGFzcywgJwogICAgICAgICAgICAgICAgICAgICAgICdbJGZvcm1dKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIGlmIChZaWk6OiRhcHAtPnJlcXVlc3QtPmlzQWpheCAmJiAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRmb3JtLT5sb2FkKFlpaTo6JGFwcC0+cmVxdWVzdC0+cG9zdCgpKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIFlpaTo6JGFwcC0+cmVzcG9uc2UtPmZvcm1hdCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAnUmVzcG9uc2U6OkZPUk1BVF9KU09OO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIHJldHVybiBBY3RpdmVGb3JtOjp2YWxpZGF0ZSgkZm9ybSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICBpZiAoJGZvcm0tPmxvYWQoWWlpOjokYXBwLT5yZXF1ZXN0LT5wb3N0KCkpKSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgJygkdGhpcy0+bW9kdWxlLT5lbmFibGVUd29GYWN0b3JBdXRoZW50aWNhdGlvbiAmJiAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRmb3JtLT52YWxpZGF0ZSgpKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIGlmICgkZm9ybS0+Z2V0VXNlcigpLT5hdXRoX3RmX2VuYWJsZWQpICcKICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICJZaWk6OiRhcHAtPnNlc3Npb24tPnNldCgnY3JlZGVudGlhbHMnLCBbJ2xvZ2luJyA9PiAiCiAgICAgICAgICAgICAgICAgICAgICAgIiRmb3JtLT5sb2dpbiwgJ3B3ZCcgPT4gJGZvcm0tPnBhc3N3b3JkXSk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICIkdGhpcy0+cmVkaXJlY3QoWydjb25maXJtJ10pO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAnJHRoaXMtPnRyaWdnZXIoRm9ybUV2ZW50OjpFVkVOVF9CRUZPUkVfTE9HSU4sICcKICAgICAgICAgICAgICAgICAgICAgICAnJGV2ZW50KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBpZiAoJGZvcm0tPmxvZ2luKCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICckZm9ybS0+Z2V0VXNlcigpLT51cGRhdGVBdHRyaWJ1dGVzKFtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICdsYXN0X2xvZ2luX2F0JyA9PiB0aW1lKCksXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAnbGFzdF9sb2dpbl9pcCcgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICdZaWk6OiRhcHAtPnJlcXVlc3QtPmdldFVzZXJJUCgpLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICBdKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICckdGhpcy0+dHJpZ2dlcihGb3JtRXZlbnQ6OkVWRU5UX0FGVEVSX0xPR0lOLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRldmVudCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Z29CYWNrKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIGVsc2VcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAnJHRoaXMtPnRyaWdnZXIoRm9ybUV2ZW50OjpFVkVOVF9GQUlMRURfTE9HSU4sICcKICAgICAgICAgICAgICAgICAgICAgICAnJGV2ZW50KTsgICAgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuICR0aGlzLT5yZW5kZXIoXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgJ2xvZ2luJyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBbXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICdtb2RlbCcgPT4gJGZvcm0sXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICdtb2R1bGUnID0+ICR0aGlzLT5tb2R1bGUsXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgXVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBwdWJsaWMgZnVuY3Rpb24gYWN0aW9uQ29uZmlybSgpXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIGlmICghWWlpOjokYXBwLT51c2VyLT5nZXRJc0d1ZXN0KCkpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmdvSG9tZSgpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgaWYgKCFZaWk6OiRhcHAtPnNlc3Npb24tPmhhcygnY3JlZGVudGlhbHMnKSkgIgogICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZWRpcmVjdChbJ2xvZ2luJ10pO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGNyZWRlbnRpYWxzID0gJwogICAgICAgICAgICAgICAgICAgICAgICJZaWk6OiRhcHAtPnNlc3Npb24tPmdldCgnY3JlZGVudGlhbHMnKTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIC8qKiBAdmFyIExvZ2luRm9ybSAkZm9ybSAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGZvcm0gPSAkdGhpcy0+bWFrZShMb2dpbkZvcm06OmNsYXNzKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICRmb3JtLT5sb2dpbiA9ICRjcmVkZW50aWFsc1snbG9naW4nXTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICRmb3JtLT5wYXNzd29yZCA9ICRjcmVkZW50aWFsc1sncHdkJ107XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAkZm9ybS0+c2V0U2NlbmFyaW8oJzJmYScpO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgLyoqIEB2YXIgRm9ybUV2ZW50ICRldmVudCAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGV2ZW50ID0gJHRoaXMtPm1ha2UoRm9ybUV2ZW50OjpjbGFzcywgJwogICAgICAgICAgICAgICAgICAgICAgICdbJGZvcm1dKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIGlmIChZaWk6OiRhcHAtPnJlcXVlc3QtPmlzQWpheCAmJiAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRmb3JtLT5sb2FkKFlpaTo6JGFwcC0+cmVxdWVzdC0+cG9zdCgpKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIFlpaTo6JGFwcC0+cmVzcG9uc2UtPmZvcm1hdCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAnUmVzcG9uc2U6OkZPUk1BVF9KU09OO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIHJldHVybiBBY3RpdmVGb3JtOjp2YWxpZGF0ZSgkZm9ybSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICBpZiAoJGZvcm0tPmxvYWQoWWlpOjokYXBwLT5yZXF1ZXN0LT5wb3N0KCkpKSAnCiAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgJyR0aGlzLT50cmlnZ2VyKEZvcm1FdmVudDo6RVZFTlRfQkVGT1JFX0xPR0lOLCAnCiAgICAgICAgICAgICAgICAgICAgICAgJyRldmVudCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgaWYgKCRmb3JtLT5sb2dpbigpKSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgIFlpaTo6JGFwcC0+c2Vzc2lvbi0+c2V0KCdjcmVkZW50aWFscycsICIKICAgICAgICAgICAgICAgICAgICAgICAnbnVsbCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAiJGZvcm0tPmdldFVzZXIoKS0+dXBkYXRlQXR0cmlidXRlcyhbJ2xhc3RfbG9naW5fYXQnID0+ICIKICAgICAgICAgICAgICAgICAgICAgICAndGltZSgpXSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAnJHRoaXMtPnRyaWdnZXIoRm9ybUV2ZW50OjpFVkVOVF9BRlRFUl9MT0dJTiwgJwogICAgICAgICAgICAgICAgICAgICAgICckZXZlbnQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmdvQmFjaygpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybiAkdGhpcy0+cmVuZGVyKFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICdjb25maXJtJyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBbXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICdtb2RlbCcgPT4gJGZvcm0sXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICdtb2R1bGUnID0+ICR0aGlzLT5tb2R1bGUsXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgXVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBwdWJsaWMgZnVuY3Rpb24gYWN0aW9uTG9nb3V0KClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJGV2ZW50ID0gJHRoaXMtPm1ha2UoVXNlckV2ZW50OjpjbGFzcywgJwogICAgICAgICAgICAgICAgICAgICAgICdbWWlpOjokYXBwLT5nZXRVc2VyKCktPmdldElkZW50aXR5KCldKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICR0aGlzLT50cmlnZ2VyKFVzZXJFdmVudDo6RVZFTlRfQkVGT1JFX0xPR09VVCwgJwogICAgICAgICAgICAgICAgICAgICAgICckZXZlbnQpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgaWYgKFlpaTo6JGFwcC0+Z2V0VXNlcigpLT5sb2dvdXQoKSkge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAnJHRoaXMtPnRyaWdnZXIoVXNlckV2ZW50OjpFVkVOVF9BRlRFUl9MT0dPVVQsICcKICAgICAgICAgICAgICAgICAgICAgICAnJGV2ZW50KTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybiAkdGhpcy0+Z29Ib21lKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgcHVibGljIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZShBdXRoQ2xpZW50SW50ZXJmYWNlICcKICAgICAgICAgICAgICAgICAgICAgICAnJGNsaWVudClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICckdGhpcy0+bWFrZShTb2NpYWxOZXR3b3JrQXV0aGVudGljYXRlU2VydmljZTo6Y2xhc3MsICcKICAgICAgICAgICAgICAgICAgICAgICAnWyR0aGlzLCAkdGhpcy0+YWN0aW9uLCAkY2xpZW50XSktPnJ1bigpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIHB1YmxpYyBmdW5jdGlvbiBjb25uZWN0KEF1dGhDbGllbnRJbnRlcmZhY2UgJwogICAgICAgICAgICAgICAgICAgICAgICckY2xpZW50KVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICBpZiAoWWlpOjokYXBwLT51c2VyLT5pc0d1ZXN0KSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgWWlpOjokYXBwLT5zZXNzaW9uLT5zZXRGbGFzaCgnZGFuZ2VyJywgIgogICAgICAgICAgICAgICAgICAgICAgICJZaWk6OnQoJ3VzdWFyaW8nLCAnU29tZXRoaW5nIHdlbnQgd3JvbmcnKSk7XHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgcmV0dXJuO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICckdGhpcy0+bWFrZShTb2NpYWxOZXR3b3JrQWNjb3VudENvbm5lY3RTZXJ2aWNlOjpjbGFzcywgJwogICAgICAgICAgICAgICAgICAgICAgICdbJHRoaXMsICRjbGllbnRdKS0+cnVuKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIH1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicsCiAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICcuLi9zcmMveWlpMi9hZHZhbmNlZC92ZW5kb3IvMmFtaWdvcy95aWkyLXVzdWFyaW8vc3JjL1VzZXIvQ29udHJvbGxlci9TZWN1cml0eUNvbnRyb2xsZXIucGhwJywKICAgICAgICAgICAgICAgJ0lzVGV4dCc6ICcnLAogICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnYl9jb2RlRWRpdG9yJywKICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogJycsCiAgICAgICAgICAgICAgICdOb3Rlcyc6ICcnLAogICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogJycsCiAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnYUZpbGUnLAogICAgICAgICAgICAgICAnYUxhYmVsJzogJ1NlY2lyaXR5Q29udHJvbGxlcicsCiAgICAgICAgICAgICAgICdhc3ZnZmlsZSc6ICcnLAogICAgICAgICAgICAgICAneWNvZGUnOiAnJ319LAogOTogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICdDb3B5VG9NeVBhZ2VPbmx5JzogJycsCiAgICAgICAgICAgICdEYXRhJzogJzw/cGhwXHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnLyoqIHVwZGF0ZWQgZnJvbSB0aGUgbWFuYWdlbWVudCBzZXJ2ZXIgQHZhciAnCiAgICAgICAgICAgICAgICAgICAgJ1xceWlpXFx3ZWJcXFZpZXcgJHRoaXMgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICcvKiogQHZhciBzdHJpbmcgJGNvbnRlbnQgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgY29tbW9uXFx3aWRnZXRzXFxBbGVydDtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgZnJvbnRlbmRcXGFzc2V0c1xcQXBwQXNzZXQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcYm9vdHN0cmFwNFxcQnJlYWRjcnVtYnM7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcYm9vdHN0cmFwNFxcSHRtbDtcclxuJwogICAgICAgICAgICAgICAgICAgICd1c2UgeWlpXFxib290c3RyYXA0XFxOYXY7XHJcbicKICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcYm9vdHN0cmFwNFxcTmF2QmFyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJ0FwcEFzc2V0OjpyZWdpc3RlcigkdGhpcyk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnPz5cclxuJwogICAgICAgICAgICAgICAgICAgICc8P3BocCAkdGhpcy0+YmVnaW5QYWdlKCkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICc8IURPQ1RZUEUgaHRtbD5cclxuJwogICAgICAgICAgICAgICAgICAgICc8aHRtbCBsYW5nPSI8Pz0gWWlpOjokYXBwLT5sYW5ndWFnZSA/PiIgY2xhc3M9ImgtMTAwIj5cclxuJwogICAgICAgICAgICAgICAgICAgICc8aGVhZD5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgPG1ldGEgY2hhcnNldD0iPD89IFlpaTo6JGFwcC0+Y2hhcnNldCA/PiI+XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsICcKICAgICAgICAgICAgICAgICAgICAnaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vIj5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgPD9waHAgJHRoaXMtPnJlZ2lzdGVyQ3NyZk1ldGFUYWdzKCkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgPHRpdGxlPjw/PSBIdG1sOjplbmNvZGUoJHRoaXMtPnRpdGxlKSA/PjwvdGl0bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIDw/cGhwICR0aGlzLT5oZWFkKCkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICc8L2hlYWQ+XHJcbicKICAgICAgICAgICAgICAgICAgICAnPGJvZHkgY2xhc3M9ImQtZmxleCBmbGV4LWNvbHVtbiBoLTEwMCI+XHJcbicKICAgICAgICAgICAgICAgICAgICAnPD9waHAgJHRoaXMtPmJlZ2luQm9keSgpID8+XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnPGhlYWRlcj5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgPD9waHBcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgTmF2QmFyOjpiZWdpbihbXHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAnYnJhbmRMYWJlbCcgPT4gWWlpOjokYXBwLT5uYW1lLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgJ2JyYW5kVXJsJyA9PiBZaWk6OiRhcHAtPmhvbWVVcmwsXHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAnb3B0aW9ucycgPT4gW1xyXG4iCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICdjbGFzcycgPT4gJ25hdmJhciBuYXZiYXItZXhwYW5kLW1kICIKICAgICAgICAgICAgICAgICAgICAibmF2YmFyLWRhcmsgYmctZGFyayBmaXhlZC10b3AnLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgXSxcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgXSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgICRtZW51SXRlbXMgPSBbXHJcbicKICAgICAgICAgICAgICAgICAgICAiICAgICAgICBbJ2xhYmVsJyA9PiAnSG9tZScsICd1cmwnID0+IFsnL3NpdGUvaW5kZXgnXV0sXHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICBbJ2xhYmVsJyA9PiAnQWRtaW4nLCAndXJsJyA9PiAiCiAgICAgICAgICAgICAgICAgICAgIlsnL3VzZXIvYWRtaW4nXV0sXHJcbiIKICAgICAgICAgICAgICAgICAgICAnICAgIF07XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIGlmIChZaWk6OiRhcHAtPnVzZXItPmlzR3Vlc3QpIHtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICRtZW51SXRlbXNbXSA9IFsnbGFiZWwnID0+ICdVc2VyIExvZ2luJywgJ3VybCcgPT4gIgogICAgICAgICAgICAgICAgICAgICJbJy91c2VyL3NlY3VyaXR5L2xvZ2luJ11dO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICB9IGVsc2Uge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgJG1lbnVJdGVtc1tdID0gJzxsaT4nXHJcbiIKICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgLiBIdG1sOjpiZWdpbkZvcm0oWycvdXNlci9zZWN1cml0eS9sb2dvdXQnXSwgIgogICAgICAgICAgICAgICAgICAgICIncG9zdCcsIFsnY2xhc3MnID0+ICdmb3JtLWlubGluZSddKVxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIC4gSHRtbDo6c3VibWl0QnV0dG9uKFxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAnTG9nb3V0ICgnIC4gIgogICAgICAgICAgICAgICAgICAgICJZaWk6OiRhcHAtPnVzZXItPmlkZW50aXR5LT51c2VybmFtZSAuICcpJyxcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgWydjbGFzcycgPT4gJ2J0biBidG4tbGluayBsb2dvdXQnXVxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIClcclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAuIEh0bWw6OmVuZEZvcm0oKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIC4gJzwvbGk+JztcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICBlY2hvIE5hdjo6d2lkZ2V0KFtcclxuJwogICAgICAgICAgICAgICAgICAgICIgICAgICAgICdvcHRpb25zJyA9PiBbJ2NsYXNzJyA9PiAnbmF2YmFyLW5hdiAiCiAgICAgICAgICAgICAgICAgICAgIm1sLWF1dG8nXSxcclxuIgogICAgICAgICAgICAgICAgICAgICIgICAgICAgICdpdGVtcycgPT4gJG1lbnVJdGVtcyxcclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgXSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIE5hdkJhcjo6ZW5kKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgID8+XHJcbicKICAgICAgICAgICAgICAgICAgICAnPC9oZWFkZXI+XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnPG1haW4gcm9sZT0ibWFpbiIgY2xhc3M9ImZsZXgtc2hyaW5rLTAiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgPD89IEJyZWFkY3J1bWJzOjp3aWRnZXQoW1xyXG4nCiAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICdsaW5rcycgPT4gIgogICAgICAgICAgICAgICAgICAgICJpc3NldCgkdGhpcy0+cGFyYW1zWydicmVhZGNydW1icyddKSA/ICIKICAgICAgICAgICAgICAgICAgICAiJHRoaXMtPnBhcmFtc1snYnJlYWRjcnVtYnMnXSA6IFtdLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgXSkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIDw/PSBBbGVydDo6d2lkZ2V0KCkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIDw/PSAkY29udGVudCA/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJyAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICc8L21haW4+XHJcbicKICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAnPGZvb3RlciBjbGFzcz0iZm9vdGVyIG10LWF1dG8gcHktMyB0ZXh0LW11dGVkIj5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj5cclxuJwogICAgICAgICAgICAgICAgICAgICcgICAgICAgIDxwIGNsYXNzPSJmbG9hdC1sZWZ0Ij4mY29weTsgPD89ICcKICAgICAgICAgICAgICAgICAgICAiSHRtbDo6ZW5jb2RlKFlpaTo6JGFwcC0+bmFtZSkgPz4gPD89IGRhdGUoJ1knKSA/PjwvcD5cclxuIgogICAgICAgICAgICAgICAgICAgICcgICAgICAgIDxwIGNsYXNzPSJmbG9hdC1yaWdodCI+PD89IFlpaTo6cG93ZXJlZCgpICcKICAgICAgICAgICAgICAgICAgICAnPz48L3A+XHJcbicKICAgICAgICAgICAgICAgICAgICAnICAgIDwvZGl2PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJzwvZm9vdGVyPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgJzw/cGhwICR0aGlzLT5lbmRCb2R5KCkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICc8L2JvZHk+XHJcbicKICAgICAgICAgICAgICAgICAgICAnPC9odG1sPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgJzw/cGhwICR0aGlzLT5lbmRQYWdlKCk7JywKICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJy4uL3NyYy95aWkyL2FkdmFuY2VkL2Zyb250ZW5kL3ZpZXdzL2xheW91dHMvbWFpbi5waHAnLAogICAgICAgICAgICAnSXNUZXh0JzogJycsCiAgICAgICAgICAgICdNeU1vZHVsZSc6ICdiX2NvZGVFZGl0b3InLAogICAgICAgICAgICAnTmVlZENvcHknOiAnJywKICAgICAgICAgICAgJ05vdGVzJzogJycsCiAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAnJywKICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdhRmlsZScsCiAgICAgICAgICAgICdhTGFiZWwnOiAnbGF5b3V0L21haW4ucGhwJywKICAgICAgICAgICAgJ2FzdmdmaWxlJzogJycsCiAgICAgICAgICAgICd5Y29kZSc6ICcnfSwKICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAnQ29weVRvTXlQYWdlT25seSc6ICcnLAogICAgICAgICAgICAgICAnRGF0YSc6ICc8P3BocFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJy8qKiB1cGRhdGVkIGZyb20gdGhlIG1hbmFnZW1lbnQgc2VydmVyIEB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICdcXHlpaVxcd2ViXFxWaWV3ICR0aGlzICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnLyoqIEB2YXIgc3RyaW5nICRjb250ZW50ICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIGNvbW1vblxcd2lkZ2V0c1xcQWxlcnQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIGZyb250ZW5kXFxhc3NldHNcXEFwcEFzc2V0O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSB5aWlcXGJvb3RzdHJhcDRcXEJyZWFkY3J1bWJzO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSB5aWlcXGJvb3RzdHJhcDRcXEh0bWw7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAndXNlIHlpaVxcYm9vdHN0cmFwNFxcTmF2O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSB5aWlcXGJvb3RzdHJhcDRcXE5hdkJhcjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICdBcHBBc3NldDo6cmVnaXN0ZXIoJHRoaXMpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJz8+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPD9waHAgJHRoaXMtPmJlZ2luUGFnZSgpID8+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPCFET0NUWVBFIGh0bWw+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPGh0bWwgbGFuZz0iPD89IFlpaTo6JGFwcC0+bGFuZ3VhZ2UgPz4iICcKICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3M9ImgtMTAwIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8aGVhZD5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgPG1ldGEgY2hhcnNldD0iPD89IFlpaTo6JGFwcC0+Y2hhcnNldCA/PiI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsICcKICAgICAgICAgICAgICAgICAgICAgICAnaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgPD9waHAgJHRoaXMtPnJlZ2lzdGVyQ3NyZk1ldGFUYWdzKCkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgPHRpdGxlPjw/PSBIdG1sOjplbmNvZGUoJHRoaXMtPnRpdGxlKSAnCiAgICAgICAgICAgICAgICAgICAgICAgJz8+PC90aXRsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgPD9waHAgJHRoaXMtPmhlYWQoKSA/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwvaGVhZD5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8Ym9keSBjbGFzcz0iZC1mbGV4IGZsZXgtY29sdW1uIGgtMTAwIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8P3BocCAkdGhpcy0+YmVnaW5Cb2R5KCkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8aGVhZGVyPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICA8P3BocFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBOYXZCYXI6OmJlZ2luKFtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICdicmFuZExhYmVsJyA9PiBZaWk6OiRhcHAtPm5hbWUsXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAnYnJhbmRVcmwnID0+IFlpaTo6JGFwcC0+aG9tZVVybCxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICdvcHRpb25zJyA9PiBbXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgJ2NsYXNzJyA9PiAnbmF2YmFyIG5hdmJhci1leHBhbmQtbWQgIgogICAgICAgICAgICAgICAgICAgICAgICJuYXZiYXItZGFyayBiZy1kYXJrIGZpeGVkLXRvcCcsXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICBdLFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBdKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgJG1lbnVJdGVtcyA9IFtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIFsnbGFiZWwnID0+ICdIb21lJywgJ3VybCcgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICJbJy9zaXRlL2luZGV4J11dLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgWydsYWJlbCcgPT4gJ0FkbWluJywgJ3VybCcgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICJbJy91c2VyL2FkbWluJ11dLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBdO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpZiAoWWlpOjokYXBwLT51c2VyLT5pc0d1ZXN0KSB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAkbWVudUl0ZW1zW10gPSBbJ2xhYmVsJyA9PiAnVXNlciBMb2dpbicsICd1cmwnICIKICAgICAgICAgICAgICAgICAgICAgICAiPT4gWycvdXNlci9zZWN1cml0eS9sb2dpbiddXTtcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgfSBlbHNlIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICRtZW51SXRlbXNbXSA9ICc8bGk+J1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIC4gJwogICAgICAgICAgICAgICAgICAgICAgICJIdG1sOjpiZWdpbkZvcm0oWycvdXNlci9zZWN1cml0eS9sb2dvdXQnXSwgJ3Bvc3QnLCAiCiAgICAgICAgICAgICAgICAgICAgICAgIlsnY2xhc3MnID0+ICdmb3JtLWlubGluZSddKVxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIC4gSHRtbDo6c3VibWl0QnV0dG9uKFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAnTG9nb3V0ICgnIC4gIgogICAgICAgICAgICAgICAgICAgICAgICJZaWk6OiRhcHAtPnVzZXItPmlkZW50aXR5LT51c2VybmFtZSAuICcpJyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgWydjbGFzcycgPT4gJ2J0biBidG4tbGluayBsb2dvdXQnXVxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgIClcclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAuIEh0bWw6OmVuZEZvcm0oKVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgIC4gJzwvbGk+JztcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICBlY2hvIE5hdjo6d2lkZ2V0KFtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICdvcHRpb25zJyA9PiBbJ2NsYXNzJyA9PiAnbmF2YmFyLW5hdiAiCiAgICAgICAgICAgICAgICAgICAgICAgIm1sLWF1dG8nXSxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICdpdGVtcycgPT4gJG1lbnVJdGVtcyxcclxuIgogICAgICAgICAgICAgICAgICAgICAgICcgICAgXSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgIE5hdkJhcjo6ZW5kKCk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnICAgID8+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPC9oZWFkZXI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPG1haW4gcm9sZT0ibWFpbiIgY2xhc3M9ImZsZXgtc2hyaW5rLTAiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgPD89IEJyZWFkY3J1bWJzOjp3aWRnZXQoW1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICdsaW5rcycgPT4gIgogICAgICAgICAgICAgICAgICAgICAgICJpc3NldCgkdGhpcy0+cGFyYW1zWydicmVhZGNydW1icyddKSA/ICIKICAgICAgICAgICAgICAgICAgICAgICAiJHRoaXMtPnBhcmFtc1snYnJlYWRjcnVtYnMnXSA6IFtdLFxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgXSkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIDw/PSBBbGVydDo6d2lkZ2V0KCkgPz5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIDw/PSAkY29udGVudCA/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICA8L2Rpdj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8L21haW4+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPGZvb3RlciBjbGFzcz0iZm9vdGVyIG10LWF1dG8gcHktMyB0ZXh0LW11dGVkIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIDxwIGNsYXNzPSJmbG9hdC1sZWZ0Ij4mY29weTsgPD89ICcKICAgICAgICAgICAgICAgICAgICAgICAiSHRtbDo6ZW5jb2RlKFlpaTo6JGFwcC0+bmFtZSkgPz4gPD89IGRhdGUoJ1knKSAiCiAgICAgICAgICAgICAgICAgICAgICAgJz8+PC9wPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgPHAgY2xhc3M9ImZsb2F0LXJpZ2h0Ij48Pz0gWWlpOjpwb3dlcmVkKCkgJwogICAgICAgICAgICAgICAgICAgICAgICc/PjwvcD5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICcgICAgPC9kaXY+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPC9mb290ZXI+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPD9waHAgJHRoaXMtPmVuZEJvZHkoKSA/PlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgJzwvYm9keT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICc8L2h0bWw+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAnPD9waHAgJHRoaXMtPmVuZFBhZ2UoKTsnLAogICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnLi4vc3JjL3lpaTIvYWR2YW5jZWQvZnJvbnRlbmQvdmlld3MvbGF5b3V0cy9tYWluLnBocCcsCiAgICAgICAgICAgICAgICdJc1RleHQnOiAnJywKICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ2JfY29kZUVkaXRvcicsCiAgICAgICAgICAgICAgICdOZWVkQ29weSc6ICcnLAogICAgICAgICAgICAgICAnTm90ZXMnOiAnJywKICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6ICcnLAogICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ2FGaWxlJywKICAgICAgICAgICAgICAgJ2FMYWJlbCc6ICdsYXlvdXQvbWFpbi5waHAnLAogICAgICAgICAgICAgICAnYXN2Z2ZpbGUnOiAnJywKICAgICAgICAgICAgICAgJ3ljb2RlJzogJyd9fX0K
Copyright © 2025 by WebAsOne LLC, All Rights Reserved