vm2_staging_105_redeploy
10/06/2026PD9waHAKLyoqCiAqIFBsdWdpbiBOYW1lOiBWaXZhTWFpcyBDUk0gVjIKICogUGx1Z2luIFVSSTogaHR0cHM6Ly92aXZhbWFpc2V2ZW50b3MuY29tCiAqIERlc2NyaXB0aW9uOiBDUk0gVjIg4oCUIE1vZHVsYXIgZSBsaW1wby4gUm9kYSBlbSBwYXJhbGVsbyBjb20gVjEgc2VtIGNvbmZsaXRvLgogKiBWZXJzaW9uOiAgICAgICAgICAgMS41LjEwNQogKiBBdXRob3I6IFZpdmFNYWlzCiAqIFRleHQgRG9tYWluOiB2aXZhbWFpcy1jcm0tdjIKICovCgppZiAoICEgZGVmaW5lZCggJ0FCU1BBVEgnICkgKSBleGl0OwoKZGVmaW5lKCdWTTJfVkVSU0lPTicsICcxLjUuMTA0Jyk7CgovLyBbdjEuNS44N10gT05FLVRJTUUgSU1QT1JUOiBleGVjdXRhIHNlcnZlci1zaWRlIGFvIHZpc2l0YXIgLz92bTJfaW1wb3J0X3J1bj12bTJpbXBvcnQ4NwphZGRfYWN0aW9uKCd0ZW1wbGF0ZV9yZWRpcmVjdCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKGVtcHR5KCRfR0VUWyd2bTJfaW1wb3J0X3J1biddKSB8fCAkX0dFVFsndm0yX2ltcG9ydF9ydW4nXSAhPT0gJ3ZtMmltcG9ydDg3JykgcmV0dXJuOwogICAgZ2xvYmFsICR3cGRiOwogICAgJHRhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bTJfY29udGFjdHMnOwogICAgJHBlbmRpbmcgPSBbCiAgICAgICAgWycxMTk4NDAzODUzMCcsJ1NhbWFudGFGcmVpdGFzJ10sWycxNzk5NzA1NzE1MycsJ0pvc2lhbmUnXSxbJzExOTY2NzI3Mzk1JywnUHJpJ10sCiAgICAgICAgWycxMTk4MjM0NDgzMCcsJ1NpbW9uZSddLFsnMTE5NjY3MTMzNDAnLCdNYXJnYXJldGgnXSxbJzE3OTkxODA1MzYzJywnVGFteSddLAogICAgICAgIFsnMTE5NDg2Mjc2MTYnLCdDaWRhJ10sWycxMTk0Njc5NDgyMycsJ0MuTCddLFsnMTc5OTc0NjQwODYnLCdEYWx2YSBNZWlyZSddLAogICAgICAgIFsnMTc5OTI2ODMxODInLCdtZWlyZSddLFsnMTE5NzYxODU0ODYnLCdLaXNzeWEnXSxbJzEzOTgxODUwODAyJywnU3VoJ10sCiAgICAgICAgWycxMjk4MjYzMjk0MCcsJ0Zlcm5hbmRhIE1heWFyYSddLFsnMTM5ODEwMzU3OTcnLCdNYXlhcmEnXSxbJzE3OTgxMDkwOTY1JywnUiddLAogICAgICAgIFsnMTk5ODcxMDA3NTUnLCdMdSBDYXJtbyddLFsnMTE5MTMzNjc3MTQnLCcxMDAnXSxbJzExOTczOTEyMzc5JywnVmFuZXNzYSBBbG1laWRhJ10sCiAgICAgICAgWycxMTk0ODUyMzcwNScsJ0Nhcm9saW5lIEFsdmFyZXMnXSxbJzEyOTgxNDc2NjQ1JywnR2FicmllbGEgRnJhbmNpbmUnXSwKICAgICAgICBbJzExOTgzNzAyNzgzJywnRmVlJ10sWycxMTk2MzM2MjQzMCcsJ1RhbmlhIE1hbG91a2knXSxbJzExOTk4OTY2NTk4JywnTWFsdSddLAogICAgICAgIFsnMTM5OTgwNjcxMjQnLCd0aGFsaXRhJ10sWycxMTk5MzY3NzIyNicsJ0lzYSBTYWJpbm8nXSxbJzExOTQxNzc5MDg0JywnTGlkeSddLAogICAgICAgIFsnMTM5ODg4MjI1MTknLCdFbGFpbmUgUGVyZWlyYSddLFsnMTE5MzkxNzg2MjYnLCdNSVJBTkRBIFJBRkZBRUxMWSddLAogICAgICAgIFsnMjE5ODM0NDQ5MTUnLCdEZXJlayBTaWx2YSddLFsnMTE5ODMxMjc1NzQnLCdNb25pY2EgUGVkcm8nXSxbJzY2OTI0Nzk5NjAnLCdUaW8gVGVrbyddLAogICAgICAgIFsnMTE5ODcyOTM3MTInLCcnXSxbJzE2OTkxODM2NzgwJywnRHUnXSxbJzE2OTk3NjUyMTAwJywnUmVuYXRhJ10sCiAgICAgICAgWycxMTk4MjI5NTIwNicsJ1ZpY3RvcmlubyBTYXVyaWEnXSxbJzE5OTk5NDU4NTA0JywnU29waGllIENhcmxpbmknXSwKICAgICAgICBbJzE5OTk2NTgyMDA5JywnQnJ1bmEgTWljaGVsbGUgR2FzcGFyJ10sWycxODk5Nzk4MDA5NycsJ0JydW5hJ10sCiAgICAgICAgWycxNDk5NjUwNjkxMScsJ1ZpdmlhbiBDYXJ2YWxobyddLFsnMTY5ODgwOTE5NzcnLCdmYWJ5J10sWycxNTk5Nzk5NTQwNScsJ0dpc2VsZSBWaWVpcmEnXSwKICAgICAgICBbJzEzOTk2NDg5NzU1JywnQ2Fyb2wgQ2FtcG9zJ10sWycxNTk5NjU3NjM2NicsJ0ZhYmkgTG91cmVuY28nXSwKICAgICAgICBbJzExOTM5MTIxOTAwJywnSmVzc2ljYSBNZXJjYWRvIExpdnJlJ10sWycxMTk4NDYyOTg5MycsJ0NhaCBNYXJ0aW5zIFBST0QnXSwKICAgICAgICBbJzQ1OTk1NDc0MDcnLCdBbmEgQ2Fzc29sJ10sWycxMTk3MzUwMDQ2OCcsJ0FtYW5kYSBNdW5ob3onXSxbJzExOTYzMTg3ODM5JywnQXVkYSBBbHZlcyddLAogICAgICAgIFsnMTY5ODgwMjk0ODgnLCdEZWJvcmEnXSxbJzE5OTk3MTY3NjcyJywnQmVhdHJpeiBHb21lcyddLFsnMTk5ODkxMzQ3MDgnLCdEYW5pIEJlcnRpJ10sCiAgICAgICAgWycxMzk3ODA0MDczMCcsJ1BhdHJpY2lhJ10sWycxNDk5NjIzMjQ0OScsJ0FuZGVyc29uJ10sWycxMTk4MTI2OTY2MCcsJ0p1aGgnXSwKICAgICAgICBbJzE5OTgzNjk2Njg0JywnRGFpYSddLFsnMTE5NzM1OTUzOTknLCdLYXJpbmEnXSxbJzE3OTk3NjE0MTYwJywnJ10sWycxMTkxMTY3NDI2MScsJyddLAogICAgICAgIFsnMTE5OTEzNDIwODEnLCdHYWJpIE9saXZlaXJhJ10sWycxMjk4MjI4MDE5MCcsJ01hcmluYSddLFsnMTE5ODIyMjE2NzknLCdKb3N5J10sCiAgICAgICAgWycxNDk5NzgxMDMxMScsJ0thcmluYSBsb3BlcyddLFsnMTI5ODg0OTM5MzgnLCdtaWxlbmUgcmliZWlyJ10sWycxOTk5MjQ1MzQ5NScsJ1Jvc2VsYWluZSddLAogICAgICAgIFsnMTY5ODgxMDAwMDgnLCdIZWxpYSddLFsnMTE5ODE0ODM4NDYnLCdDYXJtZW0nXSxbJzExOTMwNDM0MTM4JywnQmlhbmNhIENyZSddLAogICAgICAgIFsnMTk5OTI5OTkwNjYnLCdhbmFqdWgnXSxbJzExOTY2ODA1NjA4JywnTUlSRUxBJ10sWycxMTkxMjA4NDYwNCcsJ0tyaXMgU2FuY2hlcyddLAogICAgICAgIFsnMTE5OTcxNDQ0MTUnLCdSb2JlcnRhJ10sWycxMTk0Njg1NDE3OCcsJ1RhbiddLFsnMTE5NjQwOTQzMzknLCdKYW5lIENvbmZlaXRhcmlhJ10sCiAgICAgICAgWycxNzk4MTcyMjc1NycsJ0plc3NpY2EgTWVsbyddLFsnMTE5ODEzNjUwMTUnLCdJUiddLFsnMTE5OTY5Nzg5ODcnLCdJc2FiZWxsYSBBbnRvbmluaSddLAogICAgICAgIFsnMTE5NDE0NzIwMTYnLCdSb3NlJ10sWycxMTk1MTc2ODUxMScsJ0FuYSBDYW1hcmEnXSxbJzExOTg1MjA2NjYwJywnTGFyaXNzYSBTcGlub3NvJ10sCiAgICAgICAgWycxMTk4Njk0MTYwMycsJ1BhdHJpY2lhIFBpcmVzJ10sWycxMTk2NzQ5MDczOCcsJ1ByaXNjaWxhJ10sWycxMzk5NzMyMzE2NycsJ1NpbHZpYSBNYXJhJ10sCiAgICAgICAgWycxMTk0MTA4MjU3MScsJ0RldXMgYWNpbWEgZGUgdHVkbyddLFsnMTk5OTM0NTQ1OTknLCdLVHVkZXMnXSxbJzE3OTk3ODIyNzA4JywnRGF5J10sCiAgICAgICAgWycxMjk4MTAxNTM0NCcsJ0ZyYW4nXSxbJzI0OTk4MzcwMzk5JywnVml2YSBBIFZpZGEnXSxbJzExOTcxNTYxNDk5JywnUGF0cmljaWEnXSwKICAgICAgICBbJzE2OTg4MDg2MDg1JywnSm9zeSddLFsnMTk5ODE3MTI2NTUnLCdQcmlzY2lsYSBEYWd1ZXMnXSxbJzExOTc0MTQzODYzJywnSmFxdWUnXSwKICAgICAgICBbJzE5OTg5MDkyNTQzJywnQ2xhdWRpYSddLFsnMTk5OTE1OTAzNzYnLCdSZWdpYW5lJ10sWycxNjk4ODA3ODUxMCcsJ1JpdGEnXSwKICAgICAgICBbJzE2OTk0NTc0ODQ1JywnWWFyYSBNZXNzaWFzJ10sWycxOTk5NDI4NDk2MicsJ01hbG90aHVyIERlY29yYWNvZXMnXSwKICAgICAgICBbJzE2OTk3ODIwMTIyJywnVGF0aSddLFsnMTY5OTIwMjYzMzYnLCdNYXJpIFNhbHZhZG9yJ10sWycxMTk0NzY0OTM5NicsJ0x1Y2VsaWEnXSwKICAgICAgICBbJzE2OTkxMTU3MjIzJywnU2FudG9zIEVsaXNhbmUnXSxbJzExOTkxODg2MjE2JywnTmFpYXJhJ10sWycxMTk5MzAwNzI1MicsJ0xpZGlhbmUgRnJlaXRhcyddLAogICAgICAgIFsnMTI5NzQxMTUwNjgnLCdkcmEgVmFscXVpcmlhJ10sWycxOTk4MjM2ODc1MicsJ0tlaSBLYW5heWFtYSddLFsnMTE5NTI4MDQyMTYnLCdSYWlzc2EnXSwKICAgICAgICBbJzMxODg3MDM4NjEnLCdGTUNBJ10sWycxNjk5MzE3Mjk1OCcsJ1RoYW1pcmVzIFF1ZWlyb3onXSxbJzExOTYwNTg0MDIwJywnU29uaWEgUmVnaW5hJ10sCiAgICAgICAgWycxMTk3NjAxMjg5MicsJ0NhbWlsYSBSZWlzJ10sWycxODk5MTMwNjA4MicsJ0tldHphJ10sWycxMTk5Mzg3MDUwMCcsJ0xPUkVOQSddLAogICAgICAgIFsnMTY5ODIwNTU0MDAnLCdHZW5pIENvbGFkYW8nXSxbJzEyOTc0MDUyNzE1JywnVGFtaXJlcyddLFsnMTE5MjAwMDY3MzInLCdNb25pY2EgSW5kdW1heCddLAogICAgICAgIFsnMTM5NzQxMzA3MDknLCdLYWFoJ10sWycxMzk5NjU1MTE2NycsJ01hcmNvJ10sWycxMTk3MDExMTU1NScsJyddLFsnMTE5MTMzNjk5ODAnLCdDYXJlbiBDcmlzJ10sCiAgICAgICAgWycxMTk2OTA3MjYyMicsJ1phbiBMZW1lJ10sWycxMTk1NDAyMzc5MCcsJ1ZpbG1hJ10sWycxNDk5ODA2NjM1MCcsJ0xhcmlzc2EnXSwKICAgICAgICBbJzE4OTk3Njc5OTQ4JywnTGF2aW5pYSddLFsnMTE5OTU3MzE0MTAnLCdMZWFuZHJvIE9saXZlaXJhJ10sWycxMTk0ODE4MjU1OScsJ1ZhbmVzc2EgVmlsYXInXSwKICAgICAgICBbJzM1OTE5MjAwNDcnLCdNYXJpYSBKdWxpZXRhJ10sWycxMzk5MTU5MzI5MScsJ0xldGljaWEgTG9wZXMnXSxbJzE5OTg5OTIwODI3JywnUGFtZWxhJ10sCiAgICAgICAgWycxMTk0NTY4MTQyNycsJ0FuZHJlYSddLFsnMTE5Njc3NTE2MjMnLCdCcnVuYSddLFsnMTk5OTk5OTY1NDknLCdzYWxhbyBkZSBiZWxlemEnXSwKICAgICAgICBbJzExOTUxNDU0MTczJywnTGV0aWNpYSBWaXRvcmlhJ10sWycxNzk5MTAyNjIxNicsJ0VsYWluZSddLFsnMTE5NzgxNjc0OTcnLCdCcnVubyBCYXJib3NhJ10sCiAgICAgICAgWycxOTk5MjA1MDY4MycsJ0hlaXRvciddLFsnMTc5OTcwMjA5MjMnLCdKZXNzaWNhIEluZGlhbm8nXSxbJzEyOTgxMzQ2MjE0JywnUGF1bGEgRnJlZGVyaWNlJ10sCiAgICAgICAgWycxOTk5MTE3MTg0OCcsJ01vbmljYSddLFsnMTE5NTAzMDQ1NTknLCdBbWFuZGEgT2xpdmVpcmEnXSxbJzE5OTg3NjY3MzQ0JywnU3RlcGhhbmllIEVzdGVyJ10sCiAgICAgICAgWyczMzk4NTc0MTYzJywnS2F0aWEgQ2FzdHJvJ10sWycxOTk5MTE4MzM4OCcsJ0R1bGNlbGVuYSddLFsnMTE5NTE3NjI1NzUnLCdEYW5pJ10sCiAgICAgICAgWycxOTk1MzIyNTg3MScsJ0phbmlyZWlzJ10sWycxMTk3MTcxODE3NicsJ2RhbmllbGUgYWx2ZXMnXSxbJzExOTc2MjE4OTEyJywnUm9zYW5nZWxhJ10sCiAgICAgICAgWycxMTkxMDA0MjgwMycsJ0xvcmUnXSxbJzExOTMyMTY3MDk5JywnWW8nXSxbJzE3OTgxODE0NTQ5JywnQWxlc3NhbmRyYSddLAogICAgICAgIFsnMTE5NTQzOTkyNTknLCdBbmRyZWlhIENhbXBvcyddLFsnMTM5OTY4NTIyMzInLCdFbGFpbmUgV2lzbmlld3NraSddLFsnMTE5OTcxNDg0NDQnLCdEZWJvcmEnXSwKICAgICAgICBbJzExOTUwNjg5NDQyJywnSmFxdWUnXSxbJzE5OTk0OTQ4MTc2JywnJ10sWycxMTk2MjE5MTAyNCcsJ1JhYXknXSxbJzE5OTkxMDQ1MDg0JywnS2FyaW5hJ10sCiAgICAgICAgWycxMTk4MTMxMTc5MCcsJ01pY2hlbGUnXSxbJzExOTU3ODQ3NDIzJywnUGF0eWxvcGVzdmFyaWVkYWRlcyddLFsnMzE5MjYwODY3NCcsJ0RpZWdvIEhlcm5lY2snXSwKICAgICAgICBbJzExOTY1OTMzNTExJywnSnVsaWEgTWVyZW5jaW8nXSxbJzExOTMzMTY1MTU1JywnTmF0aCddLFsnMTI5ODEzODcxNjknLCdKZXNzaWNhJ10sCiAgICAgICAgWycxOTk4MTc2NjI4OCcsJ01hcmlhIFRlcmV6YSddLFsnMTM5NTU0MjgxOTEnLCdKdWgnXSxbJzExOTMwNDA0NTcyJywncm9jYWNhbWlsYTE4J10sCiAgICAgICAgWycxMTk5MjgwMzU1NicsJ0FuYSddLFsnMTc5OTY1MDQ2NjUnLCdHdWFsYmVydG8gQ2xlbmVhJ10sWycxMTk0NzEzNDYxNCcsJ2FkcmlhbmEgQW50dW5lcyddLAogICAgICAgIFsnMTE5OTY0OTA2NzcnLCdFbmcgQ2l2aWwnXSxbJzExOTU0OTM0MjI5JywnTWFpYWgnXSwKICAgIF07CiAgICAkaW5zZXJ0ZWQgPSAwOyAkc2tpcHBlZCA9IDA7CiAgICBmb3JlYWNoICgkcGVuZGluZyBhcyBbJHBob25lLCAkbmFtZV0pIHsKICAgICAgICBpZiAoISRwaG9uZSkgeyAkc2tpcHBlZCsrOyBjb250aW51ZTsgfQogICAgICAgICRleGlzdHMgPSAkd3BkYi0+Z2V0X3Zhcigkd3BkYi0+cHJlcGFyZSgiU0VMRUNUIGlkIEZST00gJHRhYmxlIFdIRVJFIHBob25lPSVzIiwgJHBob25lKSk7CiAgICAgICAgaWYgKCRleGlzdHMpIHsgJHNraXBwZWQrKzsgY29udGludWU7IH0KICAgICAgICAkd3BkYi0+aW5zZXJ0KCR0YWJsZSwgWwogICAgICAgICAgICAncGhvbmUnID0+ICRwaG9uZSwgJ25hbWUnID0+ICRuYW1lLCAnZW1haWwnID0+ICcnLAogICAgICAgICAgICAnb3JpZ2VucycgPT4gd3BfanNvbl9lbmNvZGUoWydrb21tb19pbXBvcnQnXSksCiAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyA9PiBjdXJyZW50X3RpbWUoJ215c3FsJyksCiAgICAgICAgICAgICdjcmVhdGVkX2F0JyA9PiBjdXJyZW50X3RpbWUoJ215c3FsJyksICd1cGRhdGVkX2F0JyA9PiBjdXJyZW50X3RpbWUoJ215c3FsJyksCiAgICAgICAgXSk7CiAgICAgICAgJGluc2VydGVkKys7CiAgICB9CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicpOwogICAgZWNobyB3cF9qc29uX2VuY29kZShbJ29rJyA9PiB0cnVlLCAnaW5zZXJ0ZWQnID0+ICRpbnNlcnRlZCwgJ3NraXBwZWQnID0+ICRza2lwcGVkLCAndG90YWwnID0+IGNvdW50KCRwZW5kaW5nKV0pOwogICAgZXhpdDsKfSk7CgovLyDilIDilIAgSGVscGVyOiBzdGF0dXMgZGUgcGFnYW1lbnRvIGNvbmZpcm1hZG8gKGdhdGV3YXkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAppZiAoICEgZnVuY3Rpb25fZXhpc3RzKCAndm0yX29yZGVyX3N0YXR1c2VzJyApICkgewogICAgZnVuY3Rpb24gdm0yX29yZGVyX3N0YXR1c2VzKCkgewogICAgICAgIHJldHVybiBbICdwcm9jZXNzaW5nJywgJ2NvbXBsZXRlZCcgXTsKICAgIH0KICAgIGZ1bmN0aW9uIHZtMl9vcmRlcl9zdGF0dXNlc19wcmVmaXhlZCgpIHsKICAgICAgICByZXR1cm4gWyAnd2MtcHJvY2Vzc2luZycsICd3Yy1jb21wbGV0ZWQnIF07CiAgICB9Cn0KCmRlZmluZSggJ1ZNMl9QTFVHSU5fRElSJywgcGx1Z2luX2Rpcl9wYXRoKCBfX0ZJTEVfXyApICk7CmRlZmluZSggJ1ZNMl9QTFVHSU5fVVJMJywgcGx1Z2luX2Rpcl91cmwoIF9fRklMRV9fICkgKTsKZGVmaW5lKCAnVk0yX1pBUElfQ0xJRU5UJywgJ0YxMTcxYjgyMWY5MmM0OWQyYjE2ZjMyOWY0NGQ0NTBhMFMnICk7CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gSEVMUEVSOiBEQVRBL0hPUkEgRU0gVVRDLTMgKEFNRVJJQ0EvU0FPX1BBVUxPKQovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2xvY2FsX2RhdGUoICRmb3JtYXQsICR0aW1lc3RhbXBfb3Jfc3RyICkgewogICAgaWYgKCBlbXB0eSggJHRpbWVzdGFtcF9vcl9zdHIgKSApIHJldHVybiAn4oCUJzsKICAgICR0cyA9IGlzX251bWVyaWMoICR0aW1lc3RhbXBfb3Jfc3RyICkgPyAoaW50KSAkdGltZXN0YW1wX29yX3N0ciA6IHN0cnRvdGltZSggJHRpbWVzdGFtcF9vcl9zdHIgKTsKICAgIGlmICggISAkdHMgKSByZXR1cm4gJ+KAlCc7CiAgICB0cnkgewogICAgICAgICR0eiA9IG5ldyBEYXRlVGltZVpvbmUoICdBbWVyaWNhL1Nhb19QYXVsbycgKTsKICAgICAgICAkZHQgPSBuZXcgRGF0ZVRpbWUoICdAJyAuICR0cyApOwogICAgICAgICRkdC0+c2V0VGltZXpvbmUoICR0eiApOwogICAgICAgIHJldHVybiAkZHQtPmZvcm1hdCggJGZvcm1hdCApOwogICAgfSBjYXRjaCAoIEV4Y2VwdGlvbiAkZSApIHsKICAgICAgICByZXR1cm4gZGF0ZSggJGZvcm1hdCwgJHRzICk7CiAgICB9Cn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBDQU5BSVMgWi1BUEkKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9jaGFubmVscygpIHsKICAgICRwb29sID0gZ2V0X29wdGlvbiggJ3ZtMl9jaGFubmVsX3Bvb2wnLCBbXSApOwogICAgaWYgKCBpc19zdHJpbmcoICRwb29sICkgKSAkcG9vbCA9IGpzb25fZGVjb2RlKCAkcG9vbCwgdHJ1ZSApID86IFtdOwoKICAgIC8vIEF1dG8tcG9wdWxhciBTT01FTlRFIHNlIG8gcG9vbCBlc3RpdmVyIGNvbXBsZXRhbWVudGUgdmF6aW8KICAgIGlmICggZW1wdHkoICRwb29sICkgKSB7CiAgICAgICAgJHBvb2xbJ3phcGlfNzU1MSddID0gWwogICAgICAgICAgICAnbGFiZWwnICAgID0+ICfwn5OeIFZJVkEgNzU1MSAoYWRtaW4pJywKICAgICAgICAgICAgJ3R5cGUnICAgICA9PiAnemFwaScsCiAgICAgICAgICAgICdpbnN0YW5jZScgPT4gJzNGMUZDQkI1OTQyQjYxRjUzMzEzQUFFMzk5QkMxMjQ4JywKICAgICAgICAgICAgJ3Rva2VuJyAgICA9PiAnREUwRDM0REE5N0U1RTc2MjFEM0RGQURDJywKICAgICAgICAgICAgJ2NsaWVudCcgICA9PiAnRjExNzFiODIxZjkyYzQ5ZDJiMTZmMzI5ZjQ0ZDQ1MGEwUycsCiAgICAgICAgICAgICdudW1iZXInICAgPT4gJzU1MTE5ODgxMzc1NTEnLAogICAgICAgIF07CiAgICAgICAgJHBvb2xbJ3phcGlfMTg4NiddID0gWwogICAgICAgICAgICAnbGFiZWwnICAgID0+ICfwn5OxIFZJVkEgMTg4NiAoYXRlbmRpbWVudG8pJywKICAgICAgICAgICAgJ3R5cGUnICAgICA9PiAnemFwaScsCiAgICAgICAgICAgICdpbnN0YW5jZScgPT4gJzNGMjRENDU5Q0RENjYxNTczM0ZEQzYwQzdBMTdFNkNGJywKICAgICAgICAgICAgJ3Rva2VuJyAgICA9PiAnNDU5ODJCRDEwRTVFN0JGQUE3NjZBMUI0JywKICAgICAgICAgICAgJ2NsaWVudCcgICA9PiAnRjExNzFiODIxZjkyYzQ5ZDJiMTZmMzI5ZjQ0ZDQ1MGEwUycsCiAgICAgICAgICAgICdudW1iZXInICAgPT4gJzU1MTE5NDc3NzE4ODYnLAogICAgICAgIF07CiAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9jaGFubmVsX3Bvb2wnLCAkcG9vbCApOwogICAgfQogICAgcmV0dXJuICRwb29sOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gU0VORFMgVEFCTEUg4oCUIGRlZHVwbGljYcOnw6NvIGNlbnRyYWwgbXVsdGktbcOzZHVsbwovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCi8qKgogKiBWZXJpZmljYSBzZSBlc3TDoSBlbSBob3LDoXJpbyBzaWxlbmNpb3NvIChxdWlldCBob3VycykuCiAqIFVzYSB2bV93YV9xdWlldF9zdGFydCBlIHZtX3dhX3F1aWV0X2VuZCAoY29tcGFydGlsaGFkbyBjb20gV0EgUmVjb3ZlcnkpLgogKiBSZXRvcm5hIHRydWUgc2UgTsODTyBkZXZlIGVudmlhciBhZ29yYS4KICovCmZ1bmN0aW9uIHZtMl9pc19xdWlldF90aW1lKCkgewogICAgJHN0YXJ0ID0gKGludCkgZ2V0X29wdGlvbiggJ3ZtX3dhX3F1aWV0X3N0YXJ0JywgMjIgKTsKICAgICRlbmQgICA9IChpbnQpIGdldF9vcHRpb24oICd2bV93YV9xdWlldF9lbmQnLCAgICA4ICk7CiAgICAkaG9yYSAgPSAoaW50KSB3cF9kYXRlKCAnRycgKTsgLy8gaG9yYSBhdHVhbCBlbSBBbWVyaWNhL1Nhb19QYXVsbyB2aWEgV1AgdGltZXpvbmUKICAgIGlmICggJHN0YXJ0ID09PSAkZW5kICkgcmV0dXJuIGZhbHNlOyAvLyBkZXNhYmlsaXRhZG8gc2UgaWd1YWwKICAgIGlmICggJHN0YXJ0ID4gJGVuZCApIHsKICAgICAgICAvLyBvdmVybmlnaHQ6IGV4LiAyMmjigJM4aCDihpIgcXVpZXRvIHNlIGhvcmEgPj0gMjIgT1UgaG9yYSA8IDgKICAgICAgICByZXR1cm4gKCAkaG9yYSA+PSAkc3RhcnQgfHwgJGhvcmEgPCAkZW5kICk7CiAgICB9CiAgICAvLyBtZXNtbyBkaWE6IGV4LiAxaOKAkzZoCiAgICByZXR1cm4gKCAkaG9yYSA+PSAkc3RhcnQgJiYgJGhvcmEgPCAkZW5kICk7Cn0KCi8qKgogKiBWZXJpZmljYSBzZSBvIGNhcCBnbG9iYWwgZGnDoXJpbyBkZSBlbnZpb3MgZm9pIGF0aW5naWRvLgogKiB2bTJfZ2xvYmFsX2RhaWx5X2xpbWl0ID0gMCDihpIgZGVzYWJpbGl0YWRvIChzZW0gbGltaXRlKS4KICogUmV0b3JuYSB0cnVlIHNlIE7Dg08gZGV2ZSBlbnZpYXIgbWFpcyBob2plLgogKi8KZnVuY3Rpb24gdm0yX2RhaWx5X2NhcF9yZWFjaGVkKCkgewogICAgJGNhcCA9IChpbnQpIGdldF9vcHRpb24oICd2bTJfZ2xvYmFsX2RhaWx5X2xpbWl0JywgMCApOwogICAgaWYgKCAkY2FwIDw9IDAgKSByZXR1cm4gZmFsc2U7IC8vIDAgPSBkZXNhYmlsaXRhZG8KICAgIGdsb2JhbCAkd3BkYjsKICAgICR0b2RheSA9IGN1cnJlbnRfdGltZSggJ1ktbS1kJyApOwogICAgJGNvdW50ID0gKGludCkgJHdwZGItPmdldF92YXIoICR3cGRiLT5wcmVwYXJlKAogICAgICAgICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMgV0hFUkUgREFURShzZW50X2F0KSA9ICVzIiwKICAgICAgICAkdG9kYXkKICAgICkgKTsKICAgIHJldHVybiAoICRjb3VudCA+PSAkY2FwICk7Cn0KCi8qKgogKiBSZWdpc3RyYSB1bSBlbnZpbyBuYSB0YWJlbGEgdm0yX3NlbmRzICjDoXJiaXRybyBjZW50cmFsIGRlIGNvb2xkb3duKS4KICovCmZ1bmN0aW9uIHZtMl9yZWNvcmRfc2VuZCggJHBob25lLCAkbW9kdWxlLCAkY2hhbm5lbF9rZXkgPSAnJyApIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR3cGRiLT5pbnNlcnQoCiAgICAgICAgJHdwZGItPnByZWZpeCAuICd2bTJfc2VuZHMnLAogICAgICAgIFsKICAgICAgICAgICAgJ3Bob25lJyAgICAgICA9PiAoc3RyaW5nKSAkcGhvbmUsCiAgICAgICAgICAgICdtb2R1bGUnICAgICAgPT4gKHN0cmluZykgJG1vZHVsZSwKICAgICAgICAgICAgJ2NoYW5uZWxfa2V5JyA9PiAoc3RyaW5nKSAkY2hhbm5lbF9rZXksCiAgICAgICAgICAgICdzZW50X2F0JyAgICAgPT4gY3VycmVudF90aW1lKCAnbXlzcWwnICksCiAgICAgICAgXSwKICAgICAgICBbICclcycsICclcycsICclcycsICclcycgXQogICAgKTsKfQoKLyoqCiAqIFZlcmlmaWNhIHNlIGVzdGUgbsO6bWVybyBwb2RlIHJlY2ViZXIgbWVuc2FnZW0gYWdvcmEuCiAqIEBwYXJhbSBzdHJpbmcgJHBob25lICAgICAgIE7Dum1lcm8gZm9ybWF0YWRvCiAqIEBwYXJhbSBpbnQgICAgJG1pbl9ob3VycyAgIENvb2xkb3duIG3DrW5pbW8gZW0gaG9yYXMgZGVzZGUgbyDDumx0aW1vIGVudmlvIChkZWZhdWx0IDcyKQogKiBAcGFyYW0gaW50ICAgICRtYXhfd2Vla2x5ICBNw6F4IG1zZ3Mgbm9zIMO6bHRpbW9zIDcgZGlhczsgMCA9IHNlbSBsaW1pdGUgKGRlZmF1bHQgMCkKICogUmV0b3JuYSB0cnVlIHNlIFBPREUgZW52aWFyLgogKi8KZnVuY3Rpb24gdm0yX2Nhbl9zZW5kKCAkcGhvbmUsICRtaW5faG91cnMgPSA3MiwgJG1heF93ZWVrbHkgPSAwICkgewogICAgZ2xvYmFsICR3cGRiOwogICAgLy8gQ3JpdMOpcmlvIDE6IGNvb2xkb3duIGRlc2RlIG8gw7psdGltbyBlbnZpbwogICAgJGNudCA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzCiAgICAgICAgIFdIRVJFIHBob25lID0gJXMgQU5EIHNlbnRfYXQgPj0gREFURV9TVUIoTk9XKCksIElOVEVSVkFMICVkIEhPVVIpIiwKICAgICAgICAkcGhvbmUsICRtaW5faG91cnMKICAgICkgKTsKICAgIGlmICggJGNudCA+IDAgKSByZXR1cm4gZmFsc2U7CiAgICAvLyBDcml0w6lyaW8gMjogbGltaXRlIHNlbWFuYWwgKHNlIGNvbmZpZ3VyYWRvKQogICAgaWYgKCAkbWF4X3dlZWtseSA+IDAgKSB7CiAgICAgICAgJHdlZWtseSA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9zZW5kcwogICAgICAgICAgICAgV0hFUkUgcGhvbmUgPSAlcyBBTkQgc2VudF9hdCA+PSBEQVRFX1NVQihOT1coKSwgSU5URVJWQUwgNyBEQVkpIiwKICAgICAgICAgICAgJHBob25lCiAgICAgICAgKSApOwogICAgICAgIGlmICggJHdlZWtseSA+PSAkbWF4X3dlZWtseSApIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9CgovKioKICogUXVhbnRhcyBtZW5zYWdlbnMgZXN0ZSBjYW5hbCBlbnZpb3UgaG9qZSAocGFyYSBjb250cm9sZSBkZSBsaW1pdGUgZGnDoXJpbykuCiAqLwpmdW5jdGlvbiB2bTJfY2hhbm5lbF90b2RheV9jb3VudCggJGNoYW5uZWxfa2V5ICkgewogICAgZ2xvYmFsICR3cGRiOwogICAgcmV0dXJuIChpbnQpICR3cGRiLT5nZXRfdmFyKCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzCiAgICAgICAgIFdIRVJFIGNoYW5uZWxfa2V5ID0gJXMgQU5EIERBVEUoc2VudF9hdCkgPSBDVVJEQVRFKCkiLAogICAgICAgICRjaGFubmVsX2tleQogICAgKSApOwp9CgovKioKICogUmV0b3JuYSBvIGNhbmFsIGRvIHBvb2wgY29tIG1haXMgY2FwYWNpZGFkZSByZXN0YW50ZSBwYXJhIGhvamUuCiAqICRwcmVmZXJyZWRfa2V5IOKAlCB0ZW50YSB1c2FyIGVzdGUgY2FuYWwgcHJpbWVpcm8gKGNvbmZpZ3VyYcOnw6NvIGRvIG3Ds2R1bG8pLgogKiBSZXRvcm5hIG51bGwgc2UgdG9kb3Mgb3MgY2FuYWlzIGF0aW5naXJhbSBvIGxpbWl0ZSBkacOhcmlvLgogKi8KZnVuY3Rpb24gdm0yX2dldF9iZXN0X2NoYW5uZWwoICRwcmVmZXJyZWRfa2V5ID0gbnVsbCApIHsKICAgICRjaGFubmVscyA9IHZtMl9jaGFubmVscygpOwogICAgaWYgKCBlbXB0eSggJGNoYW5uZWxzICkgKSByZXR1cm4gbnVsbDsKCiAgICAvLyBTZSBvIGNhbmFsIHByZWZlcmlkbyBlc3TDoSBBVElWTyBlIGFpbmRhIHRlbSBjYXBhY2lkYWRlLCB1c2EgZWxlCiAgICBpZiAoICRwcmVmZXJyZWRfa2V5ICYmIGlzc2V0KCAkY2hhbm5lbHNbICRwcmVmZXJyZWRfa2V5IF0gKSApIHsKICAgICAgICAkY2hfcHJlZiA9ICRjaGFubmVsc1sgJHByZWZlcnJlZF9rZXkgXTsKICAgICAgICBpZiAoICggJGNoX3ByZWZbJ3N0YXR1cyddID8/ICdhY3RpdmUnICkgIT09ICdwYXVzZWQnICkgewogICAgICAgICAgICAkbGltaXQgPSAoaW50KSAoICRjaF9wcmVmWydkYWlseV9saW1pdCddID8/IDUwICk7CiAgICAgICAgICAgIGlmICggdm0yX2NoYW5uZWxfdG9kYXlfY291bnQoICRwcmVmZXJyZWRfa2V5ICkgPCAkbGltaXQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHByZWZlcnJlZF9rZXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8gQ2FzbyBjb250csOhcmlvLCByb3RhY2lvbmEgcGFyYSBvIGNhbmFsIEFUSVZPIGNvbSBtYWlvciBjYXBhY2lkYWRlIHJlc3RhbnRlCiAgICAvLyDij7ggQ2FuYWlzIHBhdXNhZG9zIHPDo28gY29tcGxldGFtZW50ZSBpZ25vcmFkb3Mg4oCUIG51bmNhIHJlY2ViZW0gb3ZlcmZsb3cKICAgICRiZXN0ICAgICAgICAgICA9IG51bGw7CiAgICAkYmVzdF9yZW1haW5pbmcgPSAtMTsKICAgIGZvcmVhY2ggKCAkY2hhbm5lbHMgYXMgJGtleSA9PiAkY2ggKSB7CiAgICAgICAgaWYgKCAoICRjaFsnc3RhdHVzJ10gPz8gJ2FjdGl2ZScgKSA9PT0gJ3BhdXNlZCcgKSBjb250aW51ZTsgLy8gcHVsYSBwYXVzYWRvcwogICAgICAgICRsaW1pdCAgICAgPSAoaW50KSAoICRjaFsnZGFpbHlfbGltaXQnXSA/PyA1MCApOwogICAgICAgICRyZW1haW5pbmcgPSAkbGltaXQgLSB2bTJfY2hhbm5lbF90b2RheV9jb3VudCggJGtleSApOwogICAgICAgIGlmICggJHJlbWFpbmluZyA+ICRiZXN0X3JlbWFpbmluZyApIHsKICAgICAgICAgICAgJGJlc3RfcmVtYWluaW5nID0gJHJlbWFpbmluZzsKICAgICAgICAgICAgJGJlc3QgICAgICAgICAgID0gJGtleTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gJGJlc3RfcmVtYWluaW5nID4gMCA/ICRiZXN0IDogbnVsbDsKfQoKLyoqCiAqIEdlcmEgVVJMIHJhc3RyZcOhdmVsIGNvbSBVVE0gcGFyYSBtZW5zYWdlbnMgb3V0Ym91bmQuCiAqIFZhcmnDoXZlbCB7bGlua30gbmFzIG1lbnNhZ2VucyDDqSBzdWJzdGl0dcOtZGEgcG9yIGVzdGUgdmFsb3IuCiAqLwpmdW5jdGlvbiB2bTJfdHJhY2tpbmdfdXJsKCAkcGhvbmUsICRtb2R1bGUsICRkZXN0ID0gJycgKSB7CiAgICBpZiAoICEgJGRlc3QgKSAkZGVzdCA9IGhvbWVfdXJsKCAnLycgKTsKICAgIHJldHVybiBhZGRfcXVlcnlfYXJnKCBbCiAgICAgICAgJ3V0bV9zb3VyY2UnICAgPT4gJ3ZtMl93YScsCiAgICAgICAgJ3V0bV9tZWRpdW0nICAgPT4gJG1vZHVsZSwKICAgICAgICAndXRtX2NhbXBhaWduJyA9PiAnZm9sbG93dXAnLAogICAgICAgICd2bTJ0JyAgICAgICAgID0+IHN1YnN0ciggbWQ1KCAkcGhvbmUgLiAkbW9kdWxlIC4gZGF0ZSggJ1ltZCcgKSApLCAwLCA4ICksCiAgICBdLCAkZGVzdCApOwp9CgovLyBIZWxwZXI6IGFycmF5IHNsdWcgPT4gbGFiZWwgbGVnw612ZWwgcGFyYSB0b2RvcyBvcyBjYW5haXMgZG8gcG9vbApmdW5jdGlvbiB2bTJfY2hhbm5lbF9sYWJlbHMoKSB7CiAgICAkbWFwID0gW107CiAgICBmb3JlYWNoICggdm0yX2NoYW5uZWxzKCkgYXMgJHNsdWcgPT4gJGNoICkgewogICAgICAgICR0eXBlICA9IHN0cnRvdXBwZXIoICRjaFsndHlwZSddID8/ICd6YXBpJyApOwogICAgICAgICRudW0gICA9IGlzc2V0KCAkY2hbJ251bWJlciddICkgPyAnIMK3ICsnIC4gc3Vic3RyKCAkY2hbJ251bWJlciddLCAtNCApIDogJyc7CiAgICAgICAgJG1hcFsgJHNsdWcgXSA9ICdbJyAuICR0eXBlIC4gJ10gJyAuICRjaFsnbGFiZWwnXSAuICRudW07CiAgICB9CiAgICByZXR1cm4gJG1hcDsKfQoKLy8gSGVscGVyOiA8b3B0aW9uPiBkaW7Dom1pY29zIHBhcmEgPHNlbGVjdD4gZGUgY2FuYWwKZnVuY3Rpb24gdm0yX2NoYW5uZWxfb3B0aW9uc19odG1sKCAkc2VsZWN0ZWQgKSB7CiAgICAkaHRtbCA9ICcnOwogICAgZm9yZWFjaCAoIHZtMl9jaGFubmVscygpIGFzICRzbHVnID0+ICRjaCApIHsKICAgICAgICAkc2VsICAgPSBzZWxlY3RlZCggJHNlbGVjdGVkLCAkc2x1ZywgZmFsc2UgKTsKICAgICAgICAkdHlwZSAgPSBzdHJ0b3VwcGVyKCAkY2hbJ3R5cGUnXSA/PyAnemFwaScgKTsKICAgICAgICAkbnVtICAgPSBpc3NldCggJGNoWydudW1iZXInXSApID8gJyDCtyArJyAuIHN1YnN0ciggJGNoWydudW1iZXInXSwgLTQgKSA6ICcnOwogICAgICAgICRsYWJlbCA9ICdbJyAuICR0eXBlIC4gJ10gJyAuICRjaFsnbGFiZWwnXSAuICRudW07CiAgICAgICAgJGh0bWwgLj0gJzxvcHRpb24gdmFsdWU9IicgLiBlc2NfYXR0ciggJHNsdWcgKSAuICJcIiB7JHNlbH0+IiAuIGVzY19odG1sKCAkbGFiZWwgKSAuICI8L29wdGlvbj5cbiI7CiAgICB9CiAgICByZXR1cm4gJGh0bWw7Cn0KCi8vIEhlbHBlcjogcmFkaW8gYnV0dG9ucyBkaW7Dom1pY29zIHBhcmEgc2VsZcOnw6NvIGRlIGNhbmFsCmZ1bmN0aW9uIHZtMl9jaGFubmVsX3JhZGlvX2h0bWwoICRuYW1lLCAkc2VsZWN0ZWQgKSB7CiAgICAkaHRtbCA9ICcnOwogICAgZm9yZWFjaCAoIHZtMl9jaGFubmVscygpIGFzICRzbHVnID0+ICRjaCApIHsKICAgICAgICAkY2hrICAgPSBjaGVja2VkKCAkc2VsZWN0ZWQsICRzbHVnLCBmYWxzZSApOwogICAgICAgICR0eXBlICA9ICRjaFsndHlwZSddID8/ICd6YXBpJzsKICAgICAgICAkY29sb3IgPSAkdHlwZSA9PT0gJ3dhYmEnID8gJyMwODY2ZmYnIDogJyMyNWQzNjYnOwogICAgICAgICRiYWRnZSA9IHN0cnRvdXBwZXIoICR0eXBlICk7CiAgICAgICAgJG51bSAgID0gaXNzZXQoICRjaFsnbnVtYmVyJ10gKSA/ICcgwrcgKycgLiBzdWJzdHIoICRjaFsnbnVtYmVyJ10sIC00ICkgOiAnJzsKICAgICAgICAkbGFiZWwgPSAkY2hbJ2xhYmVsJ10gLiAkbnVtOwogICAgICAgICRodG1sIC49ICc8bGFiZWwgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo1cHg7bWFyZ2luLXJpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbTo0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzcHg7ZmxleC13cmFwOndyYXAiPic7CiAgICAgICAgJGh0bWwgLj0gJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iJyAuIGVzY19hdHRyKCAkbmFtZSApIC4gJyIgdmFsdWU9IicgLiBlc2NfYXR0ciggJHNsdWcgKSAuICJcIiB7JGNoa30+IjsKICAgICAgICAkaHRtbCAuPSAnPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6JyAuICRjb2xvciAuICc7Y29sb3I6I2ZmZjtwYWRkaW5nOjFweCA2cHg7Ym9yZGVyLXJhZGl1czozcHg7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6Ym9sZCI+JyAuICRiYWRnZSAuICc8L3NwYW4+JzsKICAgICAgICAkaHRtbCAuPSBlc2NfaHRtbCggJGxhYmVsICk7CiAgICAgICAgJGh0bWwgLj0gIjwvbGFiZWw+XG4iOwogICAgfQogICAgcmV0dXJuICRodG1sOwp9CgoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFRFTVBMQVRFUyBXQUJBIEFQUk9WQURPUyAoZGluw6JtaWNvIOKAlCBnZXJlbmNpw6F2ZWwgZW0gU2V0dGluZ3MpCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfd2FiYV90ZW1wbGF0ZXNfbGlzdCgpIHsKICAgICRkZWZhdWx0cyA9IFsKICAgICAgICAnJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ+KAlCBOZW5odW0g4oCUJywKICAgICAgICAndm1fcG9zX2phbmVsYV9kMycgICAgICAgICAgICAgPT4gJ3ZtX3Bvc19qYW5lbGFfZDMg4oCUIEQrMSBww7NzIGphbmVsYScsCiAgICAgICAgJzQ4aF93YWJhXzRsb3o0cScgICAgICAgICAgICAgID0+ICc0OGhfd2FiYV80bG96NHEg4oCUIEQrMSBhbHRlcm5hdGl2bycsCiAgICAgICAgJzVkX3dhYmFfZ2c5MzlpJyAgICAgICAgICAgICAgID0+ICc1ZF93YWJhX2dnOTM5aSDigJQgRCs1LzcnLAogICAgICAgICcxNWRfd2FiYV9xbHdsZWsnICAgICAgICAgICAgICA9PiAnMTVkX3dhYmFfcWx3bGVrIOKAlCBEKzE1JywKICAgICAgICAnMzBkX3dhYmFfaDJ0dXJoJyAgICAgICAgICAgICAgPT4gJzMwZF93YWJhX2gydHVyaCDigJQgRCszMCcsCiAgICAgICAgJ2NhcnRhb3ByZXNlbnRlJyAgICAgICAgICAgICAgID0+ICdjYXJ0YW9wcmVzZW50ZSDigJQgVmFsZSBQcmVzZW50ZScsCiAgICAgICAgJ29mZXJ0YV9kZV9yZWNvbnF1aXN0YV92eHUwODEnID0+ICdvZmVydGFfZGVfcmVjb25xdWlzdGFfdnh1MDgxIOKAlCBSZWVuZ2FqYW1lbnRvJywKICAgICAgICAncmVjdXBlcmFfY2FycmluaG9fd29vJyAgICAgICAgPT4gJ3JlY3VwZXJhX2NhcnJpbmhvX3dvbyDigJQgV0EgUmVjb3ZlcnknLAogICAgXTsKICAgICRjdXN0b20gPSBnZXRfb3B0aW9uKCAndm0yX3dhYmFfdGVtcGxhdGVzJywgW10gKTsKICAgIGlmICggaXNfc3RyaW5nKCAkY3VzdG9tICkgKSAkY3VzdG9tID0ganNvbl9kZWNvZGUoICRjdXN0b20sIHRydWUgKSA/OiBbXTsKICAgIHJldHVybiBhcnJheV9tZXJnZSggJGRlZmF1bHRzLCAkY3VzdG9tICk7Cn0KCmZ1bmN0aW9uIHZtMl93YWJhX3RlbXBsYXRlX29wdGlvbnNfaHRtbCggJHNlbGVjdGVkID0gJycgKSB7CiAgICAkaHRtbCA9ICcnOwogICAgZm9yZWFjaCAoIHZtMl93YWJhX3RlbXBsYXRlc19saXN0KCkgYXMgJHR2ID0+ICR0bCApIHsKICAgICAgICAkc2VsICAgPSBzZWxlY3RlZCggJHNlbGVjdGVkLCAkdHYsIGZhbHNlICk7CiAgICAgICAgJGh0bWwgLj0gc3ByaW50ZiggJzxvcHRpb24gdmFsdWU9IiVzIiVzPiVzPC9vcHRpb24+JywgZXNjX2F0dHIoICR0diApLCAkc2VsLCBlc2NfaHRtbCggJHRsICkgKTsKICAgIH0KICAgIHJldHVybiAkaHRtbDsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIE1FTlNBR0VOUyBQQURSw4NPCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfZGVmYXVsdF9tc2dfdmVuZGFzKCkgewogICAgcmV0dXJuICLwn5KwICpOT1ZPIFBFRElETyBOUiB7bnVtZXJvfSpcbiIKICAgICAgICAgLiAi4pyFIFByb2Nlc3NhbmRvIOKAlCBQYWdvXG4iCiAgICAgICAgIC4gIvCfkaQge25vbWV9XG4iCiAgICAgICAgIC4gIvCfk7EgK3t0ZWxlZm9uZX1cbiIKICAgICAgICAgLiAi8J+ThSBFdmVudG86IHtkYXRhX2V2ZW50b31cbiIKICAgICAgICAgLiAi8J+OqiB7YXRyYWNhb31cbiIKICAgICAgICAgLiAi8J+SsyBQZ3RvOiB7cGd0b31cbiIKICAgICAgICAgLiAi8J+StSBSXCQge3ZhbG9yfVxuIgogICAgICAgICAuICLwn5ONIE9yaWdlbToge3V0bV9zb3VyY2V9IC8ge3V0bV9jYW1wYWlnbn1cbiIKICAgICAgICAgLiAi8J+UlyB7bGlua19hZG1pbn0iOwp9CgpmdW5jdGlvbiB2bTJfZGVmYXVsdF9tc2dfYWdlbmRhKCkgewogICAgcmV0dXJuICLwn5OLICpGSUNIQSBETyBFVkVOVE8g4oCUIFBFRElETyAje251bWVyb30qXG5cbiIKICAgICAgICAgLiAiREFUQSBETyBFVkVOVE86IHtkYXRhX2V2ZW50b31cblxuIgogICAgICAgICAuICJUaXBvIEV2ZW50bzoge3RpcG9fZXZlbnRvfVxuIgogICAgICAgICAuICJIb21lbmFnZWFkbyhzKToge2hvbWVuYWdlYWRvfVxuIgogICAgICAgICAuICJMb2NhbCBkbyBFdmVudG86IHtsb2NhbF9ldmVudG99XG4iCiAgICAgICAgIC4gIkVuZGVyZcOnbyBkbyBFdmVudG86IHtlbmRlcmVjb31cblxuIgogICAgICAgICAuICJFVkVOVE8gSU7DjUNJTzoge2hvcmFfaW5pY2lvfVxuIgogICAgICAgICAuICJFVkVOVE8gVMOJUk1JTk86IHtob3JhX3Rlcm1pbm99XG5cbiIKICAgICAgICAgLiAi4pyFICpTZXJ2acOnb3MgVml2YU1haXMqXG4iCiAgICAgICAgIC4gIkFUUkHDh8ODTzoge2F0cmFjYW99XG4iCiAgICAgICAgIC4gIkRVUkHDh8ODTzoge2R1cmFjYW99IG1pblxuIgogICAgICAgICAuICJIT1JBIEVOVFJBREE6IHtob3JhX2luaWNpb31cbiIKICAgICAgICAgLiAiSE9SQSBTQcONREE6IHtob3JhX3Rlcm1pbm99XG5cbiIKICAgICAgICAgLiAiQXNzZXNzb3I6IHthc3Nlc3Nvcn1cbiIKICAgICAgICAgLiAiT2JzZXJ2YcOnw7Vlczoge29ic31cblxuIgogICAgICAgICAuICLwn5OdIENvbnRyYXRvOiB7Y29udHJhdG99IjsKfQoKZnVuY3Rpb24gdm0yX2RlZmF1bHRfbXNnX2NsaWVudGUoKSB7CiAgICByZXR1cm4gIk9sw6EsIHtub21lfSEg8J+OiVxuXG4iCiAgICAgICAgIC4gIlNldSBwZWRpZG8gI3tudW1lcm99IGZvaSBjb25maXJtYWRvIVxuIgogICAgICAgICAuICJEYXRhIGRvIHNldSBldmVudG86IHtkYXRhX2V2ZW50b31cblxuIgogICAgICAgICAuICJRdWFscXVlciBkw7p2aWRhLCBlc3RhbW9zIGFxdWkg8J+YilxuIgogICAgICAgICAuICJodHRwczovL3dhLm1lLzU1MTE5NDc3NzE4ODYiOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gQVRJVkHDh8ODTwovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKcmVnaXN0ZXJfYWN0aXZhdGlvbl9ob29rKCBfX0ZJTEVfXywgJ3ZtMl9hY3RpdmF0ZScgKTsKCi8vIE1pZ3JhdGlvbiB2MS41LjE0IOKAlCBwYXRjaCBudWxsIGNvdXBvbl9jb2RlIGluIGFjdGl2ZSBkaXNjb3VudHMgKGZpeDogY29sdW5hIMOpIGRpc2NvdW50X3BlcmNlbnQpCmFkZF9hY3Rpb24oJ3BsdWdpbnNfbG9hZGVkJywgZnVuY3Rpb24oKSB7CiAgICBpZiAoIGdldF9vcHRpb24oJ3ZtMl9taWdyYXRlZF9jb3Vwb25fY29kZV92MTUxNCcpICkgcmV0dXJuOwogICAgZ2xvYmFsICR3cGRiOwogICAgJHRibCA9ICd3el9hY3RpdmVfZGlzY291bnRzJzsKICAgIGlmICggJHdwZGItPmdldF92YXIoIlNIT1cgVEFCTEVTIExJS0UgJ3skdGJsfSciKSAhPT0gJHRibCApIHsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfbWlncmF0ZWRfY291cG9uX2NvZGVfdjE1MTQnLCAxKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAkcm93ID0gJHdwZGItPmdldF9yb3coIlNFTEVDVCAqIEZST00geyR0Ymx9IFdIRVJFIHJldmVydGVkX2F0IElTIE5VTEwgQU5EIChjb3Vwb25fY29kZSBJUyBOVUxMIE9SIGNvdXBvbl9jb2RlPScnKSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDEiKTsKICAgIGlmICggJHJvdyApIHsKICAgICAgICAvLyBDb2x1bmEgcG9kZSBzZXIgZGlzY291bnRfcGVyY2VudCBvdSBkaXNjb3VudCBkZXBlbmRlbmRvIGRhIHZlcnPDo28gZG8gcGx1Z2luCiAgICAgICAgJGRpc2NvdW50ID0gaW50dmFsKCAkcm93LT5kaXNjb3VudF9wZXJjZW50ID8/ICRyb3ctPmRpc2NvdW50ID8/IDAgKTsKICAgICAgICBpZiAoICRkaXNjb3VudCA+IDAgKSB7CiAgICAgICAgICAgICRjb3Vwb25fY29kZSA9IHN0cnRvdXBwZXIoJ1BST01PJyAuICRkaXNjb3VudCAuICdPRkYnKTsKICAgICAgICAgICAgLy8gQ3JpYSBjdXBvbSBXb29Db21tZXJjZSBzZSBuw6NvIGV4aXN0aXIKICAgICAgICAgICAgJGV4aXN0aW5nID0gZ2V0X3BhZ2VfYnlfdGl0bGUoJGNvdXBvbl9jb2RlLCBPQkpFQ1QsICdzaG9wX2NvdXBvbicpOwogICAgICAgICAgICBpZiAoICEkZXhpc3RpbmcgKSB7CiAgICAgICAgICAgICAgICAkY291cG9uX2lkID0gd3BfaW5zZXJ0X3Bvc3QoWydwb3N0X3RpdGxlJz0+JGNvdXBvbl9jb2RlLCdwb3N0X3N0YXR1cyc9PidwdWJsaXNoJywncG9zdF90eXBlJz0+J3Nob3BfY291cG9uJ10pOwogICAgICAgICAgICAgICAgaWYgKCAkY291cG9uX2lkICYmICFpc193cF9lcnJvcigkY291cG9uX2lkKSApIHsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVfcG9zdF9tZXRhKCRjb3Vwb25faWQsICdkaXNjb3VudF90eXBlJywgJ3BlcmNlbnQnKTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVfcG9zdF9tZXRhKCRjb3Vwb25faWQsICdjb3Vwb25fYW1vdW50JywgJGRpc2NvdW50KTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVfcG9zdF9tZXRhKCRjb3Vwb25faWQsICdpbmRpdmlkdWFsX3VzZScsICdubycpOwogICAgICAgICAgICAgICAgICAgIGlmICggIWVtcHR5KCRyb3ctPmV4cGlyZXNfYXQpICYmICRyb3ctPmV4cGlyZXNfYXQgIT09ICcwMDAwLTAwLTAwIDAwOjAwOjAwJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkY291cG9uX2lkLCAnZXhwaXJ5X2RhdGUnLCBkYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgkcm93LT5leHBpcmVzX2F0KSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBTYWx2YSBjb3Vwb25fY29kZSBubyByZWdpc3RybwogICAgICAgICAgICAkd3BkYi0+dXBkYXRlKCR0YmwsIFsnY291cG9uX2NvZGUnID0+ICRjb3Vwb25fY29kZV0sIFsnaWQnID0+ICRyb3ctPmlkXSk7CiAgICAgICAgfQogICAgfQogICAgdXBkYXRlX29wdGlvbigndm0yX21pZ3JhdGVkX2NvdXBvbl9jb2RlX3YxNTE0JywgMSk7Cn0sIDIwKTsKZnVuY3Rpb24gdm0yX2FjdGl2YXRlKCkgewogICAgJGRlZmF1bHRzID0gWwogICAgICAgICd2bTJfa2lsbF9zd2l0Y2gnICAgICAgICAgICAgICA9PiAnMCcsCiAgICAgICAgJ3ZtMl9wZWRpZG9zX3ZlbmRhc19lbmFibGVkJyAgID0+ICcxJywKICAgICAgICAndm0yX3BlZGlkb3NfdmVuZGFzX2NoYW5uZWwnICAgPT4gJ3phcGlfNzU1MScsCiAgICAgICAgJ3ZtMl9wZWRpZG9zX3ZlbmRhc19ncm91cF9pZCcgID0+ICcxMjAzNjM0MjU3ODUzNTg3NjQtZ3JvdXAnLAogICAgICAgICd2bTJfcGVkaWRvc192ZW5kYXNfbXNnJyAgICAgICA9PiB2bTJfZGVmYXVsdF9tc2dfdmVuZGFzKCksCiAgICAgICAgJ3ZtMl9wZWRpZG9zX2FnZW5kYV9lbmFibGVkJyAgID0+ICcxJywKICAgICAgICAndm0yX3BlZGlkb3NfYWdlbmRhX2NoYW5uZWwnICAgPT4gJ3phcGlfNzU1MScsCiAgICAgICAgJ3ZtMl9wZWRpZG9zX2FnZW5kYV9ncm91cF9pZCcgID0+ICcxMjAzNjM0MTkxODAyMTQ0ODEtZ3JvdXAnLAogICAgICAgICd2bTJfcGVkaWRvc19hZ2VuZGFfbXNnJyAgICAgICA9PiB2bTJfZGVmYXVsdF9tc2dfYWdlbmRhKCksCiAgICAgICAgJ3ZtMl9wZWRpZG9zX2NsaWVudGVfZW5hYmxlZCcgID0+ICcwJywKICAgICAgICAndm0yX3BlZGlkb3NfY2xpZW50ZV9jaGFubmVsJyAgPT4gJ3phcGlfMTg4NicsCiAgICAgICAgJ3ZtMl9wZWRpZG9zX2NsaWVudGVfbXNnJyAgICAgID0+IHZtMl9kZWZhdWx0X21zZ19jbGllbnRlKCksCiAgICBdOwogICAgZm9yZWFjaCAoICRkZWZhdWx0cyBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgaWYgKCBnZXRfb3B0aW9uKCAka2V5ICkgPT09IGZhbHNlICkgewogICAgICAgICAgICBhZGRfb3B0aW9uKCAka2V5LCAkdmFsICk7CiAgICAgICAgfQogICAgfQogICAgdm0yX2NyZWF0ZV9wYXJ0bmVyX3RhYmxlcygpOwogICAgdm0yX2NyZWF0ZV9zZW5kc190YWJsZSgpOwogICAgdm0yX2NyZWF0ZV9zb2ZpYV90YWJsZSgpOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gTUVOVVMKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oICdhZG1pbl9tZW51JywgJ3ZtMl9yZWdpc3Rlcl9tZW51cycgKTsKZnVuY3Rpb24gdm0yX3JlZ2lzdGVyX21lbnVzKCkgewogICAgYWRkX21lbnVfcGFnZSgKICAgICAgICAnVml2YU1haXMgMi4wJywKICAgICAgICAn8J+MnyBWSVZBTUFJUyAyLjAnLAogICAgICAgICdtYW5hZ2Vfb3B0aW9ucycsCiAgICAgICAgJ3ZtMi1jcm0nLAogICAgICAgICd2bTJfZGFzaGJvYXJkX3BhZ2UnLAogICAgICAgICdkYXNoaWNvbnMtc3Rhci1maWxsZWQnLAogICAgICAgIDMKICAgICk7CiAgICBhZGRfc3VibWVudV9wYWdlKCAndm0yLWNybScsICdEYXNoYm9hcmQnLCAgICAgICAgICAgICAgJ0Rhc2hib2FyZCcsICAgICAgICAgJ21hbmFnZV9vcHRpb25zJywgJ3ZtMi1jcm0nLCAgICAgICd2bTJfZGFzaGJvYXJkX3BhZ2UnICk7CiAgICBhZGRfc3VibWVudV9wYWdlKCAndm0yLWNybScsICdDb250YXRvcycsICAgICAgICAgICAgICAgJ/CfkaUgQ29udGF0b3MnLCAgICAgICAnbWFuYWdlX29wdGlvbnMnLCAndm0yLWNvbnRhY3RzJywgJ3ZtMl9jb250YWN0c19wYWdlJyApOwogICAgYWRkX3N1Ym1lbnVfcGFnZSggJ3ZtMi1jcm0nLCAnQWdlbmRhJywgICAgICAgICAgICAgICAgICAn8J+ThSBBZ2VuZGEnLCAgICAgICAgICdtYW5hZ2Vfb3B0aW9ucycsICd2bTItYWdlbmRhJywgICAndm0yX2FnZW5kYV9wYWdlJyApOwogICAgYWRkX3N1Ym1lbnVfcGFnZSggJ3ZtMi1jcm0nLCAnQXV0b21hw6fDtWVzJywgICAgICAgICAgICAgICfwn6SWIEF1dG9tYcOnw7VlcycsICAgICAnbWFuYWdlX29wdGlvbnMnLCAndm0yLWF1dG9tYWNvZXMnLCAndm0yX2F1dG9tYWNvZXNfcGFnZScgKTsKICAgIGFkZF9zdWJtZW51X3BhZ2UoICd2bTItY3JtJywgJ1BhcmNlaXJvcycsICAgICAgICAgICAgJ/Cfjq0gUGFyY2Vpcm9zJywgICAgICAnbWFuYWdlX29wdGlvbnMnLCAndm0yLXBhcmNlaXJvcycsJ3ZtMl9wYXJjZWlyb3NfcGFnZScgKTsKICAgIGFkZF9zdWJtZW51X3BhZ2UoICd2bTItY3JtJywgJ0ZpbmFuY2Vpcm8nLCAgICAgICAgICAgICfwn5KwIEZpbmFuY2Vpcm8nLCAgICAgJ21hbmFnZV9vcHRpb25zJywgJ3ZtMi1maW5hbmNlaXJvJywndm0yX2ZpbmFuY2Vpcm9fcGFnZScgKTsKICAgIGFkZF9zdWJtZW51X3BhZ2UoICd2bTItY3JtJywgJ05vdGlmaWNhw6fDo28gZGUgUGVkaWRvcycsICfwn5uSIFBlZGlkb3MnLCAgICAgICAgJ21hbmFnZV9vcHRpb25zJywgJ3ZtMi1wZWRpZG9zJywgICd2bTJfcGVkaWRvc19wYWdlJyApOwogICAgYWRkX3N1Ym1lbnVfcGFnZSggJ3ZtMi1jcm0nLCAnR3J1cG8gUHJvbW8nLCAgICAgICAgICAgICfwn5KsIEdydXBvIFByb21vJywgICAgJ21hbmFnZV9vcHRpb25zJywgJ3ZtMi1ncnVwby1wcm9tbycsICd2bTJfZ3J1cG9fcHJvbW9fcGFnZScgKTsKICAgIGFkZF9zdWJtZW51X3BhZ2UoICd2bTItY3JtJywgJ1Byb21vcyBEYXNoYm9hcmQnLCAgICAgICAn8J+TiiBQcm9tb3MnLCAgICAgICAgICdtYW5hZ2Vfb3B0aW9ucycsICd2bTItcHJvbW9zJywgICAgICAgICd2bTJfcHJvbW9zX3BhZ2UnICk7CiAgICBhZGRfc3VibWVudV9wYWdlKCAndm0yLWNybScsICdCYXJyYXMgUHJvbW9jaW9uYWlzJywgICAgJ/Cfk6MgQmFycmFzJywgICAgICAgICAnbWFuYWdlX29wdGlvbnMnLCAndm0yLWJhcnJhcycsICAgICAgICAndm0yX2JhcnJhc19wYWdlJyApOwogICAgLy8gQmFubmVyIFByb21vIOKGkiBhYmEgY29uZmlnIGRlbnRybyBkZSB2bTItcHJvbW9zIChzZW0gbWVudSBzZXBhcmFkbykKICAgIGFkZF9zdWJtZW51X3BhZ2UoICd2bTItY3JtJywgJ0dhdGlsaG9zIFZpc3VhaXMnLCAgICAgICAn4pyoIEdhdGlsaG9zIFZpc3VhaXMnLCAnbWFuYWdlX29wdGlvbnMnLCAndm0yLWdhdGlsaG9zJywgICAgJ3ZtMl9nYXRpbGhvc19wYWdlJyApOwogICAgYWRkX3N1Ym1lbnVfcGFnZSggJ3ZtMi1jcm0nLCAnU29mSUEgSW50ZWxsaWdlbmNlJywgICAgICfwn6egIFNvZklBJywgICAgICAgICAgJ21hbmFnZV9vcHRpb25zJywgJ3ZtMi1zb2ZpYScsICAgICAgICAgJ3ZtMl9zb2ZpYV9wYWdlJyApOwogICAgYWRkX3N1Ym1lbnVfcGFnZSggJ3ZtMi1jcm0nLCAnQ29uZmlndXJhw6fDtWVzIFYyJywgICAgICAgJ+Kame+4jyBDb25maWd1cmHDp8O1ZXMnLCAgJ21hbmFnZV9vcHRpb25zJywgJ3ZtMi1zZXR0aW5ncycsICAgICAgJ3ZtMl9zZXR0aW5nc19wYWdlJyApOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gTU9CSUxFLUZJUlNUIEdMT0JBTCBDU1MgKGFkbWluX2hlYWQpCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphZGRfYWN0aW9uKCdhZG1pbl9oZWFkJywgZnVuY3Rpb24oKSB7CiAgICAkc2NyZWVuID0gZ2V0X2N1cnJlbnRfc2NyZWVuKCk7CiAgICBpZiAoISRzY3JlZW4gfHwgc3RycG9zKCRzY3JlZW4tPmlkLCAndm0yJykgPT09IGZhbHNlKSByZXR1cm47CiAgICA/PgogICAgPHN0eWxlIGlkPSJ2bTItbW9iaWxlLWdsb2JhbCI+CiAgICAvKiDilIDilIAgVk0yIG1vYmlsZS1maXJzdCBnbG9iYWwgb3ZlcnJpZGVzIOKUgOKUgCAqLwogICAgQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7CiAgICAgICAgLyogVG9kb3Mgb3MgZ3JpZHMgMi1jb2wg4oaSIDEgY29sIG5vIG1vYmlsZSAqLwogICAgICAgIC52bTItZGV0YWlsLWdyaWQsCiAgICAgICAgLnZtMi1zdGVwLWdyaWQsCiAgICAgICAgLnZtMi1mb3JtLXJvdywKICAgICAgICAudm0yLWNmZy0yY29sIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgIWltcG9ydGFudDsgfQoKICAgICAgICAvKiBLUEkgY2FyZHM6IG3DrW5pbW8gZGUgMTQwcHggbm8gbW9iaWxlICovCiAgICAgICAgLnZtMi1rcGlzIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsbWlubWF4KDE0MHB4LDFmcikpICFpbXBvcnRhbnQ7IH0KCiAgICAgICAgLyogQ2FyZHM6IHNlbSBwYWRkaW5nIGV4Y2Vzc2l2byAqLwogICAgICAgIC52bTItY2FyZCB7IHBhZGRpbmc6IDEycHggIWltcG9ydGFudDsgfQoKICAgICAgICAvKiBUYWJzOiB3cmFwIG1lbGhvciAqLwogICAgICAgIC52bTItdGFicyB7IGdhcDogNHB4ICFpbXBvcnRhbnQ7IH0KICAgICAgICAudm0yLXRhYiB7IHBhZGRpbmc6IDZweCAxMHB4ICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OyB9CgogICAgICAgIC8qIFRhYmVsYXM6IHNlbXByZSBjb20gc2Nyb2xsIGhvcml6b250YWwgKi8KICAgICAgICAudm0yLWNhcmQgPiBkaXZbc3R5bGUqPSJvdmVyZmxvdy14Il0geyBvdmVyZmxvdy14OiBhdXRvICFpbXBvcnRhbnQ7IC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsgfQoKICAgICAgICAvKiBCb3TDtWVzIGVtIGxpbmhhOiB3cmFwICovCiAgICAgICAgLnZtMi1hY3Rpb25zLCAuYnV0dG9uLWdyb3VwIHsgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7IGdhcDogNHB4ICFpbXBvcnRhbnQ7IH0KCiAgICAgICAgLyogSW5wdXRzIGZ1bGwtd2lkdGggbm8gbW9iaWxlICovCiAgICAgICAgLnZtMi1jZmctMmNvbCBpbnB1dFt0eXBlPSJudW1iZXIiXSB7IHdpZHRoOiA4MHB4OyB9CiAgICB9CiAgICBAbWVkaWEgKG1heC13aWR0aDogNzgycHgpIHsKICAgICAgICAvKiBTaWRlYmFyIFdQIGNvbGxhcHNlZCBubyBtb2JpbGUg4oCUIG1haXMgZXNwYcOnbyBwYXJhIGNvbnRlw7pkbyAqLwogICAgICAgICN3cGNvbnRlbnQgeyBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OyB9CiAgICB9CiAgICA8L3N0eWxlPgogICAgPD9waHAKfSk7CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gV1BfSEVBRCDigJQgQkFSUkFTIFBST01PQ0lPTkFJUyBLSUxMIFNXSVRDSCAodjEuNS4zNSkKLy8gSHViIHBvZGUgc2VyIGF1dG8tYXR1YWxpemFkbyByZW1vdmVuZG8gbyBndWFyZCDigJQgZXN0ZSBob29rCi8vIGdhcmFudGUgcXVlIGFzIGJhcnJhcyBmaWNhbSBvY3VsdGFzIHF1YW5kbyBwYXVzYWRhcyBubyBhZG1pbiBWMi4KLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2hlYWQnLCBmdW5jdGlvbigpIHsKICAgICRjb3Vwb25fb24gICAgICA9IChpbnQpIGdldF9vcHRpb24oJ3ZtaHViX2NvdXBvbl9iYXJfZW5hYmxlZCcsICAgICAgICAxKTsKICAgICR2aXJhbF9vbiAgICAgICA9IChpbnQpIGdldF9vcHRpb24oJ3ZtaHViX3ZpcmFsX2Jhcl9lbmFibGVkJywgICAgICAgICAxKTsKICAgICRkaXNjb3VudF9vbiAgICA9IChpbnQpIGdldF9vcHRpb24oJ3ZtMl9zcF9kaXNjb3VudF9iYWRnZV9lbmFibGVkJywgICAxKTsKICAgICRzdGlja3lfY3RhX29uICA9IChpbnQpIGdldF9vcHRpb24oJ3ZtMl9zdGlja3lfY3RhX2VuYWJsZWQnLCAgICAgICAgICAwKTsgLy8gQmFycmEgVkVSIERBVEFTIOKAlCBwYWRyw6NvOiBkZXNhdGl2YWRhCiAgICBpZiAoJGNvdXBvbl9vbiAmJiAkdmlyYWxfb24gJiYgJGRpc2NvdW50X29uICYmICRzdGlja3lfY3RhX29uKSByZXR1cm47IC8vIHR1ZG8gYXRpdm8g4oCUIG5hZGEgYSBmYXplcgogICAgJGNzcyA9ICcnOwogICAgaWYgKCEkY291cG9uX29uKSAgICAgJGNzcyAuPSAnLnZtaHViLWNvdXBvbi1iYXJ7ZGlzcGxheTpub25lIWltcG9ydGFudDt9JzsKICAgIGlmICghJHZpcmFsX29uKSAgICAgICRjc3MgLj0gJyN2bWh1Yi12aXJhbC1iYXIsLnZtaHViLXZpcmFsLWJhcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50O30nOwogICAgaWYgKCEkZGlzY291bnRfb24pICAgJGNzcyAuPSAnLnZtYXAtYmFkZ2UsLnZtYXAtZGV7ZGlzcGxheTpub25lIWltcG9ydGFudDt9JzsKICAgIGlmICghJHN0aWNreV9jdGFfb24pICRjc3MgLj0gJyN2bS1zdGlja3ktcHJvZHVjdC1jdGF7ZGlzcGxheTpub25lIWltcG9ydGFudDt9JzsKICAgIGVjaG8gJzxzdHlsZSBpZD0idm0yLWJhcnJhcy1vdmVycmlkZSI+JyAuICRjc3MgLiAnPC9zdHlsZT4nIC4gIlxuIjsKfSwgOTkpOyAvLyBwcmlvcml0eSA5OSDigJQgZGVwb2lzIGRvIEh1YgoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIERBU0hCT0FSRAovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2Rhc2hib2FyZF9wYWdlKCkgewogICAgZ2xvYmFsICR3cGRiOwoKICAgICRrcyA9IGdldF9vcHRpb24oICd2bTJfa2lsbF9zd2l0Y2gnLCAnMCcgKTsKCiAgICAvLyDilIDilIAgUGVyaW9kIHNlbGVjdG9yIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgJHBlcmlvZCAgPSBpc3NldCggJF9HRVRbJ3BlcmlvZCddICkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX0dFVFsncGVyaW9kJ10gKSA6ICdtb250aCc7CiAgICAkcGVyaW9kcyA9IFsKICAgICAgICAnbW9udGgnICAgICA9PiAnTcOqcyBBdHVhbCcsCiAgICAgICAgJ2xhc3Rtb250aCcgPT4gJ03DqnMgQW50ZXJpb3InLAogICAgICAgICd5ZWFyJyAgICAgID0+IGRhdGUoICdZJyApLAogICAgICAgICdhbGwnICAgICAgID0+ICdBY3VtdWxhZG8gVG90YWwnLAogICAgXTsKCiAgICBzd2l0Y2ggKCAkcGVyaW9kICkgewogICAgICAgIGNhc2UgJ2xhc3Rtb250aCc6CiAgICAgICAgICAgICRzdGFydCAgICAgID0gZGF0ZSggJ1ktbS0wMScsIHN0cnRvdGltZSggJ2ZpcnN0IGRheSBvZiBsYXN0IG1vbnRoJyApICk7CiAgICAgICAgICAgICRlbmQgICAgICAgID0gZGF0ZSggJ1ktbS10JywgIHN0cnRvdGltZSggJ2xhc3QgZGF5IG9mIGxhc3QgbW9udGgnICkgKTsKICAgICAgICAgICAgJHN0YXJ0X3ByZXYgPSBkYXRlKCAnWS1tLTAxJywgc3RydG90aW1lKCAnZmlyc3QgZGF5IG9mIDIgbW9udGhzIGFnbycgKSApOwogICAgICAgICAgICAkZW5kX3ByZXYgICA9IGRhdGUoICdZLW0tdCcsICBzdHJ0b3RpbWUoICdsYXN0IGRheSBvZiAyIG1vbnRocyBhZ28nICkgKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAneWVhcic6CiAgICAgICAgICAgICRzdGFydCAgICAgID0gZGF0ZSggJ1ktMDEtMDEnICk7CiAgICAgICAgICAgICRlbmQgICAgICAgID0gZGF0ZSggJ1ktMTItMzEnICk7CiAgICAgICAgICAgICRzdGFydF9wcmV2ID0gZGF0ZSggJ1ktMDEtMDEnLCBzdHJ0b3RpbWUoICctMSB5ZWFyJyApICk7CiAgICAgICAgICAgICRlbmRfcHJldiAgID0gZGF0ZSggJ1ktMTItMzEnLCBzdHJ0b3RpbWUoICctMSB5ZWFyJyApICk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2FsbCc6CiAgICAgICAgICAgICRzdGFydCAgICAgID0gJzIwMjAtMDEtMDEnOwogICAgICAgICAgICAkZW5kICAgICAgICA9IGRhdGUoICdZLTEyLTMxJyApOwogICAgICAgICAgICAkc3RhcnRfcHJldiA9IG51bGw7CiAgICAgICAgICAgICRlbmRfcHJldiAgID0gbnVsbDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDogLy8gbW9udGgKICAgICAgICAgICAgJHN0YXJ0ICAgICAgPSBkYXRlKCAnWS1tLTAxJyApOwogICAgICAgICAgICAkZW5kICAgICAgICA9IGRhdGUoICdZLW0tdCcgKTsKICAgICAgICAgICAgJHN0YXJ0X3ByZXYgPSBkYXRlKCAnWS1tLTAxJywgc3RydG90aW1lKCAnZmlyc3QgZGF5IG9mIGxhc3QgbW9udGgnICkgKTsKICAgICAgICAgICAgJGVuZF9wcmV2ICAgPSBkYXRlKCAnWS1tLXQnLCAgc3RydG90aW1lKCAnbGFzdCBkYXkgb2YgbGFzdCBtb250aCcgKSApOwogICAgICAgICAgICBicmVhazsKICAgIH0KCiAgICAvLyDilIDilIAgV29vQ29tbWVyY2UgS1BJcyAocXVlcnkgZGlyZXRhIEhQT1Mg4oCUIGV2aXRhIGJ1ZyBkYXRlX2NyZWF0ZWQgY29tIHN0YXR1cyBjdXN0b20pIOKUgAogICAgJHRibF9vICAgICA9ICR3cGRiLT5wcmVmaXggLiAnd2Nfb3JkZXJzJzsKICAgICRzdGFydF9nbXQgPSBnZXRfZ210X2Zyb21fZGF0ZSggJHN0YXJ0IC4gJyAwMDowMDowMCcgKTsKICAgICRlbmRfZ210ICAgPSBnZXRfZ210X2Zyb21fZGF0ZSggJGVuZCAgIC4gJyAyMzo1OTo1OScgKTsKCiAgICAvLyBSZWNlaXRhIGNvbmZpcm1hZGEgKHByb2Nlc3NpbmcgKyBjb21wbGV0ZWQg4oCUIGdhdGV3YXkgY29uZmlybW91IHBhZ2FtZW50bykKICAgICRrcGlfY3VyID0gJHdwZGItPmdldF9yb3coICR3cGRiLT5wcmVwYXJlKAogICAgICAgICJTRUxFQ1QgQ09VTlQoKikgQVMgY250LCBDT0FMRVNDRShTVU0odG90YWxfYW1vdW50KSwwKSBBUyB0b3RhbAogICAgICAgICBGUk9NIGB7JHRibF9vfWAKICAgICAgICAgV0hFUkUgc3RhdHVzIElOICgnd2MtcHJvY2Vzc2luZycsJ3djLWNvbXBsZXRlZCcpCiAgICAgICAgIEFORCBkYXRlX2NyZWF0ZWRfZ210ID49ICVzIEFORCBkYXRlX2NyZWF0ZWRfZ210IDw9ICVzIiwKICAgICAgICAkc3RhcnRfZ210LCAkZW5kX2dtdAogICAgKSApOwogICAgJG51bV9wZWRpZG9zID0gKGludCkoICRrcGlfY3VyLT5jbnQgPz8gMCApOwogICAgJHJlY2VpdGEgICAgID0gKGZsb2F0KSggJGtwaV9jdXItPnRvdGFsID8/IDAgKTsKICAgICR0aWNrZXQgICAgICA9ICRudW1fcGVkaWRvcyA+IDAgPyAkcmVjZWl0YSAvICRudW1fcGVkaWRvcyA6IDA7CgogICAgLy8gQ2xpY2tTaWduIHBpcGVsaW5lIChzaWduaW5nLXBlbmRpbmcgKyBjb250cmFjdC1zaWduZWQpCiAgICAkY3NfY3VyID0gJHdwZGItPmdldF9yb3coICR3cGRiLT5wcmVwYXJlKAogICAgICAgICJTRUxFQ1QgQ09VTlQoKikgQVMgY250LCBDT0FMRVNDRShTVU0odG90YWxfYW1vdW50KSwwKSBBUyB0b3RhbAogICAgICAgICBGUk9NIGB7JHRibF9vfWAKICAgICAgICAgV0hFUkUgc3RhdHVzIElOICgnd2Mtc2lnbmluZy1wZW5kaW5nJywnd2MtY29udHJhY3Qtc2lnbmVkJykKICAgICAgICAgQU5EIGRhdGVfY3JlYXRlZF9nbXQgPj0gJXMgQU5EIGRhdGVfY3JlYXRlZF9nbXQgPD0gJXMiLAogICAgICAgICRzdGFydF9nbXQsICRlbmRfZ210CiAgICApICk7CiAgICAkbnVtX2NvbnRyYXRvcyA9IChpbnQpKCAkY3NfY3VyLT5jbnQgPz8gMCApOwogICAgJHZhbF9jb250cmF0b3MgPSAoZmxvYXQpKCAkY3NfY3VyLT50b3RhbCA/PyAwICk7CgogICAgLy8gUGVyw61vZG8gYW50ZXJpb3IgKHPDsyBjb25maXJtZWQpCiAgICAkcmVjZWl0YV9wcmV2ID0gMDsKICAgICRudW1fcHJldiAgICAgPSAwOwogICAgaWYgKCAkc3RhcnRfcHJldiApIHsKICAgICAgICAkc3BfZ210ICA9IGdldF9nbXRfZnJvbV9kYXRlKCAkc3RhcnRfcHJldiAuICcgMDA6MDA6MDAnICk7CiAgICAgICAgJGVwX2dtdCAgPSBnZXRfZ210X2Zyb21fZGF0ZSggJGVuZF9wcmV2ICAgLiAnIDIzOjU5OjU5JyApOwogICAgICAgICRrcGlfcHJ2ID0gJHdwZGItPmdldF9yb3coICR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAiU0VMRUNUIENPVU5UKCopIEFTIGNudCwgQ09BTEVTQ0UoU1VNKHRvdGFsX2Ftb3VudCksMCkgQVMgdG90YWwKICAgICAgICAgICAgIEZST00gYHskdGJsX299YAogICAgICAgICAgICAgV0hFUkUgc3RhdHVzIElOICgnd2MtcHJvY2Vzc2luZycsJ3djLWNvbXBsZXRlZCcpCiAgICAgICAgICAgICBBTkQgZGF0ZV9jcmVhdGVkX2dtdCA+PSAlcyBBTkQgZGF0ZV9jcmVhdGVkX2dtdCA8PSAlcyIsCiAgICAgICAgICAgICRzcF9nbXQsICRlcF9nbXQKICAgICAgICApICk7CiAgICAgICAgJG51bV9wcmV2ICAgICA9IChpbnQpKCAka3BpX3Bydi0+Y250ID8/IDAgKTsKICAgICAgICAkcmVjZWl0YV9wcmV2ID0gKGZsb2F0KSggJGtwaV9wcnYtPnRvdGFsID8/IDAgKTsKICAgIH0KCiAgICAvLyDilIDilIAgS29tbW8gRnVuaWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICAkdG90YWxfbGVhZHMgICAgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhciggIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHZtX2tvbW1vX2xlYWRzIiApOwogICAgJGxlYWRzX2hvdCAgICAgID0gKGludCkgJHdwZGItPmdldF92YXIoICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB2bV9rb21tb19sZWFkcyBXSEVSRSBzdGF0dXNfaWQgPSA5NDMwNTY2NCIgKTsKICAgICRsZWFkc19jb252ICAgICA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCAiU0VMRUNUIENPVU5UKCopIEZST00gdm1fa29tbW9fbGVhZHMgV0hFUkUgc3RhdHVzX2lkID0gOTQzMjUxNjciICk7CiAgICAkbGVhZHNfc2VtX2RhdGEgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhciggIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHZtX2tvbW1vX2xlYWRzIFdIRVJFIChkYXRhX2V2ZW50byBJUyBOVUxMIE9SIGRhdGFfZXZlbnRvID0gJycpIEFORCBzdGF0dXNfaWQgTk9UIElOICgxNDIsIDE0MykiICk7CgogICAgLy8g4pSA4pSAIFdBIFJlY292ZXJ5IHN0YXRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgJHdhX2tzICAgID0gZ2V0X29wdGlvbiggJ3ZtX3dhX2tpbGxfc3dpdGNoJywgJzEnICk7CiAgICAkd2FfdG90YWwgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhciggJHdwZGItPnByZXBhcmUoCiAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHZtX3dhcm11cF9sb2cgV0hFUkUgc2VudF9hdCA+PSAlcyBBTkQgc2VudF9hdCA8PSAlcyIsCiAgICAgICAgJHN0YXJ0IC4gJyAwMDowMDowMCcsICRlbmQgLiAnIDIzOjU5OjU5JwogICAgKSApOwoKICAgIC8vIOKUgOKUgCBBbGVydGFzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgJGFsZXJ0YXMgPSBbXTsKICAgIGlmICggJGtzID09PSAnMScgKSAkYWxlcnRhc1tdID0gWyfwn5S0JywgJ0tpbGwgU3dpdGNoIEdsb2JhbCBWMiBBVElWTyDigJQgbmVuaHVtYSBtZW5zYWdlbSBWMiBlc3TDoSBzYWluZG8uJywgJ2Vycm9yJ107CiAgICBpZiAoIGdldF9vcHRpb24oICd2bV9raWxsX3N3aXRjaCcsICcxJyApID09PSAnMScgKSAkYWxlcnRhc1tdID0gWyfwn5+hJywgJ1YxIHBhdXNhZGEgKGtpbGwgc3dpdGNoIE9OKS4gQXBlbmFzIFdBIFJlY292ZXJ5IGVudmlhIG1lbnNhZ2Vucy4nLCAnd2FybmluZyddOwogICAgaWYgKCAkbGVhZHNfc2VtX2RhdGEgPiA1MDAgKSAkYWxlcnRhc1tdID0gWyfwn5+hJywgJGxlYWRzX3NlbV9kYXRhIC4gJyBsZWFkcyBubyBLb21tbyBzZW0gZGF0YSBkZSBldmVudG8g4oCUIGNvbnNpZGVyZSBjYW1wYW5oYSBkZSByZWVuZ2FqYW1lbnRvLicsICd3YXJuaW5nJ107CgogICAgLy8g4pSA4pSAIFBlZGlkb3MgUmVjZW50ZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICAkcmVjZW50X29yZGVycyA9IHdjX2dldF9vcmRlcnMoIFsKICAgICAgICAnbGltaXQnICAgPT4gNiwKICAgICAgICAnb3JkZXJieScgPT4gJ2RhdGUnLAogICAgICAgICdvcmRlcicgICA9PiAnREVTQycsCiAgICAgICAgJ3N0YXR1cycgID0+IGFycmF5X21hcCggZm4oJHMpID0+ICJ3Yy0kcyIsIHZtMl9vcmRlcl9zdGF0dXNlcygpICksCiAgICBdICk7CgogICAgJGNoYW5uZWxzID0gdm0yX2NoYW5uZWxzKCk7CiAgICAkZGVsdGFfciAgPSAoICRyZWNlaXRhX3ByZXYgPiAwICkgPyByb3VuZCggKCAkcmVjZWl0YSAtICRyZWNlaXRhX3ByZXYgKSAvICRyZWNlaXRhX3ByZXYgKiAxMDAsIDEgKSA6IG51bGw7CiAgICAkZGVsdGFfcCAgPSAkc3RhcnRfcHJldiA/ICggJG51bV9wZWRpZG9zIC0gJG51bV9wcmV2ICkgOiBudWxsOwoKICAgIC8vIOKUgOKUgCBEYXNoYm9hcmQgU21hcnQgS1BJcyB2MS4zLjkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICAvLyBDYXJyaW5ob3MgYWJhbmRvbmFkb3MgaG9qZQogICAgJGNhcnJpbmhvc19ob2plID0gKGludCkgJHdwZGItPmdldF92YXIoCiAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHZtX3dhX2NhcHR1cmVzIFdIRVJFIERBVEUoY2FwdHVyZWRfYXQpID0gQ1VSREFURSgpIgogICAgKTsKICAgICRjYXJyaW5ob192YWwgPSAoZmxvYXQpICR3cGRiLT5nZXRfdmFyKAogICAgICAgICJTRUxFQ1QgQ09BTEVTQ0UoU1VNKGNhcnRfdG90YWwpLDApIEZST00gdm1fd2FfY2FwdHVyZXMgV0hFUkUgREFURShjYXB0dXJlZF9hdCkgPSBDVVJEQVRFKCkiCiAgICApOwoKICAgIC8vIFdBIFJlY292ZXJ5IGhvamUKICAgICR3YV9ob2plID0gKGludCkgJHdwZGItPmdldF92YXIoCiAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHZtX3dhcm11cF9sb2cgV0hFUkUgREFURShzZW50X2F0KSA9IENVUkRBVEUoKSIKICAgICk7CgogICAgLy8gUG9wdXAgc3RhdHMKICAgICRwb3B1cF9jb252ICA9IChpbnQpIGdldF9vcHRpb24oICd2bTJfcG9wdXBfc3RhdF9jb252ZXJzaW9ucycsIDAgKTsKICAgICRwb3B1cF9zaG93cyA9IChpbnQpIGdldF9vcHRpb24oICd2bTJfcG9wdXBfc3RhdF9zaG93cycsIDAgKTsKCiAgICAvLyBFdmVudG9zIHByw7N4aW1vcyDigJQgcGFyc2UgZXZlbnRfZGF0ZSBkZSBwZWRpZG9zIGF0aXZvcwogICAgJHRibF9vbSAgID0gJHdwZGItPnByZWZpeCAuICd3Y19vcmRlcnNfbWV0YSc7CiAgICAkdGJsX3dvICAgPSAkd3BkYi0+cHJlZml4IC4gJ3djX29yZGVycyc7CiAgICAkZXZfcm93cyAgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgIlNFTEVDVCBtLm1ldGFfdmFsdWUgQVMgZXYKICAgICAgICAgRlJPTSBgeyR0Ymxfd299YCBvCiAgICAgICAgIElOTkVSIEpPSU4gYHskdGJsX29tfWAgbSBPTiBvLmlkID0gbS5vcmRlcl9pZCBBTkQgbS5tZXRhX2tleSA9ICdfYmlsbGluZ19ldmVudF9kYXRlJwogICAgICAgICBXSEVSRSBvLnN0YXR1cyBJTiAoJ3djLXByb2Nlc3NpbmcnLCd3Yy1jb21wbGV0ZWQnLCd3Yy1zaWduaW5nLXBlbmRpbmcnLCd3Yy1jb250cmFjdC1zaWduZWQnKQogICAgICAgICBBTkQgbS5tZXRhX3ZhbHVlICE9ICcnIgogICAgKTsKICAgICR0b2RheV90cyAgPSBzdHJ0b3RpbWUoICd0b2RheScgKTsKICAgICRpbjdfdHMgICAgPSBzdHJ0b3RpbWUoICcrNyBkYXlzJyApOwogICAgJGluMzBfdHMgICA9IHN0cnRvdGltZSggJyszMCBkYXlzJyApOwogICAgJGV2X3Byb3g3ICA9IDA7CiAgICAkZXZfcHJveDMwID0gMDsKICAgIGZvcmVhY2ggKCAkZXZfcm93cyBhcyAkZXZfcm93ICkgewogICAgICAgICR2ICA9IHRyaW0oICRldl9yb3ctPmV2ICk7CiAgICAgICAgJHRzID0gMDsKICAgICAgICBpZiAoIHByZWdfbWF0Y2goICcvXlxkezh9JC8nLCAkdiApICkgewogICAgICAgICAgICAkdHMgPSBta3RpbWUoIDAsIDAsIDAsIChpbnQpIHN1YnN0ciggJHYsIDIsIDIgKSwgKGludCkgc3Vic3RyKCAkdiwgMCwgMiApLCAoaW50KSBzdWJzdHIoICR2LCA0LCA0ICkgKTsKICAgICAgICB9IGVsc2VpZiAoIHByZWdfbWF0Y2goICcvXihcZHsyfSlcLyhcZHsyfSlcLyhcZHsyLDR9KSQvJywgJHYsICRkbSApICkgewogICAgICAgICAgICAkeXIgPSBzdHJsZW4oICRkbVszXSApID09PSAyID8gMjAwMCArIChpbnQpICRkbVszXSA6IChpbnQpICRkbVszXTsKICAgICAgICAgICAgJHRzID0gbWt0aW1lKCAwLCAwLCAwLCAoaW50KSAkZG1bMl0sIChpbnQpICRkbVsxXSwgJHlyICk7CiAgICAgICAgfQogICAgICAgIGlmICggJHRzID49ICR0b2RheV90cyAmJiAkdHMgPD0gJGluMzBfdHMgKSAkZXZfcHJveDMwKys7CiAgICAgICAgaWYgKCAkdHMgPj0gJHRvZGF5X3RzICYmICR0cyA8PSAkaW43X3RzICApICRldl9wcm94NysrOwogICAgfQoKICAgIC8vIENvbnZlcnPDo28gSE9UIOKGkiBQZWRpZG8gKG3DqnMpCiAgICAkY29udl9ob3RfcGN0ID0gJGxlYWRzX2hvdCA+IDAgPyByb3VuZCggJG51bV9wZWRpZG9zIC8gJGxlYWRzX2hvdCAqIDEwMCwgMSApIDogMDsKCiAgICA/PgogICAgPGRpdiBjbGFzcz0id3JhcCI+CiAgICA8c3R5bGU+CiAgICAudm0yLXdyYXB7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsIlNlZ29lIFVJIixzYW5zLXNlcmlmfQogICAgLnZtMi1oZWFkZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4O21hcmdpbi1ib3R0b206MTZweH0KICAgIC52bTItcGVyaW9kLXRhYnN7ZGlzcGxheTpmbGV4O2dhcDo0cHg7ZmxleC13cmFwOndyYXB9CiAgICAudm0yLXBlcmlvZC10YWJ7cGFkZGluZzo1cHggMTRweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMnB4O3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiM1NTU7YmFja2dyb3VuZDojZmZmO3RyYW5zaXRpb246YWxsIC4xNXN9CiAgICAudm0yLXBlcmlvZC10YWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwMDczYWE7Y29sb3I6IzAwNzNhYX0KICAgIC52bTItcGVyaW9kLXRhYi5hY3RpdmV7YmFja2dyb3VuZDojMDA3M2FhO2NvbG9yOiNmZmYhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojMDA3M2FhfQogICAgLnZtMi1rcGlze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxOTBweCwxZnIpKTtnYXA6MTJweDttYXJnaW4tYm90dG9tOjE2cHh9CiAgICAudm0yLWtwaXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE4cHggMjBweDtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4wNCk7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1cyBlYXNlfQogICAgLnZtMi1rcGk6aG92ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7Ym94LXNoYWRvdzowIDRweCAxNHB4IHJnYmEoMCwwLDAsLjEzKTtib3JkZXItY29sb3I6IzAwNzNhYX0KICAgIC52bTIta3BpIC5sYWJlbHtmb250LXNpemU6MTFweDtjb2xvcjojODg4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouNXB4O21hcmdpbi1ib3R0b206OHB4fQogICAgLnZtMi1rcGkgLnZhbHVle2ZvbnQtc2l6ZToyOHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWExYTFhO2xpbmUtaGVpZ2h0OjF9CiAgICAudm0yLWtwaSAuZGVsdGF7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDo4cHh9CiAgICAudm0yLWtwaSAuZGVsdGEudXB7Y29sb3I6IzI3YWU2MH0udm0yLWtwaSAuZGVsdGEuZG93bntjb2xvcjojZTc0YzNjfS52bTIta3BpIC5kZWx0YS5uZXV0cmFse2NvbG9yOiM5OTl9CiAgICAudm0yLWdyaWQye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgzMDBweCwxZnIpKTtnYXA6MTJweDttYXJnaW4tYm90dG9tOjE2cHh9CiAgICAudm0yLWNhcmR7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxOHB4IDIwcHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDQpfQogICAgLnZtMi1jYXJkIGgze21hcmdpbjowIDAgMTRweDtmb250LXNpemU6MTRweDtjb2xvcjojMzMzO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweH0KICAgIC52bTItc2VjdGlvbi1sYWJlbHtmb250LXNpemU6MTBweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjVweDtjb2xvcjojYWFhO21hcmdpbjoxMnB4IDAgNnB4O2ZvbnQtd2VpZ2h0OjYwMH0KICAgIC52bTItcm93e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjdweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmNWY1ZjU7Zm9udC1zaXplOjEzcHh9CiAgICAudm0yLXJvdzpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206bm9uZX0KICAgIC52bTItYmFyLXdyYXB7ZmxleDoxO2hlaWdodDo3cHg7YmFja2dyb3VuZDojZjBmMGYwO2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbn0KICAgIC52bTItYmFyLWZpbGx7aGVpZ2h0OjEwMCU7Ym9yZGVyLXJhZGl1czo0cHg7dHJhbnNpdGlvbjp3aWR0aCAuM3N9CiAgICAudm0yLWJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwfQogICAgLnZtMi1iYWRnZS1ncmVlbntiYWNrZ3JvdW5kOiNkNGVkZGE7Y29sb3I6IzE1NTcyNH0KICAgIC52bTItYmFkZ2UtYmx1ZXtiYWNrZ3JvdW5kOiNjY2U1ZmY7Y29sb3I6IzAwNDA4NX0KICAgIC52bTItYmFkZ2Utb3Jhbmdle2JhY2tncm91bmQ6I2ZmZjNjZDtjb2xvcjojODU2NDA0fQogICAgLnZtMi10YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MTNweH0KICAgIC52bTItdGFibGUgdGh7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6NnB4IDhweDtiYWNrZ3JvdW5kOiNmOWY5Zjk7Ym9yZGVyLWJvdHRvbToycHggc29saWQgI2VlZTtmb250LXNpemU6MTFweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6Izg4ODt3aGl0ZS1zcGFjZTpub3dyYXB9CiAgICAudm0yLXRhYmxlIHRke3BhZGRpbmc6OHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmNWY1ZjU7dmVydGljYWwtYWxpZ246bWlkZGxlfQogICAgLnZtMi10YWJsZSB0cjpsYXN0LWNoaWxkIHRke2JvcmRlci1ib3R0b206bm9uZX0KICAgIC52bTItcm9hZG1hcHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjhweH0KICAgIC52bTItcm17cGFkZGluZzo0cHggMTRweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHh9CiAgICAudm0yLXJtLmRvbmV7YmFja2dyb3VuZDojZDRlZGRhO2NvbG9yOiMxNTU3MjR9CiAgICAudm0yLXJtLnBlbmRpbmd7YmFja2dyb3VuZDojZjBmMGYwO2NvbG9yOiM5OTl9CiAgICAudm0yLXJtLnByb2dyZXNze2JhY2tncm91bmQ6I2ZlZjljMztjb2xvcjojOTI0MDBlfQogICAgLnZtMi1hbGVydC1ib3h7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjhweDtwYWRkaW5nOjEwcHggMTRweDtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTNweDttYXJnaW4tYm90dG9tOjhweH0KICAgIC52bTItYWxlcnQtZXJyb3J7YmFja2dyb3VuZDojZmRmM2YzO2JvcmRlcjoxcHggc29saWQgI2Y1YzZjYjtjb2xvcjojNzIxYzI0fQogICAgLnZtMi1hbGVydC13YXJuaW5ne2JhY2tncm91bmQ6I2ZmZmJlYTtib3JkZXI6MXB4IHNvbGlkICNmZmVlYmE7Y29sb3I6Izg1NjQwNH0KICAgIC52bTItbW9ub3tmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjExcHg7YmFja2dyb3VuZDojZjBmMGYwO3BhZGRpbmc6MnB4IDZweDtib3JkZXItcmFkaXVzOjNweH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0idm0yLXdyYXAiPgoKICAgIDwhLS0gSGVhZGVyICsgUGVyaW9kIFRhYnMgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItaGVhZGVyIj4KICAgICAgICA8aDEgc3R5bGU9Im1hcmdpbjowIj7wn4yfIFZJVkFNQUlTIDIuMCA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6Izk5OTtmb250LXdlaWdodDpub3JtYWwiPnY8P3BocCBlY2hvIFZNMl9WRVJTSU9OOyA/Pjwvc3Bhbj48L2gxPgogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1wZXJpb2QtdGFicyI+CiAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICggJHBlcmlvZHMgYXMgJGtleSA9PiAkbGFiZWwgKSA6ID8+CiAgICAgICAgICAgICAgICA8YSBocmVmPSI/cGFnZT12bTItY3JtJnBlcmlvZD08P3BocCBlY2hvIGVzY19hdHRyKCRrZXkpOyA/PiIKICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ2bTItcGVyaW9kLXRhYiA8P3BocCBlY2hvICRwZXJpb2QgPT09ICRrZXkgPyAnYWN0aXZlJyA6ICcnOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkbGFiZWwpOyA/PjwvYT4KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnV0dG9uIGlkPSJ2bTItc3luYy1idG4iIG9uY2xpY2s9InZtMkRvU3luYygpIiBzdHlsZT0iYmFja2dyb3VuZDojMDA3M2FhO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo2cHggMTRweDtmb250LXNpemU6MTNweDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo1cHg7d2hpdGUtc3BhY2U6bm93cmFwIj4KICAgICAgICAgICAgICAgIPCflIQgPHNwYW4gaWQ9InZtMi1zeW5jLWxhYmVsIj5TaW5jcm9uaXphcjwvc3Bhbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzY3JpcHQ+CiAgICBmdW5jdGlvbiB2bTJEb1N5bmMoKSB7CiAgICAgICAgdmFyIGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItc3luYy1idG4nKTsKICAgICAgICB2YXIgbGJsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1zeW5jLWxhYmVsJyk7CiAgICAgICAgYnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICBsYmwudGV4dENvbnRlbnQgPSAnU2luY3Jvbml6YW5kby4uLic7CiAgICAgICAgYnRuLnN0eWxlLm9wYWNpdHkgPSAnMC43JzsKICAgICAgICBmZXRjaChhamF4dXJsLCB7CiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfSwKICAgICAgICAgICAgYm9keTogJ2FjdGlvbj12bTJfbWFudWFsX3N5bmMmbm9uY2U9JyArIDw/cGhwIGVjaG8ganNvbl9lbmNvZGUod3BfY3JlYXRlX25vbmNlKCd2bTJfbWFudWFsX3N5bmMnKSk7ID8+CiAgICAgICAgfSkKICAgICAgICAudGhlbihyID0+IHIuanNvbigpKQogICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcykgewogICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgYnRuLnN0eWxlLm9wYWNpdHkgPSAnMSc7CiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgewogICAgICAgICAgICAgICAgbGJsLnRleHRDb250ZW50ID0gJ+KchSAnICsgKHJlcy5kYXRhLm1zZyB8fCAnU2luY3Jvbml6YWRvIScpOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBsYmwudGV4dENvbnRlbnQgPSAnU2luY3Jvbml6YXInOyBsb2NhdGlvbi5yZWxvYWQoKTsgfSwgMjUwMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsYmwudGV4dENvbnRlbnQgPSAn4p2MIEVycm8nOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBsYmwudGV4dENvbnRlbnQgPSAnU2luY3Jvbml6YXInOyB9LCAzMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IGJ0bi5kaXNhYmxlZD1mYWxzZTsgYnRuLnN0eWxlLm9wYWNpdHk9JzEnOyBsYmwudGV4dENvbnRlbnQ9J+KdjCBGYWxoYSc7IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgbGJsLnRleHRDb250ZW50PSdTaW5jcm9uaXphcic7IH0sMzAwMCk7IH0pOwogICAgfQogICAgPC9zY3JpcHQ+CgogICAgPCEtLSBBbGVydGFzIC0tPgogICAgPD9waHAgZm9yZWFjaCAoICRhbGVydGFzIGFzICRhbGVydGEgKSA6ID8+CiAgICA8ZGl2IGNsYXNzPSJ2bTItYWxlcnQtYm94IHZtMi1hbGVydC08P3BocCBlY2hvICRhbGVydGFbMl07ID8+Ij4KICAgICAgICA8c3Bhbj48P3BocCBlY2hvICRhbGVydGFbMF07ID8+PC9zcGFuPgogICAgICAgIDxzcGFuPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGFsZXJ0YVsxXSk7ID8+PC9zcGFuPgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgoKICAgIDwhLS0gS1BJIENhcmRzIOKAlCBHZXN0w6NvIEludGVsaWdlbnRlIHYxLjMuOSAtLT4KICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTFweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjVweDtjb2xvcjojYWFhO21hcmdpbjo0cHggMCA4cHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5qoIEHDp8OjbyBJbWVkaWF0YTwvcD4KICAgIDxkaXYgY2xhc3M9InZtMi1rcGlzIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPgoKICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6M3B4IHNvbGlkICNlNjdlMjIiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jz9wYWdlPXZtMi1jb250YXRvcyciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+UpSBMZWFkcyBIT1Q8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiPjw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkbGVhZHNfaG90KTsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgPD9waHAgZWNobyAkbGVhZHNfaG90ID4gMCA/ICdkb3duJyA6ICduZXV0cmFsJzsgPz4iPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkbGVhZHNfaG90ID4gMCA/ICdhZ3VhcmRhbmRvIGZlY2hhbWVudG8nIDogJ05lbmh1bSBsZWFkIHF1ZW50ZSc7ID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6M3B4IHNvbGlkICM5YjU5YjYiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jz9wYWdlPXZtMi1hdXRvbWFjb2VzJnRhYj1jYXJyaW5obyciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+bkiBDYXJyaW5ob3MgaG9qZTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSI+PD9waHAgZWNobyAkY2FycmluaG9zX2hvamU7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIDw/cGhwIGVjaG8gJGNhcnJpbmhvc19ob2plID4gMCA/ICdkb3duJyA6ICduZXV0cmFsJzsgPz4iPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkY2FycmluaG9zX2hvamUgPiAwID8gJ1IkwqAnIC4gbnVtYmVyX2Zvcm1hdCgkY2FycmluaG9fdmFsLCAwLCAnLCcsICcuJykgLiAnIGVtIHJpc2NvJyA6ICdOZW5odW0gYWJhbmRvbm8gaG9qZSc7ID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6M3B4IHNvbGlkICMzNDk4ZGIiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jz9wYWdlPXZtMi1wZWRpZG9zJyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn5aK77iPIENvbnRyYXRvcyBwZW5kZW50ZXM8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiPjw/cGhwIGVjaG8gJG51bV9jb250cmF0b3M7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIDw/cGhwIGVjaG8gJG51bV9jb250cmF0b3MgPiAwID8gJ25ldXRyYWwnIDogJ3VwJzsgPz4iPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkbnVtX2NvbnRyYXRvcyA+IDAgPyAkbnVtX2NvbnRyYXRvcyAuICcgYWd1YXJkLiBhc3NpbmF0dXJhJyA6ICdOZW5odW0gcGVuZGVudGUg4pyTJzsgPz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDozcHggc29saWQgIzk1YTVhNiIgb25jbGljaz0ibG9jYXRpb24uaHJlZj0nP3BhZ2U9dm0yLWNvbnRhdG9zJyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn5OFIExlYWRzIHNlbSBkYXRhPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJGxlYWRzX3NlbV9kYXRhKTsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgPD9waHAgZWNobyAkbGVhZHNfc2VtX2RhdGEgPiA1MDAgPyAnZG93bicgOiAoJGxlYWRzX3NlbV9kYXRhID4gMCA/ICduZXV0cmFsJyA6ICd1cCcpOyA/PiI+CiAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRsZWFkc19zZW1fZGF0YSA+IDAgPyAnbGVhZHMgcGFyYSByZWVuZ2FqYXInIDogJ1RvZG9zIGNvbSBkYXRhIOKckyc7ID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgIDwvZGl2PgoKICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTFweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjVweDtjb2xvcjojYWFhO21hcmdpbjoxMnB4IDAgOHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+TiiBTYcO6ZGUgZG8gTmVnw7NjaW88L3A+CiAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpcyI+CgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDozcHggc29saWQgIzI3YWU2MCIgb25jbGljaz0ibG9jYXRpb24uaHJlZj0nP3BhZ2U9dm0yLWFnZW5kYSciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+OqiBFdmVudG9zIHByw7N4LiAzMGQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiPjw/cGhwIGVjaG8gJGV2X3Byb3gzMDsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgPD9waHAgZWNobyAkZXZfcHJveDcgPiAwID8gJ2Rvd24nIDogJ3VwJzsgPz4iPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZXZfcHJveDcgPiAwID8gJGV2X3Byb3g3IC4gJyBlc3RhIHNlbWFuYSDwn5S0JyA6ICdOZW5odW0gZXN0YSBzZW1hbmEnOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgc3R5bGU9ImJvcmRlci1sZWZ0OjNweCBzb2xpZCAjZjM5YzEyIiBvbmNsaWNrPSJsb2NhdGlvbi5ocmVmPSc/cGFnZT12bTItcGVkaWRvcyciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+TiCBDb252ZXJzw6NvIEhPVOKGklZlbmRhPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj48P3BocCBlY2hvICRjb252X2hvdF9wY3Q7ID8+JTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWx0YSBuZXV0cmFsIj48P3BocCBlY2hvICRudW1fcGVkaWRvczsgPz4gcGVkaWRvcyAvIDw/cGhwIGVjaG8gJGxlYWRzX2hvdDsgPz4gSE9UPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDozcHggc29saWQgIzFhYmM5YyIgb25jbGljaz0ibG9jYXRpb24uaHJlZj0nP3BhZ2U9dm0yLWF1dG9tYWNvZXMmdGFiPWNhcnJpbmhvJyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn5OoIFdBIFJlY292ZXJ5IGhvamU8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiPjw/cGhwIGVjaG8gJHdhX2hvamU7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIDw/cGhwIGVjaG8gJHdhX2hvamUgPiAwID8gJ3VwJyA6ICduZXV0cmFsJzsgPz4iPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkd2FfaG9qZSA+IDAgPyAnbWVuc2FnZW5zIGVudmlhZGFzIOKckycgOiBudW1iZXJfZm9ybWF0KCR3YV90b3RhbCkgLiAnIG5vIHBlcsOtb2RvJzsgPz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDozcHggc29saWQgI2U3NGMzYyIgb25jbGljaz0ibG9jYXRpb24uaHJlZj0nP3BhZ2U9dm0yLWF1dG9tYWNvZXMmdGFiPXBvcHVwJyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn46vIFBvcHVwIOKAlCBDb252ZXJzw7VlczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSI+PD9waHAgZWNobyAkcG9wdXBfY29udjsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgbmV1dHJhbCI+CiAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRwb3B1cF9zaG93cyA+IDAgPyBudW1iZXJfZm9ybWF0KCRwb3B1cF9jb252LyRwb3B1cF9zaG93cyoxMDAsMSkgLiAnJSBkZSAnIC4gbnVtYmVyX2Zvcm1hdCgkcG9wdXBfc2hvd3MpIC4gJyBleGliLicgOiAnQWd1YXJkYW5kbyBkYWRvcyc7ID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgIDwvZGl2PgogICAgPCEtLSBGdW5pbCArIFN0YXR1cyAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1ncmlkMiI+CgogICAgICAgIDwhLS0gRnVuaWwgZGUgVmVuZGFzIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1jYXJkIj4KICAgICAgICAgICAgPGgzPvCflLsgRnVuaWwgZGUgVmVuZGFzPC9oMz4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgJG1heCA9IG1heCggJHRvdGFsX2xlYWRzLCAxICk7CiAgICAgICAgICAgICRmdW5pbCA9IFsKICAgICAgICAgICAgICAgIFsnVG90YWwgTGVhZHMgS29tbW8nLCAkdG90YWxfbGVhZHMsICAgJyMzNDk4ZGInXSwKICAgICAgICAgICAgICAgIFsn8J+UpSBIb3QgLyBJbmNvbWluZycsICRsZWFkc19ob3QsICAgICAnI2U2N2UyMiddLAogICAgICAgICAgICAgICAgWyfinIUgQ29udHJhdG91JywgICAgICAkbGVhZHNfY29udiwgICAgJyMyN2FlNjAnXSwKICAgICAgICAgICAgICAgIFsn8J+bkiBQZWRpZG9zIFdDJywgICAgJG51bV9wZWRpZG9zLCAgICcjOGU0NGFkJ10sCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGZvcmVhY2ggKCAkZnVuaWwgYXMgWyRsYmwsICR2YWwsICRjb3JdICkgOgogICAgICAgICAgICAgICAgJHBjdCA9IHJvdW5kKCBtaW4oMTAwLCAkdmFsIC8gJG1heCAqIDEwMCkgKTsKICAgICAgICAgICAgPz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0id2lkdGg6MTUwcHg7Zm9udC1zaXplOjEycHg7ZmxleC1zaHJpbms6MCI+PD9waHAgZWNobyAkbGJsOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1iYXItd3JhcCI+PGRpdiBjbGFzcz0idm0yLWJhci1maWxsIiBzdHlsZT0id2lkdGg6PD9waHAgZWNobyAkcGN0OyA/PiU7YmFja2dyb3VuZDo8P3BocCBlY2hvICRjb3I7ID8+Ij48L2Rpdj48L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJ3aWR0aDo0MnB4O3RleHQtYWxpZ246cmlnaHQ7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxM3B4Ij48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJHZhbCk7ID8+PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4O3BhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiNmOWY5Zjk7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzU1NSI+CiAgICAgICAgICAgICAgICDwn46vIENvbnZlcnPDo28gTGVhZCDihpIgVmVuZGE6IDxzdHJvbmcgc3R5bGU9ImNvbG9yOiMwMDczYWEiPjw/cGhwIGVjaG8gJHRvdGFsX2xlYWRzID4gMCA/IG51bWJlcl9mb3JtYXQoJG51bV9wZWRpZG9zIC8gJHRvdGFsX2xlYWRzICogMTAwLCAyKSA6ICcwLDAwJzsgPz4lPC9zdHJvbmc+CiAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDt8Jm5ic3A7Jm5ic3A7CiAgICAgICAgICAgICAgICDwn5SlIFRheGEgSG90OiA8c3Ryb25nPjw/cGhwIGVjaG8gJHRvdGFsX2xlYWRzID4gMCA/IG51bWJlcl9mb3JtYXQoJGxlYWRzX2hvdCAvICR0b3RhbF9sZWFkcyAqIDEwMCwgMSkgOiAnMCc7ID8+JTwvc3Ryb25nPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBTdGF0dXMgZG8gU2lzdGVtYSAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY2FyZCI+CiAgICAgICAgICAgIDxoMz7wn5OhIFN0YXR1cyBkbyBTaXN0ZW1hPC9oMz4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1zZWN0aW9uLWxhYmVsIj5DYW5haXMgZGUgRW52aW88L2Rpdj4KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRjaGFubmVscyBhcyAka2V5ID0+ICRjaCApIDogPz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLW1vbm8iPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGtleSk7ID8+PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij48P3BocCBlY2hvIGVzY19odG1sKCRjaFsnbGFiZWwnXSk7ID8+PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG8iPvCfn6IgQXRpdm88L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXNlY3Rpb24tbGFiZWwiPk3Ds2R1bG9zPC9kaXY+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICR2MmtzID0gJGtzID09PSAnMSc7CiAgICAgICAgICAgICR2MWtzID0gZ2V0X29wdGlvbiggJ3ZtX2tpbGxfc3dpdGNoJywgJzEnICkgPT09ICcxJzsKICAgICAgICAgICAgJG1vZHVsb3MgPSBbCiAgICAgICAgICAgICAgICBbJ/Cfm5IgTm90aWZpY2HDp8OjbyBQZWRpZG9zIChWMiknLCAhJHYya3MgJiYgZ2V0X29wdGlvbigndm0yX3BlZGlkb3NfdmVuZGFzX2VuYWJsZWQnLCcxJyk9PT0nMSddLAogICAgICAgICAgICAgICAgWyfwn5SBIFdBIFJlY292ZXJ5JywgICAgICAgICAgICAgICR3YV9rcyA9PT0gJzAnXSwKICAgICAgICAgICAgICAgIFsn8J+UpSBBcXVlY2VyIC8gTnVydHVyaW5nIChWMSknLCAhJHYxa3NdLAogICAgICAgICAgICAgICAgWyfwn5SSIEtpbGwgU3dpdGNoIEdsb2JhbCBWMicsICAgICEkdjJrc10sCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGZvcmVhY2ggKCAkbW9kdWxvcyBhcyBbJGxibCwgJG9rXSApIDogPz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHgiPjw/cGhwIGVjaG8gJGxibDsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6YXV0bztmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Y29sb3I6PD9waHAgZWNobyAkb2sgPyAnIzI3YWU2MCcgOiAnI2MwMzkyYic7ID8+Ij4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvayA/ICfwn5+iIE9OJyA6ICfwn5S0IE9GRic7ID8+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgoKICAgICAgICAgICAgPD9waHAgaWYgKCAkd2FfdG90YWwgPiAwICkgOiA/PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7cGFkZGluZzo4cHggMTBweDtiYWNrZ3JvdW5kOiNmOWY5Zjk7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzU1NSI+CiAgICAgICAgICAgICAgICDwn5OoIFdBIFJlY292ZXJ5IGVudmlhZG9zIG5vIHBlcsOtb2RvOiA8c3Ryb25nPjw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkd2FfdG90YWwpOyA/Pjwvc3Ryb25nPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPC9kaXY+CgogICAgPC9kaXY+CgogICAgPCEtLSBQZWRpZG9zIFJlY2VudGVzIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWNhcmQiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgIDxoMz7wn5OLIFBlZGlkb3MgUmVjZW50ZXM8L2gzPgogICAgICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0byI+CiAgICAgICAgPHRhYmxlIGNsYXNzPSJ2bTItdGFibGUiPgogICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRoPiM8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5DbGllbnRlPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+RGF0YSBQZWRpZG88L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5EYXRhIEV2ZW50bzwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoPlZhbG9yPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRyZWNlbnRfb3JkZXJzIGFzICRvcmRlciApIDoKICAgICAgICAgICAgICAgICRldl9yYXcgPSAkb3JkZXItPmdldF9tZXRhKCAnX2JpbGxpbmdfZXZlbnRfZGF0ZScgKTsKICAgICAgICAgICAgICAgICRldl9mbXQgPSB2bTJfZm9ybWF0X2V2ZW50X2RhdGUoICRldl9yYXcgKTsKICAgICAgICAgICAgICAgICRzdCAgICAgPSAkb3JkZXItPmdldF9zdGF0dXMoKTsKICAgICAgICAgICAgICAgICRiYWRnZSAgPSAkc3QgPT09ICdwcm9jZXNzaW5nJyA/IFsndm0yLWJhZGdlLWJsdWUnLCfimpnvuI8gUHJvY2Vzc2FuZG8nXSA6ICggJHN0ID09PSAnY29tcGxldGVkJyA/IFsndm0yLWJhZGdlLWdyZWVuJywn4pyFIENvbmNsdcOtZG8nXSA6IFsndm0yLWJhZGdlLW9yYW5nZScsJ+KPsyAnIC4gdWNmaXJzdCgkc3QpXSApOwogICAgICAgICAgICA/PgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PHN0cm9uZz4jPD9waHAgZWNobyAkb3JkZXItPmdldF9pZCgpOyA/Pjwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyBlc2NfaHRtbCggdHJpbSggJG9yZGVyLT5nZXRfYmlsbGluZ19maXJzdF9uYW1lKCkgLiAnICcgLiAkb3JkZXItPmdldF9iaWxsaW5nX2xhc3RfbmFtZSgpICkgKTsgPz48L3RkPgogICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gZXNjX2h0bWwoIGRhdGUoICdkL20vWScsIHN0cnRvdGltZSggJG9yZGVyLT5nZXRfZGF0ZV9jcmVhdGVkKCkgKSApICk7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICRldl9mbXQgPyBlc2NfaHRtbCgkZXZfZm10KSA6ICc8c3BhbiBzdHlsZT0iY29sb3I6I2NjYyI+4oCUPC9zcGFuPic7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48c3Ryb25nPlIkIDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCggJG9yZGVyLT5nZXRfdG90YWwoKSwgMCwgJywnLCAnLicgKTsgPz48L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgPHRkPjxzcGFuIGNsYXNzPSJ2bTItYmFkZ2UgPD9waHAgZWNobyAkYmFkZ2VbMF07ID8+Ij48P3BocCBlY2hvICRiYWRnZVsxXTsgPz48L3NwYW4+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoIGFkbWluX3VybCggJ3Bvc3QucGhwP3Bvc3Q9JyAuICRvcmRlci0+Z2V0X2lkKCkgLiAnJmFjdGlvbj1lZGl0JyApICk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwMDczYWEiPlZlciDihpI8L2E+PC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweDt0ZXh0LWFsaWduOnJpZ2h0Ij4KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCBhZG1pbl91cmwoICdlZGl0LnBocD9wb3N0X3R5cGU9c2hvcF9vcmRlcicgKSApOyA/PiIgY2xhc3M9ImJ1dHRvbiBidXR0b24tc2Vjb25kYXJ5IiBzdHlsZT0iZm9udC1zaXplOjEycHgiPlZlciB0b2RvcyBvcyBwZWRpZG9zIOKGkjwvYT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gUm9hZG1hcCAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1jYXJkIj4KICAgICAgICA8aDM+8J+Xuu+4jyBSb2FkbWFwIFYyPC9oMz4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItcm9hZG1hcCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItcm0gZG9uZSI+4pyFIEYxIOKAlCBQbHVnaW4gQmFzZTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1ybSBkb25lIj7inIUgRjIg4oCUIERhc2hib2FyZCArIEtQSXM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItcm0gZG9uZSI+4pyFIEYzIOKAlCDwn5uSIFBlZGlkb3M8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItcm0gZG9uZSI+4pyFIEY0IOKAlCDwn5GkIENvbnRhdG9zICsgU2NvcmluZzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1ybSBkb25lIj7inIUgRjUg4oCUIOKaoSBBdXRvbWHDp8O1ZXM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItcm0gZG9uZSI+4pyFIEY2IOKAlCDwn5KsIENhcnJpbmhvICsgRXhpdC1JbnRlbnQgKyBQb3B1cDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1ybSBkb25lIj7inIUgRjcg4oCUIPCfk4UgQWdlbmRhPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLXJtIHByb2dyZXNzIj7wn5SEIEY4IOKAlCDwn6SdIFBhcmNlaXJvcyAmIEFydGlzdGFzPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLXJtIHByb2dyZXNzIj7wn5SEIEY5IOKAlCDwn5KwIEZpbmFuY2Vpcm88L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItcm0gcGVuZGluZyI+4o+zIEYxMCDigJQg4pqZ77iPIENvbmZpZyB1bmlmaWNhZGE8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItcm0gcGVuZGluZyI+4o+zIEYxMSDigJQg8J+TiyBMb2cgdW5pZmljYWRvPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLXJtIHBlbmRpbmciPuKPsyBGMTIg4oCUIPCflIQgU3luYyBQbGFuaWxoYSDihpIgQ3JvbiBXUDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1ybSBwZW5kaW5nIj7ij7MgRjEzIOKAlCDinI3vuI8gQ2xpY2tTaWduIHdlYmhvb2s8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8L2Rpdj48IS0tIC52bTItd3JhcCAtLT4KICAgIDw/cGhwCn0KCgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gUEVESURPUyBQQUdFCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIE3Dk0RVTE8gQ09OVEFUT1Mg4oCUIHYxLjAuNAovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKCmZ1bmN0aW9uIHZtMl9sZWFkX3Njb3JlKCAkbGVhZCwgJHdhX2NvdW50ID0gMCApIHsKICAgICRzY29yZSA9IDEwOwogICAgLy8gRXZlbnQgZGF0ZQogICAgJGV2X2NvbCA9ICRsZWFkLT5kYXRhX2V2ZW50byA/PyAkbGVhZC0+ZXZfZGF0ZSA/PyAnJzsKICAgIGlmICggISBlbXB0eSggJGV2X2NvbCApICkgewogICAgICAgICR0cyAgID0gc3RydG90aW1lKCAkZXZfY29sICk7CiAgICAgICAgJGRheXMgPSAoICR0cyAtIHRpbWUoKSApIC8gODY0MDA7CiAgICAgICAgJHNjb3JlICs9IDIwOwogICAgICAgIGlmICggJGRheXMgPj0gMCAmJiAkZGF5cyA8PSA3ICkgICAgICAgJHNjb3JlICs9IDQwOwogICAgICAgIGVsc2VpZiAoICRkYXlzID49IDAgJiYgJGRheXMgPD0gMzAgKSAgJHNjb3JlICs9IDMwOwogICAgICAgIGVsc2VpZiAoICRkYXlzID49IDAgJiYgJGRheXMgPD0gOTAgKSAgJHNjb3JlICs9IDIwOwogICAgICAgIGVsc2VpZiAoICRkYXlzID49IDAgKSAgICAgICAgICAgICAgICAgJHNjb3JlICs9IDEwOwogICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY29yZSAtPSAxMDsgLy8gcGFzdAogICAgfQogICAgLy8gS29tbW8gSE9UIHN0YWdlCiAgICBpZiAoIGlzc2V0KCAkbGVhZC0+c3RhdHVzX2lkICkgJiYgKGludCkgJGxlYWQtPnN0YXR1c19pZCA9PT0gOTQzMDU2NjQgKSAkc2NvcmUgKz0gMjU7CiAgICAvLyBXQSBtZXNzYWdlcwogICAgaWYgKCAkd2FfY291bnQgPiAzICkgICAgICAkc2NvcmUgKz0gMTA7CiAgICBlbHNlaWYgKCAkd2FfY291bnQgPiAwICkgICRzY29yZSArPSAgNTsKICAgIC8vIEVtYWlsCiAgICBpZiAoICEgZW1wdHkoICRsZWFkLT5lbWFpbCApICkgJHNjb3JlICs9IDU7CiAgICByZXR1cm4gbWF4KCAwLCBtaW4oIDEwMCwgJHNjb3JlICkgKTsKfQoKZnVuY3Rpb24gdm0yX3Njb3JlX2JhZGdlKCAkc2NvcmUgKSB7CiAgICBpZiAoICRzY29yZSA+PSA3NSApIHJldHVybiAnPHNwYW4gY2xhc3M9InZtMi1iYWRnZS1zY29yZSB2bTItaG90Ij7wn5SlICcgLiAkc2NvcmUgLiAnPC9zcGFuPic7CiAgICBpZiAoICRzY29yZSA+PSA0NSApIHJldHVybiAnPHNwYW4gY2xhc3M9InZtMi1iYWRnZS1zY29yZSB2bTItd2FybSI+4pqhICcgLiAkc2NvcmUgLiAnPC9zcGFuPic7CiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJ2bTItYmFkZ2Utc2NvcmUgdm0yLWNvbGQiPvCfjLEgJyAuICRzY29yZSAuICc8L3NwYW4+JzsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEhFTFBFUiDigJQgTk9STUFMSVpFIFBIT05FICsgTEFTVDExCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfbm9ybWFsaXplX3Bob25lKCAkcmF3ICkgewogICAgJGQgPSBwcmVnX3JlcGxhY2UoICcvXEQvJywgJycsICRyYXcgKTsKICAgIGlmICggc3RybGVuKCRkKSA9PT0gMTEgKSAkZCA9ICc1NScgLiAkZDsKICAgIGlmICggc3RybGVuKCRkKSA9PT0gMTAgKSAkZCA9ICc1NScgLiAkZDsKICAgIHJldHVybiAoIHN0cmxlbigkZCkgPj0gMTIgJiYgc3RybGVuKCRkKSA8PSAxMyApID8gJGQgOiAnJzsKfQoKZnVuY3Rpb24gdm0yX3Bob25lX2xhc3QxMSggJHBob25lICkgewogICAgcmV0dXJuIHN1YnN0ciggcHJlZ19yZXBsYWNlKCAnL1xELycsICcnLCAkcGhvbmUgKSwgLTExICk7Cn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBIRUxQRVIg4oCUIEdFVCBMRUFEUyBQQVJBIEFRVUVDRVIgKG11bHRpLWZvbnRlLCByYW5rZWFkb3MpCi8vIFNjb3JlOiBLb21tbysxMCwgRGF0YUV2ZW50bysxNS4uNTUsIEhPVCBzdGFnZSsyNSwKLy8gICAgICAgIEdhbGVyaWEgdG9rZW4rMTUsIEdhbGVyaWEgYWJlcnRhKzI1Li41NSwKLy8gICAgICAgIENhcnJpbmhvIGFiYW5kb25hZG8rMjAKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9nZXRfbGVhZHNfcGFyYV9hcXVlY2VyKCAkYXJncyA9IFtdICkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJHNjb3JlX21pbiAgPSAoaW50KSggJGFyZ3NbJ3Njb3JlX21pbiddID8/IDAgKTsKICAgICRsaW1pdCAgICAgID0gKGludCkoICRhcmdzWydsaW1pdCddICAgICA/PyAzMDAgKTsKICAgICRzcmNfZmlsdGVyID0gJGFyZ3NbJ3NvdXJjZSddID8/ICdhbGwnOwogICAgJHVzZV9jYWNoZSAgPSBpc3NldCgkYXJnc1snY2FjaGUnXSkgPyAoYm9vbCkkYXJnc1snY2FjaGUnXSA6IHRydWU7CgogICAgJGNhY2hlX2tleSA9ICd2bTJfbGVhZHNfYXFfdjInOwogICAgaWYgKCAkdXNlX2NhY2hlICkgewogICAgICAgICRjYWNoZWQgPSBnZXRfdHJhbnNpZW50KCRjYWNoZV9rZXkpOwogICAgICAgIGlmICggJGNhY2hlZCAhPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICRvdXQgPSAkc2NvcmVfbWluID4gMAogICAgICAgICAgICAgICAgPyBhcnJheV92YWx1ZXMoIGFycmF5X2ZpbHRlcigkY2FjaGVkLCBmbigkbCkgPT4gJGxbJ3Njb3JlJ10gPj0gJHNjb3JlX21pbikgKQogICAgICAgICAgICAgICAgOiBhcnJheV92YWx1ZXMoJGNhY2hlZCk7CiAgICAgICAgICAgIHJldHVybiBhcnJheV9zbGljZSgkb3V0LCAwLCAkbGltaXQpOwogICAgICAgIH0KICAgIH0KCiAgICAkcGhvbmVzID0gW107CgogICAgLy8g4pSA4pSAIFNvdXJjZSAxOiBLb21tbyBsZWFkcyDilIDilIAKICAgIGlmICggJHNyY19maWx0ZXIgPT09ICdhbGwnIHx8ICRzcmNfZmlsdGVyID09PSAna29tbW8nICkgewogICAgICAgICRyb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICAgICAiU0VMRUNUIHBob25lLCBuYW1lLCBkYXRhX2V2ZW50bywgc3RhdHVzX2lkCiAgICAgICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXZtX2tvbW1vX2xlYWRzCiAgICAgICAgICAgICBXSEVSRSBwaG9uZSAhPSAnJwogICAgICAgICAgICAgT1JERVIgQlkgbGFzdF9zeW5jZWQgREVTQyBMSU1JVCAxMDAwIgogICAgICAgICk7CiAgICAgICAgZm9yZWFjaCAoICRyb3dzIGFzICRyICkgewogICAgICAgICAgICAkcCA9IHZtMl9ub3JtYWxpemVfcGhvbmUoICRyLT5waG9uZSApOwogICAgICAgICAgICBpZiAoICEgJHAgKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKCAhIGlzc2V0KCRwaG9uZXNbJHBdKSApIHsKICAgICAgICAgICAgICAgICRwaG9uZXNbJHBdID0gWwogICAgICAgICAgICAgICAgICAgICdwaG9uZScgICAgICAgPT4gJHAsCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnICAgICAgICA9PiAkci0+bmFtZSA/PyAnJywKICAgICAgICAgICAgICAgICAgICAnZGF0YV9ldmVudG8nID0+ICRyLT5kYXRhX2V2ZW50byA/PyAnJywKICAgICAgICAgICAgICAgICAgICAnc3RhdHVzX2lkJyAgID0+ICRyLT5zdGF0dXNfaWQsCiAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnICAgICA9PiBbJ2tvbW1vJ10sCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCAhIGluX2FycmF5KCdrb21tbycsICRwaG9uZXNbJHBdWydzb3VyY2VzJ10pICkgJHBob25lc1skcF1bJ3NvdXJjZXMnXVtdID0gJ2tvbW1vJzsKICAgICAgICAgICAgICAgIGlmICggZW1wdHkoJHBob25lc1skcF1bJ25hbWUnXSkgKSAkcGhvbmVzWyRwXVsnbmFtZSddID0gJHItPm5hbWUgPz8gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8g4pSA4pSAIFNvdXJjZSAyOiBHYWxlcmlhIHRva2VucyAoNjAgZGlhcykg4pSA4pSACiAgICBpZiAoICRzcmNfZmlsdGVyID09PSAnYWxsJyB8fCAkc3JjX2ZpbHRlciA9PT0gJ2dhbGVyaWEnICkgewogICAgICAgICRyb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICAgICAiU0VMRUNUIHQud2hhdHNhcHAsIGEubm9tZSBBUyBhdHJhY2FvX25vbWUKICAgICAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9dm1nYWxfdG9rZW5zIHQKICAgICAgICAgICAgIExFRlQgSk9JTiB7JHdwZGItPnByZWZpeH12bWdhbF9hdHJhY29lcyBhIE9OIEZJTkRfSU5fU0VUKGEuaWQsIHQuYXRyYWNhb19pZHMpCiAgICAgICAgICAgICBXSEVSRSB0LmNyZWF0ZWRfYXQgPj0gREFURV9TVUIoTk9XKCksIElOVEVSVkFMIDYwIERBWSkKICAgICAgICAgICAgIE9SREVSIEJZIHQuY3JlYXRlZF9hdCBERVNDIExJTUlUIDQwMCIKICAgICAgICApOwogICAgICAgIGZvcmVhY2ggKCAkcm93cyBhcyAkciApIHsKICAgICAgICAgICAgJHAgPSB2bTJfbm9ybWFsaXplX3Bob25lKCAkci0+d2hhdHNhcHAgKTsKICAgICAgICAgICAgaWYgKCAhICRwICkgY29udGludWU7CiAgICAgICAgICAgIGlmICggISBpc3NldCgkcGhvbmVzWyRwXSkgKSB7CiAgICAgICAgICAgICAgICAkcGhvbmVzWyRwXSA9IFsKICAgICAgICAgICAgICAgICAgICAncGhvbmUnICAgICAgICAgID0+ICRwLAogICAgICAgICAgICAgICAgICAgICduYW1lJyAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ2RhdGFfZXZlbnRvJyAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnc3RhdHVzX2lkJyAgICAgID0+IG51bGwsCiAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnICAgICAgICA9PiBbJ2dhbGVyaWEnXSwKICAgICAgICAgICAgICAgICAgICAnZ2FsZXJpYV9hdHJhY2FvJyA9PiAkci0+YXRyYWNhb19ub21lID8/ICcnLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICggISBpbl9hcnJheSgnZ2FsZXJpYScsICRwaG9uZXNbJHBdWydzb3VyY2VzJ10pICkgJHBob25lc1skcF1bJ3NvdXJjZXMnXVtdID0gJ2dhbGVyaWEnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIOKUgOKUgCBTb3VyY2UgMzogQ2FycmluaG8gYWJhbmRvbmFkbyAoNjAgZGlhcykg4pSA4pSACiAgICBpZiAoICRzcmNfZmlsdGVyID09PSAnYWxsJyB8fCAkc3JjX2ZpbHRlciA9PT0gJ2NhcnJpbmhvJyApIHsKICAgICAgICAkcm93cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAgICAgIlNFTEVDVCBwaG9uZSwgcHJvZHVjdF9uYW1lCiAgICAgICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXZtX3dhX2NhcHR1cmVzCiAgICAgICAgICAgICBXSEVSRSBzdGF0dXMgIT0gJ2JvdWdodCcKICAgICAgICAgICAgIEFORCBjYXB0dXJlZF9hdCA+PSBEQVRFX1NVQihOT1coKSwgSU5URVJWQUwgNjAgREFZKQogICAgICAgICAgICAgT1JERVIgQlkgY2FwdHVyZWRfYXQgREVTQyBMSU1JVCAzMDAiCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoICggJHJvd3MgYXMgJHIgKSB7CiAgICAgICAgICAgICRwID0gdm0yX25vcm1hbGl6ZV9waG9uZSggJHItPnBob25lICk7CiAgICAgICAgICAgIGlmICggISAkcCApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoICEgaXNzZXQoJHBob25lc1skcF0pICkgewogICAgICAgICAgICAgICAgJHBob25lc1skcF0gPSBbCiAgICAgICAgICAgICAgICAgICAgJ3Bob25lJyAgICAgICAgPT4gJHAsCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ2RhdGFfZXZlbnRvJyAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ3N0YXR1c19pZCcgICAgPT4gbnVsbCwKICAgICAgICAgICAgICAgICAgICAnc291cmNlcycgICAgICA9PiBbJ2NhcnJpbmhvJ10sCiAgICAgICAgICAgICAgICAgICAgJ2NhcnRfcHJvZHVjdCcgPT4gJHItPnByb2R1Y3RfbmFtZSA/PyAnJywKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoICEgaW5fYXJyYXkoJ2NhcnJpbmhvJywgJHBob25lc1skcF1bJ3NvdXJjZXMnXSkgKSAkcGhvbmVzWyRwXVsnc291cmNlcyddW10gPSAnY2FycmluaG8nOwogICAgICAgICAgICAgICAgaWYgKCBlbXB0eSgkcGhvbmVzWyRwXVsnY2FydF9wcm9kdWN0J10pICkgJHBob25lc1skcF1bJ2NhcnRfcHJvZHVjdCddID0gJHItPnByb2R1Y3RfbmFtZSA/PyAnJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoIGVtcHR5KCRwaG9uZXMpICkgcmV0dXJuIFtdOwoKICAgIC8vIOKUgOKUgCBCYXRjaCBlbnJpY2htZW50ICgyIHF1ZXJpZXMsIG5vdCBOw5dwaG9uZXMpIOKUgOKUgAoKICAgIC8vIEdhbGVyaWE6IHRva2VuICsgdmlldyBjb3VudCBwZXIgbGFzdC0xMQogICAgJGdhbGVyaWFfbWFwID0gW107CiAgICAkdG9rX3Jvd3MgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgIlNFTEVDVCBSSUdIVCh0LndoYXRzYXBwLCAxMSkgQVMgcDExLAogICAgICAgICBhLm5vbWUgQVMgYXRyYWNhb19ub21lLAogICAgICAgICAoU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm1nYWxfdmlld3MgdgogICAgICAgICAgV0hFUkUgdi50b2tlbl9pZCA9IHQuaWQgQU5EIHYuYWNhbyAhPSAnY3RhX3ZpZXcnKSBBUyB2YwogICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXZtZ2FsX3Rva2VucyB0CiAgICAgICAgIExFRlQgSk9JTiB7JHdwZGItPnByZWZpeH12bWdhbF9hdHJhY29lcyBhIE9OIEZJTkRfSU5fU0VUKGEuaWQsIHQuYXRyYWNhb19pZHMpCiAgICAgICAgIFdIRVJFIHQuY3JlYXRlZF9hdCA+PSBEQVRFX1NVQihOT1coKSwgSU5URVJWQUwgNjAgREFZKQogICAgICAgICBPUkRFUiBCWSB0LmNyZWF0ZWRfYXQgREVTQyIKICAgICk7CiAgICBmb3JlYWNoICggJHRva19yb3dzIGFzICRyICkgewogICAgICAgIGlmICggISBpc3NldCgkZ2FsZXJpYV9tYXBbJHItPnAxMV0pICkgJGdhbGVyaWFfbWFwWyRyLT5wMTFdID0gJHI7CiAgICB9CgogICAgLy8gQ2FycmluaG86IGxhdGVzdCBhYmFuZG9uZWQgcHJvZHVjdCBwZXIgbGFzdC0xMQogICAgJGNhcnRfbWFwID0gW107CiAgICAkY2FydF9yb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1QgUklHSFQocGhvbmUsIDExKSBBUyBwMTEsIHByb2R1Y3RfbmFtZQogICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXZtX3dhX2NhcHR1cmVzCiAgICAgICAgIFdIRVJFIHN0YXR1cyAhPSAnYm91Z2h0JwogICAgICAgICBBTkQgY2FwdHVyZWRfYXQgPj0gREFURV9TVUIoTk9XKCksIElOVEVSVkFMIDYwIERBWSkKICAgICAgICAgT1JERVIgQlkgY2FwdHVyZWRfYXQgREVTQyIKICAgICk7CiAgICBmb3JlYWNoICggJGNhcnRfcm93cyBhcyAkciApIHsKICAgICAgICBpZiAoICEgaXNzZXQoJGNhcnRfbWFwWyRyLT5wMTFdKSApICRjYXJ0X21hcFskci0+cDExXSA9ICRyLT5wcm9kdWN0X25hbWU7CiAgICB9CgogICAgLy8g4pSA4pSAIFNjb3JlIGVhY2ggdW5pcXVlIHBob25lIOKUgOKUgAogICAgJHJlc3VsdHMgPSBbXTsKICAgIGZvcmVhY2ggKCAkcGhvbmVzIGFzICRwaG9uZSA9PiAkYmFzZSApIHsKICAgICAgICAkcDExICAgICA9IHZtMl9waG9uZV9sYXN0MTEoJHBob25lKTsKICAgICAgICAkc2NvcmUgICA9IDA7CiAgICAgICAgJHNpZ25hbHMgPSBbXTsKCiAgICAgICAgLy8gS29tbW8KICAgICAgICBpZiAoIGluX2FycmF5KCdrb21tbycsICRiYXNlWydzb3VyY2VzJ10pICkgewogICAgICAgICAgICAkc2NvcmUgKz0gMTA7CiAgICAgICAgICAgICRzaWduYWxzW10gPSBbJ2ljb24nID0+ICfwn5K8JywgJ2xhYmVsJyA9PiAnS29tbW8nLCAncHRzJyA9PiAxMCwgJ3NyYycgPT4gJ2tvbW1vJ107CiAgICAgICAgICAgIGlmICggISBlbXB0eSgkYmFzZVsnZGF0YV9ldmVudG8nXSkgKSB7CiAgICAgICAgICAgICAgICAkdHMgICA9IHN0cnRvdGltZSgkYmFzZVsnZGF0YV9ldmVudG8nXSk7CiAgICAgICAgICAgICAgICAkZGF5cyA9ICggJHRzIC0gdGltZSgpICkgLyA4NjQwMDsKICAgICAgICAgICAgICAgICRwdHMgID0gMTU7CiAgICAgICAgICAgICAgICBpZiAgICAgICggJGRheXMgPj0gMCAmJiAkZGF5cyA8PSAgNyApICRwdHMgKz0gNDA7CiAgICAgICAgICAgICAgICBlbHNlaWYgICggJGRheXMgPj0gMCAmJiAkZGF5cyA8PSAzMCApICRwdHMgKz0gMzA7CiAgICAgICAgICAgICAgICBlbHNlaWYgICggJGRheXMgPj0gMCAmJiAkZGF5cyA8PSA5MCApICRwdHMgKz0gMjA7CiAgICAgICAgICAgICAgICBlbHNlaWYgICggJGRheXMgPj0gMCApICAgICAgICAgICAgICAgICRwdHMgKz0gMTA7CiAgICAgICAgICAgICAgICAkc2NvcmUgKz0gJHB0czsKICAgICAgICAgICAgICAgICRzaWduYWxzW10gPSBbJ2ljb24nID0+ICfwn5OFJywgJ2xhYmVsJyA9PiAnRXZlbnRvICcgLiBkYXRlKCdkL20veScsICR0cyksICdwdHMnID0+ICRwdHMsICdzcmMnID0+ICdrb21tbyddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggKGludCkoICRiYXNlWydzdGF0dXNfaWQnXSA/PyAwICkgPT09IDk0MzA1NjY0ICkgewogICAgICAgICAgICAgICAgJHNjb3JlICs9IDI1OwogICAgICAgICAgICAgICAgJHNpZ25hbHNbXSA9IFsnaWNvbicgPT4gJ/CflLQnLCAnbGFiZWwnID0+ICdIT1QgS29tbW8nLCAncHRzJyA9PiAyNSwgJ3NyYycgPT4gJ2tvbW1vJ107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEdhbGVyaWEgKGJhdGNoIG1hcCkKICAgICAgICBpZiAoIGlzc2V0KCRnYWxlcmlhX21hcFskcDExXSkgKSB7CiAgICAgICAgICAgICRnZCA9ICRnYWxlcmlhX21hcFskcDExXTsKICAgICAgICAgICAgJHNjb3JlICs9IDE1OwogICAgICAgICAgICAkc2lnbmFsc1tdID0gWydpY29uJyA9PiAn8J+TuCcsICdsYWJlbCcgPT4gJ0dhbGVyaWE6ICcgLiAoICRnZC0+YXRyYWNhb19ub21lID8/ICc/JyApLCAncHRzJyA9PiAxNSwgJ3NyYycgPT4gJ2dhbGVyaWEnXTsKICAgICAgICAgICAgJHZjID0gKGludCkoICRnZC0+dmMgPz8gMCApOwogICAgICAgICAgICBpZiAoICR2YyA+IDAgKSB7CiAgICAgICAgICAgICAgICAkZ3B0cyA9IDI1ICsgbWluKDMwLCAkdmMgKiA1KTsKICAgICAgICAgICAgICAgICRzY29yZSArPSAkZ3B0czsKICAgICAgICAgICAgICAgICRzaWduYWxzW10gPSBbJ2ljb24nID0+ICfwn5GBJywgJ2xhYmVsJyA9PiAiQWJyaXUgKHskdmN9eCkiLCAncHRzJyA9PiAkZ3B0cywgJ3NyYycgPT4gJ2dhbGVyaWEnXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ2FycmluaG8gKGJhdGNoIG1hcCkKICAgICAgICBpZiAoIGlzc2V0KCRjYXJ0X21hcFskcDExXSkgKSB7CiAgICAgICAgICAgICRzY29yZSArPSAyMDsKICAgICAgICAgICAgJHByb2QgID0gJGNhcnRfbWFwWyRwMTFdID8gJzogJyAuIG1iX3N1YnN0cigkY2FydF9tYXBbJHAxMV0sIDAsIDI4KSA6ICcnOwogICAgICAgICAgICAkc2lnbmFsc1tdID0gWydpY29uJyA9PiAn8J+bkicsICdsYWJlbCcgPT4gIkNhcnJpbmhveyRwcm9kfSIsICdwdHMnID0+IDIwLCAnc3JjJyA9PiAnY2FycmluaG8nXTsKICAgICAgICB9CgogICAgICAgICRzY29yZSA9IG1pbigxMDAsIG1heCgwLCAkc2NvcmUpKTsKICAgICAgICBpZiAoICRzY29yZSA8ICRzY29yZV9taW4gKSBjb250aW51ZTsKICAgICAgICAkbGV2ZWwgPSAkc2NvcmUgPj0gNjAgPyAnaG90JyA6ICggJHNjb3JlID49IDMwID8gJ3dhcm0nIDogJ2NvbGQnICk7CgogICAgICAgICRyZXN1bHRzW10gPSBhcnJheV9tZXJnZSgkYmFzZSwgWwogICAgICAgICAgICAnc2NvcmUnICAgPT4gJHNjb3JlLAogICAgICAgICAgICAnc2lnbmFscycgPT4gJHNpZ25hbHMsCiAgICAgICAgICAgICdsZXZlbCcgICA9PiAkbGV2ZWwsCiAgICAgICAgICAgICdwMTEnICAgICA9PiAkcDExLAogICAgICAgIF0pOwogICAgfQoKICAgIHVzb3J0KCAkcmVzdWx0cywgZm4oJGEsICRiKSA9PiAkYlsnc2NvcmUnXSAtICRhWydzY29yZSddICk7CiAgICAkYWxsX3Jlc3VsdHMgPSBhcnJheV9zbGljZSgkcmVzdWx0cywgMCwgNTAwKTsgLy8gc3RvcmUgdXAgdG8gNTAwIGluIGNhY2hlCgogICAgaWYgKCAkdXNlX2NhY2hlICkgewogICAgICAgIHNldF90cmFuc2llbnQoJGNhY2hlX2tleSwgJGFsbF9yZXN1bHRzLCAzMCAqIE1JTlVURV9JTl9TRUNPTkRTKTsKICAgIH0KCiAgICAkb3V0ID0gJHNjb3JlX21pbiA+IDAKICAgICAgICA/IGFycmF5X3ZhbHVlcyggYXJyYXlfZmlsdGVyKCRhbGxfcmVzdWx0cywgZm4oJGwpID0+ICRsWydzY29yZSddID49ICRzY29yZV9taW4pICkKICAgICAgICA6IGFycmF5X3ZhbHVlcygkYWxsX3Jlc3VsdHMpOwogICAgcmV0dXJuIGFycmF5X3NsaWNlKCRvdXQsIDAsICRsaW1pdCk7Cn0KCmZ1bmN0aW9uIHZtMl9zdGFnZV9sYWJlbCggJHN0YXR1c19pZCApIHsKICAgICRtYXAgPSBbCiAgICAgICAgOTQzMDU2NjQgPT4gWyAn8J+UtCcsICdIT1QnLCAgICAgICAndm0yLXRhZy1ob3QnICBdLAogICAgICAgIDk0MzI1MTY3ID0+IFsgJ+KchScsICdDb250cmF0b3UnLCAndm0yLXRhZy1jb252JyBdLAogICAgICAgIDE0MiAgICAgICA9PiBbICfinYwnLCAnUGVyZGlkbycsICAndm0yLXRhZy1sb3N0JyBdLAogICAgICAgIDE0MyAgICAgICA9PiBbICfwn5eRJywgJ0xpeG8nLCAgICAgJ3ZtMi10YWctbG9zdCcgXSwKICAgIF07CiAgICBpZiAoIGlzc2V0KCAkbWFwWyAkc3RhdHVzX2lkIF0gKSApIHsKICAgICAgICBbJGljb24sICRsYWJlbCwgJGNsc10gPSAkbWFwWyAkc3RhdHVzX2lkIF07CiAgICAgICAgcmV0dXJuICI8c3BhbiBjbGFzcz0ndm0yLXRhZyAkY2xzJz4kaWNvbiAkbGFiZWw8L3NwYW4+IjsKICAgIH0KICAgIHJldHVybiAiPHNwYW4gY2xhc3M9J3ZtMi10YWcnPvCfk6UgTGVhZDwvc3Bhbj4iOwp9CgpmdW5jdGlvbiB2bTJfY29udGFjdHNfcGFnZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0YWJsZSA9ICR3cGRiLT5wcmVmaXggLiAndm0yX2NvbnRhY3RzJzsKCiAgICAvLyBBdXRvLXN5bmMgc2UgdGFiZWxhIHZhemlhCiAgICAkdG90YWxfYWxsID0gKGludCkgJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSIpOwogICAgaWYgKCR0b3RhbF9hbGwgPT09IDApIHZtMl9zeW5jX2NvbnRhY3RzKCk7CgogICAgLy8gPT09IFBhcmFtcyA9PT0KICAgICRzZWFyY2ggICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9HRVRbJ3MnXSAgICAgICA/PyAnJyk7CiAgICAkc3RhZ2VfZiAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWydzdGFnZSddICAgPz8gJycpOwogICAgJHNvdXJjZV9mICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsnc291cmNlJ10gID8/ICcnKTsKICAgICR0aXBvX2YgICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9HRVRbJ3RpcG8nXSAgICA/PyAnJyk7CiAgICAkc2NvcmVfZiAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWydzY29yZV9mJ10gPz8gJycpOwogICAgJGRhdGVfcGVyaW9kID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsnZHAnXSAgICAgID8/ICcnKTsKICAgICRkYXRlX2Zyb20gICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9HRVRbJ2RmJ10gICAgICA/PyAnJyk7CiAgICAkZGF0ZV90byAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWydkdCddICAgICAgPz8gJycpOwogICAgJHNvcnQgICAgICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsnc29ydCddICAgID8/ICgkZGF0ZV9wZXJpb2QgPyAnZXZlbnRvJyA6ICdhY3Rpdml0eScpKTsKICAgICRwYWdlZCAgICAgICA9IG1heCgxLCAoaW50KSgkX0dFVFsncGFnZWQnXSAgICAgICAgICA/PyAxKSk7CiAgICAkcGVyX3BhZ2UgICAgPSAyNTsKICAgICRvZmZzZXQgICAgICA9ICgkcGFnZWQgLSAxKSAqICRwZXJfcGFnZTsKCiAgICAvLyA9PT0gQ1NWIEV4cG9ydCA9PT0KICAgIGlmICghZW1wdHkoJF9HRVRbJ2V4cG9ydCddKSAmJiAkX0dFVFsnZXhwb3J0J10gPT09ICdjc3YnICYmIGN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHsKICAgICAgICAvLyB3aWxsIGJ1aWxkIHNhbWUgV0hFUkUgYmVsb3cgdGhlbiBleHBvcnQKICAgIH0KCiAgICAvLyA9PT0gRGF0YXMgZGUgcmVmZXLDqm5jaWEgPT09CiAgICAkdG9kYXkgICAgICA9IHdwX2RhdGUoJ1ktbS1kJyk7CiAgICAkbmV4dDcgICAgICA9IHdwX2RhdGUoJ1ktbS1kJywgc3RydG90aW1lKCcrNyBkYXlzJykpOwogICAgJG5leHQxNSAgICAgPSB3cF9kYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgnKzE1IGRheXMnKSk7CiAgICAkbmV4dDMwICAgICA9IHdwX2RhdGUoJ1ktbS1kJywgc3RydG90aW1lKCcrMzAgZGF5cycpKTsKICAgICR3ZWVrX3N0YXJ0ID0gd3BfZGF0ZSgnWS1tLWQnLCBzdHJ0b3RpbWUoJ21vbmRheSB0aGlzIHdlZWsnKSk7CiAgICAkd2Vla19lbmQgICA9IHdwX2RhdGUoJ1ktbS1kJywgc3RydG90aW1lKCdzdW5kYXkgdGhpcyB3ZWVrJykpOwogICAgJG1vbnRoX3N0YXJ0PSB3cF9kYXRlKCdZLW0tMDEnKTsKICAgICRtb250aF9lbmQgID0gd3BfZGF0ZSgnWS1tLXQnKTsKICAgICRwYXN0NjAgICAgID0gd3BfZGF0ZSgnWS1tLWQnLCBzdHJ0b3RpbWUoJy02MCBkYXlzJykpOwoKICAgIC8vID09PSBXSEVSRSBidWlsZGVyID09PQogICAgJHdoZXJlICA9ICcxPTEnOwogICAgJHBhcmFtcyA9IFtdOwoKICAgIGlmICgkc2VhcmNoKSB7CiAgICAgICAgJGxpa2UgPSAnJScgLiAkd3BkYi0+ZXNjX2xpa2UoJHNlYXJjaCkgLiAnJSc7CiAgICAgICAgJHdoZXJlIC49ICcgQU5EIChjLm5hbWUgTElLRSAlcyBPUiBjLnBob25lIExJS0UgJXMgT1IgYy5lbWFpbCBMSUtFICVzIE9SIGMuZ2FsZXJpYV9hdHJhY2FvIExJS0UgJXMgT1IgYy5jYXJ0X3Byb2R1Y3QgTElLRSAlcyknOwogICAgICAgICRwYXJhbXMgPSBhcnJheV9tZXJnZSgkcGFyYW1zLCBbJGxpa2UsJGxpa2UsJGxpa2UsJGxpa2UsJGxpa2VdKTsKICAgIH0KICAgIGlmICgkc3RhZ2VfZiA9PT0gJ2hvdCcpICAgICAgICAgJHdoZXJlIC49ICcgQU5EIGMua29tbW9fc3RhdHVzX2lkID0gOTQzMDU2NjQnOwogICAgZWxzZWlmICgkc3RhZ2VfZiA9PT0gJ2NvbnYnKSAgICAkd2hlcmUgLj0gJyBBTkQgYy5rb21tb19zdGF0dXNfaWQgPSA5NDMyNTE2Nyc7CiAgICBlbHNlaWYgKCRzdGFnZV9mID09PSAnbG9zdCcpICAgICR3aGVyZSAuPSAnIEFORCBjLmtvbW1vX3N0YXR1c19pZCBJTiAoMTQyLDE0MyknOwogICAgZWxzZWlmICgkc3RhZ2VfZiA9PT0gJ25vZGF0ZScpICAkd2hlcmUgLj0gJyBBTkQgKGMuZGF0YV9ldmVudG8gSVMgTlVMTCBPUiBjLmRhdGFfZXZlbnRvID0gIiIpJzsKCiAgICBpZiAoJHNvdXJjZV9mICYmIGluX2FycmF5KCRzb3VyY2VfZiwgWydrb21tbycsJ2dhbGVyaWEnLCdjYXJyaW5obycsJ3BlZGlkbycsJ3NvZmlhJ10pKSB7CiAgICAgICAgJHdoZXJlIC49ICcgQU5EIGMub3JpZ2VucyBMSUtFICVzJzsKICAgICAgICAkcGFyYW1zW10gPSAnJSInIC4gJHNvdXJjZV9mIC4gJyIlJzsKICAgIH0KICAgIGlmICgkdGlwb19mKSB7ICR3aGVyZSAuPSAnIEFORCBjLnRpcG9fZXZlbnRvID0gJXMnOyAkcGFyYW1zW10gPSAkdGlwb19mOyB9CgogICAgaWYgKCRzY29yZV9mID09PSAnaG90JykgICAgICAgJHdoZXJlIC49ICcgQU5EIGMuc2NvcmUgPj0gNzAnOwogICAgZWxzZWlmICgkc2NvcmVfZiA9PT0gJ3dhcm0nKSAgJHdoZXJlIC49ICcgQU5EIGMuc2NvcmUgPj0gNDAgQU5EIGMuc2NvcmUgPCA3MCc7CiAgICBlbHNlaWYgKCRzY29yZV9mID09PSAnY29sZCcpICAkd2hlcmUgLj0gJyBBTkQgKGMuc2NvcmUgPCA0MCBPUiBjLnNjb3JlID0gMCknOwoKICAgIC8vIERhdGUgcGVyaW9kCiAgICBzd2l0Y2ggKCRkYXRlX3BlcmlvZCkgewogICAgICAgIGNhc2UgJ3dlZWsnOiAgICR3aGVyZSAuPSAnIEFORCBjLmRhdGFfZXZlbnRvID49ICVzIEFORCBjLmRhdGFfZXZlbnRvIDw9ICVzJzsgJHBhcmFtc1tdPSR3ZWVrX3N0YXJ0OyAgJHBhcmFtc1tdPSR3ZWVrX2VuZDsgIGJyZWFrOwogICAgICAgIGNhc2UgJ21vbnRoJzogICR3aGVyZSAuPSAnIEFORCBjLmRhdGFfZXZlbnRvID49ICVzIEFORCBjLmRhdGFfZXZlbnRvIDw9ICVzJzsgJHBhcmFtc1tdPSRtb250aF9zdGFydDsgJHBhcmFtc1tdPSRtb250aF9lbmQ7IGJyZWFrOwogICAgICAgIGNhc2UgJ25leHQxNSc6ICR3aGVyZSAuPSAnIEFORCBjLmRhdGFfZXZlbnRvID49ICVzIEFORCBjLmRhdGFfZXZlbnRvIDw9ICVzJzsgJHBhcmFtc1tdPSR0b2RheTsgICAgICAgJHBhcmFtc1tdPSRuZXh0MTU7ICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ25leHQzMCc6ICR3aGVyZSAuPSAnIEFORCBjLmRhdGFfZXZlbnRvID49ICVzIEFORCBjLmRhdGFfZXZlbnRvIDw9ICVzJzsgJHBhcmFtc1tdPSR0b2RheTsgICAgICAgJHBhcmFtc1tdPSRuZXh0MzA7ICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3VyZ2VudCc6ICR3aGVyZSAuPSAnIEFORCBjLmRhdGFfZXZlbnRvID49ICVzIEFORCBjLmRhdGFfZXZlbnRvIDw9ICVzJzsgJHBhcmFtc1tdPSR0b2RheTsgICAgICAgJHBhcmFtc1tdPSRuZXh0NzsgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3Bhc3QnOiAgICR3aGVyZSAuPSAnIEFORCBjLmRhdGFfZXZlbnRvID49ICVzIEFORCBjLmRhdGFfZXZlbnRvIDwgJXMnOyAgJHBhcmFtc1tdPSRwYXN0NjA7ICAgICAgJHBhcmFtc1tdPSR0b2RheTsgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ25vZGF0ZSc6ICR3aGVyZSAuPSAnIEFORCAoYy5kYXRhX2V2ZW50byBJUyBOVUxMIE9SIGMuZGF0YV9ldmVudG8gPSAiIiknOyBicmVhazsKICAgIH0KICAgIGlmICghJGRhdGVfcGVyaW9kKSB7CiAgICAgICAgaWYgKCRkYXRlX2Zyb20pIHsgJHdoZXJlIC49ICcgQU5EIGMuZGF0YV9ldmVudG8gPj0gJXMnOyAkcGFyYW1zW10gPSAkZGF0ZV9mcm9tOyB9CiAgICAgICAgaWYgKCRkYXRlX3RvKSAgIHsgJHdoZXJlIC49ICcgQU5EIGMuZGF0YV9ldmVudG8gPD0gJXMnOyAkcGFyYW1zW10gPSAkZGF0ZV90bzsgfQogICAgfQoKICAgIC8vID09PSBTb3J0ID09PQogICAgJG9yZGVyX2J5ID0gbWF0Y2goJHNvcnQpIHsKICAgICAgICAnZXZlbnRvJyAgICAgPT4gJ2MuZGF0YV9ldmVudG8gQVNDJywKICAgICAgICAnZXZlbnRvX2QnICAgPT4gJ2MuZGF0YV9ldmVudG8gREVTQycsCiAgICAgICAgJ25vbWUnICAgICAgID0+ICdjLm5hbWUgQVNDJywKICAgICAgICAnbm9tZV9kJyAgICAgPT4gJ2MubmFtZSBERVNDJywKICAgICAgICAnYWN0aXZpdHknICAgPT4gJ0NPQUxFU0NFKGMubGFzdF9hY3Rpdml0eSwgYy5jcmVhdGVkX2F0KSBERVNDJywKICAgICAgICAnYWN0aXZpdHlfYScgPT4gJ0NPQUxFU0NFKGMubGFzdF9hY3Rpdml0eSwgYy5jcmVhdGVkX2F0KSBBU0MnLAogICAgICAgICd3YScgICAgICAgICA9PiAnd2FfY291bnQgREVTQycsCiAgICAgICAgJ3dhX2EnICAgICAgID0+ICd3YV9jb3VudCBBU0MnLAogICAgICAgICdzY29yZScgICAgICA9PiAnYy5zY29yZSBERVNDJywKICAgICAgICBkZWZhdWx0ICAgICAgPT4gJ0NPQUxFU0NFKGMubGFzdF9hY3Rpdml0eSwgYy5jcmVhdGVkX2F0KSBERVNDJywKICAgIH07CgogICAgLy8gPT09IFF1ZXJpZXMgPT09CiAgICAkYmFzZV9zcWwgID0gIlNFTEVDVCBjLiosCiAgICAgICAgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtX3dhcm11cF9sb2cgdyBXSEVSRSB3LmxlYWRfaWQgPSBjLmtvbW1vX2xlYWRfaWQpIGFzIHdhX2NvdW50CiAgICAgICAgRlJPTSAkdGFibGUgYyBXSEVSRSAkd2hlcmUgT1JERVIgQlkgJG9yZGVyX2J5IjsKICAgICRjb3VudF9zcWwgPSAiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIGMgV0hFUkUgJHdoZXJlIjsKCiAgICBpZiAoJHBhcmFtcykgewogICAgICAgICR0b3RhbCAgICA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKCRjb3VudF9zcWwsIC4uLiRwYXJhbXMpKTsKICAgICAgICAkY29udGFjdHMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoJHdwZGItPnByZXBhcmUoIiRiYXNlX3NxbCBMSU1JVCAlZCBPRkZTRVQgJWQiLCAuLi5hcnJheV9tZXJnZSgkcGFyYW1zLCBbJHBlcl9wYWdlLCAkb2Zmc2V0XSkpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHRvdGFsICAgID0gKGludCkgJHdwZGItPmdldF92YXIoJGNvdW50X3NxbCk7CiAgICAgICAgJGNvbnRhY3RzID0gJHdwZGItPmdldF9yZXN1bHRzKCR3cGRiLT5wcmVwYXJlKCIkYmFzZV9zcWwgTElNSVQgJWQgT0ZGU0VUICVkIiwgJHBlcl9wYWdlLCAkb2Zmc2V0KSk7CiAgICB9CgogICAgLy8gPT09IENTViBFeHBvcnQgKGFmdGVyIFdIRVJFIGlzIGJ1aWx0KSA9PT0KICAgIGlmICghZW1wdHkoJF9HRVRbJ2V4cG9ydCddKSAmJiAkX0dFVFsnZXhwb3J0J10gPT09ICdjc3YnICYmIGN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHsKICAgICAgICAkYWxsX2NzdiA9ICRwYXJhbXMKICAgICAgICAgICAgPyAkd3BkYi0+Z2V0X3Jlc3VsdHMoJHdwZGItPnByZXBhcmUoIiRiYXNlX3NxbCBMSU1JVCA1MDAwIiwgLi4uJHBhcmFtcykpCiAgICAgICAgICAgIDogJHdwZGItPmdldF9yZXN1bHRzKCR3cGRiLT5wcmVwYXJlKCIkYmFzZV9zcWwgTElNSVQgNTAwMCIsIDUwMDAsIDApKTsKICAgICAgICBvYl9lbmRfY2xlYW4oKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9jc3Y7IGNoYXJzZXQ9VVRGLTgnKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJjb250YXRvcy12aXZhbWFpcy0nIC4gZGF0ZSgnWS1tLWQnKSAuICcuY3N2IicpOwogICAgICAgIGVjaG8gIlx4RUZceEJCXHhCRiI7IC8vIEJPTSBVVEYtOAogICAgICAgICRvdXQgPSBmb3BlbigncGhwOi8vb3V0cHV0JywgJ3cnKTsKICAgICAgICBmcHV0Y3N2KCRvdXQsIFsnTm9tZScsJ1RlbGVmb25lJywnRW1haWwnLCdUaXBvIEV2ZW50bycsJ0RhdGEgRXZlbnRvJywnU2NvcmUnLCdPcmlnZW0nLCdFc3TDoWdpbycsJ0F0cmHDp8OjbycsJ0NhbmFsICh1dG1fc291cmNlKScsJ0NhbXBhbmhhICh1dG1fY2FtcGFpZ24pJywnw5psdGltYSBBdGl2aWRhZGUnXSwgJzsnKTsKICAgICAgICBmb3JlYWNoICgkYWxsX2NzdiBhcyAkYykgewogICAgICAgICAgICAkb3JpZ2VucyA9IGltcGxvZGUoJywnLCBqc29uX2RlY29kZSgkYy0+b3JpZ2VucywgdHJ1ZSkgPzogW10pOwogICAgICAgICAgICBmcHV0Y3N2KCRvdXQsIFsKICAgICAgICAgICAgICAgICRjLT5uYW1lLCAkYy0+cGhvbmUsICRjLT5lbWFpbCwgJGMtPnRpcG9fZXZlbnRvLCAkYy0+ZGF0YV9ldmVudG8sCiAgICAgICAgICAgICAgICAkYy0+c2NvcmUsICRvcmlnZW5zLAogICAgICAgICAgICAgICAgKCRjLT5rb21tb19zdGF0dXNfaWQgPyB2bTJfc3RhZ2VfbGFiZWwoJGMtPmtvbW1vX3N0YXR1c19pZCkgOiAnTGVhZCcpLAogICAgICAgICAgICAgICAgKCRjLT5nYWxlcmlhX2F0cmFjYW8gPzogJGMtPmNhcnRfcHJvZHVjdCksCiAgICAgICAgICAgICAgICAoJGMtPnV0bV9zb3VyY2UgPz8gJycpLCAoJGMtPnV0bV9jYW1wYWlnbiA/PyAnJyksIC8vIFt2MS41Ljc2XQogICAgICAgICAgICAgICAgJGMtPmxhc3RfYWN0aXZpdHksCiAgICAgICAgICAgIF0sICc7Jyk7CiAgICAgICAgfQogICAgICAgIGZjbG9zZSgkb3V0KTsKICAgICAgICBleGl0OwogICAgfQoKICAgIC8vID09PSBLUEkgY291bnRzID09PQogICAgJGNudF9ob3QgICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgc2NvcmUgPj0gNzAiKTsKICAgICRjbnRfdXJnZW50ID0gKGludCkkd3BkYi0+Z2V0X3Zhcigkd3BkYi0+cHJlcGFyZSgiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIGRhdGFfZXZlbnRvID49ICVzIEFORCBkYXRhX2V2ZW50byA8PSAlcyIsICR0b2RheSwgJG5leHQ3KSk7CiAgICAkY250X25leHQzMCA9IChpbnQpJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBkYXRhX2V2ZW50byA+ICVzIEFORCBkYXRhX2V2ZW50byA8PSAlcyIsICR0b2RheSwgJG5leHQzMCkpOwogICAgJGNudF9ub2RhdGUgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgZGF0YV9ldmVudG8gSVMgTlVMTCBPUiBkYXRhX2V2ZW50byA9ICcnIik7CiAgICAkY250X3Bhc3QgICA9IChpbnQpJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBkYXRhX2V2ZW50byA+PSAlcyBBTkQgZGF0YV9ldmVudG8gPCAlcyIsICRwYXN0NjAsICR0b2RheSkpOwoKICAgIC8vID09PSBTb3VyY2UgY291bnRzID09PQogICAgJGNudF9rb21tbyAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIG9yaWdlbnMgTElLRSAnJVwia29tbW9cIiUnIik7CiAgICAkY250X2dhbGVyaWEgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIG9yaWdlbnMgTElLRSAnJVwiZ2FsZXJpYVwiJSciKTsKICAgICRjbnRfY2FycmluaG8gPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgb3JpZ2VucyBMSUtFICclXCJjYXJyaW5ob1wiJSciKTsKICAgICRjbnRfcGVkaWRvICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgb3JpZ2VucyBMSUtFICclXCJwZWRpZG9cIiUnIik7CiAgICAkY250X3NvZmlhICAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIG9yaWdlbnMgTElLRSAnJVwic29maWFcIiUnIik7CgogICAgLy8gPT09IFRpcG9zIGRpc3RpbnRvcyA9PT0KICAgICR0aXBvcyA9ICR3cGRiLT5nZXRfY29sKCJTRUxFQ1QgRElTVElOQ1QgdGlwb19ldmVudG8gRlJPTSAkdGFibGUgV0hFUkUgdGlwb19ldmVudG8gIT0gJycgT1JERVIgQlkgdGlwb19ldmVudG8gQVNDIExJTUlUIDQwIik7CgogICAgJGxhc3Rfc3luYyAgID0gZ2V0X29wdGlvbigndm0yX2NvbnRhY3RzX2xhc3Rfc3luYycsICcnKTsKICAgICR0b3RhbF9wYWdlcyA9IG1heCgxLCBjZWlsKCR0b3RhbCAvICRwZXJfcGFnZSkpOwogICAgJG5vbmNlX3ZhbCAgID0gd3BfY3JlYXRlX25vbmNlKCd2bTJfY29udGFjdF9kZXRhaWwnKTsKICAgICRyZXN0X25vbmNlICA9IHdwX2NyZWF0ZV9ub25jZSgnd3BfcmVzdCcpOwoKICAgIC8vIFVSTCBoZWxwZXJzCiAgICAkYWxsX2ZpbHRlcnMgPSBhcnJheV9maWx0ZXIoWydzJz0+JHNlYXJjaCwnc3RhZ2UnPT4kc3RhZ2VfZiwnc291cmNlJz0+JHNvdXJjZV9mLCd0aXBvJz0+JHRpcG9fZiwnc2NvcmVfZic9PiRzY29yZV9mLCdkcCc9PiRkYXRlX3BlcmlvZCwnZGYnPT4kZGF0ZV9mcm9tLCdkdCc9PiRkYXRlX3RvLCdzb3J0Jz0+JHNvcnRdKTsKICAgICRiYXNlX3VybCAgICA9IGFkZF9xdWVyeV9hcmcoYXJyYXlfbWVyZ2UoWydwYWdlJz0+J3ZtMi1jb250YWN0cycsJ3BhZ2VkJz0+JyddLCAkYWxsX2ZpbHRlcnMpLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKTsKICAgICRleHBvcnRfdXJsICA9IGFkZF9xdWVyeV9hcmcoYXJyYXlfbWVyZ2UoWydwYWdlJz0+J3ZtMi1jb250YWN0cycsJ2V4cG9ydCc9Pidjc3YnXSwgJGFsbF9maWx0ZXJzKSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSk7CiAgICAkY2xlYXJfdXJsICAgPSBhZG1pbl91cmwoJ2FkbWluLnBocD9wYWdlPXZtMi1jb250YWN0cycpOwoKICAgICRfc2YgPSBhcnJheV9maWx0ZXIoWydzJz0+JHNlYXJjaCwnc291cmNlJz0+JHNvdXJjZV9mLCd0aXBvJz0+JHRpcG9fZiwnc2NvcmVfZic9PiRzY29yZV9mLCdkcCc9PiRkYXRlX3BlcmlvZCwnZGYnPT4kZGF0ZV9mcm9tLCdkdCc9PiRkYXRlX3RvXSk7CiAgICAkX3N1ID0gZnVuY3Rpb24oc3RyaW5nICRrZXkpIHVzZSAoJF9zZik6IHN0cmluZyB7CiAgICAgICAgJHAgPSBhcnJheV9tZXJnZSgkX3NmLCBbJ3BhZ2UnPT4ndm0yLWNvbnRhY3RzJywnc29ydCc9PiRrZXldKTsKICAgICAgICByZXR1cm4gZXNjX3VybChhZG1pbl91cmwoJ2FkbWluLnBocCcpLic/Jy5odHRwX2J1aWxkX3F1ZXJ5KCRwKSk7CiAgICB9OwogICAgJF9hcnJvdyA9IGZ1bmN0aW9uKHN0cmluZyAkYSwgc3RyaW5nICRkKSB1c2UgKCRzb3J0KTogc3RyaW5nIHsKICAgICAgICBpZiAoJHNvcnQ9PT0kYSkgcmV0dXJuICcgPHNwYW4gc3R5bGU9ImNvbG9yOiMwMDczYWEiPuKGkTwvc3Bhbj4nOwogICAgICAgIGlmICgkc29ydD09PSRkKSByZXR1cm4gJyA8c3BhbiBzdHlsZT0iY29sb3I6IzAwNzNhYSI+4oaTPC9zcGFuPic7CiAgICAgICAgcmV0dXJuICcnOwogICAgfTsKCiAgICAvLyBBY3RpdmUgZmlsdGVyIGxhYmVscwogICAgJGFjdGl2ZV9sYWJlbHMgPSBbXTsKICAgIGlmICgkc2VhcmNoKSAgICAgICRhY3RpdmVfbGFiZWxzW10gPSBbJ/CflI0gIicgLiBlc2NfaHRtbCgkc2VhcmNoKSAuICciJywgJ3MnXTsKICAgIGlmICgkc3RhZ2VfZikgICAgICRhY3RpdmVfbGFiZWxzW10gPSBbJ/Cfj7fvuI8gJyAuIFsnaG90Jz0+J0hPVCcsJ2NvbnYnPT4nQ29udHJhdG91JywnbG9zdCc9PidQZXJkaWRvJywnbm9kYXRlJz0+J1NlbSBkYXRhJ11bJHN0YWdlX2ZdID8/ICRzdGFnZV9mLCAnc3RhZ2UnXTsKICAgIGlmICgkc291cmNlX2YpICAgICRhY3RpdmVfbGFiZWxzW10gPSBbJ/Cfk4wgJyAuIHVjZmlyc3QoJHNvdXJjZV9mKSwgJ3NvdXJjZSddOwogICAgaWYgKCR0aXBvX2YpICAgICAgJGFjdGl2ZV9sYWJlbHNbXSA9IFsn8J+OiSAnIC4gZXNjX2h0bWwoJHRpcG9fZiksICd0aXBvJ107CiAgICBpZiAoJHNjb3JlX2YpICAgICAkYWN0aXZlX2xhYmVsc1tdID0gWyfimqEgU2NvcmUgJyAuIHVjZmlyc3QoJHNjb3JlX2YpLCAnc2NvcmVfZiddOwogICAgJGRwX2xhYmVscyA9IFsnd2Vlayc9PidFc3RhIHNlbWFuYScsJ21vbnRoJz0+J0VzdGUgbcOqcycsJ25leHQxNSc9PidQcsOzeC4gMTVkJywnbmV4dDMwJz0+J1Byw7N4LiAzMGQnLCd1cmdlbnQnPT4n8J+UpSBVcmdlbnRlJywncGFzdCc9PidKw6EgcGFzc291Jywnbm9kYXRlJz0+J1NlbSBkYXRhJ107CiAgICBpZiAoJGRhdGVfcGVyaW9kKSAkYWN0aXZlX2xhYmVsc1tdID0gWyfwn5OFICcgLiAoJGRwX2xhYmVsc1skZGF0ZV9wZXJpb2RdID8/ICRkYXRlX3BlcmlvZCksICdkcCddOwogICAgaWYgKCRkYXRlX2Zyb20pICAgJGFjdGl2ZV9sYWJlbHNbXSA9IFsn8J+ThSBEZSAnIC4gZXNjX2h0bWwoJGRhdGVfZnJvbSksICdkZiddOwogICAgaWYgKCRkYXRlX3RvKSAgICAgJGFjdGl2ZV9sYWJlbHNbXSA9IFsn8J+ThSBBdMOpICcgLiBlc2NfaHRtbCgkZGF0ZV90byksICdkdCddOwoKICAgIC8vIFJlbGF0aXZlIGV2ZW50IGRhdGUgYmFkZ2UgaGVscGVyCiAgICAkZXZfYmFkZ2UgPSBmdW5jdGlvbihzdHJpbmcgJGV2X2RhdGUpIHVzZSAoJHRvZGF5KTogc3RyaW5nIHsKICAgICAgICBpZiAoISRldl9kYXRlKSByZXR1cm4gJzxzcGFuIHN0eWxlPSJjb2xvcjojY2NjO2ZvbnQtc2l6ZToxMXB4Ij7igJQ8L3NwYW4+JzsKICAgICAgICAkdHMgICAgICA9IHN0cnRvdGltZSgkZXZfZGF0ZSk7CiAgICAgICAgaWYgKCEkdHMpIHJldHVybiAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4Ij4nLmVzY19odG1sKCRldl9kYXRlKS4nPC9zcGFuPic7CiAgICAgICAgJGZtdCAgICAgPSBkYXRlKCdkL20vWScsICR0cyk7CiAgICAgICAgJGRpZmYgICAgPSAoaW50KSgoJHRzIC0gc3RydG90aW1lKCR0b2RheSkpIC8gODY0MDApOwogICAgICAgIGlmICgkZGlmZiA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBzdHlsZT0nZm9udC13ZWlnaHQ6NzAwO2NvbG9yOiNkNjM2MzgnPvCflLQgSE9KRTwvc3Bhbj4iOwogICAgICAgIGlmICgkZGlmZiA+IDAgJiYgJGRpZmYgPD0gNykKICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBzdHlsZT0nY29sb3I6I2Q2MzYzODtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHgnPvCflKUgJGZtdDwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiNkNjM2MzgnPmVtICRkaWZmIGRpYSIuKCRkaWZmPjE/J3MnOicnKS4iPC9zcGFuPiI7CiAgICAgICAgaWYgKCRkaWZmID4gNyAmJiAkZGlmZiA8PSAzMCkKICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBzdHlsZT0nY29sb3I6I2M3NzcwMDtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHgnPuKaoSAkZm10PC9zcGFuPjxicj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwcHg7Y29sb3I6I2M3NzcwMCc+ZW0gJGRpZmYgZGlhczwvc3Bhbj4iOwogICAgICAgIGlmICgkZGlmZiA+IDMwKQogICAgICAgICAgICByZXR1cm4gIjxzcGFuIHN0eWxlPSdjb2xvcjojMjI3MWIxO2ZvbnQtc2l6ZToxMnB4Jz4kZm10PC9zcGFuPjxicj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwcHg7Y29sb3I6I2JiYic+ZW0gJGRpZmYgZGlhczwvc3Bhbj4iOwogICAgICAgIC8vIFBhc3QKICAgICAgICAkYWdvID0gYWJzKCRkaWZmKTsKICAgICAgICBpZiAoJGFnbyA8PSA2MCkKICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBzdHlsZT0nY29sb3I6Izg4ODtmb250LXNpemU6MTJweCc+JGZtdDwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiNhYWEnPnBhc3NvdSB7JGFnb31kPC9zcGFuPiI7CiAgICAgICAgcmV0dXJuICI8c3BhbiBzdHlsZT0nY29sb3I6I2NjYztmb250LXNpemU6MTFweCc+JGZtdDwvc3Bhbj4iOwogICAgfTsKICAgID8+CiAgICA8ZGl2IGNsYXNzPSJ3cmFwIHZtMi13cmFwIj4KICAgIDxzdHlsZT4KICAgIC52bTItd3JhcHttYXgtd2lkdGg6MTM2MHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoyMHB4IDB9CiAgICAudm0yLXBhZ2UtaGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxNHB4O2ZsZXgtd3JhcDp3cmFwfQogICAgLnZtMi1wYWdlLWhlYWRlciBoMXttYXJnaW46MDtmb250LXNpemU6MjJweDtmb250LXdlaWdodDo3MDB9CiAgICAvKiBLUEkgY2FyZHMgKi8KICAgIC52bTJjLWtwaXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpO2dhcDoxMHB4O21hcmdpbi1ib3R0b206MTRweH0KICAgIEBtZWRpYShtaW4td2lkdGg6NjAwcHgpey52bTJjLWtwaXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgzLDFmcil9fQogICAgQG1lZGlhKG1pbi13aWR0aDo5MDBweCl7LnZtMmMta3Bpc3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDUsMWZyKX19CiAgICAudm0yYy1rcGl7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE0cHggMTZweDtib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLC4wNyk7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2JvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjouMTVzfQogICAgLnZtMmMta3BpOmhvdmVye2JveC1zaGFkb3c6MCAzcHggMTBweCByZ2JhKDAsMCwwLC4xMik7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTFweCl9CiAgICAudm0yYy1rcGkuYWN0aXZle2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3J9CiAgICAudm0yYy1rcGkgLmtwaS12YWx7Zm9udC1zaXplOjI2cHg7Zm9udC13ZWlnaHQ6ODAwO2xpbmUtaGVpZ2h0OjF9CiAgICAudm0yYy1rcGkgLmtwaS1sYmx7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouNHB4O29wYWNpdHk6Ljc1fQogICAgLmtwaS1ob3R7Y29sb3I6I2Q2MzYzOH0ua3BpLXVyZ2VudHtjb2xvcjojZDYzNjM4fS5rcGktbmV4dDMwe2NvbG9yOiNjNzc3MDB9LmtwaS1ub2RhdGV7Y29sb3I6IzU3NjA2YX0ua3BpLXBhc3R7Y29sb3I6Izg4OH0KICAgIC8qIFNvdXJjZSBwaWxscyAqLwogICAgLnZtMi1zb3VyY2UtYmFye2Rpc3BsYXk6ZmxleDtnYXA6N3B4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1ib3R0b206MTBweH0KICAgIC52bTItc291cmNlLWJ0bntwYWRkaW5nOjVweCAxNHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ym9yZGVyOjJweCBzb2xpZCB0cmFuc3BhcmVudDt0cmFuc2l0aW9uOi4xNXM7d2hpdGUtc3BhY2U6bm93cmFwfQogICAgLnZtMi1zb3VyY2UtYnRuLmFsbHtiYWNrZ3JvdW5kOiNmMGY0ZmY7Y29sb3I6IzIyNzFiMTtib3JkZXItY29sb3I6I2M4ZDhmZn0KICAgIC52bTItc291cmNlLWJ0bi5rb21tb3tiYWNrZ3JvdW5kOiNmZmYwZjA7Y29sb3I6I2Q2MzYzODtib3JkZXItY29sb3I6I2ZmYzhjOH0KICAgIC52bTItc291cmNlLWJ0bi5nYWxlcmlhe2JhY2tncm91bmQ6I2YwZThmZjtjb2xvcjojNmIyMWE4O2JvcmRlci1jb2xvcjojZDliM2ZmfQogICAgLnZtMi1zb3VyY2UtYnRuLmNhcnJpbmhve2JhY2tncm91bmQ6I2ZmZjhlNztjb2xvcjojYzc3NzAwO2JvcmRlci1jb2xvcjojZmZkOTdhfQogICAgLnZtMi1zb3VyY2UtYnRuLnBlZGlkb3tiYWNrZ3JvdW5kOiNlOGY1ZTk7Y29sb3I6IzJlN2QzMjtib3JkZXItY29sb3I6I2IyZGZkYn0KICAgIC52bTItc291cmNlLWJ0bi5zb2ZpYXtiYWNrZ3JvdW5kOiNmZGYwZmY7Y29sb3I6IzdjM2FlZDtib3JkZXItY29sb3I6I2Q4YjRmZX0KICAgIC52bTItc291cmNlLWJ0bi5hY3RpdmV7Zm9udC13ZWlnaHQ6ODAwO2JveC1zaGFkb3c6MCAxcHggNnB4IHJnYmEoMCwwLDAsLjEzKX0KICAgIC8qIEZpbHRlciBiYXIgKi8KICAgIC52bTJjLWZpbHRlci1iYXJ7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE0cHggMTZweDtib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLC4wNyk7bWFyZ2luLWJvdHRvbToxMHB4fQogICAgLnZtMmMtZmlsdGVyLXJvd3tkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpmbGV4LWVuZDttYXJnaW4tYm90dG9tOjEwcHh9CiAgICAudm0yYy1maWx0ZXItcm93Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfQogICAgLnZtMmMtZmllbGR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4fQogICAgLnZtMmMtZmllbGQgbGFiZWx7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjojODg4O2xldHRlci1zcGFjaW5nOi40cHh9CiAgICAudm0yYy1maWVsZCBpbnB1dCwudm0yYy1maWVsZCBzZWxlY3R7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMGQ3ZGU7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7YmFja2dyb3VuZDojZmZmfQogICAgLnZtMmMtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hde3dpZHRoOjIwMHB4fQogICAgLnZtMmMtZmllbGQgc2VsZWN0e21pbi13aWR0aDoxNDBweH0KICAgIC8qIERhdGUgcGVyaW9kIHBpbGxzICovCiAgICAudm0yYy1kcC1waWxsc3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXJ9CiAgICAudm0yYy1kcC1waWxse3BhZGRpbmc6NXB4IDEycHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXI6MS41cHggc29saWQgI2QwZDdkZTtjb2xvcjojNTc2MDZhO2JhY2tncm91bmQ6I2Y2ZjhmYTt3aGl0ZS1zcGFjZTpub3dyYXA7dHJhbnNpdGlvbjouMTJzfQogICAgLnZtMmMtZHAtcGlsbDpob3ZlcntiYWNrZ3JvdW5kOiNlOGVhZWR9CiAgICAudm0yYy1kcC1waWxsLmFjdGl2ZXtiYWNrZ3JvdW5kOiMyMjcxYjE7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6IzIyNzFiMX0KICAgIC52bTJjLWRwLXBpbGwudXJnZW50e2JvcmRlci1jb2xvcjojZmZjOGM4O2NvbG9yOiNkNjM2Mzg7YmFja2dyb3VuZDojZmZmMGYwfQogICAgLnZtMmMtZHAtcGlsbC51cmdlbnQuYWN0aXZle2JhY2tncm91bmQ6I2Q2MzYzODtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZDYzNjM4fQogICAgLyogQWN0aXZlIGZpbHRlciBjaGlwcyAqLwogICAgLnZtMmMtYWN0aXZlLWZpbHRlcnN7ZGlzcGxheTpmbGV4O2dhcDo2cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLWJvdHRvbToxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0KICAgIC52bTJjLWNoaXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweDtwYWRkaW5nOjNweCAxMHB4O2JhY2tncm91bmQ6I2U4ZjBmZTtjb2xvcjojMWE1NmRiO2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDB9CiAgICAudm0yYy1jaGlwIGF7Y29sb3I6IzFhNTZkYjt0ZXh0LWRlY29yYXRpb246bm9uZTttYXJnaW4tbGVmdDoycHg7Zm9udC13ZWlnaHQ6NzAwfQogICAgLyogVGFibGUgKi8KICAgIC52bTItY29udGFjdHMtdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDAsMCwuMDcpfQogICAgLnZtMi1jb250YWN0cy10YWJsZSB0aHtiYWNrZ3JvdW5kOiNmNmY4ZmE7cGFkZGluZzoxMHB4IDEycHg7dGV4dC1hbGlnbjpsZWZ0O2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM1NzYwNmE7Zm9udC13ZWlnaHQ6NzAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlOGVhZWQ7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouM3B4fQogICAgLnZtMi1jb250YWN0cy10YWJsZSB0ZHtwYWRkaW5nOjEwcHggMTJweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjBmMGYwO2ZvbnQtc2l6ZToxM3B4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KICAgIC52bTItY29udGFjdHMtdGFibGUgdHI6bGFzdC1jaGlsZCB0ZHtib3JkZXItYm90dG9tOm5vbmV9CiAgICAudm0yLWNvbnRhY3RzLXRhYmxlIHRyOmhvdmVyIHRke2JhY2tncm91bmQ6I2Y5ZmFmYjtjdXJzb3I6cG9pbnRlcn0KICAgIC52bTItbmFtZXtmb250LXdlaWdodDo2MDA7Y29sb3I6IzFkMjMyNztmb250LXNpemU6MTNweH0KICAgIC52bTItcGhvbmV7Y29sb3I6IzU3NjA2YTtmb250LXNpemU6MTFweH0KICAgIC52bTItdGFne2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDdweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZjBmNGZmO2NvbG9yOiMyMjcxYjF9CiAgICAudm0yLXRhZy1ob3R7YmFja2dyb3VuZDojZmZmMGYwO2NvbG9yOiNkNjM2Mzh9CiAgICAudm0yLXRhZy1jb252e2JhY2tncm91bmQ6I2U4ZjVlOTtjb2xvcjojMmU3ZDMyfQogICAgLnZtMi10YWctbG9zdHtiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6Izg4OH0KICAgIC52bTItb3JpZ2luLWJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDZweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo3MDA7bWFyZ2luOjFweH0KICAgIC5vYi1rb21tb3tiYWNrZ3JvdW5kOiNmZmYwZjA7Y29sb3I6I2Q2MzYzOH0ub2ItZ2FsZXJpYXtiYWNrZ3JvdW5kOiNmMGU4ZmY7Y29sb3I6IzZiMjFhOH0KICAgIC5vYi1jYXJyaW5ob3tiYWNrZ3JvdW5kOiNmZmY4ZTc7Y29sb3I6I2M3NzcwMH0ub2ItcGVkaWRve2JhY2tncm91bmQ6I2U4ZjVlOTtjb2xvcjojMmU3ZDMyfS5vYi1zb2ZpYXtiYWNrZ3JvdW5kOiNmZGYwZmY7Y29sb3I6IzdjM2FlZH0KICAgIC52bTItYWN0aW9ucyBhe2NvbG9yOiMyMjcxYjE7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjEzcHg7bWFyZ2luLXJpZ2h0OjRweH0KICAgIC52bTItYWN0aW9ucyBhOmhvdmVye29wYWNpdHk6Ljd9CiAgICAudm0yLWNvdW50LWJhZGdle2JhY2tncm91bmQ6I2VlZjJmZjtjb2xvcjojMjI3MWIxO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEycHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwfQogICAgLnZtMmMtc2NvcmUtaG90e2JhY2tncm91bmQ6I2ZmZjBmMDtjb2xvcjojZDYzNjM4O3BhZGRpbmc6MnB4IDdweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDB9CiAgICAudm0yYy1zY29yZS13YXJte2JhY2tncm91bmQ6I2ZmZjhlNztjb2xvcjojYzc3NzAwO3BhZGRpbmc6MnB4IDdweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDB9CiAgICAudm0yYy1zY29yZS1jb2xke2JhY2tncm91bmQ6I2YwZjRmZjtjb2xvcjojMjI3MWIxO3BhZGRpbmc6MnB4IDdweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDB9CiAgICAudm0yYy10aXBve2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDdweDtiYWNrZ3JvdW5kOiNmMGZkZjQ7Y29sb3I6IzE2YTM0YTtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDB9CiAgICAudm0yLXBhZ2luYXRpb257ZGlzcGxheTpmbGV4O2dhcDo2cHg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW4tdG9wOjE2cHg7ZmxleC13cmFwOndyYXB9CiAgICAudm0yLXBhZ2luYXRpb24gYSwudm0yLXBhZ2luYXRpb24gc3BhbntwYWRkaW5nOjVweCAxMXB4O2JvcmRlcjoxcHggc29saWQgI2QwZDdkZTtib3JkZXItcmFkaXVzOjVweDtmb250LXNpemU6MTNweDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMjI3MWIxfQogICAgLnZtMi1wYWdpbmF0aW9uIHNwYW4uY3VycmVudHtiYWNrZ3JvdW5kOiMyMjcxYjE7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6IzIyNzFiMX0KICAgIC52bTItZW1wdHktc3RhdGV7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo2MHB4IDIwcHg7Y29sb3I6IzU3NjA2YTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMHB4fQogICAgLnZtMi1lbXB0eS1zdGF0ZSAudm0yLWVtcHR5LWljb257Zm9udC1zaXplOjQ4cHg7bWFyZ2luLWJvdHRvbToxMnB4fQogICAgLyogTW9kYWwgKi8KICAgIC52bTItbW9kYWwtb3ZlcmxheXtkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjQ1KTt6LWluZGV4Ojk5OTk5fQogICAgLnZtMi1tb2RhbC1vdmVybGF5Lm9wZW57ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfQogICAgLnZtMi1tb2RhbC1wYW5lbHt3aWR0aDo1MjBweDttYXgtd2lkdGg6MTAwdnc7aGVpZ2h0OjEwMHZoO2JhY2tncm91bmQ6I2ZmZjtvdmVyZmxvdy15OmF1dG87Ym94LXNoYWRvdzotNHB4IDAgMjRweCByZ2JhKDAsMCwwLC4xOCk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0KICAgIC52bTItbW9kYWwtaGVhZGVye3BhZGRpbmc6MjBweCAyNHB4IDE2cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U4ZWFlZDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnN0aWNreTt0b3A6MDtiYWNrZ3JvdW5kOiNmZmY7ei1pbmRleDoxfQogICAgLnZtMi1tb2RhbC1ib2R5e3BhZGRpbmc6MjBweCAyNHB4O2ZsZXg6MX0KICAgIC52bTItbW9kYWwtY2xvc2V7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToyMnB4O2N1cnNvcjpwb2ludGVyO2NvbG9yOiM1NzYwNmE7bGluZS1oZWlnaHQ6MX0KICAgIC52bTItbW9kYWwtYWN0aW9uc3twYWRkaW5nOjE2cHggMjRweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZThlYWVkO2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwfQogICAgLnZtMi1tb2RhbC1hY3Rpb25zIGF7cGFkZGluZzo4cHggMTZweDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo2MDB9CiAgICAudm0yLWJ0bi13YXtiYWNrZ3JvdW5kOiMyNUQzNjY7Y29sb3I6I2ZmZn0KICAgIC52bTItYnRuLWtvbW1ve2JhY2tncm91bmQ6IzRhOTBlMjtjb2xvcjojZmZmfQogICAgLnZtMi1idG4tc217cGFkZGluZzo3cHggMTRweDtiYWNrZ3JvdW5kOiMyMjcxYjE7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTNweDt0ZXh0LWRlY29yYXRpb246bm9uZTtkaXNwbGF5OmlubGluZS1ibG9ja30KICAgICN2bTJTeW5jQnRuLnN5bmNpbmd7b3BhY2l0eTouNjtwb2ludGVyLWV2ZW50czpub25lfQogICAgLnZtMmMtZGF0ZS1yYW5nZXtkaXNwbGF5Om5vbmU7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LWVuZDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tdG9wOjhweH0KICAgIC52bTJjLWRhdGUtcmFuZ2Uuc2hvd3tkaXNwbGF5OmZsZXh9CiAgICBAbWVkaWEobWF4LXdpZHRoOjc2OHB4KXsKICAgICAgICAudm0yLWNvbnRhY3RzLXRhYmxle2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3cteDphdXRvfQogICAgICAgIC52bTItbW9kYWwtcGFuZWx7d2lkdGg6MTAwdnd9CiAgICAgICAgLnZtMmMtZmllbGQgaW5wdXRbdHlwZT1zZWFyY2hde3dpZHRoOjEwMCV9CiAgICAgICAgLnZtMi1jb250YWN0cy10YWJsZSB0aDpudGgtY2hpbGQoNiksLnZtMi1jb250YWN0cy10YWJsZSB0ZDpudGgtY2hpbGQoNiksCiAgICAgICAgLnZtMi1jb250YWN0cy10YWJsZSB0aDpudGgtY2hpbGQoOCksLnZtMi1jb250YWN0cy10YWJsZSB0ZDpudGgtY2hpbGQoOCl7ZGlzcGxheTpub25lfQogICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIEhlYWRlciAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1wYWdlLWhlYWRlciI+CiAgICAgICAgPGgxPvCfkaUgQ29udGF0b3M8L2gxPgogICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItY291bnQtYmFkZ2UiPjw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkdG90YWxfYWxsKTsgPz4gdW5pZmljYWRvczwvc3Bhbj4KICAgICAgICA8P3BocCBpZiAoJGxhc3Rfc3luYyk6ID8+CiAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4ODgiPlN5bmM6IDw/cGhwIGVjaG8gdm0yX2xvY2FsX2RhdGUoJ2QvbSBIOmknLCAkbGFzdF9zeW5jKTsgPz48L3NwYW4+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6YXV0bztkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcCI+CiAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkZXhwb3J0X3VybCk7ID8+IiBjbGFzcz0idm0yLWJ0bi1zbSIgc3R5bGU9ImJhY2tncm91bmQ6IzE2YTM0YSIgdGl0bGU9IkV4cG9ydGFyIGNvbnRhdG9zIGZpbHRyYWRvcyI+8J+TpSBDU1Y8L2E+CiAgICAgICAgICAgIDxidXR0b24gaWQ9InZtMlN5bmNCdG4iIHN0eWxlPSJwYWRkaW5nOjdweCAxNnB4O2JhY2tncm91bmQ6IzBkOTQ4ODtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NnB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+CiAgICAgICAgICAgICAgICDwn5SEIFN5bmMKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tIEtQSSBDYXJkcyAtLT4KICAgIDxkaXYgY2xhc3M9InZtMmMta3BpcyI+CiAgICAgICAgPD9waHAKICAgICAgICAka3BpcyA9IFsKICAgICAgICAgICAgWyfwn5SlJywnSE9UJywiY29sb3I6I2Q2MzYzOCIsJ2twaS1ob3QnLCdzY29yZV9mJywnaG90JywkY250X2hvdCwnTGVhZHMgZW5nYWphZG9zJ10sCiAgICAgICAgICAgIFsn4pqhJywnVXJnZW50ZScsImNvbG9yOiNkNjM2MzgiLCdrcGktdXJnZW50JywnZHAnLCd1cmdlbnQnLCRjbnRfdXJnZW50LCdFdmVudG8gZW0gNyBkaWFzJ10sCiAgICAgICAgICAgIFsn8J+ThScsJ1Byw7N4LiAzMGQnLCJjb2xvcjojYzc3NzAwIiwna3BpLW5leHQzMCcsJ2RwJywnbmV4dDMwJywkY250X25leHQzMCwnRXZlbnRvcyBlc3RlIG3DqnMnXSwKICAgICAgICAgICAgWyfimqDvuI8nLCdTZW0gRGF0YScsImNvbG9yOiM1NzYwNmEiLCdrcGktbm9kYXRlJywnZHAnLCdub2RhdGUnLCRjbnRfbm9kYXRlLCdMZWFkcyBzZW0gZGF0YSddLAogICAgICAgICAgICBbJ/CflZAnLCdKw6EgUGFzc291JywiY29sb3I6Izg4OCIsJ2twaS1wYXN0JywnZHAnLCdwYXN0JywkY250X3Bhc3QsJ8OabHQuIDYwIGRpYXMnXSwKICAgICAgICBdOwogICAgICAgIGZvcmVhY2ggKCRrcGlzIGFzIFskaWNvbiwgJHRpdGxlLCAkc3R5bGUsICRjbHMsICRwYXJhbV9rZXksICRwYXJhbV92YWwsICRjbnQsICRzdWJdKToKICAgICAgICAgICAgJGlzX2FjdGl2ZSA9IChpc3NldCgkX0dFVFskcGFyYW1fa2V5XSkgJiYgJF9HRVRbJHBhcmFtX2tleV0gPT09ICRwYXJhbV92YWwpOwogICAgICAgICAgICAka3BpX3VybCAgID0gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWNvbnRhY3RzJywgJHBhcmFtX2tleT0+JHBhcmFtX3ZhbCwncGFnZWQnPT4xXSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSk7CiAgICAgICAgICAgICRjbGVhcl9rcGkgPSBhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItY29udGFjdHMnLCAkcGFyYW1fa2V5PT4nJywncGFnZWQnPT4xXSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSk7CiAgICAgICAgPz4KICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGlzX2FjdGl2ZSA/ICRjbGVhcl9rcGkgOiAka3BpX3VybCk7ID8+IgogICAgICAgICAgIGNsYXNzPSJ2bTJjLWtwaSA8P3BocCBlY2hvICRjbHM7ID8+IDw/cGhwIGVjaG8gJGlzX2FjdGl2ZSA/ICdhY3RpdmUnIDogJyc7ID8+IgogICAgICAgICAgIHN0eWxlPSI8P3BocCBlY2hvICRzdHlsZTsgPz4iIHRpdGxlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRzdWIpOyA/PiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImtwaS12YWwiPjw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkY250KTsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ia3BpLWxibCI+PD9waHAgZWNobyAkaWNvbjsgPz4gPD9waHAgZWNobyAkdGl0bGU7ID8+PC9kaXY+CiAgICAgICAgPC9hPgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICA8L2Rpdj4KCiAgICA8IS0tIFNvdXJjZSBQaWxscyAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1zb3VyY2UtYmFyIj4KICAgICAgICA8P3BocAogICAgICAgICRzb3VyY2VzID0gWwogICAgICAgICAgICBbJ2FsbCcsJ/CfjJAgVG9kb3MnLCdhbGwnLCR0b3RhbF9hbGwsJyddLAogICAgICAgICAgICBbJ2tvbW1vJywn8J+UpSBLb21tbycsJ2tvbW1vJywkY250X2tvbW1vLCdrb21tbyddLAogICAgICAgICAgICBbJ2dhbGVyaWEnLCfwn5O4IEdhbGVyaWEnLCdnYWxlcmlhJywkY250X2dhbGVyaWEsJ2dhbGVyaWEnXSwKICAgICAgICAgICAgWydjYXJyaW5obycsJ/Cfm5IgQ2FycmluaG8nLCdjYXJyaW5obycsJGNudF9jYXJyaW5obywnY2FycmluaG8nXSwKICAgICAgICAgICAgWydwZWRpZG8nLCfwn5OmIFBlZGlkbycsJ3BlZGlkbycsJGNudF9wZWRpZG8sJ3BlZGlkbyddLAogICAgICAgICAgICBbJ3NvZmlhJywn8J+noCBTb2ZJQScsJ3NvZmlhJywkY250X3NvZmlhLCdzb2ZpYSddLAogICAgICAgIF07CiAgICAgICAgZm9yZWFjaCAoJHNvdXJjZXMgYXMgWyRjbHMsICRsYmwsICR2YWwsICRjbnQsICRzdl0pOgogICAgICAgICAgICAkYWN0aXZlX3NyYyA9ICghJHN2ICYmICEkc291cmNlX2YpIHx8ICgkc3YgJiYgJHNvdXJjZV9mID09PSAkc3YpOwogICAgICAgICAgICAkc3JjX3VybCA9ICRzdgogICAgICAgICAgICAgICAgPyBhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItY29udGFjdHMnLCdzb3VyY2UnPT4kc3YsJ3BhZ2VkJz0+MV0sIGFkbWluX3VybCgnYWRtaW4ucGhwJykpCiAgICAgICAgICAgICAgICA6IGFkZF9xdWVyeV9hcmcoWydwYWdlJz0+J3ZtMi1jb250YWN0cycsJ3NvdXJjZSc9PicnLCdwYWdlZCc9PjFdLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKTsKICAgICAgICA/PgogICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkc3JjX3VybCk7ID8+IgogICAgICAgICAgIGNsYXNzPSJ2bTItc291cmNlLWJ0biA8P3BocCBlY2hvICRjbHM7ID8+IDw/cGhwIGVjaG8gJGFjdGl2ZV9zcmMgPyAnYWN0aXZlJyA6ICcnOyA/PiI+CiAgICAgICAgICAgIDw/cGhwIGVjaG8gJGxibDsgPz4gKDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkY250KTsgPz4pCiAgICAgICAgPC9hPgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICA8L2Rpdj4KCiAgICA8IS0tIEZpbHRlciBCYXIgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTJjLWZpbHRlci1iYXIiPgogICAgICAgIDxmb3JtIG1ldGhvZD0iZ2V0IiBhY3Rpb249IiI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhZ2UiIHZhbHVlPSJ2bTItY29udGFjdHMiPgogICAgICAgICAgICA8P3BocCBpZiAoJHNvdXJjZV9mKTogPz48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzb3VyY2UiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRzb3VyY2VfZik7ID8+Ij48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yYy1maWx0ZXItcm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMmMtZmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5CdXNjYTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InNlYXJjaCIgbmFtZT0icyIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHNlYXJjaCk7ID8+IiBwbGFjZWhvbGRlcj0iTm9tZSwgdGVsLiwgZW1haWwsIGF0cmHDp8Ojby4uLiI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDw/cGhwIGlmICghZW1wdHkoJHRpcG9zKSk6ID8+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTJjLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VGlwbyBkZSBFdmVudG88L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0idGlwbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+VG9kb3Mgb3MgdGlwb3M8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHRpcG9zIGFzICR0KTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkdCk7ID8+IiA8P3BocCBzZWxlY3RlZCgkdGlwb19mLCAkdCk7ID8+Pjw/cGhwIGVjaG8gZXNjX2h0bWwoJHQpOyA/Pjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMmMtZmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TY29yZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJzY29yZV9mIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5Ub2Rvczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJob3QiICA8P3BocCBzZWxlY3RlZCgkc2NvcmVfZiwnaG90Jyk7ICA/Pj7wn5SlIEhPVCAoNzArKTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ3YXJtIiA8P3BocCBzZWxlY3RlZCgkc2NvcmVfZiwnd2FybScpOyA/Pj7imqEgV0FSTSAoNDArKTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJjb2xkIiA8P3BocCBzZWxlY3RlZCgkc2NvcmVfZiwnY29sZCcpOyA/Pj7inYTvuI8gQ09MRDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTJjLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+RXN0w6FnaW88L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic3RhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPlRvZG9zPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImhvdCIgICAgPD9waHAgc2VsZWN0ZWQoJHN0YWdlX2YsJ2hvdCcpOyAgICA/Pj7wn5S0IEhPVCBLb21tbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJjb252IiAgIDw/cGhwIHNlbGVjdGVkKCRzdGFnZV9mLCdjb252Jyk7ICAgPz4+4pyFIENvbnRyYXRvdTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsb3N0IiAgIDw/cGhwIHNlbGVjdGVkKCRzdGFnZV9mLCdsb3N0Jyk7ICAgPz4+4p2MIFBlcmRpZG88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yYy1maWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPk9yZGVuYXI8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic29ydCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFjdGl2aXR5IiA8P3BocCBzZWxlY3RlZCgkc29ydCwnYWN0aXZpdHknKTsgPz4+4o+xIMOabHRpbWEgYXRpdmlkYWRlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImV2ZW50byIgICA8P3BocCBzZWxlY3RlZCgkc29ydCwnZXZlbnRvJyk7ICAgPz4+8J+ThSBFdmVudG8g4oaRPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImV2ZW50b19kIiA8P3BocCBzZWxlY3RlZCgkc29ydCwnZXZlbnRvX2QnKTsgPz4+8J+ThSBFdmVudG8g4oaTPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InNjb3JlIiAgICA8P3BocCBzZWxlY3RlZCgkc29ydCwnc2NvcmUnKTsgICAgPz4+8J+UpSBTY29yZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJub21lIiAgICAgPD9waHAgc2VsZWN0ZWQoJHNvcnQsJ25vbWUnKTsgICAgID8+PkHigJNaIE5vbWU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0id2EiICAgICAgIDw/cGhwIHNlbGVjdGVkKCRzb3J0LCd3YScpOyAgICAgICA/Pj7wn5KsIE1haXMgV0E8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo2cHg7YWxpZ24taXRlbXM6ZmxleC1lbmQiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0idm0yLWJ0bi1zbSI+RmlsdHJhcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkc2VhcmNoIHx8ICRzdGFnZV9mIHx8ICR0aXBvX2YgfHwgJHNjb3JlX2YgfHwgJGRhdGVfcGVyaW9kIHx8ICRkYXRlX2Zyb20gfHwgJGRhdGVfdG8pOiA/PgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybChhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItY29udGFjdHMnLCdzb3VyY2UnPT4kc291cmNlX2ZdLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKSk7ID8+IiBjbGFzcz0idm0yLWJ0bi1zbSIgc3R5bGU9ImJhY2tncm91bmQ6IzZlNzc4MSI+4pyVPC9hPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBEYXRlIHBlcmlvZCBwaWxscyAtLT4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6Izg4ODtsZXR0ZXItc3BhY2luZzouNHB4O21hcmdpbi1ib3R0b206NnB4Ij7wn5OFIERhdGEgZG8gRXZlbnRvPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTJjLWRwLXBpbGxzIj4KICAgICAgICAgICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgICAgICRkcF9vcHRpb25zID0gWwogICAgICAgICAgICAgICAgICAgICAgICAndXJnZW50JyA9PiAn8J+UpSBVcmdlbnRlICg3ZCknLAogICAgICAgICAgICAgICAgICAgICAgICAnd2VlaycgICA9PiAnRXN0YSBzZW1hbmEnLAogICAgICAgICAgICAgICAgICAgICAgICAnbW9udGgnICA9PiAnRXN0ZSBtw6pzJywKICAgICAgICAgICAgICAgICAgICAgICAgJ25leHQxNScgPT4gJ1Byw7N4LiAxNSBkaWFzJywKICAgICAgICAgICAgICAgICAgICAgICAgJ25leHQzMCcgPT4gJ1Byw7N4LiAzMCBkaWFzJywKICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3QnICAgPT4gJ0rDoSBwYXNzb3UnLAogICAgICAgICAgICAgICAgICAgICAgICAnbm9kYXRlJyA9PiAn4pqg77iPIFNlbSBkYXRhJywKICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRkcF9vcHRpb25zIGFzICRkcF92YWwgPT4gJGRwX2xibCk6CiAgICAgICAgICAgICAgICAgICAgICAgICRkcF9hY3RpdmUgPSAoJGRhdGVfcGVyaW9kID09PSAkZHBfdmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGRwX3VybCA9ICRkcF9hY3RpdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWNvbnRhY3RzJywnZHAnPT4nJywncyc9PiRzZWFyY2gsJ3N0YWdlJz0+JHN0YWdlX2YsJ3NvdXJjZSc9PiRzb3VyY2VfZiwndGlwbyc9PiR0aXBvX2YsJ3Njb3JlX2YnPT4kc2NvcmVfZiwncGFnZWQnPT4xXSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWNvbnRhY3RzJywnZHAnPT4kZHBfdmFsLCdzJz0+JHNlYXJjaCwnc3RhZ2UnPT4kc3RhZ2VfZiwnc291cmNlJz0+JHNvdXJjZV9mLCd0aXBvJz0+JHRpcG9fZiwnc2NvcmVfZic9PiRzY29yZV9mLCdwYWdlZCc9PjFdLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKTsKICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkZHBfdXJsKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InZtMmMtZHAtcGlsbCA8P3BocCBlY2hvICRkcF92YWw9PT0ndXJnZW50Jz8ndXJnZW50JzonJzsgPz4gPD9waHAgZWNobyAkZHBfYWN0aXZlPydhY3RpdmUnOicnOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRwX2xibDsgPz4KICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0idm0yY1RvZ2dsZVJhbmdlIiBjbGFzcz0idm0yYy1kcC1waWxsIDw/cGhwIGVjaG8gKCRkYXRlX2Zyb218fCRkYXRlX3RvKT8nYWN0aXZlJzonJzsgPz4iIG9uY2xpY2s9ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7dmFyIHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMmNEYXRlUmFuZ2UnKTtyLmNsYXNzTGlzdC50b2dnbGUoJ3Nob3cnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIPCfk4YgSW50ZXJ2YWxvCiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJ2bTJjRGF0ZVJhbmdlIiBjbGFzcz0idm0yYy1kYXRlLXJhbmdlIDw/cGhwIGVjaG8gKCRkYXRlX2Zyb218fCRkYXRlX3RvKT8nc2hvdyc6Jyc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTJjLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkRlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImRhdGUiIG5hbWU9ImRmIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkZGF0ZV9mcm9tKTsgPz4iPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMmMtZmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+QXTDqTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJkYXRlIiBuYW1lPSJkdCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGRhdGVfdG8pOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYWxpZ24tc2VsZjpmbGV4LWVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0idm0yLWJ0bi1zbSIgc3R5bGU9ImJhY2tncm91bmQ6IzE2YTM0YSI+QXBsaWNhcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZm9ybT4KICAgIDwvZGl2PgoKICAgIDwhLS0gQWN0aXZlIGZpbHRlciBjaGlwcyAtLT4KICAgIDw/cGhwIGlmICghZW1wdHkoJGFjdGl2ZV9sYWJlbHMpKTogPz4KICAgIDxkaXYgY2xhc3M9InZtMmMtYWN0aXZlLWZpbHRlcnMiPgogICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojODg4O2ZvbnQtd2VpZ2h0OjYwMCI+RmlsdHJvcyBhdGl2b3M6PC9zcGFuPgogICAgICAgIDw/cGhwIGZvcmVhY2ggKCRhY3RpdmVfbGFiZWxzIGFzIFskY2hpcF9sYWJlbCwgJGNoaXBfa2V5XSk6CiAgICAgICAgICAgICRyZW1vdmVfdXJsID0gYWRkX3F1ZXJ5X2FyZyhhcnJheV9tZXJnZShbJ3BhZ2UnPT4ndm0yLWNvbnRhY3RzJywncGFnZWQnPT4xLCRjaGlwX2tleT0+JyddKSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSk7CiAgICAgICAgPz4KICAgICAgICA8c3BhbiBjbGFzcz0idm0yYy1jaGlwIj4KICAgICAgICAgICAgPD9waHAgZWNobyAkY2hpcF9sYWJlbDsgPz4KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRyZW1vdmVfdXJsKTsgPz4iIHRpdGxlPSJSZW1vdmVyIGZpbHRybyI+w5c8L2E+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRjbGVhcl91cmwpOyA/PiIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiNkNjM2Mzg7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkxpbXBhciB0dWRvPC9hPgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRpZjsgPz4KCiAgICA8IS0tIFJlc3VsdHMgY291bnQgLS0+CiAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojNTc2MDZhO21hcmdpbi1ib3R0b206OHB4Ij4KICAgICAgICA8P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJHRvdGFsKTsgPz4gY29udGF0bzw/cGhwIGVjaG8gJHRvdGFsIT0xPydzJzonJzsgPz4gZW5jb250cmFkbzw/cGhwIGVjaG8gJHRvdGFsIT0xPydzJzonJzsgPz4KICAgICAgICA8P3BocCBpZiAoJHRvdGFsID4gJHBlcl9wYWdlKTogPz4KICAgICAgICDCtyBQw6FnaW5hIDw/cGhwIGVjaG8gJHBhZ2VkOyA/PiBkZSA8P3BocCBlY2hvICR0b3RhbF9wYWdlczsgPz4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgIDwvZGl2PgoKICAgIDw/cGhwIGlmIChlbXB0eSgkY29udGFjdHMpKTogPz4KICAgIDxkaXYgY2xhc3M9InZtMi1lbXB0eS1zdGF0ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWVtcHR5LWljb24iPvCflI08L2Rpdj4KICAgICAgICA8cD5OZW5odW0gY29udGF0byBlbmNvbnRyYWRvPD9waHAgZWNobyAkc2VhcmNoID8gJyBwYXJhIDxzdHJvbmc+IicgLiBlc2NfaHRtbCgkc2VhcmNoKSAuICciPC9zdHJvbmc+JyA6ICcnOyA/PjwvcD4KICAgICAgICA8P3BocCBpZiAoIWVtcHR5KCRhY3RpdmVfbGFiZWxzKSk6ID8+CiAgICAgICAgPHA+PGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRjbGVhcl91cmwpOyA/PiI+TGltcGFyIGZpbHRyb3M8L2E+PC9wPgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9kaXY+CiAgICA8P3BocCBlbHNlOiA/PgoKICAgIDw/cGhwCiAgICAkYnVsa19ub25jZSA9IHdwX2NyZWF0ZV9ub25jZSgndm0yX2J1bGtfYXF1ZWNlcicpOwogICAgPz4KICAgIDxzdHlsZT4KICAgIC8qIOKUgOKUgCBCdWxrIGFjdGlvbiBiYXIg4pSA4pSAICovCiAgICAudm0yLWJ1bGstYmFye2Rpc3BsYXk6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7YmFja2dyb3VuZDojMWExYTJlO2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7bWFyZ2luLWJvdHRvbToxMHB4O2ZsZXgtd3JhcDp3cmFwfQogICAgLnZtMi1idWxrLWJhci52aXNpYmxle2Rpc3BsYXk6ZmxleH0KICAgIC52bTItYnVsay1jb3VudHtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzcHg7ZmxleDoxfQogICAgLnZtMi1idWxrLWJ0bntiYWNrZ3JvdW5kOiNGRkQ3MDA7Y29sb3I6IzFhMWEyZTtib3JkZXI6bm9uZTtwYWRkaW5nOjZweCAxNHB4O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1c30KICAgIC52bTItYnVsay1idG46aG92ZXJ7b3BhY2l0eTouODV9CiAgICAudm0yLWJ1bGstY2FuY2Vse2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6I2FhYTtib3JkZXI6bm9uZTtmb250LXNpemU6MTJweDtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjRweCA4cHh9CiAgICAvKiDilIDilIAgQ2hlY2tib3ggY29sIOKUgOKUgCAqLwogICAgLnZtMi1jYi1jb2x7d2lkdGg6MzJweDt0ZXh0LWFsaWduOmNlbnRlcn0KICAgIC52bTItY29udGFjdHMtdGFibGUgLnZtMi1jYi1jb2wgaW5wdXRbdHlwZT1jaGVja2JveF17Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTVweDtoZWlnaHQ6MTVweH0KICAgIC8qIOKUgOKUgCBTZXF1w6puY2lhcyBjaGlwcyDilIDilIAgKi8KICAgIC52bTItc2VxLWNoaXBze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6M3B4fQogICAgLnZtMi1zZXEtY2hpcHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjJweCA2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2NvbG9yOiNmZmY7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NzAwO3doaXRlLXNwYWNlOm5vd3JhcH0KICAgIDwvc3R5bGU+CgogICAgPCEtLSBCdWxrIEFjdGlvbiBCYXIgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItYnVsay1iYXIiIGlkPSJ2bTJCdWxrQmFyIj4KICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWJ1bGstY291bnQiIGlkPSJ2bTJCdWxrQ291bnQiPjAgc2VsZWNpb25hZG8ocyk8L3NwYW4+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0idm0yLWJ1bGstYnRuIiBpZD0idm0yQnVsa0FxdWVjZXIiIGRhdGEtbm9uY2U9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGJ1bGtfbm9uY2UpOyA/PiI+CiAgICAgICAgICAgIPCflKUgQWRpY2lvbmFyIGEgQXF1ZWNlcgogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1idWxrLWJ0biIgc3R5bGU9ImJhY2tncm91bmQ6IzNiODJmNiIgaWQ9InZtMkJ1bGtCeWRhdGUiIGRhdGEtbm9uY2U9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGJ1bGtfbm9uY2UpOyA/PiI+CiAgICAgICAgICAgIPCfk4UgRmlsYSBQb3IgRGF0YQogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1idWxrLWNhbmNlbCIgaWQ9InZtMkJ1bGtDYW5jZWwiPuKclSBDYW5jZWxhcjwvYnV0dG9uPgogICAgPC9kaXY+CgogICAgPHRhYmxlIGNsYXNzPSJ2bTItY29udGFjdHMtdGFibGUiPgogICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJ2bTItY2ItY29sIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ2bTJTZWxlY3RBbGwiIHRpdGxlPSJTZWxlY2lvbmFyIHRvZG9zIiBzdHlsZT0iY3Vyc29yOnBvaW50ZXIiPjwvdGg+CiAgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iPD9waHAgZWNobyAkX3N1KCRzb3J0PT09J25vbWUnPydub21lX2QnOidub21lJyk7ID8+IiBzdHlsZT0iY29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246bm9uZSI+Q29udGF0bzw/cGhwIGVjaG8gJF9hcnJvdygnbm9tZScsJ25vbWVfZCcpOyA/PjwvYT48L3RoPgogICAgICAgICAgICAgICAgPHRoPk9yaWdlbTwvdGg+CiAgICAgICAgICAgICAgICA8dGg+Q2FuYWw8L3RoPgogICAgICAgICAgICAgICAgPHRoPlRpcG8gRXZlbnRvPC90aD4KICAgICAgICAgICAgICAgIDx0aD48YSBocmVmPSI8P3BocCBlY2hvICRfc3UoJHNvcnQ9PT0nZXZlbnRvJz8nZXZlbnRvX2QnOidldmVudG8nKTsgPz4iIHN0eWxlPSJjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lIj5EYXRhIEV2ZW50bzw/cGhwIGVjaG8gJF9hcnJvdygnZXZlbnRvJywnZXZlbnRvX2QnKTsgPz48L2E+PC90aD4KICAgICAgICAgICAgICAgIDx0aD5Fc3TDoWdpbzwvdGg+CiAgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iPD9waHAgZWNobyAkX3N1KCRzb3J0PT09J3Njb3JlJz8nYWN0aXZpdHknOidzY29yZScpOyA/PiIgc3R5bGU9ImNvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPlNjb3JlPD9waHAgZWNobyAkX2Fycm93KCdzY29yZScsJ2FjdGl2aXR5Jyk7ID8+PC9hPjwvdGg+CiAgICAgICAgICAgICAgICA8dGggc3R5bGU9Im1pbi13aWR0aDoxMjBweCI+QXRyYcOnw6NvPC90aD4KICAgICAgICAgICAgICAgIDx0aD48YSBocmVmPSI8P3BocCBlY2hvICRfc3UoJHNvcnQ9PT0nd2EnPyd3YV9hJzond2EnKTsgPz4iIHN0eWxlPSJjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lIj5XQTw/cGhwIGVjaG8gJF9hcnJvdygnd2FfYScsJ3dhJyk7ID8+PC9hPjwvdGg+CiAgICAgICAgICAgICAgICA8dGggdGl0bGU9IkVtYWlsIGNhcHR1cmFkbyI+8J+TpzwvdGg+CiAgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iPD9waHAgZWNobyAkX3N1KCRzb3J0PT09J2FjdGl2aXR5X2EnPydhY3Rpdml0eSc6J2FjdGl2aXR5X2EnKTsgPz4iIHN0eWxlPSJjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lIj5BdGl2aWRhZGU8P3BocCBlY2hvICRfYXJyb3coJ2FjdGl2aXR5X2EnLCdhY3Rpdml0eScpOyA/PjwvYT48L3RoPgogICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJtaW4td2lkdGg6ODBweCI+U2VxdcOqbmNpYXM8L3RoPgogICAgICAgICAgICAgICAgPHRoPkHDp8O1ZXM8L3RoPgogICAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGhlYWQ+CiAgICAgICAgPHRib2R5PgogICAgICAgIDw/cGhwCiAgICAgICAgLy8g4pSA4pSAIFNlcXXDqm5jaWFzOiBwcsOpLWNhcnJlZ2EgZW52aW9zIHBvciB0ZWxlZm9uZSAow7psdGltb3MgMzBkKSDilIDilIAKICAgICAgICAkY29udGFjdF9waG9uZXMgPSBhcnJheV9tYXAoZm4oJGMpID0+ICRjLT5waG9uZSwgJGNvbnRhY3RzKTsKICAgICAgICAkc2VxX2RhdGEgPSBbXTsKICAgICAgICBpZiAoIWVtcHR5KCRjb250YWN0X3Bob25lcykpIHsKICAgICAgICAgICAgJHBoX2luID0gaW1wbG9kZSgnLCcsIGFycmF5X2ZpbGwoMCwgY291bnQoJGNvbnRhY3RfcGhvbmVzKSwgJyVzJykpOwogICAgICAgICAgICAkc2VxX3Jvd3MgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIHBob25lLCBtb2R1bGUgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMKICAgICAgICAgICAgICAgICBXSEVSRSBwaG9uZSBJTiAoJHBoX2luKQogICAgICAgICAgICAgICAgIEFORCBzZW50X2F0ID4gREFURV9TVUIoTk9XKCksIElOVEVSVkFMIDMwIERBWSkKICAgICAgICAgICAgICAgICBHUk9VUCBCWSBwaG9uZSwgbW9kdWxlIiwKICAgICAgICAgICAgICAgIC4uLiRjb250YWN0X3Bob25lcwogICAgICAgICAgICApKTsKICAgICAgICAgICAgZm9yZWFjaCAoJHNlcV9yb3dzIGFzICRzcikgewogICAgICAgICAgICAgICAgJHNlcV9kYXRhWyRzci0+cGhvbmVdW10gPSAkc3ItPm1vZHVsZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkc2VxX2NoaXBfbWFwID0gWwogICAgICAgICAgICAnYXF1ZWNlcicgICAgICA9PiBbJ/CflKUnLCAnI2U3NGMzYycsICdBcXVlY2VyJ10sCiAgICAgICAgICAgICdhdXRvX2FxdWVjZXInID0+IFsn8J+klicsICcjOWI1OWI2JywgJ0F1dG8nXSwKICAgICAgICAgICAgJ2xlYWRzJyAgICAgICAgPT4gWyfwn46vJywgJyNlNjdlMjInLCAnSE9UJ10sCiAgICAgICAgICAgICdieWRhdGUnICAgICAgID0+IFsn8J+ThScsICcjMzQ5OGRiJywgJ0RhdGEnXSwKICAgICAgICAgICAgJ2NhcnJpbmhvJyAgICAgPT4gWyfwn5uSJywgJyMyN2FlNjAnLCAnQ2FydCddLAogICAgICAgIF07CgogICAgICAgICRvcmlnaW5fbGFiZWxzID0gWwogICAgICAgICAgICAna29tbW8nICAgID0+ICc8c3BhbiBjbGFzcz0idm0yLW9yaWdpbi1iYWRnZSBvYi1rb21tbyI+8J+UpSBLb21tbzwvc3Bhbj4nLAogICAgICAgICAgICAnZ2FsZXJpYScgID0+ICc8c3BhbiBjbGFzcz0idm0yLW9yaWdpbi1iYWRnZSBvYi1nYWxlcmlhIj7wn5O4IEdhbGVyaWE8L3NwYW4+JywKICAgICAgICAgICAgJ2NhcnJpbmhvJyA9PiAnPHNwYW4gY2xhc3M9InZtMi1vcmlnaW4tYmFkZ2Ugb2ItY2FycmluaG8iPvCfm5IgQ2FydDwvc3Bhbj4nLAogICAgICAgICAgICAncGVkaWRvJyAgID0+ICc8c3BhbiBjbGFzcz0idm0yLW9yaWdpbi1iYWRnZSBvYi1wZWRpZG8iPvCfk6YgUGVkaWRvPC9zcGFuPicsCiAgICAgICAgICAgICdzb2ZpYScgICAgPT4gJzxzcGFuIGNsYXNzPSJ2bTItb3JpZ2luLWJhZGdlIG9iLXNvZmlhIj7wn6egIFNvZklBPC9zcGFuPicsCiAgICAgICAgXTsKICAgICAgICBmb3JlYWNoICgkY29udGFjdHMgYXMgJGMpOgogICAgICAgICAgICAkb3JpZ2VucyAgICAgPSBqc29uX2RlY29kZSgkYy0+b3JpZ2VucywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICRwaG9uZV9jbGVhbiA9IHByZWdfcmVwbGFjZSgnL1xELycsICcnLCAkYy0+cGhvbmUpOwogICAgICAgICAgICAka29tbW9fdXJsICAgPSAkYy0+a29tbW9fbGVhZF9pZCA/ICdodHRwczovL3JsZWl0ZW1hcnRpbnMua29tbW8uY29tL2xlYWRzL2RldGFpbC8nIC4gJGMtPmtvbW1vX2xlYWRfaWQgOiAnJzsKICAgICAgICAgICAgJGludGVyZXN0ICAgID0gJGMtPmdhbGVyaWFfYXRyYWNhbyA/OiAkYy0+Y2FydF9wcm9kdWN0ID86ICcnOwogICAgICAgICAgICAkc2NvcmUgICAgICAgPSAoaW50KSRjLT5zY29yZSA/OiB2bTJfbGVhZF9zY29yZSgob2JqZWN0KVsnc3RhdHVzX2lkJz0+JGMtPmtvbW1vX3N0YXR1c19pZCwnZGF0YV9ldmVudG8nPT4kYy0+ZGF0YV9ldmVudG9dLCAoaW50KSRjLT53YV9jb3VudCk7CiAgICAgICAgICAgICRzY29yZV9odG1sICA9ICRzY29yZSA+PSA3MAogICAgICAgICAgICAgICAgPyAnPHNwYW4gY2xhc3M9InZtMmMtc2NvcmUtaG90Ij7wn5SlICcgLiAkc2NvcmUgLiAnPC9zcGFuPicKICAgICAgICAgICAgICAgIDogKCRzY29yZSA+PSA0MAogICAgICAgICAgICAgICAgICAgID8gJzxzcGFuIGNsYXNzPSJ2bTJjLXNjb3JlLXdhcm0iPuKaoSAnIC4gJHNjb3JlIC4gJzwvc3Bhbj4nCiAgICAgICAgICAgICAgICAgICAgOiAnPHNwYW4gY2xhc3M9InZtMmMtc2NvcmUtY29sZCI+4p2E77iPICcgLiAkc2NvcmUgLiAnPC9zcGFuPicpOwogICAgICAgICAgICAkbGFzdF9mbXQgICAgPSAkYy0+bGFzdF9hY3Rpdml0eSA/IHZtMl9sb2NhbF9kYXRlKCdkL20gSDppJywgJGMtPmxhc3RfYWN0aXZpdHkpIDogJ+KAlCc7CiAgICAgICAgICAgICR0aXBvX2h0bWwgICA9ICRjLT50aXBvX2V2ZW50byA/ICc8c3BhbiBjbGFzcz0idm0yYy10aXBvIj4nIC4gZXNjX2h0bWwoJGMtPnRpcG9fZXZlbnRvKSAuICc8L3NwYW4+JyA6ICc8c3BhbiBzdHlsZT0iY29sb3I6I2NjYztmb250LXNpemU6MTFweCI+4oCUPC9zcGFuPic7CiAgICAgICAgPz4KICAgICAgICAgICAgPHRyIGNsYXNzPSJ2bTItY29udGFjdC1yb3ciCiAgICAgICAgICAgICAgICBkYXRhLWlkPSI8P3BocCBlY2hvIGVzY19hdHRyKCRjLT5rb21tb19sZWFkX2lkID86IDApOyA/PiIKICAgICAgICAgICAgICAgIGRhdGEtY29udGFjdC1pZD0iPD9waHAgZWNobyBlc2NfYXR0cigkYy0+aWQpOyA/PiIKICAgICAgICAgICAgICAgIGRhdGEtbm9uY2U9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJG5vbmNlX3ZhbCk7ID8+Ij4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idm0yLWNiLWNvbCIgb25jbGljaz0iZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9InZtMi1jYi1yb3ciIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRjLT5waG9uZSA/OiAnJyk7ID8+Ij4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLW5hbWUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGMtPm5hbWUgPzogJ+KAlCcpOyA/PjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1waG9uZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkYy0+cGhvbmUgPzogJ+KAlCcpOyA/PjwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48P3BocCBmb3JlYWNoICgkb3JpZ2VucyBhcyAkbykgZWNobyAkb3JpZ2luX2xhYmVsc1skb10gPz8gJyc7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48P3BocAogICAgICAgICAgICAgICAgICAgIC8vIFt2MS41Ljc2XSBVVE0gc291cmNlL21lZGl1bS9jYW1wYWlnbgogICAgICAgICAgICAgICAgICAgICR1dG1fc3JjID0gJGMtPnV0bV9zb3VyY2UgPz8gJyc7CiAgICAgICAgICAgICAgICAgICAgJHV0bV9tZWQgPSAkYy0+dXRtX21lZGl1bSA/PyAnJzsKICAgICAgICAgICAgICAgICAgICAkdXRtX2NhbSA9ICRjLT51dG1fY2FtcGFpZ24gPz8gJyc7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR1dG1fc3JjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aXAgPSBlc2NfYXR0cihpbXBsb2RlKCcgLyAnLCBhcnJheV9maWx0ZXIoWyR1dG1fc3JjLCAkdXRtX21lZCwgJHV0bV9jYW1dKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAkaWNvbiA9ICR1dG1fc3JjID09PSAnZmFjZWJvb2snID8gJ/Cfk5gnIDogKCR1dG1fc3JjID09PSAnZ29vZ2xlJyA/ICfwn5SNJyA6ICgkdXRtX3NyYyA9PT0gJ2luc3RhZ3JhbScgPyAn8J+TuCcgOiAoJHV0bV9zcmMgPT09ICdrb21tbycgPyAn8J+klicgOiAn8J+MkCcpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxzcGFuIHRpdGxlPSInIC4gJHRpcCAuICciIHN0eWxlPSJmb250LXNpemU6MTFweDtiYWNrZ3JvdW5kOiNlOGYwZmU7Y29sb3I6IzFhNzNlODtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjJweCA2cHg7Y3Vyc29yOmRlZmF1bHQiPicgLiAkaWNvbiAuICcgJyAuIGVzY19odG1sKCR1dG1fc3JjKSAuICc8L3NwYW4+JzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dG1fY2FtKSBlY2hvICc8YnI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM4ODg7ZGlzcGxheTpibG9jazttYXgtd2lkdGg6MTAwcHg7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwIiB0aXRsZT0iJyAuIGVzY19hdHRyKCR1dG1fY2FtKSAuICciPicgLiBlc2NfaHRtbCgkdXRtX2NhbSkgLiAnPC9zcGFuPic7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgZWNobyAnPHNwYW4gc3R5bGU9ImNvbG9yOiNkMWQ1ZGI7Zm9udC1zaXplOjExcHgiPuKAlDwvc3Bhbj4nOyB9CiAgICAgICAgICAgICAgICA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyAkdGlwb19odG1sOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyAkZXZfYmFkZ2UoJGMtPmRhdGFfZXZlbnRvID8/ICcnKTsgPz48L3RkPgogICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gJGMtPmtvbW1vX3N0YXR1c19pZCA/IHZtMl9zdGFnZV9sYWJlbCgkYy0+a29tbW9fc3RhdHVzX2lkKSA6ICc8c3BhbiBzdHlsZT0iY29sb3I6I2JiYjtmb250LXNpemU6MTFweCI+4oCUPC9zcGFuPic7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICRzY29yZV9odG1sOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM1NzYwNmE7bWF4LXdpZHRoOjE0MHB4O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcCIgdGl0bGU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGludGVyZXN0KTsgPz4iPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGludGVyZXN0ID86ICfigJQnKTsgPz48L3RkPgogICAgICAgICAgICAgICAgPHRkPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Y29sb3I6PD9waHAgZWNobyAoaW50KSRjLT53YV9jb3VudCA+IDAgPyAnIzI1RDM2NicgOiAnI2JiYic7ID8+Ij48P3BocCBlY2hvIChpbnQpJGMtPndhX2NvdW50OyA/Pjwvc3Bhbj48L3RkPgogICAgICAgICAgICAgICAgPHRkIHRpdGxlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRjLT5lbWFpbCA/OiAnJyk7ID8+Ij48P3BocCBlY2hvICFlbXB0eSgkYy0+ZW1haWwpID8gJzxzcGFuIHN0eWxlPSJjb2xvcjojMjI3MWIxO2ZvbnQtc2l6ZToxMnB4IiB0aXRsZT0iJyAuIGVzY19hdHRyKCRjLT5lbWFpbCkgLiAnIj7inInvuI88L3NwYW4+JyA6ICc8c3BhbiBzdHlsZT0iY29sb3I6I2UwZTBlMDtmb250LXNpemU6MTFweCI+4oCUPC9zcGFuPic7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iY29sb3I6IzU3NjA2YTtmb250LXNpemU6MTFweDt3aGl0ZS1zcGFjZTpub3dyYXAiPjw/cGhwIGVjaG8gJGxhc3RfZm10OyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgb25jbGljaz0iZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICAgICAgICAgJHNlcV9jaGlwc19odG1sID0gJyc7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkc2VxX2RhdGFbJGMtPnBob25lXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoYXJyYXlfdW5pcXVlKCRzZXFfZGF0YVskYy0+cGhvbmVdKSBhcyAkc2VxX21vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRzZXFfY2hpcF9tYXBbJHNlcV9tb2RdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFskaWMsICRjb2wsICRsYl0gPSAkc2VxX2NoaXBfbWFwWyRzZXFfbW9kXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VxX2NoaXBzX2h0bWwgLj0gJzxzcGFuIGNsYXNzPSJ2bTItc2VxLWNoaXAiIHN0eWxlPSJiYWNrZ3JvdW5kOicgLiAkY29sIC4gJyIgdGl0bGU9IicgLiBlc2NfYXR0cigkbGIpIC4gJyI+JyAuICRpYyAuICcgJyAuIGVzY19odG1sKCRsYikgLiAnPC9zcGFuPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWNobyAkc2VxX2NoaXBzX2h0bWwgPzogJzxzcGFuIHN0eWxlPSJjb2xvcjojZDFkNWRiO2ZvbnQtc2l6ZToxMXB4Ij7igJQ8L3NwYW4+JzsKICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idm0yLWFjdGlvbnMiIG9uY2xpY2s9ImV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHBob25lX2NsZWFuKTogPz4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3dhLm1lLzw/cGhwIGVjaG8gZXNjX2F0dHIoJHBob25lX2NsZWFuKTsgPz4iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iV2hhdHNBcHAiPvCfkqw8L2E+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRrb21tb191cmwpOiA/PgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgka29tbW9fdXJsKTsgPz4iIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iVmVyIG5vIEtvbW1vIj7wn5SXPC9hPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgIDwvdGJvZHk+CiAgICA8L3RhYmxlPgoKICAgIDw/cGhwIGlmICgkdG90YWxfcGFnZXMgPiAxKTogPz4KICAgIDxkaXYgY2xhc3M9InZtMi1wYWdpbmF0aW9uIj4KICAgICAgICA8c3Bhbj48P3BocCBlY2hvICRwYWdlZDsgPz4vPD9waHAgZWNobyAkdG90YWxfcGFnZXM7ID8+PC9zcGFuPgogICAgICAgIDw/cGhwIGlmICgkcGFnZWQgPiAxKSBlY2hvICc8YSBocmVmPSInIC4gZXNjX3VybCgkYmFzZV91cmwgLiAoJHBhZ2VkLTEpKSAuICciPuKGkCBBbnQ8L2E+JzsgPz4KICAgICAgICA8P3BocCBmb3IgKCRwID0gbWF4KDEsJHBhZ2VkLTIpOyAkcCA8PSBtaW4oJHRvdGFsX3BhZ2VzLCRwYWdlZCsyKTsgJHArKyk6CiAgICAgICAgICAgIGlmICgkcD09PSRwYWdlZCkgZWNobyAnPHNwYW4gY2xhc3M9ImN1cnJlbnQiPicuJHAuJzwvc3Bhbj4nOwogICAgICAgICAgICBlbHNlIGVjaG8gJzxhIGhyZWY9IicuZXNjX3VybCgkYmFzZV91cmwuJHApLiciPicuJHAuJzwvYT4nOwogICAgICAgIGVuZGZvcjsgPz4KICAgICAgICA8P3BocCBpZiAoJHBhZ2VkIDwgJHRvdGFsX3BhZ2VzKSBlY2hvICc8YSBocmVmPSInIC4gZXNjX3VybCgkYmFzZV91cmwgLiAoJHBhZ2VkKzEpKSAuICciPlByw7N4IOKGkjwvYT4nOyA/PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRpZjsgPz4KICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgIDwhLS0gTW9kYWwgZGUgZGV0YWxoZSBkbyBjb250YXRvIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLW1vZGFsLW92ZXJsYXkiIGlkPSJ2bTJDb250YWN0TW9kYWwiPgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1tb2RhbC1wYW5lbCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1tb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDAiIGlkPSJ2bTJNb2RhbE5hbWUiPuKAlDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NzYwNmEiIGlkPSJ2bTJNb2RhbFBob25lIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idm0yLW1vZGFsLWNsb3NlIiBpZD0idm0yTW9kYWxDbG9zZSI+4pyVPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItbW9kYWwtYm9keSIgaWQ9InZtMk1vZGFsQm9keSI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjQwcHg7Y29sb3I6IzU3NjA2YSI+Q2FycmVnYW5kby4uLjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLW1vZGFsLWFjdGlvbnMiIGlkPSJ2bTJNb2RhbEFjdGlvbnMiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgIChmdW5jdGlvbigpewogICAgICAgIHZhciBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDb250YWN0TW9kYWwnKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yTW9kYWxDbG9zZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgbW9kYWwuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpOwogICAgICAgIH0pOwogICAgICAgIG1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSl7IGlmKGUudGFyZ2V0PT09bW9kYWwpIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsgfSk7CgogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy52bTItY29udGFjdC1yb3cnKS5mb3JFYWNoKGZ1bmN0aW9uKHJvdyl7CiAgICAgICAgICAgIHJvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB2YXIgaWQgICAgPSByb3cuZGF0YXNldC5pZDsKICAgICAgICAgICAgICAgIHZhciBub25jZSA9IHJvdy5kYXRhc2V0Lm5vbmNlOwogICAgICAgICAgICAgICAgdmFyIG5hbWUgID0gcm93LnF1ZXJ5U2VsZWN0b3IoJy52bTItbmFtZScpLnRleHRDb250ZW50OwogICAgICAgICAgICAgICAgdmFyIHBob25lID0gcm93LnF1ZXJ5U2VsZWN0b3IoJy52bTItcGhvbmUnKS50ZXh0Q29udGVudDsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJNb2RhbE5hbWUnKS50ZXh0Q29udGVudCAgPSBuYW1lOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMk1vZGFsUGhvbmUnKS50ZXh0Q29udGVudCA9IHBob25lOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMk1vZGFsQm9keScpLmlubmVySFRNTCAgICA9ICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjQwcHg7Y29sb3I6IzU3NjA2YSI+4o+zIENhcnJlZ2FuZG8gZmljaGEuLi48L2Rpdj4nOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMk1vZGFsQWN0aW9ucycpLmlubmVySFRNTCA9ICcnOwogICAgICAgICAgICAgICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgnb3BlbicpOwogICAgICAgICAgICAgICAgaWYgKCFpZCB8fCBpZCA9PT0gJzAnKSB7CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMk1vZGFsQm9keScpLmlubmVySFRNTCA9ICc8cCBzdHlsZT0iY29sb3I6Izg4ODtwYWRkaW5nOjIwcHgiPkNvbnRhdG8gc2VtIEtvbW1vIElEIOKAlCBkZXRhbGhlcyBlbSBicmV2ZS48L3A+JzsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgICAgIGZkLmFwcGVuZCgnYWN0aW9uJywndm0yX2NvbnRhY3RfZGV0YWlsJyk7CiAgICAgICAgICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgbm9uY2UpOwogICAgICAgICAgICAgICAgZmQuYXBwZW5kKCdrb21tb19pZCcsIGlkKTsKICAgICAgICAgICAgICAgIGZldGNoKGFqYXh1cmwsIHttZXRob2Q6J1BPU1QnLCBib2R5OmZkfSkKICAgICAgICAgICAgICAgICAgICAudGhlbihyPT5yLmpzb24oKSkKICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXMpewogICAgICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3VjY2Vzcyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yTW9kYWxCb2R5JykuaW5uZXJIVE1MICAgID0gcmVzLmRhdGEuaHRtbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJNb2RhbEFjdGlvbnMnKS5pbm5lckhUTUwgPSByZXMuZGF0YS5hY3Rpb25zOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMk1vZGFsQm9keScpLmlubmVySFRNTCA9ICc8cCBzdHlsZT0iY29sb3I6cmVkIj5FcnJvIGFvIGNhcnJlZ2FyIGNvbnRhdG8uPC9wPic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEJvdMOjbyBTeW5jCiAgICAgICAgdmFyIHN5bmNCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yU3luY0J0bicpOwogICAgICAgIGlmIChzeW5jQnRuKSB7CiAgICAgICAgICAgIHN5bmNCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgc3luY0J0bi50ZXh0Q29udGVudCA9ICfij7MgU3luYy4uLic7CiAgICAgICAgICAgICAgICBzeW5jQnRuLmNsYXNzTGlzdC5hZGQoJ3N5bmNpbmcnKTsKICAgICAgICAgICAgICAgIGZldGNoKCc8P3BocCBlY2hvIGVzY19qcyhyZXN0X3VybCgndm0tY3JtLXYyL3YxL2NvbnRhY3RzL3N5bmMnKSk7ID8+JywgewogICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsnWC1XUC1Ob25jZSc6ICc8P3BocCBlY2hvIGVzY19qcygkcmVzdF9ub25jZSk7ID8+J30KICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihyPT5yLmpzb24oKSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5vaykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHJlcy5yZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNCdG4udGV4dENvbnRlbnQgPSAn4pyFICcgKyByLnRvdGFsICsgJyAoJyArIHIubmV3ICsgJyBub3ZvcyknOwogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGxvY2F0aW9uLnJlbG9hZCgpOyB9LCAxMjAwKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzeW5jQnRuLnRleHRDb250ZW50ID0gJ+KdjCBFcnJvJzsKICAgICAgICAgICAgICAgICAgICAgICAgc3luY0J0bi5jbGFzc0xpc3QucmVtb3ZlKCdzeW5jaW5nJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIHN5bmNCdG4udGV4dENvbnRlbnQgPSAn4p2MIEVycm8nOwogICAgICAgICAgICAgICAgICAgIHN5bmNCdG4uY2xhc3NMaXN0LnJlbW92ZSgnc3luY2luZycpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0pKCk7CiAgICA8c2NyaXB0PgogICAgKGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIHNlbGVjdEFsbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJTZWxlY3RBbGwnKTsKICAgICAgICB2YXIgYnVsa0JhciAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkJ1bGtCYXInKTsKICAgICAgICB2YXIgYnVsa0NvdW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkJ1bGtDb3VudCcpOwogICAgICAgIGlmICghc2VsZWN0QWxsKSByZXR1cm47CgogICAgICAgIGZ1bmN0aW9uIGdldENoZWNrZWQoKSB7CiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy52bTItY2Itcm93OmNoZWNrZWQnKSk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUJhcigpIHsKICAgICAgICAgICAgdmFyIGNoZWNrZWQgPSBnZXRDaGVja2VkKCk7CiAgICAgICAgICAgIGlmIChjaGVja2VkLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIGJ1bGtCYXIuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpOwogICAgICAgICAgICAgICAgYnVsa0NvdW50LnRleHRDb250ZW50ID0gY2hlY2tlZC5sZW5ndGggKyAnIHNlbGVjaW9uYWRvKHMpJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGJ1bGtCYXIuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNlbGVjdEFsbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1jYi1yb3cnKS5mb3JFYWNoKGZ1bmN0aW9uKGNiKXsgY2IuY2hlY2tlZCA9IHNlbGVjdEFsbC5jaGVja2VkOyB9KTsKICAgICAgICAgICAgdXBkYXRlQmFyKCk7CiAgICAgICAgfSk7CiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1jYi1yb3cnKS5mb3JFYWNoKGZ1bmN0aW9uKGNiKXsKICAgICAgICAgICAgY2IuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlQmFyKTsKICAgICAgICB9KTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQnVsa0NhbmNlbCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1jYi1yb3cnKS5mb3JFYWNoKGZ1bmN0aW9uKGNiKXsgY2IuY2hlY2tlZCA9IGZhbHNlOyB9KTsKICAgICAgICAgICAgc2VsZWN0QWxsLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgdXBkYXRlQmFyKCk7CiAgICAgICAgfSk7CiAgICAgICAgZnVuY3Rpb24gYnVsa0FjdGlvbihtb2R1bGUpIHsKICAgICAgICAgICAgdmFyIHBob25lcyA9IGdldENoZWNrZWQoKS5tYXAoZnVuY3Rpb24oY2IpeyByZXR1cm4gY2IudmFsdWU7IH0pLmZpbHRlcihCb29sZWFuKTsKICAgICAgICAgICAgaWYgKCFwaG9uZXMubGVuZ3RoKSB7IGFsZXJ0KCdTZWxlY2lvbmUgYW8gbWVub3MgdW0gY29udGF0by4nKTsgcmV0dXJuOyB9CiAgICAgICAgICAgIHZhciBsYWJlbCA9IG1vZHVsZSA9PT0gJ2FxdWVjZXInID8gJ0FxdWVjZXIgRCtYJyA6ICdQb3IgRGF0YSc7CiAgICAgICAgICAgIGlmICghY29uZmlybSgnQWRpY2lvbmFyICcgKyBwaG9uZXMubGVuZ3RoICsgJyBjb250YXRvKHMpIMOgIGZpbGEgZGUgJyArIGxhYmVsICsgJz8KCihSZW1vdmUgY29vbGRvd24gcmVjZW50ZSBlIG9zIGluY2x1aSBubyBwcsOzeGltbyBkaXNwYXJvKScpKSByZXR1cm47CiAgICAgICAgICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtb2R1bGUgPT09ICdhcXVlY2VyJyA/ICd2bTJCdWxrQXF1ZWNlcicgOiAndm0yQnVsa0J5ZGF0ZScpOwogICAgICAgICAgICB2YXIgbm9uY2UgPSBidG4uZGF0YXNldC5ub25jZTsKICAgICAgICAgICAgdmFyIGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgYWN0aW9uOiAndm0yX2J1bGtfYXF1ZWNlcicsIG5vbmNlOiBub25jZSwgbW9kdWxlOiBtb2R1bGUgfSk7CiAgICAgICAgICAgIHBob25lcy5mb3JFYWNoKGZ1bmN0aW9uKHApeyBib2R5LmFwcGVuZCgncGhvbmVzW10nLCBwKTsgfSk7CiAgICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfij7MgUHJvY2Vzc2FuZG8uLi4nOwogICAgICAgICAgICBmZXRjaChhamF4dXJsLCB7IG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfSwgYm9keTogYm9keS50b1N0cmluZygpIH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGRhdGEpewogICAgICAgICAgICAgICAgaWYgKGRhdGEuc3VjY2VzcykgewogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCfinIUgJyArIGRhdGEuZGF0YS5tc2cpOwogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy52bTItY2Itcm93JykuZm9yRWFjaChmdW5jdGlvbihjYil7IGNiLmNoZWNrZWQgPSBmYWxzZTsgfSk7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0QWxsLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVCYXIoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ+KdjCBFcnJvOiAnICsgKGRhdGEuZGF0YSA/IGRhdGEuZGF0YS5tc2cgOiAnRGVzY29uaGVjaWRvJykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KQogICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgYWxlcnQoJ+KdjCBFcnJvIGRlIHJlZGUuJyk7IH0pCiAgICAgICAgICAgIC5maW5hbGx5KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJ0bi50ZXh0Q29udGVudCA9IG1vZHVsZSA9PT0gJ2FxdWVjZXInID8gJ/CflKUgQWRpY2lvbmFyIGEgQXF1ZWNlcicgOiAn8J+ThSBGaWxhIFBvciBEYXRhJzsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJCdWxrQXF1ZWNlcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgYnVsa0FjdGlvbignYXF1ZWNlcicpOyB9KTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQnVsa0J5ZGF0ZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgYnVsa0FjdGlvbignYnlkYXRlJyk7IH0pOwogICAgfSkoKTsKICAgIDwvc2NyaXB0PgogICAgPC9kaXY+CiAgICA8P3BocAp9CgoKLy8gQUpBWCDigJQgRGV0YWxoZSBkbyBDb250YXRvCmFkZF9hY3Rpb24oICd3cF9hamF4X3ZtMl9jb250YWN0X2RldGFpbCcsICd2bTJfYWpheF9jb250YWN0X2RldGFpbCcgKTsKZnVuY3Rpb24gdm0yX2FqYXhfY29udGFjdF9kZXRhaWwoKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoICd2bTJfY29udGFjdF9kZXRhaWwnLCAnbm9uY2UnICk7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgd3BfZGllKCk7CgogICAgZ2xvYmFsICR3cGRiOwogICAgJGtvbW1vX2lkID0gYWJzaW50KCAkX1BPU1RbJ2tvbW1vX2lkJ10gPz8gMCApOwogICAgaWYgKCAhICRrb21tb19pZCApIHdwX3NlbmRfanNvbl9lcnJvcigpOwoKICAgICRsZWFkID0gJHdwZGItPmdldF9yb3coICR3cGRiLT5wcmVwYXJlKAogICAgICAgICJTRUxFQ1QgKiwgZGF0YV9ldmVudG8gYXMgZXZfZGF0ZSBGUk9NIHskd3BkYi0+cHJlZml4fXZtX2tvbW1vX2xlYWRzIFdIRVJFIGtvbW1vX2lkID0gJWQgTElNSVQgMSIsCiAgICAgICAgJGtvbW1vX2lkCiAgICApICk7CiAgICBpZiAoICEgJGxlYWQgKSB3cF9zZW5kX2pzb25fZXJyb3IoIFsnbXNnJz0+J0xlYWQgbsOjbyBlbmNvbnRyYWRvJ10gKTsKCiAgICAvLyBXQSBzZW5kcwogICAgJHdhX2xvZ3MgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoICR3cGRiLT5wcmVwYXJlKAogICAgICAgICJTRUxFQ1QgKiBGUk9NIHskd3BkYi0+cHJlZml4fXZtX3dhcm11cF9sb2cgV0hFUkUgbGVhZF9pZCA9ICVkIE9SREVSIEJZIHNlbnRfYXQgREVTQyBMSU1JVCAyMCIsCiAgICAgICAgJGtvbW1vX2lkCiAgICApICk7CiAgICAkd2FfY291bnQgPSBjb3VudCggJHdhX2xvZ3MgKTsKCiAgICAvLyBXb29Db21tZXJjZSBvcmRlcnMgYnkgcGhvbmUKICAgICRwaG9uZV9jbGVhbiA9IHByZWdfcmVwbGFjZSggJy9cRC8nLCAnJywgJGxlYWQtPnBob25lID8/ICcnICk7CiAgICAkd2Nfb3JkZXJzICAgPSBbXTsKICAgIGlmICggJHBob25lX2NsZWFuICYmIHN0cmxlbigkcGhvbmVfY2xlYW4pID49IDggKSB7CiAgICAgICAgJHBob25lX3N1ZmZpeCA9IHN1YnN0ciggJHBob25lX2NsZWFuLCAtOSApOwogICAgICAgIC8vIFRyeSBIUE9TIGZpcnN0ICh3Y19vcmRlcnMgKyB3Y19vcmRlcnNfYWRkcmVzc2VzKQogICAgICAgICR3Y190YWJsZSA9ICR3cGRiLT5wcmVmaXggLiAnd2Nfb3JkZXJzJzsKICAgICAgICBpZiAoICR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICckd2NfdGFibGUnIikgPT09ICR3Y190YWJsZSApIHsKICAgICAgICAgICAgJHdjX29yZGVycyA9ICR3cGRiLT5nZXRfcmVzdWx0cyggJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIG8uaWQsIG8uc3RhdHVzLCBvLnRvdGFsX2Ftb3VudCwgby5kYXRlX2NyZWF0ZWRfZ210LCBvYS5waG9uZQogICAgICAgICAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9d2Nfb3JkZXJzIG8KICAgICAgICAgICAgICAgICBMRUZUIEpPSU4geyR3cGRiLT5wcmVmaXh9d2Nfb3JkZXJzX2FkZHJlc3NlcyBvYSBPTiBvYS5vcmRlcl9pZCA9IG8uaWQgQU5EIG9hLmFkZHJlc3NfdHlwZSA9ICdiaWxsaW5nJwogICAgICAgICAgICAgICAgIFdIRVJFIG9hLnBob25lIExJS0UgJXMKICAgICAgICAgICAgICAgICBPUkRFUiBCWSBvLmRhdGVfY3JlYXRlZF9nbXQgREVTQyBMSU1JVCAxMCIsCiAgICAgICAgICAgICAgICAnJScgLiAkcGhvbmVfc3VmZml4CiAgICAgICAgICAgICkgKTsKICAgICAgICB9CiAgICAgICAgLy8gRmFsbGJhY2s6IHBvc3RtZXRhIChsZWdhY3kpCiAgICAgICAgaWYgKCBlbXB0eSgkd2Nfb3JkZXJzKSApIHsKICAgICAgICAgICAgJHdjX29yZGVycyA9ICR3cGRiLT5nZXRfcmVzdWx0cyggJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIHAuSUQgYXMgaWQsIHAucG9zdF9zdGF0dXMgYXMgc3RhdHVzLCBwbTIubWV0YV92YWx1ZSBhcyB0b3RhbF9hbW91bnQsIHAucG9zdF9kYXRlIGFzIGRhdGVfY3JlYXRlZF9nbXQKICAgICAgICAgICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXBvc3RzIHAKICAgICAgICAgICAgICAgICBKT0lOIHskd3BkYi0+cHJlZml4fXBvc3RtZXRhIHBtIE9OIHBtLnBvc3RfaWQgPSBwLklEIEFORCBwbS5tZXRhX2tleSA9ICdfYmlsbGluZ19waG9uZScgQU5EIHBtLm1ldGFfdmFsdWUgTElLRSAlcwogICAgICAgICAgICAgICAgIExFRlQgSk9JTiB7JHdwZGItPnByZWZpeH1wb3N0bWV0YSBwbTIgT04gcG0yLnBvc3RfaWQgPSBwLklEIEFORCBwbTIubWV0YV9rZXkgPSAnX29yZGVyX3RvdGFsJwogICAgICAgICAgICAgICAgIFdIRVJFIHAucG9zdF90eXBlID0gJ3Nob3Bfb3JkZXInCiAgICAgICAgICAgICAgICAgT1JERVIgQlkgcC5wb3N0X2RhdGUgREVTQyBMSU1JVCAxMCIsCiAgICAgICAgICAgICAgICAnJScgLiAkcGhvbmVfc3VmZml4CiAgICAgICAgICAgICkgKTsKICAgICAgICB9CiAgICB9CgogICAgJHNjb3JlICAgID0gdm0yX2xlYWRfc2NvcmUoICRsZWFkLCAkd2FfY291bnQgKTsKICAgICRldl9kYXRlICA9ICRsZWFkLT5ldl9kYXRlID8/ICcnOwogICAgJGV2X2ZtdCAgID0gJGV2X2RhdGUgPyAoIHN0cnRvdGltZSgkZXZfZGF0ZSkgPyBkYXRlKCdkL20vWScsIHN0cnRvdGltZSgkZXZfZGF0ZSkpIDogJGV2X2RhdGUgKSA6ICfigJQnOwogICAgJGNyZWF0ZWQgID0gJGxlYWQtPmNyZWF0ZWRfYXRfa29tbW8gPz8gJGxlYWQtPmxhc3Rfc3luY2VkID8/ICcnOwogICAgJG51dF9zdGF0ID0gJGxlYWQtPm51cnR1cmluZ19zdGF0dXMgPz8gJ3BlbmRpbmcnOwogICAgJGtvbW1vX3VybCA9ICdodHRwczovL3JsZWl0ZW1hcnRpbnMua29tbW8uY29tL2xlYWRzL2RldGFpbC8nIC4gJGxlYWQtPmtvbW1vX2lkOwogICAgJHBob25lX3dhICA9IHByZWdfcmVwbGFjZSgnL1xELycsJycsJGxlYWQtPnBob25lPz8nJyk7CgogICAgLy8gW3YxLjUuOTNdIEVtYWlsIGRvIGNvbnRhdG8gKHZtMl9jb250YWN0cykKICAgICRjb250YWN0X2VtYWlsID0gJyc7CiAgICBpZiAoICRwaG9uZV93YSApIHsKICAgICAgICAkY3Rfcm93ID0gJHdwZGItPmdldF9yb3coJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICJTRUxFQ1QgZW1haWwgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfY29udGFjdHMgV0hFUkUgcGhvbmUgPSAlcyBMSU1JVCAxIiwKICAgICAgICAgICAgJHBob25lX3dhCiAgICAgICAgKSk7CiAgICAgICAgJGNvbnRhY3RfZW1haWwgPSAkY3Rfcm93LT5lbWFpbCA/PyAnJzsKICAgIH0KCiAgICAkbHR2ID0gMDsKICAgIGZvcmVhY2ggKCR3Y19vcmRlcnMgYXMgJG9yZCkgeyAkbHR2ICs9IChmbG9hdCkkb3JkLT50b3RhbF9hbW91bnQ7IH0KCiAgICBvYl9zdGFydCgpOwogICAgPz4KICAgIDxkaXYgY2xhc3M9InZtMi1kZXRhaWwtZ3JpZCI+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWZpZWxkIj48bGFiZWw+U2NvcmU8L2xhYmVsPjw/cGhwIGVjaG8gdm0yX3Njb3JlX2JhZGdlKCRzY29yZSk7ID8+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWZpZWxkIj48bGFiZWw+RXN0w6FnaW88L2xhYmVsPjw/cGhwIGVjaG8gdm0yX3N0YWdlX2xhYmVsKCRsZWFkLT5zdGF0dXNfaWQpOyA/PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1maWVsZCI+PGxhYmVsPkRhdGEgZG8gRXZlbnRvPC9sYWJlbD48P3BocCBlY2hvIGVzY19odG1sKCRldl9mbXQpOyA/PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1maWVsZCI+PGxhYmVsPk51cnR1cmluZzwvbGFiZWw+PGNvZGUgc3R5bGU9ImZvbnQtc2l6ZToxMXB4Ij48P3BocCBlY2hvIGVzY19odG1sKCRudXRfc3RhdCk7ID8+PC9jb2RlPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1maWVsZCI+PGxhYmVsPktvbW1vIElEPC9sYWJlbD48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YSI+PD9waHAgZWNobyBlc2NfaHRtbCgkbGVhZC0+a29tbW9faWQpOyA/Pjwvc3Bhbj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZmllbGQiPjxsYWJlbD5MZWFkIGNyaWFkbzwvbGFiZWw+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NzYwNmEiPjw/cGhwIGVjaG8gJGNyZWF0ZWQgPyB2bTJfbG9jYWxfZGF0ZSgnZC9tL1knLCAkY3JlYXRlZCkgOiAn4oCUJzsgPz48L3NwYW4+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWZpZWxkIiBzdHlsZT0iZ3JpZC1jb2x1bW46c3BhbiAyIj4KICAgICAgICAgICAgPGxhYmVsPvCfk6cgRW1haWw8L2xhYmVsPgogICAgICAgICAgICA8P3BocCBpZiAoJGNvbnRhY3RfZW1haWwpOiA/PgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzIyNzFiMSI+PD9waHAgZWNobyBlc2NfaHRtbCgkY29udGFjdF9lbWFpbCk7ID8+PC9zcGFuPgogICAgICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6I2JiYjtmb250LXNpemU6MTFweCI+4oCUIG7Do28gY2FwdHVyYWRvPC9zcGFuPgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8P3BocCBpZiAoJGx0diA+IDApOiA/PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1maWVsZCIgc3R5bGU9ImdyaWQtY29sdW1uOnNwYW4gMiI+PGxhYmVsPkxUViAoV29vQ29tbWVyY2UpPC9sYWJlbD48c3Ryb25nIHN0eWxlPSJjb2xvcjojMmU3ZDMyIj5SJCA8P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJGx0diwyLCcsJywnLicpOyA/Pjwvc3Ryb25nPjw/cGhwIGVjaG8gJyDigJQgJyAuIGNvdW50KCR3Y19vcmRlcnMpIC4gJyBwZWRpZG8ocyknOyA/PjwvZGl2PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idm0yLXRpbWVsaW5lIj4KICAgICAgICA8aDQ+8J+TiyBUaW1lbGluZTwvaDQ+CgogICAgICAgIDw/cGhwIGlmICgkY3JlYXRlZCk6ID8+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLXRsLWl0ZW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdGwtaWNvbiI+8J+TpTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdGwtY29udGVudCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdGwtdGl0bGUiPkxlYWQgY3JpYWRvIG5vIEtvbW1vPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdGwtdGltZSI+PD9waHAgZWNobyB2bTJfbG9jYWxfZGF0ZSgnZC9tL1kgSDppJywgJGNyZWF0ZWQpOyA/PjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KCiAgICAgICAgPD9waHAgZm9yZWFjaCAoJHdjX29yZGVycyBhcyAkb3JkKToKICAgICAgICAgICAgJHN0YXR1c19pY29uID0gaW5fYXJyYXkoJG9yZC0+c3RhdHVzLCBbJ3djLXByb2Nlc3NpbmcnLCdwcm9jZXNzaW5nJywnd2Mtc2lnbmluZy1wZW5kaW5nJywnc2lnbmluZy1wZW5kaW5nJywnd2MtY29udHJhY3Qtc2lnbmVkJywnY29udHJhY3Qtc2lnbmVkJ10pID8gJ+KchScgOiAoIGluX2FycmF5KCRvcmQtPnN0YXR1cyxbJ3djLWNvbXBsZXRlZCcsJ2NvbXBsZXRlZCddKSA/ICfwn4+GJyA6ICfwn5uSJyApOwogICAgICAgICAgICAkdG90YWxfZm10ICAgPSBudW1iZXJfZm9ybWF0KChmbG9hdCkkb3JkLT50b3RhbF9hbW91bnQsIDIsICcsJywgJy4nKTsKICAgICAgICAgICAgJG9yZGVyX2RhdGUgID0gdm0yX2xvY2FsX2RhdGUoJ2QvbS9ZIEg6aScsICRvcmQtPmRhdGVfY3JlYXRlZF9nbXQpOwogICAgICAgID8+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLXRsLWl0ZW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdGwtaWNvbiI+PD9waHAgZWNobyAkc3RhdHVzX2ljb247ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi10bC1jb250ZW50Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi10bC10aXRsZSI+UGVkaWRvICM8P3BocCBlY2hvIGVzY19odG1sKCRvcmQtPmlkKTsgPz4g4oCUIFIkIDw/cGhwIGVjaG8gJHRvdGFsX2ZtdDsgPz48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi10bC10aW1lIj48P3BocCBlY2hvICRvcmRlcl9kYXRlOyA/PiDCtyA8P3BocCBlY2hvIGVzY19odG1sKCRvcmQtPnN0YXR1cyk7ID8+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CgogICAgICAgIDw/cGhwIGZvcmVhY2ggKCR3YV9sb2dzIGFzICR3YSk6CiAgICAgICAgICAgICRncnBfbGFiZWxzID0gWydkMSc9PidEKzEnLCdkNyc9PidEKzcnLCdkMTUnPT4nRCsxNScsJ2QzMCc9PidEKzMwJywnaG90Jz0+J0hPVCcsJ2V2ZW50X3dlZWsnPT4nRXN0YSBTZW1hbmEnLCdldmVudF9xdWluemVuYSc9PidRdWluemVuYScsJ2V2ZW50X21lcyc9PidNw6pzJywnZXZlbnRfcGFzdCc9PidQYXNzYWRvJ107CiAgICAgICAgICAgICRncnBfbGFiZWwgID0gJGdycF9sYWJlbHNbJHdhLT5ncm91cF9rZXldID8/IGVzY19odG1sKCR3YS0+Z3JvdXBfa2V5ID8/ICdBcXVlY2VyJyk7CiAgICAgICAgICAgICRtc2dfc2hvcnQgID0gbWJfc3Vic3RyKCR3YS0+bWVzc2FnZSA/PyAnJywgMCwgNjApOwogICAgICAgICAgICBpZiAobWJfc3RybGVuKCR3YS0+bWVzc2FnZT8/JycpID4gNjApICRtc2dfc2hvcnQgLj0gJ+KApic7CiAgICAgICAgPz4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdGwtaXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi10bC1pY29uIj7wn5OoPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi10bC1jb250ZW50Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi10bC10aXRsZSI+V0EgZW52aWFkbyDigJQgPD9waHAgZWNobyAkZ3JwX2xhYmVsOyA/PjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXRsLXRpbWUiPjw/cGhwIGVjaG8gdm0yX2xvY2FsX2RhdGUoJ2QvbS9ZIEg6aScsICR3YS0+c2VudF9hdCk7ID8+PC9kaXY+CiAgICAgICAgICAgICAgICA8P3BocCBpZiAoJG1zZ19zaG9ydCk6ID8+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNTc2MDZhO21hcmdpbi10b3A6MnB4O2ZvbnQtc3R5bGU6aXRhbGljIj4iPD9waHAgZWNobyBlc2NfaHRtbCgkbXNnX3Nob3J0KTsgPz4iPC9kaXY+CiAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KCiAgICAgICAgPD9waHAgaWYgKCBlbXB0eSgkd2FfbG9ncykgJiYgZW1wdHkoJHdjX29yZGVycykgJiYgISRjcmVhdGVkICk6ID8+CiAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiM1NzYwNmE7Zm9udC1zaXplOjEzcHgiPk5lbmh1bWEgaW50ZXJhw6fDo28gcmVnaXN0cmFkYSBhaW5kYS48L3A+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICA8L2Rpdj4KICAgIDw/cGhwCiAgICAkaHRtbCA9IG9iX2dldF9jbGVhbigpOwoKICAgICRhY3Rpb25zX2h0bWwgPSAnJzsKICAgICRhY3Rpb25zX2h0bWwgLj0gJzxhIGNsYXNzPSJ2bTItYnRuLWtvbW1vIiBocmVmPSInIC4gZXNjX3VybCgka29tbW9fdXJsKSAuICciIHRhcmdldD0iX2JsYW5rIj7wn5SXIEtvbW1vPC9hPic7CiAgICBpZiAoJHBob25lX3dhKSB7CiAgICAgICAgJGFjdGlvbnNfaHRtbCAuPSAnPGEgY2xhc3M9InZtMi1idG4td2EiIGhyZWY9Imh0dHBzOi8vd2EubWUvJyAuIGVzY19hdHRyKCRwaG9uZV93YSkgLiAnIiB0YXJnZXQ9Il9ibGFuayI+8J+SrCBXaGF0c0FwcDwvYT4nOwogICAgfQogICAgaWYgKCRjb250YWN0X2VtYWlsKSB7CiAgICAgICAgJGFjdGlvbnNfaHRtbCAuPSAnPGEgY2xhc3M9InZtMi1idG4tc20iIGhyZWY9Im1haWx0bzonIC4gZXNjX2F0dHIoJGNvbnRhY3RfZW1haWwpIC4gJyIgc3R5bGU9ImJhY2tncm91bmQ6IzAwNzlkMyIgdGFyZ2V0PSJfYmxhbmsiPvCfk6cgRW1haWw8L2E+JzsKICAgIH0KCiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ2h0bWwnPT4kaHRtbCwnYWN0aW9ucyc9PiRhY3Rpb25zX2h0bWxdKTsKfQoKCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBNT0RVTEU6IEF1dG9tYcOnw7VlcyAoOCB0YWJzKQovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8vIOKUgOKUgOKUgCBIZWxwZXI6IFRlc3QgU2VuZCBCb3gg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9yZW5kZXJfdGVzdF9ib3goICRib3hfaWQsICRjaGFubmVsX2tleSwgJGRlZmF1bHRfbXNnID0gJycsICRkZWZhdWx0X3RlbXBsYXRlID0gJycgKSB7CiAgICAkbm9uY2UgICAgPSB3cF9jcmVhdGVfbm9uY2UoICd2bTJfdGVzdF9zZW5kJyApOwogICAgJGNoYW5uZWxzID0gdm0yX2NoYW5uZWxzKCk7CiAgICAkaXNfd2FiYSAgPSBpc3NldCgkY2hhbm5lbHNbJGNoYW5uZWxfa2V5XSkgJiYgJGNoYW5uZWxzWyRjaGFubmVsX2tleV1bJ3R5cGUnXSA9PT0gJ3dhYmEnOwogICAgPz4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2YwZjdmZjtib3JkZXI6MXB4IGRhc2hlZCAjMDA3OWQzO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNHB4O21hcmdpbi10b3A6MTRweCI+CiAgICAgICAgPHN0cm9uZyBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6IzAwNzlkMyI+8J+nqiBUZXN0YXIgRW52aW88L3N0cm9uZz4KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDo4cHgiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4OjAgMCAxODBweDttaW4td2lkdGg6MTQwcHgiPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206M3B4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+TsSBDZWx1bGFyIGRlc3Rpbm88L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ2bTJ0Yl88P3BocCBlY2hvIGVzY19hdHRyKCRib3hfaWQpOyA/Pl9waG9uZSIKICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iNTUxMTk5OTg4Nzc2NiIKICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjZweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjYjBjNGQ4O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfd2FiYSk6ID8+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsZXg6MjttaW4td2lkdGg6MTgwcHgiPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206M3B4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+TiyBUZW1wbGF0ZSBXQUJBPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9InZtMnRiXzw/cGhwIGVjaG8gZXNjX2F0dHIoJGJveF9pZCk7ID8+X3RtcGwiCiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNiMGM0ZDg7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX3dhYmFfdGVtcGxhdGVfb3B0aW9uc19odG1sKCRkZWZhdWx0X3RlbXBsYXRlKTsgPz4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZWxzZTogPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZmxleDoyO21pbi13aWR0aDoxODBweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTozcHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5KsIE1lbnNhZ2VtPC9sYWJlbD4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0idm0ydGJfPD9waHAgZWNobyBlc2NfYXR0cigkYm94X2lkKTsgPz5fbXNnIiByb3dzPSIyIgogICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNiMGM0ZDg7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEycHg7cmVzaXplOnZlcnRpY2FsIj48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgkZGVmYXVsdF9tc2cpOyA/PjwvdGV4dGFyZWE+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHgiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iCiAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InZtMlRlc3RCb3goJzw/cGhwIGVjaG8gZXNjX2pzKCRib3hfaWQpOyA/PicsJzw/cGhwIGVjaG8gZXNjX2pzKCRjaGFubmVsX2tleSk7ID8+JywnPD9waHAgZWNobyBlc2NfanMoJG5vbmNlKTsgPz4nLDw/cGhwIGVjaG8gJGlzX3dhYmEgPyAndHJ1ZScgOiAnZmFsc2UnOyA/PikiCiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiMwMDc5ZDM7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6NnB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4O3doaXRlLXNwYWNlOm5vd3JhcCI+CiAgICAgICAgICAgICAgICAgICAg4pa277iPIEVudmlhciBUZXN0ZQogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJ2bTJ0Yl88P3BocCBlY2hvIGVzY19hdHRyKCRib3hfaWQpOyA/Pl9yZXN1bHQiIHN0eWxlPSJmb250LXNpemU6MTJweDttaW4taGVpZ2h0OjE2cHgiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPD9waHAKfQoKZnVuY3Rpb24gdm0yX2F1dG9tYWNvZXNfcGFnZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKCiAgICAvLyBIYW5kbGUgZm9ybSBzYXZlCiAgICBpZiAoIGlzc2V0KCRfUE9TVFsndm0yX2F1dG9fc2F2ZSddKSAmJiBjaGVja19hZG1pbl9yZWZlcmVyKCd2bTJfYXV0b19zYXZlJykgKSB7CiAgICAgICAgJGJvb2xfb3B0cyA9IFsndm0yX2FxdWVjZXJfa2lsbCcsJ3ZtMl9hcXVlY2VyX2NoYW5uZWwnLAogICAgICAgICAgICAgICAgICAgICAgJ3ZtMl9hcXVlY2VyX2QxX29uJywndm0yX2FxdWVjZXJfZDFfdGVtcGxhdGUnLCd2bTJfYXF1ZWNlcl9kMV9tc2cnLAogICAgICAgICAgICAgICAgICAgICAgJ3ZtMl9hcXVlY2VyX2Q3X29uJywndm0yX2FxdWVjZXJfZDdfdGVtcGxhdGUnLCd2bTJfYXF1ZWNlcl9kN19tc2cnLAogICAgICAgICAgICAgICAgICAgICAgJ3ZtMl9hcXVlY2VyX2QxNV9vbicsJ3ZtMl9hcXVlY2VyX2QxNV90ZW1wbGF0ZScsJ3ZtMl9hcXVlY2VyX2QxNV9tc2cnLAogICAgICAgICAgICAgICAgICAgICAgJ3ZtMl9hcXVlY2VyX2QzMF9vbicsJ3ZtMl9hcXVlY2VyX2QzMF90ZW1wbGF0ZScsJ3ZtMl9hcXVlY2VyX2QzMF9tc2cnLAogICAgICAgICAgICAgICAgICAgICAgJ3ZtMl9ieWRhdGVfa2lsbCcsJ3ZtMl9ieWRhdGVfY2hhbm5lbCcsCiAgICAgICAgICAgICAgICAgICAgICAndm0yX2F1dG9fYXF1ZWNlcl9vbicsJ3ZtMl9hdXRvX2FxdWVjZXJfdGhyZXNob2xkJywKICAgICAgICAgICAgICAgICAgICAgICd2bTJfYXV0b19hcXVlY2VyX2NoYW5uZWwnLCd2bTJfYXV0b19hcXVlY2VyX3RlbXBsYXRlJywKICAgICAgICAgICAgICAgICAgICAgICd2bTJfYXV0b19hcXVlY2VyX2Nvb2xkb3duJywndm0yX2F1dG9fYXF1ZWNlcl9iYXRjaCcsJ3ZtMl9hdXRvX2FxdWVjZXJfbXNnJywKICAgICAgICAgICAgICAgICAgICAgICd2bTJfYXV0b19hcXVlY2VyX2VtYWlsX29uJywndm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9zdWJqZWN0Jywndm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9ib2R5JywKICAgICAgICAgICAgICAgICAgICAgICd2bTJfaG90X29uJywndm0yX2hvdF9raWxsJywndm0yX2hvdF9jaGFubmVsJywndm0yX2hvdF90ZW1wbGF0ZScsCiAgICAgICAgICAgICAgICAgICAgICAndm0yX2hvdF9jb29sZG93bicsJ3ZtMl9ob3RfYmF0Y2gnLCd2bTJfaG90X21zZycsCiAgICAgICAgICAgICAgICAgICAgICAndm0yX2hvdF9lbWFpbF9vbicsJ3ZtMl9ob3RfZW1haWxfc3ViamVjdCcsJ3ZtMl9ob3RfZW1haWxfYm9keScsCiAgICAgICAgICAgICAgICAgICAgICAgJ3ZtMl9ieWRhdGVfZW1haWxfb24nLCd2bTJfYnlkYXRlX2VtYWlsX3N1YmplY3QnLCd2bTJfYnlkYXRlX2VtYWlsX2JvZHknXTsKICAgICAgICBmb3JlYWNoICgkYm9vbF9vcHRzIGFzICRvcHQpIHsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbigkb3B0LCBpc3NldCgkX1BPU1RbJG9wdF0pID8gc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoJF9QT1NUWyRvcHRdKSA6ICcwJyk7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKFsnc2VtYW5hJywncXVpbnplbmEnLCdtZXMnLCd0cmVzX21lc2VzJywnc2Vpc19tZXNlcycsJ2RlcG9pcycsJ3Bhc3NhZG8nXSBhcyAkZykgewogICAgICAgICAgICBmb3JlYWNoIChbJ29uJywndGVtcGxhdGUnLCdtc2cnXSBhcyAkZikgewogICAgICAgICAgICAgICAgJGsgPSAidm0yX2J5ZGF0ZV97JGd9X3skZn0iOwogICAgICAgICAgICAgICAgdXBkYXRlX29wdGlvbigkaywgaXNzZXQoJF9QT1NUWyRrXSkgPyBzYW5pdGl6ZV90ZXh0YXJlYV9maWVsZCgkX1BPU1RbJGtdKSA6ICcwJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIGlzLWRpc21pc3NpYmxlIj48cD7inIUgQ29uZmlndXJhw6fDtWVzIHNhbHZhcyBjb20gc3VjZXNzby48L3A+PC9kaXY+JzsKICAgIH0KCiAgICAkYWN0aXZlX3RhYiA9IGlzc2V0KCRfR0VUWyd0YWInXSkgPyBzYW5pdGl6ZV9rZXkoJF9HRVRbJ3RhYiddKSA6ICdhcXVlY2VyJzsKCiAgICAvLyBTZXR0aW5ncwogICAgJGFfa2lsbCAgICA9IGdldF9vcHRpb24oJ3ZtMl9hcXVlY2VyX2tpbGwnLCAnMScpOwogICAgJGFfY2hhbm5lbCA9IGdldF9vcHRpb24oJ3ZtMl9hcXVlY2VyX2NoYW5uZWwnLCAnemFwaV83NTUxJyk7CiAgICAkYmRfa2lsbCAgID0gZ2V0X29wdGlvbigndm0yX2J5ZGF0ZV9raWxsJywgJzEnKTsKICAgICRiZF9jaCAgICAgPSBnZXRfb3B0aW9uKCd2bTJfYnlkYXRlX2NoYW5uZWwnLCAnemFwaV83NTUxJyk7CgogICAgJHdhYmFfdHBscyA9IHZtMl93YWJhX3RlbXBsYXRlc19saXN0KCk7CgogICAgJHN0ZXBzID0gWwogICAgICAgICdkMScgID0+IFsnbGFiZWwnPT4nRCsxJywgICdkZWxheSc9PjEsICAnZGVmYXVsdF90bXBsJz0+J3ZtX3Bvc19qYW5lbGFfZDMnLCAnZGVmYXVsdF9tc2cnPT4iT2kge25vbWV9ISDwn5GLIFZpIHF1ZSB2b2PDqiBhaW5kYSBlc3TDoSBwZXNxdWlzYW5kbyBhdHJhw6fDtWVzIHBhcmEgc3VhIGZlc3RhLiBQb3NzbyB0ZSBhanVkYXIgYSBlbmNvbnRyYXIgYSBvcMOnw6NvIHBlcmZlaXRhPyDwn46JIl0sCiAgICAgICAgJ2Q3JyAgPT4gWydsYWJlbCc9PidEKzcnLCAgJ2RlbGF5Jz0+NywgICdkZWZhdWx0X3RtcGwnPT4nNWRfd2FiYV9nZzkzOWknLCAgICdkZWZhdWx0X21zZyc9PiJPaSB7bm9tZX0hIPCfjJ8gQWluZGEgZXN0YW1vcyBjb20gc3VhIGRhdGEgZGlzcG9uw612ZWwuIFF1ZSB0YWwgZ2FyYW50aXIgYWdvcmE/IPCfkYciXSwKICAgICAgICAnZDE1JyA9PiBbJ2xhYmVsJz0+J0QrMTUnLCAnZGVsYXknPT4xNSwgJ2RlZmF1bHRfdG1wbCc9PicxNWRfd2FiYV9xbHdsZWsnLCAgJ2RlZmF1bHRfbXNnJz0+Ik9pIHtub21lfSEg8J+OqiBTdWEgZmVzdGEgbWVyZWNlIG8gbWVsaG9yISBBaW5kYSB0ZW1vcyBkaXNwb25pYmlsaWRhZGUuIFZhbW9zIGZlY2hhcj8iXSwKICAgICAgICAnZDMwJyA9PiBbJ2xhYmVsJz0+J0QrMzAnLCAnZGVsYXknPT4zMCwgJ2RlZmF1bHRfdG1wbCc9PiczMGRfd2FiYV9oMnR1cmgnLCAgJ2RlZmF1bHRfbXNnJz0+Ik9pIHtub21lfSEg8J+SqyBGYXogdW0gbcOqcyBkZXNkZSBub3NzbyDDumx0aW1vIGNvbnRhdG8uIEFpbmRhIHBvc3NvIGFqdWRhciBjb20gc3VhIGZlc3RhPyDwn6WzIl0sCiAgICBdOwoKICAgIC8vIENvdW50IGVsaWdpYmxlIHBlciBzdGVwIGZyb20gd2FybXVwX2xvZwogICAgJHN0ZXBfY291bnRzID0gW107CiAgICBmb3JlYWNoICgkc3RlcHMgYXMgJHNrZXkgPT4gJHN0ZXApIHsKICAgICAgICAkcHJldl9kID0gJHN0ZXBbJ2RlbGF5J10gLSAxOwogICAgICAgICRuZXh0X2QgPSAkc3RlcFsnZGVsYXknXSArIDY7CiAgICAgICAgJGNudCA9ICR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAiU0VMRUNUIENPVU5UKERJU1RJTkNUIGwubGVhZF9pZCkKICAgICAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9a29tbW9fbGVhZHMgbAogICAgICAgICAgICAgV0hFUkUgbC5zdGFnZSBOT1QgSU4gKCdsb3N0Jywnd29uJywnY29udHJhdG91JykKICAgICAgICAgICAgICAgQU5EIGwucGhvbmUgSVMgTk9UIE5VTEwgQU5EIGwucGhvbmUgIT0gJycKICAgICAgICAgICAgICAgQU5EIE5PVCBFWElTVFMgKAogICAgICAgICAgICAgICAgICAgU0VMRUNUIDEgRlJPTSB7JHdwZGItPnByZWZpeH13YXJtdXBfbG9nIHdsCiAgICAgICAgICAgICAgICAgICBXSEVSRSB3bC5sZWFkX2lkID0gbC5sZWFkX2lkIEFORCB3bC5ncm91cF9rZXkgPSAlcwogICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgIEFORCBsLmxhc3Rfc3luY2VkID49IE5PVygpIC0gSU5URVJWQUwgJWQgREFZCiAgICAgICAgICAgICAgIEFORCBsLmxhc3Rfc3luY2VkIDwgIE5PVygpIC0gSU5URVJWQUwgJWQgREFZIiwKICAgICAgICAgICAgJHNrZXksICRuZXh0X2QsICRwcmV2X2QKICAgICAgICApKTsKICAgICAgICAkc3RlcF9jb3VudHNbJHNrZXldID0gKGludCkkY250OwogICAgfQoKICAgIC8vIEJ5LWRhdGUgZ3JvdXBzCiAgICAkYmRfZ3JvdXBzID0gWwogICAgICAgICdzZW1hbmEnICAgICA9PiBbJ2xhYmVsJz0+J/CflLQgRXN0YSBzZW1hbmEnLCAnY29sb3InPT4nI2RjMzU0NScsICdkZic9PjAsICAgICdkdCc9PjcsICAgICd0bXBsJz0+J3ZtX3Bvc19qYW5lbGFfZDMnXSwKICAgICAgICAncXVpbnplbmEnICAgPT4gWydsYWJlbCc9Pifwn5+gIFF1aW56ZW5hJywgICAgJ2NvbG9yJz0+JyNmZDdlMTQnLCAnZGYnPT44LCAgICAnZHQnPT4xNCwgICAndG1wbCc9Pic1ZF93YWJhX2dnOTM5aSddLAogICAgICAgICdtZXMnICAgICAgICA9PiBbJ2xhYmVsJz0+J/Cfn6EgTcOqcycsICAgICAgICAgICdjb2xvcic9PicjZmZjMTA3JywgJ2RmJz0+MTUsICAgJ2R0Jz0+MzAsICAgJ3RtcGwnPT4nMTVkX3dhYmFfcWx3bGVrJ10sCiAgICAgICAgJ3RyZXNfbWVzZXMnID0+IFsnbGFiZWwnPT4n8J+foiAzIG1lc2VzJywgICAgICAnY29sb3InPT4nIzI4YTc0NScsICdkZic9PjMxLCAgICdkdCc9PjkwLCAgICd0bXBsJz0+JzMwZF93YWJhX2gydHVyaCddLAogICAgICAgICdzZWlzX21lc2VzJyA9PiBbJ2xhYmVsJz0+J/CflLUgNiBtZXNlcycsICAgICAgJ2NvbG9yJz0+JyMwMDdiZmYnLCAnZGYnPT45MSwgICAnZHQnPT4xODAsICAndG1wbCc9PiczMGRfd2FiYV9oMnR1cmgnXSwKICAgICAgICAnZGVwb2lzJyAgICAgPT4gWydsYWJlbCc9PifimqogRGVwb2lzJywgICAgICAgICdjb2xvcic9PicjNmM3NTdkJywgJ2RmJz0+MTgxLCAgJ2R0Jz0+OTk5OSwgJ3RtcGwnPT4nJ10sCiAgICAgICAgJ3Bhc3NhZG8nICAgID0+IFsnbGFiZWwnPT4n4qybIFBhc3NhZG8nLCAgICAgICAnY29sb3InPT4nIzM0M2E0MCcsICdkZic9Pi05OTk5LCdkdCc9Pi0xLCAgICd0bXBsJz0+J2NhcnRhb3ByZXNlbnRlJ10sCiAgICBdOwoKICAgICRiZF9jb3VudHMgPSBbXTsKICAgIGZvcmVhY2ggKCRiZF9ncm91cHMgYXMgJGdrZXkgPT4gJGcpIHsKICAgICAgICBpZiAoJGdrZXkgPT09ICdwYXNzYWRvJykgewogICAgICAgICAgICAkY250ID0gJHdwZGItPmdldF92YXIoCiAgICAgICAgICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9a29tbW9fbGVhZHMKICAgICAgICAgICAgICAgICBXSEVSRSBTVFJfVE9fREFURShkYXRhX2V2ZW50bywnJWQvJW0vJVknKSA8IENVUkRBVEUoKQogICAgICAgICAgICAgICAgICAgQU5EIGRhdGFfZXZlbnRvIFJFR0VYUCAnXlswLTldezJ9L1swLTldezJ9L1swLTldezR9JCciCiAgICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGNudCA9ICR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fWtvbW1vX2xlYWRzCiAgICAgICAgICAgICAgICAgV0hFUkUgU1RSX1RPX0RBVEUoZGF0YV9ldmVudG8sJyUlZC8lJW0vJSVZJykKICAgICAgICAgICAgICAgICAgICAgICBCRVRXRUVOIENVUkRBVEUoKSArIElOVEVSVkFMICVkIERBWSBBTkQgQ1VSREFURSgpICsgSU5URVJWQUwgJWQgREFZCiAgICAgICAgICAgICAgICAgICBBTkQgZGF0YV9ldmVudG8gUkVHRVhQICdeWzAtOV17Mn0vWzAtOV17Mn0vWzAtOV17NH0kJyIsCiAgICAgICAgICAgICAgICAkZ1snZGYnXSwgJGdbJ2R0J10KICAgICAgICAgICAgKSk7CiAgICAgICAgfQogICAgICAgICRiZF9jb3VudHNbJGdrZXldID0gKGludCkkY250OwogICAgfQoKICAgIC8vIFdBIFJlY292ZXJ5IHN0YXRzICh0YWJsZSBtYXkgbm90IGV4aXN0IOKAlCBzdXBwcmVzcyBlcnJvcnMpCiAgICAkd2Ffa2lsbCAgICA9IGdldF9vcHRpb24oJ3ZtX3dhX2tpbGxfc3dpdGNoJywgJzAnKTsKICAgICR3YV9jaGFubmVsID0gZ2V0X29wdGlvbigndm1fd2Ffc2VuZF9jaGFubmVsJywgJ3phcGlfMTg4NicpOwogICAgJHJlY190YWJsZSAgPSAkd3BkYi0+cHJlZml4IC4gJ3djX2NhcnRfcmVjb3ZlcnknOwogICAgJHRibF9leGlzdHMgPSAkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAnJHJlY190YWJsZSciKSA9PT0gJHJlY190YWJsZTsKICAgICR3YV90b3RhbCA9ICR3YV9wZW5kaW5nID0gJHdhX3NlbnQgPSAkd2FfcmVjb3ZlcmVkID0gMDsKICAgICRjYXJ0cyA9IFtdOwogICAgaWYgKCR0YmxfZXhpc3RzKSB7CiAgICAgICAgJHdhX3RvdGFsICAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICRyZWNfdGFibGUiKTsKICAgICAgICAkd2FfcGVuZGluZyAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHJlY190YWJsZSBXSEVSRSBzdGF0dXMgSU4gKCdwZW5kaW5nJywnY2FwdHVyZWQnKSIpOwogICAgICAgICR3YV9zZW50ICAgICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkcmVjX3RhYmxlIFdIRVJFIHN0YXR1cyA9ICdzZW50JyIpOwogICAgICAgICR3YV9yZWNvdmVyZWQgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkcmVjX3RhYmxlIFdIRVJFIHN0YXR1cyA9ICdyZWNvdmVyZWQnIik7CiAgICAgICAgJGNhcnRzICAgICAgICA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUICogRlJPTSAkcmVjX3RhYmxlIE9SREVSIEJZIGNyZWF0ZWRfYXQgREVTQyBMSU1JVCAxMCIpOwogICAgfQoKICAgIC8vIEV4aXQtSW50ZW50IHN0YXRzCiAgICAkZWlfc2hvd24gID0gKGludClnZXRfb3B0aW9uKCd2bV9laV9zdGF0X3Nob3dzJywgMCk7CiAgICAkZWlfY2xpY2tzID0gKGludClnZXRfb3B0aW9uKCd2bV9laV9zdGF0X2NsaWNrcycsIDApOwogICAgJGVpX3JhdGUgICA9ICRlaV9zaG93biA+IDAgPyByb3VuZCgkZWlfY2xpY2tzIC8gJGVpX3Nob3duICogMTAwLCAxKSA6IDA7CiAgICA/PgogICAgPGRpdiBjbGFzcz0id3JhcCB2bTItd3JhcCI+CiAgICA8aDE+8J+kliBBdXRvbWHDp8O1ZXM8L2gxPgoKICAgIDxzdHlsZT4KICAgIC52bTItYXV0by10YWJze2Rpc3BsYXk6ZmxleDtnYXA6M3B4O21hcmdpbi1ib3R0b206MjBweDtmbGV4LXdyYXA6d3JhcDtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZTBlMGUwO3BhZGRpbmctYm90dG9tOjB9CiAgICAudm0yLWF1dG8tdGFie3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojNTc2MDZhO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4fQogICAgLnZtMi1hdXRvLXRhYjpob3ZlcntiYWNrZ3JvdW5kOiNmNmY4ZmE7Y29sb3I6IzFkMjMyN30KICAgIC52bTItYXV0by10YWIuYWN0aXZle2JhY2tncm91bmQ6I2ZmZjtib3JkZXItY29sb3I6I2UwZTBlMDtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY7Y29sb3I6IzFkMjMyNztmb250LXdlaWdodDo3MDB9CiAgICAudm0yLXRhYi1ib2R5e2Rpc3BsYXk6bm9uZX0udm0yLXRhYi1ib2R5LmFjdGl2ZXtkaXNwbGF5OmJsb2NrfQogICAgLnZtMi1zdGVwLWNhcmR7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxOHB4O21hcmdpbi1ib3R0b206MTRweDtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4wNSl9CiAgICAudm0yLXN0ZXAtaGRye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToxNHB4O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHh9CiAgICAudm0yLXN0ZXAtYmFkZ2V7YmFja2dyb3VuZDojMWQyMzI3O2NvbG9yOiNmZmY7cGFkZGluZzo0cHggMTJweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwfQogICAgLnZtMi1lbGlnaWJsZXtiYWNrZ3JvdW5kOiNlOGY0ZmQ7Y29sb3I6IzAwNjZjYztwYWRkaW5nOjRweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDB9CiAgICAudm0yLXN0ZXAtZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjEycHh9CiAgICBAbWVkaWEobWF4LXdpZHRoOjY0MHB4KXsudm0yLXN0ZXAtZ3JpZHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX0KICAgIC52bTItY3RybC1iYXJ7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMnB4IDE4cHg7bWFyZ2luLWJvdHRvbToxOHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjE2cHg7ZmxleC13cmFwOndyYXB9CiAgICAudm0yLWN0cmwtYmFyIGxhYmVse2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM1NzYwNmE7Zm9udC13ZWlnaHQ6NTAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweH0KICAgIC52bTItY3RybC1iYXIgc2VsZWN0e2ZvbnQtc2l6ZToxM3B4fQogICAgLnZtMi1rcy1vbntkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kOiNmZWYyZjI7Y29sb3I6I2RjMjYyNjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwfQogICAgLnZtMi1rcy1vZmZ7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDojZjBmZGY0O2NvbG9yOiMxNmEzNGE7Ym9yZGVyOjFweCBzb2xpZCAjODZlZmFjO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMH0KICAgIC52bTItYmQtZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDI2MHB4LDFmcikpO2dhcDoxMnB4fQogICAgLnZtMi1iZC1jYXJke2JhY2tncm91bmQ6I2ZmZjtib3JkZXItbGVmdDo0cHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE0cHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDUpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4xNXMgZWFzZX0KICAgIC52bTItYmQtY2FyZDpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSl9CiAgICAudm0yLWJkLWxibHtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo4cHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcn0KICAgIC52bTItYmQtbntmb250LXNpemU6MjZweDtmb250LXdlaWdodDo4MDA7bWFyZ2luLWJvdHRvbTo2cHh9CiAgICAudm0yLXN0YXQtcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsMWZyKTtnYXA6MTJweDttYXJnaW4tYm90dG9tOjIwcHh9CiAgICBAbWVkaWEobWF4LXdpZHRoOjYwMHB4KXsudm0yLXN0YXQtcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpfX0KICAgIC52bTItc3RhdC1taW5pe2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4xNXMgZWFzZX0KICAgIC52bTItc3RhdC1taW5pOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0ycHgpO2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKTtib3JkZXItY29sb3I6IzAwNzNhYX0KICAgIC52bTItc3RhdC1taW5pIC5ue2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjojMWQyMzI3fQogICAgLnZtMi1zdGF0LW1pbmkgLmx7Zm9udC1zaXplOjExcHg7Y29sb3I6IzU3NjA2YTttYXJnaW4tdG9wOjJweH0KICAgIC52bTItcGxhY2Vob2xkZXJ7YmFja2dyb3VuZDojZjZmOGZhO2JvcmRlcjoycHggZGFzaGVkICNkMGQ3ZGU7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6NTBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNTc2MDZhfQogICAgLnZtMi1wbGFjZWhvbGRlciBoM3tmb250LXNpemU6MThweDtjb2xvcjojMWQyMzI3O21hcmdpbi1ib3R0b206OHB4fQogICAgLnZtMi1mbGQtbGJse2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM1NzYwNmE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjNweDtmb250LXdlaWdodDo1MDB9CiAgICAvKiDilIDilIAgS1BJIGNhcmRzIHVzYWRvcyBuYXMgdGFicyBDYXJyaW5obyBlIEV4aXQtSW50ZW50IOKUgOKUgCAqLwogICAgLnZtMi1rcGlze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxNjBweCwxZnIpKTtnYXA6MTJweDttYXJnaW4tYm90dG9tOjIwcHh9CiAgICAudm0yLWtwaXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE4cHggMjBweDtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4wNik7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1cyBlYXNlfQogICAgLnZtMi1rcGk6aG92ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7Ym94LXNoYWRvdzowIDRweCAxNHB4IHJnYmEoMCwwLDAsLjEzKTtib3JkZXItY29sb3I6IzAwNzNhYX0KICAgIC52bTIta3BpIC5sYWJlbHtmb250LXNpemU6MTFweDtjb2xvcjojODg4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouNXB4O21hcmdpbi1ib3R0b206OHB4O2ZvbnQtd2VpZ2h0OjYwMH0KICAgIC52bTIta3BpIC52YWx1ZXtmb250LXNpemU6MjhweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzFhMWExYTtsaW5lLWhlaWdodDoxfQogICAgLnZtMi1rcGkgLmRlbHRhe2ZvbnQtc2l6ZToxMnB4O21hcmdpbi10b3A6OHB4fQogICAgLnZtMi1rcGkgLmRlbHRhLnVwe2NvbG9yOiMyN2FlNjB9LnZtMi1rcGkgLmRlbHRhLmRvd257Y29sb3I6I2U3NGMzY30udm0yLWtwaSAuZGVsdGEubmV1dHJhbHtjb2xvcjojOTk5fQogICAgLyog4pSA4pSAIENhcmQgLyBHcmlkIGxheW91dCDilIDilIAgKi8KICAgIC52bTItZ3JpZDJ7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDMyMHB4LDFmcikpO2dhcDoxNnB4O21hcmdpbi1ib3R0b206MTZweH0KICAgIC52bTItY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjIwcHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDUpfQogICAgLnZtMi1jYXJkIGgze21hcmdpbjowIDAgMTZweDtmb250LXNpemU6MTVweDtjb2xvcjojMWQyMzI3O2ZvbnQtd2VpZ2h0OjcwMDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9CiAgICAvKiDilIDilIAgQnV0dG9ucyDilIDilIAgKi8KICAgIC52bTItYnRue2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzo4cHggMThweDtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7dHJhbnNpdGlvbjphbGwgLjE1czt0ZXh0LWRlY29yYXRpb246bm9uZX0KICAgIC52bTItYnRuLXByaW1hcnl7YmFja2dyb3VuZDojMjI3MWIxO2NvbG9yOiNmZmZ9LnZtMi1idG4tcHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kOiMxMzVlOTZ9CiAgICAudm0yLWJ0bi1zdWNjZXNze2JhY2tncm91bmQ6IzE2YTM0YTtjb2xvcjojZmZmfS52bTItYnRuLXN1Y2Nlc3M6aG92ZXJ7YmFja2dyb3VuZDojMTU4MDNkfQogICAgLnZtMi1idG4tZGFuZ2Vye2JhY2tncm91bmQ6I2RjMjYyNjtjb2xvcjojZmZmfS52bTItYnRuLWRhbmdlcjpob3ZlcntiYWNrZ3JvdW5kOiNiOTFjMWN9CiAgICAudm0yLWJ0bi1ncmF5e2JhY2tncm91bmQ6I2YxZjVmOTtjb2xvcjojMzc0MTUxO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMH0udm0yLWJ0bi1ncmF5OmhvdmVye2JhY2tncm91bmQ6I2U1ZTdlYn0KICAgIC52bTItYnRuLXNte3BhZGRpbmc6NXB4IDEycHg7Zm9udC1zaXplOjEycHh9CiAgICAvKiDilIDilIAgVGFibGUg4pSA4pSAICovCiAgICAudm0yLXRhYmxle3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZToxM3B4fQogICAgLnZtMi10YWJsZSB0aHtiYWNrZ3JvdW5kOiNmNmY4ZmE7cGFkZGluZzo5cHggMTJweDt0ZXh0LWFsaWduOmxlZnQ7Zm9udC1zaXplOjExcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOiM1NzYwNmE7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2UwZTBlMH0KICAgIC52bTItdGFibGUgdGR7cGFkZGluZzoxMHB4IDEycHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YwZjBmMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9CiAgICAudm0yLXRhYmxlIHRyOmhvdmVyIHRke2JhY2tncm91bmQ6I2ZhZmJmY30KICAgIC52bTItYmFkZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwfQogICAgLnZtMi1iYWRnZS1zZW50e2JhY2tncm91bmQ6I2QxZmFlNTtjb2xvcjojMDY1ZjQ2fQogICAgLnZtMi1iYWRnZS1wZW5kaW5ne2JhY2tncm91bmQ6I2ZlZjNjNztjb2xvcjojOTI0MDBlfQogICAgLnZtMi1iYWRnZS1mYWlsZWR7YmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiM5OTFiMWJ9CiAgICAudm0yLWJhZGdlLWNhbmNlbGxlZHtiYWNrZ3JvdW5kOiNkYmVhZmU7Y29sb3I6IzFlNDBhZn0KICAgIDwvc3R5bGU+CgogICAgPCEtLSBUYWIgTmF2aWdhdGlvbiAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1hdXRvLXRhYnMiPgogICAgPD9waHAKICAgICR0YWJzID0gWwogICAgICAgICdwaXBlbGluZScgID0+ICfwn5SBIFBpcGVsaW5lJywKICAgICAgICAnYXF1ZWNlcicgICA9PiAn8J+UpSBBcXVlY2VyIEQrWCcsCiAgICAgICAgJ2xlYWRzJyAgICAgPT4gJ/Cfjq8gTGVhZHMgSE9UJywKICAgICAgICAnYnlkYXRlJyAgICA9PiAn8J+ThSBQb3IgRGF0YScsCiAgICAgICAgJ2NhcnJpbmhvJyAgPT4gJ/Cfm5IgQ2FycmluaG8nLAogICAgICAgICdwb3B1cCcgICAgID0+ICfwn5KMIFBvcHVwJywKICAgICAgICAnZXhpdGludGVudCc9PiAn8J+aqiBFeGl0LUludGVudCcsCiAgICAgICAgJ3Bvc2V2ZW50bycgPT4gJ/CfjoEgUMOzcy1FdmVudG8nLAogICAgICAgICd1cHNlbGwnICAgID0+ICfwn5KOIFVwc2VsbCcsCiAgICAgICAgJ3BlZGlkb3MnICAgPT4gJ/Cfp74gUGVkaWRvcycsCiAgICBdOwogICAgZm9yZWFjaCAoJHRhYnMgYXMgJHRrID0+ICR0bCkgewogICAgICAgICRjbHMgPSAoJGFjdGl2ZV90YWIgPT09ICR0aykgPyAndm0yLWF1dG8tdGFiIGFjdGl2ZScgOiAndm0yLWF1dG8tdGFiJzsKICAgICAgICAkdXJsID0gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWF1dG9tYWNvZXMnLCd0YWInPT4kdGtdLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKTsKICAgICAgICBlY2hvICc8YSBocmVmPSInIC4gZXNjX3VybCgkdXJsKSAuICciIGNsYXNzPSInIC4gJGNscyAuICciPicgLiAkdGwgLiAnPC9hPic7CiAgICB9CiAgICA/PgogICAgPC9kaXY+CgogICAgPCEtLSA9PT09PSBUQUI6IFBJUEVMSU5FID09PT09IC0tPgogICAgPGRpdiBjbGFzcz0idm0yLXRhYi1ib2R5IDw/cGhwIGVjaG8gJGFjdGl2ZV90YWIgPT09ICdwaXBlbGluZScgPyAnYWN0aXZlJyA6ICcnOyA/PiI+CiAgICAgICAgPD9waHAgdm0yX3JlbmRlcl9waXBlbGluZV90YWIoKTsgPz4KICAgIDwvZGl2PgoKICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiPgogICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl9hdXRvX3NhdmUnKTsgPz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InZtMl9hdXRvX3NhdmUiIHZhbHVlPSIxIj4KCiAgICA8IS0tID09PT09IFRBQjogQVFVRUNFUiBEK1ggPT09PT0gLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItdGFiLWJvZHkgPD9waHAgZWNobyAkYWN0aXZlX3RhYiA9PT0gJ2FxdWVjZXInID8gJ2FjdGl2ZScgOiAnJzsgPz4iPgoKICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY3RybC1iYXIiPgogICAgICAgICAgICA8bGFiZWw+PHN0cm9uZz7wn5SlIEFxdWVjZXIgRCtYPC9zdHJvbmc+PC9sYWJlbD4KICAgICAgICAgICAgPGxhYmVsPktpbGwgU3dpdGNoOgogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfYXF1ZWNlcl9raWxsIj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIiA8P3BocCBzZWxlY3RlZCgkYV9raWxsLCcxJyk7ID8+PvCflLQgUEFSQURPPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCIgPD9waHAgc2VsZWN0ZWQoJGFfa2lsbCwnMCcpOyA/Pj7wn5+iIEFUSVZPPC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPGxhYmVsPkNhbmFsOgogICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0idm0yLWFxLWNoLXNlbCIgbmFtZT0idm0yX2FxdWVjZXJfY2hhbm5lbCIgb25jaGFuZ2U9InZtMlN0ZXBDaGFubmVsU3dpdGNoKCdhcScsIHRoaXMudmFsdWUpIj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIHZtMl9jaGFubmVsX29wdGlvbnNfaHRtbCggJGFfY2hhbm5lbCApOyA/PgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDw/cGhwIGVjaG8gJGFfa2lsbCA9PT0gJzEnID8gJzxzcGFuIGNsYXNzPSJ2bTIta3Mtb24iPvCflLQgUEFVU0FETzwvc3Bhbj4nIDogJzxzcGFuIGNsYXNzPSJ2bTIta3Mtb2ZmIj7wn5+iIEFUSVZPPC9zcGFuPic7ID8+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgaWQ9InZtMi1hcS1zdGVwcyI+CiAgICAgICAgPD9waHAgZm9yZWFjaCAoJHN0ZXBzIGFzICRza2V5ID0+ICRzdGVwKToKICAgICAgICAgICAgJHNfb24gICA9IGdldF9vcHRpb24oInZtMl9hcXVlY2VyX3skc2tleX1fb24iLCAnMCcpOwogICAgICAgICAgICAkc190bXBsID0gZ2V0X29wdGlvbigidm0yX2FxdWVjZXJfeyRza2V5fV90ZW1wbGF0ZSIsICRzdGVwWydkZWZhdWx0X3RtcGwnXSk7CiAgICAgICAgICAgICRzX21zZyAgPSBnZXRfb3B0aW9uKCJ2bTJfYXF1ZWNlcl97JHNrZXl9X21zZyIsICRzdGVwWydkZWZhdWx0X21zZyddKTsKICAgICAgICAgICAgJGNudCAgICA9ICRzdGVwX2NvdW50c1skc2tleV07CiAgICAgICAgPz4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItc3RlcC1jYXJkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXN0ZXAtaGRyIj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItc3RlcC1iYWRnZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkc3RlcFsnbGFiZWwnXSk7ID8+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojNTc2MDZhO2ZvbnQtc2l6ZToxM3B4Ij48P3BocCBlY2hvICRzdGVwWydkZWxheSddOyA/PiBkaWE8P3BocCBlY2hvICRzdGVwWydkZWxheSddPjE/J3MnOicnOyA/PiBhcMOzcyDDumx0aW1vIGNvbnRhdG88L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItZWxpZ2libGUiPjw/cGhwIGVjaG8gJGNudDsgPz4gZWxlZ8OtdmVpczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjVweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm0yX2FxdWVjZXJfPD9waHAgZWNobyAkc2tleTsgPz5fb24iIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCRzX29uLCcxJyk7ID8+PgogICAgICAgICAgICAgICAgICAgICAgICBBdGl2bwogICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1zdGVwLWdyaWQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWNvbC13YWJhIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWZsZC1sYmwiPvCfk4sgVGVtcGxhdGUgV0FCQTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtMl9hcXVlY2VyXzw/cGhwIGVjaG8gJHNrZXk7ID8+X3RlbXBsYXRlIiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX3dhYmFfdGVtcGxhdGVfb3B0aW9uc19odG1sKCAkc190bXBsICk7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1jb2wtemFwaSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1mbGQtbGJsIj7wn5KsIFRleHRvIFotQVBJIDxzbWFsbD4odmFyczoge25vbWV9LCB7dGVsZWZvbmV9KTwvc21hbGw+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ2bTJfYXF1ZWNlcl88P3BocCBlY2hvICRza2V5OyA/Pl9tc2ciIHN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDo3MnB4O3Jlc2l6ZTp2ZXJ0aWNhbDtmb250LXNpemU6MTJweCI+PD9waHAgZWNobyBlc2NfdGV4dGFyZWEoJHNfbXNnKTsgPz48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBpZiAoJGNudCA+IDApOiA/PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7dGV4dC1hbGlnbjpyaWdodCI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJhbGVydCgnRnVuw6fDo28gZGUgZW52aW8gZW0gZGVzZW52b2x2aW1lbnRvIOKAlCBGYXNlIDViLicpO3JldHVybiBmYWxzZTsiCiAgICAgICAgICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDojMDA3OWQzO2NvbG9yOiNmZmY7cGFkZGluZzo2cHggMTRweDtib3JkZXItcmFkaXVzOjZweDt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAg4pa277iPIEV4ZWN1dGFyIGFnb3JhICg8P3BocCBlY2hvICRjbnQ7ID8+KQogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICA8L2Rpdj48IS0tIC92bTItYXEtc3RlcHMgLS0+CgogICAgICAgIDw/cGhwIHZtMl9yZW5kZXJfdGVzdF9ib3goICdhcXVlY2VyJywgJGFfY2hhbm5lbCwgZ2V0X29wdGlvbigndm0yX2FxdWVjZXJfZDFfbXNnJywgJ09pIHtub21lfSEg8J+RiyBWaSBxdWUgdm9jw6ogYWluZGEgZXN0w6EgcGVzcXVpc2FuZG8gYXRyYcOnw7VlcyBwYXJhIHN1YSBmZXN0YS4gUG9zc28gdGUgYWp1ZGFyPycpLCBnZXRfb3B0aW9uKCd2bTJfYXF1ZWNlcl9kMV90ZW1wbGF0ZScsJycpICk7ID8+CgogICAgICAgIDwhLS0gW3YxLjUuOTNdIEVNQUlMIFBBUkFMRUxPIC0tPgogICAgICAgIDw/cGhwCiAgICAgICAgJGFxX2VtYWlsX29uICAgPSBnZXRfb3B0aW9uKCd2bTJfYXF1ZWNlcl9lbWFpbF9vbicsICcwJyk7CiAgICAgICAgJGFxX2VtYWlsX3N1YmogPSBnZXRfb3B0aW9uKCd2bTJfYXF1ZWNlcl9lbWFpbF9zdWJqZWN0JywgJ0FpbmRhIHBlbnNhbmRvIG5hIGZlc3RhPyBBIGdlbnRlIHBvZGUgYWp1ZGFyIPCfjoknKTsKICAgICAgICAkYXFfZW1haWxfYm9keSA9IGdldF9vcHRpb24oJ3ZtMl9hcXVlY2VyX2VtYWlsX2JvZHknLCAiT2kge25vbWV9IVxuXG5WaW1vcyBxdWUgdm9jw6ogcGVzcXVpc291IGF0cmHDp8O1ZXMgcGFyYSBzdWEgZmVzdGEgbmEgVml2YU1haXMgRXZlbnRvcy4gQWluZGEgbsOjbyBlbmNvbnRyb3UgbyBxdWUgcHJvY3VyYT9cblxuQWNlc3NlIGFnb3JhIGUgZXNjb2xoYSBlbnRyZSBjZW50ZW5hcyBkZSBhdHJhw6fDtWVzOlxuaHR0cHM6Ly9sb2phLnZpdmFtYWlzZXZlbnRvcy5jb21cblxuX0VxdWlwZSBWaXZhTWFpcyBFdmVudG9zXyIpOwogICAgICAgICRhcV9lbWFpbF9jbnQgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX2NvbnRhY3RzIFdIRVJFIGVtYWlsICE9ICcnIEFORCBlbWFpbCBJUyBOT1QgTlVMTCIpOwogICAgICAgID8+CiAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjBmOWZmO2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNnB4IDE4cHg7bWFyZ2luLXRvcDoxNnB4Ij4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjEycHgiPgogICAgICAgICAgICAgICAgPHN0cm9uZyBzdHlsZT0iZm9udC1zaXplOjE0cHg7Y29sb3I6IzFlNDBhZiI+8J+TpyBDYW5hbCBFbWFpbCDigJQgUGFyYWxlbG8gYW8gV0E8L3N0cm9uZz4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNkYmVhZmU7Y29sb3I6IzFlNDBhZjtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDAiPjw/cGhwIGVjaG8gJGFxX2VtYWlsX2NudDsgPz4gY29udGF0b3MgY29tIGVtYWlsPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2NDc0OGI7bWFyZ2luOjAgMCAxNHB4Ij4KICAgICAgICAgICAgICAgIFF1YW5kbyBhdGl2bywgZW52aWEgZW1haWwgZW0gcGFyYWxlbG8gYW8gV0EgcGFyYSBjb250YXRvcyBxdWUgdMOqbSBlbWFpbC4gU2UgbyBjb250YXRvIG7Do28gdGVtIFdBIG1hcyB0ZW0gZW1haWwsIGVudmlhIGFwZW5hcyBlbWFpbC4KICAgICAgICAgICAgICAgIFZhcnMgZGlzcG9uw612ZWlzOiA8Y29kZT57bm9tZX08L2NvZGU+LCA8Y29kZT57bGlua308L2NvZGU+CiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHgiPlN0YXR1czo8L2xhYmVsPgogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfYXF1ZWNlcl9lbWFpbF9vbiIgc3R5bGU9InBhZGRpbmc6NnB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIiA8P3BocCBzZWxlY3RlZCgkYXFfZW1haWxfb24sJzAnKTsgPz4+8J+UtCBEZXNhdGl2YWRvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgc2VsZWN0ZWQoJGFxX2VtYWlsX29uLCcxJyk7ID8+PvCfn6IgQXRpdm88L29wdGlvbj4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfk50gQXNzdW50bzwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idm0yX2FxdWVjZXJfZW1haWxfc3ViamVjdCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGFxX2VtYWlsX3N1YmopOyA/PiIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMGQ3ZGU7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfkqwgQ29ycG8gZG8gZW1haWw8L2xhYmVsPgogICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9InZtMl9hcXVlY2VyX2VtYWlsX2JvZHkiIHJvd3M9IjYiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtyZXNpemU6dmVydGljYWwiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRhcV9lbWFpbF9ib2R5KTsgPz48L3RleHRhcmVhPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDttYXJnaW4tdG9wOjhweCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5Ij7wn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXM8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gPT09PT0gVEFCOiBQT1IgREFUQSBETyBFVkVOVE8gPT09PT0gLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItdGFiLWJvZHkgPD9waHAgZWNobyAkYWN0aXZlX3RhYiA9PT0gJ2xlYWRzJyA/ICdhY3RpdmUnIDogJyc7ID8+Ij4KICAgIDw/cGhwCiAgICAvLyDilIDilIAgQXV0by1BcXVlY2VyIGNvbmZpZyBvcHRpb25zIOKUgOKUgAogICAgJGFhX29uICAgICAgICA9IGdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfb24nLCAnMCcpOwogICAgJGFhX3RocmVzaG9sZCA9IChpbnQpZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl90aHJlc2hvbGQnLCAnNjAnKTsKICAgICRhYV9jaGFubmVsICAgPSBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX2NoYW5uZWwnLCAnemFwaV83NTUxJyk7CiAgICAkYWFfdGVtcGxhdGUgID0gZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl90ZW1wbGF0ZScsICcnKTsKICAgICRhYV9jb29sZG93biAgPSAoaW50KWdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfY29vbGRvd24nLCAnMjQnKTsKICAgICRhYV9iYXRjaCAgICAgPSAoaW50KWdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfYmF0Y2gnLCAnMjAnKTsKICAgICRhYV9tc2cgICAgICAgPSBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX21zZycsICdPaSB7bm9tZX0hIPCfkYsgVmkgcXVlIHZvY8OqIHNlIGludGVyZXNzb3UgZW0gbm9zc2FzIGF0cmHDp8O1ZXMuIFBvc3NvIHRlIGFqdWRhciBhIGNvbnRyYXRhcj8nKTsKCiAgICAvLyBGb3JjZSByZWNhbGN1bGF0ZSBjYWNoZSBpZiByZXF1ZXN0ZWQKICAgIGlmICggaXNzZXQoJF9HRVRbJ3ZtMl9yZWNhbGMnXSkgJiYgJF9HRVRbJ3ZtMl9yZWNhbGMnXSA9PT0gJzEnICkgewogICAgICAgIGRlbGV0ZV90cmFuc2llbnQoJ3ZtMl9sZWFkc19hcV92MicpOwogICAgfQoKICAgIC8vIEdldCBsZWFkcyAoY2FjaGVkIDMwbWluKQogICAgJGxlYWRzX2RhdGEgID0gdm0yX2dldF9sZWFkc19wYXJhX2FxdWVjZXIoWydsaW1pdCcgPT4gMzAwXSk7CiAgICAkY2FjaGVfdGltZSAgPSBnZXRfdHJhbnNpZW50KCd2bTJfbGVhZHNfYXFfdjJfdHMnKTsKICAgICRjYWxjX3RpbWUgICA9IGN1cnJlbnRfdGltZSgnSDppJyk7CgogICAgLy8gU3RhdHMKICAgICRjbnRfaG90ICAgPSBjb3VudChhcnJheV9maWx0ZXIoJGxlYWRzX2RhdGEsIGZuKCRsKSA9PiAkbFsnbGV2ZWwnXSA9PT0gJ2hvdCcpKTsKICAgICRjbnRfd2FybSAgPSBjb3VudChhcnJheV9maWx0ZXIoJGxlYWRzX2RhdGEsIGZuKCRsKSA9PiAkbFsnbGV2ZWwnXSA9PT0gJ3dhcm0nKSk7CiAgICAkY250X2NvbGQgID0gY291bnQoYXJyYXlfZmlsdGVyKCRsZWFkc19kYXRhLCBmbigkbCkgPT4gJGxbJ2xldmVsJ10gPT09ICdjb2xkJykpOwogICAgJGNudF9jYXJ0ICA9IGNvdW50KGFycmF5X2ZpbHRlcigkbGVhZHNfZGF0YSwgZm4oJGwpID0+IGluX2FycmF5KCdjYXJyaW5obycsICRsWydzb3VyY2VzJ10pKSk7CiAgICAkY250X2dhbCAgID0gY291bnQoYXJyYXlfZmlsdGVyKCRsZWFkc19kYXRhLCBmbigkbCkgPT4gaW5fYXJyYXkoJ2dhbGVyaWEnLCAkbFsnc291cmNlcyddKSkpOwoKICAgICRmaWx0ZXJfbGV2ZWwgPSBzYW5pdGl6ZV9rZXkoJF9HRVRbJ3ZtMl9sZiddID8/ICcnKTsKICAgICRiYXNlX3VybCA9IGFkZF9xdWVyeV9hcmcoWydwYWdlJyA9PiAndm0yLWF1dG9tYWNvZXMnLCAndGFiJyA9PiAnbGVhZHMnXSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSk7CgogICAgJGNoYW5uZWxzID0gdm0yX2NoYW5uZWxzKCk7CiAgICAkYWFfaXNfd2FiYSA9IGlzc2V0KCRjaGFubmVsc1skYWFfY2hhbm5lbF0pICYmICRjaGFubmVsc1skYWFfY2hhbm5lbF1bJ3R5cGUnXSA9PT0gJ3dhYmEnOwogICAgPz4KCiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHg7bWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICA8ZGl2PgogICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTVweCI+8J+OryBMZWFkcyBwYXJhIEFxdWVjZXI8L3N0cm9uZz4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM1NzYwNmE7Zm9udC1zaXplOjEycHg7bWFyZ2luLWxlZnQ6OHB4Ij5DYWxjdWxhZG8gw6BzIDw/cGhwIGVjaG8gJGNhbGNfdGltZTsgPz48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKGFkZF9xdWVyeV9hcmcoJ3ZtMl9yZWNhbGMnLCcxJywkYmFzZV91cmwpKTsgPz4iCiAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6I2YwZjBmMDtib3JkZXI6MXB4IHNvbGlkICNkMGQwZDA7cGFkZGluZzo1cHggMTJweDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTJweDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMzMzIj4KICAgICAgICAgICAg8J+UhCBSZWNhbGN1bGFyCiAgICAgICAgPC9hPgogICAgPC9kaXY+CgogICAgPCEtLSBLUEkgQ2FyZHMgLS0+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMTEwcHgsMWZyKSk7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxOHB4Ij4KICAgICAgICA8P3BocAogICAgICAgICRjYXJkcyA9IFsKICAgICAgICAgICAgWyfwn5SlJywgJGNudF9ob3QsICAnSE9UICjiiaU2MCknLCAgJ2hvdCcsICAgICAgJyNmZmYzZTAnLCcjZTY1MTAwJ10sCiAgICAgICAgICAgIFsn4pqhJywgJGNudF93YXJtLCAnV2FybSAoMzAtNTkpJywnd2FybScsICAgICAnI2ZmZjljNCcsJyNmNTdmMTcnXSwKICAgICAgICAgICAgWyfwn4yxJywgJGNudF9jb2xkLCAnQ29sZCAoPDMwKScsICAnY29sZCcsICAgICAnI2U4ZjVlOScsJyMyZTdkMzInXSwKICAgICAgICAgICAgWyfwn5uSJywgJGNudF9jYXJ0LCAnQ2FycmluaG8nLCAgICdjYXJyaW5obycsICcjZmNlNGVjJywnI2M2MjgyOCddLAogICAgICAgICAgICBbJ/Cfk7gnLCAkY250X2dhbCwgICdHYWxlcmlhJywgICAgJ2dhbGVyaWEnLCAgJyNlM2YyZmQnLCcjMTU2NWMwJ10sCiAgICAgICAgXTsKICAgICAgICBmb3JlYWNoICgkY2FyZHMgYXMgWyRpY29uLCAkY250LCAkbGJsLCAkbGYsICRiZywgJGNvbF0pOgogICAgICAgICAgICAkaXNfYWN0aXZlID0gJGZpbHRlcl9sZXZlbCA9PT0gJGxmOwogICAgICAgICAgICAkY2FyZF91cmwgPSAkaXNfYWN0aXZlCiAgICAgICAgICAgICAgICA/ICRiYXNlX3VybAogICAgICAgICAgICAgICAgOiBhZGRfcXVlcnlfYXJnKCd2bTJfbGYnLCAkbGYsICRiYXNlX3VybCk7CiAgICAgICAgPz4KICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGNhcmRfdXJsKTsgPz4iIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZSI+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6PD9waHAgZWNobyAkaXNfYWN0aXZlID8gJGJnIDogJyNmZmYnOyA/Pjtib3JkZXI6MS41cHggc29saWQgPD9waHAgZWNobyAkaXNfYWN0aXZlID8gJGNvbCA6ICcjZTBlMGUwJzsgPz47Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxMHB4O3RleHQtYWxpZ246Y2VudGVyO3RyYW5zaXRpb246LjE1cztjdXJzb3I6cG9pbnRlciI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MjJweCI+PD9waHAgZWNobyAkaWNvbjsgPz48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjo8P3BocCBlY2hvICRjb2w7ID8+Ij48P3BocCBlY2hvICRjbnQ7ID8+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNjY2O21hcmdpbi10b3A6MnB4Ij48P3BocCBlY2hvICRsYmw7ID8+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvYT4KICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgPC9kaXY+CgogICAgPCEtLSBDb25maWcgQXV0by1BcXVlY2VyIChjb2xsYXBzaWJsZSkgLS0+CiAgICA8ZGV0YWlscyBvcGVuIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzowO21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgPHN1bW1hcnkgc3R5bGU9InBhZGRpbmc6MTBweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtsaXN0LXN0eWxlOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JhY2tncm91bmQ6PD9waHAgZWNobyAkYWFfb24gPT09ICcxJyA/ICcjZThmNWU5JyA6ICcjZmZmOGUxJzsgPz47Ym9yZGVyLXJhZGl1czo4cHgiPgogICAgICAgICAgICA8c3Bhbj7impnvuI8gQXV0by1BcXVlY2VyPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2NjYiPuKAlCBkaXNwYXJvIGF1dG9tw6F0aWNvIGEgY2FkYSBob3JhIHBhcmEgbGVhZHMgYWNpbWEgZG8gc2NvcmUgbcOtbmltbzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG87Zm9udC1zaXplOjEycHg7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGFhX29uID09PSAnMScgPyAnIzRjYWY1MCcgOiAnI2ZmOTgwMCc7ID8+O2NvbG9yOiNmZmYiPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkYWFfb24gPT09ICcxJyA/ICfwn5+iIEFUSVZPJyA6ICfwn5+hIFBBUkFETyc7ID8+CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L3N1bW1hcnk+CiAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzoxNHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlMGUwZTAiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMjAwcHgsMWZyKSk7Z2FwOjEycHg7YWxpZ24taXRlbXM6ZW5kIj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+UmCBTdGF0dXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfYXV0b19hcXVlY2VyX29uIiBpZD0idm0yLWFhLW9uIiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiIDw/cGhwIHNlbGVjdGVkKCRhYV9vbiwnMCcpOyA/Pj7wn5S0IFBBUkFETzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIiA8P3BocCBzZWxlY3RlZCgkYWFfb24sJzEnKTsgPz4+8J+foiBBVElWTzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+OryBTY29yZSBtw61uaW1vPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InZtMl9hdXRvX2FxdWVjZXJfdGhyZXNob2xkIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkYWFfdGhyZXNob2xkKTsgPz4iIG1pbj0iMSIgbWF4PSIxMDAiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMGQwZDA7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+ToSBDYW5hbDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtMl9hdXRvX2FxdWVjZXJfY2hhbm5lbCIgaWQ9InZtMi1hYS1jaCIgb25jaGFuZ2U9InZtMlN0ZXBDaGFubmVsU3dpdGNoKCdhYScsdGhpcy52YWx1ZSkiIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyB2bTJfY2hhbm5lbF9vcHRpb25zX2h0bWwoJGFhX2NoYW5uZWwpOyA/PgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+4o+wIENvb2xkb3duIChoIGVudHJlIGVudmlvcyk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm0yX2F1dG9fYXF1ZWNlcl9jb29sZG93biIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGFhX2Nvb2xkb3duKTsgPz4iIG1pbj0iMSIgbWF4PSIxNjgiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMGQwZDA7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDtmb250LXdlaWdodDo2MDAiPvCfk6YgQmF0Y2ggKG1zZ3MgcG9yIHJvZGFkYSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm0yX2F1dG9fYXF1ZWNlcl9iYXRjaCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGFhX2JhdGNoKTsgPz4iIG1pbj0iMSIgbWF4PSIxMDAiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMGQwZDA7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InZtMi1hYS13YWJhLXJvdyIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDs8P3BocCBlY2hvICRhYV9pc193YWJhID8gJycgOiAnZGlzcGxheTpub25lJzsgPz4iPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5OLIFRlbXBsYXRlIFdBQkE8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfYXV0b19hcXVlY2VyX3RlbXBsYXRlIiBzdHlsZT0id2lkdGg6MTAwJTttYXgtd2lkdGg6NDIwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIHZtMl93YWJhX3RlbXBsYXRlX29wdGlvbnNfaHRtbCgkYWFfdGVtcGxhdGUpOyA/PgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InZtMi1hYS16YXBpLXJvdyIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDs8P3BocCBlY2hvICRhYV9pc193YWJhID8gJ2Rpc3BsYXk6bm9uZScgOiAnJzsgPz4iPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5KsIE1lbnNhZ2VtIFotQVBJIDxzbWFsbCBzdHlsZT0iZm9udC13ZWlnaHQ6NDAwIj4odmFyOiB7bm9tZX0pPC9zbWFsbD48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9InZtMl9hdXRvX2FxdWVjZXJfbXNnIiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6NzJweDtyZXNpemU6dmVydGljYWw7Zm9udC1zaXplOjEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkMGQwO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6NnB4IDhweCI+PD9waHAgZWNobyBlc2NfdGV4dGFyZWEoJGFhX21zZyk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCB2bTJfcmVuZGVyX3Rlc3RfYm94KCAnYWEnLCAkYWFfY2hhbm5lbCwgJGFhX21zZywgJGFhX3RlbXBsYXRlICk7ID8+CiAgICAgICAgPCEtLSBbdjEuNS45NF0gRU1BSUwgUEFSQUxFTE8gUE9SIERBVEEgLS0+CiAgICAgICAgPD9waHAKICAgICAgICAkYWFfZW1haWxfb24gICA9IGdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfZW1haWxfb24nLCAnMCcpOwogICAgICAgICRhYV9lbWFpbF9zdWJqID0gZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9zdWJqZWN0JywgJ1ZvY8OqIHRlbSB1bSBldmVudG8gY2hlZ2FuZG8hIFZhbW9zIGZlY2hhciBhcyBhdHJhw6fDtWVzPyDwn46JJyk7CiAgICAgICAgJGFhX2VtYWlsX2JvZHkgPSBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX2VtYWlsX2JvZHknLCAiT2kge25vbWV9IVxuXG5JZGVudGlmaWNhbW9zIHF1ZSB2b2PDqiB0ZW0gdW0gZXZlbnRvIHNlIGFwcm94aW1hbmRvIGUgYWluZGEgcG9kZSBlc3RhciBwZXNxdWlzYW5kbyBhdHJhw6fDtWVzLiBOw6NvIGRlaXhlIHBhcmEgYSDDumx0aW1hIGhvcmEhXG5cbkFjZXNzZSBhZ29yYSBlIGNvbnRyYXRlIGVtIG1pbnV0b3M6XG5odHRwczovL2xvamEudml2YW1haXNldmVudG9zLmNvbVxuXG5fRXF1aXBlIFZpdmFNYWlzIEV2ZW50b3NfIik7CiAgICAgICAgJGFhX2VtYWlsX2NudCAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfY29udGFjdHMgV0hFUkUgZW1haWwgIT0gJycgQU5EIGVtYWlsIElTIE5PVCBOVUxMIik7CiAgICAgICAgPz4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmMGY5ZmY7Ym9yZGVyOjFweCBzb2xpZCAjYmZkYmZlO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHggMThweDttYXJnaW4tdG9wOjE2cHgiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MTJweCI+CiAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTRweDtjb2xvcjojMWU0MGFmIj7wn5OnIENhbmFsIEVtYWlsIOKAlCBQYXJhbGVsbyBhbyBXQTwvc3Ryb25nPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2RiZWFmZTtjb2xvcjojMWU0MGFmO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMCI+PD9waHAgZWNobyAkYWFfZW1haWxfY250OyA/PiBjb250YXRvcyBjb20gZW1haWw8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzY0NzQ4YjttYXJnaW46MCAwIDE0cHgiPgogICAgICAgICAgICAgICAgUXVhbmRvIGF0aXZvLCBlbnZpYSBlbWFpbCBlbSBwYXJhbGVsbyBhbyBXQSBwYXJhIGNvbnRhdG9zIHF1ZSB0w6ptIGVtYWlsIGNhZGFzdHJhZG8uCiAgICAgICAgICAgICAgICBWYXJzIGRpc3BvbsOtdmVpczogPGNvZGU+e25vbWV9PC9jb2RlPiwgPGNvZGU+e2xpbmt9PC9jb2RlPgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4Ij5TdGF0dXM6PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0idm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9vbiIgc3R5bGU9InBhZGRpbmc6NnB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIiA8P3BocCBzZWxlY3RlZCgkYWFfZW1haWxfb24sJzAnKTsgPz4+8J+UtCBEZXNhdGl2YWRvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgc2VsZWN0ZWQoJGFhX2VtYWlsX29uLCcxJyk7ID8+PvCfn6IgQXRpdm88L29wdGlvbj4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfk50gQXNzdW50bzwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9zdWJqZWN0IiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkYWFfZW1haWxfc3Viaik7ID8+IiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QwZDdkZTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+SrCBDb3JwbyBkbyBlbWFpbDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0idm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9ib2R5IiByb3dzPSI2IiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QwZDdkZTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTptb25vc3BhY2U7cmVzaXplOnZlcnRpY2FsIj48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgkYWFfZW1haWxfYm9keSk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2RldGFpbHM+CgogICAgPD9waHAKICAgICRob3Rfb24gICAgICAgPSBnZXRfb3B0aW9uKCAndm0yX2hvdF9vbicsICAgICAgICcwJyApOwogICAgJGhvdF9raWxsICAgICA9IGdldF9vcHRpb24oICd2bTJfaG90X2tpbGwnLCAgICAgJzEnICk7CiAgICAkaG90X2NoYW5uZWwgID0gZ2V0X29wdGlvbiggJ3ZtMl9ob3RfY2hhbm5lbCcsICAnd2FiYV81MDM5JyApOwogICAgJGhvdF90ZW1wbGF0ZSA9IGdldF9vcHRpb24oICd2bTJfaG90X3RlbXBsYXRlJywgJycgKTsKICAgICRob3RfbXNnICAgICAgPSBnZXRfb3B0aW9uKCAndm0yX2hvdF9tc2cnLAogICAgICAgICJPaSB7bm9tZX0hIPCfkYsgQXF1aSDDqSBkYSBWaXZhTWFpcyDigJQgdm9jw6ogdGVtIHVtIGV2ZW50byBlbSB2aXN0YT9cbkFpbmRhIGTDoSB0ZW1wbyBkZSBmZWNoYXIgYXMgYXRyYcOnw7VlcyBwZXJmZWl0YXMuIFBvc3NvIGFqdWRhciEg8J+OiVxue2xpbmt9IiApOwogICAgJGhvdF9jb29sZG93biA9IChpbnQpIGdldF9vcHRpb24oICd2bTJfaG90X2Nvb2xkb3duJywgJzcyJyApOwogICAgJGhvdF9iYXRjaCAgICA9IChpbnQpIGdldF9vcHRpb24oICd2bTJfaG90X2JhdGNoJywgICAgJzEwJyApOwogICAgJGhvdF9pc193YWJhICA9IGlzc2V0KCAkY2hhbm5lbHNbJGhvdF9jaGFubmVsXSApICYmICRjaGFubmVsc1skaG90X2NoYW5uZWxdWyd0eXBlJ10gPT09ICd3YWJhJzsKICAgICRob3RfYWN0aXZlICAgPSAkaG90X29uID09PSAnMScgJiYgJGhvdF9raWxsICE9PSAnMSc7CiAgICA/PgogICAgPCEtLSBDb25maWcgQXV0by1IT1QgKGNvbGxhcHNpYmxlKSAtLT4KICAgIDxkZXRhaWxzIG9wZW4gc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjA7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICA8c3VtbWFyeSBzdHlsZT0icGFkZGluZzoxMHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4O2xpc3Qtc3R5bGU6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7YmFja2dyb3VuZDo8P3BocCBlY2hvICRob3RfYWN0aXZlID8gJyNmZmYzZTAnIDogJyNmZmY4ZTEnOyA/Pjtib3JkZXItcmFkaXVzOjhweCI+CiAgICAgICAgICAgIDxzcGFuPvCflKUgQXV0by1IT1Q8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzY2NiI+4oCUIGVudmlhIG1lbnNhZ2VtIGNpcsO6cmdpY2EgcGFyYSBsZWFkcyBJbmNvbWluZyBubyBLb21tbyAocGlwZWxpbmUgSE9UKTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG87Zm9udC1zaXplOjEycHg7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGhvdF9hY3RpdmUgPyAnI2U2NTEwMCcgOiAnI2ZmOTgwMCc7ID8+O2NvbG9yOiNmZmYiPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkaG90X2FjdGl2ZSA/ICfwn5+gIEFUSVZPJyA6ICfwn5+hIFBBUkFETyc7ID8+CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L3N1bW1hcnk+CiAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzoxNHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlMGUwZTAiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMjAwcHgsMWZyKSk7Z2FwOjEycHg7YWxpZ24taXRlbXM6ZW5kIj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+UmCBTdGF0dXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfaG90X29uIiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiIDw/cGhwIHNlbGVjdGVkKCRob3Rfb24sJzAnKTsgPz4+8J+UtCBQQVJBRE88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgc2VsZWN0ZWQoJGhvdF9vbiwnMScpOyA/Pj7wn5+iIEFUSVZPPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5uRIEtpbGwgU3dpdGNoPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0idm0yX2hvdF9raWxsIiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiIDw/cGhwIHNlbGVjdGVkKCRob3Rfa2lsbCwnMScpOyA/Pj7wn5S0IEJsb3F1ZWFkbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIiA8P3BocCBzZWxlY3RlZCgkaG90X2tpbGwsJzAnKTsgPz4+8J+foiBMaWJlcmFkbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+ToSBDYW5hbCBwcmVmZXJlbmNpYWw8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfaG90X2NoYW5uZWwiIGlkPSJ2bTItaG90LWNoIiBvbmNoYW5nZT0idm0yU3RlcENoYW5uZWxTd2l0Y2goJ2hvdCcsdGhpcy52YWx1ZSkiIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyB2bTJfY2hhbm5lbF9vcHRpb25zX2h0bWwoICRob3RfY2hhbm5lbCApOyA/PgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+4o+wIENvb2xkb3duIChoIGVudHJlIGVudmlvcyk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm0yX2hvdF9jb29sZG93biIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGhvdF9jb29sZG93bik7ID8+IiBtaW49IjEiIG1heD0iMzM2IiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjZweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkMGQwO2JvcmRlci1yYWRpdXM6NnB4Ij4KICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDtmb250LXdlaWdodDo2MDAiPvCfk6YgQmF0Y2ggKG1zZ3MvaG9yYSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm0yX2hvdF9iYXRjaCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGhvdF9iYXRjaCk7ID8+IiBtaW49IjEiIG1heD0iNTAiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMGQwZDA7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InZtMi1ob3Qtd2FiYS1yb3ciIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7PD9waHAgZWNobyAkaG90X2lzX3dhYmEgPyAnJyA6ICdkaXNwbGF5Om5vbmUnOyA/PiI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDtmb250LXdlaWdodDo2MDAiPvCfk4sgVGVtcGxhdGUgV0FCQTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtMl9ob3RfdGVtcGxhdGUiIHN0eWxlPSJ3aWR0aDoxMDAlO21heC13aWR0aDo0MjBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX3dhYmFfdGVtcGxhdGVfb3B0aW9uc19odG1sKCAkaG90X3RlbXBsYXRlICk7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0idm0yLWhvdC16YXBpLXJvdyIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDs8P3BocCBlY2hvICRob3RfaXNfd2FiYSA/ICdkaXNwbGF5Om5vbmUnIDogJyc7ID8+Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+SrCBNZW5zYWdlbSA8c21hbGwgc3R5bGU9ImZvbnQtd2VpZ2h0OjQwMCI+KHZhcnM6IHtub21lfSwge2xpbmt9KTwvc21hbGw+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ2bTJfaG90X21zZyIgc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjgwcHg7cmVzaXplOnZlcnRpY2FsO2ZvbnQtc2l6ZToxMnB4O2JvcmRlcjoxcHggc29saWQgI2QwZDBkMDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjZweCA4cHgiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCAkaG90X21zZyApOyA/PjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODgiPntsaW5rfSA9IFVSTCByYXN0cmXDoXZlbCBwYXJhIG8gc2l0ZSAoVVRNIGF1dG9tw6F0aWNvKTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCB2bTJfcmVuZGVyX3Rlc3RfYm94KCAnaG90JywgJGhvdF9jaGFubmVsLCAkaG90X21zZywgJGhvdF90ZW1wbGF0ZSApOyA/PgogICAgICAgIDwhLS0gW3YxLjUuOTRdIEVNQUlMIFBBUkFMRUxPIEhPVCAtLT4KICAgICAgICA8P3BocAogICAgICAgICRob3RfZW1haWxfb24gICA9IGdldF9vcHRpb24oJ3ZtMl9ob3RfZW1haWxfb24nLCAnMCcpOwogICAgICAgICRob3RfZW1haWxfc3ViaiA9IGdldF9vcHRpb24oJ3ZtMl9ob3RfZW1haWxfc3ViamVjdCcsICdWb2PDqiBlc3TDoSBwcm9jdXJhbmRvIGF0cmHDp8O1ZXMgcGFyYSBzdWEgZmVzdGE/IPCfjoknKTsKICAgICAgICAkaG90X2VtYWlsX2JvZHkgPSBnZXRfb3B0aW9uKCd2bTJfaG90X2VtYWlsX2JvZHknLCAiT2kge25vbWV9IVxuXG5WaSBxdWUgdm9jw6ogZGVtb25zdHJvdSBpbnRlcmVzc2UgZW0gY29udHJhdGFyIGF0cmHDp8O1ZXMgcGFyYSBzZXUgZXZlbnRvLiBBaW5kYSBlc3TDoSBwZXNxdWlzYW5kbz9cblxuVGVtb3MgY2VudGVuYXMgZGUgb3DDp8O1ZXMgZXNwZXJhbmRvIHBvciB2b2PDqjpcbmh0dHBzOi8vbG9qYS52aXZhbWFpc2V2ZW50b3MuY29tXG5cbl9FcXVpcGUgVml2YU1haXMgRXZlbnRvc18iKTsKICAgICAgICAkaG90X2VtYWlsX2NudCAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfY29udGFjdHMgV0hFUkUgZW1haWwgIT0gJycgQU5EIGVtYWlsIElTIE5PVCBOVUxMIik7CiAgICAgICAgPz4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmMGY5ZmY7Ym9yZGVyOjFweCBzb2xpZCAjYmZkYmZlO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHggMThweDttYXJnaW4tdG9wOjE2cHgiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MTJweCI+CiAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTRweDtjb2xvcjojMWU0MGFmIj7wn5OnIENhbmFsIEVtYWlsIOKAlCBQYXJhbGVsbyBhbyBXQTwvc3Ryb25nPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2RiZWFmZTtjb2xvcjojMWU0MGFmO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMCI+PD9waHAgZWNobyAkaG90X2VtYWlsX2NudDsgPz4gY29udGF0b3MgY29tIGVtYWlsPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2NDc0OGI7bWFyZ2luOjAgMCAxNHB4Ij4KICAgICAgICAgICAgICAgIFF1YW5kbyBhdGl2bywgZW52aWEgZW1haWwgZW0gcGFyYWxlbG8gYW8gV0EgcGFyYSBjb250YXRvcyBIT1QgcXVlIHTDqm0gZW1haWwgY2FkYXN0cmFkby4KICAgICAgICAgICAgICAgIFZhcnMgZGlzcG9uw612ZWlzOiA8Y29kZT57bm9tZX08L2NvZGU+LCA8Y29kZT57bGlua308L2NvZGU+CiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHgiPlN0YXR1czo8L2xhYmVsPgogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfaG90X2VtYWlsX29uIiBzdHlsZT0icGFkZGluZzo2cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMGQ3ZGU7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiIDw/cGhwIHNlbGVjdGVkKCRob3RfZW1haWxfb24sJzAnKTsgPz4+8J+UtCBEZXNhdGl2YWRvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgc2VsZWN0ZWQoJGhvdF9lbWFpbF9vbiwnMScpOyA/Pj7wn5+iIEF0aXZvPC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTJweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5OdIEFzc3VudG88L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZtMl9ob3RfZW1haWxfc3ViamVjdCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGhvdF9lbWFpbF9zdWJqKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5KsIENvcnBvIGRvIGVtYWlsPC9sYWJlbD4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ2bTJfaG90X2VtYWlsX2JvZHkiIHJvd3M9IjYiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtyZXNpemU6dmVydGljYWwiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRob3RfZW1haWxfYm9keSk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2RldGFpbHM+CgogICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDttYXJnaW4tdG9wOjhweDttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5Ij7wn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXM8L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTGVhZHMgVGFibGUgLS0+CiAgICA8P3BocAogICAgLy8gQXBwbHkgZmlsdGVyCiAgICAkZGlzcGxheV9sZWFkcyA9ICRsZWFkc19kYXRhOwogICAgaWYgKCAkZmlsdGVyX2xldmVsID09PSAnaG90JyApICAgICAgJGRpc3BsYXlfbGVhZHMgPSBhcnJheV9maWx0ZXIoJGRpc3BsYXlfbGVhZHMsIGZuKCRsKSA9PiAkbFsnbGV2ZWwnXSA9PT0gJ2hvdCcpOwogICAgZWxzZWlmICggJGZpbHRlcl9sZXZlbCA9PT0gJ3dhcm0nICkgJGRpc3BsYXlfbGVhZHMgPSBhcnJheV9maWx0ZXIoJGRpc3BsYXlfbGVhZHMsIGZuKCRsKSA9PiAkbFsnbGV2ZWwnXSA9PT0gJ3dhcm0nKTsKICAgIGVsc2VpZiAoICRmaWx0ZXJfbGV2ZWwgPT09ICdjb2xkJyApICRkaXNwbGF5X2xlYWRzID0gYXJyYXlfZmlsdGVyKCRkaXNwbGF5X2xlYWRzLCBmbigkbCkgPT4gJGxbJ2xldmVsJ10gPT09ICdjb2xkJyk7CiAgICBlbHNlaWYgKCAkZmlsdGVyX2xldmVsID09PSAnY2FycmluaG8nICkgJGRpc3BsYXlfbGVhZHMgPSBhcnJheV9maWx0ZXIoJGRpc3BsYXlfbGVhZHMsIGZuKCRsKSA9PiBpbl9hcnJheSgnY2FycmluaG8nLCAkbFsnc291cmNlcyddKSk7CiAgICBlbHNlaWYgKCAkZmlsdGVyX2xldmVsID09PSAnZ2FsZXJpYScgKSAgJGRpc3BsYXlfbGVhZHMgPSBhcnJheV9maWx0ZXIoJGRpc3BsYXlfbGVhZHMsIGZuKCRsKSA9PiBpbl9hcnJheSgnZ2FsZXJpYScsICRsWydzb3VyY2VzJ10pKTsKICAgICRkaXNwbGF5X2xlYWRzID0gYXJyYXlfdmFsdWVzKCRkaXNwbGF5X2xlYWRzKTsKICAgID8+CgogICAgPD9waHAgaWYgKCAkZmlsdGVyX2xldmVsICk6ID8+CiAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzMzMyI+CiAgICAgICAgRmlsdHJhbmRvOiA8c3Ryb25nPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGZpbHRlcl9sZXZlbCk7ID8+PC9zdHJvbmc+CiAgICAgICAg4oCUIDw/cGhwIGVjaG8gY291bnQoJGRpc3BsYXlfbGVhZHMpOyA/PiBsZWFkcwogICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkYmFzZV91cmwpOyA/PiIgc3R5bGU9Im1hcmdpbi1sZWZ0OjhweDtjb2xvcjojMDA3OWQzO2ZvbnQtc2l6ZToxMnB4Ij7inJUgTGltcGFyIGZpbHRybzwvYT4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kaWY7ID8+CgogICAgPD9waHAKICAgIC8vIOKUgOKUgCBTb3J0IOKUgOKUgAogICAgJGxlYWRzX3NvcnQgPSBzYW5pdGl6ZV9rZXkoICRfR0VUWyd2bTJfbHMnXSA/PyAnc2NvcmVfZCcgKTsKICAgIHVzb3J0KCAkZGlzcGxheV9sZWFkcywgZnVuY3Rpb24oJGEsICRiKSB1c2UgKCRsZWFkc19zb3J0KSB7CiAgICAgICAgc3dpdGNoICgkbGVhZHNfc29ydCkgewogICAgICAgICAgICBjYXNlICdzY29yZSc6ICAgIHJldHVybiAkYVsnc2NvcmUnXSAtICRiWydzY29yZSddOwogICAgICAgICAgICBjYXNlICdzY29yZV9kJzogIHJldHVybiAkYlsnc2NvcmUnXSAtICRhWydzY29yZSddOwogICAgICAgICAgICBjYXNlICdub21lJzogICAgIHJldHVybiBzdHJjbXAoICRhWyduYW1lJ10gPz8gJycsICRiWyduYW1lJ10gPz8gJycgKTsKICAgICAgICAgICAgY2FzZSAnbm9tZV9kJzogICByZXR1cm4gc3RyY21wKCAkYlsnbmFtZSddID8/ICcnLCAkYVsnbmFtZSddID8/ICcnICk7CiAgICAgICAgICAgIGNhc2UgJ2V2ZW50byc6ICAgcmV0dXJuIHN0cmNtcCggJGFbJ2RhdGFfZXZlbnRvJ10gPzogJzAnLCAkYlsnZGF0YV9ldmVudG8nXSA/OiAnMCcgKTsKICAgICAgICAgICAgY2FzZSAnZXZlbnRvX2QnOiByZXR1cm4gc3RyY21wKCAkYlsnZGF0YV9ldmVudG8nXSA/OiAnMCcsICRhWydkYXRhX2V2ZW50byddID86ICcwJyApOwogICAgICAgICAgICBjYXNlICdhdGl2byc6ICAgIHJldHVybiBzdHJjbXAoICRhWydsYXN0X2FjdGl2aXR5J10gPzogJzAnLCAkYlsnbGFzdF9hY3Rpdml0eSddID86ICcwJyApOwogICAgICAgICAgICBjYXNlICdhdGl2b19kJzogIHJldHVybiBzdHJjbXAoICRiWydsYXN0X2FjdGl2aXR5J10gPzogJzAnLCAkYVsnbGFzdF9hY3Rpdml0eSddID86ICcwJyApOwogICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgIHJldHVybiAkYlsnc2NvcmUnXSAtICRhWydzY29yZSddOwogICAgICAgIH0KICAgIH0pOwoKICAgIC8vIOKUgOKUgCBCYXRjaCBsb29rdXA6IGxhc3RfYWN0aXZpdHkgZGUgdm0yX2NvbnRhY3RzIOKUgOKUgAogICAgJGxhc3RfYWN0X21hcCA9IFtdOwogICAgaWYgKCAhIGVtcHR5KCRkaXNwbGF5X2xlYWRzKSApIHsKICAgICAgICAkcDExcyA9IGFycmF5X21hcCggZm4oJGwpID0+ICInIiAuIGVzY19zcWwoIHZtMl9waG9uZV9sYXN0MTEoJGxbJ3Bob25lJ10pICkgLiAiJyIsICRkaXNwbGF5X2xlYWRzICk7CiAgICAgICAgJHAxMXMgPSBhcnJheV91bmlxdWUoJHAxMXMpOwogICAgICAgICRwaF9zcWwgPSBpbXBsb2RlKCcsJywgJHAxMXMpOwogICAgICAgICRsYV9yb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICAgICAiU0VMRUNUIFJJR0hUKHBob25lLDExKSBBUyBwMTEsIGxhc3RfYWN0aXZpdHkKICAgICAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX2NvbnRhY3RzCiAgICAgICAgICAgICBXSEVSRSBSSUdIVChwaG9uZSwxMSkgSU4gKCRwaF9zcWwpIgogICAgICAgICk7CiAgICAgICAgZm9yZWFjaCAoJGxhX3Jvd3MgYXMgJHIpICRsYXN0X2FjdF9tYXBbJHItPnAxMV0gPSAkci0+bGFzdF9hY3Rpdml0eTsKICAgIH0KCiAgICAvLyDilIDilIAgU29ydCBVUkwgaGVscGVycyDilIDilIAKICAgICRjdXJyZW50X3BhcmFtcyA9IGFycmF5X21lcmdlKCAkX0dFVCA/PyBbXSwgWydwYWdlJyA9PiAndm0yLWF1dG9tYWNvZXMnLCAndGFiJyA9PiAnbGVhZHMnXSApOwogICAgJF9sc3UgPSBmbigkcykgPT4gZXNjX3VybCggYWRkX3F1ZXJ5X2FyZyggYXJyYXlfbWVyZ2UoJGN1cnJlbnRfcGFyYW1zLCBbJ3ZtMl9scycgPT4gJHNdKSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSApICk7CiAgICAkX2xhcnJvdyA9IGZ1bmN0aW9uKCRhc2MsICRkZXNjKSB1c2UgKCRsZWFkc19zb3J0KSB7CiAgICAgICAgaWYgKCRsZWFkc19zb3J0ID09PSAkYXNjKSAgcmV0dXJuICcgPHNwYW4gc3R5bGU9ImNvbG9yOiMwMDc5ZDMiPuKGkTwvc3Bhbj4nOwogICAgICAgIGlmICgkbGVhZHNfc29ydCA9PT0gJGRlc2MpIHJldHVybiAnIDxzcGFuIHN0eWxlPSJjb2xvcjojMDA3OWQzIj7ihpM8L3NwYW4+JzsKICAgICAgICByZXR1cm4gJyA8c3BhbiBzdHlsZT0iY29sb3I6I2NjYyI+4oaVPC9zcGFuPic7CiAgICB9OwogICAgJHRoX2xpbmsgPSAnY29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXAnOwogICAgPz4KCiAgICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OmF1dG8iPgogICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MTNweCI+CiAgICAgICAgPHRoZWFkPgogICAgICAgICAgICA8dHIgc3R5bGU9ImJhY2tncm91bmQ6I2Y2ZjhmYTtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZTBlMGUwIj4KICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0icGFkZGluZzo4cHggMTBweDt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6bm93cmFwIj48YSBocmVmPSI8P3BocCBlY2hvICRfbHN1KCRsZWFkc19zb3J0PT09J3Njb3JlJz8nc2NvcmVfZCc6J3Njb3JlJyk7ID8+IiBzdHlsZT0iPD9waHAgZWNobyAkdGhfbGluazsgPz4iPlNjb3JlPD9waHAgZWNobyAkX2xhcnJvdygnc2NvcmUnLCdzY29yZV9kJyk7ID8+PC9hPjwvdGg+CiAgICAgICAgICAgICAgICA8dGggc3R5bGU9InBhZGRpbmc6OHB4IDEwcHg7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcCI+PGEgaHJlZj0iPD9waHAgZWNobyAkX2xzdSgkbGVhZHNfc29ydD09PSdhdGl2byc/J2F0aXZvX2QnOidhdGl2bycpOyA/PiIgc3R5bGU9Ijw/cGhwIGVjaG8gJHRoX2xpbms7ID8+Ij7Dmmx0aW1hIEF0aXZpZGFkZTw/cGhwIGVjaG8gJF9sYXJyb3coJ2F0aXZvJywnYXRpdm9fZCcpOyA/PjwvYT48L3RoPgogICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O3RleHQtYWxpZ246bGVmdCI+PGEgaHJlZj0iPD9waHAgZWNobyAkX2xzdSgkbGVhZHNfc29ydD09PSdub21lJz8nbm9tZV9kJzonbm9tZScpOyA/PiIgc3R5bGU9Ijw/cGhwIGVjaG8gJHRoX2xpbms7ID8+Ij5Ob21lPD9waHAgZWNobyAkX2xhcnJvdygnbm9tZScsJ25vbWVfZCcpOyA/PjwvYT48L3RoPgogICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3dyYXAiPlRlbGVmb25lPC90aD4KICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0icGFkZGluZzo4cHggMTBweDt0ZXh0LWFsaWduOmxlZnQiPlNpbmFpczwvdGg+CiAgICAgICAgICAgICAgICA8dGggc3R5bGU9InBhZGRpbmc6OHB4IDEwcHg7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcCI+PGEgaHJlZj0iPD9waHAgZWNobyAkX2xzdSgkbGVhZHNfc29ydD09PSdldmVudG8nPydldmVudG9fZCc6J2V2ZW50bycpOyA/PiIgc3R5bGU9Ijw/cGhwIGVjaG8gJHRoX2xpbms7ID8+Ij5EYXRhIEV2ZW50bzw/cGhwIGVjaG8gJF9sYXJyb3coJ2V2ZW50bycsJ2V2ZW50b19kJyk7ID8+PC9hPjwvdGg+CiAgICAgICAgICAgICAgICA8dGggc3R5bGU9InBhZGRpbmc6OHB4IDEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwIj5Bw6fDtWVzPC90aD4KICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT4KICAgICAgICA8P3BocCBpZiAoIGVtcHR5KCRkaXNwbGF5X2xlYWRzKSApOiA/PgogICAgICAgICAgICA8dHI+PHRkIGNvbHNwYW49IjciIHN0eWxlPSJwYWRkaW5nOjI0cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6Izg4OCI+TmVuaHVtIGxlYWQgZW5jb250cmFkby4gPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKGFkZF9xdWVyeV9hcmcoJ3ZtMl9yZWNhbGMnLCcxJywkYmFzZV91cmwpKTsgPz4iPvCflIQgUmVjYWxjdWxhcjwvYT48L3RkPjwvdHI+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPD9waHAgZm9yZWFjaCAoICRkaXNwbGF5X2xlYWRzIGFzICRsZWFkICk6CiAgICAgICAgICAgICRsdmwgICAgID0gJGxlYWRbJ2xldmVsJ107CiAgICAgICAgICAgICRzY29yZSAgID0gJGxlYWRbJ3Njb3JlJ107CiAgICAgICAgICAgICRiYWRnZWNsID0gJGx2bCA9PT0gJ2hvdCcgPyAndm0yLWhvdCcgOiAoJGx2bCA9PT0gJ3dhcm0nID8gJ3ZtMi13YXJtJyA6ICd2bTItY29sZCcpOwogICAgICAgICAgICAkaWNvbiAgICA9ICRsdmwgPT09ICdob3QnID8gJ/CflKUnIDogKCRsdmwgPT09ICd3YXJtJyA/ICfimqEnIDogJ/CfjLEnKTsKICAgICAgICAgICAgJG5hbWUgICAgPSAkbGVhZFsnbmFtZSddID86ICfigJQnOwogICAgICAgICAgICAkcGhvbmUgICA9ICRsZWFkWydwaG9uZSddOwogICAgICAgICAgICAkcDExICAgICA9ICRsZWFkWydwMTEnXSA/PyB2bTJfcGhvbmVfbGFzdDExKCRwaG9uZSk7CiAgICAgICAgICAgICRldiAgICAgID0gJGxlYWRbJ2RhdGFfZXZlbnRvJ10gPz8gJyc7CiAgICAgICAgICAgICRldl9mbXQgID0gJGV2ID8gZGF0ZSgnZC9tL3knLCBzdHJ0b3RpbWUoJGV2KSkgOiAn4oCUJzsKICAgICAgICAgICAgJHNpZ25hbHMgPSAkbGVhZFsnc2lnbmFscyddID8/IFtdOwogICAgICAgICAgICAkc2VuZF9kYXRhID0gZXNjX2F0dHIoanNvbl9lbmNvZGUoWydwaG9uZScgPT4gJHBob25lLCAnbmFtZScgPT4gJG5hbWVdKSk7CiAgICAgICAgICAgICRwMTFfbGVhZCAgPSB2bTJfcGhvbmVfbGFzdDExKCRwaG9uZSk7CiAgICAgICAgICAgICRsYV9yYXcgICAgPSAkbGFzdF9hY3RfbWFwWyRwMTFfbGVhZF0gPz8gJyc7CiAgICAgICAgICAgICRsYV9mbXQgICAgPSAkbGFfcmF3ID8gdm0yX2xvY2FsX2RhdGUoJGxhX3JhdywgJ2QvbS95IEg6aScpIDogJ+KAlCc7CiAgICAgICAgPz4KICAgICAgICA8dHIgc3R5bGU9ImJvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMGYwZjAiIGNsYXNzPSJ2bTItbGVhZC1yb3ciPgogICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEwcHg7d2hpdGUtc3BhY2U6bm93cmFwIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItYmFkZ2Utc2NvcmUgPD9waHAgZWNobyAkYmFkZ2VjbDsgPz4iPjw/cGhwIGVjaG8gJGljb24gLiAnICcgLiAkc2NvcmU7ID8+PC9zcGFuPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEwcHg7Y29sb3I6IzU3NjA2YTtmb250LXNpemU6MTJweDt3aGl0ZS1zcGFjZTpub3dyYXAiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGxhX2ZtdCk7ID8+PC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O21heC13aWR0aDoxNDBweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXAiIHRpdGxlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRuYW1lKTsgPz4iPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyBlc2NfaHRtbCgkbmFtZSk7ID8+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTBweDt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4Ij4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gZXNjX2h0bWwoJHBob25lKTsgPz4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4Ij4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NHB4Ij4KICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCAkc2lnbmFscyBhcyAkc2lnICk6ID8+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9Iis8P3BocCBlY2hvIChpbnQpJHNpZ1sncHRzJ107ID8+IHB0cyIgc3R5bGU9ImJhY2tncm91bmQ6I2YwZjBmMDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoycHggN3B4O2ZvbnQtc2l6ZToxMXB4O3doaXRlLXNwYWNlOm5vd3JhcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gZXNjX2h0bWwoJHNpZ1snaWNvbiddIC4gJyAnIC4gJHNpZ1snbGFiZWwnXSk7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEwcHg7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtc2l6ZToxMnB4Ij48P3BocCBlY2hvIGVzY19odG1sKCRldl9mbXQpOyA/PjwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTBweDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXAiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93YS5tZS88P3BocCBlY2hvIGVzY19hdHRyKCRwaG9uZSk7ID8+IiB0YXJnZXQ9Il9ibGFuayIKICAgICAgICAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiMyNWQzNjY7Y29sb3I6I2ZmZjtwYWRkaW5nOjRweCA4cHg7Ym9yZGVyLXJhZGl1czo1cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjExcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjFweCI+CiAgICAgICAgICAgICAgICAgICAg8J+SrCBXQQogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iCiAgICAgICAgICAgICAgICAgICAgb25jbGljaz0idm0yU2VuZExlYWROb3codGhpcywgPD9waHAgZWNobyAkc2VuZF9kYXRhOyA/PikiCiAgICAgICAgICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6IzAwNzlkMztjb2xvcjojZmZmO2JvcmRlcjpub25lO3BhZGRpbmc6NHB4IDhweDtib3JkZXItcmFkaXVzOjVweDtmb250LXNpemU6MTFweDtjdXJzb3I6cG9pbnRlcjttYXJnaW46MXB4Ij4KICAgICAgICAgICAgICAgICAgICDwn5OkIEVudmlhcgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgIDwvdGJvZHk+CiAgICA8L3RhYmxlPgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgIC8vIENoYW5uZWwgc3dpdGNoIGZvciBhdXRvLWFxdWVjZXIgcGFuZWwKICAgIChmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYWFDaFNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItYWEtY2gnKTsKICAgICAgICBpZiAoYWFDaFNlbCkgewogICAgICAgICAgICBhYUNoU2VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdm0yU3RlcENoYW5uZWxTd2l0Y2goJ2FhJywgdGhpcy52YWx1ZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0pKCk7CgogICAgZnVuY3Rpb24gdm0yU3RlcENoYW5uZWxTd2l0Y2gocHJlZml4LCB2YWwpIHsKICAgICAgICB2YXIgaXNXYWJhID0gdmFsICYmIHZhbC5pbmRleE9mKCd3YWJhJykgPT09IDA7CiAgICAgICAgdmFyIHdhYmFSb3dzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkJD0iLXdhYmEtcm93Il0nKTsKICAgICAgICB2YXIgemFwaVJvd3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQkPSItemFwaS1yb3ciXScpOwogICAgICAgIGlmIChwcmVmaXggPT09ICdhYScpIHsKICAgICAgICAgICAgdmFyIHdyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1hYS13YWJhLXJvdycpOwogICAgICAgICAgICB2YXIgenIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWFhLXphcGktcm93Jyk7CiAgICAgICAgICAgIGlmICh3cikgd3Iuc3R5bGUuZGlzcGxheSA9IGlzV2FiYSA/ICcnIDogJ25vbmUnOwogICAgICAgICAgICBpZiAoenIpIHpyLnN0eWxlLmRpc3BsYXkgPSBpc1dhYmEgPyAnbm9uZScgOiAnJzsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdm0yU2VuZExlYWROb3coYnRuLCBkYXRhKSB7CiAgICAgICAgdmFyIHBob25lID0gZGF0YS5waG9uZTsKICAgICAgICB2YXIgbmFtZSAgPSBkYXRhLm5hbWUgfHwgJ2NsaWVudGUnOwogICAgICAgIGlmICghY29uZmlybSgnRW52aWFyIG1lbnNhZ2VtIHBhcmEgJyArIG5hbWUgKyAnICgnICsgcGhvbmUgKyAnKT8nKSkgcmV0dXJuOwogICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgYnRuLnRleHRDb250ZW50ID0gJ+KPsyc7CiAgICAgICAgdmFyIG5vbmNlID0gJzw/cGhwIGVjaG8gd3BfY3JlYXRlX25vbmNlKCJ2bTJfbm9uY2UiKTsgPz4nOwogICAgICAgIGZldGNoKGFqYXh1cmwsIHsKICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9LAogICAgICAgICAgICBib2R5OiAnYWN0aW9uPXZtMl9zZW5kX2xlYWRfbm93JnBob25lPScgKyBlbmNvZGVVUklDb21wb25lbnQocGhvbmUpICsgJyZuYW1lPScgKyBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyAnJm5vbmNlPScgKyBub25jZQogICAgICAgIH0pCiAgICAgICAgLnRoZW4ociA9PiByLmpzb24oKSkKICAgICAgICAudGhlbihmdW5jdGlvbihyZXMpIHsKICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICBidG4udGV4dENvbnRlbnQgPSAn4pyFJzsKICAgICAgICAgICAgICAgIGJ0bi5zdHlsZS5iYWNrZ3JvdW5kID0gJyM0Y2FmNTAnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYnRuLnRleHRDb250ZW50ID0gJ+KdjCc7CiAgICAgICAgICAgICAgICBidG4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZjQ0MzM2JzsKICAgICAgICAgICAgICAgIGFsZXJ0KCdFcnJvOiAnICsgKHJlcy5kYXRhIHx8ICdmYWxoYSBubyBlbnZpbycpKTsKICAgICAgICAgICAgfQogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBidG4udGV4dENvbnRlbnQgPSAn4p2MJzsKICAgICAgICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgfSk7CiAgICB9CiAgICA8L3NjcmlwdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InZtMi10YWItYm9keSA8P3BocCBlY2hvICRhY3RpdmVfdGFiID09PSAnYnlkYXRlJyA/ICdhY3RpdmUnIDogJyc7ID8+Ij4KCiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWN0cmwtYmFyIj4KICAgICAgICAgICAgPGxhYmVsPjxzdHJvbmc+8J+ThSBQb3IgRGF0YSBkbyBFdmVudG88L3N0cm9uZz48L2xhYmVsPgogICAgICAgICAgICA8bGFiZWw+S2lsbCBTd2l0Y2g6CiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtMl9ieWRhdGVfa2lsbCI+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgc2VsZWN0ZWQoJGJkX2tpbGwsJzEnKTsgPz4+8J+UtCBQQVJBRE88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIiA8P3BocCBzZWxlY3RlZCgkYmRfa2lsbCwnMCcpOyA/Pj7wn5+iIEFUSVZPPC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPGxhYmVsPkNhbmFsOgogICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0idm0yLWJkLWNoLXNlbCIgbmFtZT0idm0yX2J5ZGF0ZV9jaGFubmVsIiBvbmNoYW5nZT0idm0yU3RlcENoYW5uZWxTd2l0Y2goJ2JkJywgdGhpcy52YWx1ZSkiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX2NoYW5uZWxfb3B0aW9uc19odG1sKCAkYmRfY2ggKTsgPz4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8P3BocCBlY2hvICRiZF9raWxsID09PSAnMScgPyAnPHNwYW4gY2xhc3M9InZtMi1rcy1vbiI+8J+UtCBQQVVTQURPPC9zcGFuPicgOiAnPHNwYW4gY2xhc3M9InZtMi1rcy1vZmYiPvCfn6IgQVRJVk88L3NwYW4+JzsgPz4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWJkLWdyaWQiIGlkPSJ2bTItYmQtZ3JvdXBzIj4KICAgICAgICA8P3BocCBmb3JlYWNoICgkYmRfZ3JvdXBzIGFzICRna2V5ID0+ICRnKToKICAgICAgICAgICAgJGdfb24gICA9IGdldF9vcHRpb24oInZtMl9ieWRhdGVfeyRna2V5fV9vbiIsICcwJyk7CiAgICAgICAgICAgICRnX3RtcGwgPSBnZXRfb3B0aW9uKCJ2bTJfYnlkYXRlX3skZ2tleX1fdGVtcGxhdGUiLCAkZ1sndG1wbCddKTsKICAgICAgICAgICAgJGdfbXNnICA9IGdldF9vcHRpb24oInZtMl9ieWRhdGVfeyRna2V5fV9tc2ciLCAiT2kge25vbWV9ISDwn46JIFN1YSBmZXN0YSBlc3TDoSBjaGVnYW5kbyEgUHJlY2lzYW5kbyBkZSBtYWlzIGFsZ3VtIHNlcnZpw6dvPyIpOwogICAgICAgICAgICAkY250ICAgID0gJGJkX2NvdW50c1skZ2tleV07CiAgICAgICAgPz4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItYmQtY2FyZCIgc3R5bGU9ImJvcmRlci1sZWZ0LWNvbG9yOjw/cGhwIGVjaG8gJGdbJ2NvbG9yJ107ID8+Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWJkLWxibCI+CiAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRnWydsYWJlbCddOyA/PgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDAiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm0yX2J5ZGF0ZV88P3BocCBlY2hvICRna2V5OyA/Pl9vbiIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJGdfb24sJzEnKTsgPz4+CiAgICAgICAgICAgICAgICAgICAgQXRpdm8KICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItYmQtbiIgc3R5bGU9ImNvbG9yOjw/cGhwIGVjaG8gJGdbJ2NvbG9yJ107ID8+Ij48P3BocCBlY2hvICRjbnQ7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM1NzYwNmE7bWFyZ2luLWJvdHRvbToxMHB4Ij5sZWFkcyBjb20gZGF0YSBuZXN0ZSBwZXLDrW9kbzwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY29sLXdhYmEiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjhweCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWZsZC1sYmwiPlRlbXBsYXRlIFdBQkE8L3NwYW4+CiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtMl9ieWRhdGVfPD9waHAgZWNobyAkZ2tleTsgPz5fdGVtcGxhdGUiIHN0eWxlPSJ3aWR0aDoxMDAlO2ZvbnQtc2l6ZToxMnB4Ij4KICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkd2FiYV90cGxzIGFzICR0diA9PiAkdGwpOiA/PgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHR2KTsgPz4iIDw/cGhwIHNlbGVjdGVkKCRnX3RtcGwsJHR2KTsgPz4+PD9waHAgZWNobyBlc2NfaHRtbCgkdGwpOyA/Pjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1jb2wtemFwaSI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWZsZC1sYmwiPlRleHRvIFotQVBJPC9zcGFuPgogICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9InZtMl9ieWRhdGVfPD9waHAgZWNobyAkZ2tleTsgPz5fbXNnIiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6NTRweDtyZXNpemU6dmVydGljYWw7Zm9udC1zaXplOjEycHgiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRnX21zZyk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPD9waHAgdm0yX3JlbmRlcl90ZXN0X2JveCggJ2J5ZGF0ZScsICRiZF9jaCwgZ2V0X29wdGlvbigndm0yX2J5ZGF0ZV9zZW1hbmFfbXNnJywgJ09pIHtub21lfSEg8J+OiSBTdWEgZmVzdGEgZXN0w6EgY2hlZ2FuZG8hIFByZWNpc2FuZG8gZGUgbWFpcyBhbGd1bSBzZXJ2acOnbz8nKSwgZ2V0X29wdGlvbigndm0yX2J5ZGF0ZV9zZW1hbmFfdGVtcGxhdGUnLCcnKSApOyA/PgogICAgICAgIDwhLS0gW3YxLjUuOTVdIEVNQUlMIFBBUkFMRUxPIFBPUiBEQVRBIC0tPgogICAgICAgIDw/cGhwCiAgICAgICAgJGJkX2VtYWlsX29uICAgPSBnZXRfb3B0aW9uKCd2bTJfYnlkYXRlX2VtYWlsX29uJywgJzAnKTsKICAgICAgICAkYmRfZW1haWxfc3ViaiA9IGdldF9vcHRpb24oJ3ZtMl9ieWRhdGVfZW1haWxfc3ViamVjdCcsICdTdWEgZmVzdGEgZXN0w6EgY2hlZ2FuZG8hIFZhbW9zIGZlY2hhciBhcyBhdHJhw6fDtWVzPyDwn46JJyk7CiAgICAgICAgJGJkX2VtYWlsX2JvZHkgPSBnZXRfb3B0aW9uKCd2bTJfYnlkYXRlX2VtYWlsX2JvZHknLCAiT2kge25vbWV9IVxuXG5TdWEgZmVzdGEgZXN0w6Egc2UgYXByb3hpbWFuZG8gZSBhaW5kYSBkw6EgdGVtcG8gZGUgZ2FyYW50aXIgYXRyYcOnw7VlcyBpbmNyw612ZWlzIVxuXG5BY2Vzc2UgYWdvcmEgZSBjb250cmF0ZSBlbSBtaW51dG9zOlxuaHR0cHM6Ly9sb2phLnZpdmFtYWlzZXZlbnRvcy5jb21cblxuX0VxdWlwZSBWaXZhTWFpcyBFdmVudG9zXyIpOwogICAgICAgICRiZF9lbWFpbF9jbnQgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX2NvbnRhY3RzIFdIRVJFIGVtYWlsICE9ICcnIEFORCBlbWFpbCBJUyBOT1QgTlVMTCIpOwogICAgICAgID8+CiAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjBmOWZmO2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNnB4IDE4cHg7bWFyZ2luLXRvcDoxNnB4Ij4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjEycHgiPgogICAgICAgICAgICAgICAgPHN0cm9uZyBzdHlsZT0iZm9udC1zaXplOjE0cHg7Y29sb3I6IzFlNDBhZiI+8J+TpyBDYW5hbCBFbWFpbCDigJQgUGFyYWxlbG8gYW8gV0E8L3N0cm9uZz4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNkYmVhZmU7Y29sb3I6IzFlNDBhZjtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDAiPjw/cGhwIGVjaG8gJGJkX2VtYWlsX2NudDsgPz4gY29udGF0b3MgY29tIGVtYWlsPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2NDc0OGI7bWFyZ2luOjAgMCAxNHB4Ij4KICAgICAgICAgICAgICAgIFF1YW5kbyBhdGl2bywgZW52aWEgZW1haWwgZW0gcGFyYWxlbG8gYW8gV0EgcGFyYSBjb250YXRvcyBxdWUgdMOqbSBlbWFpbCBjYWRhc3RyYWRvLgogICAgICAgICAgICAgICAgVmFycyBkaXNwb27DrXZlaXM6IDxjb2RlPntub21lfTwvY29kZT4sIDxjb2RlPntsaW5rfTwvY29kZT4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweCI+U3RhdHVzOjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtMl9ieWRhdGVfZW1haWxfb24iIHN0eWxlPSJwYWRkaW5nOjZweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QwZDdkZTtib3JkZXItcmFkaXVzOjZweCI+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCIgPD9waHAgc2VsZWN0ZWQoJGJkX2VtYWlsX29uLCcwJyk7ID8+PvCflLQgRGVzYXRpdmFkbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiIDw/cGhwIHNlbGVjdGVkKCRiZF9lbWFpbF9vbiwnMScpOyA/Pj7wn5+iIEF0aXZvPC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTJweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5OdIEFzc3VudG88L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZtMl9ieWRhdGVfZW1haWxfc3ViamVjdCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGJkX2VtYWlsX3N1YmopOyA/PiIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMGQ3ZGU7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfkqwgQ29ycG8gZG8gZW1haWw8L2xhYmVsPgogICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9InZtMl9ieWRhdGVfZW1haWxfYm9keSIgcm93cz0iNiIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMGQ3ZGU7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO3Jlc2l6ZTp2ZXJ0aWNhbCI+PD9waHAgZWNobyBlc2NfdGV4dGFyZWEoJGJkX2VtYWlsX2JvZHkpOyA/PjwvdGV4dGFyZWE+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTZweDt0ZXh0LWFsaWduOnJpZ2h0Ij4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidXR0b24gYnV0dG9uLXByaW1hcnkiPvCfkr4gU2FsdmFyIENvbmZpZ3VyYcOnw7VlczwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSA9PT09PSBUQUI6IENBUlJJTkhPID09PT09IC0tPgogICAgPGRpdiBjbGFzcz0idm0yLXRhYi1ib2R5IDw/cGhwIGVjaG8gJGFjdGl2ZV90YWIgPT09ICdjYXJyaW5obycgPyAnYWN0aXZlJyA6ICcnOyA/PiI+CiAgICAgICAgPD9waHAgdm0yX3JlbmRlcl9jYXJyaW5ob190YWIoKTsgPz4KICAgIDwvZGl2PgoKICAgIDwhLS0gPT09PT0gVEFCOiBQT1BVUCA9PT09PSAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi10YWItYm9keSA8P3BocCBlY2hvICRhY3RpdmVfdGFiID09PSAncG9wdXAnID8gJ2FjdGl2ZScgOiAnJzsgPz4iPgogICAgPD9waHAKICAgICRwcF9kZWZhdWx0cyA9IFsKICAgICAgICAna2lsbF9zd2l0Y2gnICA9PiAwLAogICAgICAgICdiYW5uZXJfdG9wbycgID0+ICfwn5SlIFZBR0FTIExJTUlUQURBUyBQQVJBIEVTVEEgREFUQScsCiAgICAgICAgJ3RpdHVsbycgICAgICAgPT4gJ0dhcmFudGEgc3VhIGRhdGEgYW50ZXMgcXVlIGFjYWJlISDwn46JJywKICAgICAgICAnc3VidGl0dWxvJyAgICA9PiAnSW5mb3JtZSBzZXUgV2hhdHNBcHAgcGFyYSBjb250aW51YXInLAogICAgICAgICd1cmdlbmNpYScgICAgID0+ICfwn5GAIGrDoSB0ZW0gZ2VudGUgZGUgb2xobyBuZXNzYSBkYXRhJywKICAgICAgICAnY3RhX3RleHQnICAgICA9PiAn8J+UkiBHYXJhbnRpciBtaW5oYSBkYXRhIOKGkicsCiAgICAgICAgJ2RlbGF5X3NlYycgICAgPT4gNSwKICAgICAgICAnc2hvd19vbicgICAgICA9PiAncHJvZHV0bycsCiAgICAgICAgJ3Nlc3Npb25fZXhwaXJ5X2hvdXJzJyA9PiAyNCwKICAgIF07CiAgICAkcHBfc2F2ZWQgPSBnZXRfb3B0aW9uKCd2bTJfcG9wdXBfY29uZmlnJywgW10pOwogICAgaWYgKCFpc19hcnJheSgkcHBfc2F2ZWQpKSAkcHBfc2F2ZWQgPSBbXTsKICAgICRwcCA9IGFycmF5X21lcmdlKCRwcF9kZWZhdWx0cywgJHBwX3NhdmVkKTsKICAgICRwcF9rcyAgICA9ICFlbXB0eSgkcHBbJ2tpbGxfc3dpdGNoJ10pOwogICAgJHBwX25vbmNlID0gd3BfY3JlYXRlX25vbmNlKCd2bTJfcG9wdXBfc2F2ZScpOwogICAgZ2xvYmFsICR3cGRiOwogICAgJHBwX3RvdGFsID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm1fd2FfY2FwdHVyZXMgV0hFUkUgc3RhdHVzIElOICgnc2VudCcsJ2JvdWdodCcpIik7CiAgICAkcHBfc2hvd3MgPSAoaW50KWdldF9vcHRpb24oJ3ZtMl9wb3B1cF9zdGF0X3Nob3dzJywgMCk7CiAgICAkcHBfY29udiAgPSAoaW50KWdldF9vcHRpb24oJ3ZtMl9wb3B1cF9zdGF0X2NvbnZlcnNpb25zJywgMCk7CiAgICAvLyBDb252ZXJzw6NvIHVzYSBjb250YWRvcmVzIHJlY2VudGVzIChzaG93cyArIGNvbnZlcnNpb25zIHJhc3RyZWFkb3MgZGVzZGUgdjEuMS4yL3YxLjEuMykKICAgIGlmICggJHBwX3Nob3dzIDw9IDAgKSB7CiAgICAgICAgJHBwX3JhdGUgPSBudWxsOwogICAgfSBlbHNlIHsKICAgICAgICAkcHBfcmF0ZSA9IHJvdW5kKCRwcF9jb252IC8gJHBwX3Nob3dzICogMTAwLCAxKTsKICAgIH0KICAgID8+CgogICAgPCEtLSBLUEkgY2FyZHMgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpcyIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDE0MHB4LDFmcikpO21hcmdpbi1ib3R0b206MjBweCI+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgc3R5bGU9ImJvcmRlci1sZWZ0OjRweCBzb2xpZCAjNjY3ZWVhIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPvCfkYHvuI8gRXhpYmnDp8O1ZXM8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiPjw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkcHBfc2hvd3MpOyA/PjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWx0YSBuZXV0cmFsIj5wb3B1cHMgbW9zdHJhZG9zPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgc3R5bGU9ImJvcmRlci1sZWZ0OjRweCBzb2xpZCAjMjdhZTYwIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPvCfk7EgQ2FkYXN0cm9zPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIiBzdHlsZT0iY29sb3I6IzI3YWU2MCI+PD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRwcF90b3RhbCk7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPldoYXRzQXBwcyBjYXB0dXJhZG9zPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgc3R5bGU9ImJvcmRlci1sZWZ0OjRweCBzb2xpZCAjZjM5YzEyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPvCfk4ogQ29udmVyc8OjbzwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSIgc3R5bGU9ImNvbG9yOiM8P3BocCBlY2hvICRwcF9yYXRlICE9PSBudWxsID8gJ2YzOWMxMicgOiAnOTk5JzsgPz4iPjw/cGhwIGVjaG8gJHBwX3JhdGUgIT09IG51bGwgPyAkcHBfcmF0ZSAuICclJyA6ICfigJQnOyA/PjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWx0YSBuZXV0cmFsIj48P3BocCBlY2hvICRwcF9yYXRlICE9PSBudWxsID8gJHBwX2NvbnYgLiAnIGNvbnZlcnPDtWVzIC8gJyAuICRwcF9zaG93cyAuICcgZXhpYmnDp8O1ZXMnIDogJ2FndWFyZGFuZG8gZXhpYmnDp8O1ZXMuLi4nOyA/PjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgIzw/cGhwIGVjaG8gJHBwX2tzID8gJ2RjMzU0NScgOiAnMjdhZTYwJzsgPz4iCiAgICAgICAgICAgICBvbmNsaWNrPSJ2YXIgY2I9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlBwS3MnKTtjYi5jaGVja2VkPSFjYi5jaGVja2VkO3RoaXMucXVlcnlTZWxlY3RvcignLnZhbHVlJykudGV4dENvbnRlbnQ9Y2IuY2hlY2tlZD8nUEFSQURPJzonQVRJVk8nO3RoaXMucXVlcnlTZWxlY3RvcignLnZhbHVlJykuc3R5bGUuY29sb3I9Y2IuY2hlY2tlZD8nI2RjMzU0NSc6JyMyN2FlNjAnO3RoaXMuc3R5bGUuYm9yZGVyTGVmdENvbG9yPWNiLmNoZWNrZWQ/JyNkYzM1NDUnOicjMjdhZTYwJzsiCiAgICAgICAgICAgICB0aXRsZT0iQ2xpcXVlIHBhcmEgYWx0ZXJuYXIga2lsbCBzd2l0Y2giIHN0eWxlPSJjdXJzb3I6cG9pbnRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn5uRIFN0YXR1czwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSIgc3R5bGU9ImNvbG9yOiM8P3BocCBlY2hvICRwcF9rcyA/ICdkYzM1NDUnIDogJzI3YWU2MCc7ID8+O2ZvbnQtc2l6ZToxNnB4Ij48P3BocCBlY2hvICRwcF9rcyA/ICdQQVJBRE8nIDogJ0FUSVZPJzsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgbmV1dHJhbCI+Y2xpcXVlIHBhcmEgYWx0ZXJuYXI8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InZtMi1ncmlkMiI+CiAgICA8IS0tIENvbmZpZyAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1jYXJkIiBpZD0idm0yLXBwLWNvbmZpZyI+CiAgICAgICAgPGgzPuKame+4jyBDb25maWd1cmHDp8O1ZXMg4oCUIFBvcHVwIENhcHR1cmE8L2gzPgoKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7wn5uRIEtpbGwgU3dpdGNoPC9sYWJlbD4KICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idm0yUHBLcyIgPD9waHAgZWNobyAkcHBfa3MgPyAnY2hlY2tlZCcgOiAnJzsgPz4+CiAgICAgICAgICAgICAgICA8c3Bhbj5QYXVzYXIgZXhpYmnDp8OjbyBkbyBwb3B1cDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItYmFkZ2UgPD9waHAgZWNobyAkcHBfa3MgPyAnYmFkZ2UtZGFuZ2VyJyA6ICdiYWRnZS1zdWNjZXNzJzsgPz4iPjw/cGhwIGVjaG8gJHBwX2tzID8gJ1BBUkFETycgOiAnQVRJVk8nOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2bTItZmxkLWxibCI+8J+UtCBCYW5uZXIgdG9wbyAoZmFpeGEgdmVybWVsaGEpPC9sYWJlbD4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ2bTJQcEJhbm5lciIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHBwWydiYW5uZXJfdG9wbyddKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2bTItZmxkLWxibCI+8J+TnSBUw610dWxvIHByaW5jaXBhbDwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idm0yUHBUaXR1bG8iIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRwcFsndGl0dWxvJ10pOyA/PiIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7wn5KsIFN1YnTDrXR1bG88L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InZtMlBwU3VidGl0dWxvIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkcHBbJ3N1YnRpdHVsbyddKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2bTItZmxkLWxibCI+8J+UpSBUZXh0byBkZSB1cmfDqm5jaWEgKHNvY2lhbCBwcm9vZik8L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InZtMlBwVXJnZW5jaWEiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRwcFsndXJnZW5jaWEnXSk7ID8+IiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPvCflJggVGV4dG8gZG8gYm90w6NvIENUQTwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idm0yUHBDdGEiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRwcFsnY3RhX3RleHQnXSk7ID8+IiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6MTZweDttYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4OjE7bWluLXdpZHRoOjEwMHB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPuKPse+4jyBEZWxheSAoc2VndW5kb3MpPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ2bTJQcERlbGF5IiB2YWx1ZT0iPD9waHAgZWNobyAoaW50KSRwcFsnZGVsYXlfc2VjJ107ID8+IiBtaW49IjAiIG1heD0iNjAiIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsZXg6MjttaW4td2lkdGg6MTUwcHgiPgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2bTItZmxkLWxibCI+8J+ThCBFeGliaXIgZW08L2xhYmVsPgogICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0idm0yUHBTaG93T24iIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwcm9kdXRvIiA8P3BocCBlY2hvICRwcFsnc2hvd19vbiddPT09J3Byb2R1dG8nID8gJ3NlbGVjdGVkJyA6ICcnOyA/Pj5Qw6FnaW5hcyBkZSBwcm9kdXRvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idG9kYXMiIDw/cGhwIGVjaG8gJHBwWydzaG93X29uJ109PT0ndG9kYXMnID8gJ3NlbGVjdGVkJyA6ICcnOyA/Pj5Ub2RhcyBhcyBww6FnaW5hczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImhvbWUiIDw/cGhwIGVjaG8gJHBwWydzaG93X29uJ109PT0naG9tZScgPyAnc2VsZWN0ZWQnIDogJyc7ID8+PkFwZW5hcyBob21lPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iY2hlY2tvdXQiIDw/cGhwIGVjaG8gJHBwWydzaG93X29uJ109PT0nY2hlY2tvdXQnID8gJ3NlbGVjdGVkJyA6ICcnOyA/Pj5DaGVja291dDwvb3B0aW9uPgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7wn5SBIFJldXRpbGl6YXIgc2Vzc8OjbyBwb3IgKGhvcmFzKTwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHgiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InZtMlBwU2Vzc2lvbkV4cGlyeSIgdmFsdWU9Ijw/cGhwIGVjaG8gKGludCkoJHBwWydzZXNzaW9uX2V4cGlyeV9ob3VycyddID8/IDI0KTsgPz4iIG1pbj0iMSIgbWF4PSI3MjAiIHN0eWxlPSJ3aWR0aDoxMDBweCI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6Izg4OCI+QXDDs3MgZXNzZSBwZXLDrW9kbywgbyBwb3B1cCBzZXLDoSBleGliaWRvIG5vdmFtZW50ZSBwYXJhIGNhcHR1cmFyIG5vdm9zIHByb2R1dG9zIHZpc2l0YWRvcy4gKHBhZHLDo286IDI0aCk8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDo4cHg7cGFkZGluZy10b3A6MTBweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTBlMGUwIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5IiBvbmNsaWNrPSJ2bTJTYXZlUG9wdXBDb25maWcoKSI+8J+SviBTYWx2YXI8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJ2bTItcHAtbXNnIiBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7Zm9udC1zaXplOjEycHgiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBQcmV2aWV3IC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWNhcmQiPgogICAgICAgIDxoMz7wn5GBIFByZXZpZXcgKGRlc2lnbiBhdHVhbCk8L2gzPgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjA3KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyNHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttaW4taGVpZ2h0OjQ4MHB4O3Bvc2l0aW9uOnJlbGF0aXZlIj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNSk7Ym9yZGVyLXJhZGl1czoxMnB4O3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjAiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJ2bTItcHAtcHJldmlldyIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6Mjtib3JkZXItcmFkaXVzOjE2cHg7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6MCAyMHB4IDYwcHggcmdiYSgwLDAsMCwwLjUpO21heC13aWR0aDozMjBweDt3aWR0aDoxMDAlO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjMWEwNTMzIDAlLCMyZDEwNTIgNTAlLCMxYTA1MzMgMTAwJSkiPgogICAgICAgICAgICAgICAgPCEtLSBCYW5uZXIgdG9wbyAtLT4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9InZtMi1wcC1wcmV2LWJhbm5lciIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6OHB4IDEycHg7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjExcHg7bGV0dGVyLXNwYWNpbmc6MXB4O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCNmZjQ0NDQsI2ZmNmIzNSkiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gZXNjX2h0bWwoJHBwWydiYW5uZXJfdG9wbyddKTsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPCEtLSBCb2R5IC0tPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzoyOHB4IDI0cHg7dGV4dC1hbGlnbjpjZW50ZXIiPgogICAgICAgICAgICAgICAgICAgIDwhLS0gV0EgSWNvbiAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDo2NHB4O2hlaWdodDo2NHB4O2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUsI2ZmNmI2YiAwJSwjZTg0MzkzIDEwMCUpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIj48cGF0aCBkPSJNMTcuNDcyIDE0LjM4MmMtLjI5Ny0uMTQ5LTEuNzU4LS44NjctMi4wMy0uOTY3LS4yNzMtLjA5OS0uNDcxLS4xNDgtLjY3LjE1LS4xOTcuMjk3LS43NjcuOTY2LS45NCAxLjE2NC0uMTczLjE5OS0uMzQ3LjIyMy0uNjQ0LjA3NS0uMjk3LS4xNS0xLjI1NS0uNDYzLTIuMzktMS40NzUtLjg4My0uNzg4LTEuNDgtMS43NjEtMS42NTMtMi4wNTktLjE3My0uMjk3LS4wMTgtLjQ1OC4xMy0uNjA2LjEzNC0uMTMzLjI5OC0uMzQ3LjQ0Ni0uNTIuMTQ5LS4xNzQuMTk4LS4yOTguMjk4LS40OTcuMDk5LS4xOTguMDUtLjM3MS0uMDI1LS41Mi0uMDc1LS4xNDktLjY2OS0xLjYxMi0uOTE2LTIuMjA3LS4yNDItLjU3OS0uNDg3LS41LS42NjktLjUxLS4xNzMtLjAwOC0uMzcxLS4wMS0uNTctLjAxLS4xOTggMC0uNTIuMDc0LS43OTIuMzcyLS4yNzIuMjk3LTEuMDQgMS4wMTYtMS4wNCAyLjQ3OSAwIDEuNDYyIDEuMDY1IDIuODc1IDEuMjEzIDMuMDc0LjE0OS4xOTggMi4wOTYgMy4yIDUuMDc3IDQuNDg3LjcwOS4zMDYgMS4yNjIuNDg5IDEuNjk0LjYyNS43MTIuMjI3IDEuMzYuMTk1IDEuODcxLjExOC41NzEtLjA4NSAxLjc1OC0uNzE5IDIuMDA2LTEuNDEzLjI0OC0uNjk0LjI0OC0xLjI4OS4xNzMtMS40MTMtLjA3NC0uMTI0LS4yNzItLjE5OC0uNTctLjM0N20tNS40MjEgNy40MDNoLS4wMDRhOS44NyA5Ljg3IDAgMDEtNS4wMzEtMS4zNzhsLS4zNjEtLjIxNC0zLjc0MS45ODIuOTk4LTMuNjQ4LS4yMzUtLjM3NGE5Ljg2IDkuODYgMCAwMS0xLjUxLTUuMjZjLjAwMS01LjQ1IDQuNDM2LTkuODg0IDkuODg4LTkuODg0IDIuNjQgMCA1LjEyMiAxLjAzIDYuOTg4IDIuODk4YTkuODI1IDkuODI1IDAgMDEyLjg5MyA2Ljk5NGMtLjAwMyA1LjQ1LTQuNDM3IDkuODg0LTkuODg1IDkuODg0bTguNDEzLTE4LjI5N0ExMS44MTUgMTEuODE1IDAgMDAxMi4wNSAwQzUuNDk1IDAgLjE2IDUuMzM1LjE1NyAxMS44OTJjMCAyLjA5Ni41NDcgNC4xNDIgMS41ODggNS45NDVMLjA1NyAyNGw2LjMwNS0xLjY1NGExMS44ODIgMTEuODgyIDAgMDA1LjY4MyAxLjQ0OGguMDA1YzYuNTU0IDAgMTEuODktNS4zMzUgMTEuODkzLTExLjg5M2ExMS44MjEgMTEuODIxIDAgMDAtMy40OC04LjQxM3oiLz48L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBUaXRsZSAtLT4KICAgICAgICAgICAgICAgICAgICA8aDQgaWQ9InZtMi1wcC1wcmV2LXRpdHVsbyIgc3R5bGU9ImNvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjEuMzttYXJnaW4tYm90dG9tOjZweCI+PD9waHAgZWNobyBlc2NfaHRtbCgkcHBbJ3RpdHVsbyddKTsgPz48L2g0PgogICAgICAgICAgICAgICAgICAgIDxwIGlkPSJ2bTItcHAtcHJldi1zdWIiIHN0eWxlPSJjb2xvcjojZDhiNGZlO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi1ib3R0b206MTRweCI+PD9waHAgZWNobyBlc2NfaHRtbCgkcHBbJ3N1YnRpdHVsbyddKTsgPz48L3A+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBVcmfDqm5jaWEgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0idm0yLXBwLXByZXYtdXJnZW5jaWEiIHN0eWxlPSJiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC4xKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKTtib3JkZXItcmFkaXVzOjUwcHg7cGFkZGluZzo4cHggMTZweDtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGVzY19odG1sKCRwcFsndXJnZW5jaWEnXSk7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBQaG9uZSBpbnB1dCDigJQgZXN0YWRvIHByZWVuY2hpZG8gLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCAjZmZkNzAwO2JvcmRlci1yYWRpdXM6OHB4O292ZXJmbG93OmhpZGRlbjttYXJnaW4tYm90dG9tOjEycHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9Iig1NSkgMTE5OTItNTg2OCIgZGlzYWJsZWQgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzoxMnB4IDE2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzFhMWEyZTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjE1cHg7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtd2VpZ2h0OjYwMCI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBDVEEg4oCUIGVzdGFkbyBwcmVlbmNoaWRvIChsYXJhbmphKSAtLT4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJ2bTItcHAtcHJldi1jdGEiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6MTRweDtib3JkZXItcmFkaXVzOjhweDtmb250LXdlaWdodDo4MDA7Y29sb3I6I2ZmZjtmb250LXNpemU6MTVweDtib3JkZXI6bm9uZTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywjZjk3MzE2IDAlLCNmNDNmNWUgMTAwJSk7bGV0dGVyLXNwYWNpbmc6MC41cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlIj48P3BocCBlY2hvIGVzY19odG1sKCRwcFsnY3RhX3RleHQnXSk7ID8+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWN1cml0eSAtLT4KICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6I2M0YjVmZDtmb250LXNpemU6MTFweDttYXJnaW4tdG9wOjEwcHgiPvCflJIgMTAwJSBzZWd1cm88L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODg7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLXRvcDo4cHgiPlBvcHVwIGF0aXZvIG5vIHNpdGUg4oCUIGFwYXJlY2UgYXDDs3MgPD9waHAgZWNobyAoaW50KSRwcFsnZGVsYXlfc2VjJ107ID8+cyBlbSBww6FnaW5hcyBkZSBwcm9kdXRvLjwvcD4KICAgIDwvZGl2PgogICAgPC9kaXY+PCEtLSAudm0yLWdyaWQyIC0tPgoKICAgIDxzY3JpcHQ+CiAgICAvLyBMaXZlIHByZXZpZXcgdXBkYXRlCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1hcCA9IHsKICAgICAgICAgICAgJ3ZtMlBwQmFubmVyJzogICAgJ3ZtMi1wcC1wcmV2LWJhbm5lcicsCiAgICAgICAgICAgICd2bTJQcFRpdHVsbyc6ICAgICd2bTItcHAtcHJldi10aXR1bG8nLAogICAgICAgICAgICAndm0yUHBTdWJ0aXR1bG8nOiAndm0yLXBwLXByZXYtc3ViJywKICAgICAgICAgICAgJ3ZtMlBwVXJnZW5jaWEnOiAgJ3ZtMi1wcC1wcmV2LXVyZ2VuY2lhJywKICAgICAgICAgICAgJ3ZtMlBwQ3RhJzogICAgICAgJ3ZtMi1wcC1wcmV2LWN0YScsCiAgICAgICAgfTsKICAgICAgICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24oaW5wdXRJZCkgewogICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dElkKTsKICAgICAgICAgICAgaWYgKGVsKSBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1hcFtpbnB1dElkXSk7CiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0KSB0YXJnZXQudGV4dENvbnRlbnQgPSBlbC52YWx1ZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9KTsKCiAgICBmdW5jdGlvbiB2bTJTYXZlUG9wdXBDb25maWcoKSB7CiAgICAgICAgdmFyIG5vbmNlID0gPD9waHAgZWNobyBqc29uX2VuY29kZSgkcHBfbm9uY2UpOyA/PjsKICAgICAgICB2YXIgZGF0YSA9IHsKICAgICAgICAgICAgYWN0aW9uOiAndm0yX3BvcHVwX3NhdmVfY29uZmlnJywKICAgICAgICAgICAgbm9uY2U6IG5vbmNlLAogICAgICAgICAgICBraWxsX3N3aXRjaDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlBwS3MnKS5jaGVja2VkID8gMSA6IDAsCiAgICAgICAgICAgIGJhbm5lcl90b3BvOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yUHBCYW5uZXInKS52YWx1ZSwKICAgICAgICAgICAgdGl0dWxvOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yUHBUaXR1bG8nKS52YWx1ZSwKICAgICAgICAgICAgc3VidGl0dWxvOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yUHBTdWJ0aXR1bG8nKS52YWx1ZSwKICAgICAgICAgICAgdXJnZW5jaWE6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJQcFVyZ2VuY2lhJykudmFsdWUsCiAgICAgICAgICAgIGN0YV90ZXh0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yUHBDdGEnKS52YWx1ZSwKICAgICAgICAgICAgZGVsYXlfc2VjOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yUHBEZWxheScpLnZhbHVlLAogICAgICAgICAgICBzaG93X29uOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yUHBTaG93T24nKS52YWx1ZSwKICAgICAgICAgICAgc2Vzc2lvbl9leHBpcnlfaG91cnM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJQcFNlc3Npb25FeHBpcnknKS52YWx1ZSwKICAgICAgICB9OwogICAgICAgIHZhciBmZCA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goZnVuY3Rpb24oaykgeyBmZC5hcHBlbmQoaywgZGF0YVtrXSk7IH0pOwogICAgICAgIHZhciBtc2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXBwLW1zZycpOwogICAgICAgIG1zZy5zdHlsZS5jb2xvciA9ICcjODg4JzsKICAgICAgICBtc2cudGV4dENvbnRlbnQgPSAnU2FsdmFuZG8uLi4nOwogICAgICAgIGZldGNoKGFqYXh1cmwsIHttZXRob2Q6J1BPU1QnLCBib2R5OmZkfSkKICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocikgeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcykgewogICAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgbXNnLnN0eWxlLmNvbG9yID0gJyMyN2FlNjAnOwogICAgICAgICAgICAgICAgICAgIG1zZy50ZXh0Q29udGVudCA9ICfinIUgJyArIHJlcy5kYXRhLm1lc3NhZ2U7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIG1zZy5zdHlsZS5jb2xvciA9ICcjZGMzNTQ1JzsKICAgICAgICAgICAgICAgICAgICBtc2cudGV4dENvbnRlbnQgPSAn4p2MIEVycm8gYW8gc2FsdmFyJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgbXNnLnN0eWxlLmNvbG9yID0gJyNkYzM1NDUnOwogICAgICAgICAgICAgICAgbXNnLnRleHRDb250ZW50ID0gJ+KdjCBFcnJvIGRlIGNvbmV4w6NvJzsKICAgICAgICAgICAgfSk7CiAgICB9CiAgICA8L3NjcmlwdD4KICAgIDw/cGhwIC8vIGVuZCB0YWIgcG9wdXAgPz4KICAgIDwvZGl2PgoKICAgIDwhLS0gPT09PT0gVEFCOiBFWElULUlOVEVOVCA9PT09PSAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi10YWItYm9keSA8P3BocCBlY2hvICRhY3RpdmVfdGFiID09PSAnZXhpdGludGVudCcgPyAnYWN0aXZlJyA6ICcnOyA/PiI+CiAgICA8P3BocAogICAgJGVpX2RlZmF1bHRzID0gWwogICAgICAgICdraWxsX3N3aXRjaCcgICA9PiAwLAogICAgICAgICdncnVwb191cmwnICAgICA9PiAnaHR0cHM6Ly9jaGF0LndoYXRzYXBwLmNvbS9CZFhQTGRRcWJnTTgwSVBYVlJBM2VxJywKICAgICAgICAndXRtX3NvdXJjZScgICAgPT4gJ3NpdGUnLAogICAgICAgICd1dG1fbWVkaXVtJyAgICA9PiAnZXhpdF9pbnRlbnQnLAogICAgICAgICd1dG1fY2FtcGFpZ24nICA9PiAnZ3J1cG9fdmlwJywKICAgICAgICAndGl0bGUnICAgICAgICAgPT4gJ0VpLCBqw6EgdmFpPyDwn5iiJywKICAgICAgICAnc3VidGl0bGUnICAgICAgPT4gJ0VudHJlIG5vIG5vc3NvIDxzdHJvbmc+R3J1cG8gVklQIGRlIE9mZXJ0YXM8L3N0cm9uZz4gbm8gV2hhdHNBcHAgZSByZWNlYmEgcHJvbW/Dp8O1ZXMgZXhjbHVzaXZhcyEnLAogICAgICAgICdjdGFfdGV4dCcgICAgICA9PiAnUXVlcm8gZW50cmFyIG5vIEdydXBvIFZJUCEg8J+OiScsCiAgICAgICAgJ2Nvb2xkb3duX2RheXMnID0+IDcsCiAgICAgICAgJ3RpbWVyX2RlbGF5JyAgID0+IDYwLAogICAgXTsKICAgICRlaV9zYXZlZCA9IGdldF9vcHRpb24oJ3ZtX2VpX2NvbmZpZycsIFtdKTsKICAgIGlmICghaXNfYXJyYXkoJGVpX3NhdmVkKSkgJGVpX3NhdmVkID0gW107CiAgICAkZWlfY2ZnID0gYXJyYXlfbWVyZ2UoJGVpX2RlZmF1bHRzLCAkZWlfc2F2ZWQpOwogICAgJGVpX2tzICAgICA9ICFlbXB0eSgkZWlfY2ZnWydraWxsX3N3aXRjaCddKTsKICAgICRlaV9zaG93cyAgPSAoaW50KWdldF9vcHRpb24oJ3ZtX2VpX3N0YXRfc2hvd3MnLCAwKTsKICAgICRlaV9jbGlja3MgPSAoaW50KWdldF9vcHRpb24oJ3ZtX2VpX3N0YXRfY2xpY2tzJywgMCk7CiAgICAkZWlfcmF0ZSAgID0gJGVpX3Nob3dzID4gMCA/IHJvdW5kKCRlaV9jbGlja3MgLyAkZWlfc2hvd3MgKiAxMDAsIDEpIDogMDsKICAgICRlaV9ub25jZSAgPSB3cF9jcmVhdGVfbm9uY2UoJ3ZtMl9laV9zYXZlJyk7CiAgICA/PgoKICAgIDwhLS0gS1BJIENhcmRzIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWtwaXMiIHN0eWxlPSJncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxNDBweCwxZnIpKSI+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgc3R5bGU9ImJvcmRlci1sZWZ0OjRweCBzb2xpZCAjNjY3ZWVhIiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWVpLWNvbmZpZycpLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjonc21vb3RoJ30pIiB0aXRsZT0iVmVyIGNvbmZpZ3VyYcOnw7VlcyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn5GB77iPIEV4aWJpw6fDtWVzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj48P3BocCBlY2hvICRlaV9zaG93czsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgbmV1dHJhbCI+cG9wdXBzIG1vc3RyYWRvczwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgIzI3YWU2MCIgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1laS1jb25maWcnKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIgdGl0bGU9IlZlciBjb25maWd1cmHDp8O1ZXMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+4pyFIENsaXF1ZXM8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIHN0eWxlPSJjb2xvcjojMjdhZTYwIj48P3BocCBlY2hvICRlaV9jbGlja3M7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPmVudHJhZGFzIG5vIGdydXBvPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgc3R5bGU9ImJvcmRlci1sZWZ0OjRweCBzb2xpZCAjZjM5YzEyIiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWVpLWNvbmZpZycpLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjonc21vb3RoJ30pIiB0aXRsZT0iVmVyIGNvbmZpZ3VyYcOnw7VlcyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn5OKIENvbnZlcnPDo288L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIHN0eWxlPSJjb2xvcjojZjM5YzEyIj48P3BocCBlY2hvICRlaV9yYXRlOyA/PiU8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgbmV1dHJhbCI+Y2xpcXVlcyAvIGV4aWJpw6fDtWVzPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgc3R5bGU9ImJvcmRlci1sZWZ0OjRweCBzb2xpZCAjPD9waHAgZWNobyAkZWlfa3MgPyAnZGMzNTQ1JyA6ICcyN2FlNjAnOyA/PiIKICAgICAgICAgICAgIG9uY2xpY2s9InZhciBjYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlLcycpO2NiLmNoZWNrZWQ9IWNiLmNoZWNrZWQ7dGhpcy5xdWVyeVNlbGVjdG9yKCcudmFsdWUnKS50ZXh0Q29udGVudD1jYi5jaGVja2VkPydQQVJBRE8nOidBVElWTyc7dGhpcy5xdWVyeVNlbGVjdG9yKCcudmFsdWUnKS5zdHlsZS5jb2xvcj1jYi5jaGVja2VkPycjZGMzNTQ1JzonIzI3YWU2MCc7dGhpcy5zdHlsZS5ib3JkZXJMZWZ0Q29sb3I9Y2IuY2hlY2tlZD8nI2RjMzU0NSc6JyMyN2FlNjAnOyIKICAgICAgICAgICAgIHRpdGxlPSJDbGlxdWUgcGFyYSBhbHRlcm5hciBraWxsIHN3aXRjaCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn5uRIFN0YXR1czwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSIgc3R5bGU9ImNvbG9yOiM8P3BocCBlY2hvICRlaV9rcyA/ICdkYzM1NDUnIDogJzI3YWU2MCc7ID8+O2ZvbnQtc2l6ZToxNnB4Ij48P3BocCBlY2hvICRlaV9rcyA/ICdQQVJBRE8nIDogJ0FUSVZPJzsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgbmV1dHJhbCI+Y2xpcXVlIHBhcmEgYWx0ZXJuYXI8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InZtMi1ncmlkMiI+CiAgICA8IS0tIENvbmZpZyAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1jYXJkIiBpZD0idm0yLWVpLWNvbmZpZyI+CiAgICAgICAgPGgzPuKame+4jyBDb25maWd1cmHDp8O1ZXM8L2gzPgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPvCfm5EgS2lsbCBTd2l0Y2g8L2xhYmVsPgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlciI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ2bTJFaUtzIiA8P3BocCBlY2hvICRlaV9rcyA/ICdjaGVja2VkJyA6ICcnOyA/Pj4KICAgICAgICAgICAgICAgIDxzcGFuPlBhdXNhciBleGliacOnw6NvIGRvIHBvcHVwPC9zcGFuPgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPvCflJcgTGluayBkbyBHcnVwbyBWSVAgKFdoYXRzQXBwKTwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idm0yRWlHcnVwb1VybCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGVpX2NmZ1snZ3J1cG9fdXJsJ10pOyA/PiIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPvCfk50gVMOtdHVsbyBkbyBQb3B1cDwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idm0yRWlUaXRsZSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGVpX2NmZ1sndGl0bGUnXSk7ID8+IiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2bTItZmxkLWxibCI+8J+SrCBTdWJ0w610dWxvPC9sYWJlbD4KICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJ2bTJFaVN1YnRpdGxlIiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6NjBweDtyZXNpemU6dmVydGljYWw7Zm9udC1zaXplOjEycHgiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRlaV9jZmdbJ3N1YnRpdGxlJ10pOyA/PjwvdGV4dGFyZWE+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2bTItZmxkLWxibCI+8J+Wse+4jyBUZXh0byBkbyBCb3TDo28gQ1RBPC9sYWJlbD4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ2bTJFaUN0YSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGVpX2NmZ1snY3RhX3RleHQnXSk7ID8+IiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWNmZy0yY29sIiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7ij7HvuI8gQ29vbGRvd24gKGRpYXMpPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ2bTJFaUNvb2xkb3duIiB2YWx1ZT0iPD9waHAgZWNobyAoaW50KSRlaV9jZmdbJ2Nvb2xkb3duX2RheXMnXTsgPz4iIG1pbj0iMCIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPuKPsCBEZWxheSBmYWxsYmFjayAoc2VnKTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idm0yRWlUaW1lciIgdmFsdWU9Ijw/cGhwIGVjaG8gKGludCkkZWlfY2ZnWyd0aW1lcl9kZWxheSddOyA/PiIgbWluPSIwIiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7bWFyZ2luLXRvcDo4cHgiPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSIgb25jbGljaz0idm0yRWlTYXZlKCkiPvCfkr4gU2FsdmFyIENvbmZpZ3VyYcOnw7VlczwvYnV0dG9uPgogICAgICAgICAgICA8c3BhbiBpZD0idm0yRWlNc2ciIHN0eWxlPSJtYXJnaW4tbGVmdDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMyN2FlNjAiPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gUHJldmlldyBhbyB2aXZvIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWNhcmQiPgogICAgICAgIDxoMz7wn5GBIFByZXZpZXcg4oCUIEV4aXQgSW50ZW50PC9oMz4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC4wNyk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjRweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWluLWhlaWdodDozODBweDtwb3NpdGlvbjpyZWxhdGl2ZSI+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO2JvcmRlci1yYWRpdXM6MTJweDtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowIj48L2Rpdj4KICAgICAgICAgICAgPCEtLSBNb2RhbCBwcmV2aWV3IC0tPgogICAgICAgICAgICA8ZGl2IGlkPSJ2bTItZWktcHJldmlldyIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MjtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNnB4O2JveC1zaGFkb3c6MCAyMHB4IDYwcHggcmdiYSgwLDAsMCwwLjUpO21heC13aWR0aDozMjBweDt3aWR0aDoxMDAlO3BhZGRpbmc6MjhweCAyNHB4O3RleHQtYWxpZ246Y2VudGVyIj4KICAgICAgICAgICAgICAgIDwhLS0gRW1vamkgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6NDhweDttYXJnaW4tYm90dG9tOjEwcHgiPvCfjok8L2Rpdj4KICAgICAgICAgICAgICAgIDwhLS0gVGl0bGUgLS0+CiAgICAgICAgICAgICAgICA8aDQgaWQ9InZtMi1laS1wcmV2LXRpdGxlIiBzdHlsZT0iZm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMxYTFhMmU7bWFyZ2luLWJvdHRvbTo4cHg7bGluZS1oZWlnaHQ6MS4zIj48P3BocCBlY2hvIGVzY19odG1sKCRlaV9jZmdbJ3RpdGxlJ10pOyA/PjwvaDQ+CiAgICAgICAgICAgICAgICA8IS0tIFN1YnRpdGxlIC0tPgogICAgICAgICAgICAgICAgPHAgaWQ9InZtMi1laS1wcmV2LXN1YiIgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM1NTU7bWFyZ2luLWJvdHRvbToxOHB4O2xpbmUtaGVpZ2h0OjEuNSI+PD9waHAgZWNobyB3cF9rc2VzKCRlaV9jZmdbJ3N1YnRpdGxlJ10sIFsnc3Ryb25nJz0+W10sICdlbSc9PltdLCAnYnInPT5bXV0pOyA/PjwvcD4KICAgICAgICAgICAgICAgIDwhLS0gQ1RBIEJ1dHRvbiAtLT4KICAgICAgICAgICAgICAgIDxhIGlkPSJ2bTItZWktcHJldi1jdGEiIGhyZWY9IiMiIHN0eWxlPSJkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MTRweDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOiMyNWQzNjY7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE1cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGV0dGVyLXNwYWNpbmc6MC4zcHgiIG9uY2xpY2s9InJldHVybiBmYWxzZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkZWlfY2ZnWydjdGFfdGV4dCddKTsgPz48L2E+CiAgICAgICAgICAgICAgICA8IS0tIENsb3NlIGhpbnQgLS0+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6I2FhYTttYXJnaW4tdG9wOjEycHgiPsOXIEZlY2hhcjwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODg7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLXRvcDo4cHgiPkdhdGlsaG9zOiBzY3JvbGwgMjAw4oaTKzEwMOKGkSDCtyBtb3VzZWxlYXZlIHRvcG8gwrcgdGltZXIgPD9waHAgZWNobyAoaW50KSRlaV9jZmdbJ3RpbWVyX2RlbGF5J107ID8+czwvcD4KCiAgICAgICAgPCEtLSBVVE0gKyBaZXJhciAoY29sYXBzYWRvcyBhYmFpeG8gZG8gcHJldmlldykgLS0+CiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxNHB4O3BhZGRpbmctdG9wOjE0cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2UwZTBlMCI+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPvCflJcgTGluayBjb21wbGV0byAoY29tIFVUTSk8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmNmY4ZmE7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6OHB4O2ZvbnQtc2l6ZToxMXB4O3dvcmQtYnJlYWs6YnJlYWstYWxsIj4KICAgICAgICAgICAgICAgIDxjb2RlIGlkPSJ2bTItZWktcHJldi1saW5rIj48P3BocCBlY2hvIGVzY19odG1sKCRlaV9jZmdbJ2dydXBvX3VybCddIC4gJz91dG1fc291cmNlPScgLiAkZWlfY2ZnWyd1dG1fc291cmNlJ10gLiAnJnV0bV9tZWRpdW09JyAuICRlaV9jZmdbJ3V0bV9tZWRpdW0nXSAuICcmdXRtX2NhbXBhaWduPScgLiAkZWlfY2ZnWyd1dG1fY2FtcGFpZ24nXSk7ID8+PC9jb2RlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjE0cHg7cGFkZGluZy10b3A6MTRweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTBlMGUwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHgiPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiIgb25jbGljaz0idm0yRWlSZXNldCgpIiBzdHlsZT0iY29sb3I6I2RjMzU0NTtib3JkZXItY29sb3I6I2RjMzU0NSI+8J+Xke+4jyBaZXJhciBlc3RhdMOtc3RpY2FzPC9idXR0b24+CiAgICAgICAgICAgIDxzcGFuIGlkPSJ2bTJFaVJlc2V0TXNnIiBzdHlsZT0iZm9udC1zaXplOjEycHgiPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgIC8vIExpdmUgcHJldmlldyB1cGRhdGUg4oCUIEV4aXQgSW50ZW50CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gdm0yRWlVcGRhdGVQcmV2aWV3KCkgewogICAgICAgICAgICB2YXIgdGl0bGVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJFaVRpdGxlJyk7CiAgICAgICAgICAgIHZhciBzdWJFbCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkVpU3VidGl0bGUnKTsKICAgICAgICAgICAgdmFyIGN0YUVsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlDdGEnKTsKICAgICAgICAgICAgdmFyIHVybEVsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlHcnVwb1VybCcpOwogICAgICAgICAgICBpZiAodGl0bGVFbCkgewogICAgICAgICAgICAgICAgdmFyIHB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1laS1wcmV2LXRpdGxlJyk7CiAgICAgICAgICAgICAgICBpZiAocHQpIHB0LnRleHRDb250ZW50ID0gdGl0bGVFbC52YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc3ViRWwpIHsKICAgICAgICAgICAgICAgIHZhciBwcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZWktcHJldi1zdWInKTsKICAgICAgICAgICAgICAgIGlmIChwcykgcHMuaW5uZXJIVE1MID0gc3ViRWwudmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGN0YUVsKSB7CiAgICAgICAgICAgICAgICB2YXIgcGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWVpLXByZXYtY3RhJyk7CiAgICAgICAgICAgICAgICBpZiAocGMpIHBjLnRleHRDb250ZW50ID0gY3RhRWwudmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHVybEVsKSB7CiAgICAgICAgICAgICAgICB2YXIgcGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWVpLXByZXYtbGluaycpOwogICAgICAgICAgICAgICAgdmFyIHNyYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJFaVV0bVNvdXJjZScpOwogICAgICAgICAgICAgICAgdmFyIG1lZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJFaVV0bU1lZGl1bScpOwogICAgICAgICAgICAgICAgdmFyIGNhbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJFaVV0bUNhbXBhaWduJyk7CiAgICAgICAgICAgICAgICBpZiAocGwpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdXRtU3JjID0gc3JjID8gc3JjLnZhbHVlIDogJ3NpdGUnOwogICAgICAgICAgICAgICAgICAgIHZhciB1dG1NZWQgPSBtZWQgPyBtZWQudmFsdWUgOiAnZXhpdF9pbnRlbnQnOwogICAgICAgICAgICAgICAgICAgIHZhciB1dG1DYW0gPSBjYW0gPyBjYW0udmFsdWUgOiAnZ3J1cG9fdmlwJzsKICAgICAgICAgICAgICAgICAgICBwbC50ZXh0Q29udGVudCA9IHVybEVsLnZhbHVlICsgJz91dG1fc291cmNlPScgKyB1dG1TcmMgKyAnJnV0bV9tZWRpdW09JyArIHV0bU1lZCArICcmdXRtX2NhbXBhaWduPScgKyB1dG1DYW07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgWyd2bTJFaVRpdGxlJywndm0yRWlTdWJ0aXRsZScsJ3ZtMkVpQ3RhJywndm0yRWlHcnVwb1VybCddLmZvckVhY2goZnVuY3Rpb24oaWQpIHsKICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgICAgICAgICBpZiAoZWwpIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0Jywgdm0yRWlVcGRhdGVQcmV2aWV3KTsKICAgICAgICB9KTsKICAgIH0pOwoKICAgIGZ1bmN0aW9uIHZtMkVpU2F2ZSgpIHsKICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICBmZC5hcHBlbmQoJ2FjdGlvbicsICd2bTJfZWlfc2F2ZScpOwogICAgICAgIGZkLmFwcGVuZCgnbm9uY2UnLCAnPD9waHAgZWNobyAkZWlfbm9uY2U7ID8+Jyk7CiAgICAgICAgZmQuYXBwZW5kKCdraWxsX3N3aXRjaCcsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJFaUtzJykuY2hlY2tlZCA/ICcxJyA6ICcwJyk7CiAgICAgICAgZmQuYXBwZW5kKCdncnVwb191cmwnLCAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJFaUdydXBvVXJsJykudmFsdWUpOwogICAgICAgIGZkLmFwcGVuZCgndGl0bGUnLCAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlUaXRsZScpLnZhbHVlKTsKICAgICAgICBmZC5hcHBlbmQoJ3N1YnRpdGxlJywgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkVpU3VidGl0bGUnKS52YWx1ZSk7CiAgICAgICAgZmQuYXBwZW5kKCdjdGFfdGV4dCcsICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJFaUN0YScpLnZhbHVlKTsKICAgICAgICBmZC5hcHBlbmQoJ2Nvb2xkb3duX2RheXMnLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlDb29sZG93bicpLnZhbHVlKTsKICAgICAgICBmZC5hcHBlbmQoJ3RpbWVyX2RlbGF5JywgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJFaVRpbWVyJykudmFsdWUpOwogICAgICAgIHZhciBtc2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlNc2cnKTsKICAgICAgICBtc2cudGV4dENvbnRlbnQgPSAn4o+zIFNhbHZhbmRvLi4uJzsgbXNnLnN0eWxlLmNvbG9yID0gJyM5OTknOwogICAgICAgIGZldGNoKGFqYXh1cmwsIHttZXRob2Q6J1BPU1QnLCBib2R5OmZkfSkKICAgICAgICAgICAgLnRoZW4ociA9PiByLmpzb24oKSkKICAgICAgICAgICAgLnRoZW4oaiA9PiB7CiAgICAgICAgICAgICAgICBtc2cudGV4dENvbnRlbnQgPSBqLnN1Y2Nlc3MgPyAn4pyFIFNhbHZvIGNvbSBzdWNlc3NvIScgOiAn4p2MIEVycm8gYW8gc2FsdmFyJzsKICAgICAgICAgICAgICAgIG1zZy5zdHlsZS5jb2xvciA9IGouc3VjY2VzcyA/ICcjMjdhZTYwJyA6ICcjZGMzNTQ1JzsKICAgICAgICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiB2bTJFaVJlc2V0KCkgewogICAgICAgIGlmICghY29uZmlybSgnWmVyYXIgZXN0YXTDrXN0aWNhcyBkZSBleGliacOnw6NvIGUgY2xpcXVlcz8nKSkgcmV0dXJuOwogICAgICAgIHZhciBmZCA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIGZkLmFwcGVuZCgnYWN0aW9uJywgJ3ZtMl9laV9yZXNldF9zdGF0cycpOwogICAgICAgIGZkLmFwcGVuZCgnbm9uY2UnLCAnPD9waHAgZWNobyAkZWlfbm9uY2U7ID8+Jyk7CiAgICAgICAgdmFyIG1zZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJFaVJlc2V0TXNnJyk7CiAgICAgICAgbXNnLnRleHRDb250ZW50ID0gJ+KPsy4uLic7CiAgICAgICAgZmV0Y2goYWpheHVybCwge21ldGhvZDonUE9TVCcsIGJvZHk6ZmR9KQogICAgICAgICAgICAudGhlbihyID0+IHIuanNvbigpKQogICAgICAgICAgICAudGhlbihqID0+IHsgaWYgKGouc3VjY2VzcykgeyBtc2cudGV4dENvbnRlbnQgPSAn4pyFIFplcmFkbyEnOyBzZXRUaW1lb3V0KCgpID0+IGxvY2F0aW9uLnJlbG9hZCgpLCAxMDAwKTsgfSB9KTsKICAgIH0KICAgIDwvc2NyaXB0PgogICAgPC9kaXY+CgogICAgPCEtLSA9PT09PSBUQUI6IFDDk1MtRVZFTlRPID09PT09IC0tPgogICAgPGRpdiBjbGFzcz0idm0yLXRhYi1ib2R5IDw/cGhwIGVjaG8gJGFjdGl2ZV90YWIgPT09ICdwb3NldmVudG8nID8gJ2FjdGl2ZScgOiAnJzsgPz4iPgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1wbGFjZWhvbGRlciI+CiAgICAgICAgICAgIDxoMz7wn46BIFDDs3MtRXZlbnRvPC9oMz4KICAgICAgICAgICAgPHA+U2VxdcOqbmNpYSBhdXRvbcOhdGljYTogYWdyYWRlY2ltZW50byDihpIgTlBTIOKGkiBwZWRpZG8gZGUgZm90b3Mg4oaSIGN1cG9tIHJlY29tcHJhIOKGkiBpbmRpY2HDp8Ojby48L3A+CiAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOjEycHgiPjxlbT5FbSBkZXNlbnZvbHZpbWVudG8g4oCUIEZhc2UgNjwvZW0+PC9wPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSA9PT09PSBUQUI6IFVQU0VMTCA9PT09PSAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi10YWItYm9keSA8P3BocCBlY2hvICRhY3RpdmVfdGFiID09PSAndXBzZWxsJyA/ICdhY3RpdmUnIDogJyc7ID8+Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItcGxhY2Vob2xkZXIiPgogICAgICAgICAgICA8aDM+8J+SjiBVcHNlbGw8L2gzPgogICAgICAgICAgICA8cD5Qw7NzLWNvbXByYSArIHByw6ktZXZlbnRvICsgY3Jvc3Mtc2VsbCBkZSBzZXJ2acOnb3MgY29tcGxlbWVudGFyZXMuPC9wPgogICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4Ij48ZW0+RW0gZGVzZW52b2x2aW1lbnRvIOKAlCBGYXNlIDY8L2VtPjwvcD4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gPT09PT0gVEFCOiBQRURJRE9TID09PT09IC0tPgogICAgPGRpdiBjbGFzcz0idm0yLXRhYi1ib2R5IDw/cGhwIGVjaG8gJGFjdGl2ZV90YWIgPT09ICdwZWRpZG9zJyA/ICdhY3RpdmUnIDogJyc7ID8+Ij4KICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjQwcHgiPgogICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjE1cHg7Y29sb3I6IzU3NjA2YTttYXJnaW4tYm90dG9tOjE2cHgiPk8gbcOzZHVsbyDwn5uSIFBlZGlkb3MgcG9zc3VpIHN1YSBwcsOzcHJpYSBww6FnaW5hIGRlZGljYWRhIGNvbSBjb25maWd1cmHDp8O1ZXMgY29tcGxldGFzLjwvcD4KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLXBlZGlkb3MnKSk7ID8+IiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5IiBzdHlsZT0iZm9udC1zaXplOjE0cHg7cGFkZGluZzo4cHggMjJweCI+CiAgICAgICAgICAgICAgICDwn5uSIElyIHBhcmEgTcOzZHVsbyBQZWRpZG9zIOKGkgogICAgICAgICAgICA8L2E+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgLy8g4pSA4pSAIENoYW5uZWwgdG9nZ2xlOiBXQUJBIHZzIFotQVBJIGNvbHMgZW0gQXF1ZWNlci9CeURhdGUg4pSA4pSACiAgICB2YXIgdm0yQ2hhbm5lbFR5cGVzID0gPD9waHAgZWNobyBqc29uX2VuY29kZSggYXJyYXlfbWFwKCBmdW5jdGlvbigkY2gpeyByZXR1cm4gJGNoWyd0eXBlJ10gPz8gJ3phcGknOyB9LCB2bTJfY2hhbm5lbHMoKSApICk7ID8+OwogICAgZnVuY3Rpb24gdm0yU3RlcENoYW5uZWxTd2l0Y2gobW9kdWxlLCBzbHVnKSB7CiAgICAgICAgdmFyIGlzV2FiYSA9ICh2bTJDaGFubmVsVHlwZXNbc2x1Z10gPT09ICd3YWJhJyk7CiAgICAgICAgdmFyIHdySWQgPSBtb2R1bGUgPT09ICdhcScgPyAndm0yLWFxLXN0ZXBzJyA6ICd2bTItYmQtZ3JvdXBzJzsKICAgICAgICB2YXIgd3JhcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHdySWQpOwogICAgICAgIGlmICghd3JhcCkgcmV0dXJuOwogICAgICAgIHdyYXAucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1jb2wtd2FiYScpLmZvckVhY2goZnVuY3Rpb24oZWwpIHsgZWwuc3R5bGUuZGlzcGxheSA9IGlzV2FiYSA/ICcnIDogJ25vbmUnOyB9KTsKICAgICAgICB3cmFwLnF1ZXJ5U2VsZWN0b3JBbGwoJy52bTItY29sLXphcGknKS5mb3JFYWNoKGZ1bmN0aW9uKGVsKSAgeyBlbC5zdHlsZS5kaXNwbGF5ID0gaXNXYWJhID8gJ25vbmUnIDogJyc7IH0pOwogICAgfQogICAgLy8gSW5pdCBvbiBwYWdlIGxvYWQKICAgIChmdW5jdGlvbigpewogICAgICAgIHZhciBhcVNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItYXEtY2gtc2VsJyk7CiAgICAgICAgaWYgKGFxU2VsKSB2bTJTdGVwQ2hhbm5lbFN3aXRjaCgnYXEnLCBhcVNlbC52YWx1ZSk7CiAgICAgICAgdmFyIGJkU2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1iZC1jaC1zZWwnKTsKICAgICAgICBpZiAoYmRTZWwpIHZtMlN0ZXBDaGFubmVsU3dpdGNoKCdiZCcsIGJkU2VsLnZhbHVlKTsKICAgIH0pKCk7CgogICAgLy8g4pSA4pSA4pSAIHZtMlRlc3RCb3gg4oCUIGdlbmVyaWMgdGVzdCBzZW5kIGZvciBhdXRvbWHDp8O1ZXMgdGFicyDilIDilIDilIAKICAgIGZ1bmN0aW9uIHZtMlRlc3RCb3goYm94SWQsIGNoYW5uZWxLZXksIG5vbmNlLCBpc1dhYmEpIHsKICAgICAgICB2YXIgcGhvbmVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJ0Yl8nICsgYm94SWQgKyAnX3Bob25lJyk7CiAgICAgICAgdmFyIHJlc0VsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ydGJfJyArIGJveElkICsgJ19yZXN1bHQnKTsKICAgICAgICB2YXIgcGhvbmUgICA9IHBob25lRWwgPyBwaG9uZUVsLnZhbHVlLnJlcGxhY2UoL1xEL2csICcnKSA6ICcnOwogICAgICAgIGlmICghcGhvbmUgfHwgcGhvbmUubGVuZ3RoIDwgMTApIHsKICAgICAgICAgICAgcmVzRWwudGV4dENvbnRlbnQgPSAnXHUyNzRDIE5cdTAwZmFtZXJvIGludlx1MDBlMWxpZG8gKG1cdTAwZWRuIDEwIGRcdTAwZWRnaXRvcyknOwogICAgICAgICAgICByZXNFbC5zdHlsZS5jb2xvciA9ICdyZWQnOyByZXR1cm47CiAgICAgICAgfQogICAgICAgIHJlc0VsLnRleHRDb250ZW50ID0gJ1x1MjNGMyBFbnZpYW5kby4uLic7IHJlc0VsLnN0eWxlLmNvbG9yID0gJyM4ODgnOwogICAgICAgIHZhciBmZCA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIGZkLmFwcGVuZCgnYWN0aW9uJywgICd2bTJfdGVzdF9zZW5kJyk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsICAgbm9uY2UpOwogICAgICAgIGZkLmFwcGVuZCgncGhvbmUnLCAgIHBob25lKTsKICAgICAgICBmZC5hcHBlbmQoJ2NoYW5uZWwnLCBjaGFubmVsS2V5KTsKICAgICAgICBpZiAoaXNXYWJhKSB7CiAgICAgICAgICAgIHZhciB0bXBsRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ydGJfJyArIGJveElkICsgJ190bXBsJyk7CiAgICAgICAgICAgIGZkLmFwcGVuZCgndGVtcGxhdGUnLCB0bXBsRWwgPyB0bXBsRWwudmFsdWUgOiAnJyk7CiAgICAgICAgICAgIGZkLmFwcGVuZCgnaXNfd2FiYScsICAnMScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBtc2dFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJ0Yl8nICsgYm94SWQgKyAnX21zZycpOwogICAgICAgICAgICBmZC5hcHBlbmQoJ21lc3NhZ2UnLCBtc2dFbCA/IG1zZ0VsLnZhbHVlIDogJycpOwogICAgICAgIH0KICAgICAgICBmZXRjaChhamF4dXJsLCB7IG1ldGhvZDogJ1BPU1QnLCBib2R5OiBmZCB9KQogICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocikgeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgICAgICAudGhlbihmdW5jdGlvbihqKSB7CiAgICAgICAgICAgIHJlc0VsLnRleHRDb250ZW50ID0gai5zdWNjZXNzCiAgICAgICAgICAgICAgPyAnXHUyNzA1IEVudmlhZG8gY29tIHN1Y2Vzc28hJwogICAgICAgICAgICAgIDogKCdcdTI3NEMgJyArIChqLmRhdGEgJiYgai5kYXRhLm1lc3NhZ2UgPyBqLmRhdGEubWVzc2FnZSA6ICdFcnJvIGRlc2NvbmhlY2lkbycpKTsKICAgICAgICAgICAgcmVzRWwuc3R5bGUuY29sb3IgPSBqLnN1Y2Nlc3MgPyAnZ3JlZW4nIDogJ3JlZCc7CiAgICAgICAgICB9KQogICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXNFbC50ZXh0Q29udGVudCA9ICdcdTI3NEMgRmFsaGEgZGUgcmVkZSc7CiAgICAgICAgICAgIHJlc0VsLnN0eWxlLmNvbG9yID0gJ3JlZCc7CiAgICAgICAgICB9KTsKICAgIH0KICAgIDwvc2NyaXB0PgogICAgPC9mb3JtPgogICAgPC9kaXY+CiAgICA8P3BocAp9CgoKZnVuY3Rpb24gdm0yX3BlZGlkb3NfcGFnZSgpIHsKCiAgICAvLyDilIDilIAgUmVzdGF1cmFyIHBhZHLDtWVzCiAgICBpZiAoIGlzc2V0KCAkX0dFVFsncmVzdG9yZV9kZWZhdWx0cyddICkgJiYgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgewogICAgICAgIGNoZWNrX2FkbWluX3JlZmVyZXIoICd2bTJfcmVzdG9yZV9kZWZhdWx0cycgKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX3BlZGlkb3NfdmVuZGFzX21zZycsICB2bTJfZGVmYXVsdF9tc2dfdmVuZGFzKCkgKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX3BlZGlkb3NfYWdlbmRhX21zZycsICB2bTJfZGVmYXVsdF9tc2dfYWdlbmRhKCkgKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX3BlZGlkb3NfY2xpZW50ZV9tc2cnLCB2bTJfZGVmYXVsdF9tc2dfY2xpZW50ZSgpICk7CiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIj48cD7ihqkgTWVuc2FnZW5zIHJlc3RhdXJhZGFzIHBhcmEgbyBwYWRyw6NvITwvcD48L2Rpdj4nOwogICAgfQoKICAgIC8vIOKUgOKUgCBTYWx2YXIKICAgIGlmICggaXNzZXQoICRfUE9TVFsndm0yX3NhdmVfcGVkaWRvcyddICkgJiYgY2hlY2tfYWRtaW5fcmVmZXJlciggJ3ZtMl9wZWRpZG9zX25vbmNlJyApICkgewogICAgICAgICR0b2dnbGVfa2V5cyA9IFsgJ3ZtMl9wZWRpZG9zX3ZlbmRhc19lbmFibGVkJywgJ3ZtMl9wZWRpZG9zX2FnZW5kYV9lbmFibGVkJywgJ3ZtMl9wZWRpZG9zX2NsaWVudGVfZW5hYmxlZCcsICd2bTJfcGVkaWRvc19jbGllbnRlX2NvcHlfdmVuZGFzJyBdOwogICAgICAgICR0ZXh0X2tleXMgICA9IFsKICAgICAgICAgICAgJ3ZtMl9wZWRpZG9zX3ZlbmRhc19jaGFubmVsJywgJ3ZtMl9wZWRpZG9zX3ZlbmRhc19ncm91cF9pZCcsICd2bTJfcGVkaWRvc192ZW5kYXNfbXNnJywgJ3ZtMl9wZWRpZG9zX3ZlbmRhc193YWJhX3RlbXBsYXRlJywKICAgICAgICAgICAgJ3ZtMl9wZWRpZG9zX2FnZW5kYV9jaGFubmVsJywgJ3ZtMl9wZWRpZG9zX2FnZW5kYV9ncm91cF9pZCcsICd2bTJfcGVkaWRvc19hZ2VuZGFfbXNnJywgJ3ZtMl9wZWRpZG9zX2FnZW5kYV93YWJhX3RlbXBsYXRlJywKICAgICAgICAgICAgJ3ZtMl9wZWRpZG9zX2NsaWVudGVfY2hhbm5lbCcsICd2bTJfcGVkaWRvc19jbGllbnRlX21zZycsICd2bTJfcGVkaWRvc19jbGllbnRlX3dhYmFfdGVtcGxhdGUnLAogICAgICAgIF07CiAgICAgICAgZm9yZWFjaCAoICR0b2dnbGVfa2V5cyBhcyAkayApIHsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbiggJGssIGlzc2V0KCAkX1BPU1RbICRrIF0gKSA/ICcxJyA6ICcwJyApOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICggJHRleHRfa2V5cyBhcyAkayApIHsKICAgICAgICAgICAgaWYgKCBpc3NldCggJF9QT1NUWyAkayBdICkgKSB7CiAgICAgICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCAkaywgc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoIHdwX3Vuc2xhc2goICRfUE9TVFsgJGsgXSApICkgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MiPjxwPuKchSBDb25maWd1cmHDp8O1ZXMgc2FsdmFzIGNvbSBzdWNlc3NvITwvcD48L2Rpdj4nOwogICAgfQoKICAgICRjaGFubmVscyA9IHZtMl9jaGFubmVscygpOwogICAgJGtzICAgICAgID0gZ2V0X29wdGlvbiggJ3ZtMl9raWxsX3N3aXRjaCcsICcwJyApOwoKICAgICR2YXJzX2luZm8gPSBbCiAgICAgICAgJ3tudW1lcm99JyAgICAgICA9PiAnTsO6bWVybyBkbyBwZWRpZG8nLAogICAgICAgICd7bm9tZX0nICAgICAgICAgPT4gJ05vbWUgZG8gY2xpZW50ZScsCiAgICAgICAgJ3t0ZWxlZm9uZX0nICAgICA9PiAnVGVsZWZvbmUgKGNvbSBEREkgNTUpJywKICAgICAgICAne2VtYWlsfScgICAgICAgID0+ICdFLW1haWwgZG8gY2xpZW50ZScsCiAgICAgICAgJ3t2YWxvcn0nICAgICAgICA9PiAnVmFsb3IgdG90YWwnLAogICAgICAgICd7cGd0b30nICAgICAgICAgPT4gJ0Zvcm1hIGRlIHBhZ2FtZW50bycsCiAgICAgICAgJ3thdHJhY2FvfScgICAgICA9PiAnUHJvZHV0b3MvYXRyYcOnw7VlcycsCiAgICAgICAgJ3tkYXRhX2V2ZW50b30nICA9PiAnRGF0YSBkbyBldmVudG8gKEREL01NL1lZWVkpJywKICAgICAgICAne3RpcG9fZXZlbnRvfScgID0+ICdUaXBvIGRvIGV2ZW50bycsCiAgICAgICAgJ3tob21lbmFnZWFkb30nICA9PiAnSG9tZW5hZ2VhZG8ocyknLAogICAgICAgICd7YXNzZXNzb3J9JyAgICAgPT4gJ0Fzc2Vzc29yIHJlc3BvbnPDoXZlbCcsCiAgICAgICAgJ3tiYWlycm99JyAgICAgICA9PiAnQmFpcnJvIGRvIGV2ZW50bycsCiAgICAgICAgJ3tjaWRhZGV9JyAgICAgICA9PiAnQ2lkYWRlIGRvIGV2ZW50bycsCiAgICAgICAgJ3tlc3RhZG99JyAgICAgICA9PiAnRXN0YWRvIGRvIGV2ZW50bycsCiAgICAgICAgJ3tlbmRlcmVjb30nICAgICA9PiAnRW5kZXJlw6dvIGNvbXBsZXRvJywKICAgICAgICAne2hvcmFfaW5pY2lvfScgID0+ICdIb3JhIGRlIGluw61jaW8gKFlJVEggQm9va2luZyknLAogICAgICAgICd7aG9yYV90ZXJtaW5vfScgPT4gJ0hvcmEgZGUgdMOpcm1pbm8gKFlJVEggQm9va2luZyknLAogICAgICAgICd7ZHVyYWNhb30nICAgICAgPT4gJ0R1cmHDp8OjbyBlbSBtaW51dG9zJywKICAgICAgICAne29ic30nICAgICAgICAgID0+ICdPYnNlcnZhw6fDtWVzIGRvIGNsaWVudGUnLAogICAgICAgICd7Y29udHJhdG99JyAgICAgPT4gJ1N0YXR1cyBjb250cmF0byBDbGlja1NpZ24nLAogICAgICAgICd7dXRtX3NvdXJjZX0nICAgPT4gJ1VUTSBzb3VyY2UnLAogICAgICAgICd7dXRtX2NhbXBhaWdufScgPT4gJ1VUTSBjYW1wYWlnbicsCiAgICAgICAgJ3tsaW5rX2FkbWlufScgICA9PiAnTGluayBkbyBwZWRpZG8gbm8gV1AgYWRtaW4nLAogICAgXTsKCiAgICAkZGVzdGlub3MgPSBbCiAgICAgICAgWwogICAgICAgICAgICAna2V5JyAgICAgICAgICAgICA9PiAndmVuZGFzJywKICAgICAgICAgICAgJ2ljb24nICAgICAgICAgICAgPT4gJ/Cfm5InLAogICAgICAgICAgICAndGl0bGUnICAgICAgICAgICA9PiAnR3J1cG8gZGUgVmVuZGFzJywKICAgICAgICAgICAgJ2JhZGdlJyAgICAgICAgICAgPT4gJ1RvZG9zIG9zIHBlZGlkb3MnLAogICAgICAgICAgICAnYmFkZ2VfYmcnICAgICAgICA9PiAnIzI3YWU2MCcsCiAgICAgICAgICAgICdkZXNjJyAgICAgICAgICAgID0+ICdSZXN1bW8gY3VydG8gZW52aWFkbyBhbyBncnVwbyBkZSB2ZW5kYXMuIERpc3BhcmEgcGFyYSBxdWFscXVlciBzdGF0dXMgZGUgcGFnYW1lbnRvIGFzc2ltIHF1ZSBvIHBlZGlkbyDDqSBjcmlhZG8uJywKICAgICAgICAgICAgJ2hhc19ncm91cCcgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgJ2RlZmF1bHRfY2hhbm5lbCcgPT4gJ3phcGlfNzU1MScsCiAgICAgICAgICAgICdkZWZhdWx0X2dyb3VwJyAgID0+ICcxMjAzNjM0MjU3ODUzNTg3NjQtZ3JvdXAnLAogICAgICAgICAgICAnZGVmYXVsdF9tc2dfZm4nICA9PiAndm0yX2RlZmF1bHRfbXNnX3ZlbmRhcycsCiAgICAgICAgXSwKICAgICAgICBbCiAgICAgICAgICAgICdrZXknICAgICAgICAgICAgID0+ICdhZ2VuZGEnLAogICAgICAgICAgICAnaWNvbicgICAgICAgICAgICA9PiAn8J+ThScsCiAgICAgICAgICAgICd0aXRsZScgICAgICAgICAgID0+ICdHcnVwbyBBZ2VuZGEgZGUgRXZlbnRvcycsCiAgICAgICAgICAgICdiYWRnZScgICAgICAgICAgID0+ICdBcGVuYXMgc3RhdHVzOiBQcm9jZXNzaW5nIChwYWdvKScsCiAgICAgICAgICAgICdiYWRnZV9iZycgICAgICAgID0+ICcjMjk4MGI5JywKICAgICAgICAgICAgJ2Rlc2MnICAgICAgICAgICAgPT4gJ0ZpY2hhIGNvbXBsZXRhIGRvIGV2ZW50by4gRGlzcGFyYWRhIGFwZW5hcyBxdWFuZG8gbyBwZWRpZG8gZW50cmEgZW0gc3RhdHVzICJQcm9jZXNzaW5nIiAocGFnYW1lbnRvIGNvbmZpcm1hZG8pLicsCiAgICAgICAgICAgICdoYXNfZ3JvdXAnICAgICAgID0+IHRydWUsCiAgICAgICAgICAgICdkZWZhdWx0X2NoYW5uZWwnID0+ICd6YXBpXzc1NTEnLAogICAgICAgICAgICAnZGVmYXVsdF9ncm91cCcgICA9PiAnMTIwMzYzNDE5MTgwMjE0NDgxLWdyb3VwJywKICAgICAgICAgICAgJ2RlZmF1bHRfbXNnX2ZuJyAgPT4gJ3ZtMl9kZWZhdWx0X21zZ19hZ2VuZGEnLAogICAgICAgIF0sCiAgICAgICAgWwogICAgICAgICAgICAna2V5JyAgICAgICAgICAgICA9PiAnY2xpZW50ZScsCiAgICAgICAgICAgICdpY29uJyAgICAgICAgICAgID0+ICfwn5GkJywKICAgICAgICAgICAgJ3RpdGxlJyAgICAgICAgICAgPT4gJ0NsaWVudGUgKFdoYXRzQXBwIGRpcmV0byknLAogICAgICAgICAgICAnYmFkZ2UnICAgICAgICAgICA9PiAnT0ZGIHBvciBwYWRyw6NvIOKAlCBhdGl2ZSBhcMOzcyB2YWxpZGFyIG9zIGdydXBvcycsCiAgICAgICAgICAgICdiYWRnZV9iZycgICAgICAgID0+ICcjYzAzOTJiJywKICAgICAgICAgICAgJ2Rlc2MnICAgICAgICAgICAgPT4gJ01lbnNhZ2VtIGVudmlhZGEgZGlyZXRhbWVudGUgYW8gV2hhdHNBcHAgZG8gY2xpZW50ZS4gTWFudGlkYSBPRkYgcG9yIHBhZHLDo28gYXTDqSBvIGZsdXhvIHNlciB2YWxpZGFkbyBub3MgZ3J1cG9zLicsCiAgICAgICAgICAgICdoYXNfZ3JvdXAnICAgICAgID0+IGZhbHNlLAogICAgICAgICAgICAnZGVmYXVsdF9jaGFubmVsJyA9PiAnemFwaV8xODg2JywKICAgICAgICAgICAgJ2RlZmF1bHRfZ3JvdXAnICAgPT4gJycsCiAgICAgICAgICAgICdkZWZhdWx0X21zZ19mbicgID0+ICd2bTJfZGVmYXVsdF9tc2dfY2xpZW50ZScsCiAgICAgICAgXSwKICAgIF07CgogICAgPz4KICAgIDxkaXYgY2xhc3M9IndyYXAiPgogICAgICAgIDxoMT7wn5uSIE5vdGlmaWNhw6fDo28gZGUgUGVkaWRvczwvaDE+CiAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiM2NjY7bWFyZ2luLWJvdHRvbTowIj5Db25maWd1cmUgb3MgMyBkZXN0aW5vcyBkZSBub3RpZmljYcOnw6NvIGFvIHJlY2ViZXIgdW0gbm92byBwZWRpZG8gV29vQ29tbWVyY2UuIENhZGEgZGVzdGlubyDDqSBpbmRlcGVuZGVudGUuPC9wPgoKICAgICAgICA8P3BocCBpZiAoICRrcyA9PT0gJzEnICkgOiA/PgogICAgICAgIDxkaXYgY2xhc3M9Im5vdGljZSBub3RpY2UtZXJyb3IiIHN0eWxlPSJtYXJnaW4tdG9wOjEycHgiPjxwPvCflLQgPHN0cm9uZz5LaWxsIFN3aXRjaCBHbG9iYWwgQVRJVk88L3N0cm9uZz4g4oCUIG5lbmh1bWEgbWVuc2FnZW0gZXN0w6Egc2FpbmRvLiA8YSBocmVmPSI/cGFnZT12bTItc2V0dGluZ3MiPkRlc2F0aXZhciDihpI8L2E+PC9wPjwvZGl2PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJtYXJnaW4tdG9wOjE2cHgiPgogICAgICAgICAgICA8P3BocCB3cF9ub25jZV9maWVsZCggJ3ZtMl9wZWRpZG9zX25vbmNlJyApOyA/PgoKICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRkZXN0aW5vcyBhcyAkZCApIDoKICAgICAgICAgICAgICAgICRlbmFibGVkICA9IGdldF9vcHRpb24oICJ2bTJfcGVkaWRvc197JGRbJ2tleSddfV9lbmFibGVkIiwgICRkWydrZXknXSA9PT0gJ2NsaWVudGUnID8gJzAnIDogJzEnICk7CiAgICAgICAgICAgICAgICAkY2hhbm5lbCAgPSBnZXRfb3B0aW9uKCAidm0yX3BlZGlkb3NfeyRkWydrZXknXX1fY2hhbm5lbCIsICAkZFsnZGVmYXVsdF9jaGFubmVsJ10gKTsKICAgICAgICAgICAgICAgICRncm91cF9pZCA9IGdldF9vcHRpb24oICJ2bTJfcGVkaWRvc197JGRbJ2tleSddfV9ncm91cF9pZCIsICRkWydkZWZhdWx0X2dyb3VwJ10gKTsKICAgICAgICAgICAgICAgICRmbiAgICAgICA9ICRkWydkZWZhdWx0X21zZ19mbiddOwogICAgICAgICAgICAgICAgJG1zZyAgICAgID0gZ2V0X29wdGlvbiggInZtMl9wZWRpZG9zX3skZFsna2V5J119X21zZyIsICAgICAgJGZuKCkgKTsKICAgICAgICAgICAgICAgICRib3JkZXIgICA9ICRlbmFibGVkID09PSAnMScgPyAnIzI3YWU2MCcgOiAnI2U3NGMzYyc7CiAgICAgICAgICAgID8+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkIDw/cGhwIGVjaG8gJGJvcmRlcjsgPz47Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoyMnB4O21hcmdpbjoxOHB4IDAiPgoKICAgICAgICAgICAgICAgIDwhLS0gSGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjE0cHg7ZmxleC13cmFwOndyYXAiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MjZweCI+PD9waHAgZWNobyAkZFsnaWNvbiddOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTVweCI+PD9waHAgZWNobyAkZFsndGl0bGUnXTsgPz48L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6PD9waHAgZWNobyAkZFsnYmFkZ2VfYmcnXTsgPz47Y29sb3I6I2ZmZjtwYWRkaW5nOjJweCA5cHg7Ym9yZGVyLXJhZGl1czoxMnB4O2ZvbnQtc2l6ZToxMXB4O21hcmdpbi1sZWZ0OjhweCI+PD9waHAgZWNobyAkZFsnYmFkZ2UnXTsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjdweDtjdXJzb3I6cG9pbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InZtMl9wZWRpZG9zXzw/cGhwIGVjaG8gJGRbJ2tleSddOyA/Pl9lbmFibGVkIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCggJGVuYWJsZWQsICcxJyApOyA/PiBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9ImNvbG9yOjw/cGhwIGVjaG8gJGVuYWJsZWQgPT09ICcxJyA/ICcjMjdhZTYwJyA6ICcjYzAzOTJiJzsgPz4iPjw/cGhwIGVjaG8gJGVuYWJsZWQgPT09ICcxJyA/ICfwn5+iIE9OJyA6ICfwn5S0IE9GRic7ID8+PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJjb2xvcjojNjY2O2ZvbnQtc2l6ZToxM3B4O21hcmdpbjowIDAgMTZweCAwIj48P3BocCBlY2hvICRkWydkZXNjJ107ID8+PC9wPgoKICAgICAgICAgICAgICAgIDwhLS0gQ29uZmlncyAtLT4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZm9ybS10YWJsZSIgc3R5bGU9Im1hcmdpbjowIj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTUwcHg7cGFkZGluZzo4cHggMDtmb250LXNpemU6MTNweCI+Q2FuYWwgZGUgZW52aW88L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfcGVkaWRvc188P3BocCBlY2hvICRkWydrZXknXTsgPz5fY2hhbm5lbCIgc3R5bGU9IndpZHRoOjI4MHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJ2bTJQZWRDaGFubmVsU3dpdGNoKCc8P3BocCBlY2hvICRkWydrZXknXTsgPz4nLCB0aGlzLnZhbHVlKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRjaGFubmVscyBhcyAkY2sgPT4gJGNoICkgOiA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoICRjayApOyA/PiIgPD9waHAgc2VsZWN0ZWQoICRjaGFubmVsLCAkY2sgKTsgPz4+PD9waHAgZWNobyBlc2NfaHRtbCggJGNoWydsYWJlbCddICk7ID8+PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyIGlkPSJ2bTItcGVkLXRwbC08P3BocCBlY2hvICRkWydrZXknXTsgPz4iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjE1MHB4O3BhZGRpbmc6OHB4IDA7Zm9udC1zaXplOjEzcHgiPvCfk4sgVGVtcGxhdGUgV0FCQTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtMl9wZWRpZG9zXzw/cGhwIGVjaG8gJGRbJ2tleSddOyA/Pl93YWJhX3RlbXBsYXRlIiBzdHlsZT0id2lkdGg6MzgwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX3dhYmFfdGVtcGxhdGVfb3B0aW9uc19odG1sKCBnZXRfb3B0aW9uKCJ2bTJfcGVkaWRvc197JGRbJ2tleSddfV93YWJhX3RlbXBsYXRlIiwgJycpICk7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+VXNhZG8gYXBlbmFzIHF1YW5kbyBvIGNhbmFsIHNlbGVjaW9uYWRvIGZvciBXQUJBLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICggJGRbJ2hhc19ncm91cCddICkgOiA/PgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjhweCAwO2ZvbnQtc2l6ZToxM3B4Ij5JRCBkbyBHcnVwbyBXQTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idm0yX3BlZGlkb3NfPD9waHAgZWNobyAkZFsna2V5J107ID8+X2dyb3VwX2lkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCAkZ3JvdXBfaWQgKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjM3MHB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTJweCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iZXg6IDEyMDM2MzQyNTc4NTM1ODc2NC1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPkZvcm1hdG86IDxjb2RlPlhYWFhYWFhYWFhYWFhYWC1ncm91cDwvY29kZT48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoICRkWydrZXknXSA9PT0gJ2NsaWVudGUnICkgOgogICAgICAgICAgICAgICAgICAgICAgICAkY29weV92ZW5kYXMgPSBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfY2xpZW50ZV9jb3B5X3ZlbmRhcycsICcwJyApOwogICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9InBhZGRpbmc6OHB4IDA7Zm9udC1zaXplOjEzcHgiPvCfk4sgQ8OzcGlhIGFvIGdydXBvIGRlIHZlbmRhczwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ2bTJfcGVkaWRvc19jbGllbnRlX2NvcHlfdmVuZGFzIiB2YWx1ZT0iMSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgY2hlY2tlZCggJGNvcHlfdmVuZGFzLCAnMScgKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjE4cHg7aGVpZ2h0OjE4cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTNweCI+RW52aWFyIGPDs3BpYSBhbyBncnVwbyBkZSB2ZW5kYXMgYXDDs3MgbyBjbGllbnRlIHJlY2ViZXIgbyBjb211bmljYWRvPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiIgc3R5bGU9Im1hcmdpbi10b3A6NnB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWFuZG8gYXRpdmFkbywgbyBncnVwbyBkZSB2ZW5kYXMgcmVjZWJlIHVtYSBjb25maXJtYcOnw6NvIGNvbSBhIG1lbnNhZ2VtIHF1ZSBmb2kgZW52aWFkYSBhbyBjbGllbnRlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYSBvIGNhbmFsIGUgZ3J1cG8gY29uZmlndXJhZG9zIGVtIDxzdHJvbmc+8J+bkiBHcnVwbyBkZSBWZW5kYXM8L3N0cm9uZz4gYWNpbWEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8dHIgaWQ9InZtMi1wZWQtbXNnLTw/cGhwIGVjaG8gJGRbJ2tleSddOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0icGFkZGluZzo4cHggMDtmb250LXNpemU6MTNweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6MTJweCI+8J+SrCBNZW5zYWdlbTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9Im1zZ188P3BocCBlY2hvICRkWydrZXknXTsgPz4iIG5hbWU9InZtMl9wZWRpZG9zXzw/cGhwIGVjaG8gJGRbJ2tleSddOyA/Pl9tc2ciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cz0iMTEiIHN0eWxlPSJ3aWR0aDoxMDAlO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjUiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCAkbXNnICk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgICAgICA8IS0tIFZhcmnDoXZlaXMgLS0+CiAgICAgICAgICAgICAgICA8ZGV0YWlscyBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPgogICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjtjb2xvcjojMjk4MGI5O2ZvbnQtc2l6ZToxM3B4O3VzZXItc2VsZWN0Om5vbmUiPvCfk4sgVmFyacOhdmVpcyBkaXNwb27DrXZlaXMgKGNsaXF1ZSBwYXJhIHZlcik8L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjhmOWZhO3BhZGRpbmc6MTJweDtib3JkZXItcmFkaXVzOjRweDttYXJnaW4tdG9wOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCAkdmFyc19pbmZvIGFzICR2YXIgPT4gJGRlc2MgKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIG9uY2xpY2s9InZtMkluc2VydFZhcignPD9waHAgZWNobyAkZFsna2V5J107ID8+JywnPD9waHAgZWNobyAkdmFyOyA/PicpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iPD9waHAgZWNobyBlc2NfYXR0ciggJGRlc2MgKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO3BhZGRpbmc6M3B4IDhweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTFweDtmb250LWZhbWlseTptb25vc3BhY2U7Y3Vyc29yOnBvaW50ZXI7dXNlci1zZWxlY3Q6bm9uZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IkNsaXF1ZSBwYXJhIGluc2VyaXIiPjw/cGhwIGVjaG8gZXNjX2h0bWwoICR2YXIgKTsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDo2cHgiPkNsaXF1ZSBlbSB1bWEgdmFyacOhdmVsIHBhcmEgaW5zZXJpciBuYSBtZW5zYWdlbSBuYSBwb3Npw6fDo28gZG8gY3Vyc29yLjwvcD4KICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KCiAgICAgICAgICAgICAgICA8IS0tIEJsb2NvIGRlIFRlc3RlIC0tPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmZGU3O2JvcmRlcjoxcHggc29saWQgI2Y5YTgyNTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjE2cHg7bWFyZ2luLXRvcDoxNnB4Ij4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTNweCI+8J+nqiBFbnZpYXIgbWVuc2FnZW0gZGUgdGVzdGU8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzY2NjttYXJnaW46NHB4IDAgMTJweCAwIj5FbnZpYSBhIG1lbnNhZ2VtIGF0dWFsIChuw6NvIHNhbHZhKSBwYXJhIHVtIG7Dum1lcm8gZGUgdGVzdGUsIHN1YnN0aXR1aW5kbyBhcyB2YXJpw6F2ZWlzIGNvbSBkYWRvcyBkbyBwZWRpZG8gZGUgcmVmZXLDqm5jaWEuPC9wPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpmbGV4LWVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5OxIE7Dum1lcm8gZGUgdGVzdGU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ0ZXN0X3Bob25lXzw/cGhwIGVjaG8gJGRbJ2tleSddOyA/PiIgdmFsdWU9IjU1MTE5ODgxMzc1NTEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjE5MHB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTNweCIgcGxhY2Vob2xkZXI9IjU1MTE5OTkuLi4iPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfm5IgUGVkaWRvIGRlIHJlZmVyw6puY2lhIChJRCk8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InRlc3Rfb3JkZXJfPD9waHAgZWNobyAkZFsna2V5J107ID8+IiB2YWx1ZT0iNDM3MSIgc3R5bGU9IndpZHRoOjEwMHB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InZtMlNlbmRUZXN0KCc8P3BocCBlY2hvICRkWydrZXknXTsgPz4nKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6I2YzOWMxMjtjb2xvcjojZmZmO2JvcmRlcjpub25lO3BhZGRpbmc6OXB4IDIwcHg7Ym9yZGVyLXJhZGl1czo2cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pa2IEVudmlhciBUZXN0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0idGVzdF9yZXN1bHRfPD9waHAgZWNobyAkZFsna2V5J107ID8+IiBzdHlsZT0iZm9udC1zaXplOjEzcHgiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODg7bWFyZ2luOjEwcHggMCAwIDAiPgogICAgICAgICAgICAgICAgICAgICAgICBDYW5hbCBxdWUgc2Vyw6EgdXNhZG86IDxzdHJvbmc+PD9waHAgZWNobyBlc2NfaHRtbCggJGNoYW5uZWxzWyAkY2hhbm5lbCBdWydsYWJlbCddID8/ICRjaGFubmVsICk7ID8+PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICggJGRbJ2hhc19ncm91cCddICkgOiA/PiDCtyBEZXN0aW5vOiA8c3Ryb25nPm7Dum1lcm8gZGUgdGVzdGU8L3N0cm9uZz4gKG7Do28gbyBncnVwbykgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KCiAgICAgICAgICAgIDwhLS0gQm90w7VlcyAtLT4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMnB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjhweDtmbGV4LXdyYXA6d3JhcCI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0idm0yX3NhdmVfcGVkaWRvcyIgY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSBidXR0b24tbGFyZ2UiPvCfkr4gU2FsdmFyIHRvZGFzIGFzIGNvbmZpZ3VyYcOnw7VlczwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyB3cF9ub25jZV91cmwoICc/cGFnZT12bTItcGVkaWRvcyZyZXN0b3JlX2RlZmF1bHRzPTEnLCAndm0yX3Jlc3RvcmVfZGVmYXVsdHMnICk7ID8+IgogICAgICAgICAgICAgICAgICAgY2xhc3M9ImJ1dHRvbiIKICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InJldHVybiBjb25maXJtKCdSZXN0YXVyYXIgdG9kYXMgYXMgbWVuc2FnZW5zIHBhcmEgbyBwYWRyw6NvIG9yaWdpbmFsPycpIj7ihqkgUmVzdGF1cmFyIHBhZHLDtWVzPC9hPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgPC9mb3JtPgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgIGZ1bmN0aW9uIHZtMkluc2VydFZhcihkZXN0aW5vLCB2YXJOYW1lKSB7CiAgICAgICAgdmFyIHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21zZ18nICsgZGVzdGlubyk7CiAgICAgICAgaWYgKCF0YSkgcmV0dXJuOwogICAgICAgIHZhciBzdGFydCA9IHRhLnNlbGVjdGlvblN0YXJ0OwogICAgICAgIHZhciBlbmQgICA9IHRhLnNlbGVjdGlvbkVuZDsKICAgICAgICB0YS52YWx1ZSAgPSB0YS52YWx1ZS5zdWJzdHJpbmcoMCwgc3RhcnQpICsgdmFyTmFtZSArIHRhLnZhbHVlLnN1YnN0cmluZyhlbmQpOwogICAgICAgIHRhLnNlbGVjdGlvblN0YXJ0ID0gdGEuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyB2YXJOYW1lLmxlbmd0aDsKICAgICAgICB0YS5mb2N1cygpOwogICAgfQoKICAgIGZ1bmN0aW9uIHZtMlNlbmRUZXN0KGRlc3Rpbm8pIHsKICAgICAgICB2YXIgcGhvbmUgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0X3Bob25lXycgKyBkZXN0aW5vKS52YWx1ZS50cmltKCk7CiAgICAgICAgdmFyIG9yZGVySWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdF9vcmRlcl8nICsgZGVzdGlubykudmFsdWUudHJpbSgpOwogICAgICAgIHZhciByZXN1bHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0X3Jlc3VsdF8nICsgZGVzdGlubyk7CiAgICAgICAgdmFyIG1zZ0VsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21zZ18nICsgZGVzdGlubyk7CiAgICAgICAgdmFyIGNoYW5uZWxFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdFtuYW1lPSJ2bTJfcGVkaWRvc18nICsgZGVzdGlubyArICdfY2hhbm5lbCJdJyk7CgogICAgICAgIGlmICghcGhvbmUgfHwgcGhvbmUucmVwbGFjZSgvXEQvZywnJykubGVuZ3RoIDwgMTApIHsKICAgICAgICAgICAgcmVzdWx0RWwudGV4dENvbnRlbnQgPSAn4p2MIE7Dum1lcm8gaW52w6FsaWRvJzsKICAgICAgICAgICAgcmVzdWx0RWwuc3R5bGUuY29sb3IgPSAncmVkJzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0RWwudGV4dENvbnRlbnQgPSAn4o+zIEVudmlhbmRvLi4uJzsKICAgICAgICByZXN1bHRFbC5zdHlsZS5jb2xvciA9ICcjODg4JzsKCiAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAgICd2bTJfdGVzdF9zZW5kJyk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsICAgICc8P3BocCBlY2hvIHdwX2NyZWF0ZV9ub25jZSggJ3ZtMl90ZXN0X3NlbmQnICk7ID8+Jyk7CiAgICAgICAgZmQuYXBwZW5kKCdkZXN0aW5vJywgIGRlc3Rpbm8pOwogICAgICAgIGZkLmFwcGVuZCgncGhvbmUnLCAgICBwaG9uZSk7CiAgICAgICAgZmQuYXBwZW5kKCdvcmRlcl9pZCcsIG9yZGVySWQpOwogICAgICAgIGZkLmFwcGVuZCgnbWVzc2FnZScsICBtc2dFbCA/IG1zZ0VsLnZhbHVlIDogJycpOwogICAgICAgIGZkLmFwcGVuZCgnY2hhbm5lbCcsICBjaGFubmVsRWwgPyBjaGFubmVsRWwudmFsdWUgOiAnemFwaV83NTUxJyk7CgogICAgICAgIGZldGNoKGFqYXh1cmwsIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHk6IGZkIH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpIHsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgICAgICAgICAudGhlbihmdW5jdGlvbihqc29uKSB7CiAgICAgICAgICAgICAgICBpZiAoanNvbi5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RWwudGV4dENvbnRlbnQgPSAn4pyFIEVudmlhZG8gY29tIHN1Y2Vzc28hJzsKICAgICAgICAgICAgICAgICAgICByZXN1bHRFbC5zdHlsZS5jb2xvciA9ICdncmVlbic7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdEVsLnRleHRDb250ZW50ID0gJ+KdjCAnICsgKGpzb24uZGF0YSAmJiBqc29uLmRhdGEubWVzc2FnZSA/IGpzb24uZGF0YS5tZXNzYWdlIDogJ0Vycm8gZGVzY29uaGVjaWRvJyk7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RWwuc3R5bGUuY29sb3IgPSAncmVkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmVzdWx0RWwudGV4dENvbnRlbnQgPSAn4p2MIEZhbGhhIGRlIHJlZGUnOwogICAgICAgICAgICAgICAgcmVzdWx0RWwuc3R5bGUuY29sb3IgPSAncmVkJzsKICAgICAgICAgICAgfSk7CiAgICB9CgogICAgLy8g4pSA4pSA4pSAIHZtMlRlc3RCb3gg4oCUIGdlbmVyaWMgdGVzdCBzZW5kIGZvciBhdXRvbWHDp8O1ZXMgdGFicyDilIDilIDilIAKICAgIGZ1bmN0aW9uIHZtMlRlc3RCb3goYm94SWQsIGNoYW5uZWxLZXksIG5vbmNlLCBpc1dhYmEpIHsKICAgICAgICB2YXIgcGhvbmVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJ0Yl8nICsgYm94SWQgKyAnX3Bob25lJyk7CiAgICAgICAgdmFyIHJlc0VsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ydGJfJyArIGJveElkICsgJ19yZXN1bHQnKTsKICAgICAgICB2YXIgcGhvbmUgICA9IHBob25lRWwgPyBwaG9uZUVsLnZhbHVlLnJlcGxhY2UoL1xEL2csICcnKSA6ICcnOwogICAgICAgIGlmICghcGhvbmUgfHwgcGhvbmUubGVuZ3RoIDwgMTApIHsKICAgICAgICAgICAgcmVzRWwudGV4dENvbnRlbnQgPSAnXHUyNzRDIE5cdTAwZmFtZXJvIGludlx1MDBlMWxpZG8gKG1cdTAwZWRuIDEwIGRcdTAwZWRnaXRvcyknOwogICAgICAgICAgICByZXNFbC5zdHlsZS5jb2xvciA9ICdyZWQnOyByZXR1cm47CiAgICAgICAgfQogICAgICAgIHJlc0VsLnRleHRDb250ZW50ID0gJ1x1MjNGMyBFbnZpYW5kby4uLic7IHJlc0VsLnN0eWxlLmNvbG9yID0gJyM4ODgnOwogICAgICAgIHZhciBmZCA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIGZkLmFwcGVuZCgnYWN0aW9uJywgICd2bTJfdGVzdF9zZW5kJyk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsICAgbm9uY2UpOwogICAgICAgIGZkLmFwcGVuZCgncGhvbmUnLCAgIHBob25lKTsKICAgICAgICBmZC5hcHBlbmQoJ2NoYW5uZWwnLCBjaGFubmVsS2V5KTsKICAgICAgICBpZiAoaXNXYWJhKSB7CiAgICAgICAgICAgIHZhciB0bXBsRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ydGJfJyArIGJveElkICsgJ190bXBsJyk7CiAgICAgICAgICAgIGZkLmFwcGVuZCgndGVtcGxhdGUnLCB0bXBsRWwgPyB0bXBsRWwudmFsdWUgOiAnJyk7CiAgICAgICAgICAgIGZkLmFwcGVuZCgnaXNfd2FiYScsICAnMScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBtc2dFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJ0Yl8nICsgYm94SWQgKyAnX21zZycpOwogICAgICAgICAgICBmZC5hcHBlbmQoJ21lc3NhZ2UnLCBtc2dFbCA/IG1zZ0VsLnZhbHVlIDogJycpOwogICAgICAgIH0KICAgICAgICBmZXRjaChhamF4dXJsLCB7IG1ldGhvZDogJ1BPU1QnLCBib2R5OiBmZCB9KQogICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocikgeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgICAgICAudGhlbihmdW5jdGlvbihqKSB7CiAgICAgICAgICAgIHJlc0VsLnRleHRDb250ZW50ID0gai5zdWNjZXNzCiAgICAgICAgICAgICAgPyAnXHUyNzA1IEVudmlhZG8gY29tIHN1Y2Vzc28hJwogICAgICAgICAgICAgIDogKCdcdTI3NEMgJyArIChqLmRhdGEgJiYgai5kYXRhLm1lc3NhZ2UgPyBqLmRhdGEubWVzc2FnZSA6ICdFcnJvIGRlc2NvbmhlY2lkbycpKTsKICAgICAgICAgICAgcmVzRWwuc3R5bGUuY29sb3IgPSBqLnN1Y2Nlc3MgPyAnZ3JlZW4nIDogJ3JlZCc7CiAgICAgICAgICB9KQogICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXNFbC50ZXh0Q29udGVudCA9ICdcdTI3NEMgRmFsaGEgZGUgcmVkZSc7CiAgICAgICAgICAgIHJlc0VsLnN0eWxlLmNvbG9yID0gJ3JlZCc7CiAgICAgICAgICB9KTsKICAgIH0KICAgIDwvc2NyaXB0PgogICAgPD9waHAKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEdSVVBPIFBST01PIFBBR0UgKHdyYXBwZXIgVjIg4oCUIGzDqi9ncmF2YSBhcyBtZXNtYXMgdm1fZ3BfKiBvcHRpb25zKQovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2dydXBvX3Byb21vX3BhZ2UoKSB7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSApIHJldHVybjsKCiAgICAkc2F2ZWQgPSBmYWxzZTsKICAgIGlmICggaXNzZXQoJF9QT1NUWyd2bTJfZ3Bfc2F2ZSddKSAmJiBjaGVja19hZG1pbl9yZWZlcmVyKCd2bTJfZ3Bfc2F2ZScpICkgewogICAgICAgIHVwZGF0ZV9vcHRpb24oICd2bV9ncF9ncm91cF9pZCcsICAgICAgICAgICAgc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ3ZtX2dwX2dyb3VwX2lkJ10gPz8gJycpICk7CiAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtX2dwX2tpbGxfc3dpdGNoJywgICAgICAgICBpc3NldCgkX1BPU1RbJ3ZtX2dwX2tpbGxfc3dpdGNoJ10pID8gJzEnIDogJzAnICk7CiAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtX2dwX2RlbGF5X3NlY29uZHMnLCAgICAgICBpbnR2YWwoJF9QT1NUWyd2bV9ncF9kZWxheV9zZWNvbmRzJ10gPz8gMzApICk7CiAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtX2dwX3dlbGNvbWVfa2lsbCcsICAgICAgICBpc3NldCgkX1BPU1RbJ3ZtX2dwX3dlbGNvbWVfa2lsbCddKSA/ICcxJyA6ICcwJyApOwogICAgICAgIHVwZGF0ZV9vcHRpb24oICd2bV9ncF9zaWxlbmNlX2Zyb20nLCAgICAgICAgaW50dmFsKCRfUE9TVFsndm1fZ3Bfc2lsZW5jZV9mcm9tJ10gPz8gOCkgKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm1fZ3Bfc2lsZW5jZV91bnRpbCcsICAgICAgIGludHZhbCgkX1BPU1RbJ3ZtX2dwX3NpbGVuY2VfdW50aWwnXSA/PyAyMikgKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm1fZ3BfcHJvbW9fa2lsbCcsICAgICAgICAgIGlzc2V0KCRfUE9TVFsndm1fZ3BfcHJvbW9fa2lsbCddKSA/ICcxJyA6ICcwJyApOwogICAgICAgIHVwZGF0ZV9vcHRpb24oICd2bV9ncF9wcm9tb19zaWxlbmNlX2Zyb20nLCAgaW50dmFsKCRfUE9TVFsndm1fZ3BfcHJvbW9fc2lsZW5jZV9mcm9tJ10gPz8gOSkgKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm1fZ3BfcHJvbW9fc2lsZW5jZV91bnRpbCcsIGludHZhbCgkX1BPU1RbJ3ZtX2dwX3Byb21vX3NpbGVuY2VfdW50aWwnXSA/PyAyMikgKTsKICAgICAgICAkc2F2ZWQgPSB0cnVlOwogICAgfQoKICAgIC8vIEzDqiB2YWxvcmVzIGF0dWFpcwogICAgJGdyb3VwX2lkICAgICAgID0gZ2V0X29wdGlvbigndm1fZ3BfZ3JvdXBfaWQnLCAnJyk7CiAgICAka2lsbF9zd2l0Y2ggICAgPSBnZXRfb3B0aW9uKCd2bV9ncF9raWxsX3N3aXRjaCcsICcwJykgPT09ICcxJzsKICAgICRkZWxheSAgICAgICAgICA9IGludHZhbChnZXRfb3B0aW9uKCd2bV9ncF9kZWxheV9zZWNvbmRzJywgMzApKTsKICAgICR3ZWxfa2lsbCAgICAgICA9IGdldF9vcHRpb24oJ3ZtX2dwX3dlbGNvbWVfa2lsbCcsICcwJykgPT09ICcxJzsKICAgICR3ZWxfZnJvbSAgICAgICA9IGludHZhbChnZXRfb3B0aW9uKCd2bV9ncF9zaWxlbmNlX2Zyb20nLCA4KSk7CiAgICAkd2VsX3VudGlsICAgICAgPSBpbnR2YWwoZ2V0X29wdGlvbigndm1fZ3Bfc2lsZW5jZV91bnRpbCcsIDIyKSk7CiAgICAkcHJvbW9fa2lsbCAgICAgPSBnZXRfb3B0aW9uKCd2bV9ncF9wcm9tb19raWxsJywgJzAnKSA9PT0gJzEnOwogICAgJHByb21vX2Zyb20gICAgID0gaW50dmFsKGdldF9vcHRpb24oJ3ZtX2dwX3Byb21vX3NpbGVuY2VfZnJvbScsIDkpKTsKICAgICRwcm9tb191bnRpbCAgICA9IGludHZhbChnZXRfb3B0aW9uKCd2bV9ncF9wcm9tb19zaWxlbmNlX3VudGlsJywgMjIpKTsKCiAgICAvLyBTdGF0dXMgYW8gdml2bwogICAgJHR6ICA9IG5ldyBEYXRlVGltZVpvbmUoJ0FtZXJpY2EvU2FvX1BhdWxvJyk7CiAgICAkbm93ID0gbmV3IERhdGVUaW1lKCdub3cnLCAkdHopOwogICAgJGggICA9IChpbnQpICRub3ctPmZvcm1hdCgnRycpOwoKICAgICR3ZWxfYWN0aXZlICAgPSAhICRraWxsX3N3aXRjaCAmJiAhICR3ZWxfa2lsbCAmJiAkaCA+PSAkd2VsX2Zyb20gJiYgJGggPCAkd2VsX3VudGlsOwogICAgJHByb21vX2FjdGl2ZSA9ICEgJGtpbGxfc3dpdGNoICYmICEgJHByb21vX2tpbGwgJiYgJGggPj0gJHByb21vX2Zyb20gJiYgJGggPCAkcHJvbW9fdW50aWw7CgogICAgZnVuY3Rpb24gdm0yX2dwX3N0YXR1c19iYWRnZSggJGFjdGl2ZSApIHsKICAgICAgICBpZiAoJGFjdGl2ZSkgcmV0dXJuICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojMjdhZTYwO2NvbG9yOiNmZmY7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwIj7inIUgQVRJVk88L3NwYW4+JzsKICAgICAgICByZXR1cm4gJzxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNlNzRjM2M7Y29sb3I6I2ZmZjtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDAiPvCflLQgU0lMRU5DSUFETzwvc3Bhbj4nOwogICAgfQogICAgPz4KICAgIDxkaXYgY2xhc3M9IndyYXAgdm0yLXdyYXAiPgogICAgICAgIDxoMSBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21hcmdpbi1ib3R0b206MjBweCI+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MjZweCI+8J+SrDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+R3J1cG8gUHJvbW88L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItdmVyc2lvbi1iYWRnZSIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2JhY2tncm91bmQ6IzhlNDRhZDtjb2xvcjojZmZmO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLWxlZnQ6NHB4Ij52MS4wPC9zcGFuPgogICAgICAgIDwvaDE+CgogICAgICAgIDw/cGhwIGlmICgkc2F2ZWQpOiA/PgogICAgICAgIDxkaXYgY2xhc3M9Im5vdGljZSBub3RpY2Utc3VjY2VzcyBpcy1kaXNtaXNzaWJsZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+PHA+4pyFIENvbmZpZ3VyYcOnw7VlcyBzYWx2YXMhPC9wPjwvZGl2PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgICAgICA8P3BocCBpZiAoJGtpbGxfc3dpdGNoKTogPz4KICAgICAgICA8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLWVycm9yIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICAgICAgPHA+PHN0cm9uZz7wn5S0IEtpbGwgU3dpdGNoIEFUSVZPPC9zdHJvbmc+IOKAlCB0b2RvcyBvcyBlbnZpb3MgZG8gR3J1cG8gUHJvbW8gZXN0w6NvIHBhdXNhZG9zLjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KCiAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIj4KICAgICAgICAgICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl9ncF9zYXZlJyk7ID8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InZtMl9ncF9zYXZlIiB2YWx1ZT0iMSI+CgogICAgICAgICAgICA8IS0tIFNUQVRVUyBBTyBWSVZPIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY2FyZCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kOiNmOGY5ZmE7Ym9yZGVyOjFweCBzb2xpZCAjZGVlMmU2Ij4KICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOjAgMCAxMnB4O2ZvbnQtc2l6ZToxNXB4Ij7wn5OhIFN0YXR1cyBhZ29yYSAoPD9waHAgZWNobyAkbm93LT5mb3JtYXQoJ0g6aScpOyA/Pik8L2gzPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoyMHB4O2ZsZXgtd3JhcDp3cmFwIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6IzU1NSI+8J+RiyBCb2FzLXZpbmRhczo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX2dwX3N0YXR1c19iYWRnZSgkd2VsX2FjdGl2ZSk7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM1NTUiPvCflKUgUHJvbW9zOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyB2bTJfZ3Bfc3RhdHVzX2JhZGdlKCRwcm9tb19hY3RpdmUpOyA/PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBDT05GSUdVUkHDh8OVRVMgR0VSQUlTIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY2FyZCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweCI+CiAgICAgICAgICAgICAgICA8aDMgc3R5bGU9Im1hcmdpbjowIDAgMTZweDtmb250LXNpemU6MTZweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPuKame+4jzwvc3Bhbj4gQ29uZmlndXJhw6fDtWVzIEdlcmFpcwogICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZm9ybS10YWJsZSIgc3R5bGU9Im1heC13aWR0aDo2MDBweCI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjIwMHB4O3BhZGRpbmc6MTBweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwIj7wn4aUIElEIGRvIEdydXBvIFdoYXRzQXBwPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ2bV9ncF9ncm91cF9pZCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGdyb3VwX2lkKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7bWF4LXdpZHRoOjM4MHB4IiBwbGFjZWhvbGRlcj0iRXg6IDEyMDM2MzQyMjY0Mjc4NTY1OS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPklEIGRvIGdydXBvIFdBIHBhcmEgZW52aW8gZGUgcHJvbW9zIGUgYm9hcy12aW5kYXMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9InBhZGRpbmc6MTBweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5S0IEtpbGwgU3dpdGNoIEdlcmFsPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InZtX2dwX2tpbGxfc3dpdGNoIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCgka2lsbF9zd2l0Y2gpOyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5QYXVzYXIgPHN0cm9uZz5UT0RPUzwvc3Ryb25nPiBvcyBlbnZpb3MgKGJvYXMtdmluZGFzICsgcHJvbW9zKTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0icGFkZGluZzoxMHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDAiPuKPse+4jyBEZWxheSBlbnRyZSBtZW5zYWdlbnM8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJ2bV9ncF9kZWxheV9zZWNvbmRzIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkZGVsYXkpOyA/PiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPSI1IiBtYXg9IjMwMCIgc3R5bGU9IndpZHRoOjgwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojNTU1Ij5zZWd1bmRvczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5QYXVzYSBlbnRyZSBlbnZpb3MgY29uc2VjdXRpdm9zIHBhcmEgZXZpdGFyIHNwYW0uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gQU5USS1TUEFNIEJPQVMtVklOREFTIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY2FyZCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweDtib3JkZXItbGVmdDo0cHggc29saWQgI2YzOWMxMiI+CiAgICAgICAgICAgICAgICA8aDMgc3R5bGU9Im1hcmdpbjowIDAgNHB4O2ZvbnQtc2l6ZToxNnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+8J+Rizwvc3Bhbj4gQW50aS1TcGFtIOKAlCBCb2FzLVZpbmRhcwogICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46MCAwIDE2cHg7Y29sb3I6Izc3Nztmb250LXNpemU6MTNweCI+Q29udHJvbGEgcXVhbmRvIGEgbWVuc2FnZW0gZGUgYm9hcy12aW5kYXMgcGFyYSBub3ZvcyBtZW1icm9zIHBvZGUgc2VyIGVudmlhZGEuPC9wPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJmb3JtLXRhYmxlIiBzdHlsZT0ibWF4LXdpZHRoOjYwMHB4Ij4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MjAwcHg7cGFkZGluZzoxMHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDAiPuKPuO+4jyBQYXVzYXIgQm9hcy1WaW5kYXM8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm1fZ3Bfd2VsY29tZV9raWxsIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCgkd2VsX2tpbGwpOyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EZXNhdGl2YXIgZW52aW8gZGUgYm9hcy12aW5kYXMgdGVtcG9yYXJpYW1lbnRlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjEwcHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+UhyBTaWzDqm5jaW8g4oCUIG7Do28gZW52aWFyIGFudGVzIGRlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm1fZ3Bfc2lsZW5jZV9mcm9tIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkd2VsX2Zyb20pOyA/PiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPSIwIiBtYXg9IjIzIiBzdHlsZT0id2lkdGg6NzBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM1NTUiPmg8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjEwcHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+UhyBTaWzDqm5jaW8g4oCUIG7Do28gZW52aWFyIGEgcGFydGlyIGRlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm1fZ3Bfc2lsZW5jZV91bnRpbCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHdlbF91bnRpbCk7ID8+IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjAiIG1heD0iMjMiIHN0eWxlPSJ3aWR0aDo3MHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6IzU1NSI+aDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5Cb2FzLXZpbmRhcyBlbnZpYWRhcyBhcGVuYXMgZW50cmUgPD9waHAgZWNobyAkd2VsX2Zyb207ID8+aCBlIDw/cGhwIGVjaG8gJHdlbF91bnRpbDsgPz5oLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEFOVEktU1BBTSBQUk9NT1MgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1jYXJkIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToyMHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjZTc0YzNjIj4KICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOjAgMCA0cHg7Zm9udC1zaXplOjE2cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj7wn5SlPC9zcGFuPiBBbnRpLVNwYW0g4oCUIFByb21vcwogICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46MCAwIDE2cHg7Y29sb3I6Izc3Nztmb250LXNpemU6MTNweCI+SmFuZWxhIGRlIGVudmlvIGRhcyBwcm9tb3MgYXV0b23DoXRpY2FzIHBhcmEgbyBncnVwby48L3A+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImZvcm0tdGFibGUiIHN0eWxlPSJtYXgtd2lkdGg6NjAwcHgiPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoyMDBweDtwYWRkaW5nOjEwcHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+4o+477iPIFBhdXNhciBQcm9tb3M8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm1fZ3BfcHJvbW9fa2lsbCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJHByb21vX2tpbGwpOyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EZXNhdGl2YXIgZW52aW8gZGUgcHJvbW9zIHRlbXBvcmFyaWFtZW50ZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0icGFkZGluZzoxMHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDAiPvCflZAgSmFuZWxhIOKAlCBuw6NvIGVudmlhciBhbnRlcyBkZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InZtX2dwX3Byb21vX3NpbGVuY2VfZnJvbSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHByb21vX2Zyb20pOyA/PiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPSIwIiBtYXg9IjIzIiBzdHlsZT0id2lkdGg6NzBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM1NTUiPmg8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjEwcHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+VkCBKYW5lbGEg4oCUIG7Do28gZW52aWFyIGEgcGFydGlyIGRlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm1fZ3BfcHJvbW9fc2lsZW5jZV91bnRpbCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHByb21vX3VudGlsKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj0iMCIgbWF4PSIyMyIgc3R5bGU9IndpZHRoOjcwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojNTU1Ij5oPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPlByb21vcyBhdXRvbcOhdGljYXMgc8OzIGRpc3BhcmFtIGRlbnRybyBkZXNzYSBqYW5lbGEuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5IiBzdHlsZT0iZm9udC1zaXplOjE0cHg7cGFkZGluZzo4cHggMjBweCI+CiAgICAgICAgICAgICAgICDwn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXMKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9mb3JtPgoKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMnB4IDE2cHg7YmFja2dyb3VuZDojZmZmM2NkO2JvcmRlcjoxcHggc29saWQgI2ZmYzEwNztib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtjb2xvcjojODU2NDA0Ij4KICAgICAgICAgICAg8J+SoSA8c3Ryb25nPk5vdGE6PC9zdHJvbmc+IEVzdGEgcMOhZ2luYSBnZXJlbmNpYSBhcyBtZXNtYXMgY29uZmlndXJhw6fDtWVzIGRvIHBsdWdpbiA8ZW0+Vml2YU1haXMg4oCUIEdydXBvIFByb21vIEFkbWluPC9lbT4uCiAgICAgICAgICAgIEFzIGFsdGVyYcOnw7VlcyBhcXVpIHJlZmxldGVtIGltZWRpYXRhbWVudGUgbm8gY29tcG9ydGFtZW50byBkbyBncnVwby4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPD9waHAKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFNFVFRJTkdTIFBBR0UKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKLy8g8J+SrCBXQSBSRUNPVkVSWSDigJQgR2VzdMOjbyBjb21wbGV0YSBpbnRlZ3JhZGEgbm8gVjIKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCmZ1bmN0aW9uIHZtMl9yZW5kZXJfY2FycmluaG9fdGFiKCkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJHRhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bV93YV9jYXB0dXJlcyc7CgogICAgLy8gVmVyaWZpY2FyIHNlIHRhYmVsYSBleGlzdGUKICAgIGlmICgkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAnJHRhYmxlJyIpICE9PSAkdGFibGUpIHsKICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmYzY2Q7Ym9yZGVyOjFweCBzb2xpZCAjZmZjMTA3O3BhZGRpbmc6MjBweDtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luOjIwcHggMCI+JzsKICAgICAgICBlY2hvICc8aDMgc3R5bGU9Im1hcmdpbjowIDAgOHB4Ij7imqDvuI8gUGx1Z2luIFdBIFJlY292ZXJ5IG7Do28gZW5jb250cmFkbzwvaDM+JzsKICAgICAgICBlY2hvICc8cCBzdHlsZT0ibWFyZ2luOjAiPkF0aXZlIG8gcGx1Z2luIDxzdHJvbmc+Vml2YU1haXMgV0EgQ2FydCBSZWNvdmVyeTwvc3Ryb25nPiBwYXJhIHVzYXIgZXN0ZSBtw7NkdWxvLjwvcD4nOwogICAgICAgIGVjaG8gJzwvZGl2Pic7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRmaWx0ZXIgPSBpc3NldCgkX0dFVFsndm0yX3dhX3N0YXR1cyddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJF9HRVRbJ3ZtMl93YV9zdGF0dXMnXSkgOiAndG9kYXknOwogICAgJHRvZGF5X2RhdGUgPSBjdXJyZW50X3RpbWUoJ1ktbS1kJyk7IC8vIHVzYSB0aW1lem9uZSBkbyBXb3JkUHJlc3MgKEJyYXNpbCwgR01ULTMpCiAgICBpZiAoJGZpbHRlciA9PT0gJ3RvZGF5JykgewogICAgICAgICR3aGVyZSA9ICR3cGRiLT5wcmVwYXJlKCIgV0hFUkUgREFURShjYXB0dXJlZF9hdCkgPSAlcyIsICR0b2RheV9kYXRlKTsKICAgIH0gZWxzZWlmICgkZmlsdGVyICE9PSAnYWxsJykgewogICAgICAgICR3aGVyZSA9ICR3cGRiLT5wcmVwYXJlKCIgV0hFUkUgc3RhdHVzPSVzIiwgJGZpbHRlcik7CiAgICB9IGVsc2UgewogICAgICAgICR3aGVyZSA9ICcnOwogICAgfQogICAgJHJvd3MgICA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUICogRlJPTSB7JHRhYmxlfXskd2hlcmV9IE9SREVSIEJZIGNhcHR1cmVkX2F0IERFU0MgTElNSVQgMzAwIik7CgogICAgJHRvdGFsICAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSIpOwogICAgJHRvZGF5X2NudCA9IChpbnQpJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBEQVRFKGNhcHR1cmVkX2F0KSA9ICVzIiwgJHRvZGF5X2RhdGUpKTsKICAgICRzZW50ICAgICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgc3RhdHVzPSdzZW50JyIpOwogICAgJGZhaWxlZCAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXM9J2ZhaWxlZCciKTsKICAgICRwZW5kaW5nICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgc3RhdHVzPSdwZW5kaW5nJyIpOwogICAgJGNhbmNlbGxlZCA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXM9J2NhbmNlbGxlZCciKTsKICAgICRleHBpcmVkICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgc3RhdHVzPSdleHBpcmVkJyIpOwogICAgJGRuZF9za2lwICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXM9J2RuZF9za2lwJyIpOwoKICAgICR2YWxfcGVuZGluZyAgID0gKGZsb2F0KSgkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIFNVTShjYXJ0X3RvdGFsKSBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXM9J3BlbmRpbmcnIikgPzogMCk7CiAgICAkdmFsX3NlbnQgICAgICA9IChmbG9hdCkoJHdwZGItPmdldF92YXIoIlNFTEVDVCBTVU0oY2FydF90b3RhbCkgRlJPTSAkdGFibGUgV0hFUkUgc3RhdHVzPSdzZW50JyIpID86IDApOwogICAgJHZhbF9jYW5jZWxsZWQgPSAoZmxvYXQpKCR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgU1VNKGNhcnRfdG90YWwpIEZST00gJHRhYmxlIFdIRVJFIHN0YXR1cz0nY2FuY2VsbGVkJyIpID86IDApOwoKICAgIC8vIENvbmZpZwogICAgJGNoYW5uZWwgICAgID0gZ2V0X29wdGlvbigndm1fd2Ffc2VuZF9jaGFubmVsJywgJ3phcGlfMTg4NicpOwogICAgJGtpbGxfc3dpdGNoID0gKGJvb2wpZ2V0X29wdGlvbigndm1fd2Ffa2lsbF9zd2l0Y2gnLCAwKTsKICAgICRiYXRjaF9zaXplICA9IChpbnQpZ2V0X29wdGlvbigndm1fd2FfYmF0Y2hfc2l6ZScsIDIwKTsKICAgICRxdWlldF9zdGFydCA9IChpbnQpZ2V0X29wdGlvbigndm1fd2FfcXVpZXRfc3RhcnQnLCA4KTsKICAgICRxdWlldF9lbmQgICA9IChpbnQpZ2V0X29wdGlvbigndm1fd2FfcXVpZXRfZW5kJywgMjApOwogICAgJGludGVydmFsICAgID0gKGludClnZXRfb3B0aW9uKCd2bV93YV9pbnRlcnZhbF9zZWMnLCAzKTsKICAgICRjdXN0b21fbXNnICA9IGdldF9vcHRpb24oJ3ZtX3dhX3JlY292ZXJ5X21lc3NhZ2UnLCAnJyk7CgogICAgJG5vbmNlICAgICA9IHdwX2NyZWF0ZV9ub25jZSgndm1fd2FfcmVzZW5kJyk7CiAgICAkY2ZnX25vbmNlID0gd3BfY3JlYXRlX25vbmNlKCd2bTJfd2FfY29uZmlnJyk7CiAgICAkYmFzZV91cmwgID0gYWRtaW5fdXJsKCdhZG1pbi5waHA/cGFnZT12bTItYXV0b21hY29lcyZ0YWI9Y2FycmluaG8nKTsKICAgICRpc193YWJhICAgPSBpc3NldCggdm0yX2NoYW5uZWxzKClbJGNoYW5uZWxdICkgJiYgKCB2bTJfY2hhbm5lbHMoKVskY2hhbm5lbF1bJ3R5cGUnXSA/PyAnemFwaScgKSA9PT0gJ3dhYmEnOwogICAgJHdhX3RwbCAgICA9IGdldF9vcHRpb24oICd2bV93YV93YWJhX3RlbXBsYXRlJywgJ3JlY3VwZXJhX2NhcnJpbmhvX3dvbycgKTsKCiAgICAkY2hhbm5lbF9sYWJlbHMgPSB2bTJfY2hhbm5lbF9sYWJlbHMoKTsKICAgICRjaGFubmVsX2xhYmVsICA9ICRjaGFubmVsX2xhYmVsc1skY2hhbm5lbF0gPz8gJGNoYW5uZWw7CgogICAgJHRheGFfZW52aW8gPSAkdG90YWwgPiAwID8gcm91bmQoKCRzZW50IC8gJHRvdGFsKSAqIDEwMCkgOiAwOwogICAgJHRheGFfY29udiAgPSAkc2VudCAgPiAwID8gcm91bmQoKCRjYW5jZWxsZWQgLyAkc2VudCkgKiAxMDApIDogMDsKCiAgICA/PgogICAgPHN0eWxlPgogICAgLyog4pSA4pSAIENhcnJpbmhvIG1vYmlsZS1maXJzdCDilIDilIAgKi8KICAgIC52bTItd2EtY2ZnLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNHB4OwogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7CiAgICAgICAgLnZtMi13YS1jZmctZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9CiAgICB9CiAgICAvKiBUYWJlbGE6IGVzY29uZGVyIGNvbHVuYXMgc2VjdW5kw6FyaWFzIG5vIG1vYmlsZSAqLwogICAgQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7CiAgICAgICAgLnZtMi13YS10YWJsZSB0aDpudGgtY2hpbGQoMSksCiAgICAgICAgLnZtMi13YS10YWJsZSB0ZDpudGgtY2hpbGQoMSksCiAgICAgICAgLnZtMi13YS10YWJsZSB0aDpudGgtY2hpbGQoNyksCiAgICAgICAgLnZtMi13YS10YWJsZSB0ZDpudGgtY2hpbGQoNyksCiAgICAgICAgLnZtMi13YS10YWJsZSB0aDpudGgtY2hpbGQoOSksCiAgICAgICAgLnZtMi13YS10YWJsZSB0ZDpudGgtY2hpbGQoOSksCiAgICAgICAgLnZtMi13YS10YWJsZSB0aDpudGgtY2hpbGQoMTApLAogICAgICAgIC52bTItd2EtdGFibGUgdGQ6bnRoLWNoaWxkKDEwKSB7IGRpc3BsYXk6IG5vbmU7IH0KICAgICAgICAudm0yLXdhLXRhYmxlIHsgZm9udC1zaXplOiAxMXB4OyB9CiAgICAgICAgLnZtMi13YS10YWJsZSB0aCwgLnZtMi13YS10YWJsZSB0ZCB7IHBhZGRpbmc6IDZweCA4cHggIWltcG9ydGFudDsgfQogICAgfQogICAgPC9zdHlsZT4KICAgIDw/cGhwIGlmICgka2lsbF9zd2l0Y2gpOiA/PgogICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZGMzNTQ1O2NvbG9yOiNmZmY7cGFkZGluZzoxMnB4IDIwcHg7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbjowIDAgMTZweDtmb250LXNpemU6MTRweCI+CiAgICAgICAg8J+bkSA8c3Ryb25nPkVOVklPUyBQQVJBRE9TPC9zdHJvbmc+IOKAlCBLaWxsIHN3aXRjaCBhdGl2by4gRGVzYXRpdmUgZW0g4pqZ77iPIENvbmZpZ3VyYcOnw7VlcyBhYmFpeG8uCiAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgIDwhLS0g4pSA4pSAIEtQSSBDYXJkcyDilIDilIAgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpcyIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDE2MHB4LDFmcikpIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBvbmNsaWNrPSJ2bTJXYUZpbHRlcignYWxsJykiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgIzM0NDk1ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn5OmIFRvdGFsIENhcHR1cmFzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj48P3BocCBlY2hvICR0b3RhbDsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgbmV1dHJhbCI+dG9kb3Mgb3MgcmVnaXN0cm9zPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgb25jbGljaz0idm0yV2FGaWx0ZXIoJ3NlbnQnKSIgc3R5bGU9ImJvcmRlci1sZWZ0OjRweCBzb2xpZCAjMjdhZTYwIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPuKchSBFbnZpYWRvczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSIgc3R5bGU9ImNvbG9yOiMyN2FlNjAiPjw/cGhwIGVjaG8gJHNlbnQ7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPlIkIDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkdmFsX3NlbnQsMiwnLCcsJy4nKTsgPz48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBvbmNsaWNrPSJ2bTJXYUZpbHRlcigncGVuZGluZycpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6NHB4IHNvbGlkICNlNjdlMjIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+4o+zIFBlbmRlbnRlczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSIgc3R5bGU9ImNvbG9yOiNlNjdlMjIiPjw/cGhwIGVjaG8gJHBlbmRpbmc7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPlIkIDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkdmFsX3BlbmRpbmcsMiwnLCcsJy4nKTsgPz48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBvbmNsaWNrPSJ2bTJXYUZpbHRlcignZmFpbGVkJykiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgI2MwMzkyYiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7inYwgRmFsaG91PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIiBzdHlsZT0iY29sb3I6I2MwMzkyYiI+PD9waHAgZWNobyAkZmFpbGVkOyA/PjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWx0YSBuZXV0cmFsIj5lcnJvcyBkZSBlbnZpbzwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIG9uY2xpY2s9InZtMldhRmlsdGVyKCdjYW5jZWxsZWQnKSIgc3R5bGU9ImJvcmRlci1sZWZ0OjRweCBzb2xpZCAjMjdhZTYwIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPvCfm5IgQ29udmVydGlkb3M8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIHN0eWxlPSJjb2xvcjojMjdhZTYwIj48P3BocCBlY2hvICRjYW5jZWxsZWQ7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPlIkIDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkdmFsX2NhbmNlbGxlZCwyLCcsJywnLicpOyA/PjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgIzliNTliNjtjdXJzb3I6ZGVmYXVsdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn5OKIFRheGEgZGUgRW52aW88L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIHN0eWxlPSJjb2xvcjojOWI1OWI2Ij48P3BocCBlY2hvICR0YXhhX2VudmlvOyA/PiU8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgbmV1dHJhbCI+ZW52aWFkb3MgLyB0b3RhbDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgI2YzOWMxMjtjdXJzb3I6ZGVmYXVsdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn46vIFRheGEgQ29udmVyc8OjbzwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSIgc3R5bGU9ImNvbG9yOiNmMzljMTIiPjw/cGhwIGVjaG8gJHRheGFfY29udjsgPz4lPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPmNvbXByYXJhbSBhcMOzcyBlbnZpbzwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idm0yLWdyaWQyIj4KCiAgICA8IS0tIOKUgOKUgCBDb25maWcg4pSA4pSAIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWNhcmQiPgogICAgICAgIDxoMz7impnvuI8gQ29uZmlndXJhw6fDtWVzPC9oMz4KCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXNlY3Rpb24tbGFiZWwiPvCfk6EgQ2FuYWwgZGUgRW52aW88L2Rpdj4KICAgICAgICAgICAgPD9waHAgZWNobyB2bTJfY2hhbm5lbF9yYWRpb19odG1sKCAndm0yX3dhX2NoYW5uZWwnLCAkY2hhbm5lbCApOyA/PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9InZtMi13YS10cGwtcm93IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4Ozw/cGhwIGVjaG8gJGlzX3dhYmEgPyAnJyA6ICdkaXNwbGF5Om5vbmUnOyA/PiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1zZWN0aW9uLWxhYmVsIj7wn5OLIFRlbXBsYXRlIFdBQkE8L2Rpdj4KICAgICAgICAgICAgPHNlbGVjdCBpZD0idm0yLXdhLXRwbC1zZWwiIHN0eWxlPSJ3aWR0aDoxMDAlO21heC13aWR0aDo0MjBweDtwYWRkaW5nOjZweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4Ij4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX3dhYmFfdGVtcGxhdGVfb3B0aW9uc19odG1sKCAkd2FfdHBsICk7ID8+CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItd2EtY2ZnLWdyaWQiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXNlY3Rpb24tbGFiZWwiPvCfm5EgS2lsbCBTd2l0Y2g8L2Rpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ2bTItd2Eta3MiIDw/cGhwIGNoZWNrZWQoJGtpbGxfc3dpdGNoKTsgPz4+CiAgICAgICAgICAgICAgICAgICAgUGF1c2FyIHRvZG9zIG9zIGVudmlvcwogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItc2VjdGlvbi1sYWJlbCI+8J+TpiBNc2dzIHBvciBsb3RlPC9kaXY+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idm0yLXdhLWJhdGNoIiB2YWx1ZT0iPD9waHAgZWNobyAkYmF0Y2hfc2l6ZTsgPz4iIG1pbj0iMSIgbWF4PSIxMDAiCiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjcwcHg7cGFkZGluZzo0cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweCI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXNlY3Rpb24tbGFiZWwiPvCflIcgU2lsw6puY2lvIGEgcGFydGlyIGRhczwvZGl2PgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InZtMi13YS1xc3RhcnQiIHZhbHVlPSI8P3BocCBlY2hvICRxdWlldF9zdGFydDsgPz4iIG1pbj0iMCIgbWF4PSIyMyIKICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6NjBweDtwYWRkaW5nOjRweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4Ij5oCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXNlY3Rpb24tbGFiZWwiPvCflIcgU2lsw6puY2lvIGF0w6k8L2Rpdj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ2bTItd2EtcWVuZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJHF1aWV0X2VuZDsgPz4iIG1pbj0iMCIgbWF4PSIyMyIKICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6NjBweDtwYWRkaW5nOjRweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4Ij5oCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXNlY3Rpb24tbGFiZWwiPuKPsSBJbnRlcnZhbG8gZW50cmUgZW52aW9zPC9kaXY+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idm0yLXdhLWludGVydmFsIiB2YWx1ZT0iPD9waHAgZWNobyAkaW50ZXJ2YWw7ID8+IiBtaW49IjAiIG1heD0iNjAiCiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjYwcHg7cGFkZGluZzo0cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweCI+IHNlZwogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5IiBvbmNsaWNrPSJ2bTJXYVNhdmVDb25maWcoKSIgaWQ9InZtMi13YS1zYXZlLWNmZy1idG4iPgogICAgICAgICAgICDwn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXMKICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8c3BhbiBpZD0idm0yLXdhLWNmZy1zdGF0dXMiIHN0eWxlPSJtYXJnaW4tbGVmdDoxMHB4O2ZvbnQtc2l6ZToxM3B4Ij48L3NwYW4+CiAgICA8L2Rpdj4KCiAgICA8IS0tIOKUgOKUgCBNZW5zYWdlbSDilIDilIAgLS0+CiAgICA8ZGl2IGlkPSJ2bTItd2EtbXNnLWNhcmQiIHN0eWxlPSI8P3BocCBlY2hvICRpc193YWJhID8gJ2Rpc3BsYXk6bm9uZScgOiAnJzsgPz4iPgogICAgPGRpdiBjbGFzcz0idm0yLWNhcmQiPgogICAgICAgIDxoMz7inI/vuI8gTWVuc2FnZW0gZGUgUmVjdXBlcmHDp8OjbzwvaDM+CiAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiM4ODg7Zm9udC1zaXplOjEycHg7bWFyZ2luOjAgMCA4cHgiPgogICAgICAgICAgICBQbGFjZWhvbGRlcnM6IDxjb2RlPntub21lfTwvY29kZT4gPGNvZGU+e3Byb2R1dG99PC9jb2RlPiA8Y29kZT57dmFsb3J9PC9jb2RlPiA8Y29kZT57bGlua308L2NvZGU+CiAgICAgICAgPC9wPgogICAgICAgIDw/cGhwCiAgICAgICAgJGRlZmF1bHRfbXNnID0gIk9pIHtub21lfSEgQXF1aSDDqSBkYSBWaXZhTWFpcyBFdmVudG9zIPCfjolcblxuVmkgcXVlIHZvY8OqIHNlIGludGVyZXNzb3UgcG9yICp7cHJvZHV0b30qIG1hcyBuw6NvIGZpbmFsaXpvdSBhIHJlc2VydmEuXG5cblBvc3NvIHRlIGFqdWRhciBhIGNvbmNsdWlyPyBTdWEgdmFnYSBhaW5kYSBlc3TDoSBkaXNwb27DrXZlbCEg8J+OilxuXG7wn5GJIEZpbmFsaXplIGFxdWk6IHtsaW5rfVxuXG5BdGVuZGltZW50bzogaHR0cHM6Ly93YS5tZS81NTExOTQ3NzcxODg2IjsKICAgICAgICA/PgogICAgICAgIDx0ZXh0YXJlYSBpZD0idm0yLXdhLW1zZyIgcm93cz0iOCIKICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjhweCIKICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGRlZmF1bHRfbXNnKTsgPz4iPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRjdXN0b21fbXNnKTsgPz48L3RleHRhcmVhPgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6OHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHgiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidXR0b24gYnV0dG9uLXByaW1hcnkiIG9uY2xpY2s9InZtMldhU2F2ZU1zZygpIiBpZD0idm0yLXdhLXNhdmUtbXNnLWJ0biI+8J+SviBTYWx2YXIgTWVuc2FnZW08L2J1dHRvbj4KICAgICAgICAgICAgPHNwYW4gaWQ9InZtMi13YS1tc2ctc3RhdHVzIiBzdHlsZT0iZm9udC1zaXplOjEzcHgiPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PjwhLS0gdm0yLWNhcmQgLS0+CiAgICA8L2Rpdj48IS0tIHZtMi13YS1tc2ctY2FyZCAtLT4KICAgIDwvZGl2PjwhLS0gL2dyaWQyIC0tPgoKICAgIDwhLS0g4pSA4pSAIFRhYnMgZmlsdHJvIOKUgOKUgCAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NHB4O21hcmdpbjoxNnB4IDAgMTJweDtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZWVlO3BhZGRpbmctYm90dG9tOjhweCI+CiAgICAgICAgPD9waHAKICAgICAgICAkdGFicyA9IFsKICAgICAgICAgICAgJ3RvZGF5JyAgICAgPT4gIvCfk4UgSG9qZSAoeyR0b2RheV9jbnR9KSIsCiAgICAgICAgICAgICdhbGwnICAgICAgID0+ICJUb2RvcyAoeyR0b3RhbH0pIiwKICAgICAgICAgICAgJ3NlbnQnICAgICAgPT4gIuKchSBFbnZpYWRvcyAoeyRzZW50fSkiLAogICAgICAgICAgICAncGVuZGluZycgICA9PiAi4o+zIFBlbmRlbnRlcyAoeyRwZW5kaW5nfSkiLAogICAgICAgICAgICAnZmFpbGVkJyAgICA9PiAi4p2MIEZhbGhvdSAoeyRmYWlsZWR9KSIsCiAgICAgICAgICAgICdjYW5jZWxsZWQnID0+ICLwn5uSIENvbXByYXJhbSAoeyRjYW5jZWxsZWR9KSIsCiAgICAgICAgICAgICdleHBpcmVkJyAgID0+ICLij7EgRXhwaXJhZG9zICh7JGV4cGlyZWR9KSIsCiAgICAgICAgICAgICdkbmRfc2tpcCcgID0+ICLwn5qrIERORCAoeyRkbmRfc2tpcH0pIiwKICAgICAgICBdOwogICAgICAgIGZvcmVhY2ggKCR0YWJzIGFzICRrZXkgPT4gJGxhYmVsKToKICAgICAgICAgICAgJGFjdGl2ZSA9ICRmaWx0ZXIgPT09ICRrZXkgPyAnYmFja2dyb3VuZDojMDA3M2FhO2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiMwMDczYWEnIDogJ2JhY2tncm91bmQ6I2Y1ZjVmNTtjb2xvcjojNTU1O2JvcmRlci1jb2xvcjojZGRkJzsKICAgICAgICA/PgogICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJGJhc2VfdXJsOyA/PiZ2bTJfd2Ffc3RhdHVzPTw/cGhwIGVjaG8gJGtleTsgPz4iCiAgICAgICAgICAgc3R5bGU9Ijw/cGhwIGVjaG8gJGFjdGl2ZTsgPz47cGFkZGluZzo2cHggMTRweDtib3JkZXItcmFkaXVzOjIwcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjEycHg7Ym9yZGVyOjFweCBzb2xpZDt0cmFuc2l0aW9uOmFsbCAuMTVzIj4KICAgICAgICAgICAgPD9waHAgZWNobyAkbGFiZWw7ID8+CiAgICAgICAgPC9hPgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICA8L2Rpdj4KCiAgICA8IS0tIOKUgOKUgCBUYWJlbGEg4pSA4pSAIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWNhcmQiIHN0eWxlPSJwYWRkaW5nOjAiPgogICAgICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaCI+CiAgICAgICAgPHRhYmxlIGNsYXNzPSJ2bTItd2EtdGFibGUiIHN0eWxlPSJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MTJweCI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0ciBpZD0idm0yLWNhcnQtdGhlYWQiIHN0eWxlPSJiYWNrZ3JvdW5kOiNmOGY5ZmE7Ym9yZGVyLWJvdHRvbToycHggc29saWQgI2VlZTtjdXJzb3I6cG9pbnRlcjt1c2VyLXNlbGVjdDpub25lIj4KICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1jb2w9IjAiIGRhdGEtZGlyPSJkZXNjIiBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcCI+4o+wIEFjZXNzb3UgPHNwYW4gY2xhc3M9InZtMi1zb3J0LWljb24iPuKWvDwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBkYXRhLWNvbD0iMSIgc3R5bGU9InBhZGRpbmc6MTBweCAxMnB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3dyYXAiPiMgPHNwYW4gY2xhc3M9InZtMi1zb3J0LWljb24iPjwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBkYXRhLWNvbD0iMiIgc3R5bGU9InBhZGRpbmc6MTBweCAxMnB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3dyYXAiPlRlbGVmb25lIDxzcGFuIGNsYXNzPSJ2bTItc29ydC1pY29uIj48L3NwYW4+PC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1jb2w9IjMiIHN0eWxlPSJwYWRkaW5nOjEwcHggMTJweDt0ZXh0LWFsaWduOmxlZnQiPk5vbWUgPHNwYW4gY2xhc3M9InZtMi1zb3J0LWljb24iPjwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBkYXRhLWNvbD0iNCIgc3R5bGU9InBhZGRpbmc6MTBweCAxMnB4O3RleHQtYWxpZ246bGVmdCI+UHJvZHV0byA8c3BhbiBjbGFzcz0idm0yLXNvcnQtaWNvbiI+PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtY29sPSI1IiBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7dGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXAiPlZhbG9yIDxzcGFuIGNsYXNzPSJ2bTItc29ydC1pY29uIj48L3NwYW4+PC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1jb2w9IjYiIHN0eWxlPSJwYWRkaW5nOjEwcHggMTJweDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXAiPvCflJcgVVJMIDxzcGFuIGNsYXNzPSJ2bTItc29ydC1pY29uIj48L3NwYW4+PC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1jb2w9IjciIHN0eWxlPSJwYWRkaW5nOjEwcHggMTJweDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXAiPvCfk6QgRW52aWFkbyA8c3BhbiBjbGFzcz0idm0yLXNvcnQtaWNvbiI+PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtY29sPSI4IiBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXIiPlN0YXR1cyA8c3BhbiBjbGFzcz0idm0yLXNvcnQtaWNvbiI+PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtY29sPSI5IiBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXIiPlBlZGlkbyA8c3BhbiBjbGFzcz0idm0yLXNvcnQtaWNvbiI+PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtY29sPSIxMCIgc3R5bGU9InBhZGRpbmc6MTBweCAxMnB4O3RleHQtYWxpZ246bGVmdCI+UmVzcG9zdGEgQVBJIDxzcGFuIGNsYXNzPSJ2bTItc29ydC1pY29uIj48L3NwYW4+PC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1jb2w9IjExIiBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXIiPkHDp8OjbyA8c3BhbiBjbGFzcz0idm0yLXNvcnQtaWNvbiI+PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICRzdGF0dXNfY2ZnID0gWwogICAgICAgICAgICAgICAgJ3NlbnQnICAgICAgPT4gWycjMjdhZTYwJywgJ+KchSBFbnZpYWRvJ10sCiAgICAgICAgICAgICAgICAncGVuZGluZycgICA9PiBbJyNlNjdlMjInLCAn4o+zIFBlbmRlbnRlJ10sCiAgICAgICAgICAgICAgICAnZmFpbGVkJyAgICA9PiBbJyNjMDM5MmInLCAn4p2MIEZhbGhvdSddLAogICAgICAgICAgICAgICAgJ2NhbmNlbGxlZCcgPT4gWycjMjdhZTYwJywgJ/Cfm5IgQ29tcHJvdSddLAogICAgICAgICAgICAgICAgJ2V4cGlyZWQnICAgPT4gWycjOTVhNWE2JywgJ+KPsSBFeHBpcmFkbyddLAogICAgICAgICAgICAgICAgJ2RuZF9za2lwJyAgPT4gWycjOWI1OWI2JywgJ/CfmqsgRE5EJ10sCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGlmIChlbXB0eSgkcm93cykpOgogICAgICAgICAgICA/PgogICAgICAgICAgICA8dHI+PHRkIGNvbHNwYW49IjEyIiBzdHlsZT0icGFkZGluZzo0MHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNhYWEiPgogICAgICAgICAgICAgICAgTmVuaHVtIHJlZ2lzdHJvIGVuY29udHJhZG8gcGFyYSBlc3RlIGZpbHRyby4KICAgICAgICAgICAgPC90ZD48L3RyPgogICAgICAgICAgICA8P3BocCBlbHNlOiBmb3JlYWNoICgkcm93cyBhcyAkcik6CiAgICAgICAgICAgICAgICBbJHNjLCAkc2xdID0gJHN0YXR1c19jZmdbJHItPnN0YXR1c10gPz8gWycjNTU1JywgJHItPnN0YXR1c107CiAgICAgICAgICAgICAgICAkdGVtcG8gPSAn4oCUJzsKICAgICAgICAgICAgICAgIGlmICgkci0+c2VudF9hdCAmJiAkci0+Y2FwdHVyZWRfYXQpIHsKICAgICAgICAgICAgICAgICAgICAkZGlmZiA9IHN0cnRvdGltZSgkci0+c2VudF9hdCkgLSBzdHJ0b3RpbWUoJHItPmNhcHR1cmVkX2F0KTsKICAgICAgICAgICAgICAgICAgICAkdGVtcG8gPSAkZGlmZiA8IDYwID8gInskZGlmZn1zIiA6IHJvdW5kKCRkaWZmLzYwKSAuICdtaW4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGFwaV9zaG9ydCA9ICfigJQnOwogICAgICAgICAgICAgICAgJGFwaV90aXRsZSA9ICcnOwogICAgICAgICAgICAgICAgaWYgKCRyLT5hcGlfcmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICAkZGVjb2RlZCA9IGpzb25fZGVjb2RlKCRyLT5hcGlfcmVzcG9uc2UsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZGVjb2RlZFsnbWVzc2FnZXMnXVswXVsnaWQnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGFwaV9zaG9ydCA9ICfinIUg4oCmJyAuIHN1YnN0cigkZGVjb2RlZFsnbWVzc2FnZXMnXVswXVsnaWQnXSwgLTEwKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJGRlY29kZWRbJ2Vycm9yJ11bJ21lc3NhZ2UnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGFwaV9zaG9ydCA9ICfinYwgJyAuIHN1YnN0cigkZGVjb2RlZFsnZXJyb3InXVsnbWVzc2FnZSddLCAwLCA0MCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHN0cmxlbigkci0+YXBpX3Jlc3BvbnNlKSA8IDYwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRhcGlfc2hvcnQgPSAkci0+YXBpX3Jlc3BvbnNlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRhcGlfc2hvcnQgPSBzdWJzdHIoJHItPmFwaV9yZXNwb25zZSwgMCwgNTApIC4gJ+KApic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRhcGlfdGl0bGUgPSBlc2NfYXR0cigkci0+YXBpX3Jlc3BvbnNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRvcmRlcl9saW5rID0gJ+KAlCc7CiAgICAgICAgICAgICAgICBpZiAoJHItPm9yZGVyX2lkKSB7CiAgICAgICAgICAgICAgICAgICAgJG9yZGVyX2xpbmsgPSAnPGEgaHJlZj0iJyAuIGFkbWluX3VybCgicG9zdC5waHA/cG9zdD17JHItPm9yZGVyX2lkfSZhY3Rpb249ZWRpdCIpIC4gJyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjojMDA3M2FhIj4jJyAuIGVzY19odG1sKCRyLT5vcmRlcl9pZCkgLiAnPC9hPic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkYnRuID0gJyc7CiAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHItPnN0YXR1cywgWydmYWlsZWQnLCdwZW5kaW5nJywnZG5kX3NraXAnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkYnRuID0gIjxidXR0b24gY2xhc3M9J2J1dHRvbiBidXR0b24tc21hbGwgdm0yLXJlc2VuZC1idG4nIGRhdGEtaWQ9J3skci0+aWR9JyBkYXRhLW5vbmNlPSd7JG5vbmNlfScgc3R5bGU9J2ZvbnQtc2l6ZToxMXB4Jz7wn5SBPC9idXR0b24+IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR2YWxvciA9ICRyLT5jYXJ0X3RvdGFsID8gJ1IkICcgLiBudW1iZXJfZm9ybWF0KChmbG9hdCkkci0+Y2FydF90b3RhbCwgMiwgJywnLCAnLicpIDogJ+KAlCc7CiAgICAgICAgICAgICAgICAkemVicmEgPSAkci0+aWQgJSAyID09PSAwID8gJ2JhY2tncm91bmQ6I2ZhZmFmYScgOiAnYmFja2dyb3VuZDojZmZmJzsKICAgICAgICAgICAgPz4KICAgICAgICAgICAgPHRyIHN0eWxlPSI8P3BocCBlY2hvICR6ZWJyYTsgPz47Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YwZjBmMCI+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7d2hpdGUtc3BhY2U6bm93cmFwO2NvbG9yOiM1NTUiIHRpdGxlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRyLT5jYXB0dXJlZF9hdCk7ID8+IiBkYXRhLXZhbD0iPD9waHAgZWNobyBlc2NfYXR0cigkci0+Y2FwdHVyZWRfYXQpOyA/PiI+CiAgICAgICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgJHRzID0gc3RydG90aW1lKCRyLT5jYXB0dXJlZF9hdCk7CiAgICAgICAgICAgICAgICAkdG9kYXlfdHMgPSBzdHJ0b3RpbWUoY3VycmVudF90aW1lKCdZLW0tZCcpKTsKICAgICAgICAgICAgICAgIGlmICgkdHMgPj0gJHRvZGF5X3RzICYmICR0cyA8ICR0b2RheV90cyArIDg2NDAwKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPHNwYW4gc3R5bGU9ImNvbG9yOiM4ODg7Zm9udC1zaXplOjEwcHg7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoxIj5Ib2plPC9zcGFuPicgLiBkYXRlKCdIOmknLCAkdHMpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlY2hvIGRhdGUoJ2QvbScsICR0cykgLiAnPHNwYW4gc3R5bGU9ImNvbG9yOiNhYWE7Zm9udC1zaXplOjEwcHg7bWFyZ2luLWxlZnQ6MnB4Ij4nIC4gZGF0ZSgnSDppJywgJHRzKSAuICc8L3NwYW4+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMnB4O2NvbG9yOiM5OTkiIGRhdGEtdmFsPSI8P3BocCBlY2hvICRyLT5pZDsgPz4iPjw/cGhwIGVjaG8gJHItPmlkOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtd2VpZ2h0OjUwMCI+PD9waHAgZWNobyBlc2NfaHRtbCgkci0+cGhvbmUpOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHgiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHItPm5hbWUgPzogJ+KAlCcpOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7bWF4LXdpZHRoOjE4MHB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXAiIHRpdGxlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRyLT5wcm9kdWN0X25hbWUpOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkci0+cHJvZHVjdF9uYW1lID86ICfigJQnKTsgPz48L3RkPgogICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMnB4O3RleHQtYWxpZ246cmlnaHQ7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcCIgZGF0YS12YWw9Ijw/cGhwIGVjaG8gJHItPmNhcnRfdG90YWwgPyAoZmxvYXQpJHItPmNhcnRfdG90YWwgOiAwOyA/PiI+PD9waHAgZWNobyAkdmFsb3I7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTJweDt0ZXh0LWFsaWduOmNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgICAgICAkbGlua191cmwgPSAhZW1wdHkoJHItPnBhZ2VfdXJsKSA/ICRyLT5wYWdlX3VybCA6ICghZW1wdHkoJHItPmNhcnRfdXJsKSA/IGhvbWVfdXJsKCRyLT5jYXJ0X3VybCkgOiAnJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRsaW5rX3VybCk6CiAgICAgICAgICAgICAgICAgICAgPz48YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGxpbmtfdXJsKTsgPz4iIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6IzAwNzNhYTtmb250LXNpemU6MTFweCIgdGl0bGU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGxpbmtfdXJsKTsgPz4iPvCflJc8L2E+PD9waHAKICAgICAgICAgICAgICAgICAgICBlbHNlOiA/PuKAlDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPC90ZD4KCiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwIiBkYXRhLXZhbD0iPD9waHAgZWNobyAkci0+c2VudF9hdCA/IGVzY19hdHRyKCRyLT5zZW50X2F0KSA6ICcwMDAwLTAwLTAwIDAwOjAwOjAwJzsgPz4iPgogICAgICAgICAgICAgICAgPD9waHAgaWYgKCRyLT5zZW50X2F0KTogPz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4Ij48P3BocCBlY2hvIGRhdGUoJ0g6aScsIHN0cnRvdGltZSgkci0+c2VudF9hdCkpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6I2FhYTtmb250LXNpemU6MTBweDtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjEiPigrPD9waHAgZWNobyAkdGVtcG87ID8+KTwvc3Bhbj4KICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiNhYWEiPuKAlDwvc3Bhbj4KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTJweDt0ZXh0LWFsaWduOmNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6PD9waHAgZWNobyAkc2M7ID8+O2NvbG9yOiNmZmY7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjEycHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHNsOyA/PgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXIiPjw/cGhwIGVjaG8gJG9yZGVyX2xpbms7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTJweDttYXgtd2lkdGg6MTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTFweDtjb2xvcjojNjY2IgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSI8P3BocCBlY2hvICRhcGlfdGl0bGU7ID8+Ij48P3BocCBlY2hvIGVzY19odG1sKCRhcGlfc2hvcnQpOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXIiPjw/cGhwIGVjaG8gJGJ0bjsgPz48L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyBlbmRpZjsgPz4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgIC8vIOKUgOKUgCBTb3J0IGRhIHRhYmVsYSBDYXJyaW5obyDilIDilIAKICAgIChmdW5jdGlvbigpewogICAgICB2YXIgdGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWNhcnQtdGhlYWQnKTsKICAgICAgaWYoIXRoZWFkKSByZXR1cm47CiAgICAgIHZhciB0YWJsZSA9IHRoZWFkLmNsb3Nlc3QoJ3RhYmxlJyk7CiAgICAgIHRoZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoW2RhdGEtY29sXScpLmZvckVhY2goZnVuY3Rpb24odGgpewogICAgICAgIHRoLnN0eWxlLmN1cnNvcj0ncG9pbnRlcic7CiAgICAgICAgdGguYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgdmFyIGNvbCA9IHBhcnNlSW50KHRoLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wnKSk7CiAgICAgICAgICB2YXIgZGlyID0gdGguZ2V0QXR0cmlidXRlKCdkYXRhLWRpcicpPT09J2FzYyc/J2Rlc2MnOidhc2MnOwogICAgICAgICAgdGhlYWQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1zb3J0LWljb24nKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3MudGV4dENvbnRlbnQ9Jyc7fSk7CiAgICAgICAgICB0aC5xdWVyeVNlbGVjdG9yKCcudm0yLXNvcnQtaWNvbicpLnRleHRDb250ZW50ID0gZGlyPT09J2FzYyc/J+KWsic6J+KWvCc7CiAgICAgICAgICB0aGVhZC5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpLmZvckVhY2goZnVuY3Rpb24odCl7dC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZGlyJyk7fSk7CiAgICAgICAgICB0aC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZGlyJywgZGlyKTsKICAgICAgICAgIHZhciB0Ym9keSA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5Jyk7CiAgICAgICAgICB2YXIgcm93cyA9IEFycmF5LmZyb20odGJvZHkucXVlcnlTZWxlY3RvckFsbCgndHInKSk7CiAgICAgICAgICByb3dzLnNvcnQoZnVuY3Rpb24oYSxiKXsKICAgICAgICAgICAgdmFyIGNlbGxBID0gYS5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpW2NvbF07CiAgICAgICAgICAgIHZhciBjZWxsQiA9IGIucXVlcnlTZWxlY3RvckFsbCgndGQnKVtjb2xdOwogICAgICAgICAgICBpZighY2VsbEF8fCFjZWxsQikgcmV0dXJuIDA7CiAgICAgICAgICAgIHZhciB2YSA9IChjZWxsQS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsJyl8fGNlbGxBLnRleHRDb250ZW50KS50cmltKCk7CiAgICAgICAgICAgIHZhciB2YiA9IChjZWxsQi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsJyl8fGNlbGxCLnRleHRDb250ZW50KS50cmltKCk7CiAgICAgICAgICAgIHZhciBmYSA9IHBhcnNlRmxvYXQodmEucmVwbGFjZSgvW14wLTkuXC1dL2csJycpKSwgZmIgPSBwYXJzZUZsb2F0KHZiLnJlcGxhY2UoL1teMC05LlwtXS9nLCcnKSk7CiAgICAgICAgICAgIHZhciBjbXAgPSAoIWlzTmFOKGZhKSYmIWlzTmFOKGZiKSkgPyBmYS1mYiA6IHZhLmxvY2FsZUNvbXBhcmUodmIsJ3B0Jyx7bnVtZXJpYzp0cnVlLHNlbnNpdGl2aXR5OidiYXNlJ30pOwogICAgICAgICAgICByZXR1cm4gZGlyPT09J2FzYyc/Y21wOi1jbXA7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbihyKXt0Ym9keS5hcHBlbmRDaGlsZChyKTt9KTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIC8vIHNvcnQgaW5pY2lhbDogY29sIDAgKOKPsCBBY2Vzc291KSBkZXNjCiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICB2YXIgdGgwID0gdGhlYWQucXVlcnlTZWxlY3RvcigndGhbZGF0YS1jb2w9IjAiXScpOwogICAgICAgIGlmKHRoMCl7IHRoMC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZGlyJywnYXNjJyk7IHRoMC5jbGljaygpOyB9CiAgICAgIH0sIDgwKTsKICAgIH0pKCk7CgogICAgLy8g4pSA4pSAIEZpbHRybyBwb3IgY2FyZCBLUEkg4pSA4pSACiAgICBmdW5jdGlvbiB2bTJXYUZpbHRlcihzdGF0dXMpIHsKICAgICAgICB2YXIgYmFzZSA9IDw/cGhwIGVjaG8ganNvbl9lbmNvZGUoJGJhc2VfdXJsKTsgPz47CiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBiYXNlICsgJyZ2bTJfd2Ffc3RhdHVzPScgKyBzdGF0dXM7CiAgICB9CgogICAgLy8g4pSA4pSAIFJlZW52aWFyIOKUgOKUgAogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1yZXNlbmQtYnRuJykuZm9yRWFjaChmdW5jdGlvbihidG4pIHsKICAgICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGlkICAgID0gdGhpcy5kYXRhc2V0LmlkOwogICAgICAgICAgICB2YXIgbm9uY2UgPSB0aGlzLmRhdGFzZXQubm9uY2U7CiAgICAgICAgICAgIHZhciBlbCAgICA9IHRoaXM7CiAgICAgICAgICAgIGVsLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSAn4o+zJzsKICAgICAgICAgICAgZmV0Y2goYWpheHVybCwgewogICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9LAogICAgICAgICAgICAgICAgYm9keTogJ2FjdGlvbj12bTJfd2FfcmVzZW5kJmlkPScgKyBpZCArICcmbm9uY2U9JyArIG5vbmNlCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpIHsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgICAgICAgICAudGhlbihmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSAn4pyFJzsKICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS5iYWNrZ3JvdW5kID0gJyMyN2FlNjAnOwogICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLmNvbG9yID0gJyNmZmYnOwogICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLmJvcmRlckNvbG9yID0gJyMyN2FlNjAnOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9ICfinYwnOwogICAgICAgICAgICAgICAgICAgIGVsLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYWxlcnQoZGF0YS5kYXRhKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9KTsKCiAgICAvLyDilIDilIAgU2FsdmFyIG1lbnNhZ2VtIOKUgOKUgAogICAgZnVuY3Rpb24gdm0yV2FTYXZlTXNnKCkgewogICAgICAgIHZhciBidG4gICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXdhLXNhdmUtbXNnLWJ0bicpOwogICAgICAgIHZhciBzdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXdhLW1zZy1zdGF0dXMnKTsKICAgICAgICB2YXIgbXNnICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi13YS1tc2cnKS52YWx1ZTsKICAgICAgICBidG4uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICfij7MgU2FsdmFuZG/igKYnOwogICAgICAgIGZldGNoKGFqYXh1cmwsIHsKICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sCiAgICAgICAgICAgIGJvZHk6ICdhY3Rpb249dm1fd2Ffc2F2ZV9yZWNvdmVyeV9tc2cmbWVzc2FnZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KG1zZykgKyAnJm5vbmNlPTw/cGhwIGVjaG8gZXNjX2pzKCRub25jZSk7ID8+JwogICAgICAgIH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocikgeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gZGF0YS5zdWNjZXNzID8gJ+KchSBTYWx2byEnIDogJ+KdjCBFcnJvJzsKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgc3RhdHVzLnRleHRDb250ZW50ID0gJyc7IH0sIDMwMDApOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vIOKUgOKUgCBTYWx2YXIgY29uZmlnIOKUgOKUgAogICAgZnVuY3Rpb24gdm0yV2FDaGFubmVsU3dpdGNoKHNsdWcpIHsKICAgICAgICB2YXIgdHlwZXMgPSA8P3BocCBlY2hvIGpzb25fZW5jb2RlKCBhcnJheV9tYXAoIGZ1bmN0aW9uKCRjaCl7IHJldHVybiAkY2hbJ3R5cGUnXSA/PyAnemFwaSc7IH0sIHZtMl9jaGFubmVscygpICkgKTsgPz47CiAgICAgICAgdmFyIGlzV2FiYSA9ICh0eXBlc1tzbHVnXSA9PT0gJ3dhYmEnKTsKICAgICAgICB2YXIgdHBsUm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi13YS10cGwtcm93Jyk7CiAgICAgICAgdmFyIG1zZ0NhcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXdhLW1zZy1jYXJkJyk7CiAgICAgICAgaWYgKHRwbFJvdykgIHRwbFJvdy5zdHlsZS5kaXNwbGF5ICA9IGlzV2FiYSA/ICcnIDogJ25vbmUnOwogICAgICAgIGlmIChtc2dDYXJkKSBtc2dDYXJkLnN0eWxlLmRpc3BsYXkgPSBpc1dhYmEgPyAnbm9uZScgOiAnJzsKICAgIH0KICAgIChmdW5jdGlvbigpewogICAgICAgIHZhciByYWRpb3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPXZtMl93YV9jaGFubmVsXScpOwogICAgICAgIHJhZGlvcy5mb3JFYWNoKGZ1bmN0aW9uKHIpeyByLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCl7IHZtMldhQ2hhbm5lbFN3aXRjaCh0aGlzLnZhbHVlKTsgfSk7IH0pOwogICAgfSkoKTsKCiAgICBmdW5jdGlvbiB2bTJXYVNhdmVDb25maWcoKSB7CiAgICAgICAgdmFyIGJ0biAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2Etc2F2ZS1jZmctYnRuJyk7CiAgICAgICAgdmFyIHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2EtY2ZnLXN0YXR1cycpOwogICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gJ+KPsyBTYWx2YW5kb+KApic7CiAgICAgICAgdmFyIGNoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT12bTJfd2FfY2hhbm5lbF06Y2hlY2tlZCcpLnZhbHVlOwogICAgICAgIHZhciBrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2Eta3MnKS5jaGVja2VkID8gJzEnIDogJzAnOwogICAgICAgIHZhciBicyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2EtYmF0Y2gnKS52YWx1ZTsKICAgICAgICB2YXIgcXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXdhLXFzdGFydCcpLnZhbHVlOwogICAgICAgIHZhciBxZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2EtcWVuZCcpLnZhbHVlOwogICAgICAgIHZhciBpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2EtaW50ZXJ2YWwnKS52YWx1ZTsKICAgICAgICB2YXIgdHBsU2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi13YS10cGwtc2VsJyk7CiAgICAgICAgdmFyIHRwbCA9IHRwbFNlbCA/IHRwbFNlbC52YWx1ZSA6ICcnOwogICAgICAgIHZhciBib2R5ID0gJ2FjdGlvbj12bTJfd2Ffc2F2ZV9jb25maWcmbm9uY2U9PD9waHAgZWNobyBlc2NfanMoJGNmZ19ub25jZSk7ID8+JwogICAgICAgICAgICAgICAgICsgJyZ2bV93YV9zZW5kX2NoYW5uZWw9JyArIGVuY29kZVVSSUNvbXBvbmVudChjaCkgKyAnJnZtX3dhX2tpbGxfc3dpdGNoPScgKyBrcwogICAgICAgICAgICAgICAgICsgJyZ2bV93YV9iYXRjaF9zaXplPScgKyBicyArICcmdm1fd2FfcXVpZXRfc3RhcnQ9JyArIHFzCiAgICAgICAgICAgICAgICAgKyAnJnZtX3dhX3F1aWV0X2VuZD0nICArIHFlICsgJyZ2bV93YV9pbnRlcnZhbF9zZWM9JyArIGl2CiAgICAgICAgICAgICAgICAgKyAnJnZtX3dhX3dhYmFfdGVtcGxhdGU9JyArIGVuY29kZVVSSUNvbXBvbmVudCh0cGwpOwogICAgICAgIGZldGNoKGFqYXh1cmwsIHsKICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sCiAgICAgICAgICAgIGJvZHk6IGJvZHkKICAgICAgICB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpIHsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9IGRhdGEuc3VjY2VzcyA/ICfinIUgU2Fsdm8hJyA6ICfinYwgRXJybzogJyArIGRhdGEuZGF0YTsKICAgICAgICAgICAgaWYgKGRhdGEuc3VjY2VzcykgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBsb2NhdGlvbi5yZWxvYWQoKTsgfSwgODAwKTsgfQogICAgICAgIH0pOwogICAgfQogICAgPC9zY3JpcHQ+CiAgICA8L2Rpdj4KICAgIDw/cGhwCn0KCi8vIOKUgOKUgOKUgCDwn5OKIFByb21vcyBEYXNoYm9hcmQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9wcm9tb3NfcGFnZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0YmxfbG9nICAgID0gJHdwZGItPnByZWZpeCAuICd2bV93aGF0c2FwcF9sb2cnOwogICAgJHRibF9jbGlja3MgPSAkd3BkYi0+cHJlZml4IC4gJ3ZpdmFtYWlzX3Byb21vX2NsaWNrcyc7CiAgICAkdGJsX2Rpc2MgICA9ICd3el9hY3RpdmVfZGlzY291bnRzJzsgLy8gcHJlZml4byBmaXhvIGRvIHBsdWdpbiBiYW5uZXIKCiAgICAkdGFiID0gc2FuaXRpemVfdGV4dF9maWVsZCggJF9HRVRbJ3RhYiddID8/ICdkYXNoYm9hcmQnICk7CgogICAgLy8g4pSA4pSAIFNhbHZhciBDb25maWcgQmFubmVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgaWYgKCAkdGFiID09PSAnYmFubmVyJyAmJiBpc3NldCggJF9QT1NUWyd2bTJfc2F2ZV9iYW5uZXInXSApICYmIGNoZWNrX2FkbWluX3JlZmVyZXIoICd2bTJfYmFubmVyX25vbmNlJyApICkgewogICAgICAgICRib29sX2ZpZWxkcyA9IFsndm1fYmFubmVyX2VuYWJsZWQnLCd2bV9iYW5uZXJfYW5pbWFjYW8nLCd2bV9iYW5uZXJfbW9zdHJhcl9pbWFnZW0nLCd2bV9wcm9tb19tdWx0aV9lbmFibGVkJ107CiAgICAgICAgJGFsbF9maWVsZHMgID0gWyd2bV9iYW5uZXJfZW5hYmxlZCcsJ3ZtX2Jhbm5lcl9wb3NpdGlvbicsJ3ZtX2Jhbm5lcl9ob3JhX2luaWNpbycsJ3ZtX2Jhbm5lcl9ob3JhX2ZpbScsCiAgICAgICAgICAgICAgICAgICAgICAgICd2bV9iYW5uZXJfY3RhX3RleHQnLCd2bV9iYW5uZXJfYW5pbWFjYW8nLCd2bV9iYW5uZXJfY29yX21pbmknLCd2bV9iYW5uZXJfY29yX21lZ2EnLAogICAgICAgICAgICAgICAgICAgICAgICAndm1fYmFubmVyX21vc3RyYXJfaW1hZ2VtJywndm1fYmFubmVyX3ByZWZpeG9fbWluaScsJ3ZtX2Jhbm5lcl9wcmVmaXhvX21lZ2EnLAogICAgICAgICAgICAgICAgICAgICAgICAndm1fcHJvbW9fbXVsdGlfZW5hYmxlZCcsJ3ZtX3Byb21vX21heF9jYXJvdXNlbCcsJ3ZtX3Byb21vX2Nhcm91c2VsX2ludGVydmFsJywndm1fcHJvbW9fY2Fyb3VzZWxfb3JkZXInXTsKICAgICAgICBmb3JlYWNoICggJGFsbF9maWVsZHMgYXMgJGYgKSB7CiAgICAgICAgICAgICR2YWwgPSBpbl9hcnJheSgkZiwgJGJvb2xfZmllbGRzKSA/IChpc3NldCgkX1BPU1RbJGZdKSA/ICcxJyA6ICcwJykgOiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJGZdID8/ICcnICk7CiAgICAgICAgICAgIHVwZGF0ZV9vcHRpb24oICRmLCAkdmFsICk7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9Im5vdGljZSBub3RpY2Utc3VjY2VzcyBpcy1kaXNtaXNzaWJsZSI+PHA+4pyFIENvbmZpZ3VyYcOnw7VlcyBkbyBiYW5uZXIgc2FsdmFzITwvcD48L2Rpdj4nOwogICAgfQoKICAgIC8vIOKUgOKUgCBEaXNwYXJhciBub3ZhIHByb21vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgJGRpc3BhcmFyX21zZyA9ICcnOwogICAgaWYgKCAkdGFiID09PSAnZGlzcGFyYXInICYmIGlzc2V0KCAkX1BPU1RbJ3ZtMl9kaXNwYXJhciddICkgJiYgY2hlY2tfYWRtaW5fcmVmZXJlciggJ3ZtMl9kaXNwYXJhcl9ub25jZScgKSApIHsKICAgICAgICAkcHJvZHVjdF9pZCAgPSBpbnR2YWwoICRfUE9TVFsncHJvZHVjdF9pZCddID8/IDAgKTsKICAgICAgICAkZGlzY291bnQgICAgPSBpbnR2YWwoICRfUE9TVFsnZGlzY291bnRfcGVyY2VudCddID8/IDAgKTsKICAgICAgICAkZHVyYWNhbyAgICAgPSBpbnR2YWwoICRfUE9TVFsnZHVyYWNhb19ob3JhcyddID8/IDMgKTsKICAgICAgICAkaXNfbWVnYSAgICAgPSBpc3NldCggJF9QT1NUWydpc19tZWdhX3Byb21vJ10gKSA/IHRydWUgOiBmYWxzZTsKICAgICAgICAkc2VuZF93YSAgICAgPSBpc3NldCggJF9QT1NUWydzZW5kX3doYXRzYXBwJ10gKSA/IHRydWUgOiBmYWxzZTsKICAgICAgICBpZiAoICRwcm9kdWN0X2lkID4gMCAmJiAkZGlzY291bnQgPiAwICkgewogICAgICAgICAgICAvLyBMw7NnaWNhIGRpcmV0YSAoc2VtIFJFU1QgY2FsbCBhbyBwbHVnaW4gZGVsZXRhZG8pCiAgICAgICAgICAgICRwcm9kdWN0ID0gZnVuY3Rpb25fZXhpc3RzKCd3Y19nZXRfcHJvZHVjdCcpID8gd2NfZ2V0X3Byb2R1Y3QoJHByb2R1Y3RfaWQpIDogbnVsbDsKICAgICAgICAgICAgaWYgKCAhICRwcm9kdWN0ICkgewogICAgICAgICAgICAgICAgJGRpc3BhcmFyX21zZyA9ICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLWVycm9yIj48cD7inYwgUHJvZHV0byBuw6NvIGVuY29udHJhZG8uPC9wPjwvZGl2Pic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcHJvZHVjdF9uYW1lICAgPSAkcHJvZHVjdC0+Z2V0X25hbWUoKTsKICAgICAgICAgICAgICAgICRyZWd1bGFyX3ByaWNlICA9IGZsb2F0dmFsKCAkcHJvZHVjdC0+Z2V0X3JlZ3VsYXJfcHJpY2UoKSApOwogICAgICAgICAgICAgICAgJHNhbGVfcHJpY2VfbmV3ID0gJHJlZ3VsYXJfcHJpY2UgPiAwID8gcm91bmQoICRyZWd1bGFyX3ByaWNlICogKDEgLSAkZGlzY291bnQgLyAxMDApLCAyICkgOiAwOwoKICAgICAgICAgICAgICAgIC8vIEFwbGljYXIgcHJlw6dvIHByb21vY2lvbmFsIG5vIFdvb0NvbW1lcmNlCiAgICAgICAgICAgICAgICBpZiAoICRyZWd1bGFyX3ByaWNlID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAkcHJvZHVjdC0+c2V0X3NhbGVfcHJpY2UoICRzYWxlX3ByaWNlX25ldyApOwogICAgICAgICAgICAgICAgICAgICRwcm9kdWN0LT5zZXRfZGF0ZV9vbl9zYWxlX2Zyb20oIG51bGwgKTsKICAgICAgICAgICAgICAgICAgICAkcHJvZHVjdC0+c2V0X2RhdGVfb25fc2FsZV90byggbnVsbCApOwogICAgICAgICAgICAgICAgICAgICRwcm9kdWN0LT5zYXZlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gUmVnaXN0cmFyIGVtIHZtX3doYXRzYXBwX2xvZwogICAgICAgICAgICAgICAgJHdwZGItPmluc2VydCggJHRibF9sb2csIFsKICAgICAgICAgICAgICAgICAgICAncHJvZHVjdF9pZCcgICAgICAgPT4gJHByb2R1Y3RfaWQsCiAgICAgICAgICAgICAgICAgICAgJ3Byb2R1Y3RfbmFtZScgICAgID0+ICRwcm9kdWN0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgJ2Rpc2NvdW50X3BlcmNlbnQnID0+ICRkaXNjb3VudCwKICAgICAgICAgICAgICAgICAgICAnaXNfbWVnYV9wcm9tbycgICAgPT4gJGlzX21lZ2EgPyAxIDogMCwKICAgICAgICAgICAgICAgICAgICAnc2VudF9hdCcgICAgICAgICAgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgICAgICAgICAgICAgICAgICdjbGlja3MnICAgICAgICAgICA9PiAwLAogICAgICAgICAgICAgICAgXSwgWyclZCcsJyVzJywnJWQnLCclZCcsJyVzJywnJWQnXSApOwoKICAgICAgICAgICAgICAgIC8vIFJlZ2lzdHJhciBlbSB3el9hY3RpdmVfZGlzY291bnRzIChwYXJhIG8gdm0tcHJvbW8tYmFubmVyKQogICAgICAgICAgICAgICAgaWYgKCAkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAneyR0YmxfZGlzY30nIikgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gdjEuNS4xODogY3Vwb20gw5pOSUNPIHBvciBwcm9kdXRvLCByZXN0cml0byBhbyBwcm9kdXRvLCBleHBpcmHDp8OjbyBleGF0YQogICAgICAgICAgICAgICAgICAgICRjb3Vwb25fY29kZSA9IHN0cnRvdXBwZXIoICdQUk9NTycgLiAkZGlzY291bnQgLiAnT0ZGLScgLiAkcHJvZHVjdF9pZCApOwogICAgICAgICAgICAgICAgICAgICRleHBpcmVzX3RzICA9IHN0cnRvdGltZSggIit7JGR1cmFjYW99IGhvdXJzIiApOwoKICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGFyIGN1cG9tIGFudGVyaW9yIGNvbSBtZXNtbyBjw7NkaWdvIHNlIGV4aXN0aXIKICAgICAgICAgICAgICAgICAgICAkZXhpc3RpbmdfY291cG9uID0gZ2V0X3BhZ2VfYnlfdGl0bGUoICRjb3Vwb25fY29kZSwgT0JKRUNULCAnc2hvcF9jb3Vwb24nICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkZXhpc3RpbmdfY291cG9uICkgewogICAgICAgICAgICAgICAgICAgICAgICB3cF9kZWxldGVfcG9zdCggJGV4aXN0aW5nX2NvdXBvbi0+SUQsIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIENyaWFyIGN1cG9tIG5vdm8gdmlhIFdDX0NvdXBvbiAoZ2FyYW50ZSBwcm9kdWN0X2lkcyArIGV4cGlyYcOnw6NvIGNvcnJldGEpCiAgICAgICAgICAgICAgICAgICAgJHdjX2NvdXBvbiA9IG5ldyBcV0NfQ291cG9uKCk7CiAgICAgICAgICAgICAgICAgICAgJHdjX2NvdXBvbi0+c2V0X2NvZGUoICRjb3Vwb25fY29kZSApOwogICAgICAgICAgICAgICAgICAgICR3Y19jb3Vwb24tPnNldF9kaXNjb3VudF90eXBlKCAncGVyY2VudCcgKTsKICAgICAgICAgICAgICAgICAgICAkd2NfY291cG9uLT5zZXRfYW1vdW50KCAkZGlzY291bnQgKTsKICAgICAgICAgICAgICAgICAgICAkd2NfY291cG9uLT5zZXRfcHJvZHVjdF9pZHMoIFsgJHByb2R1Y3RfaWQgXSApOwogICAgICAgICAgICAgICAgICAgICR3Y19jb3Vwb24tPnNldF9kYXRlX2V4cGlyZXMoICRleHBpcmVzX3RzICk7CiAgICAgICAgICAgICAgICAgICAgJHdjX2NvdXBvbi0+c2V0X2luZGl2aWR1YWxfdXNlKCBmYWxzZSApOwogICAgICAgICAgICAgICAgICAgICR3Y19jb3Vwb24tPnNldF91c2FnZV9saW1pdCggMCApOyAvLyBpbGltaXRhZG8KICAgICAgICAgICAgICAgICAgICAkd2NfY291cG9uLT5zYXZlKCk7CgogICAgICAgICAgICAgICAgICAgICRjb2xzID0gWyAncHJvZHVjdF9pZCc9PiRwcm9kdWN0X2lkLCAncHJvZHVjdF9uYW1lJz0+JHByb2R1Y3RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2NvdW50X3BlcmNlbnQnPT4kZGlzY291bnQsICdpc19tZWdhX3Byb21vJz0+JGlzX21lZ2E/MTowLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGllZF9hdCc9PmN1cnJlbnRfdGltZSgnbXlzcWwnKSBdOwogICAgICAgICAgICAgICAgICAgIC8vIENvbHVuYXMgb3BjaW9uYWlzIOKAlCBpbnNlcmlyIGFwZW5hcyBzZSBleGlzdGlyZW0KICAgICAgICAgICAgICAgICAgICAkZXhpc3RpbmdfY29scyA9ICR3cGRiLT5nZXRfY29sKCJTSE9XIENPTFVNTlMgRlJPTSB7JHRibF9kaXNjfSIpOwogICAgICAgICAgICAgICAgICAgIGlmICggaW5fYXJyYXkoJ29yaWdpbmFsX3ByaWNlJywgJGV4aXN0aW5nX2NvbHMpICkgJGNvbHNbJ29yaWdpbmFsX3ByaWNlJ10gPSAkcmVndWxhcl9wcmljZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIGluX2FycmF5KCdzYWxlX3ByaWNlJywgICAgICRleGlzdGluZ19jb2xzKSApICRjb2xzWydzYWxlX3ByaWNlJ10gICAgID0gJHNhbGVfcHJpY2VfbmV3OwogICAgICAgICAgICAgICAgICAgIGlmICggaW5fYXJyYXkoJ2R1cmFjYW9faG9yYXMnLCAgJGV4aXN0aW5nX2NvbHMpICkgJGNvbHNbJ2R1cmFjYW9faG9yYXMnXSAgPSAkZHVyYWNhbzsKICAgICAgICAgICAgICAgICAgICBpZiAoIGluX2FycmF5KCdleHBpcmVzX2F0JywgICAgICRleGlzdGluZ19jb2xzKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHNbJ2V4cGlyZXNfYXQnXSA9IGRhdGUoJ1ktbS1kIEg6aTpzJywgc3RydG90aW1lKCIreyRkdXJhY2FvfSBob3VycyIpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCBpbl9hcnJheSgnY291cG9uX2NvZGUnLCAgICAkZXhpc3RpbmdfY29scykgKSAkY29sc1snY291cG9uX2NvZGUnXSAgICA9ICRjb3Vwb25fY29kZTsKICAgICAgICAgICAgICAgICAgICAkd3BkYi0+aW5zZXJ0KCAkdGJsX2Rpc2MsICRjb2xzICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGRpc3BhcmFyX21zZyA9ICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MiPjxwPuKchSBQcm9tbyBkaXNwYXJhZGEhIDxzdHJvbmc+JyAuIGVzY19odG1sKCRwcm9kdWN0X25hbWUpIC4gJzwvc3Ryb25nPiBjb20gPHN0cm9uZz4nIC4gJGRpc2NvdW50IC4gJyUgT0ZGPC9zdHJvbmc+IHBvciAnIC4gJGR1cmFjYW8gLiAnaC48L3A+PC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkaXNwYXJhcl9tc2cgPSAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS13YXJuaW5nIj48cD7imqDvuI8gUHJlZW5jaGEgcHJvZHV0byBlIGRlc2NvbnRvLjwvcD48L2Rpdj4nOwogICAgICAgIH0KICAgIH0KCiAgICAvLyDilIDilIAgS1BJcyBwYXJhIERhc2hib2FyZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgICRwZXJpb2QgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX0dFVFsncGVyaW9kJ10gPz8gJzMwZCcgKTsKICAgICR0aXBvICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX0dFVFsndGlwbyddICAgPz8gJ2FsbCcgKTsKICAgICRmaWx0ZXJfY2FyZCA9IHNhbml0aXplX3RleHRfZmllbGQoICRfR0VUWydmaWx0ZXJfY2FyZCddID8/ICcnICk7CgogICAgJGRheXMgPSBtYXRjaCgkcGVyaW9kKSB7ICc3ZCc9PjcsICc5MGQnPT45MCwgJ2FsbCc9PjM2NTAsIGRlZmF1bHQ9PjMwIH07CiAgICAkZGF0ZV9mcm9tID0gZGF0ZSgnWS1tLWQgSDppOnMnLCBzdHJ0b3RpbWUoIi17JGRheXN9IGRheXMiKSk7CgogICAgJHdoZXJlX3RpcG8gPSAnJzsKICAgIGlmICggJHRpcG8gPT09ICdtZWdhJyApICR3aGVyZV90aXBvID0gJyBBTkQgaXNfbWVnYV9wcm9tbz0xJzsKICAgIGVsc2VpZiAoICR0aXBvID09PSAnbWluaScgKSAkd2hlcmVfdGlwbyA9ICcgQU5EIGlzX21lZ2FfcHJvbW89MCc7CgogICAgJHRvdGFsX2VudmlvcyAgPSAoaW50KSAkd3BkYi0+Z2V0X3Zhcigkd3BkYi0+cHJlcGFyZSgiU0VMRUNUIENPVU5UKCopIEZST00geyR0YmxfbG9nfSBXSEVSRSBzZW50X2F0Pj0lc3skd2hlcmVfdGlwb30iLCAkZGF0ZV9mcm9tKSk7CiAgICAkdG90YWxfY2xpY2tzICA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgQ09BTEVTQ0UoU1VNKGNsaWNrcyksMCkgRlJPTSB7JHRibF9sb2d9IFdIRVJFIHNlbnRfYXQ+PSVzeyR3aGVyZV90aXBvfSIsICRkYXRlX2Zyb20pKTsKICAgICR0b3RhbF9tZWdhICAgID0gKGludCkgJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskdGJsX2xvZ30gV0hFUkUgc2VudF9hdD49JXMgQU5EIGlzX21lZ2FfcHJvbW89MSIsICRkYXRlX2Zyb20pKTsKICAgICR0b3RhbF9taW5pICAgID0gJHRvdGFsX2VudmlvcyAtICR0b3RhbF9tZWdhOwogICAgJGN0cl9tZWRpbyAgICAgPSAkdG90YWxfZW52aW9zID4gMCA/IHJvdW5kKCR0b3RhbF9jbGlja3MgLyAkdG90YWxfZW52aW9zICogMTAwLCAxKSA6IDA7CiAgICAkc2VtX2NsaWNrcyAgICA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHRibF9sb2d9IFdIRVJFIHNlbnRfYXQ+PSVzIEFORCBjbGlja3M9MHskd2hlcmVfdGlwb30iLCAkZGF0ZV9mcm9tKSk7CiAgICAkbWVsaG9yX3Byb2QgICA9ICR3cGRiLT5nZXRfcm93KCR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgcHJvZHVjdF9uYW1lLCBTVU0oY2xpY2tzKSBhcyB0YyBGUk9NIHskdGJsX2xvZ30gV0hFUkUgc2VudF9hdD49JXN7JHdoZXJlX3RpcG99IEdST1VQIEJZIHByb2R1Y3RfaWQgT1JERVIgQlkgdGMgREVTQyBMSU1JVCAxIiwgJGRhdGVfZnJvbSkpOwoKICAgIC8vIFByb21vcyBhdGl2YXMg4oCUIHYxLjUuMTUgbXVsdGktcHJvbW8KICAgICRwcm9tb3NfYXRpdmFzID0gW107CiAgICBpZiAoICR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICd7JHRibF9kaXNjfSciKSApIHsKICAgICAgICAkcHJvbW9zX2F0aXZhcyA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUICogRlJPTSB7JHRibF9kaXNjfSBXSEVSRSByZXZlcnRlZF9hdCBJUyBOVUxMIEFORCAoZXhwaXJlc19hdCBJUyBOVUxMIE9SIGV4cGlyZXNfYXQgPSAnMDAwMC0wMC0wMCAwMDowMDowMCcgT1IgZXhwaXJlc19hdCA+IE5PVygpKSBPUkRFUiBCWSBhcHBsaWVkX2F0IERFU0MiKTsKICAgIH0KICAgICRwcm9tb19hdGl2YSA9ICFlbXB0eSgkcHJvbW9zX2F0aXZhcykgPyAkcHJvbW9zX2F0aXZhc1swXSA6IG51bGw7IC8vIGJhY2t3YXJkIGNvbXBhdCBwYXJhIGJhbm5lciBwcmV2aWV3CgogICAgLy8gUHJvZHV0b3MgV29vQ29tbWVyY2UgcGFyYSBzZWxlY3QKICAgICRwcm9kdXRvcyA9IGdldF9wb3N0cyhbJ3Bvc3RfdHlwZSc9Pidwcm9kdWN0JywnbnVtYmVycG9zdHMnPT4yMDAsJ3Bvc3Rfc3RhdHVzJz0+J3B1Ymxpc2gnLCdvcmRlcmJ5Jz0+J3RpdGxlJywnb3JkZXInPT4nQVNDJ10pOwoKICAgICRiYXNlX3VybCA9IGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLXByb21vcycpOwogICAgPz4KICAgIDxkaXYgY2xhc3M9IndyYXAiIHN0eWxlPSJtYXgtd2lkdGg6MTIwMHB4OyI+CiAgICAgIDxzdHlsZT4KICAgICAgLnZtMnAtZ3JpZDJ7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnI7Z2FwOjIwcHg7YWxpZ24taXRlbXM6c3RhcnQ7fQogICAgICBAbWVkaWEobWluLXdpZHRoOjkwMHB4KXsudm0ycC1ncmlkMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsMS41ZnIpIG1pbm1heCgwLDFmcik7fX0KICAgICAgLnZtMnAtZ3JpZDItZXF7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnI7Z2FwOjIwcHg7YWxpZ24taXRlbXM6c3RhcnQ7fQogICAgICBAbWVkaWEobWluLXdpZHRoOjkwMHB4KXsudm0ycC1ncmlkMi1lcXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsMWZyKSBtaW5tYXgoMCwzNDBweCk7fX0KICAgICAgLnZtMnAta3Bpc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMTMwcHgsMWZyKSk7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToyNHB4O30KICAgICAgLnZtMnAtZmlsdHJvc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcjt9CiAgICAgIC52bTJwLWZpbHRyb3MgbGFiZWx7Zm9udC13ZWlnaHQ6NjAwO30KICAgICAgLnZtMnAtZmlsdHJvcyBzZWxlY3QsLnZtMnAtZmlsdHJvcyBpbnB1dHttYXgtd2lkdGg6MTAwJTt9CiAgICAgIC52bTJwLWZvcm0td2lkZSBpbnB1dFt0eXBlPXRleHRdLC52bTJwLWZvcm0td2lkZSBzZWxlY3QsLnZtMnAtZm9ybS13aWRlIGlucHV0W3R5cGU9bnVtYmVyXXttYXgtd2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7fQogICAgICBAbWVkaWEobWF4LXdpZHRoOjYwMHB4KXsKICAgICAgICAudm0ycC1mb3JtLXdpZGUgLmZvcm0tdGFibGUgdGgsLnZtMnAtZm9ybS13aWRlIC5mb3JtLXRhYmxlIHRke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCAwO30KICAgICAgICAudm0ycC1mb3JtLXdpZGUgLmZvcm0tdGFibGUgdGh7cGFkZGluZy10b3A6MTJweDtmb250LXNpemU6Ljg1ZW07Y29sb3I6IzY0NzQ4Yjt9CiAgICAgICAgLnZtMnAtZm9ybS13aWRlIHRkW3N0eWxlKj0iZGlzcGxheTpmbGV4Il17ZmxleC13cmFwOndyYXA7fQogICAgICAgIC5uYXYtdGFiLXdyYXBwZXJ7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcDtkaXNwbGF5OmJsb2NrO30KICAgICAgfQogICAgICAudm0ycC1wcm9tby1jYXJke2JhY2tncm91bmQ6I2ZlZjNjNztib3JkZXI6MnB4IHNvbGlkICNkOTc3MDY7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7fQogICAgICAudm0ycC10YWJ3cmFwe292ZXJmbG93LXg6YXV0bzt9CiAgICAgIDwvc3R5bGU+CgogICAgICA8aDEgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbTo0cHg7Ij4KICAgICAgICDwn5OKIFByb21vcyAmYW1wOyBCYW5uZXIKICAgICAgPC9oMT4KCiAgICAgIDw/cGhwIGlmICgkZGlzcGFyYXJfbXNnKSBlY2hvICRkaXNwYXJhcl9tc2c7ID8+CgogICAgICA8IS0tIFRhYnMgbmF2IC0tPgogICAgICA8bmF2IGNsYXNzPSJuYXYtdGFiLXdyYXBwZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjIwcHg7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcDtkaXNwbGF5OmJsb2NrOyI+CiAgICAgICAgPD9waHAKICAgICAgICAkdGFicyA9IFsnZGFzaGJvYXJkJz0+J/Cfk4ogRGFzaGJvYXJkJywnZGlzcGFyYXInPT4n8J+agCBEaXNwYXJhciBQcm9tbycsJ2hpc3Rvcmljbyc9Pifwn5OLIEhpc3TDs3JpY28gV0EnLCdiYW5uZXInPT4n4pqZ77iPIENvbmZpZyBCYW5uZXInXTsKICAgICAgICBmb3JlYWNoICgkdGFicyBhcyAkdD0+JGxhYmVsKToKICAgICAgICAgICAgJGNscyA9ICR0YWI9PT0kdCA/ICduYXYtdGFiLWFjdGl2ZScgOiAnJzsKICAgICAgICA/PgogICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkYmFzZV91cmwuJyZ0YWI9Jy4kdCk7ID8+IiBjbGFzcz0ibmF2LXRhYiA8P3BocCBlY2hvICRjbHM7ID8+Ij48P3BocCBlY2hvICRsYWJlbDsgPz48L2E+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgPC9uYXY+CgogICAgICA8P3BocCBpZiAoJHRhYiA9PT0gJ2Rhc2hib2FyZCcpOiA/PgogICAgICA8IS0tIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCBUQUI6IERBU0hCT0FSRCDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+CgogICAgICA8IS0tIEZpbHRyb3MgLS0+CiAgICAgIDxmb3JtIG1ldGhvZD0iZ2V0IiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4O21hcmdpbi1ib3R0b206MTZweDthbGlnbi1pdGVtczpjZW50ZXI7Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYWdlIiB2YWx1ZT0idm0yLXByb21vcyI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idGFiIiB2YWx1ZT0iZGFzaGJvYXJkIj4KICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDsiPlBlcsOtb2RvOgogICAgICAgICAgPHNlbGVjdCBuYW1lPSJwZXJpb2QiIG9uY2hhbmdlPSJ0aGlzLmZvcm0uc3VibWl0KCkiPgogICAgICAgICAgICA8P3BocCBmb3JlYWNoKFsnN2QnPT4nNyBkaWFzJywnMzBkJz0+JzMwIGRpYXMnLCc5MGQnPT4nOTAgZGlhcycsJ2FsbCc9PidUdWRvJ10gYXMgJHY9PiRsKTogPz4KICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPD9waHAgZWNobyAkdjsgPz4iIDw/cGhwIHNlbGVjdGVkKCRwZXJpb2QsJHYpOyA/Pj48P3BocCBlY2hvICRsOyA/Pjwvb3B0aW9uPgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgPC9sYWJlbD4KICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDsiPlRpcG86CiAgICAgICAgICA8c2VsZWN0IG5hbWU9InRpcG8iIG9uY2hhbmdlPSJ0aGlzLmZvcm0uc3VibWl0KCkiPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhbGwiIDw/cGhwIHNlbGVjdGVkKCR0aXBvLCdhbGwnKTsgPz4+VG9kb3M8L29wdGlvbj4KICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibWVnYSIgPD9waHAgc2VsZWN0ZWQoJHRpcG8sJ21lZ2EnKTsgPz4+TWVnYSBQcm9tbzwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJtaW5pIiA8P3BocCBzZWxlY3RlZCgkdGlwbywnbWluaScpOyA/Pj5NaW5pIFByb21vPC9vcHRpb24+CiAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICA8L2xhYmVsPgogICAgICA8L2Zvcm0+CgogICAgICA8IS0tIFByb21vcyBhdGl2YXMg4oCUIHYxLjUuMTUgbXVsdGktcHJvbW8gLS0+CiAgICAgIDw/cGhwIGlmICghZW1wdHkoJHByb21vc19hdGl2YXMpKTogPz4KICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxOHB4OyI+CiAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOi44NWVtO2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojOTI0MDBlO21hcmdpbi1ib3R0b206OHB4OyI+8J+UpSA8P3BocCBlY2hvIGNvdW50KCRwcm9tb3NfYXRpdmFzKTsgPz4gUFJPTU8oUykgQVRJVkEoUykgTk8gQ0FSUk9TU0VMPC9kaXY+CiAgICAgICAgPD9waHAgZm9yZWFjaCAoJHByb21vc19hdGl2YXMgYXMgJHBhKTogPz4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZWYzYzc7Ym9yZGVyOjJweCBzb2xpZCAjZDk3NzA2O2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEycHggMTZweDttYXJnaW4tYm90dG9tOjhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4OyI+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7ZmxleC13cmFwOndyYXA7Ij4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTouOTVlbTtmb250LXdlaWdodDo3MDA7Y29sb3I6Izc4MzUwZjsiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHBhLT5wcm9kdWN0X25hbWUgPz8gJycpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2Q5NzcwNjtjb2xvcjojZmZmO3BhZGRpbmc6MnB4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6Ljg1ZW07Ij48P3BocCBlY2hvIGVzY19odG1sKCRwYS0+ZGlzY291bnRfcGVyY2VudCA/PyAnJyk7ID8+JSBPRkY8L3NwYW4+CiAgICAgICAgICAgIDw/cGhwIGlmICghZW1wdHkoJHBhLT5jb3Vwb25fY29kZSkpOiA/PgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlO2JhY2tncm91bmQ6IzFlMjkzYjtjb2xvcjojZmJiZjI0O3BhZGRpbmc6MnB4IDEwcHg7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOi44NWVtOyI+PD9waHAgZWNobyBlc2NfaHRtbCgkcGEtPmNvdXBvbl9jb2RlKTsgPz48L3NwYW4+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8P3BocCBpZiAoIWVtcHR5KCRwYS0+ZXhwaXJlc19hdCkpOiA/PgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzkyNDAwZTtmb250LXNpemU6LjgyZW07Ij7ij7AgPD9waHAgZWNobyBlc2NfaHRtbCgkcGEtPmV4cGlyZXNfYXQpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlmKGNvbmZpcm0oJ0VuY2VycmFyIGVzdGEgcHJvbW8/Jykpdm0yRW5kUHJvbW8oPD9waHAgZWNobyBpbnR2YWwoJHBhLT5pZCk7ID8+KTsgcmV0dXJuIGZhbHNlOyIKICAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiNkYzI2MjY7Y29sb3I6I2ZmZjtwYWRkaW5nOjVweCAxNHB4O2JvcmRlci1yYWRpdXM6OHB4O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6LjgyZW07d2hpdGUtc3BhY2U6bm93cmFwOyI+CiAgICAgICAgICAgIOKPue+4jyBFbmNlcnJhcgogICAgICAgICAgPC9hPgogICAgICAgIDwvZGl2PgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRiYXNlX3VybC4nJnRhYj1kaXNwYXJhcicpOyA/PiIgc3R5bGU9ImZvbnQtc2l6ZTouODVlbTtjb2xvcjojN2MzYWVkO2ZvbnQtd2VpZ2h0OjYwMDsiPisgQWRpY2lvbmFyIG1haXMgdW1hIHByb21vIGFvIGNhcnJvc3NlbCDihpI8L2E+CiAgICAgIDwvZGl2PgogICAgICA8P3BocCBlbHNlOiA/PgogICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmMGZkZjQ7Ym9yZGVyOjFweCBzb2xpZCAjODZlZmFjO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTBweCAxNnB4O21hcmdpbi1ib3R0b206MThweDtjb2xvcjojMTY2NTM0OyI+CiAgICAgICAg4pyFIE5lbmh1bWEgcHJvbW8gYXRpdmEgbm8gbW9tZW50by4gPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRiYXNlX3VybC4nJnRhYj1kaXNwYXJhcicpOyA/PiIgc3R5bGU9ImNvbG9yOiMxNTgwM2Q7Zm9udC13ZWlnaHQ6NjAwOyI+8J+agCBEaXNwYXJhciBub3ZhIHByb21vIOKGkjwvYT4KICAgICAgPC9kaXY+CiAgICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgICAgPCEtLSBLUEkgQ2FyZHMgLS0+CiAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxNDBweCwxZnIpKTtnYXA6MTRweDttYXJnaW4tYm90dG9tOjI0cHg7Ij4KICAgICAgICA8P3BocAogICAgICAgICRjYXJkcyA9IFsKICAgICAgICAgIFsndmFsJz0+JHRvdGFsX2VudmlvcywnbGFiZWwnPT4nVG90YWwgRW52aW9zJywnaWNvbic9Pifwn5OkJywnZmlsdGVyJz0+JycsJ2NvbG9yJz0+JyM2MzY2ZjEnXSwKICAgICAgICAgIFsndmFsJz0+JHRvdGFsX21lZ2EsJ2xhYmVsJz0+J01lZ2EgUHJvbW8nLCdpY29uJz0+J/CflKUnLCdmaWx0ZXInPT4nbWVnYScsJ2NvbG9yJz0+JyNkOTc3MDYnXSwKICAgICAgICAgIFsndmFsJz0+JHRvdGFsX21pbmksJ2xhYmVsJz0+J01pbmkgUHJvbW8nLCdpY29uJz0+J+KaoScsJ2ZpbHRlcic9PidtaW5pJywnY29sb3InPT4nIzE2YTM0YSddLAogICAgICAgICAgWyd2YWwnPT4kdG90YWxfY2xpY2tzLCdsYWJlbCc9PidDbGlxdWVzJywnaWNvbic9Pifwn5GGJywnZmlsdGVyJz0+JycsJ2NvbG9yJz0+JyMwODkxYjInXSwKICAgICAgICAgIFsndmFsJz0+JGN0cl9tZWRpby4nJScsJ2xhYmVsJz0+J0NUUiBNw6lkaW8nLCdpY29uJz0+J/Cfk4gnLCdmaWx0ZXInPT4nJywnY29sb3InPT4nIzdjM2FlZCddLAogICAgICAgICAgWyd2YWwnPT4kc2VtX2NsaWNrcywnbGFiZWwnPT4nU2VtIENsaXF1ZXMnLCdpY29uJz0+J/CfmLQnLCdmaWx0ZXInPT4nc2VtX2NsaWNrcycsJ2NvbG9yJz0+JyNkYzI2MjYnXSwKICAgICAgICBdOwogICAgICAgIGZvcmVhY2ggKCRjYXJkcyBhcyAkYyk6CiAgICAgICAgICAkaHJlZiA9ICRjWydmaWx0ZXInXSA/IGVzY191cmwoJGJhc2VfdXJsLicmdGFiPWRhc2hib2FyZCZwZXJpb2Q9Jy4kcGVyaW9kLicmdGlwbz0nLiRjWydmaWx0ZXInXSkgOiAnIyc7CiAgICAgICAgICAkY3Vyc29yID0gJGNbJ2ZpbHRlciddID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnOwogICAgICAgID8+CiAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyAkaHJlZjsgPz4iIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE2cHggMTJweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6PD9waHAgZWNobyAkY3Vyc29yOyA/Pjt0cmFuc2l0aW9uOmJveC1zaGFkb3cgLjJzOyIgb25tb3VzZW92ZXI9InRoaXMuc3R5bGUuYm94U2hhZG93PScwIDRweCAxNnB4IHJnYmEoMCwwLDAsLjEzKSciIG9ubW91c2VvdXQ9InRoaXMuc3R5bGUuYm94U2hhZG93PScnIj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxLjZlbTsiPjw/cGhwIGVjaG8gJGNbJ2ljb24nXTsgPz48L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxLjZlbTtmb250LXdlaWdodDo4MDA7Y29sb3I6PD9waHAgZWNobyAkY1snY29sb3InXTsgPz47Ij48P3BocCBlY2hvICRjWyd2YWwnXTsgPz48L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTouNzVlbTtjb2xvcjojNjQ3NDhiO21hcmdpbi10b3A6MnB4OyI+PD9waHAgZWNobyAkY1snbGFiZWwnXTsgPz48L2Rpdj4KICAgICAgICA8L2E+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgPC9kaXY+CgogICAgICA8P3BocCBpZiAoJG1lbGhvcl9wcm9kKTogPz4KICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCM3YzNhZWQsIzYzNjZmMSk7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMnB4IDIwcHg7bWFyZ2luLWJvdHRvbToyMHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7Ij4KICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEuOGVtOyI+8J+Phjwvc3Bhbj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZTouOWVtO29wYWNpdHk6Ljg1OyI+TUVMSE9SIFBST0RVVE8gTk8gUEVSw41PRE88L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxLjFlbTtmb250LXdlaWdodDo4MDA7Ij48P3BocCBlY2hvIGVzY19odG1sKCRtZWxob3JfcHJvZC0+cHJvZHVjdF9uYW1lID8/ICcnKTsgPz48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvO3RleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MS42ZW07Zm9udC13ZWlnaHQ6ODAwOyI+PD9waHAgZWNobyBpbnR2YWwoJG1lbGhvcl9wcm9kLT50Yyk7ID8+PC9kaXY+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6Ljc1ZW07b3BhY2l0eTouODsiPmNsaXF1ZXM8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgICAgPCEtLSBUb3AgcHJvZHV0b3MgLS0+CiAgICAgIDw/cGhwCiAgICAgICR0b3BfcHJvZHMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAiU0VMRUNUIHByb2R1Y3RfbmFtZSwgcHJvZHVjdF9pZCwgQ09VTlQoKikgYXMgZW52aW9zLCBDT0FMRVNDRShTVU0oY2xpY2tzKSwwKSBhcyBjbGlxdWVzLAogICAgICAgICAgICAgICAgICBST1VORChTVU0oY2xpY2tzKS9OVUxMSUYoQ09VTlQoKiksMCkqMTAwLDEpIGFzIGN0ciwKICAgICAgICAgICAgICAgICAgTUFYKHNlbnRfYXQpIGFzIHVsdGltbwogICAgICAgICAgIEZST00geyR0YmxfbG9nfSBXSEVSRSBzZW50X2F0Pj0lc3skd2hlcmVfdGlwb30KICAgICAgICAgICBHUk9VUCBCWSBwcm9kdWN0X2lkIE9SREVSIEJZIGNsaXF1ZXMgREVTQyBMSU1JVCAyMCIsICRkYXRlX2Zyb20pKTsKICAgICAgPz4KICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7b3ZlcmZsb3c6aGlkZGVuOyI+CiAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzoxNHB4IDE4cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YxZjVmOTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyOyI+CiAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MWVtOyI+8J+TpiBUb3AgUHJvZHV0b3MgcG9yIENsaXF1ZXM8L3N0cm9uZz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OmF1dG87Ij4KICAgICAgICA8dGFibGUgY2xhc3M9IndwLWxpc3QtdGFibGUgd2lkZWZhdCBmaXhlZCBzdHJpcGVkIiBzdHlsZT0ibWluLXdpZHRoOjUwMHB4OyI+CiAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0idm0yU29ydFRhYmxlKHRoaXMsMCkiPiMg4oaVPC90aD4KICAgICAgICAgICAgICA8dGggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0idm0yU29ydFRhYmxlKHRoaXMsMSkiPlByb2R1dG8g4oaVPC90aD4KICAgICAgICAgICAgICA8dGggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0idm0yU29ydFRhYmxlKHRoaXMsMikiPkVudmlvcyDihpU8L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJ2bTJTb3J0VGFibGUodGhpcywzKSI+Q2xpcXVlcyDihpU8L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJ2bTJTb3J0VGFibGUodGhpcyw0KSI+Q1RSIFdBIOKGlTwvdGg+CiAgICAgICAgICAgICAgPHRoPsOabHRpbW8gRW52aW88L3RoPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgPC90aGVhZD4KICAgICAgICAgIDx0Ym9keSBpZD0icHJvbW9zLXRvcC10Ym9keSI+CiAgICAgICAgICA8P3BocCBmb3JlYWNoICgkdG9wX3Byb2RzIGFzICRpPT4kcik6ID8+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICRpKzE7ID8+PC90ZD4KICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHItPnByb2R1Y3RfbmFtZSA/PyAnJyk7ID8+PC90ZD4KICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gaW50dmFsKCRyLT5lbnZpb3MpOyA/PjwvdGQ+CiAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGludHZhbCgkci0+Y2xpcXVlcyk7ID8+PC90ZD4KICAgICAgICAgICAgPHRkPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDo3MDA7Y29sb3I6PD9waHAgZWNobyAkci0+Y3RyPj0xMD8nIzE2YTM0YSc6KCRyLT5jdHI+PTU/JyNkOTc3MDYnOicjZGMyNjI2Jyk7ID8+Ij48P3BocCBlY2hvICRyLT5jdHI7ID8+JTwvc3Bhbj48L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZTouODVlbTtjb2xvcjojNjQ3NDhiOyI+PD9waHAgZWNobyBlc2NfaHRtbCgkci0+dWx0aW1vID8/ICcnKTsgPz48L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICA8P3BocCBpZiAoZW1wdHkoJHRvcF9wcm9kcykpOiA/PgogICAgICAgICAgPHRyPjx0ZCBjb2xzcGFuPSI2IiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoyMHB4O2NvbG9yOiM5NGEzYjg7Ij5OZW5odW0gZGFkbyBlbmNvbnRyYWRvLjwvdGQ+PC90cj4KICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDw/cGhwIGVsc2VpZiAoJHRhYiA9PT0gJ2Rpc3BhcmFyJyk6ID8+CiAgICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIFRBQjogRElTUEFSQVIgUFJPTU8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIC0tPgogICAgICA8ZGl2IGNsYXNzPSJ2bTJwLWdyaWQyIj4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjI0cHg7Ij4KICAgICAgICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDowO2ZvbnQtc2l6ZToxLjFlbTsiPvCfmoAgTm92YSBQcm9tbzwvaDI+CiAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGNsYXNzPSJ2bTJwLWZvcm0td2lkZSI+CiAgICAgICAgICAgIDw/cGhwIHdwX25vbmNlX2ZpZWxkKCd2bTJfZGlzcGFyYXJfbm9uY2UnKTsgPz4KICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJmb3JtLXRhYmxlIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTowOyI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9InZtMl9wcm9kIj5Qcm9kdXRvICo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0icHJvZHVjdF9pZCIgaWQ9InZtMl9wcm9kIiBzdHlsZT0id2lkdGg6MTAwJTttYXgtd2lkdGg6NDAwcHg7Ym94LXNpemluZzpib3JkZXItYm94OyIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj7igJQgU2VsZWNpb25lIOKAlDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2goJHByb2R1dG9zIGFzICRwKTogPz4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvICRwLT5JRDsgPz4iPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHAtPnBvc3RfdGl0bGUpOyA/Pjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJ2bTJfZGVzYyI+RGVzY29udG8gKCUpICo8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9ImRpc2NvdW50X3BlcmNlbnQiIGlkPSJ2bTJfZGVzYyIgbWluPSIxIiBtYXg9Ijk5IiBzdHlsZT0id2lkdGg6MTAwcHg7IiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM2NDc0OGI7Zm9udC1zaXplOi44NWVtO21hcmdpbi1sZWZ0OjhweDsiPiUgZGUgZGVzY29udG88L3NwYW4+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9InZtMl9kdXIiPkR1cmHDp8OjbyAoaG9yYXMpPC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJkdXJhY2FvX2hvcmFzIiBpZD0idm0yX2R1ciIgbWluPSIxIiBtYXg9IjcyIiB2YWx1ZT0iMyIgc3R5bGU9IndpZHRoOjgwcHg7Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM2NDc0OGI7Zm9udC1zaXplOi44NWVtO21hcmdpbi1sZWZ0OjhweDsiPmhvcmFzIGF0w6kgZXhwaXJhcjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+VGlwbzwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0ibWFyZ2luLXJpZ2h0OjIwcHg7Y3Vyc29yOnBvaW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImlzX21lZ2FfcHJvbW8iIHZhbHVlPSIxIj4KICAgICAgICAgICAgICAgICAgICDwn5SlIE1lZ2EgUHJvbW8gKGRlc3RhcXVlIGVzcGVjaWFsKQogICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5FbnZpYXIgV0E8L3RoPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImN1cnNvcjpwb2ludGVyOyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzZW5kX3doYXRzYXBwIiB2YWx1ZT0iMSI+CiAgICAgICAgICAgICAgICAgICAg8J+TsSBEaXNwYXJhciBtZW5zYWdlbSBXaGF0c0FwcCBhbyBjcmlhcgogICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjIwcHg7Ij4KICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0idm0yX2Rpc3BhcmFyIiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5IiBzdHlsZT0iYmFja2dyb3VuZDojN2MzYWVkO2JvcmRlci1jb2xvcjojNmQyOGQ5O2ZvbnQtc2l6ZTouOTVlbTtwYWRkaW5nOjZweCAyMHB4OyI+CiAgICAgICAgICAgICAgICDwn5qAIERpc3BhcmFyIFByb21vCiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9mb3JtPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2PgogICAgICAgICAgPCEtLSBQcm9tb3MgYXRpdmFzIOKAlCB2MS41LjE1IC0tPgogICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyMHB4O21hcmdpbi1ib3R0b206MTZweDsiPgogICAgICAgICAgICA8aDMgc3R5bGU9Im1hcmdpbi10b3A6MDtmb250LXNpemU6Ljk1ZW07Y29sb3I6IzY0NzQ4YjsiPlBST01PUyBBVElWQVMgTk8gQ0FSUk9TU0VMICg8P3BocCBlY2hvIGNvdW50KCRwcm9tb3NfYXRpdmFzKTsgPz4pPC9oMz4KICAgICAgICAgICAgPD9waHAgaWYgKCFlbXB0eSgkcHJvbW9zX2F0aXZhcykpOiA/PgogICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkcHJvbW9zX2F0aXZhcyBhcyAkcGEpOiA/PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHg7cGFkZGluZzo4cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjFmNWY5OyI+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDo3MDA7Y29sb3I6IzkyNDAwZTsiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHBhLT5wcm9kdWN0X25hbWUgPz8gJycpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNkOTc3MDY7Y29sb3I6I2ZmZjtwYWRkaW5nOjJweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOi44ZW07bWFyZ2luLWxlZnQ6NnB4OyI+PD9waHAgZWNobyBlc2NfaHRtbCgkcGEtPmRpc2NvdW50X3BlcmNlbnQgPz8gJycpOyA/PiUgT0ZGPC9zcGFuPgogICAgICAgICAgICAgICAgPD9waHAgaWYgKCFlbXB0eSgkcGEtPmNvdXBvbl9jb2RlKSk6ID8+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZTtiYWNrZ3JvdW5kOiMxZTI5M2I7Y29sb3I6I2ZiYmYyNDtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOi43OGVtO21hcmdpbi1sZWZ0OjRweDsiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHBhLT5jb3Vwb25fY29kZSk7ID8+PC9zcGFuPjw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImlmKGNvbmZpcm0oJ0VuY2VycmFyPycpKXZtMkVuZFByb21vKDw/cGhwIGVjaG8gaW50dmFsKCRwYS0+aWQpOyA/Pik7IHJldHVybiBmYWxzZTsiCiAgICAgICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6I2RjMjYyNjtjb2xvcjojZmZmO3BhZGRpbmc6NHB4IDEycHg7Ym9yZGVyLXJhZGl1czo2cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOi44ZW07Zm9udC13ZWlnaHQ6NjAwOyI+4o+577iPPC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZTouODJlbTtjb2xvcjojNjQ3NDhiOyI+8J+SoSBEaXNwYXJhciBub3ZhIHByb21vIGFiYWl4byDigJQgbsOjbyBlbmNlcnJhIGFzIGFudGVyaW9yZXMuPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiM5NGEzYjg7Zm9udC1zaXplOi45ZW07Ij5OZW5odW1hIHByb21vIGF0aXZhLiBVc2UgbyBmb3JtdWzDoXJpbyBhYmFpeG8gcGFyYSBkaXNwYXJhciBhIHByaW1laXJhLjwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDwhLS0gw5psdGltYXMgcHJvbW9zIC0tPgogICAgICAgICAgPD9waHAgJHVsdGltYXMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCBwcm9kdWN0X25hbWUsZGlzY291bnRfcGVyY2VudCxpc19tZWdhX3Byb21vLGNsaWNrcyxzZW50X2F0IEZST00geyR0YmxfbG9nfSBPUkRFUiBCWSBzZW50X2F0IERFU0MgTElNSVQgOCIpOyA/PgogICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxNnB4OyI+CiAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luLXRvcDowO2ZvbnQtc2l6ZTouOWVtO2NvbG9yOiM2NDc0OGI7Ij7DmkxUSU1BUyA4IFBST01PUyBESVNQQVJBREFTPC9oMz4KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCgkdWx0aW1hcyBhcyAkdSk6ID8+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzo2cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjFmNWY5O2ZvbnQtc2l6ZTouODVlbTsiPgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8P3BocCBpZigkdS0+aXNfbWVnYV9wcm9tbyk6ID8+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2ZlZjNjNztjb2xvcjojOTI0MDBlO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MXB4IDZweDtmb250LXNpemU6LjhlbTttYXJnaW4tcmlnaHQ6NHB4OyI+TUVHQTwvc3Bhbj48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gZXNjX2h0bWwoc3Vic3RyKCR1LT5wcm9kdWN0X25hbWUgPz8gJycsIDAsIDMwKSk7ID8+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyOyI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzdjM2FlZDtmb250LXdlaWdodDo3MDA7Ij48P3BocCBlY2hvICR1LT5kaXNjb3VudF9wZXJjZW50OyA/PiU8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzY0NzQ4YjsiPvCfkYYgPD9waHAgZWNobyAkdS0+Y2xpY2tzOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8P3BocCBlbHNlaWYgKCR0YWIgPT09ICdoaXN0b3JpY28nKTogPz4KICAgICAgPCEtLSDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgVEFCOiBISVNUw5NSSUNPIFdBIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAtLT4KICAgICAgPD9waHAKICAgICAgJHBnICAgPSBtYXgoMSwgaW50dmFsKCRfR0VUWydwYWdlZCddID8/IDEpKTsKICAgICAgJHBlciAgPSA1MDsKICAgICAgJG9mZiAgPSAoJHBnLTEpKiRwZXI7CiAgICAgICRoaXN0X3RpcG8gPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWydodGlwbyddID8/ICdhbGwnKTsKICAgICAgJGhfd2hlcmUgPSAnJzsKICAgICAgaWYgKCRoaXN0X3RpcG89PT0nbWVnYScpICRoX3doZXJlID0gJyBXSEVSRSBpc19tZWdhX3Byb21vPTEnOwogICAgICBlbHNlaWYgKCRoaXN0X3RpcG89PT0nbWluaScpICRoX3doZXJlID0gJyBXSEVSRSBpc19tZWdhX3Byb21vPTAnOwogICAgICAkaGlzdF90b3RhbCA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskdGJsX2xvZ317JGhfd2hlcmV9Iik7CiAgICAgICRoaXN0ID0gJHdwZGItPmdldF9yZXN1bHRzKCR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIHskdGJsX2xvZ317JGhfd2hlcmV9IE9SREVSIEJZIHNlbnRfYXQgREVTQyBMSU1JVCAlZCBPRkZTRVQgJWQiLCAkcGVyLCAkb2ZmKSk7CiAgICAgICRwYWdlcyA9IGNlaWwoJGhpc3RfdG90YWwvJHBlcik7CiAgICAgID8+CiAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNHB4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4OyI+CiAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOi45ZW07Y29sb3I6IzY0NzQ4YjsiPjw/cGhwIGVjaG8gJGhpc3RfdG90YWw7ID8+IGRpc3Bhcm9zIG5vIGhpc3TDs3JpY288L2Rpdj4KICAgICAgICA8Zm9ybSBtZXRob2Q9ImdldCIgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjsiPgogICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGFnZSIgdmFsdWU9InZtMi1wcm9tb3MiPgogICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idGFiIiB2YWx1ZT0iaGlzdG9yaWNvIj4KICAgICAgICAgIDxzZWxlY3QgbmFtZT0iaHRpcG8iIG9uY2hhbmdlPSJ0aGlzLmZvcm0uc3VibWl0KCkiPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhbGwiIDw/cGhwIHNlbGVjdGVkKCRoaXN0X3RpcG8sJ2FsbCcpOyA/Pj5Ub2Rvczwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJtZWdhIiA8P3BocCBzZWxlY3RlZCgkaGlzdF90aXBvLCdtZWdhJyk7ID8+Pk1lZ2E8L29wdGlvbj4KICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibWluaSIgPD9waHAgc2VsZWN0ZWQoJGhpc3RfdGlwbywnbWluaScpOyA/Pj5NaW5pPC9vcHRpb24+CiAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Ij4KICAgICAgICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OmF1dG87Ij4KICAgICAgICA8dGFibGUgY2xhc3M9IndwLWxpc3QtdGFibGUgd2lkZWZhdCBmaXhlZCBzdHJpcGVkIiBzdHlsZT0ibWluLXdpZHRoOjY1MHB4OyI+CiAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0idm0yU29ydFRhYmxlKHRoaXMsMCkiPkRhdGEg4oaVPC90aD4KICAgICAgICAgICAgICA8dGggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0idm0yU29ydFRhYmxlKHRoaXMsMSkiPlByb2R1dG8g4oaVPC90aD4KICAgICAgICAgICAgICA8dGggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0idm0yU29ydFRhYmxlKHRoaXMsMikiPkRlc2NvbnRvIOKGlTwvdGg+CiAgICAgICAgICAgICAgPHRoPlRpcG88L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJ2bTJTb3J0VGFibGUodGhpcyw0KSI+UHJlw6dvIE9yaWcg4oaVPC90aD4KICAgICAgICAgICAgICA8dGggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0idm0yU29ydFRhYmxlKHRoaXMsNSkiPlByZcOnbyBjLyBEZXNjIOKGlTwvdGg+CiAgICAgICAgICAgICAgPHRoIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiIG9uY2xpY2s9InZtMlNvcnRUYWJsZSh0aGlzLDYpIj5DbGlxdWVzIOKGlTwvdGg+CiAgICAgICAgICAgICAgPHRoPkN1cG9tPC90aD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICA8dGJvZHkgaWQ9Imhpc3Rvcmljby10Ym9keSI+CiAgICAgICAgICA8P3BocCBmb3JlYWNoKCRoaXN0IGFzICRyKTogPz4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIHN0eWxlPSJmb250LXNpemU6LjgyZW07Y29sb3I6IzY0NzQ4YjsiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHItPnNlbnRfYXQpOyA/PjwvdGQ+CiAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGVzY19odG1sKCRyLT5wcm9kdWN0X25hbWUgPz8gJycpOyA/PjwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwO2NvbG9yOiM3YzNhZWQ7Ij48P3BocCBlY2hvICRyLT5kaXNjb3VudF9wZXJjZW50OyA/PiU8L3RkPgogICAgICAgICAgICA8dGQ+PD9waHAgZWNobyAkci0+aXNfbWVnYV9wcm9tbyA/ICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZmVmM2M3O2NvbG9yOiM5MjQwMGU7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZTouOGVtOyI+8J+UpSBNRUdBPC9zcGFuPicgOiAnPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2YxZjVmOTtjb2xvcjojNjQ3NDhiO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MnB4IDhweDtmb250LXNpemU6LjhlbTsiPuKaoSBNaW5pPC9zcGFuPic7ID8+PC90ZD4KICAgICAgICAgICAgPHRkPlIkIDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkci0+b3JpZ2luYWxfcHJpY2UgPz8gMCwgMiwgJywnLCAnLicpOyA/PjwvdGQ+CiAgICAgICAgICAgIDx0ZD5SJCA8P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJHItPmRpc2NvdW50ZWRfcHJpY2UgPz8gMCwgMiwgJywnLCAnLicpOyA/PjwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwO2NvbG9yOjw/cGhwIGVjaG8gJHItPmNsaWNrcz4wPycjMTZhMzRhJzonI2RjMjYyNic7ID8+Ij48P3BocCBlY2hvIGludHZhbCgkci0+Y2xpY2tzKTsgPz48L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6LjhlbTtjb2xvcjojNjQ3NDhiOyI+PD9waHAgZWNobyBlc2NfaHRtbCgkci0+Y291cG9uX2NvZGUgPz8gJy0nKTsgPz48L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICA8P3BocCBpZihlbXB0eSgkaGlzdCkpOiA/PgogICAgICAgICAgPHRyPjx0ZCBjb2xzcGFuPSI4IiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoyMHB4O2NvbG9yOiM5NGEzYjg7Ij5OZW5odW0gaGlzdMOzcmljbyBlbmNvbnRyYWRvLjwvdGQ+PC90cj4KICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPD9waHAgaWYgKCRwYWdlcyA+IDEpOiA/PgogICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjE2cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7Ij4KICAgICAgICA8P3BocCBmb3IgKCRwPTE7JHA8PSRwYWdlczskcCsrKTogPz4KICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLXByb21vcycsJ3RhYic9PidoaXN0b3JpY28nLCdwYWdlZCc9PiRwLCdodGlwbyc9PiRoaXN0X3RpcG9dLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKSk7ID8+IgogICAgICAgICAgIHN0eWxlPSJwYWRkaW5nOjRweCAxMnB4O2JhY2tncm91bmQ6PD9waHAgZWNobyAkcD09PSRwZz8nIzdjM2FlZCc6JyNlNWU3ZWInOyA/Pjtjb2xvcjo8P3BocCBlY2hvICRwPT09JHBnPycjZmZmJzonIzMzNDE1NSc7ID8+O2JvcmRlci1yYWRpdXM6NnB4O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZTouODVlbTsiPgogICAgICAgICAgPD9waHAgZWNobyAkcDsgPz4KICAgICAgICA8L2E+CiAgICAgICAgPD9waHAgZW5kZm9yOyA/PgogICAgICA8L2Rpdj4KICAgICAgPD9waHAgZW5kaWY7ID8+CgogICAgICA8P3BocCBlbHNlaWYgKCR0YWIgPT09ICdiYW5uZXInKTogPz4KICAgICAgPCEtLSDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgVEFCOiBDT05GSUcgQkFOTkVSIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAtLT4KICAgICAgPGRpdiBjbGFzcz0idm0ycC1ncmlkMi1lcSI+CiAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyNHB4OyI+CiAgICAgICAgICA8aDIgc3R5bGU9Im1hcmdpbi10b3A6MDtmb250LXNpemU6MS4xZW07Ij7wn4+377iPIENvbmZpZ3VyYcOnw7VlcyBkbyBCYW5uZXI8L2gyPgogICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBjbGFzcz0idm0ycC1mb3JtLXdpZGUiPgogICAgICAgICAgICA8P3BocCB3cF9ub25jZV9maWVsZCgndm0yX2Jhbm5lcl9ub25jZScpOyA/PgogICAgICAgICAgICA8dGFibGUgY2xhc3M9ImZvcm0tdGFibGUiPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD48bGFiZWw+U3RhdHVzPC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImN1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDsiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm1fYmFubmVyX2VuYWJsZWQiIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKGdldF9vcHRpb24oJ3ZtX2Jhbm5lcl9lbmFibGVkJywnMScpLCcxJyk7ID8+PgogICAgICAgICAgICAgICAgICAgIDxzcGFuPkJhbm5lciBoYWJpbGl0YWRvIG5vIHNpdGU8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9ImJhbm5lcl9wb3MiPlBvc2nDp8OjbzwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bV9iYW5uZXJfcG9zaXRpb24iIGlkPSJiYW5uZXJfcG9zIj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ0b3AiIDw/cGhwIHNlbGVjdGVkKGdldF9vcHRpb24oJ3ZtX2Jhbm5lcl9wb3NpdGlvbicsJ3RvcCcpLCd0b3AnKTsgPz4+VG9wbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImJvdHRvbSIgPD9waHAgc2VsZWN0ZWQoZ2V0X29wdGlvbigndm1fYmFubmVyX3Bvc2l0aW9uJywndG9wJyksJ2JvdHRvbScpOyA/Pj5Sb2RhcMOpPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD48bGFiZWw+SG9yw6FyaW8gZGUgRXhpYmnDp8OjbzwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDsiPgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGltZSIgbmFtZT0idm1fYmFubmVyX2hvcmFfaW5pY2lvIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cihnZXRfb3B0aW9uKCd2bV9iYW5uZXJfaG9yYV9pbmljaW8nLCcwODowMCcpKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDBweDsiPgogICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzY0NzQ4YjsiPmF0w6k8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0aW1lIiBuYW1lPSJ2bV9iYW5uZXJfaG9yYV9maW0iIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKGdldF9vcHRpb24oJ3ZtX2Jhbm5lcl9ob3JhX2ZpbScsJzIyOjAwJykpOyA/PiIgc3R5bGU9IndpZHRoOjEwMHB4OyI+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9ImJhbm5lcl9jdGEiPlRleHRvIGRvIEJvdMOjbyBDVEE8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZtX2Jhbm5lcl9jdGFfdGV4dCIgaWQ9ImJhbm5lcl9jdGEiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKGdldF9vcHRpb24oJ3ZtX2Jhbm5lcl9jdGFfdGV4dCcsJ0NPUElBUiBDVVBPTScpKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlO21heC13aWR0aDozMDBweDsiPjwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsPkFuaW1hw6fDo288L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4OyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ2bV9iYW5uZXJfYW5pbWFjYW8iIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKGdldF9vcHRpb24oJ3ZtX2Jhbm5lcl9hbmltYWNhbycsJzEnKSwnMScpOyA/Pj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BdGl2YXIgYW5pbWHDp8OjbyBubyBiYW5uZXI8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPjxsYWJlbD5Nb3N0cmFyIEltYWdlbSBkbyBQcm9kdXRvPC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImN1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDsiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm1fYmFubmVyX21vc3RyYXJfaW1hZ2VtIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZChnZXRfb3B0aW9uKCd2bV9iYW5uZXJfbW9zdHJhcl9pbWFnZW0nLCcwJyksJzEnKTsgPz4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+RXhpYmlyIGltYWdlbSBkbyBwcm9kdXRvIG5vIGJhbm5lcjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iYmFubmVyX2Nvcl9taW5pIj5Db3IgTWluaSBQcm9tbzwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDsiPgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY29sb3IiIG5hbWU9InZtX2Jhbm5lcl9jb3JfbWluaSIgaWQ9ImJhbm5lcl9jb3JfbWluaSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoZ2V0X29wdGlvbigndm1fYmFubmVyX2Nvcl9taW5pJywnIzE2YTM0YScpKTsgPz4iPgogICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOi44NWVtO2NvbG9yOiM2NDc0OGI7Ij5Db3IgZGUgZnVuZG8gcGFyYSBtaW5pIHByb21vczwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iYmFubmVyX2Nvcl9tZWdhIj5Db3IgTWVnYSBQcm9tbzwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDsiPgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY29sb3IiIG5hbWU9InZtX2Jhbm5lcl9jb3JfbWVnYSIgaWQ9ImJhbm5lcl9jb3JfbWVnYSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoZ2V0X29wdGlvbigndm1fYmFubmVyX2Nvcl9tZWdhJywnI2I0NTMwOScpKTsgPz4iPgogICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOi44NWVtO2NvbG9yOiM2NDc0OGI7Ij5Db3IgZGUgZnVuZG8gcGFyYSBtZWdhIHByb21vczwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iYmFubmVyX3BmeF9taW5pIj5QcmVmaXhvIE1pbmk8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZtX2Jhbm5lcl9wcmVmaXhvX21pbmkiIGlkPSJiYW5uZXJfcGZ4X21pbmkiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKGdldF9vcHRpb24oJ3ZtX2Jhbm5lcl9wcmVmaXhvX21pbmknLCfimqEgT0ZFUlRBIEVYQ0xVU0lWQScpKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlO21heC13aWR0aDoyODBweDsiPjwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iYmFubmVyX3BmeF9tZWdhIj5QcmVmaXhvIE1lZ2E8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZtX2Jhbm5lcl9wcmVmaXhvX21lZ2EiIGlkPSJiYW5uZXJfcGZ4X21lZ2EiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKGdldF9vcHRpb24oJ3ZtX2Jhbm5lcl9wcmVmaXhvX21lZ2EnLCcgTUVHQSBQUk9NTycpKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlO21heC13aWR0aDoyODBweDsiPjwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luLXRvcDoyNHB4O21hcmdpbi1ib3R0b206OHB4O2ZvbnQtc2l6ZToxZW07Y29sb3I6IzMzNDE1NTsiPvCfjqAgQ2Fycm9zc2VsIE11bHRpLVByb21vPC9oMz4KICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJmb3JtLXRhYmxlIj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsPk11bHRpLVByb21vPC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImN1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDsiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm1fcHJvbW9fbXVsdGlfZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoZ2V0X29wdGlvbigndm1fcHJvbW9fbXVsdGlfZW5hYmxlZCcsJzEnKSwnMScpOyA/Pj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5FeGliaXIgY2Fycm9zc2VsIGNvbSBtw7psdGlwbGFzIHByb21vcyBhdGl2YXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+UXVhbmRvIGRlc2F0aXZhZG8sIGV4aWJlIGFwZW5hcyBhIHByb21vIG1haXMgcmVjZW50ZS48L3A+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9Im1heF9jYXJvdXNlbCI+TcOheC4gbm8gQ2Fycm9zc2VsPC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJ2bV9wcm9tb19tYXhfY2Fyb3VzZWwiIGlkPSJtYXhfY2Fyb3VzZWwiIG1pbj0iMSIgbWF4PSIyMCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoZ2V0X29wdGlvbigndm1fcHJvbW9fbWF4X2Nhcm91c2VsJywnNScpKTsgPz4iIHN0eWxlPSJ3aWR0aDo3MHB4OyI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDo2cHg7Zm9udC1zaXplOi44NWVtO2NvbG9yOiM2NDc0OGI7Ij5wcm9tb3MgZXhpYmlkYXMgc2ltdWx0w6JuZWFtZW50ZTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iY2Fyb3VzZWxfaW50Ij5JbnRlcnZhbG8gKHMpPC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJ2bV9wcm9tb19jYXJvdXNlbF9pbnRlcnZhbCIgaWQ9ImNhcm91c2VsX2ludCIgbWluPSIyIiBtYXg9IjMwIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cihnZXRfb3B0aW9uKCd2bV9wcm9tb19jYXJvdXNlbF9pbnRlcnZhbCcsJzUnKSk7ID8+IiBzdHlsZT0id2lkdGg6NzBweDsiPgogICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6NnB4O2ZvbnQtc2l6ZTouODVlbTtjb2xvcjojNjQ3NDhiOyI+c2VndW5kb3MgZW50cmUgcHJvbW9zIG5vIGNhcnJvc3NlbDwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iY2Fyb3VzZWxfb3JkIj5PcmRlbTwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bV9wcm9tb19jYXJvdXNlbF9vcmRlciIgaWQ9ImNhcm91c2VsX29yZCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGNvID0gZ2V0X29wdGlvbigndm1fcHJvbW9fY2Fyb3VzZWxfb3JkZXInLCdleHBpcmVzX2ZpcnN0Jyk7ID8+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZXhwaXJlc19maXJzdCIgPD9waHAgc2VsZWN0ZWQoJGNvLCdleHBpcmVzX2ZpcnN0Jyk7ID8+PuKPsCBFeHBpcmEgYW50ZXM8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkaXNjb3VudF9kZXNjIiA8P3BocCBzZWxlY3RlZCgkY28sJ2Rpc2NvdW50X2Rlc2MnKTsgPz4+8J+SpSBNYWlvciBkZXNjb250bzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im5ld2VzdCIgPD9waHAgc2VsZWN0ZWQoJGNvLCduZXdlc3QnKTsgPz4+8J+GlSBNYWlzIHJlY2VudGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGFibGU+CgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij4KICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0idm0yX3NhdmVfYmFubmVyIiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5Ij7wn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXM8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gUHJldmlldyBlIHN0YXR1cyAtLT4KICAgICAgICA8ZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyMHB4O21hcmdpbi1ib3R0b206MTZweDsiPgogICAgICAgICAgICA8aDMgc3R5bGU9Im1hcmdpbi10b3A6MDtmb250LXNpemU6LjllbTtjb2xvcjojNjQ3NDhiOyI+U1RBVFVTIERPIEJBTk5FUjwvaDM+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICRlbmFibGVkID0gZ2V0X29wdGlvbigndm1fYmFubmVyX2VuYWJsZWQnLCcxJykgPT09ICcxJzsKICAgICAgICAgICAgJGhpID0gZ2V0X29wdGlvbigndm1fYmFubmVyX2hvcmFfaW5pY2lvJywnMDg6MDAnKTsKICAgICAgICAgICAgJGhmID0gZ2V0X29wdGlvbigndm1fYmFubmVyX2hvcmFfZmltJywnMjI6MDAnKTsKICAgICAgICAgICAgPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEuMWVtO2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjo8P3BocCBlY2hvICRlbmFibGVkPycjMTZhMzRhJzonI2RjMjYyNic7ID8+OyI+CiAgICAgICAgICAgICAgPD9waHAgZWNobyAkZW5hYmxlZCA/ICfinIUgSGFiaWxpdGFkbycgOiAn4puUIERlc2FiaWxpdGFkbyc7ID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjhweDtmb250LXNpemU6LjllbTtjb2xvcjojNjQ3NDhiOyI+CiAgICAgICAgICAgICAg4o+wIEV4aWJpw6fDo286IDw/cGhwIGVjaG8gZXNjX2h0bWwoJGhpKTsgPz4g4oCTIDw/cGhwIGVjaG8gZXNjX2h0bWwoJGhmKTsgPz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6NnB4O2ZvbnQtc2l6ZTouOWVtO2NvbG9yOiM2NDc0OGI7Ij4KICAgICAgICAgICAgICDwn5ONIFBvc2nDp8OjbzogPD9waHAgZWNobyBnZXRfb3B0aW9uKCd2bV9iYW5uZXJfcG9zaXRpb24nLCd0b3AnKSA9PT0gJ3RvcCcgPyAnVG9wbycgOiAnUm9kYXDDqSc7ID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjhmYWZjO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxNnB4OyI+CiAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luLXRvcDowO2ZvbnQtc2l6ZTouOWVtO2NvbG9yOiM2NDc0OGI7Ij5QUk9NTyBBVElWQSBOTyBCQU5ORVI8L2gzPgogICAgICAgICAgICA8P3BocCBpZiAoJHByb21vX2F0aXZhKTogPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDo8P3BocCBlY2hvIGVzY19hdHRyKGdldF9vcHRpb24oJ3ZtX2Jhbm5lcl9jb3JfbWluaScsJyMxNmEzNGEnKSk7ID8+O2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7Zm9udC1zaXplOi45ZW07Ij4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6Ljc1ZW07bGV0dGVyLXNwYWNpbmc6MXB4O2ZvbnQtd2VpZ2h0OjYwMDsiPjw/cGhwIGVjaG8gZXNjX2h0bWwoZ2V0X29wdGlvbigndm1fYmFubmVyX3ByZWZpeG9fbWluaScsJ+KaoSBPRkVSVEEgRVhDTFVTSVZBJykpOyA/PjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxLjA1ZW07Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi10b3A6NHB4OyI+PD9waHAgZWNobyBlc2NfaHRtbCgkcHJvbW9fYXRpdmEtPnByb2R1Y3RfbmFtZSA/PyAnJyk7ID8+IOKAlCA8P3BocCBlY2hvICRwcm9tb19hdGl2YS0+ZGlzY291bnRfcGVyY2VudDsgPz4lIE9GRjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6OHB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMik7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzo0cHggMTJweDtib3JkZXItcmFkaXVzOjZweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6Ljg1ZW07Ij4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gZXNjX2h0bWwoZ2V0X29wdGlvbigndm1fYmFubmVyX2N0YV90ZXh0JywnQ09QSUFSIENVUE9NJykpOyA/PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZWxzZTogPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6Izk0YTNiODtmb250LXNpemU6LjllbTsiPk5lbmh1bWEgcHJvbW8gYXRpdmEgcGFyYSBleGliaXIgbm8gYmFubmVyLjwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPD9waHAgZW5kaWY7ID8+CgogICAgPC9kaXY+PCEtLSAvd3JhcCAtLT4KCiAgICA8c2NyaXB0PgogICAgZnVuY3Rpb24gdm0yU29ydFRhYmxlKHRoLCBjb2wpIHsKICAgICAgICB2YXIgdGJvZHkgPSB0aC5jbG9zZXN0KCd0YWJsZScpLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5Jyk7CiAgICAgICAgdmFyIHJvd3MgPSBBcnJheS5mcm9tKHRib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykpOwogICAgICAgIHZhciBhc2MgPSB0aC5kYXRhc2V0LnNvcnQgIT09ICdhc2MnOwogICAgICAgIHRoLmRhdGFzZXQuc29ydCA9IGFzYyA/ICdhc2MnIDogJ2Rlc2MnOwogICAgICAgIHJvd3Muc29ydChmdW5jdGlvbihhLGIpewogICAgICAgICAgICB2YXIgYXYgPSBhLmNlbGxzW2NvbF0gPyBhLmNlbGxzW2NvbF0uaW5uZXJUZXh0LnJlcGxhY2UoL1teMC05LiwlLV0vZywnJykgOiAnJzsKICAgICAgICAgICAgdmFyIGJ2ID0gYi5jZWxsc1tjb2xdID8gYi5jZWxsc1tjb2xdLmlubmVyVGV4dC5yZXBsYWNlKC9bXjAtOS4sJS1dL2csJycpIDogJyc7CiAgICAgICAgICAgIHZhciBhbiA9IHBhcnNlRmxvYXQoYXYucmVwbGFjZSgnLCcsJy4nKSksIGJuID0gcGFyc2VGbG9hdChidi5yZXBsYWNlKCcsJywnLicpKTsKICAgICAgICAgICAgaWYgKCFpc05hTihhbikgJiYgIWlzTmFOKGJuKSkgcmV0dXJuIGFzYyA/IGFuLWJuIDogYm4tYW47CiAgICAgICAgICAgIHJldHVybiBhc2MgPyBhdi5sb2NhbGVDb21wYXJlKGJ2KSA6IGJ2LmxvY2FsZUNvbXBhcmUoYXYpOwogICAgICAgIH0pOwogICAgICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbihyKXsgdGJvZHkuYXBwZW5kQ2hpbGQocik7IH0pOwogICAgfQogICAgZnVuY3Rpb24gdm0yRW5kUHJvbW8oaWQpIHsKICAgICAgICB2YXIgYm9keSA9IGlkID8gSlNPTi5zdHJpbmdpZnkoe2lkOmlkfSkgOiBKU09OLnN0cmluZ2lmeSh7fSk7CiAgICAgICAgZmV0Y2goJzw/cGhwIGVjaG8gZXNjX2pzKHJlc3RfdXJsKCd2bS1jcm0tdjIvdjEvcHJvbW9zL2VuZCcpKTsgPz4nLCB7CiAgICAgICAgICAgIG1ldGhvZDonUE9TVCcsIGNyZWRlbnRpYWxzOidpbmNsdWRlJywKICAgICAgICAgICAgaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nLCdYLVdQLU5vbmNlJzonPD9waHAgZWNobyB3cF9jcmVhdGVfbm9uY2UoJ3dwX3Jlc3QnKTsgPz4nfSwKICAgICAgICAgICAgYm9keTogYm9keQogICAgICAgIH0pLnRoZW4ocj0+ci5qc29uKCkpLnRoZW4oZD0+ewogICAgICAgICAgICBhbGVydChkLnN1Y2Nlc3MgPyAn4pyFIFByb21vIGVuY2VycmFkYSEnIDogJ+KdjCAnICsgKGQubWVzc2FnZXx8J0Vycm8nKSk7CiAgICAgICAgICAgIGlmKGQuc3VjY2VzcykgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgfSk7CiAgICB9CiAgICA8L3NjcmlwdD4KPD9waHAKfQoKCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBCQVJSQVMgUFJPTU9DSU9OQUlTIOKAlCBDUk0gVjIgKGNvbnRyb2xhIFZpdmFNYWlzIEh1YikKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmZ1bmN0aW9uIHZtMl9iYXJyYXNfcGFnZSgpIHsKICAgIGlmICghY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgcmV0dXJuOwoKICAgIC8vIEhhbmRsZSBzYXZlCiAgICBpZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT09ICdQT1NUJyAmJiBpc3NldCgkX1BPU1RbJ3ZtMl9iYXJyYXNfc2F2ZSddKSkgewogICAgICAgIGNoZWNrX2FkbWluX3JlZmVyZXIoJ3ZtMl9iYXJyYXNfc2F2ZScpOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtaHViX2NvdXBvbl9iYXJfZW5hYmxlZCcsIGlzc2V0KCRfUE9TVFsnY291cG9uX2Jhcl9lbmFibGVkJ10pID8gMSA6IDApOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtaHViX2NvdXBvbl9iYXJfY291cG9uJywgIHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydjb3Vwb25fYmFyX2NvdXBvbiddID8/ICdQUklNRUlSQUNPTVBSQScpKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bWh1Yl9jb3Vwb25fYmFyX3RleHQnLCAgICBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnY291cG9uX2Jhcl90ZXh0J10gPz8gJzUlIE9GRicpKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bWh1Yl92aXJhbF9iYXJfZW5hYmxlZCcsICBpc3NldCgkX1BPU1RbJ3ZpcmFsX2Jhcl9lbmFibGVkJ10pID8gMSA6IDApOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtaHViX3ZpcmFsX2Jhcl9hY3RvcicsICAgIHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWyd2aXJhbF9iYXJfYWN0b3InXSA/PyAnU2VsdG9uIE1lbG8nKSk7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm1odWJfdmlyYWxfYmFyX3RleHQnLCAgICAgc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ3ZpcmFsX2Jhcl90ZXh0J10gPz8gJ2NvbXBhcnRpbGhvdSBub3NzYSBDYXJyZXRhIG5vIFRpa1RvaycpKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bWh1Yl92aXJhbF9iYXJfbGluaycsICAgICBlc2NfdXJsX3JhdygkX1BPU1RbJ3ZpcmFsX2Jhcl9saW5rJ10gPz8gJy9jYXJyZXRhLXZpcmFsLycpKTsKICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MiPjxwPuKchSBCYXJyYXMgUHJvbW9jaW9uYWlzIHNhbHZhcyE8L3A+PC9kaXY+JzsKICAgIH0KCiAgICAvLyBSZWFkIGN1cnJlbnQgdmFsdWVzCiAgICAkY2Jfb24gICAgID0gZ2V0X29wdGlvbigndm1odWJfY291cG9uX2Jhcl9lbmFibGVkJywgMSk7CiAgICAkY2JfY291cG9uID0gZ2V0X29wdGlvbigndm1odWJfY291cG9uX2Jhcl9jb3Vwb24nLCAnUFJJTUVJUkFDT01QUkEnKTsKICAgICRjYl90ZXh0ICAgPSBnZXRfb3B0aW9uKCd2bWh1Yl9jb3Vwb25fYmFyX3RleHQnLCAnNSUgT0ZGJyk7CiAgICAkdmJfb24gICAgID0gZ2V0X29wdGlvbigndm1odWJfdmlyYWxfYmFyX2VuYWJsZWQnLCAxKTsKICAgICR2Yl9hY3RvciAgPSBnZXRfb3B0aW9uKCd2bWh1Yl92aXJhbF9iYXJfYWN0b3InLCAnU2VsdG9uIE1lbG8nKTsKICAgICR2Yl90ZXh0ICAgPSBnZXRfb3B0aW9uKCd2bWh1Yl92aXJhbF9iYXJfdGV4dCcsICdjb21wYXJ0aWxob3Ugbm9zc2EgQ2FycmV0YSBubyBUaWtUb2snKTsKICAgICR2Yl9saW5rICAgPSBnZXRfb3B0aW9uKCd2bWh1Yl92aXJhbF9iYXJfbGluaycsIGhvbWVfdXJsKCcvY2FycmV0YS12aXJhbC8nKSk7CgogICAgPz4KICAgIDxkaXYgY2xhc3M9IndyYXAiPgogICAgPGgxIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4Ij7wn5OjIEJhcnJhcyBQcm9tb2Npb25haXMKICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7YmFja2dyb3VuZDojZTBmMmZlO2NvbG9yOiMwMzY5YTE7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDAiPlZpdmFNYWlzIEh1Yjwvc3Bhbj4KICAgIDwvaDE+CiAgICA8cCBzdHlsZT0iY29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOi02cHgiPkNvbnRyb2xlIGFzIGJhcnJhcyBwcm9tb2Npb25haXMgZXhpYmlkYXMgbm8gc2l0ZS4gQWx0ZXJhw6fDtWVzIHPDo28gYXBsaWNhZGFzIGltZWRpYXRhbWVudGUuPC9wPgoKICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9Im1heC13aWR0aDo5MDBweCI+CiAgICA8P3BocCB3cF9ub25jZV9maWVsZCgndm0yX2JhcnJhc19zYXZlJyk7ID8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ2bTJfYmFycmFzX3NhdmUiIHZhbHVlPSIxIj4KCiAgICA8IS0tID09PT09IEJBUlJBIENVUE9NID09PT09IC0tPgogICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyNHB4O21hcmdpbi1ib3R0b206MjRweCI+CiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjIwcHgiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGgyIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTZweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHgiPgogICAgICAgICAgICAgICAgICAgIPCfj7fvuI8gQmFycmEgQ3Vwb20gZGUgRGVzY29udG8KICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjRweCAwIDA7Y29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweCI+QmFycmEgYW1hcmVsYSBuYSBob21lIGUgbGlzdGFnZW0gZGUgcHJvZHV0b3M8L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlciI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImNvdXBvbl9iYXJfZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJGNiX29uLCAxKTsgPz4gaWQ9ImNiX3RvZ2dsZSIKICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweDtjdXJzb3I6cG9pbnRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2NvbG9yOjw/cGhwIGVjaG8gJGNiX29uID8gJyMxNmEzNGEnIDogJyM2YjcyODAnOyA/PiIgaWQ9ImNiX3N0YXR1cyI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkY2Jfb24gPyAn4pyFIEF0aXZhJyA6ICfij7ggUGF1c2FkYSc7ID8+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gUHJldmlldyBiYXJyYSBjdXBvbSAtLT4KICAgICAgICA8ZGl2IGlkPSJjYl9wcmV2aWV3IiBzdHlsZT0iYmFja2dyb3VuZDojRkZENzAwO2NvbG9yOiMxYTBhMmU7cGFkZGluZzo4cHggMTZweDtib3JkZXItcmFkaXVzOjhweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbToyMHB4Ozw/cGhwIGVjaG8gJGNiX29uID8gJycgOiAnb3BhY2l0eTowLjQnOyA/PiI+CiAgICAgICAgICAgIFVTRSBPIENVUE9NIDxzcGFuIGlkPSJjYl9wcmV2aWV3X2NvdXBvbiIgc3R5bGU9ImJhY2tncm91bmQ6IzFhMGEyZTtjb2xvcjojRkZENzAwO3BhZGRpbmc6MnB4IDZweDtib3JkZXItcmFkaXVzOjRweCI+PD9waHAgZWNobyBlc2NfaHRtbCgkY2JfY291cG9uKTsgPz48L3NwYW4+CiAgICAgICAgICAgIEUgR0FOSEUgPHNwYW4gaWQ9ImNiX3ByZXZpZXdfdGV4dCI+PD9waHAgZWNobyBlc2NfaHRtbCgkY2JfdGV4dCk7ID8+PC9zcGFuPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHgiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjZweDtmb250LXNpemU6MTNweCI+Q8OzZGlnbyBkbyBDdXBvbTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY291cG9uX2Jhcl9jb3Vwb24iIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRjYl9jb3Vwb24pOyA/PiIKICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTRweDtmb250LWZhbWlseTptb25vc3BhY2U7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlIgogICAgICAgICAgICAgICAgICAgIG9uaW5wdXQ9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYl9wcmV2aWV3X2NvdXBvbicpLnRleHRDb250ZW50PXRoaXMudmFsdWUudG9VcHBlckNhc2UoKSI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjZweDtmb250LXNpemU6MTNweCI+VGV4dG8gZG8gRGVzY29udG88L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNvdXBvbl9iYXJfdGV4dCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGNiX3RleHQpOyA/PiIKICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTRweCIKICAgICAgICAgICAgICAgICAgICBvbmlucHV0PSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2JfcHJldmlld190ZXh0JykudGV4dENvbnRlbnQ9dGhpcy52YWx1ZSI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSA9PT09PSBCQVJSQSBWSVJBTCA9PT09PSAtLT4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjRweDttYXJnaW4tYm90dG9tOjI0cHgiPgogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToyMHB4Ij4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxoMiBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4Ij4KICAgICAgICAgICAgICAgICAgICDwn5S0IEJhcnJhIFZpcmFsIChDZWxlYnJpZGFkZSkKICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjRweCAwIDA7Y29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweCI+QmFycmEgdmVybWVsaGEgY29tIG1lbsOnw6NvIGRlIGNlbGVicmlkYWRlIOKAlCB0b3BvIGRlIHRvZGFzIGFzIHDDoWdpbmFzPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ2aXJhbF9iYXJfZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJHZiX29uLCAxKTsgPz4gaWQ9InZiX3RvZ2dsZSIKICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweDtjdXJzb3I6cG9pbnRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2NvbG9yOjw/cGhwIGVjaG8gJHZiX29uID8gJyMxNmEzNGEnIDogJyM2YjcyODAnOyA/PiIgaWQ9InZiX3N0YXR1cyI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkdmJfb24gPyAn4pyFIEF0aXZhJyA6ICfij7ggUGF1c2FkYSc7ID8+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gUHJldmlldyBiYXJyYSB2aXJhbCAtLT4KICAgICAgICA8ZGl2IGlkPSJ2Yl9wcmV2aWV3IiBzdHlsZT0iYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsI2IzMDAwMCwjZDQwMDAwLCNiMzAwMDApO2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzcHg7bWFyZ2luLWJvdHRvbToyMHB4Ozw/cGhwIGVjaG8gJHZiX29uID8gJycgOiAnb3BhY2l0eTowLjQnOyA/PiI+CiAgICAgICAgICAgIPCflKXwn461CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIHN0eWxlPSJjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lIj4KICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJ2Yl9wcmV2aWV3X2FjdG9yIiBzdHlsZT0iY29sb3I6I2Q0YWYzNztmb250LXdlaWdodDo3MDAiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHZiX2FjdG9yKTsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBpZD0idmJfcHJldmlld190ZXh0Ij4gPD9waHAgZWNobyBlc2NfaHRtbCgkdmJfdGV4dCk7ID8+PC9zcGFuPgogICAgICAgICAgICAgICAgJm1kYXNoOyA8c3BhbiBzdHlsZT0iY29sb3I6I2Q0YWYzNztmb250LXdlaWdodDo3MDA7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSI+dmVyIHbDrWRlb3MgdmlyYWlzIOKAujwvc3Bhbj4KICAgICAgICAgICAgPC9hPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo2cHg7Zm9udC1zaXplOjEzcHgiPk5vbWUgZGEgQ2VsZWJyaWRhZGU8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZpcmFsX2Jhcl9hY3RvciIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHZiX2FjdG9yKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjE0cHgiCiAgICAgICAgICAgICAgICAgICAgb25pbnB1dD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZiX3ByZXZpZXdfYWN0b3InKS50ZXh0Q29udGVudD10aGlzLnZhbHVlIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NnB4O2ZvbnQtc2l6ZToxM3B4Ij5UZXh0byBkYSBBw6fDo288L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZpcmFsX2Jhcl90ZXh0IiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkdmJfdGV4dCk7ID8+IgogICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxNHB4IgogICAgICAgICAgICAgICAgICAgIG9uaW5wdXQ9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2Yl9wcmV2aWV3X3RleHQnKS50ZXh0Q29udGVudD0nICcrdGhpcy52YWx1ZSI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo2cHg7Zm9udC1zaXplOjEzcHgiPkxpbmsgZGUgRGVzdGlubzwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ1cmwiIG5hbWU9InZpcmFsX2Jhcl9saW5rIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkdmJfbGluayk7ID8+IgogICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjE0cHgiCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iaHR0cHM6Ly9sb2phLnZpdmFtYWlzZXZlbnRvcy5jb20vY2FycmV0YS12aXJhbC8iPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidXR0b24gYnV0dG9uLXByaW1hcnkiIHN0eWxlPSJwYWRkaW5nOjEwcHggMzJweDtmb250LXNpemU6MTVweDtoZWlnaHQ6YXV0bztib3JkZXItcmFkaXVzOjhweCI+CiAgICAgICAg8J+SviBTYWx2YXIgQmFycmFzCiAgICA8L2J1dHRvbj4KICAgIDwvZm9ybT4KICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAvLyBUb2dnbGUgc3RhdHVzIGxhYmVsIG9uIGNoZWNrYm94IGNoYW5nZQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NiX3RvZ2dsZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYl9zdGF0dXMnKS50ZXh0Q29udGVudCA9IHRoaXMuY2hlY2tlZCA/ICfinIUgQXRpdmEnIDogJ+KPuCBQYXVzYWRhJzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2Jfc3RhdHVzJykuc3R5bGUuY29sb3IgPSB0aGlzLmNoZWNrZWQgPyAnIzE2YTM0YScgOiAnIzZiNzI4MCc7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NiX3ByZXZpZXcnKS5zdHlsZS5vcGFjaXR5ID0gdGhpcy5jaGVja2VkID8gJzEnIDogJzAuNCc7CiAgICB9KTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2Yl90b2dnbGUnKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmJfc3RhdHVzJykudGV4dENvbnRlbnQgPSB0aGlzLmNoZWNrZWQgPyAn4pyFIEF0aXZhJyA6ICfij7ggUGF1c2FkYSc7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZiX3N0YXR1cycpLnN0eWxlLmNvbG9yID0gdGhpcy5jaGVja2VkID8gJyMxNmEzNGEnIDogJyM2YjcyODAnOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2Yl9wcmV2aWV3Jykuc3R5bGUub3BhY2l0eSA9IHRoaXMuY2hlY2tlZCA/ICcxJyA6ICcwLjQnOwogICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDw/cGhwCn0KCmZ1bmN0aW9uIHZtMl9zZXR0aW5nc19wYWdlKCkgewogICAgJG5vdGljZSA9ICcnOwoKICAgIC8vIOKUgOKUgCBTYWx2YXIgS2lsbCBTd2l0Y2ggR2xvYmFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgaWYgKCBpc3NldCggJF9QT1NUWyd2bTJfc2F2ZV9zZXR0aW5ncyddICkgJiYgY2hlY2tfYWRtaW5fcmVmZXJlciggJ3ZtMl9zZXR0aW5nc19ub25jZScgKSApIHsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX2tpbGxfc3dpdGNoJywgaXNzZXQoICRfUE9TVFsndm0yX2tpbGxfc3dpdGNoJ10gKSA/ICcxJyA6ICcwJyApOwogICAgICAgIGlmICggaXNzZXQoJF9QT1NUWyd2bTJfZ2xvYmFsX2RhaWx5X2xpbWl0J10pICkgewogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX2dsb2JhbF9kYWlseV9saW1pdCcsIG1heCgwLCAoaW50KSRfUE9TVFsndm0yX2dsb2JhbF9kYWlseV9saW1pdCddKSApOwogICAgICAgIH0KICAgICAgICBpZiAoIGlzc2V0KCRfUE9TVFsndm0yX2NvbnRhY3Rfd2Vla2x5X2xpbWl0J10pICkgewogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX2NvbnRhY3Rfd2Vla2x5X2xpbWl0JywgbWF4KDAsIChpbnQpJF9QT1NUWyd2bTJfY29udGFjdF93ZWVrbHlfbGltaXQnXSkgKTsKICAgICAgICB9CiAgICAgICAgaWYgKCBpc3NldCgkX1BPU1RbJ3ZtMl9maW5fd2ViaG9va191cmwnXSkgKSB7CiAgICAgICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9maW5fd2ViaG9va191cmwnLCBlc2NfdXJsX3Jhdyh0cmltKCRfUE9TVFsndm0yX2Zpbl93ZWJob29rX3VybCddKSkpOwogICAgICAgIH0KICAgICAgICBpZiAoICFlbXB0eSgkX1BPU1RbJ3ZtMl9maW5fc3luY190b2tlbiddKSApIHsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX2Zpbl9zeW5jX3Rva2VuJywgc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ3ZtMl9maW5fc3luY190b2tlbiddKSk7CiAgICAgICAgfQogICAgICAgIGlmICggaXNzZXQoJF9QT1NUWyd2bTJfYWdlbmRhX3dlYmhvb2tfdXJsJ10pICkgewogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfYWdlbmRhX3dlYmhvb2tfdXJsJywgZXNjX3VybF9yYXcodHJpbSgkX1BPU1RbJ3ZtMl9hZ2VuZGFfd2ViaG9va191cmwnXSkpKTsKICAgICAgICB9CiAgICAgICAgJG5vdGljZSA9ICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MgaXMtZGlzbWlzc2libGUiPjxwPuKchSBDb25maWd1cmHDp8O1ZXMgZ2xvYmFpcyBzYWx2YXMhPC9wPjwvZGl2Pic7CiAgICB9CgogICAgLy8g4pSA4pSAIEFkaWNpb25hciAvIEVkaXRhciBjYW5hbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIGlmICggaXNzZXQoICRfUE9TVFsndm0yX2FkZF9jaGFubmVsJ10gKSAmJiBjaGVja19hZG1pbl9yZWZlcmVyKCAndm0yX2NoYW5uZWxfbm9uY2UnICkgKSB7CiAgICAgICAgJHNsdWcgICAgID0gc2FuaXRpemVfa2V5KCAkX1BPU1RbJ2NoX3NsdWcnXSA/PyAnJyApOwogICAgICAgICRlZGl0X2tleSA9IHNhbml0aXplX2tleSggJF9QT1NUWydjaF9lZGl0X2tleSddID8/ICcnICk7CiAgICAgICAgJHR5cGUgICAgID0gaW5fYXJyYXkoICRfUE9TVFsnY2hfdHlwZSddID8/ICcnLCBbJ3phcGknLCd3YWJhJ10gKSA/ICRfUE9TVFsnY2hfdHlwZSddIDogJ3phcGknOwogICAgICAgICRsYWJlbCAgICA9IHNhbml0aXplX3RleHRfZmllbGQoICRfUE9TVFsnY2hfbGFiZWwnXSA/PyAnJyApOwogICAgICAgICRudW1iZXIgICA9IHNhbml0aXplX3RleHRfZmllbGQoICRfUE9TVFsnY2hfbnVtYmVyJ10gPz8gJycgKTsKICAgICAgICAkaW5zdGFuY2UgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJ2NoX2luc3RhbmNlJ10gPz8gJycgKTsKICAgICAgICAkdG9rZW4gICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJ2NoX3Rva2VuJ10gPz8gJycgKTsKICAgICAgICAkY2xpZW50ICAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJ2NoX2NsaWVudCddID8/ICcnICk7CiAgICAgICAgJGRhaWx5X2xpbWl0ID0gbWF4KCAxLCAoaW50KSAoICRfUE9TVFsnY2hfZGFpbHlfbGltaXQnXSA/PyA1MCApICk7CiAgICAgICAgaWYgKCAkc2x1ZyAmJiAkbGFiZWwgJiYgJG51bWJlciApIHsKICAgICAgICAgICAgJGN1c3RvbSA9IGdldF9vcHRpb24oICd2bTJfY2hhbm5lbF9wb29sJywgW10gKTsKICAgICAgICAgICAgaWYgKCBpc19zdHJpbmcoICRjdXN0b20gKSApICRjdXN0b20gPSBqc29uX2RlY29kZSggJGN1c3RvbSwgdHJ1ZSApID86IFtdOwogICAgICAgICAgICBpZiAoICRlZGl0X2tleSAmJiAkZWRpdF9rZXkgIT09ICRzbHVnICYmIGlzc2V0KCAkY3VzdG9tWyRlZGl0X2tleV0gKSApIHsKICAgICAgICAgICAgICAgIHVuc2V0KCAkY3VzdG9tWyRlZGl0X2tleV0gKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCAkZWRpdF9rZXkgJiYgJGVkaXRfa2V5ID09PSAkc2x1ZyApIHsKICAgICAgICAgICAgICAgIC8vIG1lc21hIGNoYXZlIOKAlCBhcGVuYXMgYXR1YWxpemEKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBOb3ZvIGNhbmFsOiBjb21lw6dhIFBBVVNBRE8gKHByb3Rlw6fDo28gY29udHJhIGZsb29kKQogICAgICAgICAgICAvLyBFZGnDp8OjbzogcHJlc2VydmEgbyBzdGF0dXMgZXhpc3RlbnRlCiAgICAgICAgICAgICRwcmV2X3N0YXR1cyA9ICdwYXVzZWQnOyAvLyBkZWZhdWx0IHBhcmEgbm92b3MKICAgICAgICAgICAgaWYgKCAkZWRpdF9rZXkgKSB7CiAgICAgICAgICAgICAgICAkcHJldl9zdGF0dXMgPSAkY3VzdG9tWyAkZWRpdF9rZXkgXVsnc3RhdHVzJ10gPz8gJGN1c3RvbVsgJHNsdWcgXVsnc3RhdHVzJ10gPz8gJ2FjdGl2ZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG5ld19lbnRyeSA9IFsgJ2xhYmVsJyA9PiAkbGFiZWwsICd0eXBlJyA9PiAkdHlwZSwgJ251bWJlcicgPT4gJG51bWJlciwgJ2luc3RhbmNlJyA9PiAkaW5zdGFuY2UsICd0b2tlbicgPT4gJHRva2VuLCAnY2xpZW50JyA9PiAkY2xpZW50LCAnZGFpbHlfbGltaXQnID0+ICRkYWlseV9saW1pdCwgJ3N0YXR1cycgPT4gJHByZXZfc3RhdHVzIF07CiAgICAgICAgICAgICRjdXN0b21bICRzbHVnIF0gPSAkbmV3X2VudHJ5OwogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX2NoYW5uZWxfcG9vbCcsICRjdXN0b20gKTsKICAgICAgICAgICAgJHZlcmIgICA9ICRlZGl0X2tleSA/ICdhdHVhbGl6YWRvJyA6ICdhZGljaW9uYWRvJzsKICAgICAgICAgICAgJG5vdGljZSA9ICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MgaXMtZGlzbWlzc2libGUiPjxwPuKchSBDYW5hbCA8c3Ryb25nPicgLiBlc2NfaHRtbCgkbGFiZWwpIC4gJzwvc3Ryb25nPiAnIC4gJHZlcmIgLiAnITwvcD48L2Rpdj4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRub3RpY2UgPSAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1lcnJvciBpcy1kaXNtaXNzaWJsZSI+PHA+4p2MIFByZWVuY2hhIGFvIG1lbm9zIFNsdWcsIExhYmVsIGUgTsO6bWVyby48L3A+PC9kaXY+JzsKICAgICAgICB9CiAgICB9CgogICAgLy8g4pSA4pSAIFJlbW92ZXIgY2FuYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICBpZiAoIGlzc2V0KCAkX0dFVFsndm0yX2RlbF9jaGFubmVsJ10gKSAmJiBjaGVja19hZG1pbl9yZWZlcmVyKCAndm0yX2RlbF9jaCcgKSApIHsKICAgICAgICAkc2x1ZyAgPSBzYW5pdGl6ZV9rZXkoICRfR0VUWyd2bTJfZGVsX2NoYW5uZWwnXSApOwogICAgICAgICRjdXN0b20gPSBnZXRfb3B0aW9uKCAndm0yX2NoYW5uZWxfcG9vbCcsIFtdICk7CiAgICAgICAgaWYgKCBpc19zdHJpbmcoICRjdXN0b20gKSApICRjdXN0b20gPSBqc29uX2RlY29kZSggJGN1c3RvbSwgdHJ1ZSApID86IFtdOwogICAgICAgIGlmICggaXNzZXQoICRjdXN0b21bJHNsdWddICkgKSB7CiAgICAgICAgICAgIHVuc2V0KCAkY3VzdG9tWyRzbHVnXSApOwogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX2NoYW5uZWxfcG9vbCcsICRjdXN0b20gKTsKICAgICAgICAgICAgJG5vdGljZSA9ICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MgaXMtZGlzbWlzc2libGUiPjxwPvCfl5HvuI8gQ2FuYWwgcmVtb3ZpZG8uPC9wPjwvZGl2Pic7CiAgICAgICAgfQogICAgICAgIHdwX3NhZmVfcmVkaXJlY3QoIGFkbWluX3VybCggJ2FkbWluLnBocD9wYWdlPXZtMi1zZXR0aW5ncycgKSApOwogICAgICAgIGV4aXQ7CiAgICB9CgogICAgLy8g4pSA4pSAIFRvZ2dsZSBhdGl2by9wYXVzYWRvIGRlIGNhbmFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgaWYgKCBpc3NldCggJF9QT1NUWyd2bTJfdG9nZ2xlX2NoYW5uZWxfc3RhdHVzJ10gKSAmJiBjaGVja19hZG1pbl9yZWZlcmVyKCAndm0yX3NldHRpbmdzX25vbmNlJyApICkgewogICAgICAgICR0X3NsdWcgPSBzYW5pdGl6ZV9rZXkoICRfUE9TVFsndm0yX3RvZ2dsZV9zbHVnJ10gPz8gJycgKTsKICAgICAgICAkdF9wb29sID0gZ2V0X29wdGlvbiggJ3ZtMl9jaGFubmVsX3Bvb2wnLCBbXSApOwogICAgICAgIGlmICggaXNfc3RyaW5nKCAkdF9wb29sICkgKSAkdF9wb29sID0ganNvbl9kZWNvZGUoICR0X3Bvb2wsIHRydWUgKSA/OiBbXTsKICAgICAgICBpZiAoICR0X3NsdWcgJiYgaXNzZXQoICR0X3Bvb2xbICR0X3NsdWcgXSApICkgewogICAgICAgICAgICAkY3VyX3N0ID0gJHRfcG9vbFsgJHRfc2x1ZyBdWydzdGF0dXMnXSA/PyAnYWN0aXZlJzsKICAgICAgICAgICAgJHRfcG9vbFsgJHRfc2x1ZyBdWydzdGF0dXMnXSA9ICggJGN1cl9zdCA9PT0gJ3BhdXNlZCcgKSA/ICdhY3RpdmUnIDogJ3BhdXNlZCc7CiAgICAgICAgICAgIHVwZGF0ZV9vcHRpb24oICd2bTJfY2hhbm5lbF9wb29sJywgJHRfcG9vbCApOwogICAgICAgICAgICAkdF9sYWJlbCA9IGVzY19odG1sKCAkdF9wb29sWyAkdF9zbHVnIF1bJ2xhYmVsJ10gPz8gJHRfc2x1ZyApOwogICAgICAgICAgICBpZiAoICR0X3Bvb2xbICR0X3NsdWcgXVsnc3RhdHVzJ10gPT09ICdhY3RpdmUnICkgewogICAgICAgICAgICAgICAgJG5vdGljZSA9ICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MgaXMtZGlzbWlzc2libGUiPjxwPuKWtu+4jyBDYW5hbCA8c3Ryb25nPicgLiAkdF9sYWJlbCAuICc8L3N0cm9uZz4gPHN0cm9uZz5hdGl2YWRvPC9zdHJvbmc+IOKAlCBtZW5zYWdlbnMgZmx1ZW0gbm9ybWFsbWVudGUuPC9wPjwvZGl2Pic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbm90aWNlID0gJzxkaXYgY2xhc3M9Im5vdGljZSBub3RpY2Utd2FybmluZyBpcy1kaXNtaXNzaWJsZSI+PHA+4o+4IENhbmFsIDxzdHJvbmc+JyAuICR0X2xhYmVsIC4gJzwvc3Ryb25nPiA8c3Ryb25nPnBhdXNhZG88L3N0cm9uZz4g4oCUIG5lbmh1bWEgbWVuc2FnZW0gdmFpIHBvciBlc3RlIGNhbmFsLjwvcD48L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICRrcyAgICAgICA9IGdldF9vcHRpb24oICd2bTJfa2lsbF9zd2l0Y2gnLCAnMCcgKTsKICAgICRjaGFubmVscyA9IHZtMl9jaGFubmVscygpOwogICAgJG5vbmNlX2RlbCA9IHdwX2NyZWF0ZV9ub25jZSggJ3ZtMl9kZWxfY2gnICk7CiAgICA/PgogICAgPGRpdiBjbGFzcz0id3JhcCI+CiAgICAgICAgPGgxPuKame+4jyBDb25maWd1cmHDp8O1ZXMgVjI8L2gxPgogICAgICAgIDw/cGhwIGVjaG8gJG5vdGljZTsgPz4KCiAgICAgICAgPD9waHAgLyog4pSA4pSAIEtpbGwgU3dpdGNoIEdsb2JhbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8gPz4KICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICA8P3BocCB3cF9ub25jZV9maWVsZCggJ3ZtMl9zZXR0aW5nc19ub25jZScgKTsgPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjIwcHg7bWFyZ2luOjIwcHggMDtib3JkZXItbGVmdDo0cHggc29saWQgPD9waHAgZWNobyAka3MgPT09ICcxJyA/ICcjZTc0YzNjJyA6ICcjMjdhZTYwJzsgPz4iPgogICAgICAgICAgICAgICAgPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjAiPvCfm5EgS2lsbCBTd2l0Y2ggR2xvYmFsIFYyPC9oMj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxNHB4Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InZtMl9raWxsX3N3aXRjaCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoICRrcywgJzEnICk7ID8+IHN0eWxlPSJ3aWR0aDoxOHB4O2hlaWdodDoxOHB4Ij4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlBBUkFSIFRPRE9TIE9TIEVOVklPUyBWMjwvc3Ryb25nPgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiIgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij5RdWFuZG8gYXRpdm8sIG5lbmh1bWEgbWVuc2FnZW0gZG8gQ1JNIFYyIHNlcsOhIGVudmlhZGEuPC9wPgogICAgICAgICAgICAgICAgPHA+U3RhdHVzOiA8c3Ryb25nIHN0eWxlPSJjb2xvcjo8P3BocCBlY2hvICRrcyA9PT0gJzEnID8gJ3JlZCcgOiAnZ3JlZW4nOyA/Pjtmb250LXNpemU6MTVweCI+PD9waHAgZWNobyAka3MgPT09ICcxJyA/ICfwn5S0IFBBUkFETycgOiAn8J+foiBBVElWTyc7ID8+PC9zdHJvbmc+PC9wPgogICAgICAgICAgICAgICAgPGhyIHN0eWxlPSJtYXJnaW46MTZweCAwIj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTZweDttYXJnaW4tdG9wOjEycHgiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHg7ZGlzcGxheTpibG9jayI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+8J+TpiBDYXAgR2xvYmFsIERpw6FyaW8gKG1zZ3MvZGlhKTwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEycHgiPlRvdGFsIGRlIHRvZG9zIG9zIG3Ds2R1bG9zIOKAlCAwID0gc2VtIGxpbWl0ZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJyPjxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InZtMl9nbG9iYWxfZGFpbHlfbGltaXQiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKChpbnQpZ2V0X29wdGlvbigndm0yX2dsb2JhbF9kYWlseV9saW1pdCcsMCkpOyA/PiIgbWluPSIwIiBtYXg9Ijk5OTkiIHN0eWxlPSJ3aWR0aDoxMjBweDttYXJnaW4tdG9wOjZweDtwYWRkaW5nOjZweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHg7ZGlzcGxheTpibG9jayI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+8J+ThSBNw6F4IG1zZ3MvY29udGF0byBwb3IgNyBkaWFzPC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxicj48c3BhbiBzdHlsZT0iY29sb3I6IzZiNzI4MDtmb250LXNpemU6MTJweCI+RXZpdGEgc3BhbSBubyBtZXNtbyBjb250YXRvIOKAlCAwID0gc2VtIGxpbWl0ZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJyPjxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InZtMl9jb250YWN0X3dlZWtseV9saW1pdCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoKGludClnZXRfb3B0aW9uKCd2bTJfY29udGFjdF93ZWVrbHlfbGltaXQnLDApKTsgPz4iIG1pbj0iMCIgbWF4PSI5OSIgc3R5bGU9IndpZHRoOjEyMHB4O21hcmdpbi10b3A6NnB4O3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJ2bTJfc2F2ZV9zZXR0aW5ncyIgY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSI+8J+SviBTYWx2YXI8L2J1dHRvbj4KCiAgICAgICAgICAgIDwhLS0g4pSA4pSAIEludGVncmHDp8OjbyBHb29nbGUgU2hlZXRzIOKUgOKUgCAtLT4KICAgICAgICAgICAgPGRpdiBpZD0iZmluLXdlYmhvb2siIHN0eWxlPSJtYXJnaW4tdG9wOjI0cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjIwcHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICM3YzNhZWQiPgogICAgICAgICAgICAgICAgPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjAiPvCfk4ogSW50ZWdyYcOnw6NvIEdvb2dsZSBTaGVldHMg4oCUIEZpbmFuY2Vpcm88L2gyPgogICAgICAgICAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEzcHg7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICAgICAgICAgICAgICBDb25maWd1cmUgbyB3ZWJob29rIGRvIFRhc2tsZXQgcGFyYSBzaW5jcm9uaXphciBhIHBsYW5pbGhhIFZJVkFNQUlTLVZFTkRBUyBjb20gbyBtw7NkdWxvIEZpbmFuY2Vpcm8uPGJyPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Q29tbyBvYnRlciBhIFVSTDo8L3N0cm9uZz4gTm8gVGFza2xldCwgdsOhIGVtIDxlbT5UcmlnZ2VycyDihpIgU2luY3Jvbml6YXIgRmluYW5jZWlybyBHU2hlZXRzPC9lbT4gZSBjb3BpZSBhIFdlYmhvb2sgVVJMLgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dhcDoxMnB4O21heC13aWR0aDo2MDBweCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzM3NDE1MTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5SXIFdlYmhvb2sgVVJMIChUYXNrbGV0KTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ1cmwiIG5hbWU9InZtMl9maW5fd2ViaG9va191cmwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cihnZXRfb3B0aW9uKCd2bTJfZmluX3dlYmhvb2tfdXJsJywnJykpOyA/PiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwczovL3dlYmhvb2tzLnRhc2tsZXQuYWkvdjEvcHVibGljL3dlYmhvb2svLi4uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPlVSTCBkbyB3ZWJob29rIGdlcmFkbyBwZWxvIFRhc2tsZXQgcGFyYSBkaXNwYXJhciBhIHNpbmNyb25pemHDp8Ojby48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzM3NDE1MTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5SRIFRva2VuIGRlIFNpbmNyb25pemHDp8OjbzwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ2bTJfZmluX3N5bmNfdG9rZW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cihnZXRfb3B0aW9uKCd2bTJfZmluX3N5bmNfdG9rZW4nLCd2bTJmc3luY185a3F3M3A3eCcpKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtmb250LWZhbWlseTptb25vc3BhY2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPlRva2VuIEJlYXJlciBxdWUgbyBUYXNrbGV0IHVzYSBhbyBlbnZpYXIgZGFkb3MuIFBhZHLDo286IDxjb2RlPnZtMmZzeW5jXzlrcXczcDd4PC9jb2RlPjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCAkbGFzdF9zeW5jID0gZ2V0X29wdGlvbigndm0yX2Zpbl9sYXN0X3N5bmMnLCcnKTsgaWYgKCRsYXN0X3N5bmMpOiA/PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiNmMGZkZjQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzA2NWY0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgIOKchSDDmmx0aW1hIHN5bmM6IDw/cGhwIGVjaG8gZXNjX2h0bWwodm0yX2xvY2FsX2RhdGUoJ2QvbS9ZIEg6aScsICRsYXN0X3N5bmMpKTsgPz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0g4pSA4pSAIEludGVncmHDp8OjbyBHb29nbGUgU2hlZXRzIOKAlCBBZ2VuZGEg4pSA4pSAIC0tPgogICAgICAgICAgICA8ZGl2IGlkPSJhZ2VuZGEtd2ViaG9vayIgc3R5bGU9Im1hcmdpbi10b3A6MjRweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MjBweDtib3JkZXItbGVmdDo0cHggc29saWQgIzA1OTY2OSI+CiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9Im1hcmdpbi10b3A6MCI+8J+ThSBJbnRlZ3Jhw6fDo28gR29vZ2xlIFNoZWV0cyDigJQgQWdlbmRhPC9oMj4KICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlIG8gd2ViaG9vayBkbyBUYXNrbGV0IHBhcmEgc2luY3Jvbml6YXIgYSBhYmEgPHN0cm9uZz5WRU5EQVM8L3N0cm9uZz4gZGEgcGxhbmlsaGEgY29tIGEgQWdlbmRhIGRvIENSTS48YnI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5Db21vIG9idGVyIGEgVVJMOjwvc3Ryb25nPiBObyBUYXNrbGV0LCB2w6EgZW0gPGVtPlRyaWdnZXJzIOKGkiBTaW5jcm9uaXphciBBZ2VuZGEgR1NoZWV0czwvZW0+IGUgY29waWUgYSBXZWJob29rIFVSTC4KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDo2MDBweCI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzM3NDE1MTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5SXIFdlYmhvb2sgVVJMIChUYXNrbGV0KTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InVybCIgbmFtZT0idm0yX2FnZW5kYV93ZWJob29rX3VybCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoZ2V0X29wdGlvbigndm0yX2FnZW5kYV93ZWJob29rX3VybCcsJycpKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwczovL3dlYmhvb2tzLnRhc2tsZXQuYWkvdjEvcHVibGljL3dlYmhvb2svLi4uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5VUkwgZG8gd2ViaG9vayBnZXJhZG8gcGVsbyBUYXNrbGV0IHBhcmEgZGlzcGFyYXIgYSBzaW5jcm9uaXphw6fDo28gZGEgQWdlbmRhLjwvcD4KICAgICAgICAgICAgICAgICAgICA8P3BocCAkYWdfc3luYyA9IGdldF9vcHRpb24oJ3ZtMl9hZ2VuZGFfbGFzdF9zeW5jJywnJyk7IGlmICgkYWdfc3luYyk6ID8+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzoxMHB4O2JhY2tncm91bmQ6I2VjZmRmNTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtjb2xvcjojMDY1ZjQ2O21hcmdpbi10b3A6OHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAg4pyFIMOabHRpbWEgc3luYzogPD9waHAgZWNobyBlc2NfaHRtbChkYXRlKCdkL20vWSBIOmknLCBzdHJ0b3RpbWUoJGFnX3N5bmMpKSk7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9mb3JtPgoKICAgICAgICA8P3BocCAvKiDilIDilIAgUG9vbCBkZSBDYW5haXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovID8+CiAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjI0cHg7bWFyZ2luOjI4cHggMCI+CiAgICAgICAgICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDowIj7wn5OhIFBvb2wgZGUgQ2FuYWlzIGRlIEVudmlvPC9oMj4KICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5DYW5haXMgZGlzcG9uw612ZWlzIGVtIHRvZG9zIG9zIG3Ds2R1bG9zIFYyLiBDYW5haXMgcGFkcsOjbyBuw6NvIHBvZGVtIHNlciByZW1vdmlkb3MuPC9wPgoKICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAudm0yLWNoYW5uZWwtZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjIwcHh9CiAgICAgICAgICAgIEBtZWRpYShtaW4td2lkdGg6NjAwcHgpey52bTItY2hhbm5lbC1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpfX0KICAgICAgICAgICAgQG1lZGlhKG1pbi13aWR0aDo5NjBweCl7LnZtMi1jaGFubmVsLWdyaWR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgzLDFmcil9fQogICAgICAgICAgICAudm0yLWNoYW5uZWwtY2FyZHtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNHB4IDE2cHg7YmFja2dyb3VuZDojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlfQogICAgICAgICAgICAudm0yLWNoYW5uZWwtY2FyZC5sb2NrZWR7YmFja2dyb3VuZDojZjlmOWY5fQogICAgICAgICAgICAudm0yLWNoYW5uZWwtY2FyZCAuY2gtYmFkZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Y29sb3I6I2ZmZjttYXJnaW4tYm90dG9tOjhweH0KICAgICAgICAgICAgLnZtMi1jaGFubmVsLWNhcmQgLmNoLWJhZGdlLnphcGl7YmFja2dyb3VuZDojMjVkMzY2fQogICAgICAgICAgICAudm0yLWNoYW5uZWwtY2FyZCAuY2gtYmFkZ2Uud2FiYXtiYWNrZ3JvdW5kOiMzYjgyZjZ9CiAgICAgICAgICAgIC52bTItY2hhbm5lbC1jYXJkIC5jaC1sYWJlbHtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHh9CiAgICAgICAgICAgIC52bTItY2hhbm5lbC1jYXJkIC5jaC1zbHVne2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTJweDtjb2xvcjojNjY2O2JhY2tncm91bmQ6I2YwZjBmMDtwYWRkaW5nOjJweCA2cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWJvdHRvbTo2cHh9CiAgICAgICAgICAgIC52bTItY2hhbm5lbC1jYXJkIC5jaC1udW1iZXJ7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzQ0NDttYXJnaW4tYm90dG9tOjRweH0KICAgICAgICAgICAgLnZtMi1jaGFubmVsLWNhcmQgLmNoLWluc3RhbmNle2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5OTk7d29yZC1icmVhazpicmVhay1hbGx9CiAgICAgICAgICAgIC52bTItY2hhbm5lbC1jYXJkIC5jaC1hY3Rpb25ze3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMHB4O3JpZ2h0OjEwcHg7ZGlzcGxheTpmbGV4O2dhcDo0cHh9CiAgICAgICAgICAgIC52bTItY2hhbm5lbC1jYXJkIC5jaC1kZWx7Zm9udC1zaXplOjEycHh9CiAgICAgICAgICAgIC52bTItY2hhbm5lbC1jYXJkIC5jaC1sb2NrZWR7Zm9udC1zaXplOjExcHg7Y29sb3I6I2JiYn0KICAgICAgICAgICAgQG1lZGlhKG1pbi13aWR0aDo2MDBweCl7LnZtMi1jaC1mb3JtLWdyaWR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLDFmcikgIWltcG9ydGFudH19CiAgICAgICAgICAgIEBtZWRpYShtaW4td2lkdGg6OTYwcHgpey52bTItY2gtZm9ybS1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMywxZnIpICFpbXBvcnRhbnR9fQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY2hhbm5lbC1ncmlkIj4KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRjaGFubmVscyBhcyAka2V5ID0+ICRjaCApIDoKICAgICAgICAgICAgICAgICRsb2NrZWQgICAgID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkdHlwZSAgICAgICA9ICRjaFsndHlwZSddID8/ICd6YXBpJzsKICAgICAgICAgICAgICAgICR0eXBlX2xhYmVsID0gJHR5cGUgPT09ICd3YWJhJyA/ICdXQUJBJyA6ICdaLUFQSSc7CiAgICAgICAgICAgICAgICAkY2hfc3RhdHVzICA9ICRjaFsnc3RhdHVzJ10gPz8gJ2FjdGl2ZSc7CiAgICAgICAgICAgICAgICAkaXNfcGF1c2VkICA9ICggJGNoX3N0YXR1cyA9PT0gJ3BhdXNlZCcgKTsKICAgICAgICAgICAgICAgICRzZW5kc190b2RheSA9IHZtMl9jaGFubmVsX3RvZGF5X2NvdW50KCAka2V5ICk7CiAgICAgICAgICAgID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1jaGFubmVsLWNhcmQ8P3BocCBlY2hvICRsb2NrZWQgPyAnIGxvY2tlZCcgOiAnJzsgPz4iCiAgICAgICAgICAgICAgICAgc3R5bGU9Ijw/cGhwIGVjaG8gJGlzX3BhdXNlZCA/ICdvcGFjaXR5OjAuNzU7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNmNTllMGInIDogJ2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjMjJjNTVlJzsgPz4iPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoLWJhZGdlIDw/cGhwIGVjaG8gZXNjX2F0dHIoJHR5cGUpOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkdHlwZV9sYWJlbCk7ID8+PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi1sZWZ0OjRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7PD9waHAgZWNobyAkaXNfcGF1c2VkID8gJ2JhY2tncm91bmQ6I2ZlZjNjNztjb2xvcjojOTI0MDBlJyA6ICdiYWNrZ3JvdW5kOiNkY2ZjZTc7Y29sb3I6IzE2NjUzNCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRpc19wYXVzZWQgPyAn4o+4IFBhdXNhZG8nIDogJ+KWtu+4jyBBdGl2byc7ID8+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaC1hY3Rpb25zIj4KICAgICAgICAgICAgICAgIDw/cGhwIGlmICggJGxvY2tlZCApIDogPz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2gtbG9ja2VkIj7wn5SSIHBhZHLDo288L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24gYnV0dG9uLXNtYWxsIGNoLWVkaXQiCiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJwYWRkaW5nOjJweCA3cHg7Zm9udC1zaXplOjEycHgiCiAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InZtMkNoRWRpdCg8P3BocCBlY2hvIGVzY19hdHRyKGpzb25fZW5jb2RlKCRrZXkpKTsgPz4sIDw/cGhwIGVjaG8gZXNjX2F0dHIoanNvbl9lbmNvZGUoJGNoKSk7ID8+KSI+4pyP77iPPC9idXR0b24+CiAgICAgICAgICAgICAgICA8P3BocCBlbHNlIDogPz4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIHdwX25vbmNlX2ZpZWxkKCd2bTJfc2V0dGluZ3Nfbm9uY2UnKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idm0yX3RvZ2dsZV9zbHVnIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigka2V5KTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0idm0yX3RvZ2dsZV9jaGFubmVsX3N0YXR1cyIgY2xhc3M9ImJ1dHRvbiBidXR0b24tc21hbGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0icGFkZGluZzoycHggN3B4O2ZvbnQtc2l6ZToxMnB4Ozw/cGhwIGVjaG8gJGlzX3BhdXNlZCA/ICdjb2xvcjojMTY2NTM0O2ZvbnQtd2VpZ2h0OjcwMCcgOiAnY29sb3I6IzlhMzQxMic7ID8+IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9Ijw/cGhwIGVjaG8gJGlzX3BhdXNlZCA/ICdBdGl2YXIgY2FuYWwnIDogJ1BhdXNhciBjYW5hbCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGlzX3BhdXNlZCA/ICfilrbvuI8nIDogJ+KPuCc7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiBidXR0b24tc21hbGwgY2gtZWRpdCIKICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9InBhZGRpbmc6MnB4IDdweDtmb250LXNpemU6MTJweCIKICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0idm0yQ2hFZGl0KDw/cGhwIGVjaG8gZXNjX2F0dHIoanNvbl9lbmNvZGUoJGtleSkpOyA/PiwgPD9waHAgZWNobyBlc2NfYXR0cihqc29uX2VuY29kZSgkY2gpKTsgPz4pIj7inI/vuI88L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoIGFkbWluX3VybCggJ2FkbWluLnBocD9wYWdlPXZtMi1zZXR0aW5ncyZ2bTJfZGVsX2NoYW5uZWw9JyAuICRrZXkgLiAnJl93cG5vbmNlPScgLiAkbm9uY2VfZGVsICkgKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oJ1JlbW92ZXIgY2FuYWwgPD9waHAgZWNobyBlc2NfanMoJGtleSk7ID8+PycpIgogICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJidXR0b24gYnV0dG9uLXNtYWxsIGNoLWRlbCIgc3R5bGU9ImNvbG9yOiNjMDM5MmI7cGFkZGluZzoycHggN3B4O2ZvbnQtc2l6ZToxMnB4Ij7wn5eR77iPPC9hPgogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoLWxhYmVsIj48P3BocCBlY2hvIGVzY19odG1sKCAkY2hbJ2xhYmVsJ10gKTsgPz48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoLXNsdWciPjw/cGhwIGVjaG8gZXNjX2h0bWwoICRrZXkgKTsgPz48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoLW51bWJlciI+8J+TsSA8P3BocCBlY2hvIGVzY19odG1sKCAkY2hbJ251bWJlciddID8/ICfigJQnICk7ID8+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNjY2O21hcmdpbi10b3A6M3B4Ij4KICAgICAgICAgICAgICAgICAgICDwn5OKIDw/cGhwIGVjaG8gJHNlbmRzX3RvZGF5OyA/PiBlbnZpYWRvcyBob2plCiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCAhIGVtcHR5KCRjaFsnZGFpbHlfbGltaXQnXSkgKSBlY2hvICcgLyAnIC4gKGludCkkY2hbJ2RhaWx5X2xpbWl0J10gLiAnIGxpbWl0ZSc7ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDw/cGhwIGlmICggISAkbG9ja2VkICYmICEgZW1wdHkoICRjaFsnaW5zdGFuY2UnXSApICkgOiA/PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2gtaW5zdGFuY2UiPklEOiA8P3BocCBlY2hvIGVzY19odG1sKCBzdWJzdHIoJGNoWydpbnN0YW5jZSddLCAwLCAyMCkgLiAn4oCmJyApOyA/PjwvZGl2PgogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDw/cGhwIC8qIOKUgOKUgCBGb3JtdWzDoXJpbyBBZGljaW9uYXIgQ2FuYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovID8+CiAgICAgICAgICAgIDxkZXRhaWxzIGlkPSJ2bTJDaERldGFpbHMiIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxNnB4Ij4KICAgICAgICAgICAgICAgIDxzdW1tYXJ5IGlkPSJ2bTJDaFN1bW1hcnkiIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjE0cHgiPuKelSBBZGljaW9uYXIgbm92byBjYW5hbDwvc3VtbWFyeT4KICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgc3R5bGU9Im1hcmdpbi10b3A6MTZweCIgaWQ9InZtMkNoRm9ybSI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoICd2bTJfY2hhbm5lbF9ub25jZScgKTsgPz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjaF9lZGl0X2tleSIgaWQ9InZtMkNoRWRpdEtleSIgdmFsdWU9IiI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnI7Z2FwOjE0cHg7bWFyZ2luLWJvdHRvbToxNnB4IiBjbGFzcz0idm0yLWNoLWZvcm0tZ3JpZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweCI+VGlwbyAqPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjaF90eXBlIiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iemFwaSI+8J+TsSBaLUFQSTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IndhYmEiPvCflLUgV0FCQSAoTWV0YSk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHgiPlNsdWcgLyBDaGF2ZSAqIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDo0MDA7Y29sb3I6IzY2NiI+KGV4OiB6YXBpX25vdm8pPC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjaF9zbHVnIiBwbGFjZWhvbGRlcj0iemFwaV9ub3ZvIiBzdHlsZT0id2lkdGg6MTAwJSIgcmVxdWlyZWQgcGF0dGVybj0iW2EtejAtOV9dKyIgdGl0bGU9IkFwZW5hcyBsZXRyYXMgbWluw7pzY3VsYXMsIG7Dum1lcm9zIGUgXyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweCI+TGFiZWwgKiA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2NjYiPihub21lIGFtaWfDoXZlbCk8L3NwYW4+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNoX2xhYmVsIiBwbGFjZWhvbGRlcj0i8J+TniBWSVZBIDk5OTkgKHZlbmRhcykiIHN0eWxlPSJ3aWR0aDoxMDAlIiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4Ij5Ow7ptZXJvICogPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjY2Ij4oRERJK0RERCtuw7ptZXJvKTwvc3Bhbj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY2hfbnVtYmVyIiBwbGFjZWhvbGRlcj0iNTUxMTk5OTk5OTk5OSIgc3R5bGU9IndpZHRoOjEwMCUiIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHgiPkluc3RhbmNlIElEPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNoX2luc3RhbmNlIiBwbGFjZWhvbGRlcj0iM0ZYWFhYLi4uIiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweCI+VG9rZW48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY2hfdG9rZW4iIHBsYWNlaG9sZGVyPSJUb2tlbiBaLUFQSSIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHgiPkNsaWVudCBUb2tlbjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjaF9jbGllbnQiIHBsYWNlaG9sZGVyPSJDbGllbnQgdG9rZW4gWi1BUEkiIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4Ij7wn5OKIExpbWl0ZSBkacOhcmlvIGRlIGVudmlvczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9ImNoX2RhaWx5X2xpbWl0IiB2YWx1ZT0iNTAiIG1pbj0iMSIgbWF4PSI1MDAiIHN0eWxlPSJ3aWR0aDoxMDAlIiB0aXRsZT0iTcOheGltbyBkZSBtZW5zYWdlbnMgcG9yIGRpYSBuZXN0ZSBjYW5hbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9InZtMl9hZGRfY2hhbm5lbCIgaWQ9InZtMkNoU3VibWl0IiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5Ij7inpUgQWRpY2lvbmFyIENhbmFsPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJ2bTJDaENhbmNlbEVkaXQiIGNsYXNzPSJidXR0b24iIHN0eWxlPSJtYXJnaW4tbGVmdDo4cHg7ZGlzcGxheTpub25lIiBvbmNsaWNrPSJ2bTJDaENhbmNlbEVkaXQoKSI+4pyWIENhbmNlbGFyPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPuKPuCBOb3ZvIGNhbmFsIGNvbWXDp2EgPHN0cm9uZz5wYXVzYWRvPC9zdHJvbmc+IOKAlCBuZW5odW1hIG1lbnNhZ2VtIGZsdWkgYXTDqSB2b2PDqiBjbGljYXIg4pa277iPIHBhcmEgYXRpdmFyLiBJc3NvIGV2aXRhIGZsb29kIGVtIG7Dum1lcm9zIHJlY8OpbS1jb25lY3RhZG9zLjwvcD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kZXRhaWxzPgogICAgICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICBmdW5jdGlvbiB2bTJDaEVkaXQoc2x1ZywgY2gpIHsKICAgICAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkNoRGV0YWlscycpOwogICAgICAgICAgICAgICAgZC5vcGVuID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDaFN1bW1hcnknKS50ZXh0Q29udGVudCA9ICfinI/vuI8gRWRpdGFyIGNhbmFsOiAnICsgKGNoLmxhYmVsIHx8IHNsdWcpOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkNoRWRpdEtleScpLnZhbHVlID0gc2x1ZzsKICAgICAgICAgICAgICAgIHZhciBmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkNoRm9ybScpOwogICAgICAgICAgICAgICAgZi5xdWVyeVNlbGVjdG9yKCdbbmFtZT0iY2hfdHlwZSJdJykudmFsdWUgICAgPSBjaC50eXBlICAgICB8fCAnemFwaSc7CiAgICAgICAgICAgICAgICBmLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSJjaF9zbHVnIl0nKS52YWx1ZSAgICA9IHNsdWc7CiAgICAgICAgICAgICAgICBmLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSJjaF9zbHVnIl0nKS5yZW1vdmVBdHRyaWJ1dGUoJ3JlcXVpcmVkJyk7IC8vIHNsdWcgcG9kZSBzZXIgaWd1YWwKICAgICAgICAgICAgICAgIGYucXVlcnlTZWxlY3RvcignW25hbWU9ImNoX2xhYmVsIl0nKS52YWx1ZSAgID0gY2gubGFiZWwgICAgfHwgJyc7CiAgICAgICAgICAgICAgICBmLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSJjaF9udW1iZXIiXScpLnZhbHVlICA9IGNoLm51bWJlciAgIHx8ICcnOwogICAgICAgICAgICAgICAgZi5xdWVyeVNlbGVjdG9yKCdbbmFtZT0iY2hfaW5zdGFuY2UiXScpLnZhbHVlPSBjaC5pbnN0YW5jZSB8fCAnJzsKICAgICAgICAgICAgICAgIGYucXVlcnlTZWxlY3RvcignW25hbWU9ImNoX3Rva2VuIl0nKS52YWx1ZSAgID0gY2gudG9rZW4gICAgfHwgJyc7CiAgICAgICAgICAgICAgICBmLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSJjaF9jbGllbnQiXScpLnZhbHVlICAgICAgPSBjaC5jbGllbnQgICAgICB8fCAnJzsKICAgICAgICAgICAgICAgIGYucXVlcnlTZWxlY3RvcignW25hbWU9ImNoX2RhaWx5X2xpbWl0Il0nKS52YWx1ZSA9IGNoLmRhaWx5X2xpbWl0IHx8IDUwOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkNoU3VibWl0JykudGV4dENvbnRlbnQgPSAn8J+SviBTYWx2YXIgYWx0ZXJhw6fDtWVzJzsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDaENhbmNlbEVkaXQnKS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CiAgICAgICAgICAgICAgICBkLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjonc21vb3RoJywgYmxvY2s6J25lYXJlc3QnfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gdm0yQ2hDYW5jZWxFZGl0KCkgewogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkNoRWRpdEtleScpLnZhbHVlID0gJyc7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQ2hGb3JtJykucmVzZXQoKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDaFN1bW1hcnknKS50ZXh0Q29udGVudCA9ICfinpUgQWRpY2lvbmFyIG5vdm8gY2FuYWwnOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkNoU3VibWl0JykudGV4dENvbnRlbnQgPSAn4p6VIEFkaWNpb25hciBDYW5hbCc7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQ2hDYW5jZWxFZGl0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDaERldGFpbHMnKS5vcGVuID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICAgICAgPD9waHAgLyog4pSA4pSAIFRlbXBsYXRlcyBXQUJBIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLyA/PgogICAgICAgIDxkaXYgaWQ9InZtMi13YWJhLXRwbHMiIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MjRweDttYXJnaW46MjhweCAwIj4KICAgICAgICAgICAgPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjAiPvCfk4sgVGVtcGxhdGVzIFdBQkEgQXByb3ZhZG9zPC9oMj4KICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5UZW1wbGF0ZXMgZGlzcG9uw612ZWlzIGVtIHRvZG9zIG9zIG3Ds2R1bG9zIHF1YW5kbyBjYW5hbCBXQUJBIGZvciBzZWxlY2lvbmFkby4gVGVtcGxhdGVzIHBhZHLDo28gbsOjbyBwb2RlbSBzZXIgcmVtb3ZpZG9zLjwvcD4KCiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICRkZWZhdWx0X3d0ID0gWwogICAgICAgICAgICAgICAgJ3ZtX3Bvc19qYW5lbGFfZDMnICAgICAgICAgICAgID0+ICdEKzEgcMOzcyBqYW5lbGEnLAogICAgICAgICAgICAgICAgJzQ4aF93YWJhXzRsb3o0cScgICAgICAgICAgICAgID0+ICdEKzEgYWx0ZXJuYXRpdm8nLAogICAgICAgICAgICAgICAgJzVkX3dhYmFfZ2c5MzlpJyAgICAgICAgICAgICAgID0+ICdEKzUvNycsCiAgICAgICAgICAgICAgICAnMTVkX3dhYmFfcWx3bGVrJyAgICAgICAgICAgICAgPT4gJ0QrMTUnLAogICAgICAgICAgICAgICAgJzMwZF93YWJhX2gydHVyaCcgICAgICAgICAgICAgID0+ICdEKzMwJywKICAgICAgICAgICAgICAgICdjYXJ0YW9wcmVzZW50ZScgICAgICAgICAgICAgICA9PiAnVmFsZSBQcmVzZW50ZScsCiAgICAgICAgICAgICAgICAnb2ZlcnRhX2RlX3JlY29ucXVpc3RhX3Z4dTA4MScgPT4gJ1JlZW5nYWphbWVudG8nLAogICAgICAgICAgICAgICAgJ3JlY3VwZXJhX2NhcnJpbmhvX3dvbycgICAgICAgID0+ICdXQSBSZWNvdmVyeScsCiAgICAgICAgICAgIF07CiAgICAgICAgICAgICRjdXN0b21fd3QgPSBnZXRfb3B0aW9uKCAndm0yX3dhYmFfdGVtcGxhdGVzJywgW10gKTsKICAgICAgICAgICAgaWYgKCBpc19zdHJpbmcoICRjdXN0b21fd3QgKSApICRjdXN0b21fd3QgPSBqc29uX2RlY29kZSggJGN1c3RvbV93dCwgdHJ1ZSApID86IFtdOwogICAgICAgICAgICAkbm9uY2VfZGVsX3d0ID0gd3BfY3JlYXRlX25vbmNlKCd2bTJfZGVsX3dhYmFfdHBsJyk7CiAgICAgICAgICAgID8+CgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OmF1dG8iPgogICAgICAgICAgICA8dGFibGUgY2xhc3M9IndpZGVmYXQgc3RyaXBlZCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweDttaW4td2lkdGg6NTAwcHgiPgogICAgICAgICAgICAgICAgPHRoZWFkPjx0cj4KICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjI2MHB4Ij5TbHVnIHTDqWNuaWNvPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+RGVzY3Jpw6fDo288L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTAwcHgiPlRpcG88L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6ODBweCI+PC90aD4KICAgICAgICAgICAgICAgIDwvdHI+PC90aGVhZD4KICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCAkZGVmYXVsdF93dCBhcyAkd3Rfc2x1ZyA9PiAkd3RfZGVzYyApIDogPz4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQ+PGNvZGUgc3R5bGU9ImZvbnQtc2l6ZToxMXB4Ij48P3BocCBlY2hvIGVzY19odG1sKCR3dF9zbHVnKTsgPz48L2NvZGU+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyBlc2NfaHRtbCgkd3RfZGVzYyk7ID8+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2U4ZjVlOTtjb2xvcjojMmU3ZDMyO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjExcHg7d2hpdGUtc3BhY2U6bm93cmFwIj7wn5SSIFBhZHLDo288L3NwYW4+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRjdXN0b21fd3QgYXMgJHd0X3NsdWcgPT4gJHd0X2Rlc2MgKSA6ID8+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlIHN0eWxlPSJmb250LXNpemU6MTFweCI+PD9waHAgZWNobyBlc2NfaHRtbCgkd3Rfc2x1Zyk7ID8+PC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHd0X2Rlc2MpOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNlM2YyZmQ7Y29sb3I6IzE1NjVjMDtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxMXB4O3doaXRlLXNwYWNlOm5vd3JhcCI+4pyoIEN1c3RvbTwvc3Bhbj48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCBhZG1pbl91cmwoICdhZG1pbi5waHA/cGFnZT12bTItc2V0dGluZ3Mmdm0yX2RlbF93YWJhX3RwbD0nIC4gJHd0X3NsdWcgLiAnJl93cG5vbmNlPScgLiAkbm9uY2VfZGVsX3d0ICkgKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJjb2xvcjojZTc0YzNjO2ZvbnQtc2l6ZToxMnB4O3doaXRlLXNwYWNlOm5vd3JhcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0icmV0dXJuIGNvbmZpcm0oJ1JlbW92ZXIgZXN0ZSB0ZW1wbGF0ZT8nKSI+8J+Xke+4jyBSZW1vdmVyPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRldGFpbHMgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij4KICAgICAgICAgICAgICAgIDxzdW1tYXJ5IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjtjb2xvcjojMDA3M2FhO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+4p6VIEFkaWNpb25hciB0ZW1wbGF0ZSBjdXN0b208L3N1bW1hcnk+CiAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJiYWNrZ3JvdW5kOiNmOWY5Zjk7cGFkZGluZzoxNnB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoxcHggc29saWQgI2VlZTttYXJnaW4tdG9wOjhweCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl93YWJhX3RwbF9ub25jZScpOyA/PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpmbGV4LWVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij5TbHVnIHTDqWNuaWNvPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0cGxfbmFtZVtdIiBwbGFjZWhvbGRlcj0ibm9tZV9kb190ZW1wbGF0ZV9hYmMiIHN0eWxlPSJ3aWR0aDoyMjBweDtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjEycHgiIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPkRlc2NyacOnw6NvIGFtaWfDoXZlbDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idHBsX2xhYmVsW10iIHBsYWNlaG9sZGVyPSJFeDogT2ZlcnRhIGVzcGVjaWFsIEQrNjAiIHN0eWxlPSJ3aWR0aDoyNDBweCIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0idm0yX3NhdmVfd2FiYV90cGxzIiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5Ij7inpUgQWRpY2lvbmFyPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPuKaoO+4jyBPIHRlbXBsYXRlIGRldmUgZXN0YXIgYXByb3ZhZG8gbmEgTWV0YSBhbnRlcyBkZSBjYWRhc3RyYXIgYXF1aS48L3A+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICA8L2Rpdj4KCiAgICA8P3BocAp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gV09PQ09NTUVSQ0UgSE9PS1MKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgovLyBIb29rIDE6IFRvZG9zIG9zIHBlZGlkb3Mg4oaSIEdydXBvIFZlbmRhcwphZGRfYWN0aW9uKCAnd29vY29tbWVyY2VfY2hlY2tvdXRfb3JkZXJfcHJvY2Vzc2VkJywgJ3ZtMl9ub3RpZnlfZ3J1cG9fdmVuZGFzJywgMjAsIDEgKTsKZnVuY3Rpb24gdm0yX25vdGlmeV9ncnVwb192ZW5kYXMoICRvcmRlcl9pZCApIHsKICAgIGlmICggZ2V0X29wdGlvbiggJ3ZtMl9raWxsX3N3aXRjaCcsICcwJyApID09PSAnMScgKSByZXR1cm47CiAgICBpZiAoIGdldF9vcHRpb24oICd2bTJfcGVkaWRvc192ZW5kYXNfZW5hYmxlZCcsICcxJyApICE9PSAnMScgKSByZXR1cm47CgogICAgJG9yZGVyID0gd2NfZ2V0X29yZGVyKCAkb3JkZXJfaWQgKTsKICAgIGlmICggISAkb3JkZXIgKSByZXR1cm47CgogICAgLy8gR3VhcmQgYW50aS1kdXBsaWNhdGEKICAgIGlmICggJG9yZGVyLT5nZXRfbWV0YSggJ192bTJfbm90aWZpZWRfdmVuZGFzJyApICkgcmV0dXJuOwogICAgJG9yZGVyLT51cGRhdGVfbWV0YV9kYXRhKCAnX3ZtMl9ub3RpZmllZF92ZW5kYXMnLCBnbWRhdGUoJ1ktbS1kIEg6aTpzJykgKTsKICAgICRvcmRlci0+c2F2ZSgpOwoKICAgICR2YXJzICAgID0gdm0yX2J1aWxkX29yZGVyX3ZhcnMoICRvcmRlciApOwogICAgJG1zZyAgICAgPSB2bTJfcmVwbGFjZV92YXJzKCBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfdmVuZGFzX21zZycsIHZtMl9kZWZhdWx0X21zZ192ZW5kYXMoKSApLCAkdmFycyApOwogICAgJGNoYW5uZWwgPSBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfdmVuZGFzX2NoYW5uZWwnLCAnemFwaV83NTUxJyApOwogICAgJGdyb3VwICAgPSBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfdmVuZGFzX2dyb3VwX2lkJywgJzEyMDM2MzQyNTc4NTM1ODc2NC1ncm91cCcgKTsKCiAgICB2bTJfc2VuZF96YXBpKCAkY2hhbm5lbCwgJGdyb3VwLCAkbXNnICk7Cn0KCi8vIEhvb2sgMjogUGVkaWRvIOKGkiBHcnVwbyBBZ2VuZGEgKHNpZ25pbmctcGVuZGluZywgY29udHJhY3Qtc2lnbmVkLCBwcm9jZXNzaW5nKQphZGRfYWN0aW9uKCAnd29vY29tbWVyY2Vfb3JkZXJfc3RhdHVzX3Byb2Nlc3NpbmcnLCAgICAgICd2bTJfbm90aWZ5X2dydXBvX2FnZW5kYScsIDIwLCAxICk7CmFkZF9hY3Rpb24oICd3b29jb21tZXJjZV9vcmRlcl9zdGF0dXNfc2lnbmluZy1wZW5kaW5nJywgJ3ZtMl9ub3RpZnlfZ3J1cG9fYWdlbmRhJywgMjAsIDEgKTsKYWRkX2FjdGlvbiggJ3dvb2NvbW1lcmNlX29yZGVyX3N0YXR1c19jb250cmFjdC1zaWduZWQnLCAndm0yX25vdGlmeV9ncnVwb19hZ2VuZGEnLCAyMCwgMSApOwpmdW5jdGlvbiB2bTJfbm90aWZ5X2dydXBvX2FnZW5kYSggJG9yZGVyX2lkICkgewogICAgaWYgKCBnZXRfb3B0aW9uKCAndm0yX2tpbGxfc3dpdGNoJywgJzAnICkgPT09ICcxJyApIHJldHVybjsKICAgIGlmICggZ2V0X29wdGlvbiggJ3ZtMl9wZWRpZG9zX2FnZW5kYV9lbmFibGVkJywgJzEnICkgIT09ICcxJyApIHJldHVybjsKCiAgICAkb3JkZXIgPSB3Y19nZXRfb3JkZXIoICRvcmRlcl9pZCApOwogICAgaWYgKCAhICRvcmRlciApIHJldHVybjsKCiAgICAvLyBHdWFyZCBhbnRpLWR1cGxpY2F0YSDigJQgc8OzIGVudmlhIDF4IHBvciBwZWRpZG8KICAgIGlmICggJG9yZGVyLT5nZXRfbWV0YSggJ192bTJfbm90aWZpZWRfYWdlbmRhJyApICkgcmV0dXJuOwogICAgJG9yZGVyLT51cGRhdGVfbWV0YV9kYXRhKCAnX3ZtMl9ub3RpZmllZF9hZ2VuZGEnLCBnbWRhdGUoJ1ktbS1kIEg6aTpzJykgKTsKICAgICRvcmRlci0+c2F2ZSgpOwoKICAgICR2YXJzICAgID0gdm0yX2J1aWxkX29yZGVyX3ZhcnMoICRvcmRlciApOwogICAgJG1zZyAgICAgPSB2bTJfcmVwbGFjZV92YXJzKCBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfYWdlbmRhX21zZycsIHZtMl9kZWZhdWx0X21zZ19hZ2VuZGEoKSApLCAkdmFycyApOwogICAgJGNoYW5uZWwgPSBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfYWdlbmRhX2NoYW5uZWwnLCAnemFwaV83NTUxJyApOwogICAgJGdyb3VwICAgPSBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfYWdlbmRhX2dyb3VwX2lkJywgJzEyMDM2MzQxOTE4MDIxNDQ4MS1ncm91cCcgKTsKCiAgICB2bTJfc2VuZF96YXBpKCAkY2hhbm5lbCwgJGdyb3VwLCAkbXNnICk7Cn0KCi8vIEhvb2sgMzogUGVkaWRvIOKGkiBDbGllbnRlIChXaGF0c0FwcCBkaXJldG8pCmFkZF9hY3Rpb24oICd3b29jb21tZXJjZV9vcmRlcl9zdGF0dXNfcHJvY2Vzc2luZycsICAgICAgJ3ZtMl9ub3RpZnlfY2xpZW50ZScsIDIwLCAxICk7CmFkZF9hY3Rpb24oICd3b29jb21tZXJjZV9vcmRlcl9zdGF0dXNfc2lnbmluZy1wZW5kaW5nJywgJ3ZtMl9ub3RpZnlfY2xpZW50ZScsIDIwLCAxICk7CmZ1bmN0aW9uIHZtMl9ub3RpZnlfY2xpZW50ZSggJG9yZGVyX2lkICkgewogICAgaWYgKCBnZXRfb3B0aW9uKCAndm0yX2tpbGxfc3dpdGNoJywgJzAnICkgPT09ICcxJyApIHJldHVybjsKICAgIGlmICggZ2V0X29wdGlvbiggJ3ZtMl9wZWRpZG9zX2NsaWVudGVfZW5hYmxlZCcsICcwJyApICE9PSAnMScgKSByZXR1cm47CgogICAgJG9yZGVyID0gd2NfZ2V0X29yZGVyKCAkb3JkZXJfaWQgKTsKICAgIGlmICggISAkb3JkZXIgKSByZXR1cm47CgogICAgLy8gR3VhcmQgYW50aS1kdXBsaWNhdGEg4oCUIHPDsyBlbnZpYSAxeCBwb3IgcGVkaWRvCiAgICBpZiAoICRvcmRlci0+Z2V0X21ldGEoICdfdm0yX25vdGlmaWVkX2NsaWVudGUnICkgKSByZXR1cm47CiAgICAkb3JkZXItPnVwZGF0ZV9tZXRhX2RhdGEoICdfdm0yX25vdGlmaWVkX2NsaWVudGUnLCBnbWRhdGUoJ1ktbS1kIEg6aTpzJykgKTsKICAgICRvcmRlci0+c2F2ZSgpOwoKICAgICR2YXJzICAgID0gdm0yX2J1aWxkX29yZGVyX3ZhcnMoICRvcmRlciApOwogICAgJHRlbGVmb25lID0gJHZhcnNbJ3t0ZWxlZm9uZX0nXTsKICAgIGlmICggISAkdGVsZWZvbmUgfHwgc3RybGVuKCAkdGVsZWZvbmUgKSA8IDEwICkgcmV0dXJuOwoKICAgICRtc2cgICAgID0gdm0yX3JlcGxhY2VfdmFycyggZ2V0X29wdGlvbiggJ3ZtMl9wZWRpZG9zX2NsaWVudGVfbXNnJywgdm0yX2RlZmF1bHRfbXNnX2NsaWVudGUoKSApLCAkdmFycyApOwogICAgJGNoYW5uZWwgPSBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfY2xpZW50ZV9jaGFubmVsJywgJ3phcGlfMTg4NicgKTsKCiAgICB2bTJfc2VuZF96YXBpKCAkY2hhbm5lbCwgJHRlbGVmb25lLCAkbXNnICk7CgogICAgLy8g4pSA4pSAIEPDs3BpYSBhbyBncnVwbyBkZSB2ZW5kYXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICBpZiAoIGdldF9vcHRpb24oICd2bTJfcGVkaWRvc19jbGllbnRlX2NvcHlfdmVuZGFzJywgJzAnICkgPT09ICcxJyApIHsKICAgICAgICAkY29weV9tc2cgID0gIvCfk4sgKkNvbXVuaWNhZG8gZW52aWFkbyBhbyBjbGllbnRlKlxuXG4iOwogICAgICAgICRjb3B5X21zZyAuPSAiKkNsaWVudGU6KiB7bm9tZX1cbiI7CiAgICAgICAgJGNvcHlfbXNnIC49ICIqUGVkaWRvOiogI3tudW1lcm99XG5cbiI7CiAgICAgICAgJGNvcHlfbXNnIC49ICLinIUgTWVuc2FnZW0gZW52aWFkYSBubyBXaGF0c0FwcDpcbiI7CiAgICAgICAgJGNvcHlfbXNnIC49ICLilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiI7CiAgICAgICAgJGNvcHlfbXNnIC49ICRtc2c7CiAgICAgICAgJGNvcHlfY2hhbm5lbCA9IGdldF9vcHRpb24oICd2bTJfcGVkaWRvc192ZW5kYXNfY2hhbm5lbCcsICd6YXBpXzc1NTEnICk7CiAgICAgICAgJGNvcHlfZ3JvdXAgICA9IGdldF9vcHRpb24oICd2bTJfcGVkaWRvc192ZW5kYXNfZ3JvdXBfaWQnLCAnMTIwMzYzNDI1Nzg1MzU4NzY0LWdyb3VwJyApOwogICAgICAgIHZtMl9zZW5kX3phcGkoICRjb3B5X2NoYW5uZWwsICRjb3B5X2dyb3VwLCB2bTJfcmVwbGFjZV92YXJzKCAkY29weV9tc2csICR2YXJzICkgKTsKICAgIH0KfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEJVSUxEIE9SREVSIFZBUklBQkxFUwovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2J1aWxkX29yZGVyX3ZhcnMoICRvcmRlciApIHsKICAgICRvcmRlcl9pZCA9ICRvcmRlci0+Z2V0X2lkKCk7CgogICAgLy8gTm9tZSBlIHRlbGVmb25lCiAgICAkbm9tZSAgICAgPSB0cmltKCAkb3JkZXItPmdldF9iaWxsaW5nX2ZpcnN0X25hbWUoKSAuICcgJyAuICRvcmRlci0+Z2V0X2JpbGxpbmdfbGFzdF9uYW1lKCkgKTsKICAgICR0ZWxlZm9uZSA9IHByZWdfcmVwbGFjZSggJy9cRC8nLCAnJywgJG9yZGVyLT5nZXRfYmlsbGluZ19waG9uZSgpICk7CgogICAgLy8gTm9ybWFsaXphciBEREkg4oCUIGFkaWNpb25hciA1NSBzZSBuZWNlc3PDoXJpbwogICAgaWYgKCBzdHJsZW4oICR0ZWxlZm9uZSApIDw9IDExICkgewogICAgICAgICR0ZWxlZm9uZSA9ICc1NScgLiAkdGVsZWZvbmU7CiAgICB9CiAgICAvLyBGaXggZHVwbG8gRERJICg1NTU1WFhYWFhYWFhYWFgpCiAgICB3aGlsZSAoIHN0cmxlbiggJHRlbGVmb25lICkgPiAxMyAmJiBzdHJwb3MoICR0ZWxlZm9uZSwgJzU1NTUnICkgPT09IDAgKSB7CiAgICAgICAgJHRlbGVmb25lID0gJzU1JyAuIHN1YnN0ciggJHRlbGVmb25lLCA0ICk7CiAgICB9CgogICAgLy8gUHJvZHV0b3MKICAgICRwcm9kdXRvcyA9IFtdOwogICAgZm9yZWFjaCAoICRvcmRlci0+Z2V0X2l0ZW1zKCkgYXMgJGl0ZW0gKSB7CiAgICAgICAgJHByb2R1dG9zW10gPSAkaXRlbS0+Z2V0X25hbWUoKTsKICAgIH0KCiAgICAvLyBZSVRIIEJvb2tpbmcg4oCUIG1ldGEgZXN0w6EgZW0geWl0aF9ib29raW5nX2RhdGEgY29tbyBhcnJheSB7ZnJvbSwgdG8sIGR1cmF0aW9ufQogICAgJGhvcmFfaW5pY2lvICA9ICfigJQnOwogICAgJGhvcmFfdGVybWlubyA9ICfigJQnOwogICAgJGR1cmFjYW8gICAgICA9ICfigJQnOwogICAgZm9yZWFjaCAoICRvcmRlci0+Z2V0X2l0ZW1zKCkgYXMgJGl0ZW0gKSB7CiAgICAgICAgLy8gVGVudGEgeWl0aF9ib29raW5nX2RhdGEgKGFycmF5IGFuaW5oYWRvKQogICAgICAgICRiZCA9ICRpdGVtLT5nZXRfbWV0YSggJ3lpdGhfYm9va2luZ19kYXRhJyApOwogICAgICAgIGlmICggaXNfYXJyYXkoICRiZCApICYmICEgZW1wdHkoICRiZFsnZnJvbSddICkgKSB7CiAgICAgICAgICAgICRmcm9tID0gJGJkWydmcm9tJ107CiAgICAgICAgICAgICR0byAgID0gaXNzZXQoICRiZFsndG8nXSApID8gJGJkWyd0byddIDogMDsKICAgICAgICAgICAgJHR6ICAgICAgICAgICA9IG5ldyBEYXRlVGltZVpvbmUoICdBbWVyaWNhL1Nhb19QYXVsbycgKTsKICAgICAgICAgICAgJGR0X2Zyb20gICAgICA9IG5ldyBEYXRlVGltZSggJ0AnIC4gJGZyb20gKTsKICAgICAgICAgICAgJGR0X2Zyb20tPnNldFRpbWV6b25lKCAkdHogKTsKICAgICAgICAgICAgJGhvcmFfaW5pY2lvICA9ICRkdF9mcm9tLT5mb3JtYXQoICdIOmknICk7CiAgICAgICAgICAgIGlmICggJHRvICkgewogICAgICAgICAgICAgICAgJGR0X3RvID0gbmV3IERhdGVUaW1lKCAnQCcgLiAkdG8gKTsKICAgICAgICAgICAgICAgICRkdF90by0+c2V0VGltZXpvbmUoICR0eiApOwogICAgICAgICAgICAgICAgJGhvcmFfdGVybWlubyA9ICRkdF90by0+Zm9ybWF0KCAnSDppJyApOwogICAgICAgICAgICAgICAgJGR1cmFjYW8gICAgICA9IHJvdW5kKCAoICR0byAtICRmcm9tICkgLyA2MCApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBGYWxsYmFjazogbWV0YSBkaXJldG8gZnJvbS90byAobGVnYWRvKQogICAgICAgICRmcm9tID0gJGl0ZW0tPmdldF9tZXRhKCAnZnJvbScgKTsKICAgICAgICAkdG8gICA9ICRpdGVtLT5nZXRfbWV0YSggJ3RvJyApOwogICAgICAgIGlmICggJGZyb20gJiYgJHRvICkgewogICAgICAgICAgICAkdHogICAgICAgICAgID0gbmV3IERhdGVUaW1lWm9uZSggJ0FtZXJpY2EvU2FvX1BhdWxvJyApOwogICAgICAgICAgICAkZHRfZnJvbSAgICAgID0gbmV3IERhdGVUaW1lKCAnQCcgLiAkZnJvbSApOwogICAgICAgICAgICAkZHRfdG8gICAgICAgID0gbmV3IERhdGVUaW1lKCAnQCcgLiAkdG8gKTsKICAgICAgICAgICAgJGR0X2Zyb20tPnNldFRpbWV6b25lKCAkdHogKTsKICAgICAgICAgICAgJGR0X3RvLT5zZXRUaW1lem9uZSggJHR6ICk7CiAgICAgICAgICAgICRob3JhX2luaWNpbyAgPSAkZHRfZnJvbS0+Zm9ybWF0KCAnSDppJyApOwogICAgICAgICAgICAkaG9yYV90ZXJtaW5vID0gJGR0X3RvLT5mb3JtYXQoICdIOmknICk7CiAgICAgICAgICAgICRkdXJhY2FvICAgICAgPSByb3VuZCggKCAkdG8gLSAkZnJvbSApIC8gNjAgKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIC8vIE1ldGEgZmllbGRzIGRvIGNoZWNrb3V0CiAgICAkZXZlbnRfZGF0ZV9yYXcgPSAkb3JkZXItPmdldF9tZXRhKCAnX2JpbGxpbmdfZXZlbnRfZGF0ZScgKTsKICAgIC8vIEZhbGxiYWNrOiBleHRyYWlyIGRhdGEgZG8gdGltZXN0YW1wIFlJVEggQm9va2luZyBxdWFuZG8gX2JpbGxpbmdfZXZlbnRfZGF0ZSBlc3RpdmVyIHZhemlvCiAgICBpZiAoICEgJGV2ZW50X2RhdGVfcmF3ICYmICEgZW1wdHkoICRmcm9tICkgKSB7CiAgICAgICAgJHR6X2RhdGUgICAgICAgID0gbmV3IERhdGVUaW1lWm9uZSggJ0FtZXJpY2EvU2FvX1BhdWxvJyApOwogICAgICAgICRkdF9kYXRlICAgICAgICA9IG5ldyBEYXRlVGltZSggJ0AnIC4gaW50dmFsKCAkZnJvbSApICk7CiAgICAgICAgJGR0X2RhdGUtPnNldFRpbWV6b25lKCAkdHpfZGF0ZSApOwogICAgICAgICRldmVudF9kYXRlX3JhdyA9ICRkdF9kYXRlLT5mb3JtYXQoICdkL20vWScgKTsKICAgIH0KICAgICRkYXRhX2V2ZW50byAgICA9IHZtMl9mb3JtYXRfZXZlbnRfZGF0ZSggJGV2ZW50X2RhdGVfcmF3ICk7CiAgICAkdGlwb19ldmVudG8gICAgPSAkb3JkZXItPmdldF9tZXRhKCAnX2JpbGxpbmdfdGlwb19ldmVudG8nICkgICA/OiAn4oCUJzsKICAgICRob21lbmFnZWFkbyAgICA9ICRvcmRlci0+Z2V0X21ldGEoICdfYmlsbGluZ19ob21lbmFnZWFkbycgKSAgID86ICfigJQnOwogICAgJGFzc2Vzc29yICAgICAgID0gJG9yZGVyLT5nZXRfbWV0YSggJ19iaWxsaW5nX2Fzc2Vzc29yJyApICAgICAgPzogJ+KAlCc7CgogICAgLy8gRW5kZXJlw6dvIGRvIGV2ZW50byAoc2hpcHBpbmcpCiAgICAkZW5kZXJlY28gID0gJG9yZGVyLT5nZXRfc2hpcHBpbmdfYWRkcmVzc18xKCk7CiAgICAkZW5kZXJlY28yID0gJG9yZGVyLT5nZXRfc2hpcHBpbmdfYWRkcmVzc18yKCk7IC8vIG5vbWUgZG8gYnVmZmV0L2xvY2FsCiAgICAvLyBNb250YSBlbmRlcmXDp28gY29tcGxldG8gKGFkZHIxICsgYWRkcjIgc2UgZXhpc3RpcikKICAgICRlbmRlcmVjb19mdWxsID0gJGVuZGVyZWNvIC4gKCAkZW5kZXJlY28yID8gJywgJyAuICRlbmRlcmVjbzIgOiAnJyApOwogICAgJGJhaXJybyAgICA9ICRvcmRlci0+Z2V0X21ldGEoICdfc2hpcHBpbmdfbmVpZ2hib3Job29kJyApID86ICRvcmRlci0+Z2V0X21ldGEoICdzaGlwcGluZ19uZWlnaGJvcmhvb2QnICkgPzogJyc7CiAgICAkY2lkYWRlICAgID0gJG9yZGVyLT5nZXRfc2hpcHBpbmdfY2l0eSgpOwogICAgJGVzdGFkbyAgICA9ICRvcmRlci0+Z2V0X3NoaXBwaW5nX3N0YXRlKCk7CiAgICAvLyBNb250YSBsb2NhbCBjb21wbGV0bzogQmFpcnJvIC0gQ2lkYWRlL0VzdGFkbwogICAgJGxvY2FsX2V2ZW50byA9IHRyaW0oICggJGJhaXJybyA/ICRiYWlycm8gLiAnIC0gJyA6ICcnICkgLiAkY2lkYWRlIC4gJy8nIC4gJGVzdGFkbyApOwoKICAgIC8vIENsaWNrU2lnbgogICAgJGNvbnRyYXRvID0gdm0yX2dldF9jbGlja3NpZ25fc3RhdHVzKCAkb3JkZXJfaWQgKTsKCiAgICAvLyBVVE0KICAgICR1dG1fc291cmNlICAgPSAkb3JkZXItPmdldF9tZXRhKCAnX29yZGVyX3V0bV9zb3VyY2UnICkKICAgICAgICAgICAgICAgID86ICRvcmRlci0+Z2V0X21ldGEoICdfd2Nfb3JkZXJfYXR0cmlidXRpb25fdXRtX3NvdXJjZScgKQogICAgICAgICAgICAgICAgPzogJ+KAlCc7CiAgICAkdXRtX2NhbXBhaWduID0gJG9yZGVyLT5nZXRfbWV0YSggJ19vcmRlcl91dG1fY2FtcGFpZ24nICkKICAgICAgICAgICAgICAgID86ICRvcmRlci0+Z2V0X21ldGEoICdfd2Nfb3JkZXJfYXR0cmlidXRpb25fdXRtX2NhbXBhaWduJyApCiAgICAgICAgICAgICAgICA/OiAn4oCUJzsKCiAgICByZXR1cm4gWwogICAgICAgICd7bnVtZXJvfScgICAgICAgPT4gJG9yZGVyX2lkLAogICAgICAgICd7bm9tZX0nICAgICAgICAgPT4gJG5vbWUsCiAgICAgICAgJ3t0ZWxlZm9uZX0nICAgICA9PiAkdGVsZWZvbmUsCiAgICAgICAgJ3tlbWFpbH0nICAgICAgICA9PiAkb3JkZXItPmdldF9iaWxsaW5nX2VtYWlsKCksCiAgICAgICAgJ3t2YWxvcn0nICAgICAgICA9PiBudW1iZXJfZm9ybWF0KCAkb3JkZXItPmdldF90b3RhbCgpLCAyLCAnLCcsICcuJyApLAogICAgICAgICd7cGd0b30nICAgICAgICAgPT4gJG9yZGVyLT5nZXRfcGF5bWVudF9tZXRob2RfdGl0bGUoKSwKICAgICAgICAne2F0cmFjYW99JyAgICAgID0+IGltcGxvZGUoICcsICcsICRwcm9kdXRvcyApLAogICAgICAgICd7ZGF0YV9ldmVudG99JyAgPT4gJGRhdGFfZXZlbnRvLAogICAgICAgICd7dGlwb19ldmVudG99JyAgPT4gJHRpcG9fZXZlbnRvLAogICAgICAgICd7aG9tZW5hZ2VhZG99JyAgPT4gJGhvbWVuYWdlYWRvLAogICAgICAgICd7YXNzZXNzb3J9JyAgICAgPT4gJGFzc2Vzc29yLAogICAgICAgICd7ZW5kZXJlY299JyAgICAgPT4gJGVuZGVyZWNvX2Z1bGwgPzogJGVuZGVyZWNvID86ICfigJQnLAogICAgICAgICd7ZW5kZXJlY28yfScgICAgPT4gJGVuZGVyZWNvMiA/OiAnJywKICAgICAgICAne2JhaXJyb30nICAgICAgID0+ICRiYWlycm8gPzogJ+KAlCcsCiAgICAgICAgJ3tjaWRhZGV9JyAgICAgICA9PiAkY2lkYWRlID86ICfigJQnLAogICAgICAgICd7ZXN0YWRvfScgICAgICAgPT4gJGVzdGFkbyA/OiAn4oCUJywKICAgICAgICAne2xvY2FsX2V2ZW50b30nID0+ICRsb2NhbF9ldmVudG8gPzogJ+KAlCcsCiAgICAgICAgJ3tob3JhX2luaWNpb30nICA9PiAkaG9yYV9pbmljaW8sCiAgICAgICAgJ3tob3JhX3Rlcm1pbm99JyA9PiAkaG9yYV90ZXJtaW5vLAogICAgICAgICd7ZHVyYWNhb30nICAgICAgPT4gJGR1cmFjYW8sCiAgICAgICAgJ3tvYnN9JyAgICAgICAgICA9PiAkb3JkZXItPmdldF9jdXN0b21lcl9ub3RlKCkgPzogJ+KAlCcsCiAgICAgICAgJ3tjb250cmF0b30nICAgICA9PiAkY29udHJhdG8sCiAgICAgICAgJ3t1dG1fc291cmNlfScgICA9PiAkdXRtX3NvdXJjZSwKICAgICAgICAne3V0bV9jYW1wYWlnbn0nID0+ICR1dG1fY2FtcGFpZ24sCiAgICAgICAgJ3tsaW5rX2FkbWlufScgICA9PiBhZG1pbl91cmwoICJwb3N0LnBocD9wb3N0PXskb3JkZXJfaWR9JmFjdGlvbj1lZGl0IiApLAogICAgXTsKfQoKZnVuY3Rpb24gdm0yX2Zvcm1hdF9ldmVudF9kYXRlKCAkcmF3ICkgewogICAgaWYgKCAhICRyYXcgKSByZXR1cm4gJ+KAlCc7CiAgICAvLyBERE1NWVlZWSDihpIgREQvTU0vWVlZWQogICAgaWYgKCBwcmVnX21hdGNoKCAnL14oXGR7Mn0pKFxkezJ9KShcZHs0fSkkLycsICRyYXcsICRtICkgKSB7CiAgICAgICAgcmV0dXJuICJ7JG1bMV19L3skbVsyXX0veyRtWzNdfSI7CiAgICB9CiAgICAvLyBERC9NTS9ZWSDihpIgREQvTU0vMjBZWQogICAgaWYgKCBwcmVnX21hdGNoKCAnL14oXGR7Mn0pXC8oXGR7Mn0pXC8oXGR7Mn0pJC8nLCAkcmF3LCAkbSApICkgewogICAgICAgIHJldHVybiAieyRtWzFdfS97JG1bMl19LzIweyRtWzNdfSI7CiAgICB9CiAgICByZXR1cm4gJHJhdzsKfQoKZnVuY3Rpb24gdm0yX2dldF9jbGlja3NpZ25fc3RhdHVzKCAkb3JkZXJfaWQgKSB7CiAgICAkb3JkZXIgPSB3Y19nZXRfb3JkZXIoICRvcmRlcl9pZCApOwogICAgaWYgKCAhICRvcmRlciApIHJldHVybiAn4oCUJzsKICAgICRzdGF0dXNlcyA9IFtdOwogICAgLy8gVXNhIGdldF9tZXRhX2RhdGEoKSBwYXJhIGNvbXBhdGliaWxpZGFkZSBjb20gSFBPUwogICAgZm9yZWFjaCAoICRvcmRlci0+Z2V0X21ldGFfZGF0YSgpIGFzICRtZXRhICkgewogICAgICAgICRkYXRhID0gJG1ldGEtPmdldF9kYXRhKCk7CiAgICAgICAgaWYgKCBzdHJwb3MoICRkYXRhWydrZXknXSwgJ19jbGlja3NpZ25fc3RhdHVzJyApICE9PSBmYWxzZSApIHsKICAgICAgICAgICAgJHN0YXR1c2VzW10gPSBzdHJ0b2xvd2VyKCAkZGF0YVsndmFsdWUnXSApOwogICAgICAgIH0KICAgIH0KICAgIC8vIEZhbGxiYWNrOiBnZXRfcG9zdF9tZXRhIHBhcmEgbG9qYXMgc2VtIEhQT1MKICAgIGlmICggZW1wdHkoICRzdGF0dXNlcyApICkgewogICAgICAgICRyYXcgPSBnZXRfcG9zdF9tZXRhKCAkb3JkZXJfaWQsICdfY2xpY2tzaWduX3N0YXR1cycsIGZhbHNlICk7CiAgICAgICAgZm9yZWFjaCAoIChhcnJheSkgJHJhdyBhcyAkdiApIHsKICAgICAgICAgICAgJHN0YXR1c2VzW10gPSBzdHJ0b2xvd2VyKCAkdiApOwogICAgICAgIH0KICAgIH0KICAgIGlmICggZW1wdHkoICRzdGF0dXNlcyApICkgcmV0dXJuICfigJQnOwogICAgJHNpZ25lZF92YWx1ZXMgPSBbICdzaWduZWQnLCAnZmluYWxpemVkJywgJ2ZpbmFsaXphZG8nLCAnY29tcGxldGVkJywgJ2ZpbmlzaGVkJyBdOwogICAgZm9yZWFjaCAoICRzaWduZWRfdmFsdWVzIGFzICRzdiApIHsKICAgICAgICBpZiAoIGluX2FycmF5KCAkc3YsICRzdGF0dXNlcywgdHJ1ZSApICkgcmV0dXJuICfinIUgQ29udHJhdG8gYXNzaW5hZG8nOwogICAgfQogICAgaWYgKCAhIGVtcHR5KCAkc3RhdHVzZXMgKSApIHJldHVybiAn4o+zIEFndWFyZGFuZG8gYXNzaW5hdHVyYSc7CiAgICByZXR1cm4gJ+KAlCc7Cn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBSRVBMQUNFIFZBUlMKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9yZXBsYWNlX3ZhcnMoICRtc2csICR2YXJzICkgewogICAgcmV0dXJuIHN0cl9yZXBsYWNlKCBhcnJheV9rZXlzKCAkdmFycyApLCBhcnJheV92YWx1ZXMoICR2YXJzICksICRtc2cgKTsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFNFTkQgVklBIFotQVBJCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfc2VuZF96YXBpKCAkY2hhbm5lbF9rZXksICRwaG9uZSwgJG1lc3NhZ2UgKSB7CiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgIGlmICggISBpc3NldCggJGNoYW5uZWxzWyAkY2hhbm5lbF9rZXkgXSApICkgewogICAgICAgIHZtMl9sb2coICJDYW5hbCBuw6NvIGVuY29udHJhZG86IHskY2hhbm5lbF9rZXl9IiwgJ2Vycm9yJyApOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgICRjaCAgPSAkY2hhbm5lbHNbICRjaGFubmVsX2tleSBdOwogICAgJHVybCA9ICJodHRwczovL2FwaS56LWFwaS5pby9pbnN0YW5jZXMveyRjaFsnaW5zdGFuY2UnXX0vdG9rZW4veyRjaFsndG9rZW4nXX0vc2VuZC10ZXh0IjsKCiAgICAkcmVzcG9uc2UgPSB3cF9yZW1vdGVfcG9zdCggJHVybCwgWwogICAgICAgICdoZWFkZXJzJyA9PiBbCiAgICAgICAgICAgICdDb250ZW50LVR5cGUnID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgJ0NsaWVudC1Ub2tlbicgPT4gVk0yX1pBUElfQ0xJRU5ULAogICAgICAgIF0sCiAgICAgICAgJ2JvZHknICAgID0+IHdwX2pzb25fZW5jb2RlKCBbICdwaG9uZScgPT4gJHBob25lLCAnbWVzc2FnZScgPT4gJG1lc3NhZ2UgXSApLAogICAgICAgICd0aW1lb3V0JyA9PiAxNSwKICAgIF0gKTsKCiAgICBpZiAoIGlzX3dwX2Vycm9yKCAkcmVzcG9uc2UgKSApIHsKICAgICAgICB2bTJfbG9nKCAiWi1BUEkgZXJybyBbeyRjaGFubmVsX2tleX3ihpJ7JHBob25lfV06ICIgLiAkcmVzcG9uc2UtPmdldF9lcnJvcl9tZXNzYWdlKCksICdlcnJvcicgKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgJGNvZGUgPSB3cF9yZW1vdGVfcmV0cmlldmVfcmVzcG9uc2VfY29kZSggJHJlc3BvbnNlICk7CiAgICAkYm9keSA9IHdwX3JlbW90ZV9yZXRyaWV2ZV9ib2R5KCAkcmVzcG9uc2UgKTsKICAgIHZtMl9sb2coICJaLUFQSSBbeyRjaGFubmVsX2tleX3ihpJ7JHBob25lfV0gSFRUUCB7JGNvZGV9OiB7JGJvZHl9IiwgJGNvZGUgPT09IDIwMCA/ICdpbmZvJyA6ICdlcnJvcicgKTsKICAgIHJldHVybiAkY29kZSA9PT0gMjAwOwp9CgoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEhFTFBFUiDigJQgU0VORCBXQUJBIChNZXRhIEdyYXBoIEFQSSB2aWEgcG9vbCBkaW7Dom1pY28pCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfc2VuZF93YWJhKCAkY2hhbm5lbF9rZXksICRwaG9uZSwgJHRlbXBsYXRlX25hbWUsICRjb21wb25lbnRzID0gW10gKSB7CiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgIGlmICggISBpc3NldCggJGNoYW5uZWxzWyAkY2hhbm5lbF9rZXkgXSApICkgewogICAgICAgIHZtMl9sb2coICJDYW5hbCBXQUJBIG7Do28gZW5jb250cmFkbzogeyRjaGFubmVsX2tleX0iLCAnZXJyb3InICk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgJGNoICAgICAgID0gJGNoYW5uZWxzWyAkY2hhbm5lbF9rZXkgXTsKICAgICRwaG9uZV9pZCA9ICRjaFsnaW5zdGFuY2UnXSA/PyAnJzsgIC8vIHBhcmEgV0FCQTogUGhvbmUgTnVtYmVyIElEIChjYW1wbyBpbnN0YW5jZSkKICAgICR0b2tlbiAgICA9ICRjaFsndG9rZW4nXSAgICA/PyAnJzsKCiAgICBpZiAoICEgJHBob25lX2lkIHx8ICEgJHRva2VuICkgewogICAgICAgIHZtMl9sb2coICJXQUJBIHskY2hhbm5lbF9rZXl9OiBwaG9uZV9pZCBvdSB0b2tlbiBuw6NvIGNvbmZpZ3VyYWRvIiwgJ2Vycm9yJyApOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAkYm9keSA9IHdwX2pzb25fZW5jb2RlKCBbCiAgICAgICAgJ21lc3NhZ2luZ19wcm9kdWN0JyA9PiAnd2hhdHNhcHAnLAogICAgICAgICd0bycgICAgICAgICAgICAgICAgPT4gJHBob25lLAogICAgICAgICd0eXBlJyAgICAgICAgICAgICAgPT4gJ3RlbXBsYXRlJywKICAgICAgICAndGVtcGxhdGUnICAgICAgICAgID0+IFsKICAgICAgICAgICAgJ25hbWUnICAgICAgID0+ICR0ZW1wbGF0ZV9uYW1lLAogICAgICAgICAgICAnbGFuZ3VhZ2UnICAgPT4gWyAnY29kZScgPT4gJ3B0X0JSJyBdLAogICAgICAgICAgICAnY29tcG9uZW50cycgPT4gJGNvbXBvbmVudHMsCiAgICAgICAgXSwKICAgIF0gKTsKCiAgICAkdXJsICAgICAgPSAiaHR0cHM6Ly9ncmFwaC5mYWNlYm9vay5jb20vdjIxLjAveyRwaG9uZV9pZH0vbWVzc2FnZXMiOwogICAgJHJlc3BvbnNlID0gd3BfcmVtb3RlX3Bvc3QoICR1cmwsIFsKICAgICAgICAnaGVhZGVycycgPT4gWwogICAgICAgICAgICAnQXV0aG9yaXphdGlvbicgPT4gJ0JlYXJlciAnIC4gJHRva2VuLAogICAgICAgICAgICAnQ29udGVudC1UeXBlJyAgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgIF0sCiAgICAgICAgJ2JvZHknICAgID0+ICRib2R5LAogICAgICAgICd0aW1lb3V0JyA9PiAxNSwKICAgIF0gKTsKCiAgICBpZiAoIGlzX3dwX2Vycm9yKCAkcmVzcG9uc2UgKSApIHsKICAgICAgICB2bTJfbG9nKCAiV0FCQSBlcnJvIFt7JGNoYW5uZWxfa2V5feKGknskcGhvbmV9XTogIiAuICRyZXNwb25zZS0+Z2V0X2Vycm9yX21lc3NhZ2UoKSwgJ2Vycm9yJyApOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAkY29kZSAgICAgID0gd3BfcmVtb3RlX3JldHJpZXZlX3Jlc3BvbnNlX2NvZGUoICRyZXNwb25zZSApOwogICAgJGJvZHlfcmVzcCA9IHdwX3JlbW90ZV9yZXRyaWV2ZV9ib2R5KCAkcmVzcG9uc2UgKTsKICAgICRzdWNjZXNzICAgPSAoICRjb2RlID09PSAyMDAgKTsKICAgIHZtMl9sb2coICJXQUJBIFt7JGNoYW5uZWxfa2V5feKGknskcGhvbmV9XSBIVFRQIHskY29kZX06IHskYm9keV9yZXNwfSIsICRzdWNjZXNzID8gJ2luZm8nIDogJ2Vycm9yJyApOwogICAgcmV0dXJuIFsgJ29rJyA9PiAkc3VjY2VzcywgJ2NvZGUnID0+ICRjb2RlLCAnYm9keScgPT4gJGJvZHlfcmVzcCBdOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gSEVMUEVSIOKAlCBGT1JNQVRBUiBURUxFRk9ORSAocmVtb3ZlIERESSA1NSBkdXBsbykKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9mb3JtYXRfcGhvbmUoICRyYXcgKSB7CiAgICAkcGhvbmUgPSBwcmVnX3JlcGxhY2UoICcvXEQvJywgJycsICRyYXcgKTsKICAgIC8vIFJlbW92ZSBEREkgNTUgZHVwbGljYWRvOiA1NTU1MTI5NzQxMDcwIOKGkiA1NTExOTQxMDcwCiAgICBpZiAoIHN0cmxlbiggJHBob25lICkgPj0gMTMgJiYgc3Vic3RyKCAkcGhvbmUsIDAsIDQgKSA9PT0gJzU1NTUnICkgewogICAgICAgICRwaG9uZSA9ICc1NScgLiBzdWJzdHIoICRwaG9uZSwgNCApOwogICAgfQogICAgLy8gQWRpY2lvbmEgRERJIDU1IHNlIGF1c2VudGUKICAgIGlmICggc3RybGVuKCAkcGhvbmUgKSA+PSAxMCAmJiBzdHJsZW4oICRwaG9uZSApIDw9IDExICkgewogICAgICAgICRwaG9uZSA9ICc1NScgLiAkcGhvbmU7CiAgICB9CiAgICByZXR1cm4gJHBob25lOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gSEVMUEVSIOKAlCBEQVRBIERPIEVWRU5UTyDihpIgVElNRVNUQU1QCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfZXZlbnRfZGF0ZV90b190cyggJHJhdyApIHsKICAgIGlmICggISAkcmF3ICkgcmV0dXJuIDA7CiAgICAvLyBERE1NWVlZWQogICAgaWYgKCBwcmVnX21hdGNoKCAnL14oXGR7Mn0pKFxkezJ9KShcZHs0fSkkLycsICRyYXcsICRtICkgKSB7CiAgICAgICAgcmV0dXJuIG1rdGltZSggMTIsIDAsIDAsIGludHZhbCgkbVsyXSksIGludHZhbCgkbVsxXSksIGludHZhbCgkbVszXSkgKTsKICAgIH0KICAgIC8vIEREL01NL1lZCiAgICBpZiAoIHByZWdfbWF0Y2goICcvXihcZHsyfSlcLyhcZHsyfSlcLyhcZHsyfSkkLycsICRyYXcsICRtICkgKSB7CiAgICAgICAgcmV0dXJuIG1rdGltZSggMTIsIDAsIDAsIGludHZhbCgkbVsyXSksIGludHZhbCgkbVsxXSksIDIwMDAgKyBpbnR2YWwoJG1bM10pICk7CiAgICB9CiAgICAvLyBERC9NTS9ZWVlZCiAgICBpZiAoIHByZWdfbWF0Y2goICcvXihcZHsyfSlcLyhcZHsyfSlcLyhcZHs0fSkkLycsICRyYXcsICRtICkgKSB7CiAgICAgICAgcmV0dXJuIG1rdGltZSggMTIsIDAsIDAsIGludHZhbCgkbVsyXSksIGludHZhbCgkbVsxXSksIGludHZhbCgkbVszXSkgKTsKICAgIH0KICAgIHJldHVybiAwOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gQUdFTkRBIFBBR0UKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8qKgogKiBQYXJzZSBpbmxpbmUgZG8gYmxvYiBkYSBjb2wgQyBkbyBHU2hlZXRzLgogKiBVc2FkbyBjb21vIGZhbGxiYWNrIHF1YW5kbyBvIHN5bmMgbsOjbyBwcsOpLXBhcnNlb3Ugb3MgY2FtcG9zLgogKi8KZnVuY3Rpb24gdm0yX3BhcnNlX2FnZW5kYV9ibG9iKCAkYmxvYiApIHsKICAgICRyID0gWyAndGlwbycgPT4gJycsICdob21lbmFnZWFkbycgPT4gJycsICdsb2NhbCcgPT4gJycsICdlbmRlcmVjbycgPT4gJycsICdhc3Nlc3NvcicgPT4gJycsICdob3JhcmlvJyA9PiAnJywgJ3NlcnZpY29zJyA9PiAnJyBdOwogICAgaWYgKCAhICRibG9iICkgcmV0dXJuICRyOwoKICAgICRsaW5lcyA9IGFycmF5X2ZpbHRlciggYXJyYXlfbWFwKCAndHJpbScsIGV4cGxvZGUoICJcbiIsICRibG9iICkgKSApOwogICAgJGxpbmVzID0gYXJyYXlfdmFsdWVzKCAkbGluZXMgKTsKICAgICRuID0gY291bnQoICRsaW5lcyApOwogICAgJGluX3NlcnZpY29zID0gZmFsc2U7CiAgICAkc2Vydmljb3NfYXJyID0gW107CiAgICAkY2FwdHVyZV9sb2NhbF9uZXh0ICA9IGZhbHNlOyAvLyBwcsOzeGltYSBsaW5oYSBzZXLDoSBvIGxvY2FsCiAgICAkY2FwdHVyZV9lbmRfbmV4dCAgICA9IGZhbHNlOyAvLyBwcsOzeGltYSBsaW5oYSBzZXLDoSBvIGVuZGVyZcOnbwoKICAgIGZvcmVhY2ggKCAkbGluZXMgYXMgJGkgPT4gJGwgKSB7CiAgICAgICAgLy8gQ2FwdHVyYSBkZSBsaW5oYSBzZWd1aW50ZSBwYXJhIGxvY2FsL2VuZGVyZcOnbyBjb20gbGFiZWwgdmF6aW8KICAgICAgICBpZiAoICRjYXB0dXJlX2xvY2FsX25leHQgKSB7ICRyWydsb2NhbCddID0gJGw7ICRjYXB0dXJlX2xvY2FsX25leHQgPSBmYWxzZTsgY29udGludWU7IH0KICAgICAgICBpZiAoICRjYXB0dXJlX2VuZF9uZXh0ICApIHsgJHJbJ2VuZGVyZWNvJ10gPSAkbDsgJGNhcHR1cmVfZW5kX25leHQgID0gZmFsc2U7IGNvbnRpbnVlOyB9CgogICAgICAgIGlmICggcHJlZ19tYXRjaCggJy9zZXJ2aVtjw6ddb3Mgdml2YW1haXMvaScsICRsICkgKSB7ICRpbl9zZXJ2aWNvcyA9IHRydWU7IGNvbnRpbnVlOyB9CiAgICAgICAgaWYgKCAkaW5fc2Vydmljb3MgKSB7ICRzZXJ2aWNvc19hcnJbXSA9ICRsOyBjb250aW51ZTsgfQogICAgICAgIGlmICggcHJlZ19tYXRjaCggJy9eKOKchVxzKik/KGRhdGEgZG8gZXZlbnRvfGRhdGE6fGRhdGUpL2knLCAkbCApICkgY29udGludWU7CiAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL150aXBvXHMqKGRvXHMqKT9ldmVudG9ccyo6L2knLCAkbCApICkgewogICAgICAgICAgICAkclsndGlwbyddID0gdHJpbSggcHJlZ19yZXBsYWNlKCAnL150aXBvXHMqKGRvXHMqKT9ldmVudG9ccyo6XHMqL2knLCAnJywgJGwgKSApOyBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL15ob21lbmFnZWFkby9pJywgJGwgKSApIHsKICAgICAgICAgICAgJHJbJ2hvbWVuYWdlYWRvJ10gPSB0cmltKCBwcmVnX3JlcGxhY2UoICcvXmhvbWVuYWdlYWRvW146XSo6XHMqL2knLCAnJywgJGwgKSApOyBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL15sb2NhbFxzKihkb1xzKmV2ZW50byk/XHMqOi9pJywgJGwgKSApIHsKICAgICAgICAgICAgJHZhbCA9IHRyaW0oIHByZWdfcmVwbGFjZSggJy9ebG9jYWxccyooZG9ccypldmVudG8pP1xzKjpccyovaScsICcnLCAkbCApICk7CiAgICAgICAgICAgIGlmICggJHZhbCApIHsgJHJbJ2xvY2FsJ10gPSAkdmFsOyB9IGVsc2UgeyAkY2FwdHVyZV9sb2NhbF9uZXh0ID0gdHJ1ZTsgfQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL15lbmRlcmVbY8OnXW9ccyooZG9ccypldmVudG8pP1xzKjovaScsICRsICkgKSB7CiAgICAgICAgICAgICR2YWwgPSB0cmltKCBwcmVnX3JlcGxhY2UoICcvXmVuZGVyZVtjw6ddb1xzKihkb1xzKmV2ZW50byk/XHMqOlxzKi9pJywgJycsICRsICkgKTsKICAgICAgICAgICAgaWYgKCAkdmFsICkgeyAkclsnZW5kZXJlY28nXSA9ICR2YWw7IH0gZWxzZSB7ICRjYXB0dXJlX2VuZF9uZXh0ID0gdHJ1ZTsgfQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL15hc3Nlc3NvclxzKjovaScsICRsICkgKSB7CiAgICAgICAgICAgICRyWydhc3Nlc3NvciddID0gdHJpbSggcHJlZ19yZXBsYWNlKCAnL15hc3Nlc3NvclxzKjpccyovaScsICcnLCAkbCApICk7IGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIHByZWdfbWF0Y2goICcvXihob3LDoXJpb3xob3JhcmlvKVxzKjovaScsICRsICkgfHwgcHJlZ19tYXRjaCggJy9eZGFzXHMrXGR7MSwyfTpcZHsyfS9pJywgJGwgKSApIHsKICAgICAgICAgICAgJHJbJ2hvcmFyaW8nXSA9IHRyaW0oIHByZWdfcmVwbGFjZSggJy9eKGhvcsOhcmlvfGhvcmFyaW98ZGFzKVxzKjo/XHMqL2knLCAnJywgJGwgKSApOyBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy8gVGlwbyBpbXBsw61jaXRvIG5hIHByaW1laXJhIGxpbmhhIHJlbGV2YW50ZQogICAgICAgIGlmICggISAkclsndGlwbyddICYmIHByZWdfbWF0Y2goICcvXihjYXNhbWVudG98YW5pdmVyc8Ohcmlbb2FdfGZvcm1hdHVyYXxmZXN0YVxzK2RlfGJvZGFzfGRlYnV0YW50ZXx4dlxzK2Fub3N8XGR7MSwyfVxzK2Fub3N8cmVub3ZhW2PDp11bYcOjXW98d2VkZGluZ3xiYXRpemFkb3xjaFthw6FdXHMrZGUpL2l1JywgJGwgKSApIHsKICAgICAgICAgICAgJHJbJ3RpcG8nXSA9ICRsOwogICAgICAgICAgICBpZiAoICEgJHJbJ2hvbWVuYWdlYWRvJ10gJiYgaXNzZXQoICRsaW5lc1sgJGkgKyAxIF0gKSApIHsKICAgICAgICAgICAgICAgICRueHQgPSAkbGluZXNbICRpICsgMSBdOwogICAgICAgICAgICAgICAgaWYgKCAhIHByZWdfbWF0Y2goICcvXihsb2NhbHxkYXRhfGFzc2Vzc29yfGVuZGVyZXzinIV8c2Vydml8aG9yw6FyaW98ZGFzXHMrXGQpL2knLCAkbnh0ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHJbJ2hvbWVuYWdlYWRvJ10gPSAkbnh0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAvLyBFbmRlcmXDp28gaW1wbMOtY2l0byDigJQgUnVhLCBBdiAoY29tIG91IHNlbSBwb250byksIEF2ZW5pZGEsIFJvZG92aWEsIGV0Yy4KICAgICAgICBpZiAoICEgJHJbJ2VuZGVyZWNvJ10gJiYgcHJlZ19tYXRjaCggJy9eKHJ1YXxhdlsuXHNdfGF2ZW5pZGF8cm9kWy5cc118cm9kb3ZpYXxyXC5cc3xhbGFtZWRhfHRyYXZlc3NhfHByYcOnYSkvaXUnLCAkbCApICkgewogICAgICAgICAgICAkclsnZW5kZXJlY28nXSA9ICRsOyBjb250aW51ZTsKICAgICAgICB9CiAgICB9CiAgICAkclsnc2Vydmljb3MnXSA9IGltcGxvZGUoICJcbiIsICRzZXJ2aWNvc19hcnIgKTsKICAgIHJldHVybiAkcjsKfQoKZnVuY3Rpb24gdm0yX2FnZW5kYV9wYWdlKCkgewogICAgaWYgKCAhIGN1cnJlbnRfdXNlcl9jYW4oICdtYW5hZ2Vfb3B0aW9ucycgKSApIHsKICAgICAgICB3cF9kaWUoICdTZW0gcGVybWlzc8OjbycgKTsKICAgIH0KCiAgICAvLyDilIDilIAgSGFuZGxlIEFsZXJ0YXMgU2F2ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIGlmICggaXNzZXQoJF9QT1NUWyd2bTJfc2F2ZV9hZ2VuZGFfYWxlcnRzJ10pICYmIGNoZWNrX2FkbWluX3JlZmVyZXIoJ3ZtMl9hZ2VuZGFfYWxlcnRzX3NhdmUnKSApIHsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfYWdlbmRhX2FsZXJ0c19nbG9iYWxfZW5hYmxlZCcsICFlbXB0eSgkX1BPU1RbJ3ZtMl9hZ2VuZGFfYWxlcnRzX2dsb2JhbF9lbmFibGVkJ10pID8gMSA6IDApOwogICAgICAgICRyYXdfcnVsZXMgPSAoIGlzc2V0KCRfUE9TVFsnYWdlbmRhX2FsZXJ0cyddKSAmJiBpc19hcnJheSgkX1BPU1RbJ2FnZW5kYV9hbGVydHMnXSkgKSA/ICRfUE9TVFsnYWdlbmRhX2FsZXJ0cyddIDogW107CiAgICAgICAgJHJ1bGVzID0gW107CiAgICAgICAgZm9yZWFjaCAoICRyYXdfcnVsZXMgYXMgJHIgKSB7CiAgICAgICAgICAgICRkYXlzID0gaW50dmFsKCRyWydkYXlzX2JlZm9yZSddID8/IDApOwogICAgICAgICAgICBpZiAoICRkYXlzIDw9IDAgKSBjb250aW51ZTsKICAgICAgICAgICAgJHJ1bGVzW10gPSBbCiAgICAgICAgICAgICAgICAnaWQnICAgICAgICAgID0+IHByZWdfcmVwbGFjZSgnL1teYS16MC05X10vJywgJycsICRyWydpZCddID8/ICcnKSA/OiAoICdhcl8nIC4gdW5pcWlkKCkgKSwKICAgICAgICAgICAgICAgICduYW1lJyAgICAgICAgPT4gc2FuaXRpemVfdGV4dF9maWVsZCgkclsnbmFtZSddID8/ICcnKSwKICAgICAgICAgICAgICAgICdlbmFibGVkJyAgICAgPT4gIWVtcHR5KCRyWydlbmFibGVkJ10pID8gMSA6IDAsCiAgICAgICAgICAgICAgICAnZGF5c19iZWZvcmUnID0+ICRkYXlzLAogICAgICAgICAgICAgICAgJ2NoYW5uZWwnICAgICA9PiBzYW5pdGl6ZV9rZXkoJHJbJ2NoYW5uZWwnXSA/PyAnemFwaV83NTUxJyksCiAgICAgICAgICAgICAgICAnZ3JvdXBfaWQnICAgID0+IHNhbml0aXplX3RleHRfZmllbGQoJHJbJ2dyb3VwX2lkJ10gPz8gJycpLAogICAgICAgICAgICAgICAgJ21lc3NhZ2UnICAgICA9PiBzYW5pdGl6ZV90ZXh0YXJlYV9maWVsZCgkclsnbWVzc2FnZSddID8/ICcnKSwKICAgICAgICAgICAgXTsKICAgICAgICB9CiAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX2FnZW5kYV9hbGVydHMnLCAkcnVsZXMpOwogICAgICAgIGlmICggISBlbXB0eSgkX1BPU1RbJ3ZtMl9jbGVhcl9hbGVydF9sb2cnXSkgKSB7CiAgICAgICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9hZ2VuZGFfYWxlcnRzX2xvZycsIFtdKTsKICAgICAgICB9CiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIGlzLWRpc21pc3NpYmxlIj48cD7inIUgQWxlcnRhcyBkZSBhZ2VuZGEgc2Fsdm9zIGNvbSBzdWNlc3NvITwvcD48L2Rpdj4nOwogICAgfQoKICAgICR2aWV3ICAgPSBzYW5pdGl6ZV9rZXkoICRfR0VUWyd2aWV3J10gICA/PyAnbGlzdCcgKTsKICAgICRtb250aCAgPSBtYXgoIDEsIG1pbiggMTIsIGludHZhbCggJF9HRVRbJ21vbnRoJ10gPz8gZGF0ZSgnbicpICkgKSApOwogICAgJHllYXIgICA9IG1heCggMjAyMCwgbWluKCAyMDMwLCBpbnR2YWwoICRfR0VUWyd5ZWFyJ10gPz8gZGF0ZSgnWScpICkgKSApOwogICAgJGZpbHRlciA9IHNhbml0aXplX2tleSggJF9HRVRbJ2ZpbHRlciddID8/ICd1cGNvbWluZycgKTsKICAgIGlmICggJGZpbHRlciA9PT0gJ3dlZWsnICkgJGZpbHRlciA9ICd3ZWVrJzsKCiAgICAvLyBQcmV2L05leHQgbW9udGgKICAgICRwcmV2X20gPSAkbW9udGggLSAxOyAkcHJldl95ID0gJHllYXI7CiAgICBpZiAoICRwcmV2X20gPCAxICkgIHsgJHByZXZfbSA9IDEyOyAkcHJldl95LS07IH0KICAgICRuZXh0X20gPSAkbW9udGggKyAxOyAkbmV4dF95ID0gJHllYXI7CiAgICBpZiAoICRuZXh0X20gPiAxMiApIHsgJG5leHRfbSA9IDE7ICAkbmV4dF95Kys7IH0KCiAgICAkYmFzZSAgID0gYWRtaW5fdXJsKCAnYWRtaW4ucGhwJyApOwogICAgJHByZXZfdXJsID0gYWRkX3F1ZXJ5X2FyZyggWyAncGFnZScgPT4gJ3ZtMi1hZ2VuZGEnLCAndmlldycgPT4gJ2NhbGVuZGFyJywgJ21vbnRoJyA9PiAkcHJldl9tLCAneWVhcicgPT4gJHByZXZfeSBdLCAkYmFzZSApOwogICAgJG5leHRfdXJsID0gYWRkX3F1ZXJ5X2FyZyggWyAncGFnZScgPT4gJ3ZtMi1hZ2VuZGEnLCAndmlldycgPT4gJ2NhbGVuZGFyJywgJ21vbnRoJyA9PiAkbmV4dF9tLCAneWVhcicgPT4gJG5leHRfeSBdLCAkYmFzZSApOwogICAgJGxpc3RfdXJsICAgID0gYWRkX3F1ZXJ5X2FyZyggWyAncGFnZScgPT4gJ3ZtMi1hZ2VuZGEnLCAndmlldycgPT4gJ2xpc3QnIF0sICRiYXNlICk7CiAgICAkY2FsX3VybCAgICAgPSBhZGRfcXVlcnlfYXJnKCBbICdwYWdlJyA9PiAndm0yLWFnZW5kYScsICd2aWV3JyA9PiAnY2FsZW5kYXInLCAnbW9udGgnID0+ICRtb250aCwgJ3llYXInID0+ICR5ZWFyIF0sICRiYXNlICk7CiAgICAkYWxlcnRzX3VybCAgPSBhZGRfcXVlcnlfYXJnKCBbICdwYWdlJyA9PiAndm0yLWFnZW5kYScsICd2aWV3JyA9PiAnYWxlcnRhcycgXSwgJGJhc2UgKTsKCiAgICAvLyDilIDilIAgRm9udGUgZGUgZGFkb3M6IEdTaGVldHMgKHByaW3DoXJpbykgb3UgV29vQ29tbWVyY2UgKGZhbGxiYWNrKSDilIDilIDilIDilIDilIAKICAgICR0b2RheV90cyA9IHN0cnRvdGltZSggY3VycmVudF90aW1lKCAnWS1tLWQnICkgKTsgLy8gdXNhIHRpbWV6b25lIFNQIChBbWVyaWNhL1Nhb19QYXVsbyB2aWEgV1ApCiAgICAkZXZlbnRzICAgPSBbXTsKICAgICRkYXRhX3NvdXJjZSA9ICd3Yyc7CgogICAgJGdzX2V2ZW50cyA9IGdldF9vcHRpb24oJ3ZtMl9hZ2VuZGFfZ3NoZWV0cycsIFtdKTsKICAgIGlmICggIWlzX2FycmF5KCRnc19ldmVudHMpICkgJGdzX2V2ZW50cyA9IGpzb25fZGVjb2RlKCRnc19ldmVudHMsIHRydWUpID86IFtdOwoKICAgIC8vIElEcyBkZSBkYXRhcyBHU2hlZXRzIGrDoSBwcmVzZW50ZXMgKHBhcmEgZGVkdXBsaWNhciBjb20gV0MpCiAgICAkZ3NfZGF0ZXNfdXNlZCA9IFtdOwogICAgJGdzX2V2X2J5X2RhdGUgPSBbXTsgLy8gZGF0ZSAtPiBbZXZlbnQgYXJyYXkgaW5kaWNlc10KCiAgICBpZiAoICFlbXB0eSgkZ3NfZXZlbnRzKSApIHsKICAgICAgICAkZGF0YV9zb3VyY2UgPSAnZ3NoZWV0cyc7CiAgICAgICAgZm9yZWFjaCAoICRnc19ldmVudHMgYXMgJHJvdyApIHsKICAgICAgICAgICAgaWYgKCBlbXB0eSgkcm93WydkYXRhX2Zlc3RhJ10pICkgY29udGludWU7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkcm93WydkYXRhX2Zlc3RhJ10pOwogICAgICAgICAgICBpZiAoIGNvdW50KCRwYXJ0cykgIT09IDMgKSBjb250aW51ZTsKICAgICAgICAgICAgJHRzID0gbWt0aW1lKDAsIDAsIDAsIChpbnQpJHBhcnRzWzFdLCAoaW50KSRwYXJ0c1swXSwgKGludCkkcGFydHNbMl0pOwogICAgICAgICAgICBpZiAoICEkdHMgKSBjb250aW51ZTsKCiAgICAgICAgICAgICRkYXlzX3VudGlsID0gaW50dmFsKCgkdHMgLSAkdG9kYXlfdHMpIC8gODY0MDApOwogICAgICAgICAgICBpZiAoICRkYXlzX3VudGlsIDwgMCApICAgICAgICRjb2xvciA9ICcjNmU3NzgxJzsKICAgICAgICAgICAgZWxzZWlmICggJGRheXNfdW50aWwgPD0gNyApICAkY29sb3IgPSAnI2QxMjQyZic7CiAgICAgICAgICAgIGVsc2VpZiAoICRkYXlzX3VudGlsIDw9IDMwICkgJGNvbG9yID0gJyNlMTZmMjQnOwogICAgICAgICAgICBlbHNlaWYgKCAkZGF5c191bnRpbCA8PSA5MCApICRjb2xvciA9ICcjOWE2NzAwJzsKICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAkY29sb3IgPSAnIzFhN2YzNyc7CgogICAgICAgICAgICAkcGhvbmVfcmF3ID0gcHJlZ19yZXBsYWNlKCcvXEQvJywgJycsICRyb3dbJ3doYXRzYXBwJ10gPz8gJycpOwogICAgICAgICAgICBpZiAoIHN0cmxlbigkcGhvbmVfcmF3KSA9PT0gMTAgfHwgc3RybGVuKCRwaG9uZV9yYXcpID09PSAxMSApICRwaG9uZV9yYXcgPSAnNTUnIC4gJHBob25lX3JhdzsKCiAgICAgICAgICAgIC8vIENhbXBvcyBwYXJzZWFkb3Mg4oCUIHbDqm0gZG8gc3luYyBwcsOpLXBhcnNlYWRvIG91IGRvIGJsb2IgaW5saW5lCiAgICAgICAgICAgICRldl9ibG9iICAgICAgID0gdHJpbSgkcm93WydldmVudG9fYmxvYiddID8/ICcnKTsKICAgICAgICAgICAgJGV2X3ByZXN0YWRvciAgPSB0cmltKCRyb3dbJ3ByZXN0YWRvciddICAgPz8gJycpOwogICAgICAgICAgICAkZXZfY3VzdG8gICAgICA9IHRyaW0oJHJvd1snY3VzdG8nXSAgICAgICA/PyAnJyk7CiAgICAgICAgICAgIC8vIFNlIG8gc3luYyBqw6EgdHJvdXhlIG9zIGNhbXBvcyBwYXJzZWFkb3MsIHVzYTsgc2Vuw6NvIHBhcnNlaWEgbyBibG9iIGFnb3JhCiAgICAgICAgICAgICRldl90aXBvICAgICAgID0gdHJpbSgkcm93Wyd0aXBvJ10gICAgICAgID8/ICcnKTsKICAgICAgICAgICAgJGV2X2hvbWVuYWdlYWRvPSB0cmltKCRyb3dbJ2hvbWVuYWdlYWRvJ10gPz8gJycpOwogICAgICAgICAgICAkZXZfbG9jYWwgICAgICA9IHRyaW0oJHJvd1snbG9jYWwnXSAgICAgICA/PyAnJyk7CiAgICAgICAgICAgICRldl9lbmRlcmVjbyAgID0gdHJpbSgkcm93WydlbmRlcmVjbyddICAgID8/ICcnKTsKICAgICAgICAgICAgJGV2X2Fzc2Vzc29yICAgPSB0cmltKCRyb3dbJ2Fzc2Vzc29yJ10gICAgPz8gJycpOwogICAgICAgICAgICAkZXZfaG9yYXJpbyAgICA9IHRyaW0oJHJvd1snaG9yYXJpbyddICAgICA/PyAnJyk7CiAgICAgICAgICAgICRldl9zZXJ2aWNvcyAgID0gdHJpbSgkcm93WydzZXJ2aWNvcyddICAgID8/ICcnKTsKICAgICAgICAgICAgLy8gU2VtcHJlIHByZWVuY2hlIGNhbXBvcyBhdXNlbnRlcyBhIHBhcnRpciBkbyBibG9iIChuw6NvIHPDsyBxdWFuZG8gdG9kb3MgdmF6aW9zKQogICAgICAgICAgICBpZiAoICRldl9ibG9iICkgewogICAgICAgICAgICAgICAgJHBhcnNlZCA9IHZtMl9wYXJzZV9hZ2VuZGFfYmxvYiggJGV2X2Jsb2IgKTsKICAgICAgICAgICAgICAgIGlmICggISAkZXZfdGlwbyAgICAgICAgKSAkZXZfdGlwbyAgICAgICAgPSAkcGFyc2VkWyd0aXBvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGV2X2hvbWVuYWdlYWRvICkgJGV2X2hvbWVuYWdlYWRvID0gJHBhcnNlZFsnaG9tZW5hZ2VhZG8nXTsKICAgICAgICAgICAgICAgIGlmICggISAkZXZfbG9jYWwgICAgICAgKSAkZXZfbG9jYWwgICAgICAgPSAkcGFyc2VkWydsb2NhbCddOwogICAgICAgICAgICAgICAgaWYgKCAhICRldl9lbmRlcmVjbyAgICApICRldl9lbmRlcmVjbyAgICA9ICRwYXJzZWRbJ2VuZGVyZWNvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGV2X2Fzc2Vzc29yICAgICkgJGV2X2Fzc2Vzc29yICAgID0gJHBhcnNlZFsnYXNzZXNzb3InXTsKICAgICAgICAgICAgICAgIGlmICggISAkZXZfaG9yYXJpbyAgICAgKSAkZXZfaG9yYXJpbyAgICAgPSAkcGFyc2VkWydob3JhcmlvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGV2X3NlcnZpY29zICAgICkgJGV2X3NlcnZpY29zICAgID0gJHBhcnNlZFsnc2Vydmljb3MnXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBUw610dWxvIHBhcmEgZXhpYmnDp8OjbyBubyBjYXJkOiB0aXBvICsgaG9tZW5hZ2VhZG8KICAgICAgICAgICAgJGV2X3RpdHVsbyA9ICRldl90aXBvID86ICggJGV2X2hvbWVuYWdlYWRvID86ICdFdmVudG8nICk7CgogICAgICAgICAgICAkZXZlbnRzW10gPSBbCiAgICAgICAgICAgICAgICAnaWQnICAgICAgICAgID0+ICdnc18nIC4gKCRyb3dbJ3JvdyddID8/IHVuaXFpZCgpKSwKICAgICAgICAgICAgICAgICd0cycgICAgICAgICAgPT4gJHRzLAogICAgICAgICAgICAgICAgJ2RhdGVfZm10JyAgICA9PiAkcm93WydkYXRhX2Zlc3RhJ10sCiAgICAgICAgICAgICAgICAnZGF5JyAgICAgICAgID0+IGludHZhbChkYXRlKCdqJywgJHRzKSksCiAgICAgICAgICAgICAgICAnbW9udGgnICAgICAgID0+IGludHZhbChkYXRlKCduJywgJHRzKSksCiAgICAgICAgICAgICAgICAneWVhcicgICAgICAgID0+IGludHZhbChkYXRlKCdZJywgJHRzKSksCiAgICAgICAgICAgICAgICAndGl0dWxvJyAgICAgID0+ICRldl90aXR1bG8sCiAgICAgICAgICAgICAgICAndGlwbycgICAgICAgID0+ICRldl90aXBvLAogICAgICAgICAgICAgICAgJ2hvbWVuYWdlYWRvJyA9PiAkZXZfaG9tZW5hZ2VhZG8sCiAgICAgICAgICAgICAgICAnbG9jYWwnICAgICAgID0+ICRldl9sb2NhbCwKICAgICAgICAgICAgICAgICdlbmRlcmVjbycgICAgPT4gJGV2X2VuZGVyZWNvLAogICAgICAgICAgICAgICAgJ2Fzc2Vzc29yJyAgICA9PiAkZXZfYXNzZXNzb3IsCiAgICAgICAgICAgICAgICAnaG9yYXJpbycgICAgID0+ICRldl9ob3JhcmlvLAogICAgICAgICAgICAgICAgJ3NlcnZpY29zJyAgICA9PiAkZXZfc2Vydmljb3MsCiAgICAgICAgICAgICAgICAnZXZlbnRvX2Jsb2InID0+ICRldl9ibG9iLAogICAgICAgICAgICAgICAgJ3ByZXN0YWRvcicgICA9PiAkZXZfcHJlc3RhZG9yLAogICAgICAgICAgICAgICAgJ3Bob25lJyAgICAgICA9PiAkcGhvbmVfcmF3LAogICAgICAgICAgICAgICAgJ3dhX2xpbmsnICAgICA9PiAkcGhvbmVfcmF3ID8gJ2h0dHBzOi8vd2EubWUvJyAuICRwaG9uZV9yYXcgOiAnIycsCiAgICAgICAgICAgICAgICAnY3VzdG8nICAgICAgID0+ICRldl9jdXN0bywKICAgICAgICAgICAgICAgICdkYXlzX3VudGlsJyAgPT4gJGRheXNfdW50aWwsCiAgICAgICAgICAgICAgICAnY29sb3InICAgICAgID0+ICRjb2xvciwKICAgICAgICAgICAgICAgICdjdXN0b21lcicgICAgPT4gJycsCiAgICAgICAgICAgICAgICAnc291cmNlJyAgICAgID0+ICdnc2hlZXRzJywKICAgICAgICAgICAgICAgICd3Y19vcmRlcl9pZCcgPT4gbnVsbCwgLy8gZmlsbGVkIGxhdGVyIGlmIG1hdGNoaW5nIFdDIG9yZGVyIGZvdW5kCiAgICAgICAgICAgICAgICAvLyBUZXh0byBkZSBidXNjYSB1bmlmaWNhZG8KICAgICAgICAgICAgICAgICdzZWFyY2hfdGV4dCcgPT4gbWJfc3RydG9sb3dlciggaW1wbG9kZSggJyAnLCBbICRldl90aXBvLCAkZXZfaG9tZW5hZ2VhZG8sICRldl9sb2NhbCwgJGV2X2Fzc2Vzc29yLCAkZXZfcHJlc3RhZG9yLCAkZXZfc2Vydmljb3MsICRldl9ibG9iIF0gKSApLAogICAgICAgICAgICBdOwogICAgICAgICAgICAvLyBSZWdpc3RyYSBkYXRhIHBhcmEgZGVkdXBsaWNhciBjb20gV0MKICAgICAgICAgICAgJGdzX2RhdGVzX3VzZWRbIGRhdGUoJ1ktbS1kJywgJHRzKSBdID0gdHJ1ZTsKICAgICAgICAgICAgJGdzX2V2X2J5X2RhdGVbIGRhdGUoJ1ktbS1kJywgJHRzKSBdW10gPSBjb3VudCgkZXZlbnRzKSAtIDE7IC8vIHRyYWNrIEdTaGVldHMgZXZlbnQgaW5kZXggYnkgZGF0ZQogICAgICAgIH0KICAgIH0KCiAgICAvLyBDb21wbGVtZW50YSBjb20gV29vQ29tbWVyY2Ug4oCUIGV2ZW50b3MgUEFTU0FET1MgKHJlYWxpemFkb3MpIHF1ZSBuw6NvIGVzdMOjbyBubyBHU2hlZXRzCiAgICAvLyAoc2VtcHJlIGF0aXZvLCBuw6NvIMOpIGZhbGxiYWNrKQogICAgJG9yZGVycyA9IGZ1bmN0aW9uX2V4aXN0cygnd2NfZ2V0X29yZGVycycpID8gd2NfZ2V0X29yZGVycyhbCiAgICAgICAgICAgICdzdGF0dXMnICA9PiB2bTJfb3JkZXJfc3RhdHVzZXMoKSwKICAgICAgICAgICAgJ2xpbWl0JyAgID0+IDEwMDAsCiAgICAgICAgICAgICd0eXBlJyAgICA9PiAnc2hvcF9vcmRlcicsCiAgICAgICAgICAgICdvcmRlcmJ5JyA9PiAnZGF0ZScsCiAgICAgICAgICAgICdvcmRlcicgICA9PiAnREVTQycsCiAgICAgICAgXSkgOiBbXTsKICAgICAgICBmb3JlYWNoICggJG9yZGVycyBhcyAkb3JkZXIgKSB7CiAgICAgICAgICAgICRyYXcgPSAkb3JkZXItPmdldF9tZXRhKCdfYmlsbGluZ19ldmVudF9kYXRlJyk7CiAgICAgICAgICAgIGlmICghJHJhdykgY29udGludWU7CiAgICAgICAgICAgICR0cyA9IHZtMl9ldmVudF9kYXRlX3RvX3RzKCRyYXcpOwogICAgICAgICAgICBpZiAoISR0cykgY29udGludWU7CiAgICAgICAgICAgIC8vIERlZHVwbGljYXI6IHNlIGRhdGEgasOhIGVzdMOhIG5vIEdTaGVldHMsIHB1bGEgKGV2aXRhIGR1cGxpY2F0YXMgZGUgZnV0dXJvcykKICAgICAgICAgICAgJHdjX2V2X2RhdGUgPSBkYXRlKCdZLW0tZCcsICR0cyk7CiAgICAgICAgICAgIGlmICggaXNzZXQoJGdzX2RhdGVzX3VzZWRbJHdjX2V2X2RhdGVdKSApIHsKICAgICAgICAgICAgICAgIC8vIEluamV0YSB3Y19vcmRlcl9pZCBub3MgZXZlbnRvcyBHU2hlZXRzIGRlc3RhIGRhdGEKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCAoJGdzX2V2X2J5X2RhdGVbJHdjX2V2X2RhdGVdID8/IFtdKSBhcyAkZ2kgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBpc3NldCgkZXZlbnRzWyRnaV0pICYmIGVtcHR5KCRldmVudHNbJGdpXVsnd2Nfb3JkZXJfaWQnXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudHNbJGdpXVsnd2Nfb3JkZXJfaWQnXSA9ICRvcmRlci0+Z2V0X2lkKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGl0ZW1zID0gW107CiAgICAgICAgICAgIGZvcmVhY2ggKCRvcmRlci0+Z2V0X2l0ZW1zKCkgYXMgJGl0ZW0pICRpdGVtc1tdID0gJGl0ZW0tPmdldF9uYW1lKCk7CiAgICAgICAgICAgICRkYXlzX3VudGlsID0gaW50dmFsKCgkdHMgLSAkdG9kYXlfdHMpIC8gODY0MDApOwogICAgICAgICAgICBpZiAoJGRheXNfdW50aWwgPCAwKSAgICAgICAkY29sb3IgPSAnIzZlNzc4MSc7CiAgICAgICAgICAgIGVsc2VpZiAoJGRheXNfdW50aWwgPD0gNykgICRjb2xvciA9ICcjZDEyNDJmJzsKICAgICAgICAgICAgZWxzZWlmICgkZGF5c191bnRpbCA8PSAzMCkgJGNvbG9yID0gJyNlMTZmMjQnOwogICAgICAgICAgICBlbHNlaWYgKCRkYXlzX3VudGlsIDw9IDkwKSAkY29sb3IgPSAnIzlhNjcwMCc7CiAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICRjb2xvciA9ICcjMWE3ZjM3JzsKICAgICAgICAgICAgJHBob25lX3JhdyA9IHByZWdfcmVwbGFjZSgnL1xELycsICcnLCAkb3JkZXItPmdldF9iaWxsaW5nX3Bob25lKCkpOwogICAgICAgICAgICBpZiAoc3RybGVuKCRwaG9uZV9yYXcpIDw9IDExKSAkcGhvbmVfcmF3ID0gJzU1JyAuICRwaG9uZV9yYXc7CiAgICAgICAgICAgICRldmVudHNbXSA9IFsKICAgICAgICAgICAgICAgICdpZCcgICAgICAgICAgPT4gJG9yZGVyLT5nZXRfaWQoKSwKICAgICAgICAgICAgICAgICd0cycgICAgICAgICAgPT4gJHRzLAogICAgICAgICAgICAgICAgJ2RhdGVfZm10JyAgICA9PiB2bTJfZm9ybWF0X2V2ZW50X2RhdGUoJHJhdyksCiAgICAgICAgICAgICAgICAnZGF5JyAgICAgICAgID0+IGludHZhbChkYXRlKCdqJywgJHRzKSksCiAgICAgICAgICAgICAgICAnbW9udGgnICAgICAgID0+IGludHZhbChkYXRlKCduJywgJHRzKSksCiAgICAgICAgICAgICAgICAneWVhcicgICAgICAgID0+IGludHZhbChkYXRlKCdZJywgJHRzKSksCiAgICAgICAgICAgICAgICAnY3VzdG9tZXInICAgID0+IHRyaW0oJG9yZGVyLT5nZXRfYmlsbGluZ19maXJzdF9uYW1lKCkgLiAnICcgLiAkb3JkZXItPmdldF9iaWxsaW5nX2xhc3RfbmFtZSgpKSwKICAgICAgICAgICAgICAgICdwaG9uZScgICAgICAgPT4gJHBob25lX3JhdywKICAgICAgICAgICAgICAgICd0aXBvJyAgICAgICAgPT4gJG9yZGVyLT5nZXRfbWV0YSgnX2JpbGxpbmdfdGlwb19ldmVudG8nKSA/OiAn4oCUJywKICAgICAgICAgICAgICAgICdob21lbmFnZWFkbycgPT4gJG9yZGVyLT5nZXRfbWV0YSgnX2JpbGxpbmdfaG9tZW5hZ2VhZG8nKSA/OiAnJywKICAgICAgICAgICAgICAgICdhc3Nlc3NvcicgICAgPT4gJG9yZGVyLT5nZXRfbWV0YSgnX2JpbGxpbmdfYXNzZXNzb3InKSA/OiAn4oCUJywKICAgICAgICAgICAgICAgICdhdHJhY29lcycgICAgPT4gaW1wbG9kZSgnLCAnLCAkaXRlbXMpID86ICfigJQnLAogICAgICAgICAgICAgICAgJ3ByZXN0YWRvcicgICA9PiAn4oCUJywKICAgICAgICAgICAgICAgICdjaWRhZGUnICAgICAgPT4gJG9yZGVyLT5nZXRfc2hpcHBpbmdfY2l0eSgpID86ICRvcmRlci0+Z2V0X2JpbGxpbmdfY2l0eSgpID86ICfigJQnLAogICAgICAgICAgICAgICAgJ2VzdGFkbycgICAgICA9PiAkb3JkZXItPmdldF9zaGlwcGluZ19zdGF0ZSgpID86ICRvcmRlci0+Z2V0X2JpbGxpbmdfc3RhdGUoKSA/OiAn4oCUJywKICAgICAgICAgICAgICAgICdlbmRlcmVjbycgICAgPT4gdHJpbSgkb3JkZXItPmdldF9zaGlwcGluZ19hZGRyZXNzXzEoKSAuICgkb3JkZXItPmdldF9zaGlwcGluZ19hZGRyZXNzXzIoKSA/ICcsICcgLiAkb3JkZXItPmdldF9zaGlwcGluZ19hZGRyZXNzXzIoKSA6ICcnKSkgPzogJ+KAlCcsCiAgICAgICAgICAgICAgICAnYmFpcnJvJyAgICAgID0+ICRvcmRlci0+Z2V0X21ldGEoJ19zaGlwcGluZ19uZWlnaGJvcmhvb2QnKSA/OiAnJywKICAgICAgICAgICAgICAgICdvYnMnICAgICAgICAgPT4gJG9yZGVyLT5nZXRfY3VzdG9tZXJfbm90ZSgpID86ICfigJQnLAogICAgICAgICAgICAgICAgJ3RvdGFsJyAgICAgICA9PiBudW1iZXJfZm9ybWF0KCRvcmRlci0+Z2V0X3RvdGFsKCksIDIsICcsJywgJy4nKSwKICAgICAgICAgICAgICAgICdzdGF0dXMnICAgICAgPT4gJG9yZGVyLT5nZXRfc3RhdHVzKCksCiAgICAgICAgICAgICAgICAnZGF5c191bnRpbCcgID0+ICRkYXlzX3VudGlsLAogICAgICAgICAgICAgICAgJ2NvbG9yJyAgICAgICA9PiAkY29sb3IsCiAgICAgICAgICAgICAgICAnbGluaycgICAgICAgID0+IGFkbWluX3VybCgncG9zdC5waHA/cG9zdD0nIC4gJG9yZGVyLT5nZXRfaWQoKSAuICcmYWN0aW9uPWVkaXQnKSwKICAgICAgICAgICAgICAgICd3YV9saW5rJyAgICAgPT4gJ2h0dHBzOi8vd2EubWUvJyAuICRwaG9uZV9yYXcsCiAgICAgICAgICAgICAgICAnc291cmNlJyAgICAgID0+ICd3YycsCiAgICAgICAgICAgICAgICAnd2Nfb3JkZXJfaWQnID0+ICRvcmRlci0+Z2V0X2lkKCksCiAgICAgICAgICAgICAgICAnY3VzdG8nICAgICAgID0+ICfigJQnLCAnZW50cmFkYScgPT4gJ+KAlCcsICdlbnRyYWRhX3BhZ2EnID0+ICfigJQnLAogICAgICAgICAgICAgICAgJ2ZpbmFsX3ZhbG9yJyA9PiAn4oCUJywgJ2ZpbmFsX3BhZ2EnID0+ICfigJQnLCAnYnJ1dG9fdml2YW1haXMnID0+ICfigJQnLAogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAvLyDilIDilIAgRW5yaXF1ZWNlciBldmVudG9zIEdTaGVldHMgY29tIHdjX29yZGVyX2lkIChtYXRjaCBwb3IgZGF0YSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICBpZiAoIGZ1bmN0aW9uX2V4aXN0cyggJ3djX2dldF9vcmRlcnMnICkgKSB7CiAgICAgICAgJHdjX29yZGVyc19hZG1pbiA9IHdjX2dldF9vcmRlcnMoIFsKICAgICAgICAgICAgJ2xpbWl0JyAgPT4gNTAwLAogICAgICAgICAgICAnc3RhdHVzJyA9PiBbICd3Yy1wcm9jZXNzaW5nJywgJ3djLXNpZ25pbmctcGVuZGluZycsICd3Yy1jb250cmFjdC1zaWduZWQnLCAnd2MtY29tcGxldGVkJyBdLAogICAgICAgICAgICAncmV0dXJuJyA9PiAnb2JqZWN0cycsCiAgICAgICAgXSApOwogICAgICAgICR3Y19kYXRlX21hcF9hZG1pbiA9IFtdOwogICAgICAgIGZvcmVhY2ggKCAkd2Nfb3JkZXJzX2FkbWluIGFzICRvcmQgKSB7CiAgICAgICAgICAgICRldl9kYXRlID0gJG9yZC0+Z2V0X21ldGEoICdfYmlsbGluZ19ldmVudF9kYXRlJyApOwogICAgICAgICAgICBpZiAoIGVtcHR5KCAkZXZfZGF0ZSApICkgewogICAgICAgICAgICAgICAgLy8gZmFsbGJhY2s6IHlpdGggYm9va2luZyBtZXRhCiAgICAgICAgICAgICAgICAkeWIgPSAkb3JkLT5nZXRfbWV0YSggJ3lpdGhfYm9va2luZ19kYXRhJyApOwogICAgICAgICAgICAgICAgaWYgKCAhIGVtcHR5KCAkeWJbJ19mcm9tX3RpbWVzdGFtcCddICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJGV2X2RhdGUgPSBkYXRlKCAnWS1tLWQnLCAkeWJbJ19mcm9tX3RpbWVzdGFtcCddICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhIGVtcHR5KCAkZXZfZGF0ZSApICkgewogICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplIHRvIFktbS1kCiAgICAgICAgICAgICAgICAkdHNfb3JkID0gc3RydG90aW1lKCAkZXZfZGF0ZSApOwogICAgICAgICAgICAgICAgaWYgKCAkdHNfb3JkICkgewogICAgICAgICAgICAgICAgICAgICRpc28gPSBkYXRlKCAnWS1tLWQnLCAkdHNfb3JkICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhIGlzc2V0KCAkd2NfZGF0ZV9tYXBfYWRtaW5bICRpc28gXSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkd2NfZGF0ZV9tYXBfYWRtaW5bICRpc28gXSA9ICRvcmQtPmdldF9pZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3JlYWNoICggJGV2ZW50cyBhcyAmJGV2ICkgewogICAgICAgICAgICBpZiAoICEgZW1wdHkoICRldlsnd2Nfb3JkZXJfaWQnXSApICkgY29udGludWU7CiAgICAgICAgICAgIGlmICggISBlbXB0eSggJGV2WydkYXRlX2lzbyddICkgJiYgaXNzZXQoICR3Y19kYXRlX21hcF9hZG1pblsgJGV2WydkYXRlX2lzbyddIF0gKSApIHsKICAgICAgICAgICAgICAgICRldlsnd2Nfb3JkZXJfaWQnXSA9ICR3Y19kYXRlX21hcF9hZG1pblsgJGV2WydkYXRlX2lzbyddIF07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdW5zZXQoICRldiApOwogICAgfQoKICAgIHVzb3J0KCAkZXZlbnRzLCBmbiggJGEsICRiICkgPT4gJGFbJ3RzJ10gLSAkYlsndHMnXSApOwoKICAgIGlmICggJGZpbHRlciA9PT0gJ3dlZWsnICkgewogICAgICAgICR3ZWVrX2VuZF90cyA9IHN0cnRvdGltZSgnKzYgZGF5cycsICR0b2RheV90cyk7CiAgICAgICAgJGxpc3RfZXZlbnRzID0gYXJyYXlfdmFsdWVzKCBhcnJheV9maWx0ZXIoICRldmVudHMsIGZuKCRlKSA9PiAkZVsndHMnXSA+PSAkdG9kYXlfdHMgJiYgJGVbJ3RzJ10gPD0gJHdlZWtfZW5kX3RzICkgKTsKICAgIH0gZWxzZWlmICggJGZpbHRlciA9PT0gJ3VwY29taW5nJyApIHsKICAgICAgICAkbGlzdF9ldmVudHMgPSBhcnJheV92YWx1ZXMoIGFycmF5X2ZpbHRlciggJGV2ZW50cywgZm4oICRlICkgPT4gJGVbJ3RzJ10gPj0gJHRvZGF5X3RzICkgKTsKICAgIH0gZWxzZWlmICggJGZpbHRlciA9PT0gJ2xhc3Q3JyApIHsKICAgICAgICAvLyBMw6ogZGEgYWJhIFZFTkRBUyAoc2VtIGZpbHRybyksIHNpbmNyb25pemFkbyB2aWEgc3luYy1sYXN0NwogICAgICAgICRsN19yYXcgPSAoYXJyYXkpIGdldF9vcHRpb24oICd2bTJfYWdlbmRhX2xhc3Q3JywgW10gKTsKICAgICAgICAkbGlzdF9ldmVudHMgPSBbXTsKICAgICAgICBmb3JlYWNoICggJGw3X3JhdyBhcyAkcm93ICkgewogICAgICAgICAgICBpZiAoIGVtcHR5KCAkcm93WydkYXRhX2Zlc3RhJ10gKSApIGNvbnRpbnVlOwogICAgICAgICAgICAkbHBhcnRzID0gZXhwbG9kZSggJy8nLCAkcm93WydkYXRhX2Zlc3RhJ10gKTsKICAgICAgICAgICAgaWYgKCBjb3VudCggJGxwYXJ0cyApICE9PSAzICkgY29udGludWU7CiAgICAgICAgICAgICRsdHMgPSBta3RpbWUoIDAsIDAsIDAsIChpbnQpICRscGFydHNbMV0sIChpbnQpICRscGFydHNbMF0sIChpbnQpICRscGFydHNbMl0gKTsKICAgICAgICAgICAgaWYgKCAhICRsdHMgKSBjb250aW51ZTsKICAgICAgICAgICAgJGxfZGF5cyAgPSBpbnR2YWwoICggJGx0cyAtICR0b2RheV90cyApIC8gODY0MDAgKTsKICAgICAgICAgICAgJGxfcGhvbmUgPSBwcmVnX3JlcGxhY2UoICcvXEQvJywgJycsICRyb3dbJ3doYXRzYXBwJ10gPz8gJycgKTsKICAgICAgICAgICAgaWYgKCBzdHJsZW4oICRsX3Bob25lICkgPT09IDEwIHx8IHN0cmxlbiggJGxfcGhvbmUgKSA9PT0gMTEgKSAkbF9waG9uZSA9ICc1NScgLiAkbF9waG9uZTsKICAgICAgICAgICAgJGxfYmxvYiAgPSB0cmltKCAkcm93WydldmVudG9fYmxvYiddID8/ICcnICk7CiAgICAgICAgICAgICRsX3RpcG8gID0gdHJpbSggJHJvd1sndGlwbyddICAgICAgICA/PyAnJyApOwogICAgICAgICAgICAkbF9ob21uICA9IHRyaW0oICRyb3dbJ2hvbWVuYWdlYWRvJ10gPz8gJycgKTsKICAgICAgICAgICAgJGxfbG9jbCAgPSB0cmltKCAkcm93Wydsb2NhbCddICAgICAgID8/ICcnICk7CiAgICAgICAgICAgICRsX2FkZHIgID0gdHJpbSggJHJvd1snZW5kZXJlY28nXSAgICA/PyAnJyApOwogICAgICAgICAgICAkbF9hc2VzICA9IHRyaW0oICRyb3dbJ2Fzc2Vzc29yJ10gICAgPz8gJycgKTsKICAgICAgICAgICAgJGxfaG9yYSAgPSB0cmltKCAkcm93Wydob3JhcmlvJ10gICAgID8/ICcnICk7CiAgICAgICAgICAgICRsX3NlcnYgID0gdHJpbSggJHJvd1snc2Vydmljb3MnXSAgICA/PyAnJyApOwogICAgICAgICAgICAkbF9wcmVzICA9IHRyaW0oICRyb3dbJ3ByZXN0YWRvciddICAgPz8gJycgKTsKICAgICAgICAgICAgJGxfY3VzdCAgPSB0cmltKCAkcm93WydjdXN0byddICAgICAgID8/ICcnICk7CiAgICAgICAgICAgIGlmICggJGxfYmxvYiApIHsKICAgICAgICAgICAgICAgICRscCA9IHZtMl9wYXJzZV9hZ2VuZGFfYmxvYiggJGxfYmxvYiApOwogICAgICAgICAgICAgICAgaWYgKCAhICRsX3RpcG8gKSAkbF90aXBvID0gJGxwWyd0aXBvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGxfaG9tbiApICRsX2hvbW4gPSAkbHBbJ2hvbWVuYWdlYWRvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGxfbG9jbCApICRsX2xvY2wgPSAkbHBbJ2xvY2FsJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGxfYWRkciApICRsX2FkZHIgPSAkbHBbJ2VuZGVyZWNvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGxfYXNlcyApICRsX2FzZXMgPSAkbHBbJ2Fzc2Vzc29yJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGxfaG9yYSApICRsX2hvcmEgPSAkbHBbJ2hvcmFyaW8nXTsKICAgICAgICAgICAgICAgIGlmICggISAkbF9zZXJ2ICkgJGxfc2VydiA9ICRscFsnc2Vydmljb3MnXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbF90aXR1bG8gPSAkbF90aXBvID86ICggJGxfaG9tbiA/OiAnRXZlbnRvJyApOwogICAgICAgICAgICAkbGlzdF9ldmVudHNbXSA9IFsKICAgICAgICAgICAgICAgICdpZCcgICAgICAgICAgPT4gJ2w3XycgLiAoICRyb3dbJ3JvdyddID8/IHVuaXFpZCgpICksCiAgICAgICAgICAgICAgICAndHMnICAgICAgICAgID0+ICRsdHMsCiAgICAgICAgICAgICAgICAnZGF0ZV9mbXQnICAgID0+ICRyb3dbJ2RhdGFfZmVzdGEnXSwKICAgICAgICAgICAgICAgICdkYXknICAgICAgICAgPT4gaW50dmFsKCBkYXRlKCAnaicsICRsdHMgKSApLAogICAgICAgICAgICAgICAgJ21vbnRoJyAgICAgICA9PiBpbnR2YWwoIGRhdGUoICduJywgJGx0cyApICksCiAgICAgICAgICAgICAgICAneWVhcicgICAgICAgID0+IGludHZhbCggZGF0ZSggJ1knLCAkbHRzICkgKSwKICAgICAgICAgICAgICAgICd0aXR1bG8nICAgICAgPT4gJGxfdGl0dWxvLAogICAgICAgICAgICAgICAgJ3RpcG8nICAgICAgICA9PiAkbF90aXBvLAogICAgICAgICAgICAgICAgJ2hvbWVuYWdlYWRvJyA9PiAkbF9ob21uLAogICAgICAgICAgICAgICAgJ2xvY2FsJyAgICAgICA9PiAkbF9sb2NsLAogICAgICAgICAgICAgICAgJ2VuZGVyZWNvJyAgICA9PiAkbF9hZGRyLAogICAgICAgICAgICAgICAgJ2Fzc2Vzc29yJyAgICA9PiAkbF9hc2VzLAogICAgICAgICAgICAgICAgJ2hvcmFyaW8nICAgICA9PiAkbF9ob3JhLAogICAgICAgICAgICAgICAgJ3NlcnZpY29zJyAgICA9PiAkbF9zZXJ2LAogICAgICAgICAgICAgICAgJ2V2ZW50b19ibG9iJyA9PiAkbF9ibG9iLAogICAgICAgICAgICAgICAgJ3ByZXN0YWRvcicgICA9PiAkbF9wcmVzLAogICAgICAgICAgICAgICAgJ3Bob25lJyAgICAgICA9PiAkbF9waG9uZSwKICAgICAgICAgICAgICAgICd3YV9saW5rJyAgICAgPT4gJGxfcGhvbmUgPyAnaHR0cHM6Ly93YS5tZS8nIC4gJGxfcGhvbmUgOiAnIycsCiAgICAgICAgICAgICAgICAnY3VzdG8nICAgICAgID0+ICRsX2N1c3QsCiAgICAgICAgICAgICAgICAnZGF5c191bnRpbCcgID0+ICRsX2RheXMsCiAgICAgICAgICAgICAgICAnY29sb3InICAgICAgID0+ICcjNmU3NzgxJywKICAgICAgICAgICAgICAgICdjdXN0b21lcicgICAgPT4gJycsCiAgICAgICAgICAgICAgICAnc291cmNlJyAgICAgID0+ICdnc2hlZXRzJywKICAgICAgICAgICAgICAgICd3Y19vcmRlcl9pZCcgPT4gbnVsbCwKICAgICAgICAgICAgICAgICdhdHJhY29lcycgICAgPT4gJGxfc2VydiA/OiAkbF90aXR1bG8sCiAgICAgICAgICAgICAgICAnc2VhcmNoX3RleHQnID0+IG1iX3N0cnRvbG93ZXIoIGltcGxvZGUoICcgJywgWyAkbF90aXBvLCAkbF9ob21uLCAkbF9sb2NsLCAkbF9hc2VzLCAkbF9wcmVzLCAkbF9zZXJ2LCAkbF9ibG9iIF0gKSApLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICAkbGlzdF9ldmVudHMgPSBhcnJheV92YWx1ZXMoIGFycmF5X3JldmVyc2UoICRsaXN0X2V2ZW50cyApICk7IC8vIG1haXMgcmVjZW50ZSBwcmltZWlybwogICAgfSBlbHNlaWYgKCAkZmlsdGVyID09PSAncGFzdCcgKSB7CiAgICAgICAgJGxpc3RfZXZlbnRzID0gYXJyYXlfdmFsdWVzKCBhcnJheV9yZXZlcnNlKCBhcnJheV9maWx0ZXIoICRldmVudHMsIGZuKCAkZSApID0+ICRlWyd0cyddIDwgJHRvZGF5X3RzICkgKSApOwogICAgfSBlbHNlIHsKICAgICAgICAkbGlzdF9ldmVudHMgPSBhcnJheV92YWx1ZXMoICRldmVudHMgKTsKICAgIH0KCiAgICAvLyBDYWxlbmRhciBtYXAKICAgICRjYWxfbWFwID0gW107CiAgICBmb3JlYWNoICggJGV2ZW50cyBhcyAkZSApIHsKICAgICAgICBpZiAoICRlWydtb250aCddID09PSAkbW9udGggJiYgJGVbJ3llYXInXSA9PT0gJHllYXIgKSB7CiAgICAgICAgICAgICRjYWxfbWFwWyAkZVsnZGF5J10gXVtdID0gJGU7CiAgICAgICAgfQogICAgfQoKICAgIC8vIFN0YXRzCiAgICAkdG90YWxfZXZlbnRzID0gY291bnQoICRldmVudHMgKTsKICAgICR1cGNvbWluZ19jbnQgPSBjb3VudCggYXJyYXlfZmlsdGVyKCAkZXZlbnRzLCBmbiggJGUgKSA9PiAkZVsndHMnXSA+PSAkdG9kYXlfdHMgKSApOwogICAgJHRoaXNfd2VlayAgICA9IGNvdW50KCBhcnJheV9maWx0ZXIoICRldmVudHMsIGZuKCAkZSApID0+ICRlWydkYXlzX3VudGlsJ10gPj0gMCAmJiAkZVsnZGF5c191bnRpbCddIDw9IDYgKSApOwogICAgJHBhc3RfY250ICAgICA9ICR0b3RhbF9ldmVudHMgLSAkdXBjb21pbmdfY250OwogICAgLy8gU2VtYW5hIEFudGVyaW9yOiB2ZW0gZGEgYWJhIFZFTkRBUyAoc2VtIGZpbHRybyksIHNpbmNyb25pemFkbyB2aWEgc3luYy1sYXN0NwogICAgJGxhc3Q3X2NudCA9IGNvdW50KCAoYXJyYXkpIGdldF9vcHRpb24oICd2bTJfYWdlbmRhX2xhc3Q3JywgW10gKSApOwoKICAgIC8vIOKUgOKUgCBCdXNjYSBpbnRlbGlnZW50ZTogdmFsb3JlcyDDum5pY29zIHBhcmEgZHJvcGRvd25zIOKUgOKUgAogICAgJGFsbF9hdHJhY29lc19zZXQgPSBbXTsKICAgICRhbGxfdGlwb3Nfc2V0ICAgID0gW107CiAgICBmb3JlYWNoICggJGV2ZW50cyBhcyAkZSApIHsKICAgICAgICBmb3JlYWNoICggZXhwbG9kZSggJywgJywgJGVbJ2F0cmFjb2VzJ10gKSBhcyAkYXQgKSB7CiAgICAgICAgICAgICRhdCA9IHRyaW0oICRhdCApOwogICAgICAgICAgICBpZiAoICRhdCAmJiAkYXQgIT09ICfigJQnICkgJGFsbF9hdHJhY29lc19zZXRbICRhdCBdID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkZVsndGlwbyddICYmICRlWyd0aXBvJ10gIT09ICfigJQnICkgJGFsbF90aXBvc19zZXRbICRlWyd0aXBvJ10gXSA9IHRydWU7CiAgICB9CiAgICBrc29ydCggJGFsbF9hdHJhY29lc19zZXQgKTsKICAgIGtzb3J0KCAkYWxsX3RpcG9zX3NldCApOwoKICAgICRsYXN0X3N5bmNfYWcgICAgICAgPSBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2xhc3Rfc3luYycsICcnKTsKICAgICRzeW5jX25vbmNlX2FnICAgICAgPSB3cF9jcmVhdGVfbm9uY2UoJ3ZtMl9hZ2VuZGFfc3luYycpOwogICAgJGFnX3dlYmhvb2tfc2V0ICAgICA9ICFlbXB0eShnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX3dlYmhvb2tfdXJsJywgJycpKTsKICAgICRhZ19zeW5jX3N0YXR1c191cmwgPSByZXN0X3VybCgndm0tY3JtLXYyL3YxL2FnZW5kYS9zeW5jLXN0YXR1cycpOwoKICAgICRtb250aF9uYW1lcyA9IFsgJycsICdKYW5laXJvJywgJ0ZldmVyZWlybycsICdNYXLDp28nLCAnQWJyaWwnLCAnTWFpbycsICdKdW5obycsICdKdWxobycsICdBZ29zdG8nLCAnU2V0ZW1icm8nLCAnT3V0dWJybycsICdOb3ZlbWJybycsICdEZXplbWJybycgXTsKICAgICRtb250aF9hYmJyICA9IFsgJycsICdKQU4nLCAnRkVWJywgJ01BUicsICdBQlInLCAnTUFJJywgJ0pVTicsICdKVUwnLCAnQUdPJywgJ1NFVCcsICdPVVQnLCAnTk9WJywgJ0RFWicgXTsKCiAgICA/PgogICAgPGRpdiBjbGFzcz0id3JhcCB2bTItYWdlbmRhLXdyYXAiPgogICAgPHN0eWxlPgogICAgLnZtMi1hZ2VuZGEtd3JhcHttYXgtd2lkdGg6MTIwMHB4fQogICAgLnZtMi1hZ2VuZGEtaGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToxNnB4O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHh9CiAgICAudm0yLXZpZXctdG9nZ2xle2Rpc3BsYXk6ZmxleDtnYXA6NHB4O2JhY2tncm91bmQ6I2Y2ZjhmYTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjNweH0KICAgIC52bTItdmlldy1idG57cGFkZGluZzo2cHggMTRweDtib3JkZXItcmFkaXVzOjZweDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojNTc2MDZhO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMH0KICAgIC52bTItdmlldy1idG4uYWN0aXZle2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMWQyMzI3O2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjE1KX0KICAgIC52bTItYWcta3Bpe2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsMWZyKTtnYXA6MTJweDttYXJnaW4tYm90dG9tOjIwcHh9CiAgICBAbWVkaWEobWF4LXdpZHRoOjcwMHB4KXsudm0yLWFnLWtwaXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsMWZyKX19CiAgICAudm0yLWFnLWtwaS1jYXJke2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNHB4IDE2cHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1cyBlYXNlfQogICAgLnZtMi1hZy1rcGktY2FyZDpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtib3gtc2hhZG93OjAgNHB4IDE0cHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1jb2xvcjojMDA3M2FhfQogICAgLnZtMi1hZy1rcGktdmFse2ZvbnQtc2l6ZToyNnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWQyMzI3fQogICAgLnZtMi1hZy1rcGktbGJse2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NzYwNmE7bWFyZ2luLXRvcDoycHh9CiAgICAudm0yLWNhbHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW59CiAgICAudm0yLWNhbC1uYXZ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjE0cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTBlMGUwfQogICAgLnZtMi1jYWwtbmF2IGgze21hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMH0KICAgIC52bTItY2FsLW5hdiBhe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMxZDIzMjc7cGFkZGluZzo0cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHh9CiAgICAudm0yLWNhbC1uYXYgYTpob3ZlcntiYWNrZ3JvdW5kOiNmNmY4ZmF9CiAgICAudm0yLWNhbC1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDcsMWZyKX0KICAgIC52bTItY2FsLWRvd3t0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjhweCAwO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTc2MDZhO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTBlMGUwO2JhY2tncm91bmQ6I2Y5ZjlmOX0KICAgIC52bTItY2FsLWNlbGx7bWluLWhlaWdodDo3MnB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2YwZjBmMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjBmMGYwO3BhZGRpbmc6NXB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzfQogICAgLnZtMi1jYWwtY2VsbDpob3ZlcntiYWNrZ3JvdW5kOiNmNmY4ZmF9CiAgICAudm0yLWNhbC1jZWxsOm50aC1jaGlsZCg3bil7Ym9yZGVyLXJpZ2h0Om5vbmV9CiAgICAudm0yLWNhbC1jZWxsLmVtcHR5e2JhY2tncm91bmQ6I2ZhZmFmYTtjdXJzb3I6ZGVmYXVsdH0KICAgIC8qIOKUgOKUgCBCb3TDo28gQ29udHJhdG8g4pSA4pSAICovCiAgICAudm0yLWV2LWNvbnRyYXRvLWJ0bntiYWNrZ3JvdW5kOiNmM2YwZmY7Ym9yZGVyOjFweCBzb2xpZCAjYTc4YmZhO2NvbG9yOiM2ZDI4ZDk7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo1cHggMTBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9CiAgICAudm0yLWV2LWNvbnRyYXRvLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOiNlZGU5ZmV9CiAgICAvKiDilIDilIAgRHJhd2VyIENvbnRyYXRvIOKUgOKUgCAqLwogICAgLnZtMi1jdC1vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxMDAwMDE7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtZW5kO2p1c3RpZnktY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC40NSk7b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IC4yc30KICAgIC52bTItY3Qtb3ZlcmxheS5vcGVue29wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphbGx9CiAgICAudm0yLWN0LXBhbmVse2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE2cHggMTZweCAwIDA7d2lkdGg6MTAwJTttYXgtd2lkdGg6NTYwcHg7bWF4LWhlaWdodDo4OHZoO292ZXJmbG93LXk6YXV0bztwYWRkaW5nOjIwcHggMjBweCAzMnB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDQwcHgpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXM7Ym94LXNoYWRvdzowIC00cHggMzBweCByZ2JhKDAsMCwwLC4xOCl9CiAgICAudm0yLWN0LW92ZXJsYXkub3BlbiAudm0yLWN0LXBhbmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfQogICAgLnZtMi1jdC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjE2cHh9CiAgICAudm0yLWN0LXRpdGxle2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWQyMzI3fQogICAgLnZtMi1jdC1jbG9zZXtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIycHg7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzU3NjA2YTtsaW5lLWhlaWdodDoxO3BhZGRpbmc6MnB4IDZweH0KICAgIC52bTItY3Qtc2VjdGlvbntmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi42cHg7Y29sb3I6IzdjM2FlZDttYXJnaW46MTJweCAwIDZweDtwYWRkaW5nLWxlZnQ6MnB4fQogICAgLnZtMi1jdC1yb3d7ZGlzcGxheTpmbGV4O2dhcDo4cHg7cGFkZGluZzo1cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjNmNGY2O2ZvbnQtc2l6ZToxM3B4fQogICAgLnZtMi1jdC1sYmx7bWluLXdpZHRoOjEyMHB4O2NvbG9yOiM1NzYwNmE7ZmxleC1zaHJpbms6MDtmb250LXNpemU6MTJweH0KICAgIC52bTItY3QtdmFse2NvbG9yOiMxZDIzMjc7Zm9udC13ZWlnaHQ6NTAwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0KICAgIC52bTItY3Qtc2Vwe2JvcmRlcjpub25lO2JvcmRlci10b3A6MnB4IHNvbGlkICNmM2Y0ZjY7bWFyZ2luOjE0cHggMCA2cHh9CiAgICAudm0yLWRyYWctY3R7d2lkdGg6NDBweDtoZWlnaHQ6NHB4O2JhY2tncm91bmQ6I2UwZTBlMDtib3JkZXItcmFkaXVzOjJweDttYXJnaW46MCBhdXRvIDE0cHh9CiAgICAudm0yLWNhbC1jZWxsLnRvZGF5IC52bTItY2FsLWRheXtiYWNrZ3JvdW5kOiMwOTY5ZGE7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MTJweH0KICAgIC52bTItY2FsLWRheXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzFkMjMyNzt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0KICAgIC52bTItY2FsLWRvdHt3aWR0aDo3cHg7aGVpZ2h0OjdweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MXB4fQogICAgLnZtMi1jYWwtZG90c3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDozcHh9CiAgICAudm0yLWNhbC1tb3Jle2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiM1NzYwNmE7bWFyZ2luLXRvcDoycHh9CiAgICAudm0yLWZpbHRlci1iYXJ7ZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLWJvdHRvbToxNnB4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcn0KICAgIC52bTItZmlsdGVyLWJ0bntwYWRkaW5nOjVweCAxMnB4O2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjIwcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzU3NjA2YTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9CiAgICAudm0yLWZpbHRlci1idG4uYWN0aXZle2JhY2tncm91bmQ6IzFkMjMyNztjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojMWQyMzI3fQogICAgLnZtMi1ldmVudC1saXN0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0KICAgIC52bTItZXYtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1sZWZ0OjRweCBzb2xpZDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxNHB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym94LXNoYWRvdyAuMTVzO2ZsZXgtd3JhcDp3cmFwfQogICAgLnZtMi1ldi1jYXJkOmhvdmVye2JveC1zaGFkb3c6MCAycHggOHB4IHJnYmEoMCwwLDAsLjEpfQogICAgLnZtMi1ldi1kYXRlYm94e21pbi13aWR0aDo0OHB4O3RleHQtYWxpZ246Y2VudGVyfQogICAgLnZtMi1ldi1kYXl7Zm9udC1zaXplOjIycHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZDIzMjc7bGluZS1oZWlnaHQ6MX0KICAgIC52bTItZXYtbW9ue2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiM1NzYwNmE7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfQogICAgLnZtMi1ldi1pbmZve2ZsZXg6MTttaW4td2lkdGg6MTUwcHh9CiAgICAudm0yLWV2LW5hbWV7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiMxZDIzMjd9CiAgICAudm0yLWV2LW1ldGF7Zm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YTttYXJnaW4tdG9wOjJweH0KICAgIC52bTItZXYtYmFkZ2V7Zm9udC1zaXplOjExcHg7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7d2hpdGUtc3BhY2U6bm93cmFwfQogICAgLnZtMi1ldi1hY3RzIGF7Zm9udC1zaXplOjE4cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWFyZ2luLWxlZnQ6NHB4fQogICAgLnZtMi1ldi1jbGllbnRlLXJvd3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDo2cHg7cGFkZGluZy10b3A6NnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNmMGYwZjA7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3h9CiAgICAudm0yLWV2LWNsaWVudGUtbm9tZXtmb250LXNpemU6MTJweDtjb2xvcjojNDQ0O2ZvbnQtd2VpZ2h0OjUwMDtmbGV4OjE7bWluLXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfQogICAgLnZtMi1ldi13YS1idG57ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweDtiYWNrZ3JvdW5kOiMyNWQzNjY7Y29sb3I6I2ZmZiFpbXBvcnRhbnQ7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6NXB4IDEycHg7Ym9yZGVyLXJhZGl1czoyMHB4O3RleHQtZGVjb3JhdGlvbjpub25lIWltcG9ydGFudDt3aGl0ZS1zcGFjZTpub3dyYXB9CiAgICAudm0yLWV2LXdhLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOiMxMjhjN2V9CiAgICAudm0yLXRpbWUtdGFne2JhY2tncm91bmQ6I2U4ZjRmZDtjb2xvcjojMWE2ZmE4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlcjoxcHggc29saWQgI2I4ZDlmMDtkaXNwbGF5OmlubGluZS1ibG9ja30KICAgIC52bTItbW9kYWwtY2xpZW50ZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsI2YwZjlmZiwjZThmNGZkKTtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTRweCAxNnB4O21hcmdpbi1ib3R0b206MTJweDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxMHB4fQogICAgLnZtMi1tb2RhbC1jbGllbnRlLW5vbWV7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZDIzMjd9CiAgICAudm0yLW1vZGFsLW92ZXJsYXl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC40KTt6LWluZGV4Ojk5OTk5fQogICAgLnZtMi1tb2RhbC1vdmVybGF5Lm9wZW57ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfQogICAgLnZtMi1tb2RhbC1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7d2lkdGg6bWluKDQ4MHB4LDk1dncpO2hlaWdodDoxMDB2aDtvdmVyZmxvdy15OmF1dG87cGFkZGluZzoyNHB4O2FuaW1hdGlvbjp2bTJTbGlkZUluIC4ycyBlYXNlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KICAgIEBrZXlmcmFtZXMgdm0yU2xpZGVJbntmcm9te3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX0KICAgIC52bTItbW9kYWwtY2xvc2V7ZmxvYXQ6cmlnaHQ7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToyMHB4O2N1cnNvcjpwb2ludGVyO2NvbG9yOiM1NzYwNmE7cGFkZGluZzowfQogICAgLnZtMi1tb2RhbC10aXRsZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7bWFyZ2luOjAgMCAxNnB4O3BhZGRpbmctcmlnaHQ6MzBweH0KICAgIC52bTItbW9kYWwtcm93e2Rpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi1ib3R0b206OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9CiAgICAudm0yLW1vZGFsLWxibHtmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhO21pbi13aWR0aDoxMTBweDtmb250LXdlaWdodDo2MDA7cGFkZGluZy10b3A6MXB4fQogICAgLnZtMi1tb2RhbC12YWx7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzFkMjMyNztmbGV4OjF9CiAgICAudm0yLW1vZGFsLWhye2JvcmRlcjpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkICNlMGUwZTA7bWFyZ2luOjE0cHggMH0KICAgIC52bTItbW9kYWwtYWN0c3tkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcH0KICAgIC52bTItbWJ0bntwYWRkaW5nOjhweCAxNHB4O2JvcmRlci1yYWRpdXM6NnB4O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMDtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Y29sb3I6IzFkMjMyN30KICAgIC52bTItbWJ0bi5ibHVle2JhY2tncm91bmQ6IzA5NjlkYTtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojMDk2OWRhfQogICAgLnZtMi1tYnRuLmdyZWVue2JhY2tncm91bmQ6IzFhN2YzNztjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojMWE3ZjM3fQogICAgLnZtMi1kcmFnLWhhbmRsZXtkaXNwbGF5Om5vbmU7d2lkdGg6MzZweDtoZWlnaHQ6NHB4O2JhY2tncm91bmQ6I2RkZDtib3JkZXItcmFkaXVzOjJweDttYXJnaW46MCBhdXRvIDE0cHh9CiAgICAudm0yLW1vZGFsLXZhbHt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9CiAgICAudm0yLWJsb2Itcm93e21hcmdpbi1ib3R0b206NHB4fQogICAgLnZtMi1ibG9iLWxibHtmb250LXNpemU6MTBweDtjb2xvcjojNTc2MDZhO2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjNweDtkaXNwbGF5OmJsb2NrfQogICAgLnZtMi1ibG9iLXZhbHtmb250LXNpemU6MTNweDtjb2xvcjojMWQyMzI3fQogICAgQGtleWZyYW1lcyB2bTJTbGlkZVVwe2Zyb217dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fQogICAgQG1lZGlhKG1heC13aWR0aDo2NDBweCl7CiAgICAgICAgLnZtMi1kcmFnLWhhbmRsZXtkaXNwbGF5OmJsb2NrfQogICAgICAgIC52bTItbW9kYWwtb3ZlcmxheS5vcGVue2FsaWduLWl0ZW1zOmZsZXgtZW5kO2p1c3RpZnktY29udGVudDpjZW50ZXJ9CiAgICAgICAgLnZtMi1tb2RhbC1wYW5lbHt3aWR0aDoxMDB2dyFpbXBvcnRhbnQ7bWF4LXdpZHRoOjEwMHZ3IWltcG9ydGFudDtoZWlnaHQ6OTBzdmg7Ym9yZGVyLXJhZGl1czoxNnB4IDE2cHggMCAwO3BhZGRpbmc6MTZweCAxNHB4IDI4cHghaW1wb3J0YW50O2FuaW1hdGlvbjp2bTJTbGlkZVVwIC4yNXMgZWFzZX0KICAgICAgICAudm0yLW1vZGFsLXRpdGxle2ZvbnQtc2l6ZToxNXB4O21hcmdpbi1ib3R0b206MTBweH0KICAgICAgICAudm0yLW1vZGFsLXJvd3tmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjFweDttYXJnaW4tYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YwZjBmMDtwYWRkaW5nLWJvdHRvbTo4cHh9CiAgICAgICAgLnZtMi1tb2RhbC1sYmx7bWluLXdpZHRoOnVuc2V0IWltcG9ydGFudDtmb250LXNpemU6MTBweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjNweDtjb2xvcjojOGI5NDllfQogICAgICAgIC52bTItZXYtaW5mb3tvdmVyZmxvdzpoaWRkZW47bWluLXdpZHRoOjA7ZmxleDoxfQogICAgICAgIC52bTItZXYtbmFtZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9CiAgICAgICAgLnZtMi1ldi1tZXRhIC52bTItbWV0YS1saW5le2Rpc3BsYXk6YmxvY2t9CiAgICAgICAgLnZtMi1ldi1hY3Rze3dpZHRoOjEwMCU7bWFyZ2luLXRvcDo2cHh9CiAgICAgICAgLnZtMi1hZy1rcGl7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLDFmcikhaW1wb3J0YW50fQogICAgICAgIC52bTItZmlsdGVyLWJhcntnYXA6NHB4fQogICAgICAgIC52bTItZmlsdGVyLWJ0bntmb250LXNpemU6MTFweDtwYWRkaW5nOjRweCAxMHB4fQogICAgfQogICAgLnZtMi1zZWFyY2gtYmFye2Rpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi1ib3R0b206MTJweDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXJ9CiAgICAudm0yLXNlYXJjaC1iYXIgaW5wdXRbdHlwZT10ZXh0XXtmbGV4OjE7bWluLXdpZHRoOjIwMHB4O3BhZGRpbmc6N3B4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTNweDtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZDojZmZmfQogICAgLnZtMi1zZWFyY2gtYmFyIGlucHV0W3R5cGU9dGV4dF06Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDczYWE7Ym94LXNoYWRvdzowIDAgMCAycHggcmdiYSgwLDExNSwxNzAsLjIpfQogICAgLnZtMi1zZWFyY2gtYmFyIHNlbGVjdHtwYWRkaW5nOjZweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YTtiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXI7bWF4LXdpZHRoOjIwMHB4fQogICAgLnZtMi1zZWFyY2gtYmFyIC52bTItY2xyLWJ0bntwYWRkaW5nOjVweCAxMnB4O2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjIwcHg7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM1NzYwNmE7Zm9udC1zaXplOjEycHg7Y3Vyc29yOnBvaW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfQogICAgLnZtMi1zZWFyY2gtYmFyIC52bTItY2xyLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOiNmNmY4ZmF9CiAgICAjdm0yQWdDb3VudHtmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhO21hcmdpbi1sZWZ0OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ2bTItYWdlbmRhLWhlYWRlciI+CiAgICAgICAgPGgxIHN0eWxlPSJtYXJnaW46MCI+8J+ThSBBZ2VuZGEgZGUgRXZlbnRvczwvaDE+CiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtmbGV4LXdyYXA6d3JhcCI+CiAgICAgICAgICAgIDw/cGhwIGlmICgkYWdfd2ViaG9va19zZXQpOiA/PgogICAgICAgICAgICA8YnV0dG9uIGlkPSJ2bTJBZ1N5bmNCdG4iIG9uY2xpY2s9InZtMkFnU3luYygpIiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1zZWNvbmRhcnkiIHN0eWxlPSJmb250LXNpemU6MTNweCI+8J+UhCBTaW5jcm9uaXphciBQbGFuaWxoYTwvYnV0dG9uPgogICAgICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoYWRtaW5fdXJsKCdhZG1pbi5waHA/cGFnZT12bTItc2V0dGluZ3MjYWdlbmRhLXdlYmhvb2snKSk7ID8+IiBjbGFzcz0iYnV0dG9uIiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6I2QxMjQyZjtib3JkZXItY29sb3I6I2ZjYTVhNSI+4pqZ77iPIENvbmZpZ3VyYXIgV2ViaG9vazwvYT4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDw/cGhwIGlmICgkbGFzdF9zeW5jX2FnKTogPz4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NzYwNmEiPlN5bmM6IDw/cGhwIGVjaG8gZXNjX2h0bWwodm0yX2xvY2FsX2RhdGUoJ2QvbSBIOmknLCAkbGFzdF9zeW5jX2FnKSk7ID8+PC9zcGFuPgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPD9waHAgaWYgKCRkYXRhX3NvdXJjZSA9PT0gJ2dzaGVldHMnKTogPz4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiMwNTk2Njk7YmFja2dyb3VuZDojZWNmZGY1O3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEycHgiPvCfk4ogR1NoZWV0czwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgZWxzZTogPz4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM1NzYwNmE7YmFja2dyb3VuZDojZjZmOGZhO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEycHgiPldvb0NvbW1lcmNlPC9zcGFuPgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdmlldy10b2dnbGUiPgogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoICRsaXN0X3VybCApOyA/PiIgICAgY2xhc3M9InZtMi12aWV3LWJ0biA8P3BocCBlY2hvICR2aWV3ID09PSAnbGlzdCcgICAgID8gJ2FjdGl2ZScgOiAnJzsgPz4iPuKJoSBMaXN0YTwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCAkY2FsX3VybCApOyA/PiIgICAgY2xhc3M9InZtMi12aWV3LWJ0biA8P3BocCBlY2hvICR2aWV3ID09PSAnY2FsZW5kYXInICA/ICdhY3RpdmUnIDogJyc7ID8+Ij7iip4gQ2FsZW5kw6FyaW88L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCggJGFsZXJ0c191cmwgKTsgPz4iIGNsYXNzPSJ2bTItdmlldy1idG4gPD9waHAgZWNobyAkdmlldyA9PT0gJ2FsZXJ0YXMnICAgPyAnYWN0aXZlJyA6ICcnOyA/PiI+8J+UlCBBbGVydGFzPC9hPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idm0yLWFnLWtwaSI+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWFnLWtwaS1jYXJkIiBvbmNsaWNrPSJsb2NhdGlvbi5ocmVmPSc/cGFnZT12bTItYWdlbmRhJmZpbHRlcj1hbGwnIj48ZGl2IGNsYXNzPSJ2bTItYWcta3BpLXZhbCI+PD9waHAgZWNobyAkdG90YWxfZXZlbnRzOyA/PjwvZGl2PjxkaXYgY2xhc3M9InZtMi1hZy1rcGktbGJsIj5Ub3RhbCBkZSBFdmVudG9zPC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWFnLWtwaS1jYXJkIiBvbmNsaWNrPSJsb2NhdGlvbi5ocmVmPSc/cGFnZT12bTItYWdlbmRhJmZpbHRlcj11cGNvbWluZyciPjxkaXYgY2xhc3M9InZtMi1hZy1rcGktdmFsIiBzdHlsZT0iY29sb3I6IzFhN2YzNyI+PD9waHAgZWNobyAkdXBjb21pbmdfY250OyA/PjwvZGl2PjxkaXYgY2xhc3M9InZtMi1hZy1rcGktbGJsIj5QcsOzeGltb3MgRXZlbnRvczwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1hZy1rcGktY2FyZCIgb25jbGljaz0ibG9jYXRpb24uaHJlZj0nP3BhZ2U9dm0yLWFnZW5kYSZmaWx0ZXI9d2VlayciPjxkaXYgY2xhc3M9InZtMi1hZy1rcGktdmFsIiBzdHlsZT0iY29sb3I6I2QxMjQyZiI+PD9waHAgZWNobyAkdGhpc193ZWVrOyA/PjwvZGl2PjxkaXYgY2xhc3M9InZtMi1hZy1rcGktbGJsIj5Fc3RhIFNlbWFuYTwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1hZy1rcGktY2FyZCIgb25jbGljaz0ibG9jYXRpb24uaHJlZj0nP3BhZ2U9dm0yLWFnZW5kYSZmaWx0ZXI9cGFzdCciPjxkaXYgY2xhc3M9InZtMi1hZy1rcGktdmFsIiBzdHlsZT0iY29sb3I6IzU3NjA2YSI+PD9waHAgZWNobyAkcGFzdF9jbnQ7ID8+PC9kaXY+PGRpdiBjbGFzcz0idm0yLWFnLWtwaS1sYmwiPlJlYWxpemFkb3M8L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItYWcta3BpLWNhcmQiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jz9wYWdlPXZtMi1hZ2VuZGEmdmlldz1saXN0JmZpbHRlcj1sYXN0NyciPjxkaXYgY2xhc3M9InZtMi1hZy1rcGktdmFsIiBzdHlsZT0iY29sb3I6IzZmNDJjMSI+PD9waHAgZWNobyAkbGFzdDdfY250OyA/PjwvZGl2PjxkaXYgY2xhc3M9InZtMi1hZy1rcGktbGJsIj5TZW1hbmEgQW50ZXJpb3I8L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgoKICAgIDw/cGhwIGlmICggJHZpZXcgPT09ICdjYWxlbmRhcicgKTogPz4KICAgIDxkaXYgY2xhc3M9InZtMi1jYWwiPgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1jYWwtbmF2Ij4KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCAkcHJldl91cmwgKTsgPz4iPuKGkCA8P3BocCBlY2hvIGVzY19odG1sKCAkbW9udGhfbmFtZXNbICRwcmV2X20gXSApOyA/PjwvYT4KICAgICAgICAgICAgPGgzPjw/cGhwIGVjaG8gZXNjX2h0bWwoICRtb250aF9uYW1lc1sgJG1vbnRoIF0gLiAnICcgLiAkeWVhciApOyA/PjwvaDM+CiAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCggJG5leHRfdXJsICk7ID8+Ij48P3BocCBlY2hvIGVzY19odG1sKCAkbW9udGhfbmFtZXNbICRuZXh0X20gXSApOyA/PiDihpI8L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWNhbC1ncmlkIj4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgZm9yZWFjaCAoIFsgJ0RvbScsJ1NlZycsJ1RlcicsJ1F1YScsJ1F1aScsJ1NleCcsJ1PDoWInIF0gYXMgJGQgKSB7CiAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPSd2bTItY2FsLWRvdyc+IiAuIGVzY19odG1sKCAkZCApIC4gIjwvZGl2PiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGZpcnN0X2RvdyAgICAgPSBpbnR2YWwoIGRhdGUoICd3JywgbWt0aW1lKCAwLCAwLCAwLCAkbW9udGgsIDEsICR5ZWFyICkgKSApOwogICAgICAgICAgICAkZGF5c19pbl9tb250aCA9IGludHZhbCggZGF0ZSggJ3QnLCBta3RpbWUoIDAsIDAsIDAsICRtb250aCwgMSwgJHllYXIgKSApICk7CiAgICAgICAgICAgICR0b2RheV9kYXkgICAgID0gKCBpbnR2YWwoIHdwX2RhdGUoJ24nKSApID09PSAkbW9udGggJiYgaW50dmFsKCB3cF9kYXRlKCdZJykgKSA9PT0gJHllYXIgKSA/IGludHZhbCggd3BfZGF0ZSgnaicpICkgOiAtMTsKCiAgICAgICAgICAgIGZvciAoICRpID0gMDsgJGkgPCAkZmlyc3RfZG93OyAkaSsrICkgewogICAgICAgICAgICAgICAgZWNobyAiPGRpdiBjbGFzcz0ndm0yLWNhbC1jZWxsIGVtcHR5Jz48L2Rpdj4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoICRkID0gMTsgJGQgPD0gJGRheXNfaW5fbW9udGg7ICRkKysgKSB7CiAgICAgICAgICAgICAgICAkaXNfdG9kYXkgICA9ICggJGQgPT09ICR0b2RheV9kYXkgKSA/ICcgdG9kYXknIDogJyc7CiAgICAgICAgICAgICAgICAkZGF5X2V2ZW50cyA9ICRjYWxfbWFwWyAkZCBdID8/IFtdOwogICAgICAgICAgICAgICAgZWNobyAiPGRpdiBjbGFzcz0ndm0yLWNhbC1jZWxsJGlzX3RvZGF5JyBvbmNsaWNrPSd2bTJDYWxEYXkodGhpcyknPiI7CiAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPSd2bTItY2FsLWRheSc+JGQ8L2Rpdj4iOwogICAgICAgICAgICAgICAgZWNobyAiPGRpdiBjbGFzcz0ndm0yLWNhbC1kb3RzJz4iOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoIGFycmF5X3NsaWNlKCAkZGF5X2V2ZW50cywgMCwgNSApIGFzICRldiApIHsKICAgICAgICAgICAgICAgICAgICAkYyA9IGVzY19hdHRyKCAkZXZbJ2NvbG9yJ10gKTsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8c3BhbiBjbGFzcz0ndm0yLWNhbC1kb3QnIHN0eWxlPSdiYWNrZ3JvdW5kOiRjJz48L3NwYW4+IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICAgICAgICAgICAgICAkY250ID0gY291bnQoICRkYXlfZXZlbnRzICk7CiAgICAgICAgICAgICAgICBpZiAoICRjbnQgPiAwICkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J3ZtMi1jYWwtbW9yZSc+eyRjbnR9IGV2ZW50byIgLiAoICRjbnQgPiAxID8gJ3MnIDogJycgKSAuICI8L2Rpdj4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yZWFjaCAoICRkYXlfZXZlbnRzIGFzICRldiApIHsKICAgICAgICAgICAgICAgICAgICAkZWRhdGEgPSBlc2NfYXR0cigganNvbl9lbmNvZGUoICRldiwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSApICk7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPHNwYW4gY2xhc3M9J3ZtMmFnZXYnIGRhdGEtZXZlbnQ9JyRlZGF0YScgc3R5bGU9J2Rpc3BsYXk6bm9uZSc+PC9zcGFuPiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlY2hvICI8L2Rpdj4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgID8+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTJweDtkaXNwbGF5OmZsZXg7Z2FwOjE2cHg7ZmxleC13cmFwOndyYXA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YSI+CiAgICAgICAgPHNwYW4+PHNwYW4gc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojZDEyNDJmO21hcmdpbi1yaWdodDo0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlIj48L3NwYW4+RXN0YSBzZW1hbmE8L3NwYW4+CiAgICAgICAgPHNwYW4+PHNwYW4gc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojZTE2ZjI0O21hcmdpbi1yaWdodDo0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlIj48L3NwYW4+UHLDs3hpbW8gbcOqczwvc3Bhbj4KICAgICAgICA8c3Bhbj48c3BhbiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiM5YTY3MDA7bWFyZ2luLXJpZ2h0OjRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiPjwvc3Bhbj4zIG1lc2VzPC9zcGFuPgogICAgICAgIDxzcGFuPjxzcGFuIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6IzFhN2YzNzttYXJnaW4tcmlnaHQ6NHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZSI+PC9zcGFuPkZ1dHVybzwvc3Bhbj4KICAgICAgICA8c3Bhbj48c3BhbiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiM2ZTc3ODE7bWFyZ2luLXJpZ2h0OjRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiPjwvc3Bhbj5SZWFsaXphZG88L3NwYW4+CiAgICA8L2Rpdj4KCiAgICA8P3BocCBlbHNlOiA/PgogICAgPD9waHAgaWYgKCAkdmlldyAhPT0gJ2NhbGVuZGFyJyApOiA/PgogICAgPGRpdiBjbGFzcz0idm0yLXNlYXJjaC1iYXIiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idm0yQWdTZWFyY2giIHBsYWNlaG9sZGVyPSLwn5SNIEJ1c2NhciB0aXBvLCBob21lbmFnZWFkbywgbG9jYWwsIHByZXN0YWRvciwgYXNzZXNzb3IuLi4iIG9uaW5wdXQ9InZtMkZpbHRlckFnZW5kYSgpIiBzdHlsZT0iZmxleDoxO21pbi13aWR0aDowIj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItY2xyLWJ0biIgb25jbGljaz0idm0yQ2xlYXJTZWFyY2goKSI+4pyVPC9idXR0b24+CiAgICAgICAgPHNwYW4gaWQ9InZtMkFnQ291bnQiPjw/cGhwIGVjaG8gY291bnQoICRsaXN0X2V2ZW50cyApOyA/PiBldmVudG9zPC9zcGFuPgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRpZjsgPz4KCiAgICA8ZGl2IGNsYXNzPSJ2bTItZmlsdGVyLWJhciI+CiAgICAgICAgPD9waHAKICAgICAgICAkZmlsdGVycyA9IFsgJ3VwY29taW5nJyA9PiAn8J+ThSBQcsOzeGltb3MnLCAnd2VlaycgPT4gJ/Cfk4YgRXN0YSBTZW1hbmEnLCAnbGFzdDcnID0+ICfij67vuI8gU2VtLiBBbnRlcmlvcicsICdwYXN0JyA9PiAn4pyTIFJlYWxpemFkb3MnLCAnYWxsJyA9PiAn4oqeIFRvZG9zJyBdOwogICAgICAgIGZvcmVhY2ggKCAkZmlsdGVycyBhcyAkZmsgPT4gJGZsICkgewogICAgICAgICAgICAkZnUgID0gYWRkX3F1ZXJ5X2FyZyggWyAncGFnZScgPT4gJ3ZtMi1hZ2VuZGEnLCAndmlldycgPT4gJ2xpc3QnLCAnZmlsdGVyJyA9PiAkZmsgXSwgJGJhc2UgKTsKICAgICAgICAgICAgJGNscyA9ICggJGZpbHRlciA9PT0gJGZrICkgPyAnYWN0aXZlJyA6ICcnOwogICAgICAgICAgICBlY2hvICI8YSBocmVmPSciIC4gZXNjX3VybCggJGZ1ICkgLiAiJyBjbGFzcz0ndm0yLWZpbHRlci1idG4gJGNscyc+IiAuIGVzY19odG1sKCAkZmwgKSAuICI8L2E+IjsKICAgICAgICB9CiAgICAgICAgZWNobyAiPHNwYW4gc3R5bGU9J21hcmdpbi1sZWZ0OmF1dG87Zm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YSc+IiAuIGNvdW50KCAkbGlzdF9ldmVudHMgKSAuICIgZXZlbnRvczwvc3Bhbj4iOwogICAgICAgID8+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InZtMi1ldmVudC1saXN0Ij4KICAgIDw/cGhwCiAgICAkZGF5c19wdF9hZyA9IFsnU3VuZGF5Jz0+J0RvbWluZ28nLCdNb25kYXknPT4nU2VndW5kYScsJ1R1ZXNkYXknPT4nVGVyw6dhJywnV2VkbmVzZGF5Jz0+J1F1YXJ0YScsJ1RodXJzZGF5Jz0+J1F1aW50YScsJ0ZyaWRheSc9PidTZXh0YScsJ1NhdHVyZGF5Jz0+J1PDoWJhZG8nXTsKICAgIGZvcmVhY2ggKCAkbGlzdF9ldmVudHMgYXMgJGUgKToKICAgICAgICAkZXZfZGF5ICA9IGRhdGUoICdkJywgJGVbJ3RzJ10gKTsKICAgICAgICAkZXZfbW9uICA9ICRtb250aF9hYmJyWyBpbnR2YWwoIGRhdGUoICduJywgJGVbJ3RzJ10gKSApIF07CiAgICAgICAgJGV2X2RvdyAgPSAkZGF5c19wdF9hZ1sgZGF0ZSggJ2wnLCAkZVsndHMnXSApIF0gPz8gJyc7CiAgICAgICAgJGR1ICAgICAgPSAkZVsnZGF5c191bnRpbCddOwogICAgICAgIGlmICggJGR1IDwgMCApICAgICAgICRiYWRnZSA9ICdSZWFsaXphZG8nOwogICAgICAgIGVsc2VpZiAoICRkdSA9PT0gMCApICRiYWRnZSA9ICdIT0pFIPCflLQnOwogICAgICAgIGVsc2VpZiAoICRkdSA9PT0gMSApICRiYWRnZSA9ICdBbWFuaMOjJzsKICAgICAgICBlbHNlaWYgKCAkZHUgPD0gMzAgKSAkYmFkZ2UgPSAkZHUgLiAnIGRpYXMnOwogICAgICAgIGVsc2VpZiAoICRkdSA8PSA5MCApICRiYWRnZSA9IGNlaWwoICRkdSAvIDcgKSAuICcgc2VtJzsKICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAkYmFkZ2UgPSBjZWlsKCAkZHUgLyAzMCApIC4gJyBtZXNlcyc7CiAgICAgICAgJGVkYXRhID0gZXNjX2F0dHIoIGpzb25fZW5jb2RlKCAkZSwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSApICk7CiAgICA/PgogICAgPD9waHAKICAgICR2bTJfc2VhcmNoX3R4dCA9ICRlWydzZWFyY2hfdGV4dCddID8/IG1iX3N0cnRvbG93ZXIoICRlWyd0aXR1bG8nXSAuICcgJyAuICRlWydwcmVzdGFkb3InXSApOwogICAgJHZtMl90aXBvX2NhcmQgID0gKCRlWyd0aXBvJ10gJiYgJGVbJ3RpcG8nXSAhPT0gJ+KAlCcpID8gJGVbJ3RpcG8nXSA6ICgkZVsndGl0dWxvJ10gPz8gJycpOwogICAgaWYgKCBtYl9zdHJsZW4oJHZtMl90aXBvX2NhcmQpID4gNDAgKSAkdm0yX3RpcG9fY2FyZCA9IG1iX3N1YnN0cigkdm0yX3RpcG9fY2FyZCwgMCwgNDApIC4gJ+KApic7CiAgICAkdm0yX2hvbWVuX2NhcmQgPSAkZVsnaG9tZW5hZ2VhZG8nXSA/PyAnJzsKICAgIGlmICggbWJfc3RybGVuKCR2bTJfaG9tZW5fY2FyZCkgPiAzNSApICR2bTJfaG9tZW5fY2FyZCA9IG1iX3N1YnN0cigkdm0yX2hvbWVuX2NhcmQsIDAsIDM1KSAuICfigKYnOwogICAgLy8gVXNhIGxvY2FsOyBzZSB2YXppbywgdXNhIGVuZGVyZcOnbyBjb21vIGZhbGxiYWNrCiAgICAkdm0yX2xvY2FsX2NhcmQgPSAoJGVbJ2xvY2FsJ10gPz8gJycpID86ICgkZVsnZW5kZXJlY28nXSA/PyAnJyk7CiAgICBpZiAoIG1iX3N0cmxlbigkdm0yX2xvY2FsX2NhcmQpID4gNDAgKSAkdm0yX2xvY2FsX2NhcmQgPSBtYl9zdWJzdHIoJHZtMl9sb2NhbF9jYXJkLCAwLCA0MCkgLiAn4oCmJzsKICAgICR2bTJfYXNzZXNzb3JfY2FyZCA9ICgkZVsnYXNzZXNzb3InXSA/PyAnJyk7CiAgICBpZiAoIG1iX3N0cmxlbigkdm0yX2Fzc2Vzc29yX2NhcmQpID4gMzAgKSAkdm0yX2Fzc2Vzc29yX2NhcmQgPSBtYl9zdWJzdHIoJHZtMl9hc3Nlc3Nvcl9jYXJkLCAwLCAzMCkgLiAn4oCmJzsKICAgICR2bTJfaG9yYXJpb19jYXJkICA9IHRyaW0oJGVbJ2hvcmFyaW8nXSA/PyAnJyk7CiAgICAkdm0yX2NsaWVudGVfY2FyZCAgPSB0cmltKCRlWydjdXN0b21lciddID8/ICcnKTsKICAgID8+CiAgICA8ZGl2IGNsYXNzPSJ2bTItZXYtY2FyZCIgc3R5bGU9ImJvcmRlci1sZWZ0LWNvbG9yOjw/cGhwIGVjaG8gZXNjX2F0dHIoJGVbJ2NvbG9yJ10pOyA/PiIKICAgICAgICAgZGF0YS1zZWFyY2g9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoICR2bTJfc2VhcmNoX3R4dCApOyA/PiIKICAgICAgICAgZGF0YS1ldj0nPD9waHAgZWNobyAkZWRhdGE7ID8+JwogICAgICAgICBvbmNsaWNrPSd2bTJPcGVuTW9kYWwoSlNPTi5wYXJzZSh0aGlzLmRhdGFzZXQuZXYpKSc+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWV2LWRhdGVib3giPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZXYtZGF5Ij48P3BocCBlY2hvICRldl9kYXk7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1ldi1tb24iPjw/cGhwIGVjaG8gJGV2X21vbjsgPz48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZXYtaW5mbyI+CiAgICAgICAgICAgIDw/cGhwIGlmICgkdm0yX3RpcG9fY2FyZCk6ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1ldi1uYW1lIj48P3BocCBlY2hvIGVzY19odG1sKCR2bTJfdGlwb19jYXJkKTsgPz48L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDw/cGhwIGlmICgkdm0yX2hvbWVuX2NhcmQpOiA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZXYtbWV0YSIgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM0NDQ7Zm9udC13ZWlnaHQ6NTAwIj48P3BocCBlY2hvIGVzY19odG1sKCR2bTJfaG9tZW5fY2FyZCk7ID8+PC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZXYtbWV0YSI+8J+OpCA8P3BocCBlY2hvICRlWydwcmVzdGFkb3InXSA/IGVzY19odG1sKCRlWydwcmVzdGFkb3InXSkgOiAnPHNwYW4gc3R5bGU9ImNvbG9yOiNiYmI7Zm9udC1zdHlsZTppdGFsaWMiPnNlbSBwcmVzdGFkb3I8L3NwYW4+JzsgPz48L2Rpdj4KICAgICAgICAgICAgPD9waHAgaWYgKCR2bTJfYXNzZXNzb3JfY2FyZCAmJiAkdm0yX2Fzc2Vzc29yX2NhcmQgIT09ICRlWydwcmVzdGFkb3InXSk6ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1ldi1tZXRhIiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzU3NjA2YSI+8J+nkeKAjfCfkrwgPD9waHAgZWNobyBlc2NfaHRtbCgkdm0yX2Fzc2Vzc29yX2NhcmQpOyA/PjwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPD9waHAgaWYgKCR2bTJfbG9jYWxfY2FyZCk6ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1ldi1tZXRhIiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzhiOTQ5ZSI+8J+TjSA8P3BocCBlY2hvIGVzY19odG1sKCR2bTJfbG9jYWxfY2FyZCk7ID8+PC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8P3BocCBpZiAoJHZtMl9ob3JhcmlvX2NhcmQgJiYgJHZtMl9ob3JhcmlvX2NhcmQgIT09ICfigJQnKTogPz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWV2LW1ldGEiIHN0eWxlPSJtYXJnaW4tdG9wOjNweCI+PHNwYW4gY2xhc3M9InZtMi10aW1lLXRhZyI+4o+wIDw/cGhwIGVjaG8gZXNjX2h0bWwoJHZtMl9ob3JhcmlvX2NhcmQpOyA/Pjwvc3Bhbj48L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICR2bTJfc2Vydl9jYXJkID0gdHJpbSgkZVsnc2Vydmljb3MnXSA/PyAnJyk7CiAgICAgICAgICAgIGlmICgkdm0yX3NlcnZfY2FyZCAmJiAkdm0yX3NlcnZfY2FyZCAhPT0gJ+KAlCcpOgogICAgICAgICAgICAgICAgLy8gTW9zdHJhciBhcGVuYXMgcHJpbWVpcmEgbGluaGEgZGUgc2VydmnDp29zIHBhcmEgbsOjbyBlbmNoZXIgbyBjYXJkCiAgICAgICAgICAgICAgICAkc2Vydl9saW5lcyA9IGFycmF5X2ZpbHRlcihhcnJheV9tYXAoJ3RyaW0nLCBleHBsb2RlKCJcbiIsICR2bTJfc2Vydl9jYXJkKSkpOwogICAgICAgICAgICAgICAgJHNlcnZfcHJldmlldyA9IGltcGxvZGUoJyDCtyAnLCBhcnJheV9zbGljZSgkc2Vydl9saW5lcywgMCwgMykpOwogICAgICAgICAgICAgICAgaWYgKGNvdW50KCRzZXJ2X2xpbmVzKSA+IDMpICRzZXJ2X3ByZXZpZXcgLj0gJyDigKYnOwogICAgICAgICAgICA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZXYtbWV0YSIgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2MzY2ZjE7bWFyZ2luLXRvcDoycHgiPuKtkCA8P3BocCBlY2hvIGVzY19odG1sKCRzZXJ2X3ByZXZpZXcpOyA/PjwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2dhcDo0cHgiPgogICAgICAgICAgICA8P3BocCBpZiAoJGV2X2Rvdyk6ID8+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjojNTc2MDZhO2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjRweCI+PD9waHAgZWNobyBlc2NfaHRtbCgkZXZfZG93KTsgPz48L3NwYW4+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWV2LWJhZGdlIiBzdHlsZT0iYmFja2dyb3VuZDo8P3BocCBlY2hvIGVzY19hdHRyKCRlWydjb2xvciddKTsgPz4yMjtjb2xvcjo8P3BocCBlY2hvIGVzY19hdHRyKCRlWydjb2xvciddKTsgPz4iPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGJhZGdlKTsgPz48L3NwYW4+CiAgICAgICAgICAgIDw/cGhwIGlmICgkZVsnY3VzdG8nXSk6ID8+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNTc2MDZhIj48P3BocCBlY2hvIGVzY19odG1sKCRlWydjdXN0byddKTsgPz48L3NwYW4+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgogICAgICAgIDw/cGhwIGlmICgkdm0yX2NsaWVudGVfY2FyZCB8fCAoJGVbJ3dhX2xpbmsnXSAmJiAkZVsnd2FfbGluayddICE9PSAnIycpKTogPz4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZXYtY2xpZW50ZS1yb3ciIG9uY2xpY2s9ImV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj4KICAgICAgICAgICAgPD9waHAgaWYgKCR2bTJfY2xpZW50ZV9jYXJkKTogPz4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1ldi1jbGllbnRlLW5vbWUiPvCfkaQgPD9waHAgZWNobyBlc2NfaHRtbCgkdm0yX2NsaWVudGVfY2FyZCk7ID8+PC9zcGFuPgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPD9waHAgaWYgKCRlWyd3YV9saW5rJ10gJiYgJGVbJ3dhX2xpbmsnXSAhPT0gJyMnKTogPz4KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRlWyd3YV9saW5rJ10pOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJ2bTItZXYtd2EtYnRuIj7wn5KsIDw/cGhwIGVjaG8gJHZtMl9jbGllbnRlX2NhcmQgPyAnQ2hhbWFyJyA6ICdXaGF0c0FwcCc7ID8+PC9hPgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPD9waHAgJGNvbnRyYXRvX29pZCA9ICFlbXB0eSgkZVsnd2Nfb3JkZXJfaWQnXSkgPyAoaW50KSRlWyd3Y19vcmRlcl9pZCddIDogKCRlWydzb3VyY2UnXT09PSd3YycgJiYgaXNfbnVtZXJpYygkZVsnaWQnXSkgPyAoaW50KSRlWydpZCddIDogMCk7ID8+CiAgICAgICAgICAgIDw/cGhwIGlmICgkY29udHJhdG9fb2lkKTogPz4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idm0yLWV2LWNvbnRyYXRvLWJ0biIgb25jbGljaz0idm0yT3BlbkNvbnRyYXRvKDw/cGhwIGVjaG8gJGNvbnRyYXRvX29pZDsgPz4pO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj7wn5OEIENvbnRyYXRvPC9idXR0b24+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgPD9waHAgaWYgKCBlbXB0eSgkbGlzdF9ldmVudHMpICk6ID8+CiAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0MHB4O2NvbG9yOiM1NzYwNmE7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2UwZTBlMCI+TmVuaHVtIGV2ZW50byBlbmNvbnRyYWRvLjwvZGl2PgogICAgPD9waHAgZW5kaWY7ID8+CiAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgIDwhLS0gRFJBV0VSIENPTlRSQVRPIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWN0LW92ZXJsYXkiIGlkPSJ2bTJDb250cmF0b092ZXJsYXkiIG9uY2xpY2s9ImlmKGV2ZW50LnRhcmdldD09PXRoaXMpdGhpcy5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJykiPgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1jdC1wYW5lbCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1kcmFnLWN0Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWN0LWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWN0LXRpdGxlIj7wn5OEIERhZG9zIGRvIENvbnRyYXRvPC9zcGFuPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idm0yLWN0LWNsb3NlIiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQ29udHJhdG9PdmVybGF5JykuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpIj7inJU8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InZtMkNvbnRyYXRvQ29udGVudCI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tIE1PREFMIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLW1vZGFsLW92ZXJsYXkiIGlkPSJ2bTJBZ01vZGFsIiBvbmNsaWNrPSJpZihldmVudC50YXJnZXQ9PT10aGlzKXRoaXMuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItbW9kYWwtcGFuZWwiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZHJhZy1oYW5kbGUiPjwvZGl2PgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItbW9kYWwtY2xvc2UiIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJBZ01vZGFsJykuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpIj7inJU8L2J1dHRvbj4KICAgICAgICAgICAgPGgyIGNsYXNzPSJ2bTItbW9kYWwtdGl0bGUiIGlkPSJ2bTJBZ1RpdGxlIj7igJQ8L2gyPgogICAgICAgICAgICA8ZGl2IGlkPSJ2bTJBZ0NvbnRlbnQiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocCBpZiAoICR2aWV3ID09PSAnYWxlcnRhcycgKToKICAgICAgICAkYWdfYWxlcnRzX2VuYWJsZWQgPSBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2FsZXJ0c19nbG9iYWxfZW5hYmxlZCcsIDEpOwogICAgICAgICRhZ19hbGVydHMgICAgICAgICA9IGdldF9vcHRpb24oJ3ZtMl9hZ2VuZGFfYWxlcnRzJywgW10pOwogICAgICAgIGlmICggISBpc19hcnJheSgkYWdfYWxlcnRzKSApICRhZ19hbGVydHMgPSBbXTsKICAgICAgICAkYWdfY2hhbm5lbHMgICAgICAgPSB2bTJfY2hhbm5lbHMoKTsKICAgICAgICAkYWdfZGVmX21zZyA9ICLwn46qICpMRU1CUkVURSBERSBFVkVOVE8g4oCUIHtkaWFzX2FudGVzfSBkaWFzKlxuXG7wn5OFICpEYXRhOioge2RhdGF9ICh7ZGlhX3NlbWFuYX0pXG7wn46JICpFdmVudG86KiB7dGlwb31cbvCfkaQgKkhvbWVuYWdlYWRvKHMpOioge2hvbWVuYWdlYWRvfVxu8J+OpCAqUHJlc3RhZG9yOioge3ByZXN0YWRvcn1cbvCfk40gKkxvY2FsOioge2xvY2FsfVxu8J+VkCAqSG9yw6FyaW86KiB7aG9yYXJpb31cbvCfkrAgKkN1c3RvOioge2N1c3RvfVxuXG5fTGVtYnJldGUgYXV0b23DoXRpY28g4oCUIFZpdmFNYWlzIENSTV8iOwogICAgICAgICRhZ19hbGVydF9ub25jZSA9IHdwX2NyZWF0ZV9ub25jZSgndm0yX2FnZW5kYV9hbGVydHNfc2F2ZScpOwogICAgPz4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MjRweDttYXJnaW4tdG9wOjE2cHgiPgogICAgICAgIDwhLS0gSGVhZGVyIC0tPgogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToyMHB4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4Ij4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxoMiBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjE4cHgiPvCflJQgQWxlcnRhcyBkZSBBZ2VuZGE8L2gyPgogICAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjo0cHggMCAwO2NvbG9yOiM1NzYwNmE7Zm9udC1zaXplOjEzcHgiPkVudmllIGxlbWJyZXRlcyBhdXRvbcOhdGljb3MgcGFyYSBvIGdydXBvIGRlIFdoYXRzQXBwIGRhIGdlc3TDo28gYW50ZXMgZGUgY2FkYSBldmVudG8uPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDAiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJ3aWR0aDozOHB4O2hlaWdodDoyMnB4O2JhY2tncm91bmQ6PD9waHAgZWNobyAkYWdfYWxlcnRzX2VuYWJsZWQgPyAnIzIyYzU1ZScgOiAnI2QxZDVkYic7ID8+O2JvcmRlci1yYWRpdXM6MTFweDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjdXJzb3I6cG9pbnRlciIgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnQWxlcnRHbG9iYWwnKS5jbGljaygpIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDoycHg7bGVmdDo8P3BocCBlY2hvICRhZ19hbGVydHNfZW5hYmxlZCA/ICcxOHB4JyA6ICcycHgnOyA/Pjt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOmxlZnQgLjJzIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGFnX2FsZXJ0c19lbmFibGVkID8gJzxzcGFuIHN0eWxlPSJjb2xvcjojMjJjNTVlIj5BbGVydGFzIEF0aXZvczwvc3Bhbj4nIDogJzxzcGFuIHN0eWxlPSJjb2xvcjojOWNhM2FmIj5BbGVydGFzIFBhdXNhZG9zPC9zcGFuPic7ID8+CiAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ijw/cGhwIGVjaG8gZXNjX3VybCggYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWFnZW5kYScsJ3ZpZXcnPT4nYWxlcnRhcyddLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKSApOyA/PiI+CiAgICAgICAgICAgIDw/cGhwIHdwX25vbmNlX2ZpZWxkKCd2bTJfYWdlbmRhX2FsZXJ0c19zYXZlJyk7ID8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InZtMl9zYXZlX2FnZW5kYV9hbGVydHMiIHZhbHVlPSIxIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idm0yX2FnZW5kYV9hbGVydHNfZ2xvYmFsX2VuYWJsZWQiIGlkPSJ2bTJBZ0FsZXJ0R2xvYmFsSGlkZGVuIiB2YWx1ZT0iPD9waHAgZWNobyAkYWdfYWxlcnRzX2VuYWJsZWQgPyAnMScgOiAnMCc7ID8+Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idm0yQWdBbGVydEdsb2JhbCIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgPD9waHAgY2hlY2tlZCgkYWdfYWxlcnRzX2VuYWJsZWQsIDEpOyA/PiBvbmNoYW5nZT0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnQWxlcnRHbG9iYWxIaWRkZW4nKS52YWx1ZT10aGlzLmNoZWNrZWQ/JzEnOicwJzt0aGlzLmNsb3Nlc3QoJ2Zvcm0nKS5zdWJtaXQoKSI+CgogICAgICAgICAgICA8IS0tIFRhYmVsYSBkZSByZWdyYXMgLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9InZtMkFsZXJ0UnVsZXNXcmFwIj4KICAgICAgICAgICAgPD9waHAgaWYgKCBlbXB0eSgkYWdfYWxlcnRzKSApOiA/PgogICAgICAgICAgICA8ZGl2IGlkPSJ2bTJBbGVydEVtcHR5IiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozMnB4O2JhY2tncm91bmQ6I2Y5ZjlmOTtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MnB4IGRhc2hlZCAjZTBlMGUwO2NvbG9yOiM1NzYwNmE7Zm9udC1zaXplOjE0cHgiPgogICAgICAgICAgICAgICAgTmVuaHVtIGFsZXJ0YSBjb25maWd1cmFkbyBhaW5kYS48YnI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0idm0yQWRkQWxlcnRSdWxlKCkiIHN0eWxlPSJtYXJnaW4tdG9wOjEycHg7cGFkZGluZzo4cHggMjBweDtiYWNrZ3JvdW5kOiMwMDczYWE7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTNweCI+KyBBZGljaW9uYXIgQWxlcnRhPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgICAgICA8ZGl2IGlkPSJ2bTJBbGVydEVtcHR5IiBzdHlsZT0iZGlzcGxheTpub25lIj48L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CgogICAgICAgICAgICA8ZGl2IGlkPSJ2bTJBbGVydFJ1bGVzIj4KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRhZ19hbGVydHMgYXMgJGlkeCA9PiAkcnVsZSApOiA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItYWxlcnQtcnVsZSIgZGF0YS1pZHg9Ijw/cGhwIGVjaG8gJGlkeDsgPz4iIHN0eWxlPSJiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4O3Bvc2l0aW9uOnJlbGF0aXZlIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFnZW5kYV9hbGVydHNbPD9waHAgZWNobyAkaWR4OyA/Pl1baWRdIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkcnVsZVsnaWQnXSk7ID8+Ij4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z2FwOjEwcHg7YWxpZ24taXRlbXM6c3RhcnQ7bWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTc2MDZhO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPk5vbWUgZGEgcmVncmE8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWdlbmRhX2FsZXJ0c1s8P3BocCBlY2hvICRpZHg7ID8+XVtuYW1lXSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHJ1bGVbJ25hbWUnXSk7ID8+IiBwbGFjZWhvbGRlcj0iRXg6IExlbWJyZXRlIDcgZGlhcyBhbnRlcyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7cGFkZGluZy10b3A6MjJweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo1cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhZ2VuZGFfYWxlcnRzWzw/cGhwIGVjaG8gJGlkeDsgPz5dW2VuYWJsZWRdIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCgkcnVsZVsnZW5hYmxlZCddLCAxKTsgPz4+IEF0aXZvCiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJ2bTJSZW1vdmVBbGVydFJ1bGUodGhpcykiIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZWYyZjI7Ym9yZGVyOjFweCBzb2xpZCAjZmVjYWNhO2NvbG9yOiNkYzI2MjY7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo1cHggMTBweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweCI+8J+Xke+4jzwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMTgwcHgsMWZyKSk7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTc2MDZhO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPuKPsCBEaWFzIGFudGVzIGRvIGV2ZW50bzwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9ImFnZW5kYV9hbGVydHNbPD9waHAgZWNobyAkaWR4OyA/Pl1bZGF5c19iZWZvcmVdIiB2YWx1ZT0iPD9waHAgZWNobyBpbnR2YWwoJHJ1bGVbJ2RheXNfYmVmb3JlJ10pOyA/PiIgbWluPSIxIiBtYXg9IjM2NSIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NzYwNmE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+ToSBDYW5hbCBaLUFQSTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iYWdlbmRhX2FsZXJ0c1s8P3BocCBlY2hvICRpZHg7ID8+XVtjaGFubmVsXSIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRhZ19jaGFubmVscyBhcyAkY2sgPT4gJGNoICk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoJGNoWyd0eXBlJ10gPz8gJycpID09PSAnd2FiYScgKSBjb250aW51ZTsgLy8gZ3J1cG9zIHPDsyB2aWEgWi1BUEkKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRjayk7ID8+IiA8P3BocCBzZWxlY3RlZCgkcnVsZVsnY2hhbm5lbCddLCAkY2spOyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGVzY19odG1sKCRjaFsnbGFiZWwnXSA/PyAkY2spOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWYiPuKaoO+4jyBBcGVuYXMgWi1BUEkgKGdydXBvcyk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzU3NjA2YTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5GlIElEIGRvIEdydXBvIFdBPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImFnZW5kYV9hbGVydHNbPD9waHAgZWNobyAkaWR4OyA/Pl1bZ3JvdXBfaWRdIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkcnVsZVsnZ3JvdXBfaWQnXSk7ID8+IiBwbGFjZWhvbGRlcj0iRXg6IDEyMDM2MzQyNTc4NTM1ODc2NC1ncm91cCIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlIj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTc2MDZhO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfkqwgTWVuc2FnZW0gPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojOWNhM2FmIj7igJQgVmFyacOhdmVpczoge2RhdGF9IHtkaWFfc2VtYW5hfSB7dGlwb30ge2hvbWVuYWdlYWRvfSB7cHJlc3RhZG9yfSB7bG9jYWx9IHtlbmRlcmVjb30ge2Fzc2Vzc29yfSB7aG9yYXJpb30ge2N1c3RvfSB7ZGlhc19hbnRlc308L3NwYW4+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iYWdlbmRhX2FsZXJ0c1s8P3BocCBlY2hvICRpZHg7ID8+XVttZXNzYWdlXSIgcm93cz0iNSIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO3Jlc2l6ZTp2ZXJ0aWNhbCI+PD9waHAgZWNobyBlc2NfdGV4dGFyZWEoJHJ1bGVbJ21lc3NhZ2UnXSk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0idm0yQWRkQWxlcnRSdWxlKCkiIHN0eWxlPSJtYXJnaW4tdG9wOjRweDtwYWRkaW5nOjhweCAyMHB4O2JhY2tncm91bmQ6I2YwZjlmZjtib3JkZXI6MXB4IHNvbGlkICM3ZGQzZmM7Y29sb3I6IzAzNjlhMTtib3JkZXItcmFkaXVzOjZweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDAiPisgQWRpY2lvbmFyIFJlZ3JhPC9idXR0b24+CgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21hcmdpbi10b3A6MjBweDtwYWRkaW5nLXRvcDoxNnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlMGUwZTA7Z2FwOjEycHg7YWxpZ24taXRlbXM6Y2VudGVyIj4KICAgICAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICAgICAkbGFzdF9ydW4gPSBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2FsZXJ0c19sYXN0X3J1bicsICcnKTsKICAgICAgICAgICAgICAgIGlmICgkbGFzdF9ydW4pOiA/PgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NzYwNmEiPsOabHRpbW8gZGlzcGFybzogPD9waHAgZWNobyBlc2NfaHRtbCh2bTJfbG9jYWxfZGF0ZSgnZC9tIEg6aScsICRsYXN0X3J1bikpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidXR0b24gYnV0dG9uLXByaW1hcnkiIHN0eWxlPSJmb250LXNpemU6MTRweDtwYWRkaW5nOjhweCAyNHB4Ij7wn5K+IFNhbHZhciBBbGVydGFzPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj48IS0tICN2bTJBbGVydFJ1bGVzV3JhcCAtLT4KICAgICAgICA8L2Zvcm0+CgogICAgICAgIDwhLS0gSW5mbyAvIExvZyBib3ggLS0+CiAgICAgICAgPD9waHAKICAgICAgICAkYWxlcnRfbG9nID0gZ2V0X29wdGlvbigndm0yX2FnZW5kYV9hbGVydHNfbG9nJywgW10pOwogICAgICAgICRsb2dfY291bnQgPSBjb3VudCgkYWxlcnRfbG9nKTsKICAgICAgICA/PgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MjBweDtiYWNrZ3JvdW5kOiNmMGZkZjQ7Ym9yZGVyOjFweCBzb2xpZCAjYmJmN2QwO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTRweCAxOHB4Ij4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6IzE1ODAzZDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo2cHgiPvCfk4sgU3RhdHVzIGRvIHNpc3RlbWE8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzE2NjUzNDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjE2cHgiPgogICAgICAgICAgICAgICAgPHNwYW4+8J+TiiBBbGVydGFzIGrDoSBlbnZpYWRvcyBubyBsb2c6IDxzdHJvbmc+PD9waHAgZWNobyAkbG9nX2NvdW50OyA/Pjwvc3Ryb25nPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuPuKPsCBDcm9uOiBkacOhcmlvIMOgcyAwODowMCAoaG9yw6FyaW8gU1ApPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+8J+UkCBEZWR1cGxpY2HDp8OjbyBhdXRvbcOhdGljYSAobnVuY2EgZW52aWEgMnggbyBtZXNtbyBhbGVydGEpPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgaWYgKCRsb2dfY291bnQgPiAwKTogPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iaWYoY29uZmlybSgnSXNzbyB2YWkgbGltcGFyIG8gaGlzdMOzcmljbyBlIHBlcm1pdGlyIHJlLWVudmlvIGRvcyBhbGVydGFzLiBDb25maXJtYXI/Jykpe2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDbGVhckFsZXJ0TG9nJykuc3VibWl0KCk7fSByZXR1cm4gZmFsc2U7IiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6I2RjMjYyNiI+8J+Xke+4jyBMaW1wYXIgbG9nIGRlIGRlZHVwbGljYcOnw6NvPC9hPgogICAgICAgICAgICAgICAgPGZvcm0gaWQ9InZtMkNsZWFyQWxlcnRMb2ciIG1ldGhvZD0icG9zdCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl9hZ2VuZGFfYWxlcnRzX3NhdmUnKTsgPz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ2bTJfc2F2ZV9hZ2VuZGFfYWxlcnRzIiB2YWx1ZT0iMSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idm0yX2FnZW5kYV9hbGVydHNfZ2xvYmFsX2VuYWJsZWQiIHZhbHVlPSI8P3BocCBlY2hvICRhZ19hbGVydHNfZW5hYmxlZDsgPz4iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InZtMl9jbGVhcl9hbGVydF9sb2ciIHZhbHVlPSIxIj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFZhcmnDoXZlaXMgaW5mbyAtLT4KICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjE0cHg7YmFja2dyb3VuZDojZmVmY2U4O2JvcmRlcjoxcHggc29saWQgI2ZlZjA4YTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE0cHggMThweCI+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojODU0ZDBlO21hcmdpbi1ib3R0b206OHB4Ij7wn5OMIFZhcmnDoXZlaXMgZGlzcG9uw612ZWlzIG5hIG1lbnNhZ2VtPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O2ZvbnQtc2l6ZToxMnB4Ij4KICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKFsnZGF0YScsJ2RpYV9zZW1hbmEnLCd0aXBvJywnaG9tZW5hZ2VhZG8nLCdwcmVzdGFkb3InLCdsb2NhbCcsJ2VuZGVyZWNvJywnYXNzZXNzb3InLCdob3JhcmlvJywnY3VzdG8nLCdkaWFzX2FudGVzJ10gYXMgJHZhcik6ID8+CiAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT0iYmFja2dyb3VuZDojZmVmOWMzO3BhZGRpbmc6MnB4IDdweDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkICNmZWYwOGE7Y29sb3I6IzcxM2YxMiI+ezw/cGhwIGVjaG8gJHZhcjsgPz59PC9jb2RlPgogICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgdmFyIHZtMkFsZXJ0SWR4ID0gPD9waHAgZWNobyBtYXgoY291bnQoJGFnX2FsZXJ0cykgLSAxLCAtMSk7ID8+OwogICAgdmFyIHZtMkFsZXJ0Q2hhbm5lbHMgPSA8P3BocAogICAgICAgICRjaF9vcHRzID0gW107CiAgICAgICAgZm9yZWFjaCAoJGFnX2NoYW5uZWxzIGFzICRjayA9PiAkY2gpIHsKICAgICAgICAgICAgaWYgKCgkY2hbJ3R5cGUnXSA/PyAnJykgPT09ICd3YWJhJykgY29udGludWU7CiAgICAgICAgICAgICRjaF9vcHRzW10gPSBbJ2tleScgPT4gJGNrLCAnbGFiZWwnID0+ICRjaFsnbGFiZWwnXSA/PyAkY2tdOwogICAgICAgIH0KICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRjaF9vcHRzLCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsKICAgID8+OwogICAgdmFyIHZtMkFsZXJ0RGVmTXNnID0gPD9waHAgZWNobyBqc29uX2VuY29kZSgkYWdfZGVmX21zZywgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7ID8+OwoKICAgIGZ1bmN0aW9uIHZtMkFkZEFsZXJ0UnVsZSgpIHsKICAgICAgICB2bTJBbGVydElkeCsrOwogICAgICAgIHZhciBpZHggPSB2bTJBbGVydElkeDsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWxlcnRFbXB0eScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgdmFyIGNoT3B0cyA9IHZtMkFsZXJ0Q2hhbm5lbHMubWFwKGZ1bmN0aW9uKGMpewogICAgICAgICAgICByZXR1cm4gJzxvcHRpb24gdmFsdWU9IicrYy5rZXkrJyI+JytjLmxhYmVsKyc8L29wdGlvbj4nOwogICAgICAgIH0pLmpvaW4oJycpOwogICAgICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9InZtMi1hbGVydC1ydWxlIiBkYXRhLWlkeD0iJytpZHgrJyIgc3R5bGU9ImJhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MThweDttYXJnaW4tYm90dG9tOjE0cHg7cG9zaXRpb246cmVsYXRpdmUiPicKICAgICAgICAgICAgKyc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhZ2VuZGFfYWxlcnRzWycraWR4KyddW2lkXSIgdmFsdWU9ImFyXycraWR4K0RhdGUubm93KCkrJyI+JwogICAgICAgICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z2FwOjEwcHg7YWxpZ24taXRlbXM6c3RhcnQ7bWFyZ2luLWJvdHRvbToxMnB4Ij4nCiAgICAgICAgICAgICsnPGRpdj48bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTc2MDZhO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPk5vbWUgZGEgcmVncmE8L2xhYmVsPicKICAgICAgICAgICAgKyc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWdlbmRhX2FsZXJ0c1snK2lkeCsnXVtuYW1lXSIgcGxhY2Vob2xkZXI9IkV4OiBMZW1icmV0ZSA3IGRpYXMgYW50ZXMiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij48L2Rpdj4nCiAgICAgICAgICAgICsnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtwYWRkaW5nLXRvcDoyMnB4Ij4nCiAgICAgICAgICAgICsnPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjVweCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhZ2VuZGFfYWxlcnRzWycraWR4KyddW2VuYWJsZWRdIiB2YWx1ZT0iMSIgY2hlY2tlZD4gQXRpdm88L2xhYmVsPicKICAgICAgICAgICAgKyc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0idm0yUmVtb3ZlQWxlcnRSdWxlKHRoaXMpIiBzdHlsZT0iYmFja2dyb3VuZDojZmVmMmYyO2JvcmRlcjoxcHggc29saWQgI2ZlY2FjYTtjb2xvcjojZGMyNjI2O2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6NXB4IDEwcHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEycHgiPvCfl5HvuI88L2J1dHRvbj4nCiAgICAgICAgICAgICsnPC9kaXY+PC9kaXY+JwogICAgICAgICAgICArJzxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxODBweCwxZnIpKTtnYXA6MTJweDttYXJnaW4tYm90dG9tOjEycHgiPicKICAgICAgICAgICAgKyc8ZGl2PjxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NzYwNmE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+4o+wIERpYXMgYW50ZXMgZG8gZXZlbnRvPC9sYWJlbD4nCiAgICAgICAgICAgICsnPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0iYWdlbmRhX2FsZXJ0c1snK2lkeCsnXVtkYXlzX2JlZm9yZV0iIHZhbHVlPSI3IiBtaW49IjEiIG1heD0iMzY1IiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+PC9kaXY+JwogICAgICAgICAgICArJzxkaXY+PGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzU3NjA2YTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5OhIENhbmFsIFotQVBJPC9sYWJlbD4nCiAgICAgICAgICAgICsnPHNlbGVjdCBuYW1lPSJhZ2VuZGFfYWxlcnRzWycraWR4KyddW2NoYW5uZWxdIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+JytjaE9wdHMrJzwvc2VsZWN0PicKICAgICAgICAgICAgKyc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzljYTNhZiI+4pqg77iPIEFwZW5hcyBaLUFQSSAoZ3J1cG9zKTwvc3Bhbj48L2Rpdj4nCiAgICAgICAgICAgICsnPGRpdj48bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTc2MDZhO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfkaUgSUQgZG8gR3J1cG8gV0E8L2xhYmVsPicKICAgICAgICAgICAgKyc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWdlbmRhX2FsZXJ0c1snK2lkeCsnXVtncm91cF9pZF0iIHBsYWNlaG9sZGVyPSJFeDogMTIwMzYzNDI1Nzg1MzU4NzY0LWdyb3VwIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtmb250LWZhbWlseTptb25vc3BhY2UiPjwvZGl2PicKICAgICAgICAgICAgKyc8L2Rpdj4nCiAgICAgICAgICAgICsnPGRpdj48bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTc2MDZhO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfkqwgTWVuc2FnZW0gPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojOWNhM2FmIj7igJQgVmFyacOhdmVpczoge2RhdGF9IHtkaWFfc2VtYW5hfSB7dGlwb30ge2hvbWVuYWdlYWRvfSB7cHJlc3RhZG9yfSB7bG9jYWx9IHtlbmRlcmVjb30ge2Fzc2Vzc29yfSB7aG9yYXJpb30ge2N1c3RvfSB7ZGlhc19hbnRlc308L3NwYW4+PC9sYWJlbD4nCiAgICAgICAgICAgICsnPHRleHRhcmVhIG5hbWU9ImFnZW5kYV9hbGVydHNbJytpZHgrJ11bbWVzc2FnZV0iIHJvd3M9IjUiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtyZXNpemU6dmVydGljYWwiPicrdm0yQWxlcnREZWZNc2crJzwvdGV4dGFyZWE+JwogICAgICAgICAgICArJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFsZXJ0UnVsZXMnKS5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIGh0bWwpOwogICAgfQogICAgZnVuY3Rpb24gdm0yUmVtb3ZlQWxlcnRSdWxlKGJ0bikgewogICAgICAgIGJ0bi5jbG9zZXN0KCcudm0yLWFsZXJ0LXJ1bGUnKS5yZW1vdmUoKTsKICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy52bTItYWxlcnQtcnVsZScpLmxlbmd0aCkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWxlcnRFbXB0eScpLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICB9CiAgICB9CiAgICA8L3NjcmlwdD4KICAgIDw/cGhwIGVuZGlmOyAvLyB2aWV3ID09PSBhbGVydGFzID8+CgogICAgPHNjcmlwdD4KICAgIC8vIERldGVjdGEgZSBwYXJzZWlhIGJsb2JzIGRvIHRpcG8gIkNoYXZlOiBWYWxvciAvIENoYXZlOiBWYWxvciIKICAgIGZ1bmN0aW9uIHZtMlBhcnNlQmxvYihyYXcpIHsKICAgICAgICBpZiAoIXJhdyB8fCByYXcgPT09ICfigJQnIHx8IHJhdy5sZW5ndGggPCAzMCkgcmV0dXJuIG51bGw7CiAgICAgICAgLy8gUHJlY2lzYSB0ZXIgcGFkcsOjbyAiUGFsYXZyYTogdmFsb3IgLyIgb3UgY2hlY2ttYXJrIGNvbSBzZWdtZW50b3MKICAgICAgICBpZiAocmF3LmluZGV4T2YoJy8nKSA9PT0gLTEgJiYgcmF3LmluZGV4T2YoJ+KchScpID09PSAtMSkgcmV0dXJuIG51bGw7CiAgICAgICAgdmFyIHNlZ21lbnRzID0gcmF3LnNwbGl0KC9ccypcL1xzKi8pLm1hcChmdW5jdGlvbihzKXsgcmV0dXJuIHMucmVwbGFjZSgvXlxzKuKchVxzKi8sICcnKS50cmltKCk7IH0pOwogICAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gbnVsbDsKICAgICAgICB2YXIgaHRtbCA9ICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHgiPic7CiAgICAgICAgc2VnbWVudHMuZm9yRWFjaChmdW5jdGlvbihzZWcpIHsKICAgICAgICAgICAgaWYgKCFzZWcpIHJldHVybjsKICAgICAgICAgICAgdmFyIGNpID0gc2VnLmluZGV4T2YoJzonKTsKICAgICAgICAgICAgaWYgKGNpID4gMCAmJiBjaSA8IDI4KSB7CiAgICAgICAgICAgICAgICB2YXIgbGJsID0gc2VnLnN1YnN0cmluZygwLCBjaSkudHJpbSgpOwogICAgICAgICAgICAgICAgdmFyIHZhbCA9IHNlZy5zdWJzdHJpbmcoY2kgKyAxKS50cmltKCk7CiAgICAgICAgICAgICAgICBpZiAodmFsKSBodG1sICs9ICc8ZGl2IGNsYXNzPSJ2bTItYmxvYi1yb3ciPjxzcGFuIGNsYXNzPSJ2bTItYmxvYi1sYmwiPicrbGJsKyc8L3NwYW4+PHNwYW4gY2xhc3M9InZtMi1ibG9iLXZhbCI+Jyt2YWwrJzwvc3Bhbj48L2Rpdj4nOwogICAgICAgICAgICB9IGVsc2UgaWYgKHNlZy5sZW5ndGggPiAyKSB7CiAgICAgICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJ2bTItYmxvYi1yb3ciPjxzcGFuIGNsYXNzPSJ2bTItYmxvYi12YWwiPicrc2VnKyc8L3NwYW4+PC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CiAgICAgICAgcmV0dXJuIGh0bWw7CiAgICB9CiAgICBmdW5jdGlvbiB2bTJDbGVhbk5hbWUocmF3KSB7CiAgICAgICAgaWYgKCFyYXcpIHJldHVybiAn4oCUJzsKICAgICAgICB2YXIgbSA9IHJhdy5tYXRjaCgvTm9tZSBDb21wbGV0b1s6XHNdKyhbXlwvXG5dezEsODB9KS9pKTsKICAgICAgICBpZiAobSkgcmV0dXJuIG1bMV0udHJpbSgpOwogICAgICAgIHJldHVybiByYXc7CiAgICB9CiAgICBmdW5jdGlvbiB2bTJSb3cobGJsLCB2YWwpIHsKICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9InZtMi1tb2RhbC1yb3ciPjxzcGFuIGNsYXNzPSJ2bTItbW9kYWwtbGJsIj4nK2xibCsnPC9zcGFuPjxzcGFuIGNsYXNzPSJ2bTItbW9kYWwtdmFsIj4nK3ZhbCsnPC9zcGFuPjwvZGl2Pic7CiAgICB9CiAgICBmdW5jdGlvbiB2bTJPcGVuTW9kYWwoZSkgewogICAgICAgIHZhciBkdSA9IGUuZGF5c191bnRpbDsKICAgICAgICB2YXIgdGFnID0gZHUgPCAwID8gJzxzcGFuIHN0eWxlPSJjb2xvcjojNmU3NzgxIj7inJMgUmVhbGl6YWRvPC9zcGFuPicKICAgICAgICAgICAgICAgIDogZHUgPT09IDAgPyAnPHNwYW4gc3R5bGU9ImNvbG9yOiNkMTI0MmY7Zm9udC13ZWlnaHQ6NzAwIj7wn5S0IEhPSkUhPC9zcGFuPicKICAgICAgICAgICAgICAgIDogZHUgPT09IDEgPyAnPHNwYW4gc3R5bGU9ImNvbG9yOiNlMTZmMjQiPuKPsCBBbWFuaMOjPC9zcGFuPicKICAgICAgICAgICAgICAgIDogJzxzcGFuIHN0eWxlPSJjb2xvcjojNTc2MDZhIj7wn5OFIEVtICcrZHUrJyBkaWFzPC9zcGFuPic7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnVGl0bGUnKS5pbm5lckhUTUwgPSAn8J+TiyAnICsgZS5kYXRlX2ZtdCArICcgJyArIHRhZzsKCiAgICAgICAgdmFyIGh0bWwgPSAnJzsKICAgICAgICAvLyBCbG9jbyBjbGllbnRlIG5vIHRvcG8KICAgICAgICBpZiAoZS5jdXN0b21lciB8fCAoZS53YV9saW5rICYmIGUud2FfbGluayAhPT0gJyMnKSkgewogICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJ2bTItbW9kYWwtY2xpZW50ZSI+JzsKICAgICAgICAgICAgaWYgKGUuY3VzdG9tZXIpIGh0bWwgKz0gJzxkaXYgY2xhc3M9InZtMi1tb2RhbC1jbGllbnRlLW5vbWUiPvCfkaQgJyArIGUuY3VzdG9tZXIgKyAnPC9kaXY+JzsKICAgICAgICAgICAgaWYgKGUud2FfbGluayAmJiBlLndhX2xpbmsgIT09ICcjJykgewogICAgICAgICAgICAgICAgaHRtbCArPSAnPGEgaHJlZj0iJytlLndhX2xpbmsrJyIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJ2bTItbWJ0biBncmVlbiIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoxMHB4IDIwcHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC13ZWlnaHQ6NzAwIj7wn5KsIENoYW1hciBubyBXaGF0c0FwcDwvYT4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CiAgICAgICAgfQogICAgICAgIC8vIENhbXBvcyBwYXJzZWFkb3MgZG8gYmxvYiAoc8OzIGV4aWJlIHNlIHRpdmVyIHZhbG9yKQogICAgICAgIHZhciBmaWVsZHMgPSBbCiAgICAgICAgICAgIFsn8J+OqiBUaXBvIGRlIEV2ZW50bycsICBlLnRpcG9dLAogICAgICAgICAgICBbJ/CfkZEgSG9tZW5hZ2VhZG8vQ2FzYWwnLCBlLmhvbWVuYWdlYWRvXSwKICAgICAgICAgICAgWyfwn46kIFByZXN0YWRvcicsICAgICAgIGUucHJlc3RhZG9yXSwKICAgICAgICAgICAgWyfwn5ONIExvY2FsJywgICAgICAgICAgIGUubG9jYWxdLAogICAgICAgICAgICBbJ/Cfj6AgRW5kZXJlw6dvJywgICAgICAgIGUuZW5kZXJlY29dLAogICAgICAgICAgICBbJ/CfpJ0gQXNzZXNzb3InLCAgICAgICAgZS5hc3Nlc3Nvcl0sCiAgICAgICAgICAgIFsn4o+wIEhvcsOhcmlvJywgICAgICAgICBlLmhvcmFyaW9dLAogICAgICAgICAgICBbJ/CfkrAgQ3VzdG8nLCAgICAgICAgICAgZS5jdXN0b10sCiAgICAgICAgXTsKICAgICAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbihyKSB7CiAgICAgICAgICAgIGlmIChyWzFdICYmIHJbMV0gIT09ICfigJQnICYmIHJbMV0gIT09ICcnKSB7CiAgICAgICAgICAgICAgICBodG1sICs9IHZtMlJvdyhyWzBdLCByWzFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIC8vIFNlcnZpw6dvcyBWaXZhTWFpcyDigJQgYmxvY28gc2VwYXJhZG8gc2UgZXhpc3RpcgogICAgICAgIGlmIChlLnNlcnZpY29zICYmIGUuc2Vydmljb3MudHJpbSgpKSB7CiAgICAgICAgICAgIGh0bWwgKz0gJzxociBjbGFzcz0idm0yLW1vZGFsLWhyIj4nOwogICAgICAgICAgICBodG1sICs9ICc8cCBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjojN2MzYWVkO21hcmdpbjowIDAgOHB4Ij7wn46tIFNlcnZpw6dvcyBWaXZhTWFpczwvcD4nOwogICAgICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojMWQyMzI3O3doaXRlLXNwYWNlOnByZS1saW5lO2xpbmUtaGVpZ2h0OjEuNSI+JyArIGUuc2Vydmljb3MgKyAnPC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgLy8gV2hhdHNhcHAKICAgICAgICBodG1sICs9ICc8aHIgY2xhc3M9InZtMi1tb2RhbC1ociI+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJ2bTItbW9kYWwtYWN0cyI+JzsKICAgICAgICBpZiAoZS53YV9saW5rICYmIGUud2FfbGluayAhPT0gJyMnKSB7CiAgICAgICAgICAgIGh0bWwgKz0gJzxhIGhyZWY9IicrZS53YV9saW5rKyciIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0idm0yLW1idG4gZ3JlZW4iPvCfkqwgV2hhdHNBcHA8L2E+JzsKICAgICAgICB9CiAgICAgICAgdmFyIGNvbnRyYXRvT3JkZXJJZCA9IGUud2Nfb3JkZXJfaWQgfHwgKGUuc291cmNlID09PSAnd2MnICYmIGUuaWQgJiYgIWlzTmFOKGUuaWQpID8gZS5pZCA6IDApOwogICAgICAgIGlmIChjb250cmF0b09yZGVySWQpIHsKICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBvbmNsaWNrPSJ2bTJPcGVuQ29udHJhdG8oJytjb250cmF0b09yZGVySWQrJykiIGNsYXNzPSJ2bTItbWJ0biIgc3R5bGU9ImJhY2tncm91bmQ6I2YzZjBmZjtib3JkZXI6MXB4IHNvbGlkICNhNzhiZmE7Y29sb3I6IzZkMjhkOSI+8J+ThCBDb250cmF0bzwvYnV0dG9uPic7CiAgICAgICAgfQogICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnQ29udGVudCcpLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnTW9kYWwnKS5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CiAgICB9CiAgICB2YXIgdm0yQ29udHJhdG9Ob25jZSA9ICc8P3BocCBlY2hvIHdwX2NyZWF0ZV9ub25jZSgndm0yX2NvbnRyYXRvJyk7ID8+JzsKICAgIGZ1bmN0aW9uIHZtMk9wZW5Db250cmF0byhvcmRlcl9pZCkgewogICAgICAgIHZhciBvdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkNvbnRyYXRvT3ZlcmxheScpOwogICAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkNvbnRyYXRvQ29udGVudCcpOwogICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NDBweDtjb2xvcjojNTc2MDZhIj7ij7MgQ2FycmVnYW5kbyBkYWRvcyBkbyBjb250cmF0by4uLjwvZGl2Pic7CiAgICAgICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CiAgICAgICAgLy8gRmVjaGEgbW9kYWwgcHJpbmNpcGFsIHNlIGVzdGl2ZXIgYWJlcnRvCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnTW9kYWwnKS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7CiAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAndm0yX2NvbnRyYXRvX2RhdGEnKTsKICAgICAgICBmZC5hcHBlbmQoJ29yZGVyX2lkJywgb3JkZXJfaWQpOwogICAgICAgIGZkLmFwcGVuZCgnbm9uY2UnLCB2bTJDb250cmF0b05vbmNlKTsKICAgICAgICBmZXRjaChhamF4dXJsLCB7bWV0aG9kOidQT1NUJywgYm9keTpmZH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiByLmpzb24oKTt9KQogICAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXMpewogICAgICAgICAgICAgICAgaWYgKCFyZXMuc3VjY2VzcykgewogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9ImNvbG9yOiNkMTI0MmY7cGFkZGluZzoyMHB4Ij5FcnJvOiAnKyhyZXMuZGF0YXx8J2Rlc2NvbmhlY2lkbycpKyc8L2Rpdj4nOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkID0gcmVzLmRhdGE7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjdChsYmwsIHZhbCkgewogICAgICAgICAgICAgICAgICAgIGlmICghdmFsIHx8IHZhbCA9PT0gJ+KAlCcgfHwgdmFsID09PSAnJykgcmV0dXJuICcnOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0idm0yLWN0LXJvdyI+PHNwYW4gY2xhc3M9InZtMi1jdC1sYmwiPicrbGJsKyc8L3NwYW4+PHNwYW4gY2xhc3M9InZtMi1jdC12YWwiPicrdmFsKyc8L3NwYW4+PC9kaXY+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBodG1sID0gJyc7CiAgICAgICAgICAgICAgICAvLyBGSUNIQSBETyBFVkVOVE8KICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InZtMi1jdC1zZWN0aW9uIj7wn5OFIEZJQ0hBIERPIEVWRU5UTzwvZGl2Pic7CiAgICAgICAgICAgICAgICBodG1sICs9IGN0KCfwn46qIFRpcG8nLCBkLnRpcG9fZXZlbnRvKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/CfkZEgSG9tZW5hZ2VhZG8nLCBkLmhvbWVuYWdlYWRvKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/Cfk4UgRGF0YScsIGQuZGF0YV9ldmVudG8pOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn4o+wIEluw61jaW8nLCBkLmhvcmFfaW5pY2lvICE9PSAn4oCUJyA/IGQuaG9yYV9pbmljaW8gOiAnJyk7CiAgICAgICAgICAgICAgICBodG1sICs9IGN0KCfij7AgVMOpcm1pbm8nLCBkLmhvcmFfdGVybWlubyAhPT0gJ+KAlCcgPyBkLmhvcmFfdGVybWlubyA6ICcnKTsKICAgICAgICAgICAgICAgIGlmIChkLmR1cmFjYW8gJiYgZC5kdXJhY2FvICE9PSAn4oCUJykgaHRtbCArPSBjdCgn4o+xIER1cmHDp8OjbycsIGQuZHVyYWNhbyArICcgbWluJyk7CiAgICAgICAgICAgICAgICBodG1sICs9IGN0KCfwn46kIEF0cmHDp8O1ZXMnLCBkLmF0cmFjYW8pOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+TjSBMb2NhbCcsIGQubG9jYWxfZXZlbnRvKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/Cfj6AgRW5kZXJlw6dvIGV2ZW50bycsIGQuZW5kZXJlY28pOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+PmCBCYWlycm8nLCBkLmJhaXJybyAhPT0gJ+KAlCcgPyBkLmJhaXJybyA6ICcnKTsKICAgICAgICAgICAgICAgIGlmIChkLmNpZGFkZSAhPT0gJ+KAlCcgJiYgZC5lc3RhZG8gIT09ICfigJQnKSBodG1sICs9IGN0KCfwn4yGIENpZGFkZS9VRicsIGQuY2lkYWRlKycvJytkLmVzdGFkbyk7CiAgICAgICAgICAgICAgICBodG1sICs9IGN0KCfwn6SdIEFzc2Vzc29yJywgZC5hc3Nlc3Nvcik7CiAgICAgICAgICAgICAgICBodG1sICs9IGN0KCfwn5KsIE9icyBjbGllbnRlJywgZC5vYnMgIT09ICfigJQnID8gZC5vYnMgOiAnJyk7CiAgICAgICAgICAgICAgICAvLyBEQURPUyBJTlRFUk5PUwogICAgICAgICAgICAgICAgaHRtbCArPSAnPGhyIGNsYXNzPSJ2bTItY3Qtc2VwIj48ZGl2IGNsYXNzPSJ2bTItY3Qtc2VjdGlvbiI+8J+UkiBEQURPUyBJTlRFUk5PUzwvZGl2Pic7CiAgICAgICAgICAgICAgICBodG1sICs9IGN0KCfwn5GkIENsaWVudGUnLCBkLm5vbWUpOwogICAgICAgICAgICAgICAgaWYgKGQuY3BmICYmIGQuY3BmICE9PSAn4oCUJykgaHRtbCArPSBjdCgn8J+qqiBDUEYvQ05QSicsIGQuY3BmKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/Cfk7EgV2hhdHNBcHAnLCBkLnRlbGVmb25lKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ+Kcie+4jyBFLW1haWwnLCBkLmVtYWlsKTsKICAgICAgICAgICAgICAgIGlmIChkLmVtcHJlc2EgJiYgZC5lbXByZXNhICE9PSAn4oCUJykgaHRtbCArPSBjdCgn8J+PoiBFbXByZXNhJywgZC5lbXByZXNhKTsKICAgICAgICAgICAgICAgIGlmIChkLmJpbF9hZGRyICYmIGQuYmlsX2FkZHIgIT09ICfigJQnKSB7CiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+TrCBFbmQuIGNvYnJhbsOnYScsIGQuYmlsX2FkZHIgKyAoZC5iaWxfY2lkYWRlICE9PSAn4oCUJyA/ICcsICcrZC5iaWxfY2lkYWRlKycvJytkLmJpbF9lc3RhZG8gOiAnJykpOwogICAgICAgICAgICAgICAgICAgIGlmIChkLmJpbF9jZXAgJiYgZC5iaWxfY2VwICE9PSAn4oCUJykgaHRtbCArPSBjdCgn8J+TriBDRVAnLCBkLmJpbF9jZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaHRtbCArPSAnPGhyIGNsYXNzPSJ2bTItY3Qtc2VwIj4nOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+nviBQZWRpZG8nLCAnIycrZC5udW1lcm8pOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+SsCBWYWxvciB0b3RhbCcsIGQudmFsb3IpOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+SsyBQYWdhbWVudG8nLCBkLnBndG8pOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+TpiBTdGF0dXMnLCBkLnN0YXR1c19wZWRpZG8pOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+TnSBDbGlja1NpZ24nLCBkLmNvbnRyYXRvKTsKICAgICAgICAgICAgICAgIGlmIChkLmNzX2xpbmspIGh0bWwgKz0gY3QoJ/CflJcgTGluayBjb250cmF0bycsICc8YSBocmVmPSInK2QuY3NfbGluaysnIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiMwOTY5ZGEiPkFicmlyIGRvY3VtZW50bzwvYT4nKTsKICAgICAgICAgICAgICAgIGlmIChkLnV0bV9zb3VyY2UgIT09ICfigJQnKSBodG1sICs9IGN0KCfwn5SXIE9yaWdlbScsIGQudXRtX3NvdXJjZSk7CiAgICAgICAgICAgICAgICBpZiAoZC51dG1fY2FtcGFpZ24gIT09ICfigJQnKSBodG1sICs9IGN0KCfwn5OiIENhbXBhbmhhJywgZC51dG1fY2FtcGFpZ24pOwogICAgICAgICAgICAgICAgLy8gQcOnw7VlcwogICAgICAgICAgICAgICAgaHRtbCArPSAnPGhyIGNsYXNzPSJ2bTItY3Qtc2VwIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7ZmxleC13cmFwOndyYXAiPic7CiAgICAgICAgICAgICAgICBodG1sICs9ICc8YSBocmVmPSInK2QubGlua19hZG1pbisnIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InZtMi1tYnRuIiBzdHlsZT0iYmFja2dyb3VuZDojZjNmMGZmO2JvcmRlcjoxcHggc29saWQgI2E3OGJmYTtjb2xvcjojNmQyOGQ5O2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OXB4IDE2cHgiPvCflJcgVmVyIFBlZGlkbyBXUDwvYT4nOwogICAgICAgICAgICAgICAgaWYgKGQudGVsZWZvbmUpIGh0bWwgKz0gJzxhIGhyZWY9Imh0dHBzOi8vd2EubWUvJytkLnRlbGVmb25lKyciIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0idm0yLW1idG4gZ3JlZW4iIHN0eWxlPSJmb250LXNpemU6MTNweDtwYWRkaW5nOjlweCAxNnB4Ij7wn5KsIFdoYXRzQXBwPC9hPic7CiAgICAgICAgICAgICAgICBodG1sICs9ICc8L2Rpdj4nOwogICAgICAgICAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSBodG1sOwogICAgICAgICAgICB9KQogICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9ImNvbG9yOiNkMTI0MmY7cGFkZGluZzoyMHB4Ij5FcnJvIGRlIGNvbmV4w6NvLiBUZW50ZSBub3ZhbWVudGUuPC9kaXY+JzsKICAgICAgICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiB2bTJDYWxEYXkoY2VsbCkgewogICAgICAgIHZhciBzcGFucyA9IGNlbGwucXVlcnlTZWxlY3RvckFsbCgnLnZtMmFnZXYnKTsKICAgICAgICBpZiAoIXNwYW5zLmxlbmd0aCkgcmV0dXJuOwogICAgICAgIHZhciBldmVudHMgPSBbXTsKICAgICAgICBzcGFucy5mb3JFYWNoKGZ1bmN0aW9uKHMpeyBldmVudHMucHVzaChKU09OLnBhcnNlKHMuZGF0YXNldC5ldmVudCkpOyB9KTsKICAgICAgICBpZiAoZXZlbnRzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICB2bTJPcGVuTW9kYWwoZXZlbnRzWzBdKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvLyBNw7psdGlwbG9zIGV2ZW50b3M6IGxpc3RhIG5vIG1vZGFsCiAgICAgICAgdmFyIGUwID0gZXZlbnRzWzBdOwogICAgICAgIHZhciBkdSA9IGUwLmRheXNfdW50aWw7CiAgICAgICAgdmFyIHRhZyA9IGR1IDwgMCA/ICc8c3BhbiBzdHlsZT0iY29sb3I6IzZlNzc4MSI+4pyTIFJlYWxpemFkbzwvc3Bhbj4nCiAgICAgICAgICAgICAgICA6IGR1ID09PSAwID8gJzxzcGFuIHN0eWxlPSJjb2xvcjojZDEyNDJmO2ZvbnQtd2VpZ2h0OjcwMCI+8J+UtCBIT0pFITwvc3Bhbj4nCiAgICAgICAgICAgICAgICA6IGR1ID09PSAxID8gJzxzcGFuIHN0eWxlPSJjb2xvcjojZTE2ZjI0Ij7ij7AgQW1hbmjDozwvc3Bhbj4nCiAgICAgICAgICAgICAgICA6ICc8c3BhbiBzdHlsZT0iY29sb3I6IzU3NjA2YSI+8J+ThSBFbSAnK2R1KycgZGlhczwvc3Bhbj4nOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJBZ1RpdGxlJykuaW5uZXJIVE1MID0gJ/Cfk4UgJyArIGUwLmRhdGVfZm10ICsgJyDigJQgJyArIGV2ZW50cy5sZW5ndGggKyAnIGV2ZW50b3MgJyArIHRhZzsKICAgICAgICB2YXIgaHRtbCA9ICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxMHB4Ij4nOwogICAgICAgIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2LCBpKSB7CiAgICAgICAgICAgIHZhciBjb2xvciA9IGV2LmNvbG9yIHx8ICcjMDk2OWRhJzsKICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1sZWZ0OjRweCBzb2xpZCAnK2NvbG9yKyc7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzIiBvbmNsaWNrPSJ2bTJPcGVuTW9kYWwodm0yQWdEYXlFdmVudHNbJytpKyddKSIgb25tb3VzZW92ZXI9InRoaXMuc3R5bGUuYmFja2dyb3VuZD1cJyNmNmY4ZmFcJyIgb25tb3VzZW91dD0idGhpcy5zdHlsZS5iYWNrZ3JvdW5kPVwnI2ZmZlwnIj4nOwogICAgICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbTo0cHgiPicrZXYuY3VzdG9tZXIrJzwvZGl2Pic7CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NzYwNmE7bWFyZ2luLWJvdHRvbToycHgiPvCfjq0gJysoZXYuYXRyYWNvZXN8fCfigJQnKSsnPC9kaXY+JzsKICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YSI+8J+OqiAnKyhldi50aXBvfHwn4oCUJykrJzwvZGl2Pic7CiAgICAgICAgICAgIGlmIChldi5ob21lbmFnZWFkbykgaHRtbCArPSAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YSI+8J+RkSAnK2V2LmhvbWVuYWdlYWRvKyc8L2Rpdj4nOwogICAgICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojMDk2OWRhO21hcmdpbi10b3A6NnB4O2ZvbnQtd2VpZ2h0OjYwMCI+VmVyIGRldGFsaGVzIOKGkjwvZGl2Pic7CiAgICAgICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CiAgICAgICAgfSk7CiAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKICAgICAgICB3aW5kb3cudm0yQWdEYXlFdmVudHMgPSBldmVudHM7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnQ29udGVudCcpLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnTW9kYWwnKS5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CiAgICB9CiAgICBmdW5jdGlvbiB2bTJGaWx0ZXJBZ2VuZGEoKSB7CiAgICAgICAgdmFyIHEgICAgID0gKChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWdTZWFyY2gnKXx8e30pLnZhbHVlfHwnJykudG9Mb3dlckNhc2UoKS50cmltKCk7CiAgICAgICAgdmFyIGNhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1ldi1jYXJkJyk7CiAgICAgICAgdmFyIHZpc2libGUgPSAwOwogICAgICAgIGNhcmRzLmZvckVhY2goZnVuY3Rpb24oY2FyZCkgewogICAgICAgICAgICB2YXIgcyAgPSBjYXJkLmRhdGFzZXQuc2VhcmNoIHx8ICcnOwogICAgICAgICAgICB2YXIgb2sgPSAhcSB8fCBzLmluZGV4T2YocSkgIT09IC0xOwogICAgICAgICAgICBjYXJkLnN0eWxlLmRpc3BsYXkgPSBvayA/ICcnIDogJ25vbmUnOwogICAgICAgICAgICBpZiAob2spIHZpc2libGUrKzsKICAgICAgICB9KTsKICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWdDb3VudCcpOwogICAgICAgIGlmIChlbCkgZWwudGV4dENvbnRlbnQgPSB2aXNpYmxlICsgJyBldmVudG8nICsgKHZpc2libGUgIT09IDEgPyAncycgOiAnJyk7CiAgICB9CiAgICBmdW5jdGlvbiB2bTJDbGVhclNlYXJjaCgpIHsKICAgICAgICB2YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJBZ1NlYXJjaCcpOwogICAgICAgIGlmIChzKSBzLnZhbHVlID0gJyc7CiAgICAgICAgdm0yRmlsdGVyQWdlbmRhKCk7CiAgICB9CiAgICB2YXIgdm0yQWdTeW5jTm9uY2UgPSAnPD9waHAgZWNobyBlc2NfanMoJHN5bmNfbm9uY2VfYWcpOyA/Pic7CiAgICB2YXIgdm0yQWdTeW5jU3RhdHVzVXJsID0gJzw/cGhwIGVjaG8gZXNjX2pzKCRhZ19zeW5jX3N0YXR1c191cmwpOyA/Pic7CiAgICB2YXIgdm0yQWdMYXN0U3luY1ZhbCA9ICc8P3BocCBlY2hvIGVzY19qcygkbGFzdF9zeW5jX2FnKTsgPz4nOwogICAgZnVuY3Rpb24gdm0yQWdTeW5jKCkgewogICAgICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWdTeW5jQnRuJyk7CiAgICAgICAgaWYgKCFidG4pIHJldHVybjsKICAgICAgICBidG4uZGlzYWJsZWQgPSB0cnVlOyBidG4udGV4dENvbnRlbnQgPSAn4o+zIEFndWFyZGFuZG8uLi4nOwogICAgICAgIGZldGNoKGFqYXh1cmwsIHsKICAgICAgICAgICAgbWV0aG9kOidQT1NUJywgY3JlZGVudGlhbHM6J3NhbWUtb3JpZ2luJywKICAgICAgICAgICAgaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9LAogICAgICAgICAgICBib2R5OidhY3Rpb249dm0yX2FnZW5kYV90cmlnZ2VyX3N5bmMmbm9uY2U9Jyt2bTJBZ1N5bmNOb25jZQogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHIuanNvbigpO30pLnRoZW4oZnVuY3Rpb24oZCl7CiAgICAgICAgICAgIGlmIChkLnN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfinIUgU2luY3Jvbml6YW5kby4uLic7CiAgICAgICAgICAgICAgICB2YXIgdHJpZXMgPSAwOwogICAgICAgICAgICAgICAgdmFyIHBvbGwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIHRyaWVzKys7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRyaWVzID4gMzApIHsgY2xlYXJJbnRlcnZhbChwb2xsKTsgYnRuLmRpc2FibGVkPWZhbHNlOyBidG4udGV4dENvbnRlbnQ9J/CflIQgU2luY3Jvbml6YXIgUGxhbmlsaGEnOyByZXR1cm47IH0KICAgICAgICAgICAgICAgICAgICBmZXRjaCh2bTJBZ1N5bmNTdGF0dXNVcmwsIHtjcmVkZW50aWFsczonc2FtZS1vcmlnaW4nfSkKICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHIuanNvbigpO30pCiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHMpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMubGFzdF9zeW5jICYmIHMubGFzdF9zeW5jICE9PSB2bTJBZ0xhc3RTeW5jVmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsKTsgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSwgMzAwMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBidG4uZGlzYWJsZWQ9ZmFsc2U7IGJ0bi50ZXh0Q29udGVudD0n8J+UhCBTaW5jcm9uaXphciBQbGFuaWxoYSc7CiAgICAgICAgICAgICAgICBhbGVydCgnRXJybzogJyArIChkLmRhdGF8fCdEZXNjb25oZWNpZG8nKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIDwvc2NyaXB0PgogICAgPC9kaXY+CiAgICA8P3BocAp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gQUdFTkRBIOKAlCBESVNQQVRDSCBBTEVSVEFTIChjcm9uIGRpw6FyaW8pCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfZGlzcGF0Y2hfYWdlbmRhX2FsZXJ0cygpIHsKICAgIGlmICggISBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2FsZXJ0c19nbG9iYWxfZW5hYmxlZCcsIDEpICkgewogICAgICAgIHZtMl9sb2coJ2FnZW5kYV9hbGVydHM6IGRlc2FiaWxpdGFkbyBnbG9iYWxtZW50ZScsICdpbmZvJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgJHJ1bGVzID0gZ2V0X29wdGlvbigndm0yX2FnZW5kYV9hbGVydHMnLCBbXSk7CiAgICBpZiAoIGVtcHR5KCRydWxlcykgfHwgISBpc19hcnJheSgkcnVsZXMpICkgcmV0dXJuOwoKICAgICRnc19ldmVudHMgPSBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2dzaGVldHMnLCBbXSk7CiAgICBpZiAoICEgaXNfYXJyYXkoJGdzX2V2ZW50cykgKSAkZ3NfZXZlbnRzID0ganNvbl9kZWNvZGUoJGdzX2V2ZW50cywgdHJ1ZSkgPzogW107CiAgICBpZiAoIGVtcHR5KCRnc19ldmVudHMpICkgewogICAgICAgIHZtMl9sb2coJ2FnZW5kYV9hbGVydHM6IHNlbSBldmVudG9zIG5vIEdTaGVldHMnLCAnaW5mbycpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkdG9kYXlfdHMgID0gc3RydG90aW1lKCBjdXJyZW50X3RpbWUoJ1ktbS1kJykgKTsKICAgICRsb2cgICAgICAgPSBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2FsZXJ0c19sb2cnLCBbXSk7CiAgICBpZiAoICEgaXNfYXJyYXkoJGxvZykgKSAkbG9nID0gW107CiAgICAkZGF5c19wdCAgID0gWydTdW5kYXknPT4nRG9taW5nbycsJ01vbmRheSc9PidTZWd1bmRhJywnVHVlc2RheSc9PidUZXLDp2EnLCdXZWRuZXNkYXknPT4nUXVhcnRhJywnVGh1cnNkYXknPT4nUXVpbnRhJywnRnJpZGF5Jz0+J1NleHRhJywnU2F0dXJkYXknPT4nU8OhYmFkbyddOwogICAgJHNlbnRfdG90YWwgPSAwOwoKICAgIGZvcmVhY2ggKCAkcnVsZXMgYXMgJHJ1bGUgKSB7CiAgICAgICAgaWYgKCBlbXB0eSgkcnVsZVsnZW5hYmxlZCddKSApICAgY29udGludWU7CiAgICAgICAgaWYgKCBlbXB0eSgkcnVsZVsnZ3JvdXBfaWQnXSkgKSAgY29udGludWU7CiAgICAgICAgaWYgKCBlbXB0eSgkcnVsZVsnY2hhbm5lbCddKSApICAgY29udGludWU7CiAgICAgICAgaWYgKCBlbXB0eSgkcnVsZVsnbWVzc2FnZSddKSApICAgY29udGludWU7CgogICAgICAgICRkYXlzX2JlZm9yZSA9IGludHZhbCgkcnVsZVsnZGF5c19iZWZvcmUnXSk7CiAgICAgICAgJHJ1bGVfaWQgICAgID0gJHJ1bGVbJ2lkJ10gPz8gbWQ1KGpzb25fZW5jb2RlKCRydWxlKSk7CgogICAgICAgIGZvcmVhY2ggKCAkZ3NfZXZlbnRzIGFzICRyb3cgKSB7CiAgICAgICAgICAgIGlmICggZW1wdHkoJHJvd1snZGF0YV9mZXN0YSddKSApIGNvbnRpbnVlOwogICAgICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcvJywgJHJvd1snZGF0YV9mZXN0YSddKTsKICAgICAgICAgICAgaWYgKCBjb3VudCgkcGFydHMpICE9PSAzICkgY29udGludWU7CiAgICAgICAgICAgICR0cyA9IG1rdGltZSgwLCAwLCAwLCAoaW50KSRwYXJ0c1sxXSwgKGludCkkcGFydHNbMF0sIChpbnQpJHBhcnRzWzJdKTsKICAgICAgICAgICAgaWYgKCAhICR0cyApIGNvbnRpbnVlOwoKICAgICAgICAgICAgJGRheXNfdW50aWwgPSBpbnR2YWwoICggJHRzIC0gJHRvZGF5X3RzICkgLyA4NjQwMCApOwogICAgICAgICAgICBpZiAoICRkYXlzX3VudGlsICE9PSAkZGF5c19iZWZvcmUgKSBjb250aW51ZTsKCiAgICAgICAgICAgIC8vIERlZHVwbGljYcOnw6NvOiBtZXNtbyBhbGVydGEgbsOjbyBlbnZpYSAyeCBwYXJhIG1lc21vIGV2ZW50bwogICAgICAgICAgICAkZXZfa2V5ICA9ICRyb3dbJ3JvdyddID8/IG1kNSggJHJvd1snZGF0YV9mZXN0YSddIC4gKCRyb3dbJ3ByZXN0YWRvciddID8/ICcnKSApOwogICAgICAgICAgICAkbG9nX2tleSA9ICRydWxlX2lkIC4gJ18nIC4gJGV2X2tleSAuICdfJyAuICRkYXlzX2JlZm9yZTsKICAgICAgICAgICAgaWYgKCBpbl9hcnJheSgkbG9nX2tleSwgJGxvZywgdHJ1ZSkgKSB7CiAgICAgICAgICAgICAgICB2bTJfbG9nKCJhZ2VuZGFfYWxlcnRzOiBqw6EgZW52aWFkbyAoJGxvZ19rZXkpIiwgJ2luZm8nKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBNb250YXIgdmFyacOhdmVpcwogICAgICAgICAgICAkcHJlc3RhZG9yICAgPSB0cmltKCRyb3dbJ3ByZXN0YWRvciddID8/ICcnKTsKICAgICAgICAgICAgJHRpcG8gICAgICAgID0gdHJpbSgkcm93Wyd0aXBvJ10gPz8gJycpOwogICAgICAgICAgICAkaG9tZW5hZ2VhZG8gPSB0cmltKCRyb3dbJ2hvbWVuYWdlYWRvJ10gPz8gJycpOwogICAgICAgICAgICBpZiAoISR0aXBvICYmICEkaG9tZW5hZ2VhZG8pIHsKICAgICAgICAgICAgICAgIC8vIFRlbnRhIHBhcnNlYXIgZG8gYmxvYgogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkcm93WydldmVudG9fYmxvYiddKSkgewogICAgICAgICAgICAgICAgICAgICRwYXJzZWQgICAgICA9IHZtMl9wYXJzZV9hZ2VuZGFfYmxvYigkcm93WydldmVudG9fYmxvYiddKTsKICAgICAgICAgICAgICAgICAgICAkdGlwbyAgICAgICAgPSAkdGlwbyAgICAgICAgPzogJHBhcnNlZFsndGlwbyddOwogICAgICAgICAgICAgICAgICAgICRob21lbmFnZWFkbyA9ICRob21lbmFnZWFkbyA/OiAkcGFyc2VkWydob21lbmFnZWFkbyddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICR2YXJzID0gWwogICAgICAgICAgICAgICAgJ3tkYXRhfScgICAgICAgID0+IGRhdGUoJ2QvbS9ZJywgJHRzKSwKICAgICAgICAgICAgICAgICd7ZGlhX3NlbWFuYX0nICA9PiAkZGF5c19wdFsgZGF0ZSgnbCcsICR0cykgXSA/PyAnJywKICAgICAgICAgICAgICAgICd7dGlwb30nICAgICAgICA9PiAkdGlwbyAgICAgICAgPzogJ+KAlCcsCiAgICAgICAgICAgICAgICAne2hvbWVuYWdlYWRvfScgPT4gJGhvbWVuYWdlYWRvID86ICfigJQnLAogICAgICAgICAgICAgICAgJ3twcmVzdGFkb3J9JyAgID0+ICRwcmVzdGFkb3IgICA/OiAn4oCUJywKICAgICAgICAgICAgICAgICd7bG9jYWx9JyAgICAgICA9PiB0cmltKCRyb3dbJ2xvY2FsJ10gPz8gJycpICAgID86ICfigJQnLAogICAgICAgICAgICAgICAgJ3tlbmRlcmVjb30nICAgID0+IHRyaW0oJHJvd1snZW5kZXJlY28nXSA/PyAnJykgID86ICfigJQnLAogICAgICAgICAgICAgICAgJ3thc3Nlc3Nvcn0nICAgID0+IHRyaW0oJHJvd1snYXNzZXNzb3InXSA/PyAnJykgID86ICfigJQnLAogICAgICAgICAgICAgICAgJ3tob3JhcmlvfScgICAgID0+IHRyaW0oJHJvd1snaG9yYXJpbyddID8/ICcnKSAgID86ICfigJQnLAogICAgICAgICAgICAgICAgJ3tjdXN0b30nICAgICAgID0+IHRyaW0oJHJvd1snY3VzdG8nXSA/PyAnJykgICAgID86ICfigJQnLAogICAgICAgICAgICAgICAgJ3tkaWFzX2FudGVzfScgID0+ICRkYXlzX2JlZm9yZSwKICAgICAgICAgICAgXTsKICAgICAgICAgICAgJG1zZyA9IHN0cl9yZXBsYWNlKCBhcnJheV9rZXlzKCR2YXJzKSwgYXJyYXlfdmFsdWVzKCR2YXJzKSwgJHJ1bGVbJ21lc3NhZ2UnXSApOwoKICAgICAgICAgICAgJG9rID0gdm0yX3NlbmRfemFwaSggJHJ1bGVbJ2NoYW5uZWwnXSwgJHJ1bGVbJ2dyb3VwX2lkJ10sICRtc2cgKTsKICAgICAgICAgICAgaWYgKCAkb2sgIT09IGZhbHNlICkgewogICAgICAgICAgICAgICAgJGxvZ1tdID0gJGxvZ19rZXk7CiAgICAgICAgICAgICAgICAkc2VudF90b3RhbCsrOwogICAgICAgICAgICAgICAgdm0yX2xvZygiYWdlbmRhX2FsZXJ0czogZW52aWFkbyBydWxlPXskcnVsZV9pZH0gZXZlbnRvPXskcm93WydkYXRhX2Zlc3RhJ119IHskcHJlc3RhZG9yfSAoeyRkYXlzX2JlZm9yZX1kIGFudGVzKSIsICdpbmZvJyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2bTJfbG9nKCJhZ2VuZGFfYWxlcnRzOiBGQUxIQSBydWxlPXskcnVsZV9pZH0gZXZlbnRvPXskcm93WydkYXRhX2Zlc3RhJ119IiwgJ2Vycm9yJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8gVHJpbSBsb2cgcGFyYSBtw6F4IDIwMDAgZW50cmFkYXMKICAgIGlmICggY291bnQoJGxvZykgPiAyMDAwICkgJGxvZyA9IGFycmF5X3NsaWNlKCRsb2csIC0yMDAwKTsKICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9hZ2VuZGFfYWxlcnRzX2xvZycsICRsb2cpOwogICAgdXBkYXRlX29wdGlvbigndm0yX2FnZW5kYV9hbGVydHNfbGFzdF9ydW4nLCBjdXJyZW50X3RpbWUoJ215c3FsJykpOwoKICAgIGlmICgkc2VudF90b3RhbCA+IDApIHZtMl9sb2coImFnZW5kYV9hbGVydHM6IHskc2VudF90b3RhbH0gYWxlcnRhcyBlbnZpYWRvcyIsICdpbmZvJyk7Cn0KYWRkX2FjdGlvbigndm0yX2FnZW5kYV9hbGVydF9jcm9uJywgJ3ZtMl9kaXNwYXRjaF9hZ2VuZGFfYWxlcnRzJyk7CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gQUpBWCDigJQgVEVTVEUgREUgRU5WSU8KLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIOKUgOKUgCBBSkFYOiBDb250cmF0byBkbyBQZWRpZG8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2NvbnRyYXRvX2RhdGEnLCBmdW5jdGlvbigpIHsKICAgIGlmICghY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgd3Bfc2VuZF9qc29uX2Vycm9yKCdTZW0gcGVybWlzc8OjbycpOwogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfY29udHJhdG8nLCAnbm9uY2UnKTsKICAgICRvcmRlcl9pZCA9IGludHZhbCgkX1BPU1RbJ29yZGVyX2lkJ10gPz8gMCk7CiAgICBpZiAoISRvcmRlcl9pZCkgd3Bfc2VuZF9qc29uX2Vycm9yKCdJRCBpbnbDoWxpZG8nKTsKICAgICRvcmRlciA9IHdjX2dldF9vcmRlcigkb3JkZXJfaWQpOwogICAgaWYgKCEkb3JkZXIpIHdwX3NlbmRfanNvbl9lcnJvcignUGVkaWRvIG7Do28gZW5jb250cmFkbycpOwoKICAgICR2YXJzID0gdm0yX2J1aWxkX29yZGVyX3ZhcnMoJG9yZGVyKTsKCiAgICAkYmlsbGluZ19hZGRyMSAgID0gJG9yZGVyLT5nZXRfYmlsbGluZ19hZGRyZXNzXzEoKSA/OiAn4oCUJzsKICAgICRiaWxsaW5nX2FkZHIyICAgPSAkb3JkZXItPmdldF9iaWxsaW5nX2FkZHJlc3NfMigpID86ICcnOwogICAgJGJpbGxpbmdfY2l0eSAgICA9ICRvcmRlci0+Z2V0X2JpbGxpbmdfY2l0eSgpID86ICfigJQnOwogICAgJGJpbGxpbmdfc3RhdGUgICA9ICRvcmRlci0+Z2V0X2JpbGxpbmdfc3RhdGUoKSA/OiAn4oCUJzsKICAgICRiaWxsaW5nX3Bvc3QgICAgPSAkb3JkZXItPmdldF9iaWxsaW5nX3Bvc3Rjb2RlKCkgPzogJ+KAlCc7CiAgICAkYmlsbGluZ19jcGYgICAgID0gJG9yZGVyLT5nZXRfbWV0YSgnX2JpbGxpbmdfY3BmJykKICAgICAgICAgICAgICAgICAgICA/OiAkb3JkZXItPmdldF9tZXRhKCdiaWxsaW5nX2NwZicpCiAgICAgICAgICAgICAgICAgICAgPzogJG9yZGVyLT5nZXRfbWV0YSgnX2JpbGxpbmdfY25waicpCiAgICAgICAgICAgICAgICAgICAgPzogJ+KAlCc7CiAgICAkYmlsbGluZ19jb21wYW55ID0gJG9yZGVyLT5nZXRfYmlsbGluZ19jb21wYW55KCkgPzogJ+KAlCc7CiAgICAkc3RhdHVzX2xhYmVsICAgID0gd2NfZ2V0X29yZGVyX3N0YXR1c19uYW1lKCRvcmRlci0+Z2V0X3N0YXR1cygpKSA/OiAkb3JkZXItPmdldF9zdGF0dXMoKTsKCiAgICAvLyBDbGlja1NpZ24gZG9jIGtleSAvIHNpZ25pbmcgVVJMCiAgICAkY3NfbGluayA9ICRvcmRlci0+Z2V0X21ldGEoJ19jbGlja3NpZ25fZG9jdW1lbnRfa2V5JykKICAgICAgICAgICAgPzogJG9yZGVyLT5nZXRfbWV0YSgnX2NsaWNrc2lnbl9zaWduaW5nX3VybCcpCiAgICAgICAgICAgID86ICRvcmRlci0+Z2V0X21ldGEoJ19jbGlja3NpZ25fZG9jdW1lbnRfdXJsJykKICAgICAgICAgICAgPzogJyc7CgogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoWwogICAgICAgIC8vIENsaWVudGUKICAgICAgICAnbm9tZScgICAgICAgICAgPT4gJHZhcnNbJ3tub21lfSddLAogICAgICAgICd0ZWxlZm9uZScgICAgICA9PiAkdmFyc1sne3RlbGVmb25lfSddLAogICAgICAgICdlbWFpbCcgICAgICAgICA9PiAkdmFyc1sne2VtYWlsfSddLAogICAgICAgICdjcGYnICAgICAgICAgICA9PiAkYmlsbGluZ19jcGYsCiAgICAgICAgJ2VtcHJlc2EnICAgICAgID0+ICRiaWxsaW5nX2NvbXBhbnksCiAgICAgICAgJ2JpbF9hZGRyJyAgICAgID0+IHRyaW0oJGJpbGxpbmdfYWRkcjEgLiAoJGJpbGxpbmdfYWRkcjIgPyAnLCAnLiRiaWxsaW5nX2FkZHIyIDogJycpKSwKICAgICAgICAnYmlsX2NpZGFkZScgICAgPT4gJGJpbGxpbmdfY2l0eSwKICAgICAgICAnYmlsX2VzdGFkbycgICAgPT4gJGJpbGxpbmdfc3RhdGUsCiAgICAgICAgJ2JpbF9jZXAnICAgICAgID0+ICRiaWxsaW5nX3Bvc3QsCiAgICAgICAgLy8gRXZlbnRvCiAgICAgICAgJ3RpcG9fZXZlbnRvJyAgID0+ICR2YXJzWyd7dGlwb19ldmVudG99J10sCiAgICAgICAgJ2hvbWVuYWdlYWRvJyAgID0+ICR2YXJzWyd7aG9tZW5hZ2VhZG99J10sCiAgICAgICAgJ2RhdGFfZXZlbnRvJyAgID0+ICR2YXJzWyd7ZGF0YV9ldmVudG99J10sCiAgICAgICAgJ2hvcmFfaW5pY2lvJyAgID0+ICR2YXJzWyd7aG9yYV9pbmljaW99J10sCiAgICAgICAgJ2hvcmFfdGVybWlubycgID0+ICR2YXJzWyd7aG9yYV90ZXJtaW5vfSddLAogICAgICAgICdkdXJhY2FvJyAgICAgICA9PiAkdmFyc1sne2R1cmFjYW99J10sCiAgICAgICAgJ2F0cmFjYW8nICAgICAgID0+ICR2YXJzWyd7YXRyYWNhb30nXSwKICAgICAgICAnbG9jYWxfZXZlbnRvJyAgPT4gJHZhcnNbJ3tsb2NhbF9ldmVudG99J10sCiAgICAgICAgJ2VuZGVyZWNvJyAgICAgID0+ICR2YXJzWyd7ZW5kZXJlY299J10sCiAgICAgICAgJ2JhaXJybycgICAgICAgID0+ICR2YXJzWyd7YmFpcnJvfSddLAogICAgICAgICdjaWRhZGUnICAgICAgICA9PiAkdmFyc1sne2NpZGFkZX0nXSwKICAgICAgICAnZXN0YWRvJyAgICAgICAgPT4gJHZhcnNbJ3tlc3RhZG99J10sCiAgICAgICAgJ2Fzc2Vzc29yJyAgICAgID0+ICR2YXJzWyd7YXNzZXNzb3J9J10sCiAgICAgICAgJ29icycgICAgICAgICAgID0+ICR2YXJzWyd7b2JzfSddLAogICAgICAgIC8vIEZpbmFuY2Vpcm8KICAgICAgICAnbnVtZXJvJyAgICAgICAgPT4gJHZhcnNbJ3tudW1lcm99J10sCiAgICAgICAgJ3ZhbG9yJyAgICAgICAgID0+ICdSJCAnIC4gJHZhcnNbJ3t2YWxvcn0nXSwKICAgICAgICAncGd0bycgICAgICAgICAgPT4gJHZhcnNbJ3twZ3RvfSddLAogICAgICAgICdzdGF0dXNfcGVkaWRvJyA9PiAkc3RhdHVzX2xhYmVsLAogICAgICAgIC8vIENsaWNrU2lnbgogICAgICAgICdjb250cmF0bycgICAgICA9PiAkdmFyc1sne2NvbnRyYXRvfSddLAogICAgICAgICdjc19saW5rJyAgICAgICA9PiAkY3NfbGluaywKICAgICAgICAvLyBVVE0KICAgICAgICAndXRtX3NvdXJjZScgICAgPT4gJHZhcnNbJ3t1dG1fc291cmNlfSddLAogICAgICAgICd1dG1fY2FtcGFpZ24nICA9PiAkdmFyc1sne3V0bV9jYW1wYWlnbn0nXSwKICAgICAgICAvLyBMaW5rIGFkbWluCiAgICAgICAgJ2xpbmtfYWRtaW4nICAgID0+ICR2YXJzWyd7bGlua19hZG1pbn0nXSwKICAgIF0pOwp9KTsKCmFkZF9hY3Rpb24oICd3cF9hamF4X3ZtMl90ZXN0X3NlbmQnLCAndm0yX2FqYXhfdGVzdF9zZW5kJyApOwpmdW5jdGlvbiB2bTJfYWpheF90ZXN0X3NlbmQoKSB7CiAgICBpZiAoICEgY2hlY2tfYWpheF9yZWZlcmVyKCAndm0yX3Rlc3Rfc2VuZCcsICdub25jZScsIGZhbHNlICkgKSB7CiAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCBbICdtZXNzYWdlJyA9PiAnTm9uY2UgaW52w6FsaWRvJyBdICk7CiAgICB9CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgewogICAgICAgIHdwX3NlbmRfanNvbl9lcnJvciggWyAnbWVzc2FnZScgPT4gJ1NlbSBwZXJtaXNzw6NvJyBdICk7CiAgICB9CgogICAgJHBob25lICAgID0gcHJlZ19yZXBsYWNlKCAnL1xELycsICcnLCBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCB3cF91bnNsYXNoKCAkX1BPU1RbJ3Bob25lJ10gPz8gJycgKSApICk7CiAgICAkb3JkZXJfaWQgPSBpbnR2YWwoICRfUE9TVFsnb3JkZXJfaWQnXSA/PyAwICk7CiAgICAkbWVzc2FnZSAgPSBzYW5pdGl6ZV90ZXh0YXJlYV9maWVsZCggd3BfdW5zbGFzaCggJF9QT1NUWydtZXNzYWdlJ10gPz8gJycgKSApOwogICAgJGNoYW5uZWwgID0gc2FuaXRpemVfa2V5KCAkX1BPU1RbJ2NoYW5uZWwnXSA/PyAnemFwaV83NTUxJyApOwogICAgJGlzX3dhYmEgID0gISBlbXB0eSggJF9QT1NUWydpc193YWJhJ10gKTsKICAgICR0ZW1wbGF0ZSA9IHNhbml0aXplX3RleHRfZmllbGQoIHdwX3Vuc2xhc2goICRfUE9TVFsndGVtcGxhdGUnXSA/PyAnJyApICk7CgogICAgaWYgKCAhICRwaG9uZSB8fCBzdHJsZW4oICRwaG9uZSApIDwgMTAgKSB7CiAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCBbICdtZXNzYWdlJyA9PiAnTsO6bWVybyBpbnbDoWxpZG8uIFVzZSBmb3JtYXRvOiA1NTExOTk5ODg3NzY2JyBdICk7CiAgICB9CgogICAgaWYgKCAkaXNfd2FiYSApIHsKICAgICAgICAvLyBFbnZpbyB2aWEgV0FCQSBjb20gdGVtcGxhdGUKICAgICAgICBpZiAoICEgJHRlbXBsYXRlICkgewogICAgICAgICAgICB3cF9zZW5kX2pzb25fZXJyb3IoIFsgJ21lc3NhZ2UnID0+ICdTZWxlY2lvbmUgdW0gdGVtcGxhdGUgV0FCQSBhbnRlcyBkZSBlbnZpYXIuJyBdICk7CiAgICAgICAgfQogICAgICAgICRyZXN1bHQgPSB2bTJfc2VuZF93YWJhKCAkY2hhbm5lbCwgJHBob25lLCAkdGVtcGxhdGUgKTsKICAgICAgICBpZiAoICRyZXN1bHQgJiYgISBlbXB0eSggJHJlc3VsdFsnb2snXSApICkgewogICAgICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyggWyAnbWVzc2FnZScgPT4gJ1RlbXBsYXRlIFdBQkEgZW52aWFkbyEg4pyFJyBdICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRldGFpbCA9ICcnOwogICAgICAgICAgICBpZiAoIGlzX2FycmF5KCAkcmVzdWx0ICkgJiYgISBlbXB0eSggJHJlc3VsdFsnYm9keSddICkgKSB7CiAgICAgICAgICAgICAgICAkZGVjb2RlZCA9IGpzb25fZGVjb2RlKCAkcmVzdWx0Wydib2R5J10sIHRydWUgKTsKICAgICAgICAgICAgICAgICRkZXRhaWwgID0gJGRlY29kZWRbJ2Vycm9yJ11bJ21lc3NhZ2UnXSA/PyAkcmVzdWx0Wydib2R5J107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCBbICdtZXNzYWdlJyA9PiAnRmFsaGEgV0FCQSAoJyAuICggJHJlc3VsdFsnY29kZSddID8/ICc/JyApIC4gJyk6ICcgLiAkZGV0YWlsIF0gKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFN1YnN0aXR1aXIgdmFyacOhdmVpcyBjb20gZGFkb3MgZG8gcGVkaWRvCiAgICAkdmFycyA9IFtdOwogICAgaWYgKCAkb3JkZXJfaWQgJiYgZnVuY3Rpb25fZXhpc3RzKCAnd2NfZ2V0X29yZGVyJyApICkgewogICAgICAgICRvcmRlciA9IHdjX2dldF9vcmRlciggJG9yZGVyX2lkICk7CiAgICAgICAgaWYgKCAkb3JkZXIgKSB7CiAgICAgICAgICAgICR2YXJzID0gdm0yX2J1aWxkX29yZGVyX3ZhcnMoICRvcmRlciApOwogICAgICAgIH0KICAgIH0KCiAgICAkZmluYWxfbXNnID0gdm0yX3JlcGxhY2VfdmFycyggJG1lc3NhZ2UsICR2YXJzICk7CiAgICAkb2sgICAgICAgID0gdm0yX3NlbmRfemFwaSggJGNoYW5uZWwsICRwaG9uZSwgJGZpbmFsX21zZyApOwoKICAgIGlmICggJG9rICkgewogICAgICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCBbICdtZXNzYWdlJyA9PiAnTWVuc2FnZW0gZW52aWFkYSEnIF0gKTsKICAgIH0gZWxzZSB7CiAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCBbICdtZXNzYWdlJyA9PiAnRmFsaGEgYW8gZW52aWFyLiBWZXJpZmlxdWUgbyBMb2cgZG8gV29vQ29tbWVyY2UgKFN0YXR1cyA+IExvZ3MgPiB2aXZhbWFpcy1jcm0tdjIpLicgXSApOwogICAgfQp9CgovLyDilIDilIDilIAgU3luYyBNYW51YWwgS29tbW8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oICd3cF9hamF4X3ZtMl9tYW51YWxfc3luYycsICd2bTJfbWFudWFsX3N5bmNfaGFuZGxlcicgKTsKZnVuY3Rpb24gdm0yX21hbnVhbF9zeW5jX2hhbmRsZXIoKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoICd2bTJfbWFudWFsX3N5bmMnLCAnbm9uY2UnICk7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgd3Bfc2VuZF9qc29uX2Vycm9yKCBbICdtc2cnID0+ICdBY2Vzc28gbmVnYWRvJyBdICk7CiAgICBAc2V0X3RpbWVfbGltaXQoIDMwMCApOwoKICAgICRrb21tb190b3RhbCAgPSAwOwogICAgJHdvb19zeW5jZWQgICA9IDA7CiAgICAkbGFzdF9lcnJvciAgID0gbnVsbDsKCiAgICAvLyDilIDilIAgS29tbW8gc3luYyDilIDilIAKICAgIGlmICggZnVuY3Rpb25fZXhpc3RzKCAndm1fa29tbW9fcnVuX3N5bmMnICkgKSB7CiAgICAgICAgdm1fa29tbW9fcnVuX3N5bmMoICRsYXN0X2Vycm9yICk7CiAgICAgICAgaWYgKCAhICRsYXN0X2Vycm9yICkgewogICAgICAgICAgICBnbG9iYWwgJHdwZGI7CiAgICAgICAgICAgICRrb21tb190b3RhbCA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm1fa29tbW9fbGVhZHMiICk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIOKUgOKUgCBXb29Db21tZXJjZSBzeW5jICjDumx0aW1vcyA5MCBkaWFzKSDilIDilIAKICAgIGlmICggZnVuY3Rpb25fZXhpc3RzKCAndm1fY3JtX3Byb2Nlc3Nfd29vX29yZGVyJyApICYmIGZ1bmN0aW9uX2V4aXN0cyggJ3djX2dldF9vcmRlcnMnICkgKSB7CiAgICAgICAgJG9yZGVycyA9IHdjX2dldF9vcmRlcnMoIFsKICAgICAgICAgICAgJ2xpbWl0JyAgICAgICAgPT4gNTAwLAogICAgICAgICAgICAnc3RhdHVzJyAgICAgICA9PiBbICdwcm9jZXNzaW5nJywgJ2NvbXBsZXRlZCcsICdvbi1ob2xkJywgJ3BlbmRpbmcnIF0sCiAgICAgICAgICAgICdkYXRlX2NyZWF0ZWQnID0+ICc+JyAuICggdGltZSgpIC0gOTAgKiBEQVlfSU5fU0VDT05EUyApLAogICAgICAgICAgICAncmV0dXJuJyAgICAgICA9PiAnaWRzJywKICAgICAgICBdICk7CiAgICAgICAgZm9yZWFjaCAoICRvcmRlcnMgYXMgJG9yZGVyX2lkICkgewogICAgICAgICAgICB2bV9jcm1fcHJvY2Vzc193b29fb3JkZXIoICRvcmRlcl9pZCApOwogICAgICAgICAgICAkd29vX3N5bmNlZCsrOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRsYXN0X2Vycm9yICYmICR3b29fc3luY2VkID09PSAwICkgewogICAgICAgIHdwX3NlbmRfanNvbl9lcnJvciggWyAnbXNnJyA9PiAkbGFzdF9lcnJvciBdICk7CiAgICB9CgogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoIFsKICAgICAgICAnbXNnJyA9PiAi4pyFIFN5bmMgY29tcGxldG8hIEtvbW1vOiB7JGtvbW1vX3RvdGFsfSBsZWFkcyB8IFdvb0NvbW1lcmNlOiB7JHdvb19zeW5jZWR9IHBlZGlkb3MgcHJvY2Vzc2Fkb3MuIiwKICAgIF0gKTsKfQoKCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBMT0cKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9sb2coICRtZXNzYWdlLCAkbGV2ZWwgPSAnaW5mbycgKSB7CiAgICBpZiAoIGNsYXNzX2V4aXN0cyggJ1dDX0xvZ2dlcicgKSApIHsKICAgICAgICB3Y19nZXRfbG9nZ2VyKCktPmxvZyggJGxldmVsLCAnW1ZNMl0gJyAuICRtZXNzYWdlLCBbICdzb3VyY2UnID0+ICd2aXZhbWFpcy1jcm0tdjInIF0gKTsKICAgIH0KICAgIGVycm9yX2xvZyggJ1tWTTJdWycgLiBzdHJ0b3VwcGVyKCAkbGV2ZWwgKSAuICddICcgLiAkbWVzc2FnZSApOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gUEFSQ0VJUk9TICYgQVJUSVNUQVMg4oCUIFRBQkVMQVMgQkQKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBUQUJFTEEgdm0yX3NlbmRzIOKAlCDDoXJiaXRybyBjZW50cmFsIGRlIGNvb2xkb3duL2RlZHVwCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfY3JlYXRlX3NlbmRzX3RhYmxlKCkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJGNoYXJzZXQgPSAkd3BkYi0+Z2V0X2NoYXJzZXRfY29sbGF0ZSgpOwogICAgJHNxbCA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMgKAogICAgICAgIGlkICAgICAgICAgIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgcGhvbmUgICAgICAgdmFyY2hhcigzMCkgTk9UIE5VTEwsCiAgICAgICAgbW9kdWxlICAgICAgdmFyY2hhcig0MCkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICBjaGFubmVsX2tleSB2YXJjaGFyKDUwKSBOT1QgTlVMTCBERUZBVUxUICcnLAogICAgICAgIHNlbnRfYXQgICAgIGRhdGV0aW1lIE5PVCBOVUxMIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgICAgICAgUFJJTUFSWSBLRVkgIChpZCksCiAgICAgICAgS0VZIGlkeF9waG9uZV9zZW50ICAgKHBob25lLCBzZW50X2F0KSwKICAgICAgICBLRVkgaWR4X2NoYW5uZWxfZGF0ZSAoY2hhbm5lbF9rZXksIHNlbnRfYXQpCiAgICApIHskY2hhcnNldH07IjsKICAgIHJlcXVpcmVfb25jZSBBQlNQQVRIIC4gJ3dwLWFkbWluL2luY2x1ZGVzL3VwZ3JhZGUucGhwJzsKICAgIGRiRGVsdGEoICRzcWwgKTsKfQoKZnVuY3Rpb24gdm0yX2NyZWF0ZV9wYXJ0bmVyX3RhYmxlcygpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRjaGFyc2V0ID0gJHdwZGItPmdldF9jaGFyc2V0X2NvbGxhdGUoKTsKCiAgICAkc3FsID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyAoCiAgICAgICAgaWQgYmlnaW50KDIwKSBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwKICAgICAgICBuYW1lIHZhcmNoYXIoMjAwKSBOT1QgTlVMTCwKICAgICAgICBwaG9uZSB2YXJjaGFyKDMwKSwKICAgICAgICBlbWFpbCB2YXJjaGFyKDEwMCksCiAgICAgICAgYXRyYWNhbyB2YXJjaGFyKDUwMCksCiAgICAgICAgcmVnaWFvIHZhcmNoYXIoMjAwKSwKICAgICAgICBjaWRhZGUgdmFyY2hhcigxMDApLAogICAgICAgIGVzdGFkbyB2YXJjaGFyKDIpLAogICAgICAgIHN0YXR1cyB2YXJjaGFyKDIwKSBERUZBVUxUICdhdGl2bycsCiAgICAgICAgbnBzIGRlY2ltYWwoMywxKSBERUZBVUxUIE5VTEwsCiAgICAgICAgdG90YWxfZXZlbnRvcyBpbnQgREVGQVVMVCAwLAogICAgICAgIGNhY2hlX3RhZ3MgdmFyY2hhcig1MDApLAogICAgICAgIHdjX2NhdGVnb3JpZXMgdGV4dCBERUZBVUxUIE5VTEwsCiAgICAgICAgd2NfdGFncyB0ZXh0IERFRkFVTFQgTlVMTCwKICAgICAgICBvYnNlcnZhY29lcyB0ZXh0LAogICAgICAgIGZ1bmNhbyB2YXJjaGFyKDMwKSBERUZBVUxUICdvdXRyb3MnLAogICAgICAgIGNhY2hlX3ZhbG9yIGRlY2ltYWwoMTAsMikgREVGQVVMVCBOVUxMLAogICAgICAgIGNhY2hlX3RpcG8gdmFyY2hhcigxMCkgREVGQVVMVCAncmVhaXMnLAogICAgICAgIGNyZWF0ZWRfYXQgZGF0ZXRpbWUgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICB1cGRhdGVkX2F0IGRhdGV0aW1lIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgIFBSSU1BUlkgS0VZIChpZCkKICAgICkgJGNoYXJzZXQ7IjsKCiAgICAkc3FsMiA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB7JHdwZGItPnByZWZpeH12bTJfYXZhaWxhYmlsaXR5ICgKICAgICAgICBpZCBiaWdpbnQoMjApIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAogICAgICAgIHBhcnRuZXJfaWQgYmlnaW50KDIwKSBOT1QgTlVMTCwKICAgICAgICBldmVudF9kYXRlIGRhdGUgTk9UIE5VTEwsCiAgICAgICAgc3RhdHVzIHZhcmNoYXIoMjApIERFRkFVTFQgJ29jdXBhZG8nLAogICAgICAgIG9yZGVyX2lkIGJpZ2ludCgyMCksCiAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgICBLRVkgcGFydG5lcl9kYXRlIChwYXJ0bmVyX2lkLCBldmVudF9kYXRlKQogICAgKSAkY2hhcnNldDsiOwoKICAgICRzcWwzID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHskd3BkYi0+cHJlZml4fXZtMl9wcm9kdWN0X3BhcnRuZXJzICgKICAgICAgICBpZCBiaWdpbnQoMjApIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAogICAgICAgIHByb2R1Y3RfaWQgYmlnaW50KDIwKSBOT1QgTlVMTCwKICAgICAgICBwYXJ0bmVyX2lkIGJpZ2ludCgyMCkgTk9UIE5VTEwsCiAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgICBVTklRVUUgS0VZIHByb2R1Y3RfcGFydG5lciAocHJvZHVjdF9pZCwgcGFydG5lcl9pZCkKICAgICkgJGNoYXJzZXQ7IjsKCiAgICAkc3FsNCA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcl9ldmVudHMgKAogICAgICAgIGlkIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgcGFydG5lcl9pZCBiaWdpbnQoMjApIE5PVCBOVUxMLAogICAgICAgIG9yZGVyX2lkIGJpZ2ludCgyMCksCiAgICAgICAgZXZlbnRfZGF0ZSBkYXRlLAogICAgICAgIHN0YWdlIHZhcmNoYXIoMzApIERFRkFVTFQgJ21hdGNoaW5nJywKICAgICAgICBub3RlcyB0ZXh0LAogICAgICAgIGNyZWF0ZWRfYXQgZGF0ZXRpbWUgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICB1cGRhdGVkX2F0IGRhdGV0aW1lIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgIFBSSU1BUlkgS0VZIChpZCkKICAgICkgJGNoYXJzZXQ7IjsKCiAgICAkc3FsNSA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB7JHdwZGItPnByZWZpeH12bTJfYXBwcm92YWxfcXVldWUgKAogICAgICAgIGlkIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgcGFydG5lcl9pZCBiaWdpbnQoMjApLAogICAgICAgIG9yZGVyX2lkIGJpZ2ludCgyMCksCiAgICAgICAgcGhvbmUgdmFyY2hhcigzMCksCiAgICAgICAgbWVzc2FnZSB0ZXh0LAogICAgICAgIHRpcG8gdmFyY2hhcig1MCkgREVGQVVMVCAnY29udml0ZScsCiAgICAgICAgcHJpb3JpdHkgdmFyY2hhcigxMCkgREVGQVVMVCAnbm9ybWFsJywKICAgICAgICBzdGF0dXMgdmFyY2hhcigyMCkgREVGQVVMVCAncGVuZGVudGUnLAogICAgICAgIHNlbnRfYXQgZGF0ZXRpbWUsCiAgICAgICAgY3JlYXRlZF9hdCBkYXRldGltZSBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgIFBSSU1BUlkgS0VZIChpZCkKICAgICkgJGNoYXJzZXQ7IjsKCiAgICAkc3FsNiA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB7JHdwZGItPnByZWZpeH12bTJfdGVhbXMgKAogICAgICAgIGlkIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgb3JkZXJfaWQgYmlnaW50KDIwKSBOT1QgTlVMTCBERUZBVUxUIDAsCiAgICAgICAgZXZlbnRfZGF0ZSBkYXRlIERFRkFVTFQgTlVMTCwKICAgICAgICBjbGllbnRfbmFtZSB2YXJjaGFyKDIwMCkgREVGQVVMVCBOVUxMLAogICAgICAgIGNsaWVudF9waG9uZSB2YXJjaGFyKDMwKSBERUZBVUxUIE5VTEwsCiAgICAgICAgdGVhbV9qc29uIGxvbmd0ZXh0IERFRkFVTFQgTlVMTCwKICAgICAgICBtaXNzaW5nX2NhdHMgdGV4dCBERUZBVUxUIE5VTEwsCiAgICAgICAgY29uZmlybV90b2tlbiB2YXJjaGFyKDY0KSBERUZBVUxUIE5VTEwsCiAgICAgICAgc3RhdHVzIHZhcmNoYXIoMjApIERFRkFVTFQgXCdkcmFmdFwnLAogICAgICAgIGNvbmZpcm1lZF9ieSB2YXJjaGFyKDEwMCkgREVGQVVMVCBOVUxMLAogICAgICAgIGlzX3NpbXVsYXRpb24gdGlueWludCgxKSBERUZBVUxUIDAsCiAgICAgICAgY3JlYXRlZF9hdCBkYXRldGltZSBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgIGNvbmZpcm1lZF9hdCBkYXRldGltZSBERUZBVUxUIE5VTEwsCiAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgICBVTklRVUUgS0VZIGNvbmZpcm1fdG9rZW4gKGNvbmZpcm1fdG9rZW4pLAogICAgICAgIEtFWSBvcmRlcl9pZCAob3JkZXJfaWQpCiAgICApICRjaGFyc2V0OyI7CgogICAgcmVxdWlyZV9vbmNlIEFCU1BBVEggLiAnd3AtYWRtaW4vaW5jbHVkZXMvdXBncmFkZS5waHAnOwogICAgZGJEZWx0YSgkc3FsKTsgZGJEZWx0YSgkc3FsMik7IGRiRGVsdGEoJHNxbDMpOyBkYkRlbHRhKCRzcWw0KTsgZGJEZWx0YSgkc3FsNSk7IGRiRGVsdGEoJHNxbDYpOwoKICAgIC8vIERlZmVuc2l2ZTogYWRkIG5ldyBjb2x1bW5zIHRvIHZtMl9wYXJ0bmVycyBpZiBtaXNzaW5nIChmb3Igc2l0ZXMgdGhhdCBhbHJlYWR5IGhhZCB0aGUgdGFibGUpCiAgICAkcGFydG5lcl9jb2xzID0gJHdwZGItPmdldF9jb2woIlNIT1cgQ09MVU1OUyBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyIpOwogICAgaWYgKCFpbl9hcnJheSgnd2NfY2F0ZWdvcmllcycsICRwYXJ0bmVyX2NvbHMpKSB7CiAgICAgICAgJHdwZGItPnF1ZXJ5KCJBTFRFUiBUQUJMRSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMgQUREIENPTFVNTiB3Y19jYXRlZ29yaWVzIHRleHQgREVGQVVMVCBOVUxMIik7CiAgICB9CiAgICBpZiAoIWluX2FycmF5KCd3Y190YWdzJywgJHBhcnRuZXJfY29scykpIHsKICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBBREQgQ09MVU1OIHdjX3RhZ3MgdGV4dCBERUZBVUxUIE5VTEwiKTsKICAgIH0KICAgIGlmICghaW5fYXJyYXkoJ2Z1bmNhbycsICRwYXJ0bmVyX2NvbHMpKSB7CiAgICAgICAgJHdwZGItPnF1ZXJ5KCJBTFRFUiBUQUJMRSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMgQUREIENPTFVNTiBmdW5jYW8gdmFyY2hhcigzMCkgREVGQVVMVCAnb3V0cm9zJyIpOwogICAgfQogICAgaWYgKCFpbl9hcnJheSgnY2FjaGVfdmFsb3InLCAkcGFydG5lcl9jb2xzKSkgewogICAgICAgICR3cGRiLT5xdWVyeSgiQUxURVIgVEFCTEUgeyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIEFERCBDT0xVTU4gY2FjaGVfdmFsb3IgZGVjaW1hbCgxMCwyKSBERUZBVUxUIE5VTEwiKTsKICAgIH0KICAgIGlmICghaW5fYXJyYXkoJ2NhY2hlX3RpcG8nLCAkcGFydG5lcl9jb2xzKSkgewogICAgICAgICR3cGRiLT5xdWVyeSgiQUxURVIgVEFCTEUgeyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIEFERCBDT0xVTU4gY2FjaGVfdGlwbyB2YXJjaGFyKDEwKSBERUZBVUxUICdyZWFpcyciKTsKICAgIH0KfQoKLy8gR2FyYW50ZSB0YWJlbGFzIGV4aXN0ZW0gbWVzbW8gc2UgcGx1Z2luIGrDoSBlc3RhdmEgYXRpdm8KYWRkX2FjdGlvbignYWRtaW5faW5pdCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKCAhZ2V0X29wdGlvbigndm0yX3BhcnRuZXJfdGFibGVzX3YxJykgKSB7CiAgICAgICAgdm0yX2NyZWF0ZV9wYXJ0bmVyX3RhYmxlcygpOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9wYXJ0bmVyX3RhYmxlc192MScsICcxJyk7CiAgICB9CiAgICAvLyB2MS41LjcwIOKAlCBnYXJhbnRlIHZtMl90ZWFtcyBleGlzdGUgbWVzbW8gZW0gc2l0ZXMgY29tIG1pZ3JhdGlvbiBhbnRpZ2EKICAgIGlmICggIWdldF9vcHRpb24oJ3ZtMl9lbGVuY29fdGFibGVzX3YxJykgKSB7CiAgICAgICAgZ2xvYmFsICR3cGRiOwogICAgICAgICRjaGFyc2V0ID0gJHdwZGItPmdldF9jaGFyc2V0X2NvbGxhdGUoKTsKICAgICAgICAkc3FsX3RlYW1zID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHskd3BkYi0+cHJlZml4fXZtMl90ZWFtcyAoCiAgICAgICAgICAgIGlkIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgICAgIG9yZGVyX2lkIGJpZ2ludCgyMCkgTk9UIE5VTEwgREVGQVVMVCAwLAogICAgICAgICAgICBldmVudF9kYXRlIGRhdGUgREVGQVVMVCBOVUxMLAogICAgICAgICAgICBjbGllbnRfbmFtZSB2YXJjaGFyKDIwMCkgREVGQVVMVCBOVUxMLAogICAgICAgICAgICBjbGllbnRfcGhvbmUgdmFyY2hhcigzMCkgREVGQVVMVCBOVUxMLAogICAgICAgICAgICB0ZWFtX2pzb24gbG9uZ3RleHQgREVGQVVMVCBOVUxMLAogICAgICAgICAgICBtaXNzaW5nX2NhdHMgdGV4dCBERUZBVUxUIE5VTEwsCiAgICAgICAgICAgIGNvbmZpcm1fdG9rZW4gdmFyY2hhcig2NCkgREVGQVVMVCBOVUxMLAogICAgICAgICAgICBzdGF0dXMgdmFyY2hhcigyMCkgREVGQVVMVCAnZHJhZnQnLAogICAgICAgICAgICBjb25maXJtZWRfYnkgdmFyY2hhcigxMDApIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgaXNfc2ltdWxhdGlvbiB0aW55aW50KDEpIERFRkFVTFQgMCwKICAgICAgICAgICAgY3JlYXRlZF9hdCBkYXRldGltZSBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgICAgICBjb25maXJtZWRfYXQgZGF0ZXRpbWUgREVGQVVMVCBOVUxMLAogICAgICAgICAgICBQUklNQVJZIEtFWSAoaWQpLAogICAgICAgICAgICBVTklRVUUgS0VZIGNvbmZpcm1fdG9rZW4gKGNvbmZpcm1fdG9rZW4pLAogICAgICAgICAgICBLRVkgb3JkZXJfaWQgKG9yZGVyX2lkKQogICAgICAgICkgJGNoYXJzZXQ7IjsKICAgICAgICByZXF1aXJlX29uY2UgQUJTUEFUSCAuICd3cC1hZG1pbi9pbmNsdWRlcy91cGdyYWRlLnBocCc7CiAgICAgICAgZGJEZWx0YSggJHNxbF90ZWFtcyApOwogICAgICAgIC8vIEdhcmFudGlyIGNvbHVuYXMgcGFydG5lciB0YW1iw6ltCiAgICAgICAgJHBhcnRuZXJfY29scyA9ICR3cGRiLT5nZXRfY29sKCJTSE9XIENPTFVNTlMgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMiKTsKICAgICAgICBpZiAoICFpbl9hcnJheSgnd2NfY2F0ZWdvcmllcycsICRwYXJ0bmVyX2NvbHMpICkgewogICAgICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBBREQgQ09MVU1OIHdjX2NhdGVnb3JpZXMgdGV4dCBERUZBVUxUIE5VTEwiKTsKICAgICAgICB9CiAgICAgICAgaWYgKCAhaW5fYXJyYXkoJ3djX3RhZ3MnLCAkcGFydG5lcl9jb2xzKSApIHsKICAgICAgICAgICAgJHdwZGItPnF1ZXJ5KCJBTFRFUiBUQUJMRSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMgQUREIENPTFVNTiB3Y190YWdzIHRleHQgREVGQVVMVCBOVUxMIik7CiAgICAgICAgfQogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9lbGVuY29fdGFibGVzX3YxJywgJzEnKTsKICAgIH0KfSk7CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gQ09OVEFUT1MgVU5JRklDQURPUyDigJQgdm0yX2NvbnRhY3RzCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfY3JlYXRlX2NvbnRhY3RzX3RhYmxlKCkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJGNoYXJzZXQgPSAkd3BkYi0+Z2V0X2NoYXJzZXRfY29sbGF0ZSgpOwogICAgJHQgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9jb250YWN0cyc7CiAgICAvLyBDcmlhciB0YWJlbGEgc2UgbsOjbyBleGlzdGlyCiAgICAkd3BkYi0+cXVlcnkoICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAkdCAoCiAgICAgICAgaWQgICAgICAgICAgICAgIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgcGhvbmUgICAgICAgICAgIHZhcmNoYXIoMjApIE5PVCBOVUxMIERFRkFVTFQgJycsCiAgICAgICAgbmFtZSAgICAgICAgICAgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBERUZBVUxUICcnLAogICAgICAgIGVtYWlsICAgICAgICAgICB2YXJjaGFyKDEwMCkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICBvcmlnZW5zICAgICAgICAgdGV4dCBOT1QgTlVMTCwKICAgICAgICBrb21tb19sZWFkX2lkICAgYmlnaW50KDIwKSBERUZBVUxUIE5VTEwsCiAgICAgICAga29tbW9fc3RhdHVzX2lkIGJpZ2ludCgyMCkgREVGQVVMVCBOVUxMLAogICAgICAgIGRhdGFfZXZlbnRvICAgICB2YXJjaGFyKDIwKSBOT1QgTlVMTCBERUZBVUxUICcnLAogICAgICAgIHRpcG9fZXZlbnRvICAgICB2YXJjaGFyKDEwMCkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICBjYXJ0X3Byb2R1Y3QgICAgdmFyY2hhcig1MDApIE5PVCBOVUxMIERFRkFVTFQgJycsCiAgICAgICAgZ2FsZXJpYV9hdHJhY2FvIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBERUZBVUxUICcnLAogICAgICAgIHNjb3JlICAgICAgICAgICBpbnQgTk9UIE5VTEwgREVGQVVMVCAwLAogICAgICAgIHV0bV9zb3VyY2UgICAgICB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICB1dG1fbWVkaXVtICAgICAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIERFRkFVTFQgJycsCiAgICAgICAgdXRtX2NhbXBhaWduICAgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBERUZBVUxUICcnLAogICAgICAgIHV0bV90ZXJtICAgICAgICB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICB1dG1fY29udGVudCAgICAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIERFRkFVTFQgJycsCiAgICAgICAgbGFzdF9hY3Rpdml0eSAgIGRhdGV0aW1lIERFRkFVTFQgTlVMTCwKICAgICAgICBjcmVhdGVkX2F0ICAgICAgZGF0ZXRpbWUgTk9UIE5VTEwgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICB1cGRhdGVkX2F0ICAgICAgZGF0ZXRpbWUgTk9UIE5VTEwgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCBPTiBVUERBVEUgQ1VSUkVOVF9USU1FU1RBTVAsCiAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgICBVTklRVUUgS0VZIHVxX3Bob25lIChwaG9uZSksCiAgICAgICAgS0VZIGlkeF9sYXN0X2FjdGl2aXR5IChsYXN0X2FjdGl2aXR5KQogICAgKSAkY2hhcnNldCIgKTsKfQphZGRfYWN0aW9uKCdwbHVnaW5zX2xvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKCAhZ2V0X29wdGlvbigndm0yX2NvbnRhY3RzX3RhYmxlX3YyJykgKSB7CiAgICAgICAgdm0yX2NyZWF0ZV9jb250YWN0c190YWJsZSgpOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9jb250YWN0c190YWJsZV92MicsICcxJyk7CiAgICB9CiAgICAvLyBbdjEuNS43Nl0gTWlncmF0aW9uIGRlZmVuc2l2YTogYWRpY2lvbmEgY29sdW5hcyBVVE0gc2UgbsOjbyBleGlzdGlyZW0KICAgIGlmICggIWdldF9vcHRpb24oJ3ZtMl9jb250YWN0c191dG1fY29sc192MScpICkgewogICAgICAgIGdsb2JhbCAkd3BkYjsKICAgICAgICAkdCA9ICR3cGRiLT5wcmVmaXggLiAndm0yX2NvbnRhY3RzJzsKICAgICAgICBpZiAoJHdwZGItPmdldF92YXIoIlNIT1cgVEFCTEVTIExJS0UgJyR0JyIpID09PSAkdCkgewogICAgICAgICAgICAkY29scyA9ICR3cGRiLT5nZXRfY29sKCJTSE9XIENPTFVNTlMgRlJPTSAkdCIpOwogICAgICAgICAgICBmb3JlYWNoIChbJ3V0bV9zb3VyY2UnLCd1dG1fbWVkaXVtJywndXRtX2NhbXBhaWduJywndXRtX3Rlcm0nLCd1dG1fY29udGVudCddIGFzICR1YykgewogICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkdWMsICRjb2xzKSkgewogICAgICAgICAgICAgICAgICAgICR3cGRiLT5xdWVyeSgiQUxURVIgVEFCTEUgJHQgQUREIENPTFVNTiAkdWMgdmFyY2hhcigyNTUpIE5PVCBOVUxMIERFRkFVTFQgJyciKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfY29udGFjdHNfdXRtX2NvbHNfdjEnLCAnMScpOwogICAgICAgIH0KICAgIH0KfSwgMjApOwoKZnVuY3Rpb24gdm0yX3N5bmNfY29udGFjdHMoKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAvLyBHYXJhbnRlIHF1ZSBhIHRhYmVsYSBleGlzdGUgKGZ1bmNpb25hIHRhbnRvIGVtIGFkbWluIHF1YW50byBlbSBSRVNUKQogICAgdm0yX2NyZWF0ZV9jb250YWN0c190YWJsZSgpOwogICAgJHRhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bTJfY29udGFjdHMnOwogICAgJG1lcmdlZCA9IFtdOwoKICAgIC8vIOKUgOKUgCBTb3VyY2UgMTogS29tbW8gbGVhZHMg4pSA4pSACiAgICAkcm93cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAiU0VMRUNUIHBob25lLCBuYW1lLCBkYXRhX2V2ZW50bywgc3RhdHVzX2lkLCBrb21tb19pZCwgbGFzdF9zeW5jZWQKICAgICAgICAgRlJPTSB7JHdwZGItPnByZWZpeH12bV9rb21tb19sZWFkcwogICAgICAgICBXSEVSRSBwaG9uZSAhPSAnJwogICAgICAgICBPUkRFUiBCWSBsYXN0X3N5bmNlZCBERVNDIExJTUlUIDEwMDAwIgogICAgKTsKICAgIGZvcmVhY2ggKCRyb3dzIGFzICRyKSB7CiAgICAgICAgJHAgPSB2bTJfbm9ybWFsaXplX3Bob25lKCRyLT5waG9uZSk7CiAgICAgICAgaWYgKCEkcCkgY29udGludWU7CiAgICAgICAgaWYgKCFpc3NldCgkbWVyZ2VkWyRwXSkpIHsKICAgICAgICAgICAgJG1lcmdlZFskcF0gPSBbCiAgICAgICAgICAgICAgICAncGhvbmUnID0+ICRwLCAnbmFtZScgPT4gJHItPm5hbWUgPz8gJycsICdlbWFpbCcgPT4gJycsCiAgICAgICAgICAgICAgICAnb3JpZ2VucycgPT4gWydrb21tbyddLAogICAgICAgICAgICAgICAgJ2tvbW1vX2xlYWRfaWQnID0+ICRyLT5rb21tb19pZCwKICAgICAgICAgICAgICAgICdrb21tb19zdGF0dXNfaWQnID0+ICRyLT5zdGF0dXNfaWQsCiAgICAgICAgICAgICAgICAnZGF0YV9ldmVudG8nID0+ICRyLT5kYXRhX2V2ZW50byA/PyAnJywKICAgICAgICAgICAgICAgICdjYXJ0X3Byb2R1Y3QnID0+ICcnLCAnZ2FsZXJpYV9hdHJhY2FvJyA9PiAnJywKICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyA9PiAkci0+bGFzdF9zeW5jZWQsCiAgICAgICAgICAgIF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgna29tbW8nLCAkbWVyZ2VkWyRwXVsnb3JpZ2VucyddKSkgJG1lcmdlZFskcF1bJ29yaWdlbnMnXVtdID0gJ2tvbW1vJzsKICAgICAgICAgICAgaWYgKGVtcHR5KCRtZXJnZWRbJHBdWyduYW1lJ10pKSAkbWVyZ2VkWyRwXVsnbmFtZSddID0gJHItPm5hbWUgPz8gJyc7CiAgICAgICAgICAgIGlmIChlbXB0eSgkbWVyZ2VkWyRwXVsna29tbW9fbGVhZF9pZCddKSkgewogICAgICAgICAgICAgICAgJG1lcmdlZFskcF1bJ2tvbW1vX2xlYWRfaWQnXSA9ICRyLT5rb21tb19pZDsKICAgICAgICAgICAgICAgICRtZXJnZWRbJHBdWydrb21tb19zdGF0dXNfaWQnXSA9ICRyLT5zdGF0dXNfaWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8g4pSA4pSAIFNvdXJjZSAyOiBHYWxlcmlhIHRva2VucyDilIDilIAKICAgICRyb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1QgdC53aGF0c2FwcCwgYS5ub21lIEFTIGF0cmFjYW9fbm9tZSwgdC5jcmVhdGVkX2F0CiAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9dm1nYWxfdG9rZW5zIHQKICAgICAgICAgTEVGVCBKT0lOIHskd3BkYi0+cHJlZml4fXZtZ2FsX2F0cmFjb2VzIGEgT04gRklORF9JTl9TRVQoYS5pZCwgdC5hdHJhY2FvX2lkcykKICAgICAgICAgV0hFUkUgdC53aGF0c2FwcCBJUyBOT1QgTlVMTCBBTkQgdC53aGF0c2FwcCAhPSAnJwogICAgICAgICBPUkRFUiBCWSB0LmNyZWF0ZWRfYXQgREVTQyBMSU1JVCAxMDAwIgogICAgKTsKICAgIGZvcmVhY2ggKCRyb3dzIGFzICRyKSB7CiAgICAgICAgJHAgPSB2bTJfbm9ybWFsaXplX3Bob25lKCRyLT53aGF0c2FwcCk7CiAgICAgICAgaWYgKCEkcCkgY29udGludWU7CiAgICAgICAgaWYgKCFpc3NldCgkbWVyZ2VkWyRwXSkpIHsKICAgICAgICAgICAgJG1lcmdlZFskcF0gPSBbCiAgICAgICAgICAgICAgICAncGhvbmUnID0+ICRwLCAnbmFtZScgPT4gJycsICdlbWFpbCcgPT4gJycsCiAgICAgICAgICAgICAgICAnb3JpZ2VucycgPT4gWydnYWxlcmlhJ10sCiAgICAgICAgICAgICAgICAna29tbW9fbGVhZF9pZCcgPT4gbnVsbCwgJ2tvbW1vX3N0YXR1c19pZCcgPT4gbnVsbCwKICAgICAgICAgICAgICAgICdkYXRhX2V2ZW50bycgPT4gJycsICdjYXJ0X3Byb2R1Y3QnID0+ICcnLAogICAgICAgICAgICAgICAgJ2dhbGVyaWFfYXRyYWNhbycgPT4gJHItPmF0cmFjYW9fbm9tZSA/PyAnJywKICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyA9PiAkci0+Y3JlYXRlZF9hdCwKICAgICAgICAgICAgXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWluX2FycmF5KCdnYWxlcmlhJywgJG1lcmdlZFskcF1bJ29yaWdlbnMnXSkpICRtZXJnZWRbJHBdWydvcmlnZW5zJ11bXSA9ICdnYWxlcmlhJzsKICAgICAgICAgICAgaWYgKGVtcHR5KCRtZXJnZWRbJHBdWydnYWxlcmlhX2F0cmFjYW8nXSkpICRtZXJnZWRbJHBdWydnYWxlcmlhX2F0cmFjYW8nXSA9ICRyLT5hdHJhY2FvX25vbWUgPz8gJyc7CiAgICAgICAgICAgIGlmIChlbXB0eSgkbWVyZ2VkWyRwXVsnbGFzdF9hY3Rpdml0eSddKSB8fCBzdHJ0b3RpbWUoJHItPmNyZWF0ZWRfYXQpID4gc3RydG90aW1lKCRtZXJnZWRbJHBdWydsYXN0X2FjdGl2aXR5J10pKQogICAgICAgICAgICAgICAgJG1lcmdlZFskcF1bJ2xhc3RfYWN0aXZpdHknXSA9ICRyLT5jcmVhdGVkX2F0OwogICAgICAgIH0KICAgIH0KCiAgICAvLyDilIDilIAgU291cmNlIDM6IFdBIENhcHR1cmVzIChwb3B1cC9jYXJyaW5obykg4pSA4pSACiAgICAkcm93cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAiU0VMRUNUIHBob25lLCBwcm9kdWN0X25hbWUsIGNhcHR1cmVkX2F0CiAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9dm1fd2FfY2FwdHVyZXMKICAgICAgICAgV0hFUkUgcGhvbmUgIT0gJycKICAgICAgICAgT1JERVIgQlkgY2FwdHVyZWRfYXQgREVTQyBMSU1JVCA1MDAwIgogICAgKTsKICAgIGZvcmVhY2ggKCRyb3dzIGFzICRyKSB7CiAgICAgICAgJHAgPSB2bTJfbm9ybWFsaXplX3Bob25lKCRyLT5waG9uZSk7CiAgICAgICAgaWYgKCEkcCkgY29udGludWU7CiAgICAgICAgaWYgKCFpc3NldCgkbWVyZ2VkWyRwXSkpIHsKICAgICAgICAgICAgJG1lcmdlZFskcF0gPSBbCiAgICAgICAgICAgICAgICAncGhvbmUnID0+ICRwLCAnbmFtZScgPT4gJycsICdlbWFpbCcgPT4gJycsCiAgICAgICAgICAgICAgICAnb3JpZ2VucycgPT4gWydjYXJyaW5obyddLAogICAgICAgICAgICAgICAgJ2tvbW1vX2xlYWRfaWQnID0+IG51bGwsICdrb21tb19zdGF0dXNfaWQnID0+IG51bGwsCiAgICAgICAgICAgICAgICAnZGF0YV9ldmVudG8nID0+ICcnLAogICAgICAgICAgICAgICAgJ2NhcnRfcHJvZHVjdCcgPT4gJHItPnByb2R1Y3RfbmFtZSA/PyAnJywKICAgICAgICAgICAgICAgICdnYWxlcmlhX2F0cmFjYW8nID0+ICcnLAogICAgICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknID0+ICRyLT5jYXB0dXJlZF9hdCwKICAgICAgICAgICAgXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWluX2FycmF5KCdjYXJyaW5obycsICRtZXJnZWRbJHBdWydvcmlnZW5zJ10pKSAkbWVyZ2VkWyRwXVsnb3JpZ2VucyddW10gPSAnY2FycmluaG8nOwogICAgICAgICAgICBpZiAoZW1wdHkoJG1lcmdlZFskcF1bJ2NhcnRfcHJvZHVjdCddKSkgJG1lcmdlZFskcF1bJ2NhcnRfcHJvZHVjdCddID0gJHItPnByb2R1Y3RfbmFtZSA/PyAnJzsKICAgICAgICB9CiAgICB9CgogICAgLy8g4pSA4pSAIFNvdXJjZSA0OiBQZWRpZG9zIFdvb0NvbW1lcmNlIChIUE9TKSDilIDilIAKICAgICR3Y190YmwgPSAkd3BkYi0+cHJlZml4IC4gJ3djX29yZGVycyc7CiAgICBpZiAoJHdwZGItPmdldF92YXIoIlNIT1cgVEFCTEVTIExJS0UgJyR3Y190YmwnIikgPT09ICR3Y190YmwpIHsKICAgICAgICAkd2Nfcm93cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAgICAgIlNFTEVDVCBiaWxsaW5nX3Bob25lLCBiaWxsaW5nX2ZpcnN0X25hbWUsIGJpbGxpbmdfbGFzdF9uYW1lLCBiaWxsaW5nX2VtYWlsLCBkYXRlX2NyZWF0ZWRfZ210CiAgICAgICAgICAgICBGUk9NIHskd2NfdGJsfQogICAgICAgICAgICAgV0hFUkUgYmlsbGluZ19waG9uZSAhPSAnJyBBTkQgdHlwZSA9ICdzaG9wX29yZGVyJwogICAgICAgICAgICAgT1JERVIgQlkgZGF0ZV9jcmVhdGVkX2dtdCBERVNDIExJTUlUIDIwMDAiCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoICgkd2Nfcm93cyBhcyAkcikgewogICAgICAgICAgICAkcCA9IHZtMl9ub3JtYWxpemVfcGhvbmUoJHItPmJpbGxpbmdfcGhvbmUpOwogICAgICAgICAgICBpZiAoISRwKSBjb250aW51ZTsKICAgICAgICAgICAgJGZ1bGxfbmFtZSA9IHRyaW0oKCRyLT5iaWxsaW5nX2ZpcnN0X25hbWUgPz8gJycpIC4gJyAnIC4gKCRyLT5iaWxsaW5nX2xhc3RfbmFtZSA/PyAnJykpOwogICAgICAgICAgICAkYWN0aXZpdHkgID0gJHItPmRhdGVfY3JlYXRlZF9nbXQgPz8gbnVsbDsKICAgICAgICAgICAgaWYgKCFpc3NldCgkbWVyZ2VkWyRwXSkpIHsKICAgICAgICAgICAgICAgICRtZXJnZWRbJHBdID0gWwogICAgICAgICAgICAgICAgICAgICdwaG9uZScgPT4gJHAsCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnICA9PiAkZnVsbF9uYW1lLAogICAgICAgICAgICAgICAgICAgICdlbWFpbCcgPT4gJHItPmJpbGxpbmdfZW1haWwgPz8gJycsCiAgICAgICAgICAgICAgICAgICAgJ29yaWdlbnMnID0+IFsncGVkaWRvJ10sCiAgICAgICAgICAgICAgICAgICAgJ2tvbW1vX2xlYWRfaWQnID0+IG51bGwsICdrb21tb19zdGF0dXNfaWQnID0+IG51bGwsCiAgICAgICAgICAgICAgICAgICAgJ2RhdGFfZXZlbnRvJyA9PiAnJywgJ2NhcnRfcHJvZHVjdCcgPT4gJycsICdnYWxlcmlhX2F0cmFjYW8nID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyA9PiAkYWN0aXZpdHksCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgncGVkaWRvJywgJG1lcmdlZFskcF1bJ29yaWdlbnMnXSkpICRtZXJnZWRbJHBdWydvcmlnZW5zJ11bXSA9ICdwZWRpZG8nOwogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRtZXJnZWRbJHBdWyduYW1lJ10pKSAkbWVyZ2VkWyRwXVsnbmFtZSddID0gJGZ1bGxfbmFtZTsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkbWVyZ2VkWyRwXVsnZW1haWwnXSkpICRtZXJnZWRbJHBdWydlbWFpbCddID0gJHItPmJpbGxpbmdfZW1haWwgPz8gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKICAgIC8vIOKUgOKUgCBTb3VyY2UgNTogVjEgQ1JNIENvbnRhY3RzICh2bV9jcm1fY29udGFjdHMpIOKUgOKUgAogICAgJHYxX3RibCA9ICR3cGRiLT5wcmVmaXggLiAndm1fY3JtX2NvbnRhY3RzJzsKICAgIGlmICgkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAnJHYxX3RibCciKSA9PT0gJHYxX3RibCkgewogICAgICAgICR2MV9yb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICAgICAiU0VMRUNUIHBob25lLCBuYW1lLCBlbWFpbCwgY3JlYXRlZF9hdAogICAgICAgICAgICAgRlJPTSB7JHdwZGItPnByZWZpeH12bV9jcm1fY29udGFjdHMKICAgICAgICAgICAgIFdIRVJFIHBob25lICE9ICcnIEFORCBvcHRfb3V0ID0gMAogICAgICAgICAgICAgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIExJTUlUIDEwMDAwIgogICAgICAgICk7CiAgICAgICAgZm9yZWFjaCAoJHYxX3Jvd3MgYXMgJHIpIHsKICAgICAgICAgICAgJHAgPSB2bTJfbm9ybWFsaXplX3Bob25lKCRyLT5waG9uZSk7CiAgICAgICAgICAgIGlmICghJHApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoIWlzc2V0KCRtZXJnZWRbJHBdKSkgewogICAgICAgICAgICAgICAgJG1lcmdlZFskcF0gPSBbCiAgICAgICAgICAgICAgICAgICAgJ3Bob25lJyAgICAgICAgICA9PiAkcCwKICAgICAgICAgICAgICAgICAgICAnbmFtZScgICAgICAgICAgID0+ICRyLT5uYW1lID8/ICcnLAogICAgICAgICAgICAgICAgICAgICdlbWFpbCcgICAgICAgICAgPT4gJHItPmVtYWlsID8/ICcnLAogICAgICAgICAgICAgICAgICAgICdvcmlnZW5zJyAgICAgICAgPT4gWydjcm1fdjEnXSwKICAgICAgICAgICAgICAgICAgICAna29tbW9fbGVhZF9pZCcgID0+IG51bGwsICdrb21tb19zdGF0dXNfaWQnID0+IG51bGwsCiAgICAgICAgICAgICAgICAgICAgJ2RhdGFfZXZlbnRvJyAgICA9PiAnJywgJ2NhcnRfcHJvZHVjdCcgPT4gJycsICdnYWxlcmlhX2F0cmFjYW8nID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyAgPT4gJHItPmNyZWF0ZWRfYXQsCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgnY3JtX3YxJywgJG1lcmdlZFskcF1bJ29yaWdlbnMnXSkpICRtZXJnZWRbJHBdWydvcmlnZW5zJ11bXSA9ICdjcm1fdjEnOwogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRtZXJnZWRbJHBdWyduYW1lJ10pKSAgJG1lcmdlZFskcF1bJ25hbWUnXSAgPSAkci0+bmFtZSA/PyAnJzsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkbWVyZ2VkWyRwXVsnZW1haWwnXSkpICRtZXJnZWRbJHBdWydlbWFpbCddID0gJHItPmVtYWlsID8/ICcnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIOKUgOKUgCBVcHNlcnQgaW50byB2bTJfY29udGFjdHMg4pSA4pSACiAgICAkY291bnRfbmV3ID0gMDsgJGNvdW50X3VwZCA9IDA7CiAgICBmb3JlYWNoICgkbWVyZ2VkIGFzICRwID0+ICRkYXRhKSB7CiAgICAgICAgJGV4aXN0aW5nID0gJHdwZGItPmdldF9yb3coJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICJTRUxFQ1QgaWQsIG9yaWdlbnMsIG5hbWUgRlJPTSAkdGFibGUgV0hFUkUgcGhvbmUgPSAlcyIsICRwCiAgICAgICAgKSk7CiAgICAgICAgaWYgKCRleGlzdGluZykgewogICAgICAgICAgICAkZXhfb3JpZ2VucyAgPSBqc29uX2RlY29kZSgkZXhpc3RpbmctPm9yaWdlbnMsIHRydWUpID86IFtdOwogICAgICAgICAgICAkbmV3X29yaWdlbnMgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKGFycmF5X21lcmdlKCRleF9vcmlnZW5zLCAkZGF0YVsnb3JpZ2VucyddID8/IFtdKSkpOwogICAgICAgICAgICAkdXBkID0gWwogICAgICAgICAgICAgICAgJ29yaWdlbnMnICAgICAgICAgPT4gd3BfanNvbl9lbmNvZGUoJG5ld19vcmlnZW5zKSwKICAgICAgICAgICAgICAgICdrb21tb19sZWFkX2lkJyAgID0+ICRkYXRhWydrb21tb19sZWFkX2lkJ10gPz8gbnVsbCwKICAgICAgICAgICAgICAgICdrb21tb19zdGF0dXNfaWQnID0+ICRkYXRhWydrb21tb19zdGF0dXNfaWQnXSA/PyBudWxsLAogICAgICAgICAgICAgICAgJ2RhdGFfZXZlbnRvJyAgICAgPT4gJGRhdGFbJ2RhdGFfZXZlbnRvJ10gPz8gJycsCiAgICAgICAgICAgICAgICAnbGFzdF9hY3Rpdml0eScgICA9PiAkZGF0YVsnbGFzdF9hY3Rpdml0eSddID86IG51bGwsCiAgICAgICAgICAgICAgICAndXBkYXRlZF9hdCcgICAgICA9PiBjdXJyZW50X3RpbWUoJ215c3FsJyksCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGlmICghZW1wdHkoJGRhdGFbJ25hbWUnXSkpICAgICAgICAgICAkdXBkWyduYW1lJ10gICAgICAgICAgID0gJGRhdGFbJ25hbWUnXTsKICAgICAgICAgICAgaWYgKCFlbXB0eSgkZGF0YVsnZW1haWwnXSkpICAgICAgICAgICAkdXBkWydlbWFpbCddICAgICAgICAgID0gJGRhdGFbJ2VtYWlsJ107CiAgICAgICAgICAgIGlmICghZW1wdHkoJGRhdGFbJ2NhcnRfcHJvZHVjdCddKSkgICAgJHVwZFsnY2FydF9wcm9kdWN0J10gICA9ICRkYXRhWydjYXJ0X3Byb2R1Y3QnXTsKICAgICAgICAgICAgaWYgKCFlbXB0eSgkZGF0YVsnZ2FsZXJpYV9hdHJhY2FvJ10pKSAkdXBkWydnYWxlcmlhX2F0cmFjYW8nXT0gJGRhdGFbJ2dhbGVyaWFfYXRyYWNhbyddOwogICAgICAgICAgICAkd3BkYi0+dXBkYXRlKCR0YWJsZSwgJHVwZCwgWydwaG9uZScgPT4gJHBdKTsKICAgICAgICAgICAgJGNvdW50X3VwZCsrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR3cGRiLT5pbnNlcnQoJHRhYmxlLCBbCiAgICAgICAgICAgICAgICAncGhvbmUnICAgICAgICAgICA9PiAkcCwKICAgICAgICAgICAgICAgICduYW1lJyAgICAgICAgICAgID0+ICRkYXRhWyduYW1lJ10gPz8gJycsCiAgICAgICAgICAgICAgICAnZW1haWwnICAgICAgICAgICA9PiAkZGF0YVsnZW1haWwnXSA/PyAnJywKICAgICAgICAgICAgICAgICdvcmlnZW5zJyAgICAgICAgID0+IHdwX2pzb25fZW5jb2RlKCRkYXRhWydvcmlnZW5zJ10gPz8gW10pLAogICAgICAgICAgICAgICAgJ2tvbW1vX2xlYWRfaWQnICAgPT4gJGRhdGFbJ2tvbW1vX2xlYWRfaWQnXSA/PyBudWxsLAogICAgICAgICAgICAgICAgJ2tvbW1vX3N0YXR1c19pZCcgPT4gJGRhdGFbJ2tvbW1vX3N0YXR1c19pZCddID8/IG51bGwsCiAgICAgICAgICAgICAgICAnZGF0YV9ldmVudG8nICAgICA9PiAkZGF0YVsnZGF0YV9ldmVudG8nXSA/PyAnJywKICAgICAgICAgICAgICAgICdjYXJ0X3Byb2R1Y3QnICAgID0+ICRkYXRhWydjYXJ0X3Byb2R1Y3QnXSA/PyAnJywKICAgICAgICAgICAgICAgICdnYWxlcmlhX2F0cmFjYW8nID0+ICRkYXRhWydnYWxlcmlhX2F0cmFjYW8nXSA/PyAnJywKICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyAgID0+ICRkYXRhWydsYXN0X2FjdGl2aXR5J10gPzogbnVsbCwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICRjb3VudF9uZXcrKzsKICAgICAgICB9CiAgICB9CgogICAgdXBkYXRlX29wdGlvbigndm0yX2NvbnRhY3RzX2xhc3Rfc3luYycsIGN1cnJlbnRfdGltZSgnbXlzcWwnKSk7CiAgICByZXR1cm4gWyduZXcnID0+ICRjb3VudF9uZXcsICd1cGRhdGVkJyA9PiAkY291bnRfdXBkLCAndG90YWwnID0+IGNvdW50KCRtZXJnZWQpXTsKfQoKLy8gQ3JvbiBob3LDoXJpbwphZGRfYWN0aW9uKCd2bTJfY29udGFjdHNfY3JvbicsICd2bTJfc3luY19jb250YWN0cycpOwphZGRfYWN0aW9uKCd3cCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKCF3cF9uZXh0X3NjaGVkdWxlZCgndm0yX2NvbnRhY3RzX2Nyb24nKSkKICAgICAgICB3cF9zY2hlZHVsZV9ldmVudCh0aW1lKCksICdob3VybHknLCAndm0yX2NvbnRhY3RzX2Nyb24nKTsKfSk7CgovLyBSRVNUIGVuZHBvaW50IHN5bmMgbWFudWFsCmFkZF9maWx0ZXIoJ3Jlc3RfYXBpX2luaXQnLCBmdW5jdGlvbigpIHsKICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3ZtLWNybS12Mi92MScsICcvY29udGFjdHMvc3luYycsIFsKICAgICAgICAnbWV0aG9kcycgICAgICAgICAgICAgPT4gJ1BPU1QnLAogICAgICAgICdjYWxsYmFjaycgICAgICAgICAgICA9PiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFjdXJyZW50X3VzZXJfY2FuKCdtYW5hZ2Vfb3B0aW9ucycpKSByZXR1cm4gbmV3IFdQX0Vycm9yKCdmb3JiaWRkZW4nLCdBY2Vzc28gbmVnYWRvJyxbJ3N0YXR1cyc9PjQwM10pOwogICAgICAgICAgICAkcmVzdWx0ID0gdm0yX3N5bmNfY29udGFjdHMoKTsKICAgICAgICAgICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKFsnb2snID0+IHRydWUsICdyZXN1bHQnID0+ICRyZXN1bHRdKTsKICAgICAgICB9LAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiAnX19yZXR1cm5fdHJ1ZScsCiAgICBdKTsKCiAgICAvLyBbdjEuNS44Nl0gQnVsayBpbXBvcnQgZW5kcG9pbnQg4oCUIGltcG9ydGEgbGlzdGEgZGUgY29udGF0b3MgdmlhIEJlYXJlciB0b2tlbgogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9jb250YWN0cy9pbXBvcnQnLCBbCiAgICAgICAgJ21ldGhvZHMnICAgICAgICAgICAgID0+ICdQT1NUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gZnVuY3Rpb24oV1BfUkVTVF9SZXF1ZXN0ICRyZXEpIHsKICAgICAgICAgICAgJGF1dGggPSAkcmVxLT5nZXRfaGVhZGVyKCdhdXRob3JpemF0aW9uJyk7CiAgICAgICAgICAgIGlmICgkYXV0aCAhPT0gJ0JlYXJlciB2bTJmc3luY185a3F3M3A3eCcpCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdQX0Vycm9yKCdmb3JiaWRkZW4nLCAnQWNlc3NvIG5lZ2FkbycsIFsnc3RhdHVzJyA9PiA0MDNdKTsKICAgICAgICAgICAgZ2xvYmFsICR3cGRiOwogICAgICAgICAgICAkdGFibGUgICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9jb250YWN0cyc7CiAgICAgICAgICAgICRjb250YWN0cyA9ICRyZXEtPmdldF9qc29uX3BhcmFtcygpOwogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCRjb250YWN0cykgfHwgZW1wdHkoJGNvbnRhY3RzKSkKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV1BfRXJyb3IoJ2JhZF9yZXF1ZXN0JywgJ0pTT04gYXJyYXkgZXNwZXJhZG8nLCBbJ3N0YXR1cycgPT4gNDAwXSk7CiAgICAgICAgICAgICRpbnNlcnRlZCA9IDA7ICRza2lwcGVkID0gMDsKICAgICAgICAgICAgZm9yZWFjaCAoJGNvbnRhY3RzIGFzICRjKSB7CiAgICAgICAgICAgICAgICAkcGhvbmUgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRjWydwaG9uZSddID8/ICcnKTsKICAgICAgICAgICAgICAgICRuYW1lICA9IHNhbml0aXplX3RleHRfZmllbGQoJGNbJ25hbWUnXSAgPz8gJycpOwogICAgICAgICAgICAgICAgaWYgKCEkcGhvbmUpIHsgJHNraXBwZWQrKzsgY29udGludWU7IH0KICAgICAgICAgICAgICAgICRleGlzdGluZyA9ICR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgRlJPTSAkdGFibGUgV0hFUkUgcGhvbmUgPSAlcyIsICRwaG9uZQogICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgICAgICBpZiAoJGV4aXN0aW5nKSB7ICRza2lwcGVkKys7IGNvbnRpbnVlOyB9CiAgICAgICAgICAgICAgICAkd3BkYi0+aW5zZXJ0KCR0YWJsZSwgWwogICAgICAgICAgICAgICAgICAgICdwaG9uZScgICAgICAgICA9PiAkcGhvbmUsCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnICAgICAgICAgID0+ICRuYW1lLAogICAgICAgICAgICAgICAgICAgICdlbWFpbCcgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnb3JpZ2VucycgICAgICAgPT4gd3BfanNvbl9lbmNvZGUoWydrb21tb19pbXBvcnQnXSksCiAgICAgICAgICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwKICAgICAgICAgICAgICAgICAgICAnY3JlYXRlZF9hdCcgICAgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgICAgICAgICAgICAgICAgICd1cGRhdGVkX2F0JyAgICA9PiBjdXJyZW50X3RpbWUoJ215c3FsJyksCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICRpbnNlcnRlZCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbJ29rJyA9PiB0cnVlLCAnaW5zZXJ0ZWQnID0+ICRpbnNlcnRlZCwgJ3NraXBwZWQnID0+ICRza2lwcGVkXSk7CiAgICAgICAgfSwKICAgICAgICAncGVybWlzc2lvbl9jYWxsYmFjaycgPT4gJ19fcmV0dXJuX3RydWUnLAogICAgXSk7Cn0sIDIwKTsKCgoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFBBUkNFSVJPUyDigJQgQUpBWCBIQU5ETEVSUwovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbignd3BfYWpheF92bTJfc2F2ZV9wYXJ0bmVyJywgJ3ZtMl9hamF4X3NhdmVfcGFydG5lcicpOwpmdW5jdGlvbiB2bTJfYWpheF9zYXZlX3BhcnRuZXIoKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoJ3ZtMl9ub25jZScsICdub25jZScpOwogICAgZ2xvYmFsICR3cGRiOwogICAgJHRhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bTJfcGFydG5lcnMnOwogICAgJGlkICAgID0gaW50dmFsKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgICRkYXRhICA9IFsKICAgICAgICAnbmFtZScgICAgICAgID0+IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWyduYW1lJ10gPz8gJycpLAogICAgICAgICdwaG9uZScgICAgICAgPT4gcHJlZ19yZXBsYWNlKCcvXEQvJywgJycsICRfUE9TVFsncGhvbmUnXSA/PyAnJyksCiAgICAgICAgJ2VtYWlsJyAgICAgICA9PiBzYW5pdGl6ZV9lbWFpbCgkX1BPU1RbJ2VtYWlsJ10gPz8gJycpLAogICAgICAgICdhdHJhY2FvJyAgICAgPT4gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2F0cmFjYW8nXSA/PyAnJyksCiAgICAgICAgJ3JlZ2lhbycgICAgICA9PiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsncmVnaWFvJ10gPz8gJycpLAogICAgICAgICdjaWRhZGUnICAgICAgPT4gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2NpZGFkZSddID8/ICcnKSwKICAgICAgICAnZXN0YWRvJyAgICAgID0+IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydlc3RhZG8nXSA/PyAnJyksCiAgICAgICAgJ3N0YXR1cycgICAgICA9PiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnc3RhdHVzJ10gPz8gJ2F0aXZvJyksCiAgICAgICAgJ29ic2VydmFjb2VzJyAgID0+IHNhbml0aXplX3RleHRhcmVhX2ZpZWxkKCRfUE9TVFsnb2JzZXJ2YWNvZXMnXSA/PyAnJyksCiAgICAgICAgJ3djX2NhdGVnb3JpZXMnID0+IHdwX2pzb25fZW5jb2RlKCBqc29uX2RlY29kZSggc3RyaXBzbGFzaGVzKCAkX1BPU1RbJ3djX2NhdGVnb3JpZXMnXSA/PyAnW10nICksIHRydWUgKSA/OiBbXSApLAogICAgICAgICd3Y190YWdzJyAgICAgICA9PiB3cF9qc29uX2VuY29kZSgganNvbl9kZWNvZGUoIHN0cmlwc2xhc2hlcyggJF9QT1NUWyd3Y190YWdzJ10gICAgICAgPz8gJ1tdJyApLCB0cnVlICkgPzogW10gKSwKICAgICAgICAnZnVuY2FvJyAgICAgICAgPT4gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2Z1bmNhbyddID8/ICdvdXRyb3MnKSwKICAgICAgICAnY2FjaGVfdmFsb3InICAgPT4gaXNfbnVtZXJpYygkX1BPU1RbJ2NhY2hlX3ZhbG9yJ10gPz8gJycpID8gZmxvYXR2YWwoJF9QT1NUWydjYWNoZV92YWxvciddKSA6IG51bGwsCiAgICAgICAgJ2NhY2hlX3RpcG8nICAgID0+IGluX2FycmF5KCRfUE9TVFsnY2FjaGVfdGlwbyddID8/ICdyZWFpcycsIFsncmVhaXMnLCdwb3JjZW50YWdlbSddKSA/ICRfUE9TVFsnY2FjaGVfdGlwbyddIDogJ3JlYWlzJywKICAgIF07CiAgICBpZiAoJGlkKSB7CiAgICAgICAgJGRhdGFbJ3VwZGF0ZWRfYXQnXSA9IGN1cnJlbnRfdGltZSgnbXlzcWwnKTsKICAgICAgICAkd3BkYi0+dXBkYXRlKCR0YWJsZSwgJGRhdGEsIFsnaWQnID0+ICRpZF0pOwogICAgICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnaWQnID0+ICRpZCwgJ2FjdGlvbicgPT4gJ3VwZGF0ZWQnXSk7CiAgICB9IGVsc2UgewogICAgICAgICRkYXRhWydjcmVhdGVkX2F0J10gPSBjdXJyZW50X3RpbWUoJ215c3FsJyk7CiAgICAgICAgJHdwZGItPmluc2VydCgkdGFibGUsICRkYXRhKTsKICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ2lkJyA9PiAkd3BkYi0+aW5zZXJ0X2lkLCAnYWN0aW9uJyA9PiAnY3JlYXRlZCddKTsKICAgIH0KfQoKYWRkX2FjdGlvbignd3BfYWpheF92bTJfZGVsZXRlX3BhcnRuZXInLCAndm0yX2FqYXhfZGVsZXRlX3BhcnRuZXInKTsKZnVuY3Rpb24gdm0yX2FqYXhfZGVsZXRlX3BhcnRuZXIoKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoJ3ZtMl9ub25jZScsICdub25jZScpOwogICAgZ2xvYmFsICR3cGRiOwogICAgJGlkID0gaW50dmFsKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgIGlmICgkaWQpICR3cGRiLT5kZWxldGUoJHdwZGItPnByZWZpeCAuICd2bTJfcGFydG5lcnMnLCBbJ2lkJyA9PiAkaWRdKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCk7Cn0KCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2FwcHJvdmVfcXVldWUnLCAndm0yX2FqYXhfYXBwcm92ZV9xdWV1ZScpOwpmdW5jdGlvbiB2bTJfYWpheF9hcHByb3ZlX3F1ZXVlKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfbm9uY2UnLCAnbm9uY2UnKTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRpZCAgICAgPSBpbnR2YWwoJF9QT1NUWydpZCddID8/IDApOwogICAgJGFjdGlvbiA9IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydxdWV1ZV9hY3Rpb24nXSA/PyAnYXBwcm92ZScpOwogICAgaWYgKCRhY3Rpb24gPT09ICdhcHByb3ZlJykgewogICAgICAgICRyb3cgPSAkd3BkYi0+Z2V0X3Jvdygkd3BkYi0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB7JHdwZGItPnByZWZpeH12bTJfYXBwcm92YWxfcXVldWUgV0hFUkUgaWQ9JWQiLCAkaWQpKTsKICAgICAgICBpZiAoJHJvdyAmJiAkcm93LT5waG9uZSkgewogICAgICAgICAgICAvLyBFbnZpYXIgdmlhIFotQVBJCiAgICAgICAgICAgICRjaGFubmVsID0gZ2V0X29wdGlvbigndm0yX3BhcmNlaXJvc19jaGFubmVsJywgJ3phcGlfNzU1MScpOwogICAgICAgICAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRjaGFubmVsc1skY2hhbm5lbF0pKSB7CiAgICAgICAgICAgICAgICAkY2ggPSAkY2hhbm5lbHNbJGNoYW5uZWxdOwogICAgICAgICAgICAgICAgJHVybCA9ICJodHRwczovL2FwaS56LWFwaS5pby9pbnN0YW5jZXMveyRjaFsnaW5zdGFuY2UnXX0vdG9rZW4veyRjaFsndG9rZW4nXX0vc2VuZC10ZXh0IjsKICAgICAgICAgICAgICAgIHdwX3JlbW90ZV9wb3N0KCR1cmwsIFsKICAgICAgICAgICAgICAgICAgICAnaGVhZGVycycgPT4gWydDb250ZW50LVR5cGUnPT4nYXBwbGljYXRpb24vanNvbicsJ0NsaWVudC1Ub2tlbic9PlZNMl9aQVBJX0NMSUVOVF0sCiAgICAgICAgICAgICAgICAgICAgJ2JvZHknICAgID0+IGpzb25fZW5jb2RlKFsncGhvbmUnPT4kcm93LT5waG9uZSwgJ21lc3NhZ2UnPT4kcm93LT5tZXNzYWdlXSksCiAgICAgICAgICAgICAgICAgICAgJ3RpbWVvdXQnID0+IDEwLAogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHdwZGItPnVwZGF0ZSgkd3BkYi0+cHJlZml4IC4gJ3ZtMl9hcHByb3ZhbF9xdWV1ZScsIFsnc3RhdHVzJz0+J2Fwcm92YWRvJywnc2VudF9hdCc9PmN1cnJlbnRfdGltZSgnbXlzcWwnKV0sIFsnaWQnPT4kaWRdKTsKICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ2FjdGlvbic9PidhcHByb3ZlZCddKTsKICAgIH0gZWxzZWlmICgkYWN0aW9uID09PSAnY2FuY2VsJykgewogICAgICAgICR3cGRiLT51cGRhdGUoJHdwZGItPnByZWZpeCAuICd2bTJfYXBwcm92YWxfcXVldWUnLCBbJ3N0YXR1cyc9PidjYW5jZWxhZG8nXSwgWydpZCc9PiRpZF0pOwogICAgICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnYWN0aW9uJz0+J2NhbmNlbGxlZCddKTsKICAgIH0gZWxzZWlmICgkYWN0aW9uID09PSAnZWRpdCcpIHsKICAgICAgICAkbXNnID0gc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoJF9QT1NUWydtZXNzYWdlJ10gPz8gJycpOwogICAgICAgICR3cGRiLT51cGRhdGUoJHdwZGItPnByZWZpeCAuICd2bTJfYXBwcm92YWxfcXVldWUnLCBbJ21lc3NhZ2UnPT4kbXNnXSwgWydpZCc9PiRpZF0pOwogICAgICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCk7CiAgICB9Cn0KCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2NyZWF0ZV9tYXRjaGluZ19yb3VuZCcsICd2bTJfYWpheF9jcmVhdGVfbWF0Y2hpbmdfcm91bmQnKTsKZnVuY3Rpb24gdm0yX2FqYXhfY3JlYXRlX21hdGNoaW5nX3JvdW5kKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfbm9uY2UnLCAnbm9uY2UnKTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRhdHJhY2FvICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnYXRyYWNhbyddID8/ICcnKTsKICAgICRldmVudF9kYXRlID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2V2ZW50X2RhdGUnXSA/PyAnJyk7CiAgICAkb3JkZXJfaWQgID0gaW50dmFsKCRfUE9TVFsnb3JkZXJfaWQnXSA/PyAwKTsKICAgICRtc2dfdHBsICAgPSBzYW5pdGl6ZV90ZXh0YXJlYV9maWVsZCgkX1BPU1RbJ21zZ190ZW1wbGF0ZSddID8/ICcnKTsKCiAgICAvLyBCdXNjYXIgcGFyY2Vpcm9zIGNvbSBlc3NhIGF0cmHDp8OjbyBlIGRpc3BvbsOtdmVpcyBuYSBkYXRhCiAgICAkcGFydG5lcnMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICJTRUxFQ1QgcC4qIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIHAKICAgICAgICAgICAgIFdIRVJFIHAuc3RhdHVzPSdhdGl2bycgQU5EIHAuYXRyYWNhbyBMSUtFICVzCiAgICAgICAgICAgICBBTkQgcC5pZCBOT1QgSU4gKAogICAgICAgICAgICAgICAgU0VMRUNUIHBhcnRuZXJfaWQgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfYXZhaWxhYmlsaXR5CiAgICAgICAgICAgICAgICBXSEVSRSBldmVudF9kYXRlPSVzIEFORCBzdGF0dXM9J29jdXBhZG8nCiAgICAgICAgICAgICApIExJTUlUIDIwIiwKICAgICAgICAgICAgJyUnIC4gJGF0cmFjYW8gLiAnJScsICRldmVudF9kYXRlCiAgICAgICAgKQogICAgKTsKCiAgICAkcXVldWVkID0gMDsKICAgICRjaGFubmVsID0gZ2V0X29wdGlvbigndm0yX3BhcmNlaXJvc19jaGFubmVsJywgJ3phcGlfNzU1MScpOwogICAgZm9yZWFjaCAoJHBhcnRuZXJzIGFzICRwKSB7CiAgICAgICAgaWYgKCEkcC0+cGhvbmUpIGNvbnRpbnVlOwogICAgICAgICRtc2cgPSBzdHJfcmVwbGFjZShbJ3tub21lfScsJ3tkYXRhX2V2ZW50b30nLCd7YXRyYWNhb30nXSwgWyRwLT5uYW1lLCAkZXZlbnRfZGF0ZSwgJGF0cmFjYW9dLCAkbXNnX3RwbCk7CiAgICAgICAgJHdwZGItPmluc2VydCgkd3BkYi0+cHJlZml4IC4gJ3ZtMl9hcHByb3ZhbF9xdWV1ZScsIFsKICAgICAgICAgICAgJ3BhcnRuZXJfaWQnID0+ICRwLT5pZCwKICAgICAgICAgICAgJ29yZGVyX2lkJyAgID0+ICRvcmRlcl9pZCwKICAgICAgICAgICAgJ3Bob25lJyAgICAgID0+ICRwLT5waG9uZSwKICAgICAgICAgICAgJ21lc3NhZ2UnICAgID0+ICRtc2csCiAgICAgICAgICAgICd0aXBvJyAgICAgICA9PiAnY29udml0ZScsCiAgICAgICAgICAgICdwcmlvcml0eScgICA9PiAndXJnZW50ZScsCiAgICAgICAgICAgICdzdGF0dXMnICAgICA9PiAncGVuZGVudGUnLAogICAgICAgICAgICAnY3JlYXRlZF9hdCcgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgICAgIF0pOwogICAgICAgICRxdWV1ZWQrKzsKICAgIH0KICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsncXVldWVkJyA9PiAkcXVldWVkLCAncGFydG5lcnMnID0+IGNvdW50KCRwYXJ0bmVycyldKTsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFBBUkNFSVJPUyDigJQgUMOBR0lOQSBQUklOQ0lQQUwKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9wYXJjZWlyb3NfcGFnZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRub25jZSAgICAgID0gd3BfY3JlYXRlX25vbmNlKCd2bTJfbm9uY2UnKTsKICAgICR0YWIgICAgICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsndGFiJ10gPz8gJ2NhZGFzdHJvJyk7CiAgICAkYmFzZSAgICAgICA9IGFkbWluX3VybCgnYWRtaW4ucGhwJyk7CiAgICAkdGFicyAgICAgICA9IFsnY2FkYXN0cm8nPT4n8J+RpSBDYWRhc3RybycsJ21hdGNoaW5nJz0+J/Cfjq8gTWF0Y2hpbmcnLCdldmVudG9zJz0+J/CfjqogRXZlbnRvcyBBdGl2b3MnLCdmaWxhJz0+J/Cfk4sgRmlsYSBkZSBBcHJvdmHDp8OjbycsJ21ldHJpY2FzJz0+J/Cfk4ogTcOpdHJpY2FzJywnZWxlbmNvJz0+J/CfjqwgRWxlbmNvJ107CgogICAgLy8g4pSA4pSAIERhZG9zIGRlIGNhZGEgdGFiIOKUgOKUgAogICAgJHRvdGFsX3BhcnRuZXJzICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMiKTsKICAgICR0b3RhbF9hdGl2b3MgICAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIHN0YXR1cz0nYXRpdm8nIik7CiAgICAkZmlsYV9wZW5kZW50ZXMgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9hcHByb3ZhbF9xdWV1ZSBXSEVSRSBzdGF0dXM9J3BlbmRlbnRlJyIpOwogICAgJGZpbGFfdXJnZW50ZXMgICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfYXBwcm92YWxfcXVldWUgV0hFUkUgc3RhdHVzPSdwZW5kZW50ZScgQU5EIHByaW9yaXR5PSd1cmdlbnRlJyIpOwoKICAgIC8vIFBhcmNlaXJvcyBjYWRhc3RyYWRvcwogICAgJHNlYXJjaCAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsncyddID8/ICcnKTsKICAgICRwZXJfcGFnZSA9IDIwOwogICAgJHBhZ2VkICAgID0gbWF4KDEsIGludHZhbCgkX0dFVFsncGFnZWQnXSA/PyAxKSk7CiAgICAkb2Zmc2V0ICAgPSAoJHBhZ2VkIC0gMSkgKiAkcGVyX3BhZ2U7CiAgICAkd2hlcmVfcyAgPSAkc2VhcmNoID8gJHdwZGItPnByZXBhcmUoIkFORCAobmFtZSBMSUtFICVzIE9SIHBob25lIExJS0UgJXMgT1IgYXRyYWNhbyBMSUtFICVzKSIsICIlJHNlYXJjaCUiLCAiJSRzZWFyY2glIiwgIiUkc2VhcmNoJSIpIDogJyc7CiAgICAkcGFydG5lcnMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIDE9MSAkd2hlcmVfcyBPUkRFUiBCWSBuYW1lIEFTQyBMSU1JVCAkcGVyX3BhZ2UgT0ZGU0VUICRvZmZzZXQiKTsKICAgICR0b3RhbF9maWx0ZXJlZCA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBXSEVSRSAxPTEgJHdoZXJlX3MiKTsKCiAgICAvLyBGaWxhIGRlIGFwcm92YcOnw6NvCiAgICAkcXVldWUgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCBxLiosIHAubmFtZSBhcyBwYXJ0bmVyX25hbWUgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfYXBwcm92YWxfcXVldWUgcSBMRUZUIEpPSU4geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIHAgT04gcS5wYXJ0bmVyX2lkPXAuaWQgV0hFUkUgcS5zdGF0dXM9J3BlbmRlbnRlJyBPUkRFUiBCWSBGSUVMRChxLnByaW9yaXR5LCd1cmdlbnRlJywnbm9ybWFsJywnYmFpeG8nKSwgcS5jcmVhdGVkX2F0IEFTQyBMSU1JVCA1MCIpOwoKICAgIC8vIE3DqXRyaWNhcwogICAgJHRvcF9wYXJ0bmVycyA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUICosIG5wcyBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBXSEVSRSBzdGF0dXM9J2F0aXZvJyBPUkRFUiBCWSB0b3RhbF9ldmVudG9zIERFU0MgTElNSVQgMTAiKTsKCiAgICAvLyBQcm9kdXRvcyBXb29Db21tZXJjZSBwYXJhIG8gc2VsZWN0CiAgICAkd2NfcHJvZHVjdHMgPSBbXTsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3djX2dldF9wcm9kdWN0cycpKSB7CiAgICAgICAgJHByb2RzID0gd2NfZ2V0X3Byb2R1Y3RzKFsnbGltaXQnPT41MCwnc3RhdHVzJz0+J3B1Ymxpc2gnXSk7CiAgICAgICAgZm9yZWFjaCAoJHByb2RzIGFzICRwKSAkd2NfcHJvZHVjdHNbJHAtPmdldF9pZCgpXSA9ICRwLT5nZXRfbmFtZSgpOwogICAgfQoKICAgIC8vIFN0YWdlIGxhYmVscyBwYXJhIEV2ZW50b3MgQXRpdm9zCiAgICAkc3RhZ2VzID0gWydtYXRjaGluZyc9PifikaAgTWF0Y2hpbmcnLCdjb252aWRhZG8nPT4n4pGhIENvbnZpdGUgRW52aWFkbycsJ2NvbmZpcm1hZG8nPT4n4pGiIENvbmZpcm1hZG8nLCdlcXVpcGUnPT4n4pGjIEVxdWlwZSBGb3JtYWRhJywnZ3J1cG8nPT4n4pGkIEdydXBvIFdBJywnb25ib2FyZGluZyc9PifikaUgT25ib2FyZGluZycsJ2xlbWJyZXRlJz0+J+KRpiBMZW1icmV0ZScsJ2NoZWNraW4nPT4n4pGnIENoZWNrLWluJywnY2hlY2tvdXQnPT4n4pGoIENoZWNrLW91dCcsJ3BhZ2FtZW50byc9PifikakgUGFnYW1lbnRvJ107CgogICAgLy8gRXZlbnRvcyBhdGl2b3MgY29tIHBhcmNlaXJvcwogICAgJGV2ZW50b3NfYXRpdm9zID0gJHdwZGItPmdldF9yZXN1bHRzKCJTRUxFQ1QgcGUuKiwgcC5uYW1lIGFzIHBhcnRuZXJfbmFtZSwgcC5waG9uZSBhcyBwYXJ0bmVyX3Bob25lIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJfZXZlbnRzIHBlIExFRlQgSk9JTiB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMgcCBPTiBwZS5wYXJ0bmVyX2lkPXAuaWQgT1JERVIgQlkgcGUuZXZlbnRfZGF0ZSBBU0MgTElNSVQgMjAiKTsKCiAgICBlY2hvICc8ZGl2IGNsYXNzPSJ3cmFwIHZtMi13cmFwIj4nOwogICAgZWNobyAnPHN0eWxlPgogICAgLnZtMi13cmFwe21heC13aWR0aDoxMjAwcHh9CiAgICAudm0yLWtwaS1yb3d7ZGlzcGxheTpmbGV4O2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1ib3R0b206MjBweH0KICAgIC52bTIta3Bpe2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNHB4IDE4cHg7bWluLXdpZHRoOjE0MHB4O2ZsZXg6MTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmFsbCAuMTVzIGVhc2V9CiAgICAudm0yLWtwaTpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtib3gtc2hhZG93OjAgNHB4IDE0cHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1jb2xvcjojMDA3M2FhfQogICAgLnZtMi1rcGkgLmxhYmVse2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2NjY7bWFyZ2luLWJvdHRvbTo0cHh9CiAgICAudm0yLWtwaSAudmFsdWV7Zm9udC1zaXplOjI2cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZDIzMjd9CiAgICAudm0yLWtwaSAuc3Vie2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODg7bWFyZ2luLXRvcDoycHh9CiAgICAudm0yLXRhYnN7ZGlzcGxheTpmbGV4O2dhcDo0cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlMGUwZTA7cGFkZGluZy1ib3R0b206MH0KICAgIC52bTItdGFiLWJ0bntwYWRkaW5nOjEwcHggMTZweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5kOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzU1NTtib3JkZXItYm90dG9tOjNweCBzb2xpZCB0cmFuc3BhcmVudDttYXJnaW4tYm90dG9tOi0ycHg7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDt0cmFuc2l0aW9uOmFsbCAuMTVzfQogICAgLnZtMi10YWItYnRuOmhvdmVye2JhY2tncm91bmQ6I2YwZjBmMDtjb2xvcjojMWQyMzI3fQogICAgLnZtMi10YWItYnRuLmFjdGl2ZXtjb2xvcjojN2MzYWVkO2JvcmRlci1ib3R0b20tY29sb3I6IzdjM2FlZDtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZjlmNGZmfQogICAgLnZtMi1iYWRnZXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tbGVmdDo0cHh9CiAgICAuYmFkZ2UtcmVke2JhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojZGMyNjI2fQogICAgLmJhZGdlLWdyZWVue2JhY2tncm91bmQ6I2RjZmNlNztjb2xvcjojMTZhMzRhfQogICAgLmJhZGdlLXB1cnBsZXtiYWNrZ3JvdW5kOiNlZGU5ZmU7Y29sb3I6IzdjM2FlZH0KICAgIC5iYWRnZS1ncmF5e2JhY2tncm91bmQ6I2YxZjVmOTtjb2xvcjojNjQ3NDhifQogICAgLnZtMi1jYXJke2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxOHB4O21hcmdpbi1ib3R0b206MTZweH0KICAgIC52bTItY2FyZCBoM3ttYXJnaW46MCAwIDEycHg7Zm9udC1zaXplOjE1cHg7Y29sb3I6IzFkMjMyN30KICAgIC52bTItc3BsaXR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczozMjBweCAxZnI7Z2FwOjE2cHh9CiAgICBAbWVkaWEobWF4LXdpZHRoOjkwMHB4KXsudm0yLXNwbGl0e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fQogICAgLnZtMi1wYXJ0bmVyLWxpc3R7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6OHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOiNmZmZ9CiAgICAudm0yLXBhcnRuZXItaXRlbXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O3BhZGRpbmc6MTBweCAxNHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMGYwZjA7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xc30KICAgIC52bTItcGFydG5lci1pdGVtOmhvdmVye2JhY2tncm91bmQ6I2Y5ZjRmZn0KICAgIC52bTItcGFydG5lci1pdGVtLnNlbGVjdGVke2JhY2tncm91bmQ6I2Y5ZjRmZjtib3JkZXItbGVmdDozcHggc29saWQgIzdjM2FlZH0KICAgIC52bTItcGFydG5lci1hdmF0YXJ7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIzdjM2FlZCwjYTg1NWY3KTtjb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE0cHg7ZmxleC1zaHJpbms6MH0KICAgIC52bTItcGFydG5lci1pbmZvIC5uYW1le2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtjb2xvcjojMWQyMzI3fQogICAgLnZtMi1wYXJ0bmVyLWluZm8gLnN1Yntmb250LXNpemU6MTFweDtjb2xvcjojODg4O21hcmdpbi10b3A6MXB4fQogICAgLnZtMi1kZXRhaWwtcGFuZWx7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjIwcHh9CiAgICAudm0yLWZvcm0tcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjEycHh9CiAgICBAbWVkaWEobWF4LXdpZHRoOjYwMHB4KXsudm0yLWZvcm0tcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fQogICAgLnZtMi1mb3JtLXJvdyBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTU1O21hcmdpbi1ib3R0b206NHB4fQogICAgLnZtMi1mb3JtLXJvdyBpbnB1dCwudm0yLWZvcm0tcm93IHNlbGVjdCwudm0yLWZvcm0tcm93IHRleHRhcmVhe3dpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7Ym94LXNpemluZzpib3JkZXItYm94fQogICAgLnZtMi1idG57ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDt0cmFuc2l0aW9uOmFsbCAuMTVzfQogICAgLnZtMi1idG4tcHJpbWFyeXtiYWNrZ3JvdW5kOiM3YzNhZWQ7Y29sb3I6I2ZmZn0KICAgIC52bTItYnRuLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZDojNmQyOGQ5fQogICAgLnZtMi1idG4tc3VjY2Vzc3tiYWNrZ3JvdW5kOiMxNmEzNGE7Y29sb3I6I2ZmZn0KICAgIC52bTItYnRuLWRhbmdlcntiYWNrZ3JvdW5kOiNkYzI2MjY7Y29sb3I6I2ZmZn0KICAgIC52bTItYnRuLWdyYXl7YmFja2dyb3VuZDojZjFmNWY5O2NvbG9yOiMzNzQxNTE7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwfQogICAgLnZtMi1idG4tZ3JheTpob3ZlcntiYWNrZ3JvdW5kOiNlNWU3ZWJ9CiAgICAudm0yLWJ0bi1zbXtwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4fQogICAgLnZtMi10YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MTNweH0KICAgIC52bTItdGFibGUgdGh7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4IDEwcHg7YmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlMGUwZTA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MDtmb250LXdlaWdodDo2MDB9CiAgICAudm0yLXRhYmxlIHRke3BhZGRpbmc6OHB4IDEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YwZjBmMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9CiAgICAudm0yLXRhYmxlIHRyOmhvdmVyIHRke2JhY2tncm91bmQ6I2ZhZmFmYX0KICAgIC52bTItcXVldWUtaXRlbXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfQogICAgLnZtMi1xdWV1ZS1pdGVtIC5oZWFkZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjhweH0KICAgIC52bTItcXVldWUtaXRlbSAuYnViYmxle2JhY2tncm91bmQ6I2YwZmRmNDtib3JkZXI6MXB4IHNvbGlkICNiYmY3ZDA7Ym9yZGVyLXJhZGl1czoxMnB4IDEycHggMTJweCAwO3BhZGRpbmc6MTBweCAxNHB4O3doaXRlLXNwYWNlOnByZS13cmFwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiMxZDIzMjc7bGluZS1oZWlnaHQ6MS41O21heC1oZWlnaHQ6MTIwcHg7b3ZlcmZsb3c6YXV0b30KICAgIC52bTItcXVldWUtaXRlbSAuYWN0aW9uc3tkaXNwbGF5OmZsZXg7Z2FwOjZweDttYXJnaW4tdG9wOjhweDtmbGV4LXdyYXA6d3JhcH0KICAgIC52bTItcHJpb3JpdHktdXJnZW50ZXtib3JkZXItbGVmdDo0cHggc29saWQgI2RjMjYyNn0KICAgIC52bTItcHJpb3JpdHktbm9ybWFse2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjZjU5ZTBifQogICAgLnZtMi1wcmlvcml0eS1iYWl4b3tib3JkZXItbGVmdDo0cHggc29saWQgIzIyYzU1ZX0KICAgIC52bTItbGlmZWN5Y2xlLWJhcntkaXNwbGF5OmZsZXg7Z2FwOjJweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDo2cHh9CiAgICAudm0yLXN0YWdlLWRvdHt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6I2U1ZTdlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1zaXplOjlweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzZiNzI4MDtjdXJzb3I6ZGVmYXVsdDtmbGV4LXNocmluazowfQogICAgLnZtMi1zdGFnZS1kb3QuZG9uZXtiYWNrZ3JvdW5kOiM3YzNhZWQ7Y29sb3I6I2ZmZn0KICAgIC52bTItc3RhZ2UtZG90LmN1cnJlbnR7YmFja2dyb3VuZDojZjU5ZTBiO2NvbG9yOiNmZmY7Ym94LXNoYWRvdzowIDAgMCAzcHggI2ZlZjNjN30KICAgIC52bTItbWF0Y2hpbmctY2FyZHtiYWNrZ3JvdW5kOiNmOWY0ZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkNmZlO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHg7bWFyZ2luLWJvdHRvbToxMnB4fQogICAgLnZtMi1tYXRjaGluZy1jYXJkIC50aXRsZXtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE1cHg7bWFyZ2luLWJvdHRvbTo4cHg7Y29sb3I6IzViMjFiNn0KICAgIC52bTItZW1wdHktc3RhdGV7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0OHB4IDIwcHg7Y29sb3I6IzljYTNhZn0KICAgIC52bTItZW1wdHktc3RhdGUgLmljb257Zm9udC1zaXplOjQ4cHg7bWFyZ2luLWJvdHRvbToxMnB4fQogICAgLnZtMi1lbXB0eS1zdGF0ZSBwe2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206MTZweH0KICAgIDwvc3R5bGU+JzsKCiAgICAvLyBIZWFkZXIgKyBLUElzCiAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHg7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICA8aDEgc3R5bGU9Im1hcmdpbjowO2ZvbnQtc2l6ZToyMnB4Ij7wn46tIFBhcmNlaXJvcyAmIEFydGlzdGFzPC9oMT4KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweCI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1wcmltYXJ5IiBvbmNsaWNrPSJ2bTJPcGVuTW9kYWwoMCkiPisgTm92byBQYXJjZWlybzwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+JzsKCiAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTIta3BpLXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgb25jbGljaz0ibG9jYXRpb24uaHJlZj1cJz9wYWdlPXZtMi1wYXJjZWlyb3MmdGFiPWNhZGFzdHJvXCciPjxkaXYgY2xhc3M9ImxhYmVsIj5Ub3RhbCBQYXJjZWlyb3M8L2Rpdj48ZGl2IGNsYXNzPSJ2YWx1ZSI+JyAuICR0b3RhbF9wYXJ0bmVycyAuICc8L2Rpdj48ZGl2IGNsYXNzPSJzdWIiPmNhZGFzdHJhZG9zPC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgb25jbGljaz0ibG9jYXRpb24uaHJlZj1cJz9wYWdlPXZtMi1wYXJjZWlyb3MmdGFiPWNhZGFzdHJvXCciPjxkaXYgY2xhc3M9ImxhYmVsIj7wn5+iIEF0aXZvczwvZGl2PjxkaXYgY2xhc3M9InZhbHVlIj4nIC4gJHRvdGFsX2F0aXZvcyAuICc8L2Rpdj48ZGl2IGNsYXNzPSJzdWIiPmRpc3BvbsOtdmVpczwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9XCc/cGFnZT12bTItcGFyY2Vpcm9zJnRhYj1maWxhXCciPjxkaXYgY2xhc3M9ImxhYmVsIj7wn5OLIEZpbGEgQXByb3Zhw6fDo288L2Rpdj48ZGl2IGNsYXNzPSJ2YWx1ZSI+JyAuICRmaWxhX3BlbmRlbnRlcyAuICc8L2Rpdj48ZGl2IGNsYXNzPSJzdWIiPicgLiAoJGZpbGFfdXJnZW50ZXMgPyAiPHNwYW4gc3R5bGU9J2NvbG9yOiNkYzI2MjYnPuKaoSAkZmlsYV91cmdlbnRlcyB1cmdlbnRlczwvc3Bhbj4iIDogJ3BlbmRlbnRlcycpIC4gJzwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9XCc/cGFnZT12bTItcGFyY2Vpcm9zJnRhYj1ldmVudG9zXCciPjxkaXYgY2xhc3M9ImxhYmVsIj7wn46qIEV2ZW50b3MgQXRpdm9zPC9kaXY+PGRpdiBjbGFzcz0idmFsdWUiPicgLiBjb3VudCgkZXZlbnRvc19hdGl2b3MpIC4gJzwvZGl2PjxkaXYgY2xhc3M9InN1YiI+ZW0gYW5kYW1lbnRvPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4nOwoKICAgIC8vIFRhYnMKICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi10YWJzIj4nOwogICAgZm9yZWFjaCAoJHRhYnMgYXMgJHRrID0+ICR0bCkgewogICAgICAgICR1cmwgICAgPSBhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItcGFyY2Vpcm9zJywndGFiJz0+JHRrXSwgJGJhc2UpOwogICAgICAgICRhY3RpdmUgPSAoJHRhYiA9PT0gJHRrKSA/ICcgYWN0aXZlJyA6ICcnOwogICAgICAgICRiYWRnZSAgPSAnJzsKICAgICAgICBpZiAoJHRrID09PSAnZmlsYScgJiYgJGZpbGFfcGVuZGVudGVzID4gMCkgewogICAgICAgICAgICAkY2xzICAgPSAkZmlsYV91cmdlbnRlcyA+IDAgPyAnYmFkZ2UtcmVkJyA6ICdiYWRnZS1wdXJwbGUnOwogICAgICAgICAgICAkYmFkZ2UgPSAnPHNwYW4gY2xhc3M9InZtMi1iYWRnZSAnLiRjbHMuJyI+JyAuICgkZmlsYV91cmdlbnRlcyA/OiAkZmlsYV9wZW5kZW50ZXMpIC4gJzwvc3Bhbj4nOwogICAgICAgIH0KICAgICAgICBlY2hvICI8YSBocmVmPSckdXJsJyBjbGFzcz0ndm0yLXRhYi1idG4kYWN0aXZlJz4kdGwkYmFkZ2U8L2E+IjsKICAgIH0KICAgIGVjaG8gJzwvZGl2Pic7CgogICAgLy8g4pSA4pSAIFRBQjogQ0FEQVNUUk8g4pSA4pSACiAgICBpZiAoJHRhYiA9PT0gJ2NhZGFzdHJvJykgewogICAgICAgICRzZWxfaWQgPSBpbnR2YWwoJF9HRVRbJ3BhcnRuZXJfaWQnXSA/PyAwKTsKICAgICAgICAkc2VsX3BhcnRuZXIgPSAkc2VsX2lkID8gJHdwZGItPmdldF9yb3coJHdwZGItPnByZXBhcmUoIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIGlkPSVkIiwgJHNlbF9pZCkpIDogbnVsbDsKCiAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjE0cHg7ZmxleC13cmFwOndyYXAiPic7CiAgICAgICAgJHN1ID0gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLXBhcmNlaXJvcycsJ3RhYic9PidjYWRhc3RybycsJ3MnPT4nJ10sICRiYXNlKTsKICAgICAgICBlY2hvICc8Zm9ybSBtZXRob2Q9ImdldCIgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXg6MSI+JzsKICAgICAgICBlY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYWdlIiB2YWx1ZT0idm0yLXBhcmNlaXJvcyI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idGFiIiB2YWx1ZT0iY2FkYXN0cm8iPic7CiAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9InNlYXJjaCIgbmFtZT0icyIgdmFsdWU9IicgLiBlc2NfYXR0cigkc2VhcmNoKSAuICciIHBsYWNlaG9sZGVyPSLwn5SNIEJ1c2NhciBwb3Igbm9tZSwgcGhvbmUgb3UgYXRyYcOnw6NvLi4uIiBzdHlsZT0iZmxleDoxO3BhZGRpbmc6N3B4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4nOwogICAgICAgIGVjaG8gJzxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0idm0yLWJ0biB2bTItYnRuLWdyYXkiPkJ1c2NhcjwvYnV0dG9uPic7CiAgICAgICAgaWYgKCRzZWFyY2gpIGVjaG8gJzxhIGhyZWY9IicgLiBhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItcGFyY2Vpcm9zJywndGFiJz0+J2NhZGFzdHJvJ10sICRiYXNlKSAuICciIGNsYXNzPSJ2bTItYnRuIHZtMi1idG4tZ3JheSI+4pyVIExpbXBhcjwvYT4nOwogICAgICAgIGVjaG8gJzwvZm9ybT48L2Rpdj4nOwoKICAgICAgICBpZiAoJHRvdGFsX3BhcnRuZXJzID09PSAwKSB7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1lbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uIj7wn46tPC9kaXY+CiAgICAgICAgICAgICAgICA8cD5OZW5odW0gcGFyY2Vpcm8gY2FkYXN0cmFkbyBhaW5kYS48YnI+Q2xpcXVlIGVtIDxzdHJvbmc+KyBOb3ZvIFBhcmNlaXJvPC9zdHJvbmc+IHBhcmEgY29tZcOnYXIhPC9wPgogICAgICAgICAgICA8L2Rpdj4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1zcGxpdCI+JzsKICAgICAgICAgICAgLy8gTGlzdGEKICAgICAgICAgICAgZWNobyAnPGRpdj4nOwogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItcGFydG5lci1saXN0Ij4nOwogICAgICAgICAgICBmb3JlYWNoICgkcGFydG5lcnMgYXMgJHApIHsKICAgICAgICAgICAgICAgICRpbml0aWFsID0gbWJfc3RydG91cHBlcihtYl9zdWJzdHIoJHAtPm5hbWUsIDAsIDEpKTsKICAgICAgICAgICAgICAgICRwdXJsICAgID0gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLXBhcmNlaXJvcycsJ3RhYic9PidjYWRhc3RybycsJ3BhcnRuZXJfaWQnPT4kcC0+aWRdLCAkYmFzZSk7CiAgICAgICAgICAgICAgICAkY2xzICAgICA9ICgkcC0+aWQgPT0gJHNlbF9pZCkgPyAnIHNlbGVjdGVkJyA6ICcnOwogICAgICAgICAgICAgICAgJHN0YXR1c19iYWRnZSA9ICRwLT5zdGF0dXMgPT09ICdhdGl2bycgPyAnPHNwYW4gY2xhc3M9InZtMi1iYWRnZSBiYWRnZS1ncmVlbiI+YXRpdm88L3NwYW4+JyA6ICc8c3BhbiBjbGFzcz0idm0yLWJhZGdlIGJhZGdlLWdyYXkiPicgLiBlc2NfaHRtbCgkcC0+c3RhdHVzKSAuICc8L3NwYW4+JzsKICAgICAgICAgICAgICAgICRucHNfc3RyID0gJHAtPm5wcyA/ICfirZAgJyAuIG51bWJlcl9mb3JtYXQoJHAtPm5wcywxKSA6ICcnOwogICAgICAgICAgICAgICAgZWNobyAiPGEgaHJlZj0nJHB1cmwnIHN0eWxlPSd0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjppbmhlcml0Jz48ZGl2IGNsYXNzPSd2bTItcGFydG5lci1pdGVtJGNscyc+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ndm0yLXBhcnRuZXItYXZhdGFyJz4kaW5pdGlhbDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J3ZtMi1wYXJ0bmVyLWluZm8nIHN0eWxlPSdmbGV4OjE7bWluLXdpZHRoOjAnPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSduYW1lJz4iIC4gZXNjX2h0bWwoJHAtPm5hbWUpIC4gIiAkc3RhdHVzX2JhZGdlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J3N1Yic+IiAuIGVzY19odG1sKCRwLT5hdHJhY2FvID86ICfigJQnKSAuICIgwrcgIiAuIGVzY19odG1sKCRwLT5jaWRhZGUgPzogJHAtPnJlZ2lhbyA/OiAn4oCUJykgLiAiICRucHNfc3RyPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0nZm9udC1zaXplOjExcHg7Y29sb3I6I2FhYTt3aGl0ZS1zcGFjZTpub3dyYXAnPiIgLiAkcC0+dG90YWxfZXZlbnRvcyAuICIgZXYuPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj48L2E+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8L2Rpdj4nOwogICAgICAgICAgICAvLyBQYWdpbmHDp8OjbwogICAgICAgICAgICAkdG90YWxfcGFnZXMgPSBjZWlsKCR0b3RhbF9maWx0ZXJlZCAvICRwZXJfcGFnZSk7CiAgICAgICAgICAgIGlmICgkdG90YWxfcGFnZXMgPiAxKSB7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtnYXA6NHB4O21hcmdpbi10b3A6MTBweDtmbGV4LXdyYXA6d3JhcCI+JzsKICAgICAgICAgICAgICAgIGZvciAoJGk9MTsgJGk8PSR0b3RhbF9wYWdlczsgJGkrKykgewogICAgICAgICAgICAgICAgICAgICRwdSA9IGFkZF9xdWVyeV9hcmcoWydwYWdlJz0+J3ZtMi1wYXJjZWlyb3MnLCd0YWInPT4nY2FkYXN0cm8nLCdwYWdlZCc9PiRpLCdzJz0+JHNlYXJjaF0sICRiYXNlKTsKICAgICAgICAgICAgICAgICAgICAkYWN0aXZlX3AgPSAoJGkgPT0gJHBhZ2VkKSA/ICdiYWNrZ3JvdW5kOiM3YzNhZWQ7Y29sb3I6I2ZmZjsnIDogJ2JhY2tncm91bmQ6I2YxZjVmOTtjb2xvcjojMzc0MTUxOyc7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPGEgaHJlZj0nJHB1JyBzdHlsZT0neyRhY3RpdmVfcH1wYWRkaW5nOjVweCAxMHB4O2JvcmRlci1yYWRpdXM6NXB4O2ZvbnQtc2l6ZToxMnB4O3RleHQtZGVjb3JhdGlvbjpub25lJz4kaTwvYT4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8L2Rpdj4nOyAvLyBlbmQgbGlzdGEgY29sCgogICAgICAgICAgICAvLyBEZXRhbGhlIC8gRm9ybQogICAgICAgICAgICBlY2hvICc8ZGl2Pic7CiAgICAgICAgICAgIGlmICgkc2VsX3BhcnRuZXIpIHsKICAgICAgICAgICAgICAgIC8vIE1vc3RyYXIgZmljaGEgZG8gcGFyY2Vpcm8gc2VsZWNpb25hZG8KICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1kZXRhaWwtcGFuZWwiPic7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MTZweDtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4Ij4nOwogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweCI+JzsKICAgICAgICAgICAgICAgICRpbml0aWFsID0gbWJfc3RydG91cHBlcihtYl9zdWJzdHIoJHNlbF9wYXJ0bmVyLT5uYW1lLCAwLCAxKSk7CiAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPSd2bTItcGFydG5lci1hdmF0YXInIHN0eWxlPSd3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2ZvbnQtc2l6ZToyMHB4Jz4kaW5pdGlhbDwvZGl2PiI7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OjcwMCI+JyAuIGVzY19odG1sKCRzZWxfcGFydG5lci0+bmFtZSkgLiAnPC9kaXY+JzsKICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4ODgiPicgLiBlc2NfaHRtbCgkc2VsX3BhcnRuZXItPmF0cmFjYW8gPzogJ+KAlCcpIC4gJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgICAgICAgICBlY2hvICc8L2Rpdj4nOwogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo2cHg7ZmxleC13cmFwOndyYXAiPic7CiAgICAgICAgICAgICAgICBpZiAoJHNlbF9wYXJ0bmVyLT5waG9uZSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxhIGhyZWY9Imh0dHBzOi8vd2EubWUvJyAuICRzZWxfcGFydG5lci0+cGhvbmUgLiAnIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1zdWNjZXNzIHZtMi1idG4tc20iPvCfkqwgV2hhdHNBcHA8L2E+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gJzxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1wcmltYXJ5IHZtMi1idG4tc20iIG9uY2xpY2s9InZtMk9wZW5Nb2RhbCgnIC4gJHNlbF9wYXJ0bmVyLT5pZCAuICcpIj7inI/vuI8gRWRpdGFyPC9idXR0b24+JzsKICAgICAgICAgICAgICAgIGVjaG8gJzxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1kYW5nZXIgdm0yLWJ0bi1zbSIgb25jbGljaz0idm0yRGVsZXRlUGFydG5lcignIC4gJHNlbF9wYXJ0bmVyLT5pZCAuICcpIj7wn5eR77iPIEV4Y2x1aXI8L2J1dHRvbj4nOwogICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+PC9kaXY+JzsKCiAgICAgICAgICAgICAgICAvLyBJbmZvIGdyaWQKICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1jZmctMmNvbCIgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjE2cHgiPic7CiAgICAgICAgICAgICAgICAkZnVuY2FvX2xhYmVscyA9IFsnYXJ0aXN0YSc9Pifwn46kIEFydGlzdGEnLCdjb29yZGVuYWRvcic9Pifwn46vIENvb3JkZW5hZG9yJywnb3V0cm9zJz0+J/CfkaQgT3V0cm9zJ107CiAgICAgICAgICAgICAgICAkZnVuY2FvX2Rpc3BsYXkgPSAkZnVuY2FvX2xhYmVsc1skc2VsX3BhcnRuZXItPmZ1bmNhbyA/PyAnb3V0cm9zJ10gPz8gJ/CfkaQgT3V0cm9zJzsKICAgICAgICAgICAgICAgICRjYWNoZV9kaXNwbGF5ID0gJ+KAlCc7CiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRzZWxfcGFydG5lci0+Y2FjaGVfdmFsb3IpICYmICRzZWxfcGFydG5lci0+Y2FjaGVfdmFsb3IgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgJGNhY2hlX2Rpc3BsYXkgPSAoJHNlbF9wYXJ0bmVyLT5jYWNoZV90aXBvID09PSAncG9yY2VudGFnZW0nKQogICAgICAgICAgICAgICAgICAgICAgICA/IG51bWJlcl9mb3JtYXQoJHNlbF9wYXJ0bmVyLT5jYWNoZV92YWxvciwxLCcsJywnLicpIC4gJyUnCiAgICAgICAgICAgICAgICAgICAgICAgIDogJ1IkICcgLiBudW1iZXJfZm9ybWF0KCRzZWxfcGFydG5lci0+Y2FjaGVfdmFsb3IsMiwnLCcsJy4nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRmaWVsZHMgPSBbCiAgICAgICAgICAgICAgICAgICAgWyfwn5OxIFdoYXRzQXBwJywgJHNlbF9wYXJ0bmVyLT5waG9uZV0sCiAgICAgICAgICAgICAgICAgICAgWyfwn5OnIEVtYWlsJywgJHNlbF9wYXJ0bmVyLT5lbWFpbF0sCiAgICAgICAgICAgICAgICAgICAgWyfwn46qIEF0cmHDp8O1ZXMnLCAkc2VsX3BhcnRuZXItPmF0cmFjYW9dLAogICAgICAgICAgICAgICAgICAgIFsn8J+TjSBSZWdpw6NvJywgJHNlbF9wYXJ0bmVyLT5yZWdpYW9dLAogICAgICAgICAgICAgICAgICAgIFsn8J+Pme+4jyBDaWRhZGUnLCAkc2VsX3BhcnRuZXItPmNpZGFkZSAuICgkc2VsX3BhcnRuZXItPmVzdGFkbyA/ICcvJyAuICRzZWxfcGFydG5lci0+ZXN0YWRvIDogJycpXSwKICAgICAgICAgICAgICAgICAgICBbJ+KtkCBOUFMnLCAkc2VsX3BhcnRuZXItPm5wcyA/IG51bWJlcl9mb3JtYXQoJHNlbF9wYXJ0bmVyLT5ucHMsMSkgOiAn4oCUJ10sCiAgICAgICAgICAgICAgICAgICAgWyfwn46tIEV2ZW50b3MnLCAkc2VsX3BhcnRuZXItPnRvdGFsX2V2ZW50b3NdLAogICAgICAgICAgICAgICAgICAgIFsn8J+UtPCfn6IgU3RhdHVzJywgJHNlbF9wYXJ0bmVyLT5zdGF0dXNdLAogICAgICAgICAgICAgICAgICAgIFsn8J+OrSBGdW7Dp8OjbycsICRmdW5jYW9fZGlzcGxheV0sCiAgICAgICAgICAgICAgICAgICAgWyfwn5KwIENhY2jDqicsICRjYWNoZV9kaXNwbGF5XSwKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmllbGRzIGFzIFskbGFiZWwsICR2YWxdKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2NjY7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206MnB4Ij4nIC4gJGxhYmVsIC4gJzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojMWQyMzI3Ij4nIC4gZXNjX2h0bWwoJHZhbCA/OiAn4oCUJykgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7CgogICAgICAgICAgICAgICAgaWYgKCRzZWxfcGFydG5lci0+b2JzZXJ2YWNvZXMpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY5ZTY7Ym9yZGVyOjFweCBzb2xpZCAjZmRlNjhhO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+8J+TnSBPYnM6PC9zdHJvbmc+ICcgLiBubDJicihlc2NfaHRtbCgkc2VsX3BhcnRuZXItPm9ic2VydmFjb2VzKSkgLiAnPC9kaXY+JzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyDDmmx0aW1vcyBldmVudG9zIGRvIHBhcmNlaXJvCiAgICAgICAgICAgICAgICAkcGV2ZW50cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygkd3BkYi0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcl9ldmVudHMgV0hFUkUgcGFydG5lcl9pZD0lZCBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MgTElNSVQgNSIsICRzZWxfcGFydG5lci0+aWQpKTsKICAgICAgICAgICAgICAgIGlmICgkcGV2ZW50cykgewogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTZweCI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206OHB4O2NvbG9yOiM1NTUiPvCfk4UgSGlzdMOzcmljbyBkZSBFdmVudG9zPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcGV2ZW50cyBhcyAkZXYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHN0YWdlX2xhYmVsID0gJHN0YWdlc1skZXYtPnN0YWdlXSA/PyAkZXYtPnN0YWdlOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzo2cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjBmMGYwO2ZvbnQtc2l6ZToxMnB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojN2MzYWVkIj7il4k8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4nIC4gZXNjX2h0bWwoJGV2LT5ldmVudF9kYXRlID86ICfigJQnKSAuICc8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWJhZGdlIGJhZGdlLXB1cnBsZSI+JyAuIGVzY19odG1sKCRzdGFnZV9sYWJlbCkgLiAnPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAuICgkZXYtPm9yZGVyX2lkID8gJzxhIGhyZWY9IicgLiBhZG1pbl91cmwoJ3Bvc3QucGhwP3Bvc3Q9JyAuICRldi0+b3JkZXJfaWQgLiAnJmFjdGlvbj1lZGl0JykgLiAnIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM3YzNhZWQiPiMnIC4gJGV2LT5vcmRlcl9pZCAuICc8L2E+JyA6ICcnKSAuICcKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNhYWEiPk5lbmh1bSBldmVudG8gcmVnaXN0cmFkbyBhaW5kYS48L2Rpdj4nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7IC8vIGRldGFpbCBwYW5lbAogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gTmVuaHVtIHBhcmNlaXJvIHNlbGVjaW9uYWRvCiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItZGV0YWlsLXBhbmVsIiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi1oZWlnaHQ6MzAwcHgiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1lbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imljb24iPvCfkYY8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2VsZWNpb25lIHVtIHBhcmNlaXJvIG5hIGxpc3RhIHBhcmEgdmVyIGEgZmljaGEgY29tcGxldGE8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1wcmltYXJ5IiBvbmNsaWNrPSJ2bTJPcGVuTW9kYWwoMCkiPisgQ2FkYXN0cmFyIE5vdm8gUGFyY2Vpcm88L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsgLy8gZGV0YWlsIGNvbAogICAgICAgICAgICBlY2hvICc8L2Rpdj4nOyAvLyBzcGxpdAogICAgICAgIH0KICAgIH0KCiAgICAvLyDilIDilIAgVEFCOiBNQVRDSElORyDilIDilIAKICAgIGVsc2VpZiAoJHRhYiA9PT0gJ21hdGNoaW5nJykgewogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1tYXRjaGluZy1jYXJkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPvCfjq8gTm92YSBSb2RhZGEgZGUgTWF0Y2hpbmc8L2Rpdj4KICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM1NTU7bWFyZ2luLWJvdHRvbToxMnB4Ij5TaXN0ZW1hIGlGb29kLXN0eWxlOiBpbmZvcm1lIGEgYXRyYcOnw6NvIGUgZGF0YSBkbyBldmVudG8sIHNlbGVjaW9uZSBvcyBwYXJjZWlyb3MgZGlzcG9uw612ZWlzIGUgY3JpZSBvcyBjb252aXRlcyBwYXJhIGEgRmlsYSBkZSBBcHJvdmHDp8Ojby48L3A+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1mb3JtLXJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD7wn46qIEF0cmHDp8OjbzwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJtYXRjaF9hdHJhY2FvIiBwbGFjZWhvbGRlcj0iRXg6IERKLCBNw6FnaWNvLCBCdWZmZXQuLi4iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD7wn5OFIERhdGEgZG8gRXZlbnRvPC9sYWJlbD48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9Im1hdGNoX2RhdGUiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZm9ybS1yb3ciPgogICAgICAgICAgICAgICAgPGRpdj48bGFiZWw+8J+bkiBQZWRpZG8gKG9wY2lvbmFsKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgaWQ9Im1hdGNoX29yZGVyIiBwbGFjZWhvbGRlcj0iSUQgZG8gcGVkaWRvIFdvb0NvbW1lcmNlIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTJweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTU1O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfk50gTWVuc2FnZW0gZG8gQ29udml0ZTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9Im1hdGNoX21zZyIgcm93cz0iNCIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O3Jlc2l6ZTp2ZXJ0aWNhbCI+T2zDoSB7bm9tZX0hIPCfkYsKClRlbW9zIHVtIGV2ZW50byBlbSB7ZGF0YV9ldmVudG99IHF1ZSBjb21iaW5hIGNvbSB2b2PDqi4KQXRyYcOnw6NvOiB7YXRyYWNhb30KClZvY8OqIHRlbSBkaXNwb25pYmlsaWRhZGU/IFJlc3BvbmRhIFNJTSBwYXJhIGNvbmZpcm1hciBpbnRlcmVzc2UhIPCfjok8L3RleHRhcmVhPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1wcmltYXJ5IiBvbmNsaWNrPSJ2bTJDcmVhdGVSb3VuZCgpIj7wn5qAIENyaWFyIFJvZGFkYSBkZSBNYXRjaGluZzwvYnV0dG9uPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4ODgiPkFzIG1lbnNhZ2VucyB2w6NvIHBhcmEgYSBGaWxhIGRlIEFwcm92YcOnw6NvIGFudGVzIGRlIHNlcmVtIGVudmlhZGFzPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0ibWF0Y2hfcmVzdWx0IiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4Ij48L2Rpdj4KICAgICAgICA8L2Rpdj4nOwoKICAgICAgICAvLyBQYXJjZWlyb3MgZGlzcG9uw612ZWlzCiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idm0yLWNhcmQiPjxoMz7wn5GlIFBhcmNlaXJvcyBDYWRhc3RyYWRvcyAoJyAuICR0b3RhbF9hdGl2b3MgLiAnIGF0aXZvcyk8L2gzPic7CiAgICAgICAgaWYgKCR0b3RhbF9wYXJ0bmVycyA9PT0gMCkgewogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItZW1wdHktc3RhdGUiPjxkaXYgY2xhc3M9Imljb24iPvCfjq08L2Rpdj48cD5DYWRhc3RyZSBwYXJjZWlyb3MgcHJpbWVpcm8gcGFyYSBjcmlhciByb2RhZGFzIGRlIG1hdGNoaW5nPC9wPjwvZGl2Pic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDphdXRvIj4nOwogICAgICAgICAgICBlY2hvICc8dGFibGUgY2xhc3M9InZtMi10YWJsZSI+PHRoZWFkPjx0cj48dGg+Tm9tZTwvdGg+PHRoPkF0cmHDp8O1ZXM8L3RoPjx0aD5SZWdpw6NvPC90aD48dGg+U3RhdHVzPC90aD48dGg+RXZlbnRvczwvdGg+PHRoPk5QUzwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT4nOwogICAgICAgICAgICAkYWxsX3AgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIE9SREVSIEJZIHRvdGFsX2V2ZW50b3MgREVTQyBMSU1JVCAzMCIpOwogICAgICAgICAgICBmb3JlYWNoICgkYWxsX3AgYXMgJHApIHsKICAgICAgICAgICAgICAgICRzYyA9ICRwLT5zdGF0dXMgPT09ICdhdGl2bycgPyAnIzE2YTM0YScgOiAnIzZiNzI4MCc7CiAgICAgICAgICAgICAgICBlY2hvICc8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkPjxzdHJvbmc+JyAuIGVzY19odG1sKCRwLT5uYW1lKSAuICc8L3N0cm9uZz48YnI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODgiPicgLiBlc2NfaHRtbCgkcC0+cGhvbmUgPzogJ+KAlCcpIC4gJzwvc3Bhbj48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjEycHgiPicgLiBlc2NfaHRtbCgkcC0+YXRyYWNhbyA/OiAn4oCUJykgLiAnPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij4nIC4gZXNjX2h0bWwoJHAtPmNpZGFkZSA/OiAkcC0+cmVnaWFvID86ICfigJQnKSAuICc8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBzdHlsZT0iY29sb3I6JyAuICRzYyAuICc7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4Ij7il488L3NwYW4+ICcgLiBlc2NfaHRtbCgkcC0+c3RhdHVzKSAuICc8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPicgLiAkcC0+dG90YWxfZXZlbnRvcyAuICc8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZD4nIC4gKCRwLT5ucHMgPyAn4q2QICcgLiBudW1iZXJfZm9ybWF0KCRwLT5ucHMsMSkgOiAn4oCUJykgLiAnPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8L3Rib2R5PjwvdGFibGU+PC9kaXY+JzsgLy8gZmVjaGEgb3ZlcmZsb3cteAogICAgICAgIH0KICAgICAgICBlY2hvICc8L2Rpdj4nOwogICAgfQoKICAgIC8vIOKUgOKUgCBUQUI6IEVWRU5UT1MgQVRJVk9TIOKUgOKUgAogICAgZWxzZWlmICgkdGFiID09PSAnZXZlbnRvcycpIHsKICAgICAgICAkc3RhZ2VfaWR4ID0gYXJyYXlfa2V5cygkc3RhZ2VzKTsKICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItY2FyZCI+PGgzPvCfjqogRXZlbnRvcyBlbSBBbmRhbWVudG88L2gzPic7CiAgICAgICAgaWYgKGVtcHR5KCRldmVudG9zX2F0aXZvcykpIHsKICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idm0yLWVtcHR5LXN0YXRlIj48ZGl2IGNsYXNzPSJpY29uIj7wn46qPC9kaXY+PHA+TmVuaHVtIGV2ZW50byBjb20gcGFyY2Vpcm9zIGVtIGFuZGFtZW50by48YnI+VXNlIG8gTWF0Y2hpbmcgcGFyYSBpbmljaWFyIG8gY2ljbG8gZGUgdmlkYS48L3A+PC9kaXY+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3JlYWNoICgkZXZlbnRvc19hdGl2b3MgYXMgJGV2KSB7CiAgICAgICAgICAgICAgICAkY3VyX2lkeCAgPSBhcnJheV9zZWFyY2goJGV2LT5zdGFnZSwgJHN0YWdlX2lkeCk7CiAgICAgICAgICAgICAgICBpZiAoJGN1cl9pZHggPT09IGZhbHNlKSAkY3VyX2lkeCA9IDA7CiAgICAgICAgICAgICAgICAkcGN0ICAgICAgPSByb3VuZCgoJGN1cl9pZHggLyAoY291bnQoJHN0YWdlcyktMSkpICogMTAwKTsKICAgICAgICAgICAgICAgICRvcmRlcl9saW5rID0gJGV2LT5vcmRlcl9pZCA/ICc8YSBocmVmPSInIC4gYWRtaW5fdXJsKCdwb3N0LnBocD9wb3N0PScgLiAkZXYtPm9yZGVyX2lkIC4gJyZhY3Rpb249ZWRpdCcpIC4gJyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjojN2MzYWVkO3RleHQtZGVjb3JhdGlvbjpub25lIj4jJyAuICRldi0+b3JkZXJfaWQgLiAnPC9hPicgOiAn4oCUJzsKICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1jYXJkIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMnB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjN2MzYWVkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4O21hcmdpbi1ib3R0b206MTBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE0cHgiPicgLiBlc2NfaHRtbCgkZXYtPnBhcnRuZXJfbmFtZSA/OiAnUGFyY2Vpcm8gIycgLiAkZXYtPnBhcnRuZXJfaWQpIC4gJzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6Izg4OCI+RXZlbnRvOiAnIC4gZXNjX2h0bWwoJGV2LT5ldmVudF9kYXRlID86ICfigJQnKSAuICcgwrcgUGVkaWRvOiAnIC4gJG9yZGVyX2xpbmsgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWJhZGdlIGJhZGdlLXB1cnBsZSI+JyAuIGVzY19odG1sKCRzdGFnZXNbJGV2LT5zdGFnZV0gPz8gJGV2LT5zdGFnZSkgLiAnPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2U5ZDVmZjtib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6NnB4O21hcmdpbi1ib3R0b206OHB4Ij48ZGl2IHN0eWxlPSJ3aWR0aDonIC4gJHBjdCAuICclO2JhY2tncm91bmQ6IzdjM2FlZDtoZWlnaHQ6NnB4O2JvcmRlci1yYWRpdXM6NHB4Ij48L2Rpdj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItbGlmZWN5Y2xlLWJhciI+JzsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzdGFnZV9pZHggYXMgJGkgPT4gJHNrKSB7CiAgICAgICAgICAgICAgICAgICAgJGNscyA9ICRpIDwgJGN1cl9pZHggPyAnZG9uZScgOiAoJGkgPT0gJGN1cl9pZHggPyAnY3VycmVudCcgOiAnJyk7CiAgICAgICAgICAgICAgICAgICAgJG51bSA9ICRpICsgMTsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItc3RhZ2UtZG90ICcgLiAkY2xzIC4gJyIgdGl0bGU9IicgLiBlc2NfYXR0cigkc3RhZ2VzWyRza10pIC4gJyI+JyAuICRudW0gLiAnPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICBpZiAoJGkgPCBjb3VudCgkc3RhZ2VfaWR4KS0xKSBlY2hvICc8ZGl2IHN0eWxlPSJ3aWR0aDo4cHg7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kOicgLiAoJGkgPCAkY3VyX2lkeCA/ICcjN2MzYWVkJyA6ICcjZTVlN2ViJykgLiAnIj48L2Rpdj4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgICAgIC8vIEFkdmFuY2Ugc3RhZ2UgYnV0dG9uCiAgICAgICAgICAgICAgICBpZiAoJGN1cl9pZHggPCBjb3VudCgkc3RhZ2VfaWR4KS0xKSB7CiAgICAgICAgICAgICAgICAgICAgJG5leHRfc3RhZ2UgPSAkc3RhZ2VfaWR4WyRjdXJfaWR4ICsgMV07CiAgICAgICAgICAgICAgICAgICAgJG5leHRfbGFiZWwgPSAkc3RhZ2VzWyRuZXh0X3N0YWdlXTsKICAgICAgICAgICAgICAgICAgICAkbnNfanMgPSBlc2NfanMoJG5leHRfc3RhZ2UpOwogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweCI+PGJ1dHRvbiBjbGFzcz0idm0yLWJ0biB2bTItYnRuLXByaW1hcnkgdm0yLWJ0bi1zbSIgb25jbGljaz0idm0yQWR2YW5jZVN0YWdlKCcgLiAkZXYtPmlkIC4gJyxcJycgLiAkbnNfanMgLiAnXCcpIj7ihpIgQXZhbsOnYXIgcGFyYSAnIC4gZXNjX2h0bWwoJG5leHRfbGFiZWwpIC4gJzwvYnV0dG9uPjwvZGl2Pic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlY2hvICc8L2Rpdj48L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvZGl2Pic7CiAgICB9CgogICAgLy8g4pSA4pSAIFRBQjogRklMQSBERSBBUFJPVkHDh8ODTyDilIDilIAKICAgIGVsc2VpZiAoJHRhYiA9PT0gJ2ZpbGEnKSB7CiAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjE2cHg7ZmxleC13cmFwOndyYXA7Z2FwOjhweCI+JzsKICAgICAgICBlY2hvICc8ZGl2Pic7CiAgICAgICAgZWNobyAnPHNwYW4gY2xhc3M9InZtMi1iYWRnZSBiYWRnZS1yZWQiIHN0eWxlPSJmb250LXNpemU6MTNweDtwYWRkaW5nOjRweCAxMHB4Ij4nIC4gJGZpbGFfdXJnZW50ZXMgLiAnIHVyZ2VudGVzPC9zcGFuPiAnOwogICAgICAgIGVjaG8gJzxzcGFuIGNsYXNzPSJ2bTItYmFkZ2UgYmFkZ2UtcHVycGxlIiBzdHlsZT0iZm9udC1zaXplOjEzcHg7cGFkZGluZzo0cHggMTBweCI+JyAuICRmaWxhX3BlbmRlbnRlcyAuICcgcGVuZGVudGVzIHRvdGFsPC9zcGFuPic7CiAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICBpZiAoJGZpbGFfdXJnZW50ZXMgPiAwKSB7CiAgICAgICAgICAgIGVjaG8gJzxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1kYW5nZXIiIG9uY2xpY2s9InZtMkFwcHJvdmVBbGxVcmdlbnQoKSI+4pqhIEFwcm92YXIgVG9kb3MgVXJnZW50ZXM8L2J1dHRvbj4nOwogICAgICAgIH0KICAgICAgICBlY2hvICc8L2Rpdj4nOwoKICAgICAgICBpZiAoZW1wdHkoJHF1ZXVlKSkgewogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItZW1wdHktc3RhdGUiPjxkaXYgY2xhc3M9Imljb24iPuKchTwvZGl2PjxwPkZpbGEgdmF6aWEg4oCUIG5lbmh1bWEgbWVuc2FnZW0gcGVuZGVudGUhPC9wPjwvZGl2Pic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHF1ZXVlIGFzICRpdGVtKSB7CiAgICAgICAgICAgICAgICAkcHJpb3JpdHlfY2xzID0gJ3ZtMi1wcmlvcml0eS0nIC4gJGl0ZW0tPnByaW9yaXR5OwogICAgICAgICAgICAgICAgJHByaW9yaXR5X2Vtb2ppID0gWyd1cmdlbnRlJz0+J/CflLQnLCdub3JtYWwnPT4n8J+foScsJ2JhaXhvJz0+J/Cfn6InXVskaXRlbS0+cHJpb3JpdHldID8/ICfimqonOwogICAgICAgICAgICAgICAgJHRpcG9fbGFiZWwgPSBbJ2NvbnZpdGUnPT4nQ29udml0ZScsJ2NvbmZpcm1hY2FvJz0+J0NvbmZpcm1hw6fDo28nLCdsZW1icmV0ZSc9PidMZW1icmV0ZSBQcsOpLUV2ZW50bycsJ2NoZWNraW4nPT4nQ2hlY2staW4nLCdjaGVja291dCc9PidDaGVjay1vdXQnLCdwYWdhbWVudG8nPT4nUGFnYW1lbnRvJywnb25ib2FyZGluZyc9PidPbmJvYXJkaW5nJ11bJGl0ZW0tPnRpcG9dID8/ICRpdGVtLT50aXBvOwogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idm0yLXF1ZXVlLWl0ZW0gJyAuICRwcmlvcml0eV9jbHMgLiAnIiBpZD0icWlfJyAuICRpdGVtLT5pZCAuICciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwIj4nIC4gJHByaW9yaXR5X2Vtb2ppIC4gJyAnIC4gZXNjX2h0bWwoJGl0ZW0tPnBhcnRuZXJfbmFtZSA/OiAnUGFyY2Vpcm8nKSAuICc8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWJhZGdlIGJhZGdlLWdyYXkiPicgLiBlc2NfaHRtbCgkdGlwb19sYWJlbCkgLiAnPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAuICgkaXRlbS0+cGhvbmUgPyAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODgiPsK3IPCfk7EgKycgLiBlc2NfaHRtbCgkaXRlbS0+cGhvbmUpIC4gJzwvc3Bhbj4nIDogJycpIC4gJwogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiNhYWEiPicgLiBkYXRlKCdkL20gSDppJywgc3RydG90aW1lKCRpdGVtLT5jcmVhdGVkX2F0KSkgLiAnPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1YmJsZSIgaWQ9ImJ1YmJsZV8nIC4gJGl0ZW0tPmlkIC4gJyI+JyAuIGVzY19odG1sKCRpdGVtLT5tZXNzYWdlKSAuICc8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idm0yLWJ0biB2bTItYnRuLXN1Y2Nlc3Mgdm0yLWJ0bi1zbSIgb25jbGljaz0idm0yUXVldWVBY3Rpb24oJyAuICRpdGVtLT5pZCAuICcsXCdhcHByb3ZlXCcpIj7inIUgQXByb3ZhciAmIEVudmlhcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItYnRuIHZtMi1idG4tZ3JheSB2bTItYnRuLXNtIiBvbmNsaWNrPSJ2bTJFZGl0QnViYmxlKCcgLiAkaXRlbS0+aWQgLiAnKSI+4pyP77iPIEVkaXRhcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItYnRuIHZtMi1idG4tZGFuZ2VyIHZtMi1idG4tc20iIG9uY2xpY2s9InZtMlF1ZXVlQWN0aW9uKCcgLiAkaXRlbS0+aWQgLiAnLFwnY2FuY2VsXCcpIj7inJUgQ2FuY2VsYXI8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8g4pSA4pSAIFRBQjogRUxFTkNPIOKUgOKUgAogICAgZWxzZWlmICgkdGFiID09PSAnZWxlbmNvJykgewogICAgICAgIGdsb2JhbCAkd3BkYjsKICAgICAgICAkdGVhbXMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgICAgICJTRUxFQ1QgKiBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl90ZWFtcyBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MgTElNSVQgNTAiCiAgICAgICAgKTsKCiAgICAgICAgLy8gV0MgY2F0ZWdvcmllcyBmb3Igc2ltdWxhdGlvbgogICAgICAgICR3Y19jYXRzX3NpbSA9IGdldF90ZXJtcyhbJ3RheG9ub215Jz0+J3Byb2R1Y3RfY2F0JywnaGlkZV9lbXB0eSc9PmZhbHNlLCdmaWVsZHMnPT4naWQ9Pm5hbWUnLCdudW1iZXInPT4yMDBdKTsKICAgICAgICBpZiAoaXNfd3BfZXJyb3IoJHdjX2NhdHNfc2ltKSkgJHdjX2NhdHNfc2ltID0gW107CiAgICAgICAgJGNhdHNfc2ltX2pzID0gW107CiAgICAgICAgZm9yZWFjaCAoJHdjX2NhdHNfc2ltIGFzICR0aWQgPT4gJHRuYW1lKSAkY2F0c19zaW1fanNbXSA9IFsnaWQnPT4kdGlkLCduYW1lJz0+JHRuYW1lXTsKCiAgICAgICAgZWNobyAnPHNjcmlwdD52YXIgdm0yU2ltQ2F0cz0nIC4gd3BfanNvbl9lbmNvZGUoJGNhdHNfc2ltX2pzKSAuICc7PC9zY3JpcHQ+JzsKCiAgICAgICAgLy8gTWlzc2luZyBwYXJ0bmVycyBhbGVydAogICAgICAgICRtaXNzaW5nX2NhdHNfYWxsID0gW107CiAgICAgICAgZm9yZWFjaCAoJHRlYW1zIGFzICR0KSB7CiAgICAgICAgICAgICRtID0ganNvbl9kZWNvZGUoJHQtPm1pc3NpbmdfY2F0cyA/OiAnW10nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgZm9yZWFjaCAoJG0gYXMgJG1jKSB7CiAgICAgICAgICAgICAgICAkbW4gPSBpc19hcnJheSgkbWMpID8gJG1jWyduYW1lJ10gOiAkbWM7CiAgICAgICAgICAgICAgICAkbWlzc2luZ19jYXRzX2FsbFskbW5dID0gKCRtaXNzaW5nX2NhdHNfYWxsWyRtbl0gPz8gMCkgKyAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZW1wdHkoJG1pc3NpbmdfY2F0c19hbGwpKSB7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjVmNTtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTRweCAxOHB4O21hcmdpbi1ib3R0b206MTZweCI+JzsKICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwO2NvbG9yOiNkYzI2MjY7bWFyZ2luLWJvdHRvbTo2cHgiPuKaoO+4jyBDYXRlZ29yaWFzIHNlbSBwYXJjZWlyb3MgY2FkYXN0cmFkb3M8L2Rpdj4nOwogICAgICAgICAgICBmb3JlYWNoICgkbWlzc2luZ19jYXRzX2FsbCBhcyAkY2F0X25hbWUgPT4gJGNvdW50KSB7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojN2YxZDFkO21hcmdpbi1ib3R0b206M3B4Ij7igKIgPHN0cm9uZz4nIC4gZXNjX2h0bWwoJGNhdF9uYW1lKSAuICc8L3N0cm9uZz4g4oCUIGFwYXJlY2V1ICcgLiAkY291bnQgLiAneCBzZW0gcGFyY2Vpcm88L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5OTFiMWI7bWFyZ2luLXRvcDo4cHgiPvCfkYkgQ2FkYXN0cmUgcGFyY2Vpcm9zIG5hIGFiYSA8YSBocmVmPSInIC4gZXNjX3VybChhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItcGFyY2Vpcm9zJywndGFiJz0+J2NhZGFzdHJvJ10sJGJhc2UpKSAuICciIHN0eWxlPSJjb2xvcjojN2MzYWVkIj7wn46tIENhZGFzdHJvPC9hPiBlIHZpbmN1bGUgYXMgY2F0ZWdvcmlhcyBXQyBhIGVsZXMuPC9kaXY+JzsKICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICB9CgogICAgICAgIC8vIFNpbXVsYXRlIHNlY3Rpb24KICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItY2FyZCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweCI+CiAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4O2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMCI+8J+nqiBTaW11bGFyIE1vbnRhZ2VtIGRlIEVxdWlwZTwvaDM+CiAgICAgICAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojNTU1O21hcmdpbi1ib3R0b206MTRweCI+VGVzdGUgbyBtb3RvciBkZSBlbGVuY28gc2VtIHByZWNpc2FyIGNyaWFyIHVtIHBlZGlkbyByZWFsLiBBIG1lbnNhZ2VtIHNlcsOhIGVudmlhZGEgbm8gV0EgY29tIGZsYWcgZGUgc2ltdWxhw6fDo28uPC9wPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZm9ybS1yb3ciIHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgICAgICAgICAgIDxkaXY+PGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzU1NTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5OFIERhdGEgZG8gRXZlbnRvPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0ic2ltX2RhdGUiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NTU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+OryBDYXRlZ29yaWFzIFdDIG5lY2Vzc8OhcmlhczwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzaW1fY2F0c193cmFwIiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6OHB4O2JhY2tncm91bmQ6I2ZhZmFmYTttYXgtaGVpZ2h0OjEwMHB4O292ZXJmbG93LXk6YXV0bztmb250LXNpemU6MTJweCI+Q2FycmVnYW5kby4uLjwvZGl2PjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idm0yLWJ0biB2bTItYnRuLXByaW1hcnkiIGlkPSJidG5fc2ltdWxhdGUiIG9uY2xpY2s9InZtMlNpbXVsYXRlRWxlbmNvKCkiPvCfjqwgU2ltdWxhciBNb250YWdlbTwvYnV0dG9uPgogICAgICAgICAgICA8ZGl2IGlkPSJzaW1fcmVzdWx0IiBzdHlsZT0ibWFyZ2luLXRvcDoxNHB4O21pbi1oZWlnaHQ6MjBweCI+PC9kaXY+CiAgICAgICAgPC9kaXY+JzsKCiAgICAgICAgLy8gVGVhbXMgaGlzdG9yeSB0YWJsZQogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1jYXJkIj4KICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHg7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwIj7wn5OLIEhpc3TDs3JpY28gZGUgRXF1aXBlczwvaDM+JzsKICAgICAgICBpZiAoZW1wdHkoJHRlYW1zKSkgewogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItZW1wdHktc3RhdGUiPjxkaXYgY2xhc3M9Imljb24iPvCfjqw8L2Rpdj48cD5OZW5odW1hIGVxdWlwZSBtb250YWRhIGFpbmRhLjxicj5BZ3VhcmRlIHVtIHBlZGlkbyBzZXIgYXNzaW5hZG8gb3UgdXNlIG8gc2ltdWxhZG9yIGFjaW1hLjwvcD48L2Rpdj4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0byI+PHRhYmxlIHN0eWxlPSJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MTNweCI+JzsKICAgICAgICAgICAgZWNobyAnPHRoZWFkPjx0ciBzdHlsZT0iYmFja2dyb3VuZDojZjlmYWZiIj4nOwogICAgICAgICAgICBmb3JlYWNoIChbJ1BlZGlkbycsJ0RhdGEgRXZlbnRvJywnQ2xpZW50ZScsJ0VxdWlwZScsJ0ZhbHRvdScsJ1N0YXR1cycsJ0NyaWFkbycsJ0xpbmsnXSBhcyAkaCkgewogICAgICAgICAgICAgICAgZWNobyAnPHRoIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O3RleHQtYWxpZ246bGVmdDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlN2ViO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzU1NSI+JyAuICRoIC4gJzwvdGg+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgICAgICAgICAgIGZvcmVhY2ggKCR0ZWFtcyBhcyAkdCkgewogICAgICAgICAgICAgICAgJHRlYW1fYXJyICAgID0ganNvbl9kZWNvZGUoJHQtPnRlYW1fanNvbiA/OiAne30nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgICAgICRtaXNzaW5nX2FyciA9IGpzb25fZGVjb2RlKCR0LT5taXNzaW5nX2NhdHMgPzogJ1tdJywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICAgICAkdGVhbV9uYW1lcyAgPSBpbXBsb2RlKCcsICcsIGFycmF5X21hcChmdW5jdGlvbigkeCl7IHJldHVybiAkeFsncGFydG5lcl9uYW1lJ10gPz8gJ+KAlCc7IH0sICR0ZWFtX2FycikpOwogICAgICAgICAgICAgICAgJG1pc3NfbmFtZXMgID0gaW1wbG9kZSgnLCAnLCBhcnJheV9tYXAoZnVuY3Rpb24oJG0peyByZXR1cm4gaXNfYXJyYXkoJG0pID8gKCRtWyduYW1lJ10/PyfigJQnKSA6ICRtOyB9LCAkbWlzc2luZ19hcnIpKTsKICAgICAgICAgICAgICAgICRzdGF0dXNfYmFkZ2UgPSAkdC0+c3RhdHVzID09PSAnY29uZmlybWVkJwogICAgICAgICAgICAgICAgICAgID8gJzxzcGFuIGNsYXNzPSJ2bTItYmFkZ2UgYmFkZ2UtZ3JlZW4iPuKchSBDb25maXJtYWRvPC9zcGFuPicKICAgICAgICAgICAgICAgICAgICA6ICc8c3BhbiBjbGFzcz0idm0yLWJhZGdlIGJhZGdlLWdyYXkiPuKPsyBQZW5kZW50ZTwvc3Bhbj4nOwogICAgICAgICAgICAgICAgJHNpbV9iYWRnZSAgID0gJHQtPmlzX3NpbXVsYXRpb24gPyAnPHNwYW4gY2xhc3M9InZtMi1iYWRnZSBiYWRnZS1wdXJwbGUiPvCfp6ogc2ltPC9zcGFuPicgOiAnJzsKICAgICAgICAgICAgICAgICRkYXRlX2V2ICAgICA9ICR0LT5ldmVudF9kYXRlID8gd3BfZGF0ZSgnZC9tL1knLCBzdHJ0b3RpbWUoJHQtPmV2ZW50X2RhdGUpKSA6ICfigJQnOwogICAgICAgICAgICAgICAgJGNyZWF0ZWQgICAgID0gJHQtPmNyZWF0ZWRfYXQgPyB3cF9kYXRlKCdkL20gSDppJywgc3RydG90aW1lKCR0LT5jcmVhdGVkX2F0KSkgOiAn4oCUJzsKICAgICAgICAgICAgICAgICRvcmRlcl9sYmwgICA9ICgkdC0+b3JkZXJfaWQgJiYgISR0LT5pc19zaW11bGF0aW9uKSA/ICcjJyAuICR0LT5vcmRlcl9pZCA6ICfigJQnOwogICAgICAgICAgICAgICAgJGxpbmsgICAgICAgID0gJHQtPmNvbmZpcm1fdG9rZW4gPyAnPGEgaHJlZj0iJyAuIGVzY191cmwoaG9tZV91cmwoJy9lbGVuY28tdml2YW1haXMvP3Rva2VuPScuJHQtPmNvbmZpcm1fdG9rZW4pKSAuICciIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6IzdjM2FlZDtmb250LXNpemU6MTFweCI+8J+UlyBBYnJpcjwvYT4nIDogJ+KAlCc7CgogICAgICAgICAgICAgICAgZWNobyAnPHRyIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjBmMGYwIiBvbm1vdXNlb3Zlcj0idGhpcy5zdHlsZS5iYWNrZ3JvdW5kPVwnI2ZhZmFmYVwnIiBvbm1vdXNlb3V0PSJ0aGlzLnN0eWxlLmJhY2tncm91bmQ9XCcjZmZmXCciPic7CiAgICAgICAgICAgICAgICBlY2hvICc8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEwcHgiPicgLiBlc2NfaHRtbCgkb3JkZXJfbGJsKSAuICcgJyAuICRzaW1fYmFkZ2UgLiAnPC90ZD4nOwogICAgICAgICAgICAgICAgZWNobyAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4Ij4nIC4gZXNjX2h0bWwoJGRhdGVfZXYpIC4gJzwvdGQ+JzsKICAgICAgICAgICAgICAgIGVjaG8gJzx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTBweCI+JyAuIGVzY19odG1sKCR0LT5jbGllbnRfbmFtZSA/OiAn4oCUJykgLiAnPC90ZD4nOwogICAgICAgICAgICAgICAgZWNobyAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O21heC13aWR0aDoxODBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXMiPicgLiBlc2NfaHRtbCgkdGVhbV9uYW1lcyA/OiAn4oCUJykgLiAnPC90ZD4nOwogICAgICAgICAgICAgICAgZWNobyAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O2NvbG9yOiNkYzI2MjYiPicgLiBlc2NfaHRtbCgkbWlzc19uYW1lcyA/OiAn4oCUJykgLiAnPC90ZD4nOwogICAgICAgICAgICAgICAgZWNobyAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4Ij4nIC4gJHN0YXR1c19iYWRnZSAuICc8L3RkPic7CiAgICAgICAgICAgICAgICBlY2hvICc8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEwcHg7Y29sb3I6Izg4ODtmb250LXNpemU6MTFweCI+JyAuIGVzY19odG1sKCRjcmVhdGVkKSAuICc8L3RkPic7CiAgICAgICAgICAgICAgICBlY2hvICc8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEwcHgiPicgLiAkbGluayAuICc8L3RkPic7CiAgICAgICAgICAgICAgICBlY2hvICc8L3RyPic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPC90Ym9keT48L3RhYmxlPjwvZGl2Pic7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvZGl2Pic7CgogICAgICAgIC8vIEpTIGZvciBzaW11bGF0ZQogICAgICAgID8+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAoZnVuY3Rpb24oKXsKICAgICAgICAgICAgLy8gUmVuZGVyIGNhdGVnb3J5IGNoZWNrYm94ZXMKICAgICAgICAgICAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2ltX2NhdHNfd3JhcCcpOwogICAgICAgICAgICBpZiAod3JhcCAmJiB0eXBlb2Ygdm0yU2ltQ2F0cyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgIGlmICghdm0yU2ltQ2F0cy5sZW5ndGgpIHsgd3JhcC5pbm5lckhUTUw9JzxzcGFuIHN0eWxlPSJjb2xvcjojYWFhIj5OZW5odW1hIGNhdGVnb3JpYSBXQyBlbmNvbnRyYWRhPC9zcGFuPic7IH0KICAgICAgICAgICAgICAgIGVsc2UgeyB3cmFwLmlubmVySFRNTCA9IHZtMlNpbUNhdHMubWFwKGZ1bmN0aW9uKGMpewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4O21hcmdpbjoycHggNHB4IDJweCAwO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggN3B4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMXB4Ij4nCiAgICAgICAgICAgICAgICAgICAgICAgICArICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIHZhbHVlPSInK2MuaWQrJyIgc3R5bGU9Im1hcmdpbjowIj4gJytjLm5hbWUrJzwvbGFiZWw+JzsKICAgICAgICAgICAgICAgIH0pLmpvaW4oJycpOyB9CiAgICAgICAgICAgIH0KICAgICAgICB9KSgpOwoKICAgICAgICBmdW5jdGlvbiB2bTJTaW11bGF0ZUVsZW5jbygpIHsKICAgICAgICAgICAgdmFyIGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG5fc2ltdWxhdGUnKTsKICAgICAgICAgICAgdmFyIHJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaW1fcmVzdWx0Jyk7CiAgICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICdTaW11bGFuZG8uLi4nOwogICAgICAgICAgICByZXMuaW5uZXJIVE1MID0gJyc7CgogICAgICAgICAgICB2YXIgZGF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaW1fZGF0ZScpLnZhbHVlOwogICAgICAgICAgICB2YXIgY2F0SWRzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjc2ltX2NhdHNfd3JhcCBpbnB1dDpjaGVja2VkJykpLm1hcChmdW5jdGlvbihjYil7IHJldHVybiBwYXJzZUludChjYi52YWx1ZSk7IH0pOwoKICAgICAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgICAgIGZkLmFwcGVuZCgnYWN0aW9uJywndm0yX3NpbXVsYXRlX2VsZW5jbycpOwogICAgICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgdm0yTm9uY2UpOwogICAgICAgICAgICBmZC5hcHBlbmQoJ2V2ZW50X2RhdGUnLCBkYXRlKTsKICAgICAgICAgICAgZmQuYXBwZW5kKCdjYXRfaWRzJywgSlNPTi5zdHJpbmdpZnkoY2F0SWRzKSk7CgogICAgICAgICAgICBmZXRjaCh2bTJCYXNlLCB7bWV0aG9kOidQT1NUJyxib2R5OmZkfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiByLmpzb24oKTt9KQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oZGF0YSl7CiAgICAgICAgICAgICAgICAgICAgYnRuLmRpc2FibGVkPWZhbHNlOyBidG4udGV4dENvbnRlbnQ9J/CfjqwgU2ltdWxhciBNb250YWdlbSc7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3VjY2VzcyAmJiBkYXRhLmRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBkYXRhLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZWFtTGluZXMgPSBPYmplY3QudmFsdWVzKGQudGVhbXx8e30pLm1hcChmdW5jdGlvbih0KXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPGRpdiBzdHlsZT0icGFkZGluZzo0cHggMDtmb250LXNpemU6MTNweCI+8J+OrSA8c3Ryb25nPicrdC5jYXRfbmFtZSsnOjwvc3Ryb25nPiAnK3QucGFydG5lcl9uYW1lKyh0LmlzX2J1c3k/JyA8c3BhbiBzdHlsZT0iY29sb3I6I2Y1OWUwYiI+4pqg77iPIG9jdXBhZG88L3NwYW4+JzonJykrJzwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWlzc0xpbmVzID0gKGQubWlzc2luZ3x8W10pLm1hcChmdW5jdGlvbihtKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtbj10eXBlb2YgbT09PSdvYmplY3QnP20ubmFtZTptOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjRweCAwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNkYzI2MjYiPuKaoO+4jyA8c3Ryb25nPicrbW4rJzo8L3N0cm9uZz4gc2VtIHBhcmNlaXJvPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2YwZmRmNDtib3JkZXI6MXB4IHNvbGlkICM4NmVmYWM7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNHB4Ij4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArICc8ZGl2IHN0eWxlPSJmb250LXdlaWdodDo3MDA7Y29sb3I6IzE1ODAzZDttYXJnaW4tYm90dG9tOjhweCI+4pyFIEVxdWlwZSBtb250YWRhISBOb3RpZmljYcOnw6NvIFdBIGVudmlhZGEuPC9kaXY+JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0ZWFtTGluZXMuam9pbignJykgKyBtaXNzTGluZXMuam9pbignJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweDtwYWRkaW5nLXRvcDoxMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNiYmY3ZDAiPicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJzxhIGhyZWY9IicrZC5jb25maXJtX3VybCsnIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiM3YzNhZWQ7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5SXIEFicmlyIHDDoWdpbmEgZGUgY29uZmlybWHDp8OjbyDihpI8L2E+JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAnPC9kaXY+PC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgbG9jYXRpb24ucmVsb2FkKCk7IH0sIDQwMDApOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT0iY29sb3I6I2RjMjYyNjtmb250LXNpemU6MTNweCI+4p2MIEVycm8gbmEgc2ltdWxhw6fDo28uIFZlcmlmaXF1ZSBvIGNvbnNvbGUuPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgICAgIGJ0bi5kaXNhYmxlZD1mYWxzZTsgYnRuLnRleHRDb250ZW50PSfwn46sIFNpbXVsYXIgTW9udGFnZW0nOwogICAgICAgICAgICAgICAgICAgIHJlcy5pbm5lckhUTUw9JzxkaXYgc3R5bGU9ImNvbG9yOiNkYzI2MjYiPuKdjCBFcnJvIGRlIHJlZGU6ICcrZS5tZXNzYWdlKyc8L2Rpdj4nOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIDwvc2NyaXB0PgogICAgICAgIDw/cGhwCiAgICB9CgoKICAgIC8vIOKUgOKUgCBUQUI6IE3DiVRSSUNBUyDilIDilIAKICAgIGVsc2VpZiAoJHRhYiA9PT0gJ21ldHJpY2FzJykgewogICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjgwcHgsMWZyKSk7Z2FwOjE2cHgiPic7CgogICAgICAgIC8vIFRvcCBwb3IgZXZlbnRvcwogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1jYXJkIj48aDM+8J+PhiBUb3AgcG9yIEV2ZW50b3M8L2gzPic7CiAgICAgICAgaWYgKGVtcHR5KCR0b3BfcGFydG5lcnMpKSB7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9ImNvbG9yOiNhYWE7Zm9udC1zaXplOjEzcHgiPlNlbSBkYWRvcyBhaW5kYTwvZGl2Pic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJhbmsgPSAxOwogICAgICAgICAgICBmb3JlYWNoICgkdG9wX3BhcnRuZXJzIGFzICRwKSB7CiAgICAgICAgICAgICAgICAkbWVkYWwgPSBbJ/CfpYcnLCfwn6WIJywn8J+liSddWyRyYW5rLTFdID8/ICIjeyRyYW5rfSI7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O3BhZGRpbmc6OHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YwZjBmMCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxOHB4Ij4nIC4gJG1lZGFsIC4gJzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4OjEiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHgiPicgLiBlc2NfaHRtbCgkcC0+bmFtZSkgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODgiPicgLiBlc2NfaHRtbCgkcC0+YXRyYWNhbyA/OiAn4oCUJykgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojN2MzYWVkIj4nIC4gJHAtPnRvdGFsX2V2ZW50b3MgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiNhYWEiPmV2ZW50b3M8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pic7CiAgICAgICAgICAgICAgICAkcmFuaysrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvZGl2Pic7CgogICAgICAgIC8vIFRvcCBwb3IgTlBTCiAgICAgICAgJHRvcF9ucHMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIG5wcyBJUyBOT1QgTlVMTCBBTkQgc3RhdHVzPSdhdGl2bycgT1JERVIgQlkgbnBzIERFU0MgTElNSVQgNSIpOwogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1jYXJkIj48aDM+4q2QIFRvcCBOUFM8L2gzPic7CiAgICAgICAgaWYgKGVtcHR5KCR0b3BfbnBzKSkgewogICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJjb2xvcjojYWFhO2ZvbnQtc2l6ZToxM3B4Ij5TZW0gYXZhbGlhw6fDtWVzIGFpbmRhPC9kaXY+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3JlYWNoICgkdG9wX25wcyBhcyAkcCkgewogICAgICAgICAgICAgICAgJG5wc19wY3QgPSBtaW4oMTAwLCAoJHAtPm5wcyAvIDEwKSAqIDEwMCk7CiAgICAgICAgICAgICAgICAkbnBzX2NvbG9yID0gJHAtPm5wcyA+PSA4ID8gJyMxNmEzNGEnIDogKCRwLT5ucHMgPj0gNiA/ICcjZjU5ZTBiJyA6ICcjZGMyNjI2Jyk7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjhweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMGYwZjAiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTo0cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4Ij4nIC4gZXNjX2h0bWwoJHAtPm5hbWUpIC4gJzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtjb2xvcjonIC4gJG5wc19jb2xvciAuICciPicgLiBudW1iZXJfZm9ybWF0KCRwLT5ucHMsMSkgLiAnPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2U1ZTdlYjtib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6NHB4Ij48ZGl2IHN0eWxlPSJ3aWR0aDonIC4gJG5wc19wY3QgLiAnJTtiYWNrZ3JvdW5kOicgLiAkbnBzX2NvbG9yIC4gJztoZWlnaHQ6NHB4O2JvcmRlci1yYWRpdXM6NHB4Ij48L2Rpdj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAnPC9kaXY+JzsKCiAgICAgICAgLy8gRGlzdHJpYnVpw6fDo28gcG9yIGF0cmHDp8OjbwogICAgICAgICRieV9hdHJhY2FvID0gJHdwZGItPmdldF9yZXN1bHRzKCJTRUxFQ1QgYXRyYWNhbywgQ09VTlQoKikgYXMgdG90YWwgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMgR1JPVVAgQlkgYXRyYWNhbyBPUkRFUiBCWSB0b3RhbCBERVNDIExJTUlUIDEwIik7CiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idm0yLWNhcmQiPjxoMz7wn46qIFBvciBBdHJhw6fDo288L2gzPic7CiAgICAgICAgaWYgKGVtcHR5KCRieV9hdHJhY2FvKSkgewogICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJjb2xvcjojYWFhO2ZvbnQtc2l6ZToxM3B4Ij5TZW0gZGFkb3MgYWluZGE8L2Rpdj4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRtYXggPSBtYXgoYXJyYXlfY29sdW1uKCRieV9hdHJhY2FvLCAndG90YWwnKSkgPzogMTsKICAgICAgICAgICAgZm9yZWFjaCAoJGJ5X2F0cmFjYW8gYXMgJHJvdykgewogICAgICAgICAgICAgICAgJHBjdCA9IHJvdW5kKCgkcm93LT50b3RhbCAvICRtYXgpICogMTAwKTsKICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9InBhZGRpbmc6NnB4IDAiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXNpemU6MTJweDttYXJnaW4tYm90dG9tOjNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPicgLiBlc2NfaHRtbCgkcm93LT5hdHJhY2FvID86ICdOw6NvIGluZm9ybWFkbycpIC4gJzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz4nIC4gJHJvdy0+dG90YWwgLiAnPC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZTlkNWZmO2JvcmRlci1yYWRpdXM6NHB4O2hlaWdodDo2cHgiPjxkaXYgc3R5bGU9IndpZHRoOicgLiAkcGN0IC4gJyU7YmFja2dyb3VuZDojN2MzYWVkO2hlaWdodDo2cHg7Ym9yZGVyLXJhZGl1czo0cHgiPjwvZGl2PjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICc8L2Rpdj4nOwoKICAgICAgICAvLyBSZXN1bW8gZ2VyYWwKICAgICAgICAkdG90YWxfaW5hdGl2b3MgPSAkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIHN0YXR1cz0naW5hdGl2byciKTsKICAgICAgICAkYXZnX25wcyA9ICR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQVZHKG5wcykgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMgV0hFUkUgbnBzIElTIE5PVCBOVUxMIik7CiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idm0yLWNhcmQiPjxoMz7wn5OKIFJlc3VtbyBHZXJhbDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1jZmctMmNvbCIgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweCI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmOWY0ZmY7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4O3RleHQtYWxpZ246Y2VudGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MjJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzdjM2FlZCI+JyAuICR0b3RhbF9wYXJ0bmVycyAuICc8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNjY2Ij5Ub3RhbDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmMGZkZjQ7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4O3RleHQtYWxpZ246Y2VudGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MjJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzE2YTM0YSI+JyAuICR0b3RhbF9hdGl2b3MgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzY2NiI+QXRpdm9zPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjllNjtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZjU5ZTBiIj4nIC4gKCRhdmdfbnBzID8gbnVtYmVyX2Zvcm1hdCgkYXZnX25wcywxKSA6ICfigJQnKSAuICc8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNjY2Ij5OUFMgTcOpZGlvPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZlZjJmMjtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZGMyNjI2Ij4nIC4gJHRvdGFsX2luYXRpdm9zIC4gJzwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2NjYiPkluYXRpdm9zPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+JzsKCiAgICAgICAgZWNobyAnPC9kaXY+JzsgLy8gZ3JpZAogICAgfQoKICAgIC8vIOKUgOKUgCBNT0RBTCBDQURBU1RSTy9FREnDh8ODTyDilIDilIAKICAgIC8vIE91dHB1dCBXQyBjYXRlZ29yaWVzIGFuZCB0YWdzIGZvciB0aGUgbW9kYWwKICAgICR3Y19jYXRzX2xpc3QgPSBnZXRfdGVybXMoWyd0YXhvbm9teScgPT4gJ3Byb2R1Y3RfY2F0JywgJ2hpZGVfZW1wdHknID0+IGZhbHNlLCAnZmllbGRzJyA9PiAnaWQ9Pm5hbWUnLCAnbnVtYmVyJyA9PiAyMDBdKTsKICAgICR3Y190YWdzX2xpc3QgPSBnZXRfdGVybXMoWyd0YXhvbm9teScgPT4gJ3Byb2R1Y3RfdGFnJywgJ2hpZGVfZW1wdHknID0+IGZhbHNlLCAnZmllbGRzJyA9PiAnaWQ9Pm5hbWUnLCAnbnVtYmVyJyA9PiAyMDBdKTsKICAgIGlmIChpc193cF9lcnJvcigkd2NfY2F0c19saXN0KSkgJHdjX2NhdHNfbGlzdCA9IFtdOwogICAgaWYgKGlzX3dwX2Vycm9yKCR3Y190YWdzX2xpc3QpKSAkd2NfdGFnc19saXN0ID0gW107CiAgICAkY2F0c19mb3JfanMgPSBbXTsKICAgIGZvcmVhY2ggKCR3Y19jYXRzX2xpc3QgYXMgJHRpZCA9PiAkdG5hbWUpIHsgJGNhdHNfZm9yX2pzW10gPSBbJ2lkJyA9PiAkdGlkLCAnbmFtZScgPT4gJHRuYW1lXTsgfQogICAgJHRhZ3NfZm9yX2pzID0gW107CiAgICBmb3JlYWNoICgkd2NfdGFnc19saXN0IGFzICR0aWQgPT4gJHRuYW1lKSB7ICR0YWdzX2Zvcl9qc1tdID0gWydpZCcgPT4gJHRpZCwgJ25hbWUnID0+ICR0bmFtZV07IH0KICAgIGVjaG8gJzxzY3JpcHQ+dmFyIHZtMldjQ2F0cz0nIC4gd3BfanNvbl9lbmNvZGUoJGNhdHNfZm9yX2pzKSAuICc7dmFyIHZtMldjVGFncz0nIC4gd3BfanNvbl9lbmNvZGUoJHRhZ3NfZm9yX2pzKSAuICc7PC9zY3JpcHQ+JzsKCiAgICBlY2hvICc8ZGl2IGlkPSJ2bTJQYXJ0bmVyTW9kYWwiIHN0eWxlPSJkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjUpO3otaW5kZXg6OTk5OTtvdmVyZmxvdy15OmF1dG8iPgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjttYXgtd2lkdGg6NjAwcHg7bWFyZ2luOjQwcHggYXV0bztib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyOHB4O3Bvc2l0aW9uOnJlbGF0aXZlIj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJ3ZtMlBhcnRuZXJNb2RhbFwnKS5zdHlsZS5kaXNwbGF5PVwnbm9uZVwnIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOjEycHg7cmlnaHQ6MTZweDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIwcHg7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY2NiI+4pyVPC9idXR0b24+CiAgICAgICAgICAgIDxoMiBpZD0idm0yTW9kYWxUaXRsZSIgc3R5bGU9Im1hcmdpbjowIDAgMjBweDtmb250LXNpemU6MThweCI+Tm92byBQYXJjZWlybzwvaDI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJwbV9pZCIgdmFsdWU9IjAiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZm9ybS1yb3ciPgogICAgICAgICAgICAgICAgPGRpdj48bGFiZWw+Tm9tZSBjb21wbGV0byAqPC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBtX25hbWUiIHBsYWNlaG9sZGVyPSJFeDogSm/Do28gREogU291bmRzIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXY+PGxhYmVsPldoYXRzQXBwIChEREkrREREK27Dum1lcm8pPC9sYWJlbD48aW5wdXQgdHlwZT0idGVsIiBpZD0icG1fcGhvbmUiIHBsYWNlaG9sZGVyPSI1NTExOTk5OTk5OTk5Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1mb3JtLXJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD5FbWFpbDwvbGFiZWw+PGlucHV0IHR5cGU9ImVtYWlsIiBpZD0icG1fZW1haWwiIHBsYWNlaG9sZGVyPSJlbWFpbEBleGVtcGxvLmNvbSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD5TdGF0dXM8L2xhYmVsPjxzZWxlY3QgaWQ9InBtX3N0YXR1cyI+PG9wdGlvbiB2YWx1ZT0iYXRpdm8iPvCfn6IgQXRpdm88L29wdGlvbj48b3B0aW9uIHZhbHVlPSJpbmF0aXZvIj7imqsgSW5hdGl2bzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImJsb3F1ZWFkbyI+8J+UtCBCbG9xdWVhZG88L29wdGlvbj48L3NlbGVjdD48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1mb3JtLXJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD7wn46qIEF0cmHDp8O1ZXMgKHNlcGFyYWRhcyBwb3IgdsOtcmd1bGEpPC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBtX2F0cmFjYW8iIHBsYWNlaG9sZGVyPSJESiwgTcOhZ2ljbywgQnVmZmV0Li4uIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXY+PGxhYmVsPvCfk40gUmVnacOjbzwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJwbV9yZWdpYW8iIHBsYWNlaG9sZGVyPSJFeDogR3JhbmRlIFNQLCBJbnRlcmlvciBTUCI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZm9ybS1yb3ciPgogICAgICAgICAgICAgICAgPGRpdj48bGFiZWw+8J+Pme+4jyBDaWRhZGU8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icG1fY2lkYWRlIiBwbGFjZWhvbGRlcj0iU8OjbyBQYXVsbyI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD5VRjwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJwbV9lc3RhZG8iIG1heGxlbmd0aD0iMiIgcGxhY2Vob2xkZXI9IlNQIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1mb3JtLXJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD7wn46tIEZ1bsOnw6NvIGRvIHBhcmNlaXJvPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSJwbV9mdW5jYW8iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYXJ0aXN0YSI+8J+OpCBBcnRpc3RhPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImNvb3JkZW5hZG9yIj7wn46vIENvb3JkZW5hZG9yPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im91dHJvcyIgc2VsZWN0ZWQ+8J+RpCBPdXRyb3M8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+8J+SsCBWYWxvciAvIENhY2jDqjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo2cHg7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjEwMCUiPgogICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSJwbV9jYWNoZV90aXBvIiBzdHlsZT0id2lkdGg6NjRweDttaW4td2lkdGg6NjBweDtwYWRkaW5nOjdweCA2cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJyZWFpcyI+UiQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InBvcmNlbnRhZ2VtIj4lPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0icG1fY2FjaGVfdmFsb3IiIG1pbj0iMCIgc3RlcD0iMC4wMSIgcGxhY2Vob2xkZXI9IjAsMDAiIHN0eWxlPSJmbGV4OjE7bWluLXdpZHRoOjA7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7Ym94LXNpemluZzpib3JkZXItYm94Ij4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzU1NTttYXJnaW4tYm90dG9tOjRweCI+8J+TnSBPYnNlcnZhw6fDtWVzPC9sYWJlbD4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0icG1fb2JzZXJ2YWNvZXMiIHJvd3M9IjMiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O3Jlc2l6ZTp2ZXJ0aWNhbDtib3gtc2l6aW5nOmJvcmRlci1ib3giIHBsYWNlaG9sZGVyPSJJbmZvcm1hw6fDtWVzIGFkaWNpb25haXMuLi4iPjwvdGV4dGFyZWE+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojNTU1O21hcmdpbi1ib3R0b206NnB4Ij7wn46qIENhdGVnb3JpYXMgV29vQ29tbWVyY2UgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojYWFhIj4ocGFyYSBtb250YWdlbSBkZSBlbGVuY28pPC9zcGFuPjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJwbV9jYXRzX3dyYXAiIHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDttYXgtaGVpZ2h0OjEyMHB4O292ZXJmbG93LXk6YXV0bztib3JkZXI6MXB4IHNvbGlkICNlZWU7cGFkZGluZzo4cHg7Ym9yZGVyLXJhZGl1czo2cHgiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzU1NTttYXJnaW4tYm90dG9tOjZweCI+8J+Pt++4jyBUYWdzIFdvb0NvbW1lcmNlIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDo0MDA7Y29sb3I6I2FhYSI+KG9wY2lvbmFsKTwvc3Bhbj48L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBpZD0icG1fdGFnc193cmFwIiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7bWF4LWhlaWdodDoxMDBweDtvdmVyZmxvdy15OmF1dG87Ym9yZGVyOjFweCBzb2xpZCAjZWVlO3BhZGRpbmc6OHB4O2JvcmRlci1yYWRpdXM6NnB4Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZCI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItYnRuIHZtMi1idG4tZ3JheSIgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCd2bTJQYXJ0bmVyTW9kYWxcJykuc3R5bGUuZGlzcGxheT1cJ25vbmVcJyI+Q2FuY2VsYXI8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1wcmltYXJ5IiBvbmNsaWNrPSJ2bTJTYXZlUGFydG5lcigpIj7wn5K+IFNhbHZhciBQYXJjZWlybzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0icG1fbXNnIiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxM3B4Ij48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pic7CgogICAgLy8g4pSA4pSAIEpBVkFTQ1JJUFQg4pSA4pSACiAgICA/Pgo8c2NyaXB0PgogICAgdmFyIHZtMk5vbmNlID0gIjw/cGhwIGVjaG8gJG5vbmNlOyA/PiI7CiAgICB2YXIgdm0yQmFzZSAgPSAiPD9waHAgZWNobyBhZG1pbl91cmwoJ2FkbWluLWFqYXgucGhwJyk7ID8+IjsKICAgIHZhciB2bTJQYWdlICA9ICI8P3BocCBlY2hvIGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLXBhcmNlaXJvcycpOyA/PiI7CgogICAgZnVuY3Rpb24gdm0yUmVuZGVyQ2hlY2tib3hlcyh3cmFwSWQsIGl0ZW1zLCBjaGVja2VkSWRzKSB7CiAgICAgICAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh3cmFwSWQpOwogICAgICAgIGlmICghd3JhcCkgcmV0dXJuOwogICAgICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSB7IHdyYXAuaW5uZXJIVE1MID0gJzxzcGFuIHN0eWxlPSJjb2xvcjojYWFhO2ZvbnQtc2l6ZToxMXB4Ij5OZW5odW1hIG9ww6fDo28gZW5jb250cmFkYTwvc3Bhbj4nOyByZXR1cm47IH0KICAgICAgICB3cmFwLmlubmVySFRNTCA9IGl0ZW1zLm1hcChmdW5jdGlvbihpdCkgewogICAgICAgICAgICB2YXIgY2hrID0gKGNoZWNrZWRJZHMgJiYgY2hlY2tlZElkcy5pbmRleE9mKGl0LmlkKSA+PSAwKSA/ICcgY2hlY2tlZCcgOiAnJzsKICAgICAgICAgICAgcmV0dXJuICc8bGFiZWwgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjNweCA4cHg7Y3Vyc29yOnBvaW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwIj4nCiAgICAgICAgICAgICAgICAgKyAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0iJyArIGl0LmlkICsgJyInICsgY2hrICsgJyBzdHlsZT0ibWFyZ2luOjAiPicKICAgICAgICAgICAgICAgICArICc8c3Bhbj4nICsgaXQubmFtZSArICc8L3NwYW4+PC9sYWJlbD4nOwogICAgICAgIH0pLmpvaW4oJycpOwogICAgfQoKICAgIGZ1bmN0aW9uIHZtMkdldENoZWNrZWRJZHMod3JhcElkKSB7CiAgICAgICAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh3cmFwSWQpOwogICAgICAgIGlmICghd3JhcCkgcmV0dXJuIFtdOwogICAgICAgIHJldHVybiBBcnJheS5mcm9tKHdyYXAucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCcpKS5tYXAoZnVuY3Rpb24oY2IpeyByZXR1cm4gcGFyc2VJbnQoY2IudmFsdWUpOyB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiB2bTJPcGVuTW9kYWwoaWQpIHsKICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2bTJQYXJ0bmVyTW9kYWwiKTsKICAgICAgICAvLyBSZW5kZXIgY2hlY2tib3hlcyBhbHdheXMKICAgICAgICB2bTJSZW5kZXJDaGVja2JveGVzKCJwbV9jYXRzX3dyYXAiLCB0eXBlb2Ygdm0yV2NDYXRzICE9PSAidW5kZWZpbmVkIiA/IHZtMldjQ2F0cyA6IFtdLCBbXSk7CiAgICAgICAgdm0yUmVuZGVyQ2hlY2tib3hlcygicG1fdGFnc193cmFwIiwgdHlwZW9mIHZtMldjVGFncyAhPT0gInVuZGVmaW5lZCIgPyB2bTJXY1RhZ3MgOiBbXSwgW10pOwogICAgICAgIHZhciBtc2dFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbV9tc2ciKTsKICAgICAgICBpZiAobXNnRWwpIG1zZ0VsLnRleHRDb250ZW50ID0gIiI7CiAgICAgICAgaWYgKGlkID4gMCkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidm0yTW9kYWxUaXRsZSIpLnRleHRDb250ZW50ID0gIkVkaXRhciBQYXJjZWlybyI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbV9pZCIpLnZhbHVlID0gaWQ7CiAgICAgICAgICAgIC8vIFt2MS41LjEwNV0gUmVzZXQgRnVuw6fDo28gKyBDYWNow6oKICAgICAgICAgICAgdmFyIGZuRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG1fZnVuY2FvIik7CiAgICAgICAgICAgIGlmIChmbkVsKSBmbkVsLnZhbHVlID0gIm91dHJvcyI7CiAgICAgICAgICAgIHZhciBjdkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBtX2NhY2hlX3ZhbG9yIik7CiAgICAgICAgICAgIGlmIChjdkVsKSBjdkVsLnZhbHVlID0gIiI7CiAgICAgICAgICAgIHZhciBjdEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBtX2NhY2hlX3RpcG8iKTsKICAgICAgICAgICAgaWYgKGN0RWwpIGN0RWwudmFsdWUgPSAicmVhaXMiOwogICAgICAgICAgICAvLyBMb2FkIHBhcnRuZXIgZGF0YSB2aWEgQUpBWAogICAgICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgZmQuYXBwZW5kKCJhY3Rpb24iLCJ2bTJfZ2V0X3BhcnRuZXIiKTsKICAgICAgICAgICAgZmQuYXBwZW5kKCJub25jZSIsdm0yTm9uY2UpOwogICAgICAgICAgICBmZC5hcHBlbmQoImlkIixpZCk7CiAgICAgICAgICAgIGZldGNoKHZtMkJhc2UsIHttZXRob2Q6IlBPU1QiLGJvZHk6ZmR9KS50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiByLmpzb24oKTt9KS50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MgJiYgcmVzLmRhdGEpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHJlcy5kYXRhOwogICAgICAgICAgICAgICAgICAgIFsibmFtZSIsInBob25lIiwiZW1haWwiLCJhdHJhY2FvIiwicmVnaWFvIiwiY2lkYWRlIiwiZXN0YWRvIiwib2JzZXJ2YWNvZXMiLCJmdW5jYW8iLCJjYWNoZV92YWxvciIsImNhY2hlX3RpcG8iXS5mb3JFYWNoKGZ1bmN0aW9uKGYpewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG1fIitmKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsKSBlbC52YWx1ZSA9IHBbZl0gfHwgIiI7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBtX3N0YXR1cyIpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdCkgc3QudmFsdWUgPSBwLnN0YXR1cyB8fCAiYXRpdm8iOwogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRzID0gSlNPTi5wYXJzZShwLndjX2NhdGVnb3JpZXMgfHwgIltdIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWdzID0gSlNPTi5wYXJzZShwLndjX3RhZ3MgfHwgIltdIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZtMlJlbmRlckNoZWNrYm94ZXMoInBtX2NhdHNfd3JhcCIsIHR5cGVvZiB2bTJXY0NhdHMgIT09ICJ1bmRlZmluZWQiID8gdm0yV2NDYXRzIDogW10sIGNhdHMpOwogICAgICAgICAgICAgICAgICAgICAgICB2bTJSZW5kZXJDaGVja2JveGVzKCJwbV90YWdzX3dyYXAiLCB0eXBlb2Ygdm0yV2NUYWdzICE9PSAidW5kZWZpbmVkIiA/IHZtMldjVGFncyA6IFtdLCB0YWdzKTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2bTJNb2RhbFRpdGxlIikudGV4dENvbnRlbnQgPSAiTm92byBQYXJjZWlybyI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbV9pZCIpLnZhbHVlID0gMDsKICAgICAgICAgICAgWyJwbV9uYW1lIiwicG1fcGhvbmUiLCJwbV9lbWFpbCIsInBtX2F0cmFjYW8iLCJwbV9yZWdpYW8iLCJwbV9jaWRhZGUiLCJwbV9lc3RhZG8iLCJwbV9vYnNlcnZhY29lcyIsInBtX2NhY2hlX3ZhbG9yIl0uZm9yRWFjaChmdW5jdGlvbihmKXsgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpOyBpZihlbCkgZWwudmFsdWU9IiI7IH0pOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG1fc3RhdHVzIikudmFsdWUgPSAiYXRpdm8iOwogICAgICAgICAgICB2YXIgZm5FbDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG1fZnVuY2FvIik7IGlmKGZuRWwyKSBmbkVsMi52YWx1ZSA9ICJvdXRyb3MiOwogICAgICAgICAgICB2YXIgY3RFbDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG1fY2FjaGVfdGlwbyIpOyBpZihjdEVsMikgY3RFbDIudmFsdWUgPSAicmVhaXMiOwogICAgICAgIH0KICAgICAgICBtLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgfQoKICAgIGZ1bmN0aW9uIHZtMlNhdmVQYXJ0bmVyKCkgewogICAgICAgIHZhciBidG4gPSBldmVudC50YXJnZXQ7CiAgICAgICAgYnRuLmRpc2FibGVkID0gdHJ1ZTsgYnRuLnRleHRDb250ZW50ID0gIlNhbHZhbmRvLi4uIjsKICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICBmZC5hcHBlbmQoImFjdGlvbiIsInZtMl9zYXZlX3BhcnRuZXIiKTsKICAgICAgICBmZC5hcHBlbmQoIm5vbmNlIiwgdm0yTm9uY2UpOwogICAgICAgIFsiaWQiLCJuYW1lIiwicGhvbmUiLCJlbWFpbCIsImF0cmFjYW8iLCJyZWdpYW8iLCJjaWRhZGUiLCJlc3RhZG8iLCJzdGF0dXMiLCJvYnNlcnZhY29lcyIsImZ1bmNhbyIsImNhY2hlX3ZhbG9yIiwiY2FjaGVfdGlwbyJdLmZvckVhY2goZnVuY3Rpb24oZil7CiAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbV8iK2YpOwogICAgICAgICAgICBpZiAoZWwpIGZkLmFwcGVuZChmLCBlbC52YWx1ZSk7CiAgICAgICAgfSk7CiAgICAgICAgZmQuYXBwZW5kKCJ3Y19jYXRlZ29yaWVzIiwgSlNPTi5zdHJpbmdpZnkodm0yR2V0Q2hlY2tlZElkcygicG1fY2F0c193cmFwIikpKTsKICAgICAgICBmZC5hcHBlbmQoIndjX3RhZ3MiLCAgICAgICBKU09OLnN0cmluZ2lmeSh2bTJHZXRDaGVja2VkSWRzKCJwbV90YWdzX3dyYXAiKSkpOwogICAgICAgIGZldGNoKHZtMkJhc2UsIHttZXRob2Q6IlBPU1QiLGJvZHk6ZmR9KS50aGVuKHI9PnIuanNvbigpKS50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlOyBidG4udGV4dENvbnRlbnQgPSAi8J+SviBTYWx2YXIgUGFyY2Vpcm8iOwogICAgICAgICAgICB2YXIgbXNnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBtX21zZyIpOwogICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgIG1zZy5zdHlsZS5jb2xvciA9ICIjMTZhMzRhIjsKICAgICAgICAgICAgICAgIG1zZy50ZXh0Q29udGVudCA9ICLinIUgUGFyY2Vpcm8gc2Fsdm8gY29tIHN1Y2Vzc28hIjsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgbG9jYXRpb24ucmVsb2FkKCk7IH0sIDgwMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBtc2cuc3R5bGUuY29sb3IgPSAiI2RjMjYyNiI7CiAgICAgICAgICAgICAgICBtc2cudGV4dENvbnRlbnQgPSAi4p2MIEVycm8gYW8gc2FsdmFyLiI7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiB2bTJEZWxldGVQYXJ0bmVyKGlkKSB7CiAgICAgICAgaWYgKCFjb25maXJtKCJFeGNsdWlyIGVzdGUgcGFyY2Vpcm8/IEVzdGEgYcOnw6NvIG7Do28gcG9kZSBzZXIgZGVzZmVpdGEuIikpIHJldHVybjsKICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICBmZC5hcHBlbmQoImFjdGlvbiIsInZtMl9kZWxldGVfcGFydG5lciIpOwogICAgICAgIGZkLmFwcGVuZCgibm9uY2UiLHZtMk5vbmNlKTsKICAgICAgICBmZC5hcHBlbmQoImlkIixpZCk7CiAgICAgICAgZmV0Y2godm0yQmFzZSwge21ldGhvZDoiUE9TVCIsYm9keTpmZH0pLnRoZW4ocj0+ci5qc29uKCkpLnRoZW4oZnVuY3Rpb24ocmVzKXsKICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSBsb2NhdGlvbi5ocmVmID0gdm0yUGFnZSArICImdGFiPWNhZGFzdHJvIjsKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiB2bTJRdWV1ZUFjdGlvbihpZCwgYWN0aW9uKSB7CiAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCJhY3Rpb24iLCJ2bTJfYXBwcm92ZV9xdWV1ZSIpOwogICAgICAgIGZkLmFwcGVuZCgibm9uY2UiLHZtMk5vbmNlKTsKICAgICAgICBmZC5hcHBlbmQoImlkIixpZCk7CiAgICAgICAgZmQuYXBwZW5kKCJxdWV1ZV9hY3Rpb24iLGFjdGlvbik7CiAgICAgICAgZmV0Y2godm0yQmFzZSwge21ldGhvZDoiUE9TVCIsYm9keTpmZH0pLnRoZW4ocj0+ci5qc29uKCkpLnRoZW4oZnVuY3Rpb24ocmVzKXsKICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicWlfIitpZCk7CiAgICAgICAgICAgICAgICBpZiAoZWwpIHsgZWwuc3R5bGUub3BhY2l0eT0iMC4zIjsgZWwuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSI7IH0KICAgICAgICAgICAgICAgIGlmIChhY3Rpb249PT0iYXBwcm92ZSIpIHsgZWwuaW5uZXJIVE1MID0gIjxkaXYgc3R5bGU9J3BhZGRpbmc6MTBweDtjb2xvcjojMTZhMzRhO2ZvbnQtd2VpZ2h0OjYwMCc+4pyFIEFwcm92YWRvICYgRW52aWFkbyE8L2Rpdj4iOyB9CiAgICAgICAgICAgICAgICBlbHNlIHsgZWwuaW5uZXJIVE1MID0gIjxkaXYgc3R5bGU9J3BhZGRpbmc6MTBweDtjb2xvcjojZGMyNjI2Jz7inJUgQ2FuY2VsYWRvPC9kaXY+IjsgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gdm0yRWRpdEJ1YmJsZShpZCkgewogICAgICAgIHZhciBidWJibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnViYmxlXyIraWQpOwogICAgICAgIHZhciBjdXJyZW50ID0gYnViYmxlLnRleHRDb250ZW50OwogICAgICAgIHZhciB0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CiAgICAgICAgdGEudmFsdWUgPSBjdXJyZW50OyB0YS5yb3dzID0gNTsKICAgICAgICB0YS5zdHlsZS5jc3NUZXh0ID0gIndpZHRoOjEwMCU7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjN2MzYWVkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O3Jlc2l6ZTp2ZXJ0aWNhbDtib3gtc2l6aW5nOmJvcmRlci1ib3giOwogICAgICAgIGJ1YmJsZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0YSwgYnViYmxlKTsKICAgICAgICB0YS5pZCA9ICJidWJibGVfIitpZDsKICAgICAgICB2YXIgc2F2ZUJ0biA9IGJ1YmJsZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoIi5hY3Rpb25zIik7CiAgICAgICAgaWYgKCFzYXZlQnRuKSByZXR1cm47CiAgICAgICAgdmFyIG5ld0J0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICAgIG5ld0J0bi5jbGFzc05hbWUgPSAidm0yLWJ0biB2bTItYnRuLXByaW1hcnkgdm0yLWJ0bi1zbSI7CiAgICAgICAgbmV3QnRuLnRleHRDb250ZW50ID0gIvCfkr4gU2FsdmFyIGVkacOnw6NvIjsKICAgICAgICBuZXdCdG4ub25jbGljayA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgZmQuYXBwZW5kKCJhY3Rpb24iLCJ2bTJfYXBwcm92ZV9xdWV1ZSIpOwogICAgICAgICAgICBmZC5hcHBlbmQoIm5vbmNlIix2bTJOb25jZSk7CiAgICAgICAgICAgIGZkLmFwcGVuZCgiaWQiLGlkKTsKICAgICAgICAgICAgZmQuYXBwZW5kKCJxdWV1ZV9hY3Rpb24iLCJlZGl0Iik7CiAgICAgICAgICAgIGZkLmFwcGVuZCgibWVzc2FnZSIsdGEudmFsdWUpOwogICAgICAgICAgICBmZXRjaCh2bTJCYXNlLHttZXRob2Q6IlBPU1QiLGJvZHk6ZmR9KS50aGVuKHI9PnIuanNvbigpKS50aGVuKGZ1bmN0aW9uKHIpewogICAgICAgICAgICAgICAgaWYoci5zdWNjZXNzKXtuZXdCdG4udGV4dENvbnRlbnQ9IuKchSBTYWx2byEiO30KICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgICAgICBzYXZlQnRuLnByZXBlbmQobmV3QnRuKTsKICAgIH0KCiAgICBmdW5jdGlvbiB2bTJBcHByb3ZlQWxsVXJnZW50KCkgewogICAgICAgIGlmICghY29uZmlybSgiQXByb3ZhciBlIGVudmlhciBUT0RBUyBhcyBtZW5zYWdlbnMgdXJnZW50ZXM/IikpIHJldHVybjsKICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIudm0yLXByaW9yaXR5LXVyZ2VudGUiKS5mb3JFYWNoKGZ1bmN0aW9uKGVsKXsKICAgICAgICAgICAgdmFyIGlkID0gZWwuaWQucmVwbGFjZSgicWlfIiwiIik7CiAgICAgICAgICAgIGlmIChpZCkgdm0yUXVldWVBY3Rpb24ocGFyc2VJbnQoaWQpLCAiYXBwcm92ZSIpOwogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHZtMkNyZWF0ZVJvdW5kKCkgewogICAgICAgIHZhciBhdHJhY2FvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hdGNoX2F0cmFjYW8iKS52YWx1ZS50cmltKCk7CiAgICAgICAgdmFyIGRhdGUgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWF0Y2hfZGF0ZSIpLnZhbHVlOwogICAgICAgIHZhciBvcmRlciAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hdGNoX29yZGVyIikudmFsdWU7CiAgICAgICAgdmFyIG1zZyAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWF0Y2hfbXNnIikudmFsdWUudHJpbSgpOwogICAgICAgIHZhciByZXNfZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hdGNoX3Jlc3VsdCIpOwogICAgICAgIGlmICghYXRyYWNhbyB8fCAhZGF0ZSkgeyByZXNfZGl2LmlubmVySFRNTCA9ICI8c3BhbiBzdHlsZT0nY29sb3I6I2RjMjYyNic+4pqg77iPIFByZWVuY2hhIGEgYXRyYcOnw6NvIGUgYSBkYXRhLjwvc3Bhbj4iOyByZXR1cm47IH0KICAgICAgICByZXNfZGl2LmlubmVySFRNTCA9ICI8c3BhbiBzdHlsZT0nY29sb3I6Izg4OCc+4o+zIENyaWFuZG8gcm9kYWRhLi4uPC9zcGFuPiI7CiAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCJhY3Rpb24iLCJ2bTJfY3JlYXRlX21hdGNoaW5nX3JvdW5kIik7CiAgICAgICAgZmQuYXBwZW5kKCJub25jZSIsdm0yTm9uY2UpOwogICAgICAgIGZkLmFwcGVuZCgiYXRyYWNhbyIsYXRyYWNhbyk7CiAgICAgICAgZmQuYXBwZW5kKCJldmVudF9kYXRlIixkYXRlKTsKICAgICAgICBmZC5hcHBlbmQoIm9yZGVyX2lkIixvcmRlcnx8MCk7CiAgICAgICAgZmQuYXBwZW5kKCJtc2dfdGVtcGxhdGUiLG1zZyk7CiAgICAgICAgZmV0Y2godm0yQmFzZSx7bWV0aG9kOiJQT1NUIixib2R5OmZkfSkudGhlbihyPT5yLmpzb24oKSkudGhlbihmdW5jdGlvbihyKXsKICAgICAgICAgICAgaWYoci5zdWNjZXNzKXsKICAgICAgICAgICAgICAgIHZhciBkID0gci5kYXRhOwogICAgICAgICAgICAgICAgaWYoZC5xdWV1ZWQgPiAwKXsKICAgICAgICAgICAgICAgICAgICByZXNfZGl2LmlubmVySFRNTCA9ICI8c3BhbiBzdHlsZT0nY29sb3I6IzE2YTM0YSc+4pyFICIgKyBkLnF1ZXVlZCArICIgY29udml0ZShzKSBhZGljaW9uYWRvKHMpIMOgIEZpbGEgZGUgQXByb3Zhw6fDo28hPC9zcGFuPiA8YSBocmVmPSciK3ZtMlBhZ2UrIiZ0YWI9ZmlsYScgc3R5bGU9J2NvbG9yOiM3YzNhZWQnPuKGkiBWZXIgRmlsYTwvYT4iOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXNfZGl2LmlubmVySFRNTCA9ICI8c3BhbiBzdHlsZT0nY29sb3I6I2Y1OWUwYic+4pqg77iPIE5lbmh1bSBwYXJjZWlybyBkaXNwb27DrXZlbCBjb20gZXNzYSBhdHJhw6fDo28gbmEgZGF0YSBpbmZvcm1hZGEuIENhZGFzdHJlIHBhcmNlaXJvcyBwcmltZWlyby48L3NwYW4+IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlc19kaXYuaW5uZXJIVE1MID0gIjxzcGFuIHN0eWxlPSdjb2xvcjojZGMyNjI2Jz7inYwgRXJybyBhbyBjcmlhciByb2RhZGEuPC9zcGFuPiI7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiB2bTJBZHZhbmNlU3RhZ2UoZXZlbnRfaWQsIG5leHRfc3RhZ2UpIHsKICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICBmZC5hcHBlbmQoImFjdGlvbiIsInZtMl9hZHZhbmNlX3BhcnRuZXJfc3RhZ2UiKTsKICAgICAgICBmZC5hcHBlbmQoIm5vbmNlIix2bTJOb25jZSk7CiAgICAgICAgZmQuYXBwZW5kKCJldmVudF9pZCIsZXZlbnRfaWQpOwogICAgICAgIGZkLmFwcGVuZCgic3RhZ2UiLG5leHRfc3RhZ2UpOwogICAgICAgIGZldGNoKHZtMkJhc2Use21ldGhvZDoiUE9TVCIsYm9keTpmZH0pLnRoZW4ocj0+ci5qc29uKCkpLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgICAgICAgIGlmKHIuc3VjY2VzcykgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgfSk7CiAgICB9Cjwvc2NyaXB0PgogICAgPD9waHAKCiAgICBlY2hvICc8L2Rpdj4nOyAvLyAudm0yLXdyYXAKfQoKLy8gQUpBWDogQWR2YW5jZSBwYXJ0bmVyIGV2ZW50IHN0YWdlCgovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKLy8gRUxFTkNPIOKAlCBCT1QgREUgTU9OVEFHRU0gREUgRVFVSVBFCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAoKLy8g4pSA4pSAIEF1dG8tY3JpYXIgcMOhZ2luYSAvZWxlbmNvLXZpdmFtYWlzLyBuYSBhdGl2YcOnw6NvIOKUgOKUgAphZGRfYWN0aW9uKCdpbml0JywgJ3ZtMl9lbnN1cmVfZWxlbmNvX3BhZ2UnKTsKZnVuY3Rpb24gdm0yX2Vuc3VyZV9lbGVuY29fcGFnZSgpIHsKICAgIGlmIChnZXRfb3B0aW9uKCd2bTJfZWxlbmNvX3BhZ2VfdjEnKSkgcmV0dXJuOwogICAgJGV4aXN0aW5nID0gZ2V0X3BhZ2VfYnlfcGF0aCgnZWxlbmNvLXZpdmFtYWlzJyk7CiAgICBpZiAoISRleGlzdGluZykgewogICAgICAgICRwYWdlX2lkID0gd3BfaW5zZXJ0X3Bvc3QoWwogICAgICAgICAgICAncG9zdF90aXRsZScgICA9PiAnQ29uZmlybWFyIEVxdWlwZScsCiAgICAgICAgICAgICdwb3N0X25hbWUnICAgID0+ICdlbGVuY28tdml2YW1haXMnLAogICAgICAgICAgICAncG9zdF9zdGF0dXMnICA9PiAncHVibGlzaCcsCiAgICAgICAgICAgICdwb3N0X3R5cGUnICAgID0+ICdwYWdlJywKICAgICAgICAgICAgJ3Bvc3RfY29udGVudCcgPT4gJycsCiAgICAgICAgXSk7CiAgICAgICAgaWYgKCRwYWdlX2lkICYmICFpc193cF9lcnJvcigkcGFnZV9pZCkpIHsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX2VsZW5jb19wYWdlX3YxJywgJHBhZ2VfaWQpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX2VsZW5jb19wYWdlX3YxJywgJGV4aXN0aW5nLT5JRCk7CiAgICB9Cn0KCi8vIOKUgOKUgCBUZW1wbGF0ZSBvdmVycmlkZSBwYXJhIGEgcMOhZ2luYSBkZSBjb25maXJtYcOnw6NvIOKUgOKUgAphZGRfYWN0aW9uKCd0ZW1wbGF0ZV9yZWRpcmVjdCcsICd2bTJfZWxlbmNvX3RlbXBsYXRlX3JlZGlyZWN0Jyk7CmZ1bmN0aW9uIHZtMl9lbGVuY29fdGVtcGxhdGVfcmVkaXJlY3QoKSB7CiAgICBpZiAoIWlzX3BhZ2UoJ2VsZW5jby12aXZhbWFpcycpKSByZXR1cm47CiAgICAkdG9rZW4gICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWyd0b2tlbiddID8/ICcnKTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0ZWFtX3JvdyA9IG51bGw7CiAgICBpZiAoJHRva2VuKSB7CiAgICAgICAgJHRlYW1fcm93ID0gJHdwZGItPmdldF9yb3coJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICJTRUxFQ1QgKiBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl90ZWFtcyBXSEVSRSBjb25maXJtX3Rva2VuPSVzIiwKICAgICAgICAgICAgJHRva2VuCiAgICAgICAgKSk7CiAgICB9CiAgICB2bTJfZWxlbmNvX3JlbmRlcl9jb25maXJtYXRpb24oJHRlYW1fcm93LCAkdG9rZW4pOwogICAgZXhpdDsKfQoKLy8g4pSA4pSAIFBlZ2FyIGRhdGEgZG8gZXZlbnRvIGEgcGFydGlyIGRvIHBlZGlkbyDilIDilIAKZnVuY3Rpb24gdm0yX2dldF9ldmVudF9kYXRlX2Zyb21fb3JkZXIoJG9yZGVyX2lkKSB7CiAgICAkb3JkZXIgPSB3Y19nZXRfb3JkZXIoJG9yZGVyX2lkKTsKICAgIGlmICghJG9yZGVyKSByZXR1cm4gbnVsbDsKICAgIGZvcmVhY2ggKCRvcmRlci0+Z2V0X2l0ZW1zKCkgYXMgJGl0ZW0pIHsKICAgICAgICAkYmQgPSAkaXRlbS0+Z2V0X21ldGEoJ3lpdGhfYm9va2luZ19kYXRhJyk7CiAgICAgICAgaWYgKCRiZCkgewogICAgICAgICAgICAkZnJvbSA9ICRiZFsnZnJvbSddID8/ICgkYmRbJ3N0YXJ0J10gPz8gbnVsbCk7CiAgICAgICAgICAgIGlmICgkZnJvbSkgewogICAgICAgICAgICAgICAgJHRzID0gaXNfbnVtZXJpYygkZnJvbSkgPyAoaW50KSRmcm9tIDogc3RydG90aW1lKCRmcm9tKTsKICAgICAgICAgICAgICAgIGlmICgkdHMgPiAwKSByZXR1cm4gZGF0ZSgnWS1tLWQnLCAkdHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZm9yZWFjaCAoWydfZGF0YV9ldmVudG8nLCdkYXRhX2V2ZW50bycsJ195aXRoX2Jvb2tpbmdfc3RhcnQnXSBhcyAkbWV0YV9rZXkpIHsKICAgICAgICAkdiA9IGdldF9wb3N0X21ldGEoJG9yZGVyX2lkLCAkbWV0YV9rZXksIHRydWUpOwogICAgICAgIGlmICgkdikgeyAkdHMgPSBzdHJ0b3RpbWUoJHYpOyBpZiAoJHRzID4gMCkgcmV0dXJuIGRhdGUoJ1ktbS1kJywgJHRzKTsgfQogICAgfQogICAgcmV0dXJuIG51bGw7Cn0KCi8vIOKUgOKUgCBNb3RvciBkZSBtb250YWdlbSBkZSBlcXVpcGUg4pSA4pSACmZ1bmN0aW9uIHZtMl9hc3NlbWJsZV90ZWFtKCRvcmRlcl9pZCwgJHNpbXVsYXRlID0gZmFsc2UsICRzaW1fZGF0ZSA9IG51bGwsICRzaW1fY2F0X2lkcyA9IFtdKSB7CiAgICBnbG9iYWwgJHdwZGI7CgogICAgJG9yZGVyICAgICAgID0gZnVuY3Rpb25fZXhpc3RzKCd3Y19nZXRfb3JkZXInKSA/IHdjX2dldF9vcmRlcigkb3JkZXJfaWQpIDogbnVsbDsKICAgICRldmVudF9kYXRlICA9ICRzaW1fZGF0ZSA/OiAoJG9yZGVyID8gdm0yX2dldF9ldmVudF9kYXRlX2Zyb21fb3JkZXIoJG9yZGVyX2lkKSA6IG51bGwpOwogICAgJGNsaWVudF9uYW1lID0gJ1NpbXVsYcOnw6NvJzsKICAgICRjbGllbnRfcGhvbmUgPSAnJzsKCiAgICBpZiAoJG9yZGVyKSB7CiAgICAgICAgJGZuID0gJG9yZGVyLT5nZXRfYmlsbGluZ19maXJzdF9uYW1lKCk7CiAgICAgICAgJGxuID0gJG9yZGVyLT5nZXRfYmlsbGluZ19sYXN0X25hbWUoKTsKICAgICAgICAkY2xpZW50X25hbWUgID0gdHJpbSgiJGZuICRsbiIpID86ICdDbGllbnRlJzsKICAgICAgICAkY2xpZW50X3Bob25lID0gcHJlZ19yZXBsYWNlKCcvXEQvJywgJycsICRvcmRlci0+Z2V0X2JpbGxpbmdfcGhvbmUoKSk7CiAgICB9CgogICAgLy8gRGV0ZXJtaW5hciBjYXRlZ29yaWFzIG5lY2Vzc8OhcmlhcwogICAgJG5lZWRlZF9jYXRzID0gJHNpbV9jYXRfaWRzOwogICAgaWYgKGVtcHR5KCRuZWVkZWRfY2F0cykgJiYgJG9yZGVyKSB7CiAgICAgICAgZm9yZWFjaCAoJG9yZGVyLT5nZXRfaXRlbXMoKSBhcyAkaXRlbSkgewogICAgICAgICAgICAkcGlkICAgPSAkaXRlbS0+Z2V0X3Byb2R1Y3RfaWQoKTsKICAgICAgICAgICAgJHRlcm1zID0gd3BfZ2V0X3Bvc3RfdGVybXMoJHBpZCwgJ3Byb2R1Y3RfY2F0JywgWydmaWVsZHMnID0+ICdpZHMnXSk7CiAgICAgICAgICAgIGlmICghaXNfd3BfZXJyb3IoJHRlcm1zKSkgJG5lZWRlZF9jYXRzID0gYXJyYXlfbWVyZ2UoJG5lZWRlZF9jYXRzLCAkdGVybXMpOwogICAgICAgIH0KICAgICAgICAkbmVlZGVkX2NhdHMgPSBhcnJheV91bmlxdWUoJG5lZWRlZF9jYXRzKTsKICAgIH0KCiAgICAkdGVhbSAgICA9IFtdOwogICAgJG1pc3NpbmcgPSBbXTsKCiAgICBmb3JlYWNoICgkbmVlZGVkX2NhdHMgYXMgJGNhdF9pZCkgewogICAgICAgICRjYXQgICAgICA9IGdldF90ZXJtKChpbnQpJGNhdF9pZCwgJ3Byb2R1Y3RfY2F0Jyk7CiAgICAgICAgJGNhdF9uYW1lID0gKCRjYXQgJiYgIWlzX3dwX2Vycm9yKCRjYXQpKSA/ICRjYXQtPm5hbWUgOiAiQ2F0ZWdvcmlhICRjYXRfaWQiOwoKICAgICAgICAvLyBCdXNjYXIgcGFyY2Vpcm9zIGF0aXZvcyBxdWUgYXRlbmRlbSBlc3RhIGNhdGVnb3JpYQogICAgICAgICRhbGxfcGFydG5lcnMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgICAgICJTRUxFQ1QgKiBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBXSEVSRSBzdGF0dXM9J2F0aXZvJyIKICAgICAgICApOwoKICAgICAgICAkbWF0Y2hpbmcgPSBhcnJheV92YWx1ZXMoYXJyYXlfZmlsdGVyKCRhbGxfcGFydG5lcnMsIGZ1bmN0aW9uKCRwKSB1c2UgKCRjYXRfaWQpIHsKICAgICAgICAgICAgJGNhdHMgPSBqc29uX2RlY29kZSgkcC0+d2NfY2F0ZWdvcmllcyA/OiAnW10nLCB0cnVlKTsKICAgICAgICAgICAgcmV0dXJuIGluX2FycmF5KChpbnQpJGNhdF9pZCwgKGFycmF5KSRjYXRzKTsKICAgICAgICB9KSk7CgogICAgICAgIGlmIChlbXB0eSgkbWF0Y2hpbmcpKSB7CiAgICAgICAgICAgICRtaXNzaW5nW10gPSBbJ2lkJyA9PiAkY2F0X2lkLCAnbmFtZScgPT4gJGNhdF9uYW1lXTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAvLyBTZXBhcmFyIHBvciBkaXNwb25pYmlsaWRhZGUgbmEgZGF0YQogICAgICAgICRmcmVlID0gW107ICRidXN5ID0gW107CiAgICAgICAgZm9yZWFjaCAoJG1hdGNoaW5nIGFzICRwKSB7CiAgICAgICAgICAgIGlmICgkZXZlbnRfZGF0ZSkgewogICAgICAgICAgICAgICAgJGNvdW50ID0gKGludCkkd3BkYi0+Z2V0X3Zhcigkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJfZXZlbnRzCiAgICAgICAgICAgICAgICAgICAgIFdIRVJFIHBhcnRuZXJfaWQ9JWQgQU5EIGV2ZW50X2RhdGU9JXMgQU5EIHN0YWdlICE9ICdjYW5jZWxsZWQnIiwKICAgICAgICAgICAgICAgICAgICAkcC0+aWQsICRldmVudF9kYXRlCiAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgICAgIGlmICgkY291bnQgPiAwKSAkYnVzeVtdID0gJHA7IGVsc2UgJGZyZWVbXSA9ICRwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGZyZWVbXSA9ICRwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBPcmRlbmFyIHBvb2wgcG9yIG1lbm9zIGV2ZW50b3MgYXRpdm9zIChxdWVtIHRlbSBtZW5vcyBjb21wcm9taXNzb3Mgw6kgY2hhbWFkbyBwcmltZWlybykKICAgICAgICB1c29ydCgkZnJlZSwgZnVuY3Rpb24oJGEsICRiKSB1c2UgKCR3cGRiLCAkZXZlbnRfZGF0ZSkgewogICAgICAgICAgICAkY291bnRfYSA9IChpbnQpJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJfZXZlbnRzIFdIRVJFIHBhcnRuZXJfaWQ9JWQgQU5EIHN0YWdlICE9ICdjYW5jZWxsZWQnIiwgJGEtPmlkCiAgICAgICAgICAgICkpOwogICAgICAgICAgICAkY291bnRfYiA9IChpbnQpJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJfZXZlbnRzIFdIRVJFIHBhcnRuZXJfaWQ9JWQgQU5EIHN0YWdlICE9ICdjYW5jZWxsZWQnIiwgJGItPmlkCiAgICAgICAgICAgICkpOwogICAgICAgICAgICByZXR1cm4gJGNvdW50X2EgLSAkY291bnRfYjsKICAgICAgICB9KTsKICAgICAgICAkcG9vbCAgID0gIWVtcHR5KCRmcmVlKSA/ICRmcmVlIDogJGJ1c3k7CiAgICAgICAgLy8gRXNjb2xoZXIgYWxlYXTDs3JpbyBlbnRyZSBvcyAzIG1lbm9zIG9jdXBhZG9zIChvdSB0b2RvcyBzZSA8IDMpCiAgICAgICAgJHRvcF9wb29sID0gYXJyYXlfc2xpY2UoJHBvb2wsIDAsIG1pbigzLCBjb3VudCgkcG9vbCkpKTsKICAgICAgICAkY2hvc2VuID0gJHRvcF9wb29sW2FycmF5X3JhbmQoJHRvcF9wb29sKV07CgogICAgICAgICR0ZWFtWyhzdHJpbmcpJGNhdF9pZF0gPSBbCiAgICAgICAgICAgICdjYXRfaWQnICAgICAgICA9PiAoaW50KSRjYXRfaWQsCiAgICAgICAgICAgICdjYXRfbmFtZScgICAgICA9PiAkY2F0X25hbWUsCiAgICAgICAgICAgICdwYXJ0bmVyX2lkJyAgICA9PiAoaW50KSRjaG9zZW4tPmlkLAogICAgICAgICAgICAncGFydG5lcl9uYW1lJyAgPT4gJGNob3Nlbi0+bmFtZSwKICAgICAgICAgICAgJ3BhcnRuZXJfcGhvbmUnID0+ICRjaG9zZW4tPnBob25lLAogICAgICAgICAgICAnZnVuY2FvJyAgICAgICAgPT4gJGNob3Nlbi0+ZnVuY2FvID8/ICdvdXRyb3MnLAogICAgICAgICAgICAnY2FjaGVfdmFsb3InICAgPT4gJGNob3Nlbi0+Y2FjaGVfdmFsb3IgPz8gbnVsbCwKICAgICAgICAgICAgJ2NhY2hlX3RpcG8nICAgID0+ICRjaG9zZW4tPmNhY2hlX3RpcG8gPz8gJ3JlYWlzJywKICAgICAgICAgICAgJ2lzX2J1c3knICAgICAgID0+ICFlbXB0eSgkYnVzeSkgJiYgaW5fYXJyYXkoJGNob3NlbiwgJGJ1c3kpLAogICAgICAgIF07CiAgICB9CgogICAgLy8gR2FyYW50aXIgMSBBcnRpc3RhICsgMSBDb29yZGVuYWRvciBzZSBuw6NvIHZpZXJhbSBwZWxhcyBjYXRlZ29yaWFzCiAgICAkaGFzX2FydGlzdGEgICAgID0gZmFsc2U7CiAgICAkaGFzX2Nvb3JkZW5hZG9yID0gZmFsc2U7CiAgICBmb3JlYWNoICgkdGVhbSBhcyAkdCkgewogICAgICAgIGlmICgoJHRbJ2Z1bmNhbyddID8/ICcnKSA9PT0gJ2FydGlzdGEnKSAgICAgJGhhc19hcnRpc3RhID0gdHJ1ZTsKICAgICAgICBpZiAoKCR0WydmdW5jYW8nXSA/PyAnJykgPT09ICdjb29yZGVuYWRvcicpICRoYXNfY29vcmRlbmFkb3IgPSB0cnVlOwogICAgfQoKICAgIC8vIFNlIG7Do28gdGVtIGFydGlzdGEsIGJ1c2NhciBvIGFydGlzdGEgY29tIG1lbm9zIGV2ZW50b3MKICAgIGlmICghJGhhc19hcnRpc3RhKSB7CiAgICAgICAgJGFydGlzdGFzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICAgICAiU0VMRUNUIHAuKiwgQ09VTlQocGUuaWQpIGFzIGV2X2NvdW50CiAgICAgICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBwCiAgICAgICAgICAgICBMRUZUIEpPSU4geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJfZXZlbnRzIHBlIE9OIHBlLnBhcnRuZXJfaWQgPSBwLmlkIEFORCBwZS5zdGFnZSAhPSAnY2FuY2VsbGVkJwogICAgICAgICAgICAgV0hFUkUgcC5zdGF0dXM9J2F0aXZvJyBBTkQgcC5mdW5jYW89J2FydGlzdGEnCiAgICAgICAgICAgICBHUk9VUCBCWSBwLmlkIE9SREVSIEJZIGV2X2NvdW50IEFTQyBMSU1JVCAzIgogICAgICAgICk7CiAgICAgICAgaWYgKCFlbXB0eSgkYXJ0aXN0YXMpKSB7CiAgICAgICAgICAgICRjaG9zZW5fYSA9ICRhcnRpc3Rhc1thcnJheV9yYW5kKGFycmF5X3NsaWNlKCRhcnRpc3RhcywgMCwgbWluKDMsIGNvdW50KCRhcnRpc3RhcykpKSldOwogICAgICAgICAgICAkdGVhbVsnZXh0cmFfYXJ0aXN0YSddID0gWwogICAgICAgICAgICAgICAgJ2NhdF9pZCcgICAgICAgID0+IDAsCiAgICAgICAgICAgICAgICAnY2F0X25hbWUnICAgICAgPT4gJ0FydGlzdGEnLAogICAgICAgICAgICAgICAgJ3BhcnRuZXJfaWQnICAgID0+IChpbnQpJGNob3Nlbl9hLT5pZCwKICAgICAgICAgICAgICAgICdwYXJ0bmVyX25hbWUnICA9PiAkY2hvc2VuX2EtPm5hbWUsCiAgICAgICAgICAgICAgICAncGFydG5lcl9waG9uZScgPT4gJGNob3Nlbl9hLT5waG9uZSwKICAgICAgICAgICAgICAgICdmdW5jYW8nICAgICAgICA9PiAnYXJ0aXN0YScsCiAgICAgICAgICAgICAgICAnY2FjaGVfdmFsb3InICAgPT4gJGNob3Nlbl9hLT5jYWNoZV92YWxvciA/PyBudWxsLAogICAgICAgICAgICAgICAgJ2NhY2hlX3RpcG8nICAgID0+ICRjaG9zZW5fYS0+Y2FjaGVfdGlwbyA/PyAncmVhaXMnLAogICAgICAgICAgICAgICAgJ2lzX2J1c3knICAgICAgID0+IGZhbHNlLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBTZSBuw6NvIHRlbSBjb29yZGVuYWRvciwgYnVzY2FyIG8gY29vcmRlbmFkb3IgY29tIG1lbm9zIGV2ZW50b3MKICAgIGlmICghJGhhc19jb29yZGVuYWRvcikgewogICAgICAgICRjb29yZGVuYWRvcmVzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICAgICAiU0VMRUNUIHAuKiwgQ09VTlQocGUuaWQpIGFzIGV2X2NvdW50CiAgICAgICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBwCiAgICAgICAgICAgICBMRUZUIEpPSU4geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJfZXZlbnRzIHBlIE9OIHBlLnBhcnRuZXJfaWQgPSBwLmlkIEFORCBwZS5zdGFnZSAhPSAnY2FuY2VsbGVkJwogICAgICAgICAgICAgV0hFUkUgcC5zdGF0dXM9J2F0aXZvJyBBTkQgcC5mdW5jYW89J2Nvb3JkZW5hZG9yJwogICAgICAgICAgICAgR1JPVVAgQlkgcC5pZCBPUkRFUiBCWSBldl9jb3VudCBBU0MgTElNSVQgMyIKICAgICAgICApOwogICAgICAgIGlmICghZW1wdHkoJGNvb3JkZW5hZG9yZXMpKSB7CiAgICAgICAgICAgICRjaG9zZW5fYyA9ICRjb29yZGVuYWRvcmVzW2FycmF5X3JhbmQoYXJyYXlfc2xpY2UoJGNvb3JkZW5hZG9yZXMsIDAsIG1pbigzLCBjb3VudCgkY29vcmRlbmFkb3JlcykpKSldOwogICAgICAgICAgICAkdGVhbVsnZXh0cmFfY29vcmRlbmFkb3InXSA9IFsKICAgICAgICAgICAgICAgICdjYXRfaWQnICAgICAgICA9PiAwLAogICAgICAgICAgICAgICAgJ2NhdF9uYW1lJyAgICAgID0+ICdDb29yZGVuYWRvcicsCiAgICAgICAgICAgICAgICAncGFydG5lcl9pZCcgICAgPT4gKGludCkkY2hvc2VuX2MtPmlkLAogICAgICAgICAgICAgICAgJ3BhcnRuZXJfbmFtZScgID0+ICRjaG9zZW5fYy0+bmFtZSwKICAgICAgICAgICAgICAgICdwYXJ0bmVyX3Bob25lJyA9PiAkY2hvc2VuX2MtPnBob25lLAogICAgICAgICAgICAgICAgJ2Z1bmNhbycgICAgICAgID0+ICdjb29yZGVuYWRvcicsCiAgICAgICAgICAgICAgICAnY2FjaGVfdmFsb3InICAgPT4gJGNob3Nlbl9jLT5jYWNoZV92YWxvciA/PyBudWxsLAogICAgICAgICAgICAgICAgJ2NhY2hlX3RpcG8nICAgID0+ICRjaG9zZW5fYy0+Y2FjaGVfdGlwbyA/PyAncmVhaXMnLAogICAgICAgICAgICAgICAgJ2lzX2J1c3knICAgICAgID0+IGZhbHNlLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBTYWx2YXIgbm8gYmFuY28KICAgICR0b2tlbiA9IGJpbjJoZXgocmFuZG9tX2J5dGVzKDI0KSk7CiAgICAkd3BkYi0+aW5zZXJ0KCR3cGRiLT5wcmVmaXggLiAndm0yX3RlYW1zJywgWwogICAgICAgICdvcmRlcl9pZCcgICAgICA9PiAoaW50KSRvcmRlcl9pZCwKICAgICAgICAnZXZlbnRfZGF0ZScgICAgPT4gJGV2ZW50X2RhdGUsCiAgICAgICAgJ2NsaWVudF9uYW1lJyAgID0+ICRjbGllbnRfbmFtZSwKICAgICAgICAnY2xpZW50X3Bob25lJyAgPT4gJGNsaWVudF9waG9uZSwKICAgICAgICAndGVhbV9qc29uJyAgICAgPT4gd3BfanNvbl9lbmNvZGUoJHRlYW0pLAogICAgICAgICdtaXNzaW5nX2NhdHMnICA9PiB3cF9qc29uX2VuY29kZSgkbWlzc2luZyksCiAgICAgICAgJ2NvbmZpcm1fdG9rZW4nID0+ICR0b2tlbiwKICAgICAgICAnc3RhdHVzJyAgICAgICAgPT4gJ2RyYWZ0JywKICAgICAgICAnaXNfc2ltdWxhdGlvbicgPT4gJHNpbXVsYXRlID8gMSA6IDAsCiAgICAgICAgJ2NyZWF0ZWRfYXQnICAgID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwKICAgIF0pOwogICAgJHRlYW1faWQgPSAoaW50KSR3cGRiLT5pbnNlcnRfaWQ7CgogICAgcmV0dXJuIFsKICAgICAgICAndGVhbV9pZCcgICAgID0+ICR0ZWFtX2lkLAogICAgICAgICdvcmRlcl9pZCcgICAgPT4gJG9yZGVyX2lkLAogICAgICAgICdldmVudF9kYXRlJyAgPT4gJGV2ZW50X2RhdGUsCiAgICAgICAgJ2NsaWVudF9uYW1lJyA9PiAkY2xpZW50X25hbWUsCiAgICAgICAgJ3RlYW0nICAgICAgICA9PiAkdGVhbSwKICAgICAgICAnbWlzc2luZycgICAgID0+ICRtaXNzaW5nLAogICAgICAgICd0b2tlbicgICAgICAgPT4gJHRva2VuLAogICAgICAgICdjb25maXJtX3VybCcgPT4gaG9tZV91cmwoJy9lbGVuY28tdml2YW1haXMvP3Rva2VuPScgLiAkdG9rZW4pLAogICAgICAgICdpc19zaW11bGF0aW9uJyA9PiAkc2ltdWxhdGUsCiAgICBdOwp9CgovLyDilIDilIAgRW52aWFyIG5vdGlmaWNhw6fDo28gV0EgcGFyYSBvcyBhZG1pbnMg4pSA4pSACmZ1bmN0aW9uIHZtMl9ub3RpZnlfYWRtaW5zX2VsZW5jbygkcmVzdWx0KSB7CiAgICBpZiAoZW1wdHkoJHJlc3VsdFsndGVhbV9pZCddKSkgcmV0dXJuOwogICAgJGRhdGVfZm10ICA9ICRyZXN1bHRbJ2V2ZW50X2RhdGUnXSA/IHdwX2RhdGUoJ2QvbS9ZJywgc3RydG90aW1lKCRyZXN1bHRbJ2V2ZW50X2RhdGUnXSkpIDogJ+KAlCc7CiAgICAkc2ltX2xhYmVsID0gIWVtcHR5KCRyZXN1bHRbJ2lzX3NpbXVsYXRpb24nXSkgPyAiXG7wn6eqICpTSU1VTEHDh8ODTyDigJQgbsOjbyDDqSBwZWRpZG8gcmVhbCpcbiIgOiAnJzsKICAgICRvcmRlcl9sYWJlbCA9ICghZW1wdHkoJHJlc3VsdFsnb3JkZXJfaWQnXSkgJiYgISRyZXN1bHRbJ2lzX3NpbXVsYXRpb24nXSkgPyAiUGVkaWRvICN7JHJlc3VsdFsnb3JkZXJfaWQnXX0iIDogJ1NpbXVsYcOnw6NvJzsKCiAgICAkbGluZXMgPSBbXTsKICAgICR0b3RhbF9yZWFpcyA9IDAuMDsKICAgICRoYXNfcG9yY2VudGFnZW0gPSBmYWxzZTsKICAgIGZvcmVhY2ggKCRyZXN1bHRbJ3RlYW0nXSBhcyAkdCkgewogICAgICAgICRidXN5X2ZsYWcgID0gIWVtcHR5KCR0Wydpc19idXN5J10pID8gJyDimqDvuI8nIDogJyc7CiAgICAgICAgJGZ1bmNhb19sYWJlbCA9ICcnOwogICAgICAgIHN3aXRjaCAoJHRbJ2Z1bmNhbyddID8/ICdvdXRyb3MnKSB7CiAgICAgICAgICAgIGNhc2UgJ2FydGlzdGEnOiAgICAgJGZ1bmNhb19sYWJlbCA9ICcg8J+OpCc7IGJyZWFrOwogICAgICAgICAgICBjYXNlICdjb29yZGVuYWRvcic6ICRmdW5jYW9fbGFiZWwgPSAnIPCfjq8nOyBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAkZnVuY2FvX2xhYmVsID0gJyc7ICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAkY2FjaGVfc3RyID0gJyc7CiAgICAgICAgaWYgKCFlbXB0eSgkdFsnY2FjaGVfdmFsb3InXSkgJiYgJHRbJ2NhY2hlX3ZhbG9yJ10gPiAwKSB7CiAgICAgICAgICAgIGlmICgoJHRbJ2NhY2hlX3RpcG8nXSA/PyAncmVhaXMnKSA9PT0gJ3BvcmNlbnRhZ2VtJykgewogICAgICAgICAgICAgICAgJGNhY2hlX3N0ciA9ICcg4oCUICcgLiBudW1iZXJfZm9ybWF0KCR0WydjYWNoZV92YWxvciddLCAxLCAnLCcsICcuJykgLiAnJSc7CiAgICAgICAgICAgICAgICAkaGFzX3BvcmNlbnRhZ2VtID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjYWNoZV9zdHIgPSAnIOKAlCBSJCAnIC4gbnVtYmVyX2Zvcm1hdCgkdFsnY2FjaGVfdmFsb3InXSwgMiwgJywnLCAnLicpOwogICAgICAgICAgICAgICAgJHRvdGFsX3JlYWlzICs9IGZsb2F0dmFsKCR0WydjYWNoZV92YWxvciddKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkbGluZXNbXSA9ICLigKIgeyR0WydjYXRfbmFtZSddfXskZnVuY2FvX2xhYmVsfTogKnskdFsncGFydG5lcl9uYW1lJ119KnskY2FjaGVfc3RyfXskYnVzeV9mbGFnfSI7CiAgICB9CiAgICBmb3JlYWNoICgkcmVzdWx0WydtaXNzaW5nJ10gYXMgJG0pIHsKICAgICAgICAkY2F0X25hbWUgPSBpc19hcnJheSgkbSkgPyAkbVsnbmFtZSddIDogJG07CiAgICAgICAgJGxpbmVzW10gID0gIuKAoiB7JGNhdF9uYW1lfTog4pqg77iPICpTRU0gUEFSQ0VJUk8gQ0FEQVNUUkFETyoiOwogICAgfQoKICAgICR0ZWFtX3RleHQgPSBpbXBsb2RlKCJcbiIsICRsaW5lcykgPzogJ18obmVuaHVtYSBjYXRlZ29yaWEgbm9zIHByb2R1dG9zKV8nOwoKICAgICR0b3RhbF9saW5lID0gJyc7CiAgICBpZiAoJHRvdGFsX3JlYWlzID4gMCkgewogICAgICAgICR0b3RhbF9saW5lID0gIlxu8J+SuCAqVG90YWwgY2FjaMOqcyAoUiQpOiogUiQgIiAuIG51bWJlcl9mb3JtYXQoJHRvdGFsX3JlYWlzLCAyLCAnLCcsICcuJyk7CiAgICB9CiAgICBpZiAoJGhhc19wb3JjZW50YWdlbSkgewogICAgICAgICR0b3RhbF9saW5lIC49ICJcbuKaoO+4jyBBbGd1bnMgY2FjaMOqcyBzw6NvIGVtICUgKG7Do28gaW5jbHXDrWRvcyBubyB0b3RhbCkiOwogICAgfQoKICAgICRzZW1fY29vcmRfdXJsID0gJHJlc3VsdFsnY29uZmlybV91cmwnXSAuICcmc2VtX2Nvb3JkZW5hZG9yPTEnOwoKICAgICRtc2cgPSAi8J+OrCAqRVFVSVBFIE1PTlRBREEg4oCUIHskb3JkZXJfbGFiZWx9Knskc2ltX2xhYmVsfVxuIgogICAgICAgICAuICLwn5OFIERhdGE6IHskZGF0ZV9mbXR9XG4iCiAgICAgICAgIC4gIvCfkaQgQ2xpZW50ZTogeyRyZXN1bHRbJ2NsaWVudF9uYW1lJ119XG5cbiIKICAgICAgICAgLiAi8J+OqiAqRXF1aXBlOipcbnskdGVhbV90ZXh0fXskdG90YWxfbGluZX1cblxuIgogICAgICAgICAuICLwn5SXIENvbmZpcm1hciBlcXVpcGU6XG57JHJlc3VsdFsnY29uZmlybV91cmwnXX1cbiIKICAgICAgICAgLiAi4p2MIERpc3BlbnNhciBjb29yZGVuYWRvcjpcbnskc2VtX2Nvb3JkX3VybH0iOwoKICAgIGZvcmVhY2ggKFsnNTUxMTk4ODE5NTgwOScsICc1NTExOTkyNTg2ODk0J10gYXMgJHBob25lKSB7CiAgICAgICAgdm0yX3NlbmRfemFwaSgnemFwaV83NTUxJywgJHBob25lLCAkbXNnKTsKICAgIH0KfQoKLy8g4pSA4pSAIEhvb2sgV0M6IGNvbnRyYWN0LXNpZ25lZCDihpIgbW9udGFyIGVxdWlwZSDilIDilIAKYWRkX2FjdGlvbignd29vY29tbWVyY2Vfb3JkZXJfc3RhdHVzX2NoYW5nZWQnLCAndm0yX29uX2NvbnRyYWN0X3NpZ25lZF9lbGVuY28nLCAxMCwgMyk7CmZ1bmN0aW9uIHZtMl9vbl9jb250cmFjdF9zaWduZWRfZWxlbmNvKCRvcmRlcl9pZCwgJG9sZF9zdGF0dXMsICRuZXdfc3RhdHVzKSB7CiAgICBpZiAoJG5ld19zdGF0dXMgIT09ICdjb250cmFjdC1zaWduZWQnKSByZXR1cm47CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkYWxyZWFkeSA9IChpbnQpJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoCiAgICAgICAgIlNFTEVDVCBpZCBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl90ZWFtcyBXSEVSRSBvcmRlcl9pZD0lZCBBTkQgaXNfc2ltdWxhdGlvbj0wIExJTUlUIDEiLAogICAgICAgICRvcmRlcl9pZAogICAgKSk7CiAgICBpZiAoJGFscmVhZHkpIHJldHVybjsKICAgICRyZXN1bHQgPSB2bTJfYXNzZW1ibGVfdGVhbSgkb3JkZXJfaWQpOwogICAgaWYgKCFlbXB0eSgkcmVzdWx0Wyd0ZWFtX2lkJ10pKSB2bTJfbm90aWZ5X2FkbWluc19lbGVuY28oJHJlc3VsdCk7Cn0KCi8vIOKUgOKUgCBBSkFYOiBzaW11bGFyIG1vbnRhZ2VtIOKUgOKUgAphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9zaW11bGF0ZV9lbGVuY28nLCAndm0yX2FqYXhfc2ltdWxhdGVfZWxlbmNvJyk7CmZ1bmN0aW9uIHZtMl9hamF4X3NpbXVsYXRlX2VsZW5jbygpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX25vbmNlJywgJ25vbmNlJyk7CiAgICAkb3JkZXJfaWQgID0gaW50dmFsKCRfUE9TVFsnb3JkZXJfaWQnXSA/PyAwKTsKICAgICRzaW1fZGF0ZSAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnZXZlbnRfZGF0ZSddID8/ICcnKTsKICAgICRjYXRfaWRzICAgPSBhcnJheV9tYXAoJ2ludHZhbCcsIGpzb25fZGVjb2RlKHN0cmlwc2xhc2hlcygkX1BPU1RbJ2NhdF9pZHMnXSA/PyAnW10nKSwgdHJ1ZSkgPzogW10pOwogICAgJHJlc3VsdCAgICA9IHZtMl9hc3NlbWJsZV90ZWFtKCRvcmRlcl9pZCA/OiAwLCB0cnVlLCAkc2ltX2RhdGUgPzogbnVsbCwgJGNhdF9pZHMpOwogICAgJHJlc3VsdFsnaXNfc2ltdWxhdGlvbiddID0gdHJ1ZTsKICAgIHZtMl9ub3RpZnlfYWRtaW5zX2VsZW5jbygkcmVzdWx0KTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCRyZXN1bHQpOwp9CgovLyDilIDilIAgQUpBWDogY2FycmVnYXIgZGFkb3MgZG8gcGFyY2Vpcm8gKHBhcmEgbW9kYWwgZGUgZWRpw6fDo28pIOKUgOKUgAphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9nZXRfcGFydG5lcicsICd2bTJfYWpheF9nZXRfcGFydG5lcicpOwpmdW5jdGlvbiB2bTJfYWpheF9nZXRfcGFydG5lcigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX25vbmNlJywgJ25vbmNlJyk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkaWQgPSBpbnR2YWwoJF9QT1NUWydpZCddID8/IDApOwogICAgJHAgID0gJHdwZGItPmdldF9yb3coJHdwZGItPnByZXBhcmUoIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIGlkPSVkIiwgJGlkKSk7CiAgICBpZiAoISRwKSB7IHdwX3NlbmRfanNvbl9lcnJvcignbm90IGZvdW5kJyk7IHJldHVybjsgfQogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoKGFycmF5KSRwKTsKfQoKLy8g4pSA4pSAIEFKQVggKHDDumJsaWNvKTogY29uZmlybWFyIGVxdWlwZSB2aWEgdG9rZW4g4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2FqYXhfbm9wcml2X3ZtMl9jb25maXJtX2VsZW5jbycsICd2bTJfYWpheF9jb25maXJtX2VsZW5jbycpOwphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9jb25maXJtX2VsZW5jbycsICAgICAgICAndm0yX2FqYXhfY29uZmlybV9lbGVuY28nKTsKCi8vIOKUgOKUgCB2MS41LjkxOiBTYWx2YXIgZS1tYWlsIHBvciB0ZWxlZm9uZSAoV0EgQ2FwdHVyZSBzdGVwIDIgKyBTb2ZJQSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2FqYXhfbm9wcml2X3ZtX3dhX3NhdmVfZW1haWwnLCAndm0yX2FqYXhfc2F2ZV9lbWFpbCcpOwphZGRfYWN0aW9uKCd3cF9hamF4X3ZtX3dhX3NhdmVfZW1haWwnLCAgICAgICAgJ3ZtMl9hamF4X3NhdmVfZW1haWwnKTsKZnVuY3Rpb24gdm0yX2FqYXhfc2F2ZV9lbWFpbCgpIHsKICAgIGlmICggISBjaGVja19hamF4X3JlZmVyZXIoJ3ZtX3dhX2NhcHR1cmUnLCAnbm9uY2UnLCBmYWxzZSkgKSB7CiAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCdpbnZhbGlkX25vbmNlJyk7IHJldHVybjsKICAgIH0KICAgICRwaG9uZSA9IHByZWdfcmVwbGFjZSgnL1xELycsICcnLCBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsncGhvbmUnXSA/PyAnJykpOwogICAgJGVtYWlsID0gc2FuaXRpemVfZW1haWwoJF9QT1NUWydlbWFpbCddID8/ICcnKTsKICAgIGlmICggc3RybGVuKCRwaG9uZSkgPCAxMCB8fCAhIGlzX2VtYWlsKCRlbWFpbCkgKSB7CiAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCdpbnZhbGlkX2RhdGEnKTsgcmV0dXJuOwogICAgfQogICAgLy8gTm9ybWFsaXphciB0ZWxlZm9uZSBjb20gRERJIDU1CiAgICBpZiAoIHN0cmxlbigkcGhvbmUpIDw9IDExICkgJHBob25lID0gJzU1JyAuICRwaG9uZTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRjdCA9ICR3cGRiLT5wcmVmaXggLiAndm0yX2NvbnRhY3RzJzsKICAgICRyb3cgPSAkd3BkYi0+Z2V0X3Jvdygkd3BkYi0+cHJlcGFyZSgiU0VMRUNUIGlkLCBlbWFpbCBGUk9NICRjdCBXSEVSRSBwaG9uZT0lcyBMSU1JVCAxIiwgJHBob25lKSk7CiAgICBpZiAoICRyb3cgKSB7CiAgICAgICAgaWYgKCBlbXB0eSgkcm93LT5lbWFpbCkgKSB7CiAgICAgICAgICAgICR3cGRiLT51cGRhdGUoJGN0LCBbJ2VtYWlsJyA9PiAkZW1haWwsICdsYXN0X2FjdGl2aXR5JyA9PiBjdXJyZW50X3RpbWUoJ215c3FsJyldLCBbJ2lkJyA9PiAkcm93LT5pZF0pOwogICAgICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ3VwZGF0ZWQnID0+IHRydWVdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ3VwZGF0ZWQnID0+IGZhbHNlLCAncmVhc29uJyA9PiAnYWxyZWFkeV9oYXNfZW1haWwnXSk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICB3cF9zZW5kX2pzb25fZXJyb3IoJ2NvbnRhY3Rfbm90X2ZvdW5kJyk7CiAgICB9Cn0KZnVuY3Rpb24gdm0yX2FqYXhfY29uZmlybV9lbGVuY28oKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdG9rZW4gICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWyd0b2tlbiddID8/ICcnKTsKICAgICR0ZWFtX2pzb24gID0gc3RyaXBzbGFzaGVzKCRfUE9TVFsndGVhbV9qc29uJ10gPz8gJycpOwogICAgJGJ5ICAgICAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnY29uZmlybWVkX2J5J10gPz8gJ2FkbWluX3dhJyk7CgogICAgaWYgKCEkdG9rZW4pIHsgd3Bfc2VuZF9qc29uX2Vycm9yKCd0b2tlbl9taXNzaW5nJyk7IHJldHVybjsgfQoKICAgICR0ZWFtX3JvdyA9ICR3cGRiLT5nZXRfcm93KCR3cGRiLT5wcmVwYXJlKAogICAgICAgICJTRUxFQ1QgKiBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl90ZWFtcyBXSEVSRSBjb25maXJtX3Rva2VuPSVzIiwgJHRva2VuCiAgICApKTsKICAgIGlmICghJHRlYW1fcm93KSB7IHdwX3NlbmRfanNvbl9lcnJvcignbm90X2ZvdW5kJyk7IHJldHVybjsgfQoKICAgICR0ZWFtX2RhdGEgPSBqc29uX2RlY29kZSgkdGVhbV9qc29uID86ICR0ZWFtX3Jvdy0+dGVhbV9qc29uLCB0cnVlKSA/OiBbXTsKCiAgICAkd3BkYi0+dXBkYXRlKCR3cGRiLT5wcmVmaXggLiAndm0yX3RlYW1zJywgWwogICAgICAgICd0ZWFtX2pzb24nICAgID0+IHdwX2pzb25fZW5jb2RlKCR0ZWFtX2RhdGEpLAogICAgICAgICdzdGF0dXMnICAgICAgID0+ICdjb25maXJtZWQnLAogICAgICAgICdjb25maXJtZWRfYnknID0+ICRieSwKICAgICAgICAnY29uZmlybWVkX2F0JyA9PiBjdXJyZW50X3RpbWUoJ215c3FsJyksCiAgICBdLCBbJ2NvbmZpcm1fdG9rZW4nID0+ICR0b2tlbl0pOwoKICAgIC8vIEluc2VyaXIgbmEgYWdlbmRhIGRvcyBwYXJjZWlyb3MKICAgIGlmICgkdGVhbV9yb3ctPmV2ZW50X2RhdGUpIHsKICAgICAgICAkd3BkYi0+ZGVsZXRlKCR3cGRiLT5wcmVmaXggLiAndm0yX3BhcnRuZXJfZXZlbnRzJywKICAgICAgICAgICAgWydvcmRlcl9pZCcgPT4gJHRlYW1fcm93LT5vcmRlcl9pZCwgJ3N0YWdlJyA9PiAnZWxlbmNvJ10pOwoKICAgICAgICBmb3JlYWNoICgkdGVhbV9kYXRhIGFzICR0KSB7CiAgICAgICAgICAgIGlmIChlbXB0eSgkdFsncGFydG5lcl9pZCddKSkgY29udGludWU7CiAgICAgICAgICAgICR3cGRiLT5pbnNlcnQoJHdwZGItPnByZWZpeCAuICd2bTJfcGFydG5lcl9ldmVudHMnLCBbCiAgICAgICAgICAgICAgICAncGFydG5lcl9pZCcgPT4gKGludCkkdFsncGFydG5lcl9pZCddLAogICAgICAgICAgICAgICAgJ29yZGVyX2lkJyAgID0+ICR0ZWFtX3Jvdy0+b3JkZXJfaWQsCiAgICAgICAgICAgICAgICAnZXZlbnRfZGF0ZScgPT4gJHRlYW1fcm93LT5ldmVudF9kYXRlLAogICAgICAgICAgICAgICAgJ3N0YWdlJyAgICAgID0+ICdlbGVuY28nLAogICAgICAgICAgICAgICAgJ25vdGVzJyAgICAgID0+ICdDb25maXJtYWRvIHZpYSBsaW5rIGRlIGFwcm92YcOnw6NvIMK3ICcgLiAkYnksCiAgICAgICAgICAgICAgICAnY3JlYXRlZF9hdCcgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgICAgICAgICBdKTsKICAgICAgICB9CiAgICB9CiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ3N0YXR1cycgPT4gJ2NvbmZpcm1lZCddKTsKfQoKLy8g4pSA4pSAIFDDoWdpbmEgZGUgY29uZmlybWHDp8OjbyDigJQgcmVuZGVyZXIg4pSA4pSACmZ1bmN0aW9uIHZtMl9lbGVuY29fcmVuZGVyX2NvbmZpcm1hdGlvbigkdGVhbV9yb3csICR0b2tlbikgewogICAgZ2xvYmFsICR3cGRiOwogICAgJGFqYXhfdXJsID0gYWRtaW5fdXJsKCdhZG1pbi1hamF4LnBocCcpOwoKICAgIC8vIENhcnJlZ2FyIHRvZG9zIG9zIHBhcmNlaXJvcyBhdGl2b3MgcGFyYSBvIGRyb3Bkb3duIGRlIHN1YnN0aXR1acOnw6NvCiAgICAkYWxsX2FjdGl2ZSA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAiU0VMRUNUIGlkLCBuYW1lLCB3Y19jYXRlZ29yaWVzIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIHN0YXR1cz0nYXRpdm8nIE9SREVSIEJZIG5hbWUgQVNDIgogICAgKTsKICAgICRwYXJ0bmVyc19qcyA9IHdwX2pzb25fZW5jb2RlKGFycmF5X21hcChmdW5jdGlvbigkcCkgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdpZCcgICA9PiAoaW50KSRwLT5pZCwKICAgICAgICAgICAgJ25hbWUnID0+ICRwLT5uYW1lLAogICAgICAgICAgICAnY2F0cycgPT4ganNvbl9kZWNvZGUoJHAtPndjX2NhdGVnb3JpZXMgPzogJ1tdJywgdHJ1ZSkgPzogW10sCiAgICAgICAgXTsKICAgIH0sICRhbGxfYWN0aXZlKSk7CgogICAgJHRlYW1fZGF0YSAgICA9ICR0ZWFtX3JvdyA/IChqc29uX2RlY29kZSgkdGVhbV9yb3ctPnRlYW1fanNvbiA/OiAne30nLCB0cnVlKSA/OiBbXSkgOiBbXTsKICAgICRtaXNzaW5nX2RhdGEgPSAkdGVhbV9yb3cgPyAoanNvbl9kZWNvZGUoJHRlYW1fcm93LT5taXNzaW5nX2NhdHMgPzogJ1tdJywgdHJ1ZSkgPzogW10pIDogW107CiAgICAkZXZlbnRfZGF0ZSAgID0gJHRlYW1fcm93ID8gKCR0ZWFtX3Jvdy0+ZXZlbnRfZGF0ZSA/IHdwX2RhdGUoJ2QvbS9ZJywgc3RydG90aW1lKCR0ZWFtX3Jvdy0+ZXZlbnRfZGF0ZSkpIDogJ+KAlCcpIDogJ+KAlCc7CiAgICAkY2xpZW50ICAgICAgID0gJHRlYW1fcm93ID8gZXNjX2h0bWwoJHRlYW1fcm93LT5jbGllbnRfbmFtZSA/OiAn4oCUJykgOiAn4oCUJzsKICAgICRvcmRlcl9pZCAgICAgPSAkdGVhbV9yb3cgPyAoaW50KSR0ZWFtX3Jvdy0+b3JkZXJfaWQgOiAwOwogICAgJHN0YXR1cyAgICAgICA9ICR0ZWFtX3JvdyA/ICR0ZWFtX3Jvdy0+c3RhdHVzIDogJyc7CiAgICAkaXNfc2ltICAgICAgID0gJHRlYW1fcm93ID8gKGJvb2wpJHRlYW1fcm93LT5pc19zaW11bGF0aW9uIDogZmFsc2U7CiAgICAkb3JkZXJfbGFiZWwgID0gKCRvcmRlcl9pZCAmJiAhJGlzX3NpbSkgPyAiUGVkaWRvICN7JG9yZGVyX2lkfSIgOiAnU2ltdWxhw6fDo28nOwogICAgJHRlYW1fanNvbl9lc2NhcGVkID0gZXNjX2F0dHIod3BfanNvbl9lbmNvZGUoJHRlYW1fZGF0YSkpOwoKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnKTsKICAgID8+PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InB0LUJSIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPkNvbmZpcm1hciBFcXVpcGUgwrcgVml2YU1haXM8L3RpdGxlPgo8c3R5bGU+CiAgKntib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowfQogIGJvZHl7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxzYW5zLXNlcmlmO2JhY2tncm91bmQ6I2YzZjRmNjttaW4taGVpZ2h0OjEwMHZofQogIC50b3AtYmFye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjN2MzYWVkLCM0ZjQ2ZTUpO2NvbG9yOiNmZmY7cGFkZGluZzoxNnB4IDIwcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweH0KICAudG9wLWJhciAubG9nb3tmb250LXNpemU6MjJweDtmb250LXdlaWdodDo4MDA7bGV0dGVyLXNwYWNpbmc6LTAuNXB4fQogIC50b3AtYmFyIC5zdWJ7Zm9udC1zaXplOjEzcHg7b3BhY2l0eTouOH0KICAuY29udGFpbmVye21heC13aWR0aDo2NDBweDttYXJnaW46MCBhdXRvO3BhZGRpbmc6MjBweCAxNnB4IDYwcHh9CiAgLmNhcmR7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjIwcHg7bWFyZ2luLWJvdHRvbToxNnB4O2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjA4KX0KICAuY2FyZCBoMntmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbToxNHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweH0KICAuaW5mby1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjRweH0KICAuaW5mby1pdGVte2JhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEwcHh9CiAgLmluZm8taXRlbSAubGJse2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206MnB4fQogIC5pbmZvLWl0ZW0gLnZhbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzFkMjMyN30KICAudGVhbS1zbG90e2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNHB4O21hcmdpbi1ib3R0b206MTBweDtiYWNrZ3JvdW5kOiNmYWZhZmF9CiAgLnRlYW0tc2xvdCAuY2F0LW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM3YzNhZWQ7bWFyZ2luLWJvdHRvbTo2cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi41cHh9CiAgLnRlYW0tc2xvdCAucGFydG5lci1uYW1le2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWQyMzI3O21hcmdpbi1ib3R0b206NnB4fQogIC50ZWFtLXNsb3QgLmJ1c3ktd2Fybntmb250LXNpemU6MTFweDtjb2xvcjojZjU5ZTBiO2JhY2tncm91bmQ6I2ZmZmJlYjtib3JkZXI6MXB4IHNvbGlkICNmZGU2OGE7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzozcHggN3B4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1ib3R0b206NnB4fQogIC50ZWFtLXNsb3Qgc2VsZWN0e3dpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7YmFja2dyb3VuZDojZmZmfQogIC5taXNzaW5nLXNsb3R7Ym9yZGVyOjFweCBzb2xpZCAjZmNhNWE1O2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4O2JhY2tncm91bmQ6I2ZmZjVmNX0KICAubWlzc2luZy1zbG90IC5jYXQtbmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6I2RjMjYyNjttYXJnaW4tYm90dG9tOjRweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9CiAgLm1pc3Npbmctc2xvdCAubXNne2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNkYzI2MjZ9CiAgLmNvbmZpcm1lZC1iYW5uZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCNkY2ZjZTcsI2JiZjdkMCk7Ym9yZGVyOjFweCBzb2xpZCAjODZlZmFjO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNnB4fQogIC5jb25maXJtZWQtYmFubmVyIC5pY29ue2ZvbnQtc2l6ZTozMnB4O21hcmdpbi1ib3R0b206NnB4fQogIC5jb25maXJtZWQtYmFubmVyIC50aXRsZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzE1ODAzZH0KICAuY29uZmlybWVkLWJhbm5lciAuc3Vie2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiMxNjY1MzQ7bWFyZ2luLXRvcDo0cHh9CiAgLnNpbS1iYW5uZXJ7YmFja2dyb3VuZDojZmZmYmViO2JvcmRlcjoxcHggc29saWQgI2ZkZTY4YTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTJweDtjb2xvcjojOTI0MDBlO21hcmdpbi1ib3R0b206MTZweH0KICAuYnRuLWNvbmZpcm17d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIzdjM2FlZCwjNGY0NmU1KTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE1cHg7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyO21hcmdpbi10b3A6NHB4fQogIC5idG4tY29uZmlybTpob3ZlcntvcGFjaXR5Oi45Mn0KICAuYnRuLWNvbmZpcm06ZGlzYWJsZWR7b3BhY2l0eTouNTtjdXJzb3I6bm90LWFsbG93ZWR9CiAgLmludmFsaWQtY2FyZHt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjQwcHggMjBweH0KICAuaW52YWxpZC1jYXJkIC5pY29ue2ZvbnQtc2l6ZTo0OHB4O21hcmdpbi1ib3R0b206MTJweH0KICAuaW52YWxpZC1jYXJkIHB7Y29sb3I6IzY2Njtmb250LXNpemU6MTRweH0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPGRpdiBjbGFzcz0idG9wLWJhciI+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImxvZ28iPvCfjqwgVml2YU1haXM8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InN1YiI+Q29uZmlybWHDp8OjbyBkZSBFcXVpcGU8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+Cjw/cGhwIGlmICghJHRva2VuIHx8ICEkdGVhbV9yb3cpOiA/PgogIDxkaXYgY2xhc3M9ImNhcmQgaW52YWxpZC1jYXJkIj4KICAgIDxkaXYgY2xhc3M9Imljb24iPvCflJI8L2Rpdj4KICAgIDxoMiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPkxpbmsgaW52w6FsaWRvIG91IGV4cGlyYWRvPC9oMj4KICAgIDxwPkVzdGUgbGluayBkZSBjb25maXJtYcOnw6NvIMOpIGludsOhbGlkby48YnI+U29saWNpdGUgdW0gbm92byBsaW5rIHBlbG8gV2hhdHNBcHAuPC9wPgogIDwvZGl2Pgo8P3BocCBlbHNlaWYgKCRzdGF0dXMgPT09ICdjb25maXJtZWQnKTogPz4KICA8ZGl2IGNsYXNzPSJjb25maXJtZWQtYmFubmVyIj4KICAgIDxkaXYgY2xhc3M9Imljb24iPuKchTwvZGl2PgogICAgPGRpdiBjbGFzcz0idGl0bGUiPkVxdWlwZSBqw6EgY29uZmlybWFkYSE8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InN1YiI+Q29uZmlybWFkbyBlbSA8P3BocCBlY2hvICR0ZWFtX3Jvdy0+Y29uZmlybWVkX2F0ID8gd3BfZGF0ZSgnZC9tL1kgSDppJywgc3RydG90aW1lKCR0ZWFtX3Jvdy0+Y29uZmlybWVkX2F0KSkgOiAn4oCUJzsgPz48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgIDxoMj7wn5OLIFJlc3VtbyBkbyA8P3BocCBlY2hvIGVzY19odG1sKCRvcmRlcl9sYWJlbCk7ID8+PC9oMj4KICAgIDxkaXYgY2xhc3M9ImluZm8tZ3JpZCI+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8taXRlbSI+PGRpdiBjbGFzcz0ibGJsIj7wn5OFIERhdGEgZG8gRXZlbnRvPC9kaXY+PGRpdiBjbGFzcz0idmFsIj48P3BocCBlY2hvICRldmVudF9kYXRlOyA/PjwvZGl2PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJpbmZvLWl0ZW0iPjxkaXYgY2xhc3M9ImxibCI+8J+RpCBDbGllbnRlPC9kaXY+PGRpdiBjbGFzcz0idmFsIj48P3BocCBlY2hvICRjbGllbnQ7ID8+PC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgIDxoMj7wn46qIEVxdWlwZSBDb25maXJtYWRhPC9oMj4KICAgIDw/cGhwIGZvcmVhY2ggKCR0ZWFtX2RhdGEgYXMgJHQpOiA/PgogICAgPGRpdiBjbGFzcz0idGVhbS1zbG90Ij4KICAgICAgPGRpdiBjbGFzcz0iY2F0LW5hbWUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHRbJ2NhdF9uYW1lJ10gPz8gJycpOyA/PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwYXJ0bmVyLW5hbWUiPvCfjq0gPD9waHAgZWNobyBlc2NfaHRtbCgkdFsncGFydG5lcl9uYW1lJ10gPz8gJ+KAlCcpOyA/PjwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogIDwvZGl2Pgo8P3BocCBlbHNlOiA/PgogIDw/cGhwIGlmICgkaXNfc2ltKTogPz48ZGl2IGNsYXNzPSJzaW0tYmFubmVyIj7wn6eqIDxzdHJvbmc+U2ltdWxhw6fDo288L3N0cm9uZz4g4oCUIEVzdGUgbGluayBmb2kgZ2VyYWRvIGNvbW8gdGVzdGUgZSBuw6NvIHJlcHJlc2VudGEgdW0gcGVkaWRvIHJlYWwuPC9kaXY+PD9waHAgZW5kaWY7ID8+CiAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICA8aDI+8J+TiyA8P3BocCBlY2hvIGVzY19odG1sKCRvcmRlcl9sYWJlbCk7ID8+PC9oMj4KICAgIDxkaXYgY2xhc3M9ImluZm8tZ3JpZCI+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8taXRlbSI+PGRpdiBjbGFzcz0ibGJsIj7wn5OFIERhdGEgZG8gRXZlbnRvPC9kaXY+PGRpdiBjbGFzcz0idmFsIj48P3BocCBlY2hvICRldmVudF9kYXRlOyA/PjwvZGl2PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJpbmZvLWl0ZW0iPjxkaXYgY2xhc3M9ImxibCI+8J+RpCBDbGllbnRlPC9kaXY+PGRpdiBjbGFzcz0idmFsIj48P3BocCBlY2hvICRjbGllbnQ7ID8+PC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgIDxoMj7wn46qIEVxdWlwZSBTdWdlcmlkYSA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM4ODgiPihhbHRlcmUgc2UgbmVjZXNzw6FyaW8pPC9zcGFuPjwvaDI+CiAgICA8ZGl2IGlkPSJ0ZWFtLXNsb3RzIj4KICAgIDw/cGhwIGZvcmVhY2ggKCR0ZWFtX2RhdGEgYXMgJGNhdF9pZCA9PiAkdCk6ID8+CiAgICA8ZGl2IGNsYXNzPSJ0ZWFtLXNsb3QiIGRhdGEtY2F0PSI8P3BocCBlY2hvIGVzY19hdHRyKCRjYXRfaWQpOyA/PiI+CiAgICAgIDxkaXYgY2xhc3M9ImNhdC1uYW1lIj48P3BocCBlY2hvIGVzY19odG1sKCR0WydjYXRfbmFtZSddKTsgPz48L2Rpdj4KICAgICAgPD9waHAgaWYgKCFlbXB0eSgkdFsnaXNfYnVzeSddKSk6ID8+PGRpdiBjbGFzcz0iYnVzeS13YXJuIj7imqDvuI8gSsOhIHRlbSBldmVudG8gbmVzc2UgZGlhPC9kaXY+PD9waHAgZW5kaWY7ID8+CiAgICAgIDxzZWxlY3QgY2xhc3M9InBhcnRuZXItc2VsZWN0IiBkYXRhLWNhdD0iPD9waHAgZWNobyBlc2NfYXR0cigkY2F0X2lkKTsgPz4iIGRhdGEtY3VycmVudD0iPD9waHAgZWNobyBlc2NfYXR0cigkdFsncGFydG5lcl9pZCddKTsgPz4iPgogICAgICAgIDxvcHRpb24gdmFsdWU9IiI+Q2FycmVnYW5kby4uLjwvb3B0aW9uPgogICAgICA8L3NlbGVjdD4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgIDwvZGl2PgogICAgPD9waHAgZm9yZWFjaCAoJG1pc3NpbmdfZGF0YSBhcyAkbSk6CiAgICAgICAgJG1uYW1lID0gaXNfYXJyYXkoJG0pID8gJG1bJ25hbWUnXSA6ICRtOyA/PgogICAgPGRpdiBjbGFzcz0ibWlzc2luZy1zbG90Ij4KICAgICAgPGRpdiBjbGFzcz0iY2F0LW5hbWUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJG1uYW1lKTsgPz48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibXNnIj7imqDvuI8gTmVuaHVtIHBhcmNlaXJvIGNhZGFzdHJhZG8gcGFyYSBlc3RhIGNhdGVnb3JpYS4gQ2FkYXN0cmUgcGFyY2Vpcm9zIGVtIFZpdmFNYWlzIDIuMCDihpIgUGFyY2Vpcm9zLjwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgPGRpdiBpZD0iZXh0cmEtc2xvdHMiPjwvZGl2PgogIDwvZGl2PgogIDxidXR0b24gb25jbGljaz0idm0yQWRkUGFydG5lclNsb3QoKSIgc3R5bGU9IndpZHRoOjEwMCU7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoycHggZGFzaGVkICM3YzNhZWQ7Y29sb3I6IzdjM2FlZDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjdXJzb3I6cG9pbnRlcjttYXJnaW4tYm90dG9tOjEycHg7Ij7vvIsgQWRpY2lvbmFyIFBhcmNlaXJvPC9idXR0b24+CiAgPGJ1dHRvbiBjbGFzcz0iYnRuLWNvbmZpcm0iIGlkPSJidG4tY29uZmlybSIgb25jbGljaz0idm0yQ29uZmlybVRlYW0oKSI+4pyFIENvbmZpcm1hciBFcXVpcGU8L2J1dHRvbj4KICA8ZGl2IGlkPSJjb25maXJtLW1zZyIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6MTJweDtmb250LXNpemU6MTRweDttaW4taGVpZ2h0OjIwcHgiPjwvZGl2Pgo8P3BocCBlbmRpZjsgPz4KPC9kaXY+Cgo8c2NyaXB0Pgp2YXIgdm0yQWpheFVybCA9IDw/cGhwIGVjaG8gd3BfanNvbl9lbmNvZGUoJGFqYXhfdXJsKTsgPz47CnZhciB2bTJUb2tlbiAgID0gPD9waHAgZWNobyB3cF9qc29uX2VuY29kZSgkdG9rZW4pOyA/PjsKdmFyIHZtMkFsbFBhcnRuZXJzID0gPD9waHAgZWNobyAkcGFydG5lcnNfanM7ID8+Owp2YXIgdm0yVGVhbURhdGEgPSBKU09OLnBhcnNlKDw/cGhwIGVjaG8gd3BfanNvbl9lbmNvZGUod3BfanNvbl9lbmNvZGUoJHRlYW1fZGF0YSkpOyA/Pik7CgovLyBQb3B1bGF0ZSBwYXJ0bmVyIHNlbGVjdHMg4oCUIEZJWDogY29tcGFyYXIgY29tbyBzdHJpbmcgcG9pcyBKU09OIHBvZGUgcmV0b3JuYXIgIjE1IiBvdSAxNQpmdW5jdGlvbiB2bTJHZXRNYXRjaGluZ1BhcnRuZXJzKGNhdElkKSB7CiAgICB2YXIgY2F0U3RyID0gU3RyaW5nKGNhdElkKTsKICAgIHJldHVybiB2bTJBbGxQYXJ0bmVycy5maWx0ZXIoZnVuY3Rpb24ocCkgewogICAgICAgIHJldHVybiBwLmNhdHMuc29tZShmdW5jdGlvbihjKXsgcmV0dXJuIFN0cmluZyhjKSA9PT0gY2F0U3RyOyB9KTsKICAgIH0pOwp9Cgpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucGFydG5lci1zZWxlY3QnKS5mb3JFYWNoKGZ1bmN0aW9uKHNlbCkgewogICAgdmFyIGNhdElkICAgPSBzZWwuZGF0YXNldC5jYXQ7CiAgICB2YXIgY3VycmVudCA9IHBhcnNlSW50KHNlbC5kYXRhc2V0LmN1cnJlbnQpOwogICAgdmFyIG1hdGNoaW5nID0gdm0yR2V0TWF0Y2hpbmdQYXJ0bmVycyhjYXRJZCk7CiAgICAvLyBJbmNsdWlyIHBhcmNlaXJvIGF0dWFsIG1lc21vIHF1ZSBuw6NvIHRlbmhhIGEgY2F0ZWdvcmlhIChzZWd1cmFuw6dhKQogICAgdmFyIGN1cnJlbnRQID0gdm0yQWxsUGFydG5lcnMuZmluZChmdW5jdGlvbihwKXsgcmV0dXJuIHAuaWQgPT09IGN1cnJlbnQ7IH0pOwogICAgaWYgKGN1cnJlbnRQICYmIG1hdGNoaW5nLmZpbmRJbmRleChmdW5jdGlvbihwKXtyZXR1cm4gcC5pZD09PWN1cnJlbnQ7fSkgPCAwKSBtYXRjaGluZy51bnNoaWZ0KGN1cnJlbnRQKTsKCiAgICBzZWwuaW5uZXJIVE1MID0gbWF0Y2hpbmcubWFwKGZ1bmN0aW9uKHApIHsKICAgICAgICByZXR1cm4gJzxvcHRpb24gdmFsdWU9IicrcC5pZCsnIicrKHAuaWQ9PT1jdXJyZW50Pycgc2VsZWN0ZWQnOicnKSsnPicrcC5uYW1lKyc8L29wdGlvbj4nOwogICAgfSkuam9pbignJykgfHwgJzxvcHRpb24gdmFsdWU9IiI+TmVuaHVtIHBhcmNlaXJvIHBhcmEgZXN0YSBjYXRlZ29yaWE8L29wdGlvbj4nOwp9KTsKCi8vIENhcnJlZ2EgdG9kYXMgYXMgY2F0ZWdvcmlhcyBXQyBwYXJhIG8gc2VsZWN0b3IgZGUgYWRpY2lvbmFyIHBhcmNlaXJvCnZhciB2bTJBbGxXY0NhdHMgPSBbXTsKKGZ1bmN0aW9uKCl7CiAgICB2YXIgc2VlbiA9IHt9OwogICAgdm0yQWxsUGFydG5lcnMuZm9yRWFjaChmdW5jdGlvbihwKXsKICAgICAgICBwLmNhdHMuZm9yRWFjaChmdW5jdGlvbihjKXsKICAgICAgICAgICAgdmFyIGNzID0gU3RyaW5nKGMpOwogICAgICAgICAgICBpZiAoIXNlZW5bY3NdKSB7IHNlZW5bY3NdID0gdHJ1ZTsgdm0yQWxsV2NDYXRzLnB1c2goe2lkOmNzLCBuYW1lOidDYXRlZ29yaWEgJytjc30pOyB9CiAgICAgICAgfSk7CiAgICB9KTsKfSkoKTsKCi8vIEJ1c2NhciBub21lcyByZWFpcyBkYXMgY2F0ZWdvcmlhcyBkb3Mgc2xvdHMgasOhIGV4aXN0ZW50ZXMKZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRlYW0tc2xvdFtkYXRhLWNhdF0nKS5mb3JFYWNoKGZ1bmN0aW9uKHNsb3QpewogICAgdmFyIGNhdElkID0gU3RyaW5nKHNsb3QuZGF0YXNldC5jYXQpOwogICAgdmFyIGNhdE5hbWUgPSBzbG90LnF1ZXJ5U2VsZWN0b3IoJy5jYXQtbmFtZScpID8gc2xvdC5xdWVyeVNlbGVjdG9yKCcuY2F0LW5hbWUnKS50ZXh0Q29udGVudC50cmltKCkgOiAnJzsKICAgIHZhciBleGlzdGluZyA9IHZtMkFsbFdjQ2F0cy5maW5kKGZ1bmN0aW9uKGMpeyByZXR1cm4gYy5pZCA9PT0gY2F0SWQ7IH0pOwogICAgaWYgKGV4aXN0aW5nICYmIGNhdE5hbWUpIGV4aXN0aW5nLm5hbWUgPSBjYXROYW1lOwogICAgZWxzZSBpZiAoY2F0TmFtZSAmJiAhZXhpc3RpbmcpIHZtMkFsbFdjQ2F0cy5wdXNoKHtpZDpjYXRJZCwgbmFtZTpjYXROYW1lfSk7Cn0pOwoKdmFyIHZtMkV4dHJhU2xvdENvdW50ID0gMDsKCmZ1bmN0aW9uIHZtMkFkZFBhcnRuZXJTbG90KCkgewogICAgdm0yRXh0cmFTbG90Q291bnQrKzsKICAgIHZhciBzbG90SWQgPSAnZXh0cmEtc2xvdC0nICsgdm0yRXh0cmFTbG90Q291bnQ7CiAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4dHJhLXNsb3RzJyk7CgogICAgLy8gTW9udGFyIG9wdGlvbnMgZGUgY2F0ZWdvcmlhcwogICAgdmFyIGNhdE9wdGlvbnMgPSAnPG9wdGlvbiB2YWx1ZT0iIj7igJQgU2VsZWNpb25lIGEgY2F0ZWdvcmlhIOKAlDwvb3B0aW9uPicgKwogICAgICAgIHZtMkFsbFdjQ2F0cy5tYXAoZnVuY3Rpb24oYyl7IHJldHVybiAnPG9wdGlvbiB2YWx1ZT0iJytjLmlkKyciPicrYy5uYW1lKyc8L29wdGlvbj4nOyB9KS5qb2luKCcnKTsKCiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBkaXYuY2xhc3NOYW1lID0gJ3RlYW0tc2xvdCc7CiAgICBkaXYuaWQgPSBzbG90SWQ7CiAgICBkaXYuc3R5bGUuYm9yZGVyQ29sb3IgPSAnI2M0YjVmZCc7CiAgICBkaXYuaW5uZXJIVE1MID0KICAgICAgICAnPGRpdiBjbGFzcz0iY2F0LW5hbWUiIHN0eWxlPSJjb2xvcjojN2MzYWVkO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Ij4nICsKICAgICAgICAnPHNwYW4+4p6VIFBhcmNlaXJvIEFkaWNpb25hbDwvc3Bhbj4nICsKICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJycrc2xvdElkKydcJykucmVtb3ZlKCkiIHN0eWxlPSJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE2cHg7Y29sb3I6I2VmNDQ0NCI+4pyVPC9idXR0b24+JyArCiAgICAgICAgJzwvZGl2PicgKwogICAgICAgICc8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2NjY7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+Q2F0ZWdvcmlhOjwvbGFiZWw+JyArCiAgICAgICAgJzxzZWxlY3QgY2xhc3M9ImV4dHJhLWNhdC1zZWxlY3QiIGRhdGEtc2xvdD0iJyt2bTJFeHRyYVNsb3RDb3VudCsnIiBvbmNoYW5nZT0idm0yVXBkYXRlRXh0cmFQYXJ0bmVycyh0aGlzLCcrdm0yRXh0cmFTbG90Q291bnQrJykiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O2JhY2tncm91bmQ6I2ZmZjttYXJnaW4tYm90dG9tOjhweCI+JytjYXRPcHRpb25zKyc8L3NlbGVjdD4nICsKICAgICAgICAnPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNjY2O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPlBhcmNlaXJvOjwvbGFiZWw+JyArCiAgICAgICAgJzxzZWxlY3QgY2xhc3M9ImV4dHJhLXBhcnRuZXItc2VsZWN0IiBkYXRhLXNsb3Q9Iicrdm0yRXh0cmFTbG90Q291bnQrJyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7YmFja2dyb3VuZDojZmZmIj4nICsKICAgICAgICAnPG9wdGlvbiB2YWx1ZT0iIj5TZWxlY2lvbmUgYSBjYXRlZ29yaWEgcHJpbWVpcm88L29wdGlvbj4nICsKICAgICAgICAnPC9zZWxlY3Q+JzsKICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkaXYpOwp9CgpmdW5jdGlvbiB2bTJVcGRhdGVFeHRyYVBhcnRuZXJzKGNhdFNlbCwgc2xvdElkKSB7CiAgICB2YXIgY2F0SWQgPSBjYXRTZWwudmFsdWU7CiAgICB2YXIgcGFydG5lclNlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5leHRyYS1wYXJ0bmVyLXNlbGVjdFtkYXRhLXNsb3Q9Iicrc2xvdElkKyciXScpOwogICAgaWYgKCFjYXRJZCkgeyBwYXJ0bmVyU2VsLmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPSIiPlNlbGVjaW9uZSBhIGNhdGVnb3JpYSBwcmltZWlybzwvb3B0aW9uPic7IHJldHVybjsgfQogICAgdmFyIG1hdGNoaW5nID0gdm0yR2V0TWF0Y2hpbmdQYXJ0bmVycyhjYXRJZCk7CiAgICBwYXJ0bmVyU2VsLmlubmVySFRNTCA9IG1hdGNoaW5nLmxlbmd0aAogICAgICAgID8gJzxvcHRpb24gdmFsdWU9IiI+4oCUIFNlbGVjaW9uZSDigJQ8L29wdGlvbj4nICsgbWF0Y2hpbmcubWFwKGZ1bmN0aW9uKHApeyByZXR1cm4gJzxvcHRpb24gdmFsdWU9IicrcC5pZCsnIj4nK3AubmFtZSsnPC9vcHRpb24+JzsgfSkuam9pbignJykKICAgICAgICA6ICc8b3B0aW9uIHZhbHVlPSIiPk5lbmh1bSBwYXJjZWlybyBwYXJhIGVzdGEgY2F0ZWdvcmlhPC9vcHRpb24+JzsKfQoKZnVuY3Rpb24gdm0yQ29uZmlybVRlYW0oKSB7CiAgICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1jb25maXJtJyk7CiAgICB2YXIgbXNnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpcm0tbXNnJyk7CiAgICBidG4uZGlzYWJsZWQgPSB0cnVlOyBidG4udGV4dENvbnRlbnQgPSAnQ29uZmlybWFuZG8uLi4nOwoKICAgIC8vIEJ1aWxkIHVwZGF0ZWQgdGVhbSBkYXRhIGZyb20gc2VsZWN0cyAoc2xvdHMgb3JpZ2luYWlzKQogICAgdmFyIHVwZGF0ZWRUZWFtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2bTJUZWFtRGF0YSkpOwogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBhcnRuZXItc2VsZWN0JykuZm9yRWFjaChmdW5jdGlvbihzZWwpIHsKICAgICAgICB2YXIgY2F0SWQgPSBzZWwuZGF0YXNldC5jYXQ7CiAgICAgICAgdmFyIG5ld1BhcnRuZXJJZCA9IHBhcnNlSW50KHNlbC52YWx1ZSk7CiAgICAgICAgaWYgKHVwZGF0ZWRUZWFtW2NhdElkXSAmJiBuZXdQYXJ0bmVySWQpIHsKICAgICAgICAgICAgdmFyIHAgPSB2bTJBbGxQYXJ0bmVycy5maW5kKGZ1bmN0aW9uKHApeyByZXR1cm4gcC5pZCA9PT0gbmV3UGFydG5lcklkOyB9KTsKICAgICAgICAgICAgdXBkYXRlZFRlYW1bY2F0SWRdLnBhcnRuZXJfaWQgICA9IG5ld1BhcnRuZXJJZDsKICAgICAgICAgICAgdXBkYXRlZFRlYW1bY2F0SWRdLnBhcnRuZXJfbmFtZSA9IHAgPyBwLm5hbWUgOiB1cGRhdGVkVGVhbVtjYXRJZF0ucGFydG5lcl9uYW1lOwogICAgICAgIH0KICAgIH0pOwoKICAgIC8vIEluY2x1aXIgc2xvdHMgZXh0cmFzIGFkaWNpb25hZG9zIG1hbnVhbG1lbnRlCiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZXh0cmEtcGFydG5lci1zZWxlY3QnKS5mb3JFYWNoKGZ1bmN0aW9uKHNlbCwgaWR4KSB7CiAgICAgICAgdmFyIHBhcnRuZXJJZCA9IHBhcnNlSW50KHNlbC52YWx1ZSk7CiAgICAgICAgdmFyIGNhdFNlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5leHRyYS1jYXQtc2VsZWN0W2RhdGEtc2xvdD0iJytzZWwuZGF0YXNldC5zbG90KyciXScpOwogICAgICAgIHZhciBjYXRJZCA9IGNhdFNlbCA/IGNhdFNlbC52YWx1ZSA6ICcnOwogICAgICAgIHZhciBjYXROYW1lID0gY2F0U2VsID8gY2F0U2VsLm9wdGlvbnNbY2F0U2VsLnNlbGVjdGVkSW5kZXhdLnRleHQgOiAnJzsKICAgICAgICBpZiAocGFydG5lcklkICYmIGNhdElkKSB7CiAgICAgICAgICAgIHZhciBwID0gdm0yQWxsUGFydG5lcnMuZmluZChmdW5jdGlvbihwKXsgcmV0dXJuIHAuaWQgPT09IHBhcnRuZXJJZDsgfSk7CiAgICAgICAgICAgIHZhciBrZXkgPSAnZXh0cmFfJyArIGNhdElkICsgJ18nICsgaWR4OwogICAgICAgICAgICB1cGRhdGVkVGVhbVtrZXldID0gewogICAgICAgICAgICAgICAgY2F0X2lkOiBjYXRJZCwKICAgICAgICAgICAgICAgIGNhdF9uYW1lOiBjYXROYW1lLAogICAgICAgICAgICAgICAgcGFydG5lcl9pZDogcGFydG5lcklkLAogICAgICAgICAgICAgICAgcGFydG5lcl9uYW1lOiBwID8gcC5uYW1lIDogJ1BhcmNlaXJvJywKICAgICAgICAgICAgICAgIGlzX2V4dHJhOiB0cnVlCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfSk7CgogICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICBmZC5hcHBlbmQoJ2FjdGlvbicsJ3ZtMl9jb25maXJtX2VsZW5jbycpOwogICAgZmQuYXBwZW5kKCd0b2tlbicsIHZtMlRva2VuKTsKICAgIGZkLmFwcGVuZCgndGVhbV9qc29uJywgSlNPTi5zdHJpbmdpZnkodXBkYXRlZFRlYW0pKTsKICAgIGZkLmFwcGVuZCgnY29uZmlybWVkX2J5JywgJ2FkbWluX3dhX2xpbmsnKTsKCiAgICBmZXRjaCh2bTJBamF4VXJsLCB7bWV0aG9kOidQT1NUJyxib2R5OmZkfSkKICAgICAgICAudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gci5qc29uKCk7fSkKICAgICAgICAudGhlbihmdW5jdGlvbihyZXMpewogICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgIG1zZy5zdHlsZS5jb2xvcj0nIzE2YTM0YSc7CiAgICAgICAgICAgICAgICBtc2cudGV4dENvbnRlbnQ9J+KchSBFcXVpcGUgY29uZmlybWFkYSBjb20gc3VjZXNzbyEnOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBsb2NhdGlvbi5yZWxvYWQoKTsgfSwgMTIwMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBidG4uZGlzYWJsZWQ9ZmFsc2U7IGJ0bi50ZXh0Q29udGVudD0n4pyFIENvbmZpcm1hciBFcXVpcGUnOwogICAgICAgICAgICAgICAgbXNnLnN0eWxlLmNvbG9yPScjZGMyNjI2JzsKICAgICAgICAgICAgICAgIG1zZy50ZXh0Q29udGVudD0n4p2MIEVycm8gYW8gY29uZmlybWFyLiBUZW50ZSBub3ZhbWVudGUuJzsKICAgICAgICAgICAgfQogICAgICAgIH0pOwp9Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4KPD9waHAKfQoKCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2FkdmFuY2VfcGFydG5lcl9zdGFnZScsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfbm9uY2UnLCAnbm9uY2UnKTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRpZCAgICA9IGludHZhbCgkX1BPU1RbJ2V2ZW50X2lkJ10gPz8gMCk7CiAgICAkc3RhZ2UgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnc3RhZ2UnXSA/PyAnJyk7CiAgICBpZiAoJGlkICYmICRzdGFnZSkgJHdwZGItPnVwZGF0ZSgkd3BkYi0+cHJlZml4IC4gJ3ZtMl9wYXJ0bmVyX2V2ZW50cycsIFsnc3RhZ2UnPT4kc3RhZ2UsJ3VwZGF0ZWRfYXQnPT5jdXJyZW50X3RpbWUoJ215c3FsJyldLCBbJ2lkJz0+JGlkXSk7CiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcygpOwp9KTsKCgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIEZBU0UgOCDigJQgTcOTRFVMTyBGSU5BTkNFSVJPCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmZ1bmN0aW9uIHZtMl9jcmVhdGVfcGF5bWVudF90YWJsZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRjaGFyc2V0ID0gJHdwZGItPmdldF9jaGFyc2V0X2NvbGxhdGUoKTsKICAgICRzcWwgPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgeyR3cGRiLT5wcmVmaXh9dm0yX3BheW1lbnRzICgKICAgICAgICBpZCBiaWdpbnQoMjApIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAogICAgICAgIHBhcnRuZXJfaWQgYmlnaW50KDIwKSBERUZBVUxUIE5VTEwsCiAgICAgICAgb3JkZXJfaWQgYmlnaW50KDIwKSBERUZBVUxUIE5VTEwsCiAgICAgICAgYW1vdW50IGRlY2ltYWwoMTAsMikgTk9UIE5VTEwgREVGQVVMVCAwLAogICAgICAgIGR1ZV9kYXRlIGRhdGUgREVGQVVMVCBOVUxMLAogICAgICAgIHBhaWRfYXQgZGF0ZXRpbWUgREVGQVVMVCBOVUxMLAogICAgICAgIHJlZmVyZW5jZSB2YXJjaGFyKDMwMCkgREVGQVVMVCBOVUxMLAogICAgICAgIG5vdGVzIHRleHQsCiAgICAgICAgc3RhdHVzIHZhcmNoYXIoMjApIERFRkFVTFQgJ3BlbmRpbmcnLAogICAgICAgIGNyZWF0ZWRfYXQgZGF0ZXRpbWUgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICBQUklNQVJZIEtFWSAoaWQpLAogICAgICAgIEtFWSBwYXJ0bmVyX2lkIChwYXJ0bmVyX2lkKSwKICAgICAgICBLRVkgc3RhdHVzIChzdGF0dXMpCiAgICApICRjaGFyc2V0OyI7CiAgICByZXF1aXJlX29uY2UgQUJTUEFUSCAuICd3cC1hZG1pbi9pbmNsdWRlcy91cGdyYWRlLnBocCc7CiAgICBkYkRlbHRhKCRzcWwpOwp9CgphZGRfYWN0aW9uKCdhZG1pbl9pbml0JywgZnVuY3Rpb24oKSB7CiAgICBpZiAoICFnZXRfb3B0aW9uKCd2bTJfcGF5bWVudF90YWJsZV92MScpICkgewogICAgICAgIHZtMl9jcmVhdGVfcGF5bWVudF90YWJsZSgpOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9wYXltZW50X3RhYmxlX3YxJywgJzEnKTsKICAgIH0KfSk7CgovLyDilIDilIAgRklOQU5DRUlSTyBWMiBIRUxQRVJTIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfbW9udGhfbGFiZWxfcHQoICR5bSApIHsKICAgICRtcyA9IFsnMDEnPT4nSmFuZWlybycsJzAyJz0+J0ZldmVyZWlybycsJzAzJz0+J01hcsOnbycsJzA0Jz0+J0FicmlsJywKICAgICAgICAgICAnMDUnPT4nTWFpbycsJzA2Jz0+J0p1bmhvJywnMDcnPT4nSnVsaG8nLCcwOCc9PidBZ29zdG8nLAogICAgICAgICAgICcwOSc9PidTZXRlbWJybycsJzEwJz0+J091dHVicm8nLCcxMSc9PidOb3ZlbWJybycsJzEyJz0+J0RlemVtYnJvJ107CiAgICBpZiAoIXByZWdfbWF0Y2goJy9eKFxkezR9KS0oXGR7Mn0pJC8nLCAkeW0sICRtKSkgcmV0dXJuICR5bTsKICAgIHJldHVybiAoJG1zWyRtWzJdXSA/PyAkbVsyXSkgLiAnICcgLiAkbVsxXTsKfQpmdW5jdGlvbiB2bTJfZmluX2ZtdF9yKCAkdiApIHsgcmV0dXJuICdSJCAnIC4gbnVtYmVyX2Zvcm1hdCgoZmxvYXQpJHYsIDIsICcsJywgJy4nKTsgfQoKLy8g4pSA4pSAIEZJTkFOQ0VJUk8gUEFHRSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCi8vIOKUgOKUgCBGSU5BTkNFSVJPOiBoZWxwZXJzIFVJIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfZmluX2ZpbHRlcl9iYXIoc3RyaW5nICR0aWQsIHN0cmluZyAkcGggPSAnRmlsdHJhci4uLicpOiB2b2lkIHsKICAgICRlID0gZXNjX2pzKCR0aWQpOwogICAgZWNobyAiPGRpdiBzdHlsZT0nbWFyZ2luLWJvdHRvbToxMnB4O2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXAnPiIKICAgICAgICAuICI8aW5wdXQgdHlwZT0ndGV4dCcgb25pbnB1dD1cInZtMkZpbkZpbHRlcih0aGlzLCd7JGV9JylcIiBwbGFjZWhvbGRlcj0n8J+UjSB7JHBofSciCiAgICAgICAgLiAiIHN0eWxlPSdwYWRkaW5nOjdweCAxNHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTNweDt3aWR0aDoyNjBweDtvdXRsaW5lOm5vbmUnIgogICAgICAgIC4gIiBvbmZvY3VzPVwidGhpcy5zdHlsZS5ib3JkZXJDb2xvcj0nIzdjM2FlZCdcIiBvbmJsdXI9XCJ0aGlzLnN0eWxlLmJvcmRlckNvbG9yPScjZDFkNWRiJ1wiPiIKICAgICAgICAuICI8c3BhbiBzdHlsZT0nZm9udC1zaXplOjEycHg7Y29sb3I6IzljYTNhZjthbGlnbi1zZWxmOmNlbnRlcic+Q2xpcXVlIG5vIGNhYmXDp2FsaG8gcGFyYSBvcmRlbmFyIOKHhTwvc3Bhbj4iCiAgICAgICAgLiAiPC9kaXY+IjsKfQpmdW5jdGlvbiB2bTJfZmluX3RoZWFkKGFycmF5ICRjb2xzLCBzdHJpbmcgJHRpZCwgaW50ICRsZWZ0ID0gMSk6IHZvaWQgewogICAgJGUgPSBlc2NfanMoJHRpZCk7CiAgICBlY2hvICI8dGhlYWQ+PHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiNmM2Y0ZjY7Ym9yZGVyLWJvdHRvbToycHggc29saWQgI2U1ZTdlYic+IjsKICAgIGZvcmVhY2ggKCRjb2xzIGFzICRpID0+ICRoKSB7CiAgICAgICAgJGFsaWduID0gJGkgPCAkbGVmdCA/ICdsZWZ0JyA6ICdyaWdodCc7CiAgICAgICAgZWNobyAiPHRoIG9uY2xpY2s9XCJ2bTJGaW5Tb3J0KCciIC4gJGUgLiAiJywiIC4gJGkgLiAiKVwiIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDsiCiAgICAgICAgICAgLiAidGV4dC1hbGlnbjp7JGFsaWdufTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOyIKICAgICAgICAgICAuICJ3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXI7dXNlci1zZWxlY3Q6bm9uZTtjb2xvcjojMzc0MTUxO3RyYW5zaXRpb246YmFja2dyb3VuZCAuMXMnIgogICAgICAgICAgIC4gIiBvbm1vdXNlZW50ZXI9XCJ0aGlzLnN0eWxlLmJhY2tncm91bmQ9JyNlNWU3ZWInXCIgb25tb3VzZWxlYXZlPVwidGhpcy5zdHlsZS5iYWNrZ3JvdW5kPScnXCI+IgogICAgICAgICAgIC4gZXNjX2h0bWwoJGgpIC4gIiA8c3BhbiBjbGFzcz0ndm0yc2knIGRhdGEtY29sPSciIC4gJGkgLiAiJyBzdHlsZT0nY29sb3I6IzljYTNhZjtmb250LXNpemU6MTBweCc+4oeFPC9zcGFuPjwvdGg+IjsKICAgIH0KICAgIGVjaG8gIjwvdHI+PC90aGVhZD4iOwp9CgpmdW5jdGlvbiB2bTJfZmluYW5jZWlyb19wYWdlKCkgewogICAgaWYgKCAhY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSApIHsgd3BfZGllKCdGb3JiaWRkZW4nKTsgfQoKICAgICRkcmVfcm93cyAgICAgPSBnZXRfb3B0aW9uKCd2bTJfZmluX2RyZScsICAgICBbXSk7CiAgICAkcmVjZWJlcl9yb3dzID0gZ2V0X29wdGlvbigndm0yX2Zpbl9yZWNlYmVyJywgIFtdKTsKICAgICRwYWdhcl9yb3dzICAgPSBnZXRfb3B0aW9uKCd2bTJfZmluX3BhZ2FyJywgICAgW10pOwogICAgJGxhc3Rfc3luYyAgICA9IGdldF9vcHRpb24oJ3ZtMl9maW5fbGFzdF9zeW5jJywgJycpOwogICAgJHdlYmhvb2tfdXJsICA9IGdldF9vcHRpb24oJ3ZtMl9maW5fd2ViaG9va191cmwnLCAnJyk7CiAgICAkc3luY2luZyAgICAgID0gKGJvb2wpIGdldF9vcHRpb24oJ3ZtMl9maW5fc3luY19wZW5kaW5nJywgMCk7CgogICAgJHNlbF9tb250aCA9IHNhbml0aXplX3RleHRfZmllbGQoJF9HRVRbJ2ZtJ10gPz8gZGF0ZSgnWS1tJykpOwogICAgaWYgKCAhcHJlZ19tYXRjaCgnL15cZHs0fS1cZHsyfSQvJywgJHNlbF9tb250aCkgKSAkc2VsX21vbnRoID0gZGF0ZSgnWS1tJyk7CiAgICBbJHNlbF95ZWFyLCAkc2VsX21dID0gZXhwbG9kZSgnLScsICRzZWxfbW9udGgpOwoKICAgICRwcmV2X20gPSBkYXRlKCdZLW0nLCBzdHJ0b3RpbWUoInskc2VsX21vbnRofS0wMSAtMSBtb250aCIpKTsKICAgICRuZXh0X20gPSBkYXRlKCdZLW0nLCBzdHJ0b3RpbWUoInskc2VsX21vbnRofS0wMSArMSBtb250aCIpKTsKICAgICRiYXNlICAgPSBhZG1pbl91cmwoJ2FkbWluLnBocCcpOwogICAgJHRhYiAgICA9IHNhbml0aXplX2tleSgkX0dFVFsnZnRhYiddID8/ICdkcmUnKTsKICAgICR0YWJzICAgPSBbJ2RyZSc9Pifwn5K1IENhaXhhJywnY29tcGV0ZW5jaWEnPT4n8J+ThSBDb21wZXTDqm5jaWEnLCdyZWNlYmVyJz0+J/CfkpogQSBSZWNlYmVyJywncGFnYXInPT4n8J+UtCBBIFBhZ2FyJywnd29vJz0+J/Cfm5IgV29vQ29tbWVyY2UnXTsKCiAgICAkbW5hbWVzID0gWycwMSc9PidqYW5laXJvJywnMDInPT4nZmV2ZXJlaXJvJywnMDMnPT4nbWFyw6dvJywnMDQnPT4nYWJyaWwnLAogICAgICAgICAgICAgICAnMDUnPT4nbWFpbycsJzA2Jz0+J2p1bmhvJywnMDcnPT4nanVsaG8nLCcwOCc9PidhZ29zdG8nLAogICAgICAgICAgICAgICAnMDknPT4nc2V0ZW1icm8nLCcxMCc9PidvdXR1YnJvJywnMTEnPT4nbm92ZW1icm8nLCcxMic9PidkZXplbWJybyddOwogICAgJGN1cl9tbmFtZSA9ICRtbmFtZXNbJHNlbF9tXSA/PyAnJzsKICAgICRkcmVfcm93ICAgPSBudWxsOwogICAgaWYgKCBpc19hcnJheSgkZHJlX3Jvd3MpICkgewogICAgICAgIC8vIFByaW1laXJhIHBhc3NhZ2VtOiBwcm9jdXJhIG1hdGNoIGV4YXRvICJNYWlvIDIwMjYiCiAgICAgICAgZm9yZWFjaCAoICRkcmVfcm93cyBhcyAkcm93ICkgewogICAgICAgICAgICBpZiAoIGlzX2FycmF5KCRyb3cpICYmIGlzc2V0KCRyb3dbJ21lcyddKSApIHsKICAgICAgICAgICAgICAgICRtZXNfbG93ZXIgPSBzdHJ0b2xvd2VyKHRyaW0oJHJvd1snbWVzJ10pKTsKICAgICAgICAgICAgICAgIGlmICggJG1lc19sb3dlciA9PT0gJGN1cl9tbmFtZSAuICcgJyAuICRzZWxfeWVhciApIHsKICAgICAgICAgICAgICAgICAgICAkZHJlX3JvdyA9ICRyb3c7IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIFNlZ3VuZGEgcGFzc2FnZW06IHNlIG7Do28gYWNob3UgY29tIGFubywgcGVnYSBvIMOaTFRJTU8gbWF0Y2ggcGVsbyBub21lIGRvIG3DqnMKICAgICAgICBpZiAoICEkZHJlX3JvdyApIHsKICAgICAgICAgICAgZm9yZWFjaCAoICRkcmVfcm93cyBhcyAkcm93ICkgewogICAgICAgICAgICAgICAgaWYgKCBpc19hcnJheSgkcm93KSAmJiBpc3NldCgkcm93WydtZXMnXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgJG1lc19sb3dlciA9IHN0cnRvbG93ZXIodHJpbSgkcm93WydtZXMnXSkpOwogICAgICAgICAgICAgICAgICAgIGlmICggJG1lc19sb3dlciA9PT0gJGN1cl9tbmFtZSB8fCBzdHJwb3MoJG1lc19sb3dlciwgJGN1cl9tbmFtZSkgPT09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkcmVfcm93ID0gJHJvdzsgLy8gbsOjbyBmYXogYnJlYWsg4oaSIHBlZ2EgbyDDumx0aW1vCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICR2ZW5kYXMgID0gKGZsb2F0KSgkZHJlX3Jvd1sndmVuZGFzJ10gICAgICAgID8/ICRkcmVfcm93Wyd2ZW5kYSddICAgICAgICAgID8/IDApOwogICAgJGN1c3RvICAgPSAoZmxvYXQpKCRkcmVfcm93WydjdXN0byddICAgICAgICAgPz8gJGRyZV9yb3dbJ2N1c3RvX2RpcmV0byddICAgID8/IDApOwogICAgJGJydXRvICAgPSAoZmxvYXQpKCRkcmVfcm93WydicnV0byddICAgICAgICAgPz8gJGRyZV9yb3dbJ2JydXRvX3ZpdmFtYWlzJ10gID8/IDApOwogICAgJG1rdCAgICAgPSAoZmxvYXQpKCRkcmVfcm93Wydta3QnXSAgICAgICAgICAgPz8gJGRyZV9yb3dbJ21hcmtldGluZyddICAgICAgID8/IDApOwogICAgJGxpcXVpZG8gPSAoZmxvYXQpKCRkcmVfcm93WydsaXF1aWRvJ10gICAgICAgPz8gMCk7CiAgICAkbV9icnV0YSA9IChmbG9hdCkoJGRyZV9yb3dbJ21hcmdlbV9icnV0YSddICA/PyAwKTsKICAgICRyb2FzICAgID0gKGZsb2F0KSgkZHJlX3Jvd1sncm9hcyddICAgICAgICAgID8/IDApOwogICAgJHZzX2FudCAgPSBpc3NldCgkZHJlX3Jvd1sndnNfbWVzX2FudGVyaW9yJ10pICYmICRkcmVfcm93Wyd2c19tZXNfYW50ZXJpb3InXSAhPT0gJycgPyAoZmxvYXQpJGRyZV9yb3dbJ3ZzX21lc19hbnRlcmlvciddIDogbnVsbDsKCiAgICAkc3luY19ub25jZSAgID0gd3BfY3JlYXRlX25vbmNlKCd2bTJfZmluX3N5bmMnKTsKICAgICRyZXN0X25vbmNlICAgPSB3cF9jcmVhdGVfbm9uY2UoJ3dwX3Jlc3QnKTsKICAgICRsYXN0X2ZtdCAgICAgPSAkbGFzdF9zeW5jID8gZGF0ZSgnZC9tIEhcaGknLCBzdHJ0b3RpbWUoJGxhc3Rfc3luYykpIDogJ251bmNhJzsKICAgICRub19kYXRhICAgICAgPSBlbXB0eSgkZHJlX3Jvd3MpOwogICAgJG1vbnRoX2xhYmVsICA9IHZtMl9tb250aF9sYWJlbF9wdCgkc2VsX21vbnRoKTsKICAgICRyZXN0X3N0YXR1c191cmwgPSByZXN0X3VybCgndm0tY3JtLXYyL3YxL2ZpbmFuY2Vpcm8vc3luYy1zdGF0dXMnKTsKICAgID8+CiAgICA8ZGl2IGNsYXNzPSJ2bTItd3JhcCIgaWQ9InZtMi1maW4td3JhcCI+CgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDttYXJnaW4tYm90dG9tOjIwcHgiPgogICAgICAgIDxoMSBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjIycHg7Zm9udC13ZWlnaHQ6NzAwIj7wn5KwIEZpbmFuY2Vpcm88L2gxPgogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7ZmxleC13cmFwOndyYXAiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHg7YmFja2dyb3VuZDojZjNmNGY2O2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6NHB4Ij4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybChhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItZmluYW5jZWlybycsJ2ZtJz0+JHByZXZfbSwnZnRhYic9PiR0YWJdLCRiYXNlKSk7ID8+IiBzdHlsZT0icGFkZGluZzo0cHggMTBweDtib3JkZXItcmFkaXVzOjZweDtjb2xvcjojMzc0MTUxO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxM3B4Ij7il4A8L2E+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0icGFkZGluZzo0cHggMTJweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzExMSI+PD9waHAgZWNobyBlc2NfaHRtbCgkbW9udGhfbGFiZWwpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybChhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItZmluYW5jZWlybycsJ2ZtJz0+JG5leHRfbSwnZnRhYic9PiR0YWJdLCRiYXNlKSk7ID8+IiBzdHlsZT0icGFkZGluZzo0cHggMTBweDtib3JkZXItcmFkaXVzOjZweDtjb2xvcjojMzc0MTUxO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxM3B4Ij7ilrY8L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBpZiAoJHdlYmhvb2tfdXJsKSA6ID8+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJ2bTItZmluLXN5bmMtYnRuIiBvbmNsaWNrPSJ2bTJGaW5TeW5jKCkiIHN0eWxlPSJwYWRkaW5nOjhweCAxNnB4O2JhY2tncm91bmQ6IzdjM2FlZDtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6OHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJ2bTItZmluLXN5bmMtaWNvbiI+PD9waHAgZWNobyAkc3luY2luZyA/ICfij7MnIDogJ/CflIQnOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0idm0yLWZpbi1zeW5jLXR4dCI+PD9waHAgZWNobyAkc3luY2luZyA/ICdTaW5jcm9uaXphbmRvLi4uJyA6ICdTaW5jcm9uaXphciBHU2hlZXRzJzsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmIiBpZD0idm0yLWZpbi1sYXN0Ij7Dmmx0aW1hIHN5bmM6IDw/cGhwIGVjaG8gZXNjX2h0bWwoJGxhc3RfZm10KTsgPz48L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBlbHNlIDogPz4KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLXNldHRpbmdzI2Zpbi13ZWJob29rJykpOyA/PiIgc3R5bGU9InBhZGRpbmc6OHB4IDE2cHg7YmFja2dyb3VuZDojZmVmM2M3O2NvbG9yOiM5MjQwMGU7Ym9yZGVyOjFweCBzb2xpZCAjZmRlMDQ3O2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LWRlY29yYXRpb246bm9uZSI+4pqZ77iPIENvbmZpZ3VyYXIgV2ViaG9vazwvYT4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8P3BocCBpZiAoJG5vX2RhdGEpIDogPz4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZlZjljMztib3JkZXI6MXB4IHNvbGlkICNmZGUwNDc7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjBweDttYXJnaW4tYm90dG9tOjIwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPgogICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTozMnB4O21hcmdpbi1ib3R0b206OHB4Ij7wn5OKPC9kaXY+CiAgICAgICAgPGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM3MTNmMTI7bWFyZ2luLWJvdHRvbTo2cHgiPkRhZG9zIG7Do28gc2luY3Jvbml6YWRvcyBhaW5kYTwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiNhMTYyMDc7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICA8P3BocCBpZiAoJHdlYmhvb2tfdXJsKSA6ID8+Q2xpcXVlIGVtIDxzdHJvbmc+8J+UhCBTaW5jcm9uaXphciBHU2hlZXRzPC9zdHJvbmc+IHBhcmEgaW1wb3J0YXIgb3MgZGFkb3MgZGEgcGxhbmlsaGEgVklWQU1BSVMtVkVOREFTLgogICAgICAgICAgICA8P3BocCBlbHNlIDogPz5Db25maWd1cmUgbyB3ZWJob29rIGVtIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybChhZG1pbl91cmwoJ2FkbWluLnBocD9wYWdlPXZtMi1zZXR0aW5ncycpKTsgPz4iIHN0eWxlPSJjb2xvcjojN2MzYWVkIj7impnvuI8gQ29uZmlndXJhw6fDtWVzPC9hPiBlIGRlcG9pcyBzaW5jcm9uaXplLjw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRpZjsgPz4KCiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMTYwcHgsMWZyKSk7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToyNHB4Ij4KICAgIDw/cGhwCiAgICAka3BpcyA9IFsKICAgICAgICBbJ/CfkrAgVmVuZGFzIChQbGFuaWxoYSknLCAgdm0yX2Zpbl9mbXRfcigkdmVuZGFzKSwgICRkcmVfcm93ID8gbnVtYmVyX2Zvcm1hdCgkbV9icnV0YSoxMDAsMSwnLCcsJy4nKS4nJSBtYXJnZW0gYnJ1dGEnIDogJ+KAlCcsICcjMTBiOTgxJywgJ3dvbyddLAogICAgICAgIFsn8J+SuCBDdXN0byBEaXJldG8nLCAgICAgICB2bTJfZmluX2ZtdF9yKCRjdXN0byksICAgJ3BhcmNlaXJvcyBlIGFydGlzdGFzJywgJyNlZjQ0NDQnLCAncGFnYXInXSwKICAgICAgICBbJ/Cfj6YgQnJ1dG8gVml2YU1haXMnLCAgICAgdm0yX2Zpbl9mbXRfcigkYnJ1dG8pLCAgICR2ZW5kYXMgPiAwID8gbnVtYmVyX2Zvcm1hdCgkYnJ1dG8vJHZlbmRhcyoxMDAsMSwnLCcsJy4nKS4nJSBkYXMgdmVuZGFzJyA6ICfigJQnLCAnIzNiODJmNicsICdkcmUnXSwKICAgICAgICBbJ/Cfk6IgTWt0L1RlY25vbG9naWEnLCAgICAgdm0yX2Zpbl9mbXRfcigkbWt0KSwgICAgICRyb2FzID4gMCA/ICdST0FTOiAnLm51bWJlcl9mb3JtYXQoJHJvYXMsMiwnLCcsJy4nKS4neCcgOiAn4oCUJywgJyNmNTllMGInLCAnZHJlJ10sCiAgICAgICAgWyfwn5K1IEzDrXF1aWRvJywgICAgICAgICAgICB2bTJfZmluX2ZtdF9yKCRsaXF1aWRvKSwgICR2c19hbnQgIT09IG51bGwgPyAoJHZzX2FudCA+PSAwID8gJ+KWsiAnIDogJ+KWvCAnKS5udW1iZXJfZm9ybWF0KGFicygkdnNfYW50KSoxMDAsMSwnLCcsJy4nKS4nJSB2cyBtw6pzIGFudC4nIDogJ+KAlCcsICRsaXF1aWRvID49IDAgPyAnIzdjM2FlZCcgOiAnI2VmNDQ0NCcsICdkcmUnXSwKICAgICAgICBbJ/Cfk4ggUk9BUycsICAgICAgICAgICAgICAgbnVtYmVyX2Zvcm1hdCgkcm9hcywyLCcsJywnLicpLid4JywgJHJvYXMgPiAwID8gJ1JldG9ybm8gc29icmUgYWRzcGVuZCcgOiAn4oCUJywgJHJvYXMgPj0gNSA/ICcjMTBiOTgxJyA6ICgkcm9hcyA+PSAyID8gJyNmNTllMGInIDogJyNlZjQ0NDQnKSwgJ2RyZSddLAogICAgXTsKICAgIGZvcmVhY2ggKCRrcGlzIGFzIFskbGJsLCR2YWwsJHN1YiwkY29yLCRsdGFiXSkgOgogICAgICAgICRsaHJlZiA9IGVzY19qcyhhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItZmluYW5jZWlybycsJ2ZtJz0+JHNlbF9tb250aCwnZnRhYic9PiRsdGFiXSwkYmFzZSkpOwogICAgPz4KICAgIDxkaXYgb25jbGljaz0ibG9jYXRpb24uaHJlZj0nPD9waHAgZWNobyAkbGhyZWY7ID8+JyIKICAgICAgICAgb25tb3VzZWVudGVyPSJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMnB4KSc7dGhpcy5zdHlsZS5ib3hTaGFkb3c9JzAgNHB4IDE0cHggcmdiYSgwLDAsMCwuMSknIgogICAgICAgICBvbm1vdXNlbGVhdmU9InRoaXMuc3R5bGUudHJhbnNmb3JtPScnO3RoaXMuc3R5bGUuYm94U2hhZG93PScnIgogICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxNnB4O2JvcmRlci10b3A6NHB4IHNvbGlkIDw/cGhwIGVjaG8gJGNvcjsgPz47Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE1cyxib3gtc2hhZG93IC4xNXMiPgogICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2YjcyODA7bWFyZ2luLWJvdHRvbTo2cHg7Zm9udC13ZWlnaHQ6NjAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZSI+PD9waHAgZWNobyAkbGJsOyA/PjwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMTExO21hcmdpbi1ib3R0b206M3B4Ij48P3BocCBlY2hvICR2YWw7ID8+PC9kaXY+CiAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzljYTNhZiI+PD9waHAgZWNobyAkc3ViOyA/PjwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgPC9kaXY+CgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLWJvdHRvbToyMHB4O2ZsZXgtd3JhcDp3cmFwIj4KICAgIDw/cGhwIGZvcmVhY2ggKCR0YWJzIGFzICR0ayA9PiAkdGwpIDoKICAgICAgICAkYWN0ICA9ICgkdGFiID09PSAkdGspOwogICAgICAgICR0dXJsID0gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWZpbmFuY2Vpcm8nLCdmbSc9PiRzZWxfbW9udGgsJ2Z0YWInPT4kdGtdLCRiYXNlKTsKICAgICAgICAkdHMgICA9ICRhY3QgPyAncGFkZGluZzo4cHggMThweDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOiM3YzNhZWQ7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjE0cHgnCiAgICAgICAgICAgICAgICAgICAgIDogJ3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDojZjNmNGY2O2NvbG9yOiMzNzQxNTE7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjE0cHgnOwogICAgPz48YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJHR1cmwpOyA/PiIgc3R5bGU9Ijw/cGhwIGVjaG8gJHRzOyA/PiI+PD9waHAgZWNobyAkdGw7ID8+PC9hPgogICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgIDwvZGl2PgoKICAgIDw/cGhwCiAgICBpZiAgICAgICgkdGFiID09PSAnZHJlJykgICAgICAgICAgdm0yX2Zpbl90YWJfZHJlKCRkcmVfcm93cywgJHNlbF9tb250aCk7CiAgICBlbHNlaWYgICgkdGFiID09PSAncmVjZWJlcicpICAgICAgdm0yX2Zpbl90YWJfcmVjZWJlcigkcmVjZWJlcl9yb3dzLCAkc2VsX21vbnRoKTsKICAgIGVsc2VpZiAgKCR0YWIgPT09ICdwYWdhcicpICAgICAgICB2bTJfZmluX3RhYl9wYWdhcigkcGFnYXJfcm93cywgJHNlbF9tb250aCk7CiAgICBlbHNlaWYgICgkdGFiID09PSAnY29tcGV0ZW5jaWEnKSAgdm0yX2Zpbl90YWJfY29tcGV0ZW5jaWEoJHJlY2ViZXJfcm93cywgJHBhZ2FyX3Jvd3MsICRzZWxfbW9udGgpOwogICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtMl9maW5fdGFiX3dvbygkc2VsX21vbnRoKTsKICAgID8+CiAgICA8L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgZnVuY3Rpb24gdm0yRmluU3luYygpIHsKICAgICAgICB2YXIgYnRuICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZmluLXN5bmMtYnRuJyk7CiAgICAgICAgdmFyIGljb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWZpbi1zeW5jLWljb24nKTsKICAgICAgICB2YXIgdHh0ICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZmluLXN5bmMtdHh0Jyk7CiAgICAgICAgYnRuLmRpc2FibGVkID0gdHJ1ZTsgaWNvbi50ZXh0Q29udGVudCA9ICfij7MnOyB0eHQudGV4dENvbnRlbnQgPSAnSW5pY2lhbmRvLi4uJzsKICAgICAgICBmZXRjaChhamF4dXJsLCB7CiAgICAgICAgICAgIG1ldGhvZDonUE9TVCcsIGNyZWRlbnRpYWxzOidzYW1lLW9yaWdpbicsCiAgICAgICAgICAgIGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfSwKICAgICAgICAgICAgYm9keTonYWN0aW9uPXZtMl9maW5fdHJpZ2dlcl9zeW5jJm5vbmNlPTw/cGhwIGVjaG8gZXNjX2pzKCRzeW5jX25vbmNlKTsgPz4nCiAgICAgICAgfSkudGhlbihyPT5yLmpzb24oKSkudGhlbihkPT57CiAgICAgICAgICAgIGlmIChkLnN1Y2Nlc3MpIHsgdHh0LnRleHRDb250ZW50PSdTaW5jcm9uaXphbmRvLi4uJzsgdm0yRmluUG9sbFN0YXJ0PURhdGUubm93KCk7IHZtMkZpblBvbGwoKTsgfQogICAgICAgICAgICBlbHNlIHsgaWNvbi50ZXh0Q29udGVudD0n4p2MJzsgdHh0LnRleHRDb250ZW50PSdFcnJvOiAnKyhkLmRhdGF8fCdmYWxoYScpOyBidG4uZGlzYWJsZWQ9ZmFsc2U7IH0KICAgICAgICB9KS5jYXRjaCgoKT0+eyBpY29uLnRleHRDb250ZW50PSfinYwnOyB0eHQudGV4dENvbnRlbnQ9J0Vycm8gZGUgcmVkZSc7IGJ0bi5kaXNhYmxlZD1mYWxzZTsgfSk7CiAgICB9CiAgICB2YXIgdm0yRmluUG9sbFN0YXJ0PW51bGw7CiAgICBmdW5jdGlvbiB2bTJGaW5Qb2xsKCkgewogICAgICAgIGlmIChEYXRlLm5vdygpLXZtMkZpblBvbGxTdGFydD4xMjAwMDApIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1maW4tc3luYy10eHQnKS50ZXh0Q29udGVudD0nVGltZW91dCDigJQgdGVudGUgbm92YW1lbnRlJzsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1maW4tc3luYy1idG4nKS5kaXNhYmxlZD1mYWxzZTsgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBmZXRjaCgnPD9waHAgZWNobyBlc2NfanMoJHJlc3Rfc3RhdHVzX3VybCk7ID8+JywKICAgICAgICAgICAgICB7aGVhZGVyczp7J1gtV1AtTm9uY2UnOic8P3BocCBlY2hvIGVzY19qcygkcmVzdF9ub25jZSk7ID8+J30sY3JlZGVudGlhbHM6J3NhbWUtb3JpZ2luJ30pCiAgICAgICAgLnRoZW4ocj0+ci5qc29uKCkpLnRoZW4oZD0+ewogICAgICAgICAgICBpZiAoIWQuc3luY2luZykgewogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1maW4tc3luYy1pY29uJykudGV4dENvbnRlbnQ9J+KchSc7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWZpbi1zeW5jLXR4dCcpLnRleHRDb250ZW50PSdTaW5jcm9uaXphZG8hJzsKICAgICAgICAgICAgICAgIHZhciBscz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWZpbi1sYXN0Jyk7CiAgICAgICAgICAgICAgICBpZiAobHMgJiYgZC5sYXN0X3N5bmMpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZHQ9bmV3IERhdGUoZC5sYXN0X3N5bmMucmVwbGFjZSgnICcsJ1QnKSk7CiAgICAgICAgICAgICAgICAgICAgbHMudGV4dENvbnRlbnQ9J8OabHRpbWEgc3luYzogJytkdC50b0xvY2FsZVN0cmluZygncHQtQlInLHtkYXk6JzItZGlnaXQnLG1vbnRoOicyLWRpZ2l0Jyxob3VyOicyLWRpZ2l0JyxtaW51dGU6JzItZGlnaXQnfSkucmVwbGFjZSgnLCcsJycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+bG9jYXRpb24ucmVsb2FkKCksMTUwMCk7CiAgICAgICAgICAgIH0gZWxzZSB7IHNldFRpbWVvdXQodm0yRmluUG9sbCwzMDAwKTsgfQogICAgICAgIH0pLmNhdGNoKCgpPT5zZXRUaW1lb3V0KHZtMkZpblBvbGwsNDAwMCkpOwogICAgfQogICAgLy8g4pSA4pSAIFNvcnQgKyBGaWx0ZXIgKEZpbmFuY2Vpcm8pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgdmFyIHZtMlNTPXt9OwogICAgZnVuY3Rpb24gdm0yRmluRmlsdGVyKGlucCx0aWQpewogICAgICAgIHZhciBxPWlucC52YWx1ZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyMnK3RpZCsnIHRib2R5IHRyJykuZm9yRWFjaChmdW5jdGlvbihyKXsKICAgICAgICAgICAgci5zdHlsZS5kaXNwbGF5PXIudGV4dENvbnRlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKHEpPi0xPycnOidub25lJzsKICAgICAgICB9KTsKICAgIH0KICAgIHZhciBWTTJfTUVTPXsnamFuZWlybyc6MSwnZmV2ZXJlaXJvJzoyLCdtYXLDp28nOjMsJ21hcmNvJzozLCdhYnJpbCc6NCwnbWFpbyc6NSwnanVuaG8nOjYsCiAgICAgICAgICAgICAgICAgICAnanVsaG8nOjcsJ2Fnb3N0byc6OCwnc2V0ZW1icm8nOjksJ291dHVicm8nOjEwLCdub3ZlbWJybyc6MTEsJ2RlemVtYnJvJzoxMn07CiAgICBmdW5jdGlvbiB2bTJQYXJzZU51bSh2KXsKICAgICAgICB2YXIgcz12LnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIC8vICJKYW5laXJvIDIwMjUiIC8gIk1hcsOnb1xuMjAyNiIg4oaSIGFubyoxMDAgKyBtZXMKICAgICAgICB2YXIgbT0vXihbYS16w6HDoMOjw6LDqcOqw63Ds8O0w7XDusOnXSspXHMrKFxkezR9KSQvLmV4ZWMocy5yZXBsYWNlKC9ccysvZywnICcpKTsKICAgICAgICBpZihtJiZWTTJfTUVTW21bMV1dKXtyZXR1cm4gcGFyc2VJbnQobVsyXSkqMTAwK1ZNMl9NRVNbbVsxXV07fQogICAgICAgIC8vIGRhdGUgZGQvbW0veXl5eSDihpIgeXl5eW1tZGQKICAgICAgICB2YXIgZD0vXihcZHsxLDJ9KVwvKFxkezEsMn0pXC8oXGR7Miw0fSkkLy5leGVjKHYudHJpbSgpKTsKICAgICAgICBpZihkKXt2YXIgeT1kWzNdLmxlbmd0aD09PTI/JzIwJytkWzNdOmRbM107cmV0dXJuIHBhcnNlSW50KHkrZFsyXS5wYWRTdGFydCgyLCcwJykrZFsxXS5wYWRTdGFydCgyLCcwJykpO30KICAgICAgICAvLyBuZWdhdGl2ZSBpbmRpY2F0b3IKICAgICAgICB2YXIgbmVnPXYuaW5kZXhPZign4pa8Jyk+LTE/LTE6MTsKICAgICAgICB2YXIgbj1wYXJzZUZsb2F0KHYucmVwbGFjZSgvW1IkXHMleOKWsuKWvF0vZywnJykucmVwbGFjZSgvXC4vZywnJykucmVwbGFjZSgnLCcsJy4nKSk7CiAgICAgICAgcmV0dXJuIGlzTmFOKG4pP251bGw6bmVnKm47CiAgICB9CiAgICBmdW5jdGlvbiB2bTJGaW5Tb3J0KHRpZCxjb2wsZm9yY2VEZXNjKXsKICAgICAgICB2YXIga2V5PXRpZCsnXycrY29sOwogICAgICAgIHZhciBhc2M9Zm9yY2VEZXNjPT09dHJ1ZT9mYWxzZTooZm9yY2VEZXNjPT09ZmFsc2U/dHJ1ZTp2bTJTU1trZXldIT09J2FzYycpOwogICAgICAgIHZtMlNTW2tleV09YXNjPydhc2MnOidkZXNjJzsKICAgICAgICB2YXIgdGJvZHk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignIycrdGlkKycgdGJvZHknKTsKICAgICAgICBpZighdGJvZHkpcmV0dXJuOwogICAgICAgIHZhciByb3dzPUFycmF5LmZyb20odGJvZHkucXVlcnlTZWxlY3RvckFsbCgndHInKSk7CiAgICAgICAgcm93cy5zb3J0KGZ1bmN0aW9uKGEsYil7CiAgICAgICAgICAgIHZhciBhdj0oYS5jZWxsc1tjb2xdP2EuY2VsbHNbY29sXS50ZXh0Q29udGVudDonJykudHJpbSgpOwogICAgICAgICAgICB2YXIgYnY9KGIuY2VsbHNbY29sXT9iLmNlbGxzW2NvbF0udGV4dENvbnRlbnQ6JycpLnRyaW0oKTsKICAgICAgICAgICAgdmFyIGFuPXZtMlBhcnNlTnVtKGF2KSxibj12bTJQYXJzZU51bShidik7CiAgICAgICAgICAgIGlmKGFuIT09bnVsbCYmYm4hPT1udWxsKXJldHVybiBhc2M/YW4tYm46Ym4tYW47CiAgICAgICAgICAgIHJldHVybiBhc2M/YXYubG9jYWxlQ29tcGFyZShidiwncHQtQlInKTpidi5sb2NhbGVDb21wYXJlKGF2LCdwdC1CUicpOwogICAgICAgIH0pOwogICAgICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbihyKXt0Ym9keS5hcHBlbmRDaGlsZChyKTt9KTsKICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjJyt0aWQrJyAudm0yc2knKS5mb3JFYWNoKGZ1bmN0aW9uKHMpewogICAgICAgICAgICB2YXIgYz1wYXJzZUludChzLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wnKSk7CiAgICAgICAgICAgIHMudGV4dENvbnRlbnQ9Yz09PWNvbD8oYXNjPyfilrInOifilrwnKTon4oeFJzsKICAgICAgICAgICAgcy5zdHlsZS5jb2xvcj1jPT09Y29sPycjN2MzYWVkJzonIzljYTNhZic7CiAgICAgICAgfSk7CiAgICB9CiAgICAvLyBPcmRlbmHDp8OjbyBwYWRyw6NvOiBwb3IgbcOqcyBkZXNjIChtYWlzIHJlY2VudGUgcHJpbWVpcm8pCiAgICAvLyBFeGVjdXRhZG8gaW5saW5lIOKAlCB0YWJlbGEgasOhIGVzdMOhIG5vIERPTSBxdWFuZG8gbyBzY3JpcHQgcm9kYQogICAgKGZ1bmN0aW9uKCl7CiAgICAgICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1maW4tZHJlJykpIHZtMkZpblNvcnQoJ3ZtMi1maW4tZHJlJywwLHRydWUpOwogICAgICAgIGlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZmluLXJlYycpKSB2bTJGaW5Tb3J0KCd2bTItZmluLXJlYycsMCx0cnVlKTsKICAgICAgICBpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWZpbi1wYWcnKSkgdm0yRmluU29ydCgndm0yLWZpbi1wYWcnLDAsdHJ1ZSk7CiAgICAgICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1maW4td29vJykpIHZtMkZpblNvcnQoJ3ZtMi1maW4td29vJyw2LHRydWUpOwogICAgfSkoKTsKICAgIDw/cGhwIGlmICgkc3luY2luZykgOiA/PgogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1maW4tc3luYy1idG4nKS5kaXNhYmxlZD10cnVlOwogICAgdm0yRmluUG9sbFN0YXJ0PURhdGUubm93KCk7IHZtMkZpblBvbGwoKTsKICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9zY3JpcHQ+CiAgICA8P3BocAp9CgovLyDilIDilIAgVEFCIERSRSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2Zpbl90YWJfZHJlKCAkcm93cywgJHNlbF9tb250aCApIHsKICAgIGlmICggZW1wdHkoJHJvd3MpIHx8ICFpc19hcnJheSgkcm93cykgKSB7CiAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo2MHB4O2NvbG9yOiM5Y2EzYWYiPlNlbSBkYWRvcyDigJQgc2luY3Jvbml6ZSBhIHBsYW5pbGhhLjwvZGl2Pic7IHJldHVybjsKICAgIH0KICAgIFskc3ksJHNtXSA9IGV4cGxvZGUoJy0nLCRzZWxfbW9udGgpOwogICAgJG1uYW1lcyA9IFsnMDEnPT4namFuZWlybycsJzAyJz0+J2ZldmVyZWlybycsJzAzJz0+J21hcsOnbycsJzA0Jz0+J2FicmlsJywnMDUnPT4nbWFpbycsJzA2Jz0+J2p1bmhvJywKICAgICAgICAgICAgICAgJzA3Jz0+J2p1bGhvJywnMDgnPT4nYWdvc3RvJywnMDknPT4nc2V0ZW1icm8nLCcxMCc9PidvdXR1YnJvJywnMTEnPT4nbm92ZW1icm8nLCcxMic9PidkZXplbWJybyddOwogICAgJHNlbF9tbmFtZSA9ICRtbmFtZXNbJHNtXSA/PyAnJzsKICAgIGVjaG8gJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxMnB4O2ZsZXgtd3JhcDp3cmFwIj4nOwogICAgZWNobyAnPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2RiZWFmZTtjb2xvcjojMWQ0ZWQ4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtsZXR0ZXItc3BhY2luZzouNXB4Ij7wn5K1IFJFR0lNRSBERSBDQUlYQTwvc3Bhbj4nOwogICAgZWNobyAnPHNwYW4gc3R5bGU9ImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEycHgiPlJlY2VpdGFzIGUgZGVzcGVzYXMgcGVsbyBtw6pzIGVtIHF1ZSBvIGRpbmhlaXJvIGVudHJvdS9zYWl1PC9zcGFuPic7CiAgICBlY2hvICc8L2Rpdj4nOwogICAgdm0yX2Zpbl9maWx0ZXJfYmFyKCd2bTItZmluLWRyZScsICdGaWx0cmFyIHBvciBtw6pzLi4uJyk7CiAgICBlY2hvICc8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OmF1dG8iPic7CiAgICBlY2hvICc8dGFibGUgaWQ9InZtMi1maW4tZHJlIiBzdHlsZT0id2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDgpO21pbi13aWR0aDo4MDBweCI+JzsKICAgIHZtMl9maW5fdGhlYWQoWydNw6pzJywnVmVuZGFzJywnQ3VzdG8nLCdCcnV0byBWTScsJ01rdCcsJ0zDrXF1aWRvJywnTS5CcnV0YScsJ1JPQVMnLCd2cyBBbnQuJ10sICd2bTItZmluLWRyZScsIDEpOwogICAgZWNobyAnPHRib2R5Pic7CiAgICBmb3JlYWNoICgkcm93cyBhcyAkcm93KSB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkcm93KXx8ZW1wdHkoJHJvd1snbWVzJ10pKSBjb250aW51ZTsKICAgICAgICAkaXNfY3VyID0gc3RydG9sb3dlcigkcm93WydtZXMnXSkgPT09ICRzZWxfbW5hbWU7CiAgICAgICAgJGJnICAgICA9ICRpc19jdXIgPyAnYmFja2dyb3VuZDojZjVmM2ZmOycgOiAnJzsKICAgICAgICAkZncgICAgID0gJGlzX2N1ciA/ICdmb250LXdlaWdodDo3MDA7JyA6ICcnOwogICAgICAgICRibCAgICAgPSAkaXNfY3VyID8gJ2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjN2MzYWVkOycgOiAnYm9yZGVyLWxlZnQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50Oyc7CiAgICAgICAgJGxpcSAgICA9IChmbG9hdCkoJHJvd1snbGlxdWlkbyddPz8wKTsKICAgICAgICAkbGMgICAgID0gJGxpcT49MCA/ICcjMDY1ZjQ2JyA6ICcjOTkxYjFiJzsKICAgICAgICAkdnMgICAgID0gaXNzZXQoJHJvd1sndnNfbWVzX2FudGVyaW9yJ10pJiYkcm93Wyd2c19tZXNfYW50ZXJpb3InXSE9PScnID8gKGZsb2F0KSRyb3dbJ3ZzX21lc19hbnRlcmlvciddIDogbnVsbDsKICAgICAgICAkdnNfcyAgID0gJHZzIT09bnVsbCA/ICgkdnM+PTA/J+KWsiAnOifilrwgJykubnVtYmVyX2Zvcm1hdChhYnMoJHZzKSoxMDAsMSwnLCcsJy4nKS4nJScgOiAn4oCUJzsKICAgICAgICAkdnNfYyAgID0gJHZzIT09bnVsbCYmJHZzPj0wID8gJyMwNTk2NjknIDogJyNkYzI2MjYnOwogICAgICAgIGVjaG8gIjx0ciBzdHlsZT0nYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2YzZjRmNjt7JGJnfXskYmx9Jz4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7eyRmd310ZXh0LWFsaWduOnJpZ2h0Jz4iLmVzY19odG1sKHVjZmlyc3QoJHJvd1snbWVzJ10pKS4oJGlzX2N1cj8nIOKXhCc6JycpLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt7JGZ3fXRleHQtYWxpZ246cmlnaHQnPiIudm0yX2Zpbl9mbXRfcigkcm93Wyd2ZW5kYXMnXT8/JHJvd1sndmVuZGEnXT8/MCkuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzZiNzI4MCc+Ii52bTJfZmluX2ZtdF9yKCRyb3dbJ2N1c3RvJ10/PyRyb3dbJ2N1c3RvX2RpcmV0byddPz8wKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodCc+Ii52bTJfZmluX2ZtdF9yKCRyb3dbJ2JydXRvJ10/PyRyb3dbJ2JydXRvX3ZpdmFtYWlzJ10/PzApLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiM2YjcyODAnPiIudm0yX2Zpbl9mbXRfcigkcm93Wydta3QnXT8/JHJvd1snbWFya2V0aW5nJ10/PzApLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOnskbGN9O2ZvbnQtd2VpZ2h0OjYwMCc+Ii52bTJfZmluX2ZtdF9yKCRsaXEpLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOnJpZ2h0Jz4iLm51bWJlcl9mb3JtYXQoKGZsb2F0KSgkcm93WydtYXJnZW1fYnJ1dGEnXT8/MCkqMTAwLDEsJywnLCcuJykuJyUnLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOnJpZ2h0Jz4iLm51bWJlcl9mb3JtYXQoKGZsb2F0KSgkcm93Wydyb2FzJ10/PzApLDIsJywnLCcuJykuJ3gnLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOnskdnNfY30nPnskdnNfc308L3RkPiI7CiAgICAgICAgZWNobyAiPC90cj4iOwogICAgfQogICAgZWNobyAnPC90Ym9keT48L3RhYmxlPjwvZGl2Pic7Cn0KCi8vIOKUgOKUgCBUQUIgQSBSRUNFQkVSIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfZmluX3RhYl9yZWNlYmVyKCAkcm93cywgJHNlbF9tb250aCApIHsKICAgIGlmIChlbXB0eSgkcm93cyl8fCFpc19hcnJheSgkcm93cykpIHsKICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjYwcHg7Y29sb3I6IzljYTNhZiI+U2VtIGRhZG9zIOKAlCBzaW5jcm9uaXplIGEgcGxhbmlsaGEuPC9kaXY+JzsgcmV0dXJuOwogICAgfQogICAgJGZpbHRlcmVkID0gYXJyYXlfdmFsdWVzKGFycmF5X2ZpbHRlcigkcm93cywgZnVuY3Rpb24oJHIpIHVzZSgkc2VsX21vbnRoKXsKICAgICAgICBpZihpc3NldCgkclsnZGF0YV9mZXN0YV95bSddKSYmIWVtcHR5KCRyWydkYXRhX2Zlc3RhX3ltJ10pKSByZXR1cm4gJHJbJ2RhdGFfZmVzdGFfeW0nXT09PSRzZWxfbW9udGg7CiAgICAgICAgJGRmID0gJHJbJ2RhdGFfZmVzdGEnXT8/Jyc7CiAgICAgICAgaWYoISRkZikgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmKHByZWdfbWF0Y2goJyNeKFxkezEsMn0pLyhcZHsxLDJ9KS8oXGR7Miw0fSkkIycsJGRmLCRtKSl7JHk9JG1bM107aWYoc3RybGVuKCR5KT09PTIpJHk9JzIwJy4keTtyZXR1cm4gc3ByaW50ZignJTA0ZC0lMDJkJywkeSwkbVsyXSk9PT0kc2VsX21vbnRoO30KICAgICAgICAkdHM9c3RydG90aW1lKCRkZik7IGlmKCR0cykgcmV0dXJuIGRhdGUoJ1ktbScsJHRzKT09PSRzZWxfbW9udGg7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSkpOwogICAgaWYgKGVtcHR5KCRmaWx0ZXJlZCkpIHsgZWNobyAnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0MHB4O2NvbG9yOiM5Y2EzYWYiPk5lbmh1bSByZWdpc3RybyBwYXJhICcuZXNjX2h0bWwodm0yX21vbnRoX2xhYmVsX3B0KCRzZWxfbW9udGgpKS4nLjwvZGl2Pic7IHJldHVybjsgfQogICAgJHRvdF9lPTA7ICR0b3RfZj0wOyAkY250X3BhZ289MDsKICAgIHZtMl9maW5fZmlsdGVyX2Jhcigndm0yLWZpbi1yZWMnLCAnRmlsdHJhciBwb3IgZGF0YSwgV2hhdHNBcHAuLi4nKTsKICAgIGVjaG8gJzxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0byI+JzsKICAgIGVjaG8gJzx0YWJsZSBpZD0idm0yLWZpbi1yZWMiIHN0eWxlPSJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4wOCkiPic7CiAgICB2bTJfZmluX3RoZWFkKFsnRGF0YSBGZXN0YScsJ1doYXRzQXBwJywnRW50cmFkYScsJ0ZpbmFsJywnU3RhdHVzJ10sICd2bTItZmluLXJlYycsIDIpOwogICAgZWNobyAnPHRib2R5Pic7CiAgICBmb3JlYWNoICgkZmlsdGVyZWQgYXMgJHIpIHsKICAgICAgICAkZT0oZmxvYXQpKCRyWydlbnRyYWRhJ10/PzApOyAkZj0oZmxvYXQpKCRyWydmaW5hbF92YWxvciddPz8kclsnZmluYWwnXT8/MCk7CiAgICAgICAgJHBhZ29fcmF3PSRyWydzdGF0dXNfZW50cmFkYSddPz8oJHJbJ3BhZ28nXT8/bnVsbCk7CiAgICAgICAgJHBhZ289KCRwYWdvX3Jhdz09PXRydWV8fCRwYWdvX3Jhdz09PTF8fHN0cnRvdXBwZXIoKHN0cmluZykkcGFnb19yYXcpPT09J1NJTScpOwogICAgICAgIGlmKCRwYWdvKSRjbnRfcGFnbysrOwogICAgICAgICR0b3RfZSs9JGU7ICR0b3RfZis9JGY7CiAgICAgICAgJGJhZGdlPSRwYWdvPyc8c3BhbiBzdHlsZT0icGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2JhY2tncm91bmQ6I2QxZmFlNTtjb2xvcjojMDY1ZjQ2Ij7inIUgUGFnbzwvc3Bhbj4nCiAgICAgICAgICAgICAgICAgICAgOic8c3BhbiBzdHlsZT0icGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2JhY2tncm91bmQ6I2ZlZjNjNztjb2xvcjojOTI0MDBlIj7ij7MgUGVuZGVudGU8L3NwYW4+JzsKICAgICAgICBlY2hvICI8dHIgc3R5bGU9J2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmM2Y0ZjYnPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo1MDAnPiIuZXNjX2h0bWwoJHJbJ2RhdGFfZmVzdGEnXT8/J+KAlCcpLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDtjb2xvcjojNmI3MjgwJz4iLmVzY19odG1sKCRyWyd3aGF0c2FwcCddPz8n4oCUJykuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCc+Ii52bTJfZmluX2ZtdF9yKCRlKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHgnPiIuKCRmPjA/dm0yX2Zpbl9mbXRfcigkZik6J+KAlCcpLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweCc+eyRiYWRnZX08L3RkPiI7CiAgICAgICAgZWNobyAiPC90cj4iOwogICAgfQogICAgZWNobyAnPC90Ym9keT4nOwogICAgZWNobyAiPHRmb290Pjx0ciBzdHlsZT0nYmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci10b3A6MnB4IHNvbGlkICNlNWU3ZWInPiI7CiAgICBlY2hvICI8dGQgY29sc3Bhbj0nMicgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTNweCc+Ii5jb3VudCgkZmlsdGVyZWQpLiIgcmVnaXN0cm8ocykg4oCUIHskY250X3BhZ299IHBhZ28ocyk8L3RkPiI7CiAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMTBiOTgxJz4iLnZtMl9maW5fZm10X3IoJHRvdF9lKS4iPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzNiODJmNic+Ii4oJHRvdF9mPjA/dm0yX2Zpbl9mbXRfcigkdG90X2YpOifigJQnKS4iPC90ZD4iOwogICAgZWNobyAiPHRkPjwvdGQ+PC90cj48L3Rmb290PjwvdGFibGU+PC9kaXY+IjsKfQoKLy8g4pSA4pSAIFRBQiBBIFBBR0FSIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfZmluX3RhYl9wYWdhciggJHJvd3MsICRzZWxfbW9udGggKSB7CiAgICBpZiAoZW1wdHkoJHJvd3MpfHwhaXNfYXJyYXkoJHJvd3MpKSB7CiAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo2MHB4O2NvbG9yOiM5Y2EzYWYiPlNlbSBkYWRvcyDigJQgc2luY3Jvbml6ZSBhIHBsYW5pbGhhLjwvZGl2Pic7IHJldHVybjsKICAgIH0KICAgICRmaWx0ZXJlZCA9IGFycmF5X3ZhbHVlcyhhcnJheV9maWx0ZXIoJHJvd3MsIGZ1bmN0aW9uKCRyKSB1c2UoJHNlbF9tb250aCl7CiAgICAgICAgaWYoaXNzZXQoJHJbJ2RhdGFfZmVzdGFfeW0nXSkmJiFlbXB0eSgkclsnZGF0YV9mZXN0YV95bSddKSkgcmV0dXJuICRyWydkYXRhX2Zlc3RhX3ltJ109PT0kc2VsX21vbnRoOwogICAgICAgICRkZiA9ICRyWydkYXRhX2Zlc3RhJ10/PycnOwogICAgICAgIGlmKCEkZGYpIHJldHVybiBmYWxzZTsKICAgICAgICBpZihwcmVnX21hdGNoKCcjXihcZHsxLDJ9KS8oXGR7MSwyfSkvKFxkezIsNH0pJCMnLCRkZiwkbSkpeyR5PSRtWzNdO2lmKHN0cmxlbigkeSk9PT0yKSR5PScyMCcuJHk7cmV0dXJuIHNwcmludGYoJyUwNGQtJTAyZCcsJHksJG1bMl0pPT09JHNlbF9tb250aDt9CiAgICAgICAgJHRzPXN0cnRvdGltZSgkZGYpOyBpZigkdHMpIHJldHVybiBkYXRlKCdZLW0nLCR0cyk9PT0kc2VsX21vbnRoOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pKTsKICAgIGlmIChlbXB0eSgkZmlsdGVyZWQpKSB7IGVjaG8gJzxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NDBweDtjb2xvcjojOWNhM2FmIj5OZW5odW0gcmVnaXN0cm8gcGFyYSAnLmVzY19odG1sKHZtMl9tb250aF9sYWJlbF9wdCgkc2VsX21vbnRoKSkuJy48L2Rpdj4nOyByZXR1cm47IH0KICAgICR0b3RfYz0wOyAkdG90X2I9MDsKICAgIHZtMl9maW5fZmlsdGVyX2Jhcigndm0yLWZpbi1wYWcnLCAnRmlsdHJhciBwb3IgZGF0YSwgV2hhdHNBcHAuLi4nKTsKICAgIGVjaG8gJzxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0byI+JzsKICAgIGVjaG8gJzx0YWJsZSBpZD0idm0yLWZpbi1wYWciIHN0eWxlPSJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4wOCkiPic7CiAgICB2bTJfZmluX3RoZWFkKFsnRGF0YSBGZXN0YScsJ1doYXRzQXBwJywnUHJlw6dvIFZlbmRhJywnQ3VzdG8nLCdFbnRyYWRhJywnRmluYWwnLCdCcnV0byBWTSddLCAndm0yLWZpbi1wYWcnLCAyKTsKICAgIGVjaG8gJzx0Ym9keT4nOwogICAgZm9yZWFjaCAoJGZpbHRlcmVkIGFzICRyKSB7CiAgICAgICAgJGM9KGZsb2F0KSgkclsnY3VzdG9fcGFyY2Vpcm8nXT8/JHJbJ2N1c3RvJ10/PzApOwogICAgICAgICRiPShmbG9hdCkoJHJbJ2JydXRvX3ZpdmFtYWlzJ10/PzApOwogICAgICAgICRlbnQ9KGZsb2F0KSgkclsnZW50cmFkYV9yZWNlYmlkYSddPz8kclsnZW50cmFkYSddPz8wKTsKICAgICAgICAkZnA9KGZsb2F0KSgkclsnZmluYWxfcGFnYXInXT8/JHJbJ2ZpbmFsX3ZhbG9yJ10/PzApOwogICAgICAgICR0b3RfYys9JGM7ICR0b3RfYis9JGI7CiAgICAgICAgZWNobyAiPHRyIHN0eWxlPSdib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjNmNGY2Jz4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwJz4iLmVzY19odG1sKCRyWydkYXRhX2Zlc3RhJ10/PyfigJQnKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzZiNzI4MCc+Ii5lc2NfaHRtbCgkclsnd2hhdHNhcHAnXT8/JHJbJ2NsaWVudGUnXT8/J+KAlCcpLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweCc+Ii52bTJfZmluX2ZtdF9yKCRyWydwcmVjb192ZW5kYSddPz8wKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiNlZjQ0NDQnPiIudm0yX2Zpbl9mbXRfcigkYykuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4Jz4iLnZtMl9maW5fZm10X3IoJGVudCkuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4Jz4iLigkZnA+MD92bTJfZmluX2ZtdF9yKCRmcCk6J+KAlCcpLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzEwYjk4MSc+Ii52bTJfZmluX2ZtdF9yKCRiKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjwvdHI+IjsKICAgIH0KICAgIGVjaG8gJzwvdGJvZHk+JzsKICAgIGVjaG8gIjx0Zm9vdD48dHIgc3R5bGU9J2JhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXItdG9wOjJweCBzb2xpZCAjZTVlN2ViJz4iOwogICAgZWNobyAiPHRkIGNvbHNwYW49JzMnIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzcHgnPiIuY291bnQoJGZpbHRlcmVkKS4iIHJlZ2lzdHJvKHMpPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6I2VmNDQ0NCc+Ii52bTJfZmluX2ZtdF9yKCR0b3RfYykuIjwvdGQ+IjsKICAgIGVjaG8gIjx0ZCBjb2xzcGFuPScyJz48L3RkPiI7CiAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMTBiOTgxJz4iLnZtMl9maW5fZm10X3IoJHRvdF9iKS4iPC90ZD4iOwogICAgZWNobyAiPC90cj48L3Rmb290PjwvdGFibGU+PC9kaXY+IjsKfQoKCi8vIOKUgOKUgCBIRUxQRVI6IERpYSBkYSBzZW1hbmEgUFQtQlIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9kaWFfc2VtYW5hX3B0YnIoICR0cyApIHsKICAgICRtYXAgPSBbCiAgICAgICAgJ1N1bmRheScgICAgPT4gJ0RvbWluZ28nLAogICAgICAgICdNb25kYXknICAgID0+ICdTZWd1bmRhLWZlaXJhJywKICAgICAgICAnVHVlc2RheScgICA9PiAnVGVyw6dhLWZlaXJhJywKICAgICAgICAnV2VkbmVzZGF5JyA9PiAnUXVhcnRhLWZlaXJhJywKICAgICAgICAnVGh1cnNkYXknICA9PiAnUXVpbnRhLWZlaXJhJywKICAgICAgICAnRnJpZGF5JyAgICA9PiAnU2V4dGEtZmVpcmEnLAogICAgICAgICdTYXR1cmRheScgID0+ICdTw6FiYWRvJywKICAgIF07CiAgICByZXR1cm4gJG1hcFsgZGF0ZSgnbCcsICR0cykgXSA/PyAnJzsKfQoKLy8g4pSA4pSAIEhFTFBFUjogRXh0cmFpciBkYXRhIGRvIGV2ZW50byBkZSB1bSBwZWRpZG8gV0Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9nZXRfb3JkZXJfZXZlbnRfdHMoICRvcmRlciApIHsKICAgIGZvcmVhY2ggKCAkb3JkZXItPmdldF9pdGVtcygpIGFzICRpdGVtICkgewogICAgICAgICRiZCA9ICRpdGVtLT5nZXRfbWV0YSgneWl0aF9ib29raW5nX2RhdGEnKTsKICAgICAgICBpZiAoIGlzX3N0cmluZygkYmQpICkgJGJkID0gbWF5YmVfdW5zZXJpYWxpemUoJGJkKTsKICAgICAgICBpZiAoIGlzX2FycmF5KCRiZCkgJiYgISBlbXB0eSgkYmRbJ2Zyb20nXSkgKSB7CiAgICAgICAgICAgICR0cyA9IGlzX251bWVyaWMoJGJkWydmcm9tJ10pID8gKGludCkkYmRbJ2Zyb20nXSA6IHN0cnRvdGltZSgkYmRbJ2Zyb20nXSk7CiAgICAgICAgICAgIGlmICggJHRzID4gMCApIHJldHVybiAkdHM7CiAgICAgICAgfQogICAgfQogICAgZm9yZWFjaCAoIFsnX2RhdGFfZXZlbnRvJywnZGF0YV9ldmVudG8nLCdfeWl0aF9ib29raW5nX3N0YXJ0J10gYXMgJG1rICkgewogICAgICAgICR2ID0gJG9yZGVyLT5nZXRfbWV0YSgkbWspOwogICAgICAgIGlmICggJHYgKSB7CiAgICAgICAgICAgICR0cyA9IGlzX251bWVyaWMoJHYpID8gKGludCkkdiA6IHN0cnRvdGltZSgkdik7CiAgICAgICAgICAgIGlmICggJHRzID4gMCApIHJldHVybiAkdHM7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7Cn0KCi8vIOKUgOKUgCBUQUIgUG9yIEV2ZW50byAoUmVnaW1lIGRlIENvbXBldMOqbmNpYSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9maW5fdGFiX2NvbXBldGVuY2lhKCAkcmVjZWJlcl9yb3dzLCAkcGFnYXJfcm93cywgJHNlbF9tb250aCApIHsKICAgIGVjaG8gJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxMnB4O2ZsZXgtd3JhcDp3cmFwIj4nOwogICAgZWNobyAnPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2RjZmNlNztjb2xvcjojMTU4MDNkO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtsZXR0ZXItc3BhY2luZzouNXB4Ij7wn5OFIFJFR0lNRSBERSBDT01QRVTDik5DSUE8L3NwYW4+JzsKICAgIGVjaG8gJzxzcGFuIHN0eWxlPSJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxMnB4Ij5SZWNlaXRhcyBlIGRlc3Blc2FzIHBlbG8gbcOqcyBlbSBxdWUgbyBldmVudG8gYWNvbnRlY2U8L3NwYW4+JzsKICAgIGVjaG8gJzwvZGl2Pic7CiAgICBbJHNlbF95ciwgJHNlbF9tb10gPSBleHBsb2RlKCctJywgJHNlbF9tb250aCk7CiAgICAkc2VsX2tleSA9ICRzZWxfeXIgLiAkc2VsX21vOyAvLyBZWVlZTU0KCiAgICAkbW5hbWVzX3B0ID0gWwogICAgICAgICcwMSc9PidKYW5laXJvJywnMDInPT4nRmV2ZXJlaXJvJywnMDMnPT4nTWFyw6dvJywnMDQnPT4nQWJyaWwnLAogICAgICAgICcwNSc9PidNYWlvJywnMDYnPT4nSnVuaG8nLCcwNyc9PidKdWxobycsJzA4Jz0+J0Fnb3N0bycsCiAgICAgICAgJzA5Jz0+J1NldGVtYnJvJywnMTAnPT4nT3V0dWJybycsJzExJz0+J05vdmVtYnJvJywnMTInPT4nRGV6ZW1icm8nLAogICAgXTsKCiAgICAkYnlfbW9udGggPSBbXTsKCiAgICAvLyBBZ3J1cGEgQSBSRUNFQkVSIHBvciBtw6pzIGRvIGV2ZW50bwogICAgZm9yZWFjaCAoKGFycmF5KSRyZWNlYmVyX3Jvd3MgYXMgJHIpIHsKICAgICAgICAkZGYgPSB0cmltKCRyWydkYXRhX2Zlc3RhJ10gPz8gJycpOwogICAgICAgIGlmICghJGRmKSBjb250aW51ZTsKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcvJywgJGRmKTsKICAgICAgICBpZiAoY291bnQoJHBhcnRzKSA8IDMpIGNvbnRpbnVlOwogICAgICAgICRtZXNfbnVtID0gc3ByaW50ZignJTAyZCcsIChpbnQpJHBhcnRzWzFdKTsKICAgICAgICAkYW5vX251bSA9IHNwcmludGYoJyUwNGQnLCAoaW50KSRwYXJ0c1syXSk7CiAgICAgICAgJGtleSA9ICRhbm9fbnVtIC4gJG1lc19udW07CiAgICAgICAgaWYgKCFpc3NldCgkYnlfbW9udGhbJGtleV0pKSB7CiAgICAgICAgICAgICRieV9tb250aFska2V5XSA9IFsKICAgICAgICAgICAgICAgICdsYWJlbCcgICAgID0+ICgkbW5hbWVzX3B0WyRtZXNfbnVtXSA/PyAnPycpIC4gJyAnIC4gJGFub19udW0sCiAgICAgICAgICAgICAgICAncmVjZWl0YScgICA9PiAwLCAncmVjZWJpZG8nICA9PiAwLCAnYV9yZWNlYmVyJyA9PiAwLAogICAgICAgICAgICAgICAgJ2N1c3RvJyAgICAgPT4gMCwgJ3BhZ29fcGFyYycgPT4gMCwgJ2FfcGFnYXInICAgPT4gMCwKICAgICAgICAgICAgICAgICdicnV0bycgICAgID0+IDAsICduX2V2ZW50b3MnID0+IDAsCiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgICAgICRlbnRyYWRhID0gKGZsb2F0KSgkclsnZW50cmFkYSddID8/IDApOwogICAgICAgICRmaW5hbCAgID0gKGZsb2F0KSgkclsnZmluYWwnXSAgID8/IDApOwogICAgICAgICRwYWdvICAgID0gIWVtcHR5KCRyWydwYWdvJ10pOwogICAgICAgICRieV9tb250aFska2V5XVsncmVjZWl0YSddICAgKz0gJGVudHJhZGEgKyAkZmluYWw7CiAgICAgICAgJGJ5X21vbnRoWyRrZXldWydyZWNlYmlkbyddICArPSAkZW50cmFkYSArICgkcGFnbyA/ICRmaW5hbCA6IDApOwogICAgICAgICRieV9tb250aFska2V5XVsnYV9yZWNlYmVyJ10gKz0gJHBhZ28gPyAwIDogJGZpbmFsOwogICAgICAgICRieV9tb250aFska2V5XVsnbl9ldmVudG9zJ10gKz0gMTsKICAgIH0KCiAgICAvLyBBZ3J1cGEgQSBQQUdBUiBwb3IgbcOqcyBkbyBldmVudG8KICAgIGZvcmVhY2ggKChhcnJheSkkcGFnYXJfcm93cyBhcyAkcikgewogICAgICAgICRkZiA9IHRyaW0oJHJbJ2RhdGFfZmVzdGEnXSA/PyAnJyk7CiAgICAgICAgaWYgKCEkZGYpIGNvbnRpbnVlOwogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkZGYpOwogICAgICAgIGlmIChjb3VudCgkcGFydHMpIDwgMykgY29udGludWU7CiAgICAgICAgJG1lc19udW0gPSBzcHJpbnRmKCclMDJkJywgKGludCkkcGFydHNbMV0pOwogICAgICAgICRhbm9fbnVtID0gc3ByaW50ZignJTA0ZCcsIChpbnQpJHBhcnRzWzJdKTsKICAgICAgICAka2V5ID0gJGFub19udW0gLiAkbWVzX251bTsKICAgICAgICBpZiAoIWlzc2V0KCRieV9tb250aFska2V5XSkpIHsKICAgICAgICAgICAgJGJ5X21vbnRoWyRrZXldID0gWwogICAgICAgICAgICAgICAgJ2xhYmVsJyAgICAgPT4gKCRtbmFtZXNfcHRbJG1lc19udW1dID8/ICc/JykgLiAnICcgLiAkYW5vX251bSwKICAgICAgICAgICAgICAgICdyZWNlaXRhJyAgID0+IDAsICdyZWNlYmlkbycgID0+IDAsICdhX3JlY2ViZXInID0+IDAsCiAgICAgICAgICAgICAgICAnY3VzdG8nICAgICA9PiAwLCAncGFnb19wYXJjJyA9PiAwLCAnYV9wYWdhcicgICA9PiAwLAogICAgICAgICAgICAgICAgJ2JydXRvJyAgICAgPT4gMCwgJ25fZXZlbnRvcycgPT4gMCwKICAgICAgICAgICAgXTsKICAgICAgICB9CiAgICAgICAgJGJ5X21vbnRoWyRrZXldWydjdXN0byddICAgICArPSAoZmxvYXQpKCRyWydjdXN0b19wYXJjZWlybyddID8/IDApOwogICAgICAgICRieV9tb250aFska2V5XVsncGFnb19wYXJjJ10gKz0gKGZsb2F0KSgkclsnZW50cmFkYV9yZWNlYmlkYSddID8/ICRyWydlbnRyYWRhJ10gPz8gMCk7CiAgICAgICAgJGJ5X21vbnRoWyRrZXldWydhX3BhZ2FyJ10gICArPSAoZmxvYXQpKCRyWydmaW5hbF9wYWdhciddID8/IDApOwogICAgICAgICRieV9tb250aFska2V5XVsnYnJ1dG8nXSAgICAgKz0gKGZsb2F0KSgkclsnYnJ1dG9fdml2YW1haXMnXSA/PyAwKTsKICAgIH0KCiAgICAvLyBJbmNsdWkgZXZlbnRvcyBmdXR1cm9zIGRhIEFHRU5EQSAobWVzZXMgc2VtIGRhZG9zIGZpbmFuY2Vpcm9zIGFpbmRhKQogICAgJGdzX2V2ZW50cyA9IGdldF9vcHRpb24oJ3ZtMl9hZ2VuZGFfZ3NoZWV0cycsIFtdKTsKICAgIGZvcmVhY2ggKChhcnJheSkkZ3NfZXZlbnRzIGFzICRldikgewogICAgICAgICRkZiA9IHRyaW0oJGV2WydkYXRhX2Zlc3RhJ10gPz8gJGV2WydkYXRhJ10gPz8gJycpOwogICAgICAgIGlmICghJGRmKSBjb250aW51ZTsKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcvJywgJGRmKTsKICAgICAgICBpZiAoY291bnQoJHBhcnRzKSA8IDMpIGNvbnRpbnVlOwogICAgICAgICRtZXNfbnVtID0gc3ByaW50ZignJTAyZCcsIChpbnQpJHBhcnRzWzFdKTsKICAgICAgICAkYW5vX251bSA9IHNwcmludGYoJyUwNGQnLCAoaW50KSRwYXJ0c1syXSk7CiAgICAgICAgJGtleSA9ICRhbm9fbnVtIC4gJG1lc19udW07CiAgICAgICAgaWYgKCFpc3NldCgkYnlfbW9udGhbJGtleV0pKSB7CiAgICAgICAgICAgICRieV9tb250aFska2V5XSA9IFsKICAgICAgICAgICAgICAgICdsYWJlbCcgICAgICAgPT4gKCRtbmFtZXNfcHRbJG1lc19udW1dID8/ICc/JykgLiAnICcgLiAkYW5vX251bSwKICAgICAgICAgICAgICAgICdyZWNlaXRhJyAgICAgPT4gMCwgJ3JlY2ViaWRvJyAgPT4gMCwgJ2FfcmVjZWJlcicgPT4gMCwKICAgICAgICAgICAgICAgICdjdXN0bycgICAgICAgPT4gMCwgJ3BhZ29fcGFyYycgPT4gMCwgJ2FfcGFnYXInICAgPT4gMCwKICAgICAgICAgICAgICAgICdicnV0bycgICAgICAgPT4gMCwgJ25fZXZlbnRvcycgPT4gMCwgJ2FnZW5kYV9vbmx5JyA9PiB0cnVlLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICAvLyBzw7MgY29udGEgZXZlbnRvcyBkYSBhZ2VuZGEg4oCUIG7Do28gZHVwbGljYSBjb250YWdlbSBkZSBBIFJFQ0VCRVIKICAgICAgICBpZiAoIGVtcHR5KCRieV9tb250aFska2V5XVsnYWdlbmRhX29ubHknXSkgKSBjb250aW51ZTsKICAgICAgICAkYnlfbW9udGhbJGtleV1bJ25fZXZlbnRvcyddICs9IDE7CiAgICB9CgoKICAgIC8vIOKUgOKUgOKUgCBGb250ZSBXQzogcGVkaWRvcyBjb20gZGF0YSBkbyBldmVudG8gdmlhIFlJVEgg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICAvLyBQcmVlbmNoZSBtZXNlcyBxdWUgbyBBIFJFQ0VCRVIgbsOjbyBjb2JyZSAoZXg6IGV2ZW50b3MgZnV0dXJvcyByZWPDqW0tdmVuZGlkb3MpCiAgICAkcmVjZWJlcl9tb250aHMgPSBbXTsKICAgIGZvcmVhY2ggKCAoYXJyYXkpJHJlY2ViZXJfcm93cyBhcyAkciApIHsKICAgICAgICAkZGYgPSB0cmltKCRyWydkYXRhX2Zlc3RhJ10gPz8gJycpOwogICAgICAgIGlmICggISRkZiApIGNvbnRpbnVlOwogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkZGYpOwogICAgICAgIGlmICggY291bnQoJHBhcnRzKSA8IDMgKSBjb250aW51ZTsKICAgICAgICAkcmVjZWJlcl9tb250aHNbIHNwcmludGYoJyUwNGQlMDJkJywgKGludCkkcGFydHNbMl0sIChpbnQpJHBhcnRzWzFdKSBdID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAoIGZ1bmN0aW9uX2V4aXN0cygnd2NfZ2V0X29yZGVycycpICkgewogICAgICAgICR3Y19zdGF0dXNlcyA9IFsncHJvY2Vzc2luZycsJ2NvbnRyYWN0LXNpZ25lZCcsJ3NpZ25pbmctcGVuZGluZycsJ29uLWhvbGQnLCdjb21wbGV0ZWQnXTsKICAgICAgICAkd2Nfb3JkZXJzICAgPSB3Y19nZXRfb3JkZXJzKFsKICAgICAgICAgICAgJ3N0YXR1cycgID0+ICR3Y19zdGF0dXNlcywKICAgICAgICAgICAgJ2xpbWl0JyAgID0+IDEwMDAsCiAgICAgICAgICAgICdvcmRlcmJ5JyA9PiAnZGF0ZScsCiAgICAgICAgICAgICdvcmRlcicgICA9PiAnREVTQycsCiAgICAgICAgXSk7CiAgICAgICAgZm9yZWFjaCAoICR3Y19vcmRlcnMgYXMgJHdvcmRlciApIHsKICAgICAgICAgICAgJGV2X3RzID0gdm0yX2dldF9vcmRlcl9ldmVudF90cyggJHdvcmRlciApOwogICAgICAgICAgICBpZiAoICEgJGV2X3RzICkgY29udGludWU7CiAgICAgICAgICAgICRtZXNfbnVtID0gc3ByaW50ZignJTAyZCcsIChpbnQpIHdwX2RhdGUoJ20nLCAkZXZfdHMpICk7CiAgICAgICAgICAgICRhbm9fbnVtID0gc3ByaW50ZignJTA0ZCcsIChpbnQpIHdwX2RhdGUoJ1knLCAkZXZfdHMpICk7CiAgICAgICAgICAgICRrZXkgICAgID0gJGFub19udW0gLiAkbWVzX251bTsKICAgICAgICAgICAgLy8gU8OzIGFkaWNpb25hIHNlIEEgUkVDRUJFUiBhaW5kYSBuw6NvIGNvYnJlIGVzdGUgbcOqcwogICAgICAgICAgICBpZiAoICEgZW1wdHkoJHJlY2ViZXJfbW9udGhzWyRrZXldKSApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoICEgaXNzZXQoJGJ5X21vbnRoWyRrZXldKSApIHsKICAgICAgICAgICAgICAgICRieV9tb250aFska2V5XSA9IFsKICAgICAgICAgICAgICAgICAgICAnbGFiZWwnICAgICAgPT4gKCRtbmFtZXNfcHRbJG1lc19udW1dID8/ICc/JykgLiAnICcgLiAkYW5vX251bSwKICAgICAgICAgICAgICAgICAgICAncmVjZWl0YScgICAgPT4gMCwgJ3JlY2ViaWRvJyAgID0+IDAsICdhX3JlY2ViZXInID0+IDAsCiAgICAgICAgICAgICAgICAgICAgJ2N1c3RvJyAgICAgID0+IDAsICdwYWdvX3BhcmMnICA9PiAwLCAnYV9wYWdhcicgICA9PiAwLAogICAgICAgICAgICAgICAgICAgICdicnV0bycgICAgICA9PiAwLCAnbl9ldmVudG9zJyAgPT4gMCwgJ3djX3NvdXJjZScgPT4gdHJ1ZSwKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRvdGFsID0gKGZsb2F0KSAkd29yZGVyLT5nZXRfdG90YWwoKTsKICAgICAgICAgICAgJHN0ICAgID0gJHdvcmRlci0+Z2V0X3N0YXR1cygpOwogICAgICAgICAgICAkYnlfbW9udGhbJGtleV1bJ3JlY2VpdGEnXSAgICs9ICR0b3RhbDsKICAgICAgICAgICAgJGJ5X21vbnRoWyRrZXldWyduX2V2ZW50b3MnXSArPSAxOwogICAgICAgICAgICBpZiAoIGluX2FycmF5KCRzdCwgWydwcm9jZXNzaW5nJywnY29tcGxldGVkJ10sIHRydWUpICkgewogICAgICAgICAgICAgICAgJGJ5X21vbnRoWyRrZXldWydyZWNlYmlkbyddICArPSAkdG90YWw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkYnlfbW9udGhbJGtleV1bJ2FfcmVjZWJlciddICs9ICR0b3RhbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBrcnNvcnQoJGJ5X21vbnRoKTsgLy8gbWFpcyByZWNlbnRlIHByaW1laXJvCgogICAgaWYgKGVtcHR5KCRieV9tb250aCkpIHsKICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjYwcHg7Y29sb3I6IzljYTNhZiI+U2VtIGRhZG9zLiBDbGlxdWUgZW0g8J+UhCBTaW5jcm9uaXphciBwYXJhIGNhcnJlZ2FyLjwvZGl2Pic7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRzZWwgPSAkYnlfbW9udGhbJHNlbF9rZXldID8/IG51bGw7CgogICAgLy8g4pSA4pSAIEtQSSBDYXJkcyBkbyBtw6pzIHNlbGVjaW9uYWRvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgaWYgKCRzZWwpIHsKICAgICAgICAkbWFyZ2VtICAgPSAkc2VsWydyZWNlaXRhJ10gLSAkc2VsWydjdXN0byddOwogICAgICAgICRwY3RfbWcgICA9ICRzZWxbJ3JlY2VpdGEnXSA+IDAgPyAoJG1hcmdlbSAvICRzZWxbJ3JlY2VpdGEnXSAqIDEwMCkgOiAwOwogICAgICAgICRsaXFfY2FpICA9ICRzZWxbJ3JlY2ViaWRvJ10gLSAkc2VsWydwYWdvX3BhcmMnXTsKICAgICAgICAkbGlxX2NvbCAgPSAkbGlxX2NhaSA+PSAwID8gJyMxMGI5ODEnIDogJyNlZjQ0NDQnOwogICAgICAgICRjYXJkcyA9IFsKICAgICAgICAgICAgWyfwn5KwIFJlY2VpdGEgQnJ1dGEnLCAgICAgIHZtMl9maW5fZm10X3IoJHNlbFsncmVjZWl0YSddKSwgICAgJ0ZhdHVyYW1lbnRvIHRvdGFsIGRlIGV2ZW50b3MnLCAnIzEwYjk4MSddLAogICAgICAgICAgICBbJ/CfkrggQ01WJywgICAgICAgICAgICAgICAgdm0yX2Zpbl9mbXRfcigkc2VsWydjdXN0byddKSwgICAgICAnQ3VzdG8gZGFzIE1lcmNhZG9yaWFzIFZlbmRpZGFzJywgJyNlZjQ0NDQnXSwKICAgICAgICAgICAgWyfwn5OKIE1hcmdlbSBCcnV0YScsICAgICAgIHZtMl9maW5fZm10X3IoJG1hcmdlbSksICAgICAgICAgICAgbnVtYmVyX2Zvcm1hdCgkcGN0X21nLDEsJywnLCcuJykuJyUgZGUgbWFyZ2VtJywgJG1hcmdlbSA+PSAwID8gJyM3YzNhZWQnIDogJyNlZjQ0NDQnXSwKICAgICAgICAgICAgWyfinIUgUmVjZWJpZG8nLCAgICAgICAgICAgdm0yX2Zpbl9mbXRfcigkc2VsWydyZWNlYmlkbyddKSwgICAnRW50cmFkYXMgKyBmaW5haXMgY29uZmlybWFkb3MnLCAnIzNiODJmNiddLAogICAgICAgICAgICBbJ+KPsyBBIFJlY2ViZXInLCAgICAgICAgICB2bTJfZmluX2ZtdF9yKCRzZWxbJ2FfcmVjZWJlciddKSwgICdGaW5haXMgcGVuZGVudGVzIChjbGllbnRlcyknLCAnI2Y1OWUwYiddLAogICAgICAgICAgICBbJ+KchSBQYWdvIGEgUGFyY2Vpcm9zJywgICB2bTJfZmluX2ZtdF9yKCRzZWxbJ3BhZ29fcGFyYyddKSwgJ0VudHJhZGFzIHBhZ2FzIGEgcGFyY2Vpcm9zJywgJyM2MzY2ZjEnXSwKICAgICAgICAgICAgWyfij7MgQSBQYWdhciBhIFBhcmNlaXJvcycsdm0yX2Zpbl9mbXRfcigkc2VsWydhX3BhZ2FyJ10pLCAgICdGaW5haXMgZGV2aWRvcyBhIHBhcmNlaXJvcycsICcjZjk3MzE2J10sCiAgICAgICAgXTsKICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMTUwcHgsMWZyKSk7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToyMHB4Ij4nOwogICAgICAgIGZvcmVhY2ggKCRjYXJkcyBhcyBbJHRpdGxlLCR2YWwsJHN1YiwkY29sb3JdKSB7CiAgICAgICAgICAgIGVjaG8gIjxkaXYgc3R5bGU9J2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxNnB4IDE4cHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDgpO2JvcmRlci1sZWZ0OjRweCBzb2xpZCB7JGNvbG9yfSc+IjsKICAgICAgICAgICAgZWNobyAiPGRpdiBzdHlsZT0nZm9udC1zaXplOjExcHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjRweCc+Ii5lc2NfaHRtbCgkdGl0bGUpLiI8L2Rpdj4iOwogICAgICAgICAgICBlY2hvICI8ZGl2IHN0eWxlPSdmb250LXNpemU6MTlweDtmb250LXdlaWdodDo3MDA7Y29sb3I6eyRjb2xvcn0nPiIuZXNjX2h0bWwoJHZhbCkuIjwvZGl2PiI7CiAgICAgICAgICAgIGVjaG8gIjxkaXYgc3R5bGU9J2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWY7bWFyZ2luLXRvcDo0cHgnPiIuZXNjX2h0bWwoJHN1YikuIjwvZGl2PiI7CiAgICAgICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvZGl2Pic7CgogICAgICAgIC8vIFNhbGRvIGRlIGNhaXhhIGRvIG3DqnMKICAgICAgICBlY2hvICI8ZGl2IHN0eWxlPSdiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTRweCAyMHB4O2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjA4KTttYXJnaW4tYm90dG9tOjI0cHg7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDoyMHB4O2FsaWduLWl0ZW1zOmNlbnRlcic+IjsKICAgICAgICBlY2hvICI8ZGl2PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwJz7wn4+mIFNhbGRvIGzDrXF1aWRvIGRlIGNhaXhhIOKAlCBldmVudG9zIGVtICIuZXNjX2h0bWwoJHNlbFsnbGFiZWwnXSkuIjwvc3Bhbj48YnI+IjsKICAgICAgICBlY2hvICI8c3BhbiBzdHlsZT0nZm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToyNHB4O2NvbG9yOnskbGlxX2NvbH0nPiIudm0yX2Zpbl9mbXRfcigkbGlxX2NhaSkuIjwvc3Bhbj4iOwogICAgICAgIGVjaG8gIjxzcGFuIHN0eWxlPSdjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi1sZWZ0OjEwcHgnPnJlY2ViaWRvIGRlIGNsaWVudGVzIOKIkiBwYWdvIGEgcGFyY2Vpcm9zPC9zcGFuPjwvZGl2PiI7CiAgICAgICAgZWNobyAiPGRpdiBzdHlsZT0nY29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweCc+Ii5pbnR2YWwoJHNlbFsnbl9ldmVudG9zJ10pLiIgZXZlbnRvKHMpPC9kaXY+IjsKICAgICAgICBlY2hvICI8L2Rpdj4iOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTRweCAyMHB4O2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjA4KTttYXJnaW4tYm90dG9tOjI0cHg7Y29sb3I6IzljYTNhZjt0ZXh0LWFsaWduOmNlbnRlciI+U2VtIGV2ZW50b3MgZW0gJy5lc2NfaHRtbCgoJG1uYW1lc19wdFskc2VsX21vXSA/PyAnJykuJyAnLiRzZWxfeXIpLicuPC9kaXY+JzsKICAgIH0KCiAgICAvLyDilIDilIAgVGFiZWxhIGNvbnNvbGlkYWRhIGRlIHRvZG9zIG9zIG1lc2VzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgdm0yX2Zpbl9maWx0ZXJfYmFyKCd2bTItZmluLWNvbXAnLCAnRmlsdHJhciBwb3IgbcOqcy4uLicpOwogICAgZWNobyAnPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDphdXRvIj4nOwogICAgZWNobyAnPHRhYmxlIGlkPSJ2bTItZmluLWNvbXAiIHN0eWxlPSJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4wOCk7bWluLXdpZHRoOjkwMHB4Ij4nOwogICAgdm0yX2Zpbl90aGVhZChbJ03DqnMgRXZlbnRvJywnRXZlbnRvcycsJ1JlY2VpdGEgQnJ1dGEnLCdDTVYnLCdNYXJnZW0gQnJ1dGEnLCclIE1nJywn4pyFIFJlY2ViaWRvJywn4o+zIEEgUmVjZWJlcicsJ+KchSBQYWdvIFBhcmMuJywn4o+zIEEgUGFnYXInXSwgJ3ZtMi1maW4tY29tcCcsIDEpOwogICAgZWNobyAnPHRib2R5Pic7CgogICAgJHRvdCA9IFsncmVjZWl0YSc9PjAsJ2N1c3RvJz0+MCwncmVjZWJpZG8nPT4wLCdhX3JlY2ViZXInPT4wLCdwYWdvX3BhcmMnPT4wLCdhX3BhZ2FyJz0+MCwnbl9ldmVudG9zJz0+MF07CgogICAgZm9yZWFjaCAoJGJ5X21vbnRoIGFzICRrZXkgPT4gJHJvdykgewogICAgICAgICRtZyAgICA9ICRyb3dbJ3JlY2VpdGEnXSAtICRyb3dbJ2N1c3RvJ107CiAgICAgICAgJHBjdCAgID0gJHJvd1sncmVjZWl0YSddID4gMCA/ICgkbWcgLyAkcm93WydyZWNlaXRhJ10gKiAxMDApIDogMDsKICAgICAgICAkbGMgICAgPSAkbWcgPj0gMCA/ICcjMTBiOTgxJyA6ICcjZWY0NDQ0JzsKICAgICAgICAkaXNfc2VsID0gKCRrZXkgPT09ICRzZWxfa2V5KTsKICAgICAgICAkYmcgICAgPSAkaXNfc2VsID8gJ2JhY2tncm91bmQ6I2Y1ZjNmZjsnIDogJyc7CiAgICAgICAgJGZ3ICAgID0gJGlzX3NlbCA/ICdmb250LXdlaWdodDo3MDA7JyA6ICcnOwogICAgICAgIGZvcmVhY2ggKFsncmVjZWl0YScsJ2N1c3RvJywncmVjZWJpZG8nLCdhX3JlY2ViZXInLCdwYWdvX3BhcmMnLCdhX3BhZ2FyJywnbl9ldmVudG9zJ10gYXMgJGspCiAgICAgICAgICAgICR0b3RbJGtdICs9ICRyb3dbJGtdOwogICAgICAgICRhZ2VuZGFfYmFkZ2UgPSAhZW1wdHkoJHJvd1snYWdlbmRhX29ubHknXSkgPyAnIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNkYmVhZmU7Y29sb3I6IzFkNGVkODtmb250LXNpemU6MTBweDtwYWRkaW5nOjFweCA2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+ThSBhZ2VuZGE8L3NwYW4+JyA6ICcnOwogICAgICAgICR3Y19iYWRnZSA9ICFlbXB0eSgkcm93Wyd3Y19zb3VyY2UnXSkgPyAnIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNkYmVhZmU7Y29sb3I6IzFkNGVkODtmb250LXNpemU6MTBweDtwYWRkaW5nOjFweCA2cHg7Ym9yZGVyLXJhZGl1czoxMHB4Ij7wn5uSIFdDPC9zcGFuPicgOiAnJzsKICAgICAgICBlY2hvICI8dHIgc3R5bGU9J2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmM2Y0ZjY7eyRiZ30nPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt7JGZ3fSc+Ii5lc2NfaHRtbCgkcm93WydsYWJlbCddKS4kYWdlbmRhX2JhZGdlLiR3Y19iYWRnZS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojNmI3MjgwJz4iLmludHZhbCgkcm93WyduX2V2ZW50b3MnXSkuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQ7Zm9udC13ZWlnaHQ6NjAwJz4iLnZtMl9maW5fZm10X3IoJHJvd1sncmVjZWl0YSddKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojZWY0NDQ0Jz4iLnZtMl9maW5fZm10X3IoJHJvd1snY3VzdG8nXSkuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6eyRsY307Zm9udC13ZWlnaHQ6NjAwJz4iLnZtMl9maW5fZm10X3IoJG1nKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjp7JGxjfSc+Ii5udW1iZXJfZm9ybWF0KCRwY3QsMSwnLCcsJy4nKS4nJScuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzNiODJmNic+Ii52bTJfZmluX2ZtdF9yKCRyb3dbJ3JlY2ViaWRvJ10pLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiNmNTllMGInPiIudm0yX2Zpbl9mbXRfcigkcm93WydhX3JlY2ViZXInXSkuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzYzNjZmMSc+Ii52bTJfZmluX2ZtdF9yKCRyb3dbJ3BhZ29fcGFyYyddKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojZjk3MzE2Jz4iLnZtMl9maW5fZm10X3IoJHJvd1snYV9wYWdhciddKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjwvdHI+IjsKICAgIH0KICAgIGVjaG8gJzwvdGJvZHk+JzsKCiAgICAvLyBGb290ZXIgdG90YWlzCiAgICAkdG90X21nICA9ICR0b3RbJ3JlY2VpdGEnXSAtICR0b3RbJ2N1c3RvJ107CiAgICAkdG90X3BjdCA9ICR0b3RbJ3JlY2VpdGEnXSA+IDAgPyAoJHRvdF9tZyAvICR0b3RbJ3JlY2VpdGEnXSAqIDEwMCkgOiAwOwogICAgJHRvdF9sYyAgPSAkdG90X21nID49IDAgPyAnIzEwYjk4MScgOiAnI2VmNDQ0NCc7CiAgICBlY2hvICI8dGZvb3Q+PHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyLXRvcDoycHggc29saWQgI2U1ZTdlYic+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxM3B4Jz5UT1RBTCAoIi5jb3VudCgkYnlfbW9udGgpLiIgbWVzZXMpPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpyaWdodCc+Ii5pbnR2YWwoJHRvdFsnbl9ldmVudG9zJ10pLiI8L3RkPiI7CiAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LWFsaWduOnJpZ2h0Jz4iLnZtMl9maW5fZm10X3IoJHRvdFsncmVjZWl0YSddKS4iPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojZWY0NDQ0Jz4iLnZtMl9maW5fZm10X3IoJHRvdFsnY3VzdG8nXSkuIjwvdGQ+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6eyR0b3RfbGN9Jz4iLnZtMl9maW5fZm10X3IoJHRvdF9tZykuIjwvdGQ+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6eyR0b3RfbGN9Jz4iLm51bWJlcl9mb3JtYXQoJHRvdF9wY3QsMSwnLCcsJy4nKS4nJScuIjwvdGQ+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzNiODJmNic+Ii52bTJfZmluX2ZtdF9yKCR0b3RbJ3JlY2ViaWRvJ10pLiI8L3RkPiI7CiAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiNmNTllMGInPiIudm0yX2Zpbl9mbXRfcigkdG90WydhX3JlY2ViZXInXSkuIjwvdGQ+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzYzNjZmMSc+Ii52bTJfZmluX2ZtdF9yKCR0b3RbJ3BhZ29fcGFyYyddKS4iPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojZjk3MzE2Jz4iLnZtMl9maW5fZm10X3IoJHRvdFsnYV9wYWdhciddKS4iPC90ZD4iOwogICAgZWNobyAiPC90cj48L3Rmb290PjwvdGFibGU+PC9kaXY+IjsKCiAgICAvLyBMZWdlbmRhCiAgICBlY2hvICI8ZGl2IHN0eWxlPSdtYXJnaW4tdG9wOjE2cHg7cGFkZGluZzoxMnB4IDE2cHg7YmFja2dyb3VuZDojZjhmYWZjO2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODA7bGluZS1oZWlnaHQ6MS44Jz4iOwogICAgZWNobyAiPHN0cm9uZz7wn5OaIEdsb3Nzw6FyaW86PC9zdHJvbmc+Jm5ic3A7IjsKICAgIGVjaG8gIjxzdHJvbmc+UmVjZWl0YSBCcnV0YTwvc3Ryb25nPiA9IHZhbG9yIHRvdGFsIGNvbnRyYXRhZG8gKGVudHJhZGEgKyBmaW5hbCBhIHJlY2ViZXIpIGRvcyBldmVudG9zIGRvIG3DqnMgJm5ic3A74oCiJm5ic3A7ICI7CiAgICBlY2hvICI8c3Ryb25nPkNNVjwvc3Ryb25nPiA9IEN1c3RvIGRhIE1lcmNhZG9yaWEgVmVuZGlkYSAoY3VzdG8gcGFyY2Vpcm9zL2FydGlzdGFzKSAmbmJzcDvigKImbmJzcDsgIjsKICAgIGVjaG8gIjxzdHJvbmc+TWFyZ2VtIEJydXRhPC9zdHJvbmc+ID0gUmVjZWl0YSDiiJIgQ01WICZuYnNwO+KAoiZuYnNwOyAiOwogICAgZWNobyAiPHN0cm9uZz5SZWdpbWUgZGUgQ29tcGV0w6puY2lhPC9zdHJvbmc+ID0gYWdydXBhZG8gcGVsYSA8ZW0+ZGF0YSBkbyBldmVudG88L2VtPiAo4omgIGRhdGEgZGEgdmVuZGEgbmEgYWJhIERSRSkiOwogICAgZWNobyAiPC9kaXY+IjsKfQoKLy8g4pSA4pSAIFRBQiBXb29Db21tZXJjZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2Zpbl90YWJfd29vKCAkc2VsX21vbnRoICkgewogICAgWyR5ciwkbW9dID0gZXhwbG9kZSgnLScsJHNlbF9tb250aCk7CiAgICAkZF9hZnRlciAgPSAieyR5cn0teyRtb30tMDEiOwogICAgJGRfYmVmb3JlID0gZGF0ZSgnWS1tLXQnLCBzdHJ0b3RpbWUoJGRfYWZ0ZXIpKTsKICAgICRpZHMgPSB3Y19nZXRfb3JkZXJzKFsnc3RhdHVzJz0+Wydwcm9jZXNzaW5nJywnY29tcGxldGVkJ10sJ2xpbWl0Jz0+MjAwLCdvcmRlcmJ5Jz0+J2RhdGUnLCdvcmRlcic9PidERVNDJywncmV0dXJuJz0+J2lkcycsCiAgICAgICAgJ2RhdGVfYWZ0ZXInPT4kZF9hZnRlci4nVDAwOjAwOjAwJywnZGF0ZV9iZWZvcmUnPT4kZF9iZWZvcmUuJ1QyMzo1OTo1OSddKTsKICAgIGlmIChlbXB0eSgkaWRzKSkgewogICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NjBweDtjb2xvcjojOWNhM2FmIj5TZW0gcGVkaWRvcyBXb29Db21tZXJjZSBlbSAnLmVzY19odG1sKHZtMl9tb250aF9sYWJlbF9wdCgkc2VsX21vbnRoKSkuJy48L2Rpdj4nOyByZXR1cm47CiAgICB9CiAgICAkdG90YWw9MDsKICAgIHZtMl9maW5fZmlsdGVyX2Jhcigndm0yLWZpbi13b28nLCAnRmlsdHJhciBwb3IgcGVkaWRvLCBjbGllbnRlLi4uJyk7CiAgICBlY2hvICc8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OmF1dG8iPic7CiAgICBlY2hvICc8dGFibGUgaWQ9InZtMi1maW4td29vIiBzdHlsZT0id2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDgpIj4nOwogICAgdm0yX2Zpbl90aGVhZChbJyNQZWRpZG8nLCdDbGllbnRlJywnRGF0YSBFdmVudG8nLCdWYWxvcicsJ0Zvcm1hIFBndG8nLCdTdGF0dXMnLCdDYWRhc3RybyddLCAndm0yLWZpbi13b28nLCAyKTsKICAgIGVjaG8gJzx0Ym9keT4nOwogICAgZm9yZWFjaCAoJGlkcyBhcyAkb2lkKSB7CiAgICAgICAgJG89d2NfZ2V0X29yZGVyKCRvaWQpOyBpZighJG8pY29udGludWU7CiAgICAgICAgJHZhbD0oZmxvYXQpJG8tPmdldF90b3RhbCgpOyAkdG90YWwrPSR2YWw7CiAgICAgICAgJGV2X3Jhdz0kby0+Z2V0X21ldGEoJ19iaWxsaW5nX2V2ZW50X2RhdGUnKTsgJGV2X3RzPXZtMl9ldmVudF9kYXRlX3RvX3RzKCRldl9yYXcpOwogICAgICAgICRldl9mbXQ9JGV2X3RzP2RhdGUoJ2QvbS9ZJywkZXZfdHMpOigkZXZfcmF3PzokZXZfcmF3KTsKICAgICAgICAkc3Q9JG8tPmdldF9zdGF0dXMoKTsKICAgICAgICBpZigkc3Q9PT0nY29tcGxldGVkJyl7JHNiZz0nI2QxZmFlNSc7JHNjPScjMDY1ZjQ2Jzskc2w9J+KchSBDb25jbHXDrWRvJzt9CiAgICAgICAgZWxzZWlmKCRzdD09PSdwcm9jZXNzaW5nJyl7JHNiZz0nI2RiZWFmZSc7JHNjPScjMWU0MGFmJzskc2w9J+Kame+4jyBQcm9jZXNzaW5nJzt9CiAgICAgICAgZWxzZXskc2JnPScjZjNmNGY2Jzskc2M9JyMzNzQxNTEnOyRzbD11Y2ZpcnN0KCRzdCk7fQogICAgICAgICRuYW1lPWVzY19odG1sKHRyaW0oJG8tPmdldF9iaWxsaW5nX2ZpcnN0X25hbWUoKS4nICcuJG8tPmdldF9iaWxsaW5nX2xhc3RfbmFtZSgpKSk7CiAgICAgICAgJHNhbGVfZGF0ZT0kby0+Z2V0X2RhdGVfY3JlYXRlZCgpPyRvLT5nZXRfZGF0ZV9jcmVhdGVkKCktPmRhdGUoJ2QvbS9ZJyk6J+KAlCc7CiAgICAgICAgJHBndG89ZXNjX2h0bWwoJG8tPmdldF9wYXltZW50X21ldGhvZF90aXRsZSgpPzon4oCUJyk7CiAgICAgICAgJG91cmw9YWRtaW5fdXJsKCdwb3N0LnBocD9wb3N0PScuaW50dmFsKCRvaWQpLicmYWN0aW9uPWVkaXQnKTsKICAgICAgICBlY2hvICI8dHIgc3R5bGU9J2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmM2Y0ZjYnPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweCc+PGEgaHJlZj0nIi5lc2NfdXJsKCRvdXJsKS4iJyBzdHlsZT0nY29sb3I6IzdjM2FlZDtmb250LXdlaWdodDo2MDAnPiMiLmludHZhbCgkb2lkKS4iPC9hPjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMCc+eyRuYW1lfTwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4Jz4iLmVzY19odG1sKCRldl9mbXQpLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDAnPlJcJCAiLm51bWJlcl9mb3JtYXQoJHZhbCwyLCcsJywnLicpLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDtjb2xvcjojNmI3MjgwJz57JHBndG99PC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHgnPjxzcGFuIHN0eWxlPSdwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDp7JHNiZ307Y29sb3I6eyRzY30nPnskc2x9PC9zcGFuPjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM2YjcyODAnPnskc2FsZV9kYXRlfTwvdGQ+IjsKICAgICAgICBlY2hvICI8L3RyPiI7CiAgICB9CiAgICBlY2hvICc8L3Rib2R5Pic7CiAgICBlY2hvICI8dGZvb3Q+PHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyLXRvcDoycHggc29saWQgI2U1ZTdlYic+IjsKICAgIGVjaG8gIjx0ZCBjb2xzcGFuPSczJyBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxM3B4Jz5UT1RBTCAoIi5jb3VudCgkaWRzKS4iIHBlZGlkb3MpPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzdjM2FlZCc+UlwkICIubnVtYmVyX2Zvcm1hdCgkdG90YWwsMiwnLCcsJy4nKS4iPC90ZD4iOwogICAgZWNobyAiPHRkIGNvbHNwYW49JzMnPjwvdGQ+PC90cj48L3Rmb290PjwvdGFibGU+PC9kaXY+IjsKfQoKLy8g4pSA4pSAIEFKQVg6IFBBR0FNRU5UT1Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX3NhdmVfcGF5bWVudCcsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfbm9uY2UnLCAnbm9uY2UnKTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRwYXJ0bmVyX2lkID0gaW50dmFsKCRfUE9TVFsncGFydG5lcl9pZCddID8/IDApOwogICAgJGFtb3VudCAgICAgPSBmbG9hdHZhbCgkX1BPU1RbJ2Ftb3VudCddID8/IDApOwogICAgJGR1ZV9kYXRlICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnZHVlX2RhdGUnXSA/PyAnJyk7CiAgICAkcmVmZXJlbmNlICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydyZWZlcmVuY2UnXSA/PyAnJyk7CiAgICAkbm90ZXMgICAgICA9IHNhbml0aXplX3RleHRhcmVhX2ZpZWxkKCRfUE9TVFsnbm90ZXMnXSA/PyAnJyk7CiAgICBpZiAoJGFtb3VudCA8PSAwKSB7IHdwX3NlbmRfanNvbl9lcnJvcignVmFsb3IgaW52w6FsaWRvJyk7IHJldHVybjsgfQogICAgJHIgPSAkd3BkYi0+aW5zZXJ0KCR3cGRiLT5wcmVmaXggLiAndm0yX3BheW1lbnRzJywgWwogICAgICAgICdwYXJ0bmVyX2lkJyAgPT4gJHBhcnRuZXJfaWQgPzogbnVsbCwKICAgICAgICAnYW1vdW50JyAgICAgID0+ICRhbW91bnQsCiAgICAgICAgJ2R1ZV9kYXRlJyAgICA9PiAkZHVlX2RhdGUgPzogbnVsbCwKICAgICAgICAncmVmZXJlbmNlJyAgID0+ICRyZWZlcmVuY2UsCiAgICAgICAgJ25vdGVzJyAgICAgICA9PiAkbm90ZXMsCiAgICAgICAgJ3N0YXR1cycgICAgICA9PiAncGVuZGluZycsCiAgICAgICAgJ2NyZWF0ZWRfYXQnICA9PiBjdXJyZW50X3RpbWUoJ215c3FsJyksCiAgICBdKTsKICAgIGlmICgkciA9PT0gZmFsc2UpIHdwX3NlbmRfanNvbl9lcnJvcigkd3BkYi0+bGFzdF9lcnJvcik7CiAgICBlbHNlIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnaWQnID0+ICR3cGRiLT5pbnNlcnRfaWRdKTsKfSk7CgphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9jb25maXJtX3BheW1lbnQnLCBmdW5jdGlvbigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX25vbmNlJywgJ25vbmNlJyk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkaWQgPSBpbnR2YWwoJF9QT1NUWydpZCddID8/IDApOwogICAgaWYgKCRpZCkgJHdwZGItPnVwZGF0ZSgkd3BkYi0+cHJlZml4IC4gJ3ZtMl9wYXltZW50cycsCiAgICAgICAgWydzdGF0dXMnPT4ncGFpZCcsICdwYWlkX2F0Jz0+Y3VycmVudF90aW1lKCdteXNxbCcpXSwgWydpZCc9PiRpZF0pOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoKTsKfSk7CgphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9kZWxldGVfcGF5bWVudCcsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfbm9uY2UnLCAnbm9uY2UnKTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRpZCA9IGludHZhbCgkX1BPU1RbJ2lkJ10gPz8gMCk7CiAgICBpZiAoJGlkKSAkd3BkYi0+ZGVsZXRlKCR3cGRiLT5wcmVmaXggLiAndm0yX3BheW1lbnRzJywgWydpZCc9PiRpZF0pOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoKTsKfSk7CgoKLy8g4pSA4pSAIFJFU1Q6IEZJTkFOQ0VJUk8gU1lOQyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbigncmVzdF9hcGlfaW5pdCcsIGZ1bmN0aW9uKCkgewogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9maW5hbmNlaXJvL3N5bmMnLCBbCiAgICAgICAgJ21ldGhvZHMnICAgICAgICAgICAgID0+ICdQT1NUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gJ3ZtMl9maW5fcmVzdF9yZWNlaXZlJywKICAgICAgICAncGVybWlzc2lvbl9jYWxsYmFjaycgPT4gJ3ZtMl9maW5fcmVzdF9hdXRoJywKICAgIF0pOwogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9maW5hbmNlaXJvL3N5bmMtc3RhdHVzJywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnR0VUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbCiAgICAgICAgICAgICAgICAnbGFzdF9zeW5jJyA9PiBnZXRfb3B0aW9uKCd2bTJfZmluX2xhc3Rfc3luYycsICcnKSwKICAgICAgICAgICAgICAgICdzeW5jaW5nJyAgID0+IChib29sKSBnZXRfb3B0aW9uKCd2bTJfZmluX3N5bmNfcGVuZGluZycsIDApLAogICAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiBmdW5jdGlvbigpIHsgcmV0dXJuIGN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJyk7IH0sCiAgICBdKTsKfSk7CmZ1bmN0aW9uIHZtMl9maW5fcmVzdF9hdXRoKCAkcmVxdWVzdCApIHsKICAgICRhdXRoICAgICA9ICRyZXF1ZXN0LT5nZXRfaGVhZGVyKCdBdXRob3JpemF0aW9uJyk7CiAgICAkZXhwZWN0ZWQgPSAnQmVhcmVyICcgLiBnZXRfb3B0aW9uKCd2bTJfZmluX3N5bmNfdG9rZW4nLCAndm0yZnN5bmNfOWtxdzNwN3gnKTsKICAgIHJldHVybiAkYXV0aCA9PT0gJGV4cGVjdGVkOwp9CmZ1bmN0aW9uIHZtMl9maW5fcmVzdF9yZWNlaXZlKCAkcmVxdWVzdCApIHsKICAgICRkYXRhID0gJHJlcXVlc3QtPmdldF9qc29uX3BhcmFtcygpOwogICAgaWYgKCAhaXNfYXJyYXkoJGRhdGEpICkgcmV0dXJuIG5ldyBXUF9FcnJvcignYmFkX3JlcXVlc3QnLCdFeHBlY3RlZCBKU09OJyxbJ3N0YXR1cyc9PjQwMF0pOwogICAgaWYgKCBpc3NldCgkZGF0YVsnZHJlJ10pICkgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9maW5fZHJlJywgICAgICRkYXRhWydkcmUnXSwgICAgIGZhbHNlKTsKICAgIGlmICggaXNzZXQoJGRhdGFbJ3JlY2ViZXInXSkgKSB1cGRhdGVfb3B0aW9uKCd2bTJfZmluX3JlY2ViZXInLCAkZGF0YVsncmVjZWJlciddLCBmYWxzZSk7CiAgICBpZiAoIGlzc2V0KCRkYXRhWydwYWdhciddKSApICAgdXBkYXRlX29wdGlvbigndm0yX2Zpbl9wYWdhcicsICAgJGRhdGFbJ3BhZ2FyJ10sICAgZmFsc2UpOwogICAgdXBkYXRlX29wdGlvbigndm0yX2Zpbl9sYXN0X3N5bmMnLCBjdXJyZW50X3RpbWUoJ215c3FsJyksIGZhbHNlKTsKICAgIGRlbGV0ZV9vcHRpb24oJ3ZtMl9maW5fc3luY19wZW5kaW5nJyk7CiAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoWydzdWNjZXNzJz0+dHJ1ZSwnc3luY2VkX2F0Jz0+Y3VycmVudF90aW1lKCdteXNxbCcpXSk7Cn0KCi8vIOKUgOKUgCBBSkFYOiBUUklHR0VSIFNZTkMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2Zpbl90cmlnZ2VyX3N5bmMnLCBmdW5jdGlvbigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX2Zpbl9zeW5jJywnbm9uY2UnKTsKICAgIGlmICghY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ2ZvcmJpZGRlbicpOyB9CiAgICAkd2ViaG9va191cmwgPSBnZXRfb3B0aW9uKCd2bTJfZmluX3dlYmhvb2tfdXJsJywnJyk7CiAgICBpZiAoISR3ZWJob29rX3VybCkgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ1dlYmhvb2sgVVJMIG7Do28gY29uZmlndXJhZG8gZW0gQ29uZmlndXJhw6fDtWVzLicpOyB9CiAgICB1cGRhdGVfb3B0aW9uKCd2bTJfZmluX3N5bmNfcGVuZGluZycsMSxmYWxzZSk7CiAgICB3cF9yZW1vdGVfcG9zdCgkd2ViaG9va191cmwsWwogICAgICAgICd0aW1lb3V0JyAgPT4gMC4wMSwKICAgICAgICAnYmxvY2tpbmcnID0+IGZhbHNlLAogICAgICAgICdib2R5JyAgICAgPT4ganNvbl9lbmNvZGUoWydzb3VyY2UnPT4ndml2YW1haXMtY3JtLXYyJywnYWN0aW9uJz0+J3N5bmNfZmluYW5jZWlybyddKSwKICAgICAgICAnaGVhZGVycycgID0+IFsnQ29udGVudC1UeXBlJz0+J2FwcGxpY2F0aW9uL2pzb24nXSwKICAgICAgICAnc3NsdmVyaWZ5Jz0+IGZhbHNlLAogICAgXSk7CiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ21lc3NhZ2UnPT4nU2luY3Jvbml6YcOnw6NvIGluaWNpYWRhLi4uJ10pOwp9KTsKCi8vIOKUgOKUgCBSRVNUOiBBR0VOREEgU1lOQyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8g4pSA4pSAIFJFU1Q6IEVuY2VycmFyIHByb21vIGF0aXZhIChzdWJzdGl0dWluZG8gdm0tcHJvbW8vdjEvZW5kIGRlbGV0YWRvKSDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbigncmVzdF9hcGlfaW5pdCcsIGZ1bmN0aW9uKCkgewogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9wcm9tb3MvZW5kJywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnUE9TVCcsCiAgICAgICAgJ2NhbGxiYWNrJyAgICAgICAgICAgID0+ICd2bTJfcmVzdF9wcm9tb3NfZW5kJywKICAgICAgICAncGVybWlzc2lvbl9jYWxsYmFjaycgPT4gZnVuY3Rpb24oKSB7IHJldHVybiBjdXJyZW50X3VzZXJfY2FuKCdtYW5hZ2Vfb3B0aW9ucycpOyB9LAogICAgXSk7Cn0pOwpmdW5jdGlvbiB2bTJfcmVzdF9wcm9tb3NfZW5kKCAkcmVxdWVzdCApIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0YmxfZGlzYyA9ICd3el9hY3RpdmVfZGlzY291bnRzJzsKICAgICRwYXJhbXMgICA9ICRyZXF1ZXN0LT5nZXRfanNvbl9wYXJhbXMoKTsKICAgICRpZCAgICAgICA9ICFlbXB0eSgkcGFyYW1zWydpZCddKSA/IGludHZhbCgkcGFyYW1zWydpZCddKSA6IDA7CiAgICBpZiAoICRpZCA+IDAgKSB7CiAgICAgICAgJHByb21vID0gJHdwZGItPmdldF9yb3coICR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIHskdGJsX2Rpc2N9IFdIRVJFIGlkPSVkIEFORCByZXZlcnRlZF9hdCBJUyBOVUxMIiwgJGlkKSApOwogICAgfSBlbHNlIHsKICAgICAgICAkcHJvbW8gPSAkd3BkYi0+Z2V0X3JvdyggIlNFTEVDVCAqIEZST00geyR0YmxfZGlzY30gV0hFUkUgcmV2ZXJ0ZWRfYXQgSVMgTlVMTCBPUkRFUiBCWSBhcHBsaWVkX2F0IERFU0MgTElNSVQgMSIgKTsKICAgIH0KICAgIGlmICggISAkcHJvbW8gKSB7CiAgICAgICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKFsnc3VjY2Vzcyc9PmZhbHNlLCdtZXNzYWdlJz0+J05lbmh1bWEgcHJvbW8gYXRpdmEuJ10pOwogICAgfQogICAgLy8gUmV2ZXJ0ZXIgcHJlw6dvIFdvb0NvbW1lcmNlCiAgICAkcHJvZHVjdCA9IGZ1bmN0aW9uX2V4aXN0cygnd2NfZ2V0X3Byb2R1Y3QnKSA/IHdjX2dldF9wcm9kdWN0KCRwcm9tby0+cHJvZHVjdF9pZCkgOiBudWxsOwogICAgaWYgKCAkcHJvZHVjdCApIHsKICAgICAgICAkcHJvZHVjdC0+c2V0X3NhbGVfcHJpY2UoJycpOwogICAgICAgICRwcm9kdWN0LT5zYXZlKCk7CiAgICB9CiAgICAvLyB2MS41LjE4OiBEZWxldGFyIGN1cG9tIFdvb0NvbW1lcmNlIHBlcm1hbmVudGVtZW50ZSAobsOjbyBkZWl4YXIgbGl4bykKICAgIGlmICggIWVtcHR5KCRwcm9tby0+Y291cG9uX2NvZGUpICkgewogICAgICAgICRjb3Vwb25fcG9zdCA9IGdldF9wYWdlX2J5X3RpdGxlKCAkcHJvbW8tPmNvdXBvbl9jb2RlLCBPQkpFQ1QsICdzaG9wX2NvdXBvbicgKTsKICAgICAgICBpZiAoICRjb3Vwb25fcG9zdCApIHsKICAgICAgICAgICAgd3BfZGVsZXRlX3Bvc3QoICRjb3Vwb25fcG9zdC0+SUQsIHRydWUgKTsKICAgICAgICB9CiAgICB9CiAgICAvLyBNYXJjYXIgY29tbyBlbmNlcnJhZGEKICAgICR3cGRiLT51cGRhdGUoICR0YmxfZGlzYywgWydyZXZlcnRlZF9hdCc9PmN1cnJlbnRfdGltZSgnbXlzcWwnKV0sIFsnaWQnPT4kcHJvbW8tPmlkXSApOwogICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKFsnc3VjY2Vzcyc9PnRydWVdKTsKfQoKYWRkX2FjdGlvbigncmVzdF9hcGlfaW5pdCcsIGZ1bmN0aW9uKCkgewogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9hZ2VuZGEvc3luYycsIFsKICAgICAgICAnbWV0aG9kcycgICAgICAgICAgICAgPT4gJ1BPU1QnLAogICAgICAgICdjYWxsYmFjaycgICAgICAgICAgICA9PiAndm0yX2FnZW5kYV9yZXN0X3JlY2VpdmUnLAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiAndm0yX2FnZW5kYV9yZXN0X2F1dGgnLAogICAgXSk7CiAgICByZWdpc3Rlcl9yZXN0X3JvdXRlKCd2bS1jcm0tdjIvdjEnLCAnL2FnZW5kYS9zeW5jLWxhc3Q3JywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnUE9TVCcsCiAgICAgICAgJ2NhbGxiYWNrJyAgICAgICAgICAgID0+ICd2bTJfYWdlbmRhX3Jlc3RfcmVjZWl2ZV9sYXN0NycsCiAgICAgICAgJ3Blcm1pc3Npb25fY2FsbGJhY2snID0+ICd2bTJfYWdlbmRhX3Jlc3RfYXV0aCcsCiAgICBdKTsKICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3ZtLWNybS12Mi92MScsICcvYWdlbmRhL3N5bmMtc3RhdHVzJywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnR0VUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbCiAgICAgICAgICAgICAgICAnbGFzdF9zeW5jJyA9PiBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2xhc3Rfc3luYycsICcnKSwKICAgICAgICAgICAgICAgICdjb3VudCcgICAgID0+IGNvdW50KChhcnJheSlnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2dzaGVldHMnLCBbXSkpLAogICAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiBmdW5jdGlvbigpIHsgcmV0dXJuIGN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJyk7IH0sCiAgICBdKTsKICAgIC8vIOKUgOKUgCBTb2ZJQSBJbnRlbGxpZ2VuY2UgUkVTVCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3ZtLWNybS12Mi92MScsICcvc29maWEvc2Vzc2lvbicsIFsKICAgICAgICAnbWV0aG9kcycgICAgICAgICAgICAgPT4gJ1BPU1QnLAogICAgICAgICdjYWxsYmFjaycgICAgICAgICAgICA9PiAndm0yX3NvZmlhX3Jlc3RfdXBzZXJ0JywKICAgICAgICAncGVybWlzc2lvbl9jYWxsYmFjaycgPT4gJ19fcmV0dXJuX3RydWUnLAogICAgXSk7CiAgICByZWdpc3Rlcl9yZXN0X3JvdXRlKCd2bS1jcm0tdjIvdjEnLCAnL3NvZmlhL3Nlc3Npb25zJywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnR0VUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gJ3ZtMl9zb2ZpYV9yZXN0X2xpc3QnLAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiBmdW5jdGlvbigpIHsgcmV0dXJuIGN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJyk7IH0sCiAgICBdKTsKfSk7CmZ1bmN0aW9uIHZtMl9hZ2VuZGFfcmVzdF9hdXRoKCAkcmVxdWVzdCApIHsKICAgICRhdXRoICAgICA9ICRyZXF1ZXN0LT5nZXRfaGVhZGVyKCdBdXRob3JpemF0aW9uJyk7CiAgICAkZXhwZWN0ZWQgPSAnQmVhcmVyICcgLiBnZXRfb3B0aW9uKCd2bTJfZmluX3N5bmNfdG9rZW4nLCAndm0yZnN5bmNfOWtxdzNwN3gnKTsKICAgIHJldHVybiAkYXV0aCA9PT0gJGV4cGVjdGVkOwp9CmZ1bmN0aW9uIHZtMl9hZ2VuZGFfcmVzdF9yZWNlaXZlKCAkcmVxdWVzdCApIHsKICAgICRkYXRhID0gJHJlcXVlc3QtPmdldF9qc29uX3BhcmFtcygpOwogICAgaWYgKCAhaXNfYXJyYXkoJGRhdGEpIHx8ICFpc3NldCgkZGF0YVsnZXZlbnRzJ10pICkgewogICAgICAgIHJldHVybiBuZXcgV1BfRXJyb3IoJ2JhZF9yZXF1ZXN0JywnRXhwZWN0ZWQgSlNPTiB3aXRoIGV2ZW50cycsWydzdGF0dXMnPT40MDBdKTsKICAgIH0KICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9hZ2VuZGFfZ3NoZWV0cycsICRkYXRhWydldmVudHMnXSwgZmFsc2UpOwogICAgdXBkYXRlX29wdGlvbigndm0yX2FnZW5kYV9sYXN0X3N5bmMnLCBjdXJyZW50X3RpbWUoJ215c3FsJyksIGZhbHNlKTsKICAgIGRlbGV0ZV9vcHRpb24oJ3ZtMl9hZ2VuZGFfc3luY19wZW5kaW5nJyk7CiAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoWydzdWNjZXNzJz0+dHJ1ZSwnY291bnQnPT5jb3VudCgkZGF0YVsnZXZlbnRzJ10pLCdzeW5jZWRfYXQnPT5jdXJyZW50X3RpbWUoJ215c3FsJyldKTsKfQoKZnVuY3Rpb24gdm0yX2FnZW5kYV9yZXN0X3JlY2VpdmVfbGFzdDcoICRyZXF1ZXN0ICkgewogICAgJGRhdGEgPSAkcmVxdWVzdC0+Z2V0X2pzb25fcGFyYW1zKCk7CiAgICBpZiAoICFpc19hcnJheSgkZGF0YSkgfHwgIWlzc2V0KCRkYXRhWydldmVudHMnXSkgKSB7CiAgICAgICAgcmV0dXJuIG5ldyBXUF9FcnJvcignYmFkX3JlcXVlc3QnLCdFeHBlY3RlZCBKU09OIHdpdGggZXZlbnRzJyxbJ3N0YXR1cyc9PjQwMF0pOwogICAgfQogICAgdXBkYXRlX29wdGlvbigndm0yX2FnZW5kYV9sYXN0NycsICRkYXRhWydldmVudHMnXSwgZmFsc2UpOwogICAgdXBkYXRlX29wdGlvbigndm0yX2FnZW5kYV9sYXN0N19zeW5jZWQnLCBjdXJyZW50X3RpbWUoJ215c3FsJyksIGZhbHNlKTsKICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbJ3N1Y2Nlc3MnPT50cnVlLCdjb3VudCc9PmNvdW50KCRkYXRhWydldmVudHMnXSksJ3N5bmNlZF9hdCc9PmN1cnJlbnRfdGltZSgnbXlzcWwnKV0pOwp9CgovLyDilIDilIAgUkVTVDogUGVkaWRvcyBFeHBvcnQgKHBhcmEgQXBwcyBTY3JpcHQgc2luY3Jvbml6YXIgYWJhIFBFRElET1MgZG8gR1NoZWV0cykg4pSA4pSACmFkZF9hY3Rpb24oJ3Jlc3RfYXBpX2luaXQnLCBmdW5jdGlvbigpIHsKICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3ZtLWNybS12Mi92MScsICcvcGVkaWRvcy9leHBvcnQnLCBbCiAgICAgICAgJ21ldGhvZHMnICAgICAgICAgICAgID0+ICdHRVQnLAogICAgICAgICdjYWxsYmFjaycgICAgICAgICAgICA9PiAndm0yX3BlZGlkb3NfZXhwb3J0X3Jlc3QnLAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiAndm0yX2Zpbl9yZXN0X2F1dGgnLAogICAgXSk7Cn0pOwpmdW5jdGlvbiB2bTJfcGVkaWRvc19leHBvcnRfcmVzdCggJHJlcXVlc3QgKSB7CiAgICBpZiAoICEgZnVuY3Rpb25fZXhpc3RzKCd3Y19nZXRfb3JkZXJzJykgKSB7CiAgICAgICAgcmV0dXJuIG5ldyBXUF9FcnJvcignbm9fd2MnLCAnV29vQ29tbWVyY2Ugbm90IGFjdGl2ZScsIFsnc3RhdHVzJyA9PiA1MDBdKTsKICAgIH0KICAgIEBpbmlfc2V0KCdtZW1vcnlfbGltaXQnLCAnNTEyTScpOwogICAgQHNldF90aW1lX2xpbWl0KDEyMCk7CgogICAgJHNpbmNlICA9IHNhbml0aXplX3RleHRfZmllbGQoICRyZXF1ZXN0LT5nZXRfcGFyYW0oJ3NpbmNlJykgPz8gJycgKTsgLy8gWVlZWS1NTS1ERAogICAgJGFsbCAgICA9IChib29sKSAkcmVxdWVzdC0+Z2V0X3BhcmFtKCdhbGwnKTsKICAgICRwYWdlICAgPSBtYXgoMSwgKGludCkgKCRyZXF1ZXN0LT5nZXRfcGFyYW0oJ3BhZ2UnKSA/PyAxKSk7CiAgICAkbGltaXQgID0gbWluKCA3NSwgbWF4KCAxMCwgKGludCkgKCAkcmVxdWVzdC0+Z2V0X3BhcmFtKCAnbGltaXQnICkgPz8gNTAgKSApICk7CgogICAgLy8gQnVzY2FyIGFwZW5hcyBJRHMgKG11aXRvIG1haXMgbGV2ZSksIGRlcG9pcyBjYXJyZWdhciAxIGEgMQogICAgJGlkX2FyZ3MgPSBbCiAgICAgICAgJ3N0YXR1cycgID0+IFsnd2MtcHJvY2Vzc2luZycsJ3djLWNvbnRyYWN0LXNpZ25lZCcsJ3djLXNpZ25pbmctcGVuZGluZycsJ3djLW9uLWhvbGQnLCd3Yy1jb21wbGV0ZWQnLCd3Yy1jYW5jZWxsZWQnLCd3Yy1yZWZ1bmRlZCcsJ3djLWZhaWxlZCddLAogICAgICAgICdsaW1pdCcgICA9PiAkbGltaXQsCiAgICAgICAgJ3BhZ2VkJyAgID0+ICRwYWdlLAogICAgICAgICdvcmRlcmJ5JyA9PiAnZGF0ZScsCiAgICAgICAgJ29yZGVyJyAgID0+ICdERVNDJywKICAgICAgICAncmV0dXJuJyAgPT4gJ2lkcycsCiAgICBdOwogICAgaWYgKCAkc2luY2UgKSB7CiAgICAgICAgJGlkX2FyZ3NbJ2RhdGVfY3JlYXRlZCddID0gJz49JyAuICRzaW5jZTsKICAgIH0KCiAgICB0cnkgewogICAgICAgICRvcmRlcl9pZHMgPSB3Y19nZXRfb3JkZXJzKCAkaWRfYXJncyApOwogICAgfSBjYXRjaCAoIFxUaHJvd2FibGUgJGUgKSB7CiAgICAgICAgcmV0dXJuIG5ldyBXUF9FcnJvcigncXVlcnlfZXJyb3InLCAkZS0+Z2V0TWVzc2FnZSgpLCBbJ3N0YXR1cycgPT4gNTAwXSk7CiAgICB9CgogICAgaWYgKCAhICRvcmRlcl9pZHMgKSB7CiAgICAgICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKCBbICdzdWNjZXNzJyA9PiB0cnVlLCAncGVkaWRvcycgPT4gW10sICd0b3RhbCcgPT4gMCwgJ3BhZ2UnID0+ICRwYWdlLCAnbGltaXQnID0+ICRsaW1pdCBdICk7CiAgICB9CgogICAgJHJvd3MgPSBbXTsKICAgIGZvcmVhY2ggKCAkb3JkZXJfaWRzIGFzICRvcmRlcl9pZCApIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkb3JkZXIgICA9IHdjX2dldF9vcmRlciggKGludCkgJG9yZGVyX2lkICk7CiAgICAgICAgICAgIGlmICggISAkb3JkZXIgKSBjb250aW51ZTsKCiAgICAgICAgICAgICRldl90cyAgID0gdm0yX2dldF9vcmRlcl9ldmVudF90cyggJG9yZGVyICk7CiAgICAgICAgICAgICRhdHJhY2FvID0gW107CiAgICAgICAgICAgIGZvcmVhY2ggKCAkb3JkZXItPmdldF9pdGVtcygpIGFzICRpdGVtICkgewogICAgICAgICAgICAgICAgJGF0cmFjYW9bXSA9ICRpdGVtLT5nZXRfbmFtZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRiaWxsaW5nID0gJG9yZGVyLT5nZXRfYWRkcmVzcygnYmlsbGluZycpOwogICAgICAgICAgICAkY2l0eSAgICA9IHRyaW0oICggJGJpbGxpbmdbJ2NpdHknXSA/PyAnJyApIC4gKCAhIGVtcHR5KCAkYmlsbGluZ1snc3RhdGUnXSApID8gJyAtICcgLiAkYmlsbGluZ1snc3RhdGUnXSA6ICcnICkgKTsKICAgICAgICAgICAgJHBob25lICAgPSBwcmVnX3JlcGxhY2UoICcvXEQvJywgJycsICRvcmRlci0+Z2V0X2JpbGxpbmdfcGhvbmUoKSA/OiAnJyApOwogICAgICAgICAgICAkY3JlYXRlZCA9ICRvcmRlci0+Z2V0X2RhdGVfY3JlYXRlZCgpOwoKICAgICAgICAgICAgJHJvd3NbXSA9IFsKICAgICAgICAgICAgICAgICdudW1lcm8nICAgICAgPT4gJyMnIC4gJG9yZGVyLT5nZXRfb3JkZXJfbnVtYmVyKCksCiAgICAgICAgICAgICAgICAnZGF0YV92ZW5kYScgID0+ICRjcmVhdGVkID8gd3BfZGF0ZSggJ2QvbS9ZJywgJGNyZWF0ZWQtPmdldFRpbWVzdGFtcCgpICkgOiAnJywKICAgICAgICAgICAgICAgICdkYXRhX2V2ZW50bycgPT4gJGV2X3RzID8gd3BfZGF0ZSggJ2QvbS9ZJywgJGV2X3RzICkgOiAnJywKICAgICAgICAgICAgICAgICdkaWFfc2VtYW5hJyAgPT4gJGV2X3RzID8gdm0yX2RpYV9zZW1hbmFfcHRiciggJGV2X3RzICkgOiAnJywKICAgICAgICAgICAgICAgICdjbGllbnRlJyAgICAgPT4gJG9yZGVyLT5nZXRfZm9ybWF0dGVkX2JpbGxpbmdfZnVsbF9uYW1lKCksCiAgICAgICAgICAgICAgICAnd2hhdHNhcHAnICAgID0+ICRwaG9uZSwKICAgICAgICAgICAgICAgICdhdHJhY2FvJyAgICAgPT4gaW1wbG9kZSggJywgJywgJGF0cmFjYW8gKSwKICAgICAgICAgICAgICAgICd2YWxvcicgICAgICAgPT4gKGZsb2F0KSAkb3JkZXItPmdldF90b3RhbCgpLAogICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgICA9PiAkb3JkZXItPmdldF9zdGF0dXMoKSwKICAgICAgICAgICAgICAgICdsb2NhbCcgICAgICAgPT4gJGNpdHksCiAgICAgICAgICAgICAgICAndGlwb19ldmVudG8nID0+IChzdHJpbmcpICggJG9yZGVyLT5nZXRfbWV0YSggJ3RpcG9fZXZlbnRvJyApID86ICcnICksCiAgICAgICAgICAgICAgICAnYXNzZXNzb3InICAgID0+IChzdHJpbmcpICggJG9yZGVyLT5nZXRfbWV0YSggJ2Fzc2Vzc29yJyApID86ICcnICksCiAgICAgICAgICAgICAgICAnc3luY19hdCcgICAgID0+IGN1cnJlbnRfdGltZSggJ2QvbS9ZIEg6aScgKSwKICAgICAgICAgICAgXTsKICAgICAgICAgICAgLy8gbGliZXJhciBtZW3Ds3JpYQogICAgICAgICAgICB1bnNldCggJG9yZGVyICk7CiAgICAgICAgfSBjYXRjaCAoIFxUaHJvd2FibGUgJGUgKSB7CiAgICAgICAgICAgIC8vIFB1bGEgcGVkaWRvIGNvbSBlcnJvIOKAlCBuw6NvIHF1ZWJyYSBvIGJhdGNoIGludGVpcm8KICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbCiAgICAgICAgJ3N1Y2Nlc3MnID0+IHRydWUsCiAgICAgICAgJ3BhZ2UnICAgID0+ICRwYWdlLAogICAgICAgICdsaW1pdCcgICA9PiAkbGltaXQsCiAgICAgICAgJ3RvdGFsJyAgID0+IGNvdW50KCRyb3dzKSwKICAgICAgICAncGVkaWRvcycgPT4gJHJvd3MsCiAgICBdKTsKfQoKCgovLyDilIDilIAgQUpBWDogVFJJR0dFUiBBR0VOREEgU1lOQyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbignd3BfYWpheF92bTJfc2VuZF9sZWFkX25vdycsICd2bTJfYWpheF9zZW5kX2xlYWRfbm93Jyk7CgpmdW5jdGlvbiB2bTJfYWpheF9zZW5kX2xlYWRfbm93KCkgewogICAgaWYgKCAhIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX25vbmNlJywgJ25vbmNlJywgZmFsc2UpICkgewogICAgICAgIHdwX3NlbmRfanNvbl9lcnJvcignTm9uY2UgaW52w6FsaWRvJywgNDAzKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSApIHsKICAgICAgICB3cF9zZW5kX2pzb25fZXJyb3IoJ1NlbSBwZXJtaXNzw6NvJywgNDAzKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAkcGhvbmUgICA9IHNhbml0aXplX3RleHRfZmllbGQoICRfUE9TVFsncGhvbmUnXSA/PyAnJyApOwogICAgJG5hbWUgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJ25hbWUnXSAgPz8gJycgKTsKICAgICRjaGFubmVsID0gc2FuaXRpemVfdGV4dF9maWVsZCggJF9QT1NUWydjaGFubmVsJ10gPz8gZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9jaGFubmVsJywnemFwaV83NTUxJykgKTsKICAgIGlmICggISAkcGhvbmUgKSB7IHdwX3NlbmRfanNvbl9lcnJvcignVGVsZWZvbmUgb2JyaWdhdMOzcmlvJyk7IHJldHVybjsgfQoKICAgICRjaGFubmVscyA9IHZtMl9jaGFubmVscygpOwogICAgaWYgKCAhIGlzc2V0KCRjaGFubmVsc1skY2hhbm5lbF0pICkgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ0NhbmFsIGludsOhbGlkbycpOyByZXR1cm47IH0KCiAgICAkaXNfd2FiYSAgPSAkY2hhbm5lbHNbJGNoYW5uZWxdWyd0eXBlJ10gPT09ICd3YWJhJzsKICAgICR0ZW1wbGF0ZSA9IGdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfdGVtcGxhdGUnLCAnJyk7CiAgICAkbXNnX3RwbCAgPSBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX21zZycsICdPaSB7bm9tZX0hIPCfkYsgVmkgcXVlIHZvY8OqIHNlIGludGVyZXNzb3UgZW0gbm9zc2FzIGF0cmHDp8O1ZXMuIFBvc3NvIHRlIGFqdWRhciBhIGNvbnRyYXRhcj8nKTsKCiAgICAkb2sgPSBmYWxzZTsKICAgIGlmICggJGlzX3dhYmEgJiYgJHRlbXBsYXRlICkgewogICAgICAgICRyZXMgPSB2bTJfc2VuZF93YWJhKCRjaGFubmVsLCAkcGhvbmUsICR0ZW1wbGF0ZSwgW10pOwogICAgICAgICRvayAgPSBpc19hcnJheSgkcmVzKSA/ICRyZXNbJ29rJ10gOiAoYm9vbCkkcmVzOwogICAgfSBlbHNlIHsKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCd7bm9tZX0nLCAkbmFtZSA/OiAnYW1pZ28nLCAkbXNnX3RwbCk7CiAgICAgICAgJG9rICAgPSB2bTJfc2VuZF96YXBpKCRjaGFubmVsLCAkcGhvbmUsICR0ZXh0KTsKICAgIH0KCiAgICBpZiAoICRvayApIHsKICAgICAgICB2bTJfbG9nKCJsZWFkcy1hcXVlY2VyIG1hbnVhbOKGknskcGhvbmV9IHZpYSB7JGNoYW5uZWx9IiwgJ2luZm8nKTsKICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ3Bob25lJyA9PiAkcGhvbmVdKTsKICAgIH0gZWxzZSB7CiAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCdGYWxoYSBubyBlbnZpbyDigJQgdmVqYSBvIExvZycpOwogICAgfQp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gQ1JPTiDigJQgQVVUTy1BUVVFQ0VSIChob3VybHkpCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphZGRfYWN0aW9uKCAnaW5pdCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKCAhIHdwX25leHRfc2NoZWR1bGVkKCAndm0yX2F1dG9fYXF1ZWNlcl9jcm9uJyApICkgewogICAgICAgIHdwX3NjaGVkdWxlX2V2ZW50KCB0aW1lKCksICdob3VybHknLCAndm0yX2F1dG9fYXF1ZWNlcl9jcm9uJyApOwogICAgfQogICAgaWYgKCAhIHdwX25leHRfc2NoZWR1bGVkKCAndm0yX2hvdF9jcm9uJyApICkgewogICAgICAgIHdwX3NjaGVkdWxlX2V2ZW50KCB0aW1lKCksICdob3VybHknLCAndm0yX2hvdF9jcm9uJyApOwogICAgfQogICAgaWYgKCAhIHdwX25leHRfc2NoZWR1bGVkKCAndm0yX2J5ZGF0ZV9jcm9uJyApICkgewogICAgICAgIHdwX3NjaGVkdWxlX2V2ZW50KCB0aW1lKCkgKyAzMDAsICdob3VybHknLCAndm0yX2J5ZGF0ZV9jcm9uJyApOwogICAgfQogICAgaWYgKCAhIHdwX25leHRfc2NoZWR1bGVkKCAndm0yX3Byb21vX2NsZWFudXBfY3JvbicgKSApIHsKICAgICAgICB3cF9zY2hlZHVsZV9ldmVudCggdGltZSgpICsgMTIwLCAnaG91cmx5JywgJ3ZtMl9wcm9tb19jbGVhbnVwX2Nyb24nICk7CiAgICB9CiAgICAvLyBBbGVydGFzIGRlIGFnZW5kYSDigJQgY3JvbiBkacOhcmlvICgwODowMCBTUCB2aWEgZGFpbHkgV1ApCiAgICBpZiAoICEgd3BfbmV4dF9zY2hlZHVsZWQoICd2bTJfYWdlbmRhX2FsZXJ0X2Nyb24nICkgKSB7CiAgICAgICAgd3Bfc2NoZWR1bGVfZXZlbnQoIHRpbWUoKSArIDYwMCwgJ2RhaWx5JywgJ3ZtMl9hZ2VuZGFfYWxlcnRfY3JvbicgKTsKICAgIH0KfSApOwoKYWRkX2FjdGlvbiggJ3ZtMl9hdXRvX2FxdWVjZXJfY3JvbicsICd2bTJfYXV0b19hcXVlY2VyX3J1bicgKTsKCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBDUk9OIOKAlCBQUk9NTyBDTEVBTlVQIChhdXRvLWV4cGlyYSBwcm9tb3MgdmVuY2lkYXMpCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphZGRfYWN0aW9uKCAndm0yX3Byb21vX2NsZWFudXBfY3JvbicsICd2bTJfcHJvbW9fY2xlYW51cF9ydW4nICk7CgpmdW5jdGlvbiB2bTJfcHJvbW9fY2xlYW51cF9ydW4oKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdGJsID0gJ3d6X2FjdGl2ZV9kaXNjb3VudHMnOwoKICAgICRleHBpcmVkID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1QgKiBGUk9NIHskdGJsfSBXSEVSRSByZXZlcnRlZF9hdCBJUyBOVUxMIEFORCBleHBpcmVzX2F0IElTIE5PVCBOVUxMIEFORCBleHBpcmVzX2F0ICE9ICcwMDAwLTAwLTAwIDAwOjAwOjAwJyBBTkQgZXhwaXJlc19hdCA8IE5PVygpIgogICAgKTsKICAgIGlmICggZW1wdHkoJGV4cGlyZWQpICkgcmV0dXJuOwoKICAgIGZvcmVhY2ggKCAkZXhwaXJlZCBhcyAkcHJvbW8gKSB7CiAgICAgICAgLy8gdjEuNS4xODogUmV2ZXJ0ZXIgdmlhIFdDIFByb2R1Y3QgQVBJIChjb21wYXTDrXZlbCBjb20gSFBPUykKICAgICAgICAkcHJvZHVjdCA9IGZ1bmN0aW9uX2V4aXN0cygnd2NfZ2V0X3Byb2R1Y3QnKSA/IHdjX2dldF9wcm9kdWN0KCAoaW50KSRwcm9tby0+cHJvZHVjdF9pZCApIDogbnVsbDsKICAgICAgICBpZiAoICRwcm9kdWN0ICkgewogICAgICAgICAgICAkcHJvZHVjdC0+c2V0X3NhbGVfcHJpY2UoICcnICk7CiAgICAgICAgICAgICRwcm9kdWN0LT5zYXZlKCk7CiAgICAgICAgfQogICAgICAgIC8vIHYxLjUuMTg6IERlbGV0YXIgY3Vwb20gV29vQ29tbWVyY2UgcGVybWFuZW50ZW1lbnRlIChwb3IgY8OzZGlnbywgbsOjbyBjb3Vwb25faWQpCiAgICAgICAgaWYgKCAhZW1wdHkoJHByb21vLT5jb3Vwb25fY29kZSkgKSB7CiAgICAgICAgICAgICRjb3Vwb25fcG9zdCA9IGdldF9wYWdlX2J5X3RpdGxlKCAkcHJvbW8tPmNvdXBvbl9jb2RlLCBPQkpFQ1QsICdzaG9wX2NvdXBvbicgKTsKICAgICAgICAgICAgaWYgKCAkY291cG9uX3Bvc3QgKSB7CiAgICAgICAgICAgICAgICB3cF9kZWxldGVfcG9zdCggJGNvdXBvbl9wb3N0LT5JRCwgdHJ1ZSApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIE1hcmNhciBjb21vIHJldmVydGlkYQogICAgICAgICR3cGRiLT51cGRhdGUoICR0YmwsIFsncmV2ZXJ0ZWRfYXQnID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKV0sIFsnaWQnID0+IChpbnQpJHByb21vLT5pZF0gKTsKICAgICAgICB2bTJfbG9nKCAicHJvbW9fY2xlYW51cDogUHJvbW8gI3skcHJvbW8tPmlkfSAoeyRwcm9tby0+cHJvZHVjdF9uYW1lfSkgYXV0by1leHBpcmFkYSArIGN1cG9tIGRlbGV0YWRvIiwgJ2luZm8nICk7CiAgICB9Cn0KCmZ1bmN0aW9uIHZtMl9hdXRvX2FxdWVjZXJfcnVuKCkgewogICAgaWYgKCBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX29uJywgJzAnKSAhPT0gJzEnICkgcmV0dXJuOwoKICAgICR0aHJlc2hvbGQgPSAoaW50KWdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfdGhyZXNob2xkJywgJzYwJyk7CiAgICAkY2hhbm5lbCAgID0gZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9jaGFubmVsJywgJ3phcGlfNzU1MScpOwogICAgJHRlbXBsYXRlICA9IGdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfdGVtcGxhdGUnLCAnJyk7CiAgICAkY29vbGRvd24gID0gKGludClnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX2Nvb2xkb3duJywgJzI0Jyk7CiAgICAkYmF0Y2ggICAgICA9IG1heCgxLCAoaW50KWdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfYmF0Y2gnLCAnMjAnKSk7CiAgICAkbWF4X3dlZWtseSA9IChpbnQpZ2V0X29wdGlvbigndm0yX2NvbnRhY3Rfd2Vla2x5X2xpbWl0JywgJzAnKTsKICAgICRtc2dfdHBsICAgPSBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX21zZycsICdPaSB7bm9tZX0hIPCfkYsgVmkgcXVlIHZvY8OqIHNlIGludGVyZXNzb3UgZW0gbm9zc2FzIGF0cmHDp8O1ZXMuIFBvc3NvIHRlIGFqdWRhciBhIGNvbnRyYXRhcj8nKTsKCiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgIGlmICggISBpc3NldCgkY2hhbm5lbHNbJGNoYW5uZWxdKSApIHsKICAgICAgICB2bTJfbG9nKCJhdXRvX2FxdWVjZXI6IGNhbmFsIHskY2hhbm5lbH0gbsOjbyBlbmNvbnRyYWRvIiwgJ2Vycm9yJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgJGlzX3dhYmEgPSAkY2hhbm5lbHNbJGNoYW5uZWxdWyd0eXBlJ10gPT09ICd3YWJhJzsKCiAgICAvLyBLaWxsIHN3aXRjaCBnbG9iYWwKICAgIGlmICggZ2V0X29wdGlvbigndm0yX2FxdWVjZXJfa2lsbCcsICcxJykgPT09ICcxJyApIHsKICAgICAgICB2bTJfbG9nKCJhdXRvX2FxdWVjZXI6IGtpbGwgc3dpdGNoIE9OIOKAlCBwdWxhbmRvIGNyb24iLCAnaW5mbycpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBRdWlldCBIb3VycyDigJQgbsOjbyBlbnZpYSBlbSBob3LDoXJpbyBzaWxlbmNpb3NvCiAgICBpZiAoIHZtMl9pc19xdWlldF90aW1lKCkgKSB7CiAgICAgICAgdm0yX2xvZygiYXV0b19hcXVlY2VyOiBxdWlldCBob3VycyBhdGl2byDigJQgcHVsYW5kbyBjcm9uIiwgJ2luZm8nKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAvLyBDYXAgR2xvYmFsIERpw6FyaW8KICAgIGlmICggdm0yX2RhaWx5X2NhcF9yZWFjaGVkKCkgKSB7CiAgICAgICAgdm0yX2xvZygiYXV0b19hcXVlY2VyOiBjYXAgZ2xvYmFsIGRpw6FyaW8gYXRpbmdpZG8g4oCUIHB1bGFuZG8gY3JvbiIsICdpbmZvJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRsZWFkcyA9IHZtMl9nZXRfbGVhZHNfcGFyYV9hcXVlY2VyKFsnc2NvcmVfbWluJyA9PiAkdGhyZXNob2xkLCAnbGltaXQnID0+IDUwLCAnY2FjaGUnID0+IGZhbHNlXSk7CiAgICBpZiAoIGVtcHR5KCRsZWFkcykgKSByZXR1cm47CgogICAgZ2xvYmFsICR3cGRiOwogICAgJHNlbnQgPSAwOwoKICAgIGZvcmVhY2ggKCAkbGVhZHMgYXMgJGxlYWQgKSB7CiAgICAgICAgJHBob25lID0gJGxlYWRbJ3Bob25lJ107CiAgICAgICAgJG5hbWUgID0gJGxlYWRbJ25hbWUnXSA/PyAnJzsKCiAgICAgICAgLy8gRGVkdXAgY2VudHJhbCDigJQgdXNhIHZtMl9zZW5kcyBjb21vIMOhcmJpdHJvIChjb29sZG93biArIGxpbWl0ZSBzZW1hbmFsKQogICAgICAgIGlmICggISB2bTJfY2FuX3NlbmQoICRwaG9uZSwgJGNvb2xkb3duLCAkbWF4X3dlZWtseSApICkgY29udGludWU7CgogICAgICAgICR0ZXh0X3dpdGhfbGluayA9IHN0cl9yZXBsYWNlKCAne2xpbmt9Jywgdm0yX3RyYWNraW5nX3VybCggJHBob25lLCAnYXF1ZWNlcicgKSwgJG1zZ190cGwgKTsKICAgICAgICAkb2sgPSBmYWxzZTsKICAgICAgICBpZiAoICRpc193YWJhICYmICR0ZW1wbGF0ZSApIHsKICAgICAgICAgICAgJHJlcyA9IHZtMl9zZW5kX3dhYmEoICRjaGFubmVsLCAkcGhvbmUsICR0ZW1wbGF0ZSwgW10gKTsKICAgICAgICAgICAgJG9rICA9IGlzX2FycmF5KCRyZXMpID8gJHJlc1snb2snXSA6IChib29sKSRyZXM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZSggJ3tub21lfScsICRuYW1lID86ICdhbWlnbycsICR0ZXh0X3dpdGhfbGluayApOwogICAgICAgICAgICAkb2sgICA9IHZtMl9zZW5kX3phcGkoICRjaGFubmVsLCAkcGhvbmUsICR0ZXh0ICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRvayApIHsKICAgICAgICAgICAgdm0yX3JlY29yZF9zZW5kKCAkcGhvbmUsICdhcXVlY2VyJywgJGNoYW5uZWwgKTsKICAgICAgICAgICAgdm0yX2xvZyggImF1dG9fYXF1ZWNlcuKGknskcGhvbmV9IHNjb3JlPXskbGVhZFsnc2NvcmUnXX0gdmlhIHskY2hhbm5lbH0iLCAnaW5mbycgKTsKICAgICAgICAgICAgJHNlbnQrKzsKICAgICAgICB9CgogICAgICAgIC8vIFt2MS41Ljk0XSBFbWFpbCBwYXJhbGVsbyAvIGZhbGxiYWNrIOKAlCBQb3IgRGF0YQogICAgICAgIGlmICggZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9vbicsICcwJykgPT09ICcxJyApIHsKICAgICAgICAgICAgJGNvbnRhY3Rfcm93ID0gJHdwZGItPmdldF9yb3coJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIGVtYWlsLCBuYW1lIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX2NvbnRhY3RzIFdIRVJFIHBob25lID0gJXMgTElNSVQgMSIsCiAgICAgICAgICAgICAgICAkcGhvbmUKICAgICAgICAgICAgKSk7CiAgICAgICAgICAgICRjb250YWN0X2VtYWlsX2FxID0gJGNvbnRhY3Rfcm93LT5lbWFpbCA/PyAnJzsKICAgICAgICAgICAgaWYgKCAkY29udGFjdF9lbWFpbF9hcSAmJiBpc19lbWFpbCgkY29udGFjdF9lbWFpbF9hcSkgKSB7CiAgICAgICAgICAgICAgICAkc3Vial9hcSAgID0gZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9zdWJqZWN0JywgJ1ZvY8OqIHRlbSB1bSBldmVudG8gY2hlZ2FuZG8hIFZhbW9zIGZlY2hhciBhcyBhdHJhw6fDtWVzPyDwn46JJyk7CiAgICAgICAgICAgICAgICAkYm9keV90cGwgID0gZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9ib2R5JywgJycpOwogICAgICAgICAgICAgICAgJG5tX2FxICAgICA9ICRjb250YWN0X3Jvdy0+bmFtZSA/OiAoJG5hbWUgPzogJ2FtaWdvJyk7CiAgICAgICAgICAgICAgICAkbGlua19hcSAgID0gdm0yX3RyYWNraW5nX3VybCggJHBob25lLCAnYXF1ZWNlcicgKTsKICAgICAgICAgICAgICAgICRib2R5X2FxICAgPSBzdHJfcmVwbGFjZShbJ3tub21lfScsJ3tsaW5rfSddLCBbJG5tX2FxLCAkbGlua19hcV0sICRib2R5X3RwbCk7CiAgICAgICAgICAgICAgICAkYm9keV9hcSAgID0gbmwyYnIoZXNjX2h0bWwoJGJvZHlfYXEpKTsKICAgICAgICAgICAgICAgICRoZWFkZXJzICAgPSBbJ0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04JywgJ0Zyb206IFZpdmFNYWlzIEV2ZW50b3MgPG5vcmVwbHlAdml2YW1haXNldmVudG9zLmNvbT4nXTsKICAgICAgICAgICAgICAgICRtYWlsX29rICAgPSB3cF9tYWlsKCRjb250YWN0X2VtYWlsX2FxLCAkc3Vial9hcSwgJGJvZHlfYXEsICRoZWFkZXJzKTsKICAgICAgICAgICAgICAgIGlmICggJG1haWxfb2sgKSB7CiAgICAgICAgICAgICAgICAgICAgdm0yX3JlY29yZF9zZW5kKCAkcGhvbmUsICdhcXVlY2VyX2VtYWlsJywgJ2VtYWlsJyApOwogICAgICAgICAgICAgICAgICAgIHZtMl9sb2coICJhdXRvX2FxdWVjZXJfZW1haWzihpJ7JGNvbnRhY3RfZW1haWxfYXF9ICh7JHBob25lfSkiLCAnaW5mbycgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkc2VudCA+PSAkYmF0Y2ggKSBicmVhazsgLy8gYmF0Y2ggbGltaXQgY29uZmlndXLDoXZlbAogICAgfQoKICAgIGlmICggJHNlbnQgPiAwICkgewogICAgICAgIHZtMl9sb2coICJhdXRvX2FxdWVjZXJfY3JvbjogeyRzZW50fSBtZW5zYWdlbnMgZW52aWFkYXMgKHRocmVzaG9sZD17JHRocmVzaG9sZH0pIiwgJ2luZm8nICk7CiAgICAgICAgZGVsZXRlX3RyYW5zaWVudCggJ3ZtMl9sZWFkc19hcV92MicgKTsKICAgIH0KfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEFVVE8tSE9UIOKAlCBkaXNwYXJvIGF1dG9tw6F0aWNvIHBhcmEgbGVhZHMgS29tbW8gSE9UIChJbmNvbWluZykKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9ob3RfcnVuKCkgewogICAgaWYgKCBnZXRfb3B0aW9uKCAndm0yX2hvdF9vbicsICAgJzAnICkgIT09ICcxJyApIHJldHVybjsKICAgIGlmICggZ2V0X29wdGlvbiggJ3ZtMl9ob3Rfa2lsbCcsICcxJyApID09PSAnMScgKSByZXR1cm47CiAgICBpZiAoIGdldF9vcHRpb24oICd2bTJfa2lsbF9zd2l0Y2gnLCAnMCcgKSA9PT0gJzEnICkgcmV0dXJuOwogICAgLy8gUXVpZXQgSG91cnMg4oCUIG7Do28gZW52aWEgZW0gaG9yw6FyaW8gc2lsZW5jaW9zbwogICAgaWYgKCB2bTJfaXNfcXVpZXRfdGltZSgpICkgewogICAgICAgIHZtMl9sb2coICd2bTJfaG90X3J1bjogcXVpZXQgaG91cnMgYXRpdm8g4oCUIHB1bGFuZG8gY3JvbicsICdpbmZvJyApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIENhcCBHbG9iYWwgRGnDoXJpbwogICAgaWYgKCB2bTJfZGFpbHlfY2FwX3JlYWNoZWQoKSApIHsKICAgICAgICB2bTJfbG9nKCAndm0yX2hvdF9ydW46IGNhcCBnbG9iYWwgZGnDoXJpbyBhdGluZ2lkbyDigJQgcHVsYW5kbyBjcm9uJywgJ2luZm8nICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRwcmVmZXJyZWQgPSBnZXRfb3B0aW9uKCAndm0yX2hvdF9jaGFubmVsJywgICd3YWJhXzUwMzknICk7CiAgICAkY2hhbm5lbCAgID0gdm0yX2dldF9iZXN0X2NoYW5uZWwoICRwcmVmZXJyZWQgKTsKICAgIGlmICggISAkY2hhbm5lbCApIHsKICAgICAgICB2bTJfbG9nKCAndm0yX2hvdF9ydW46IHRvZG9zIG9zIGNhbmFpcyBhdGluZ2lyYW0gbGltaXRlIGRpw6FyaW8nLCAnaW5mbycgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJGNoYW5uZWxzICA9IHZtMl9jaGFubmVscygpOwogICAgJGlzX3dhYmEgICA9IGlzc2V0KCAkY2hhbm5lbHNbICRjaGFubmVsIF0gKSAmJiAkY2hhbm5lbHNbICRjaGFubmVsIF1bJ3R5cGUnXSA9PT0gJ3dhYmEnOwogICAgJHRlbXBsYXRlICA9IGdldF9vcHRpb24oICd2bTJfaG90X3RlbXBsYXRlJywgJycgKTsKICAgICRtc2dfdHBsICAgPSBnZXRfb3B0aW9uKCAndm0yX2hvdF9tc2cnLAogICAgICAgICJPaSB7bm9tZX0hIPCfkYsgQXF1aSDDqSBkYSBWaXZhTWFpcyDigJQgdm9jw6ogdGVtIHVtIGV2ZW50byBlbSB2aXN0YT9cbkFpbmRhIGTDoSB0ZW1wbyBkZSBmZWNoYXIgYXMgYXRyYcOnw7VlcyBwZXJmZWl0YXMuIFBvc3NvIGFqdWRhciEg8J+OiVxue2xpbmt9IiApOwogICAgJGNvb2xkb3duICAgPSAoaW50KSBnZXRfb3B0aW9uKCAndm0yX2hvdF9jb29sZG93bicsICc3MicgKTsKICAgICRiYXRjaCAgICAgID0gKGludCkgZ2V0X29wdGlvbiggJ3ZtMl9ob3RfYmF0Y2gnLCAnMTAnICk7CiAgICAkbWF4X3dlZWtseSA9IChpbnQpIGdldF9vcHRpb24oICd2bTJfY29udGFjdF93ZWVrbHlfbGltaXQnLCAnMCcgKTsKCiAgICBnbG9iYWwgJHdwZGI7CiAgICAvLyBMZWFkcyBIT1QgPSBwaXBlbGluZSBJbmNvbWluZyAoc3RhdHVzX2lkIDk0MzA1NjY0KSBxdWUgYWluZGEgbsOjbyBjb250cmF0YXJhbQogICAgJGxlYWRzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1QgcGhvbmUsIG5hbWUsIGRhdGFfZXZlbnRvCiAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9dm1fa29tbW9fbGVhZHMKICAgICAgICAgV0hFUkUgcGhvbmUgIT0gJycKICAgICAgICAgICBBTkQgc3RhdHVzX2lkID0gOTQzMDU2NjQKICAgICAgICAgT1JERVIgQlkgbGFzdF9zeW5jZWQgREVTQwogICAgICAgICBMSU1JVCAxMDAiCiAgICApOwoKICAgICRzZW50ID0gMDsKICAgIGZvcmVhY2ggKCAkbGVhZHMgYXMgJGxlYWQgKSB7CiAgICAgICAgaWYgKCAkc2VudCA+PSAkYmF0Y2ggKSBicmVhazsKICAgICAgICAkcGhvbmUgPSAkbGVhZC0+cGhvbmU7CiAgICAgICAgJG5hbWUgID0gJGxlYWQtPm5hbWUgPzogJ2FtaWdvJzsKCiAgICAgICAgaWYgKCAhIHZtMl9jYW5fc2VuZCggJHBob25lLCAkY29vbGRvd24sICRtYXhfd2Vla2x5ICkgKSBjb250aW51ZTsKCiAgICAgICAgJGxpbmsgPSB2bTJfdHJhY2tpbmdfdXJsKCAkcGhvbmUsICdob3QnICk7CiAgICAgICAgJG9rICAgPSBmYWxzZTsKICAgICAgICBpZiAoICRpc193YWJhICYmICR0ZW1wbGF0ZSApIHsKICAgICAgICAgICAgJGNvbXBvbmVudHMgPSBbXTsKICAgICAgICAgICAgaWYgKCBzdHJwb3MoICR0ZW1wbGF0ZSwgJ3t7MX19JyApICE9PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICRjb21wb25lbnRzID0gWyBbICd0eXBlJyA9PiAnYm9keScsICdwYXJhbWV0ZXJzJyA9PiBbIFsgJ3R5cGUnID0+ICd0ZXh0JywgJ3RleHQnID0+ICRuYW1lIF0gXSBdIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlcyA9IHZtMl9zZW5kX3dhYmEoICRjaGFubmVsLCAkcGhvbmUsICR0ZW1wbGF0ZSwgJGNvbXBvbmVudHMgKTsKICAgICAgICAgICAgJG9rICA9IGlzX2FycmF5KCAkcmVzICkgPyAkcmVzWydvayddIDogKGJvb2wpICRyZXM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZSggWyAne25vbWV9JywgJ3tsaW5rfScgXSwgWyAkbmFtZSwgJGxpbmsgXSwgJG1zZ190cGwgKTsKICAgICAgICAgICAgJG9rICAgPSB2bTJfc2VuZF96YXBpKCAkY2hhbm5lbCwgJHBob25lLCAkdGV4dCApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkb2sgKSB7CiAgICAgICAgICAgIHZtMl9yZWNvcmRfc2VuZCggJHBob25lLCAnaG90JywgJGNoYW5uZWwgKTsKICAgICAgICAgICAgdm0yX2xvZyggInZtMl9ob3TihpJ7JHBob25lfSB2aWEgeyRjaGFubmVsfSIsICdpbmZvJyApOwogICAgICAgICAgICAkc2VudCsrOwogICAgICAgIH0KCiAgICAgICAgLy8gW3YxLjUuOTRdIEVtYWlsIHBhcmFsZWxvIC8gZmFsbGJhY2sg4oCUIEhPVAogICAgICAgIGlmICggZ2V0X29wdGlvbigndm0yX2hvdF9lbWFpbF9vbicsICcwJykgPT09ICcxJyApIHsKICAgICAgICAgICAgJGNvbnRhY3RfaG90ID0gJHdwZGItPmdldF9yb3coJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIGVtYWlsLCBuYW1lIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX2NvbnRhY3RzIFdIRVJFIHBob25lID0gJXMgTElNSVQgMSIsCiAgICAgICAgICAgICAgICAkcGhvbmUKICAgICAgICAgICAgKSk7CiAgICAgICAgICAgICRob3RfZW1haWxfYWRkciA9ICRjb250YWN0X2hvdC0+ZW1haWwgPz8gJyc7CiAgICAgICAgICAgIGlmICggJGhvdF9lbWFpbF9hZGRyICYmIGlzX2VtYWlsKCRob3RfZW1haWxfYWRkcikgKSB7CiAgICAgICAgICAgICAgICAkc3Vial9ob3QgID0gZ2V0X29wdGlvbigndm0yX2hvdF9lbWFpbF9zdWJqZWN0JywgJ1ZvY8OqIGVzdMOhIHByb2N1cmFuZG8gYXRyYcOnw7VlcyBwYXJhIHN1YSBmZXN0YT8g8J+OiScpOwogICAgICAgICAgICAgICAgJGJvZHlfaG90X3RwbCA9IGdldF9vcHRpb24oJ3ZtMl9ob3RfZW1haWxfYm9keScsICcnKTsKICAgICAgICAgICAgICAgICRubV9ob3QgICAgPSAkY29udGFjdF9ob3QtPm5hbWUgPzogKCRuYW1lID86ICdhbWlnbycpOwogICAgICAgICAgICAgICAgJGxpbmtfaG90ICA9IHZtMl90cmFja2luZ191cmwoICRwaG9uZSwgJ2hvdCcgKTsKICAgICAgICAgICAgICAgICRib2R5X2hvdCAgPSBzdHJfcmVwbGFjZShbJ3tub21lfScsJ3tsaW5rfSddLCBbJG5tX2hvdCwgJGxpbmtfaG90XSwgJGJvZHlfaG90X3RwbCk7CiAgICAgICAgICAgICAgICAkYm9keV9ob3QgID0gbmwyYnIoZXNjX2h0bWwoJGJvZHlfaG90KSk7CiAgICAgICAgICAgICAgICAkaGVhZGVycyAgID0gWydDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcsICdGcm9tOiBWaXZhTWFpcyBFdmVudG9zIDxub3JlcGx5QHZpdmFtYWlzZXZlbnRvcy5jb20+J107CiAgICAgICAgICAgICAgICAkbWFpbF9vayAgID0gd3BfbWFpbCgkaG90X2VtYWlsX2FkZHIsICRzdWJqX2hvdCwgJGJvZHlfaG90LCAkaGVhZGVycyk7CiAgICAgICAgICAgICAgICBpZiAoICRtYWlsX29rICkgewogICAgICAgICAgICAgICAgICAgIHZtMl9yZWNvcmRfc2VuZCggJHBob25lLCAnaG90X2VtYWlsJywgJ2VtYWlsJyApOwogICAgICAgICAgICAgICAgICAgIHZtMl9sb2coICJ2bTJfaG90X2VtYWls4oaSeyRob3RfZW1haWxfYWRkcn0gKHskcGhvbmV9KSIsICdpbmZvJyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJHNlbnQgPiAwICkgdm0yX2xvZyggInZtMl9ob3RfY3JvbjogeyRzZW50fSBtc2dzIEhPVCBlbnZpYWRhcyIsICdpbmZvJyApOwp9CmFkZF9hY3Rpb24oICd2bTJfaG90X2Nyb24nLCAndm0yX2hvdF9ydW4nICk7CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gQVVUTy1CWURBVEUg4oCUIGRpc3Bhcm8gcG9yIHByb3hpbWlkYWRlIGRlIGRhdGEgZG8gZXZlbnRvCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfYnlkYXRlX3J1bigpIHsKICAgIGlmICggZ2V0X29wdGlvbiggJ3ZtMl9ieWRhdGVfa2lsbCcsICcxJyApID09PSAnMScgKSByZXR1cm47CiAgICBpZiAoIGdldF9vcHRpb24oICd2bTJfa2lsbF9zd2l0Y2gnLCAnMCcgKSA9PT0gJzEnICkgcmV0dXJuOwogICAgLy8gUXVpZXQgSG91cnMg4oCUIG7Do28gZW52aWEgZW0gaG9yw6FyaW8gc2lsZW5jaW9zbwogICAgaWYgKCB2bTJfaXNfcXVpZXRfdGltZSgpICkgewogICAgICAgIHZtMl9sb2coICd2bTJfYnlkYXRlX3J1bjogcXVpZXQgaG91cnMgYXRpdm8g4oCUIHB1bGFuZG8gY3JvbicsICdpbmZvJyApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIENhcCBHbG9iYWwgRGnDoXJpbwogICAgaWYgKCB2bTJfZGFpbHlfY2FwX3JlYWNoZWQoKSApIHsKICAgICAgICB2bTJfbG9nKCAndm0yX2J5ZGF0ZV9ydW46IGNhcCBnbG9iYWwgZGnDoXJpbyBhdGluZ2lkbyDigJQgcHVsYW5kbyBjcm9uJywgJ2luZm8nICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRjaGFubmVsICA9IGdldF9vcHRpb24oICd2bTJfYnlkYXRlX2NoYW5uZWwnLCAnemFwaV83NTUxJyApOwogICAgJGNoYW5uZWxzID0gdm0yX2NoYW5uZWxzKCk7CiAgICAkaXNfd2FiYSAgPSBpc3NldCggJGNoYW5uZWxzWyAkY2hhbm5lbCBdICkgJiYgJGNoYW5uZWxzWyAkY2hhbm5lbCBdWyd0eXBlJ10gPT09ICd3YWJhJzsKCiAgICAvLyBHcnVwb3MgZGUgZGF0YTogY2hhdmUgPT4gW21pbl9kaWFzLCBtYXhfZGlhcywgY29vbGRvd25faF0KICAgICRiZF9ncm91cHMgPSBbCiAgICAgICAgJ21lcycgICAgICA9PiBbIDI1LCAzNSwgIDQ4IF0sCiAgICAgICAgJ3F1aW56ZW5hJyA9PiBbIDEyLCAxOCwgIDQ4IF0sCiAgICAgICAgJ3NlbWFuYScgICA9PiBbICA1LCAgOSwgIDI0IF0sCiAgICAgICAgJ2RpYXMzJyAgICA9PiBbICAxLCAgNCwgIDEyIF0sCiAgICBdOwoKICAgIGdsb2JhbCAkd3BkYjsKICAgICRzZW50ICAgICAgID0gMDsKICAgICRiYXRjaCAgICAgID0gMjA7CiAgICAkbWF4X3dlZWtseSA9IChpbnQpIGdldF9vcHRpb24oICd2bTJfY29udGFjdF93ZWVrbHlfbGltaXQnLCAnMCcgKTsKCiAgICBmb3JlYWNoICggJGJkX2dyb3VwcyBhcyAkZ2tleSA9PiBbICRkbWluLCAkZG1heCwgJGNvb2wgXSApIHsKICAgICAgICAkZ19vbiA9IGdldF9vcHRpb24oICJ2bTJfYnlkYXRlX3skZ2tleX1fb24iLCAnMCcgKTsKICAgICAgICBpZiAoICRnX29uICE9PSAnMScgKSBjb250aW51ZTsKCiAgICAgICAgJGdfdG1wbCA9IGdldF9vcHRpb24oICJ2bTJfYnlkYXRlX3skZ2tleX1fdGVtcGxhdGUiLCAnJyApOwogICAgICAgICRnX21zZyAgPSBnZXRfb3B0aW9uKCAidm0yX2J5ZGF0ZV97JGdrZXl9X21zZyIsCiAgICAgICAgICAgICJPaSB7bm9tZX0hIPCfjokgU3VhIGZlc3RhIGVtIHtkYXRhX2V2ZW50b30gZXN0w6EgY2hlZ2FuZG8hXG5BaW5kYSBwcmVjaXNhIGRlIGFsZ3VtYSBhdHJhw6fDo28/IFBvc3NvIGFqdWRhciEg8J+Oilxue2xpbmt9IiApOwoKICAgICAgICAvLyBMZWFkcyBjb20gZGF0YV9ldmVudG8gZW50cmUgJGRtaW4gZSAkZG1heCBkaWFzIGEgcGFydGlyIGRlIGhvamUsIGV4Y2x1aW5kbyBxdWVtIGrDoSBjb250cmF0b3UKICAgICAgICAkbGVhZHMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoICR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAiU0VMRUNUIHBob25lLCBuYW1lLCBkYXRhX2V2ZW50bwogICAgICAgICAgICAgRlJPTSB7JHdwZGItPnByZWZpeH12bV9rb21tb19sZWFkcwogICAgICAgICAgICAgV0hFUkUgcGhvbmUgIT0gJycKICAgICAgICAgICAgICAgQU5EIGRhdGFfZXZlbnRvIElTIE5PVCBOVUxMIEFORCBkYXRhX2V2ZW50byAhPSAnJwogICAgICAgICAgICAgICBBTkQgREFURURJRkYoIFNUUl9UT19EQVRFKGRhdGFfZXZlbnRvLCAnJSVkLyUlbS8lJVknKSwgQ1VSREFURSgpICkgQkVUV0VFTiAlZCBBTkQgJWQKICAgICAgICAgICAgICAgQU5EIHN0YXR1c19pZCAhPSA5NDMyNTE2NwogICAgICAgICAgICAgTElNSVQgNTAiLAogICAgICAgICAgICAkZG1pbiwgJGRtYXgKICAgICAgICApICk7CgogICAgICAgIGZvcmVhY2ggKCAkbGVhZHMgYXMgJGxlYWQgKSB7CiAgICAgICAgICAgIGlmICggJHNlbnQgPj0gJGJhdGNoICkgYnJlYWsgMjsKICAgICAgICAgICAgJHBob25lID0gJGxlYWQtPnBob25lOwogICAgICAgICAgICAkbmFtZSAgPSAkbGVhZC0+bmFtZSA/OiAnYW1pZ28nOwogICAgICAgICAgICAkZGF0YSAgPSAkbGVhZC0+ZGF0YV9ldmVudG87CgogICAgICAgICAgICBpZiAoICEgdm0yX2Nhbl9zZW5kKCAkcGhvbmUsICRjb29sLCAkbWF4X3dlZWtseSApICkgY29udGludWU7CgogICAgICAgICAgICAkbGluayA9IHZtMl90cmFja2luZ191cmwoICRwaG9uZSwgJ2J5ZGF0ZV8nIC4gJGdrZXkgKTsKICAgICAgICAgICAgJG9rICAgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKCAkaXNfd2FiYSAmJiAkZ190bXBsICkgewogICAgICAgICAgICAgICAgJHJlcyA9IHZtMl9zZW5kX3dhYmEoICRjaGFubmVsLCAkcGhvbmUsICRnX3RtcGwsIFtdICk7CiAgICAgICAgICAgICAgICAkb2sgID0gaXNfYXJyYXkoICRyZXMgKSA/ICRyZXNbJ29rJ10gOiAoYm9vbCkgJHJlczsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2UoCiAgICAgICAgICAgICAgICAgICAgWyAne25vbWV9JywgJ3tkYXRhX2V2ZW50b30nLCAne2xpbmt9JyBdLAogICAgICAgICAgICAgICAgICAgIFsgJG5hbWUsICRkYXRhLCAkbGluayBdLAogICAgICAgICAgICAgICAgICAgICRnX21zZwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRvayA9IHZtMl9zZW5kX3phcGkoICRjaGFubmVsLCAkcGhvbmUsICR0ZXh0ICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJG9rICkgewogICAgICAgICAgICAgICAgdm0yX3JlY29yZF9zZW5kKCAkcGhvbmUsICdieWRhdGVfJyAuICRna2V5LCAkY2hhbm5lbCApOwogICAgICAgICAgICAgICAgdm0yX2xvZyggInZtMl9ieWRhdGVfeyRna2V5feKGknskcGhvbmV9IHZpYSB7JGNoYW5uZWx9IiwgJ2luZm8nICk7CiAgICAgICAgICAgICAgICAkc2VudCsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBbdjEuNS45NV0gRW1haWwgcGFyYWxlbG8KICAgICAgICAgICAgaWYgKCBnZXRfb3B0aW9uKCd2bTJfYnlkYXRlX2VtYWlsX29uJywnMCcpID09PSAnMScgKSB7CiAgICAgICAgICAgICAgICAkYmRfY29udGFjdCA9ICR3cGRiLT5nZXRfcm93KCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGVtYWlsIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX2NvbnRhY3RzIFdIRVJFIHBob25lPSVzIEFORCBlbWFpbCE9JycgTElNSVQgMSIsICRwaG9uZQogICAgICAgICAgICAgICAgKSApOwogICAgICAgICAgICAgICAgaWYgKCAkYmRfY29udGFjdCAmJiAkYmRfY29udGFjdC0+ZW1haWwgKSB7CiAgICAgICAgICAgICAgICAgICAgJHN1YmpfYmQgID0gZ2V0X29wdGlvbigndm0yX2J5ZGF0ZV9lbWFpbF9zdWJqZWN0JywnU3VhIGZlc3RhIGVzdMOhIGNoZWdhbmRvISBWYW1vcyBmZWNoYXIgYXMgYXRyYcOnw7Vlcz8g8J+OiScpOwogICAgICAgICAgICAgICAgICAgICRib2R5X2JkICA9IGdldF9vcHRpb24oJ3ZtMl9ieWRhdGVfZW1haWxfYm9keScsJycpOwogICAgICAgICAgICAgICAgICAgICRib2R5X2JkICA9IHN0cl9yZXBsYWNlKFsne25vbWV9Jywne2xpbmt9J10sWyRuYW1lLCRsaW5rXSwkYm9keV9iZCk7CiAgICAgICAgICAgICAgICAgICAgd3BfbWFpbCggJGJkX2NvbnRhY3QtPmVtYWlsLCAkc3Vial9iZCwgJGJvZHlfYmQgKTsKICAgICAgICAgICAgICAgICAgICB2bTJfbG9nKCAidm0yX2J5ZGF0ZV9lbWFpbOKGknskYmRfY29udGFjdC0+ZW1haWx9ICh7JHBob25lfSkiLCAnaW5mbycgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRzZW50ID4gMCApIHZtMl9sb2coICJ2bTJfYnlkYXRlX2Nyb246IHskc2VudH0gbWVuc2FnZW5zIGVudmlhZGFzIiwgJ2luZm8nICk7Cn0KYWRkX2FjdGlvbiggJ3ZtMl9ieWRhdGVfY3JvbicsICd2bTJfYnlkYXRlX3J1bicgKTsKCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2FnZW5kYV90cmlnZ2VyX3N5bmMnLCBmdW5jdGlvbigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX2FnZW5kYV9zeW5jJywnbm9uY2UnKTsKICAgIGlmICghY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ2ZvcmJpZGRlbicpOyB9CiAgICAkd2ViaG9va191cmwgPSBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX3dlYmhvb2tfdXJsJywnJyk7CiAgICBpZiAoISR3ZWJob29rX3VybCkgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ1dlYmhvb2sgVVJMIG7Do28gY29uZmlndXJhZG8gZW0gQ29uZmlndXJhw6fDtWVzIOKGkiBBZ2VuZGEuJyk7IH0KICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9hZ2VuZGFfc3luY19wZW5kaW5nJywxLGZhbHNlKTsKICAgIHdwX3JlbW90ZV9wb3N0KCR3ZWJob29rX3VybCxbCiAgICAgICAgJ3RpbWVvdXQnICAgPT4gMC4wMSwKICAgICAgICAnYmxvY2tpbmcnICA9PiBmYWxzZSwKICAgICAgICAnYm9keScgICAgICA9PiBqc29uX2VuY29kZShbJ3NvdXJjZSc9Pid2aXZhbWFpcy1jcm0tdjInLCdhY3Rpb24nPT4nc3luY19hZ2VuZGEnXSksCiAgICAgICAgJ2hlYWRlcnMnICAgPT4gWydDb250ZW50LVR5cGUnPT4nYXBwbGljYXRpb24vanNvbiddLAogICAgICAgICdzc2x2ZXJpZnknID0+IGZhbHNlLAogICAgXSk7CiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ21lc3NhZ2UnPT4nU2luY3Jvbml6YcOnw6NvIGluaWNpYWRhISddKTsKfSk7CgovLyBFc2NvbmRlciBtZW51IHNlcGFyYWRvIEV4aXQtSW50ZW50IChpbnRlZ3JhZG8gYW8gVjIpCmFkZF9hY3Rpb24oJ2FkbWluX21lbnUnLCBmdW5jdGlvbigpIHsKICAgIHJlbW92ZV9tZW51X3BhZ2UoJ3ZtLWV4aXQtaW50ZW50Jyk7Cn0sIDk5OSk7CgovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAovLyBPTkUtVElNRSBNSUdSQVRJT046IEZpeCB1bmljb2RlIGVzY2FwZXMgZW0gdm1fZWlfY29uZmlnCi8vIChjYXVzYWRvIHBvciBkZWZhdWx0cyBQSFAgY29tIFx1WFhYWCBsaXRlcmFsIOKAlCB2MS40LjUgZSBhbnRlcmlvcmVzKQovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKYWRkX2FjdGlvbignYWRtaW5faW5pdCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKGdldF9vcHRpb24oJ3ZtMl9laV91bmljb2RlX2ZpeGVkX3YxJykpIHJldHVybjsKICAgICRjZmcgPSBnZXRfb3B0aW9uKCd2bV9laV9jb25maWcnLCBbXSk7CiAgICBpZiAoaXNfYXJyYXkoJGNmZykpIHsKICAgICAgICAkbmVlZHNfdXBkYXRlID0gZmFsc2U7CiAgICAgICAgZm9yZWFjaCAoWyd0aXRsZScsICdzdWJ0aXRsZScsICdjdGFfdGV4dCcsICdkaXNtaXNzX3RleHQnXSBhcyAka2V5KSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJGNmZ1ska2V5XSkpIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoc3RycG9zKCRjZmdbJGtleV0sICdcXHUnKSA9PT0gZmFsc2UpIGNvbnRpbnVlOwogICAgICAgICAgICAvLyBEZWNvZGUgXHVYWFhYIChpbmNsdWRpbmcgc3Vycm9nYXRlIHBhaXJzKSB2aWEganNvbl9kZWNvZGUgdHJpY2sKICAgICAgICAgICAgJGVzY2FwZWQgPSBzdHJfcmVwbGFjZShbJyInLCAnXFxcXCddLCBbJ1xcIicsICdcXFxcXFxcXCddLCAkY2ZnWyRrZXldKTsKICAgICAgICAgICAgJGRlY29kZWQgPSBqc29uX2RlY29kZSgnIicgLiAkZXNjYXBlZCAuICciJyk7CiAgICAgICAgICAgIGlmICgkZGVjb2RlZCAhPT0gbnVsbCAmJiAkZGVjb2RlZCAhPT0gJGNmZ1ska2V5XSkgewogICAgICAgICAgICAgICAgJGNmZ1ska2V5XSAgICA9ICRkZWNvZGVkOwogICAgICAgICAgICAgICAgJG5lZWRzX3VwZGF0ZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRuZWVkc191cGRhdGUpIHVwZGF0ZV9vcHRpb24oJ3ZtX2VpX2NvbmZpZycsICRjZmcpOwogICAgfQogICAgdXBkYXRlX29wdGlvbigndm0yX2VpX3VuaWNvZGVfZml4ZWRfdjEnLCAxKTsKfSwgNSk7CgovLyBBSkFYOiBFeGl0LUludGVudCBjb25maWcgKFYyKQovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKYWRkX2FjdGlvbignd3BfYWpheF92bTJfZWlfc2F2ZScsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfZWlfc2F2ZScsICdub25jZScpOwogICAgaWYgKCFjdXJyZW50X3VzZXJfY2FuKCdtYW5hZ2Vfb3B0aW9ucycpKSB3cF9zZW5kX2pzb25fZXJyb3IoJ3VuYXV0aG9yaXplZCcpOwogICAgJHNhdmVkID0gZ2V0X29wdGlvbigndm1fZWlfY29uZmlnJywgW10pOwogICAgaWYgKCFpc19hcnJheSgkc2F2ZWQpKSAkc2F2ZWQgPSBbXTsKICAgICRzYXZlZFsna2lsbF9zd2l0Y2gnXSAgID0gKGludCkoJF9QT1NUWydraWxsX3N3aXRjaCddID8/IDApOwogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2dydXBvX3VybCddKSkgICAgICRzYXZlZFsnZ3J1cG9fdXJsJ10gICAgID0gZXNjX3VybF9yYXcoJF9QT1NUWydncnVwb191cmwnXSk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0aXRsZSddKSkgICAgICAgICAgJHNhdmVkWyd0aXRsZSddICAgICAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsndGl0bGUnXSk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWydzdWJ0aXRsZSddKSkgICAgICAgJHNhdmVkWydzdWJ0aXRsZSddICAgICAgPSB3cF9rc2VzX3Bvc3QoJF9QT1NUWydzdWJ0aXRsZSddKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ2N0YV90ZXh0J10pKSAgICAgICAkc2F2ZWRbJ2N0YV90ZXh0J10gICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydjdGFfdGV4dCddKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ2Nvb2xkb3duX2RheXMnXSkpICAkc2F2ZWRbJ2Nvb2xkb3duX2RheXMnXSA9IG1heCgwLCAoaW50KSRfUE9TVFsnY29vbGRvd25fZGF5cyddKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3RpbWVyX2RlbGF5J10pKSAgICAkc2F2ZWRbJ3RpbWVyX2RlbGF5J10gICA9IG1heCgwLCAoaW50KSRfUE9TVFsndGltZXJfZGVsYXknXSk7CiAgICB1cGRhdGVfb3B0aW9uKCd2bV9laV9jb25maWcnLCAkc2F2ZWQpOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoKTsKfSk7CgphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9laV9yZXNldF9zdGF0cycsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfZWlfc2F2ZScsICdub25jZScpOwogICAgaWYgKCFjdXJyZW50X3VzZXJfY2FuKCdtYW5hZ2Vfb3B0aW9ucycpKSB3cF9zZW5kX2pzb25fZXJyb3IoJ3VuYXV0aG9yaXplZCcpOwogICAgdXBkYXRlX29wdGlvbigndm1fZWlfc3RhdF9zaG93cycsIDApOwogICAgdXBkYXRlX29wdGlvbigndm1fZWlfc3RhdF9jbGlja3MnLCAwKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCk7Cn0pOwoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIEFKQVg6IFdBIFJlY292ZXJ5IGNvbmZpZy9hY3Rpb25zIChWMiBDYXJyaW5obyB0YWIpCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl93YV9zYXZlX2NvbmZpZycsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfd2FfY29uZmlnJywgJ25vbmNlJyk7CiAgICBpZiAoIWN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHdwX3NlbmRfanNvbl9lcnJvcigndW5hdXRob3JpemVkJyk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWyd2bV93YV9raWxsX3N3aXRjaCddKSkgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtX3dhX2tpbGxfc3dpdGNoJywgICAgIHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWyd2bV93YV9raWxsX3N3aXRjaCddKSk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWyd2bV93YV9zZW5kX2NoYW5uZWwnXSkpICAgIHVwZGF0ZV9vcHRpb24oJ3ZtX3dhX3NlbmRfY2hhbm5lbCcsICAgIHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWyd2bV93YV9zZW5kX2NoYW5uZWwnXSkpOwogICAgaWYgKGlzc2V0KCRfUE9TVFsndm1fd2FfYmF0Y2hfc2l6ZSddKSkgICAgICB1cGRhdGVfb3B0aW9uKCd2bV93YV9iYXRjaF9zaXplJywgICAgICAoaW50KSRfUE9TVFsndm1fd2FfYmF0Y2hfc2l6ZSddKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3ZtX3dhX3F1aWV0X3N0YXJ0J10pKSAgICAgdXBkYXRlX29wdGlvbigndm1fd2FfcXVpZXRfc3RhcnQnLCAgICAgKGludCkkX1BPU1RbJ3ZtX3dhX3F1aWV0X3N0YXJ0J10pOwogICAgaWYgKGlzc2V0KCRfUE9TVFsndm1fd2FfcXVpZXRfZW5kJ10pKSAgICAgICB1cGRhdGVfb3B0aW9uKCd2bV93YV9xdWlldF9lbmQnLCAgICAgICAoaW50KSRfUE9TVFsndm1fd2FfcXVpZXRfZW5kJ10pOwogICAgaWYgKGlzc2V0KCRfUE9TVFsndm1fd2FfaW50ZXJ2YWxfc2VjJ10pKSAgICB1cGRhdGVfb3B0aW9uKCd2bV93YV9pbnRlcnZhbF9zZWMnLCAgICAoaW50KSRfUE9TVFsndm1fd2FfaW50ZXJ2YWxfc2VjJ10pOwogICAgaWYgKGlzc2V0KCRfUE9TVFsndm1fd2Ffd2FiYV90ZW1wbGF0ZSddKSkgICB1cGRhdGVfb3B0aW9uKCd2bV93YV93YWJhX3RlbXBsYXRlJywgICBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsndm1fd2Ffd2FiYV90ZW1wbGF0ZSddKSk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWyd2bV93YV9yZWNvdmVyeV9tZXNzYWdlJ10pKSB1cGRhdGVfb3B0aW9uKCd2bV93YV9yZWNvdmVyeV9tZXNzYWdlJywgc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoJF9QT1NUWyd2bV93YV9yZWNvdmVyeV9tZXNzYWdlJ10pKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnbWVzc2FnZScgPT4gJ0NvbmZpZ3VyYcOnw7VlcyBzYWx2YXMhJ10pOwp9KTsKCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX3dhX3Jlc2VuZCcsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bV93YV9yZXNlbmQnLCAnbm9uY2UnKTsKICAgIGlmICghY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgd3Bfc2VuZF9qc29uX2Vycm9yKCd1bmF1dGhvcml6ZWQnKTsKICAgICRpZCA9IChpbnQpKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgIGlmICghJGlkKSB3cF9zZW5kX2pzb25fZXJyb3IoJ0lEIGludsOhbGlkbycpOwogICAgZ2xvYmFsICR3cGRiOwogICAgJHRhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bV93YV9jYXB0dXJlcyc7CiAgICAkcm93ICAgPSAkd3BkYi0+Z2V0X3Jvdygkd3BkYi0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSAkdGFibGUgV0hFUkUgaWQ9JWQiLCAkaWQpKTsKICAgIGlmICghJHJvdykgd3Bfc2VuZF9qc29uX2Vycm9yKCdSZWdpc3RybyBuw6NvIGVuY29udHJhZG8nKTsKCiAgICAkY2hhbm5lbCAgPSBnZXRfb3B0aW9uKCd2bV93YV9zZW5kX2NoYW5uZWwnLCAnemFwaV8xODg2Jyk7CiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgICRjaF9pbmZvICA9ICRjaGFubmVsc1skY2hhbm5lbF0gPz8gbnVsbDsKICAgICRpc193YWJhICA9ICgkY2hfaW5mbyAmJiAoJGNoX2luZm9bJ3R5cGUnXSA9PT0gJ3dhYmEnKSk7CiAgICAkcGhvbmUgICAgPSB2bTJfZm9ybWF0X3Bob25lKCRyb3ctPnBob25lKTsKCiAgICBpZiAoJGlzX3dhYmEpIHsKICAgICAgICAvLyDilIDilIAgRW52aW8gV0FCQSB2aWEgcG9vbCBkaW7Dom1pY28gVjIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICAgICAgJHRlbXBsYXRlID0gZ2V0X29wdGlvbigndm1fd2Ffd2FiYV90ZW1wbGF0ZScsICdyZWN1cGVyYV9jYXJyaW5ob193b28nKTsKICAgICAgICAkbmFtZSAgICAgPSAkcm93LT5uYW1lICAgICA/OiAnQ2xpZW50ZSc7CiAgICAgICAgLy8gR2FyYW50ZSBVUkwgYWJzb2x1dGE6IHBhZ2VfdXJsIHRlbSBwcmlvcmlkYWRlIChzZW1wcmUgYWJzb2x1dGEpLCBjYXJ0X3VybCBwb2RlIHNlciByZWxhdGl2YQogICAgICAgICRyYXdfdXJsICA9ICFlbXB0eSgkcm93LT5wYWdlX3VybCkgPyAkcm93LT5wYWdlX3VybCA6ICgkcm93LT5jYXJ0X3VybCA/PyAnJyk7CiAgICAgICAgJGNhcnRfdXJsID0gJHJhd191cmwKICAgICAgICAgICAgPyAoc3RyX3N0YXJ0c193aXRoKCRyYXdfdXJsLCAnaHR0cCcpID8gJHJhd191cmwgOiBob21lX3VybCgnLycgLiBsdHJpbSgkcmF3X3VybCwgJy8nKSkpCiAgICAgICAgICAgIDogJ2h0dHBzOi8vbG9qYS52aXZhbWFpc2V2ZW50b3MuY29tJzsKICAgICAgICAkcmVzdWx0ID0gdm0yX3NlbmRfd2FiYSgkY2hhbm5lbCwgJHBob25lLCAkdGVtcGxhdGUsIFsKICAgICAgICAgICAgWyd0eXBlJyA9PiAnYm9keScsICdwYXJhbWV0ZXJzJyA9PiBbCiAgICAgICAgICAgICAgICBbJ3R5cGUnID0+ICd0ZXh0JywgJ3RleHQnID0+ICRuYW1lXSwKICAgICAgICAgICAgICAgIFsndHlwZScgPT4gJ3RleHQnLCAndGV4dCcgPT4gJGNhcnRfdXJsXSwKICAgICAgICAgICAgXV0sCiAgICAgICAgICAgIFsndHlwZScgPT4gJ2J1dHRvbicsICdzdWJfdHlwZScgPT4gJ3VybCcsICdpbmRleCcgPT4gJzAnLCAncGFyYW1ldGVycycgPT4gWwogICAgICAgICAgICAgICAgWyd0eXBlJyA9PiAndGV4dCcsICd0ZXh0JyA9PiAkY2FydF91cmxdLAogICAgICAgICAgICBdXSwKICAgICAgICBdKTsKICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHRbJ29rJ10pKSB7CiAgICAgICAgICAgICR3cGRiLT51cGRhdGUoJHRhYmxlLCBbJ3N0YXR1cycgPT4gJ3NlbnQnLCAnc2VudF9hdCcgPT4gY3VycmVudF90aW1lKCdteXNxbCcpXSwgWydpZCcgPT4gJGlkXSk7CiAgICAgICAgICAgIHZtMl9yZWNvcmRfc2VuZCgkcGhvbmUsICdjYXJyaW5obycsICRjaGFubmVsKTsgLy8gcmVnaXN0cmEgbm8gw6FyYml0cm8gY2VudHJhbAogICAgICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ21lc3NhZ2UnID0+ICfinIUgV0FCQSBlbnZpYWRvIGNvbSBzdWNlc3NvISddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbWV0YV9ib2R5ID0gJHJlc3VsdFsnYm9keSddID8/ICcoc2VtIHJlc3Bvc3RhKSc7CiAgICAgICAgICAgICRtZXRhX2NvZGUgPSAkcmVzdWx0Wydjb2RlJ10gPz8gMDsKICAgICAgICAgICAgJGRlY29kZWQgICA9IGpzb25fZGVjb2RlKCRtZXRhX2JvZHksIHRydWUpOwogICAgICAgICAgICAkbWV0YV9lcnIgID0gaXNzZXQoJGRlY29kZWRbJ2Vycm9yJ11bJ21lc3NhZ2UnXSkgPyAkZGVjb2RlZFsnZXJyb3InXVsnbWVzc2FnZSddIDogJG1ldGFfYm9keTsKICAgICAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKFsnbWVzc2FnZScgPT4gIuKdjCBNZXRhIEFQSSBIVFRQIHskbWV0YV9jb2RlfTogeyRtZXRhX2Vycn0iXSk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAvLyDilIDilIAgRW52aW8gWi1BUEkgdmlhIHBvb2wgZGluw6JtaWNvIFYyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgICAgIC8vIEdhcmFudGUgVVJMIGFic29sdXRhOiBwYWdlX3VybCB0ZW0gcHJpb3JpZGFkZSAoc2VtcHJlIGFic29sdXRhKSwgY2FydF91cmwgcG9kZSBzZXIgcmVsYXRpdmEKICAgICAgICAkcmF3X3VybF96YXBpID0gIWVtcHR5KCRyb3ctPnBhZ2VfdXJsKSA/ICRyb3ctPnBhZ2VfdXJsIDogKCRyb3ctPmNhcnRfdXJsID8/ICcnKTsKICAgICAgICAkY2FydF9saW5rICAgID0gJHJhd191cmxfemFwaQogICAgICAgICAgICA/IChzdHJfc3RhcnRzX3dpdGgoJHJhd191cmxfemFwaSwgJ2h0dHAnKSA/ICRyYXdfdXJsX3phcGkgOiBob21lX3VybCgnLycgLiBsdHJpbSgkcmF3X3VybF96YXBpLCAnLycpKSkKICAgICAgICAgICAgOiBob21lX3VybCgnLycpOwogICAgICAgICRtc2cgPSBmdW5jdGlvbl9leGlzdHMoJ3ZtX3dhX2NvbXBvc2VfdGV4dF9tZXNzYWdlJykKICAgICAgICAgICAgPyB2bV93YV9jb21wb3NlX3RleHRfbWVzc2FnZSgkcm93LT5uYW1lLCAkcm93LT5wcm9kdWN0X25hbWUsICRjYXJ0X2xpbmssICRyb3ctPmNhcnRfdG90YWwpCiAgICAgICAgICAgIDogIk9pIHskcm93LT5uYW1lfSEg8J+bkiBWb2PDqiBkZWl4b3UgaXRlbnMgbm8gY2FycmluaG8uIEZpbmFsaXplIGFxdWk6IHskY2FydF9saW5rfSI7CiAgICAgICAgJG9rID0gdm0yX3NlbmRfemFwaSgkY2hhbm5lbCwgJHBob25lLCAkbXNnKTsKICAgICAgICBpZiAoJG9rKSB7CiAgICAgICAgICAgICR3cGRiLT51cGRhdGUoJHRhYmxlLCBbJ3N0YXR1cycgPT4gJ3NlbnQnLCAnc2VudF9hdCcgPT4gY3VycmVudF90aW1lKCdteXNxbCcpXSwgWydpZCcgPT4gJGlkXSk7CiAgICAgICAgICAgIHZtMl9yZWNvcmRfc2VuZCgkcGhvbmUsICdjYXJyaW5obycsICRjaGFubmVsKTsgLy8gcmVnaXN0cmEgbm8gw6FyYml0cm8gY2VudHJhbAogICAgICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ21lc3NhZ2UnID0+ICfinIUgRW52aWFkbyB2aWEgWi1BUEkhJ10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHdwX3NlbmRfanNvbl9lcnJvcihbJ21lc3NhZ2UnID0+ICfinYwgRmFsaGEgbm8gZW52aW8gWi1BUEkuIFZlcmlmaXF1ZSBvIExvZy4nXSk7CiAgICAgICAgfQogICAgfQp9KTsKCgovLyDilIDilIDilIAgRElBR07Dk1NUSUNPIFdBQkEgKHRlbXBvcsOhcmlvKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbignd3BfYWpheF92bTJfd2FiYV9kaWFnJywgZnVuY3Rpb24oKSB7CiAgICBpZiAoIWN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHdwX3NlbmRfanNvbl9lcnJvcigndW5hdXRob3JpemVkJyk7CiAgICAkY2hhbm5lbCAgPSBnZXRfb3B0aW9uKCd2bV93YV9zZW5kX2NoYW5uZWwnLCAnemFwaV8xODg2Jyk7CiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgICRjaF9pbmZvICA9ICRjaGFubmVsc1skY2hhbm5lbF0gPz8gbnVsbDsKICAgICRwb29sX3JhdyA9IGdldF9vcHRpb24oJ3ZtMl9jaGFubmVsX3Bvb2wnLCBbXSk7CgogICAgJGRpYWcgPSBbCiAgICAgICAgJ3ZtX3dhX3NlbmRfY2hhbm5lbCcgID0+ICRjaGFubmVsLAogICAgICAgICdraWxsX3N3aXRjaCcgICAgICAgICA9PiBnZXRfb3B0aW9uKCd2bV93YV9raWxsX3N3aXRjaCcsICc/JyksCiAgICAgICAgJ2NoYW5uZWxfZm91bmQnICAgICAgID0+ICFlbXB0eSgkY2hfaW5mbyksCiAgICAgICAgJ2NoYW5uZWxfdHlwZScgICAgICAgID0+ICRjaF9pbmZvWyd0eXBlJ10gPz8gJ04vQScsCiAgICAgICAgJ2NoYW5uZWxfaW5zdGFuY2UnICAgID0+ICRjaF9pbmZvWydpbnN0YW5jZSddID8/ICdWQVpJTycsCiAgICAgICAgJ3Rva2VuX3NldCcgICAgICAgICAgID0+ICFlbXB0eSgkY2hfaW5mb1sndG9rZW4nXSksCiAgICAgICAgJ3Rva2VuX3ByZXZpZXcnICAgICAgID0+ICRjaF9pbmZvID8gKHN1YnN0cigkY2hfaW5mb1sndG9rZW4nXSA/PyAnJywgMCwgMjApIC4gJy4uLicpIDogJ04vQScsCiAgICAgICAgJ3Bvb2xfa2V5cycgICAgICAgICAgID0+IGFycmF5X2tleXMoaXNfYXJyYXkoJHBvb2xfcmF3KSA/ICRwb29sX3JhdyA6IFtdKSwKICAgIF07CgogICAgLy8gVGVzdGEgY3JlZGVuY2lhaXMgbmEgTWV0YSBBUEkgKHPDsyBHRVQg4oCUIG7Do28gZW52aWEgbWVuc2FnZW0pCiAgICBpZiAoJGNoX2luZm8gJiYgIWVtcHR5KCRjaF9pbmZvWydpbnN0YW5jZSddKSAmJiAhZW1wdHkoJGNoX2luZm9bJ3Rva2VuJ10pKSB7CiAgICAgICAgJHBpZCAgPSAkY2hfaW5mb1snaW5zdGFuY2UnXTsKICAgICAgICAkdG9rICA9ICRjaF9pbmZvWyd0b2tlbiddOwogICAgICAgICR0ZXN0ID0gd3BfcmVtb3RlX2dldCgiaHR0cHM6Ly9ncmFwaC5mYWNlYm9vay5jb20vdjIxLjAveyRwaWR9P2ZpZWxkcz1kaXNwbGF5X3Bob25lX251bWJlcix2ZXJpZmllZF9uYW1lLHF1YWxpdHlfcmF0aW5nLHN0YXR1cyIsIFsKICAgICAgICAgICAgJ2hlYWRlcnMnID0+IFsnQXV0aG9yaXphdGlvbicgPT4gJ0JlYXJlciAnIC4gJHRva10sCiAgICAgICAgICAgICd0aW1lb3V0JyA9PiAxMCwKICAgICAgICBdKTsKICAgICAgICBpZiAoaXNfd3BfZXJyb3IoJHRlc3QpKSB7CiAgICAgICAgICAgICRkaWFnWydtZXRhX3Rlc3QnXSA9ICdXUF9FcnJvcjogJyAuICR0ZXN0LT5nZXRfZXJyb3JfbWVzc2FnZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkaWFnWydtZXRhX3Rlc3RfY29kZSddID0gd3BfcmVtb3RlX3JldHJpZXZlX3Jlc3BvbnNlX2NvZGUoJHRlc3QpOwogICAgICAgICAgICAkZGlhZ1snbWV0YV90ZXN0X2JvZHknXSA9IHdwX3JlbW90ZV9yZXRyaWV2ZV9ib2R5KCR0ZXN0KTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICRkaWFnWydtZXRhX3Rlc3QnXSA9ICdTS0lQIOKAlCBjcmVkZW5jaWFpcyBhdXNlbnRlcyc7CiAgICB9CgogICAgLy8gUGVuZGVudGVzIGUgZmFsaG9zCiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdGFibGUgID0gJHdwZGItPnByZWZpeCAuICd2bV93YV9jYXB0dXJlcyc7CiAgICAkcm93cyAgID0gJHdwZGItPmdldF9yZXN1bHRzKCJTRUxFQ1QgaWQsIHBob25lLCBuYW1lLCBzdGF0dXMsIGNhcnRfdXJsLCBjYXB0dXJlZF9hdCBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXMgSU4gKCdwZW5kaW5nJywnZmFpbGVkJykgT1JERVIgQlkgaWQgREVTQyBMSU1JVCA1Iik7CiAgICAkZGlhZ1sncGVuZGluZ19mYWlsZWQnXSA9ICRyb3dzOwoKICAgIC8vIENvbHVuYXMgZGEgdGFiZWxhCiAgICAkY29scyA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0hPVyBDT0xVTU5TIEZST00gJHRhYmxlIik7CiAgICAkZGlhZ1sndGFibGVfY29sdW1ucyddID0gYXJyYXlfY29sdW1uKCRjb2xzLCAnRmllbGQnKTsKCiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcygkZGlhZyk7Cn0pOwoKYWRkX2FjdGlvbignd3BfYWpheF92bTJfcG9wdXBfc2F2ZV9jb25maWcnLCBmdW5jdGlvbigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX3BvcHVwX3NhdmUnLCAnbm9uY2UnKTsKICAgIGlmICghY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgd3Bfc2VuZF9qc29uX2Vycm9yKCk7CiAgICAkY2ZnID0gWwogICAgICAgICdraWxsX3N3aXRjaCcgID0+IChpbnQpJF9QT1NUWydraWxsX3N3aXRjaCddLAogICAgICAgICdiYW5uZXJfdG9wbycgID0+IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydiYW5uZXJfdG9wbyddID8/ICcnKSwKICAgICAgICAndGl0dWxvJyAgICAgICA9PiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsndGl0dWxvJ10gPz8gJycpLAogICAgICAgICdzdWJ0aXR1bG8nICAgID0+IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydzdWJ0aXR1bG8nXSA/PyAnJyksCiAgICAgICAgJ3VyZ2VuY2lhJyAgICAgPT4gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ3VyZ2VuY2lhJ10gPz8gJycpLAogICAgICAgICdjdGFfdGV4dCcgICAgID0+IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydjdGFfdGV4dCddID8/ICcnKSwKICAgICAgICAnZGVsYXlfc2VjJyAgICA9PiAoaW50KSgkX1BPU1RbJ2RlbGF5X3NlYyddID8/IDUpLAogICAgICAgICdzaG93X29uJyAgICAgID0+IHNhbml0aXplX2tleSgkX1BPU1RbJ3Nob3dfb24nXSA/PyAncHJvZHV0bycpLAogICAgICAgICdzZXNzaW9uX2V4cGlyeV9ob3VycycgPT4gbWF4KDEsIG1pbig3MjAsIChpbnQpKCRfUE9TVFsnc2Vzc2lvbl9leHBpcnlfaG91cnMnXSA/PyAyNCkpKSwKICAgIF07CiAgICB1cGRhdGVfb3B0aW9uKCd2bTJfcG9wdXBfY29uZmlnJywgJGNmZyk7CiAgICAvLyBTeW5jIGtpbGwgc3dpdGNoIGFsc28gdG8gd2EtY2FwdHVyZSBmb3JjZV9nYXRlIChpbnZlcnNlOiBnYXRlPW9uIHdoZW4gcG9wdXA9YWN0aXZlKQogICAgdXBkYXRlX29wdGlvbigndm1fd2FfZm9yY2VfZ2F0ZScsICRjZmdbJ2tpbGxfc3dpdGNoJ10gPyAnMCcgOiAnMScpOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoWydtZXNzYWdlJyA9PiAnQ29uZmlndXJhw6fDtWVzIHNhbHZhcyBjb20gc3VjZXNzbyEnXSk7Cn0pOwoKYWRkX2FjdGlvbignd3BfYWpheF92bTJfd2FfaWdub3JlJywgZnVuY3Rpb24oKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoJ3ZtX3dhX3Jlc2VuZCcsICdub25jZScpOwogICAgaWYgKCFjdXJyZW50X3VzZXJfY2FuKCdtYW5hZ2Vfb3B0aW9ucycpKSB3cF9zZW5kX2pzb25fZXJyb3IoJ3VuYXV0aG9yaXplZCcpOwogICAgJGlkID0gKGludCkoJF9QT1NUWydpZCddID8/IDApOwogICAgaWYgKCEkaWQpIHdwX3NlbmRfanNvbl9lcnJvcignSUQgaW52w6FsaWRvJyk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdGFibGUgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtX3dhX2NhcHR1cmVzJzsKICAgICR3cGRiLT51cGRhdGUoJHRhYmxlLCBbJ3N0YXR1cycgPT4gJ2NhbmNlbGxlZCddLCBbJ2lkJyA9PiAkaWRdKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnbWVzc2FnZScgPT4gJ0lnbm9yYWRvLiddKTsKfSk7CgoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIEdBVElMSE9TIFZJU1VBSVMgKFNvY2lhbCBQcm9vZikg4oCUIHYxLjUuMzYKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgovLyDilIDilIAgQUpBWDogU2FsdmFyIGNvbmZpZ3VyYcOnw7VlcyBkZSBHYXRpbGhvcyBWaXN1YWlzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9nYXRpbGhvc19zYXZlJywgZnVuY3Rpb24oKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoJ3ZtMl9nYXRpbGhvc19zYXZlJywgJ25vbmNlJyk7CiAgICBpZiAoIWN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHdwX3NlbmRfanNvbl9lcnJvcigndW5hdXRob3JpemVkJyk7CgogICAgdXBkYXRlX29wdGlvbigndm0yX3NwX3Jlc2VydmFzX2VuYWJsZWQnLCAgICAgICAoaW50KSAoJF9QT1NUWydyZXNlcnZhc19lbmFibGVkJ10gICAgICAgPz8gMSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3NwX3N0YXJzX2VuYWJsZWQnLCAgICAgICAgICAoaW50KSAoJF9QT1NUWydzdGFyc19lbmFibGVkJ10gICAgICAgICAgPz8gMSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3NwX2Rpc3BfZW5hYmxlZCcsICAgICAgICAgICAoaW50KSAoJF9QT1NUWydkaXNwX2VuYWJsZWQnXSAgICAgICAgICAgPz8gMSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3NwX2Rpc2NvdW50X2JhZGdlX2VuYWJsZWQnLCAoaW50KSAoJF9QT1NUWydkaXNjb3VudF9iYWRnZV9lbmFibGVkJ10gPz8gMSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3dhX2NvdW50ZG93bl9lbmFibGVkJywgICAgICAoaW50KSAoJF9QT1NUWydjb3VudGRvd25fZW5hYmxlZCddICAgICAgPz8gMSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3dhX2NvbWJvX2VuYWJsZWQnLCAgICAgICAgICAoaW50KSAoJF9QT1NUWydjb21ib19lbmFibGVkJ10gICAgICAgICAgID8/IDApKTsKICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9zdGlja3lfY3RhX2VuYWJsZWQnLCAgICAgICAgKGludCkgKCRfUE9TVFsnc3RpY2t5X2N0YV9lbmFibGVkJ10gICAgICA/PyAwKSk7CiAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc3Bfb2Zmc2V0X21pbicsICAgICAgICAgICAgIG1heCgwLCAgKGludCkgKCRfUE9TVFsnb2Zmc2V0X21pbiddID8/IDEyKSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3NwX29mZnNldF9tYXgnLCAgICAgICAgICAgICBtYXgoMSwgIChpbnQpICgkX1BPU1RbJ29mZnNldF9tYXgnXSA/PyA0NykpKTsKCiAgICAvLyBMaW1wYXIgdHJhbnNpZW50cyBkZSBjYWNoZSBwYXJhIHF1ZSBub3ZvcyB2YWxvcmVzIHJlZmxpdGFtIGltZWRpYXRhbWVudGUKICAgIGdsb2JhbCAkd3BkYjsKICAgICR3cGRiLT5xdWVyeSgiREVMRVRFIEZST00geyR3cGRiLT5vcHRpb25zfSBXSEVSRSBvcHRpb25fbmFtZSBMSUtFICdfdHJhbnNpZW50X3Ztc3BfJScgT1Igb3B0aW9uX25hbWUgTElLRSAnX3RyYW5zaWVudF90aW1lb3V0X3Ztc3BfJSciKTsKCiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ21lc3NhZ2UnID0+ICfinIUgQ29uZmlndXJhw6fDtWVzIHNhbHZhcyEgQ2FjaGUgbGltcG8uJ10pOwp9KTsKCi8vIOKUgOKUgCBQw6FnaW5hOiBHYXRpbGhvcyBWaXN1YWlzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfZ2F0aWxob3NfcGFnZSgpIHsKICAgICRyZXNlcnZhc19vbiAgPSAoYm9vbCkgZ2V0X29wdGlvbigndm0yX3NwX3Jlc2VydmFzX2VuYWJsZWQnLCAgICAgICAxKTsKICAgICRzdGFyc19vbiAgICAgPSAoYm9vbCkgZ2V0X29wdGlvbigndm0yX3NwX3N0YXJzX2VuYWJsZWQnLCAgICAgICAgICAxKTsKICAgICRkaXNwX29uICAgICAgPSAoYm9vbCkgZ2V0X29wdGlvbigndm0yX3NwX2Rpc3BfZW5hYmxlZCcsICAgICAgICAgICAxKTsKICAgICRkaXNjb3VudF9vbiAgID0gKGJvb2wpIGdldF9vcHRpb24oJ3ZtMl9zcF9kaXNjb3VudF9iYWRnZV9lbmFibGVkJywgMSk7CiAgICAkY291bnRkb3duX29uICA9IChib29sKSBnZXRfb3B0aW9uKCd2bTJfd2FfY291bnRkb3duX2VuYWJsZWQnLCAgICAgIDEpOwogICAgJGNvbWJvX29uICAgICAgPSAoYm9vbCkgZ2V0X29wdGlvbigndm0yX3dhX2NvbWJvX2VuYWJsZWQnLCAgICAgICAgICAwKTsKICAgICRzdGlja3lfY3RhX29uID0gKGJvb2wpIGdldF9vcHRpb24oJ3ZtMl9zdGlja3lfY3RhX2VuYWJsZWQnLCAgICAgICAgMCk7CiAgICAkb2Zmc2V0X21pbiAgICA9IChpbnQpICBnZXRfb3B0aW9uKCd2bTJfc3Bfb2Zmc2V0X21pbicsICAgICAgICAgICAgIDEyKTsKICAgICRvZmZzZXRfbWF4ICAgID0gKGludCkgIGdldF9vcHRpb24oJ3ZtMl9zcF9vZmZzZXRfbWF4JywgICAgICAgICAgICAgNDcpOwogICAgJG5vbmNlICAgICAgICAgPSB3cF9jcmVhdGVfbm9uY2UoJ3ZtMl9nYXRpbGhvc19zYXZlJyk7CgogICAgLy8gQ29udGFyIGF0aXZvcwogICAgJGF0aXZvcyA9IChpbnQpJHJlc2VydmFzX29uICsgKGludCkkc3RhcnNfb24gKyAoaW50KSRkaXNwX29uICsgKGludCkkZGlzY291bnRfb24gKyAoaW50KSRjb3VudGRvd25fb24gKyAoaW50KSRjb21ib19vbiArIChpbnQpJHN0aWNreV9jdGFfb247CgogICAgPz4KICAgIDxkaXYgY2xhc3M9IndyYXAiIHN0eWxlPSJtYXgtd2lkdGg6OTAwcHgiPgogICAgICAgIDxoMSBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweCI+CiAgICAgICAgICAgIOKcqCBHYXRpbGhvcyBWaXN1YWlzCiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo0MDA7YmFja2dyb3VuZDojZjBmZGY0O2NvbG9yOiMxNjY1MzQ7Ym9yZGVyOjFweCBzb2xpZCAjYmJmN2QwO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4Ij4KICAgICAgICAgICAgICAgIFNvY2lhbCBQcm9vZgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9oMT4KICAgICAgICA8cCBzdHlsZT0iY29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOi04cHg7bWFyZ2luLWJvdHRvbToyMHB4Ij4KICAgICAgICAgICAgQ29udHJvbGUgb3MgZWxlbWVudG9zIGRlIHByb3ZhIHNvY2lhbCBleGliaWRvcyBuYXMgcMOhZ2luYXMgZGUgcHJvZHV0by4KICAgICAgICAgICAgUGx1Z2luOiA8Y29kZT52aXZhbWFpcy1zb2NpYWwtcHJvb2YtdjEuMjwvY29kZT4g4oaSIDxzdHJvbmc+djEuMzwvc3Ryb25nPgogICAgICAgIDwvcD4KCiAgICAgICAgPD9waHAgaWYgKCRhdGl2b3MgPT09IDApIDogPz4KICAgICAgICA8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXdhcm5pbmciIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgI2Y1OWUwYjtwYWRkaW5nOjEwcHggMTVweDttYXJnaW4tYm90dG9tOjIwcHgiPgogICAgICAgICAgICA8cD7imqDvuI8gPHN0cm9uZz5Ub2RvcyBvcyBnYXRpbGhvcyBlc3TDo28gZGVzbGlnYWRvcy48L3N0cm9uZz4gTmVuaHVtIGVsZW1lbnRvIGRlIHNvY2lhbCBwcm9vZiBlc3TDoSBzZW5kbyBleGliaWRvIG5vcyBwcm9kdXRvcy48L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CgogICAgICAgIDwhLS0gQ2FyZHMgZGUgU3RhdHVzIChjbGljw6F2ZWlzKSAtLT4KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMjAwcHgsMWZyKSk7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToyNHB4Ij4KCiAgICAgICAgICAgIDxkaXYgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY3Rpb24tcmVzZXJ2YXMnKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIKICAgICAgICAgICAgICAgICBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDo8P3BocCBlY2hvICRyZXNlcnZhc19vbiA/ICcjZjBmZGY0JyA6ICcjZmVmMmYyJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRyZXNlcnZhc19vbiA/ICcjODZlZmFjJyA6ICcjZmNhNWE1JzsgPz47Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweCAyMHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMiCiAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjAyKSciIG9ubW91c2VvdXQ9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSciPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjI4cHg7bWFyZ2luLWJvdHRvbTo0cHgiPvCfn6I8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTRweDtjb2xvcjo8P3BocCBlY2hvICRyZXNlcnZhc19vbiA/ICcjMTY2NTM0JyA6ICcjOTkxYjFiJzsgPz4iPgogICAgICAgICAgICAgICAgICAgIFJlc2VydmFzIENvbmZpcm1hZGFzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODA7bWFyZ2luLXRvcDoycHgiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHJlc2VydmFzX29uID8gJ+KchSBBdGl2bycgOiAn8J+UtCBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICBPZmZzZXQ6IDw/cGhwIGVjaG8gJG9mZnNldF9taW47ID8+4oCTPD9waHAgZWNobyAkb2Zmc2V0X21heDsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY3Rpb24tc3RhcnMnKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIKICAgICAgICAgICAgICAgICBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDo8P3BocCBlY2hvICRzdGFyc19vbiA/ICcjZmZmYmViJyA6ICcjZmVmMmYyJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRzdGFyc19vbiA/ICcjZmRlMDQ3JyA6ICcjZmNhNWE1JzsgPz47Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweCAyMHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMiCiAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjAyKSciIG9ubW91c2VvdXQ9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSciPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjI4cHg7bWFyZ2luLWJvdHRvbTo0cHgiPuKtkDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOjw/cGhwIGVjaG8gJHN0YXJzX29uID8gJyM5MjQwMGUnIDogJyM5OTFiMWInOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgRXN0cmVsYXMgJiBBdmFsaWHDp8O1ZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjJweCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkc3RhcnNfb24gPyAn4pyFIEF0aXZvJyA6ICfwn5S0IERlc2xpZ2Fkbyc7ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWY7bWFyZ2luLXRvcDo0cHgiPgogICAgICAgICAgICAgICAgICAgIFJhdGluZyBiYXNlYWRvIGVtIHJlc2VydmFzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWN0aW9uLWRpc3AnKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIKICAgICAgICAgICAgICAgICBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDo8P3BocCBlY2hvICRkaXNwX29uID8gJyNlZmY2ZmYnIDogJyNmZWYyZjInOyA/Pjtib3JkZXI6MXB4IHNvbGlkIDw/cGhwIGVjaG8gJGRpc3Bfb24gPyAnIzkzYzVmZCcgOiAnI2ZjYTVhNSc7ID8+O2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE2cHggMjBweDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzIgogICAgICAgICAgICAgICAgIG9ubW91c2VvdmVyPSJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMS4wMiknIiBvbm1vdXNlb3V0PSJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMSknIj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyOHB4O21hcmdpbi1ib3R0b206NHB4Ij7wn5OFPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE0cHg7Y29sb3I6PD9waHAgZWNobyAkZGlzcF9vbiA/ICcjMWU0MGFmJyA6ICcjOTkxYjFiJzsgPz4iPgogICAgICAgICAgICAgICAgICAgIERpc3BvbmliaWxpZGFkZQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO21hcmdpbi10b3A6MnB4Ij4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRkaXNwX29uID8gJ+KchSBBdGl2bycgOiAn8J+UtCBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICBSZXF1ZXIgV0MgQm9va2luZ3MKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY3Rpb24tZGlzY291bnQnKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIKICAgICAgICAgICAgICAgICBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDo8P3BocCBlY2hvICRkaXNjb3VudF9vbiA/ICcjZmZmN2VkJyA6ICcjZmVmMmYyJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRkaXNjb3VudF9vbiA/ICcjZmVkN2FhJyA6ICcjZmNhNWE1JzsgPz47Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweCAyMHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMiCiAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjAyKSciIG9ubW91c2VvdXQ9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSciPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjI4cHg7bWFyZ2luLWJvdHRvbTo0cHgiPvCfj7fvuI88L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTRweDtjb2xvcjo8P3BocCBlY2hvICRkaXNjb3VudF9vbiA/ICcjOWEzNDEyJyA6ICcjOTkxYjFiJzsgPz4iPgogICAgICAgICAgICAgICAgICAgIEJhZGdlIGRlIERlc2NvbnRvCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODA7bWFyZ2luLXRvcDoycHgiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc2NvdW50X29uID8gJ+KchSBBdGl2bycgOiAn8J+UtCBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICAtNTAlIE9GRiAvIHByZcOnbyByaXNjYWRvCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWN0aW9uLWNvdW50ZG93bicpLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjonc21vb3RoJ30pIgogICAgICAgICAgICAgICAgIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGNvdW50ZG93bl9vbiA/ICcjZjBmOWZmJyA6ICcjZmVmMmYyJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRjb3VudGRvd25fb24gPyAnI2JhZTZmZCcgOiAnI2ZjYTVhNSc7ID8+O2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE2cHggMjBweDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzIgogICAgICAgICAgICAgICAgIG9ubW91c2VvdmVyPSJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMS4wMiknIiBvbm1vdXNlb3V0PSJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMSknIj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyOHB4O21hcmdpbi1ib3R0b206NHB4Ij7ij7HvuI88L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTRweDtjb2xvcjo8P3BocCBlY2hvICRjb3VudGRvd25fb24gPyAnIzAzNjlhMScgOiAnIzk5MWIxYic7ID8+Ij4KICAgICAgICAgICAgICAgICAgICBDb3VudGRvd24gQ2FycmluaG8KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjJweCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkY291bnRkb3duX29uID8gJ+KchSBBdGl2bycgOiAn8J+UtCBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICAzIG1pbiDihpIgIlRlbXBvIEVzZ290YWRvISIKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY3Rpb24tY29tYm8nKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIKICAgICAgICAgICAgICAgICBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDo8P3BocCBlY2hvICRjb21ib19vbiA/ICcjZmVmY2U4JyA6ICcjZjlmYWZiJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRjb21ib19vbiA/ICcjZmRlNjhhJyA6ICcjZTVlN2ViJzsgPz47Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweCAyMHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMiCiAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjAyKSciIG9ubW91c2VvdXQ9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSciPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjI4cHg7bWFyZ2luLWJvdHRvbTo0cHgiPvCfjoE8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTRweDtjb2xvcjo8P3BocCBlY2hvICRjb21ib19vbiA/ICcjOTI0MDBlJyA6ICcjNmI3MjgwJzsgPz4iPgogICAgICAgICAgICAgICAgICAgIENvbWJvIFVwc2VsbAogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO21hcmdpbi10b3A6MnB4Ij4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRjb21ib19vbiA/ICfinIUgQXRpdm8nIDogJ+KtlSBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICAiQWRpY2lvbmUgKyAxIGF0cmHDp8OjbyAxMCUgT0ZGIgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VjdGlvbi1zdGlja3ktY3RhJykuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOidzbW9vdGgnfSkiCiAgICAgICAgICAgICAgICAgc3R5bGU9ImN1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6PD9waHAgZWNobyAkc3RpY2t5X2N0YV9vbiA/ICcjZjBmOWZmJyA6ICcjZjlmYWZiJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRzdGlja3lfY3RhX29uID8gJyM5M2M1ZmQnIDogJyNlNWU3ZWInOyA/Pjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxNnB4IDIwcHg7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE1cyIKICAgICAgICAgICAgICAgICBvbm1vdXNlb3Zlcj0idGhpcy5zdHlsZS50cmFuc2Zvcm09J3NjYWxlKDEuMDIpJyIgb25tb3VzZW91dD0idGhpcy5zdHlsZS50cmFuc2Zvcm09J3NjYWxlKDEpJyI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MjhweDttYXJnaW4tYm90dG9tOjRweCI+8J+ThjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOjw/cGhwIGVjaG8gJHN0aWNreV9jdGFfb24gPyAnIzAzNjlhMScgOiAnIzZiNzI4MCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICBCYXJyYSBWRVIgREFUQVMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjJweCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkc3RpY2t5X2N0YV9vbiA/ICfinIUgQXRpdm8nIDogJ+KtlSBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICBTdGlja3kgYmFyIG5hIHDDoWdpbmEgZGUgcHJvZHV0bwogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBGb3JtdWzDoXJpbyBkZSBjb25maWd1cmHDp8OjbyAtLT4KICAgICAgICA8Zm9ybSBpZD0idm0yLWdhdGlsaG9zLWZvcm0iPgoKICAgICAgICAgICAgPCEtLSBTRcOHw4NPOiBSZXNlcnZhcyAtLT4KICAgICAgICAgICAgPGRpdiBpZD0ic2VjdGlvbi1yZXNlcnZhcyIgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjRweDttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjE2cHgiPvCfn6IgUmVzZXJ2YXMgQ29uZmlybWFkYXM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjRweCAwIDA7Y29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGliZSA8ZW0+IvCfn6IgWCByZXNlcnZhcyBjb25maXJtYWRhcyI8L2VtPiBlbSBjYWRhIHByb2R1dG8uIE8gbsO6bWVybyA9IHBlZGlkb3MgcmVhaXMgKyBvZmZzZXQgcG9yIHByb2R1dG8uCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJHJlc2VydmFzX29uID8gJyNkY2ZjZTcnIDogJyNmM2Y0ZjYnOyA/PjtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgPD9waHAgZWNobyAkcmVzZXJ2YXNfb24gPyAnIzg2ZWZhYycgOiAnI2QxZDVkYic7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJyZXNlcnZhc19lbmFibGVkIiBpZD0icmVzZXJ2YXNfZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJHJlc2VydmFzX29uKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpwb2ludGVyIiBvbmNoYW5nZT0idXBkYXRlVG9nZ2xlU3R5bGUodGhpcywncmVzZXJ2YXMnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJsYmwtcmVzZXJ2YXMiIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHg7Y29sb3I6PD9waHAgZWNobyAkcmVzZXJ2YXNfb24gPyAnIzE2NjUzNCcgOiAnIzZiNzI4MCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHJlc2VydmFzX29uID8gJ+KchSBBdGl2bycgOiAn4q2VIEluYXRpdm8nOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxODBweCwxZnIpKTtnYXA6MTZweDtiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNnB4Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMzc0MTUxO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo2cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg8J+TjyBPZmZzZXQgbcOtbmltbwogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJvZmZzZXRfbWluIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkb2Zmc2V0X21pbik7ID8+IiBtaW49IjAiIG1heD0iOTk5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjE0cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzljYTNhZjttYXJnaW46NHB4IDAgMCI+TcOtbmltbyBzb21hZG8gYW8gcmVhbCAocGFkcsOjbzogMTIpPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjZweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICDwn5OPIE9mZnNldCBtw6F4aW1vCiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9Im9mZnNldF9tYXgiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRvZmZzZXRfbWF4KTsgPz4iIG1pbj0iMSIgbWF4PSI5OTkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTRweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbjo0cHggMCAwIj5Nw6F4aW1vIHNvbWFkbyBhbyByZWFsIChwYWRyw6NvOiA0Nyk8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjRweCI+8J+UriBDb21vIGZ1bmNpb25hOjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojMzc0MTUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhZGEgcHJvZHV0byB0ZW0gdW0gPHN0cm9uZz5vZmZzZXQgZml4bzwvc3Ryb25nPiBkZXRlcm1pbsOtc3RpY28gKGNyYzMyIGRvIElEKS48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeDogcHJvZHV0byBJRCA0MiDihpIgc2VtcHJlIG1lc21vIG9mZnNldCBubyBpbnRlcnZhbG8gZGVmaW5pZG8uCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBTRcOHw4NPOiBFc3RyZWxhcyAtLT4KICAgICAgICAgICAgPGRpdiBpZD0ic2VjdGlvbi1zdGFycyIgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjRweDttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDttYXJnaW4tYm90dG9tOjhweCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTZweCI+4q2QIEVzdHJlbGFzICZhbXA7IEF2YWxpYcOnw7VlczwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NHB4IDAgMDtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aWJlIHJhdGluZyAoNC4y4oCTNC444piFKSBlIGNvbnRhZ2VtIGRlIGF2YWxpYcOnw7VlcyBjYWxjdWxhZG9zIGF1dG9tYXRpY2FtZW50ZSBhIHBhcnRpciBkYXMgcmVzZXJ2YXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPk7Do28gdXNhIHJldmlld3MgcmVhaXMgZG8gV29vQ29tbWVyY2UuPC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJHN0YXJzX29uID8gJyNkY2ZjZTcnIDogJyNmM2Y0ZjYnOyA/PjtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgPD9waHAgZWNobyAkc3RhcnNfb24gPyAnIzg2ZWZhYycgOiAnI2QxZDVkYic7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzdGFyc19lbmFibGVkIiBpZD0ic3RhcnNfZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJHN0YXJzX29uKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpwb2ludGVyIiBvbmNoYW5nZT0idXBkYXRlVG9nZ2xlU3R5bGUodGhpcywnc3RhcnMnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJsYmwtc3RhcnMiIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHg7Y29sb3I6PD9waHAgZWNobyAkc3RhcnNfb24gPyAnIzE2NjUzNCcgOiAnIzZiNzI4MCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHN0YXJzX29uID8gJ+KchSBBdGl2bycgOiAn4q2VIEluYXRpdm8nOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDtmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwIj4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkbDs3JtdWxhIGRlIHJhdGluZzo8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAmbHQ7MTUgcmVzZXJ2YXMg4oaSIDQuMuKYhSAmbmJzcDt8Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgMTXigJMyNSDihpIgNC404piFICZuYnNwO3wmbmJzcDsKICAgICAgICAgICAgICAgICAgICAyNuKAkzM1IOKGkiA0LjbimIUgJm5ic3A7fCZuYnNwOwogICAgICAgICAgICAgICAgICAgIDM24oCTNDUg4oaSIDQuN+KYhSAmbmJzcDt8Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgNDYrIOKGkiA0LjjimIUKICAgICAgICAgICAgICAgICAgICA8ZW0+KMKxMC4wLzAuMS8wLjIgdmFyaWHDp8OjbyBwb3IgcHJvZHV0byk8L2VtPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBTRcOHw4NPOiBEaXNwb25pYmlsaWRhZGUgLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9InNlY3Rpb24tZGlzcCIgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjRweDttYXJnaW4tYm90dG9tOjI0cHgiPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDttYXJnaW4tYm90dG9tOjhweCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTZweCI+8J+ThSBEaXNwb25pYmlsaWRhZGUgZG8gTcOqczwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NHB4IDAgMDtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aWJlIGRhdGFzIGRpc3BvbsOtdmVpcyBubyBtw6pzIGF0dWFsLiA8c3Ryb25nPlJlcXVlciBwbHVnaW4gV29vQ29tbWVyY2UgQm9va2luZ3MgYXRpdm8uPC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZSBCb29raW5ncyBuw6NvIGVzdGl2ZXIgYXRpdm8sIGVzdGUgYmFkZ2UgbsOjbyBhcGFyZWNlIGF1dG9tYXRpY2FtZW50ZS4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6PD9waHAgZWNobyAkZGlzcF9vbiA/ICcjZGNmY2U3JyA6ICcjZjNmNGY2JzsgPz47cGFkZGluZzo4cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkIDw/cGhwIGVjaG8gJGRpc3Bfb24gPyAnIzg2ZWZhYycgOiAnI2QxZDVkYic7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXNwX2VuYWJsZWQiIGlkPSJkaXNwX2VuYWJsZWQiIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCRkaXNwX29uKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpwb2ludGVyIiBvbmNoYW5nZT0idXBkYXRlVG9nZ2xlU3R5bGUodGhpcywnZGlzcCcpIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImxibC1kaXNwIiBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOjw/cGhwIGVjaG8gJGRpc3Bfb24gPyAnIzE2NjUzNCcgOiAnIzZiNzI4MCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3Bfb24gPyAn4pyFIEF0aXZvJyA6ICfirZUgSW5hdGl2byc7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODAiPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Q29yZXM6PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAg8J+UtCAx4oCTMiBkYXRhcyByZXN0YW50ZXMgJm5ic3A7fCZuYnNwOwogICAgICAgICAgICAgICAgICAgIPCfn6EgM+KAkzUgZGF0YXMgJm5ic3A7fCZuYnNwOwogICAgICAgICAgICAgICAgICAgIPCfn6IgNisgZGF0YXMKICAgICAgICAgICAgICAgICAgICAmbmJzcDt8Jm5ic3A7IENhY2hlOiAxIGhvcmEKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gU0XDh8ODTzogQmFkZ2UgZGUgRGVzY29udG8gLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9InNlY3Rpb24tZGlzY291bnQiIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjI0cHg7bWFyZ2luLWJvdHRvbToyNHB4Ij4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbTo4cHgiPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjE2cHgiPvCfj7fvuI8gQmFkZ2UgZGUgRGVzY29udG8gKC1YJSBPRkYpPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjo0cHggMCAwO2NvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhpYmUgbyBiYWRnZSA8c3Ryb25nIHN0eWxlPSJiYWNrZ3JvdW5kOiNlMjUwMjA7Y29sb3I6I2ZmZjtwYWRkaW5nOjFweCA2cHg7Ym9yZGVyLXJhZGl1czozcHg7Zm9udC1zaXplOjExcHgiPi01MCUgT0ZGPC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlIG8gcHJlw6dvIG9yaWdpbmFsIHJpc2NhZG8gbm9zIGNhcmRzIGRlIHByb2R1dG8gY29tIHByZcOnbyBwcm9tb2Npb25hbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UGx1Z2luOiBWaXZhTWFpcyBIdWI8L3N0cm9uZz4gKGNsYXNzZXMgPGNvZGU+dm1hcC1iYWRnZTwvY29kZT4gZSA8Y29kZT52bWFwLWRlPC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGRpc2NvdW50X29uID8gJyNkY2ZjZTcnIDogJyNmM2Y0ZjYnOyA/PjtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgPD9waHAgZWNobyAkZGlzY291bnRfb24gPyAnIzg2ZWZhYycgOiAnI2QxZDVkYic7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXNjb3VudF9iYWRnZV9lbmFibGVkIiBpZD0iZGlzY291bnRfYmFkZ2VfZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJGRpc2NvdW50X29uKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpwb2ludGVyIiBvbmNoYW5nZT0idXBkYXRlVG9nZ2xlU3R5bGUodGhpcywnZGlzY291bnQnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJsYmwtZGlzY291bnQiIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHg7Y29sb3I6PD9waHAgZWNobyAkZGlzY291bnRfb24gPyAnIzE2NjUzNCcgOiAnIzZiNzI4MCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc2NvdW50X29uID8gJ+KchSBBdGl2bycgOiAn4q2VIEluYXRpdm8nOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDtmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwIj4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkNvbW8gZnVuY2lvbmE6PC9zdHJvbmc+IFF1YW5kbyBhdGl2bywgbyBIdWIgZXhpYmUgbyBwcmXDp28gb3JpZ2luYWwgcmlzY2FkbyAoPGRlbD5SJCAzLjgwMDwvZGVsPikgZSBvIGJhZGdlIGNvbG9yaWRvIGNvbSBhICUgZGUgZGVzY29udG8KICAgICAgICAgICAgICAgICAgICBjYWxjdWxhZGEgYXV0b21hdGljYW1lbnRlIGEgcGFydGlyIGRvIHByZcOnbyByZWd1bGFyIMOXIHByZcOnbyBkZSB2ZW5kYSBkbyBwcm9kdXRvIFdvb0NvbW1lcmNlLgogICAgICAgICAgICAgICAgICAgIFF1YW5kbyA8ZW0+ZGVzbGlnYWRvPC9lbT4sIG8gQ1JNIFYyIGluamV0YSA8Y29kZT5kaXNwbGF5Om5vbmU8L2NvZGU+IHZpYSA8Y29kZT53cF9oZWFkPC9jb2RlPiBwYXJhIG9jdWx0YXIgYW1ib3Mgb3MgZWxlbWVudG9zLgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBTRcOHw4NPOiBDb3VudGRvd24gQ2FycmluaG8gLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9InNlY3Rpb24tY291bnRkb3duIiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyNHB4O21hcmdpbi1ib3R0b206MjRweCI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTZweCI+4o+x77iPIENvdW50ZG93biBkbyBDYXJyaW5obzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NHB4IDAgMDtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aWJlIGJhcnJhIGRlIGNvbnRhZ2VtIHJlZ3Jlc3NpdmEgZGUgMyBtaW51dG9zIG5hIHDDoWdpbmEgZG8gY2FycmluaG8uIFF1YW5kbyBleHBpcmEsIG1vc3RyYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtPiYjMzQ78J+YsSBUZW1wbyBlc2dvdGFkbyEmIzM0OzwvZW0+IGUgZXN2YXppYSBvIGNhcnJpbmhvIGF1dG9tYXRpY2FtZW50ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj48c3Ryb25nPlBsdWdpbjogVml2YU1haXMgV0EgQ2FwdHVyZTwvc3Ryb25nPiAoZWxlbWVudG8gPGNvZGU+I3ZtLXdhLWNvdW50ZG93bi1iYXI8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6PD9waHAgZWNobyAkY291bnRkb3duX29uID8gJyNkY2ZjZTcnIDogJyNmM2Y0ZjYnOyA/PjtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgPD9waHAgZWNobyAkY291bnRkb3duX29uID8gJyM4NmVmYWMnIDogJyNkMWQ1ZGInOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY291bnRkb3duX2VuYWJsZWQiIGlkPSJjb3VudGRvd25fZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJGNvdW50ZG93bl9vbik7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweDtjdXJzb3I6cG9pbnRlciIgb25jaGFuZ2U9InVwZGF0ZVRvZ2dsZVN0eWxlKHRoaXMsJ2NvdW50ZG93bicpIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImxibC1jb3VudGRvd24iIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHg7Y29sb3I6PD9waHAgZWNobyAkY291bnRkb3duX29uID8gJyMxNjY1MzQnIDogJyM2YjcyODAnOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRjb3VudGRvd25fb24gPyAn4pyFIEF0aXZvJyA6ICfirZUgSW5hdGl2byc7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODAiPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Q29tbyBmdW5jaW9uYTo8L3N0cm9uZz4gUXVhbmRvIGF0aXZvLCBvIHdhLWNhcHR1cmUgaW5qZXRhIHVtYSBiYXJyYSByb3hhIG5vIHRvcG8gZG8gY2FycmluaG8gY29tIGNvbnRhZG9yIHJlZ3Jlc3Npdm8gZGUgMyBtaW51dG9zLgogICAgICAgICAgICAgICAgICAgIFNlIG8gY2xpZW50ZSBuw6NvIGZpbmFsaXphciBhIGNvbXByYSBhbnRlcyBkbyB0ZW1wbywgbyBjYXJyaW5obyDDqSBlc3ZhemlhZG8gZSBhcGFyZWNlIGEgdGVsYSA8ZW0+JiMzNDtUZW1wbyBlc2dvdGFkbyEmIzM0OzwvZW0+IGNvbSBib3TDo28KICAgICAgICAgICAgICAgICAgICA8ZW0+JiMzNDtFc2NvbGhlciBOb3ZhbWVudGUmIzM0OzwvZW0+LiBPIHRpbWVyIHJlaW5pY2lhIGEgY2FkYSBub3ZhIHNlc3PDo28gKGJhc2VhZG8gZW0gc2Vzc2lvblN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgIFF1YW5kbyA8ZW0+ZGVzbGlnYWRvPC9lbT4gKHZpYSA8Y29kZT52bTJfd2FfY291bnRkb3duX2VuYWJsZWQgPSAwPC9jb2RlPiksIG8gd2EtY2FwdHVyZSBuw6NvIGluamV0YSBvIEhUTUwg4oCUIG8gdGltZXIgbnVuY2EgYXBhcmVjZS4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gU0XDh8ODTzogQ29tYm8gVXBzZWxsIC0tPgogICAgICAgICAgICA8ZGl2IGlkPSJzZWN0aW9uLWNvbWJvIiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyNHB4O21hcmdpbi1ib3R0b206MjRweCI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTZweCI+8J+OgSBDb21ibyBVcHNlbGw8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjRweCAwIDA7Y29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGliZSBibG9jbyAiQWRpY2lvbmUgbWFpcyB1bWEgYXRyYcOnw6NvIGUgZ2FuaGUgMTAlIE9GRiIgbmEgcMOhZ2luYSBkbyBjYXJyaW5obywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbSBzdWdlc3TDtWVzIGRlIHByb2R1dG9zIHBvcHVsYXJlcyBlIGN1cG9tIDxjb2RlPkNPTUJPMTA8L2NvZGU+Ljxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UGx1Z2luOiBWaXZhTWFpcyBXQSBDYXB0dXJlPC9zdHJvbmc+IChlbGVtZW50byA8Y29kZT4jdm0td2EtY29tYm8tc2VjdGlvbjwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBzdHlsZT0iY29sb3I6I2RjMjYyNiI+UG9yIHBhZHLDo286IGRlc2xpZ2Fkby48L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6PD9waHAgZWNobyAkY29tYm9fb24gPyAnI2ZlZmNlOCcgOiAnI2YzZjRmNic7ID8+O3BhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRjb21ib19vbiA/ICcjZmRlNjhhJyA6ICcjZDFkNWRiJzsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImNvbWJvX2VuYWJsZWQiIGlkPSJjb21ib19lbmFibGVkIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCgkY29tYm9fb24pOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7Y3Vyc29yOnBvaW50ZXIiIG9uY2hhbmdlPSJ1cGRhdGVUb2dnbGVTdHlsZSh0aGlzLCdjb21ibycpIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImxibC1jb21ibyIgc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtjb2xvcjo8P3BocCBlY2hvICRjb21ib19vbiA/ICcjOTI0MDBlJyA6ICcjNmI3MjgwJzsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkY29tYm9fb24gPyAn4pyFIEF0aXZvJyA6ICfirZUgSW5hdGl2byc7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MCI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5Db21vIGZ1bmNpb25hOjwvc3Ryb25nPiBRdWFuZG8gYXRpdm8sIG8gd2EtY2FwdHVyZSBleGliZSB1bSBibG9jbyBlc2N1cm8vZG91cmFkbyBubyBjYXJyaW5obyBjb20KICAgICAgICAgICAgICAgICAgICAzIHN1Z2VzdMO1ZXMgZGUgYXRyYcOnw7VlcyBwb3B1bGFyZXMuIE8gY2xpZW50ZSBwb2RlIGNsaWNhciBlbSAiKyBBRElDSU9OQVIgQU8gQ09NQk8iIHBhcmEgaW5jbHVpciBtYWlzIHByb2R1dG9zLgogICAgICAgICAgICAgICAgICAgIEFvIHVzYXIgbyBjdXBvbSA8Y29kZT5DT01CTzEwPC9jb2RlPiwgbyBkZXNjb250byBkZSAxMCUgw6kgYXBsaWNhZG8gYXV0b21hdGljYW1lbnRlICh2w6FsaWRvIGFwZW5hcyBjb20gMisgYXRyYcOnw7VlcykuCiAgICAgICAgICAgICAgICAgICAgUXVhbmRvIDxlbT5kZXNsaWdhZG88L2VtPiAocGFkcsOjbyksIG8gYmxvY28gbsOjbyDDqSByZW5kZXJpemFkbyDigJQgbmVuaHVtYSBjb25mdXPDo28gbm8gY2FycmluaG8uCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFNFw4fDg086IEJhcnJhIFZFUiBEQVRBUyAtLT4KICAgICAgICAgICAgPGRpdiBpZD0ic2VjdGlvbi1zdGlja3ktY3RhIiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyNHB4O21hcmdpbi1ib3R0b206MjRweCI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTZweCI+8J+ThiBCYXJyYSBWRVIgREFUQVM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjRweCAwIDA7Y29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXJyYSBzdGlja3kgbm8gcm9kYXDDqSBkYXMgcMOhZ2luYXMgZGUgcHJvZHV0byBjb20gcHJlw6dvIGUgYm90w6NvIDxzdHJvbmc+VkVSIERBVEFTIOKAujwvc3Ryb25nPiBxdWUgcm9sYSBhdMOpIG8gY2FsZW5kw6FyaW8gZGUgZGlzcG9uaWJpbGlkYWRlLjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UGx1Z2luOiBWaXZhTWFpcyBIdWI8L3N0cm9uZz4gKGVsZW1lbnRvIDxjb2RlPiN2bS1zdGlja3ktcHJvZHVjdC1jdGE8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9ImNvbG9yOiNkYzI2MjYiPlBvciBwYWRyw6NvOiBkZXNsaWdhZGE8L3N0cm9uZz4g4oCUIHBvZGUgY29tcGV0aXIgY29tIGEgU29mSUEuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJHN0aWNreV9jdGFfb24gPyAnI2RjZmNlNycgOiAnI2YzZjRmNic7ID8+O3BhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRzdGlja3lfY3RhX29uID8gJyM4NmVmYWMnIDogJyNkMWQ1ZGInOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic3RpY2t5X2N0YV9lbmFibGVkIiBpZD0ic3RpY2t5X2N0YV9lbmFibGVkIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCgkc3RpY2t5X2N0YV9vbik7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweDtjdXJzb3I6cG9pbnRlciIgb25jaGFuZ2U9InVwZGF0ZVRvZ2dsZVN0eWxlKHRoaXMsJ3N0aWNreS1jdGEnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJsYmwtc3RpY2t5LWN0YSIgc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtjb2xvcjo8P3BocCBlY2hvICRzdGlja3lfY3RhX29uID8gJyMxNjY1MzQnIDogJyM2YjcyODAnOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRzdGlja3lfY3RhX29uID8gJ+KchSBBdGl2bycgOiAn4q2VIEluYXRpdm8nOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODAiPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Q29tbyBmdW5jaW9uYTo8L3N0cm9uZz4gUXVhbmRvIGF0aXZhLCBvIEh1YiBleGliZSB1bWEgYmFycmEgcm94YSBmaXhhIG5vIHJvZGFww6kgZGFzIHDDoWdpbmFzIGRlIHByb2R1dG8gY29tIG8gcHJlw6dvIGUgbyBib3TDo28gPGVtPiJWRVIgREFUQVMg4oC6IjwvZW0+LAogICAgICAgICAgICAgICAgICAgIHF1ZSBhbyBjbGljYXIgcm9sYSBhIHDDoWdpbmEgYXTDqSBvIGNhbGVuZMOhcmlvIGRvIFdvb0NvbW1lcmNlIEJvb2tpbmdzLgogICAgICAgICAgICAgICAgICAgIFF1YW5kbyA8ZW0+ZGVzbGlnYWRhPC9lbT4gKHBhZHLDo28pLCBvIENSTSBWMiBpbmpldGEgPGNvZGU+I3ZtLXN0aWNreS1wcm9kdWN0LWN0YXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTwvY29kZT4gdmlhIDxjb2RlPndwX2hlYWQ8L2NvZGU+IOKAlCBhIGJhcnJhIG51bmNhIGFwYXJlY2UsCiAgICAgICAgICAgICAgICAgICAgZGVpeGFuZG8gYSBTb2ZJQSBjb21vIMO6bmljbyBDVEEgZmx1dHVhbnRlLgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBCb3TDo28gU2FsdmFyIC0tPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxNnB4O2ZsZXgtd3JhcDp3cmFwIj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYnRuLXNhdmUtZ2F0aWxob3MiCiAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InZtMlNhdmVHYXRpbGhvcygpIgogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDojMjU2M2ViO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7cGFkZGluZzoxMnB4IDI4cHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgICAgICAgICAgICAgICAg8J+SviBTYWx2YXIgQ29uZmlndXJhw6fDtWVzCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImdhdGlsaG9zLW1zZyIgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDwvZm9ybT4KCiAgICAgICAgPCEtLSBQcmV2aWV3IGVzdMOhdGljbyAtLT4KICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjMycHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyNHB4Ij4KICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MCAwIDE2cHg7Zm9udC1zaXplOjE1cHgiPvCfkYHvuI8gUHJldmlldyDigJQgQ29tbyBhcGFyZWNlIG5vIHByb2R1dG88L2gzPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjI0cHgiPgogICAgICAgICAgICAgICAgPCEtLSBTaW5nbGUgcHJvZHVjdCAtLT4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE2cHg7bWluLXdpZHRoOjIyMHB4Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzljYTNhZjttYXJnaW4tYm90dG9tOjEycHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNWVtIj5Qw6FnaW5hIGRvIFByb2R1dG88L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHJlc2VydmFzX29uKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6IzI3Njc0OTtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHgiPvCfn6IgPD9waHAgZWNobyAkb2Zmc2V0X21pbiArIDU7ID8+IHJlc2VydmFzIGNvbmZpcm1hZGFzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRzdGFyc19vbikgOiA/PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjVweDttYXJnaW4tYm90dG9tOjhweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojZjVhNjIzO2ZvbnQtc2l6ZToxNHB4Ij7imIXimIXimIXimIXimIU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNTU1O2ZvbnQtd2VpZ2h0OjYwMCI+NCw2IDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDo0MDA7Y29sb3I6Izg4OCI+KDE4IGF2YWxpYcOnw7Vlcyk8L3NwYW4+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkZGlzcF9vbikgOiA/PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6IzI3Njc0OTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjRweCAxMHB4O2JvcmRlci1yYWRpdXM6NHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAg8J+foiBBZ2VuZGEgYWJlcnRhIHBhcmEgPD9waHAgZWNobyB1Y2ZpcnN0KGRhdGVfaTE4bignRicpKTsgPz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGRpc2NvdW50X29uKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzljYTNhZiI+UiQgMy44MDA8L2RlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2UyNTAyMDtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czozcHgiPi01MCUgT0ZGPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghJHJlc2VydmFzX29uICYmICEkc3RhcnNfb24gJiYgISRkaXNwX29uICYmICEkZGlzY291bnRfb24pIDogPz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZToxM3B4Ij5OZW5odW0gZWxlbWVudG8gYXRpdm88L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPCEtLSBMb29wIC8gY2F0w6Fsb2dvIC0tPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTZweDttaW4td2lkdGg6MTYwcHgiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojOWNhM2FmO21hcmdpbi1ib3R0b206MTJweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA1ZW0iPkNhdMOhbG9nbyAvIExvamE8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojMzc0MTUxO2ZvbnQtd2VpZ2h0OjUwMDttYXJnaW4tYm90dG9tOjhweCI+8J+OpCBOb21lIGRvIFByb2R1dG88L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHJlc2VydmFzX29uKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzI3Njc0OTtmb250LXdlaWdodDo2MDA7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbTozcHgiPvCfn6IgPD9waHAgZWNobyAkb2Zmc2V0X21pbiArIDU7ID8+IHJlc2VydmFzIGNvbmZpcm1hZGFzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRzdGFyc19vbikgOiA/PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtnYXA6NHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiNmNWE2MjM7Zm9udC1zaXplOjEycHgiPuKYheKYheKYheKYheKYhTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM1NTU7Zm9udC13ZWlnaHQ6NjAwIj40LDY8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjojODg4Ij4oMTgpPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkZGlzY291bnRfb24pIDogPz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjZweDttYXJnaW4tdG9wOjZweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWwgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWYiPlIkIDMuODAwPC9kZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNlMjUwMjA7Y29sb3I6I2ZmZjtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo3MDA7cGFkZGluZzoxcHggNXB4O2JvcmRlci1yYWRpdXM6M3B4Ij4tNTAlIE9GRjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRyZXNlcnZhc19vbiAmJiAhJHN0YXJzX29uICYmICEkZGlzY291bnRfb24pIDogPz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZToxMnB4O3RleHQtYWxpZ246Y2VudGVyIj5OZW5odW0gZWxlbWVudG8gYXRpdm88L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWY7bWFyZ2luLXRvcDoxMnB4Ij4KICAgICAgICAgICAgICAgICogUHJldmlldyBlc3TDoXRpY28gY29tIHZhbG9yZXMgZGUgZXhlbXBsby4gT3MgdmFsb3JlcyByZWFpcyB2YXJpYW0gcG9yIHByb2R1dG8gKGNhbGN1bGFkb3MgYXV0b21hdGljYW1lbnRlKS4KICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkY291bnRkb3duX29uKSA6ID8+CiAgICAgICAgICAgICAgICA8YnI+PGJyPjxzdHJvbmc+Q2FycmluaG8gYXRpdm86PC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiMxZTBiNGI7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDE0cHg7bWFyZ2luLXRvcDo4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxOHB4Ij7ij7HvuI88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHgiPlNldXMgaXRlbnMgZXN0w6NvIHJlc2VydmFkb3MgcG9yIDxzdHJvbmc+MDM6MDA8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDw/cGhwIGVsc2UgOiA/PgogICAgICAgICAgICAgICAgPGJyPjxicj48ZW0gc3R5bGU9ImNvbG9yOiNlZjQ0NDQ7Zm9udC1zaXplOjEycHgiPuKPse+4jyBDb3VudGRvd24gZG8gY2FycmluaG8gPHN0cm9uZz5kZXNsaWdhZG88L3N0cm9uZz48L2VtPgogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KCiAgICA8L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgZnVuY3Rpb24gdXBkYXRlVG9nZ2xlU3R5bGUoZWwsIGtleSkgewogICAgICAgIHZhciBsYmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsLScgKyBrZXkpOwogICAgICAgIHZhciB3cmFwID0gZWwucGFyZW50RWxlbWVudDsKICAgICAgICBpZiAoZWwuY2hlY2tlZCkgewogICAgICAgICAgICB3cmFwLnN0eWxlLmJhY2tncm91bmQgPSAnI2RjZmNlNyc7CiAgICAgICAgICAgIHdyYXAuc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzg2ZWZhYyc7CiAgICAgICAgICAgIGxibC5zdHlsZS5jb2xvciA9ICcjMTY2NTM0JzsKICAgICAgICAgICAgbGJsLnRleHRDb250ZW50ID0gJ+KchSBBdGl2byc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd3JhcC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmM2Y0ZjYnOwogICAgICAgICAgICB3cmFwLnN0eWxlLmJvcmRlckNvbG9yID0gJyNkMWQ1ZGInOwogICAgICAgICAgICBsYmwuc3R5bGUuY29sb3IgPSAnIzZiNzI4MCc7CiAgICAgICAgICAgIGxibC50ZXh0Q29udGVudCA9ICfirZUgSW5hdGl2byc7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHZtMlNhdmVHYXRpbGhvcygpIHsKICAgICAgICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1zYXZlLWdhdGlsaG9zJyk7CiAgICAgICAgdmFyIG1zZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnYXRpbGhvcy1tc2cnKTsKICAgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZ2F0aWxob3MtZm9ybScpOwogICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgYnRuLnRleHRDb250ZW50ID0gJ+KPsyBTYWx2YW5kby4uLic7CiAgICAgICAgbXNnLnRleHRDb250ZW50ID0gJyc7CgogICAgICAgIHZhciBkYXRhID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ2FjdGlvbicsICd2bTJfZ2F0aWxob3Nfc2F2ZScpOwogICAgICAgIGRhdGEuYXBwZW5kKCdub25jZScsICc8P3BocCBlY2hvIGVzY19qcygkbm9uY2UpOyA/PicpOwogICAgICAgIGRhdGEuYXBwZW5kKCdyZXNlcnZhc19lbmFibGVkJywgICAgICAgZm9ybS5xdWVyeVNlbGVjdG9yKCdbbmFtZT1yZXNlcnZhc19lbmFibGVkXScpLmNoZWNrZWQgPyAnMScgOiAnMCcpOwogICAgICAgIGRhdGEuYXBwZW5kKCdzdGFyc19lbmFibGVkJywgICAgICAgICAgZm9ybS5xdWVyeVNlbGVjdG9yKCdbbmFtZT1zdGFyc19lbmFibGVkXScpLmNoZWNrZWQgPyAnMScgOiAnMCcpOwogICAgICAgIGRhdGEuYXBwZW5kKCdkaXNwX2VuYWJsZWQnLCAgICAgICAgICAgZm9ybS5xdWVyeVNlbGVjdG9yKCdbbmFtZT1kaXNwX2VuYWJsZWRdJykuY2hlY2tlZCA/ICcxJyA6ICcwJyk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ2Rpc2NvdW50X2JhZGdlX2VuYWJsZWQnLCBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWRpc2NvdW50X2JhZGdlX2VuYWJsZWRdJykuY2hlY2tlZCA/ICcxJyA6ICcwJyk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ2NvdW50ZG93bl9lbmFibGVkJywgICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNvdW50ZG93bl9lbmFibGVkXScpLmNoZWNrZWQgICAgICA/ICcxJyA6ICcwJyk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ2NvbWJvX2VuYWJsZWQnLCAgICAgICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNvbWJvX2VuYWJsZWRdJykuY2hlY2tlZCAgICAgICAgICA/ICcxJyA6ICcwJyk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ3N0aWNreV9jdGFfZW5hYmxlZCcsICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPXN0aWNreV9jdGFfZW5hYmxlZF0nKS5jaGVja2VkICAgICA/ICcxJyA6ICcwJyk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ29mZnNldF9taW4nLCBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPW9mZnNldF9taW5dJykudmFsdWUpOwogICAgICAgIGRhdGEuYXBwZW5kKCdvZmZzZXRfbWF4JywgZm9ybS5xdWVyeVNlbGVjdG9yKCdbbmFtZT1vZmZzZXRfbWF4XScpLnZhbHVlKTsKCiAgICAgICAgZmV0Y2goJzw/cGhwIGVjaG8gZXNjX2pzKGFkbWluX3VybCgnYWRtaW4tYWpheC5waHAnKSk7ID8+Jywge21ldGhvZDonUE9TVCcsIGJvZHk6ZGF0YX0pCiAgICAgICAgICAgIC50aGVuKHIgPT4gci5qc29uKCkpCiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7CiAgICAgICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfwn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXMnOwogICAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgbXNnLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT0iY29sb3I6IzE2NjUzNDtmb250LXdlaWdodDo2MDAiPicgKyByZXMuZGF0YS5tZXNzYWdlICsgJzwvc3Bhbj4nOwogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gbG9jYXRpb24ucmVsb2FkKCksIDEyMDApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtc2cuaW5uZXJIVE1MID0gJzxzcGFuIHN0eWxlPSJjb2xvcjojOTkxYjFiIj7inYwgRXJybyBhbyBzYWx2YXIuPC9zcGFuPic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfwn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXMnOwogICAgICAgICAgICAgICAgbXNnLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT0iY29sb3I6Izk5MWIxYiI+4p2MIEVycm8gZGUgY29uZXjDo28uPC9zcGFuPic7CiAgICAgICAgICAgIH0pOwogICAgfQogICAgPC9zY3JpcHQ+CiAgICA8P3BocAp9CgovLyDilIDilIAgU3VwZXJQV0Eg4oCUIFRyYWR1w6fDo28gZGFzIG1lbnNhZ2VucyBvZmZsaW5lL29ubGluZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbignd3BfZm9vdGVyJywgZnVuY3Rpb24oKSB7CiAgICBpZiAoaXNfYWRtaW4oKSkgcmV0dXJuOwogICAgCj8+CjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAgIGZ1bmN0aW9uIGZpeFN1cGVycHdhTXNncygpIHsKICAgICAgICBpZiAodHlwZW9mIHN1cGVycHdhX3N3ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICBzdXBlcnB3YV9zdy5vZmZsaW5lX21lc3NhZ2VfdHh0ID0gJ1ZvY8OqIGVzdMOhIHNlbSBjb25leMOjbyBjb20gYSBpbnRlcm5ldC4nOwogICAgICAgICAgICBzdXBlcnB3YV9zdy5vbmxpbmVfbWVzc2FnZV90eHQgID0gJ1ZvY8OqIHZvbHRvdSBhIHRlciBjb25leMOjbyEgPGEgaHJlZj0iamF2YXNjcmlwdDpsb2NhdGlvbi5yZWxvYWQoKSI+QXR1YWxpemFyPC9hPic7CiAgICAgICAgfQogICAgfQogICAgZml4U3VwZXJwd2FNc2dzKCk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZml4U3VwZXJwd2FNc2dzKTsKfSkoKTsKPC9zY3JpcHQ+CiAgICA8P3BocAp9LCA5OSk7CgoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIFNPRklBIElOVEVMTElHRU5DRSDigJQgQ1JNIFYyIHYxLjUuNTAKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgovLyDilIDilIAgQ3JpYcOnw6NvIGRhIHRhYmVsYSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2NyZWF0ZV9zb2ZpYV90YWJsZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0ICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9zZXNzaW9ucyc7CiAgICAkc3FsID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICR0ICgKICAgICAgaWQgICAgICAgICAgICAgICAgICBiaWdpbnQoMjApIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAogICAgICBzZXNzaW9uX2lkICAgICAgICAgIHZhcmNoYXIoNjQpIE5PVCBOVUxMLAogICAgICBwZXJzaXN0ZW50X3VpZCAgICAgIHZhcmNoYXIoNjQpIERFRkFVTFQgTlVMTCwKICAgICAgc3RhcnRlZF9hdCAgICAgICAgICBkYXRldGltZSBOT1QgTlVMTCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogICAgICBlbmRlZF9hdCAgICAgICAgICAgIGRhdGV0aW1lIERFRkFVTFQgTlVMTCwKICAgICAgcHJvZHVjdF9pZCAgICAgICAgICBiaWdpbnQoMjApIERFRkFVTFQgTlVMTCwKICAgICAgcHJvZHVjdF9uYW1lICAgICAgICB2YXJjaGFyKDI1NSkgREVGQVVMVCBOVUxMLAogICAgICB3aGF0c2FwcCAgICAgICAgICAgIHZhcmNoYXIoMzApIERFRkFVTFQgTlVMTCwKICAgICAgd2FfY2FwdHVyZWRfYXQgICAgICBkYXRldGltZSBERUZBVUxUIE5VTEwsCiAgICAgIHdhX2NhcHR1cmVfdHJpZ2dlciAgdmFyY2hhcig1MCkgREVGQVVMVCBOVUxMLAogICAgICBjYXRlZ29yaWEgICAgICAgICAgIHZhcmNoYXIoNjApIERFRkFVTFQgTlVMTCwKICAgICAgdGlwb19ldmVudG8gICAgICAgICB2YXJjaGFyKDEyMCkgREVGQVVMVCBOVUxMLAogICAgICBkYXRhX2V2ZW50b19zdHIgICAgIHZhcmNoYXIoMzApIERFRkFVTFQgTlVMTCwKICAgICAgdXJnZW5jaWEgICAgICAgICAgICB2YXJjaGFyKDIwKSBERUZBVUxUIE5VTEwsCiAgICAgIG1lbnNhZ2Vuc19jb3VudCAgICAgaW50IE5PVCBOVUxMIERFRkFVTFQgMCwKICAgICAgc2lnbmFscyAgICAgICAgICAgICBsb25ndGV4dCBERUZBVUxUIE5VTEwsCiAgICAgIGhpc3RvcmljbyAgICAgICAgICAgbG9uZ3RleHQgREVGQVVMVCBOVUxMLAogICAgICBjb252ZXJ0ZWQgICAgICAgICAgIHRpbnlpbnQoMSkgTk9UIE5VTEwgREVGQVVMVCAwLAogICAgICBzb3VyY2VfdXJsICAgICAgICAgIHZhcmNoYXIoNTEyKSBERUZBVUxUIE5VTEwsCiAgICAgIGVtYWlsICAgICAgICAgICAgICAgdmFyY2hhcigxMDApIERFRkFVTFQgTlVMTCwKICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgVU5JUVVFIEtFWSBzZXNzaW9uX2lkIChzZXNzaW9uX2lkKSwKICAgICAgS0VZIHdoYXRzYXBwICh3aGF0c2FwcCksCiAgICAgIEtFWSBzdGFydGVkX2F0IChzdGFydGVkX2F0KSwKICAgICAgS0VZIGNhdGVnb3JpYSAoY2F0ZWdvcmlhKSwKICAgICAgS0VZIHBlcnNpc3RlbnRfdWlkIChwZXJzaXN0ZW50X3VpZCksCiAgICAgIEtFWSBjb252ZXJ0ZWQgKGNvbnZlcnRlZCkKICAgICkgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9dXRmOG1iNDsiOwogICAgcmVxdWlyZV9vbmNlIEFCU1BBVEggLiAnd3AtYWRtaW4vaW5jbHVkZXMvdXBncmFkZS5waHAnOwogICAgZGJEZWx0YSgkc3FsKTsKICAgIC8vIEdhcmFudGlyIGNvbHVuYXMgYWRpY2lvbmFkYXMgZW0gdmVyc8O1ZXMgcG9zdGVyaW9yZXMgKGRlZmVuc2l2ZSBtaWdyYXRpb24pCiAgICAkZXhpc3RpbmdfY29scyA9ICR3cGRiLT5nZXRfY29sKCJERVNDUklCRSAkdCIpOwogICAgaWYgKCBpc19hcnJheSgkZXhpc3RpbmdfY29scykgKSB7CiAgICAgICAgaWYgKCAhIGluX2FycmF5KCdwZXJzaXN0ZW50X3VpZCcsICRleGlzdGluZ19jb2xzKSApIHsKICAgICAgICAgICAgJHdwZGItPnF1ZXJ5KCJBTFRFUiBUQUJMRSAkdCBBREQgQ09MVU1OIHBlcnNpc3RlbnRfdWlkIHZhcmNoYXIoNjQpIERFRkFVTFQgTlVMTCIpOwogICAgICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFICR0IEFERCBLRVkgcGVyc2lzdGVudF91aWRfaWR4IChwZXJzaXN0ZW50X3VpZCkiKTsKICAgICAgICB9CiAgICAgICAgaWYgKCAhIGluX2FycmF5KCd3YV9jYXB0dXJlZF9hdCcsICRleGlzdGluZ19jb2xzKSApIHsKICAgICAgICAgICAgJHdwZGItPnF1ZXJ5KCJBTFRFUiBUQUJMRSAkdCBBREQgQ09MVU1OIHdhX2NhcHR1cmVkX2F0IGRhdGV0aW1lIERFRkFVTFQgTlVMTCIpOwogICAgICAgIH0KICAgICAgICBpZiAoICEgaW5fYXJyYXkoJ3V0bV9zb3VyY2UnLCAkZXhpc3RpbmdfY29scykgKSB7CiAgICAgICAgICAgICR3cGRiLT5xdWVyeSgiQUxURVIgVEFCTEUgJHQgQUREIENPTFVNTiB1dG1fc291cmNlIHZhcmNoYXIoMTAwKSBERUZBVUxUIE5VTEwiKTsKICAgICAgICB9CiAgICAgICAgaWYgKCAhIGluX2FycmF5KCd1dG1fbWVkaXVtJywgJGV4aXN0aW5nX2NvbHMpICkgewogICAgICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFICR0IEFERCBDT0xVTU4gdXRtX21lZGl1bSB2YXJjaGFyKDEwMCkgREVGQVVMVCBOVUxMIik7CiAgICAgICAgfQogICAgICAgIGlmICggISBpbl9hcnJheSgndXRtX2NhbXBhaWduJywgJGV4aXN0aW5nX2NvbHMpICkgewogICAgICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFICR0IEFERCBDT0xVTU4gdXRtX2NhbXBhaWduIHZhcmNoYXIoMjU1KSBERUZBVUxUIE5VTEwiKTsKICAgICAgICB9CiAgICAgICAgaWYgKCAhIGluX2FycmF5KCdjYW5hbF9vcmlnZW0nLCAkZXhpc3RpbmdfY29scykgKSB7CiAgICAgICAgICAgICR3cGRiLT5xdWVyeSgiQUxURVIgVEFCTEUgJHQgQUREIENPTFVNTiBjYW5hbF9vcmlnZW0gdmFyY2hhcig2MCkgREVGQVVMVCBOVUxMIik7CiAgICAgICAgfQogICAgICAgIC8vIHYxLjUuOTE6IGVtYWlsIGNhcHR1cmUKICAgICAgICBpZiAoICEgaW5fYXJyYXkoJ2VtYWlsJywgJGV4aXN0aW5nX2NvbHMpICkgewogICAgICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFICR0IEFERCBDT0xVTU4gZW1haWwgdmFyY2hhcigxMDApIERFRkFVTFQgTlVMTCIpOwogICAgICAgIH0KICAgIH0KICAgIC8vIGluaXQgZW0gcnVudGltZSB0YW1iw6ltCiAgICBhZGRfYWN0aW9uKCdpbml0JywgZnVuY3Rpb24oKSB7CiAgICAgICAgc3RhdGljICRkb25lID0gZmFsc2U7CiAgICAgICAgaWYgKCRkb25lKSByZXR1cm47ICRkb25lID0gdHJ1ZTsKICAgICAgICBnbG9iYWwgJHdwZGI7CiAgICAgICAgJHQgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9zZXNzaW9ucyc7CiAgICAgICAgaWYgKCR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICckdCciKSAhPT0gJHQpIHsKICAgICAgICAgICAgdm0yX2NyZWF0ZV9zb2ZpYV90YWJsZSgpOwogICAgICAgIH0KICAgIH0pOwp9CmFkZF9hY3Rpb24oJ3BsdWdpbnNfbG9hZGVkJywgJ3ZtMl9jcmVhdGVfc29maWFfdGFibGUnLCA1KTsKCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAovLyBTT0ZJQSBLTk9XTEVER0UgQkFTRQovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKZnVuY3Rpb24gdm0yX2NyZWF0ZV9zb2ZpYV9rbm93bGVkZ2VfdGFibGUoKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdCA9ICR3cGRiLT5wcmVmaXggLiAndm0yX3NvZmlhX2tub3dsZWRnZSc7CiAgICBpZiAoICR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICckdCciKSA9PT0gJHQgKSByZXR1cm47CiAgICAkY2hhcnNldCA9ICR3cGRiLT5nZXRfY2hhcnNldF9jb2xsYXRlKCk7CiAgICAkc3FsID0gIkNSRUFURSBUQUJMRSAkdCAoCiAgICAgICAgaWQgQklHSU5UIFVOU0lHTkVEIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAogICAgICAgIHRpcG8gVkFSQ0hBUigyMCkgTk9UIE5VTEwgREVGQVVMVCAndGV4dG8nLAogICAgICAgIHRpdHVsbyBWQVJDSEFSKDI1NSkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICBjb250ZXVkbyBMT05HVEVYVCwKICAgICAgICB1cmwgVkFSQ0hBUig1MTIpIERFRkFVTFQgTlVMTCwKICAgICAgICBhdGl2byBUSU5ZSU5UKDEpIE5PVCBOVUxMIERFRkFVTFQgMSwKICAgICAgICBjcmlhZG9fZW0gREFURVRJTUUgREVGQVVMVCBOVUxMLAogICAgICAgIFBSSU1BUlkgS0VZIChpZCkKICAgICkgJGNoYXJzZXQ7IjsKICAgIHJlcXVpcmVfb25jZSBBQlNQQVRIIC4gJ3dwLWFkbWluL2luY2x1ZGVzL3VwZ3JhZGUucGhwJzsKICAgIGRiRGVsdGEoICRzcWwgKTsKfQphZGRfYWN0aW9uKCAncGx1Z2luc19sb2FkZWQnLCAndm0yX2NyZWF0ZV9zb2ZpYV9rbm93bGVkZ2VfdGFibGUnLCA2ICk7CgpmdW5jdGlvbiB2bTJfc29maWFfa2Jfc2NyYXBlX3VybCggJHVybCApIHsKICAgIC8vIEdvb2dsZSBEb2NzIOKGkiBleHBvcnRhciBjb21vIHRleHRvIHBsYW5vCiAgICBpZiAoIHByZWdfbWF0Y2goICcjZG9jc1wuZ29vZ2xlXC5jb20vZG9jdW1lbnQvZC8oW2EtekEtWjAtOV8tXSspIycsICR1cmwsICRtICkgKSB7CiAgICAgICAgJGV4cG9ydCA9ICdodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLycgLiAkbVsxXSAuICcvZXhwb3J0P2Zvcm1hdD10eHQnOwogICAgICAgICRyZXNwICAgPSB3cF9yZW1vdGVfZ2V0KCAkZXhwb3J0LCBhcnJheSggJ3RpbWVvdXQnID0+IDIwLCAnc3NsdmVyaWZ5JyA9PiBmYWxzZSApICk7CiAgICAgICAgaWYgKCAhIGlzX3dwX2Vycm9yKCAkcmVzcCApICYmIHdwX3JlbW90ZV9yZXRyaWV2ZV9yZXNwb25zZV9jb2RlKCAkcmVzcCApID09PSAyMDAgKSB7CiAgICAgICAgICAgICR0ZXh0ID0gd3BfcmVtb3RlX3JldHJpZXZlX2JvZHkoICRyZXNwICk7CiAgICAgICAgICAgICR0ZXh0ID0gcHJlZ19yZXBsYWNlKCAnL1xzKy8nLCAnICcsICR0ZXh0ICk7CiAgICAgICAgICAgIHJldHVybiBhcnJheSggJ3RpdHVsbycgPT4gJ0dvb2dsZSBEb2MgaW1wb3J0YWRvJywgJ2NvbnRldWRvJyA9PiBtYl9zdWJzdHIoIHRyaW0oICR0ZXh0ICksIDAsIDE1MDAwICkgKTsKICAgICAgICB9CiAgICB9CiAgICAvLyBHb29nbGUgRHJpdmUgZmlsZSAobm90IERvYykg4oCUIGRyaXZlLmdvb2dsZS5jb20vZmlsZS9kL0lECiAgICBpZiAoIHByZWdfbWF0Y2goICcjZHJpdmVcLmdvb2dsZVwuY29tL2ZpbGUvZC8oW2EtekEtWjAtOV8tXSspIycsICR1cmwsICRtICkgKSB7CiAgICAgICAgcmV0dXJuIGFycmF5KCAnZXJybycgPT4gJ0FycXVpdm9zIGRvIEdvb2dsZSBEcml2ZSBwcmVjaXNhbSBzZXIgY29udmVydGlkb3MgcGFyYSBHb29nbGUgRG9jcyBvdSB0ZXIgbyB0ZXh0byBjb2xhZG8gZGlyZXRhbWVudGUuIERpY2E6IGFicmEgbyBhcnF1aXZvLCBjb3BpZSBvIHRleHRvIGUgdXNlIG8gdGlwbyAiVGV4dG8gbGl2cmUiLicgKTsKICAgIH0KICAgIC8vIFVSTCBub3JtYWwKICAgICRyZXNwID0gd3BfcmVtb3RlX2dldCggJHVybCwgYXJyYXkoCiAgICAgICAgJ3RpbWVvdXQnICAgPT4gMjAsCiAgICAgICAgJ3NzbHZlcmlmeScgPT4gZmFsc2UsCiAgICAgICAgJ2hlYWRlcnMnICAgPT4gYXJyYXkoICdVc2VyLUFnZW50JyA9PiAnTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IFZpdmFNYWlzQm90LzEuMCknICksCiAgICApICk7CiAgICBpZiAoIGlzX3dwX2Vycm9yKCAkcmVzcCApICkgewogICAgICAgIHJldHVybiBhcnJheSggJ2Vycm8nID0+ICdFcnJvIGFvIGFjZXNzYXIgVVJMOiAnIC4gJHJlc3AtPmdldF9lcnJvcl9tZXNzYWdlKCkgKTsKICAgIH0KICAgICRjb2RlID0gd3BfcmVtb3RlX3JldHJpZXZlX3Jlc3BvbnNlX2NvZGUoICRyZXNwICk7CiAgICBpZiAoICRjb2RlICE9PSAyMDAgKSB7CiAgICAgICAgcmV0dXJuIGFycmF5KCAnZXJybycgPT4gIlVSTCByZXRvcm5vdSBIVFRQIHskY29kZX0g4oCUIHZlcmlmaXF1ZSBzZSDDqSBww7pibGljYS4iICk7CiAgICB9CiAgICAkaHRtbCAgPSB3cF9yZW1vdGVfcmV0cmlldmVfYm9keSggJHJlc3AgKTsKICAgICR0aXR1bG8gPSAnJzsKICAgIGlmICggcHJlZ19tYXRjaCggJyM8dGl0bGVbXj5dKj4oLio/KTwvdGl0bGU+I3NpJywgJGh0bWwsICR0bSApICkgewogICAgICAgICR0aXR1bG8gPSBodG1sX2VudGl0eV9kZWNvZGUoIHN0cmlwX3RhZ3MoICR0bVsxXSApLCBFTlRfUVVPVEVTLCAnVVRGLTgnICk7CiAgICAgICAgJHRpdHVsbyA9IHRyaW0oICR0aXR1bG8gKTsKICAgIH0KICAgIC8vIFJlbW92ZSBzY3JpcHQvc3R5bGUvbmF2L2Zvb3RlcgogICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoICcjPChzY3JpcHR8c3R5bGV8bmF2fGZvb3RlcnxoZWFkZXJ8YXNpZGUpW14+XSo+Lio/PC9cMT4jc2knLCAnICcsICRodG1sICk7CiAgICAkdGV4dCA9IHN0cmlwX3RhZ3MoICRodG1sICk7CiAgICAkdGV4dCA9IGh0bWxfZW50aXR5X2RlY29kZSggJHRleHQsIEVOVF9RVU9URVMsICdVVEYtOCcgKTsKICAgICR0ZXh0ID0gcHJlZ19yZXBsYWNlKCAnL1xzKy8nLCAnICcsICR0ZXh0ICk7CiAgICAkdGV4dCA9IHRyaW0oICR0ZXh0ICk7CiAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgJ3RpdHVsbycgICA9PiAkdGl0dWxvID86ICggcGFyc2VfdXJsKCAkdXJsLCBQSFBfVVJMX0hPU1QgKSA/OiAkdXJsICksCiAgICAgICAgJ2NvbnRldWRvJyA9PiBtYl9zdWJzdHIoICR0ZXh0LCAwLCAxNTAwMCApLAogICAgKTsKfQoKLy8gQUpBWDogc2FsdmFyIGl0ZW0KYWRkX2FjdGlvbiggJ3dwX2FqYXhfdm0yX3NvZmlhX2tiX3NhdmUnLCAndm0yX3NvZmlhX2tiX3NhdmVfaGFuZGxlcicgKTsKCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBQSVBFTElORSBUQUIg4oCUIEZ1bmlsIHZpc3VhbCBGb250ZXMg4oaSIFNlZ21lbnRvcyDihpIgQXV0b21hw6fDtWVzCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfcmVuZGVyX3BpcGVsaW5lX3RhYigpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0YWJsZSA9ICR3cGRiLT5wcmVmaXggLiAndm0yX2NvbnRhY3RzJzsKICAgICRzZW5kcyA9ICR3cGRiLT5wcmVmaXggLiAndm0yX3NlbmRzJzsKCiAgICAvLyDilIDilIAgRm9udGVzIOKUgOKUgAogICAgJHRvdGFsX2NvbnRhY3RzID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIik7CiAgICAkY250X3BlZGlkbyAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIG9yaWdlbnMgTElLRSAnJVwicGVkaWRvXCIlJyIpOwogICAgJGNudF9zb2ZpYSAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBvcmlnZW5zIExJS0UgJyVcInNvZmlhXCIlJyIpOwogICAgJGNudF9nYWxlcmlhICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBvcmlnZW5zIExJS0UgJyVcImdhbGVyaWFcIiUnIik7CiAgICAkY250X2NhcnJpbmhvID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIG9yaWdlbnMgTElLRSAnJVwiY2FycmluaG9cIiUnIik7CiAgICAkY250X2tvbW1vICAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIG9yaWdlbnMgTElLRSAnJVwia29tbW9cIiUnIik7CgogICAgLy8g4pSA4pSAIFNlZ21lbnRvcyDilIDilIAKICAgICRjbnRfaG90ICAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzY29yZSA+PSA3MCIpOwogICAgJGNudF91cmdlbnRlID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIGRhdGFfZXZlbnRvID49IENVUkRBVEUoKSBBTkQgZGF0YV9ldmVudG8gPD0gREFURV9BREQoQ1VSREFURSgpLCBJTlRFUlZBTCA3IERBWSkiKTsKICAgICRjbnRfd2FybSAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzY29yZSA+PSA0MCBBTkQgc2NvcmUgPCA3MCIpOwogICAgJGNudF9zZW1kYXRhID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIChkYXRhX2V2ZW50byBJUyBOVUxMIE9SIGRhdGFfZXZlbnRvID0gJycpIEFORCBzY29yZSA8IDcwIik7CiAgICAkY250X2NsaWVudGVzPSAkY250X3BlZGlkbzsKCiAgICAvLyDilIDilIAgQXV0b21hw6fDtWVzOiBzdGF0dXMg4pSA4pSACiAgICAkYXF1ZWNlcl9raWxsID0gZ2V0X29wdGlvbigndm0yX2FxdWVjZXJfa2lsbCcsICcxJyk7CiAgICAkYWFfb24gICAgICAgID0gZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9vbicsICcwJyk7CiAgICAkaG90X2tpbGwgICAgID0gZ2V0X29wdGlvbigndm0yX2hvdF9raWxsJywgJzEnKTsKICAgICRieWRhdGVfa2lsbCAgPSBnZXRfb3B0aW9uKCd2bTJfYnlkYXRlX2tpbGwnLCAnMScpOwogICAgJGNhcnRfa2lsbCAgICA9IChib29sKWdldF9vcHRpb24oJ3ZtX3dhX2tpbGxfc3dpdGNoJywgMCk7CgogICAgLy8g4pSA4pSAIEVudmlvcyBob2plIHBvciBtw7NkdWxvIOKUgOKUgAogICAgJHRvZGF5ICAgICA9IGN1cnJlbnRfdGltZSgnWS1tLWQnKTsKICAgICR0b2RheV9yb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKCR3cGRiLT5wcmVwYXJlKAogICAgICAgICJTRUxFQ1QgbW9kdWxlLCBDT1VOVCgqKSBhcyBjbnQgRlJPTSAkc2VuZHMgV0hFUkUgREFURShzZW50X2F0KSA9ICVzIEdST1VQIEJZIG1vZHVsZSIsCiAgICAgICAgJHRvZGF5CiAgICApLCBPQkpFQ1RfSyk7CiAgICAkZ2V0X3RvZGF5ID0gZnVuY3Rpb24oJG1vZCkgdXNlICgkdG9kYXlfcm93cykgewogICAgICAgIHJldHVybiBpc3NldCgkdG9kYXlfcm93c1skbW9kXSkgPyAoaW50KSR0b2RheV9yb3dzWyRtb2RdLT5jbnQgOiAwOwogICAgfTsKICAgICR0b2RheV90b3RhbCA9IChpbnQpJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoCiAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NICRzZW5kcyBXSEVSRSBEQVRFKHNlbnRfYXQpID0gJXMiLCAkdG9kYXkKICAgICkpOwoKICAgIC8vIOKUgOKUgCBMb2cgcmVjZW50ZSDilIDilIAKICAgICRsb2dfcm93cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAiU0VMRUNUIHMucGhvbmUsIHMubW9kdWxlLCBzLnNlbnRfYXQsIGMubmFtZQogICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9zZW5kcyBzCiAgICAgICAgIExFRlQgSk9JTiAkdGFibGUgYyBPTiBjLnBob25lID0gcy5waG9uZQogICAgICAgICBPUkRFUiBCWSBzLmlkIERFU0MgTElNSVQgMjAiCiAgICApOwoKICAgICRtb2RfbGFiZWxzID0gWwogICAgICAgICdhcXVlY2VyJyAgICAgID0+IFsnbGFiZWwnID0+ICfwn5SlIEFxdWVjZXIgRCtYJywgICdjb2xvcicgPT4gJyNlNzRjM2MnXSwKICAgICAgICAnYXV0b19hcXVlY2VyJyA9PiBbJ2xhYmVsJyA9PiAn8J+kliBBdXRvLUFxdWVjZXInLCAnY29sb3InID0+ICcjOWI1OWI2J10sCiAgICAgICAgJ2xlYWRzJyAgICAgICAgPT4gWydsYWJlbCcgPT4gJ/Cfjq8gTGVhZHMgSE9UJywgICAgJ2NvbG9yJyA9PiAnI2U2N2UyMiddLAogICAgICAgICdieWRhdGUnICAgICAgID0+IFsnbGFiZWwnID0+ICfwn5OFIFBvciBEYXRhJywgICAgICdjb2xvcicgPT4gJyMzNDk4ZGInXSwKICAgICAgICAnY2FycmluaG8nICAgICA9PiBbJ2xhYmVsJyA9PiAn8J+bkiBDYXJyaW5obycsICAgICAnY29sb3InID0+ICcjMjdhZTYwJ10sCiAgICBdOwoKICAgICRjb250YWN0c191cmwgPSBhZG1pbl91cmwoJ2FkbWluLnBocD9wYWdlPXZtMi1jb250YWN0cycpOwogICAgJGF1dG9fdXJsICAgICA9IGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLWF1dG9tYWNvZXMnKTsKICAgID8+CiAgICA8c3R5bGU+CiAgICAudm0ycGwtdG90YWx7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojZmZmYmViO2JvcmRlcjoxcHggc29saWQgI2ZjZDM0ZDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEwcHggMTZweDttYXJnaW4tYm90dG9tOjE2cHg7Zm9udC1zaXplOjEzcHh9CiAgICAudm0ycGwtdG90YWwgc3Ryb25ne2ZvbnQtc2l6ZToyMnB4O2NvbG9yOiNiNDUzMDl9CiAgICAudm0ycGwtZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAzNnB4IDFmciAzNnB4IDFmcjtnYXA6MDthbGlnbi1pdGVtczpzdGFydDttYXJnaW4tYm90dG9tOjIwcHh9CiAgICBAbWVkaWEobWF4LXdpZHRoOjkwMHB4KXsudm0ycGwtZ3JpZHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfS52bTJwbC1hcnJvd3t0cmFuc2Zvcm06cm90YXRlKDkwZGVnKTttYXJnaW46NnB4IGF1dG8haW1wb3J0YW50O3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fX0KICAgIC52bTJwbC1jb2x7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U4ZWFlZDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNHB4IDE2cHh9CiAgICAudm0ycGwtY29sIGgze2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjojMWExYTJlO21hcmdpbjowIDAgMTBweDtwYWRkaW5nLWJvdHRvbTo4cHg7Ym9yZGVyLWJvdHRvbToycHggc29saWQgI2YwZjBmMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjZweH0KICAgIC52bTJwbC1jYXJke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzo3cHggMTBweDtib3JkZXItcmFkaXVzOjdweDttYXJnaW4tYm90dG9tOjVweDtiYWNrZ3JvdW5kOiNmOGY5ZmE7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1czt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjppbmhlcml0fQogICAgLnZtMnBsLWNhcmQ6aG92ZXJ7YmFja2dyb3VuZDojZWVmMmZmO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDJweCl9CiAgICAudm0ycGwtY2FyZC1hdXRve2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDozcHh9CiAgICAudm0ycGwtbGVmdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo3cHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwfQogICAgLnZtMnBsLWJhZGdle2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjgwMDtiYWNrZ3JvdW5kOiMxYTFhMmU7Y29sb3I6I0ZGRDcwMDtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMnB4O21pbi13aWR0aDoyNnB4O3RleHQtYWxpZ246Y2VudGVyfQogICAgLnZtMnBsLWFycm93e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZToyMHB4O3BhZGRpbmctdG9wOjQ0cHh9CiAgICAudm0ycGwtc3RhdHVze2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDozcHg7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6MnB4IDdweDtib3JkZXItcmFkaXVzOjEwcHh9CiAgICAudm0ycGwtc3RhdHVzLm9ue2JhY2tncm91bmQ6I2RjZmNlNztjb2xvcjojMTZhMzRhfQogICAgLnZtMnBsLXN0YXR1cy5vZmZ7YmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiNkYzI2MjZ9CiAgICAudm0ycGwtYXV0by1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjt3aWR0aDoxMDAlfQogICAgLnZtMnBsLXN1Yntmb250LXNpemU6MTBweDtjb2xvcjojNmI3MjgwO3BhZGRpbmctbGVmdDoycHh9CiAgICAudm0ycGwtY29sLWZvb3RlcnttYXJnaW4tdG9wOjhweDtwYWRkaW5nLXRvcDo4cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2YwZjBmMDtmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO3RleHQtYWxpZ246Y2VudGVyfQogICAgLnZtMnBsLWxvZ3tiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZThlYWVkO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHh9CiAgICAudm0ycGwtbG9nIGgze2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjojMWExYTJlO21hcmdpbjowIDAgMTBweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjZweH0KICAgIC52bTJwbC1sb2ctcm93e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjVweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmNGY0ZjQ7Zm9udC1zaXplOjEycHh9CiAgICAudm0ycGwtbG9nLXJvdzpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206bm9uZX0KICAgIC52bTJwbC1sb2ctbW9ke3dpZHRoOjEwNXB4O2ZsZXgtc2hyaW5rOjB9CiAgICAudm0ycGwtbG9nLXRpbWV7Y29sb3I6IzljYTNhZjt3aGl0ZS1zcGFjZTpub3dyYXA7bWFyZ2luLWxlZnQ6YXV0bztmb250LXNpemU6MTFweH0KICAgIC52bTJwbC1sb2ctbmFtZXtmbGV4OjE7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtd2VpZ2h0OjUwMH0KICAgIC52bTJwbC1sb2ctcGhvbmV7Y29sb3I6IzZiNzI4MDtmb250LXNpemU6MTFweDt3aGl0ZS1zcGFjZTpub3dyYXB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9InZtMnBsLXRvdGFsIj4KICAgICAgICBUb3RhbCBkZSBtZW5zYWdlbnMgZW52aWFkYXMgaG9qZTogPHN0cm9uZz48P3BocCBlY2hvICR0b2RheV90b3RhbDsgPz48L3N0cm9uZz4KICAgICAgICAmbmJzcDvCtyZuYnNwOyA8P3BocCBlY2hvICR0b3RhbF9jb250YWN0czsgPz4gY29udGF0b3MgbmEgYmFzZQogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idm0ycGwtZ3JpZCI+CgogICAgICAgIDwhLS0g4pSA4pSAIENPTFVOQSAxOiBGT05URVMg4pSA4pSAIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InZtMnBsLWNvbCI+CiAgICAgICAgICAgIDxoMz7wn5OlIEZvbnRlcyBkZSBMZWFkczwvaDM+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICRmb250ZXMgPSBbCiAgICAgICAgICAgICAgICBbJ/Cfm5IgV29vQ29tbWVyY2UnLCAgJGNudF9wZWRpZG8sICAgJGNvbnRhY3RzX3VybCAuICcmc291cmNlPXBlZGlkbyddLAogICAgICAgICAgICAgICAgWyfwn6egIFNvZklBJywgICAgICAgICRjbnRfc29maWEsICAgICRjb250YWN0c191cmwgLiAnJnNvdXJjZT1zb2ZpYSddLAogICAgICAgICAgICAgICAgWyfwn5O4IEdhbGVyaWEnLCAgICAgICRjbnRfZ2FsZXJpYSwgICRjb250YWN0c191cmwgLiAnJnNvdXJjZT1nYWxlcmlhJ10sCiAgICAgICAgICAgICAgICBbJ/Cfm5IgQ2FycmluaG8nLCAgICAgJGNudF9jYXJyaW5obywgJGNvbnRhY3RzX3VybCAuICcmc291cmNlPWNhcnJpbmhvJ10sCiAgICAgICAgICAgICAgICBbJ/CflKUgS29tbW8nLCAgICAgICAgJGNudF9rb21tbywgICAgJGNvbnRhY3RzX3VybCAuICcmc291cmNlPWtvbW1vJ10sCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGZvcmVhY2ggKCRmb250ZXMgYXMgWyRsYWJlbCwgJGNvdW50LCAkdXJsXSk6CiAgICAgICAgICAgID8+CiAgICAgICAgICAgIDxhIGNsYXNzPSJ2bTJwbC1jYXJkIiBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJHVybCk7ID8+Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1sZWZ0Ij48P3BocCBlY2hvICRsYWJlbDsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0ycGwtYmFkZ2UiPjw/cGhwIGVjaG8gJGNvdW50OyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTJwbC1jb2wtZm9vdGVyIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkY29udGFjdHNfdXJsKTsgPz4iIHN0eWxlPSJjb2xvcjojM2I4MmY2O3RleHQtZGVjb3JhdGlvbjpub25lIj4KICAgICAgICAgICAgICAgICAgICBWZXIgdG9kb3Mgb3MgPD9waHAgZWNobyAkdG90YWxfY29udGFjdHM7ID8+IGNvbnRhdG9zIOKGkgogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBzZXRhIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InZtMnBsLWFycm93Ij7ihpI8L2Rpdj4KCiAgICAgICAgPCEtLSDilIDilIAgQ09MVU5BIDI6IFNFR01FTlRPUyDilIDilIAgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0idm0ycGwtY29sIj4KICAgICAgICAgICAgPGgzPvCfkaUgU2VnbWVudG9zPC9oMz4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgJHNlZ3MgPSBbCiAgICAgICAgICAgICAgICBbJ/CflKUgSE9UIChzY29yZSDiiaUgNzApJywgICAkY250X2hvdCwgICAgICRjb250YWN0c191cmwgLiAnJnNjb3JlX2Y9aG90J10sCiAgICAgICAgICAgICAgICBbJ+KaoSBVcmdlbnRlICjiiaQgNyBkaWFzKScsICRjbnRfdXJnZW50ZSwgJGNvbnRhY3RzX3VybCAuICcmZHA9dXJnZW50ZSddLAogICAgICAgICAgICAgICAgWyfwn4yh77iPIFdhcm0gKHNjb3JlIDQw4oCTNjkpJywgJGNudF93YXJtLCAgICAkY29udGFjdHNfdXJsIC4gJyZzY29yZV9mPXdhcm0nXSwKICAgICAgICAgICAgICAgIFsn8J+ThSBTZW0gZGF0YScsICAgICAgICAgICAkY250X3NlbWRhdGEsICRjb250YWN0c191cmwgLiAnJmRwPXNlbWRhdGEnXSwKICAgICAgICAgICAgICAgIFsn8J+OiSBDbGllbnRlcyBXQycsICAgICAgICAkY250X2NsaWVudGVzLCRjb250YWN0c191cmwgLiAnJnNvdXJjZT1wZWRpZG8nXSwKICAgICAgICAgICAgXTsKICAgICAgICAgICAgZm9yZWFjaCAoJHNlZ3MgYXMgWyRsYWJlbCwgJGNvdW50LCAkdXJsXSk6CiAgICAgICAgICAgID8+CiAgICAgICAgICAgIDxhIGNsYXNzPSJ2bTJwbC1jYXJkIiBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJHVybCk7ID8+Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1sZWZ0Ij48P3BocCBlY2hvICRsYWJlbDsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0ycGwtYmFkZ2UiPjw/cGhwIGVjaG8gJGNvdW50OyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTJwbC1jb2wtZm9vdGVyIj5DbGlxdWUgcGFyYSBmaWx0cmFyIG9zIGNvbnRhdG9zPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gc2V0YSAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTJwbC1hcnJvdyI+4oaSPC9kaXY+CgogICAgICAgIDwhLS0g4pSA4pSAIENPTFVOQSAzOiBBVVRPTUHDh8OVRVMg4pSA4pSAIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InZtMnBsLWNvbCI+CiAgICAgICAgICAgIDxoMz7wn6SWIEF1dG9tYcOnw7VlczwvaDM+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICRhdXRvcyA9IFsKICAgICAgICAgICAgICAgIFsn8J+UpSBBcXVlY2VyIEQrWCcsICAkYXF1ZWNlcl9raWxsID09PSAnMCcsICdhcXVlY2VyJywgICAgICAkYXV0b191cmwgLiAnJnRhYj1hcXVlY2VyJ10sCiAgICAgICAgICAgICAgICBbJ/CfpJYgQXV0by1BcXVlY2VyJywgJGFhX29uID09PSAnMScsICAgICAgICAnYXV0b19hcXVlY2VyJywgJGF1dG9fdXJsIC4gJyZ0YWI9YXF1ZWNlciddLAogICAgICAgICAgICAgICAgWyfwn46vIExlYWRzIEhPVCcsICAgICRob3Rfa2lsbCA9PT0gJzAnLCAgICAgJ2xlYWRzJywgICAgICAgICRhdXRvX3VybCAuICcmdGFiPWxlYWRzJ10sCiAgICAgICAgICAgICAgICBbJ/Cfk4UgUG9yIERhdGEnLCAgICAgJGJ5ZGF0ZV9raWxsID09PSAnMCcsICAnYnlkYXRlJywgICAgICAgJGF1dG9fdXJsIC4gJyZ0YWI9YnlkYXRlJ10sCiAgICAgICAgICAgICAgICBbJ/Cfm5IgQ2FycmluaG8nLCAgICAgISRjYXJ0X2tpbGwsICAgICAgICAgICAnY2FycmluaG8nLCAgICAgJGF1dG9fdXJsIC4gJyZ0YWI9Y2FycmluaG8nXSwKICAgICAgICAgICAgXTsKICAgICAgICAgICAgZm9yZWFjaCAoJGF1dG9zIGFzIFskbGFiZWwsICRpc19vbiwgJG1vZCwgJHVybF0pOgogICAgICAgICAgICAgICAgJG5fdG9kYXkgPSAkZ2V0X3RvZGF5KCRtb2QpOwogICAgICAgICAgICA/PgogICAgICAgICAgICA8YSBjbGFzcz0idm0ycGwtY2FyZCB2bTJwbC1jYXJkLWF1dG8iIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkdXJsKTsgPz4iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0ycGwtYXV0by1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1sZWZ0Ij48P3BocCBlY2hvICRsYWJlbDsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMnBsLXN0YXR1cyA8P3BocCBlY2hvICRpc19vbiA/ICdvbicgOiAnb2ZmJzsgPz4iPjw/cGhwIGVjaG8gJGlzX29uID8gJ/Cfn6IgQVRJVk8nIDogJ/CflLQgUEFSQURPJzsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1zdWIiPjw/cGhwIGVjaG8gJG5fdG9kYXk7ID8+IGVudmlvKHMpIGhvamUgwrcgY2xpcXVlIHBhcmEgY29uZmlndXJhcjwvc3Bhbj4KICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgIDwvZGl2PgoKICAgIDwvZGl2PjwhLS0gLnZtMnBsLWdyaWQgLS0+CgogICAgPCEtLSBMT0cgUkVDRU5URSAtLT4KICAgIDxkaXYgY2xhc3M9InZtMnBsLWxvZyI+CiAgICAgICAgPGgzPvCfk4sgRW52aW9zIFJlY2VudGVzIOKAlCBUb2RhcyBhcyBBdXRvbWHDp8O1ZXM8L2gzPgogICAgICAgIDw/cGhwIGlmICgkbG9nX3Jvd3MpOiA/PgogICAgICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0byI+CiAgICAgICAgPD9waHAgZm9yZWFjaCAoJGxvZ19yb3dzIGFzICRyb3cpOgogICAgICAgICAgICAkbWwgICAgPSAkbW9kX2xhYmVsc1skcm93LT5tb2R1bGVdID8/IFsnbGFiZWwnID0+IGVzY19odG1sKCRyb3ctPm1vZHVsZSksICdjb2xvcicgPT4gJyM2YjcyODAnXTsKICAgICAgICAgICAgJGR0ICAgID0gZ2V0X2RhdGVfZnJvbV9nbXQoJHJvdy0+c2VudF9hdCwgJ2QvbSBIOmknKTsKICAgICAgICA/PgogICAgICAgIDxkaXYgY2xhc3M9InZtMnBsLWxvZy1yb3ciPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0ycGwtbG9nLW1vZCI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDo8P3BocCBlY2hvICRtbFsnY29sb3InXTsgPz47Y29sb3I6I2ZmZjtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMCI+PD9waHAgZWNobyAkbWxbJ2xhYmVsJ107ID8+PC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1sb2ctbmFtZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkcm93LT5uYW1lID86ICfigJQnKTsgPz48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1sb2ctcGhvbmUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHJvdy0+cGhvbmUpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMnBsLWxvZy10aW1lIj48P3BocCBlY2hvICRkdDsgPz48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgIDxwIHN0eWxlPSJjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MjBweCAwIj5OZW5odW0gZW52aW8gcmVnaXN0cmFkbyBhaW5kYS4gT3MgbG9ncyBhcGFyZWNlbSBhcXVpIGFww7NzIG9zIHByaW1laXJvcyBkaXNwYXJvcy48L3A+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICA8L2Rpdj4KICAgIDw/cGhwCn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBBSkFYIOKAlCBCdWxrIGFjdGlvbjogYWRpY2lvbmFyIGNvbnRhdG9zIGEgYXV0b21hw6fDo28KLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2J1bGtfYXF1ZWNlcicsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfYnVsa19hcXVlY2VyJywgJ25vbmNlJyk7CiAgICBpZiAoIWN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHdwX2RpZSgpOwoKICAgIGdsb2JhbCAkd3BkYjsKICAgICRwaG9uZXMgPSBpc3NldCgkX1BPU1RbJ3Bob25lcyddKSA/IGFycmF5X21hcCgnc2FuaXRpemVfdGV4dF9maWVsZCcsIChhcnJheSkkX1BPU1RbJ3Bob25lcyddKSA6IFtdOwogICAgJG1vZHVsZSA9IHNhbml0aXplX2tleSgkX1BPU1RbJ21vZHVsZSddID8/ICdhcXVlY2VyJyk7CiAgICBpZiAoIWluX2FycmF5KCRtb2R1bGUsIFsnYXF1ZWNlcicsJ2J5ZGF0ZSddKSkgJG1vZHVsZSA9ICdhcXVlY2VyJzsKICAgIGlmIChlbXB0eSgkcGhvbmVzKSkgewogICAgICAgIHdwX3NlbmRfanNvbl9lcnJvcihbJ21zZycgPT4gJ05lbmh1bSBjb250YXRvIHNlbGVjaW9uYWRvLiddKTsKICAgIH0KCiAgICAkc2VuZHMgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zZW5kcyc7CiAgICAkcGhfaW4gPSBpbXBsb2RlKCcsJywgYXJyYXlfZmlsbCgwLCBjb3VudCgkcGhvbmVzKSwgJyVzJykpOwoKICAgIC8vIFJlbW92ZSBjb29sZG93biByZWNlbnRlIHBhcmEgZXNzZXMgcGhvbmVzIG5lc3NlIG3Ds2R1bG8KICAgICRhcmdzX2RlbCA9IGFycmF5X21lcmdlKFskbW9kdWxlXSwgJHBob25lcyk7CiAgICAkZGVsZXRlZCAgPSAkd3BkYi0+cXVlcnkoJHdwZGItPnByZXBhcmUoCiAgICAgICAgIkRFTEVURSBGUk9NICRzZW5kcyBXSEVSRSBtb2R1bGUgPSAlcyBBTkQgcGhvbmUgSU4gKCRwaF9pbikgQU5EIHNlbnRfYXQgPiBEQVRFX1NVQihOT1coKSwgSU5URVJWQUwgMzAgREFZKSIsCiAgICAgICAgLi4uJGFyZ3NfZGVsCiAgICApKTsKCiAgICAkbGFiZWwgPSAkbW9kdWxlID09PSAnYXF1ZWNlcicgPyAnQXF1ZWNlciBEK1gnIDogJ1BvciBEYXRhJzsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsKICAgICAgICAnbXNnJyAgICAgPT4gY291bnQoJHBob25lcykgLiAnIGNvbnRhdG8ocykgYWRpY2lvbmFkbyhzKSDDoCBmaWxhIGRlICcgLiAkbGFiZWwgLiAnLiBDb29sZG93biByZW1vdmlkbyDigJQgc2Vyw6NvIGluY2x1w61kb3Mgbm8gcHLDs3hpbW8gZGlzcGFyby4nLAogICAgICAgICdkZWxldGVkJyA9PiAoaW50KSRkZWxldGVkLAogICAgICAgICdtb2R1bGUnICA9PiAkbW9kdWxlLAogICAgXSk7Cn0pOwpmdW5jdGlvbiB2bTJfc29maWFfa2Jfc2F2ZV9oYW5kbGVyKCkgewogICAgaWYgKCAhIGN1cnJlbnRfdXNlcl9jYW4oICdtYW5hZ2Vfb3B0aW9ucycgKSApIHdwX2RpZSggJ1NlbSBwZXJtaXNzw6NvJyApOwogICAgY2hlY2tfYWpheF9yZWZlcmVyKCAndm0yX3NvZmlhX2tiJywgJ25vbmNlJyApOwogICAgZ2xvYmFsICR3cGRiOwogICAgJHQgICAgICAgID0gJHdwZGItPnByZWZpeCAuICd2bTJfc29maWFfa25vd2xlZGdlJzsKICAgICR0aXBvICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoICRfUE9TVFsndGlwbyddID8/ICd0ZXh0bycgKTsKICAgICR0aXR1bG8gICA9IHNhbml0aXplX3RleHRfZmllbGQoICRfUE9TVFsndGl0dWxvJ10gPz8gJycgKTsKICAgICR1cmwgICAgICA9IGVzY191cmxfcmF3KCAkX1BPU1RbJ3VybCddID8/ICcnICk7CiAgICAkY29udGV1ZG8gPSBzYW5pdGl6ZV90ZXh0YXJlYV9maWVsZCggJF9QT1NUWydjb250ZXVkbyddID8/ICcnICk7CiAgICBpZiAoIGluX2FycmF5KCAkdGlwbywgYXJyYXkoICd1cmwnLCAnZHJpdmUnICksIHRydWUgKSAmJiAhIGVtcHR5KCAkdXJsICkgKSB7CiAgICAgICAgJHNjcmFwZWQgPSB2bTJfc29maWFfa2Jfc2NyYXBlX3VybCggJHVybCApOwogICAgICAgIGlmICggaXNzZXQoICRzY3JhcGVkWydlcnJvJ10gKSApIHsKICAgICAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCAkc2NyYXBlZFsnZXJybyddICk7CiAgICAgICAgfQogICAgICAgIGlmICggZW1wdHkoICR0aXR1bG8gKSApICR0aXR1bG8gPSAkc2NyYXBlZFsndGl0dWxvJ107CiAgICAgICAgaWYgKCBlbXB0eSggJGNvbnRldWRvICkgKSAkY29udGV1ZG8gPSAkc2NyYXBlZFsnY29udGV1ZG8nXTsKICAgIH0KICAgIGlmICggZW1wdHkoICR0aXR1bG8gKSApICAgd3Bfc2VuZF9qc29uX2Vycm9yKCAnVMOtdHVsbyDDqSBvYnJpZ2F0w7NyaW8uJyApOwogICAgaWYgKCBlbXB0eSggJGNvbnRldWRvICkgKSB3cF9zZW5kX2pzb25fZXJyb3IoICdDb250ZcO6ZG8gbsOjbyBwb2RlIGVzdGFyIHZhemlvLicgKTsKICAgICR3cGRiLT5pbnNlcnQoICR0LCBhcnJheSgKICAgICAgICAndGlwbycgICAgICA9PiAkdGlwbywKICAgICAgICAndGl0dWxvJyAgICA9PiAkdGl0dWxvLAogICAgICAgICdjb250ZXVkbycgID0+ICRjb250ZXVkbywKICAgICAgICAndXJsJyAgICAgICA9PiAkdXJsID86IG51bGwsCiAgICAgICAgJ2F0aXZvJyAgICAgPT4gMSwKICAgICAgICAnY3JpYWRvX2VtJyA9PiBjdXJyZW50X3RpbWUoICdteXNxbCcgKSwKICAgICkgKTsKICAgIGlmICggJHdwZGItPmxhc3RfZXJyb3IgKSB3cF9zZW5kX2pzb25fZXJyb3IoICdFcnJvIEJEOiAnIC4gJHdwZGItPmxhc3RfZXJyb3IgKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCBhcnJheSgKICAgICAgICAnaWQnICAgICAgPT4gJHdwZGItPmluc2VydF9pZCwKICAgICAgICAndGl0dWxvJyAgPT4gJHRpdHVsbywKICAgICAgICAndGlwbycgICAgPT4gJHRpcG8sCiAgICAgICAgJ3ByZXZpZXcnID0+IG1iX3N1YnN0ciggJGNvbnRldWRvLCAwLCAyMDAgKSwKICAgICAgICAnY2hhcnMnICAgPT4gbWJfc3RybGVuKCAkY29udGV1ZG8gKSwKICAgICkgKTsKfQoKLy8gQUpBWDogZGVsZXRhciBpdGVtCmFkZF9hY3Rpb24oICd3cF9hamF4X3ZtMl9zb2ZpYV9rYl9kZWxldGUnLCAndm0yX3NvZmlhX2tiX2RlbGV0ZV9oYW5kbGVyJyApOwpmdW5jdGlvbiB2bTJfc29maWFfa2JfZGVsZXRlX2hhbmRsZXIoKSB7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgd3BfZGllKCAnU2VtIHBlcm1pc3PDo28nICk7CiAgICBjaGVja19hamF4X3JlZmVyZXIoICd2bTJfc29maWFfa2InLCAnbm9uY2UnICk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkaWQgPSBpbnR2YWwoICRfUE9TVFsnaWQnXSA/PyAwICk7CiAgICBpZiAoICEgJGlkICkgd3Bfc2VuZF9qc29uX2Vycm9yKCAnSUQgaW52w6FsaWRvJyApOwogICAgJHdwZGItPmRlbGV0ZSggJHdwZGItPnByZWZpeCAuICd2bTJfc29maWFfa25vd2xlZGdlJywgYXJyYXkoICdpZCcgPT4gJGlkICkgKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCk7Cn0KCi8vIEFKQVg6IHRvZ2dsZSBhdGl2by9pbmF0aXZvCmFkZF9hY3Rpb24oICd3cF9hamF4X3ZtMl9zb2ZpYV9rYl90b2dnbGUnLCAndm0yX3NvZmlhX2tiX3RvZ2dsZV9oYW5kbGVyJyApOwpmdW5jdGlvbiB2bTJfc29maWFfa2JfdG9nZ2xlX2hhbmRsZXIoKSB7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgd3BfZGllKCAnU2VtIHBlcm1pc3PDo28nICk7CiAgICBjaGVja19hamF4X3JlZmVyZXIoICd2bTJfc29maWFfa2InLCAnbm9uY2UnICk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkaWQgID0gaW50dmFsKCAkX1BPU1RbJ2lkJ10gPz8gMCApOwogICAgaWYgKCAhICRpZCApIHdwX3NlbmRfanNvbl9lcnJvciggJ0lEIGludsOhbGlkbycgKTsKICAgICR0ICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9rbm93bGVkZ2UnOwogICAgJGN1ciA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCAkd3BkYi0+cHJlcGFyZSggIlNFTEVDVCBhdGl2byBGUk9NICR0IFdIRVJFIGlkPSVkIiwgJGlkICkgKTsKICAgICRuZXcgPSAkY3VyID8gMCA6IDE7CiAgICAkd3BkYi0+dXBkYXRlKCAkdCwgYXJyYXkoICdhdGl2bycgPT4gJG5ldyApLCBhcnJheSggJ2lkJyA9PiAkaWQgKSApOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoIGFycmF5KCAnYXRpdm8nID0+ICRuZXcgKSApOwp9CgovLyBBSkFYOiBwcmV2aWV3IGRlIHNjcmFwaW5nIChhbnRlcyBkZSBzYWx2YXIpCmFkZF9hY3Rpb24oICd3cF9hamF4X3ZtMl9zb2ZpYV9rYl9wcmV2aWV3JywgJ3ZtMl9zb2ZpYV9rYl9wcmV2aWV3X2hhbmRsZXInICk7CmZ1bmN0aW9uIHZtMl9zb2ZpYV9rYl9wcmV2aWV3X2hhbmRsZXIoKSB7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgd3BfZGllKCAnU2VtIHBlcm1pc3PDo28nICk7CiAgICBjaGVja19hamF4X3JlZmVyZXIoICd2bTJfc29maWFfa2InLCAnbm9uY2UnICk7CiAgICAkdXJsID0gZXNjX3VybF9yYXcoICRfUE9TVFsndXJsJ10gPz8gJycgKTsKICAgIGlmICggISAkdXJsICkgd3Bfc2VuZF9qc29uX2Vycm9yKCAnVVJMIGludsOhbGlkYScgKTsKICAgICRyZXN1bHQgPSB2bTJfc29maWFfa2Jfc2NyYXBlX3VybCggJHVybCApOwogICAgaWYgKCBpc3NldCggJHJlc3VsdFsnZXJybyddICkgKSB3cF9zZW5kX2pzb25fZXJyb3IoICRyZXN1bHRbJ2Vycm8nXSApOwogICAgJHJlc3VsdFsnY2hhcnMnXSA9IG1iX3N0cmxlbiggJHJlc3VsdFsnY29udGV1ZG8nXSApOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoICRyZXN1bHQgKTsKfQoKLy8g4pSA4pSAIFJFU1Q6IHVwc2VydCBzZXNzw6NvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfc29maWFfcmVzdF91cHNlcnQoIFdQX1JFU1RfUmVxdWVzdCAkcmVxdWVzdCApIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRkID0gJHJlcXVlc3QtPmdldF9qc29uX3BhcmFtcygpOwogICAgaWYgKCBlbXB0eSgkZFsnc2Vzc2lvbl9pZCddKSApIHsKICAgICAgICByZXR1cm4gbmV3IFdQX0Vycm9yKCdiYWRfcmVxdWVzdCcsICdzZXNzaW9uX2lkIHJlcXVpcmVkJywgWydzdGF0dXMnPT40MDBdKTsKICAgIH0KICAgICR0ICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9zZXNzaW9ucyc7CiAgICAkc2lkID0gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsnc2Vzc2lvbl9pZCddKTsKICAgICRyb3cgPSAkd3BkYi0+Z2V0X3Jvdygkd3BkYi0+cHJlcGFyZSgiU0VMRUNUIGlkIEZST00gJHQgV0hFUkUgc2Vzc2lvbl9pZD0lcyIsICRzaWQpKTsKICAgICRkYXRhID0gWwogICAgICAgICdzZXNzaW9uX2lkJyAgICAgICAgID0+ICRzaWQsCiAgICAgICAgJ3BlcnNpc3RlbnRfdWlkJyAgICAgPT4gaXNzZXQoJGRbJ3BlcnNpc3RlbnRfdWlkJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsncGVyc2lzdGVudF91aWQnXSkgOiBudWxsLAogICAgICAgICdwcm9kdWN0X2lkJyAgICAgICAgID0+IGlzc2V0KCRkWydwcm9kdWN0X2lkJ10pID8gaW50dmFsKCRkWydwcm9kdWN0X2lkJ10pIDogbnVsbCwKICAgICAgICAncHJvZHVjdF9uYW1lJyAgICAgICA9PiBpc3NldCgkZFsncHJvZHVjdF9uYW1lJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsncHJvZHVjdF9uYW1lJ10pIDogbnVsbCwKICAgICAgICAnd2hhdHNhcHAnICAgICAgICAgICA9PiBpc3NldCgkZFsnd2hhdHNhcHAnXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWyd3aGF0c2FwcCddKSA6IG51bGwsCiAgICAgICAgJ3dhX2NhcHR1cmVfdHJpZ2dlcicgPT4gaXNzZXQoJGRbJ3dhX2NhcHR1cmVfdHJpZ2dlciddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ3dhX2NhcHR1cmVfdHJpZ2dlciddKSA6IG51bGwsCiAgICAgICAgJ2NhdGVnb3JpYScgICAgICAgICAgPT4gaXNzZXQoJGRbJ2NhdGVnb3JpYSddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ2NhdGVnb3JpYSddKSA6IG51bGwsCiAgICAgICAgJ3RpcG9fZXZlbnRvJyAgICAgICAgPT4gISBlbXB0eSgkZFsndGlwb19ldmVudG8nXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWyd0aXBvX2V2ZW50byddKSA6ICggaXNzZXQoJGRbJ3NpZ25hbHMnXVsndGlwb19ldmVudG8nXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWydzaWduYWxzJ11bJ3RpcG9fZXZlbnRvJ10pIDogbnVsbCApLAogICAgICAgICdkYXRhX2V2ZW50b19zdHInICAgID0+IGlzc2V0KCRkWydkYXRhX2V2ZW50b19zdHInXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWydkYXRhX2V2ZW50b19zdHInXSkgOiBudWxsLAogICAgICAgICd1cmdlbmNpYScgICAgICAgICAgID0+IGlzc2V0KCRkWyd1cmdlbmNpYSddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ3VyZ2VuY2lhJ10pIDogbnVsbCwKICAgICAgICAnbWVuc2FnZW5zX2NvdW50JyAgICA9PiBpc3NldCgkZFsnbWVuc2FnZW5zX2NvdW50J10pID8gaW50dmFsKCRkWydtZW5zYWdlbnNfY291bnQnXSkgOiAwLAogICAgICAgICdzaWduYWxzJyAgICAgICAgICAgID0+IGlzc2V0KCRkWydzaWduYWxzJ10pID8gd3BfanNvbl9lbmNvZGUoJGRbJ3NpZ25hbHMnXSkgOiBudWxsLAogICAgICAgICdoaXN0b3JpY28nICAgICAgICAgID0+IGlzc2V0KCRkWydoaXN0b3JpY28nXSkgPyB3cF9qc29uX2VuY29kZSgkZFsnaGlzdG9yaWNvJ10pIDogbnVsbCwKICAgICAgICAnY29udmVydGVkJyAgICAgICAgICA9PiBpc3NldCgkZFsnY29udmVydGVkJ10pID8gaW50dmFsKCRkWydjb252ZXJ0ZWQnXSkgOiAwLAogICAgICAgICdzb3VyY2VfdXJsJyAgICAgICAgID0+IGlzc2V0KCRkWydzb3VyY2VfdXJsJ10pID8gZXNjX3VybF9yYXcoJGRbJ3NvdXJjZV91cmwnXSkgOiBudWxsLAogICAgICAgICd1dG1fc291cmNlJyAgICAgICAgID0+IGlzc2V0KCRkWyd1dG1fc291cmNlJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsndXRtX3NvdXJjZSddKSA6IHNhbml0aXplX3RleHRfZmllbGQoJHJlcXVlc3QtPmdldF9wYXJhbSgndXRtX3NvdXJjZScpID8/ICcnKSwKICAgICAgICAndXRtX21lZGl1bScgICAgICAgICA9PiBpc3NldCgkZFsndXRtX21lZGl1bSddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ3V0bV9tZWRpdW0nXSkgOiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRyZXF1ZXN0LT5nZXRfcGFyYW0oJ3V0bV9tZWRpdW0nKSA/PyAnJyksCiAgICAgICAgJ3V0bV9jYW1wYWlnbicgICAgICAgPT4gaXNzZXQoJGRbJ3V0bV9jYW1wYWlnbiddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ3V0bV9jYW1wYWlnbiddKSA6IHNhbml0aXplX3RleHRfZmllbGQoJHJlcXVlc3QtPmdldF9wYXJhbSgndXRtX2NhbXBhaWduJykgPz8gJycpLAogICAgICAgICdjYW5hbF9vcmlnZW0nICAgICAgID0+IGlzc2V0KCRkWydjYW5hbF9vcmlnZW0nXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWydjYW5hbF9vcmlnZW0nXSkgOiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRyZXF1ZXN0LT5nZXRfcGFyYW0oJ2NhbmFsX29yaWdlbScpID8/ICcnKSwKICAgICAgICAnZW1haWwnICAgICAgICAgICAgICA9PiBpc3NldCgkZFsnZW1haWwnXSkgPyBzYW5pdGl6ZV9lbWFpbCgkZFsnZW1haWwnXSkgOiBudWxsLAogICAgXTsKICAgIC8vIFJlbW92ZSBlbWFpbCBudWxsIHBhcmEgbsOjbyBzb2JyZXNjcmV2ZXIgdmFsb3IgZXhpc3RlbnRlIGNvbSBOVUxMCiAgICBpZiAoICRkYXRhWydlbWFpbCddID09PSBudWxsICkgdW5zZXQoJGRhdGFbJ2VtYWlsJ10pOwogICAgaWYgKCAhZW1wdHkoJGRbJ3doYXRzYXBwJ10pICYmICEkcm93ICkgewogICAgICAgICRkYXRhWyd3YV9jYXB0dXJlZF9hdCddID0gY3VycmVudF90aW1lKCdteXNxbCcpOwogICAgfQogICAgaWYgKCAhZW1wdHkoJGRbJ2VuZGVkJ10pICkgewogICAgICAgICRkYXRhWydlbmRlZF9hdCddID0gY3VycmVudF90aW1lKCdteXNxbCcpOwogICAgfQogICAgaWYgKCAkcm93ICkgewogICAgICAgICRyZXN1bHQgPSAkd3BkYi0+dXBkYXRlKCR0LCAkZGF0YSwgWydzZXNzaW9uX2lkJyA9PiAkc2lkXSk7CiAgICB9IGVsc2UgewogICAgICAgICRkYXRhWydzdGFydGVkX2F0J10gPSBjdXJyZW50X3RpbWUoJ215c3FsJyk7CiAgICAgICAgJHJlc3VsdCA9ICR3cGRiLT5pbnNlcnQoJHQsICRkYXRhKTsKICAgIH0KICAgIGlmICggJHJlc3VsdCA9PT0gZmFsc2UgJiYgJHdwZGItPmxhc3RfZXJyb3IgKSB7CiAgICAgICAgZXJyb3JfbG9nKCdbdm0yX3NvZmlhX3Nlc3Npb25dIERCIGVycm9yOiAnIC4gJHdwZGItPmxhc3RfZXJyb3IgLiAnIHwgZGF0YSBrZXlzOiAnIC4gaW1wbG9kZSgnLCcsIGFycmF5X2tleXMoJGRhdGEpKSk7CiAgICAgICAgcmV0dXJuIG5ldyBXUF9FcnJvcignZGJfZXJyb3InLCAnRmFsaGEgYW8gc2FsdmFyIHNlc3PDo286ICcgLiAkd3BkYi0+bGFzdF9lcnJvciwgWydzdGF0dXMnID0+IDUwMF0pOwogICAgfQogICAgLy8g4pSA4pSAIFN5bmMgcGFyYSB2bTJfY29udGFjdHMgcXVhbmRvIFdoYXRzQXBwIGNhcHR1cmFkbyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIGlmICggIWVtcHR5KCRkWyd3aGF0c2FwcCddKSApIHsKICAgICAgICAkcmF3X3dhICA9IHByZWdfcmVwbGFjZSgnL1xELycsICcnLCBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWyd3aGF0c2FwcCddKSk7CiAgICAgICAgLy8gTm9ybWFsaXphcjogZ2FyYW50aXIgRERJIDU1CiAgICAgICAgaWYgKCBzdHJsZW4oJHJhd193YSkgPD0gMTEgKSB7CiAgICAgICAgICAgICRyYXdfd2EgPSAnNTUnIC4gJHJhd193YTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkcmF3X3dhICkgewogICAgICAgICAgICAkY3QgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9jb250YWN0cyc7CiAgICAgICAgICAgICRleGlzdGluZyA9ICR3cGRiLT5nZXRfcm93KCR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAgICAgIlNFTEVDVCBpZCwgb3JpZ2VucywgdGlwb19ldmVudG8gRlJPTSAkY3QgV0hFUkUgcGhvbmUgPSAlcyIsICRyYXdfd2EKICAgICAgICAgICAgKSk7CiAgICAgICAgICAgIGlmICggJGV4aXN0aW5nICkgewogICAgICAgICAgICAgICAgLy8gQXR1YWxpemFyIG9yaWdlbTogYWRpY2lvbmFyICdzb2ZpYScgc2UgbsOjbyBleGlzdGlyCiAgICAgICAgICAgICAgICAkb3JpZ2VucyA9IGpzb25fZGVjb2RlKCRleGlzdGluZy0+b3JpZ2VucywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICAgICBpZiAoICEgaW5fYXJyYXkoJ3NvZmlhJywgJG9yaWdlbnMpICkgewogICAgICAgICAgICAgICAgICAgICRvcmlnZW5zW10gPSAnc29maWEnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhID0gWwogICAgICAgICAgICAgICAgICAgICdvcmlnZW5zJyAgICAgICA9PiB3cF9qc29uX2VuY29kZSgkb3JpZ2VucyksCiAgICAgICAgICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAvLyBQcmVlbmNoZXIgdGlwb19ldmVudG8gc2UgYWluZGEgdmF6aW8gZSBTb2ZJQSBkZXRlY3RvdQogICAgICAgICAgICAgICAgaWYgKCBlbXB0eSgkZXhpc3RpbmctPnRpcG9fZXZlbnRvKSAmJiAhZW1wdHkoJGRbJ3NpZ25hbHMnXVsndGlwb19ldmVudG8nXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhWyd0aXBvX2V2ZW50byddID0gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsnc2lnbmFscyddWyd0aXBvX2V2ZW50byddKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIFByZWVuY2hlciBVVE1zIHNlIHZpZXJhbSBlIGNvbnRhdG8gbsOjbyB0ZW0KICAgICAgICAgICAgICAgIGlmICggIWVtcHR5KCRkWyd1dG1fc291cmNlJ10pICYmIGVtcHR5KCRleGlzdGluZy0+dXRtX3NvdXJjZSkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhWyd1dG1fc291cmNlJ10gICA9IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ3V0bV9zb3VyY2UnXSk7CiAgICAgICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhWyd1dG1fbWVkaXVtJ10gICA9IGlzc2V0KCRkWyd1dG1fbWVkaXVtJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsndXRtX21lZGl1bSddKSA6ICcnOwogICAgICAgICAgICAgICAgICAgICR1cGRhdGVfZGF0YVsndXRtX2NhbXBhaWduJ10gPSBpc3NldCgkZFsndXRtX2NhbXBhaWduJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsndXRtX2NhbXBhaWduJ10pIDogJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyB2MS41LjkxOiBwcmVlbmNoZXIgZW1haWwgc2UgY2FwdHVyYWRvIHBlbGEgU29mSUEgZSBjb250YXRvIG7Do28gdGVtCiAgICAgICAgICAgICAgICBpZiAoICFlbXB0eSgkZFsnZW1haWwnXSkgJiYgZW1wdHkoJGV4aXN0aW5nLT5lbWFpbCkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhWydlbWFpbCddID0gc2FuaXRpemVfZW1haWwoJGRbJ2VtYWlsJ10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHdwZGItPnVwZGF0ZSgkY3QsICR1cGRhdGVfZGF0YSwgWydpZCcgPT4gJGV4aXN0aW5nLT5pZF0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gQ3JpYXIgbm92byBjb250YXRvCiAgICAgICAgICAgICAgICAkb3JpZ2VucyA9IFsnc29maWEnXTsKICAgICAgICAgICAgICAgICRuZXdfY29udGFjdCA9IFsKICAgICAgICAgICAgICAgICAgICAncGhvbmUnICAgICAgICAgPT4gJHJhd193YSwKICAgICAgICAgICAgICAgICAgICAnbmFtZScgICAgICAgICAgPT4gJ1NvZklBIExlYWQnLAogICAgICAgICAgICAgICAgICAgICdlbWFpbCcgICAgICAgICA9PiAhZW1wdHkoJGRbJ2VtYWlsJ10pID8gc2FuaXRpemVfZW1haWwoJGRbJ2VtYWlsJ10pIDogJycsCiAgICAgICAgICAgICAgICAgICAgJ29yaWdlbnMnICAgICAgID0+IHdwX2pzb25fZW5jb2RlKCRvcmlnZW5zKSwKICAgICAgICAgICAgICAgICAgICAndGlwb19ldmVudG8nICAgPT4gaXNzZXQoJGRbJ3NpZ25hbHMnXVsndGlwb19ldmVudG8nXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWydzaWduYWxzJ11bJ3RpcG9fZXZlbnRvJ10pIDogJycsCiAgICAgICAgICAgICAgICAgICAgJ2RhdGFfZXZlbnRvJyAgID0+IGlzc2V0KCRkWydkYXRhX2V2ZW50b19zdHInXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWydkYXRhX2V2ZW50b19zdHInXSkgOiAnJywKICAgICAgICAgICAgICAgICAgICAndXRtX3NvdXJjZScgICAgPT4gaXNzZXQoJGRbJ3V0bV9zb3VyY2UnXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWyd1dG1fc291cmNlJ10pIDogJycsCiAgICAgICAgICAgICAgICAgICAgJ3V0bV9tZWRpdW0nICAgID0+IGlzc2V0KCRkWyd1dG1fbWVkaXVtJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsndXRtX21lZGl1bSddKSA6ICcnLAogICAgICAgICAgICAgICAgICAgICd1dG1fY2FtcGFpZ24nICA9PiBpc3NldCgkZFsndXRtX2NhbXBhaWduJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsndXRtX2NhbXBhaWduJ10pIDogJycsCiAgICAgICAgICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwKICAgICAgICAgICAgICAgICAgICAnY3JlYXRlZF9hdCcgICAgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICR3cGRiLT5pbnNlcnQoJGN0LCAkbmV3X2NvbnRhY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgLy8g4pSA4pSAIENoYW1hciBDbGF1ZGUgcXVhbmRvIGjDoSBtZW5zYWdlbSBkbyB1c3XDoXJpbyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIGlmICggISBlbXB0eSggJGRbJ21lbnNhZ2VtJ10gKSApIHsKICAgICAgICAkYXBpX2tleSAgPSBnZXRfb3B0aW9uKCAndm1ibmF2X2NsYXVkZV9rZXknLCAnJyApOwogICAgICAgICRtZW5zYWdlbSA9IHNhbml0aXplX3RleHRfZmllbGQoICRkWydtZW5zYWdlbSddICk7CgogICAgICAgIGlmICggJGFwaV9rZXkgKSB7CiAgICAgICAgICAgICRzeXN0ZW1fcHJvbXB0ID0gZ2V0X29wdGlvbiggJ3ZtMl9zb2ZpYV9zeXN0ZW1fcHJvbXB0JywKICAgICAgICAgICAgICAgICdWb2PDqiDDqSBTb2ZJQSwgYXNzZXNzb3JhIGRlIGV2ZW50b3MgZGEgVml2YU1haXMgRXZlbnRvcyDigJQgbyBtYWlvciBtYXJrZXRwbGFjZSBkZSBhdHJhw6fDtWVzIHBhcmEgZXZlbnRvcyBhbyB2aXZvIGRvIEJyYXNpbC4gQWp1ZGUgbyBjbGllbnRlIGEgY29udHJhdGFyIGEgYXRyYcOnw6NvIHBlcmZlaXRhIGRlIGZvcm1hIGFtaWfDoXZlbCwgY29uc3VsdGl2YSBlIG9iamV0aXZhLiBFbnRlbmRhIHRpcG8gZGUgZXZlbnRvLCBkYXRhLCBvcsOnYW1lbnRvIGUgcXVhbnRpZGFkZSBkZSBjb252aWRhZG9zLiBTdWdpcmEgYXRyYcOnw7VlcyBkaXNwb27DrXZlaXMgcXVhbmRvIHBlcnRpbmVudGUuIFJlc3Bvc3RhcyBjdXJ0YXMgKDItMyBmcmFzZXMpLCB0b20gY2Fsb3Jvc28gZSBwcm9maXNzaW9uYWwuIE51bmNhIGludmVudGUgcHJlw6dvcyBvdSBkaXNwb25pYmlsaWRhZGUg4oCUIGRpZ2EgcGFyYSBvIGNsaWVudGUgYWNlc3NhciBvIHNpdGUgcGFyYSB2YWxvcmVzIGV4YXRvcy4nCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIC8vIFt2MS41LjkzXSBJbmpldGFyIGluc3RydcOnw6NvIGRlIGNhcHR1cmEgZGUgZW1haWwgc2UgdG9nZ2xlIGF0aXZvIGUgc2Vzc8OjbyBhaW5kYSBuw6NvIHRlbSBlbWFpbAogICAgICAgICAgICBpZiAoIGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV9hc2tfZW1haWwnLCcwJykgPT09ICcxJyAmJiBlbXB0eSgkZFsnZW1haWwnXSkgKSB7CiAgICAgICAgICAgICAgICAkc3lzdGVtX3Byb21wdCAuPSAiXG5cbklOU1RSVcOHw4NPIEVTUEVDSUFMOiBBcMOzcyBvIGNsaWVudGUgZm9ybmVjZXIgbyBXaGF0c0FwcCwgcGVyZ3VudGUgbyBlLW1haWwgdXNhbmRvIGV4YXRhbWVudGUgZXN0YSBmcmFzZTogJ1NldSBlLW1haWw/IEFzc2ltIGEgZ2VudGUgZ2FyYW50ZSBvIGNvbnRhdG8gbWVzbW8gc2UgbyBXaGF0c0FwcCB0cmF2YXIg8J+UkicuIE7Do28gaW52ZW50ZSBlLW1haWxzLiBOw6NvIHJlcGl0YSBvIHBlZGlkbyBzZSBvIGNsaWVudGUgasOhIGZvcm5lY2V1LiI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRoaXN0b3JpY28gPSBpc3NldCggJGRbJ2hpc3RvcmljbyddICkgJiYgaXNfYXJyYXkoICRkWydoaXN0b3JpY28nXSApID8gJGRbJ2hpc3RvcmljbyddIDogW107CgogICAgICAgICAgICAvLyBNb250YXIgbWVuc2FnZW5zIChoaXN0b3JpY28gasOhIGluY2x1aSBhIG1zZyBhdHVhbCBubyBmaW5hbCkKICAgICAgICAgICAgJG1lc3NhZ2VzID0gW107CiAgICAgICAgICAgIGZvcmVhY2ggKCAkaGlzdG9yaWNvIGFzICRtc2cgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGlzc2V0KCAkbXNnWydyb2xlJ10sICRtc2dbJ2NvbnRlbnQnXSApICkgewogICAgICAgICAgICAgICAgICAgICRyb2xlICAgICAgID0gJG1zZ1sncm9sZSddID09PSAndXNlcicgPyAndXNlcicgOiAnYXNzaXN0YW50JzsKICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZXNbXSA9IFsgJ3JvbGUnID0+ICRyb2xlLCAnY29udGVudCcgPT4gKHN0cmluZykgJG1zZ1snY29udGVudCddIF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gR2FyYW50aXIgcXVlIHRlcm1pbmEgY29tIG1lbnNhZ2VtIGRvIHVzdcOhcmlvCiAgICAgICAgICAgIGlmICggZW1wdHkoICRtZXNzYWdlcyApIHx8ICRtZXNzYWdlc1sgY291bnQoJG1lc3NhZ2VzKSAtIDEgXVsncm9sZSddICE9PSAndXNlcicgKSB7CiAgICAgICAgICAgICAgICAkbWVzc2FnZXNbXSA9IFsgJ3JvbGUnID0+ICd1c2VyJywgJ2NvbnRlbnQnID0+ICRtZW5zYWdlbSBdOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcmVzcCA9IHdwX3JlbW90ZV9wb3N0KCAnaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS92MS9tZXNzYWdlcycsIFsKICAgICAgICAgICAgICAgICd0aW1lb3V0JyA9PiAyMiwKICAgICAgICAgICAgICAgICdoZWFkZXJzJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3gtYXBpLWtleScgICAgICAgICA9PiAkYXBpX2tleSwKICAgICAgICAgICAgICAgICAgICAnYW50aHJvcGljLXZlcnNpb24nID0+ICcyMDIzLTA2LTAxJywKICAgICAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJyAgICAgID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAnYm9keScgPT4gd3BfanNvbl9lbmNvZGUoIFsKICAgICAgICAgICAgICAgICAgICAnbW9kZWwnICAgICAgPT4gJ2NsYXVkZS1oYWlrdS00LTUtMjAyNTEwMDEnLAogICAgICAgICAgICAgICAgICAgICdtYXhfdG9rZW5zJyA9PiAzNTAsCiAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbScgICAgID0+ICRzeXN0ZW1fcHJvbXB0LAogICAgICAgICAgICAgICAgICAgICdtZXNzYWdlcycgICA9PiAkbWVzc2FnZXMsCiAgICAgICAgICAgICAgICBdICksCiAgICAgICAgICAgIF0gKTsKCiAgICAgICAgICAgIGlmICggISBpc193cF9lcnJvciggJHJlc3AgKSAmJiB3cF9yZW1vdGVfcmV0cmlldmVfcmVzcG9uc2VfY29kZSggJHJlc3AgKSA9PT0gMjAwICkgewogICAgICAgICAgICAgICAgJGJvZHkgID0ganNvbl9kZWNvZGUoIHdwX3JlbW90ZV9yZXRyaWV2ZV9ib2R5KCAkcmVzcCApLCB0cnVlICk7CiAgICAgICAgICAgICAgICAkcmVwbHkgPSAkYm9keVsnY29udGVudCddWzBdWyd0ZXh0J10gPz8gJyc7CiAgICAgICAgICAgICAgICBpZiAoICRyZXBseSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoIFsgJ29rJyA9PiB0cnVlLCAnbWVuc2FnZW0nID0+IHRyaW0oICRyZXBseSApIF0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBGYWxsYmFjayBzZSBBUEkgaW5kaXNwb27DrXZlbCBvdSBjaGF2ZSBhdXNlbnRlCiAgICAgICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKCBbICdvaycgPT4gdHJ1ZSwgJ21lbnNhZ2VtJyA9PiAnUG9kZSBtZSBjb250YXIgbWFpcyBzb2JyZSBzZXUgZXZlbnRvPyDwn46qJyBdICk7CiAgICB9CgogICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKFsnb2snID0+IHRydWVdKTsKfQoKLy8g4pSA4pSAIFJFU1Q6IGxpc3RhciBzZXNzw7VlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX3NvZmlhX3Jlc3RfbGlzdCggV1BfUkVTVF9SZXF1ZXN0ICRyZXF1ZXN0ICkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJHQgICAgID0gJHdwZGItPnByZWZpeCAuICd2bTJfc29maWFfc2Vzc2lvbnMnOwogICAgJGxpbWl0ID0gaW50dmFsKCRyZXF1ZXN0LT5nZXRfcGFyYW0oJ2xpbWl0JykgPzogMTAwKTsKICAgICRyb3dzICA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUICogRlJPTSAkdCBPUkRFUiBCWSBzdGFydGVkX2F0IERFU0MgTElNSVQgJGxpbWl0Iik7CiAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoJHJvd3MpOwp9CgovLyDilIDilIAgQWRtaW4gUGFnZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX3NvZmlhX3BhZ2UoKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdCA9ICR3cGRiLT5wcmVmaXggLiAndm0yX3NvZmlhX3Nlc3Npb25zJzsKICAgICR0YWJsZV9leGlzdHMgPSAoJHdwZGItPmdldF92YXIoIlNIT1cgVEFCTEVTIExJS0UgJyR0JyIpID09PSAkdCk7CiAgICBpZiAoISR0YWJsZV9leGlzdHMpIHsgdm0yX2NyZWF0ZV9zb2ZpYV90YWJsZSgpOyB9CgogICAgLy8gU3RhdHMKICAgICR0b3RhbCAgICA9ICR0YWJsZV9leGlzdHMgPyAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdCIpIDogMDsKICAgICR3YV9jYXAgICA9ICR0YWJsZV9leGlzdHMgPyAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdCBXSEVSRSB3aGF0c2FwcCBJUyBOT1QgTlVMTCBBTkQgd2hhdHNhcHAgIT0gJyciKSA6IDA7CiAgICAkY29udiAgICAgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgY29udmVydGVkPTEiKSA6IDA7CiAgICAkY29tX2RhdGEgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgZGF0YV9ldmVudG9fc3RyIElTIE5PVCBOVUxMIEFORCBkYXRhX2V2ZW50b19zdHIgIT0gJyciKSA6IDA7CiAgICAkaG9qZV90b3QgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgREFURShzdGFydGVkX2F0KT1DVVJEQVRFKCkiKSA6IDA7CiAgICAkaG9qZV93YSAgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgREFURShzdGFydGVkX2F0KT1DVVJEQVRFKCkgQU5EIHdoYXRzYXBwIElTIE5PVCBOVUxMIikgOiAwOwogICAgJHRheGFfY2FwICA9ICR0b3RhbCA+IDAgPyByb3VuZCgkd2FfY2FwLyR0b3RhbCoxMDAsMSkgOiAwOwogICAgJHRheGFfY29udiA9ICR3YV9jYXAgPiAwID8gcm91bmQoJGNvbnYvJHdhX2NhcCoxMDAsMSkgOiAwOwoKICAgIC8vIENhdGVnb3JpYXMKICAgICRjYXRzX3JhdyA9ICR0YWJsZV9leGlzdHMgPyAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCBjYXRlZ29yaWEsIENPVU5UKCopIGFzIG4gRlJPTSAkdCBXSEVSRSBjYXRlZ29yaWEgSVMgTk9UIE5VTEwgQU5EIGNhdGVnb3JpYSE9JycgR1JPVVAgQlkgY2F0ZWdvcmlhIE9SREVSIEJZIG4gREVTQyBMSU1JVCA4IikgOiBbXTsKICAgICRjYXRzID0gW107CiAgICBmb3JlYWNoICgkY2F0c19yYXcgYXMgJGMpIHsgJGNhdHNbJGMtPmNhdGVnb3JpYV0gPSAoaW50KSRjLT5uOyB9CgogICAgLy8gU2Vzc8O1ZXMgcmVjZW50ZXMKICAgICRzZXNzaW9ucyA9ICR0YWJsZV9leGlzdHMgPyAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCAqIEZST00gJHQgT1JERVIgQlkgc3RhcnRlZF9hdCBERVNDIExJTUlUIDUwIikgOiBbXTsKCiAgICAvLyBDb25maWcga2lsbCBzd2l0Y2gKICAgICRzb2ZpYV9lbmFibGVkID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX2NhcHR1cmFfZW5hYmxlZCcsICcxJyk7CiAgICAkdHJpZ2dlcl9tc2dzICA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV90cmlnZ2VyX21zZ3MnLCAnMScpOwogICAgJHRyaWdnZXJfaW50ZW5jYW8gPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfdHJpZ2dlcl9pbnRlbmNhbycsICcxJyk7CiAgICAkdHJpZ2dlcl9xdWVybyAgICA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV90cmlnZ2VyX3F1ZXJvJywgJzEnKTsKICAgICRrZXl3b3Jkc19yYXcgICAgID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX2tleXdvcmRzJywgJ3F1YW50byBjdXN0YSxxdWVybyBjb250cmF0YXIsdmFsb3IscHJlw6dvLGRpc3BvbsOtdmVsLGRpc3BvbmliaWxpZGFkZSxhZ2VuZGFyJyk7CiAgICAkc29maWFfd2FfbXNnICAgICA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV93YV9tc2cnLCAnU3VhIGRhdGEgYWluZGEgZXN0w6EgZGlzcG9uw612ZWwhIPCfjokgUGFyYSBnYXJhbnRpciBhbnRlcyBxdWUgb3V0cmEgcGVzc29hIHJlc2VydmUsIG1lIHBhc3NhIHNldSBXaGF0c0FwcCBlIGNvbmZpcm1vIGVtIG1pbnV0b3Mg8J+YiicpOwogICAgJHNvZmlhX3dhX2NvbmZpcm0gPSBnZXRfb3B0aW9uKCd2bWJuYXZfc29maWFfd2FfY29uZmlybScsICdQZXJmZWl0byEg8J+OiSBWb3UgdGUgZW52aWFyIG8gcG9ydGbDs2xpbyBjb21wbGV0byBlIGRpc3BvbmliaWxpZGFkZSBwZWxvIFdoYXRzQXBwLiBQb2RlIGFndWFyZGFyIScpOwoKICAgIC8vIFNhdmUgc2V0dGluZ3MKICAgIGlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXT09PSdQT1NUJyAmJiBpc3NldCgkX1BPU1RbJ3ZtMl9zb2ZpYV9zYXZlJ10pICYmIGNoZWNrX2FkbWluX3JlZmVyZXIoJ3ZtMl9zb2ZpYV9ub25jZScpKSB7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX3NvZmlhX2NhcHR1cmFfZW5hYmxlZCcsIGlzc2V0KCRfUE9TVFsnc29maWFfZW5hYmxlZCddKSA/ICcxJyA6ICcwJyk7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX3NvZmlhX3RyaWdnZXJfbXNncycsICAgIGludHZhbCgkX1BPU1RbJ3RyaWdnZXJfbXNncyddID8/IDIpKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc29maWFfdHJpZ2dlcl9pbnRlbmNhbycsaXNzZXQoJF9QT1NUWyd0cmlnZ2VyX2ludGVuY2FvJ10pID8gJzEnIDogJzAnKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc29maWFfdHJpZ2dlcl9xdWVybycsICAgaXNzZXQoJF9QT1NUWyd0cmlnZ2VyX3F1ZXJvJ10pID8gJzEnIDogJzAnKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc29maWFfa2V5d29yZHMnLCAgICAgICAgc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoJF9QT1NUWydzb2ZpYV9rZXl3b3JkcyddID8/ICcnKSk7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX3NvZmlhX3dhX21zZycsICAgICAgICAgIHNhbml0aXplX3RleHRhcmVhX2ZpZWxkKCRfUE9TVFsnc29maWFfd2FfbXNnJ10gPz8gJycpKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bWJuYXZfc29maWFfd2FfY29uZmlybScsICAgc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoJF9QT1NUWydzb2ZpYV93YV9jb25maXJtJ10gPz8gJycpKTsKICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MiPjxwPuKchSBDb25maWd1cmHDp8O1ZXMgc2FsdmFzITwvcD48L2Rpdj4nOwogICAgICAgIC8vIHJlbG9hZCB2YWx1ZXMKICAgICAgICAkc29maWFfZW5hYmxlZCAgICA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV9jYXB0dXJhX2VuYWJsZWQnLCAnMScpOwogICAgICAgICR0cmlnZ2VyX21zZ3MgICAgID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX3RyaWdnZXJfbXNncycsICcxJyk7CiAgICAgICAgJHRyaWdnZXJfaW50ZW5jYW8gPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfdHJpZ2dlcl9pbnRlbmNhbycsICcxJyk7CiAgICAgICAgJHRyaWdnZXJfcXVlcm8gICAgPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfdHJpZ2dlcl9xdWVybycsICcxJyk7CiAgICAgICAgJGtleXdvcmRzX3JhdyAgICAgPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfa2V5d29yZHMnLCAnJyk7CiAgICAgICAgJHNvZmlhX3dhX21zZyAgICAgPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfd2FfbXNnJywgJycpOwogICAgICAgICRzb2ZpYV93YV9jb25maXJtID0gZ2V0X29wdGlvbigndm1ibmF2X3NvZmlhX3dhX2NvbmZpcm0nLCAnJyk7CiAgICB9CgogICAgJGFjdGl2ZV90YWIgPSBpc3NldCgkX0dFVFsndGFiJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsndGFiJ10pIDogJ2FuYWx5dGljcyc7CiAgICAkYmFzZV91cmwgICA9IGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLXNvZmlhJyk7CiAgICA/Pgo8ZGl2IGNsYXNzPSJ3cmFwIHZtMi13cmFwIj4KPHN0eWxlPgoudm0yLXNvZmlhLWhlYWRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIzFhMGEyZSwjMmQxYjY5KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyMHB4IDI0cHg7bWFyZ2luLWJvdHRvbToyMHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjM2QyYjZkfQoudm0yLXNvZmlhLWhlYWRlciBoMXttYXJnaW46MDtjb2xvcjojZmZmO2ZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjgwMH0KLnZtMi1zb2ZpYS1oZWFkZXIgcHttYXJnaW46NHB4IDAgMDtjb2xvcjojYTc4YmZhO2ZvbnQtc2l6ZToxM3B4fQoudm0yLXNvZmlhLWJhZGdle21hcmdpbi1sZWZ0OmF1dG87YmFja2dyb3VuZDojN2MzYWVkO2NvbG9yOiNmZmY7cGFkZGluZzo1cHggMTRweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwfQoudm0yLXNvZmlhLXRhYnN7ZGlzcGxheTpmbGV4O2dhcDowO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlNWU3ZWI7bWFyZ2luLWJvdHRvbToyMHB4O292ZXJmbG93LXg6YXV0b30KLnZtMi1zb2ZpYS10YWJ7cGFkZGluZzoxMHB4IDE4cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM2YjcyODA7Ym9yZGVyLWJvdHRvbTozcHggc29saWQgdHJhbnNwYXJlbnQ7d2hpdGUtc3BhY2U6bm93cmFwO3RyYW5zaXRpb246YWxsIC4yc30KLnZtMi1zb2ZpYS10YWI6aG92ZXJ7Y29sb3I6IzdjM2FlZDtiYWNrZ3JvdW5kOiNmNWYzZmZ9Ci52bTItc29maWEtdGFiLmFjdGl2ZXtjb2xvcjojN2MzYWVkO2JvcmRlci1ib3R0b20tY29sb3I6IzdjM2FlZH0KLnNvZmlhLWtwaS1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxNDBweCwxZnIpKTtnYXA6MTJweDttYXJnaW4tYm90dG9tOjIwcHh9Ci5zb2ZpYS1rcGl7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNnB4O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4yc30KLnNvZmlhLWtwaTpob3Zlcntib3JkZXItY29sb3I6IzdjM2FlZDtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgxMjQsNTgsMjM3LC4xKX0KLnNvZmlhLWtwaS12YWx7Zm9udC1zaXplOjI4cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMxZjI5Mzc7ZGlzcGxheTpibG9ja30KLnNvZmlhLWtwaS1sYmx7Zm9udC1zaXplOjExcHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjRweH0KLnNvZmlhLWtwaS1zdWJ7Zm9udC1zaXplOjEwcHg7Y29sb3I6IzljYTNhZjttYXJnaW4tdG9wOjJweH0KLnNvZmlhLWtwaS5wdXJwbGUgLnNvZmlhLWtwaS12YWx7Y29sb3I6IzdjM2FlZH0KLnNvZmlhLWtwaS5ncmVlbiAuc29maWEta3BpLXZhbHtjb2xvcjojMDU5NjY5fQouc29maWEta3BpLmFtYmVyIC5zb2ZpYS1rcGktdmFse2NvbG9yOiNkOTc3MDZ9Ci5zb2ZpYS10YWJsZS13cmFwe2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMHB4O292ZXJmbG93LXg6YXV0b30KLnNvZmlhLXRhYmxlLXdyYXAgdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7bWluLXdpZHRoOjYwMHB4fQouc29maWEtdGFibGUtd3JhcCB0aHtwYWRkaW5nOjEwcHggMTJweDtmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO3RleHQtYWxpZ246bGVmdDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjNmNGY2O2JhY2tncm91bmQ6I2Y5ZmFmYn0KLnNvZmlhLXRhYmxlLXdyYXAgdGR7cGFkZGluZzoxMHB4IDEycHg7Zm9udC1zaXplOjEzcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2Y5ZmFmYjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5zb2ZpYS10YWJsZS13cmFwIHRyOmxhc3QtY2hpbGQgdGR7Ym9yZGVyLWJvdHRvbTpub25lfQouc29maWEtdGFibGUtd3JhcCB0cjpob3ZlciB0ZHtiYWNrZ3JvdW5kOiNmYWY1ZmZ9Ci5zb2ZpYS1iYWRnZXtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMH0KLnNvZmlhLWJhZGdlLWluZmFudGlse2JhY2tncm91bmQ6I2RiZWFmZTtjb2xvcjojMWQ0ZWQ4fQouc29maWEtYmFkZ2UtY2FzYW1lbnRve2JhY2tncm91bmQ6I2VkZTlmZTtjb2xvcjojNmQyOGQ5fQouc29maWEtYmFkZ2UtMTVhbm9ze2JhY2tncm91bmQ6I2ZjZTdmMztjb2xvcjojOWQxNzRkfQouc29maWEtYmFkZ2UtYWR1bHRve2JhY2tncm91bmQ6I2YzZjRmNjtjb2xvcjojMzc0MTUxfQouc29maWEtYmFkZ2UtY29ycG9yYXRpdm97YmFja2dyb3VuZDojZDFmYWU1O2NvbG9yOiMwNjVmNDZ9Ci5zb2ZpYS1iYWRnZS1mb3JtYXR1cmF7YmFja2dyb3VuZDojZmVkN2FhO2NvbG9yOiM5MjQwMGV9Ci5zb2ZpYS1iYWRnZS1hbHRhe2JhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojOTkxYjFifQouc29maWEtYmFkZ2UtbWVkaWF7YmFja2dyb3VuZDojZmVmM2M3O2NvbG9yOiM5MjQwMGV9Ci5zb2ZpYS1iYWRnZS1iYWl4YXtiYWNrZ3JvdW5kOiNmM2Y0ZjY7Y29sb3I6IzZiNzI4MH0KLnNvZmlhLWJhZGdlLWNhcHR1cmFkb3tiYWNrZ3JvdW5kOiNkMWZhZTU7Y29sb3I6IzA2NWY0Nn0KLnNvZmlhLWJhZGdlLW5hb3tiYWNrZ3JvdW5kOiNmM2Y0ZjY7Y29sb3I6IzZiNzI4MH0KLnNvZmlhLWJhci1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjEwcHh9Ci5zb2ZpYS1iYXItbGFiZWx7d2lkdGg6MTAwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzM3NDE1MTtmbGV4LXNocmluazowfQouc29maWEtYmFyLXRyYWNre2ZsZXg6MTtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kOiNmM2Y0ZjY7Ym9yZGVyLXJhZGl1czo2cHg7b3ZlcmZsb3c6aGlkZGVufQouc29maWEtYmFyLWZpbGx7aGVpZ2h0OjEwMCU7Ym9yZGVyLXJhZGl1czo2cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6OHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZmZmfQouc29maWEtYmFyLWNvdW50e3dpZHRoOjQwcHg7Zm9udC1zaXplOjEycHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojNmI3MjgwfQouc29maWEtZnVubmVsLXN0ZXB7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjEwcHh9Ci5zb2ZpYS1mdW5uZWwtYmFye2ZsZXg6MTtoZWlnaHQ6MzhweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAxNHB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojZmZmfQouc29maWEtZnVubmVsLW51bXt3aWR0aDo1NXB4O2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjgwMDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiMxZjI5Mzd9Ci5zb2ZpYS1mdW5uZWwtcGN0e3dpZHRoOjQ1cHg7Zm9udC1zaXplOjExcHg7Y29sb3I6IzZiNzI4MH0KLnNvZmlhLXNlY3Rpb257YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoyMHB4O21hcmdpbi1ib3R0b206MTZweH0KLnNvZmlhLXNlY3Rpb24gaDN7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbjowIDAgMTRweDtjb2xvcjojMWYyOTM3fQouc29maWEtdHJpZ2dlci1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtwYWRkaW5nOjEycHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjNmNGY2fQouc29maWEtdHJpZ2dlci1yb3c6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9Ci5zb2ZpYS10cmlnZ2VyLWxhYmVse2ZsZXg6MTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzM3NDE1MX0KLnNvZmlhLXRyaWdnZXItZGVzY3tmb250LXNpemU6MTFweDtjb2xvcjojNmI3MjgwO21hcmdpbi10b3A6MnB4fQouc29maWEtdG9nZ2xle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjQycHg7aGVpZ2h0OjI0cHg7ZmxleC1zaHJpbms6MH0KLnNvZmlhLXRvZ2dsZSBpbnB1dHtvcGFjaXR5OjA7d2lkdGg6MDtoZWlnaHQ6MH0KLnNvZmlhLXRvZ2dsZS1zbGlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOnBvaW50ZXI7aW5zZXQ6MDtiYWNrZ3JvdW5kOiNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czoyNHB4O3RyYW5zaXRpb246LjNzfQouc29maWEtdG9nZ2xlLXNsaWRlcjo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjE4cHg7d2lkdGg6MThweDtsZWZ0OjNweDtib3R0b206M3B4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOi4zc30KLnNvZmlhLXRvZ2dsZSBpbnB1dDpjaGVja2VkKy5zb2ZpYS10b2dnbGUtc2xpZGVye2JhY2tncm91bmQ6IzdjM2FlZH0KLnNvZmlhLXRvZ2dsZSBpbnB1dDpjaGVja2VkKy5zb2ZpYS10b2dnbGUtc2xpZGVyOjpiZWZvcmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMThweCl9Ci5zb2ZpYS1ydWxlLXJvd3tiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTRweDttYXJnaW4tYm90dG9tOjEwcHh9Ci5zb2ZpYS1ydWxlLXRpdGxle2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMzc0MTUxO21hcmdpbi1ib3R0b206NnB4fQouc29maWEtcnVsZS1ib2R5e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODB9Ci5zb2ZpYS1ydWxlLWJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6I2VkZTlmZTtjb2xvcjojNmQyOGQ5O2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMnB4O21hcmdpbi1yaWdodDo0cHh9Ci5zb2ZpYS1wbGFuLXBoYXNle2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjN2MzYWVkO3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmYWY1ZmY7Ym9yZGVyLXJhZGl1czowIDhweCA4cHggMH0KLnNvZmlhLXBsYW4tcGhhc2UgaDR7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbjowIDAgNnB4O2NvbG9yOiM2ZDI4ZDl9Ci5zb2ZpYS1wbGFuLXBoYXNlIHB7Zm9udC1zaXplOjEycHg7Y29sb3I6IzRiNTU2MzttYXJnaW46MH0KLnNvZmlhLXBsYW4tZG9uZXtib3JkZXItbGVmdC1jb2xvcjojMDU5NjY5O2JhY2tncm91bmQ6I2YwZmRmNH0KLnNvZmlhLXBsYW4tZG9uZSBoNHtjb2xvcjojMDY1ZjQ2fQouc29maWEtcGxhbi1kb2luZ3tib3JkZXItbGVmdC1jb2xvcjojZDk3NzA2O2JhY2tncm91bmQ6I2ZmZmJlYn0KLnNvZmlhLXBsYW4tZG9pbmcgaDR7Y29sb3I6IzkyNDAwZX0KQG1lZGlhKG1heC13aWR0aDo2MDBweCl7LnNvZmlhLWtwaS1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyfS5zb2ZpYS1rcGktdmFse2ZvbnQtc2l6ZToyMnB4fX0KPC9zdHlsZT4KCjxkaXYgY2xhc3M9InZtMi1zb2ZpYS1oZWFkZXIiPgogIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MzJweCI+8J+noDwvc3Bhbj4KICA8ZGl2PgogICAgPGgxPlNvZklBIEludGVsbGlnZW5jZTwvaDE+CiAgICA8cD5DYXB0dXJhIHNpbmFpcyBkYXMgY29udmVyc2FzIHBhcmEgdmVuZGVyIG1haXMgYXV0b21hdGljYW1lbnRlPC9wPgogIDwvZGl2PgogIDxzcGFuIGNsYXNzPSJ2bTItc29maWEtYmFkZ2UiPuKaoSB2MS4wPC9zcGFuPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InZtMi1zb2ZpYS10YWJzIj4KICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGJhc2VfdXJsLicmdGFiPWFuYWx5dGljcycpOyA/PiIgY2xhc3M9InZtMi1zb2ZpYS10YWIgPD9waHAgZWNobyAkYWN0aXZlX3RhYj09PSdhbmFseXRpY3MnPydhY3RpdmUnOicnOyA/PiI+8J+TiiBBbmFseXRpY3M8L2E+CiAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRiYXNlX3VybC4nJnRhYj1jYXB0dXJhJyk7ID8+IiBjbGFzcz0idm0yLXNvZmlhLXRhYiA8P3BocCBlY2hvICRhY3RpdmVfdGFiPT09J2NhcHR1cmEnPydhY3RpdmUnOicnOyA/PiI+8J+TsiBDYXB0dXJhIFdBPC9hPgogIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkYmFzZV91cmwuJyZ0YWI9YXV0b21hY29lcycpOyA/PiIgY2xhc3M9InZtMi1zb2ZpYS10YWIgPD9waHAgZWNobyAkYWN0aXZlX3RhYj09PSdhdXRvbWFjb2VzJz8nYWN0aXZlJzonJzsgPz4iPvCfpJYgQXV0b21hw6fDtWVzPC9hPgogIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkYmFzZV91cmwuJyZ0YWI9cGxhbm8nKTsgPz4iIGNsYXNzPSJ2bTItc29maWEtdGFiIDw/cGhwIGVjaG8gJGFjdGl2ZV90YWI9PT0ncGxhbm8nPydhY3RpdmUnOicnOyA/PiI+8J+Pl++4jyBQbGFubzwvYT4KICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGJhc2VfdXJsLicmdGFiPWNvbmhlY2ltZW50bycpOyA/PiIgY2xhc3M9InZtMi1zb2ZpYS10YWIgPD9waHAgZWNobyAkYWN0aXZlX3RhYj09PSdjb25oZWNpbWVudG8nPydhY3RpdmUnOicnOyA/PiI+8J+TmiBCYXNlIGRlIENvbmhlY2ltZW50bzwvYT4KICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGJhc2VfdXJsLicmdGFiPXByb21wdCcpOyA/PiIgY2xhc3M9InZtMi1zb2ZpYS10YWIgPD9waHAgZWNobyAkYWN0aXZlX3RhYj09PSdwcm9tcHQnPydhY3RpdmUnOicnOyA/PiI+4pqZ77iPIFByb21wdDwvYT4KICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGJhc2VfdXJsLicmdGFiPXNldHVwJyk7ID8+IiBjbGFzcz0idm0yLXNvZmlhLXRhYiA8P3BocCBlY2hvICRhY3RpdmVfdGFiPT09J3NldHVwJz8nYWN0aXZlJzonJzsgPz4iPvCflKcgU2V0dXA8L2E+CjwvZGl2PgoKPD9waHAgaWYgKCRhY3RpdmVfdGFiID09PSAnYW5hbHl0aWNzJyk6ID8+CjwhLS0g4pWQ4pWQ4pWQIEFOQUxZVElDUyB2MiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+Cjw/cGhwCi8vIOKUgOKUgCBQZXLDrW9kbyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKJHBlcmlvZCAgPSBpc3NldCgkX0dFVFsncGVyaW9kJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsncGVyaW9kJ10pIDogJzMwZCc7CiRhbmFfdXJsID0gYWRtaW5fdXJsKCdhZG1pbi5waHA/cGFnZT12bTItc29maWEmdGFiPWFuYWx5dGljcycpOwovLyBDYWxjdWxhciBsaW1pdGVzIGVtIFVUQyBjb20gYmFzZSBubyBob3LDoXJpbyBkZSBCcmFzw61saWEgKHN0YXJ0ZWRfYXQgw6kgc2Fsdm8gZW0gVVRDKQokdHpfc3AgID0gbmV3IERhdGVUaW1lWm9uZSgnQW1lcmljYS9TYW9fUGF1bG8nKTsKJHR6X3V0YyA9IG5ldyBEYXRlVGltZVpvbmUoJ1VUQycpOwokbm93X3NwID0gbmV3IERhdGVUaW1lKCdub3cnLCAkdHpfc3ApOwokd2hlcmVfcCA9ICcnOwpzd2l0Y2ggKCRwZXJpb2QpIHsKICAgIGNhc2UgJ3RvZGF5JzoKICAgICAgICAkZDAgPSBuZXcgRGF0ZVRpbWUoJG5vd19zcC0+Zm9ybWF0KCdZLW0tZCcpIC4gJyAwMDowMDowMCcsICR0el9zcCk7ICRkMC0+c2V0VGltZXpvbmUoJHR6X3V0Yyk7CiAgICAgICAgJGQxID0gbmV3IERhdGVUaW1lKCRub3dfc3AtPmZvcm1hdCgnWS1tLWQnKSAuICcgMjM6NTk6NTknLCAkdHpfc3ApOyAkZDEtPnNldFRpbWV6b25lKCR0el91dGMpOwogICAgICAgICR3aGVyZV9wID0gIkFORCBzdGFydGVkX2F0ID49ICd7JGQwLT5mb3JtYXQoJ1ktbS1kIEg6aTpzJyl9JyBBTkQgc3RhcnRlZF9hdCA8PSAneyRkMS0+Zm9ybWF0KCdZLW0tZCBIOmk6cycpfSciOwogICAgICAgIGJyZWFrOwogICAgY2FzZSAnN2QnOgogICAgICAgICRkMCA9IG5ldyBEYXRlVGltZSgnbm93JywgJHR6X3NwKTsgJGQwLT5tb2RpZnkoJy03IGRheXMnKTsgJGQwLT5zZXRUaW1lem9uZSgkdHpfdXRjKTsKICAgICAgICAkd2hlcmVfcCA9ICJBTkQgc3RhcnRlZF9hdCA+PSAneyRkMC0+Zm9ybWF0KCdZLW0tZCBIOmk6cycpfSciOwogICAgICAgIGJyZWFrOwogICAgY2FzZSAnMzBkJzoKICAgICAgICAkZDAgPSBuZXcgRGF0ZVRpbWUoJ25vdycsICR0el9zcCk7ICRkMC0+bW9kaWZ5KCctMzAgZGF5cycpOyAkZDAtPnNldFRpbWV6b25lKCR0el91dGMpOwogICAgICAgICR3aGVyZV9wID0gIkFORCBzdGFydGVkX2F0ID49ICd7JGQwLT5mb3JtYXQoJ1ktbS1kIEg6aTpzJyl9JyI7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlICdtb250aCc6CiAgICAgICAgJGQwID0gbmV3IERhdGVUaW1lKCRub3dfc3AtPmZvcm1hdCgnWS1tJykgLiAnLTAxIDAwOjAwOjAwJywgJHR6X3NwKTsgJGQwLT5zZXRUaW1lem9uZSgkdHpfdXRjKTsKICAgICAgICAkd2hlcmVfcCA9ICJBTkQgc3RhcnRlZF9hdCA+PSAneyRkMC0+Zm9ybWF0KCdZLW0tZCBIOmk6cycpfSciOwogICAgICAgIGJyZWFrOwogICAgZGVmYXVsdDogJHdoZXJlX3AgPSAnJzsKfQoKLy8g4pSA4pSAIFN0YXRzIHBlcsOtb2RvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAokcF90b3RhbCAgICA9ICR0YWJsZV9leGlzdHMgPyAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdCBXSEVSRSAxPTEgJHdoZXJlX3AiKSA6IDA7CiRwX2VuZ2FqICAgID0gJHRhYmxlX2V4aXN0cyA/IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0IFdIRVJFIG1lbnNhZ2Vuc19jb3VudCA+PSAzICR3aGVyZV9wIikgOiAwOwokcF93YSAgICAgICA9ICR0YWJsZV9leGlzdHMgPyAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdCBXSEVSRSB3aGF0c2FwcCBJUyBOT1QgTlVMTCBBTkQgd2hhdHNhcHAgIT0gJycgJHdoZXJlX3AiKSA6IDA7CiRwX2RhdGFfZXYgID0gJHRhYmxlX2V4aXN0cyA/IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0IFdIRVJFIGRhdGFfZXZlbnRvX3N0ciBJUyBOT1QgTlVMTCBBTkQgZGF0YV9ldmVudG9fc3RyICE9ICcnICR3aGVyZV9wIikgOiAwOwokcF9tc2dzX3N1bSA9ICR0YWJsZV9leGlzdHMgPyAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09BTEVTQ0UoU1VNKG1lbnNhZ2Vuc19jb3VudCksMCkgRlJPTSAkdCBXSEVSRSAxPTEgJHdoZXJlX3AiKSA6IDA7CiRwX2Vhcmx5ICAgID0gJHRhYmxlX2V4aXN0cyA/IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0IFdIRVJFIG1lbnNhZ2Vuc19jb3VudCA8PSAyICR3aGVyZV9wIikgOiAwOwokdGF4YV9hYmFuZG9ubyA9ICRwX3RvdGFsID4gMCA/IHJvdW5kKCRwX2Vhcmx5IC8gJHBfdG90YWwgKiAxMDApIDogMDsKCi8vIOKUgOKUgCBSZWNlaXRhIGF0cmlidcOtZGEgKEhQT1MpIOKAlCBhcGVuYXMgcGVkaWRvcyBjcmlhZG9zIEFQw5NTIGEgc2Vzc8OjbyBTb2ZJQSDilIDilIAKLy8gTWFwYTogcGhvbmVfbm9ybWFsaXphZG8gPT4gc3RhcnRlZF9hdF91dGMgKHNlc3PDo28gbWFpcyBhbnRpZ2Egbm8gcGVyw61vZG8pCiRwaG9uZV9zZXNzaW9uX21hcCA9IFtdOwppZiAoJHRhYmxlX2V4aXN0cyAmJiAkcF93YSA+IDApIHsKICAgICRyb3dzX3BoID0gJHdwZGItPmdldF9yZXN1bHRzKCJTRUxFQ1Qgd2hhdHNhcHAsIHN0YXJ0ZWRfYXQgRlJPTSAkdCBXSEVSRSB3aGF0c2FwcCBJUyBOT1QgTlVMTCBBTkQgd2hhdHNhcHAgIT0gJycgJHdoZXJlX3AgT1JERVIgQlkgc3RhcnRlZF9hdCBBU0MiKTsKICAgIGZvcmVhY2ggKCRyb3dzX3BoIGFzICRyb3cpIHsKICAgICAgICAkYyA9IHByZWdfcmVwbGFjZSgnL1teMC05XS8nLCAnJywgJHJvdy0+d2hhdHNhcHAgPz8gJycpOwogICAgICAgIGlmIChzdHJsZW4oJGMpID49IDEwICYmICFpc3NldCgkcGhvbmVfc2Vzc2lvbl9tYXBbJGNdKSkgewogICAgICAgICAgICAkcGhvbmVfc2Vzc2lvbl9tYXBbJGNdID0gJHJvdy0+c3RhcnRlZF9hdDsgLy8gcHJpbWVpcmEgc2Vzc8OjbyBubyBwZXLDrW9kbwogICAgICAgIH0KICAgIH0KfQokc29maWFfcGhvbmVzICA9IGFycmF5X2tleXMoJHBob25lX3Nlc3Npb25fbWFwKTsKJHJlY2VpdGFfc29maWEgPSAwLjA7CiRwZWRpZG9zX3NvZmlhID0gMDsKJHRpY2tldF9tZWRpbyAgPSAwLjA7CiR3Y28gPSAkd3BkYi0+cHJlZml4IC4gJ3djX29yZGVycyc7CiR3Y2EgPSAkd3BkYi0+cHJlZml4IC4gJ3djX29yZGVyX2FkZHJlc3Nlcyc7CmlmICghZW1wdHkoJHBob25lX3Nlc3Npb25fbWFwKSAmJiAkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAnJHdjbyciKSA9PT0gJHdjbykgewogICAgLy8gQnVzY2EgYXBlbmFzIHBlZGlkb3Mgd2MtcHJvY2Vzc2luZywgY29tIGRhdGEgZSB0ZWxlZm9uZQogICAgJGFsbF9vcmRzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1Qgby5pZCwgby50b3RhbF9hbW91bnQsIG8uZGF0ZV9jcmVhdGVkX2dtdCwgYS5waG9uZSBGUk9NICR3Y28gbwogICAgICAgICBJTk5FUiBKT0lOICR3Y2EgYSBPTiBhLm9yZGVyX2lkID0gby5pZCBBTkQgYS5hZGRyZXNzX3R5cGUgPSAnYmlsbGluZycKICAgICAgICAgV0hFUkUgby5zdGF0dXMgPSAnd2MtcHJvY2Vzc2luZyciCiAgICApOwogICAgJHNlZW5faWRzID0gW107CiAgICBmb3JlYWNoICgkYWxsX29yZHMgYXMgJG9yZCkgewogICAgICAgIGlmIChpbl9hcnJheSgkb3JkLT5pZCwgJHNlZW5faWRzKSkgY29udGludWU7CiAgICAgICAgJGNwID0gcHJlZ19yZXBsYWNlKCcvW14wLTldLycsICcnLCAkb3JkLT5waG9uZSA/PyAnJyk7CiAgICAgICAgaWYgKCRjcCAmJiBpc3NldCgkcGhvbmVfc2Vzc2lvbl9tYXBbJGNwXSkpIHsKICAgICAgICAgICAgLy8gUGVkaWRvIGRldmUgdGVyIHNpZG8gY3JpYWRvIERFUE9JUyBkbyBpbsOtY2lvIGRhIHNlc3PDo28gU29mSUEKICAgICAgICAgICAgaWYgKCRvcmQtPmRhdGVfY3JlYXRlZF9nbXQgPj0gJHBob25lX3Nlc3Npb25fbWFwWyRjcF0pIHsKICAgICAgICAgICAgICAgICRyZWNlaXRhX3NvZmlhICs9IGZsb2F0dmFsKCRvcmQtPnRvdGFsX2Ftb3VudCk7CiAgICAgICAgICAgICAgICAkcGVkaWRvc19zb2ZpYSsrOwogICAgICAgICAgICAgICAgJHNlZW5faWRzW10gPSAkb3JkLT5pZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICR0aWNrZXRfbWVkaW8gPSAkcGVkaWRvc19zb2ZpYSA+IDAgPyByb3VuZCgkcmVjZWl0YV9zb2ZpYSAvICRwZWRpZG9zX3NvZmlhLCAyKSA6IDA7Cn0KCi8vIOKUgOKUgCBDdXBvbnMgU29mSUEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiRkYXRlX3doZXJlX2N1cG9tID0gJyc7CmlmICghZW1wdHkoJHdoZXJlX3ApKSB7CiAgICAvLyByZXV0aWxpemEgbyBtZXNtbyBpbnRlcnZhbG8gZG8gcGVyw61vZG8sIG1hcyBzb2JyZSBwb3N0X2RhdGUgKEJSVCkKICAgIGlmICgkcGVyaW9kID09PSAndG9kYXknKSB7CiAgICAgICAgJGRhdGVfd2hlcmVfY3Vwb20gPSAiQU5EIERBVEUocG9zdF9kYXRlKSA9ICd7JG5vd19zcC0+Zm9ybWF0KCdZLW0tZCcpfSciOwogICAgfSBlbHNlaWYgKCRwZXJpb2QgPT09ICc3ZCcpIHsKICAgICAgICAkZGF0ZV93aGVyZV9jdXBvbSA9ICJBTkQgcG9zdF9kYXRlID49IERBVEVfU1VCKE5PVygpLCBJTlRFUlZBTCA3IERBWSkiOwogICAgfSBlbHNlaWYgKCRwZXJpb2QgPT09ICczMGQnKSB7CiAgICAgICAgJGRhdGVfd2hlcmVfY3Vwb20gPSAiQU5EIHBvc3RfZGF0ZSA+PSBEQVRFX1NVQihOT1coKSwgSU5URVJWQUwgMzAgREFZKSI7CiAgICB9IGVsc2VpZiAoJHBlcmlvZCA9PT0gJ21vbnRoJykgewogICAgICAgICRkYXRlX3doZXJlX2N1cG9tID0gIkFORCBEQVRFX0ZPUk1BVChwb3N0X2RhdGUsJyVZLSVtJykgPSAneyRub3dfc3AtPmZvcm1hdCgnWS1tJyl9JyI7CiAgICB9Cn0KJHBfY3Vwb25zID0gKGludCkkd3BkYi0+Z2V0X3ZhcigKICAgICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnBvc3RzfQogICAgIFdIRVJFIHBvc3RfdHlwZT0nc2hvcF9jb3Vwb24nIEFORCBwb3N0X3N0YXR1cz0ncHVibGlzaCcKICAgICBBTkQgcG9zdF90aXRsZSBMSUtFICdTT0ZJQS0lJyAkZGF0ZV93aGVyZV9jdXBvbSIKKTsKJHBfY3Vwb25zX3VzZWQgPSAoaW50KSR3cGRiLT5nZXRfdmFyKAogICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cG9zdHN9IHAKICAgICBJTk5FUiBKT0lOIHskd3BkYi0+cG9zdG1ldGF9IHBtIE9OIHBtLnBvc3RfaWQgPSBwLklEIEFORCBwbS5tZXRhX2tleSA9ICd1c2FnZV9jb3VudCcKICAgICBXSEVSRSBwLnBvc3RfdHlwZT0nc2hvcF9jb3Vwb24nIEFORCBwLnBvc3Rfc3RhdHVzPSdwdWJsaXNoJwogICAgIEFORCBwLnBvc3RfdGl0bGUgTElLRSAnU09GSUEtJScgQU5EIENBU1QocG0ubWV0YV92YWx1ZSBBUyBVTlNJR05FRCkgPiAwCiAgICAgJGRhdGVfd2hlcmVfY3Vwb20iCik7CiR0YXhhX2N1cG9tX2NvbnYgPSAkcF9jdXBvbnMgPiAwID8gcm91bmQoJHBfY3Vwb25zX3VzZWQgLyAkcF9jdXBvbnMgKiAxMDApIDogMDsKCi8vIOKUgOKUgCBDdXN0byBJQSBlIFJPQVMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEN1c3RvIGVzdGltYWRvOiBDbGF1ZGUgSGFpa3UgfiQwLjAwMTMvbXNnIChzZW0gdHJhY2tpbmcgZGUgdG9rZW5zIHJlYWlzKQokY3VzdG9fdXNkID0gcm91bmQoJHBfbXNnc19zdW0gKiAwLjAwMTMsIDIpOwokY3VzdG9fYnJsID0gcm91bmQoJGN1c3RvX3VzZCAqIDUuNzAsIDIpOwokcm9hcyAgICAgID0gJGN1c3RvX2JybCA+IDAgPyByb3VuZCgkcmVjZWl0YV9zb2ZpYSAvICRjdXN0b19icmwsIDEpIDogMDsKCi8vIOKUgOKUgCBUYXhhcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKJHRheGFfY2FwX3AgID0gJHBfdG90YWwgPiAwID8gcm91bmQoJHBfd2EgLyAkcF90b3RhbCAqIDEwMCwgMSkgOiAwOwokdGF4YV9lbmdfcCAgPSAkcF90b3RhbCA+IDAgPyByb3VuZCgkcF9lbmdhaiAvICRwX3RvdGFsICogMTAwLCAxKSA6IDA7CiR0YXhhX2NvbnZfcCA9ICRwX3dhID4gMCA/IHJvdW5kKCRwZWRpZG9zX3NvZmlhIC8gJHBfd2EgKiAxMDAsIDEpIDogMDsKCi8vIOKUgOKUgCBUZW5kw6puY2lhIDcgZGlhcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKJHRyZW5kNyA9ICR0YWJsZV9leGlzdHMgPyAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAiU0VMRUNUIERBVEUoQ09OVkVSVF9UWihzdGFydGVkX2F0LCAnKzAwOjAwJywgJy0wMzowMCcpKSBhcyBkaWEsIENPVU5UKCopIGFzIG4gRlJPTSAkdAogICAgIFdIRVJFIHN0YXJ0ZWRfYXQgPj0gREFURV9TVUIoVVRDX1RJTUVTVEFNUCgpLCBJTlRFUlZBTCA3IERBWSkKICAgICBHUk9VUCBCWSBEQVRFKENPTlZFUlRfVFooc3RhcnRlZF9hdCwgJyswMDowMCcsICctMDM6MDAnKSkgT1JERVIgQlkgZGlhIgopIDogW107CiR0cmVuZDdfbWFwID0gW107CmZvcmVhY2ggKCR0cmVuZDcgYXMgJHIpICR0cmVuZDdfbWFwWyRyLT5kaWFdID0gKGludCkkci0+bjsKJHRyZW5kN19tYXggPSAkdHJlbmQ3X21hcCA/IG1heChhcnJheV92YWx1ZXMoJHRyZW5kN19tYXApKSA6IDE7CgovLyDilIDilIAgSG9yw6FyaW9zIGRlIHBpY28g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiRwZWFrID0gJHRhYmxlX2V4aXN0cyA/ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICJTRUxFQ1QgSE9VUihDT05WRVJUX1RaKHN0YXJ0ZWRfYXQsICcrMDA6MDAnLCAnLTAzOjAwJykpIGFzIGhvcmEsIENPVU5UKCopIGFzIG4gRlJPTSAkdCBHUk9VUCBCWSBIT1VSKENPTlZFUlRfVFooc3RhcnRlZF9hdCwgJyswMDowMCcsICctMDM6MDAnKSkgT1JERVIgQlkgaG9yYSIKKSA6IFtdOwokcGVha19tYXAgPSBbXTsKZm9yZWFjaCAoJHBlYWsgYXMgJHIpICRwZWFrX21hcFsoaW50KSRyLT5ob3JhXSA9IChpbnQpJHItPm47CiRwZWFrX21heCA9ICRwZWFrX21hcCA/IG1heChhcnJheV92YWx1ZXMoJHBlYWtfbWFwKSkgOiAxOwoKLy8g4pSA4pSAIENhdGVnb3JpYXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiRjYXRfY29sb3JzX2FuID0gWydpbmZhbnRpbCc9PicjM2I4MmY2JywnY2FzYW1lbnRvJz0+JyM4YjVjZjYnLCcxNSBhbm9zJz0+JyNlYzQ4OTknLCdhZHVsdG8nPT4nIzZiNzI4MCcsJ2NvcnBvcmF0aXZvJz0+JyMxMGI5ODEnLCdmb3JtYXR1cmEnPT4nI2Y1OWUwYiddOwokY2F0c19wID0gJHRhYmxlX2V4aXN0cyA/ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICJTRUxFQ1QgY2F0ZWdvcmlhLCBDT1VOVCgqKSBhcyBuIEZST00gJHQgV0hFUkUgY2F0ZWdvcmlhIElTIE5PVCBOVUxMIEFORCBjYXRlZ29yaWEgIT0gJycgJHdoZXJlX3AgR1JPVVAgQlkgY2F0ZWdvcmlhIE9SREVSIEJZIG4gREVTQyBMSU1JVCA4IgopIDogW107CiRjYXRzX2FyciA9IFtdOwpmb3JlYWNoICgkY2F0c19wIGFzICRjKSAkY2F0c19hcnJbJGMtPmNhdGVnb3JpYV0gPSAoaW50KSRjLT5uOwokY2F0c19tYXggPSAkY2F0c19hcnIgPyBtYXgoYXJyYXlfdmFsdWVzKCRjYXRzX2FycikpIDogMTsKCi8vIOKUgOKUgCBTZXNzw7VlcyBwYXJhIHRhYmVsYSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKJHNlc3Npb25zX3AgPSAkdGFibGVfZXhpc3RzID8gJHdwZGItPmdldF9yZXN1bHRzKAogICAgIlNFTEVDVCAqIEZST00gJHQgV0hFUkUgMT0xICR3aGVyZV9wIE9SREVSIEJZIHN0YXJ0ZWRfYXQgREVTQyBMSU1JVCAxMDAiCikgOiBbXTsKCi8vIOKUgOKUgCBJbnNpZ2h0cyBhdXRvbcOhdGljb3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiRpbnNpZ2h0cyA9IFtdOwppZiAoJHRheGFfY2FwX3AgPCAyMCAmJiAkcF90b3RhbCA+IDEwKQogICAgJGluc2lnaHRzW10gPSBbJ3dhcm4nLCfwn5S0JywnVGF4YSBkZSBjYXB0dXJhIGJhaXhhICgnLiR0YXhhX2NhcF9wLiclKScsCiAgICAgICAgJ01ldGEgZSAzMCUrLiBSZXZpc2FyIG8gZ2F0aWxobyBkZSBjYXB0dXJhIGRlIFdoYXRzQXBwIOKAlCBwb2RlIGVzdGFyIGFwYXJlY2VuZG8gdGFyZGUgZGVtYWlzIG5hIGNvbnZlcnNhLiddOwppZiAoJHRheGFfZW5nX3AgPCA0MCAmJiAkcF90b3RhbCA+IDEwKQogICAgJGluc2lnaHRzW10gPSBbJ3dhcm4nLCfwn5+hJywnTXVpdG9zIGFiYW5kb25vcyBwcmVjb2NlcyAoJy4oMTAwLSR0YXhhX2VuZ19wKS4nJSknLAogICAgICAgICdNYWlzIGRhIG1ldGFkZSBkb3MgdmlzaXRhbnRlcyBlbnZpb3UgbWVub3MgZGUgMyBtZW5zYWdlbnMuIENvbnNpZGVyZSB1bWEgc2F1ZGFjYW8gbWFpcyBhY29saGVkb3JhIG91IGNoaXBzIG1haXMgY2xhcm9zLiddOwppZiAoIWVtcHR5KCRwZWFrX21hcCkpIHsKICAgICRwZWFrX3NvcnRlZCA9ICRwZWFrX21hcDsgYXJzb3J0KCRwZWFrX3NvcnRlZCk7ICR0b3BfaG9yYSA9IGtleSgkcGVha19zb3J0ZWQpOwogICAgJGluc2lnaHRzW10gPSBbJ2luZm8nLCfij7AnLCdQaWNvIGRlIGF0ZW5kaW1lbnRvOiAnLnNwcmludGYoJyUwMmQ6MDAtJTAyZDowMCcsJHRvcF9ob3JhLCR0b3BfaG9yYSsxKSwKICAgICAgICAnQ29uY2VudHJlIGNhbXBhbmhhcyBlIGZvbGxvdy11cHMgcGVydG8gZGVzc2UgaG9yYXJpbyBwYXJhIG1heGltaXphciByZXNwb3N0YS4nXTsKfQppZiAoIWVtcHR5KCRjYXRzX2FycikpIHsKICAgICR0b3BfY2F0ID0gYXJyYXlfa2V5X2ZpcnN0KCRjYXRzX2Fycik7CiAgICAkaW5zaWdodHNbXSA9IFsnaW5mbycsJ/Cfjq8nLCdDYXRlZ29yaWEgbWFpcyBwb3B1bGFyOiAnLnVjZmlyc3QoJHRvcF9jYXQpLAogICAgICAgICdHYXJhbnRhIHF1ZSBvIHBvcnRmb2xpbyBkZSAnLnVjZmlyc3QoJHRvcF9jYXQpLicgZXN0YSBjb21wbGV0bywgY29tIGZvdG9zIGUgcHJlY29zIGF0dWFsaXphZG9zLiddOwp9CmlmICgkcm9hcyA+IDApCiAgICAkaW5zaWdodHNbXSA9IFsnb2snLCfwn5KaJywnUk9BUyBkZSAnLiRyb2FzLid4IOKAlCBjYWRhIFIkMSBlbSBJQSBnZXJhIFIkJy4kcm9hcy4nIGVtIHJlY2VpdGEnLAogICAgICAgICdFeGNlbGVudGUgcmV0b3Juby4gQ29uc2lkZXJlIGFtcGxpYXIgbyBhbGNhbmNlIGRhIFNvZklBIGNvbSB0cmFmZWdvIHBhZ28uJ107CmlmIChlbXB0eSgkaW5zaWdodHMpKQogICAgJGluc2lnaHRzW10gPSBbJ2luZm8nLCfwn5OKJywnQWd1YXJkYW5kbyBtYWlzIGRhZG9zIHBhcmEgZ2VyYXIgaW5zaWdodHMnLAogICAgICAgICdPcyBpbnNpZ2h0cyBhcGFyZWNlbSBhdXRvbWF0aWNhbWVudGUgY29uZm9ybWUgYXMgc2Vzc29lcyBhdW1lbnRhbS4nXTsKPz4KCjwhLS0gU2VsZXRvciBkZSBwZXLDrW9kbyAtLT4KPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLWJvdHRvbToxOHB4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlciI+CiAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODA7Zm9udC13ZWlnaHQ6NjAwIj5QZXLDrW9kbzo8L3NwYW4+CiAgPD9waHAgZm9yZWFjaCAoWyd0b2RheSc9PidIb2plJywnN2QnPT4nNyBkaWFzJywnMzBkJz0+JzMwIGRpYXMnLCdtb250aCc9PidFc3RlIG3DqnMnLCdhbGwnPT4nVHVkbyddIGFzICRrPT4kbGJsKTogPz4KICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGFuYV91cmwuJyZwZXJpb2Q9Jy4kayk7ID8+IgogICAgIHN0eWxlPSJwYWRkaW5nOjVweCAxNHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgICAgICAgICAgIDw/cGhwIGVjaG8gJHBlcmlvZD09PSRrID8gJ2JhY2tncm91bmQ6IzdjM2FlZDtjb2xvcjojZmZmJyA6ICdiYWNrZ3JvdW5kOiNmM2Y0ZjY7Y29sb3I6IzM3NDE1MSc7ID8+Ij4KICAgIDw/cGhwIGVjaG8gZXNjX2h0bWwoJGxibCk7ID8+CiAgPC9hPgogIDw/cGhwIGVuZGZvcmVhY2g7ID8+CjwvZGl2PgoKPCEtLSBLUElzIExpbmhhIDEgLS0+CjxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxMzBweCwxZnIpKTtnYXA6MTBweDttYXJnaW4tYm90dG9tOjEycHgiPgogIDxkaXYgY2xhc3M9InNvZmlhLWtwaSIgc3R5bGU9ImJvcmRlci10b3A6M3B4IHNvbGlkICM3YzNhZWQiPgogICAgPHNwYW4gY2xhc3M9InNvZmlhLWtwaS12YWwiPjw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkcF90b3RhbCk7ID8+PC9zcGFuPgogICAgPGRpdiBjbGFzcz0ic29maWEta3BpLWxibCI+8J+SrCBTZXNzw7VlczwvZGl2PgogICAgPGRpdiBjbGFzcz0ic29maWEta3BpLXN1YiI+PD9waHAgZWNobyAkcF9lbmdhajsgPz4gZW5nYWphcmFtICgzKyBtc2dzKTwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InNvZmlhLWtwaSIgc3R5bGU9ImJvcmRlci10b3A6M3B4IHNvbGlkICMzYjgyZjYiPgogICAgPHNwYW4gY2xhc3M9InNvZmlhLWtwaS12YWwgcHVycGxlIj48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJHBfd2EpOyA/Pjwvc3Bhbj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1sYmwiPvCfk7IgV0EgY2FwdHVyYWRvczwvZGl2PgogICAgPGRpdiBjbGFzcz0ic29maWEta3BpLXN1YiI+PD9waHAgZWNobyAkdGF4YV9jYXBfcDsgPz4lIGRhcyBzZXNzw7VlczwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InNvZmlhLWtwaSIgc3R5bGU9ImJvcmRlci10b3A6M3B4IHNvbGlkICNmNTllMGIiPgogICAgPHNwYW4gY2xhc3M9InNvZmlhLWtwaS12YWwiIHN0eWxlPSJjb2xvcjo8P3BocCBlY2hvICRwX2RhdGFfZXY+MD8nI2Q5NzcwNic6JyM5Y2EzYWYnOyA/PiI+PD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRwX2RhdGFfZXYpOyA/Pjwvc3Bhbj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1sYmwiPvCfk4UgQ29tIGRhdGEgZXZlbnRvPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktc3ViIj5MZWFkcyBxdWVudGVzPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0ic29maWEta3BpIiBzdHlsZT0iYm9yZGVyLXRvcDozcHggc29saWQgIzEwYjk4MSI+CiAgICA8c3BhbiBjbGFzcz0ic29maWEta3BpLXZhbCBncmVlbiI+PD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRwZWRpZG9zX3NvZmlhKTsgPz48L3NwYW4+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktbGJsIj7wn5uSIFBlZGlkb3MgYXRyaWIuPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktc3ViIj48P3BocCBlY2hvICR0YXhhX2NvbnZfcDsgPz4lIGRvcyBjYXB0dXJhZG9zPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0ic29maWEta3BpIiBzdHlsZT0iYm9yZGVyLXRvcDozcHggc29saWQgIzA1OTY2OSI+CiAgICA8c3BhbiBjbGFzcz0ic29maWEta3BpLXZhbCBncmVlbiI+UiQ8P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJHJlY2VpdGFfc29maWEsMCwnLCcsJy4nKTsgPz48L3NwYW4+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktbGJsIj7wn5KwIFJlY2VpdGEgYXRyaWIuPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktc3ViIj5QZWRpZG9zIHdjLXByb2Nlc3NpbmcgcMOzcy1jaGF0PC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0ic29maWEta3BpIiBzdHlsZT0iYm9yZGVyLXRvcDozcHggc29saWQgPD9waHAgZWNobyAkcm9hcz49NT8nIzA1OTY2OSc6KCRyb2FzPj0yPycjZDk3NzA2JzonIzZiNzI4MCcpOyA/PiI+CiAgICA8c3BhbiBjbGFzcz0ic29maWEta3BpLXZhbCIgc3R5bGU9ImNvbG9yOjw/cGhwIGVjaG8gJHJvYXM+PTU/JyMwNTk2NjknOigkcm9hcz49Mj8nI2Q5NzcwNic6JyM2YjcyODAnKTsgPz4iPjw/cGhwIGVjaG8gJHJvYXM+MD8kcm9hcy4neCc6J+KAlCc7ID8+PC9zcGFuPgogICAgPGRpdiBjbGFzcz0ic29maWEta3BpLWxibCI+8J+TiCBST0FTIDxzcGFuIHN0eWxlPSJmb250LXNpemU6OXB4O2NvbG9yOiM5Y2EzYWY7Zm9udC13ZWlnaHQ6NDAwIj4oZXN0Lik8L3NwYW4+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktc3ViIj5DdXN0byBJQSBlc3QuOiBSJDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkY3VzdG9fYnJsLDIsJywnLCcuJyk7ID8+PC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0ic29maWEta3BpIiBzdHlsZT0iYm9yZGVyLXRvcDozcHggc29saWQgIzhiNWNmNiI+CiAgICA8c3BhbiBjbGFzcz0ic29maWEta3BpLXZhbCIgc3R5bGU9ImNvbG9yOiM4YjVjZjYiPlIkPD9waHAgZWNobyAkdGlja2V0X21lZGlvPjA/bnVtYmVyX2Zvcm1hdCgkdGlja2V0X21lZGlvLDAsJywnLCcuJyk6J+KAlCc7ID8+PC9zcGFuPgogICAgPGRpdiBjbGFzcz0ic29maWEta3BpLWxibCI+8J+On++4jyBUaWNrZXQgTcOpZGlvPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktc3ViIj5Qb3IgcGVkaWRvIGF0cmliLjwvZGl2PgogIDwvZGl2PgogIDw/cGhwCiAgJGFiYW5kb25fY29sb3IgPSAkdGF4YV9hYmFuZG9ubyA+IDYwID8gJyNlZjQ0NDQnIDogKCR0YXhhX2FiYW5kb25vID4gNDAgPyAnI2Q5NzcwNicgOiAnIzA1OTY2OScpOwogICRhYmFuZG9uX2ljb24gID0gJHRheGFfYWJhbmRvbm8gPiA2MCA/ICfimqDvuI8nIDogKCR0YXhhX2FiYW5kb25vID4gNDAgPyAn8J+foScgOiAn4pyFJyk7CiAgPz4KICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGkiIHN0eWxlPSJib3JkZXItdG9wOjNweCBzb2xpZCA8P3BocCBlY2hvICRhYmFuZG9uX2NvbG9yID8+Ij4KICAgIDxzcGFuIGNsYXNzPSJzb2ZpYS1rcGktdmFsIiBzdHlsZT0iY29sb3I6PD9waHAgZWNobyAkYWJhbmRvbl9jb2xvciA/PiI+PD9waHAgZWNobyAkdGF4YV9hYmFuZG9ubyA/PiU8L3NwYW4+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktbGJsIj7wn5qqIEFiYW5kb25vIFByZWNvY2U8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1zdWIiPjw/cGhwIGVjaG8gJHBfZWFybHkgPz4gc2Vzc8O1ZXMgKOKJpDIgbXNncykgPD9waHAgZWNobyAkYWJhbmRvbl9pY29uID8+PC9kaXY+CiAgPC9kaXY+CiAgPD9waHAKICAkY3Vwb21fY29sb3IgPSAkcF9jdXBvbnNfdXNlZCA+IDAgPyAnI2Y1OWUwYicgOiAnIzljYTNhZic7CiAgJGN1cG9tX3N1YiAgID0gJHBfY3Vwb25zID4gMAogICAgICA/ICRwX2N1cG9uc191c2VkIC4gJyB1c2Fkb3MgKCcgLiAkdGF4YV9jdXBvbV9jb252IC4gJyUpJwogICAgICA6ICdOZW5odW0gZ2VyYWRvJzsKICA/PgogIDxkaXYgY2xhc3M9InNvZmlhLWtwaSIgc3R5bGU9ImJvcmRlci10b3A6M3B4IHNvbGlkIDw/cGhwIGVjaG8gJGN1cG9tX2NvbG9yID8+IgogICAgICAgb25jbGljaz0ibG9jYXRpb24uaHJlZj0nPD9waHAgZWNobyBhZG1pbl91cmwoJ2VkaXQucGhwP3Bvc3RfdHlwZT1zaG9wX2NvdXBvbiZzPVNPRklBLScpOyA/PiciCiAgICAgICB0aXRsZT0iVmVyIGN1cG9ucyBubyBXb29Db21tZXJjZSI+CiAgICA8c3BhbiBjbGFzcz0ic29maWEta3BpLXZhbCIgc3R5bGU9ImNvbG9yOjw/cGhwIGVjaG8gJGN1cG9tX2NvbG9yID8+Ij48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJHBfY3Vwb25zKTsgPz48L3NwYW4+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktbGJsIj7wn4+377iPIEN1cG9ucyBnZXJhZG9zPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktc3ViIj48P3BocCBlY2hvIGVzY19odG1sKCRjdXBvbV9zdWIpOyA/PjwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjwhLS0gRnVuaWwgKyBDYXRlZ29yaWFzIC0tPgo8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICA8ZGl2IGNsYXNzPSJzb2ZpYS1zZWN0aW9uIj4KICAgIDxoMz7wn5S9IEZ1bmlsIENvbXBsZXRvPC9oMz4KICAgIDw/cGhwCiAgICAkZnVubmVsX3N0ZXBzID0gWwogICAgICAgIFsn8J+SrCBJbmljaWFyYW0gY2hhdCcsICAkcF90b3RhbCwgICAxMDAsICAgICAgICAgJyM3YzNhZWQnXSwKICAgICAgICBbJ/Cfk6kgRW5nYWphcmFtICgzKyknLCAgJHBfZW5nYWosICAgJHBfdG90YWw+MD9yb3VuZCgkcF9lbmdhai8kcF90b3RhbCoxMDAsMSk6MCwgICAnIzZkMjhkOSddLAogICAgICAgIFsn8J+ThSBJbmZvcm1hcmFtIGRhdGEnLCAkcF9kYXRhX2V2LCAkcF90b3RhbD4wP3JvdW5kKCRwX2RhdGFfZXYvJHBfdG90YWwqMTAwLDEpOjAsICcjNWIyMWI2J10sCiAgICAgICAgWyfwn5OyIFdBIGNhcHR1cmFkbycsICAgICRwX3dhLCAgICAgICRwX3RvdGFsPjA/cm91bmQoJHBfd2EvJHBfdG90YWwqMTAwLDEpOjAsICAgICAgJyMzYjgyZjYnXSwKICAgICAgICBbJ/Cfm5IgR2Vyb3UgcGVkaWRvJywgICAgJHBlZGlkb3Nfc29maWEsICRwX3RvdGFsPjA/cm91bmQoJHBlZGlkb3Nfc29maWEvJHBfdG90YWwqMTAwLDEpOjAsJyMxMGI5ODEnXSwKICAgIF07CiAgICBmb3JlYWNoICgkZnVubmVsX3N0ZXBzIGFzICRmaSA9PiAkZik6CiAgICAgICAgJGJ3ID0gbWF4KDgsIChpbnQpJGZbMl0pOwogICAgPz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbTo8P3BocCBlY2hvICRmaTw0PycxMCc6JzAnOyA/PnB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZmxleDoxO2hlaWdodDozNHB4O2JhY2tncm91bmQ6I2YzZjRmNjtib3JkZXItcmFkaXVzOjdweDtvdmVyZmxvdzpoaWRkZW4iPgogICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOjw/cGhwIGVjaG8gJGJ3OyA/PiU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDo8P3BocCBlY2hvICRmWzNdOyA/Pjtib3JkZXItcmFkaXVzOjdweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmctbGVmdDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojZmZmO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW4iPjw/cGhwIGVjaG8gJGZbMF07ID8+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHN0eWxlPSJtaW4td2lkdGg6NDJweDtmb250LXNpemU6MThweDtmb250LXdlaWdodDo4MDA7Y29sb3I6IzFmMjkzNzt0ZXh0LWFsaWduOnJpZ2h0Ij48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJGZbMV0pOyA/PjwvZGl2PgogICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDo0MHB4O2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2YjcyODAiPjw/cGhwIGVjaG8gJGZbMl07ID8+JTwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJzb2ZpYS1zZWN0aW9uIj4KICAgIDxoMz7wn5OKIFNlc3PDtWVzIHBvciBDYXRlZ29yaWE8L2gzPgogICAgPD9waHAgaWYgKGVtcHR5KCRjYXRzX2FycikpOiA/PgogICAgPHAgc3R5bGU9ImNvbG9yOiM5Y2EzYWY7Zm9udC1zaXplOjEzcHgiPlNlbSBkYWRvcyBubyBwZXLDrW9kby48L3A+CiAgICA8P3BocCBlbHNlOiBmb3JlYWNoICgkY2F0c19hcnIgYXMgJGNhdCA9PiAkbik6CiAgICAgICAgJHBjdF9jID0gcm91bmQoJG4gLyAkY2F0c19tYXggKiAxMDApOwogICAgICAgICRjb2xfYyA9ICRjYXRfY29sb3JzX2FuWyRjYXRdID8/ICcjN2MzYWVkJzsKICAgID8+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1iYXItcm93Ij4KICAgICAgPGRpdiBjbGFzcz0ic29maWEtYmFyLWxhYmVsIj48P3BocCBlY2hvIGVzY19odG1sKHVjZmlyc3QoJGNhdCkpOyA/PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1iYXItdHJhY2siPjxkaXYgY2xhc3M9InNvZmlhLWJhci1maWxsIiBzdHlsZT0id2lkdGg6PD9waHAgZWNobyAkcGN0X2M7ID8+JTtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGNvbF9jOyA/PiI+PD9waHAgZWNobyAkbjsgPz48L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic29maWEtYmFyLWNvdW50Ij48P3BocCBlY2hvICRuOyA/PjwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRmb3JlYWNoOyBlbmRpZjsgPz4KICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIFRlbmTDqm5jaWEgN2QgKyBIb3LDoXJpb3MgZGUgcGljbyAtLT4KPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgPGRpdiBjbGFzcz0ic29maWEtc2VjdGlvbiI+CiAgICA8aDM+8J+ThSBUZW5kw6puY2lhIOKAlCDDumx0aW1vcyA3IGRpYXM8L2gzPgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtZW5kO2dhcDo0cHg7aGVpZ2h0OjgwcHgiPgogICAgPD9waHAgZm9yICgkZGRkID0gNjsgJGRkZCA+PSAwOyAkZGRkLS0pOgogICAgICAgICRkaWFfa2V5ID0gZGF0ZSgnWS1tLWQnLCBzdHJ0b3RpbWUoIi17JGRkZH0gZGF5cyIpKTsKICAgICAgICAkbl9kICAgICA9ICR0cmVuZDdfbWFwWyRkaWFfa2V5XSA/PyAwOwogICAgICAgICRoX3BjdCAgID0gJHRyZW5kN19tYXggPiAwID8gbWF4KDQsIHJvdW5kKCRuX2QgLyAkdHJlbmQ3X21heCAqIDEwMCkpIDogNDsKICAgICAgICAkZGF5X2xibCA9IGRhdGUoJ2QvbScsIHN0cnRvdGltZSgiLXskZGRkfSBkYXlzIikpOwogICAgPz4KICAgIDxkaXYgc3R5bGU9ImZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6IzM3NDE1MTtmb250LXdlaWdodDo3MDAiPjw/cGhwIGVjaG8gJG5fZCA/OiAnJzsgPz48L2Rpdj4KICAgICAgPGRpdiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6PD9waHAgZWNobyAkaF9wY3Q7ID8+JTtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJG5fZD4wPycjN2MzYWVkJzonI2U1ZTdlYic7ID8+O2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7bWluLWhlaWdodDo0cHgiPjwvZGl2PgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjojOWNhM2FmIj48P3BocCBlY2hvICRkYXlfbGJsOyA/PjwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRmb3I7ID8+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0ic29maWEtc2VjdGlvbiI+CiAgICA8aDM+4o+wIEhvcsOhcmlvcyBkZSBQaWNvPC9oMz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LWVuZDtnYXA6MnB4O2hlaWdodDo4MHB4Ij4KICAgIDw/cGhwCiAgICAkcGVha190b3BfdmFsID0gJHBlYWtfbWFwID8gbWF4KGFycmF5X3ZhbHVlcygkcGVha19tYXApKSA6IDA7CiAgICBmb3IgKCRoaGggPSAwOyAkaGhoIDwgMjQ7ICRoaGgrKyk6CiAgICAgICAgJG5faCAgID0gJHBlYWtfbWFwWyRoaGhdID8/IDA7CiAgICAgICAgJGhfcGN0ID0gJHBlYWtfbWF4ID4gMCA/IG1heCg0LCByb3VuZCgkbl9oIC8gJHBlYWtfbWF4ICogMTAwKSkgOiA0OwogICAgICAgICRpc190b3AgPSAoJG5faCA+IDAgJiYgJG5faCA9PT0gJHBlYWtfdG9wX3ZhbCk7CiAgICAgICAgJGNvbG9yX2ggPSAkaXNfdG9wID8gJyNmNTllMGInIDogKCRuX2ggPiAwID8gJyM4YjVjZjYnIDogJyNlNWU3ZWInKTsKICAgID8+CiAgICA8ZGl2IHN0eWxlPSJmbGV4OjE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXIiIHRpdGxlPSI8P3BocCBlY2hvIHNwcmludGYoJyUwMmQ6MDAg4oCUICVkIHNlc3MuJywkaGhoLCRuX2gpOyA/PiI+CiAgICAgIDxkaXYgc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0Ojw/cGhwIGVjaG8gJGhfcGN0OyA/PiU7YmFja2dyb3VuZDo8P3BocCBlY2hvICRjb2xvcl9oOyA/Pjtib3JkZXItcmFkaXVzOjJweCAycHggMCAwO21pbi1oZWlnaHQ6NHB4Ij48L2Rpdj4KICAgICAgPD9waHAgaWYgKCRoaGggJSA2ID09PSAwKTogPz48ZGl2IHN0eWxlPSJmb250LXNpemU6OHB4O2NvbG9yOiM5Y2EzYWYiPjw/cGhwIGVjaG8gc3ByaW50ZignJTAyZGgnLCRoaGgpOyA/PjwvZGl2Pjw/cGhwIGVsc2U6ID8+PGRpdiBzdHlsZT0iZm9udC1zaXplOjhweDtjb2xvcjp0cmFuc3BhcmVudCI+LjwvZGl2Pjw/cGhwIGVuZGlmOyA/PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRmb3I7ID8+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIEluc2lnaHRzIGF1dG9tw6F0aWNvcyAtLT4KPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij4KICA8aDMgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW46MCAwIDEycHgiPvCfkqEgSW5zaWdodHMgQXV0b23DoXRpY29zPC9oMz4KICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMjIwcHgsMWZyKSk7Z2FwOjEwcHgiPgogIDw/cGhwIGZvcmVhY2ggKCRpbnNpZ2h0cyBhcyAkaW5zKToKICAgICRiZ19pID0gJGluc1swXT09PSdvaycgPyAnI2YwZmRmNCcgOiAoJGluc1swXT09PSd3YXJuJyA/ICcjZmZmN2VkJyA6ICcjZjVmM2ZmJyk7CiAgICAkYmNfaSA9ICRpbnNbMF09PT0nb2snID8gJyNiYmY3ZDAnIDogKCRpbnNbMF09PT0nd2FybicgPyAnI2ZlZDdhYScgOiAnI2RkZDZmZScpOwogID8+CiAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDo8P3BocCBlY2hvICRiZ19pOyA/Pjtib3JkZXI6MXB4IHNvbGlkIDw/cGhwIGVjaG8gJGJjX2k7ID8+O2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE0cHgiPgogICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjE4cHg7bWFyZ2luLWJvdHRvbTo0cHgiPjw/cGhwIGVjaG8gJGluc1sxXTsgPz48L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWYyOTM3O21hcmdpbi1ib3R0b206NHB4Ij48P3BocCBlY2hvIGVzY19odG1sKCRpbnNbMl0pOyA/PjwvZGl2PgogICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzRiNTU2MyI+PD9waHAgZWNobyBlc2NfaHRtbCgkaW5zWzNdKTsgPz48L2Rpdj4KICA8L2Rpdj4KICA8P3BocCBlbmRmb3JlYWNoOyA/PgogIDwvZGl2Pgo8L2Rpdj4KCjwhLS0gVGFiZWxhIGRlIHNlc3PDtWVzIC0tPgo8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MTBweDtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4Ij4KICA8aDMgc3R5bGU9Im1hcmdpbjowO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMCI+8J+Xgu+4jyBTZXNzw7VlcyDigJQgPD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRwX3RvdGFsKTsgPz4gcmVnaXN0cm9zPC9oMz4KICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InNvZmlhLXRibC1maWx0ZXIiIHBsYWNlaG9sZGVyPSJGaWx0cmFyIHBvciBXQSwgY2F0ZWdvcmlhLi4uIgogICAgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjdweDtwYWRkaW5nOjZweCAxMnB4O2ZvbnQtc2l6ZToxM3B4O3dpZHRoOjI2MHB4O21heC13aWR0aDoxMDAlIgogICAgb25pbnB1dD0idm0yU29maWFGaWx0ZXIodGhpcy52YWx1ZSkiPgo8L2Rpdj4KPGRpdiBjbGFzcz0ic29maWEtdGFibGUtd3JhcCI+CiAgPHRhYmxlIGlkPSJzb2ZpYS1zZXNzaW9ucy10YmwiPgogICAgPHRoZWFkPgogICAgICA8dHI+CiAgICAgICAgPHRoPkRhdGEvSG9yYTwvdGg+PHRoPkF0cmHDp8OjbzwvdGg+PHRoPkNhdGVnb3JpYTwvdGg+PHRoPlRpcG8gRXZlbnRvPC90aD48dGg+RGF0YSBFdmVudG88L3RoPjx0aD5VcmfDqm5jaWE8L3RoPjx0aD7wn5OyIFdoYXRzQXBwPC90aD48dGg+TXNnczwvdGg+PHRoPlN0YXR1czwvdGg+CiAgICAgIDwvdHI+CiAgICA8L3RoZWFkPgogICAgPHRib2R5PgogICAgPD9waHAgaWYgKGVtcHR5KCRzZXNzaW9uc19wKSk6ID8+CiAgICAgIDx0cj48dGQgY29sc3Bhbj0iOSIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MzBweDtjb2xvcjojOWNhM2FmIj4KICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MzJweDttYXJnaW4tYm90dG9tOjhweCI+8J+noDwvZGl2PgogICAgICAgIE5lbmh1bWEgc2Vzc8OjbyBubyBwZXLDrW9kbyBzZWxlY2lvbmFkby48YnI+CiAgICAgICAgPHNtYWxsPlRyb3F1ZSBvIGZpbHRybyBkZSBwZXLDrW9kbyBhY2ltYSBvdSBhZ3VhcmRlIG5vdmFzIGNvbnZlcnNhcy48L3NtYWxsPgogICAgICA8L3RkPjwvdHI+CiAgICA8P3BocCBlbHNlOgogICAgICBmb3JlYWNoICgkc2Vzc2lvbnNfcCBhcyAkcyk6CiAgICAgICAgJGNhdF9zbHVnX3MgPSBzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCcgJywnLScsJHMtPmNhdGVnb3JpYSA/OiAnYWR1bHRvJykpOwogICAgICAgICR1cmdfc2x1Z19zID0gc3RydG9sb3dlcigkcy0+dXJnZW5jaWEgPzogJ2JhaXhhJyk7CiAgICAgICAgJHdhX29rX3MgICAgPSAhZW1wdHkoJHMtPndoYXRzYXBwKTsKICAgICAgICAkd2FfY2xlYW5fcyA9IHByZWdfcmVwbGFjZSgnL1teMC05XS8nLCAnJywgJHMtPndoYXRzYXBwID8/ICcnKTsKICAgICAgICBpZiAoJHdhX2NsZWFuX3MgJiYgJHBlZGlkb3Nfc29maWEgPiAwICYmIGluX2FycmF5KCR3YV9jbGVhbl9zLCAkc29maWFfcGhvbmVzKSkgewogICAgICAgICAgICAkc2xibCA9ICfwn5uSIFBlZGlkbyc7ICRzY29sID0gJyMwNTk2NjknOyAkc2JnID0gJyNkMWZhZTUnOwogICAgICAgIH0gZWxzZWlmICgkd2Ffb2tfcykgewogICAgICAgICAgICAkc2xibCA9ICfwn5OyIENhcHR1cmFkbyc7ICRzY29sID0gJyMxZDRlZDgnOyAkc2JnID0gJyNkYmVhZmUnOwogICAgICAgIH0gZWxzZWlmIChpbnR2YWwoJHMtPm1lbnNhZ2Vuc19jb3VudCkgPj0gMykgewogICAgICAgICAgICAkc2xibCA9ICfwn5KsIEVuZ2FqYWRvJzsgJHNjb2wgPSAnIzZkMjhkOSc7ICRzYmcgPSAnI2VkZTlmZSc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHNsYmwgPSAn8J+RuyBBYmFuZG9ubyc7ICRzY29sID0gJyM5Y2EzYWYnOyAkc2JnID0gJyNmM2Y0ZjYnOwogICAgICAgIH0KICAgICAgICAkc2VhcmNoX3N0ciA9IHN0cnRvbG93ZXIoKCRzLT5wcm9kdWN0X25hbWU/PycnKS4nICcuKCRzLT53aGF0c2FwcD8/JycpLicgJy4oJHMtPmNhdGVnb3JpYT8/JycpLicgJy4oJHMtPnRpcG9fZXZlbnRvPz8nJykpOwogICAgPz4KICAgICAgPHRyIGNsYXNzPSJzb2ZpYS10Ymwtcm93IiBkYXRhLXNlYXJjaD0iPD9waHAgZWNobyBlc2NfYXR0cigkc2VhcmNoX3N0cik7ID8+Ij4KICAgICAgICA8dGQgc3R5bGU9IndoaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTJweCI+PD9waHAgZWNobyBlc2NfaHRtbChnZXRfZGF0ZV9mcm9tX2dtdCgkcy0+c3RhcnRlZF9hdCwgJ2QvbSBIOmknKSk7ID8+PC90ZD4KICAgICAgICA8dGQgc3R5bGU9Im1heC13aWR0aDoxNDBweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC1zaXplOjEycHgiIHRpdGxlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRzLT5wcm9kdWN0X25hbWUgPz8gJycpOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkcy0+cHJvZHVjdF9uYW1lID86ICfigJQnKTsgPz48L3RkPgogICAgICAgIDx0ZD48P3BocCBpZiAoJHMtPmNhdGVnb3JpYSk6ID8+PHNwYW4gY2xhc3M9InNvZmlhLWJhZGdlIHNvZmlhLWJhZGdlLTw/cGhwIGVjaG8gZXNjX2F0dHIoJGNhdF9zbHVnX3MpOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCh1Y2ZpcnN0KCRzLT5jYXRlZ29yaWEpKTsgPz48L3NwYW4+PD9waHAgZWxzZTogPz7igJQ8P3BocCBlbmRpZjsgPz48L3RkPgogICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjEycHgiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHMtPnRpcG9fZXZlbnRvID86ICfigJQnKTsgPz48L3RkPgogICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjEycHg7d2hpdGUtc3BhY2U6bm93cmFwIj48P3BocCBlY2hvIGVzY19odG1sKCRzLT5kYXRhX2V2ZW50b19zdHIgPzogJ+KAlCcpOyA/PjwvdGQ+CiAgICAgICAgPHRkPjw/cGhwIGlmICgkcy0+dXJnZW5jaWEpOiA/PjxzcGFuIGNsYXNzPSJzb2ZpYS1iYWRnZSBzb2ZpYS1iYWRnZS08P3BocCBlY2hvIGVzY19hdHRyKCR1cmdfc2x1Z19zKTsgPz4iPjw/cGhwIGVjaG8gZXNjX2h0bWwodWNmaXJzdCgkcy0+dXJnZW5jaWEpKTsgPz48L3NwYW4+PD9waHAgZWxzZTogPz7igJQ8P3BocCBlbmRpZjsgPz48L3RkPgogICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjEycHgiPjw/cGhwIGlmICgkd2Ffb2tfcyk6ID8+PGEgaHJlZj0iaHR0cHM6Ly93YS5tZS88P3BocCBlY2hvIGVzY19hdHRyKCR3YV9jbGVhbl9zKTsgPz4iIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6IzA1OTY2OTtmb250LXdlaWdodDo2MDA7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPvCfk7IgPD9waHAgZWNobyBlc2NfaHRtbCgkcy0+d2hhdHNhcHApOyA/PjwvYT48P3BocCBlbHNlOiA/PuKAlDw/cGhwIGVuZGlmOyA/PjwvdGQ+CiAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo3MDAiPjw/cGhwIGVjaG8gaW50dmFsKCRzLT5tZW5zYWdlbnNfY291bnQpOyA/PjwvdGQ+CiAgICAgICAgPHRkPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJHNiZzsgPz47Y29sb3I6PD9waHAgZWNobyAkc2NvbDsgPz47cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7d2hpdGUtc3BhY2U6bm93cmFwIj48P3BocCBlY2hvICRzbGJsOyA/Pjwvc3Bhbj48L3RkPgogICAgICA8L3RyPgogICAgPD9waHAgZW5kZm9yZWFjaDsgZW5kaWY7ID8+CiAgICA8L3Rib2R5PgogIDwvdGFibGU+CjwvZGl2Pgo8c2NyaXB0PgpmdW5jdGlvbiB2bTJTb2ZpYUZpbHRlcih2KSB7CiAgICB2YXIgcSA9IHYudG9Mb3dlckNhc2UoKS50cmltKCk7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjc29maWEtc2Vzc2lvbnMtdGJsIC5zb2ZpYS10Ymwtcm93JykuZm9yRWFjaChmdW5jdGlvbih0cikgewogICAgICAgIHRyLnN0eWxlLmRpc3BsYXkgPSAoIXEgfHwgdHIuZGF0YXNldC5zZWFyY2guaW5kZXhPZihxKSA+IC0xKSA/ICcnIDogJ25vbmUnOwogICAgfSk7Cn0KPC9zY3JpcHQ+Cgo8P3BocCBlbHNlaWYgKCRhY3RpdmVfdGFiID09PSAnY2FwdHVyYScpOiA/Pgo8IS0tIOKVkOKVkOKVkCBDQVBUVVJBIFdBIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAtLT4KPGZvcm0gbWV0aG9kPSJwb3N0Ij4KPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl9zb2ZpYV9ub25jZScpOyA/Pgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ2bTJfc29maWFfc2F2ZSIgdmFsdWU9IjEiPgoKPGRpdiBjbGFzcz0ic29maWEtc2VjdGlvbiI+CiAgPGgzPuKame+4jyBDb25maWd1cmHDp8O1ZXMgZGUgQ2FwdHVyYTwvaDM+CiAgPGRpdiBjbGFzcz0ic29maWEtdHJpZ2dlci1yb3ciPgogICAgPGRpdiBjbGFzcz0ic29maWEtdHJpZ2dlci1sYWJlbCI+CiAgICAgIPCfp6AgQ2FwdHVyYSBkZSBXQSBBdGl2YQogICAgICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLWRlc2MiPkxpZ2EvZGVzbGlnYSB0b2RvIG8gc2lzdGVtYSBkZSBjYXB0dXJhIGRlIFdoYXRzQXBwIG5vIGNoYXQgU29mSUE8L2Rpdj4KICAgIDwvZGl2PgogICAgPGxhYmVsIGNsYXNzPSJzb2ZpYS10b2dnbGUiPgogICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNvZmlhX2VuYWJsZWQiIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCRzb2ZpYV9lbmFibGVkLCcxJyk7ID8+PgogICAgICA8c3BhbiBjbGFzcz0ic29maWEtdG9nZ2xlLXNsaWRlciI+PC9zcGFuPgogICAgPC9sYWJlbD4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJzb2ZpYS1zZWN0aW9uIj4KICA8aDM+8J+OryBHYXRpbGhvcyBkZSBDYXB0dXJhPC9oMz4KCiAgPGRpdiBjbGFzcz0ic29maWEtdHJpZ2dlci1yb3ciPgogICAgPGRpdiBjbGFzcz0ic29maWEtdHJpZ2dlci1sYWJlbCI+CiAgICAgIOKPse+4jyBBcMOzcyBOIG1lbnNhZ2VucwogICAgICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLWRlc2MiPlNvZnQgYXNrIG5hdHVyYWwgYXDDs3MgbyB1c3XDoXJpbyBlbnZpYXIgTiBtZW5zYWdlbnMgbm8gY2hhdDwvZGl2PgogICAgPC9kaXY+CiAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJ0cmlnZ2VyX21zZ3MiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCR0cmlnZ2VyX21zZ3MpOyA/PiIgbWluPSIxIiBtYXg9IjEwIgogICAgICBzdHlsZT0id2lkdGg6NjBweDtwYWRkaW5nOjZweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246Y2VudGVyIj4KICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwIj5tc2dzPC9zcGFuPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLXJvdyI+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLWxhYmVsIj4KICAgICAg8J+OryBEZXRlY8Onw6NvIGRlIGludGVuw6fDo28gYWx0YQogICAgICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLWRlc2MiPlBlcmd1bnRhIFdBIHF1YW5kbyB1c3XDoXJpbyB1c2EgcGFsYXZyYXMgZGUgY29tcHJhIChjb25maWd1cmUgYWJhaXhvKTwvZGl2PgogICAgPC9kaXY+CiAgICA8bGFiZWwgY2xhc3M9InNvZmlhLXRvZ2dsZSI+CiAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idHJpZ2dlcl9pbnRlbmNhbyIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJHRyaWdnZXJfaW50ZW5jYW8sJzEnKTsgPz4+CiAgICAgIDxzcGFuIGNsYXNzPSJzb2ZpYS10b2dnbGUtc2xpZGVyIj48L3NwYW4+CiAgICA8L2xhYmVsPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLXJvdyI+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLWxhYmVsIj4KICAgICAg8J+bkiBDbGlxdWUgZW0gIlF1ZXJvIGVzdGUiCiAgICAgIDxkaXYgY2xhc3M9InNvZmlhLXRyaWdnZXItZGVzYyI+UGVkZSBXQSBxdWFuZG8gdXN1w6FyaW8gY2xpY2Egbm8gYm90w6NvIGRlIHJlc2VydmEgKH43MSUgY29udmVyc8Ojbyk8L2Rpdj4KICAgIDwvZGl2PgogICAgPGxhYmVsIGNsYXNzPSJzb2ZpYS10b2dnbGUiPgogICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InRyaWdnZXJfcXVlcm8iIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCR0cmlnZ2VyX3F1ZXJvLCcxJyk7ID8+PgogICAgICA8c3BhbiBjbGFzcz0ic29maWEtdG9nZ2xlLXNsaWRlciI+PC9zcGFuPgogICAgPC9sYWJlbD4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJzb2ZpYS1zZWN0aW9uIj4KICA8aDM+8J+UkSBQYWxhdnJhcy1jaGF2ZSBkZSBJbnRlbsOnw6NvIEFsdGE8L2gzPgogIDxwIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTBweCI+U2VwYXJhZGFzIHBvciB2w61yZ3VsYS4gUXVhbmRvIG8gdXN1w6FyaW8gdXNhciBxdWFscXVlciB1bWEgZGVzc2FzIHBhbGF2cmFzLCBvIGdhdGlsaG8gZGUgaW50ZW7Dp8OjbyBkaXNwYXJhLjwvcD4KICA8dGV4dGFyZWEgbmFtZT0ic29maWFfa2V5d29yZHMiIHJvd3M9IjMiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlIj48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgka2V5d29yZHNfcmF3KTsgPz48L3RleHRhcmVhPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InNvZmlhLXNlY3Rpb24iPgogIDxoMz7wn5KsIE1lbnNhZ2VtIGRlIENhcHR1cmEgZG8gV2hhdHNBcHA8L2gzPgogIDxwIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTBweCI+VGV4dG8gcXVlIGEgU29mSUEgZW52aWEgcXVhbmRvIHBlZGUgbyBXaGF0c0FwcCBkbyB1c3XDoXJpby4gVXNlIHVtYSBsaW5ndWFnZW0gbmF0dXJhbCBlIGFtaWfDoXZlbC48L3A+CiAgPHRleHRhcmVhIG5hbWU9InNvZmlhX3dhX21zZyIgaWQ9InNvZmlhX3dhX21zZ19pbnB1dCIgcm93cz0iMyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjUiIG9uaW5wdXQ9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb2ZpYV9wcmV2aWV3X21zZycpLnRleHRDb250ZW50PXRoaXMudmFsdWUiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRzb2ZpYV93YV9tc2cpOyA/PjwvdGV4dGFyZWE+CjwvZGl2PgoKPGRpdiBjbGFzcz0ic29maWEtc2VjdGlvbiI+CiAgPGgzPuKchSBSZXNwb3N0YSBhcMOzcyByZWNlYmVyIG8gV2hhdHNBcHA8L2gzPgogIDxwIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTBweCI+TWVuc2FnZW0gcXVlIGEgU29mSUEgcmVzcG9uZGUgZGVwb2lzIHF1ZSBvIHVzdcOhcmlvIGVudmlhIG8gbsO6bWVyby4gQ29uZmlybWEgbyByZWNlYmltZW50byBlIGNyaWEgZXhwZWN0YXRpdmEuPC9wPgogIDx0ZXh0YXJlYSBuYW1lPSJzb2ZpYV93YV9jb25maXJtIiBpZD0ic29maWFfd2FfY29uZmlybV9pbnB1dCIgcm93cz0iMyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjUiIG9uaW5wdXQ9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb2ZpYV9wcmV2aWV3X2NvbmZpcm0nKS50ZXh0Q29udGVudD10aGlzLnZhbHVlIj48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgkc29maWFfd2FfY29uZmlybSk7ID8+PC90ZXh0YXJlYT4KPC9kaXY+Cgo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmYWY1ZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWRlOWZlO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICA8aDMgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojNmQyOGQ5O21hcmdpbjowIDAgMTBweCI+8J+TsSBQcmV2aWV3IOKAlCBDb21vIGFwYXJlY2Ugbm8gY2hhdDwvaDM+CiAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjMyMHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MnB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmc6MTZweCI+CiAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiM3YzNhZWQ7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTBweCAxNHB4O21hcmdpbi1ib3R0b206MTJweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHgiPgogICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDozMnB4O2hlaWdodDozMnB4O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjN2MzYWVkLCNhODU1ZjcpO2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MTZweCI+8J+noDwvZGl2PgogICAgICA8ZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZmZmIj5Tb2ZJQSBBc3Nlc3NvcmE8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojYzRiNWZkIj7il48gb25saW5lPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2YzZjRmNjtib3JkZXItcmFkaXVzOjRweCAxNnB4IDE2cHggMTZweDtwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjU7bWFyZ2luLWJvdHRvbTo4cHg7Y29sb3I6IzFmMjkzNyI+CiAgICAgIDxzcGFuIGlkPSJzb2ZpYV9wcmV2aWV3X21zZyI+PD9waHAgZWNobyBlc2NfaHRtbCgkc29maWFfd2FfbXNnKTsgPz48L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjZmZmYmViLCNmZWYzYzcpO2JvcmRlcjoxcHggc29saWQgI2ZiYmYyNDtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMnB4O21hcmdpbi10b3A6OHB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiM5MjQwMGU7bWFyZ2luLWJvdHRvbTo4cHgiPvCfk7IgU2V1IFdoYXRzQXBwOjwvZGl2PgogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IigxMSkgOTk5OTktMDAwMCIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZmJiZjI0O2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbi1ib3R0b206NnB4Ij4KICAgICAgPGJ1dHRvbiBzdHlsZT0id2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNGRkQ3MDA7Y29sb3I6IzFmMjkzNztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7cGFkZGluZzo4cHg7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo4cHg7Y3Vyc29yOmRlZmF1bHQiPkVudmlhciDihpI8L2J1dHRvbj4KICAgIDwvZGl2PgogICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZGNmY2U3O2JvcmRlci1yYWRpdXM6MTZweCAxNnB4IDE2cHggNHB4O3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNTttYXJnaW4tdG9wOjhweDtjb2xvcjojMTY2NTM0O2JvcmRlcjoxcHggc29saWQgI2JiZjdkMCI+CiAgICAgIDxzcGFuIGlkPSJzb2ZpYV9wcmV2aWV3X2NvbmZpcm0iPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHNvZmlhX3dhX2NvbmZpcm0pOyA/Pjwvc3Bhbj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5IGJ1dHRvbi1sYXJnZSI+8J+SviBTYWx2YXIgQ29uZmlndXJhw6fDtWVzPC9idXR0b24+CjwvZm9ybT4KCjw/cGhwIGVsc2VpZiAoJGFjdGl2ZV90YWIgPT09ICdhdXRvbWFjb2VzJyk6ID8+CjwhLS0g4pWQ4pWQ4pWQIEFVVE9NQcOHw5VFUyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+CjxkaXYgY2xhc3M9InNvZmlhLXNlY3Rpb24iIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE2cHgiPgogIDxoMz7wn6SWIEF1dG9tYcOnw7VlcyBwb3IgSW50ZW7Dp8OjbzwvaDM+CiAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM2YjcyODA7bWFyZ2luOjAgMCAxNnB4Ij5RdWFuZG8gYSBTb2ZJQSBjYXB0dXJhIHNpbmFpcyBkZSBpbnRlbsOnw6NvLCB2b2PDqiBwb2RlIGF1dG9tYXRpemFyIG8gcHLDs3hpbW8gcGFzc28uIEFzIHJlZ3JhcyByb2RhbSB2aWEgQXF1ZWNlciBhdXRvbcOhdGljby48L3A+CgogIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZlZjNjNztib3JkZXI6MXB4IHNvbGlkICNmYmJmMjQ7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTNweDtjb2xvcjojOTI0MDBlIj4KICAgIOKame+4jyA8c3Ryb25nPkVtIGNvbnN0cnXDp8Ojbzwvc3Ryb25nPiDigJQgYXMgcmVncmFzIGFiYWl4byBzw6NvIGV4ZW1wbG9zIGRvIHF1ZSBzZXLDoSBjb25maWd1csOhdmVsLiBBIGVuZ2luZSBkZSBleGVjdcOnw6NvIHNlcsOhIGludGVncmFkYSBhbyBtw7NkdWxvIEFxdWVjZXIuCiAgPC9kaXY+CgogIDwhLS0gUmVncmEgMSAtLT4KICA8ZGl2IGNsYXNzPSJzb2ZpYS1ydWxlLXJvdyI+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206OHB4Ij4KICAgICAgPGRpdiBjbGFzcz0ic29maWEtcnVsZS10aXRsZSI+8J+OryBJbnRlbsOnw6NvIEFsdGEgKyBTZW0gY29tcHJhPC9kaXY+CiAgICAgIDxsYWJlbCBjbGFzcz0ic29maWEtdG9nZ2xlIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQgZGlzYWJsZWQ+PHNwYW4gY2xhc3M9InNvZmlhLXRvZ2dsZS1zbGlkZXIiPjwvc3Bhbj48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1ydWxlLWJvZHkiPgogICAgICA8c3BhbiBjbGFzcz0ic29maWEtcnVsZS1iYWRnZSI+U0U8L3NwYW4+IEludGVuw6fDo28gYWx0YSBkZXRlY3RhZGEgPHNwYW4gY2xhc3M9InNvZmlhLXJ1bGUtYmFkZ2UiPis8L3NwYW4+IFNlbSBjb21wcmEgZW0gMjRoPGJyPgogICAgICA8c3BhbiBjbGFzcz0ic29maWEtcnVsZS1iYWRnZSIgc3R5bGU9ImJhY2tncm91bmQ6I2QxZmFlNTtjb2xvcjojMDY1ZjQ2Ij5FTlTDg088L3NwYW4+IFdBIHBlcnNvbmFsaXphZG8gY29tIHBvcnRmw7NsaW8gZGEgY2F0ZWdvcmlhIG1lbmNpb25hZGEKICAgIDwvZGl2PgogIDwvZGl2PgoKICA8IS0tIFJlZ3JhIDIgLS0+CiAgPGRpdiBjbGFzcz0ic29maWEtcnVsZS1yb3ciPgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjhweCI+CiAgICAgIDxkaXYgY2xhc3M9InNvZmlhLXJ1bGUtdGl0bGUiPvCfk4UgVGVtIGRhdGEgKyBVcmfDqm5jaWEgYWx0YTwvZGl2PgogICAgICA8bGFiZWwgY2xhc3M9InNvZmlhLXRvZ2dsZSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkIGRpc2FibGVkPjxzcGFuIGNsYXNzPSJzb2ZpYS10b2dnbGUtc2xpZGVyIj48L3NwYW4+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ic29maWEtcnVsZS1ib2R5Ij4KICAgICAgPHNwYW4gY2xhc3M9InNvZmlhLXJ1bGUtYmFkZ2UiPlNFPC9zcGFuPiBEYXRhIGV2ZW50byBlbSDiiaQgMzAgZGlhcyA8c3BhbiBjbGFzcz0ic29maWEtcnVsZS1iYWRnZSI+Kzwvc3Bhbj4gVXJnw6puY2lhIGFsdGEgPHNwYW4gY2xhc3M9InNvZmlhLXJ1bGUtYmFkZ2UiPis8L3NwYW4+IFdBIGNhcHR1cmFkbzxicj4KICAgICAgPHNwYW4gY2xhc3M9InNvZmlhLXJ1bGUtYmFkZ2UiIHN0eWxlPSJiYWNrZ3JvdW5kOiNkMWZhZTU7Y29sb3I6IzA2NWY0NiI+RU5Uw4NPPC9zcGFuPiBXQSBkZSB1cmfDqm5jaWEgY29tIGRpc3BvbmliaWxpZGFkZSBlIGRlc2NvbnRvIHJlbMOibXBhZ28KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8IS0tIFJlZ3JhIDMgLS0+CiAgPGRpdiBjbGFzcz0ic29maWEtcnVsZS1yb3ciPgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjhweCI+CiAgICAgIDxkaXYgY2xhc3M9InNvZmlhLXJ1bGUtdGl0bGUiPvCfm5IgQ2xpY291ICJRdWVybyBlc3RlIiArIE7Do28gY29tcHJvdTwvZGl2PgogICAgICA8bGFiZWwgY2xhc3M9InNvZmlhLXRvZ2dsZSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkIGRpc2FibGVkPjxzcGFuIGNsYXNzPSJzb2ZpYS10b2dnbGUtc2xpZGVyIj48L3NwYW4+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ic29maWEtcnVsZS1ib2R5Ij4KICAgICAgPHNwYW4gY2xhc3M9InNvZmlhLXJ1bGUtYmFkZ2UiPlNFPC9zcGFuPiBUcmlnZ2VyID0gcXVlcm9fZXN0ZSA8c3BhbiBjbGFzcz0ic29maWEtcnVsZS1iYWRnZSI+Kzwvc3Bhbj4gQ29udmVydGlkbyA9IE7Do28gPHNwYW4gY2xhc3M9InNvZmlhLXJ1bGUtYmFkZ2UiPis8L3NwYW4+IDZoIGRlcG9pczxicj4KICAgICAgPHNwYW4gY2xhc3M9InNvZmlhLXJ1bGUtYmFkZ2UiIHN0eWxlPSJiYWNrZ3JvdW5kOiNkMWZhZTU7Y29sb3I6IzA2NWY0NiI+RU5Uw4NPPC9zcGFuPiBXQSBjb20gbGluayBkaXJldG8gcGFyYSBvIHByb2R1dG8gKyBvZmVydGEgZXNwZWNpYWwKICAgIDwvZGl2PgogIDwvZGl2PgoKICA8YnV0dG9uIGNsYXNzPSJidXR0b24iIGRpc2FibGVkIHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+KyBOb3ZhIFJlZ3JhIChlbSBicmV2ZSk8L2J1dHRvbj4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJzb2ZpYS1zZWN0aW9uIj4KICA8aDM+8J+TiiBQZXJmb3JtYW5jZSBkYXMgQXV0b21hw6fDtWVzPC9oMz4KICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjMwcHg7Y29sb3I6IzljYTNhZiI+CiAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MzJweDttYXJnaW4tYm90dG9tOjhweCI+8J+TiDwvZGl2PgogICAgRGFkb3MgZGUgcGVyZm9ybWFuY2UgYXBhcmVjZXLDo28gYXF1aSBxdWFuZG8gYXMgYXV0b21hw6fDtWVzIGVzdGl2ZXJlbSByb2RhbmRvCiAgPC9kaXY+CjwvZGl2PgoKPD9waHAgZWxzZWlmICgkYWN0aXZlX3RhYiA9PT0gJ3BsYW5vJyk6ID8+CjwhLS0g4pWQ4pWQ4pWQIFBMQU5PIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAtLT4KPGRpdiBjbGFzcz0ic29maWEtc2VjdGlvbiI+CiAgPGgzPvCfj5fvuI8gUGxhbm8gZGUgSW1wbGVtZW50YcOnw6NvIOKAlCBTb2ZJQSBJbnRlbGxpZ2VuY2U8L2gzPgogIDxwIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojNmI3MjgwO21hcmdpbjowIDAgMTZweCI+Um90ZWlybyBwYXJhIHRyYW5zZm9ybWFyIGNvbnZlcnNhcyBlbSB2ZW5kYXMgYXV0b23DoXRpY2FzPC9wPgoKICA8ZGl2IGNsYXNzPSJzb2ZpYS1wbGFuLXBoYXNlIHNvZmlhLXBsYW4tZG9uZSI+CiAgICA8aDQ+4pyFIEZhc2UgMSDigJQgQmFzZSAoQ29uY2x1w61kYSk8L2g0PgogICAgPHA+VGFiZWxhIHZtMl9zb2ZpYV9zZXNzaW9ucyDigKIgUkVTVCBlbmRwb2ludCAvc29maWEvc2Vzc2lvbiDigKIgTWVudSBhZG1pbiDigKIgNCBhYmFzIFVJIOKAoiBTY2hlbWEgQkQgY29tcGxldG88L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InNvZmlhLXBsYW4tcGhhc2Ugc29maWEtcGxhbi1kb2luZyI+CiAgICA8aDQ+8J+UhCBGYXNlIDIg4oCUIENhcHR1cmEgQXRpdmEgKEVtIGFuZGFtZW50byk8L2g0PgogICAgPHA+SW50ZWdyYcOnw6NvIHZtLWJvdHRvbS1uYXY6IGVudmlhciBkYWRvcyBwYXJhIGVuZHBvaW50IGFww7NzIGNhZGEgbWVuc2FnZW0g4oCiIFNvZnQgYXNrIGFww7NzIE4gbWVuc2FnZW5zIOKAoiBEZXRlY8Onw6NvIGRlIHBhbGF2cmFzLWNoYXZlIG5vIGZyb250ZW5kIOKAoiBDYXB0dXJhIG5vICJRdWVybyBlc3RlIjwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0ic29maWEtcGxhbi1waGFzZSI+CiAgICA8aDQ+8J+TiyBGYXNlIDMg4oCUIFNpbmFpcyAmIENsYXNzaWZpY2HDp8OjbzwvaDQ+CiAgICA8cD5QYXJzZXIgZGUgaW50ZW7Dp8OjbyBubyBiYWNrZW5kIOKAoiBDbGFzc2lmaWNhw6fDo28gYXV0b23DoXRpY2EgZGUgY2F0ZWdvcmlhIChpbmZhbnRpbC9jYXNhbWVudG8vZXRjKSDigKIgRXh0cmHDp8OjbyBkZSBkYXRhIG1lbmNpb25hZGEgbm8gY2hhdCDigKIgU2NvcmUgZGUgdXJnw6puY2lhPC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJzb2ZpYS1wbGFuLXBoYXNlIj4KICAgIDxoND7wn5OLIEZhc2UgNCDigJQgQXV0b21hw6fDtWVzIHBvciBJbnRlbsOnw6NvPC9oND4KICAgIDxwPkVuZ2luZSBkZSByZWdyYXMgU0UvRU5Uw4NPIGludGVncmFkYSBhbyBBcXVlY2VyIOKAoiBEaXNwYXJvcyBwZXJzb25hbGl6YWRvcyBwb3IgY2F0ZWdvcmlhIGUgdXJnw6puY2lhIOKAoiBUZW1wbGF0ZXMgV0FCQSBwb3IgcGVyZmlsIGRlIGludGVuw6fDo288L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InNvZmlhLXBsYW4tcGhhc2UiPgogICAgPGg0PvCfk4sgRmFzZSA1IOKAlCBEYXNoYm9hcmQgQXZhbsOnYWRvPC9oND4KICAgIDxwPkdyw6FmaWNvIGRlIGZ1bmlsIGludGVyYXRpdm8g4oCiIE51dmVtIGRlIHBhbGF2cmFzIGRhcyBzZXNzw7VlcyDigKIgTWFwYSBkZSBjYWxvciBwb3IgaG9yw6FyaW8g4oCiIENvbXBhcmF0aXZvIHNlbWFuYWwvbWVuc2FsPC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJzb2ZpYS1wbGFuLXBoYXNlIj4KICAgIDxoND7wn5OLIEZhc2UgNiDigJQgVmlzw6NvIENvbXBsZXRhPC9oND4KICAgIDxwPkRlc2xpZ2FyIEtvbW1vIGNvbW8gQ1JNIHByaW5jaXBhbCDigKIgTG9qYSAxMDAlIGluZGVwZW5kZW50ZSBlIGludGVsaWdlbnRlIOKAoiBTb2ZJQSBjb25oZWNlIGhpc3TDs3JpY28gY29tcGxldG8gZG8gdmlzaXRhbnRlIGFvIHJldG9ybmFyPC9wPgogIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgY2xhc3M9InNvZmlhLXNlY3Rpb24iPgogIDxoMz7wn5KhIFZpc8OjbyBFc3RyYXTDqWdpY2E8L2gzPgogIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjMWEwYTJlLCMyZDFiNjkpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjIwcHg7Y29sb3I6I2UyZThmMCI+CiAgICA8cCBzdHlsZT0ibWFyZ2luOjAgMCAxMHB4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNiI+QSBTb2ZJQSBuw6NvIMOpIHPDsyB1bSBjaGF0Ym90IOKAlCDDqSBvIDxzdHJvbmcgc3R5bGU9ImNvbG9yOiNGRkQ3MDAiPnNpc3RlbWEgbmVydm9zbyBkYSBsb2phPC9zdHJvbmc+LiBDYWRhIGNvbnZlcnNhIGdlcmEgc2luYWlzIHF1ZSBhbGltZW50YW0gYXV0b21hw6fDtWVzLCBwZXJzb25hbGl6YW0gZm9sbG93LXVwcyBlIGlkZW50aWZpY2FtIG9zIGxlYWRzIG1haXMgcXVlbnRlcyBhbnRlcyBtZXNtbyBkZSBlbGVzIHNhYmVyZW0gcXVlIHbDo28gY29tcHJhci48L3A+CiAgICA8cCBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjEzcHg7Y29sb3I6I2E3OGJmYSI+TWV0YTogMTAwIGF0cmHDp8O1ZXMvZGlhIOKGkiBUVURPIEFVVE9Nw4FUSUNPLCB6ZXJvIG9wZXJhY2lvbmFsPC9wPgogIDwvZGl2Pgo8L2Rpdj4KPD9waHAgZWxzZWlmICgkYWN0aXZlX3RhYiA9PT0gJ2NvbmhlY2ltZW50bycpOiA/Pgo8IS0tIOKVkOKVkOKVkCBCQVNFIERFIENPTkhFQ0lNRU5UTyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+Cjw/cGhwCiRrYl90YWJsZSAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9rbm93bGVkZ2UnOwppZiAoICR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICcka2JfdGFibGUnIikgIT09ICRrYl90YWJsZSApIHsKICAgIHZtMl9jcmVhdGVfc29maWFfa25vd2xlZGdlX3RhYmxlKCk7Cn0KJGtiX2l0ZW1zICA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUICogRlJPTSAka2JfdGFibGUgT1JERVIgQlkgY3JpYWRvX2VtIERFU0MiKTsKJGtiX2F0aXZvcyA9IGFycmF5X2ZpbHRlcigka2JfaXRlbXMsIGZ1bmN0aW9uKCRpKXsgcmV0dXJuIChpbnQpJGktPmF0aXZvID09PSAxOyB9KTsKJGtiX25vbmNlICA9IHdwX2NyZWF0ZV9ub25jZSgndm0yX3NvZmlhX2tiJyk7Cj8+CjxkaXYgY2xhc3M9InNvZmlhLXNlY3Rpb24iPgogIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgIDxkaXY+CiAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOjAgMCA0cHgiPvCfk5ogQmFzZSBkZSBDb25oZWNpbWVudG8gZGEgU29mSUE8L2gzPgogICAgICA8cCBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzZiNzI4MCI+QSBTb2ZJQSB1c2EgYXV0b21hdGljYW1lbnRlIHRvZG9zIG9zIGl0ZW5zIDxzdHJvbmc+YXRpdm9zPC9zdHJvbmc+IHBhcmEgcmVzcG9uZGVyIGNvbSBwcm9wcmllZGFkZSBzb2JyZSBzZXUgbmVnw7NjaW8uPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNlY2ZkZjU7Ym9yZGVyOjFweCBzb2xpZCAjNmVlN2I3O2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzA2NWY0Njtmb250LXdlaWdodDo2MDAiPgogICAgICDinIUgPD9waHAgZWNobyBjb3VudCgka2JfYXRpdm9zKTsgPz4gaXRlbShzKSBhdGl2byhzKQogICAgPC9kaXY+CiAgPC9kaXY+CgogIDwhLS0gRk9STVVMw4FSSU8gQUREIC0tPgogIDxkaXYgaWQ9InZtMmtiLWZvcm0td3JhcCIgc3R5bGU9ImJhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MjBweDttYXJnaW4tYm90dG9tOjI0cHgiPgogICAgPGg0IHN0eWxlPSJtYXJnaW46MCAwIDE0cHg7Zm9udC1zaXplOjE1cHg7Y29sb3I6IzFlMjkzYiI+4p6VIEFkaWNpb25hciBDb25oZWNpbWVudG88L2g0PgoKICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjEycHgiPgogICAgICA8ZGl2PgogICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+VGlwbzwvbGFiZWw+CiAgICAgICAgPHNlbGVjdCBpZD0idm0ya2ItdGlwbyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9InRleHRvIj7wn5OdIFRleHRvIGxpdnJlPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ1cmwiPvCfjJAgVVJMIC8gU2l0ZTwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iZHJpdmUiPvCfk4QgR29vZ2xlIERvYzwvb3B0aW9uPgogICAgICAgIDwvc2VsZWN0PgogICAgICA8L2Rpdj4KICAgICAgPGRpdj4KICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMzc0MTUxO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPlTDrXR1bG8gKG5vbWUgcGFyYSBpZGVudGlmaWNhcik8L2xhYmVsPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idm0ya2ItdGl0dWxvIiBwbGFjZWhvbGRlcj0iRXg6IENvbnRyYXRvIFZpdmFNYWlzLCBQb2zDrXRpY2EgZGUgUHJlw6dvcy4uLiIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveCI+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBVUkwgZmllbGQgLS0+CiAgICA8ZGl2IGlkPSJ2bTJrYi11cmwtd3JhcCIgc3R5bGU9ImRpc3BsYXk6bm9uZTttYXJnaW4tYm90dG9tOjEycHgiPgogICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMzc0MTUxO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPlVSTDwvbGFiZWw+CiAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4Ij4KICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiBpZD0idm0ya2ItdXJsIiBwbGFjZWhvbGRlcj0iaHR0cHM6Ly8uLi4iIHN0eWxlPSJmbGV4OjE7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9InZtMmtiLWJ0bi1wcmV2aWV3IiBzdHlsZT0icGFkZGluZzo4cHggMTRweDtiYWNrZ3JvdW5kOiM2MzY2ZjE7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtjdXJzb3I6cG9pbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXAiPvCflI0gSW1wb3J0YXI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9InZtMmtiLXByZXZpZXctcmVzdWx0IiBzdHlsZT0iZGlzcGxheTpub25lO21hcmdpbi10b3A6OHB4O3BhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiNlZmY2ZmY7Ym9yZGVyOjFweCBzb2xpZCAjYmZkYmZlO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMxZTQwYWYiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBDb250ZcO6ZG8gbWFudWFsIC0tPgogICAgPGRpdiBpZD0idm0ya2ItY29udGV1ZG8td3JhcCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+CiAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+Q29udGXDumRvPC9sYWJlbD4KICAgICAgPHRleHRhcmVhIGlkPSJ2bTJrYi1jb250ZXVkbyIgcm93cz0iNiIgcGxhY2Vob2xkZXI9IkNvbGUgYXF1aSBvIHRleHRvIHF1ZSBhIFNvZklBIGRldmUgY29uaGVjZXIg4oCUIGNvbnRyYXRvLCBGQVEsIHBvbMOtdGljYSBkZSBwcmXDp29zLCBpbmZvcm1hw6fDtWVzIHNvYnJlIG9zIHNlcnZpw6dvcy4uLiIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtyZXNpemU6dmVydGljYWwiPjwvdGV4dGFyZWE+CiAgICAgIDxzcGFuIGlkPSJ2bTJrYi1jaGFycyIgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWYiPjAgY2FyYWN0ZXJlczwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHgiPgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9InZtMmtiLWJ0bi1zYXZlIiBzdHlsZT0icGFkZGluZzoxMHB4IDI0cHg7YmFja2dyb3VuZDojMTBiOTgxO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyIj7wn5K+IFNhbHZhciBDb25oZWNpbWVudG88L2J1dHRvbj4KICAgICAgPHNwYW4gaWQ9InZtMmtiLXNhdmUtbXNnIiBzdHlsZT0iZm9udC1zaXplOjEzcHgiPjwvc3Bhbj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8IS0tIExJU1RBIERFIElURU1TIC0tPgogIDxoNCBzdHlsZT0ibWFyZ2luOjAgMCAxMnB4O2ZvbnQtc2l6ZToxNXB4O2NvbG9yOiMxZTI5M2IiPvCfk4sgSXRlbnMgQ2FkYXN0cmFkb3MgKDw/cGhwIGVjaG8gY291bnQoJGtiX2l0ZW1zKTsgPz4pPC9oND4KCiAgPD9waHAgaWYgKGVtcHR5KCRrYl9pdGVtcykpOiA/PgogIDxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NDBweDtjb2xvcjojOWNhM2FmO2JhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXI6MXB4IGRhc2hlZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6MTBweCI+CiAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MzZweDttYXJnaW4tYm90dG9tOjhweCI+8J+TrTwvZGl2PgogICAgPHA+TmVuaHVtIGNvbmhlY2ltZW50byBjYWRhc3RyYWRvIGFpbmRhLjxicj5BZGljaW9uZSBvIGNvbnRyYXRvLCBGQVFzLCBwb2zDrXRpY2FzIGRlIHByZcOnbywgaW5mb3JtYcOnw7VlcyBzb2JyZSBvcyBzZXJ2acOnb3MuLi48L3A+CiAgPC9kaXY+CiAgPD9waHAgZWxzZTogPz4KICA8ZGl2IGlkPSJ2bTJrYi1saXN0IiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTBweCI+CiAgICA8P3BocCBmb3JlYWNoICgka2JfaXRlbXMgYXMgJGl0ZW0pOgogICAgICAkaXNfYWN0aXZlID0gKGludCkkaXRlbS0+YXRpdm8gPT09IDE7CiAgICAgICR0aXBvX2ljb24gPSAkaXRlbS0+dGlwbyA9PT0gJ3VybCcgPyAn8J+MkCcgOiAoJGl0ZW0tPnRpcG8gPT09ICdkcml2ZScgPyAn8J+ThCcgOiAn8J+TnScpOwogICAgICAkcHJldmlldyAgID0gbWJfc3Vic3RyKHN0cmlwX3RhZ3MoJGl0ZW0tPmNvbnRldWRvKSwgMCwgMTgwKTsKICAgICAgJGNoYXJzICAgICA9IG1iX3N0cmxlbigkaXRlbS0+Y29udGV1ZG8pOwogICAgPz4KICAgIDxkaXYgaWQ9InZtMmtiLWl0ZW0tPD9waHAgZWNobyAoaW50KSRpdGVtLT5pZDsgPz4iIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRpc19hY3RpdmUgPyAnIzZlZTdiNycgOiAnI2U1ZTdlYic7ID8+O2JvcmRlci1sZWZ0OjRweCBzb2xpZCA8P3BocCBlY2hvICRpc19hY3RpdmUgPyAnIzEwYjk4MScgOiAnIzljYTNhZic7ID8+O2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTRweCI+CiAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMHB4Ij4KICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4OjE7bWluLXdpZHRoOjAiPgogICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1ib3R0b206NHB4Ij4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWUyOTNiIj48P3BocCBlY2hvICR0aXBvX2ljb247ID8+IDw/cGhwIGVjaG8gZXNjX2h0bWwoJGl0ZW0tPnRpdHVsbyk7ID8+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHg7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MjBweDtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGlzX2FjdGl2ZSA/ICcjZGNmY2U3JyA6ICcjZjNmNGY2JzsgPz47Y29sb3I6PD9waHAgZWNobyAkaXNfYWN0aXZlID8gJyMxNjY1MzQnIDogJyM2YjcyODAnOyA/Pjtmb250LXdlaWdodDo2MDAiPgogICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGlzX2FjdGl2ZSA/ICfwn5+iIEF0aXZvJyA6ICfimqsgSW5hdGl2byc7ID8+CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWYiPjw/cGhwIGVjaG8gZXNjX2h0bWwodWNmaXJzdCgkaXRlbS0+dGlwbykpOyA/PiDCtyA8P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJGNoYXJzKTsgPz4gY2hhcnMgwrcgPD9waHAgZWNobyB3cF9kYXRlKCdkL20vWScsIHN0cnRvdGltZSgkaXRlbS0+Y3JpYWRvX2VtKSk7ID8+PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MDtsaW5lLWhlaWdodDoxLjUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHByZXZpZXcpOyA/Pjw/cGhwIGVjaG8gJGNoYXJzID4gMTgwID8gJy4uLicgOiAnJzsgPz48L3A+CiAgICAgICAgICA8P3BocCBpZiAoJGl0ZW0tPnVybCk6ID8+CiAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGl0ZW0tPnVybCk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2MzY2ZjE7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPvCflJcgPD9waHAgZWNobyBlc2NfaHRtbChwYXJzZV91cmwoJGl0ZW0tPnVybCwgUEhQX1VSTF9IT1NUKSk7ID8+PC9hPgogICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo2cHg7ZmxleC1zaHJpbms6MCI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgZGF0YS1pZD0iPD9waHAgZWNobyAoaW50KSRpdGVtLT5pZDsgPz4iCiAgICAgICAgICAgIGRhdGEtYXRpdm89Ijw/cGhwIGVjaG8gJGlzX2FjdGl2ZSA/ICcxJyA6ICcwJzsgPz4iCiAgICAgICAgICAgIGNsYXNzPSJ2bTJrYi10b2dnbGUtYnRuIgogICAgICAgICAgICBzdHlsZT0icGFkZGluZzo2cHggMTJweDtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGlzX2FjdGl2ZSA/ICcjZmVmM2M3JyA6ICcjZGNmY2U3JzsgPz47Y29sb3I6PD9waHAgZWNobyAkaXNfYWN0aXZlID8gJyM5MjQwMGUnIDogJyMxNjY1MzQnOyA/Pjtib3JkZXI6MXB4IHNvbGlkIDw/cGhwIGVjaG8gJGlzX2FjdGl2ZSA/ICcjZmNkMzRkJyA6ICcjNmVlN2I3JzsgPz47Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEycHg7Y3Vyc29yOnBvaW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwIgogICAgICAgICAgICB0aXRsZT0iPD9waHAgZWNobyAkaXNfYWN0aXZlID8gJ0Rlc2F0aXZhcicgOiAnQXRpdmFyJzsgPz4iPjw/cGhwIGVjaG8gJGlzX2FjdGl2ZSA/ICfij7ggUGF1c2FyJyA6ICfilrYgQXRpdmFyJzsgPz48L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIgogICAgICAgICAgICBkYXRhLWlkPSI8P3BocCBlY2hvIChpbnQpJGl0ZW0tPmlkOyA/PiIKICAgICAgICAgICAgY2xhc3M9InZtMmtiLWRlbC1idG4iCiAgICAgICAgICAgIHN0eWxlPSJwYWRkaW5nOjZweCAxMnB4O2JhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojOTkxYjFiO2JvcmRlcjoxcHggc29saWQgI2ZjYTVhNTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTJweDtjdXJzb3I6cG9pbnRlciIKICAgICAgICAgICAgdGl0bGU9IkRlbGV0YXIiPvCfl5E8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgPC9kaXY+CiAgPD9waHAgZW5kaWY7ID8+CjwvZGl2PgoKPHNjcmlwdD4KKGZ1bmN0aW9uKCl7CiAgdmFyIG5vbmNlICA9IDw/cGhwIGVjaG8ganNvbl9lbmNvZGUoJGtiX25vbmNlKTsgPz47CiAgdmFyIGFqYXhVcmwgPSA8P3BocCBlY2hvIGpzb25fZW5jb2RlKGFkbWluX3VybCgnYWRtaW4tYWpheC5waHAnKSk7ID8+OwoKICAvLyBUaXBvIHNlbGVjdG9yCiAgdmFyIHRpcG9TZWwgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ya2ItdGlwbycpOwogIHZhciB1cmxXcmFwICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMmtiLXVybC13cmFwJyk7CiAgdmFyIGNvbnRlV3JhcCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ya2ItY29udGV1ZG8td3JhcCcpOwogIHZhciB1cmxJbnB1dCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMmtiLXVybCcpOwogIHZhciBjb250ZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMmtiLWNvbnRldWRvJyk7CiAgdmFyIGNoYXJzU3BhbiAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ya2ItY2hhcnMnKTsKICB2YXIgcHJldmlld0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJrYi1wcmV2aWV3LXJlc3VsdCcpOwogIHZhciBzYXZlTXNnICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMmtiLXNhdmUtbXNnJyk7CgogIGZ1bmN0aW9uIHVwZGF0ZUZvcm0oKSB7CiAgICB2YXIgdiA9IHRpcG9TZWwudmFsdWU7CiAgICBpZiAodiA9PT0gJ3VybCcgfHwgdiA9PT0gJ2RyaXZlJykgewogICAgICB1cmxXcmFwLnN0eWxlLmRpc3BsYXkgICA9ICdibG9jayc7CiAgICAgIGNvbnRlV3JhcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgY29udGVJbnB1dC5wbGFjZWhvbGRlciAgPSB2ID09PSAnZHJpdmUnCiAgICAgICAgPyAnQ2xpcXVlIGVtICJJbXBvcnRhciIgcGFyYSBleHRyYWlyIG8gdGV4dG8gZG8gR29vZ2xlIERvYywgb3UgY29sZSBtYW51YWxtZW50ZS4nCiAgICAgICAgOiAnQ2xpcXVlIGVtICJJbXBvcnRhciIgcGFyYSBleHRyYWlyIG8gdGV4dG8gZGEgcMOhZ2luYSwgb3UgY29sZSBtYW51YWxtZW50ZS4nOwogICAgfSBlbHNlIHsKICAgICAgdXJsV3JhcC5zdHlsZS5kaXNwbGF5ICAgPSAnbm9uZSc7CiAgICAgIGNvbnRlV3JhcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgY29udGVJbnB1dC5wbGFjZWhvbGRlciAgPSAnQ29sZSBhcXVpIG8gdGV4dG8gcXVlIGEgU29mSUEgZGV2ZSBjb25oZWNlciDigJQgY29udHJhdG8sIEZBUSwgcG9sw610aWNhIGRlIHByZcOnb3MuLi4nOwogICAgfQogIH0KICB0aXBvU2VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHVwZGF0ZUZvcm0pOwogIHVwZGF0ZUZvcm0oKTsKCiAgLy8gQ2hhciBjb3VudGVyCiAgY29udGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCl7CiAgICBjaGFyc1NwYW4udGV4dENvbnRlbnQgPSBjb250ZUlucHV0LnZhbHVlLmxlbmd0aC50b0xvY2FsZVN0cmluZygncHQtQlInKSArICcgY2FyYWN0ZXJlcyc7CiAgfSk7CgogIC8vIFByZXZpZXcgLyBJbXBvcnRhcgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJrYi1idG4tcHJldmlldycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgIHZhciB1cmwgPSB1cmxJbnB1dC52YWx1ZS50cmltKCk7CiAgICBpZiAoIXVybCkgeyBhbGVydCgnQ29sZSBhIFVSTCBhbnRlcyBkZSBpbXBvcnRhci4nKTsgcmV0dXJuOyB9CiAgICB2YXIgYnRuID0gdGhpczsKICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICBidG4udGV4dENvbnRlbnQgPSAn4o+zIEltcG9ydGFuZG8uLi4nOwogICAgcHJldmlld0Rpdi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICBmZC5hcHBlbmQoJ2FjdGlvbicsICd2bTJfc29maWFfa2JfcHJldmlldycpOwogICAgZmQuYXBwZW5kKCdub25jZScsICBub25jZSk7CiAgICBmZC5hcHBlbmQoJ3VybCcsICAgIHVybCk7CiAgICBmZXRjaChhamF4VXJsLCB7bWV0aG9kOidQT1NUJywgYm9keTpmZH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKGQpewogICAgICAgIGJ0bi5kaXNhYmxlZCAgICA9IGZhbHNlOwogICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfwn5SNIEltcG9ydGFyJzsKICAgICAgICBpZiAoZC5zdWNjZXNzKSB7CiAgICAgICAgICB2YXIgdCA9IGQuZGF0YTsKICAgICAgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMmtiLXRpdHVsbycpLnZhbHVlKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJrYi10aXR1bG8nKS52YWx1ZSA9IHQudGl0dWxvOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFjb250ZUlucHV0LnZhbHVlKSB7CiAgICAgICAgICAgIGNvbnRlSW5wdXQudmFsdWUgPSB0LmNvbnRldWRvOwogICAgICAgICAgICBjaGFyc1NwYW4udGV4dENvbnRlbnQgPSB0LmNoYXJzLnRvTG9jYWxlU3RyaW5nKCdwdC1CUicpICsgJyBjYXJhY3RlcmVzIGltcG9ydGFkb3MnOwogICAgICAgICAgfQogICAgICAgICAgcHJldmlld0Rpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgIHByZXZpZXdEaXYuaW5uZXJIVE1MID0gJzxzdHJvbmc+4pyFIEltcG9ydGFkbyBjb20gc3VjZXNzbyE8L3N0cm9uZz4gJyArIHQuY2hhcnMudG9Mb2NhbGVTdHJpbmcoJ3B0LUJSJykgKyAnIGNhcmFjdGVyZXMgZXh0cmHDrWRvcyBkZSA8ZW0+JyArIHQudGl0dWxvICsgJzwvZW0+LiBWb2PDqiBwb2RlIGVkaXRhciBvIGNvbnRlw7pkbyBhbnRlcyBkZSBzYWx2YXIuJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJldmlld0Rpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgIHByZXZpZXdEaXYuc3R5bGUuYmFja2dyb3VuZCA9ICcjZmVmMmYyJzsKICAgICAgICAgIHByZXZpZXdEaXYuc3R5bGUuYm9yZGVyQ29sb3IgPSAnI2ZjYTVhNSc7CiAgICAgICAgICBwcmV2aWV3RGl2LnN0eWxlLmNvbG9yID0gJyM5OTFiMWInOwogICAgICAgICAgcHJldmlld0Rpdi5pbm5lckhUTUwgPSAnPHN0cm9uZz7inYwgJyArIGQuZGF0YSArICc8L3N0cm9uZz4nOwogICAgICAgIH0KICAgICAgfSkKICAgICAgLmNhdGNoKGZ1bmN0aW9uKGUpewogICAgICAgIGJ0bi5kaXNhYmxlZCAgICA9IGZhbHNlOwogICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfwn5SNIEltcG9ydGFyJzsKICAgICAgICBhbGVydCgnRXJybyBkZSBjb25leMOjbzogJyArIGUubWVzc2FnZSk7CiAgICAgIH0pOwogIH0pOwoKICAvLyBTYWx2YXIgaXRlbQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJrYi1idG4tc2F2ZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgIHZhciB0aXR1bG8gICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJrYi10aXR1bG8nKS52YWx1ZS50cmltKCk7CiAgICB2YXIgdGlwbyAgICAgPSB0aXBvU2VsLnZhbHVlOwogICAgdmFyIHVybCAgICAgID0gdXJsSW5wdXQudmFsdWUudHJpbSgpOwogICAgdmFyIGNvbnRldWRvID0gY29udGVJbnB1dC52YWx1ZS50cmltKCk7CiAgICBpZiAoIXRpdHVsbykgICB7IGFsZXJ0KCdQb3IgZmF2b3IsIHByZWVuY2hhIG8gVMOtdHVsby4nKTsgcmV0dXJuOyB9CiAgICBpZiAoIWNvbnRldWRvICYmIHRpcG8gPT09ICd0ZXh0bycpIHsgYWxlcnQoJ0NvbnRlw7pkbyBuw6NvIHBvZGUgZXN0YXIgdmF6aW8uJyk7IHJldHVybjsgfQogICAgaWYgKCF1cmwgJiYgKHRpcG8gPT09ICd1cmwnIHx8IHRpcG8gPT09ICdkcml2ZScpICYmICFjb250ZXVkbykgewogICAgICBhbGVydCgnQ29sZSBhIFVSTCBvdSBvIGNvbnRlw7pkby4nKTsgcmV0dXJuOwogICAgfQogICAgdmFyIGJ0biA9IHRoaXM7CiAgICBidG4uZGlzYWJsZWQgICAgPSB0cnVlOwogICAgYnRuLnRleHRDb250ZW50ID0gJ+KPsyBTYWx2YW5kby4uLic7CiAgICBzYXZlTXNnLnRleHRDb250ZW50ID0gJyc7CiAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgIGZkLmFwcGVuZCgnYWN0aW9uJywgICAndm0yX3NvZmlhX2tiX3NhdmUnKTsKICAgIGZkLmFwcGVuZCgnbm9uY2UnLCAgICBub25jZSk7CiAgICBmZC5hcHBlbmQoJ3RpcG8nLCAgICAgdGlwbyk7CiAgICBmZC5hcHBlbmQoJ3RpdHVsbycsICAgdGl0dWxvKTsKICAgIGZkLmFwcGVuZCgndXJsJywgICAgICB1cmwpOwogICAgZmQuYXBwZW5kKCdjb250ZXVkbycsIGNvbnRldWRvKTsKICAgIGZldGNoKGFqYXhVcmwsIHttZXRob2Q6J1BPU1QnLCBib2R5OmZkfSkKICAgICAgLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLmpzb24oKTsgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24oZCl7CiAgICAgICAgYnRuLmRpc2FibGVkICAgID0gZmFsc2U7CiAgICAgICAgYnRuLnRleHRDb250ZW50ID0gJ/Cfkr4gU2FsdmFyIENvbmhlY2ltZW50byc7CiAgICAgICAgaWYgKGQuc3VjY2VzcykgewogICAgICAgICAgc2F2ZU1zZy5zdHlsZS5jb2xvciA9ICcjMTY2NTM0JzsKICAgICAgICAgIHNhdmVNc2cudGV4dENvbnRlbnQgPSAn4pyFIFNhbHZvISBSZWNhcnJlZ2FuZG8uLi4nOwogICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7IH0sIDgwMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNhdmVNc2cuc3R5bGUuY29sb3IgPSAnIzk5MWIxYic7CiAgICAgICAgICBzYXZlTXNnLnRleHRDb250ZW50ID0gJ+KdjCAnICsgZC5kYXRhOwogICAgICAgIH0KICAgICAgfSkKICAgICAgLmNhdGNoKGZ1bmN0aW9uKGUpewogICAgICAgIGJ0bi5kaXNhYmxlZCAgICA9IGZhbHNlOwogICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfwn5K+IFNhbHZhciBDb25oZWNpbWVudG8nOwogICAgICAgIHNhdmVNc2cuc3R5bGUuY29sb3IgPSAnIzk5MWIxYic7CiAgICAgICAgc2F2ZU1zZy50ZXh0Q29udGVudCA9ICdFcnJvOiAnICsgZS5tZXNzYWdlOwogICAgICB9KTsKICB9KTsKCiAgLy8gVG9nZ2xlIGF0aXZvL2luYXRpdm8KICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudm0ya2ItdG9nZ2xlLWJ0bicpLmZvckVhY2goZnVuY3Rpb24oYnRuKXsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgIHZhciBpZCAgICA9IGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKTsKICAgICAgdmFyIGF0aXZvID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1hdGl2bycpOwogICAgICBidG4uZGlzYWJsZWQgICAgPSB0cnVlOwogICAgICBidG4udGV4dENvbnRlbnQgPSAn4o+zJzsKICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgIGZkLmFwcGVuZCgnYWN0aW9uJywgJ3ZtMl9zb2ZpYV9rYl90b2dnbGUnKTsKICAgICAgZmQuYXBwZW5kKCdub25jZScsICBub25jZSk7CiAgICAgIGZkLmFwcGVuZCgnaWQnLCAgICAgaWQpOwogICAgICBmZXRjaChhamF4VXJsLCB7bWV0aG9kOidQT1NUJywgYm9keTpmZH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLmpzb24oKTsgfSkKICAgICAgICAudGhlbihmdW5jdGlvbihkKXsKICAgICAgICAgIGlmIChkLnN1Y2Nlc3MpIHsgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOyB9CiAgICAgICAgICBlbHNlIHsgYnRuLmRpc2FibGVkID0gZmFsc2U7IGFsZXJ0KCdFcnJvOiAnICsgZC5kYXRhKTsgfQogICAgICAgIH0pOwogICAgfSk7CiAgfSk7CgogIC8vIERlbGV0YXIgaXRlbQogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy52bTJrYi1kZWwtYnRuJykuZm9yRWFjaChmdW5jdGlvbihidG4pewogICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgaWYgKCFjb25maXJtKCdEZWxldGFyIGVzdGUgaXRlbSBkYSBiYXNlIGRlIGNvbmhlY2ltZW50bz8nKSkgcmV0dXJuOwogICAgICB2YXIgaWQgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyk7CiAgICAgIGJ0bi5kaXNhYmxlZCAgICA9IHRydWU7CiAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfij7MnOwogICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAndm0yX3NvZmlhX2tiX2RlbGV0ZScpOwogICAgICBmZC5hcHBlbmQoJ25vbmNlJywgIG5vbmNlKTsKICAgICAgZmQuYXBwZW5kKCdpZCcsICAgICBpZCk7CiAgICAgIGZldGNoKGFqYXhVcmwsIHttZXRob2Q6J1BPU1QnLCBib2R5OmZkfSkKICAgICAgICAudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uKGQpewogICAgICAgICAgaWYgKGQuc3VjY2VzcykgewogICAgICAgICAgICB2YXIgcm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMmtiLWl0ZW0tJyArIGlkKTsKICAgICAgICAgICAgaWYgKHJvdykgcm93LnJlbW92ZSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgIGFsZXJ0KCdFcnJvOiAnICsgZC5kYXRhKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwogIH0pOwp9KSgpOwo8L3NjcmlwdD4KCjw/cGhwIGVsc2VpZiAoJGFjdGl2ZV90YWIgPT09ICdwcm9tcHQnKTogPz4KPD9waHAKLy8g4pSA4pSAIFNhbHZhciBwcm9tcHQgY3VzdG9taXphZG8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmlmICggaXNzZXQoJF9QT1NUWyd2bTJfc29maWFfcHJvbXB0X3NhdmUnXSkgJiYgY2hlY2tfYWRtaW5fcmVmZXJlcigndm0yX3NvZmlhX3Byb21wdF9ub25jZScpICkgewogICAgJG5ld19wcm9tcHQgPSB0cmltKCB3cF91bnNsYXNoKCAkX1BPU1RbJ3ZtMl9zb2ZpYV9wcm9tcHRfdGV4dCddID8/ICcnICkgKTsKICAgIC8vIFt2MS41LjkzXSB0b2dnbGUgYXNrX2VtYWlsCiAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc29maWFfYXNrX2VtYWlsJywgaXNzZXQoJF9QT1NUWyd2bTJfc29maWFfYXNrX2VtYWlsJ10pID8gJzEnIDogJzAnKTsKICAgIGlmICggZW1wdHkoJG5ld19wcm9tcHQpICkgewogICAgICAgIGRlbGV0ZV9vcHRpb24oJ3ZtMl9zb2ZpYV9zeXN0ZW1fcHJvbXB0Jyk7CiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIGlzLWRpc21pc3NpYmxlIj48cD7inIUgUHJvbXB0IHJlc2V0YWRvIOKAlCBTb2ZJQSB2b2x0YXLDoSBhIHVzYXIgbyBwYWRyw6NvIGludGVybm8uPC9wPjwvZGl2Pic7CiAgICB9IGVsc2UgewogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9zb2ZpYV9zeXN0ZW1fcHJvbXB0JywgJG5ld19wcm9tcHQsICdubycpOwogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9Im5vdGljZSBub3RpY2Utc3VjY2VzcyBpcy1kaXNtaXNzaWJsZSI+PHA+4pyFIFByb21wdCBzYWx2byBjb20gc3VjZXNzbyE8L3A+PC9kaXY+JzsKICAgIH0KfQokY3VycmVudF9wcm9tcHQgPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfc3lzdGVtX3Byb21wdCcsICcnKTsKJGRlZmF1bHRfcHJvbXB0ID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX2RlZmF1bHRfcHJvbXB0JywgJycpOwokc2hvd2luZ19kZWZhdWx0ID0gZW1wdHkoJGN1cnJlbnRfcHJvbXB0KTsKJHRleHRhcmVhX3ZhbHVlICA9ICRzaG93aW5nX2RlZmF1bHQgPyAkZGVmYXVsdF9wcm9tcHQgOiAkY3VycmVudF9wcm9tcHQ7Cj8+CjxkaXYgc3R5bGU9Im1heC13aWR0aDo5NjBweCI+CiAgPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweCI+4pqZ77iPIFN5c3RlbSBQcm9tcHQgZGEgU29mSUEKICAgIDw/cGhwIGlmICgkc2hvd2luZ19kZWZhdWx0KTogPz4KICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtiYWNrZ3JvdW5kOiNkY2ZjZTc7Y29sb3I6IzE2NjUzNDtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweCI+dXNhbmRvIHBhZHLDo288L3NwYW4+CiAgICA8P3BocCBlbHNlOiA/PgogICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2JhY2tncm91bmQ6I2ZlZjljMztjb2xvcjojODU0ZDBlO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4Ij7inI/vuI8gY3VzdG9taXphZG88L3NwYW4+CiAgICA8P3BocCBlbmRpZjsgPz4KICA8L2gyPgogIDxwIHN0eWxlPSJjb2xvcjojNmI3MjgwO21hcmdpbi10b3A6LThweDtmb250LXNpemU6MTNweCI+CiAgICBFc3RlIMOpIG8gImPDqXJlYnJvIiBkYSBTb2ZJQSDigJQgZGVmaW5lIHBlcnNvbmFsaWRhZGUsIHJlZ3JhcyBlIGNvbXBvcnRhbWVudG8uIEVudmlhZG8gYW8gQ2xhdWRlIGFudGVzIGRlIDxzdHJvbmc+Y2FkYSBjb252ZXJzYTwvc3Ryb25nPi4KICA8L3A+CgogIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2VmZjZmZjtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNiI+CiAgICDwn5KhIDxzdHJvbmc+VmFyacOhdmVpcyBkaXNwb27DrXZlaXMgbm8gcHJvbXB0Ojwvc3Ryb25nPjxicj4KICAgIDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOiNkYmVhZmU7cGFkZGluZzoycHggNnB4O2JvcmRlci1yYWRpdXM6NHB4Ij57Y2F0YWxvZ190ZXh0fTwvY29kZT4g4oCUIHN1YnN0aXR1w61kbyBhdXRvbWF0aWNhbWVudGUgcGVsbyBjYXTDoWxvZ28gZGUgYXRyYcOnw7VlcyBlbSB0ZW1wbyByZWFsIChtYW50ZW5oYSBlc3RhIHZhcmnDoXZlbCBubyBwcm9tcHQpLjxicj4KICAgIE9zIGl0ZW5zIGRhIDxzdHJvbmc+QmFzZSBkZSBDb25oZWNpbWVudG88L3N0cm9uZz4gc8OjbyBzZW1wcmUgaW5qZXRhZG9zIDxlbT5hcMOzczwvZW0+IGVzdGUgcHJvbXB0LCBpbmRlcGVuZGVudGVtZW50ZSBkbyBxdWUgdm9jw6ogZXNjcmV2ZXIgYXF1aS4KICA8L2Rpdj4KCiAgPGZvcm0gbWV0aG9kPSJwb3N0Ij4KICAgIDw/cGhwIHdwX25vbmNlX2ZpZWxkKCd2bTJfc29maWFfcHJvbXB0X25vbmNlJyk7ID8+CiAgICA8IS0tIFt2MS41LjkzXSBFbWFpbCB0b2dnbGUgLS0+CiAgICA8P3BocCAkc29maWFfYXNrX2VtYWlsID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX2Fza19lbWFpbCcsJzAnKTsgPz4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZlZmNlODtib3JkZXI6MXB4IHNvbGlkICNmZGU2OGE7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDoxMnB4Ij4KICAgICAgICA8ZGl2PgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ2bTJfc29maWFfYXNrX2VtYWlsIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCgkc29maWFfYXNrX2VtYWlsLCcxJyk7ID8+IHN0eWxlPSJ3aWR0aDoxNnB4O2hlaWdodDoxNnB4Ij4KICAgICAgICAgICAgICAgIPCfk6cgUGVkaXIgZW1haWwgYXDDs3MgY2FwdHVyYXIgV2hhdHNBcHAKICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjo2cHggMCAwO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5MjQwMGUiPgogICAgICAgICAgICAgICAgUXVhbmRvIGF0aXZvLCBhZGljaW9uYSBhbyBwcm9tcHQgYSBpbnN0cnXDp8OjbyBwYXJhIHBlZGlyIG8gZS1tYWlsIGFww7NzIG8gV2hhdHNBcHAgc2VyIGZvcm5lY2lkbywgdXNhbmRvIG8gY29weToKICAgICAgICAgICAgICAgIDxlbT4iU2V1IGUtbWFpbD8gQXNzaW0gYSBnZW50ZSBnYXJhbnRlIG8gY29udGF0byBtZXNtbyBzZSBvIFdoYXRzQXBwIHRyYXZhciDwn5SSIjwvZW0+CiAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPHRleHRhcmVhCiAgICAgIG5hbWU9InZtMl9zb2ZpYV9wcm9tcHRfdGV4dCIKICAgICAgaWQ9InZtMi1zb2ZpYS1wcm9tcHQtdGV4dGFyZWEiCiAgICAgIHJvd3M9IjMyIgogICAgICBzdHlsZT0id2lkdGg6MTAwJTtmb250LWZhbWlseTonU0YgTW9ubycsTW9uYWNvLENvbnNvbGFzLG1vbm9zcGFjZTtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjY1O3BhZGRpbmc6MTRweDtib3JkZXI6MnB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czo4cHg7cmVzaXplOnZlcnRpY2FsO2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kOiNmYWZhZmEiCiAgICA+PD9waHAgZWNobyBlc2NfdGV4dGFyZWEoJHRleHRhcmVhX3ZhbHVlKTsgPz48L3RleHRhcmVhPgoKICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MTBweDttYXJnaW4tdG9wOjE0cHg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyIj4KICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9InZtMl9zb2ZpYV9wcm9tcHRfc2F2ZSIgdmFsdWU9IjEiCiAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6IzdjM2FlZDtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweCAyMHB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlciI+CiAgICAgICAg8J+SviBTYWx2YXIgUHJvbXB0CiAgICAgIDwvYnV0dG9uPgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9InZtMi1wcm9tcHQtbG9hZC1kZWZhdWx0IgogICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzZiNzI4MDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4IDIwcHg7Zm9udC1zaXplOjEzcHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgIPCfk4sgQ2FycmVnYXIgcGFkcsOjbwogICAgICA8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJ2bTItcHJvbXB0LWNsZWFyIgogICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6I2RjMjYyNjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4IDIwcHg7Zm9udC1zaXplOjEzcHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgIPCflIQgTGltcGFyICh2b2x0YSBhbyBwYWRyw6NvIG5vIHNhdmUpCiAgICAgIDwvYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzljYTNhZjttYXJnaW4tbGVmdDphdXRvIiBpZD0idm0yLXByb21wdC1jaGFyY291bnQiPjwvc3Bhbj4KICAgIDwvZGl2PgogIDwvZm9ybT4KPC9kaXY+Cgo8c2NyaXB0PgooZnVuY3Rpb24oKXsKICB2YXIgdGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXNvZmlhLXByb21wdC10ZXh0YXJlYScpOwogIHZhciBjYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItcHJvbXB0LWNoYXJjb3VudCcpOwogIHZhciBkZWZhdWx0UHJvbXB0ID0gPD9waHAgZWNobyB3cF9qc29uX2VuY29kZSggJGRlZmF1bHRfcHJvbXB0ID86ICcocGFkcsOjbyBhaW5kYSBuw6NvIHJlZ2lzdHJhZG8g4oCUIGFicmEgYSBsb2phIHVtYSB2ZXogcGFyYSBjYXJyZWdhciknICk7ID8+OwoKICBmdW5jdGlvbiB1cGRhdGVDb3VudCgpIHsKICAgIGlmIChjYykgY2MudGV4dENvbnRlbnQgPSB0YS52YWx1ZS5sZW5ndGgudG9Mb2NhbGVTdHJpbmcoJ3B0LUJSJykgKyAnIGNhcmFjdGVyZXMnOwogIH0KICB0YS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHVwZGF0ZUNvdW50KTsKICB1cGRhdGVDb3VudCgpOwoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXByb21wdC1sb2FkLWRlZmF1bHQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICBpZiAoY29uZmlybSgnU3Vic3RpdHVpciBvIGNvbnRlw7pkbyBwZWxvIHByb21wdCBwYWRyw6NvPycpKSB7CiAgICAgIHRhLnZhbHVlID0gZGVmYXVsdFByb21wdDsKICAgICAgdXBkYXRlQ291bnQoKTsKICAgIH0KICB9KTsKCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1wcm9tcHQtY2xlYXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICBpZiAoY29uZmlybSgnTGltcGFyIG8gY2FtcG8/IEFvIHNhbHZhciB2YXppbywgYSBTb2ZJQSB2b2x0YXLDoSBhIHVzYXIgbyBwcm9tcHQgcGFkcsOjbyBpbnRlcm5vLicpKSB7CiAgICAgIHRhLnZhbHVlID0gJyc7CiAgICAgIHVwZGF0ZUNvdW50KCk7CiAgICB9CiAgfSk7Cn0pKCk7Cjwvc2NyaXB0PgoKCjw/cGhwIGVsc2VpZiAoJGFjdGl2ZV90YWIgPT09ICdzZXR1cCcpOiA/Pgo8P3BocAovLyDilIDilIAgU2FsdmFyIGNvbmZpZ3VyYcOnw7VlcyBhdXRvLW9wZW4g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmlmICggaXNzZXQoJF9QT1NUWyd2bTJfc29maWFfc2V0dXBfc2F2ZSddKSAmJiBjaGVja19hZG1pbl9yZWZlcmVyKCd2bTJfc29maWFfc2V0dXBfbm9uY2UnKSApIHsKICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9zb2ZpYV9hdXRvX29wZW4nLCAgaXNzZXQoJF9QT1NUWyd2bTJfc29maWFfYXV0b19vcGVuJ10pID8gMSA6IDApOwogICAgdXBkYXRlX29wdGlvbigndm0yX3NvZmlhX2F1dG9fb3Blbl9kZWxheScsIGludHZhbCgkX1BPU1RbJ3ZtMl9zb2ZpYV9hdXRvX29wZW5fZGVsYXknXSA/PyA4KSk7CiAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc29maWFfYXV0b19vcGVuX2ZyZXEnLCBzYW5pdGl6ZV9rZXkoJF9QT1NUWyd2bTJfc29maWFfYXV0b19vcGVuX2ZyZXEnXSA/PyAnb25jZV9zZXNzaW9uJykpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3NvZmlhX2F1dG9fb3Blbl9tc2cnLCBzYW5pdGl6ZV90ZXh0YXJlYV9maWVsZCh3cF91bnNsYXNoKCRfUE9TVFsndm0yX3NvZmlhX2F1dG9fb3Blbl9tc2cnXSA/PyAnJykpKTsKICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9zb2ZpYV9leGNsdWRlZF91cmxzJywgc2FuaXRpemVfdGV4dGFyZWFfZmllbGQod3BfdW5zbGFzaCgkX1BPU1RbJ3ZtMl9zb2ZpYV9leGNsdWRlZF91cmxzJ10gPz8gJycpKSk7CiAgICBlY2hvICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MgaXMtZGlzbWlzc2libGUiPjxwPuKchSBDb25maWd1cmHDp8O1ZXMgc2FsdmFzITwvcD48L2Rpdj4nOwp9CiRhb19lbmFibGVkICAgPSAoaW50KWdldF9vcHRpb24oJ3ZtMl9zb2ZpYV9hdXRvX29wZW4nLCAwKTsKJGFvX2RlbGF5ICAgICA9IChpbnQpZ2V0X29wdGlvbigndm0yX3NvZmlhX2F1dG9fb3Blbl9kZWxheScsIDgpOwokYW9fZnJlcSAgICAgID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX2F1dG9fb3Blbl9mcmVxJywgJ29uY2Vfc2Vzc2lvbicpOwokYW9fbXNnICAgICAgID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX2F1dG9fb3Blbl9tc2cnLCAnJyk7CiRhb19leGNsX3VybHMgPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfZXhjbHVkZWRfdXJscycsICcnKTsKPz4KPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjcyMHB4Ij4KICA8aDIgc3R5bGU9Im1hcmdpbi10b3A6MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4Ij7wn5SnIFNldHVwIGRhIFNvZklBCiAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2JhY2tncm91bmQ6PD9waHAgZWNobyAkYW9fZW5hYmxlZD8nI2RjZmNlNyc6JyNmZWUyZTInOyA/Pjtjb2xvcjo8P3BocCBlY2hvICRhb19lbmFibGVkPycjMTY2NTM0JzonIzk5MWIxYic7ID8+O3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4Ij4KICAgICAgPD9waHAgZWNobyAkYW9fZW5hYmxlZCA/ICfwn5+iIEF1dG8tb3BlbiBhdGl2bycgOiAn8J+UtCBBdXRvLW9wZW4gZGVzbGlnYWRvJzsgPz4KICAgIDwvc3Bhbj4KICA8L2gyPgogIDxwIHN0eWxlPSJjb2xvcjojNmI3MjgwO21hcmdpbi10b3A6LThweDtmb250LXNpemU6MTNweCI+Q29uZmlndXJlIHF1YW5kbyBlIGNvbW8gYSBTb2ZJQSBhYnJlIGF1dG9tYXRpY2FtZW50ZSBwYXJhIG9zIHZpc2l0YW50ZXMgZG8gc2l0ZS48L3A+CgogIDxmb3JtIG1ldGhvZD0icG9zdCI+CiAgICA8P3BocCB3cF9ub25jZV9maWVsZCgndm0yX3NvZmlhX3NldHVwX25vbmNlJyk7ID8+CgogICAgPCEtLSBDYXJkOiBBdXRvLW9wZW4gcHJpbmNpcGFsIC0tPgogICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyMHB4IDI0cHg7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTVweCI+8J+agCBBYnJpciBTb2ZJQSBhdXRvbWF0aWNhbWVudGU8L3N0cm9uZz4KICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NHB4IDAgMDtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4Ij5RdWFuZG8gYXRpdmFkbywgYSBTb2ZJQSBhYnJlIHNvemluaGEgYXDDs3MgbyB2aXNpdGFudGUgZW50cmFyIG5vIHNpdGUuPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyIj4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm0yX3NvZmlhX2F1dG9fb3BlbiIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJGFvX2VuYWJsZWQsIDEpOyA/PgogICAgICAgICAgICBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweDthY2NlbnQtY29sb3I6IzdjM2FlZCI+CiAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2NvbG9yOjw/cGhwIGVjaG8gJGFvX2VuYWJsZWQ/JyM3YzNhZWQnOicjNmI3MjgwJzsgPz4iPjw/cGhwIGVjaG8gJGFvX2VuYWJsZWQ/J0F0aXZvJzonSW5hdGl2byc7ID8+PC9zcGFuPgogICAgICAgIDwvbGFiZWw+CiAgICAgIDwvZGl2PgoKICAgICAgPCEtLSBEZWxheSAtLT4KICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7bWFyZ2luLWJvdHRvbTo2cHgiPuKPse+4jyBBYnJpciBhcMOzcyAoc2VndW5kb3MpPC9sYWJlbD4KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4Ij4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InZtMl9zb2ZpYV9hdXRvX29wZW5fZGVsYXkiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRhb19kZWxheSk7ID8+IgogICAgICAgICAgICBtaW49IjAiIG1heD0iMTIwIiBzdHlsZT0id2lkdGg6OTBweDtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTRweCI+CiAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzljYTNhZiI+MCA9IGltZWRpYXRvIMK3IDhzIHJlY29tZW5kYWRvICh2aXNpdGFudGUgasOhIGxldSBhbGdvKTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8IS0tIEZyZXF1w6puY2lhIC0tPgogICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzM3NDE1MTttYXJnaW4tYm90dG9tOjhweCI+8J+UgSBGcmVxdcOqbmNpYTwvbGFiZWw+CiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4Ij4KICAgICAgICAgIDw/cGhwCiAgICAgICAgICAkZnJlcXMgPSBbCiAgICAgICAgICAgICdvbmNlX3Nlc3Npb24nID0+IFsnbGFiZWwnPT4nVW1hIHZleiBwb3Igc2Vzc8OjbycsICAgJ2Rlc2MnPT4nQWJyZSBzw7MgbmEgcHJpbWVpcmEgdmlzaXRhIGRlIGNhZGEgYWJhL2phbmVsYSDigJQgZmVjaGEgbyBuYXZlZ2Fkb3IsIGFicmUgZGUgbm92byAo4q2QIHJlY29tZW5kYWRvKSddLAogICAgICAgICAgICAnb25jZV9kYXknICAgICA9PiBbJ2xhYmVsJz0+J1VtYSB2ZXogcG9yIGRpYScsICAgICAgJ2Rlc2MnPT4nQWJyZSBubyBtw6F4aW1vIHVtYSB2ZXogYSBjYWRhIDI0aCBwb3IgdmlzaXRhbnRlJ10sCiAgICAgICAgICAgICduZXdfb25seScgICAgID0+IFsnbGFiZWwnPT4nQXBlbmFzIG5vdm9zIHZpc2l0YW50ZXMnLCdkZXNjJz0+J1PDsyBhYnJlIHBhcmEgcXVlbSBudW5jYSBjb252ZXJzb3UgY29tIGEgU29mSUEgYW50ZXMnXSwKICAgICAgICAgICAgJ2Fsd2F5cycgICAgICAgPT4gWydsYWJlbCc9PidTZW1wcmUnLCAgICAgICAgICAgICAgICdkZXNjJz0+J0FicmUgZW0gdG9kYSBww6FnaW5hIGNhcnJlZ2FkYSAocG9kZSBpcnJpdGFyIHZpc2l0YW50ZXMgZnJlcXVlbnRlcyknXSwKICAgICAgICAgIF07CiAgICAgICAgICBmb3JlYWNoICgkZnJlcXMgYXMgJHZhbCA9PiAkZik6ID8+CiAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDoxMHB4O3BhZGRpbmc6MTBweCAxNHB4O2JvcmRlcjoycHggc29saWQgPD9waHAgZWNobyAkYW9fZnJlcT09PSR2YWw/JyM3YzNhZWQnOicjZTVlN2ViJzsgPz47Ym9yZGVyLXJhZGl1czo4cHg7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDo8P3BocCBlY2hvICRhb19mcmVxPT09JHZhbD8nI2ZhZjVmZic6JyNmZmYnOyA/PiI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0idm0yX3NvZmlhX2F1dG9fb3Blbl9mcmVxIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkdmFsKTsgPz4iIDw/cGhwIGNoZWNrZWQoJGFvX2ZyZXEsICR2YWwpOyA/PiBzdHlsZT0ibWFyZ2luLXRvcDoycHg7YWNjZW50LWNvbG9yOiM3YzNhZWQiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiMxMTE4MjciPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGZbJ2xhYmVsJ10pOyA/Pjwvc3Ryb25nPgogICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46MnB4IDAgMDtmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwIj48P3BocCBlY2hvIGVzY19odG1sKCRmWydkZXNjJ10pOyA/PjwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tIENhcmQ6IE1lbnNhZ2VtIGluaWNpYWwgLS0+CiAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjIwcHggMjRweDttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTVweCI+8J+SrCBNZW5zYWdlbSBpbmljaWFsIChvcGNpb25hbCk8L3N0cm9uZz4KICAgICAgPHAgc3R5bGU9Im1hcmdpbjo0cHggMCAxMnB4O2NvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEzcHgiPlNlIHByZWVuY2hpZGEsIGEgU29mSUEgZXhpYmUgZXN0YSBtZW5zYWdlbSBhbyBhYnJpciBhdXRvbWF0aWNhbWVudGUg4oCUIGVtIHZleiBkb3MgY2hpcHMgZGUgc3VnZXN0w6NvIHBhZHLDo28uIERlaXhlIHZhemlvIHBhcmEgbWFudGVyIG8gY29tcG9ydGFtZW50byBwYWRyw6NvLjwvcD4KICAgICAgPHRleHRhcmVhIG5hbWU9InZtMl9zb2ZpYV9hdXRvX29wZW5fbXNnIiByb3dzPSIzIgogICAgICAgIHBsYWNlaG9sZGVyPSJFeDogT2zDoSEg8J+RiyBQb3NzbyB0ZSBhanVkYXIgYSBlbmNvbnRyYXIgYSBhdHJhw6fDo28gcGVyZmVpdGEgcGFyYSBzZXUgZXZlbnRvPyBNZSBjb250YSB1bSBwb3VjbyBzb2JyZSBhIGZlc3RhISIKICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjEwcHggMTRweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6aW5oZXJpdDtyZXNpemU6dmVydGljYWwiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRhb19tc2cpOyA/PjwvdGV4dGFyZWE+CiAgICAgIDw/cGhwIGlmICgkYW9fbXNnKTogPz4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjZweCAwIDA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzdjM2FlZCI+4pyP77iPIE1lbnNhZ2VtIGN1c3RvbWl6YWRhIGF0aXZhPC9wPgogICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NnB4IDAgMDtmb250LXNpemU6MTJweDtjb2xvcjojOWNhM2FmIj5Vc2FuZG8gY2hpcHMgZGUgc3VnZXN0w6NvIHBhZHLDo288L3A+CiAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9kaXY+CgogICAgPCEtLSBQcmV2aWV3IC0tPgogICAgPD9waHAgaWYgKCRhb19lbmFibGVkKTogPz4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2VmZjZmZjtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAg4oS577iPIDxzdHJvbmc+Q29uZmlndXJhw6fDo28gYXR1YWw6PC9zdHJvbmc+IFNvZklBIGFicmUgYXDDs3MgPHN0cm9uZz48P3BocCBlY2hvICRhb19kZWxheTsgPz5zPC9zdHJvbmc+LAogICAgICBmcmVxdcOqbmNpYSA8c3Ryb25nPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGZyZXFzWyRhb19mcmVxXVsnbGFiZWwnXSk7ID8+PC9zdHJvbmc+PD9waHAgaWYgKCRhb19tc2cpOiA/PiwgY29tIG1lbnNhZ2VtIGN1c3RvbWl6YWRhPD9waHAgZW5kaWY7ID8+LgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRpZjsgPz4KCiAgICA8IS0tIENhcmQ6IFVSTHMgZXhjbHXDrWRhcyAtLT4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjBweCAyNHB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgIDxzdHJvbmcgc3R5bGU9ImZvbnQtc2l6ZToxNXB4Ij7wn5qrIFDDoWdpbmFzIG9uZGUgYSBTb2ZJQSBOw4NPIGFwYXJlY2U8L3N0cm9uZz4KICAgICAgPHAgc3R5bGU9Im1hcmdpbjo0cHggMCAxMnB4O2NvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEzcHgiPlVtYSBVUkwgcG9yIGxpbmhhLiBBIGJhcnJhIGRlIG5hdmVnYcOnw6NvIGludGVpcmEgZmljYSBvY3VsdGEgbmVzc2FzIHDDoWdpbmFzICjDunRpbCBwYXJhIHDDoWdpbmFzIGludGVybmFzL2FkbWluKS48L3A+CiAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ2bTJfc29maWFfZXhjbHVkZWRfdXJscyIgcm93cz0iNSIKICAgICAgICBwbGFjZWhvbGRlcj0iaHR0cHM6Ly9sb2phLnZpdmFtYWlzZXZlbnRvcy5jb20vYWdlbmRhLXZpdmFtYWlzLWFkbWlucy1jZWx1bGFyLyYjMTA7aHR0cHM6Ly9sb2phLnZpdmFtYWlzZXZlbnRvcy5jb20vb3V0cmEtcGFnaW5hLWludGVybmEvIgogICAgICAgIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6MTBweCAxNHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTNweDtmb250LWZhbWlseTptb25vc3BhY2U7cmVzaXplOnZlcnRpY2FsIj48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgkYW9fZXhjbF91cmxzKTsgPz48L3RleHRhcmVhPgogICAgICA8P3BocAogICAgICAgICRleGNsX2NvdW50ID0gY291bnQoYXJyYXlfZmlsdGVyKGFycmF5X21hcCgndHJpbScsIGV4cGxvZGUoIlxuIiwgJGFvX2V4Y2xfdXJscykpKSk7CiAgICAgICAgaWYgKCRleGNsX2NvdW50ID4gMCk6CiAgICAgID8+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjo2cHggMCAwO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNkYzI2MjYiPvCfmqsgPD9waHAgZWNobyAkZXhjbF9jb3VudDsgPz4gcMOhZ2luYTw/cGhwIGVjaG8gJGV4Y2xfY291bnQgPiAxID8gJ3MnIDogJyc7ID8+IGV4Y2x1w61kYTw/cGhwIGVjaG8gJGV4Y2xfY291bnQgPiAxID8gJ3MnIDogJyc7ID8+PC9wPgogICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NnB4IDAgMDtmb250LXNpemU6MTJweDtjb2xvcjojOWNhM2FmIj5OZW5odW1hIHDDoWdpbmEgZXhjbHXDrWRhIOKAlCBTb2ZJQSBhcGFyZWNlIGVtIHRvZG8gbyBzaXRlPC9wPgogICAgICA8P3BocCBlbmRpZjsgPz4KICAgIDwvZGl2PgoKICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJ2bTJfc29maWFfc2V0dXBfc2F2ZSIKICAgICAgc3R5bGU9ImJhY2tncm91bmQ6IzdjM2FlZDtjb2xvcjojZmZmO2JvcmRlcjpub25lO3BhZGRpbmc6MTJweCAzMnB4O2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlciI+CiAgICAgIPCfkr4gU2FsdmFyIGNvbmZpZ3VyYcOnw7VlcwogICAgPC9idXR0b24+CiAgPC9mb3JtPgo8L2Rpdj4KCjw/cGhwIGVuZGlmOyA/PgoKPC9kaXY+PCEtLSAud3JhcCAtLT4KPD9waHAKfQoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIFNPRklBIExBTkRJTkcgUEFHRSDigJQgL3NvZmlhCi8vIFJldXRpbGl6YSBvIG1vZGFsIFNvZklBIGRvIHZtLWJvdHRvbS1uYXYgKG1lc21hIGZvbnRlIGRlIHZlcmRhZGUpCi8vIENTUyBmdWxsc2NyZWVuICsgYXV0by1vcGVuICsgVVRNcyBpbmpldGFkb3Mgbm8gU09GSUFfRU5EUE9JTlQKLy8gdjEuNS44NAovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKCi8vIENyaWEgYSBXUCBwYWdlICJzb2ZpYSIgYXV0b21hdGljYW1lbnRlIHNlIG7Do28gZXhpc3RpcgphZGRfYWN0aW9uKCdpbml0JywgJ3ZtMl9zb2ZpYV9lbnN1cmVfcGFnZScsIDIwKTsKZnVuY3Rpb24gdm0yX3NvZmlhX2Vuc3VyZV9wYWdlKCkgewogICAgaWYgKCBnZXRfcGFnZV9ieV9wYXRoKCdzb2ZpYScpICkgcmV0dXJuOwogICAgd3BfaW5zZXJ0X3Bvc3QoWwogICAgICAgICdwb3N0X3RpdGxlJyAgPT4gJ1NvZklBIOKAlCBFbmNvbnRyZSBzdWEgQXRyYcOnw6NvJywKICAgICAgICAncG9zdF9uYW1lJyAgID0+ICdzb2ZpYScsCiAgICAgICAgJ3Bvc3Rfc3RhdHVzJyA9PiAncHVibGlzaCcsCiAgICAgICAgJ3Bvc3RfdHlwZScgICA9PiAncGFnZScsCiAgICAgICAgJ3Bvc3RfY29udGVudCc9PiAnJywKICAgIF0pOwp9CgphZGRfYWN0aW9uKCd0ZW1wbGF0ZV9yZWRpcmVjdCcsICd2bTJfc29maWFfbGFuZGluZ19yZWRpcmVjdCcpOwpmdW5jdGlvbiB2bTJfc29maWFfbGFuZGluZ19yZWRpcmVjdCgpIHsKICAgIGlmICggISAoIGlzX3BhZ2UoJ3NvZmlhJykgfHwgZ2V0X3F1ZXJ5X3ZhcigncGFnZW5hbWUnKSA9PT0gJ3NvZmlhJyApICkgcmV0dXJuOwogICAgLy8gSW5qZXRhciBDU1MvSlMgc2VtIGludGVycm9tcGVyIG8gcmVuZGVyIG5vcm1hbCBkbyBXUCAodm0tYm90dG9tLW5hdiBjYXJyZWdhIGp1bnRvKQogICAgYWRkX2FjdGlvbignd3BfaGVhZCcsICAgJ3ZtMl9zb2ZpYV9sYW5kaW5nX2hlYWQnLCAgIDk5KTsKICAgIGFkZF9hY3Rpb24oJ3dwX2Zvb3RlcicsICd2bTJfc29maWFfbGFuZGluZ19mb290ZXInLCA5OSk7Cn0KCmZ1bmN0aW9uIHZtMl9zb2ZpYV9sYW5kaW5nX2hlYWQoKSB7CiAgICAkcGl4ZWxfaWQgPSAnMzQxNTk0NDA1NTIyNjgyOSc7CiAgICA/Pgo8IS0tIE1ldGEgUGl4ZWwgLS0+CjxzY3JpcHQ+IWZ1bmN0aW9uKGYsYixlLHYsbix0LHMpe2lmKGYuZmJxKXJldHVybjtuPWYuZmJxPWZ1bmN0aW9uKCl7bi5jYWxsTWV0aG9kP24uY2FsbE1ldGhvZC5hcHBseShuLGFyZ3VtZW50cyk6bi5xdWV1ZS5wdXNoKGFyZ3VtZW50cyl9O2lmKCFmLl9mYnEpZi5fZmJxPW47bi5wdXNoPW47bi5sb2FkZWQ9ITA7bi52ZXJzaW9uPScyLjAnO24ucXVldWU9W107dD1iLmNyZWF0ZUVsZW1lbnQoZSk7dC5hc3luYz0hMDt0LnNyYz12O3M9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShlKVswXTtzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQscyl9KHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnaHR0cHM6Ly9jb25uZWN0LmZhY2Vib29rLm5ldC9lbl9VUy9mYmV2ZW50cy5qcycpO2ZicSgnaW5pdCcsJzw/cGhwIGVjaG8gZXNjX2pzKCRwaXhlbF9pZCk7ID8+Jyk7ZmJxKCd0cmFjaycsJ1BhZ2VWaWV3Jyk7PC9zY3JpcHQ+Cjxub3NjcmlwdD48aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIHNyYz0iaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3RyP2lkPTw/cGhwIGVjaG8gZXNjX2F0dHIoJHBpeGVsX2lkKTsgPz4mZXY9UGFnZVZpZXcmbm9zY3JpcHQ9MSIvPjwvbm9zY3JpcHQ+CjxzdHlsZT4KLyog4pSA4pSAIFNPRklBIExBTkRJTkc6IGVzY29uZGVyIHR1ZG8gZXhjZXRvIG8gbW9kYWwg4pSA4pSAICovCmJvZHkuc29maWEtbGFuZGluZyAuc2l0ZS1oZWFkZXIsCmJvZHkuc29maWEtbGFuZGluZyBoZWFkZXI6bm90KCN2bWJuYXYtaWEtcGFuZWwgaGVhZGVyKSwKYm9keS5zb2ZpYS1sYW5kaW5nICNtYXN0aGVhZCwKYm9keS5zb2ZpYS1sYW5kaW5nIC5lbGVtZW50b3ItbG9jYXRpb24taGVhZGVyLApib2R5LnNvZmlhLWxhbmRpbmcgZm9vdGVyLApib2R5LnNvZmlhLWxhbmRpbmcgLnNpdGUtZm9vdGVyLApib2R5LnNvZmlhLWxhbmRpbmcgI2NvbG9waG9uLApib2R5LnNvZmlhLWxhbmRpbmcgI3dwYWRtaW5iYXIsCmJvZHkuc29maWEtbGFuZGluZyAjdm1ibmF2LWJhciwKYm9keS5zb2ZpYS1sYW5kaW5nIC5lbnRyeS1oZWFkZXIsCmJvZHkuc29maWEtbGFuZGluZyAuZW50cnktY29udGVudCwKYm9keS5zb2ZpYS1sYW5kaW5nIC5wYWdlLWNvbnRlbnQsCmJvZHkuc29maWEtbGFuZGluZyAuc2l0ZS1tYWluID4gKjpub3QoI3ZtYm5hdi1pYS1tb2RhbCkgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CmJvZHkuc29maWEtbGFuZGluZyB7CiAgICBiYWNrZ3JvdW5kOiAjZjVmM2ZmOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQovKiDilIDilIAgTW9kYWwgZnVsbHNjcmVlbiDilIDilIAgKi8KYm9keS5zb2ZpYS1sYW5kaW5nICN2bWJuYXYtaWEtbW9kYWwgewogICAgYmFja2dyb3VuZDogI2ZmZiAhaW1wb3J0YW50OwogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7Cn0KLyogUGFuZWw6IGNvbHVuYSBmbGV4IHF1ZSBwcmVlbmNoZSAxMDBkdmggc2VtIHNjcm9sbCBwcsOzcHJpbyAqLwpib2R5LnNvZmlhLWxhbmRpbmcgI3ZtYm5hdi1pYS1wYW5lbCB7CiAgICBoZWlnaHQ6IDEwMGR2aCAhaW1wb3J0YW50OwogICAgbWF4LWhlaWdodDogMTAwZHZoICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiA0ODBweCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3cteTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7Cn0KLyogSGVhZGVyIGUgY2hpcHM6IG7Do28gZW5jb2xoZW0gKi8KYm9keS5zb2ZpYS1sYW5kaW5nIC52bWJuYXYtaWEtaGVhZGVyIHsKICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAxNHB4IDIwcHggMTJweCAhaW1wb3J0YW50OwogICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50Owp9CmJvZHkuc29maWEtbGFuZGluZyAjdm0yLXNvZmlhLXV0bSB7CiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50Owp9CmJvZHkuc29maWEtbGFuZGluZyAjdm1ibmF2LWlhLWNoaXBzIHsKICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiA2cHggMjBweCA4cHggIWltcG9ydGFudDsKfQovKiBDaGF0OiBjcmVzY2UgZSByb2xhICovCmJvZHkuc29maWEtbGFuZGluZyAjdm1ibmF2LWlhLWNoYXQgewogICAgZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDsKICAgIG1heC1oZWlnaHQ6IG5vbmUgIWltcG9ydGFudDsKICAgIG92ZXJmbG93LXk6IGF1dG8gIWltcG9ydGFudDsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogNHB4IDIwcHggOHB4ICFpbXBvcnRhbnQ7Cn0KLyogVHlwaW5nIGluZGljYXRvciAqLwpib2R5LnNvZmlhLWxhbmRpbmcgI3ZtYm5hdi1pYS10eXBpbmcgewogICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDJweCAyMHB4IDRweCAhaW1wb3J0YW50Owp9Ci8qIElucHV0OiBmaXhvIG5vIGZ1bmRvLCBzZW5kIGJ1dHRvbiBjb21vIGZsZXggaXRlbSAqLwpib2R5LnNvZmlhLWxhbmRpbmcgLnZtYm5hdi1pYS1pbnB1dC13cmFwIHsKICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7CiAgICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDEwcHggMjBweCBjYWxjKDE0cHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMHB4KSkgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWRlOWZlICFpbXBvcnRhbnQ7Cn0KYm9keS5zb2ZpYS1sYW5kaW5nIC52bWJuYXYtaWEtc2VuZGJ0biB7CiAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7CiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50Owp9Ci8qIOKUgOKUgCBVVE0gYmFkZ2UgYWJhaXhvIGRvIGhlYWRlciDilIDilIAgKi8KI3ZtMi1zb2ZpYS11dG0gewogICAgYmFja2dyb3VuZDogI2Y1ZjNmZjsKICAgIHBhZGRpbmc6IDRweCAxNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6ICM3YzNhZWQ7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBsZXR0ZXItc3BhY2luZzogLjNweDsKfQo8L3N0eWxlPgogICAgPD9waHAKfQoKZnVuY3Rpb24gdm0yX3NvZmlhX2xhbmRpbmdfZm9vdGVyKCkgewogICAgPz4KPHNjcmlwdD4KKGZ1bmN0aW9uKCl7CiAgICAvLyAxLiBNYXJjYXIgYm9keSBwYXJhIENTUwogICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdzb2ZpYS1sYW5kaW5nJyk7CgogICAgLy8gMi4gQ2FwdHVyYXIgVVRNcyBkYSBVUkwKICAgIHZhciBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgdmFyIHV0bUtleXMgPSBbJ3V0bV9zb3VyY2UnLCd1dG1fbWVkaXVtJywndXRtX2NhbXBhaWduJywndXRtX2NvbnRlbnQnLCd1dG1fdGVybSddOwogICAgdmFyIHV0bXMgPSB7fTsKICAgIHZhciBwYXJ0cyA9IFtdOwogICAgdXRtS2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGspeyB2YXIgdj1wYXJhbXMuZ2V0KGspOyBpZih2KXt1dG1zW2tdPXY7IHBhcnRzLnB1c2godik7fSB9KTsKICAgIHdpbmRvdy5fdm0yX3NvZmlhX3V0bXMgPSB1dG1zOwoKICAgIC8vIDMuIEluamV0YXIgVVRNcyArIGNhbmFsX29yaWdlbSBubyBlbmRwb2ludCBxdWUgbyB2bWJuYXYgasOhIHVzYQogICAgZnVuY3Rpb24gcGF0Y2hFbmRwb2ludCgpIHsKICAgICAgICBpZiAodHlwZW9mIFNPRklBX0VORFBPSU5UID09PSAndW5kZWZpbmVkJykgeyBzZXRUaW1lb3V0KHBhdGNoRW5kcG9pbnQsIDEwMCk7IHJldHVybjsgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciBlcCA9IG5ldyBVUkwoU09GSUFfRU5EUE9JTlQpOwogICAgICAgICAgICB1dG1LZXlzLmZvckVhY2goZnVuY3Rpb24oayl7IGlmKHV0bXNba10pIGVwLnNlYXJjaFBhcmFtcy5zZXQoaywgdXRtc1trXSk7IH0pOwogICAgICAgICAgICBlcC5zZWFyY2hQYXJhbXMuc2V0KCdjYW5hbF9vcmlnZW0nLCAnc29maWFfbGFuZGluZycpOwogICAgICAgICAgICBTT0ZJQV9FTkRQT0lOVCA9IGVwLnRvU3RyaW5nKCk7CiAgICAgICAgfSBjYXRjaChlKXt9CiAgICB9CiAgICBwYXRjaEVuZHBvaW50KCk7CgogICAgLy8gNC4gTW9zdHJhciBiYWRnZSBVVE0gZGVudHJvIGRvIHBhaW5lbAogICAgaWYgKHBhcnRzLmxlbmd0aCkgewogICAgICAgIHZhciBiYWRnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIGJhZGdlLmlkID0gJ3ZtMi1zb2ZpYS11dG0nOwogICAgICAgIGJhZGdlLnRleHRDb250ZW50ID0gJ/Cfk40gJyArIHBhcnRzLmpvaW4oJyDCtyAnKTsKICAgICAgICBmdW5jdGlvbiBpbnNlcnRCYWRnZSgpIHsKICAgICAgICAgICAgdmFyIHBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtYm5hdi1pYS1wYW5lbCcpOwogICAgICAgICAgICBpZiAoIXBhbmVsKSB7IHNldFRpbWVvdXQoaW5zZXJ0QmFkZ2UsIDE1MCk7IHJldHVybjsgfQogICAgICAgICAgICB2YXIgZmlyc3QgPSBwYW5lbC5jaGlsZHJlblswXTsKICAgICAgICAgICAgaWYgKGZpcnN0KSBwYW5lbC5pbnNlcnRCZWZvcmUoYmFkZ2UsIGZpcnN0Lm5leHRTaWJsaW5nKTsKICAgICAgICAgICAgZWxzZSBwYW5lbC5hcHBlbmRDaGlsZChiYWRnZSk7CiAgICAgICAgfQogICAgICAgIGluc2VydEJhZGdlKCk7CiAgICB9CgogICAgLy8gNS4gQXV0by1hYnJpciBvIG1vZGFsIFNvZklBCiAgICBmdW5jdGlvbiB0cnlPcGVuKCkgewogICAgICAgIGlmICh0eXBlb2Ygdm1ibmF2T3BlbklBID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgIHZtYm5hdk9wZW5JQSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQodHJ5T3BlbiwgMTUwKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIHRyeU9wZW4pOwogICAgfSBlbHNlIHsKICAgICAgICB0cnlPcGVuKCk7CiAgICB9Cn0pKCk7Cjwvc2NyaXB0PgogICAgPD9waHAKfQoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIEVNQUlMIOKAlCBFbnJpcXVlY2ltZW50byBkZSBiYXNlIGUgZXN0YXTDrXN0aWNhcyAodjEuNS44OSkKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgphZGRfYWN0aW9uKCdyZXN0X2FwaV9pbml0JywgZnVuY3Rpb24oKSB7CiAgICAvLyBHRVQgL3ZtLWNybS12Mi92MS9lbWFpbC9zdGF0cwogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9lbWFpbC9zdGF0cycsIFsKICAgICAgICAnbWV0aG9kcycgICAgICAgICAgICAgPT4gJ0dFVCcsCiAgICAgICAgJ2NhbGxiYWNrJyAgICAgICAgICAgID0+ICd2bTJfZW1haWxfc3RhdHNfcmVzdCcsCiAgICAgICAgJ3Blcm1pc3Npb25fY2FsbGJhY2snID0+ICd2bTJfZW1haWxfcmVzdF9hdXRoJywKICAgIF0pOwogICAgLy8gUE9TVCAvdm0tY3JtLXYyL3YxL2VtYWlsL2VucmljaAogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9lbWFpbC9lbnJpY2gnLCBbCiAgICAgICAgJ21ldGhvZHMnICAgICAgICAgICAgID0+ICdQT1NUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gJ3ZtMl9lbWFpbF9lbnJpY2hfcmVzdCcsCiAgICAgICAgJ3Blcm1pc3Npb25fY2FsbGJhY2snID0+ICd2bTJfZW1haWxfcmVzdF9hdXRoJywKICAgIF0pOwp9KTsKZnVuY3Rpb24gdm0yX2VtYWlsX3Jlc3RfYXV0aCggJHJlcXVlc3QgKSB7CiAgICAvLyBBY2VpdGEgV1AgYWRtaW4gYXV0ZW50aWNhZG8gKEFwcGxpY2F0aW9uIFBhc3N3b3JkKSBPVSBCZWFyZXIgdG9rZW4KICAgIGlmICggY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSApIHJldHVybiB0cnVlOwogICAgJGF1dGggICAgID0gJHJlcXVlc3QtPmdldF9oZWFkZXIoJ0F1dGhvcml6YXRpb24nKSA/PyAnJzsKICAgICRleHBlY3RlZCA9ICdCZWFyZXIgJyAuIGdldF9vcHRpb24oJ3ZtMl9maW5fc3luY190b2tlbicsICd2bTJmc3luY185a3F3M3A3eCcpOwogICAgcmV0dXJuICggJGF1dGggPT09ICRleHBlY3RlZCApOwp9CgovKioKICogR0VUIC92bS1jcm0tdjIvdjEvZW1haWwvc3RhdHMKICogUmV0b3JuYSBjb2JlcnR1cmEgZGUgZS1tYWlsIG5hIGJhc2Ugdm0yX2NvbnRhY3RzLgogKi8KZnVuY3Rpb24gdm0yX2VtYWlsX3N0YXRzX3Jlc3QoICRyZXF1ZXN0ICkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJHRhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bTJfY29udGFjdHMnOwoKICAgICR0b3RhbCAgICA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUiKTsKICAgICRjb21fZW1haWwgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIGVtYWlsICE9ICcnIEFORCBlbWFpbCBJUyBOT1QgTlVMTCIpOwogICAgJHNlbV9lbWFpbCA9ICR0b3RhbCAtICRjb21fZW1haWw7CiAgICAkcGN0ICAgICAgID0gJHRvdGFsID4gMCA/IHJvdW5kKCgkY29tX2VtYWlsIC8gJHRvdGFsKSAqIDEwMCwgMSkgOiAwOwoKICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbCiAgICAgICAgJ3RvdGFsJyAgICAgID0+ICR0b3RhbCwKICAgICAgICAnY29tX2VtYWlsJyAgPT4gJGNvbV9lbWFpbCwKICAgICAgICAnc2VtX2VtYWlsJyAgPT4gJHNlbV9lbWFpbCwKICAgICAgICAnY29iZXJ0dXJhJyAgPT4gJHBjdCAuICclJywKICAgIF0pOwp9CgovKioKICogUE9TVCAvdm0tY3JtLXYyL3YxL2VtYWlsL2VucmljaAogKiBFbnJpcXVlY2Ugdm0yX2NvbnRhY3RzLmVtYWlsIGEgcGFydGlyIGRlOgogKiAgIDEuIFRvZG9zIG9zIHBlZGlkb3MgV29vQ29tbWVyY2UgKEhQT1M6IHdwX3djX29yZGVycykKICogICAyLiBVc3XDoXJpb3MgV1AgY29tIHBob25lIG1ldGEKICoKICogU8OzIGF0dWFsaXphIGNvbnRhdG9zIHF1ZSB0w6ptIGVtYWlsIHZhemlvLgogKiBSZXRvcm5hIHsgdXBkYXRlZCwgc2tpcHBlZCwgbm90X2ZvdW5kX2luX2NvbnRhY3RzIH0uCiAqLwpmdW5jdGlvbiB2bTJfZW1haWxfZW5yaWNoX3Jlc3QoICRyZXF1ZXN0ICkgewogICAgZ2xvYmFsICR3cGRiOwogICAgQGluaV9zZXQoJ21lbW9yeV9saW1pdCcsICc1MTJNJyk7CiAgICBAc2V0X3RpbWVfbGltaXQoMzAwKTsKCiAgICAkdGFibGUgICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9jb250YWN0cyc7CiAgICAkdXBkYXRlZCAgPSAwOwogICAgJHNraXBwZWQgID0gMDsgLy8gasOhIHRpbmhhbSBlLW1haWwKICAgICRub19tYXRjaCA9IDA7IC8vIGUtbWFpbCBlbmNvbnRyYWRvIG1hcyB0ZWxlZm9uZSBuw6NvIGVzdMOhIG5hIGJhc2UKCiAgICAvLyDilIDilIAgTWFwYSBkZSB0ZWxlZm9uZXMgc2VtIGUtbWFpbCBuYSBiYXNlIOKUgOKUgAogICAgJHNlbV9lbWFpbCA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAiU0VMRUNUIHBob25lIEZST00gJHRhYmxlIFdIRVJFIGVtYWlsID0gJycgT1IgZW1haWwgSVMgTlVMTCIsCiAgICAgICAgQVJSQVlfQQogICAgKTsKICAgIGlmICggZW1wdHkoJHNlbV9lbWFpbCkgKSB7CiAgICAgICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKFsKICAgICAgICAgICAgJ3VwZGF0ZWQnID0+IDAsICdza2lwcGVkJyA9PiAwLCAnbm90X2ZvdW5kX2luX2NvbnRhY3RzJyA9PiAwLAogICAgICAgICAgICAnbWVzc2FnZScgPT4gJ1RvZG9zIG9zIGNvbnRhdG9zIGrDoSB0w6ptIGUtbWFpbC4nLAogICAgICAgIF0pOwogICAgfQogICAgJHBob25lc19zZW1fZW1haWwgPSBhcnJheV9mbGlwKCBhcnJheV9jb2x1bW4oJHNlbV9lbWFpbCwgJ3Bob25lJykgKTsKICAgICR0b3RhbF9zZW0gICAgICAgID0gY291bnQoJHBob25lc19zZW1fZW1haWwpOwoKICAgIC8vIOKUgOKUgCBGb250ZSAxOiBQZWRpZG9zIFdvb0NvbW1lcmNlIChIUE9TKSDilIDilIAKICAgICR3Y190YmwgPSAkd3BkYi0+cHJlZml4IC4gJ3djX29yZGVycyc7CiAgICBpZiAoICR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICckd2NfdGJsJyIpID09PSAkd2NfdGJsICkgewogICAgICAgIC8vIEJ1c2NhciBlbSBsb3RlcyBkZSA1MDAgcGFyYSBuw6NvIGV4cGxvZGlyIGEgbWVtw7NyaWEKICAgICAgICAkb2Zmc2V0ID0gMDsKICAgICAgICAkYmF0Y2ggID0gNTAwOwogICAgICAgIGRvIHsKICAgICAgICAgICAgJHJvd3MgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoICR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAgICAgIlNFTEVDVCBiaWxsaW5nX3Bob25lLCBiaWxsaW5nX2VtYWlsCiAgICAgICAgICAgICAgICAgRlJPTSAkd2NfdGJsCiAgICAgICAgICAgICAgICAgV0hFUkUgYmlsbGluZ19waG9uZSAhPSAnJyBBTkQgYmlsbGluZ19lbWFpbCAhPSAnJyBBTkQgdHlwZSA9ICdzaG9wX29yZGVyJwogICAgICAgICAgICAgICAgIExJTUlUICVkIE9GRlNFVCAlZCIsCiAgICAgICAgICAgICAgICAkYmF0Y2gsICRvZmZzZXQKICAgICAgICAgICAgKSwgQVJSQVlfQSApOwoKICAgICAgICAgICAgZm9yZWFjaCAoICRyb3dzIGFzICRyICkgewogICAgICAgICAgICAgICAgJHAgPSB2bTJfbm9ybWFsaXplX3Bob25lKCAkclsnYmlsbGluZ19waG9uZSddICk7CiAgICAgICAgICAgICAgICBpZiAoICEgJHAgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGlmICggISBpc3NldCgkcGhvbmVzX3NlbV9lbWFpbFskcF0pICkgY29udGludWU7IC8vIGrDoSB0ZW0gZS1tYWlsIG91IG7Do28gZXN0w6EgbmEgYmFzZQogICAgICAgICAgICAgICAgJGVtYWlsID0gc2FuaXRpemVfZW1haWwoICRyWydiaWxsaW5nX2VtYWlsJ10gKTsKICAgICAgICAgICAgICAgIGlmICggISBpc19lbWFpbCgkZW1haWwpICkgY29udGludWU7CiAgICAgICAgICAgICAgICAkd3BkYi0+dXBkYXRlKCAkdGFibGUsIFsnZW1haWwnID0+ICRlbWFpbCwgJ3VwZGF0ZWRfYXQnID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKV0sIFsncGhvbmUnID0+ICRwXSApOwogICAgICAgICAgICAgICAgdW5zZXQoJHBob25lc19zZW1fZW1haWxbJHBdKTsgLy8gcmVtb3ZlIGRvIG1hcGEgcGFyYSBuw6NvIHJlcHJvY2Vzc2FyCiAgICAgICAgICAgICAgICAkdXBkYXRlZCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvZmZzZXQgKz0gJGJhdGNoOwogICAgICAgIH0gd2hpbGUgKCBjb3VudCgkcm93cykgPT09ICRiYXRjaCApOwogICAgfQoKICAgIC8vIOKUgOKUgCBGb250ZSAyOiBVc3XDoXJpb3MgV1AgKGJpbGxpbmdfcGhvbmUgbWV0YSkg4pSA4pSACiAgICAkcmVtYWluaW5nID0gYXJyYXlfa2V5cygkcGhvbmVzX3NlbV9lbWFpbCk7CiAgICBpZiAoICEgZW1wdHkoJHJlbWFpbmluZykgKSB7CiAgICAgICAgLy8gQnVzY2FyIHVzdcOhcmlvcyBjb20gYmlsbGluZ19waG9uZSBwcmVlbmNoaWRvCiAgICAgICAgJHdwX3VzZXJzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICAgICAiU0VMRUNUIHUudXNlcl9lbWFpbCwgcG0ubWV0YV92YWx1ZSBBUyBwaG9uZQogICAgICAgICAgICAgRlJPTSB7JHdwZGItPnVzZXJzfSB1CiAgICAgICAgICAgICBJTk5FUiBKT0lOIHskd3BkYi0+dXNlcm1ldGF9IHBtIE9OIHBtLnVzZXJfaWQgPSB1LklEIEFORCBwbS5tZXRhX2tleSA9ICdiaWxsaW5nX3Bob25lJwogICAgICAgICAgICAgV0hFUkUgcG0ubWV0YV92YWx1ZSAhPSAnJyBBTkQgdS51c2VyX2VtYWlsICE9ICcnIiwKICAgICAgICAgICAgQVJSQVlfQQogICAgICAgICk7CiAgICAgICAgZm9yZWFjaCAoICR3cF91c2VycyBhcyAkciApIHsKICAgICAgICAgICAgJHAgPSB2bTJfbm9ybWFsaXplX3Bob25lKCAkclsncGhvbmUnXSApOwogICAgICAgICAgICBpZiAoICEgJHAgfHwgISBpc3NldCgkcGhvbmVzX3NlbV9lbWFpbFskcF0pICkgY29udGludWU7CiAgICAgICAgICAgICRlbWFpbCA9IHNhbml0aXplX2VtYWlsKCAkclsndXNlcl9lbWFpbCddICk7CiAgICAgICAgICAgIGlmICggISBpc19lbWFpbCgkZW1haWwpICkgY29udGludWU7CiAgICAgICAgICAgICR3cGRiLT51cGRhdGUoICR0YWJsZSwgWydlbWFpbCcgPT4gJGVtYWlsLCAndXBkYXRlZF9hdCcgPT4gY3VycmVudF90aW1lKCdteXNxbCcpXSwgWydwaG9uZScgPT4gJHBdICk7CiAgICAgICAgICAgIHVuc2V0KCRwaG9uZXNfc2VtX2VtYWlsWyRwXSk7CiAgICAgICAgICAgICR1cGRhdGVkKys7CiAgICAgICAgfQogICAgfQoKICAgIC8vIENvbnRhdG9zIHF1ZSBuw6NvIGVuY29udHJhbW9zIGUtbWFpbCBlbSBuZW5odW1hIGZvbnRlCiAgICAkbm9fbWF0Y2ggPSBjb3VudCgkcGhvbmVzX3NlbV9lbWFpbCk7CgogICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKFsKICAgICAgICAnc3VjY2VzcycgICAgICAgICAgICAgID0+IHRydWUsCiAgICAgICAgJ3RvdGFsX3NlbV9lbWFpbCcgICAgICA9PiAkdG90YWxfc2VtLAogICAgICAgICd1cGRhdGVkJyAgICAgICAgICAgICAgPT4gJHVwZGF0ZWQsCiAgICAgICAgJ25vX21hdGNoJyAgICAgICAgICAgICA9PiAkbm9fbWF0Y2gsCiAgICAgICAgJ21lc3NhZ2UnICAgICAgICAgICAgICA9PiAiRW5yaXF1ZWNpbWVudG8gY29uY2x1w61kbzogeyR1cGRhdGVkfSBjb250YXRvcyBhdHVhbGl6YWRvcyBkZSB7JHRvdGFsX3NlbX0gcXVlIGVzdGF2YW0gc2VtIGUtbWFpbC4iLAogICAgXSk7Cn0K
