ZGlmZiAtLWdpdCBhL3J1bnRpbWUvYXV0b2xvYWQvZ2V0c2NyaXB0LnZpbSBiL3J1bnRpbWUvYXV0b2xvYWQvZ2V0c2NyaXB0LnZpbQppbmRleCAzNGY1OTcwLi42Yjc0ZDM3IDEwMDY0NAotLS0gYS9ydW50aW1lL2F1dG9sb2FkL2dldHNjcmlwdC52aW0KKysrIGIvcnVudGltZS9hdXRvbG9hZC9nZXRzY3JpcHQudmltCkBAIC0xLDggKzEsOCBAQAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgZ2V0c2NyaXB0LnZpbQotIiAgQXV0aG9yOglDaGFybGVzIEUuIENhbXBiZWxsLCBKci4KLSIgIERhdGU6CUphbiAxNywgMjAxMgotIiAgVmVyc2lvbjoJMzQKKyIgIEF1dGhvcjoJQ2hhcmxlcyBFLiBDYW1wYmVsbAorIiAgRGF0ZToJQXByIDE3LCAyMDEzCisiICBWZXJzaW9uOgkzNQogIiAgSW5zdGFsbGluZzoJOmhlbHAgZ2x2cy1pbnN0YWxsCiAiICBVc2FnZToJOmhlbHAgZ2x2cwogIgpAQCAtMTUsNyArMTUsNyBAQAogaWYgZXhpc3RzKCJnOmxvYWRlZF9nZXRzY3JpcHQiKQogIGZpbmlzaAogZW5kaWYKLWxldCBnOmxvYWRlZF9nZXRzY3JpcHQ9ICJ2MzQiCitsZXQgZzpsb2FkZWRfZ2V0c2NyaXB0PSAidjM1IgogaWYgJmNwCiAgZWNob2VyciAiR2V0TGF0ZXN0VmltU2NyaXB0cyBpcyBub3QgdmktY29tcGF0aWJsZTsgbm90IGxvYWRlZCAoeW91IG5lZWQgdG8gc2V0IG5vY3ApIgogIGZpbmlzaApAQCAtNzQsNiArNzQsMTEgQEAKICBsZXQgZzpHZXRMYXRlc3RWaW1TY3JpcHRzX2FsbG93YXV0b2luc3RhbGw9IDEKIGVuZGlmCiAKKyIgc2V0IHVwIGRlZmF1bHQgc2NyaXB0YWRkciBhZGRyZXNzCitpZiAhZXhpc3RzKCJnOkdldExhdGVzdFZpbVNjcmlwdHNfc2NyaXB0YWRkciIpCisgbGV0IGc6R2V0TGF0ZXN0VmltU2NyaXB0c19zY3JpcHRhZGRyID0gJ2h0dHA6Ly92aW0uc291cmNlZm9yZ2UubmV0L3NjcmlwdC5waHA/c2NyaXB0X2lkPScKK2VuZGlmCisKICIiIEZvciBkZWJ1Z2dpbmc6CiAibGV0IGc6R2V0TGF0ZXN0VmltU2NyaXB0c193Z2V0ICAgID0gImVjaG8iCiAibGV0IGc6R2V0TGF0ZXN0VmltU2NyaXB0c19vcHRpb25zID0gIm9wdGlvbnMiCkBAIC0zMTQsNyArMzE5LDcgQEAKICAgaWYgJm1vZAogICAgc2lsZW50ISB3IQogICBlbmRpZgotICBxCisgIHEhCiAKICAgIiByZXN0b3JlIGV2ZW50cyBhbmQgY3VycmVudCBkaXJlY3RvcnkKICAgZXhlICJjZCAiLmZuYW1lZXNjYXBlKHN1YnN0aXR1dGUob3JpZ2RpciwnXCcsJy8nLCdnZScpKQpAQCAtNDE1LDcgKzQyMCw3IEBACiAgIGVjaG8gJ2NvbnNpZGVyaW5nIDwnLmFpY21tbnQuJz4gc2NyaXB0aWQ9Jy5zY3JpcHRpZC4nIHNyY2lkPScuc3JjaWQKIAogICAiIGdyYWIgYSBjb3B5IG9mIHRoZSBwbHVnaW4ncyB2aW0uc291cmNlZm9yZ2UubmV0IHdlYnBhZ2UKLSAgbGV0IHNjcmlwdGFkZHIgPSAnaHR0cDovL3ZpbS5zb3VyY2Vmb3JnZS5uZXQvc2NyaXB0LnBocD9zY3JpcHRfaWQ9Jy5zY3JpcHRpZAorICBsZXQgc2NyaXB0YWRkciA9IGc6R2V0TGF0ZXN0VmltU2NyaXB0c19zY3JpcHRhZGRyLnNjcmlwdGlkCiAgIGxldCB0bXBmaWxlICAgID0gdGVtcG5hbWUoKQogICBsZXQgdjplcnJtc2cgICA9ICIiCiAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvYXV0b2xvYWQvbmV0cncudmltIGIvcnVudGltZS9hdXRvbG9hZC9uZXRydy52aW0KaW5kZXggM2U5YmQzNC4uODQyMmQ5ZCAxMDA2NDQKLS0tIGEvcnVudGltZS9hdXRvbG9hZC9uZXRydy52aW0KKysrIGIvcnVudGltZS9hdXRvbG9hZC9uZXRydy52aW0KQEAgLTEsMTAgKzEsMTAgQEAKICIgbmV0cncudmltOiBIYW5kbGVzIGZpbGUgdHJhbnNmZXIgYW5kIHJlbW90ZSBkaXJlY3RvcnkgbGlzdGluZyBhY3Jvc3MKICIgICAgICAgICAgICBBVVRPTE9BRCBTRUNUSU9OCi0iIERhdGU6CQlPY3QgMjUsIDIwMTIKLSIgVmVyc2lvbjoJMTQ2Ci0iIE1haW50YWluZXI6CUNoYXJsZXMgRSBDYW1wYmVsbCwgSnIgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0tTk9TUEFNPgorIiBEYXRlOgkJQXByIDE2LCAyMDEzCisiIFZlcnNpb246CTE0OAorIiBNYWludGFpbmVyOglDaGFybGVzIEUgQ2FtcGJlbGwgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0tTk9TUEFNPgogIiBHZXRMYXRlc3RWaW1TY3JpcHRzOiAxMDc1IDEgOkF1dG9JbnN0YWxsOiBuZXRydy52aW0KLSIgQ29weXJpZ2h0OiAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMiBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4ge3t7MQorIiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDEyIENoYXJsZXMgRS4gQ2FtcGJlbGwge3t7MQogIiAgICAgICAgICAgICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoaXMgY29kZSwKICIgICAgICAgICAgICAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodAogIiAgICAgICAgICAgICAgIG5vdGljZSBpcyBjb3BpZWQgd2l0aCBpdC4gTGlrZSBhbnl0aGluZyBlbHNlIHRoYXQncyBmcmVlLApAQCAtMjIsMTAgKzIyLDEwIEBACiBpZiAmY3AgfHwgZXhpc3RzKCJnOmxvYWRlZF9uZXRydyIpCiAgIGZpbmlzaAogZW5kaWYKLWxldCBnOmxvYWRlZF9uZXRydyA9ICJ2MTQ2IgotaWYgdjp2ZXJzaW9uIDwgNzAyCitsZXQgZzpsb2FkZWRfbmV0cncgPSAidjE0OCIKK2lmIHY6dmVyc2lvbiA8IDcwMyB8fCAodjp2ZXJzaW9uID09IDcwMyAmJiAhaGFzKCJwYXRjaDQ2NSIpKQogIGVjaG9obCBXYXJuaW5nTXNnCi0gZWNobyAiKioqd2FybmluZyoqKiB0aGlzIHZlcnNpb24gb2YgbmV0cncgbmVlZHMgdmltIDcuMiIKKyBlY2hvICIqKip3YXJuaW5nKioqIHRoaXMgdmVyc2lvbiBvZiBuZXRydyBuZWVkcyB2aW0gNy4zLjQ2NSBvciBsYXRlciIKICBlY2hvaGwgTm9ybWFsCiAgZmluaXNoCiBlbmRpZgpAQCAtMzUsMTIgKzM1LDYgQEAKICBsZXQgczpFUlJPUiAgID0gMgogZW5kaWYKIAotIiBzYW5pdHkgY2hlY2tzCi1pZiB2OnZlcnNpb24gPCA3MDAKLSBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywieW91IG5lZWQgdmltIHZlcnNpb24gNy4wIG9yIGxhdGVyIGZvciB2ZXJzaW9uICIuZzpsb2FkZWRfbmV0cncuIiBvZiBuZXRydyIsMSkKLSBmaW5pc2gKLWVuZGlmCi0KIGxldCBzOmtlZXBjcG89ICZjcG8KIHNldCBjcG8mdmltCiAiRGVjaG9UYWJPbgpAQCAtNTUsNyArNDksNyBAQAogIiAgIDA9bm90ZSAgICAgPSBzOk5PVEUKICIgICAxPXdhcm5pbmcgID0gczpXQVJOSU5HCiAiICAgMj1lcnJvciAgICA9IHM6RVJST1IKLSIgIE9jdCAyNCwgMjAxMiA6IG1heCBlcnJudW0gY3VycmVudGx5IGlzIDkxCisiICBBcHIgMDIsIDIwMTMgOiBtYXggZXJybnVtIGN1cnJlbnRseSBpcyA5MgogZnVuISBuZXRydyNFcnJvck1zZyhsZXZlbCxtc2csZXJybnVtKQogIiAgY2FsbCBEZnVuYygibmV0cncjRXJyb3JNc2cobGV2ZWw9Ii5hOmxldmVsLiIgbXNnPCIuYTptc2cuIj4gZXJybnVtPSIuYTplcnJudW0uIikgZzpuZXRyd191c2VfZXJyb3J3aW5kb3c9Ii5nOm5ldHJ3X3VzZV9lcnJvcndpbmRvdykKIApAQCAtOTcsNyArOTEsNyBAQAogICAgIHNpbCEga2VlcGogY2FsbCBzOk5ldHJ3U2FmZU9wdGlvbnMoKQogICAgIHNldGwgYnQ9bm9maWxlCiAgICAga2VlcGogZmlsZSBOZXRyd01lc3NhZ2UKLSIgICAgY2FsbCBEZWNobygic2V0bG9jYWwgbWEgbm9ybyIpCisiICAgIGNhbGwgRGVjaG8oInNldGwgbWEgbm9ybyIpCiAgICAgc2V0bCBtYSBub3JvCiAgICAgY2FsbCBzZXRsaW5lKGxpbmUoIiQiKSxsZXZlbC5hOm1zZykKICAgIGVuZGlmCkBAIC0xMzQsOSArMTI4LDEyIEBACiAiIE5ldHJ3SW5pdDogaW5pdGlhbGl6ZXMgdmFyaWFibGVzIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGRlZmluZWQge3t7MgogIiAgICAgICAgICAgIExvb3NlbHksICB2YXJuYW1lID0gdmFsdWUuCiBmdW4gczpOZXRyd0luaXQodmFybmFtZSx2YWx1ZSkKKyIgIGNhbGwgRGVjaG8oInZhcm5hbWU8Ii5hOnZhcm5hbWUuIj4gdmFsdWU9Ii5hOnZhbHVlKQogICBpZiAhZXhpc3RzKGE6dmFybmFtZSkKICAgIGlmIHR5cGUoYTp2YWx1ZSkgPT0gMAogICAgIGV4ZSAibGV0ICIuYTp2YXJuYW1lLiI9Ii5hOnZhbHVlCisgICBlbHNlaWYgdHlwZShhOnZhbHVlKSA9PSAxICYmIGE6dmFsdWUgPX4gJ15be1tdJworICAgIGV4ZSAibGV0ICIuYTp2YXJuYW1lLiI9Ii5hOnZhbHVlCiAgICBlbHNlaWYgdHlwZShhOnZhbHVlKSA9PSAxCiAgICAgZXhlICJsZXQgIi5hOnZhcm5hbWUuIj0iLiInIi5hOnZhbHVlLiInIgogICAgZWxzZQpAQCAtMjUxLDYgKzI0OCw3IEBACiBsZXQgczpuZXRyd191c2VyY3VsID0gJmN1cnNvcmxpbmUKIGxldCBzOm5ldHJ3X3VzZXJjdWMgPSAmY3Vyc29yY29sdW1uCiAiIERlZmF1bHQgdmFsdWVzIC0gZC1nIC0tLS0tLS0tLS0ge3t7MworY2FsbCBzOk5ldHJ3SW5pdCgiczpkaWRzdGFyc3RhciIsMCkKIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfZGlyaGlzdF9jbnQiICAgICAgLCAwKQogY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd19kZWNvbXByZXNzIiAgICAgICAsICd7ICIuZ3oiIDogImd1bnppcCIsICIuYnoyIiA6ICJidW56aXAyIiwgIi56aXAiIDogInVuemlwIiwgIi50YXIiIDogInRhciAteGYiLCAiLnh6IiA6ICJ1bnh6IiB9JykKIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfZGlyaGlzdG1heCIgICAgICAgLCAxMCkKQEAgLTI5Nyw3ICsyOTUsNyBAQAogY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd19saXN0X2hpZGUiLCIiKQogIiBEZWZhdWx0IHZhbHVlcyAtIGxoLWx6IC0tLS0tLS0tLS0ge3t7MwogaWYgZXhpc3RzKCJnOm5ldHJ3X2xvY2FsX2NvcHljbWQiKQotIGxldCBnOm5ldHJ3X2xvY2FsY29weWNtZD0gZzpuZXRyd19sb2NhbF9jb3B5Y21kIgorIGxldCBnOm5ldHJ3X2xvY2FsY29weWNtZD0gZzpuZXRyd19sb2NhbF9jb3B5Y21kCiAgY2FsbCBuZXRydyNFcnJvck1zZyhzOk5PVEUsImc6bmV0cndfbG9jYWxfY29weWNtZCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGc6bmV0cndfbG9jYWxjb3B5Y21kIiw4NCkKIGVuZGlmCiBpZiAhZXhpc3RzKCJnOm5ldHJ3X2xvY2FsY21kc2hlbGwiKQpAQCAtMzIzLDcgKzMyMSw3IEBACiBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X2xvY2FsbWtkaXIiLCJta2RpciIpCiBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X3JlbW90ZV9ta2RpciIsIm1rZGlyIikKIGlmIGV4aXN0cygiZzpuZXRyd19sb2NhbF9tb3ZlY21kIikKLSBsZXQgZzpuZXRyd19sb2NhbG1vdmVjbWQ9IGc6bmV0cndfbG9jYWxfbW92ZWNtZCIKKyBsZXQgZzpuZXRyd19sb2NhbG1vdmVjbWQ9IGc6bmV0cndfbG9jYWxfbW92ZWNtZAogIGNhbGwgbmV0cncjRXJyb3JNc2coczpOT1RFLCJnOm5ldHJ3X2xvY2FsX21vdmVjbWQgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBnOm5ldHJ3X2xvY2FsbW92ZWNtZCIsODgpCiBlbmRpZgogaWYgIWV4aXN0cygiZzpuZXRyd19sb2NhbG1vdmVjbWQiKQpAQCAtMzQxLDcgKzMzOSw3IEBACiBlbmRpZgogY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd19sb2NhbHJtZGlyIiwgInJtZGlyIikKIGlmIGV4aXN0cygiZzpuZXRyd19sb2NhbF9ybWRpciIpCi0gbGV0IGc6bmV0cndfbG9jYWxybWRpcj0gZzpuZXRyd19sb2NhbF9ybWRpciIKKyBsZXQgZzpuZXRyd19sb2NhbHJtZGlyPSBnOm5ldHJ3X2xvY2FsX3JtZGlyCiAgY2FsbCBuZXRydyNFcnJvck1zZyhzOk5PVEUsImc6bmV0cndfbG9jYWxfcm1kaXIgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBnOm5ldHJ3X2xvY2Fscm1kaXIiLDg2KQogZW5kaWYKIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfbGlzdHN0eWxlIiAgLCBzOlRISU5MSVNUKQpAQCAtMzU3LDcgKzM1NSw3IEBACiBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X21heGZpbGVuYW1lbGVuIiwgMzIpCiBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X21lbnUiICAgICAgICAgICwgMSkKIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfbWtkaXJfY21kIiAgICAgLCBnOm5ldHJ3X3NzaF9jbWQuIiBVU0VQT1JUIEhPU1ROQU1FIG1rZGlyIikKLWNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfbW91c2VtYXBzIiAgICAgLCAoZXhpc3RzKCImbW91c2UiKSAmJiAmbW91c2UgPX4gJ1thbmhdJykpCitjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X21vdXNlbWFwcyIgICAgICwgKGV4aXN0cygiK21vdXNlIikgJiYgJm1vdXNlID1+ICdbYW5oXScpKQogY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd19yZXRtYXAiICAgICAgICAsIDApCiBpZiBoYXMoInVuaXgiKSB8fCAoZXhpc3RzKCJnOm5ldHJ3X2N5Z3dpbiIpICYmIGc6bmV0cndfY3lnd2luKQogIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfY2hncGVybSIgICAgICAgLCAiY2htb2QgUEVSTSBGSUxFTkFNRSIpCkBAIC0zOTIsNyArMzkwLDE3IEBACiBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X3VzZV9ub3N3ZiIgICAgICAgICwgMCkKICIgRGVmYXVsdCB2YWx1ZXMgLSB0LXcgLS0tLS0tLS0tLSB7e3szCiBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X3RpbWVmbXQiLCIlYyIpCi1jYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X3hzdHJsZW4iLDApCitpZiAhZXhpc3RzKCJnOm5ldHJ3X3hzdHJsZW4iKQorIGlmIGV4aXN0cygiZzpBbGlnbl94c3RybGVuIikKKyAgbGV0IGc6bmV0cndfeHN0cmxlbj0gZzpBbGlnbl94c3RybGVuCisgZWxzZWlmIGV4aXN0cygiZzpkcmF3aXRfeHN0cmxlbiIpCisgIGxldCBnOm5ldHJ3X3hzdHJsZW49IGc6ZHJhd2l0X3hzdHJsZW4KKyBlbHNlaWYgJmVuYyA9PSAibGF0aW4xIiB8fCAhaGFzKCJtdWx0aV9ieXRlIikKKyAgbGV0IGc6bmV0cndfeHN0cmxlbj0gMAorIGVsc2UKKyAgbGV0IGc6bmV0cndfeHN0cmxlbj0gMQorIGVuZGlmCitlbmRpZgogY2FsbCBzOk5ldHJ3SW5pdCgiZzpOZXRyd1RvcEx2bE1lbnUiLCJOZXRydy4iKQogY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd193aW45NWZ0cCIsMSkKIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfd2luc2l6ZSIsNTApCkBAIC00MDIsMTEgKzQxMCwxMSBAQAogIiBEZWZhdWx0IHZhbHVlcyBmb3IgbmV0cncncyBzY3JpcHQgdmFyaWFibGVzOiB7e3syCiBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X2ZuYW1lX2VzY2FwZSIsJyA/JjslJykKIGlmIGhhcygid2luMzIiKSB8fCBoYXMoIndpbjk1IikgfHwgaGFzKCJ3aW42NCIpIHx8IGhhcygid2luMTYiKQotIGNhbGwgczpOZXRyd0luaXQoImc6bmV0cndfZ2xvYl9lc2NhcGUiLCdbXSo/YHskJykKKyBjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X2dsb2JfZXNjYXBlIiwnKj9ge1tdJCcpCiBlbHNlCi0gY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd19nbG9iX2VzY2FwZSIsJ1tdKj9ge34kXCcpCisgY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd19nbG9iX2VzY2FwZSIsJypbXT9ge34kXCcpCiBlbmRpZgotY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd19tZW51X2VzY2FwZSIsJy4vJj8gXCcpCitjYWxsIHM6TmV0cndJbml0KCJnOm5ldHJ3X21lbnVfZXNjYXBlIiwnLiY/IFwnKQogY2FsbCBzOk5ldHJ3SW5pdCgiZzpuZXRyd190bXBmaWxlX2VzY2FwZSIsJyAmOycpCiBjYWxsIHM6TmV0cndJbml0KCJzOm5ldHJ3X21hcF9lc2NhcGUiLCI8fFxuXHJcXFw8Qy1WPlwiIikKIApAQCAtNDU5LDcgKzQ2Nyw3IEBACiBlbmRpZgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIiBzOk5ldHJ3T3B0aW9uU2F2ZTogc2F2ZSBvcHRpb25zIGFuZCBzZXQgdG8gInN0YW5kYXJkIiBmb3JtIHt7ezIKKyIgczpOZXRyd09wdGlvblNhdmU6IHNhdmUgb3B0aW9ucyBwcmlvciB0byBzZXR0aW5nIHRvICJuZXRydy1idWZmZXItc3RhbmRhcmQiIGZvcm0ge3t7MgogIiAgMDYvMDgvMDcgOiByZW1vdmVkIGNhbGwgdG8gTmV0cndTYWZlT3B0aW9ucygpLCBlaXRoZXIgcGxhY2VkCiAiICAgICAgICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIE5ldHJ3T3B0aW9uU2F2ZSgpIGNhbGxzIGluIE5ldFJlYWQKICIgICAgICAgICAgICAgYW5kIE5ldFdyaXRlLCBvciBhZnRlciB0aGUgczpOZXRyd0VuZXcoKSBjYWxsIGluCkBAIC00NzUsNyArNDgzLDcgQEAKICIgICBjYWxsIERyZXQoInM6TmV0cndPcHRpb25TYXZlIDogb3B0aW9ucyBhbHJlYWR5IHNhdmVkIikKICAgIHJldHVybgogICBlbmRpZgotIiAgY2FsbCBEZWNobygiZm89Ii4mZm8uKGV4aXN0cygiJmFjZCIpPyAiIGFjZD0iLiZhY2QgOiAiIGFjZCBkb2Vzbid0IGV4aXN0IikuIiBkaWZmPSIuJmw6ZGlmZikKKyIgIGNhbGwgRGVjaG8oImZvPSIuJmZvLihleGlzdHMoIithY2QiKT8gIiBhY2Q9Ii4mYWNkIDogIiBhY2QgZG9lc24ndCBleGlzdCIpLiIgZGlmZj0iLiZsOmRpZmYpCiAKICAgIiBTYXZlIGN1cnJlbnQgc2V0dGluZ3MgYW5kIGN1cnJlbnQgZGlyZWN0b3J5CiAiICBjYWxsIERlY2hvKCJzYXZpbmcgY3VycmVudCBzZXR0aW5ncyBhbmQgY3VycmVudCBkaXJlY3RvcnkiKQpAQCAtNDg3LDYgKzQ5NSw3IEBACiAgIGxldCB7YTp2dH1uZXRyd19ibGtlZXAgICAgPSAmbDpibAogICBsZXQge2E6dnR9bmV0cndfYnRrZWVwICAgID0gJmw6YnQKICAgbGV0IHthOnZ0fW5ldHJ3X2JvbWJrZWVwICA9ICZsOmJvbWIKKyAgbGV0IHthOnZ0fW5ldHJ3X2NlZGl0ICAgICA9ICZjZWRpdAogICBsZXQge2E6dnR9bmV0cndfY2lrZWVwICAgID0gJmw6Y2kKICAgbGV0IHthOnZ0fW5ldHJ3X2NpbmtlZXAgICA9ICZsOmNpbgogICBsZXQge2E6dnR9bmV0cndfY2lub2tlZXAgID0gJmw6Y2lubwpAQCAtNTUyLDcgKzU2MSw3IEBACiAgIGVuZGlmCiAgIHVubGV0IHthOnZ0fW5ldHJ3X29wdGlvbnNhdmUKIAotICBpZiBleGlzdHMoIiZhY2QiKQorICBpZiBleGlzdHMoIithY2QiKQogICAgaWYgZXhpc3RzKCJ7YTp2dH1uZXRyd19hY2RrZWVwIikKICIgICAgY2FsbCBEZWNobygiKE5ldHJ3T3B0aW9uUmVzdG9yZSkgZzpuZXRyd19rZWVwZGlyPSIuZzpuZXRyd19rZWVwZGlyLiI6IGdldGN3ZDwiLmdldGN3ZCgpLiI+IGFjZD0iLiZhY2QpCiAgICAgbGV0IGN1cmRpciA9IGdldGN3ZCgpCkBAIC01NzIsMTAgKzU4MSwxMyBAQAogICBlbmRpZgogICBpZiBleGlzdHMoInthOnZ0fW5ldHJ3X2Fpa2VlcCIpICAgfGxldCAmbDphaSAgICAgPSB7YTp2dH1uZXRyd19haWtlZXAgICAgICB8dW5sZXQge2E6dnR9bmV0cndfYWlrZWVwICAgfGVuZGlmCiAgIGlmIGV4aXN0cygie2E6dnR9bmV0cndfYXdrZWVwIikgICB8bGV0ICZsOmF3ICAgICA9IHthOnZ0fW5ldHJ3X2F3a2VlcCAgICAgIHx1bmxldCB7YTp2dH1uZXRyd19hd2tlZXAgICB8ZW5kaWYKLSAgaWYgZXhpc3RzKCJ7YTp2dH1uZXRyd19iaGtlZXAiKSAgIHxsZXQgJmw6YmggICAgID0ge2E6dnR9bmV0cndfYmhrZWVwICAgICAgfHVubGV0IHthOnZ0fW5ldHJ3X2Joa2VlcCAgIHxlbmRpZgorICBpZiBnOm5ldHJ3X2xpc3RzdHlsZSAhPSBzOlRSRUVMSVNUCisgICBpZiBleGlzdHMoInthOnZ0fW5ldHJ3X2Joa2VlcCIpICB8bGV0ICZsOmJoICAgICA9IHthOnZ0fW5ldHJ3X2Joa2VlcCAgICAgIHx1bmxldCB7YTp2dH1uZXRyd19iaGtlZXAgICB8ZW5kaWYKKyAgZW5kaWYKICAgaWYgZXhpc3RzKCJ7YTp2dH1uZXRyd19ibGtlZXAiKSAgIHxsZXQgJmw6YmwgICAgID0ge2E6dnR9bmV0cndfYmxrZWVwICAgICAgfHVubGV0IHthOnZ0fW5ldHJ3X2Jsa2VlcCAgIHxlbmRpZgogICBpZiBleGlzdHMoInthOnZ0fW5ldHJ3X2J0a2VlcCIpICAgfGxldCAmbDpidCAgICAgPSB7YTp2dH1uZXRyd19idGtlZXAgICAgICB8dW5sZXQge2E6dnR9bmV0cndfYnRrZWVwICAgfGVuZGlmCiAgIGlmIGV4aXN0cygie2E6dnR9bmV0cndfYm9tYmtlZXAiKSB8bGV0ICZsOmJvbWIgICA9IHthOnZ0fW5ldHJ3X2JvbWJrZWVwICAgIHx1bmxldCB7YTp2dH1uZXRyd19ib21ia2VlcCB8ZW5kaWYKKyAgaWYgZXhpc3RzKCJ7YTp2dH1uZXRyd19jZWRpdCIpICAgIHxsZXQgJmNlZGl0ICAgID0ge2E6dnR9bmV0cndfY2VkaXQgICAgICAgfHVubGV0IHthOnZ0fW5ldHJ3X2NlZGl0ICAgIHxlbmRpZgogICBpZiBleGlzdHMoInthOnZ0fW5ldHJ3X2Npa2VlcCIpICAgfGxldCAmbDpjaSAgICAgPSB7YTp2dH1uZXRyd19jaWtlZXAgICAgICB8dW5sZXQge2E6dnR9bmV0cndfY2lrZWVwICAgfGVuZGlmCiAgIGlmIGV4aXN0cygie2E6dnR9bmV0cndfY2lua2VlcCIpICB8bGV0ICZsOmNpbiAgICA9IHthOnZ0fW5ldHJ3X2NpbmtlZXAgICAgIHx1bmxldCB7YTp2dH1uZXRyd19jaW5rZWVwICB8ZW5kaWYKICAgaWYgZXhpc3RzKCJ7YTp2dH1uZXRyd19jaW5va2VlcCIpIHxsZXQgJmw6Y2lubyAgID0ge2E6dnR9bmV0cndfY2lub2tlZXAgICAgfHVubGV0IHthOnZ0fW5ldHJ3X2Npbm9rZWVwIHxlbmRpZgpAQCAtNjEyLDcgKzYyNCw3IEBACiAgICAgIiB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkgYXMgcmV0dXJuZWQgYnkgZ2V0Y3dkKCkuCiAgICAgbGV0ICZsOmRpcmVjdG9yeSAgID0gZ2V0Y3dkKCkKICAgICBzaWwhIGxldCAmbDpzd2YgPSB7YTp2dH1uZXRyd19zd2ZrZWVwCi0gICAgc2V0bG9jYWwgZGlyZWN0b3J5PQorICAgIHNldGwgZGlyZWN0b3J5PQogICAgIHVubGV0IHthOnZ0fW5ldHJ3X3N3ZmtlZXAKICAgIGVsc2VpZiAmbDpzd2YgIT0ge2E6dnR9bmV0cndfc3dma2VlcAogICAgICIgZm9sbG93aW5nIGxpbmUgY2F1c2VzIGEgUHJlc3MgRU5URVIgaW4gd2luZG93cyAtLSBjYW4ndCBzZWVtIHRvIHdvcmsgYXJvdW5kIGl0ISEhCkBAIC02MzYsNTUgKzY0OCw1NDkgQEAKICAgZW5kaWYKIAogIiAgY2FsbCBEZWNobygiKE5ldHJ3T3B0aW9uUmVzdG9yZSkgZzpuZXRyd19rZWVwZGlyPSIuZzpuZXRyd19rZWVwZGlyLiI6IGdldGN3ZDwiLmdldGN3ZCgpLiI+IGFjZD0iLiZhY2QpCi0iICBjYWxsIERlY2hvKCIoTmV0cndPcHRpb25SZXN0b3JlKSBmbz0iLiZmby4oZXhpc3RzKCImYWNkIik/ICIgYWNkPSIuJmFjZCA6ICIgYWNkIGRvZXNuJ3QgZXhpc3QiKSkKKyIgIGNhbGwgRGVjaG8oIihOZXRyd09wdGlvblJlc3RvcmUpIGZvPSIuJmZvLihleGlzdHMoIithY2QiKT8gIiBhY2Q9Ii4mYWNkIDogIiBhY2QgZG9lc24ndCBleGlzdCIpKQogIiAgY2FsbCBEZWNobygiKE5ldHJ3T3B0aW9uUmVzdG9yZSkgcm89Ii4mbDpyby4iIG1hPSIuJmw6bWEuIiBtb2Q9Ii4mbDptb2QuIiB3cmFwPSIuJmw6d3JhcC4iIChmaWxlbmFtZTwiLmV4cGFuZCgiJSIpLiI+IHdpbiMiLndpbm5yKCkuIiBmdDwiLiZmdC4iPikiKQogIiAgY2FsbCBEZWNobygiKE5ldHJ3T3B0aW9uUmVzdG9yZSkgZGlmZj0iLiZsOmRpZmYuIiB3aW4jIi53aW5ucigpLiIgdzpuZXRyd19kaWZma2VlcD0iLihleGlzdHMoInc6bmV0cndfZGlmZmtlZXAiKT8gdzpuZXRyd19kaWZma2VlcCA6ICJkb2Vzbid0IGV4aXN0IikpCiAiICBjYWxsIERlY2hvKCIoTmV0cndPcHRpb25SZXN0b3JlKSB0cz0iLiZsOnRzKQorICAiIE1vdmVkIHRoZSBmaWxldHlwZSBkZXRlY3QgaGVyZSBmcm9tIE5ldHJ3R2V0RmlsZSgpIGJlY2F1c2UgcmVtb3RlIGZpbGVzCisgICIgd2VyZSBoYXZpbmcgdGhlaXIgZmlsZXR5cGUgZGV0ZWN0LWdlbmVyYXRlZCBzZXR0aW5ncyBvdmVyd3JpdHRlbiBieQorICAiIE5ldHJ3T3B0aW9uUmVzdG9yZS4KKyAgaWYgJmZ0ICE9ICJuZXRydyIKKyIgICBjYWxsIERlY2hvKCIoTmV0cndPcHRpb25SZXN0b3JlKSBmaWxldHlwZSBkZXRlY3QgIChmdD0iLiZmdC4iKSIpCisgICBmaWxldHlwZSBkZXRlY3QKKyAgZW5kaWYKICIgIGNhbGwgRHJldCgiczpOZXRyd09wdGlvblJlc3RvcmUgOiB0YWIjIi50YWJwYWdlbnIoKS4iIHdpbiMiLndpbm5yKCkuIiBidWYjIi5idWZucigiJSIpLiI8Ii5idWZuYW1lKCIlIikuIj4gbW9kaWZpZWQ9Ii4mbW9kaWZpZWQuIiBtb2RpZmlhYmxlPSIuJm1vZGlmaWFibGUuIiByZWFkb25seT0iLiZyZWFkb25seSkKIGVuZGZ1bgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIiBzOk5ldHJ3U2FmZU9wdGlvbnM6IHNldHMgb3B0aW9ucyB0byBoZWxwIG5ldHJ3IGRvIGl0cyBqb2Ige3t7MgorIiAgICAgICAgICAgICAgICAgICAgIFVzZSAgczpOZXRyd1NhdmVPcHRpb25zKCkgdG8gc2F2ZSB1c2VyIHNldHRpbmdzCisiICAgICAgICAgICAgICAgICAgICAgVXNlICBzOk5ldHJ3T3B0aW9uUmVzdG9yZSgpIHRvIHJlc3RvcmUgdXNlciBzZXR0aW5ncwogZnVuISBzOk5ldHJ3U2FmZU9wdGlvbnMoKQogIiAgY2FsbCBEZnVuYygiczpOZXRyd1NhZmVPcHRpb25zKCkgd2luIyIud2lubnIoKS4iIGJ1ZiMiLmJ1Zm5yKCIlIikuIjwiLmJ1Zm5hbWUoYnVmbnIoIiUiKSkuIj4gd2lubnIoJCk9Ii53aW5ucigiJCIpKQogIiAgY2FsbCBEZWNobygid2luIyIud2lubnIoKS4iJ3MgZnQ9Ii4mZnQpCi0gIGlmIGV4aXN0cygiJmFjZCIpIHwgc2V0bG9jYWwgbm9hY2QgfCBlbmRpZgotICBzZXRsb2NhbCBub2FpCi0gIHNldGxvY2FsIG5vYXcKLSAgc2V0bG9jYWwgbm9ib21iCi0gIHNldGxvY2FsIG5vY2kKLSAgc2V0bG9jYWwgbm9jaW4KLSAgc2V0bG9jYWwgY2lubz0KLSAgc2V0bG9jYWwgY29tPQotICBzZXRsb2NhbCBjcG8tPWEKLSAgc2V0bG9jYWwgY3BvLT1BCi0gIHNldGxvY2FsIGZvPW5yb3FsMgotICBzZXRsb2NhbCBub2hpZAotICBzZXRsb2NhbCBub2ltCi0gIHNldGxvY2FsIGlzays9QCBpc2srPSogaXNrKz0vCi0gIHNldGxvY2FsIG1hZ2ljCi0gIHNldGxvY2FsIHJlcG9ydD0xMDAwMAotICBzZXRsb2NhbCBzZWw9aW5jbHVzaXZlCi0gIHNldGxvY2FsIG5vc3BlbGwKLSAgc2V0bG9jYWwgdHc9MAotICBzZXRsb2NhbCB3aWc9CisgIGlmIGV4aXN0cygiK2FjZCIpIHwgc2V0bCBub2FjZCB8IGVuZGlmCisgIHNldGwgbm9haQorICBzZXRsIG5vYXcKKyAgc2V0bCBub2JvbWIKKyAgc2V0bCBub2NpCisgIHNldGwgbm9jaW4KKyAgaWYgZzpuZXRyd19saXN0c3R5bGUgPT0gczpUUkVFTElTVAorICAgc2V0bCBiaD1oaWRlCisgIGVuZGlmCisgIHNldGwgY2lubz0KKyAgc2V0bCBjb209CisgIHNldGwgY3BvLT1hCisgIHNldGwgY3BvLT1BCisgIHNldGwgZm89bnJvcWwyCisgICBzZXRsIG5vaGlkCisgIHNldGwgbm9pbQorICBzZXRsIGlzays9QCBpc2srPSogaXNrKz0vCisgIHNldGwgbWFnaWMKKyAgc2V0bCByZXBvcnQ9MTAwMDAKKyAgc2V0bCBzZWw9aW5jbHVzaXZlCisgIHNldGwgbm9zcGVsbAorICBzZXRsIHR3PTAKKyAgc2V0bCB3aWc9CisgIHNldCAgY2VkaXQmCiAgIGlmIGc6bmV0cndfdXNlX25vc3dmICYmIGhhcygid2luMzIiKSAmJiAhaGFzKCJ3aW45NSIpCi0gICBzZXRsb2NhbCBub3N3ZgorICAgc2V0bCBub3N3ZgogICBlbmRpZgogICBjYWxsIHM6TmV0cndDdXJzb3IoKQogCiAgICIgYWxsb3cgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgc2FmZSBvcHRpb25zCiAiICBjYWxsIERlY2hvKCJmdDwiLiZmdC4iPiBlaT0iLiZlaSkKICAgaWYgJmZ0ID09ICJuZXRydyIKLSIgICBjYWxsIERlY2hvKCJkbyBhbnkgbmV0cncgRmlsZVR5cGUgYXV0b2NtZHMiKQorIiAgIGNhbGwgRGVjaG8oImRvIGFueSBuZXRydyBGaWxlVHlwZSBhdXRvY21kcyAoZG9hdSBGaWxlVHlwZSBuZXRydykiKQogICAgc2lsISBrZWVwYWx0IGtlZXBqIGRvYXUgRmlsZVR5cGUgbmV0cncKICAgZW5kaWYKIAotIiAgY2FsbCBEZWNobygiZm89Ii4mZm8uKGV4aXN0cygiJmFjZCIpPyAiIGFjZD0iLiZhY2QgOiAiIGFjZCBkb2Vzbid0IGV4aXN0IikpCisiICBjYWxsIERlY2hvKCJmbz0iLiZmby4oZXhpc3RzKCIrYWNkIik/ICIgYWNkPSIuJmFjZCA6ICIgYWNkIGRvZXNuJ3QgZXhpc3QiKS4iIGJoPSIuJmw6YmgpCiAiICBjYWxsIERyZXQoInM6TmV0cndTYWZlT3B0aW9ucyIpCiBlbmRmdW4KIAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgbmV0cncjRXhwbG9yZTogbGF1bmNoIHRoZSBsb2NhbCBicm93c2VyIGluIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZmlsZSB7e3syCisiICAgICAgICAgIGluZHg6ICA9PSAtMTogTmV4cGxvcmUKKyIgICAgICAgICAgICAgICAgID09IC0yOiBQZXhwbG9yZQorIiAgICAgICAgICAgICAgICAgPT0gICs6IHRoaXMgaXMgb3ZlcmxvYWRlZDoKKyIgICAgICAgICAgICAgICAgICAgICAgKiBJZiBOZXhwbG9yZS9QZXhwbG9yZSBpcyBpbiB1c2UsIHRoZW4gdGhpcyByZWZlcnMgdG8gdGhlCisiICAgICAgICAgICAgICAgICAgICAgICAgaW5keCd0aCBpdGVtIGluIHRoZSB3Om5ldHJ3X2V4cGxvcmVfbGlzdFtdIG9mIGl0ZW1zIHdoaWNoCisiICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCB0aGUgKi9wYXR0ZXJuICoqL3BhdHRlcm4gKi8vcGF0dGVybiAqKi8vcGF0dGVybgorIiAgICAgICAgICAgICAgICAgICAgICAqIElmIEhleHBsb3JlIG9yIFZleHBsb3JlLCB0aGVuIHRoaXMgd2lsbCBvdmVycmlkZQorIiAgICAgICAgICAgICAgICAgICAgICAgIGc6bmV0cndfd2luc2l6ZSB0byBzcGVjaWZ5IHRoZSBxdHkgb2Ygcm93cyBvciBjb2x1bW5zIHRoZQorIiAgICAgICAgICAgICAgICAgICAgICAgIG5ld2x5IHNwbGl0IHdpbmRvdyBzaG91bGQgaGF2ZS4KKyIgICAgICAgICAgZG9zcGxpdD09MDogdGhlIHdpbmRvdyB3aWxsIGJlIHNwbGl0IGlmZiB0aGUgY3VycmVudCBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkCisiICAgICAgICAgIGRvc3BsaXQ9PTE6IHRoZSB3aW5kb3cgd2lsbCBiZSBzcGxpdCBiZWZvcmUgcnVubmluZyB0aGUgbG9jYWwgYnJvd3NlcgorIiAgICAgICAgICBzdHlsZSA9PSAwOiBFeHBsb3JlICAgICBzdHlsZSA9PSAxOiBFeHBsb3JlIQorIiAgICAgICAgICAgICAgICA9PSAyOiBIZXhwbG9yZSAgICBzdHlsZSA9PSAzOiBIZXhwbG9yZSEKKyIgICAgICAgICAgICAgICAgPT0gNDogVmV4cGxvcmUgICAgc3R5bGUgPT0gNTogVmV4cGxvcmUhCisiICAgICAgICAgICAgICAgID09IDY6IFRleHBsb3JlCitmdW4hIG5ldHJ3I0V4cGxvcmUoaW5keCxkb3NwbGl0LHN0eWxlLC4uLikKKyIgIGNhbGwgRGZ1bmMoIm5ldHJ3I0V4cGxvcmUoaW5keD0iLmE6aW5keC4iIGRvc3BsaXQ9Ii5hOmRvc3BsaXQuIiBzdHlsZT0iLmE6c3R5bGUuIixhOjE8Ii5hOjEuIj4pICZtb2RpZmllZD0iLiZtb2RpZmllZC4iIG1vZGlmaWFibGU9Ii4mbW9kaWZpYWJsZS4iIGE6MD0iLmE6MC4iIHdpbiMiLndpbm5yKCkuIiBidWYjIi5idWZucigiJSIpKQorICBpZiAhZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpCisgICBsZXQgYjpuZXRyd19jdXJkaXI9IGdldGN3ZCgpCisiICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIHNldCBiOm5ldHJ3X2N1cmRpcjwiLmI6bmV0cndfY3VyZGlyLiI+ICh1c2VkIGdldGN3ZCkiKQorICBlbmRpZgorICBsZXQgY3VyZGlyICAgICA9IHNpbXBsaWZ5KGI6bmV0cndfY3VyZGlyKQorICBsZXQgY3VyZmlsZWRpciA9IHN1YnN0aXR1dGUoZXhwYW5kKCIlOnAiKSwnXlwoLipbL1xcXVwpW14vXFxdKiQnLCdcMScsJ2UnKQorIiAgY2FsbCBEZWNobygiKEV4cGxvcmUpIGN1cmRpcjwiLmN1cmRpci4iPiAgY3VyZmlsZWRpcjwiLmN1cmZpbGVkaXIuIj4iKQorCisgICIgc2F2ZSByZWdpc3RlcnMKKyAgc2lsISBsZXQga2VlcHJlZ3N0YXIgPSBAKgorICBzaWwhIGxldCBrZWVwcmVncGx1cyA9IEArCisgIHNpbCEgbGV0IGtlZXByZWdzbGFzaD0gQC8KKworICAiIGlmIGRvc3BsaXQgb3IgZmlsZSBoYXMgYmVlbiBtb2RpZmllZAorICBpZiBhOmRvc3BsaXQgfHwgJm1vZGlmaWVkIHx8IGE6c3R5bGUgPT0gNgorIiAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSBjYXNlIGRvc3BsaXQ9Ii5hOmRvc3BsaXQuIiBtb2RpZmllZD0iLiZtb2RpZmllZC4iIGE6c3R5bGU9Ii5hOnN0eWxlLiI6IGRvc3BsaXQgb3IgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCIpCisgICBjYWxsIHM6U2F2ZVdpblZhcnMoKQorICAgbGV0IHdpbnN6PSBnOm5ldHJ3X3dpbnNpemUKKyAgIGlmIGE6aW5keCA+IDAKKyAgICBsZXQgd2luc3o9IGE6aW5keAorICAgZW5kaWYKKworICAgaWYgYTpzdHlsZSA9PSAwICAgICAgIiBFeHBsb3JlLCBTZXhwbG9yZQorIiAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgc3R5bGU9MDogRXhwbG9yZSBvciBTZXhwbG9yZSIpCisgICAgbGV0IHdpbnN6PSAod2luc3ogPiAwKT8gKHdpbnN6KndpbmhlaWdodCgwKSkvMTAwIDogLXdpbnN6CisgICAgZXhlIHdpbnN6LiJ3aW5jbWQgcyIKKworICAgZWxzZWlmIGE6c3R5bGUgPT0gMSAgIkV4cGxvcmUhLCBTZXhwbG9yZSEKKyIgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIHN0eWxlPTE6IEV4cGxvcmUhIG9yIFNleHBsb3JlISIpCisgICAgbGV0IHdpbnN6PSAod2luc3ogPiAwKT8gKHdpbnN6KndpbndpZHRoKDApKS8xMDAgOiAtd2luc3oKKyAgICBleGUgImtlZXBhbHQgIi53aW5zei4id2luY21kIHYiCisKKyAgIGVsc2VpZiBhOnN0eWxlID09IDIgICIgSGV4cGxvcmUKKyIgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIHN0eWxlPTI6IEhleHBsb3JlIikKKyAgICBsZXQgd2luc3o9ICh3aW5zeiA+IDApPyAod2luc3oqd2luaGVpZ2h0KDApKS8xMDAgOiAtd2luc3oKKyAgICBleGUgImtlZXBhbHQgYmVsICIud2luc3ouIndpbmNtZCBzIgorCisgICBlbHNlaWYgYTpzdHlsZSA9PSAzICAiIEhleHBsb3JlIQorIiAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgc3R5bGU9MzogSGV4cGxvcmUhIikKKyAgICBsZXQgd2luc3o9ICh3aW5zeiA+IDApPyAod2luc3oqd2luaGVpZ2h0KDApKS8xMDAgOiAtd2luc3oKKyAgICBleGUgImtlZXBhbHQgYWJvICIud2luc3ouIndpbmNtZCBzIgorCisgICBlbHNlaWYgYTpzdHlsZSA9PSA0ICAiIFZleHBsb3JlCisiICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSBzdHlsZT00OiBWZXhwbG9yZSIpCisgICAgbGV0IHdpbnN6PSAod2luc3ogPiAwKT8gKHdpbnN6KndpbndpZHRoKDApKS8xMDAgOiAtd2luc3oKKyAgICBleGUgImtlZXBhbHQgbGVmdGEgIi53aW5zei4id2luY21kIHYiCisKKyAgIGVsc2VpZiBhOnN0eWxlID09IDUgICIgVmV4cGxvcmUhCisiICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSBzdHlsZT01OiBWZXhwbG9yZSEiKQorICAgIGxldCB3aW5zej0gKHdpbnN6ID4gMCk/ICh3aW5zeip3aW53aWR0aCgwKSkvMTAwIDogLXdpbnN6CisgICAgZXhlICJrZWVwYWx0IHJpZ2h0YiAiLndpbnN6LiJ3aW5jbWQgdiIKKworICAgZWxzZWlmIGE6c3R5bGUgPT0gNiAgIiBUZXhwbG9yZQorICAgIGNhbGwgczpTYXZlQnVmVmFycygpCisiICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSBzdHlsZSAgPSA2OiBUZXhwbG9yZSIpCisgICAgZXhlICJrZWVwYWx0IHRhYm5ldyAiLmZuYW1lZXNjYXBlKGN1cmRpcikKKyAgICBjYWxsIHM6UmVzdG9yZUJ1ZlZhcnMoKQorICAgZW5kaWYKKyAgIGNhbGwgczpSZXN0b3JlV2luVmFycygpCisiICBlbHNlICIgRGVjaG8KKyIgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgY2FzZSBhOmRvc3BsaXQ9Ii5hOmRvc3BsaXQuIiBBTkQgbW9kaWZpZWQ9Ii4mbW9kaWZpZWQuIiBBTkQgYTpzdHlsZT0iLmE6c3R5bGUuIiBpcyBub3QgNiIpCisgIGVuZGlmCisgIGtlZXBqIG5vcm0hIDAKKworICBpZiBhOjAgPiAwCisiICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIGNhc2UgW2E6MD0iLmE6MC4iXSA+IDAiKQorICAgaWYgYToxID1+ICdeXH4nICYmIChoYXMoInVuaXgiKSB8fCAoZXhpc3RzKCJnOm5ldHJ3X2N5Z3dpbiIpICYmIGc6bmV0cndfY3lnd2luKSkKKyIgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uY2FzZSBhOjE8Ii5hOjEuIj46IHN0YXJ0cyB3aXRoIH4gYW5kIHVuaXggb3IgY3lnd2luIikKKyAgICBsZXQgZGlybmFtZT0gc2ltcGxpZnkoc3Vic3RpdHV0ZShhOjEsJ1x+JyxleHBhbmQoIiRIT01FIiksJycpKQorIiAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi51c2luZyBkaXJuYW1lPCIuZGlybmFtZS4iPiAgKGNhc2U6IH4gJiYgdW5peHx8Y3lnd2luKSIpCisgICBlbHNlaWYgYToxID09ICcuJworIiAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi5jYXNlIGE6MTwiLmE6MS4iPjogbWF0Y2hlcyAuIikKKyAgICBsZXQgZGlybmFtZT0gc2ltcGxpZnkoZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpPyBiOm5ldHJ3X2N1cmRpciA6IGdldGN3ZCgpKQorICAgIGlmIGRpcm5hbWUgIX4gJy8kJworICAgICBsZXQgZGlybmFtZT0gZGlybmFtZS4iLyIKKyAgICBlbmRpZgorIiAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi51c2luZyBkaXJuYW1lPCIuZGlybmFtZS4iPiAgKGNhc2U6ICIuKGV4aXN0cygiYjpuZXRyd19jdXJkaXIiKT8gImI6bmV0cndfY3VyZGlyIiA6ICJnZXRjd2QoKSIpLiIpIikKKyAgIGVsc2VpZiBhOjEgPX4gJ1wkJworIiAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi5jYXNlIGE6MTwiLmE6MS4iPjogbWF0Y2hlcyBlbmRpbmcgJCIpCisgICAgbGV0IGRpcm5hbWU9IHNpbXBsaWZ5KGV4cGFuZChhOjEpKQorIiAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi51c2luZyB1c2VyLXNwZWNpZmllZCBkaXJuYW1lPCIuZGlybmFtZS4iPiB3aXRoICRlbnYtdmFyIikKKyAgIGVsc2VpZiBhOjEgIX4gJ15cKlx7MSwyfS8nCisiICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLmNhc2UgYToxPCIuYToxLiI+OiBvdGhlciwgbm90IHBhdHRlcm4gb3IgZmlsZXBhdHRlcm4iKQorICAgIGxldCBkaXJuYW1lPSBzaW1wbGlmeShhOjEpCisiICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLnVzaW5nIHVzZXItc3BlY2lmaWVkIGRpcm5hbWU8Ii5kaXJuYW1lLiI+IikKKyAgIGVsc2UKKyIgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uY2FzZSBhOjE6IHBhdHRlcm4gb3IgZmlsZXBhdHRlcm4iKQorICAgIGxldCBkaXJuYW1lPSBhOjEKKyAgIGVuZGlmCisgIGVsc2UKKyAgICIgY2xlYXIgZXhwbG9yZQorIiAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSBjYXNlIGE6MD0iLmE6MC4iOiBjbGVhcmluZyBFeHBsb3JlIGxpc3QiKQorICAgY2FsbCBzOk5ldHJ3Q2xlYXJFeHBsb3JlKCkKKyIgICBjYWxsIERyZXQoIm5ldHJ3I0V4cGxvcmUgOiBjbGVhcmVkIGxpc3QiKQorICAgcmV0dXJuCisgIGVuZGlmCisKKyIgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSBkaXJuYW1lPCIuZGlybmFtZS4iPiIpCisgIGlmIGRpcm5hbWUgPX4gJ1wuXC4vXD0kJworICAgbGV0IGRpcm5hbWU9IHNpbXBsaWZ5KGZuYW1lbW9kaWZ5KGRpcm5hbWUsJzpwOmgnKSkKKyAgZWxzZWlmIGRpcm5hbWUgPX4gJ1wuXC4nIHx8IGRpcm5hbWUgPT0gJy4nCisgICBsZXQgZGlybmFtZT0gc2ltcGxpZnkoZm5hbWVtb2RpZnkoZGlybmFtZSwnOnAnKSkKKyAgZW5kaWYKKyIgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSBkaXJuYW1lPCIuZGlybmFtZS4iPiAgKGFmdGVyIHNpbXBsaWZ5KSIpCisKKyAgaWYgZGlybmFtZSA9fiAnXlwqLy8nCisgICAiIHN0YXJwYXQ9MTogRXhwbG9yZSAqLy9wYXR0ZXJuICAgKGN1cnJlbnQgZGlyZWN0b3J5IG9ubHkgc2VhcmNoIGZvciBmaWxlcyBjb250YWluaW5nIHBhdHRlcm4pCisiICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIGNhc2UgRXhwbG9yZSAqLy9wYXR0ZXJuIikKKyAgIGxldCBwYXR0ZXJuPSBzdWJzdGl0dXRlKGRpcm5hbWUsJ15cKi8vXCguKlwpJCcsJ1wxJywnJykKKyAgIGxldCBzdGFycGF0PSAxCisiICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uRXhwbG9yZSAqLy9wYXQ6IChzdGFycGF0PSIuc3RhcnBhdC4iKSBkaXJuYW1lPCIuZGlybmFtZS4iPiAtPiBwYXR0ZXJuPCIucGF0dGVybi4iPiIpCisgICBpZiAmaGxzIHwgbGV0IGtlZXByZWdzbGFzaD0gczpFeHBsb3JlUGF0SGxzKHBhdHRlcm4pIHwgZW5kaWYKKworICBlbHNlaWYgZGlybmFtZSA9fiAnXlwqXCovLycKKyAgICIgc3RhcnBhdD0yOiBFeHBsb3JlICoqLy9wYXR0ZXJuICAocmVjdXJzaXZlIGRlc2NlbnQgc2VhcmNoIGZvciBmaWxlcyBjb250YWluaW5nIHBhdHRlcm4pCisiICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIGNhc2UgRXhwbG9yZSAqKi8vcGF0dGVybiIpCisgICBsZXQgcGF0dGVybj0gc3Vic3RpdHV0ZShkaXJuYW1lLCdeXCpcKi8vJywnJywnJykKKyAgIGxldCBzdGFycGF0PSAyCisiICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uRXhwbG9yZSAqKi8vcGF0OiAoc3RhcnBhdD0iLnN0YXJwYXQuIikgZGlybmFtZTwiLmRpcm5hbWUuIj4gLT4gcGF0dGVybjwiLnBhdHRlcm4uIj4iKQorCisgIGVsc2VpZiBkaXJuYW1lID1+ICcvXCpcKi8nCisgICAiIGhhbmRsZSAuLi4vKiovLi4uL2ZpbGVwYXQKKyIgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgY2FzZSBFeHBsb3JlIC4uLi8qKi8uLi4vZmlsZXBhdCIpCisgICBsZXQgcHJlZml4ZGlyPSBzdWJzdGl0dXRlKGRpcm5hbWUsJ15cKC5cey19XClcKlwqLiokJywnXDEnLCcnKQorICAgaWYgcHJlZml4ZGlyID1+ICdeLycgfHwgKHByZWZpeGRpciA9fiAnXlxhOi8nICYmIChoYXMoIndpbjMyIikgfHwgaGFzKCJ3aW45NSIpIHx8IGhhcygid2luNjQiKSB8fCBoYXMoIndpbjE2IikpKQorICAgIGxldCBiOm5ldHJ3X2N1cmRpciA9IHByZWZpeGRpcgorICAgZWxzZQorICAgIGxldCBiOm5ldHJ3X2N1cmRpcj0gZ2V0Y3dkKCkuJy8nLnByZWZpeGRpcgorICAgZW5kaWYKKyAgIGxldCBkaXJuYW1lPSBzdWJzdGl0dXRlKGRpcm5hbWUsJ14uXHstfVwoXCpcKi8uKlwpJCcsJ1wxJywnJykKKyAgIGxldCBzdGFycGF0PSA0CisiICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4ucHdkPCIuZ2V0Y3dkKCkuIj4gZGlybmFtZTwiLmRpcm5hbWUuIj4iKQorIiAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLmNhc2UgRXhwbG9yZSAuLi8qKi8uLi9maWxlcGF0IChzdGFycGF0PSIuc3RhcnBhdC4iKSIpCisKKyAgZWxzZWlmIGRpcm5hbWUgPX4gJ15cKi8nCisgICAiIHN0YXJwYXQ9MzogRXhwbG9yZSAqL2ZpbGVwYXQgICAoc2VhcmNoIGluIGN1cnJlbnQgZGlyZWN0b3J5IGZvciBmaWxlbmFtZXMgbWF0Y2hpbmcgZmlsZXBhdCkKKyAgIGxldCBzdGFycGF0PSAzCisiICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIGNhc2UgRXhwbG9yZSAqL2ZpbGVwYXQgKHN0YXJwYXQ9Ii5zdGFycGF0LiIpIikKKworICBlbHNlaWYgZGlybmFtZT1+ICdeXCpcKi8nCisgICAiIHN0YXJwYXQ9NDogRXhwbG9yZSAqKi9maWxlcGF0ICAocmVjdXJzaXZlIGRlc2NlbnQgc2VhcmNoIGZvciBmaWxlbmFtZXMgbWF0Y2hpbmcgZmlsZXBhdCkKKyAgIGxldCBzdGFycGF0PSA0CisiICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIGNhc2UgRXhwbG9yZSAqKi9maWxlcGF0IChzdGFycGF0PSIuc3RhcnBhdC4iKSIpCisKKyAgZWxzZQorICAgbGV0IHN0YXJwYXQ9IDAKKyIgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgZGVmYXVsdCBjYXNlOiBzdGFycGF0PSIuc3RhcnBhdCkKKyAgZW5kaWYKKworICBpZiBzdGFycGF0ID09IDAgJiYgYTppbmR4ID49IDAKKyAgICIgW0V4cGxvcmUgSGV4cGxvcmUgVmV4cGxvcmUgU2V4cGxvcmVdIFtkaXJuYW1lXQorIiAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSBjYXNlIHN0YXJwYXQ9PTAgJiYgYTppbmR4PSIuYTppbmR4LiI6IGRpcm5hbWU8Ii5kaXJuYW1lLiI+IEV4cGxvcmUgSGV4cGxvcmUgVmV4cGxvcmUgU2V4cGxvcmUiKQorICAgaWYgZGlybmFtZSA9PSAiIgorICAgIGxldCBkaXJuYW1lPSBjdXJmaWxlZGlyCisiICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLmVtcHR5IGRpcm5hbWUsIHVzaW5nIGN1cnJlbnQgZmlsZSdzIGRpcmVjdG9yeTwiLmRpcm5hbWUuIj4iKQorICAgZW5kaWYKKyAgIGlmIGRpcm5hbWUgPX4gJ15zY3A6JyB8fCBkaXJuYW1lID1+ICdeZnRwOicKKyIgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uY2FsbGluZyBOZXRyd0Jyb3dzZSgwLGRpcm5hbWU8Ii5kaXJuYW1lLiI+KSIpCisgICAgY2FsbCBzOk5ldHJ3QnJvd3NlKDAsZGlybmFtZSkKKyAgIGVsc2UKKyAgICBpZiBkaXJuYW1lID09ICIifGxldCBkaXJuYW1lPSBnZXRjd2QoKXxlbmRpZgorIiAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi5jYWxsaW5nIExvY2FsQnJvd3NlQ2hlY2soZGlybmFtZTwiLmRpcm5hbWUuIj4pIikKKyAgICBjYWxsIG5ldHJ3I0xvY2FsQnJvd3NlQ2hlY2soZGlybmFtZSkKKyIgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIHdpbiMiLndpbm5yKCkuIiBidWYjIi5idWZucigiJSIpLiIgbW9kaWZpZWQ9Ii4mbW9kaWZpZWQuIiBtb2RpZmlhYmxlPSIuJm1vZGlmaWFibGUuIiByZWFkb25seT0iLiZyZWFkb25seSkKKyAgIGVuZGlmCisgICBpZiBleGlzdHMoInc6bmV0cndfYmFubmVyY250IikKKyAgICAiIGRvbmUgdG8gaGFuZGxlIFAwOC1JbmdlbHJlc3QuIDpFeHBsb3JlIHdpbGwgX0Fsd2F5c18gZ28gdG8gdGhlIGxpbmUganVzdCBhZnRlciB0aGUgYmFubmVyLgorICAgICIgSWYgb25lIHdhbnRzIHRvIHJldHVybiB0aGUgc2FtZSBwbGFjZSBpbiB0aGUgbmV0cncgd2luZG93LCB1c2UgOlJleCBpbnN0ZWFkLgorICAgIGV4ZSB3Om5ldHJ3X2Jhbm5lcmNudAorICAgZW5kaWYKKworIiAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSBjdXJkaXI8Ii5jdXJkaXIuIj4iKQorICAgIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICIgSmFuIDI0LCAyMDEzOiBub3Qgc3VyZSB3aHkgdGhlIGZvbGxvd2luZyB3YXMgcHJlc2VudC4gIFNlZSBQMDgtSW5nZWxyZXN0CisiICAgaWYgaGFzKCJ3aW4zMiIpIHx8IGhhcygid2luOTUiKSB8fCBoYXMoIndpbjY0IikgfHwgaGFzKCJ3aW4xNiIpCisiICAgIGtlZXBqIGNhbGwgc2VhcmNoKCdcPCcuc3Vic3RpdHV0ZShjdXJkaXIsJ14uKlsvXFxdJywnJywnZScpLidcPicsJ2NXJykKKyIgICBlbHNlCisiICAgIGtlZXBqIGNhbGwgc2VhcmNoKCdcPCcuc3Vic3RpdHV0ZShjdXJkaXIsJ14uKi8nLCcnLCdlJykuJ1w+JywnY1cnKQorIiAgIGVuZGlmCisgICAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICIgc3RhcnBhdD0xOiBFeHBsb3JlICovL3BhdHRlcm4gIChjdXJyZW50IGRpcmVjdG9yeSBvbmx5IHNlYXJjaCBmb3IgZmlsZXMgY29udGFpbmluZyBwYXR0ZXJuKQorICAiIHN0YXJwYXQ9MjogRXhwbG9yZSAqKi8vcGF0dGVybiAocmVjdXJzaXZlIGRlc2NlbnQgc2VhcmNoIGZvciBmaWxlcyBjb250YWluaW5nIHBhdHRlcm4pCisgICIgc3RhcnBhdD0zOiBFeHBsb3JlICovZmlsZXBhdCAgIChzZWFyY2ggaW4gY3VycmVudCBkaXJlY3RvcnkgZm9yIGZpbGVuYW1lcyBtYXRjaGluZyBmaWxlcGF0KQorICAiIHN0YXJwYXQ9NDogRXhwbG9yZSAqKi9maWxlcGF0ICAocmVjdXJzaXZlIGRlc2NlbnQgc2VhcmNoIGZvciBmaWxlbmFtZXMgbWF0Y2hpbmcgZmlsZXBhdCkKKyAgZWxzZWlmIGE6aW5keCA8PSAwCisgICAiIE5leHBsb3JlLCBQZXhwbG9yZSwgRXhwbG9yZTogaGFuZGxlIHN0YXJwYXQKKyIgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgY2FzZSBhOmluZHg8PTA6IE5leHBsb3JlLCBQZXhwbG9yZSwgPHMtZG93bj4sIDxzLXVwPiBzdGFycGF0PSIuc3RhcnBhdC4iIGE6aW5keD0iLmE6aW5keCkKKyAgIGlmICFtYXBjaGVjaygiPHMtdXA+IiwibiIpICYmICFtYXBjaGVjaygiPHMtZG93bj4iLCJuIikgJiYgZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpCisiICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLnNldCB1cCA8cy11cD4gYW5kIDxzLWRvd24+IG1hcHMiKQorICAgIGxldCBzOmRpZHN0YXJzdGFyPSAxCisgICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPHMtdXA+CTpQZXhwbG9yZTxjcj4KKyAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8cy1kb3duPgk6TmV4cGxvcmU8Y3I+CisgICBlbmRpZgorCisgICBpZiBoYXMoInBhdGhfZXh0cmEiKQorIiAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi5zdGFycGF0PSIuc3RhcnBhdC4iOiBoYXMgK3BhdGhfZXh0cmEiKQorICAgIGlmICFleGlzdHMoInc6bmV0cndfZXhwbG9yZV9pbmR4IikKKyAgICAgbGV0IHc6bmV0cndfZXhwbG9yZV9pbmR4PSAwCisgICAgZW5kaWYKKworICAgIGxldCBpbmR4ID0gYTppbmR4CisiICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLnN0YXJwYXQ9Ii5zdGFycGF0LiI6IHNldCBpbmR4PSBbYTppbmR4PSIuaW5keC4iXSIpCisKKyAgICBpZiBpbmR4ID09IC0xCisgICAgICIgTmV4cGxvcmUKKyIgICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLmNhc2UgTmV4cGxvcmUgd2l0aCBzdGFycGF0PSIuc3RhcnBhdC4iOiAoaW5keD0iLmluZHguIikiKQorICAgICBpZiAhZXhpc3RzKCJ3Om5ldHJ3X2V4cGxvcmVfbGlzdCIpICIgc2FuaXR5IGNoZWNrCisgICAgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywidXNpbmcgTmV4cGxvcmUgb3IgPHMtZG93bj4gaW1wcm9wZXJseTsgc2VlIGhlbHAgZm9yIG5ldHJ3LXN0YXJzdGFyIiw0MCkKKyAgICAgIHNpbCEgbGV0IEAqID0ga2VlcHJlZ3N0YXIKKyAgICAgIHNpbCEgbGV0IEArID0ga2VlcHJlZ3N0YXIKKyAgICAgIHNpbCEgbGV0IEAvID0ga2VlcHJlZ3NsYXNoCisiICAgICAgY2FsbCBEcmV0KCJuZXRydyNFeHBsb3JlIikKKyAgICAgIHJldHVybgorICAgICBlbmRpZgorICAgICBsZXQgaW5keD0gdzpuZXRyd19leHBsb3JlX2luZHgKKyAgICAgaWYgaW5keCA8IDAgICAgICAgICAgICAgICAgICAgICAgICB8IGxldCBpbmR4PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbmRpZgorICAgICBpZiBpbmR4ID49IHc6bmV0cndfZXhwbG9yZV9saXN0bGVuIHwgbGV0IGluZHg9IHc6bmV0cndfZXhwbG9yZV9saXN0bGVuIC0gMSB8IGVuZGlmCisgICAgIGxldCBjdXJmaWxlPSB3Om5ldHJ3X2V4cGxvcmVfbGlzdFtpbmR4XQorIiAgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uLi5pbmR4PSIuaW5keC4iIGN1cmZpbGU8Ii5jdXJmaWxlLiI+IikKKyAgICAgd2hpbGUgaW5keCA8IHc6bmV0cndfZXhwbG9yZV9saXN0bGVuICYmIGN1cmZpbGUgPT0gdzpuZXRyd19leHBsb3JlX2xpc3RbaW5keF0KKyAgICAgIGxldCBpbmR4PSBpbmR4ICsgMQorIiAgICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLi4uaW5keD0iLmluZHguIiAoTmV4cGxvcmUgd2hpbGUgbG9vcCkiKQorICAgICBlbmR3aGlsZQorICAgICBpZiBpbmR4ID49IHc6bmV0cndfZXhwbG9yZV9saXN0bGVuIHwgbGV0IGluZHg9IHc6bmV0cndfZXhwbG9yZV9saXN0bGVuIC0gMSB8IGVuZGlmCisiICAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi4uLk5leHBsb3JlOiBpbmR4PSBbdzpuZXRyd19leHBsb3JlX2luZHg9Ii53Om5ldHJ3X2V4cGxvcmVfaW5keC4iXT0iLmluZHgpCisKKyAgICBlbHNlaWYgaW5keCA9PSAtMgorICAgICAiIFBleHBsb3JlCisiICAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgY2FzZSBQZXhwbG9yZSB3aXRoIHN0YXJwYXQ9Ii5zdGFycGF0LiI6IChpbmR4PSIuaW5keC4iKSIpCisgICAgIGlmICFleGlzdHMoInc6bmV0cndfZXhwbG9yZV9saXN0IikgIiBzYW5pdHkgY2hlY2sKKyAgICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJ1c2luZyBQZXhwbG9yZSBvciA8cy11cD4gaW1wcm9wZXJseTsgc2VlIGhlbHAgZm9yIG5ldHJ3LXN0YXJzdGFyIiw0MSkKKyAgICAgIHNpbCEgbGV0IEAqID0ga2VlcHJlZ3N0YXIKKyAgICAgIHNpbCEgbGV0IEArID0ga2VlcHJlZ3N0YXIKKyAgICAgIHNpbCEgbGV0IEAvID0ga2VlcHJlZ3NsYXNoCisiICAgICAgY2FsbCBEcmV0KCJuZXRydyNFeHBsb3JlIikKKyAgICAgIHJldHVybgorICAgICBlbmRpZgorICAgICBsZXQgaW5keD0gdzpuZXRyd19leHBsb3JlX2luZHgKKyAgICAgaWYgaW5keCA8IDAgICAgICAgICAgICAgICAgICAgICAgICB8IGxldCBpbmR4PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbmRpZgorICAgICBpZiBpbmR4ID49IHc6bmV0cndfZXhwbG9yZV9saXN0bGVuIHwgbGV0IGluZHg9IHc6bmV0cndfZXhwbG9yZV9saXN0bGVuIC0gMSB8IGVuZGlmCisgICAgIGxldCBjdXJmaWxlPSB3Om5ldHJ3X2V4cGxvcmVfbGlzdFtpbmR4XQorIiAgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uLi5pbmR4PSIuaW5keC4iIGN1cmZpbGU8Ii5jdXJmaWxlLiI+IikKKyAgICAgd2hpbGUgaW5keCA+PSAwICYmIGN1cmZpbGUgPT0gdzpuZXRyd19leHBsb3JlX2xpc3RbaW5keF0KKyAgICAgIGxldCBpbmR4PSBpbmR4IC0gMQorIiAgICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLi4uaW5keD0iLmluZHguIiAoUGV4cGxvcmUgd2hpbGUgbG9vcCkiKQorICAgICBlbmR3aGlsZQorICAgICBpZiBpbmR4IDwgMCAgICAgICAgICAgICAgICAgICAgICAgIHwgbGV0IGluZHg9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVuZGlmCisiICAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi4uLlBleHBsb3JlOiBpbmR4PSBbdzpuZXRyd19leHBsb3JlX2luZHg9Ii53Om5ldHJ3X2V4cGxvcmVfaW5keC4iXT0iLmluZHgpCisKKyAgICBlbHNlCisgICAgICIgRXhwbG9yZSAtLSBpbml0aWFsaXplCisgICAgICIgYnVpbGQgbGlzdCBvZiBmaWxlcyB0byBFeHBsb3JlIHdpdGggTmV4cGxvcmUvUGV4cGxvcmUKKyIgICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLnN0YXJwYXQ9Ii5zdGFycGF0LiI6IGNhc2UgRXhwbG9yZTogaW5pdGlhbGl6ZSAoaW5keD0iLmluZHguIikiKQorICAgICBrZWVwaiBrZWVwYWx0IGNhbGwgczpOZXRyd0NsZWFyRXhwbG9yZSgpCisgICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfaW5keD0gMAorICAgICBpZiAhZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpCisgICAgICBsZXQgYjpuZXRyd19jdXJkaXI9IGdldGN3ZCgpCisgICAgIGVuZGlmCisiICAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi4uLnN0YXJwYXQ9Ii5zdGFycGF0LiI6IGI6bmV0cndfY3VyZGlyPCIuYjpuZXRyd19jdXJkaXIuIj4iKQorCisgICAgICIgc3dpdGNoIG9uIHN0YXJwYXQgdG8gYnVpbGQgdGhlIHc6bmV0cndfZXhwbG9yZV9saXN0IG9mIGZpbGVzCisgICAgIGlmIHN0YXJwYXQgPT0gMQorICAgICAgIiBzdGFycGF0PTE6IEV4cGxvcmUgKi8vcGF0dGVybiAgKGN1cnJlbnQgZGlyZWN0b3J5IG9ubHkgc2VhcmNoIGZvciBmaWxlcyBjb250YWluaW5nIHBhdHRlcm4pCisiICAgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uY2FzZSBzdGFycGF0PSIuc3RhcnBhdC4iOiBidWlsZCAqLy9wYXR0ZXJuIGxpc3QgIChjdXJkaXItb25seSBzcmNoIGZvciBmaWxlcyBjb250YWluaW5nIHBhdHRlcm4pICAmaGxzPSIuJmhscykKKyIgICAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi4uLnBhdHRlcm48Ii5wYXR0ZXJuLiI+IikKKyAgICAgIHRyeQorICAgICAgIGV4ZSAia2VlcGogbm9hdXRvY21kIHZpbWdyZXAgLyIucGF0dGVybi4iL2dqICIuZm5hbWVlc2NhcGUoYjpuZXRyd19jdXJkaXIpLiIvKiIKKyAgICAgIGNhdGNoIC9eVmltXCUoKFxhXCspXClcPTpFNDgwLworICAgICAgIGtlZXBhbHQgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsIm5vIG1hdGNoIHdpdGggcGF0dGVybjwiLnBhdHRlcm4uIj4iLDc2KQorIiAgICAgICBjYWxsIERyZXQoIm5ldHJ3I0V4cGxvcmUgOiB1bmFibGUgdG8gZmluZCBwYXR0ZXJuPCIucGF0dGVybi4iPiIpCisgICAgICAgcmV0dXJuCisgICAgICBlbmR0cnkKKyAgICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfbGlzdCA9IHM6TmV0cndFeHBsb3JlTGlzdFVuaXEobWFwKGdldHFmbGlzdCgpLCdidWZuYW1lKHY6dmFsLmJ1Zm5yKScpKQorICAgICAgaWYgJmhscyB8IGxldCBrZWVwcmVnc2xhc2g9IHM6RXhwbG9yZVBhdEhscyhwYXR0ZXJuKSB8IGVuZGlmCisKKyAgICAgZWxzZWlmIHN0YXJwYXQgPT0gMgorICAgICAgIiBzdGFycGF0PTI6IEV4cGxvcmUgKiovL3BhdHRlcm4gKHJlY3Vyc2l2ZSBkZXNjZW50IHNlYXJjaCBmb3IgZmlsZXMgY29udGFpbmluZyBwYXR0ZXJuKQorIiAgICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLmNhc2Ugc3RhcnBhdD0iLnN0YXJwYXQuIjogYnVpbGQgKiovL3BhdHRlcm4gbGlzdCAgKHJlY3Vyc2l2ZSBkZXNjZW50IGZpbGVzIGNvbnRhaW5pbmcgcGF0dGVybikiKQorIiAgICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLi4ucGF0dGVybjwiLnBhdHRlcm4uIj4iKQorICAgICAgdHJ5CisgICAgICAgZXhlICJzaWwga2VlcGogbm9hdXRvY21kIGtlZXBhbHQgdmltZ3JlcCAvIi5wYXR0ZXJuLiIvZ2ogIi4iKiovKiIKKyAgICAgIGNhdGNoIC9eVmltXCUoKFxhXCspXClcPTpFNDgwLworICAgICAgIGtlZXBhbHQgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsJ25vIGZpbGVzIG1hdGNoZWQgcGF0dGVybjwnLnBhdHRlcm4uJz4nLDQ1KQorICAgICAgIGlmICZobHMgfCBsZXQga2VlcHJlZ3NsYXNoPSBzOkV4cGxvcmVQYXRIbHMocGF0dGVybikgfCBlbmRpZgorICAgICAgIHNpbCEgbGV0IEAqID0ga2VlcHJlZ3N0YXIKKyAgICAgICBzaWwhIGxldCBAKyA9IGtlZXByZWdzdGFyCisgICAgICAgc2lsISBsZXQgQC8gPSBrZWVwcmVnc2xhc2gKKyIgICAgICAgY2FsbCBEcmV0KCJuZXRydyNFeHBsb3JlIDogbm8gZmlsZXMgbWF0Y2hlZCBwYXR0ZXJuIikKKyAgICAgICByZXR1cm4KKyAgICAgIGVuZHRyeQorICAgICAgbGV0IHM6bmV0cndfY3VyZGlyICAgICAgID0gYjpuZXRyd19jdXJkaXIKKyAgICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfbGlzdCA9IGdldHFmbGlzdCgpCisgICAgICBsZXQgdzpuZXRyd19leHBsb3JlX2xpc3QgPSBzOk5ldHJ3RXhwbG9yZUxpc3RVbmlxKG1hcCh3Om5ldHJ3X2V4cGxvcmVfbGlzdCwnczpuZXRyd19jdXJkaXIuIi8iLmJ1Zm5hbWUodjp2YWwuYnVmbnIpJykpCisgICAgICBpZiAmaGxzIHwgbGV0IGtlZXByZWdzbGFzaD0gczpFeHBsb3JlUGF0SGxzKHBhdHRlcm4pIHwgZW5kaWYKKworICAgICBlbHNlaWYgc3RhcnBhdCA9PSAzCisgICAgICAiIHN0YXJwYXQ9MzogRXhwbG9yZSAqL2ZpbGVwYXQgICAoc2VhcmNoIGluIGN1cnJlbnQgZGlyZWN0b3J5IGZvciBmaWxlbmFtZXMgbWF0Y2hpbmcgZmlsZXBhdCkKKyIgICAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi5jYXNlIHN0YXJwYXQ9Ii5zdGFycGF0LiI6IGJ1aWxkICovZmlsZXBhdCBsaXN0ICAoY3VyZGlyLW9ubHkgc3JjaCBmaWxlbmFtZXMgbWF0Y2hpbmcgZmlsZXBhdCkgICZobHM9Ii4maGxzKQorICAgICAgbGV0IGZpbGVwYXQ9IHN1YnN0aXR1dGUoZGlybmFtZSwnXlwqLycsJycsJycpCisgICAgICBsZXQgZmlsZXBhdD0gc3Vic3RpdHV0ZShmaWxlcGF0LCdeWyUjPF0nLCdcXCYnLCcnKQorIiAgICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLi4uYjpuZXRyd19jdXJkaXI8Ii5iOm5ldHJ3X2N1cmRpci4iPiIpCisiICAgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uLi5maWxlcGF0PCIuZmlsZXBhdC4iPiIpCisgICAgICBsZXQgdzpuZXRyd19leHBsb3JlX2xpc3Q9IHM6TmV0cndFeHBsb3JlTGlzdFVuaXEoc3BsaXQoZXhwYW5kKGI6bmV0cndfY3VyZGlyLiIvIi5maWxlcGF0KSwnXG4nKSkKKyAgICAgIGlmICZobHMgfCBsZXQga2VlcHJlZ3NsYXNoPSBzOkV4cGxvcmVQYXRIbHMoZmlsZXBhdCkgfCBlbmRpZgorCisgICAgIGVsc2VpZiBzdGFycGF0ID09IDQKKyAgICAgICIgc3RhcnBhdD00OiBFeHBsb3JlICoqL2ZpbGVwYXQgIChyZWN1cnNpdmUgZGVzY2VudCBzZWFyY2ggZm9yIGZpbGVuYW1lcyBtYXRjaGluZyBmaWxlcGF0KQorIiAgICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLmNhc2Ugc3RhcnBhdD0iLnN0YXJwYXQuIjogYnVpbGQgKiovZmlsZXBhdCBsaXN0ICAocmVjdXJzaXZlIGRlc2NlbnQgc3JjaCBmaWxlbmFtZXMgbWF0Y2hpbmcgZmlsZXBhdCkgICZobHM9Ii4maGxzKQorICAgICAgbGV0IHc6bmV0cndfZXhwbG9yZV9saXN0PSBzOk5ldHJ3RXhwbG9yZUxpc3RVbmlxKHNwbGl0KGV4cGFuZChiOm5ldHJ3X2N1cmRpci4iLyIuZGlybmFtZSksJ1xuJykpCisgICAgICBpZiAmaGxzIHwgbGV0IGtlZXByZWdzbGFzaD0gczpFeHBsb3JlUGF0SGxzKGRpcm5hbWUpIHwgZW5kaWYKKyAgICAgZW5kaWYgIiBzd2l0Y2ggb24gc3RhcnBhdCB0byBidWlsZCB3Om5ldHJ3X2V4cGxvcmVfbGlzdAorCisgICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbiA9IGxlbih3Om5ldHJ3X2V4cGxvcmVfbGlzdCkKKyIgICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLi4udzpuZXRyd19leHBsb3JlX2xpc3Q8Ii5zdHJpbmcodzpuZXRyd19leHBsb3JlX2xpc3QpLiI+IikKKyIgICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLi4udzpuZXRyd19leHBsb3JlX2xpc3RsZW49Ii53Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbikKKworICAgICBpZiB3Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbiA9PSAwIHx8ICh3Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbiA9PSAxICYmIHc6bmV0cndfZXhwbG9yZV9saXN0WzBdID1+ICdcKlwqXC8nKQorICAgICAga2VlcGFsdCBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywibm8gZmlsZXMgbWF0Y2hlZCIsNDIpCisgICAgICBzaWwhIGxldCBAKiA9IGtlZXByZWdzdGFyCisgICAgICBzaWwhIGxldCBAKyA9IGtlZXByZWdzdGFyCisgICAgICBzaWwhIGxldCBALyA9IGtlZXByZWdzbGFzaAorIiAgICAgIGNhbGwgRHJldCgibmV0cncjRXhwbG9yZSA6IG5vIGZpbGVzIG1hdGNoZWQiKQorICAgICAgcmV0dXJuCisgICAgIGVuZGlmCisgICAgZW5kaWYgICIgaWYgaW5keCAuLi4gZW5kaWYKKworICAgICIgTmV0cndTdGF0dXNMaW5lIHN1cHBvcnQgLSBmb3IgZXhwbG9yaW5nIHN1cHBvcnQKKyAgICBsZXQgdzpuZXRyd19leHBsb3JlX2luZHg9IGluZHgKKyIgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uLi53Om5ldHJ3X2V4cGxvcmVfbGlzdDwiLmpvaW4odzpuZXRyd19leHBsb3JlX2xpc3QsJywnKS4iPiBsZW49Ii53Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbikKKworICAgICIgd3JhcCB0aGUgaW5keCBhcm91bmQsIGJ1dCBpc3N1ZSBhIG5vdGUKKyAgICBpZiBpbmR4ID49IHc6bmV0cndfZXhwbG9yZV9saXN0bGVuIHx8IGluZHggPCAwCisiICAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgLi4uLndyYXAgaW5keCAoaW5keD0iLmluZHguIiBsaXN0bGVuPSIudzpuZXRyd19leHBsb3JlX2xpc3RsZW4uIikiKQorICAgICBsZXQgaW5keCAgICAgICAgICAgICAgICA9IChpbmR4IDwgMCk/ICggdzpuZXRyd19leHBsb3JlX2xpc3RsZW4gLSAxICkgOiAwCisgICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfaW5keD0gaW5keAorICAgICBrZWVwYWx0IGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpOT1RFLCJubyBtb3JlIGZpbGVzIG1hdGNoIEV4cGxvcmUgcGF0dGVybiIsNDMpCisgICAgZW5kaWYKKworICAgIGV4ZSAibGV0IGRpcmZpbGU9IHc6bmV0cndfZXhwbG9yZV9saXN0WyIuaW5keC4iXSIKKyIgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uLi5kaXJmaWxlPXc6bmV0cndfZXhwbG9yZV9saXN0W2luZHg9Ii5pbmR4LiJdPSA8Ii5kaXJmaWxlLiI+IikKKyAgICBsZXQgbmV3ZGlyPSBzdWJzdGl0dXRlKGRpcmZpbGUsJy9bXi9dKiQnLCcnLCdlJykKKyIgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4uLi5uZXdkaXI8Ii5uZXdkaXIuIj4iKQorCisiICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLi4uY2FsbGluZyBMb2NhbEJyb3dzZUNoZWNrKG5ld2RpcjwiLm5ld2Rpci4iPikiKQorICAgIGNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayhuZXdkaXIpCisgICAgaWYgIWV4aXN0cygidzpuZXRyd19saXN0c3R5bGUiKQorICAgICBsZXQgdzpuZXRyd19saXN0c3R5bGU9IGc6bmV0cndfbGlzdHN0eWxlCisgICAgZW5kaWYKKyAgICBpZiB3Om5ldHJ3X2xpc3RzdHlsZSA9PSBzOlRISU5MSVNUIHx8IHc6bmV0cndfbGlzdHN0eWxlID09IHM6TE9OR0xJU1QKKyAgICAga2VlcGFsdCBrZWVwaiBjYWxsIHNlYXJjaCgnXicuc3Vic3RpdHV0ZShkaXJmaWxlLCJeLiovIiwiIiwiIikuJ1w+JywiVyIpCisgICAgZWxzZQorICAgICBrZWVwYWx0IGtlZXBqIGNhbGwgc2VhcmNoKCdcPCcuc3Vic3RpdHV0ZShkaXJmaWxlLCJeLiovIiwiIiwiIikuJ1w+JywidyIpCisgICAgZW5kaWYKKyAgICBsZXQgdzpuZXRyd19leHBsb3JlX210Y2hjbnQgPSBpbmR4ICsgMQorICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfYnVmbnIgICA9IGJ1Zm5yKCIlIikKKyAgICBsZXQgdzpuZXRyd19leHBsb3JlX2xpbmUgICAgPSBsaW5lKCIuIikKKyAgICBrZWVwYWx0IGtlZXBqIGNhbGwgczpTZXR1cE5ldHJ3U3RhdHVzTGluZSgnJWYgJWglbSVyJT0lOSole05ldHJ3U3RhdHVzTGluZSgpfScpCisiICAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLi4uZXhwbG9yZTogbXRjaGNudD0iLnc6bmV0cndfZXhwbG9yZV9tdGNoY250LiIgYnVmbnI9Ii53Om5ldHJ3X2V4cGxvcmVfYnVmbnIuIiBsaW5lIyIudzpuZXRyd19leHBsb3JlX2xpbmUpCisKKyAgIGVsc2UKKyIgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIC4ueW91ciB2aW0gZG9lcyBub3QgaGF2ZSArcGF0aF9leHRyYSIpCisgICAgaWYgIWV4aXN0cygiZzpuZXRyd19xdWlldCIpCisgICAgIGtlZXBhbHQga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsInlvdXIgdmltIG5lZWRzIHRoZSArcGF0aF9leHRyYSBmZWF0dXJlIGZvciBFeHBsb3Jpbmcgd2l0aCAqKiEiLDQ0KQorICAgIGVuZGlmCisgICAgc2lsISBsZXQgQCogPSBrZWVwcmVnc3RhcgorICAgIHNpbCEgbGV0IEArID0ga2VlcHJlZ3N0YXIKKyAgICBzaWwhIGxldCBALyA9IGtlZXByZWdzbGFzaAorIiAgICBjYWxsIERyZXQoIm5ldHJ3I0V4cGxvcmUgOiBtaXNzaW5nICtwYXRoX2V4dHJhIikKKyAgICByZXR1cm4KKyAgIGVuZGlmCisKKyAgZWxzZQorIiAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSAuLmRlZmF1bHQgY2FzZTogRXhwbG9yZSBuZXdkaXI8Ii5kaXJuYW1lLiI+IikKKyAgIGlmIGV4aXN0cygidzpuZXRyd19saXN0c3R5bGUiKSAmJiB3Om5ldHJ3X2xpc3RzdHlsZSA9PSBzOlRSRUVMSVNUICYmIGRpcm5hbWUgPX4gJy8nCisgICAgc2lsISB1bmxldCB3Om5ldHJ3X3RyZWVkaWN0CisgICAgc2lsISB1bmxldCB3Om5ldHJ3X3RyZWV0b3AKKyAgIGVuZGlmCisgICBsZXQgbmV3ZGlyPSBkaXJuYW1lCisgICBpZiAhZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpCisgICAga2VlcGogY2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKGdldGN3ZCgpKQorICAgZWxzZQorICAgIGtlZXBqIGNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayhzOk5ldHJ3QnJvd3NlQ2hnRGlyKDEsbmV3ZGlyKSkKKyAgIGVuZGlmCisgIGVuZGlmCisKKyAgIiB2aXN1YWwgZGlzcGxheSBvZiAqKi8gKiovLyAqLyBFeHBsb3JhdGlvbiBmaWxlcworIiAgY2FsbCBEZWNobygiKEV4cGxvcmUpIHc6bmV0cndfZXhwbG9yZV9pbmR4PSIuKGV4aXN0cygidzpuZXRyd19leHBsb3JlX2luZHgiKT8gdzpuZXRyd19leHBsb3JlX2luZHggOiAiZG9lc24ndCBleGlzdCIpKQorIiAgY2FsbCBEZWNobygiKEV4cGxvcmUpIGI6bmV0cndfY3VyZGlyPCIuKGV4aXN0cygiYjpuZXRyd19jdXJkaXIiKT8gYjpuZXRyd19jdXJkaXIgOiAibi9hIikuIj4iKQorICBpZiBleGlzdHMoInc6bmV0cndfZXhwbG9yZV9pbmR4IikgJiYgZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpCisiICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIHM6ZXhwbG9yZV9wcnZkaXI8Ii4oZXhpc3RzKCJzOmV4cGxvcmVfcHJ2ZGlyIik/IHM6ZXhwbG9yZV9wcnZkaXIgOiAiLWRvZXNuJ3QgZXhpc3QtIikpCisgICBpZiAhZXhpc3RzKCJzOmV4cGxvcmVfcHJ2ZGlyIikgfHwgczpleHBsb3JlX3BydmRpciAhPSBiOm5ldHJ3X2N1cmRpcgorICAgICIgb25seSB1cGRhdGUgbWF0Y2ggbGlzdCBpZiBjdXJyZW50IGRpcmVjdG9yeSBpc24ndCB0aGUgc2FtZSBhcyBiZWZvcmUKKyIgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIG9ubHkgdXBkYXRlIG1hdGNoIGxpc3QgaWYgY3VycmVudCBkaXJlY3Rvcnkgbm90IHRoZSBzYW1lIGFzIGJlZm9yZSIpCisgICAgbGV0IHM6ZXhwbG9yZV9wcnZkaXIgPSBiOm5ldHJ3X2N1cmRpcgorICAgIGxldCBzOmV4cGxvcmVfbWF0Y2ggID0gIiIKKyAgICBsZXQgZGlybGVuICAgICAgICAgICA9IHM6U3RybGVuKGI6bmV0cndfY3VyZGlyKQorICAgIGlmIGI6bmV0cndfY3VyZGlyICF+ICcvJCcKKyAgICAgbGV0IGRpcmxlbj0gZGlybGVuICsgMQorICAgIGVuZGlmCisgICAgbGV0IHBydmZuYW1lPSAiIgorICAgIGZvciBmbmFtZSBpbiB3Om5ldHJ3X2V4cGxvcmVfbGlzdAorIiAgICAgY2FsbCBEZWNobygiKEV4cGxvcmUpIGZuYW1lPCIuZm5hbWUuIj4iKQorICAgICBpZiBmbmFtZSA9fiAnXicuYjpuZXRyd19jdXJkaXIKKyAgICAgIGlmIHM6ZXhwbG9yZV9tYXRjaCA9PSAiIgorICAgICAgIGxldCBzOmV4cGxvcmVfbWF0Y2g9ICdcPCcuZXNjYXBlKHN0cnBhcnQoZm5hbWUsZGlybGVuKSxnOm5ldHJ3X21hcmtmaWxlZXNjKS4nXD4nCisgICAgICBlbHNlCisgICAgICAgbGV0IHM6ZXhwbG9yZV9tYXRjaD0gczpleHBsb3JlX21hdGNoLidcfFw8Jy5lc2NhcGUoc3RycGFydChmbmFtZSxkaXJsZW4pLGc6bmV0cndfbWFya2ZpbGVlc2MpLidcPicKKyAgICAgIGVuZGlmCisgICAgIGVsc2VpZiBmbmFtZSAhfiAnXi8nICYmIGZuYW1lICE9IHBydmZuYW1lCisgICAgICBpZiBzOmV4cGxvcmVfbWF0Y2ggPT0gIiIKKyAgICAgICBsZXQgczpleHBsb3JlX21hdGNoPSAnXDwnLmVzY2FwZShmbmFtZSxnOm5ldHJ3X21hcmtmaWxlZXNjKS4nXD4nCisgICAgICBlbHNlCisgICAgICAgbGV0IHM6ZXhwbG9yZV9tYXRjaD0gczpleHBsb3JlX21hdGNoLidcfFw8Jy5lc2NhcGUoZm5hbWUsZzpuZXRyd19tYXJrZmlsZWVzYykuJ1w+JworICAgICAgZW5kaWYKKyAgICAgZW5kaWYKKyAgICAgbGV0IHBydmZuYW1lPSBmbmFtZQorICAgIGVuZGZvcgorIiAgICBjYWxsIERlY2hvKCIoRXhwbG9yZSkgZXhwbG9yZV9tYXRjaDwiLnM6ZXhwbG9yZV9tYXRjaC4iPiIpCisgICAgZXhlICIybWF0Y2ggbmV0cndNYXJrRmlsZSAvIi5zOmV4cGxvcmVfbWF0Y2guIi8iCisgICBlbmRpZgorICAgZWNobyAiPHMtdXA+PT1QZXhwbG9yZSAgPHMtZG93bj49PU5leHBsb3JlIgorICBlbHNlCisgICAybWF0Y2ggbm9uZQorICAgaWYgZXhpc3RzKCJzOmV4cGxvcmVfbWF0Y2giKSAgfCB1bmxldCBzOmV4cGxvcmVfbWF0Y2ggIHwgZW5kaWYKKyAgIGlmIGV4aXN0cygiczpleHBsb3JlX3BydmRpciIpIHwgdW5sZXQgczpleHBsb3JlX3BydmRpciB8IGVuZGlmCisgICBlY2hvICIgIgorIiAgIGNhbGwgRGVjaG8oIihFeHBsb3JlKSBjbGVhcmVkIGV4cGxvcmUgbWF0Y2ggbGlzdCIpCisgIGVuZGlmCisKKyAgc2lsISBsZXQgQCogPSBrZWVwcmVnc3RhcgorICBzaWwhIGxldCBAKyA9IGtlZXByZWdzdGFyCisgIHNpbCEgbGV0IEAvID0ga2VlcHJlZ3NsYXNoCisiICBjYWxsIERyZXQoIm5ldHJ3I0V4cGxvcmUgOiBALzwiLkAvLiI+IikKK2VuZGZ1bgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBuZXRydyNOZXRyd01ha2VUZ3Q6IG1ha2UgYSB0YXJnZXQgb3V0IG9mIHRoZSBkaXJlY3RvcnkgbmFtZSBwcm92aWRlZCB7e3syCitmdW4hIG5ldHJ3I05ldHJ3TWFrZVRndChkbmFtZSkKKyIgIGNhbGwgRGZ1bmMoIm5ldHJ3I05ldHJ3TWFrZVRndChkbmFtZTwiLmE6ZG5hbWUuIj4pIikKKyAgICIgc2ltcGxpZnkgdGhlIHRhcmdldCAoZWcuIC9hYmMvZGVmLy4uL2doaSAtPiAvYWJjL2doaSkKKyAgbGV0IHN2cG9zICAgICAgICAgICAgICAgPSBuZXRydyNOZXRyd1NhdmVQb3NuKCkKKyAgbGV0IHM6bmV0cndtZnRndF9pc2xvY2FsPSAoYTpkbmFtZSAhfiAnXlxhXCs6Ly8nKQorIiAgY2FsbCBEZWNobygiczpuZXRyd21mdGd0X2lzbG9jYWw9Ii5zOm5ldHJ3bWZ0Z3RfaXNsb2NhbCkKKyAgaWYgczpuZXRyd21mdGd0X2lzbG9jYWwKKyAgIGxldCBuZXRyd21mdGd0PSBzaW1wbGlmeShhOmRuYW1lKQorICBlbHNlCisgICBsZXQgbmV0cndtZnRndD0gYTpkbmFtZQorICBlbmRpZgorICBpZiBleGlzdHMoInM6bmV0cndtZnRndCIpICYmIG5ldHJ3bWZ0Z3QgPT0gczpuZXRyd21mdGd0CisgICAiIHJlLXNlbGVjdGVkIHRhcmdldCwgc28ganVzdCBjbGVhciBpdAorICAgdW5sZXQgczpuZXRyd21mdGd0IHM6bmV0cndtZnRndF9pc2xvY2FsCisgIGVsc2UKKyAgIGxldCBzOm5ldHJ3bWZ0Z3Q9IG5ldHJ3bWZ0Z3QKKyAgZW5kaWYKKyAgaWYgZzpuZXRyd19mYXN0YnJvd3NlIDw9IDEKKyAgIGNhbGwgczpOZXRyd1JlZnJlc2goKGI6bmV0cndfY3VyZGlyICF+ICdcYVwrOi8vJyksYjpuZXRyd19jdXJkaXIpCisgIGVuZGlmCisgIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvcykKKyIgIGNhbGwgRHJldCgibmV0cncjTmV0cndNYWtlVGd0IikKK2VuZGZ1bgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIiBuZXRydyNOZXRyd0NsZWFuOiByZW1vdmUgbmV0cncge3t7MgogIiBzdXBwb3J0cyA6TmV0cndDbGVhbiAgLS0gcmVtb3ZlIG5ldHJ3IGZyb20gZmlyc3QgZGlyZWN0b3J5IG9uIHJ1bnRpbWVwYXRoCiAiICAgICAgICAgIDpOZXRyd0NsZWFuISAtLSByZW1vdmUgbmV0cncgZnJvbSBhbGwgZGlyZWN0b3JpZXMgb24gcnVudGltZXBhdGgKQEAgLTc0MSw2ICsxMjQ3LDI1NyBAQAogZW5kZnVuCiAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIG5ldHJ3I05ldHJ3T2J0YWluOiB7e3syCisiICAgbmV0cncjTmV0cndPYnRhaW4oaXNsb2NhbCxmbmFtZVssdGd0ZGlyZWN0b3J5XSkKKyIgICAgIGlzbG9jYWw9MCAgb2J0YWluIGZyb20gcmVtb3RlIHNvdXJjZQorIiAgICAgICAgICAgID0xICBvYnRhaW4gZnJvbSBsb2NhbCBzb3VyY2UKKyIgICAgIGZuYW1lICA6ICAgYSBmaWxlbmFtZSBvciBhIGxpc3Qgb2YgZmlsZW5hbWVzCisiICAgICB0Z3RkaXIgOiAgIG9wdGlvbmFsIHBsYWNlIHdoZXJlIGZpbGVzIGFyZSB0byBnbyAgKG5vdCBwcmVzZW50LCB1c2VzIGdldGN3ZCgpKQorZnVuISBuZXRydyNOZXRyd09idGFpbihpc2xvY2FsLGZuYW1lLC4uLikKKyIgIGNhbGwgRGZ1bmMoIm5ldHJ3I05ldHJ3T2J0YWluKGlzbG9jYWw9Ii5hOmlzbG9jYWwuIiBmbmFtZTwiLigodHlwZShhOmZuYW1lKSA9PSAxKT8gYTpmbmFtZSA6IHN0cmluZyhhOmZuYW1lKSkuIj4pIGE6MD0iLmE6MCkKKyAgIiBOZXRyd1N0YXR1c0xpbmUgc3VwcG9ydCAtIGZvciBvYnRhaW5pbmcgc3VwcG9ydAorCisgIGlmIHR5cGUoYTpmbmFtZSkgPT0gMQorICAgbGV0IGZuYW1lbGlzdD0gWyBhOmZuYW1lIF0KKyAgZWxzZWlmIHR5cGUoYTpmbmFtZSkgPT0gMworICAgbGV0IGZuYW1lbGlzdD0gYTpmbmFtZQorICBlbHNlCisgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsImF0dGVtcHRpbmcgdG8gdXNlIE5ldHJ3T2J0YWluIG9uIHNvbWV0aGluZyBub3QgYSBmaWxlbmFtZSBvciBhIGxpc3QiLDYyKQorIiAgIGNhbGwgRHJldCgibmV0cncjTmV0cndPYnRhaW4iKQorICAgcmV0dXJuCisgIGVuZGlmCisiICBjYWxsIERlY2hvKCJmbmFtZWxpc3Q8Ii5zdHJpbmcoZm5hbWVsaXN0KS4iPiIpCisgIGlmIGE6MCA+IDAKKyAgIGxldCB0Z3RkaXI9IGE6MQorICBlbHNlCisgICBsZXQgdGd0ZGlyPSBnZXRjd2QoKQorICBlbmRpZgorIiAgY2FsbCBEZWNobygidGd0ZGlyPCIudGd0ZGlyLiI+IikKKworICBpZiBleGlzdHMoImI6bmV0cndfaXNsb2NhbCIpICYmIGI6bmV0cndfaXNsb2NhbAorICAgIiBvYnRhaW4gYSBmaWxlIGZyb20gbG9jYWwgYjpuZXRyd19jdXJkaXIgdG8gKGxvY2FsKSB0Z3RkaXIKKyIgICBjYWxsIERlY2hvKCJvYnRhaW4gYSBmaWxlIGZyb20gbG9jYWwgIi5iOm5ldHJ3X2N1cmRpci4iIHRvICIudGd0ZGlyKQorICAgaWYgZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpICYmIGdldGN3ZCgpICE9IGI6bmV0cndfY3VyZGlyCisgICAgbGV0IHRvcGF0aD0gczpDb21wb3NlUGF0aCh0Z3RkaXIsIiIpCisgICAgaWYgKGhhcygid2luMzIiKSB8fCBoYXMoIndpbjk1IikgfHwgaGFzKCJ3aW42NCIpIHx8IGhhcygid2luMTYiKSkKKyAgICAgIiB0cmFuc2ZlciBmaWxlcyBvbmUgYXQgdGltZQorIiAgICAgY2FsbCBEZWNobygidHJhbnNmZXIgZmlsZXMgb25lIGF0IGEgdGltZSIpCisgICAgIGZvciBmbmFtZSBpbiBmbmFtZWxpc3QKKyIgICAgICBjYWxsIERlY2hvKCJzeXN0ZW0oIi5nOm5ldHJ3X2xvY2FsY29weWNtZC4iICIuc2hlbGxlc2NhcGUoZm5hbWUpLiIgIi5zaGVsbGVzY2FwZSh0b3BhdGgpLiIpIikKKyAgICAgIGNhbGwgc3lzdGVtKGc6bmV0cndfbG9jYWxjb3B5Y21kLiIgIi5zaGVsbGVzY2FwZShmbmFtZSkuIiAiLnNoZWxsZXNjYXBlKHRvcGF0aCkpCisgICAgICBpZiB2OnNoZWxsX2Vycm9yICE9IDAKKyAgICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywiY29uc2lkZXIgc2V0dGluZyBnOm5ldHJ3X2xvY2FsY29weWNtZDwiLmc6bmV0cndfbG9jYWxjb3B5Y21kLiI+IHRvIHNvbWV0aGluZyB0aGF0IHdvcmtzIiw4MCkKKyIgICAgICAgY2FsbCBEcmV0KCJzOk5ldHJ3T2J0YWluIDAgOiBmYWlsZWQ6ICIuZzpuZXRyd19sb2NhbGNvcHljbWQuIiAiLnNoZWxsZXNjYXBlKGZuYW1lKS4iICIuc2hlbGxlc2NhcGUodG9wYXRoKSkKKyAgICAgICByZXR1cm4KKyAgICAgIGVuZGlmCisgICAgIGVuZGZvcgorICAgIGVsc2UKKyAgICAgIiB0cmFuc2ZlciBmaWxlcyB3aXRoIG9uZSBjb21tYW5kCisiICAgICBjYWxsIERlY2hvKCJ0cmFuc2ZlciBmaWxlcyB3aXRoIG9uZSBjb21tYW5kIikKKyAgICAgbGV0IGZpbGVsaXN0PSBqb2luKG1hcChkZWVwY29weShmbmFtZWxpc3QpLCJzaGVsbGVzY2FwZSh2OnZhbCkiKSkKKyIgICAgIGNhbGwgRGVjaG8oInN5c3RlbSgiLmc6bmV0cndfbG9jYWxjb3B5Y21kLiIgIi5maWxlbGlzdC4iICIuc2hlbGxlc2NhcGUodG9wYXRoKS4iKSIpCisgICAgIGNhbGwgc3lzdGVtKGc6bmV0cndfbG9jYWxjb3B5Y21kLiIgIi5maWxlbGlzdC4iICIuc2hlbGxlc2NhcGUodG9wYXRoKSkKKyAgICAgaWYgdjpzaGVsbF9lcnJvciAhPSAwCisgICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywiY29uc2lkZXIgc2V0dGluZyBnOm5ldHJ3X2xvY2FsY29weWNtZDwiLmc6bmV0cndfbG9jYWxjb3B5Y21kLiI+IHRvIHNvbWV0aGluZyB0aGF0IHdvcmtzIiw4MCkKKyIgICAgICBjYWxsIERyZXQoInM6TmV0cndPYnRhaW4gMCA6IGZhaWxlZDogIi5nOm5ldHJ3X2xvY2FsY29weWNtZC4iICIuZmlsZWxpc3QuIiAiLnNoZWxsZXNjYXBlKHRvcGF0aCkpCisgICAgICByZXR1cm4KKyAgICAgZW5kaWYKKyAgICBlbmRpZgorICAgZWxzZWlmICFleGlzdHMoImI6bmV0cndfY3VyZGlyIikKKyAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsImxvY2FsIGJyb3dzaW5nIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0ISIsMzYpCisgICBlbHNlCisgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsImxvY2FsIGJyb3dzaW5nIGRpcmVjdG9yeSBhbmQgY3VycmVudCBkaXJlY3RvcnkgYXJlIGlkZW50aWNhbCIsMzcpCisgICBlbmRpZgorCisgIGVsc2UKKyAgICIgb2J0YWluIGZpbGVzIGZyb20gcmVtb3RlIGI6bmV0cndfY3VyZGlyIHRvIGxvY2FsIHRndGRpcgorIiAgIGNhbGwgRGVjaG8oIm9idGFpbiBhIGZpbGUgZnJvbSByZW1vdGUgIi5iOm5ldHJ3X2N1cmRpci4iIHRvICIudGd0ZGlyKQorICAgaWYgdHlwZShhOmZuYW1lKSA9PSAxCisgICAgY2FsbCBzOlNldHVwTmV0cndTdGF0dXNMaW5lKCclZiAlaCVtJXIlPSU5Kk9idGFpbmluZyAnLmE6Zm5hbWUpCisgICBlbmRpZgorICAgY2FsbCBzOk5ldHJ3TWV0aG9kKGI6bmV0cndfY3VyZGlyKQorCisgICBpZiBiOm5ldHJ3X21ldGhvZCA9PSA0CisgICAgIiBvYnRhaW4gZmlsZSB1c2luZyBzY3AKKyIgICAgY2FsbCBEZWNobygib2J0YWluIHZpYSBzY3AgKG1ldGhvZCM0KSIpCisgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X3BvcnQiKSAmJiBnOm5ldHJ3X3BvcnQgIT0gIiIKKyAgICAgbGV0IHVzZXBvcnQ9ICIgIi5nOm5ldHJ3X3NjcHBvcnQuIiAiLmc6bmV0cndfcG9ydAorICAgIGVsc2UKKyAgICAgbGV0IHVzZXBvcnQ9ICIiCisgICAgZW5kaWYKKyAgICBpZiBiOm5ldHJ3X2ZuYW1lID1+ICcvJworICAgICBsZXQgcGF0aD0gc3Vic3RpdHV0ZShiOm5ldHJ3X2ZuYW1lLCdeXCguKi9cKS5cey19JCcsJ1wxJywnJykKKyAgICBlbHNlCisgICAgIGxldCBwYXRoPSAiIgorICAgIGVuZGlmCisgICAgbGV0IGZpbGVsaXN0PSBqb2luKG1hcChkZWVwY29weShmbmFtZWxpc3QpLCdzaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUuIjoiLnBhdGgudjp2YWwsMSknKSkKKyIgICAgY2FsbCBEZWNobygiZXhlICIuczpuZXRyd19zaWxlbnR4ZmVyLiIhIi5nOm5ldHJ3X3NjcF9jbWQuc2hlbGxlc2NhcGUodXNlcG9ydCwxKS4iICIuZmlsZWxpc3QuIiAiLnNoZWxsZXNjYXBlKHRndGRpciwxKSkKKyAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIhIi5nOm5ldHJ3X3NjcF9jbWQuc2hlbGxlc2NhcGUodXNlcG9ydCwxKS4iICIuZmlsZWxpc3QuIiAiLnNoZWxsZXNjYXBlKHRndGRpciwxKQorCisgICBlbHNlaWYgYjpuZXRyd19tZXRob2QgPT0gMgorICAgICIgb2J0YWluIGZpbGUgdXNpbmcgZnRwICsgLm5ldHJjCisiICAgICBjYWxsIERlY2hvKCJvYnRhaW4gdmlhIGZ0cCsubmV0cmMgKG1ldGhvZCAjMikiKQorICAgICBjYWxsIHM6U2F2ZUJ1ZlZhcnMoKXxzaWwga2VlcGp1bXBzIG5ld3xjYWxsIHM6UmVzdG9yZUJ1ZlZhcnMoKQorICAgICBsZXQgdG1wYnVmbnI9IGJ1Zm5yKCIlIikKKyAgICAgc2V0bCBmZj11bml4CisgICAgIGlmIGV4aXN0cygiZzpuZXRyd19mdHBtb2RlIikgJiYgZzpuZXRyd19mdHBtb2RlICE9ICIiCisgICAgICBrZWVwaiBwdXQgPWc6bmV0cndfZnRwbW9kZQorIiAgICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dDogIi5nZXRsaW5lKCckJykpCisgICAgIGVuZGlmCisKKyAgICAgaWYgZXhpc3RzKCJiOm5ldHJ3X2ZuYW1lIikgJiYgYjpuZXRyd19mbmFtZSAhPSAiIgorICAgICAgY2FsbCBzZXRsaW5lKGxpbmUoIiQiKSsxLCdjZCAiJy5iOm5ldHJ3X2ZuYW1lLiciJykKKyIgICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQorICAgICBlbmRpZgorCisgICAgIGlmIGV4aXN0cygiZzpuZXRyd19mdHBleHRyYWNtZCIpCisgICAgICBrZWVwaiBwdXQgPWc6bmV0cndfZnRwZXh0cmFjbWQKKyIgICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQorICAgICBlbmRpZgorICAgICBmb3IgZm5hbWUgaW4gZm5hbWVsaXN0CisgICAgICBjYWxsIHNldGxpbmUobGluZSgiJCIpKzEsJ2dldCAiJy5mbmFtZS4nIicpCisiICAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJyQnKSkKKyAgICAgZW5kZm9yCisgICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCisiICAgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuczpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUsMSkuIiAiLnNoZWxsZXNjYXBlKGc6bmV0cndfcG9ydCwxKSkKKyAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKS4iICIuc2hlbGxlc2NhcGUoZzpuZXRyd19wb3J0LDEpCisgICAgIGVsc2UKKyIgICAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKSkKKyAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKQorICAgICBlbmRpZgorICAgICAiIElmIHRoZSByZXN1bHQgb2YgdGhlIGZ0cCBvcGVyYXRpb24gaXNuJ3QgYmxhbmssIHNob3cgYW4gZXJyb3IgbWVzc2FnZSAodG54IHRvIERvdWcgQ2xhYXIpCisgICAgIGlmIGdldGxpbmUoMSkgIX4gIl4kIiAmJiAhZXhpc3RzKCJnOm5ldHJ3X3F1aWV0IikgJiYgZ2V0bGluZSgxKSAhfiAnXlRyeWluZyAnCisgICAgICBsZXQgZGVidWdrZWVwPSAmZGVidWcKKyAgICAgIHNldGwgZGVidWc9bXNnCisgICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsZ2V0bGluZSgxKSw0KQorICAgICAgbGV0ICZkZWJ1Zz0gZGVidWdrZWVwCisgICAgIGVuZGlmCisKKyAgIGVsc2VpZiBiOm5ldHJ3X21ldGhvZCA9PSAzCisgICAgIiBvYnRhaW4gd2l0aCBmdHAgKyBtYWNoaW5lLCBpZCwgcGFzc3dkLCBhbmQgZm5hbWUgKGllLiBubyAubmV0cmMpCisiICAgIGNhbGwgRGVjaG8oIm9idGFpbiB2aWEgZnRwK21pcGYgKG1ldGhvZCAjMykiKQorICAgIGNhbGwgczpTYXZlQnVmVmFycygpfHNpbCBrZWVwanVtcHMgbmV3fGNhbGwgczpSZXN0b3JlQnVmVmFycygpCisgICAgbGV0IHRtcGJ1Zm5yPSBidWZucigiJSIpCisgICAgc2V0bCBmZj11bml4CisKKyAgICBpZiBleGlzdHMoImc6bmV0cndfcG9ydCIpICYmIGc6bmV0cndfcG9ydCAhPSAiIgorICAgICBrZWVwaiBwdXQgPSdvcGVuICcuZzpuZXRyd19tYWNoaW5lLicgJy5nOm5ldHJ3X3BvcnQKKyIgICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dDogIi5nZXRsaW5lKCckJykpCisgICAgZWxzZQorICAgICBrZWVwaiBwdXQgPSdvcGVuICcuZzpuZXRyd19tYWNoaW5lCisiICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQorICAgIGVuZGlmCisKKyAgICBpZiBleGlzdHMoImc6bmV0cndfdWlkIikgJiYgZzpuZXRyd191aWQgIT0gIiIKKyAgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X2Z0cCIpICYmIGc6bmV0cndfZnRwID09IDEKKyAgICAgIGtlZXBqIHB1dCA9ZzpuZXRyd191aWQKKyIgICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQorICAgICAgaWYgZXhpc3RzKCJzOm5ldHJ3X3Bhc3N3ZCIpICYmIHM6bmV0cndfcGFzc3dkICE9ICIiCisgICAgICAga2VlcGogcHV0ID0nXCInLnM6bmV0cndfcGFzc3dkLidcIicKKyAgICAgIGVuZGlmCisiICAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJyQnKSkKKyAgICAgZWxzZWlmIGV4aXN0cygiczpuZXRyd19wYXNzd2QiKQorICAgICAga2VlcGogcHV0ID0ndXNlciBcIicuZzpuZXRyd191aWQuJ1wiIFwiJy5zOm5ldHJ3X3Bhc3N3ZC4nXCInCisiICAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJyQnKSkKKyAgICAgZW5kaWYKKyAgICBlbmRpZgorCisgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X2Z0cG1vZGUiKSAmJiBnOm5ldHJ3X2Z0cG1vZGUgIT0gIiIKKyAgICAga2VlcGogcHV0ID1nOm5ldHJ3X2Z0cG1vZGUKKyIgICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dDogIi5nZXRsaW5lKCckJykpCisgICAgZW5kaWYKKworICAgIGlmIGV4aXN0cygiYjpuZXRyd19mbmFtZSIpICYmIGI6bmV0cndfZm5hbWUgIT0gIiIKKyAgICAga2VlcGogY2FsbCBzZXRsaW5lKGxpbmUoIiQiKSsxLCdjZCAiJy5iOm5ldHJ3X2ZuYW1lLiciJykKKyIgICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dDogIi5nZXRsaW5lKCckJykpCisgICAgZW5kaWYKKworICAgIGlmIGV4aXN0cygiZzpuZXRyd19mdHBleHRyYWNtZCIpCisgICAgIGtlZXBqIHB1dCA9ZzpuZXRyd19mdHBleHRyYWNtZAorIiAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJyQnKSkKKyAgICBlbmRpZgorCisgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X2Z0cGV4dHJhY21kIikKKyAgICAga2VlcGogcHV0ID1nOm5ldHJ3X2Z0cGV4dHJhY21kCisiICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQorICAgIGVuZGlmCisgICAgZm9yIGZuYW1lIGluIGZuYW1lbGlzdAorICAgICBrZWVwaiBjYWxsIHNldGxpbmUobGluZSgiJCIpKzEsJ2dldCAiJy5mbmFtZS4nIicpCisgICAgZW5kZm9yCisiICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dDogIi5nZXRsaW5lKCckJykpCisKKyAgICAiIHBlcmZvcm0gZnRwOgorICAgICIgLWkgICAgICAgOiB0dXJucyBvZmYgaW50ZXJhY3RpdmUgcHJvbXB0aW5nIGZyb20gZnRwCisgICAgIiAtbiAgdW5peCA6IERPTidUIHVzZSA8Lm5ldHJjPiwgZXZlbiB0aG91Z2ggaXQgZXhpc3RzCisgICAgIiAtbiAgd2luMzI6IHF1aXQgYmVpbmcgb2Jub3hpb3VzIGFib3V0IHBhc3N3b3JkCisgICAga2VlcGogbm9ybSEgMUdkZAorIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAiLmc6bmV0cndfZnRwX29wdGlvbnMpCisgICAgZXhlIHM6bmV0cndfc2lsZW50eGZlci4iJSEiLnM6bmV0cndfZnRwX2NtZC4iICIuZzpuZXRyd19mdHBfb3B0aW9ucworICAgICIgSWYgdGhlIHJlc3VsdCBvZiB0aGUgZnRwIG9wZXJhdGlvbiBpc24ndCBibGFuaywgc2hvdyBhbiBlcnJvciBtZXNzYWdlICh0bnggdG8gRG91ZyBDbGFhcikKKyAgICBpZiBnZXRsaW5lKDEpICF+ICJeJCIKKyIgICAgIGNhbGwgRGVjaG8oImVycm9yPCIuZ2V0bGluZSgxKS4iPiIpCisgICAgIGlmICFleGlzdHMoImc6bmV0cndfcXVpZXQiKQorICAgICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLGdldGxpbmUoMSksNSkKKyAgICAgZW5kaWYKKyAgICBlbmRpZgorICAgZWxzZWlmICFleGlzdHMoImI6bmV0cndfbWV0aG9kIikgfHwgYjpuZXRyd19tZXRob2QgPCAwCisiICAgIGNhbGwgRGZ1bmMoIm5ldHJ3I05ldHJ3T2J0YWluIDogdW5zdXBwb3J0ZWQgbWV0aG9kIikKKyAgICByZXR1cm4KKyAgIGVuZGlmCisKKyAgICIgcmVzdG9yZSBzdGF0dXMgbGluZQorICAgaWYgdHlwZShhOmZuYW1lKSA9PSAxICYmIGV4aXN0cygiczpuZXRyd191c2Vyc19zdGwiKQorICAgIGtlZXBqIGNhbGwgczpTZXR1cE5ldHJ3U3RhdHVzTGluZShzOm5ldHJ3X3VzZXJzX3N0bCkKKyAgIGVuZGlmCisKKyAgZW5kaWYKKworICAiIGNsZWFudXAKKyAgaWYgZXhpc3RzKCJ0bXBidWZuciIpCisgICBpZiBidWZucigiJSIpICE9IHRtcGJ1Zm5yCisgICAgZXhlIHRtcGJ1Zm5yLiJidyEiCisgICBlbHNlCisgICAgcSEKKyAgIGVuZGlmCisgIGVuZGlmCisKKyIgIGNhbGwgRHJldCgibmV0cncjTmV0cndPYnRhaW4iKQorZW5kZnVuCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIE5ldHJ3U3RhdHVzTGluZToge3t7MgorZnVuISBOZXRyd1N0YXR1c0xpbmUoKQorCisiIHZ2diBOZXRyd1N0YXR1c0xpbmUoKSBkZWJ1Z2dpbmcgdnZ2CisiICBsZXQgZzpzdGxtc2c9IiIKKyIgIGlmICFleGlzdHMoInc6bmV0cndfZXhwbG9yZV9idWZuciIpCisiICAgbGV0IGc6c3RsbXNnPSIhWDxleHBsb3JlX2J1Zm5yPiIKKyIgIGVsc2VpZiB3Om5ldHJ3X2V4cGxvcmVfYnVmbnIgIT0gYnVmbnIoIiUiKQorIiAgIGxldCBnOnN0bG1zZz0iZXhwbG9yZV9idWZuciE9Ii5idWZucigiJSIpCisiICBlbmRpZgorIiAgaWYgIWV4aXN0cygidzpuZXRyd19leHBsb3JlX2xpbmUiKQorIiAgIGxldCBnOnN0bG1zZz0iICFYPGV4cGxvcmVfbGluZT4iCisiICBlbHNlaWYgdzpuZXRyd19leHBsb3JlX2xpbmUgIT0gbGluZSgiLiIpCisiICAgbGV0IGc6c3RsbXNnPSIgZXhwbG9yZV9saW5lIT17bGluZSguKTwiLmxpbmUoIi4iKS4iPiIKKyIgIGVuZGlmCisiICBpZiAhZXhpc3RzKCJ3Om5ldHJ3X2V4cGxvcmVfbGlzdCIpCisiICAgbGV0IGc6c3RsbXNnPSIgIVg8ZXhwbG9yZV9saXN0PiIKKyIgIGVuZGlmCisiIF5eXiBOZXRyd1N0YXR1c0xpbmUoKSBkZWJ1Z2dpbmcgXl5eCisKKyAgaWYgIWV4aXN0cygidzpuZXRyd19leHBsb3JlX2J1Zm5yIikgfHwgdzpuZXRyd19leHBsb3JlX2J1Zm5yICE9IGJ1Zm5yKCIlIikgfHwgIWV4aXN0cygidzpuZXRyd19leHBsb3JlX2xpbmUiKSB8fCB3Om5ldHJ3X2V4cGxvcmVfbGluZSAhPSBsaW5lKCIuIikgfHwgIWV4aXN0cygidzpuZXRyd19leHBsb3JlX2xpc3QiKQorICAgIiByZXN0b3JlIHVzZXIncyBzdGF0dXMgbGluZQorICAgbGV0ICZzdGwgICAgICAgID0gczpuZXRyd191c2Vyc19zdGwKKyAgIGxldCAmbGFzdHN0YXR1cyA9IHM6bmV0cndfdXNlcnNfbHMKKyAgIGlmIGV4aXN0cygidzpuZXRyd19leHBsb3JlX2J1Zm5yIil8dW5sZXQgdzpuZXRyd19leHBsb3JlX2J1Zm5yfGVuZGlmCisgICBpZiBleGlzdHMoInc6bmV0cndfZXhwbG9yZV9saW5lIikgfHVubGV0IHc6bmV0cndfZXhwbG9yZV9saW5lIHxlbmRpZgorICAgcmV0dXJuICIiCisgIGVsc2UKKyAgIHJldHVybiAiTWF0Y2ggIi53Om5ldHJ3X2V4cGxvcmVfbXRjaGNudC4iIG9mICIudzpuZXRyd19leHBsb3JlX2xpc3RsZW4KKyAgZW5kaWYKK2VuZGZ1bgorCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIiAgTmV0cncgVHJhbnNmZXIgRnVuY3Rpb25zOiB7e3sxCiAiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtODk5LDcgKzE2NTYsNyBAQAogICAgICBsZXQgbmV0cndfZm5hbWU9IGI6bmV0cndfZm5hbWUKICAgICAga2VlcGogY2FsbCBzOlNhdmVCdWZWYXJzKCl8bmV3fGtlZXBqIGNhbGwgczpSZXN0b3JlQnVmVmFycygpCiAgICAgIGxldCBmaWx0YnVmPSBidWZucigiJSIpCi0gICAgIHNldGxvY2FsIGZmPXVuaXgKKyAgICAgc2V0bCBmZj11bml4CiAgICAgIGtlZXBqIHB1dCA9ZzpuZXRyd19mdHBtb2RlCiAiICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZShsaW5lKCIkIikpKQogICAgICBpZiBleGlzdHMoImc6bmV0cndfZnRwZXh0cmFjbWQiKQpAQCAtOTE4LDcgKzE2NzUsNyBAQAogICAgICAiIElmIHRoZSByZXN1bHQgb2YgdGhlIGZ0cCBvcGVyYXRpb24gaXNuJ3QgYmxhbmssIHNob3cgYW4gZXJyb3IgbWVzc2FnZSAodG54IHRvIERvdWcgQ2xhYXIpCiAgICAgIGlmIGdldGxpbmUoMSkgIX4gIl4kIiAmJiAhZXhpc3RzKCJnOm5ldHJ3X3F1aWV0IikgJiYgZ2V0bGluZSgxKSAhfiAnXlRyeWluZyAnCiAgICAgICBsZXQgZGVidWdrZWVwID0gJmRlYnVnCi0gICAgICBzZXRsb2NhbCBkZWJ1Zz1tc2cKKyAgICAgIHNldGwgZGVidWc9bXNnCiAgICAgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsZ2V0bGluZSgxKSw0KQogICAgICAgbGV0ICZkZWJ1ZyAgICA9IGRlYnVna2VlcAogICAgICBlbmRpZgpAQCAtOTQwLDcgKzE2OTcsNyBAQAogICAgIGxldCBuZXRyd19mbmFtZT0gZXNjYXBlKGI6bmV0cndfZm5hbWUsZzpuZXRyd19mbmFtZV9lc2NhcGUpCiAgICAga2VlcGogY2FsbCBzOlNhdmVCdWZWYXJzKCl8bmV3fGtlZXBqIGNhbGwgczpSZXN0b3JlQnVmVmFycygpCiAgICAgbGV0IGZpbHRidWY9IGJ1Zm5yKCIlIikKLSAgICBzZXRsb2NhbCBmZj11bml4CisgICAgc2V0bCBmZj11bml4CiAgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X3BvcnQiKSAmJiBnOm5ldHJ3X3BvcnQgIT0gIiIKICAgICAga2VlcGogcHV0ID0nb3BlbiAnLmc6bmV0cndfbWFjaGluZS4nICcuZzpuZXRyd19wb3J0CiAiICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnLicpKQpAQCAtMTA2NCw3ICsxODIxLDcgQEAKICAgICAgIiBDb25zdHJ1Y3QgZXhlY3V0aW9uIHN0cmluZyAoZm91ciBsaW5lcykgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCBmaWx0ZXIKICAgICAgbGV0IG5ldHJ3X2ZuYW1lPSBlc2NhcGUoYjpuZXRyd19mbmFtZSxnOm5ldHJ3X2ZuYW1lX2VzY2FwZSkKICAgICAgbmV3Ci0gICAgIHNldGxvY2FsIGZmPXVuaXgKKyAgICAgc2V0bCBmZj11bml4CiAgICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCiAgICAgICBrZWVwaiBwdXQgPSdvcGVuICcuZzpuZXRyd19tYWNoaW5lLicgJy5nOm5ldHJ3X3BvcnQKICAgICAgZWxzZQpAQCAtMTMwNywxMSArMjA2NCwxMSBAQAogICAgICIgZm9ybWVybHkganVzdCBhICJuZXcuLi5iZCEiLCB0aGF0IGNoYW5nZWQgdGhlIHdpbmRvdyBzaXplcyB3aGVuIGVxdWFsYWx3YXlzLiAgVXNpbmcgZW5ldyB3b3JrYXJvdW5kIGluc3RlYWQKICAgICBsZXQgYmhrZWVwICAgICAgPSAmbDpiaAogICAgIGxldCBjdXJidWYgICAgICA9IGJ1Zm5yKCIlIikKLSAgICBzZXRsb2NhbCBiaD1oaWRlCi0gICAgZW5ldworICAgIHNldGwgYmg9aGlkZQorICAgIGtlZXBhbHQgZW5ldwogCiAiICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dCB3aW5kb3cjIi53aW5ucigpKQotICAgIHNldGxvY2FsIGZmPXVuaXgKKyAgICBzZXRsIGZmPXVuaXgKICAgICBrZWVwaiBwdXQgPWc6bmV0cndfZnRwbW9kZQogIiAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQogICAgIGlmIGV4aXN0cygiZzpuZXRyd19mdHBleHRyYWNtZCIpCkBAIC0xMzU0LDkgKzIxMTEsOSBAQAogCiAgICAgIiBmb3JtZXJseSBqdXN0IGEgIm5ldy4uLmJkISIsIHRoYXQgY2hhbmdlZCB0aGUgd2luZG93IHNpemVzIHdoZW4gZXF1YWxhbHdheXMuICBVc2luZyBlbmV3IHdvcmthcm91bmQgaW5zdGVhZAogICAgIGxldCBjdXJidWYgICAgICA9IGJ1Zm5yKCIlIikKLSAgICBzZXRsb2NhbCBiaD1oaWRlCi0gICAgZW5ldwotICAgIHNldGxvY2FsIGZmPXVuaXgKKyAgICBzZXRsIGJoPWhpZGUKKyAgICBrZWVwYWx0IGVuZXcKKyAgICBzZXRsIGZmPXVuaXgKIAogICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCiAgICAgIGtlZXBqIHB1dCA9J29wZW4gJy5nOm5ldHJ3X21hY2hpbmUuJyAnLmc6bmV0cndfcG9ydApAQCAtMTQ0MiwxMCArMjE5OSwxMCBAQAogCiAgICAgIiBmb3JtZXJseSBqdXN0IGEgIm5ldy4uLmJkISIsIHRoYXQgY2hhbmdlZCB0aGUgd2luZG93IHNpemVzIHdoZW4gZXF1YWxhbHdheXMuICBVc2luZyBlbmV3IHdvcmthcm91bmQgaW5zdGVhZAogICAgIGxldCBjdXJidWYgICAgICA9IGJ1Zm5yKCIlIikKLSAgICBzZXRsb2NhbCBiaD1oaWRlCi0gICAgZW5ldworICAgIHNldGwgYmg9aGlkZQorICAgIGtlZXBhbHQgZW5ldwogCi0gICAgc2V0bG9jYWwgZmY9dW5peAorICAgIHNldGwgZmY9dW5peAogICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCiAgICAgIGtlZXBqIHB1dCA9J29wZW4gJy5nOm5ldHJ3X21hY2hpbmUuJyAnLmc6bmV0cndfcG9ydAogICAgIGVsc2UKQEAgLTE0OTEsMTAgKzIyNDgsMTAgQEAKICAgICAiIGZvcm1lcmx5IGp1c3QgYSAibmV3Li4uYmQhIiwgdGhhdCBjaGFuZ2VkIHRoZSB3aW5kb3cgc2l6ZXMgd2hlbiBlcXVhbGFsd2F5cy4gIFVzaW5nIGVuZXcgd29ya2Fyb3VuZCBpbnN0ZWFkCiAgICAgbGV0IGJoa2VlcCA9ICZsOmJoCiAgICAgbGV0IGN1cmJ1ZiA9IGJ1Zm5yKCIlIikKLSAgICBzZXRsb2NhbCBiaD1oaWRlCi0gICAgZW5ldworICAgIHNldGwgYmg9aGlkZQorICAgIGtlZXBhbHQgZW5ldwogCi0gICAgc2V0bG9jYWwgZmY9dW5peAorICAgIHNldGwgZmY9dW5peAogICAgIGNhbGwgc2V0bGluZSgxLCdwdXQgIicuZXNjYXBlKHRtcGZpbGUsJ1wnKS4nIiAnLm5ldHJ3X2ZuYW1lKQogIiAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnLicpKQogIiAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICUhIi5nOm5ldHJ3X3NmdHBfY21kLicgJy5zaGVsbGVzY2FwZSh1aWRfbWFjaGluZSwxKSkKQEAgLTE2NDcsNyArMjQwNCw3IEBACiAiICAgY2FsbCBEZWNobygiZGV0ZWN0IGZpbGV0eXBlIG9mIGxvY2FsIHZlcnNpb24gb2YgcmVtb3RlIGZpbGUiKQogICAgbGV0IGlza2tlZXA9ICZsOmlzawogICAgc2V0bCBpc2stPS8KLSAgIGZpbGV0eXBlIGRldGVjdAorICAgIiBmaWxldHlwZSBkZXRlY3QgIiBDT01CQUsgLSB0cnlpbmcgZmlsZXR5cGUgZGV0ZWN0IGluIE5ldHJ3T3B0aW9uUmVzdG9yZSBKYW4gMjQsIDIwMTMKICAgIGxldCAmbDppc2s9IGlza2tlZXAKICIgICBjYWxsIERyZWRpcigicmVuYW1lZCBidWZmZXIgYmFjayB0byByZW1vdGUgZmlsZW5hbWU8Ii5yZmlsZS4iPiA6IGV4cGFuZCglKTwiLmV4cGFuZCgiJSIpLiI+IiwibHMhIikKICAgIGxldCBsaW5lMSA9IDEKQEAgLTIxMDQsMjUgKzI4NjEsMjUgQEAKICIgIGNhbGwgRGZ1bmMoInM6TmV0cndNYXBzKGlzbG9jYWw9Ii5hOmlzbG9jYWwuIikgYjpuZXRyd19jdXJkaXI8Ii5iOm5ldHJ3X2N1cmRpci4iPiIpCiAKICAgIiBzZXQgdXAgUmV4cGxvcmUgYW5kIFsgMi1sZWZ0bW91c2UtY2xpY2sgLW9yLSBjLWxlZnRtb3VzZSBdCi0iICBjYWxsIERlY2hvKCJzZXQgdXAgUmV4cGxvcmUgY29tbWFuZCIpCisiICBjYWxsIERlY2hvKCIoTmV0cndNYXBzKSBzZXQgdXAgUmV4cGxvcmUgY29tbWFuZCIpCiAgIGNvbSEgUmV4cGxvcmUgaWYgZXhpc3RzKCJ3Om5ldHJ3X3JleGxvY2FsIil8Y2FsbCBzOk5ldHJ3UmV4cGxvcmUodzpuZXRyd19yZXhsb2NhbCxleGlzdHMoInc6bmV0cndfcmV4ZGlyIik/IHc6bmV0cndfcmV4ZGlyIDogIi4iKXxlbHNlfGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJub3QgYSBmb3JtZXIgbmV0cncgd2luZG93Iiw3OSl8ZW5kaWYKICAgaWYgZzpuZXRyd19tb3VzZW1hcHMgJiYgZzpuZXRyd19yZXRtYXAKLSIgICBjYWxsIERlY2hvKCJzZXQgdXAgUmV4cGxvcmUgMi1sZWZ0bW91c2UiKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd01hcHMpIHNldCB1cCBSZXhwbG9yZSAyLWxlZnRtb3VzZSIpCiAgICBpZiAhaGFzbWFwdG8oIjxQbHVnPk5ldHJ3UmV0dXJuIikKICAgICBpZiBtYXBhcmcoIjwyLWxlZnRtb3VzZT4iLCJuIikgPT0gIiIgfHwgbWFwYXJnKCI8Mi1sZWZ0bW91c2U+IiwibiIpID1+ICdeLSQnCi0iICAgICBjYWxsIERlY2hvKCJtYWtpbmcgbWFwIGZvciAyLWxlZnRtb3VzZSIpCisiICAgICBjYWxsIERlY2hvKCIoTmV0cndNYXBzKSBtYWtpbmcgbWFwIGZvciAyLWxlZnRtb3VzZSIpCiAgICAgIG5tYXAgPHVuaXF1ZT4gPHNpbGVudD4gPDItbGVmdG1vdXNlPgk8UGx1Zz5OZXRyd1JldHVybgogICAgIGVsc2VpZiBtYXBhcmcoIjxjLWxlZnRtb3VzZT4iLCJuIikgPT0gIiIKLSIgICAgIGNhbGwgRGVjaG8oIm1ha2luZyBtYXAgZm9yIGMtbGVmdG1vdXNlIikKKyIgICAgIGNhbGwgRGVjaG8oIihOZXRyd01hcHMpIG1ha2luZyBtYXAgZm9yIGMtbGVmdG1vdXNlIikKICAgICAgbm1hcCA8dW5pcXVlPiA8c2lsZW50PiA8Yy1sZWZ0bW91c2U+CTxQbHVnPk5ldHJ3UmV0dXJuCiAgICAgZW5kaWYKICAgIGVuZGlmCiAgICBubm8gPHNpbGVudD4gPFBsdWc+TmV0cndSZXR1cm4JOlJleHBsb3JlPGNyPgotIiAgIGNhbGwgRGVjaG8oIm1hZGUgPFBsdWc+TmV0cndSZXR1cm4gbWFwIikKKyIgICBjYWxsIERlY2hvKCIoTmV0cndNYXBzKSBtYWRlIDxQbHVnPk5ldHJ3UmV0dXJuIG1hcCIpCiAgIGVuZGlmCiAKICAgaWYgYTppc2xvY2FsCi0iICAgY2FsbCBEZWNobygibWFrZSBsb2NhbCBtYXBzIikKKyIgICBjYWxsIERlY2hvKCIoTmV0cndNYXBzKSBtYWtlIGxvY2FsIG1hcHMiKQogICAgIiBsb2NhbCBub3JtYWwtbW9kZSBtYXBzCiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBhCQk6Y2FsbCA8U0lEPk5ldHJ3SGlkZSgxKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+ICUJCTpjYWxsIDxTSUQ+TmV0cndPcGVuRmlsZSgxKTxjcj4KQEAgLTIxNDQsNiArMjkwMSw3IEBACiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtZAk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZURpZmYoMSk8Y3I+CiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtZQk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZUVkaXQoMSk8Y3I+CiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtZgk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZSgxLDxTSUQ+TmV0cndHZXRXb3JkKCkpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbUYJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3VW5tYXJrTGlzdChidWZucigiJSIpLGI6bmV0cndfY3VyZGlyKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1nCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlR3JlcCgxKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1oCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtIaWRlU2Z4KDEpPGNyPgogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbW0JOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVNb3ZlKDEpPGNyPgpAQCAtMjE2MiwxMSArMjkyMCwxMyBAQAogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gUAkJOmNhbGwgPFNJRD5OZXRyd1ByZXZXaW5PcGVuKDEpPGNyPgogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcWIJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDIsYjpuZXRyd19jdXJkaXIpPGNyPgogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcWYJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3RmlsZUluZm8oMSw8U0lEPk5ldHJ3R2V0V29yZCgpKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHFGCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlUUZFTCgxLGdldHFmbGlzdCgpKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHIJCTpsZXQgZzpuZXRyd19zb3J0X2RpcmVjdGlvbj0gKGc6bmV0cndfc29ydF9kaXJlY3Rpb24gPX4gJ24nKT8gJ3InIDogJ24nPGJhcj5leGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TmV0cndSZWZyZXNoKDEsPFNJRD5OZXRyd0Jyb3dzZUNoZ0RpcigxLCcuLycpKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHMJCTpjYWxsIDxTSUQ+TmV0cndTb3J0U3R5bGUoMSk8Y3I+CiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBTCQk6Y2FsbCA8U0lEPk5ldFNvcnRTZXF1ZW5jZSgxKTxjcj4KLSAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFQJCTpjYWxsIDxTSUQ+TmV0cndTcGxpdCg0KTxiYXI+bm9ybSEgZ1Q8Y3I+CiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB0CQk6Y2FsbCA8U0lEPk5ldHJ3U3BsaXQoNCk8Y3I+CisgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBUYgk6PGMtdT5jYWxsIDxTSUQ+TmV0cndTZXRUZ3QoJ2InLHY6Y291bnQxKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFRoCTo8Yy11PmNhbGwgPFNJRD5OZXRyd1NldFRndCgnaCcsdjpjb3VudCk8Y3I+CiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB1CQk6PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoNCxleHBhbmQoIiUiKSk8Y3I+CiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBVCQk6PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoNSxleHBhbmQoIiUiKSk8Y3I+CiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB2CQk6Y2FsbCA8U0lEPk5ldHJ3U3BsaXQoNSk8Y3I+CkBAIC0yMjA5LDExICsyOTY5LDEzIEBACiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBQCQk8Yy1vPjpjYWxsIDxTSUQ+TmV0cndQcmV2V2luT3BlbigxKTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHFiCTxjLW8+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDIsYjpuZXRyd19jdXJkaXIpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcWYJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndGaWxlSW5mbygxLDxTSUQ+TmV0cndHZXRXb3JkKCkpPGNyPgorICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcUYJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVRRkVMKDEsZ2V0cWZsaXN0KCkpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcgkJPGMtbz46bGV0IGc6bmV0cndfc29ydF9kaXJlY3Rpb249IChnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uID1+ICduJyk/ICdyJyA6ICduJzxiYXI+ZXhlICJub3JtISAwIjxiYXI+Y2FsbCA8U0lEPk5ldHJ3UmVmcmVzaCgxLDxTSUQ+TmV0cndCcm93c2VDaGdEaXIoMSwnLi8nKSk8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBzCQk8Yy1vPjpjYWxsIDxTSUQ+TmV0cndTb3J0U3R5bGUoMSk8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBTCQk8Yy1vPjpjYWxsIDxTSUQ+TmV0U29ydFNlcXVlbmNlKDEpPGNyPgotICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gVAkJPGMtbz46Y2FsbCA8U0lEPk5ldHJ3U3BsaXQoNCk8YmFyPm5vcm0hIGdUPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gdAkJPGMtbz46Y2FsbCA8U0lEPk5ldHJ3U3BsaXQoNCk8Y3I+CisgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBUYgk8Yy1vPjo8Yy11PmNhbGwgPFNJRD5OZXRyd1NldFRndCgnYicsdjpjb3VudDEpPGNyPgorICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gVGgJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndTZXRUZ3QoJ2gnLHY6Y291bnQpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gdQkJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoNCxleHBhbmQoIiUiKSk8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBVCQk8Yy1vPjo8Yy11PmNhbGwgPFNJRD5OZXRyd0Jvb2tIaXN0SGFuZGxlcig1LGV4cGFuZCgiJSIpKTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHYJCTxjLW8+OmNhbGwgPFNJRD5OZXRyd1NwbGl0KDUpPGNyPgpAQCAtMjI0MCw2ICszMDAyLDggQEAKICAgIGlmIGc6bmV0cndfbW91c2VtYXBzID09IDEKICAgICBubWFwIDxidWZmZXI+IDxsZWZ0bW91c2U+ICAgPFBsdWc+TmV0cndMZWZ0bW91c2UKICAgICBubm8gIDxidWZmZXI+IDxzaWxlbnQ+CTxQbHVnPk5ldHJ3TGVmdG1vdXNlCTxsZWZ0bW91c2U+OmNhbGwgPFNJRD5OZXRyd0xlZnRtb3VzZSgxKTxjcj4KKyAgICBubWFwIDxidWZmZXI+IDxzLXJpZ2h0ZHJhZz4JPFBsdWc+TmV0cndSaWdodGRyYWcKKyAgICBubm8gIDxidWZmZXI+IDxzaWxlbnQ+CTxQbHVnPk5ldHJ3UmlnaHRkcmFnCTxsZWZ0bW91c2U+OmNhbGwgPFNJRD5OZXRyd1JpZ2h0ZHJhZygxKTxjcj4KICAgICBubWFwIDxidWZmZXI+IDxtaWRkbGVtb3VzZT4JPFBsdWc+TmV0cndNaWRkbGVtb3VzZQogICAgIG5ubyAgPGJ1ZmZlcj4gPHNpbGVudD4JPFBsdWc+TmV0cndNaWRkbGVtb3VzZQk8bGVmdG1vdXNlPjpjYWxsIDxTSUQ+TmV0cndQcmV2V2luT3BlbigxKTxjcj4KICAgICBubWFwIDxidWZmZXI+IDxzLWxlZnRtb3VzZT4JPFBsdWc+TmV0cndTTGVmdG1vdXNlCkBAIC0yMjcwLDcgKzMwMzQsNyBAQAogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPEYxPgkJOmhlIG5ldHJ3LXF1aWNraGVscDxjcj4KIAogICBlbHNlICIgcmVtb3RlCi0iICAgY2FsbCBEZWNobygibWFrZSByZW1vdGUgbWFwcyIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3TWFwcykgbWFrZSByZW1vdGUgbWFwcyIpCiAgICBjYWxsIHM6UmVtb3RlUGF0aEFuYWx5c2lzKGI6bmV0cndfY3VyZGlyKQogICAgIiByZW1vdGUgbm9ybWFsLW1vZGUgbWFwcwogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gPGNyPgk6Y2FsbCA8U0lEPk5ldHJ3QnJvd3NlKDAsPFNJRD5OZXRyd0Jyb3dzZUNoZ0RpcigwLDxTSUQ+TmV0cndHZXRXb3JkKCkpKTxjcj4KQEAgLTIyODIsNiArMzA0Niw3IEBACiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtZAk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZURpZmYoMCk8Y3I+CiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtZQk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZUVkaXQoMCk8Y3I+CiAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBtZgk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZSgwLDxTSUQ+TmV0cndHZXRXb3JkKCkpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbUYJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3VW5tYXJrTGlzdChidWZucigiJSIpLGI6bmV0cndfY3VyZGlyKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1nCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlR3JlcCgwKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IG1oCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtIaWRlU2Z4KDApPGNyPgogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbW0JOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3TWFya0ZpbGVNb3ZlKDApPGNyPgpAQCAtMjMwOSwxMSArMzA3NCwxMyBAQAogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcWIJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDIsYjpuZXRyd19jdXJkaXIpPGNyPgogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbUIJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDYsYjpuZXRyd19jdXJkaXIpPGNyPgogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcWYJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3RmlsZUluZm8oMCw8U0lEPk5ldHJ3R2V0V29yZCgpKTxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHFGCTo8Yy11PmNhbGwgPFNJRD5OZXRyd01hcmtGaWxlUUZFTCgwLGdldHFmbGlzdCgpKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHIJCTpsZXQgZzpuZXRyd19zb3J0X2RpcmVjdGlvbj0gKGc6bmV0cndfc29ydF9kaXJlY3Rpb24gPX4gJ24nKT8gJ3InIDogJ24nPGJhcj5leGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TmV0cndCcm93c2UoMCw8U0lEPk5ldHJ3QnJvd3NlQ2hnRGlyKDAsJy4vJykpPGNyPgogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcwkJOmNhbGwgPFNJRD5OZXRyd1NvcnRTdHlsZSgwKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFMJCTpjYWxsIDxTSUQ+TmV0U29ydFNlcXVlbmNlKDApPGNyPgogICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gdAkJOmNhbGwgPFNJRD5OZXRyd1NwbGl0KDEpPGNyPgotICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gVAkJOmNhbGwgPFNJRD5OZXRyd1NwbGl0KDEpPGJhcj5ub3JtISBnVDxjcj4KKyAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFRiCTo8Yy11PmNhbGwgPFNJRD5OZXRyd1NldFRndCgnYicsdjpjb3VudDEpPGNyPgorICAgbm5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gVGgJOjxjLXU+Y2FsbCA8U0lEPk5ldHJ3U2V0VGd0KCdoJyx2OmNvdW50KTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHUJCTo8Yy11PmNhbGwgPFNJRD5OZXRyd0Jvb2tIaXN0SGFuZGxlcig0LGI6bmV0cndfY3VyZGlyKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFUJCTo8Yy11PmNhbGwgPFNJRD5OZXRyd0Jvb2tIaXN0SGFuZGxlcig1LGI6bmV0cndfY3VyZGlyKTxjcj4KICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHYJCTpjYWxsIDxTSUQ+TmV0cndTcGxpdCgyKTxjcj4KQEAgLTIzNTQsMTEgKzMxMjEsMTMgQEAKICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHFiCTxjLW8+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDIsYjpuZXRyd19jdXJkaXIpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gbUIJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoNixiOm5ldHJ3X2N1cmRpcik8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBxZgk8Yy1vPjo8Yy11PmNhbGwgPFNJRD5OZXRyd0ZpbGVJbmZvKDAsPFNJRD5OZXRyd0dldFdvcmQoKSk8Y3I+CisgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiBxRgk6PGMtdT5jYWxsIDxTSUQ+TmV0cndNYXJrRmlsZVFGRUwoMCxnZXRxZmxpc3QoKSk8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiByCQk8Yy1vPjpsZXQgZzpuZXRyd19zb3J0X2RpcmVjdGlvbj0gKGc6bmV0cndfc29ydF9kaXJlY3Rpb24gPX4gJ24nKT8gJ3InIDogJ24nPGJhcj5leGUgIm5vcm0hIDAiPGJhcj5jYWxsIDxTSUQ+TmV0cndCcm93c2UoMCw8U0lEPk5ldHJ3QnJvd3NlQ2hnRGlyKDAsJy4vJykpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gcwkJPGMtbz46Y2FsbCA8U0lEPk5ldHJ3U29ydFN0eWxlKDApPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gUwkJPGMtbz46Y2FsbCA8U0lEPk5ldFNvcnRTZXF1ZW5jZSgwKTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHQJCTxjLW8+OmNhbGwgPFNJRD5OZXRyd1NwbGl0KDEpPGNyPgotICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gVAkJPGMtbz46Y2FsbCA8U0lEPk5ldHJ3U3BsaXQoMSk8YmFyPm5vcm0hIGdUPGNyPgorICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gVGIJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndTZXRUZ3QoJ2InLHY6Y291bnQxKTxjcj4KKyAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IFRoCTxjLW8+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3U2V0VGd0KCdoJyx2OmNvdW50KTxjcj4KICAgIGlub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IHUJCTxjLW8+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3Qm9va0hpc3RIYW5kbGVyKDQsYjpuZXRyd19jdXJkaXIpPGNyPgogICAgaW5vcmVtYXAgPGJ1ZmZlcj4gPHNpbGVudD4gVQkJPGMtbz46PGMtdT5jYWxsIDxTSUQ+TmV0cndCb29rSGlzdEhhbmRsZXIoNSxiOm5ldHJ3X2N1cmRpcik8Y3I+CiAgICBpbm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiB2CQk8Yy1vPjpjYWxsIDxTSUQ+TmV0cndTcGxpdCgyKTxjcj4KQEAgLTIzODEsNiArMzE1MCw4IEBACiAgICBpZiBnOm5ldHJ3X21vdXNlbWFwcyA9PSAxCiAgICAgbm1hcCA8bGVmdG1vdXNlPgkJPFBsdWc+TmV0cndMZWZ0bW91c2UKICAgICBubm8gPGJ1ZmZlcj4gPHNpbGVudD4JPFBsdWc+TmV0cndMZWZ0bW91c2UJPGxlZnRtb3VzZT46Y2FsbCA8U0lEPk5ldHJ3TGVmdG1vdXNlKDApPGNyPgorICAgIG5tYXAgPGJ1ZmZlcj4gPGxlZnRkcmFnPgk8UGx1Zz5OZXRyd0xlZnRkcmFnCisgICAgbm5vICA8YnVmZmVyPiA8c2lsZW50Pgk8UGx1Zz5OZXRyd0xlZnRkcmFnCTpjYWxsIDxTSUQ+TmV0cndMZWZ0ZHJhZygwKTxjcj4KICAgICBubWFwIDxtaWRkbGVtb3VzZT4JCTxQbHVnPk5ldHJ3TWlkZGxlbW91c2UKICAgICBubm8gIDxidWZmZXI+IDxzaWxlbnQ+CTxtaWRkbGVtb3VzZT4JCTxQbHVnPk5ldHJ3TWlkZGxlbW91c2UgPGxlZnRtb3VzZT46Y2FsbCA8U0lEPk5ldHJ3UHJldldpbk9wZW4oMCk8Y3I+CiAgICAgbm1hcCA8YnVmZmVyPiA8cy1sZWZ0bW91c2U+CTxQbHVnPk5ldHJ3U0xlZnRtb3VzZQpAQCAtMjQ0MSw2ICszMjEyLDEwIEBACiAiICAgIDY6ICh1c2VyOiA8bUI+KSAgIGRlbGV0ZSBib29rbWFyawogZnVuISBzOk5ldHJ3Qm9va0hpc3RIYW5kbGVyKGNoZyxjdXJkaXIpCiAiICBjYWxsIERmdW5jKCJzOk5ldHJ3Qm9va0hpc3RIYW5kbGVyKGNoZz0iLmE6Y2hnLiIgY3VyZGlyPCIuYTpjdXJkaXIuIj4pIGNudD0iLnY6Y291bnQuIiBoaXN0Y250PSIuZzpuZXRyd19kaXJoaXN0X2NudC4iIGhpc3RtYXg9Ii5nOm5ldHJ3X2Rpcmhpc3RtYXgpCisgIGlmICFleGlzdHMoImc6bmV0cndfZGlyaGlzdG1heCIpIHx8IGc6bmV0cndfZGlyaGlzdG1heCA8PSAwCisiICAgIiAgY2FsbCBEcmV0KCJzOk5ldHJ3Qm9va0hpc3RIYW5kbGVyIC0gc3VwcHJlc3NlZCBkdWUgdG8gZzpuZXRyd19kaXJoaXN0bWF4IikKKyAgIHJldHVybgorICBlbmRpZgogCiAgIGxldCB5a2VlcD0gQEAKICAgaWYgYTpjaGcgPT0gMApAQCAtMjQ1OCw4ICszMjMzLDkgQEAKIAogICBlbHNlaWYgYTpjaGcgPT0gMQogICAgIiBjaGFuZ2UgdG8gdGhlIGJvb2ttYXJrZWQgZGlyZWN0b3J5Ci0iICAgY2FsbCBEZWNobygiKHVzZXI6IDwiLnY6Y291bnQuIm1iPikgY2hhbmdlIHRvIHRoZSBib29rbWFya2VkIGRpcmVjdG9yeSIpCisiICAgY2FsbCBEZWNobygiKHVzZXI6IDwiLnY6Y291bnQuImdiPikgY2hhbmdlIHRvIHRoZSBib29rbWFya2VkIGRpcmVjdG9yeSIpCiAgICBpZiBleGlzdHMoImc6bmV0cndfYm9va21hcmtsaXN0W3Y6Y291bnQtMV0iKQorIiAgICBjYWxsIERlY2hvKCIodXNlcjogPCIudjpjb3VudC4iZ2I+KSBib29rbWFya2xpc3Q9Ii5zdHJpbmcoZzpuZXRyd19ib29rbWFya2xpc3QpKQogICAgIGV4ZSAia2VlcGogZSAiLmZuYW1lZXNjYXBlKGc6bmV0cndfYm9va21hcmtsaXN0W3Y6Y291bnQtMV0pCiAgICBlbHNlCiAgICAgZWNob21zZyAiU29ycnksIGJvb2ttYXJrIyIudjpjb3VudC4iIGRvZXNuJ3QgZXhpc3QhIgpAQCAtMjQ3NSw3ICszMjUxLDcgQEAKICAgICBsZXQgY250PSAxCiAgICAgZm9yIGJtZCBpbiBnOm5ldHJ3X2Jvb2ttYXJrbGlzdAogIiAgICAgY2FsbCBEZWNobygiTmV0cncgQm9va21hcmsjIi5jbnQuIjogIi5nOm5ldHJ3X2Jvb2ttYXJrbGlzdFtjbnQtMV0pCi0gICAgIGVjaG8gIk5ldHJ3IEJvb2ttYXJrIyIuY250LiI6ICIuZzpuZXRyd19ib29rbWFya2xpc3RbY250LTFdCisgICAgIGVjaG8gcHJpbnRmKCJOZXRydyBCb29rbWFyayMlLTJkOiAlcyIsY250LGc6bmV0cndfYm9va21hcmtsaXN0W2NudC0xXSkKICAgICAgbGV0IGRpZHdvcmsgPSAxCiAgICAgIGxldCBjbnQgICAgID0gY250ICsgMQogICAgIGVuZGZvcgpAQCAtMjQ4OCwxNCArMzI2NCwxNCBAQAogICAgaWYgZzpuZXRyd19kaXJoaXN0bWF4ID4gMAogICAgIHdoaWxlICggZmlyc3QgfHwgY250ICE9IGc6bmV0cndfZGlyaGlzdF9jbnQgKQogIiAgICBjYWxsIERlY2hvKCJmaXJzdD0iLmZpcnN0LiIgY250PSIuY250LiIgZGlyaGlzdF9jbnQ9Ii5nOm5ldHJ3X2Rpcmhpc3RfY250KQotICAgICBsZXQgaGlzdGNudD0gaGlzdGNudCArIDEKICAgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X2Rpcmhpc3Rfe2NudH0iKQogIiAgICAgY2FsbCBEZWNobygiTmV0cncgIEhpc3RvcnkjIi5oaXN0Y250LiI6ICIuZzpuZXRyd19kaXJoaXN0X3tjbnR9KQotICAgICAgZWNobyAiTmV0cncgIEhpc3RvcnkjIi5oaXN0Y250LiI6ICIuZzpuZXRyd19kaXJoaXN0X3tjbnR9CisgICAgICBlY2hvIHByaW50ZigiTmV0cncgIEhpc3RvcnkjJS0yZDogJXMiLGhpc3RjbnQsZzpuZXRyd19kaXJoaXN0X3tjbnR9KQogICAgICAgbGV0IGRpZHdvcms9IDEKICAgICAgZW5kaWYKLSAgICAgbGV0IGZpcnN0ID0gMAotICAgICBsZXQgY250ICAgPSAoIGNudCAtIDEgKSAlIGc6bmV0cndfZGlyaGlzdG1heAorICAgICBsZXQgaGlzdGNudCA9IGhpc3RjbnQgKyAxCisgICAgIGxldCBmaXJzdCAgID0gMAorICAgICBsZXQgY250ICAgICA9ICggY250IC0gMSApICUgZzpuZXRyd19kaXJoaXN0bWF4CiAgICAgIGlmIGNudCA8IDAKICAgICAgIGxldCBjbnQ9IGNudCArIGc6bmV0cndfZGlyaGlzdG1heAogICAgICBlbmRpZgpAQCAtMjUyMiw3ICszMjk4LDcgQEAKICAgICIgdTogY2hhbmdlIHRvIHRoZSBwcmV2aW91cyBkaXJlY3Rvcnkgc3RvcmVkIG9uIHRoZSBoaXN0b3J5IGxpc3QKICIgICBjYWxsIERlY2hvKCIodXNlcjogPHU+KSBjaGcgdG8gcHJldiBkaXIgZnJvbSBoaXN0b3J5IikKICAgIGlmIGc6bmV0cndfZGlyaGlzdG1heCA+IDAKLSAgICBsZXQgZzpuZXRyd19kaXJoaXN0X2NudD0gKCBnOm5ldHJ3X2Rpcmhpc3RfY250IC0gMSApICUgZzpuZXRyd19kaXJoaXN0bWF4CisgICAgbGV0IGc6bmV0cndfZGlyaGlzdF9jbnQ9ICggZzpuZXRyd19kaXJoaXN0X2NudCAtIHY6Y291bnQxICkgJSBnOm5ldHJ3X2Rpcmhpc3RtYXgKICAgICBpZiBnOm5ldHJ3X2Rpcmhpc3RfY250IDwgMAogICAgICBsZXQgZzpuZXRyd19kaXJoaXN0X2NudD0gZzpuZXRyd19kaXJoaXN0X2NudCArIGc6bmV0cndfZGlyaGlzdG1heAogICAgIGVuZGlmCkBAIC0yNTQzLDcgKzMzMTksNyBAQAogICAgIGV4ZSAia2VlcGogZSEgIi5mbmFtZWVzY2FwZShnOm5ldHJ3X2Rpcmhpc3Rfe2c6bmV0cndfZGlyaGlzdF9jbnR9KQogICAgZWxzZQogICAgIGlmIGc6bmV0cndfZGlyaGlzdG1heCA+IDAKLSAgICAgbGV0IGc6bmV0cndfZGlyaGlzdF9jbnQ9ICggZzpuZXRyd19kaXJoaXN0X2NudCArIDEgKSAlIGc6bmV0cndfZGlyaGlzdG1heAorICAgICBsZXQgZzpuZXRyd19kaXJoaXN0X2NudD0gKCBnOm5ldHJ3X2Rpcmhpc3RfY250ICsgdjpjb3VudDEgKSAlIGc6bmV0cndfZGlyaGlzdG1heAogICAgIGVsc2UKICAgICAgbGV0IGc6bmV0cndfZGlyaGlzdF9jbnQ9IDAKICAgICBlbmRpZgpAQCAtMjU4NSwxMiArMzM2MSwxNyBAQAogIiAgIGNhbGwgRGVjaG8oImRlbGV0ZSBib29rbWFyayMiLnY6Y291bnQuIjwiLmc6bmV0cndfYm9va21hcmtsaXN0W3Y6Y291bnQtMV0uIj4iKQogICAgbGV0IHNhdmVmaWxlPSBzOk5ldHJ3SG9tZSgpLiIvLm5ldHJ3Ym9vayIKICAgIGlmIGZpbGVyZWFkYWJsZShzYXZlZmlsZSkKKyIgICAgY2FsbCBEZWNobygibWVyZ2UgYm9va21hcmtzIChhY3RpdmUgYW5kIGZpbGUpIikKICAgICBrZWVwaiBjYWxsIHM6TmV0cndCb29rSGlzdFNhdmUoKSAiIGRvbmUgaGVyZSB0byBtZXJnZSBib29rbWFya3MgZmlyc3QKKyIgICAgY2FsbCBEZWNobygiYm9va21hcmsgZGVsZXRlIHNhdmVmaWxlPCIuc2F2ZWZpbGUuIj4iKQogICAgIGtlZXBqIGNhbGwgZGVsZXRlKHNhdmVmaWxlKQogICAgZW5kaWYKKyIgICBjYWxsIERlY2hvKCJyZW1vdmUgZzpuZXRyd19ib29rbWFya2xpc3RbIi4odjpjb3VudC0xKS4iXSIpCiAgICBrZWVwaiBjYWxsIHJlbW92ZShnOm5ldHJ3X2Jvb2ttYXJrbGlzdCx2OmNvdW50LTEpCisiICAgY2FsbCBEZWNobygicmVzdWx0aW5nIGc6bmV0cndfYm9va21hcmtsaXN0PSIuc3RyaW5nKGc6bmV0cndfYm9va21hcmtsaXN0KSkKICAgZW5kaWYKICAgY2FsbCBzOk5ldHJ3Qm9va21hcmtNZW51KCkKKyAgY2FsbCBzOk5ldHJ3VGd0TWVudSgpCiAgIGxldCBAQD0geWtlZXAKICIgIGNhbGwgRHJldCgiczpOZXRyd0Jvb2tIaXN0SGFuZGxlciIpCiBlbmRmdW4KQEAgLTI2MDAsMTkgKzMzODEsMjMgQEAKICIgICAgICAgICAgICAgICAgICAgICAgU2lzdGVyIGZ1bmN0aW9uOiBzOk5ldHJ3Qm9va0hpc3RTYXZlKCkKIGZ1biEgczpOZXRyd0Jvb2tIaXN0UmVhZCgpCiAiICBjYWxsIERmdW5jKCJzOk5ldHJ3Qm9va0hpc3RSZWFkKCkiKQorICBpZiAhZXhpc3RzKCJnOm5ldHJ3X2Rpcmhpc3RtYXgiKSB8fCBnOm5ldHJ3X2Rpcmhpc3RtYXggPD0gMAorIiAgICIgIGNhbGwgRHJldCgiczpOZXRyd0Jvb2tIaXN0UmVhZCAtIHN1cHByZXNzZWQgZHVlIHRvIGc6bmV0cndfZGlyaGlzdG1heCIpCisgICByZXR1cm4KKyAgZW5kaWYKICAgbGV0IHlrZWVwPSBAQAogICBpZiAhZXhpc3RzKCJzOm5ldHJ3X2luaXRib29raGlzdCIpCiAgICBsZXQgaG9tZSAgICA9IHM6TmV0cndIb21lKCkKICAgIGxldCBzYXZlZmlsZT0gaG9tZS4iLy5uZXRyd2Jvb2siCiAgICBpZiBmaWxlcmVhZGFibGUoc2F2ZWZpbGUpCiAiICAgIGNhbGwgRGVjaG8oInNvdXJjaW5nIC5uZXRyd2Jvb2siKQotICAgIGV4ZSAia2VlcGogc28gIi5zYXZlZmlsZQorICAgIGV4ZSAia2VlcGFsdCBrZWVwaiBzbyAiLnNhdmVmaWxlCiAgICBlbmRpZgogICAgaWYgZzpuZXRyd19kaXJoaXN0bWF4ID4gMAogICAgIGxldCBzYXZlZmlsZT0gaG9tZS4iLy5uZXRyd2hpc3QiCiAgICAgaWYgZmlsZXJlYWRhYmxlKHNhdmVmaWxlKQogIiAgICBjYWxsIERlY2hvKCJzb3VyY2luZyAubmV0cndoaXN0IikKLSAgICAgZXhlICJrZWVwaiBzbyAiLnNhdmVmaWxlCisgICAgIGV4ZSAia2VlcGFsdCBrZWVwaiBzbyAiLnNhdmVmaWxlCiAgICAgZW5kaWYKICAgICBsZXQgczpuZXRyd19pbml0Ym9va2hpc3Q9IDEKICAgICBhdSBWaW1MZWF2ZSAqIGNhbGwgczpOZXRyd0Jvb2tIaXN0U2F2ZSgpCkBAIC0yNjI5LDcgKzM0MTQsNyBAQAogIiAgICAgICAgICAgICAgICAgICAgICBiZSB1bnJlbGlhYmxlIGZvciBsb25nLXRlcm0gc3RvcmFnZQogZnVuISBzOk5ldHJ3Qm9va0hpc3RTYXZlKCkKICIgIGNhbGwgRGZ1bmMoInM6TmV0cndCb29rSGlzdFNhdmUoKSBkaXJoaXN0bWF4PSIuZzpuZXRyd19kaXJoaXN0bWF4KQotICBpZiBnOm5ldHJ3X2Rpcmhpc3RtYXggPD0gMAorICBpZiAhZXhpc3RzKCJnOm5ldHJ3X2Rpcmhpc3RtYXgiKSB8fCBnOm5ldHJ3X2Rpcmhpc3RtYXggPD0gMAogIiAgIGNhbGwgRHJldCgiczpOZXRyd0Jvb2tIaXN0U2F2ZSA6IGRpcmhpc3RtYXg9Ii5nOm5ldHJ3X2Rpcmhpc3RtYXgpCiAgICByZXR1cm4KICAgZW5kaWYKQEAgLTI2MzcsMTQgKzM0MjIsMTQgQEAKICAgbGV0IHNhdmVmaWxlPSBzOk5ldHJ3SG9tZSgpLiIvLm5ldHJ3aGlzdCIKICAgMXNwbGl0CiAgIGNhbGwgczpOZXRyd0VuZXcoKQotICBzZXRsb2NhbCBjaW5vPSBjb209IGNwby09YSBjcG8tPUEgZm89bnJvcWwyIHR3PTAgcmVwb3J0PTEwMDAwIG5vc3dmCi0gIHNldGxvY2FsIG5vY2luIG5vYWkgbm9jaSBtYWdpYyBub3NwZWxsIG5vaGlkIHdpZz0gbm9hdwotICBzZXRsb2NhbCBtYSBub3JvIHdyaXRlCi0gIGlmIGV4aXN0cygiJmFjZCIpIHwgc2V0bG9jYWwgbm9hY2QgfCBlbmRpZgorICBzZXRsIGNpbm89IGNvbT0gY3BvLT1hIGNwby09QSBmbz1ucm9xbDIgdHc9MCByZXBvcnQ9MTAwMDAgbm9zd2YKKyAgc2V0bCBub2NpbiBub2FpIG5vY2kgbWFnaWMgbm9zcGVsbCBub2hpZCB3aWc9IG5vYXcKKyAgc2V0bCBtYSBub3JvIHdyaXRlCisgIGlmIGV4aXN0cygiK2FjZCIpIHwgc2V0bCBub2FjZCB8IGVuZGlmCiAgIHNpbCEga2VlcGoga2VlcGFsdCAlZAogCiAgICIgc2F2ZSAubmV0cndoaXN0IC0tIG5vIGF0dGVtcHQgdG8gbWVyZ2UKLSAgc2lsISBmaWxlIC5uZXRyd2hpc3QKKyAgc2lsISBrZWVwYWx0IGZpbGUgLm5ldHJ3aGlzdAogICBjYWxsIHNldGxpbmUoMSwibGV0IGc6bmV0cndfZGlyaGlzdG1heCAgPSIuZzpuZXRyd19kaXJoaXN0bWF4KQogICBjYWxsIHNldGxpbmUoMiwibGV0IGc6bmV0cndfZGlyaGlzdF9jbnQgPSIuZzpuZXRyd19kaXJoaXN0X2NudCkKICAgbGV0IGxhc3RsaW5lID0gbGluZSgiJCIpCkBAIC0yNjYyLDcgKzM0NDcsNyBAQAogCiAgICBpZiBmaWxlcmVhZGFibGUoc2F2ZWZpbGUpCiAgICAgbGV0IGJvb2tsaXN0PSBkZWVwY29weShnOm5ldHJ3X2Jvb2ttYXJrbGlzdCkKLSAgICBleGUgInNpbCBrZWVwaiBzbyAiLnNhdmVmaWxlCisgICAgZXhlICJzaWwga2VlcGoga2VlcGFsdCBzbyAiLnNhdmVmaWxlCiAgICAgZm9yIGJkbSBpbiBib29rbGlzdAogICAgICBpZiBpbmRleChnOm5ldHJ3X2Jvb2ttYXJrbGlzdCxiZG0pID09IC0xCiAgICAgICBjYWxsIGFkZChnOm5ldHJ3X2Jvb2ttYXJrbGlzdCxiZG0pCkBAIC0yNjc4LDcgKzM0NjMsNyBAQAogICBlbmRpZgogICBsZXQgYmdvbmU9IGJ1Zm5yKCIlIikKICAgcSEKLSAgZXhlIGJnb25lLiJid2lwZSEiCisgIGV4ZSAia2VlcGFsdCAiLmJnb25lLiJid2lwZSEiCiAKICIgIGNhbGwgRHJldCgiczpOZXRyd0Jvb2tIaXN0U2F2ZSIpCiBlbmRmdW4KQEAgLTI2OTEsNyArMzQ3Niw3IEBACiBmdW4hIHM6TmV0cndCcm93c2UoaXNsb2NhbCxkaXJuYW1lKQogICBpZiAhZXhpc3RzKCJ3Om5ldHJ3X2xpc3RzdHlsZSIpfGxldCB3Om5ldHJ3X2xpc3RzdHlsZT0gZzpuZXRyd19saXN0c3R5bGV8ZW5kaWYKICIgIGNhbGwgRGZ1bmMoInM6TmV0cndCcm93c2UoaXNsb2NhbD0iLmE6aXNsb2NhbC4iIGRpcm5hbWU8Ii5hOmRpcm5hbWUuIj4pIGxpc3RzdHlsZT0iLnc6bmV0cndfbGlzdHN0eWxlLiIgIi5nOmxvYWRlZF9uZXRydy4iIGJ1ZiMiLmJ1Zm5yKCIlIikuIjwiLmJ1Zm5hbWUoIiUiKS4iPiB3aW4jIi53aW5ucigpKQotIiAgY2FsbCBEZWNobygidGFiIyIudGFicGFnZW5yKCkuIiB3aW4jIi53aW5ucigpLiIgYnVmIyIuYnVmbnIoIiUiKS4iIG1vZGlmaWVkPSIuJm1vZGlmaWVkLiIgbW9kaWZpYWJsZT0iLiZtb2RpZmlhYmxlLiIgcmVhZG9ubHk9Ii4mcmVhZG9ubHkpCisiICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2UpIHRhYiMiLnRhYnBhZ2VucigpLiIgd2luIyIud2lubnIoKS4iIGJ1ZiMiLmJ1Zm5yKCIlIikuIiBtb2RpZmllZD0iLiZtb2RpZmllZC4iIG1vZGlmaWFibGU9Ii4mbW9kaWZpYWJsZS4iIHJlYWRvbmx5PSIuJnJlYWRvbmx5KQogIiAgY2FsbCBEcmVkaXIoImxzISIpCiAgICIgczpOZXRyd0Jyb3dzZTogaW5pdGlhbGl6ZSBoaXN0b3J5IHt7ezMKICAgaWYgIWV4aXN0cygiczpuZXRyd19pbml0Ym9va2hpc3QiKQpAQCAtMjcyOSwzOCArMzUxNCwzOCBAQAogCiAgICIgczpOZXRyd0Jyb3dzZTogcmUtaW5zdGF0ZSBhbnkgbWFya2VkIGZpbGVzIHt7ezMKICAgaWYgZXhpc3RzKCJzOm5ldHJ3bWFya2ZpbGVsaXN0X3tidWZucignJScpfSIpCi0iICAgY2FsbCBEZWNobygiY2xlYXJpbmcgbWFya2VkIGZpbGVzIikKKyIgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2UpIGNsZWFyaW5nIG1hcmtlZCBmaWxlcyIpCiAgICBleGUgIjJtYXRjaCBuZXRyd01hcmtGaWxlIC8iLnM6bmV0cndtYXJrZmlsZW10Y2hfe2J1Zm5yKCIlIil9LiIvIgogICBlbmRpZgogCiAgIGlmIGE6aXNsb2NhbCAmJiBleGlzdHMoInc6bmV0cndfYWNka2VlcCIpICYmIHc6bmV0cndfYWNka2VlcAogICAgIiBzOk5ldHJ3QnJvd3NlOiBzZXQgdXAgInNhZmUiIG9wdGlvbnMgZm9yIGxvY2FsIGRpcmVjdG9yeS9maWxlIHt7ezMKLSIgICBjYWxsIERlY2hvKCJoYW5kbGUgdzpuZXRyd19hY2RrZWVwOiIpCi0iICAgY2FsbCBEZWNobygia2VlcGp1bXBzIGxjZCAiLmZuYW1lZXNjYXBlKGRpcm5hbWUpLiIgKGR1ZSB0byB3Om5ldHJ3X2FjZGtlZXA9Ii53Om5ldHJ3X2FjZGtlZXAuIiAtIGFjZD0iLiZhY2QuIikiKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZSkgaGFuZGxlIHc6bmV0cndfYWNka2VlcDoiKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZSkga2VlcGp1bXBzIGxjZCAiLmZuYW1lZXNjYXBlKGRpcm5hbWUpLiIgKGR1ZSB0byB3Om5ldHJ3X2FjZGtlZXA9Ii53Om5ldHJ3X2FjZGtlZXAuIiAtIGFjZD0iLiZhY2QuIikiKQogICAgZXhlICdrZWVwaiBsY2QgJy5mbmFtZWVzY2FwZShkaXJuYW1lKQogICAgY2FsbCBzOk5ldHJ3U2FmZU9wdGlvbnMoKQotIiAgIGNhbGwgRGVjaG8oImdldGN3ZDwiLmdldGN3ZCgpLiI+IikKKyIgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2UpIGdldGN3ZDwiLmdldGN3ZCgpLiI+IikKIAogICBlbHNlaWYgIWE6aXNsb2NhbCAmJiBkaXJuYW1lICF+ICdbXC9dJCcgJiYgZGlybmFtZSAhfiAnXiInCiAgICAiIHM6TmV0cndCcm93c2U6IGxvb2tzIGxpa2UgYSByZW1vdGUgcmVndWxhciBmaWxlLCBhdHRlbXB0IHRyYW5zZmVyIHt7ezMKLSIgICBjYWxsIERlY2hvKCJhdHRlbXB0IHRyYW5zZmVyIGFzIHJlZ3VsYXIgZmlsZTwiLmRpcm5hbWUuIj4iKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZSkgYXR0ZW1wdCB0cmFuc2ZlciBhcyByZWd1bGFyIGZpbGU8Ii5kaXJuYW1lLiI+IikKIAogICAgIiByZW1vdmUgYW55IGZpbGV0eXBlIGluZGljYXRvciBmcm9tIGVuZCBvZiBkaXJuYW1lLCBleGNlcHQgZm9yIHRoZQogICAgIiAidGhpcyBpcyBhIGRpcmVjdG9yeSIgaW5kaWNhdG9yICgvKS4KICAgICIgVGhlcmUgc2hvdWxkbid0IGJlIG9uZSBvZiB0aG9zZSBoZXJlLCBhbnl3YXkuCiAgICBsZXQgcGF0aD0gc3Vic3RpdHV0ZShkaXJuYW1lLCdbKj1AfF1cclw9JCcsJycsJ2UnKQotIiAgIGNhbGwgRGVjaG8oIm5ldyBwYXRoPCIucGF0aC4iPiIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlKSBuZXcgcGF0aDwiLnBhdGguIj4iKQogICAgY2FsbCBzOlJlbW90ZVBhdGhBbmFseXNpcyhkaXJuYW1lKQogCiAgICAiIHM6TmV0cndCcm93c2U6IHJlbW90ZS1yZWFkIHRoZSByZXF1ZXN0ZWQgZmlsZSBpbnRvIGN1cnJlbnQgYnVmZmVyIHt7ezMKICAgIGtlZXBqIG1hcmsgJwogICAgY2FsbCBzOk5ldHJ3RW5ldyhkaXJuYW1lKQogICAgY2FsbCBzOk5ldHJ3U2FmZU9wdGlvbnMoKQotICAgc2V0bG9jYWwgbWEgbm9ybwotIiAgIGNhbGwgRGVjaG8oInNldGxvY2FsIG1hIG5vcm8iKQorICAgc2V0bCBtYSBub3JvCisiICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlKSBzZXRsIG1hIG5vcm8iKQogICAgbGV0IGI6bmV0cndfY3VyZGlyID0gZGlybmFtZQogICAgbGV0IHVybCAgICAgICAgICAgID0gczptZXRob2QuIjovLyIuczp1c2VyLnM6bWFjaGluZS4oczpwb3J0ID8gIjoiLnM6cG9ydCA6ICIiKS4iLyIuczpwYXRoCi0iICAgY2FsbCBEZWNobygiZXhlIHNpbCEga2VlcGFsdCBmaWxlICIuZm5hbWVlc2NhcGUodXJsKS4iIChidD0iLiZidC4iKSIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlKSBleGUgc2lsISBrZWVwYWx0IGZpbGUgIi5mbmFtZWVzY2FwZSh1cmwpLiIgKGJ0PSIuJmJ0LiIpIikKICAgIGV4ZSAic2lsISBrZWVwaiBrZWVwYWx0IGZpbGUgIi5mbmFtZWVzY2FwZSh1cmwpCiAgICBleGUgInNpbCEga2VlcGoga2VlcGFsdCBkb2F1IEJ1ZlJlYWRQcmUgIi5mbmFtZWVzY2FwZShzOmZuYW1lKQogICAgc2lsIGNhbGwgbmV0cncjTmV0UmVhZCgyLHVybCkKQEAgLTI3NzIsNyArMzU1Nyw3IEBACiAgICAiIHM6TmV0cndCcm93c2U6IHNhdmUgY2VydGFpbiB3aW5kb3ctb3JpZW50ZWQgdmFyaWFibGVzIGludG8gYnVmZmVyLW9yaWVudGVkIHZhcmlhYmxlcyB7e3szCiAgICBjYWxsIHM6U2V0QnVmV2luVmFycygpCiAgICBjYWxsIHM6TmV0cndPcHRpb25SZXN0b3JlKCJ3OiIpCi0iICAgY2FsbCBEZWNobygic2V0bCBtYSBub21vZCIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlKSBzZXRsIG1hIG5vbW9kIikKICAgIHNldGwgbWEgbm9tb2QKICIgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2UpICBybz0iLiZsOnJvLiIgbWE9Ii4mbDptYS4iIG1vZD0iLiZsOm1vZC4iIHdyYXA9Ii4mbDp3cmFwLiIgKGZpbGVuYW1lPCIuZXhwYW5kKCIlIikuIj4gd2luIyIud2lubnIoKS4iIGZ0PCIuJmZ0LiI+KSIpCiAKQEAgLTI3OTUsMjQgKzM1ODAsMjQgQEAKICAgbGV0IHJldXNpbmc9IHM6TmV0cndHZXRCdWZmZXIoYTppc2xvY2FsLGRpcm5hbWUpCiAgICIgbWFpbnRhaW4gbWFya2ZpbGUgaGlnaGxpZ2h0aW5nCiAgIGlmIGV4aXN0cygiczpuZXRyd21hcmtmaWxlbXRjaF97YnVmbnIoJyUnKX0iKSAmJiBzOm5ldHJ3bWFya2ZpbGVtdGNoX3tidWZucigiJSIpfSAhPSAiIgotIiAgIGNhbGwgRGVjaG8oImJ1Zm5yKCUpPSIuYnVmbnIoJyUnKSkKLSIgICBjYWxsIERlY2hvKCJleGUgMm1hdGNoIG5ldHJ3TWFya0ZpbGUgLyIuczpuZXRyd21hcmtmaWxlbXRjaF97YnVmbnIoIiUiKX0uIi8iKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZSkgYnVmbnIoJSk9Ii5idWZucignJScpKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZSkgZXhlIDJtYXRjaCBuZXRyd01hcmtGaWxlIC8iLnM6bmV0cndtYXJrZmlsZW10Y2hfe2J1Zm5yKCIlIil9LiIvIikKICAgIGV4ZSAiMm1hdGNoIG5ldHJ3TWFya0ZpbGUgLyIuczpuZXRyd21hcmtmaWxlbXRjaF97YnVmbnIoIiUiKX0uIi8iCiAgIGVsc2UKLSIgICBjYWxsIERlY2hvKCIybWF0Y2ggbm9uZSIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlKSAybWF0Y2ggbm9uZSIpCiAgICAybWF0Y2ggbm9uZQogICBlbmRpZgotICBpZiByZXVzaW5nCisgIGlmIHJldXNpbmcgJiYgbGluZSgiJCIpID4gMQogICAgY2FsbCBzOk5ldHJ3T3B0aW9uUmVzdG9yZSgidzoiKQogIiAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZSkgc2V0bCBub21hIG5vbW9kIG5vd3JhcCIpCiAgICBzZXRsIG5vbWEgbm9tb2Qgbm93cmFwCi0iICAgY2FsbCBEZWNobygiKHNldCBub21hIG5vbW9kIG5vd3JhcCkgIHJvPSIuJmw6cm8uIiBtYT0iLiZsOm1hLiIgbW9kPSIuJmw6bW9kLiIgd3JhcD0iLiZsOndyYXAuIiAoZmlsZW5hbWU8Ii5leHBhbmQoIiUiKS4iPiB3aW4jIi53aW5ucigpLiIgZnQ8Ii4mZnQuIj4pIikKKyIgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2UpIChzZXQgbm9tYSBub21vZCBub3dyYXApICBybz0iLiZsOnJvLiIgbWE9Ii4mbDptYS4iIG1vZD0iLiZsOm1vZC4iIHdyYXA9Ii4mbDp3cmFwLiIgKGZpbGVuYW1lPCIuZXhwYW5kKCIlIikuIj4gd2luIyIud2lubnIoKS4iIGZ0PCIuJmZ0LiI+KSIpCiAiICAgY2FsbCBEcmV0KCJzOk5ldHJ3QnJvd3NlIDogcmUtdXNpbmcgYnVmZmVyIikKICAgIHJldHVybgogICBlbmRpZgogCiAgICIgc2V0IGI6bmV0cndfY3VyZGlyIHRvIHRoZSBuZXcgZGlyZWN0b3J5IG5hbWUge3t7MwotIiAgY2FsbCBEZWNobygic2V0IGI6bmV0cndfY3VyZGlyIHRvIHRoZSBuZXcgZGlyZWN0b3J5IG5hbWU6ICAoYnVmIyIuYnVmbnIoIiUiKS4iKSIpCisiICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2UpIHNldCBiOm5ldHJ3X2N1cmRpciB0byB0aGUgbmV3IGRpcmVjdG9yeSBuYW1lOiAgKGJ1ZiMiLmJ1Zm5yKCIlIikuIikiKQogICBsZXQgYjpuZXRyd19jdXJkaXI9IGRpcm5hbWUKICAgaWYgYjpuZXRyd19jdXJkaXIgPX4gJ1svXFxdJCcKICAgIGxldCBiOm5ldHJ3X2N1cmRpcj0gc3Vic3RpdHV0ZShiOm5ldHJ3X2N1cmRpciwnWy9cXF0kJywnJywnZScpCkBAIC0yODMwLDIxICszNjE1LDIxIEBACiAgIGlmICFhOmlzbG9jYWwgJiYgYjpuZXRyd19jdXJkaXIgIX4gJy8kJwogICAgbGV0IGI6bmV0cndfY3VyZGlyPSBiOm5ldHJ3X2N1cmRpci4nLycKICAgZW5kaWYKLSIgIGNhbGwgRGVjaG8oImI6bmV0cndfY3VyZGlyPCIuYjpuZXRyd19jdXJkaXIuIj4iKQorIiAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlKSBiOm5ldHJ3X2N1cmRpcjwiLmI6bmV0cndfY3VyZGlyLiI+IikKIAogICAiIC0tLS0tLS0tLS0tLQogICAiIChsb2NhbCBvbmx5KSB7e3szCiAgICIgLS0tLS0tLS0tLS0tCiAgIGlmIGE6aXNsb2NhbAotIiAgIGNhbGwgRGVjaG8oImxvY2FsIG9ubHk6IikKKyIgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2UpIGxvY2FsIG9ubHk6IikKIAogICAgIiBTZXQgdXAgU2hlbGxDbWRQb3N0IGhhbmRsaW5nLiAgQXBwZW5kIGN1cnJlbnQgYnVmZmVyIHRvIGJyb3dzZWxpc3QKICAgIGNhbGwgczpMb2NhbEZhc3RCcm93c2VyKCkKIAogICAiIGhhbmRsZSBnOm5ldHJ3X2tlZXBkaXI6IHNldCB2aW0ncyBjdXJyZW50IGRpcmVjdG9yeSB0byBuZXRydydzIG5vdGlvbiBvZiB0aGUgY3VycmVudCBkaXJlY3Rvcnkge3t7MwogICAgaWYgIWc6bmV0cndfa2VlcGRpcgotIiAgICBjYWxsIERlY2hvKCJoYW5kbGUgZzpuZXRyd19rZWVwZGlyPSIuZzpuZXRyd19rZWVwZGlyLiI6IGdldGN3ZDwiLmdldGN3ZCgpLiI+IGFjZD0iLiZhY2QpCi0iICAgIGNhbGwgRGVjaG8oImw6YWNkIi4oZXhpc3RzKCImbDphY2QiKT8gIj0iLiZsOmFjZCA6ICIgZG9lc24ndCBleGlzdCIpKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2UpIGhhbmRsZSBnOm5ldHJ3X2tlZXBkaXI9Ii5nOm5ldHJ3X2tlZXBkaXIuIjogZ2V0Y3dkPCIuZ2V0Y3dkKCkuIj4gYWNkPSIuJmFjZCkKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlKSBsOmFjZCIuKGV4aXN0cygiJmw6YWNkIik/ICI9Ii4mbDphY2QgOiAiIGRvZXNuJ3QgZXhpc3QiKSkKICAgICBpZiAhZXhpc3RzKCImbDphY2QiKSB8fCAhJmw6YWNkCiAiICAgICBjYWxsIERlY2hvKCdleGUga2VlcGp1bXBzIGxjZCAnLmZuYW1lZXNjYXBlKGI6bmV0cndfY3VyZGlyKSkKICAgICAgdHJ5CkBAIC0yODcwLDIzICszNjU1LDIzIEBACiAgICIgcmVtb3RlIGhhbmRsaW5nOiB7e3szCiAgICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgZWxzZQotIiAgIGNhbGwgRGVjaG8oInJlbW90ZSBvbmx5OiIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlKSByZW1vdGUgb25seToiKQogCiAgICAiIGFuYWx5emUgZGlybmFtZSBhbmQgZzpuZXRyd19saXN0X2NtZCB7e3szCi0iICAgY2FsbCBEZWNobygiYjpuZXRyd19jdXJkaXI8Ii4oZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpPyBiOm5ldHJ3X2N1cmRpciA6ICJkb2Vzbid0IGV4aXN0IikuIj4gZGlybmFtZTwiLmRpcm5hbWUuIj4iKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZSkgYjpuZXRyd19jdXJkaXI8Ii4oZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpPyBiOm5ldHJ3X2N1cmRpciA6ICJkb2Vzbid0IGV4aXN0IikuIj4gZGlybmFtZTwiLmRpcm5hbWUuIj4iKQogICAgaWYgZGlybmFtZSA9fiAiXk5ldHJ3VHJlZUxpc3RpbmdcPiIKICAgICBsZXQgZGlybmFtZT0gYjpuZXRyd19jdXJkaXIKLSIgICAgY2FsbCBEZWNobygiKGRpcm5hbWUgd2FzIDxOZXRyd1RyZWVMaXN0aW5nPikgZGlybmFtZTwiLmRpcm5hbWUuIj4iKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2UpIChkaXJuYW1lIHdhcyA8TmV0cndUcmVlTGlzdGluZz4pIGRpcm5hbWU8Ii5kaXJuYW1lLiI+IikKICAgIGVsc2VpZiBleGlzdHMoInc6bmV0cndfbGlzdHN0eWxlIikgJiYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpUUkVFTElTVCAmJiBleGlzdHMoImI6bmV0cndfY3VyZGlyIikKICAgICBsZXQgZGlybmFtZT0gc3Vic3RpdHV0ZShiOm5ldHJ3X2N1cmRpciwnXFwnLCcvJywnZycpCiAgICAgaWYgZGlybmFtZSAhfiAnLyQnCiAgICAgIGxldCBkaXJuYW1lPSBkaXJuYW1lLicvJwogICAgIGVuZGlmCiAgICAgbGV0IGI6bmV0cndfY3VyZGlyID0gZGlybmFtZQotIiAgICBjYWxsIERlY2hvKCIobGlzdHN0eWxlIGlzIFRSRUVMSVNUKSBkaXJuYW1lPCIuZGlybmFtZS4iPiIpCisiICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZSkgKGxpc3RzdHlsZSBpcyBUUkVFTElTVCkgZGlybmFtZTwiLmRpcm5hbWUuIj4iKQogICAgZWxzZQogICAgIGxldCBkaXJuYW1lID0gc3Vic3RpdHV0ZShkaXJuYW1lLCdcXCcsJy8nLCdnJykKLSIgICAgY2FsbCBEZWNobygiKG5vcm1hbCkgZGlybmFtZTwiLmRpcm5hbWUuIj4iKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2UpIChub3JtYWwpIGRpcm5hbWU8Ii5kaXJuYW1lLiI+IikKICAgIGVuZGlmCiAKICAgIGxldCBkaXJwYXQgID0gJ15cKFx3XHstfVwpOi8vXChcd1wrQFwpXD1cKFteL11cK1wpL1woLipcKSQnCkBAIC0yOTAyLDcgKzM2ODcsNyBAQAogICAgIHJldHVybgogICAgZW5kaWYKICAgIGxldCBiOm5ldHJ3X2N1cmRpcj0gZGlybmFtZQotIiAgIGNhbGwgRGVjaG8oImI6bmV0cndfY3VyZGlyPCIuYjpuZXRyd19jdXJkaXIuIj4gKHJlbW90ZSkiKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZSkgYjpuZXRyd19jdXJkaXI8Ii5iOm5ldHJ3X2N1cmRpci4iPiAocmVtb3RlKSIpCiAgIGVuZGlmICAiIChhZGRpdGlvbmFsIHJlbW90ZSBoYW5kbGluZykKIAogICAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yOTEyLDcgKzM2OTcsNyBAQAogICBrZWVwaiBjYWxsIHM6UGVyZm9ybUxpc3RpbmcoYTppc2xvY2FsKQogICBpZiB2OnZlcnNpb24gPj0gNzAwICYmIGhhcygiYmFsbG9vbl9ldmFsIikgJiYgJmJldmFsID09IDAgJiYgJmw6YmV4cHIgPT0gIiIgJiYgIWV4aXN0cygiZzpuZXRyd19ub2JldmFsIikKICAgIGxldCAmbDpiZXhwcj0gIm5ldHJ3I05ldHJ3QmFsbG9vbkhlbHAoKSIKLSIgICBjYWxsIERlY2hvKCJzZXQgdXAgYmFsbG9vbiBoZWxwOiBsOmJleHByPSIuJmw6YmV4cHIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlKSBzZXQgdXAgYmFsbG9vbiBoZWxwOiBsOmJleHByPSIuJmw6YmV4cHIpCiAgICBzZXQgYmV2YWwKICAgZW5kaWYKICAgY2FsbCBzOk5ldHJ3T3B0aW9uUmVzdG9yZSgidzoiKQpAQCAtMjk3NywzNSArMzc2MiwzNiBAQAogICBsZXQgZGlybmFtZT0gYTpkaXJuYW1lCiAKICAgIiByZS11c2UgYnVmZmVyIGlmIHBvc3NpYmxlIHt7ezMKLSIgIGNhbGwgRGVjaG8oIi0tcmUtdXNlIGEgYnVmZmVyIGlmIHBvc3NpYmxlLS0iKQorIiAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAtLXJlLXVzZSBhIGJ1ZmZlciBpZiBwb3NzaWJsZS0tIikKICAgaWYgZXhpc3RzKCJ3Om5ldHJ3X2xpc3RzdHlsZSIpICYmIHc6bmV0cndfbGlzdHN0eWxlID09IHM6VFJFRUxJU1QKICAgICIgZmluZCBOZXRyd1RyZWVMaXN0IGJ1ZmZlciBpZiB0aGVyZSBpcyBvbmUKLSIgICBjYWxsIERlY2hvKCJjYXNlIGxpc3RzdHlsZT10cmVlbGlzdDogZmluZCBOZXRyd1RyZWVMaXN0IGJ1ZmZlciBpZiB0aGVyZSBpcyBvbmUiKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd0dldEJ1ZmZlcikgY2FzZSBsaXN0c3R5bGU9dHJlZWxpc3Q6IGZpbmQgTmV0cndUcmVlTGlzdCBidWZmZXIgaWYgdGhlcmUgaXMgb25lIikKICAgIGlmIGV4aXN0cygidzpuZXRyd190cmVlYnVmbnIiKSAmJiB3Om5ldHJ3X3RyZWVidWZuciA+IDAKLSIgICAgY2FsbCBEZWNobygiICByZS11c2UgdzpuZXRyd190cmVlYnVmbnI9Ii53Om5ldHJ3X3RyZWVidWZucikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIHJlLXVzZSB3Om5ldHJ3X3RyZWVidWZucj0iLnc6bmV0cndfdHJlZWJ1Zm5yKQorICAgIHNpbCBrZWVwaiAlZAogICAgIGxldCBlaWtlZXA9ICZlaQogICAgIHNldCBlaT1hbGwKLSAgICBleGUgInNpbCEgYiAiLnc6bmV0cndfdHJlZWJ1Zm5yCisgICAgZXhlICJzaWwhIGtlZXBhbHQgYiAiLnc6bmV0cndfdHJlZWJ1Zm5yCiAgICAgbGV0ICZlaT0gZWlrZWVwCi0iICAgIGNhbGwgRHJldCgiczpOZXRyd0dldEJ1ZmZlciAxPGJ1ZmZlciBub3QgY2xlYXJlZD4gOiBidWZudW0jIi53Om5ldHJ3X3RyZWVidWZuci4iPE5ldHJ3VHJlZUxpc3Rpbmc+IikKLSAgICByZXR1cm4gMQorIiAgICBjYWxsIERyZXQoInM6TmV0cndHZXRCdWZmZXIgMDxidWZmZXIgY2xlYXJlZD4gOiBidWZudW0jIi53Om5ldHJ3X3RyZWVidWZuci4iPE5ldHJ3VHJlZUxpc3Rpbmc+IikKKyAgICByZXR1cm4gMAogICAgZW5kaWYKICAgIGxldCBidWZudW09IC0xCi0iICAgY2FsbCBEZWNobygiICBsaXN0c3R5bGU9VFJFRSBidXQgdzpuZXRyd190cmVlYnVmbnIgZG9lc24ndCBleGlzdCIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIGxpc3RzdHlsZT1UUkVFIGJ1dCB3Om5ldHJ3X3RyZWVidWZuciBkb2Vzbid0IGV4aXN0IikKIAogICBlbHNlCiAgICAiIGZpbmQgYnVmZmVyIG51bWJlciBvZiBidWZmZXIgbmFtZWQgcHJlY2lzZWx5IHRoZSBzYW1lIGFzIGRpcm5hbWUge3t7MwotIiAgIGNhbGwgRGVjaG8oImNhc2UgbGlzdHR5bGUgbm90IHRyZWVsaXN0OiBmaW5kIGJ1ZmZlciBudW1uYmVyIG9mIGJ1ZmZlciBuYW1lZCBwcmVjaXNlbHkgdGhlIHNhbWUgYXMgZGlybmFtZS0tIikKKyIgICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpIGNhc2UgbGlzdHR5bGUgbm90IHRyZWVsaXN0OiBmaW5kIGJ1ZmZlciBudW1uYmVyIG9mIGJ1ZmZlciBuYW1lZCBwcmVjaXNlbHkgdGhlIHNhbWUgYXMgZGlybmFtZS0tIikKICIgICBjYWxsIERyZWRpcigibHMhIikKIAogICAgIiBnZXQgZGlybmFtZSBhbmQgYXNzb2NpYXRlZCBidWZmZXIgbnVtYmVyCiAgICBsZXQgYnVmbnVtICA9IGJ1Zm5yKGVzY2FwZShkaXJuYW1lLCdcJykpCi0iICAgY2FsbCBEZWNobygiICBmaW5kIGJ1ZmZlcjwiLmRpcm5hbWUuIj4ncyBudW1iZXIgIikKLSIgICBjYWxsIERlY2hvKCIgIGJ1Zm5yKGRpcm5hbWU8Ii5lc2NhcGUoZGlybmFtZSwnXCcpLiI+KT0iLmJ1Zm51bSkKKyIgICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpICAgZmluZCBidWZmZXI8Ii5kaXJuYW1lLiI+J3MgbnVtYmVyICIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIGJ1Zm5yKGRpcm5hbWU8Ii5lc2NhcGUoZGlybmFtZSwnXCcpLiI+KT0iLmJ1Zm51bSkKIAogICAgaWYgYnVmbnVtIDwgMCAmJiBkaXJuYW1lICF+ICcvJCcKICAgICAiIHRyeSBhcHBlbmRpbmcgYSB0cmFpbGluZyAvCi0iICAgIGNhbGwgRGVjaG8oIiAgdHJ5IGFwcGVuZGluZyBhIHRyYWlsaW5nIC8gdG8gZGlybmFtZTwiLmRpcm5hbWUuIj4iKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpICAgdHJ5IGFwcGVuZGluZyBhIHRyYWlsaW5nIC8gdG8gZGlybmFtZTwiLmRpcm5hbWUuIj4iKQogICAgIGxldCBidWZudW09IGJ1Zm5yKGVzY2FwZShkaXJuYW1lLicvJywnXCcpKQogICAgIGlmIGJ1Zm51bSA+IDAKICAgICAgbGV0IGRpcm5hbWU9IGRpcm5hbWUuJy8nCkBAIC0zMDE0LDMwICszODAwLDMwIEBACiAKICAgIGlmIGJ1Zm51bSA8IDAgJiYgZGlybmFtZSA9fiAnLyQnCiAgICAgIiB0cnkgcmVtb3ZpbmcgYSB0cmFpbGluZyAvCi0iICAgIGNhbGwgRGVjaG8oIiAgdHJ5IHJlbW92aW5nIGEgdHJhaWxpbmcgLyBmcm9tIGRpcm5hbWU8Ii5kaXJuYW1lLiI+IikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIHRyeSByZW1vdmluZyBhIHRyYWlsaW5nIC8gZnJvbSBkaXJuYW1lPCIuZGlybmFtZS4iPiIpCiAgICAgbGV0IGJ1Zm51bT0gYnVmbnIoZXNjYXBlKHN1YnN0aXR1dGUoZGlybmFtZSwnLyQnLCcnLCcnKSwnXCcpKQogICAgIGlmIGJ1Zm51bSA+IDAKICAgICAgbGV0IGRpcm5hbWU9IHN1YnN0aXR1dGUoZGlybmFtZSwnLyQnLCcnLCcnKQogICAgIGVuZGlmCiAgICBlbmRpZgogCi0iICAgY2FsbCBEZWNobygiICBmaW5kYnVmMTogYnVmbnVtPWJ1Zm5yKCciLmRpcm5hbWUuIicpPSIuYnVmbnVtLiIgYnVmbmFtZSgiLmJ1Zm51bS4iKTwiLmJ1Zm5hbWUoYnVmbnVtKS4iPiAoaW5pdGlhbCkiKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd0dldEJ1ZmZlcikgICBmaW5kYnVmMTogYnVmbnVtPWJ1Zm5yKCciLmRpcm5hbWUuIicpPSIuYnVmbnVtLiIgYnVmbmFtZSgiLmJ1Zm51bS4iKTwiLmJ1Zm5hbWUoYnVmbnVtKS4iPiAoaW5pdGlhbCkiKQogICAgIiBub3RlOiAhfiB3YXMgdXNlZCBqdXN0IGJlbG93LCBidXQgdGhhdCBtZWFucyB1c2luZyAuLi8gdG8gZ28gYmFjayB3b3VsZCBtYXRjaCAoaWUuIGFiYy9kZWYvICBhbmQgYWJjLyBtYXRjaGVzKQogICAgaWYgYnVmbnVtID4gMCAmJiBidWZuYW1lKGJ1Zm51bSkgIT0gZGlybmFtZSAmJiBidWZuYW1lKGJ1Zm51bSkgIT0gJy4nCiAgICAgIiBoYW5kbGUgYXBwcm94aW1hdGUgbWF0Y2hlcwotIiAgICBjYWxsIERlY2hvKCIgIGhhbmRsaW5nIGFwcHJveCBtYXRjaDogYnVmbnVtIyIuYnVmbnVtLiI+MCBBTkQgYnVmbmFtZTwiLmJ1Zm5hbWUoYnVmbnVtKS4iPiE9ZGlybmFtZTwiLmRpcm5hbWUuIj4gQU5EIGJ1Zm5hbWUoIi5idWZudW0uIikhPScuJyIpCisiICAgIGNhbGwgRGVjaG8oIihOZXRyd0dldEJ1ZmZlcikgICBoYW5kbGluZyBhcHByb3ggbWF0Y2g6IGJ1Zm51bSMiLmJ1Zm51bS4iPjAgQU5EIGJ1Zm5hbWU8Ii5idWZuYW1lKGJ1Zm51bSkuIj4hPWRpcm5hbWU8Ii5kaXJuYW1lLiI+IEFORCBidWZuYW1lKCIuYnVmbnVtLiIpIT0nLiciKQogICAgIGxldCBpYnVmICAgID0gMQogICAgIGxldCBidWZsYXN0ID0gYnVmbnIoIiQiKQotIiAgICBjYWxsIERlY2hvKCIgIGZpbmRidWYyOiBidWZsYXN0PWJ1Zm5yKCQpPSIuYnVmbGFzdCkKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIGZpbmRidWYyOiBidWZsYXN0PWJ1Zm5yKCQpPSIuYnVmbGFzdCkKICAgICB3aGlsZSBpYnVmIDw9IGJ1Zmxhc3QKICAgICAgbGV0IGJuYW1lPSBzdWJzdGl0dXRlKGJ1Zm5hbWUoaWJ1ZiksJ1xcJywnLycsJ2cnKQogICAgICBsZXQgYm5hbWU9IHN1YnN0aXR1dGUoYm5hbWUsJy5cenMvJCcsJycsJycpCi0iICAgICBjYWxsIERlY2hvKCIgIGZpbmRidWYzOiB3aGlsZSBbaWJ1Zj0iLGlidWYuIl08PVtidWZsYXN0PSIuYnVmbGFzdC4iXTogZGlybmFtZTwiLmRpcm5hbWUuIj4gYm5hbWU9YnVmbmFtZSgiLmlidWYuIik8Ii5ibmFtZS4iPiIpCisiICAgICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpICAgZmluZGJ1ZjM6IHdoaWxlIFtpYnVmPSIsaWJ1Zi4iXTw9W2J1Zmxhc3Q9Ii5idWZsYXN0LiJdOiBkaXJuYW1lPCIuZGlybmFtZS4iPiBibmFtZT1idWZuYW1lKCIuaWJ1Zi4iKTwiLmJuYW1lLiI+IikKICAgICAgaWYgYm5hbWUgIT0gJycgJiYgZGlybmFtZSA9fiAnLycuYm5hbWUuJy9cPSQnICYmIGRpcm5hbWUgIX4gJ14vJwogICAgICAgIiBibmFtZSBpcyBub3QgZW1wdHkKICAgICAgICIgZGlybmFtZSBlbmRzIHdpdGggYm5hbWUsCiAgICAgICAiIGRpcm5hbWUgZG9lc24ndCBzdGFydCB3aXRoIC8sIHNvIGl0cyBub3QgYSBhYnNvbHV0ZSBwYXRoCi0iICAgICAgY2FsbCBEZWNobygiICBmaW5kYnVmM2E6IHBhc3NlcyB0ZXN0IDEgOiBkaXJuYW1lPCIuZGlybmFtZS4nPiA9fiAvJy5ibmFtZS4nL1w9JCAmJiBkaXJuYW1lICF+IF4vJykKKyIgICAgICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpICAgZmluZGJ1ZjNhOiBwYXNzZXMgdGVzdCAxIDogZGlybmFtZTwiLmRpcm5hbWUuJz4gPX4gLycuYm5hbWUuJy9cPSQgJiYgZGlybmFtZSAhfiBeLycpCiAgICAgICBicmVhawogICAgICBlbmRpZgogICAgICBpZiBibmFtZSA9fiAnXicuZGlybmFtZS4nL1w9JCcKQEAgLTMwNjAsNTkgKzM4NDYsNTkgQEAKICAgICBlbHNlCiAgICAgIGxldCBidWZudW09IGlidWYKICAgICBlbmRpZgotIiAgICBjYWxsIERlY2hvKCIgIGZpbmRidWY0OiBidWZudW09Ii5idWZudW0uIiAoaWJ1Zj0iLmlidWYuIiBidWZsYXN0PSIuYnVmbGFzdC4iKSIpCisiICAgIGNhbGwgRGVjaG8oIihOZXRyd0dldEJ1ZmZlcikgICBmaW5kYnVmNDogYnVmbnVtPSIuYnVmbnVtLiIgKGlidWY9Ii5pYnVmLiIgYnVmbGFzdD0iLmJ1Zmxhc3QuIikiKQogICAgZW5kaWYKICAgZW5kaWYKIAogICAiIGdldCBlbmV3IGJ1ZmZlciBhbmQgbmFtZSBpdCAtb3ItIHJlLXVzZSBidWZmZXIge3t7MwotIiAgY2FsbCBEZWNobygiICBnZXQgZW5ldyBidWZmZXIgYW5kIG5hbWUgaXQgT1IgcmUtdXNlIGJ1ZmZlciIpCi0gIHNpbCEga2VlcGogbWFyayAnCisiICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpICAgZ2V0IGVuZXcgYnVmZmVyIGFuZCBuYW1lIGl0IE9SIHJlLXVzZSBidWZmZXIiKQorICBzaWwhIGtlZXBqIGtlZXBhbHQgbWFyayAnCiAgIGlmIGJ1Zm51bSA8IDAgfHwgIWJ1ZmV4aXN0cyhidWZudW0pCi0iICAgY2FsbCBEZWNobygiLS1nZXQgZW5ldyBidWZmZXIgYW5kIG5hbWUgaXQgIChidWZudW0jIi5idWZudW0uIjwwIE9SIGJ1ZmV4aXN0cygiLmJ1Zm51bS4iKT0iLmJ1ZmV4aXN0cyhidWZudW0pLiI9PTApIikKKyIgICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpIC0tZ2V0IGVuZXcgYnVmZmVyIGFuZCBuYW1lIGl0ICAoYnVmbnVtIyIuYnVmbnVtLiI8MCBPUiBidWZleGlzdHMoIi5idWZudW0uIik9Ii5idWZleGlzdHMoYnVmbnVtKS4iPT0wKSIpCiAgICBjYWxsIHM6TmV0cndFbmV3KGRpcm5hbWUpCi0iICAgY2FsbCBEZWNobygiICBnb3QgZW5ldyBidWZmZXIjIi5idWZucigiJSIpLiIgKGFsdGJ1ZjwiLmV4cGFuZCgiIyIpLiI+KSIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIGdvdCBlbmV3IGJ1ZmZlciMiLmJ1Zm5yKCIlIikuIiAoYWx0YnVmPCIuZXhwYW5kKCIjIikuIj4pIikKICAgICIgbmFtZSB0aGUgYnVmZmVyCiAgICBpZiBleGlzdHMoInc6bmV0cndfbGlzdHN0eWxlIikgJiYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpUUkVFTElTVAogICAgICIgR290IGVuZXcgYnVmZmVyOyB0cmFuc2Zvcm0gaW50byBhIE5ldHJ3VHJlZUxpc3RpbmcKLSIgICAgY2FsbCBEZWNobygiLS10cmFuc2Zvcm0gZW5ldyBidWZmZXIjIi5idWZucigiJSIpLiIgaW50byBhIE5ldHJ3VHJlZUxpc3RpbmcgLS0iKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpIC0tdHJhbnNmb3JtIGVuZXcgYnVmZmVyIyIuYnVmbnIoIiUiKS4iIGludG8gYSBOZXRyd1RyZWVMaXN0aW5nIC0tIikKICAgICBpZiAhZXhpc3RzKCJzOm5ldHJ3X3RyZWVsaXN0bnVtIikKICAgICAgbGV0IHM6bmV0cndfdHJlZWxpc3RudW09IDEKICAgICBlbHNlCiAgICAgIGxldCBzOm5ldHJ3X3RyZWVsaXN0bnVtPSBzOm5ldHJ3X3RyZWVsaXN0bnVtICsgMQogICAgIGVuZGlmCiAgICAgbGV0IHc6bmV0cndfdHJlZWJ1Zm5yPSBidWZucigiJSIpCi0iICAgIGNhbGwgRGVjaG8oIiAgZXhlIHNpbCEga2VlcGFsdCBmaWxlIE5ldHJ3VHJlZUxpc3RpbmcgIi5mbmFtZWVzY2FwZShzOm5ldHJ3X3RyZWVsaXN0bnVtKSkKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIGV4ZSBzaWwhIGtlZXBhbHQgZmlsZSBOZXRyd1RyZWVMaXN0aW5nICIuZm5hbWVlc2NhcGUoczpuZXRyd190cmVlbGlzdG51bSkpCiAgICAgZXhlICdzaWwhIGtlZXBhbHQgZmlsZSBOZXRyd1RyZWVMaXN0aW5nXCAnLmZuYW1lZXNjYXBlKHM6bmV0cndfdHJlZWxpc3RudW0pCiAgICAgc2V0IGJ0PW5vZmlsZSBub3N3ZgogICAgIG5ub3JlbWFwIDxzaWxlbnQ+IDxidWZmZXI+IFsJOnNpbCBjYWxsIDxTSUQ+VHJlZUxpc3RNb3ZlKCdbJyk8Y3I+CiAgICAgbm5vcmVtYXAgPHNpbGVudD4gPGJ1ZmZlcj4gXQk6c2lsIGNhbGwgPFNJRD5UcmVlTGlzdE1vdmUoJ10nKTxjcj4KICAgICBubm9yZW1hcCA8c2lsZW50PiA8YnVmZmVyPiBbWyAgICAgICA6c2lsIGNhbGwgPFNJRD5UcmVlTGlzdE1vdmUoJ1snKTxjcj4KICAgICBubm9yZW1hcCA8c2lsZW50PiA8YnVmZmVyPiBdXSAgICAgICA6c2lsIGNhbGwgPFNJRD5UcmVlTGlzdE1vdmUoJ10nKTxjcj4KLSIgICAgY2FsbCBEZWNobygiICB0cmVlIGxpc3RpbmcjIi5zOm5ldHJ3X3RyZWVsaXN0bnVtLiIgYnVmbnI9Ii53Om5ldHJ3X3RyZWVidWZucikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIHRyZWUgbGlzdGluZyMiLnM6bmV0cndfdHJlZWxpc3RudW0uIiBidWZucj0iLnc6bmV0cndfdHJlZWJ1Zm5yKQogICAgZWxzZQogIiAgICBsZXQgdjplcnJtc2c9ICIiICIgRGVjaG8KICAgICBsZXQgZXNjZGlybmFtZT0gZm5hbWVlc2NhcGUoZGlybmFtZSkKLSIgICAgY2FsbCBEZWNobygiICBlcnJtc2c8Ii52OmVycm1zZy4iPiBidWZucihlc2NkaXJuYW1lPCIuZXNjZGlybmFtZS4iPik9Ii5idWZucihlc2NkaXJuYW1lKS4iIGJ1Zm5hbWUoKTwiLmJ1Zm5hbWUoYnVmbnIoZXNjZGlybmFtZSkpLiI+IikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIGVycm1zZzwiLnY6ZXJybXNnLiI+IGJ1Zm5yKGVzY2Rpcm5hbWU8Ii5lc2NkaXJuYW1lLiI+KT0iLmJ1Zm5yKGVzY2Rpcm5hbWUpLiIgYnVmbmFtZSgpPCIuYnVmbmFtZShidWZucihlc2NkaXJuYW1lKSkuIj4iKQogIiAgICBjYWxsIERlY2hvKCcgIGV4ZSBzaWwhIGtlZXBhbHQgZmlsZSAnLmVzY2Rpcm5hbWUpCiAiICAgIGxldCB2OmVycm1zZz0gIiIgIiBEZWNobwogICAgIGV4ZSAnc2lsISBrZWVwYWx0IGZpbGUgJy5lc2NkaXJuYW1lCi0iICAgIGNhbGwgRGVjaG8oIiAgZXJybXNnPCIudjplcnJtc2cuIj4gYnVmbnIoIi5lc2NkaXJuYW1lLiIpPSIuYnVmbnIoZXNjZGlybmFtZSkuIjwiLmJ1Zm5hbWUoYnVmbnIoZXNjZGlybmFtZSkpLiI+IikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIGVycm1zZzwiLnY6ZXJybXNnLiI+IGJ1Zm5yKCIuZXNjZGlybmFtZS4iKT0iLmJ1Zm5yKGVzY2Rpcm5hbWUpLiI8Ii5idWZuYW1lKGJ1Zm5yKGVzY2Rpcm5hbWUpKS4iPiIpCiAgICBlbmRpZgotIiAgIGNhbGwgRGVjaG8oIiAgbmFtZWQgZW5ldyBidWZmZXIjIi5idWZucigiJSIpLiI8Ii5idWZuYW1lKCIlIikuIj4iKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd0dldEJ1ZmZlcikgICBuYW1lZCBlbmV3IGJ1ZmZlciMiLmJ1Zm5yKCIlIikuIjwiLmJ1Zm5hbWUoIiUiKS4iPiIpCiAKICAgZWxzZSAiIFJlLXVzZSB0aGUgYnVmZmVyCi0iICAgY2FsbCBEZWNobygiLS1yZS11c2UgYnVmZmVyIyIuYnVmbnVtLiIgKGJ1Zm51bSMiLmJ1Zm51bS4iPj0wIEFORCBidWZleGlzdHMoIi5idWZudW0uIik9Ii5idWZleGlzdHMoYnVmbnVtKS4iIT0wKSIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAtLXJlLXVzZSBidWZmZXIjIi5idWZudW0uIiAoYnVmbnVtIyIuYnVmbnVtLiI+PTAgQU5EIGJ1ZmV4aXN0cygiLmJ1Zm51bS4iKT0iLmJ1ZmV4aXN0cyhidWZudW0pLiIhPTApIikKICAgIGxldCBlaWtlZXA9ICZlaQogICAgc2V0IGVpPWFsbAogICAgaWYgZ2V0bGluZSgyKSA9fiAnXiIgTmV0cncgRGlyZWN0b3J5IExpc3RpbmcnCi0iICAgIGNhbGwgRGVjaG8oIiAgZ2V0bGluZSgyKTwiLmdldGxpbmUoMikuJz4gbWF0Y2hlcyAiTmV0cncgRGlyZWN0b3J5IExpc3RpbmciIDogdXNpbmcga2VlcGFsdCBiICcuYnVmbnVtKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpICAgZ2V0bGluZSgyKTwiLmdldGxpbmUoMikuJz4gbWF0Y2hlcyAiTmV0cncgRGlyZWN0b3J5IExpc3RpbmciIDogdXNpbmcga2VlcGFsdCBiICcuYnVmbnVtKQogICAgIGV4ZSAic2lsISBrZWVwYWx0IGIgIi5idWZudW0KICAgIGVsc2UKLSIgICAgY2FsbCBEZWNobygiICBnZXRsaW5lKDIpPCIuZ2V0bGluZSgyKS4nPiBkb2VzIG5vdCBtYXRjaCAiTmV0cncgRGlyZWN0b3J5IExpc3RpbmciIDogdXNpbmcgYiAnLmJ1Zm51bSkKLSAgICBleGUgInNpbCEgYiAiLmJ1Zm51bQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpICAgZ2V0bGluZSgyKTwiLmdldGxpbmUoMikuJz4gZG9lcyBub3QgbWF0Y2ggIk5ldHJ3IERpcmVjdG9yeSBMaXN0aW5nIiA6IHVzaW5nIGIgJy5idWZudW0pCisgICAgZXhlICJzaWwhIGtlZXBhbHQgYiAiLmJ1Zm51bQogICAgZW5kaWYKICAgIGlmIGJ1Zm5hbWUoIiUiKSA9PSAnLicKLSIgICAgY2FsbCBEZWNobygiZXhlIHNpbCEga2VlcGFsdCBmaWxlICIuZm5hbWVlc2NhcGUoZ2V0Y3dkKCkpKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpIGV4ZSBzaWwhIGtlZXBhbHQgZmlsZSAiLmZuYW1lZXNjYXBlKGdldGN3ZCgpKSkKICAgICBleGUgInNpbCEga2VlcGFsdCBmaWxlICIuZm5hbWVlc2NhcGUoZ2V0Y3dkKCkpCiAgICBlbmRpZgogICAgbGV0ICZlaT0gZWlrZWVwCkBAIC0zMTI2LDggKzM5MTIsOCBAQAogIiAgICBjYWxsIERyZXQoInM6TmV0cndHZXRCdWZmZXIgMDxjbGVhcmVkIGJ1ZmZlcj4gOiByZS11c2luZyBidWZmZXIjIi5idWZucigiJSIpLiIsIGJ1dCByZWZyZXNoaW5nIGR1ZSB0byBnOm5ldHJ3X2Zhc3Ricm93c2U9Ii5nOm5ldHJ3X2Zhc3Ricm93c2UpCiAgICAgcmV0dXJuIDAKICAgIGVsc2VpZiBleGlzdHMoInc6bmV0cndfbGlzdHN0eWxlIikgJiYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpUUkVFTElTVAotIiAgICBjYWxsIERlY2hvKCItLXJlLXVzZSB0cmVlIGxpc3RpbmctLSIpCi0iICAgIGNhbGwgRGVjaG8oIiAgY2xlYXIgYnVmZmVyPCIuZXhwYW5kKCIlIikuIj4gd2l0aCA6JWQiKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpIC0tcmUtdXNlIHRyZWUgbGlzdGluZy0tIikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIGNsZWFyIGJ1ZmZlcjwiLmV4cGFuZCgiJSIpLiI+IHdpdGggOiVkIikKICAgICBzaWwga2VlcGogJWQKICAgICBrZWVwaiBjYWxsIHM6TmV0cndMaXN0U2V0dGluZ3MoYTppc2xvY2FsKQogIiAgICBjYWxsIERyZXQoInM6TmV0cndHZXRCdWZmZXIgMDxjbGVhcmVkIGJ1ZmZlcj4gOiByZS11c2luZyBidWZmZXIjIi5idWZucigiJSIpLiIsIGJ1dCB0cmVlbGlzdCBtb2RlIGFsd2F5cyBuZWVkcyBhIHJlZnJlc2giKQpAQCAtMzE0MywxNSArMzkyOSwxNSBAQAogICAiICBzbG93ICAgMCAgICAgICAgIEQgICAgICBEICAgICAgRGVsZXRpbmcgYSBidWZmZXIgaW1wbGllcyBpdCB3aWxsIG5vdCBiZSByZS11c2VkIChzbG93KQogICAiICBtZWQgICAgMSAgICAgICAgIEQgICAgICBICiAgICIgIGZhc3QgICAyICAgICAgICAgSCAgICAgIEgKLSIgIGNhbGwgRGVjaG8oIi0tZG8gbmV0cncgc2V0dGluZ3M6IG1ha2UgdGhpcyBidWZmZXIjIi5idWZucigiJSIpLiIgbm90LWEtZmlsZSwgbW9kaWZpYWJsZSwgbm90IGxpbmUtbnVtYmVyZWQsIGV0Yy0tIikKKyIgIGNhbGwgRGVjaG8oIihOZXRyd0dldEJ1ZmZlcikgLS1kbyBuZXRydyBzZXR0aW5nczogbWFrZSB0aGlzIGJ1ZmZlciMiLmJ1Zm5yKCIlIikuIiBub3QtYS1maWxlLCBtb2RpZmlhYmxlLCBub3QgbGluZS1udW1iZXJlZCwgZXRjLS0iKQogICBsZXQgZm5hbWU9IGV4cGFuZCgiJSIpCiAgIGtlZXBqIGNhbGwgczpOZXRyd0xpc3RTZXR0aW5ncyhhOmlzbG9jYWwpCi0iICBjYWxsIERlY2hvKCJleGUgc2lsISBrZWVwYWx0IGZpbGUgIi5mbmFtZWVzY2FwZShmbmFtZSkpCisiICBjYWxsIERlY2hvKCIoTmV0cndHZXRCdWZmZXIpIGV4ZSBzaWwhIGtlZXBhbHQgZmlsZSAiLmZuYW1lZXNjYXBlKGZuYW1lKSkKICAgZXhlICJzaWwhIGtlZXBqIGtlZXBhbHQgZmlsZSAiLmZuYW1lZXNjYXBlKGZuYW1lKQogCiAgICIgZGVsZXRlIGFsbCBsaW5lcyBmcm9tIGJ1ZmZlciB7e3szCi0iICBjYWxsIERlY2hvKCItLWRlbGV0ZSBhbGwgbGluZXMgZnJvbSBidWZmZXItLSIpCi0iICBjYWxsIERlY2hvKCIgIGNsZWFyIGJ1ZmZlcjwiLmV4cGFuZCgiJSIpLiI+IHdpdGggOiVkIikKKyIgIGNhbGwgRGVjaG8oIihOZXRyd0dldEJ1ZmZlcikgLS1kZWxldGUgYWxsIGxpbmVzIGZyb20gYnVmZmVyLS0iKQorIiAgY2FsbCBEZWNobygiKE5ldHJ3R2V0QnVmZmVyKSAgIGNsZWFyIGJ1ZmZlcjwiLmV4cGFuZCgiJSIpLiI+IHdpdGggOiVkIikKICAgc2lsISBrZWVwYWx0IGtlZXBqICVkCiAKICIgIGNhbGwgRHJldCgiczpOZXRyd0dldEJ1ZmZlciAwPGNsZWFyZWQgYnVmZmVyPiA6IHRhYiMiLnRhYnBhZ2VucigpLiIgd2luIyIud2lubnIoKS4iIGJ1ZiMiLmJ1Zm5yKCIlIikuIjwiLmJ1Zm5hbWUoIiUiKS4iPiBtb2RpZmllZD0iLiZtb2RpZmllZC4iIG1vZGlmaWFibGU9Ii4mbW9kaWZpYWJsZS4iIHJlYWRvbmx5PSIuJnJlYWRvbmx5KQpAQCAtMzI4NiwyMSArNDA3MiwyMSBAQAogZnVuISBzOk5ldHJ3TGlzdFNldHRpbmdzKGlzbG9jYWwpCiAiICBjYWxsIERmdW5jKCJzOk5ldHJ3TGlzdFNldHRpbmdzKGlzbG9jYWw9Ii5hOmlzbG9jYWwuIikiKQogICBsZXQgZm5hbWU9IGJ1Zm5hbWUoIiUiKQotIiAgY2FsbCBEZWNobygic2V0bG9jYWwgYnQ9bm9maWxlIG5vYmwgbWEgbm9udSBub3dyYXAgbm9ybyIpCi0gIHNldGxvY2FsIGJ0PW5vZmlsZSBub2JsIG1hIG5vbnUgbm93cmFwIG5vcm8KLSIgIGNhbGwgRGVjaG8oImV4ZSBzaWwhIGtlZXBhbHQgZmlsZSAiLmZuYW1lZXNjYXBlKGZuYW1lKSkKKyIgIGNhbGwgRGVjaG8oIihOZXRyd0xpc3RTZXR0aW5ncykgc2V0bCBidD1ub2ZpbGUgbm9ibCBtYSBub251IG5vd3JhcCBub3JvIikKKyAgc2V0bCBidD1ub2ZpbGUgbm9ibCBtYSBub251IG5vd3JhcCBub3JvCisiICBjYWxsIERlY2hvKCIoTmV0cndMaXN0U2V0dGluZ3MpIGV4ZSBzaWwhIGtlZXBhbHQgZmlsZSAiLmZuYW1lZXNjYXBlKGZuYW1lKSkKICAgZXhlICJzaWwhIGtlZXBhbHQgZmlsZSAiLmZuYW1lZXNjYXBlKGZuYW1lKQogICBpZiBnOm5ldHJ3X3VzZV9ub3N3ZgotICAgc2V0bG9jYWwgbm9zd2YKKyAgIHNldGwgbm9zd2YKICAgZW5kaWYKICIgIGNhbGwgRHJlZGlyKCJscyEiKQotIiAgY2FsbCBEZWNobygiKExvY2FsTGlzdGluZykgZXhlIHNldGwgdHM9Ii4oZzpuZXRyd19tYXhmaWxlbmFtZWxlbisxKSkKKyIgIGNhbGwgRGVjaG8oIihOZXRyd0xpc3RTZXR0aW5ncykgZXhlIHNldGwgdHM9Ii4oZzpuZXRyd19tYXhmaWxlbmFtZWxlbisxKSkKICAgZXhlICJzZXRsIHRzPSIuKGc6bmV0cndfbWF4ZmlsZW5hbWVsZW4rMSkKLSAgc2V0bG9jYWwgaXNrKz0uLH4sLQorICBzZXRsIGlzays9Lix+LC0KICAgaWYgZzpuZXRyd19mYXN0YnJvd3NlID4gYTppc2xvY2FsCi0gICBzZXRsb2NhbCBiaD1oaWRlCisgICBzZXRsIGJoPWhpZGUKICAgZWxzZQotICAgc2V0bG9jYWwgYmg9ZGVsZXRlCisgICBzZXRsIGJoPWRlbGV0ZQogICBlbmRpZgogIiAgY2FsbCBEcmV0KCJzOk5ldHJ3TGlzdFNldHRpbmdzIikKIGVuZGZ1bgpAQCAtMzM0NCw4ICs0MTMwLDggQEAKICAgIGxldCB3Om5ldHJ3X2xpc3RzdHlsZSA9IGc6bmV0cndfbGlzdHN0eWxlCiAgICBsZXQgZzpuZXRyd19saXN0X2NtZCAgPSBzdWJzdGl0dXRlKGc6bmV0cndfbGlzdF9jbWQsJyAtbCcsJycsJ2dlJykKICAgZW5kaWYKLSAgc2V0bG9jYWwgbWEgbm9ybwotIiAgY2FsbCBEZWNobygic2V0bG9jYWwgbWEgbm9ybyIpCisgIHNldGwgbWEgbm9ybworIiAgY2FsbCBEZWNobygic2V0bCBtYSBub3JvIikKIAogICAiIGNsZWFyIGJ1ZmZlciAtIHRoaXMgd2lsbCBjYXVzZSBOZXRyd0Jyb3dzZS9Mb2NhbEJyb3dzZUNoZWNrIHRvIGRvIGEgcmVmcmVzaAogIiAgY2FsbCBEZWNobygiY2xlYXIgYnVmZmVyPCIuZXhwYW5kKCIlIikuIj4gd2l0aCA6JWQiKQpAQCAtMzQyMiw3ICs0MjA4LDcgQEAKICAgIGVuZGlmCiAKICAgICIgc2hvdyBib29rbWFya2VkIHBsYWNlcwotICAgaWYgZXhpc3RzKCJnOm5ldHJ3X2Jvb2ttYXJrbGlzdCIpICYmIGc6bmV0cndfYm9va21hcmtsaXN0ICE9IFtdCisgICBpZiBleGlzdHMoImc6bmV0cndfYm9va21hcmtsaXN0IikgJiYgZzpuZXRyd19ib29rbWFya2xpc3QgIT0gW10gJiYgZzpuZXRyd19kaXJoaXN0bWF4ID4gMAogICAgIGxldCBjbnQ9IDEKICAgICBmb3IgYm1kIGluIGc6bmV0cndfYm9va21hcmtsaXN0CiAiICAgICBjYWxsIERlY2hvKCdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LiIuMi4iLmNudC4iICIuZzpOZXRyd1RvcEx2bE1lbnUuJ0Jvb2ttYXJrLicuYm1kLicJOmUgJy5ibWQpCkBAIC0zNTA5LDE5ICs0Mjk1LDE5IEBACiAgICAiIGFwcGFyZW50bHkgdmltIGlzICJyZWNvZ25pemluZyIgdGhhdCBpdCBpcyBpbiBhIGRpcmVjdG9yeSBhbmQKICAgICIgaXMgcmVtb3ZpbmcgdGhlIHRyYWlsaW5nICIvIi4gIEJhZCBpZGVhLCBzbyBsZXQncyBwdXQgaXQgYmFjay4KICAgIGxldCBkaXJuYW1lPSBkaXJuYW1lLicvJwotIiAgIGNhbGwgRGVjaG8oImFkanVzdGluZyBkaXJuYW1lPCIuZGlybmFtZS4iPiIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyKSBhZGp1c3RpbmcgZGlybmFtZTwiLmRpcm5hbWUuIj4iKQogICBlbmRpZgogCiAgIGlmIG5ld2RpciAhfiBkaXJwYXQKICAgICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAiIE5ldHJ3QnJvd3NlQ2hnRGlyOiBlZGl0IGEgZmlsZSB7e3szCiAgICAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIiAgIGNhbGwgRGVjaG8oJyhOZXRyd0Jyb3dzZUNoZ0RpcikgY2FzZSAiaGFuZGxpbmcgYSBmaWxlIjogbmV3ZGlyPCcubmV3ZGlyLic+ICF+IGRpcnBhdDwnLmRpcnBhdC4iPiIpCisiICAgY2FsbCBEZWNobygnKE5ldHJ3QnJvd3NlQ2hnRGlyOmVkaXQtYS1maWxlKSBjYXNlICJoYW5kbGluZyBhIGZpbGUiOiBuZXdkaXI8Jy5uZXdkaXIuJz4gIX4gZGlycGF0PCcuZGlycGF0LiI+IikKIAogICAgIiBzYXZlIHBvc2l0aW9uIGZvciBiZW5lZml0IG9mIFJleHBsb3JlCiAgICBsZXQgczpyZXhwb3NuX3tidWZucigiJSIpfT0gbmV0cncjTmV0cndTYXZlUG9zbigpCiAKLSIgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXIpIHNldHRpbmcgczpyZXhwb3NuXyIuYnVmbnIoIiUiKS4iIHRvIFNhdmVQb3NuIikKKyIgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXI6ZWRpdC1hLWZpbGUpIHNldHRpbmcgczpyZXhwb3NuXyIuYnVmbnIoIiUiKS4iIHRvIFNhdmVQb3NuIikKICAgIGlmIGV4aXN0cygidzpuZXRyd19saXN0c3R5bGUiKSAmJiB3Om5ldHJ3X2xpc3RzdHlsZSA9PSBzOlRSRUVMSVNUICYmIGV4aXN0cygidzpuZXRyd190cmVlZGljdCIpICYmIG5ld2RpciAhfiAnXlwoL1x8XGE6XCknCiAgICAgbGV0IGRpcm5hbWU9IHM6TmV0cndUcmVlRGlyKCkKICAgICBpZiBkaXJuYW1lID1+ICcvJCcKQEAgLTM1MjksMzUgKzQzMTUsMzUgQEAKICAgICBlbHNlCiAgICAgIGxldCBkaXJuYW1lPSBzOk5ldHJ3VHJlZURpcigpLiIvIi5uZXdkaXIKICAgICBlbmRpZgotIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXIpIGRpcm5hbWU8Ii5kaXJuYW1lLiI+IikKLSIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyKSB0cmVlIGxpc3RpbmciKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXI6ZWRpdC1hLWZpbGUpIGRpcm5hbWU8Ii5kaXJuYW1lLiI+IikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyOmVkaXQtYS1maWxlKSB0cmVlIGxpc3RpbmciKQogICAgZWxzZWlmIG5ld2RpciA9fiAnXlwoL1x8XGE6XCknCiAgICAgbGV0IGRpcm5hbWU9IG5ld2RpcgogICAgZWxzZQogICAgIGxldCBkaXJuYW1lPSBzOkNvbXBvc2VQYXRoKGRpcm5hbWUsbmV3ZGlyKQogICAgZW5kaWYKLSIgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXIpIGhhbmRsaW5nIGEgZmlsZTogZGlybmFtZTwiLmRpcm5hbWUuIj4gKGE6MD0iLmE6MC4iKSIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyOmVkaXQtYS1maWxlKSBoYW5kbGluZyBhIGZpbGU6IGRpcm5hbWU8Ii5kaXJuYW1lLiI+IChhOjA9Ii5hOjAuIikiKQogICAgIiB0aGlzIGxldHMgTmV0cndCcm93c2VYIGF2b2lkIHRoZSBlZGl0CiAgICBpZiBhOjAgPCAxCi0iICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0Rpcikgc2V0IHVwIHdpbmRvd3MgZm9yIGVkaXRpbmc8Ii5mbmFtZWVzY2FwZShkaXJuYW1lKS4iPiAgZGlkc3BsaXQ9Ii4oZXhpc3RzKCJzOmRpZHNwbGl0Iik/IHM6ZGlkc3BsaXQgOiAiZG9lc24ndCBleGlzdCIpKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXI6ZWRpdC1hLWZpbGUpIHNldCB1cCB3aW5kb3dzIGZvciBlZGl0aW5nPCIuZm5hbWVlc2NhcGUoZGlybmFtZSkuIj4gIGRpZHNwbGl0PSIuKGV4aXN0cygiczpkaWRzcGxpdCIpPyBzOmRpZHNwbGl0IDogImRvZXNuJ3QgZXhpc3QiKSkKICAgICBrZWVwaiBjYWxsIHM6TmV0cndPcHRpb25SZXN0b3JlKCJzOiIpCiAgICAgaWYgIWV4aXN0cygiczpkaWRzcGxpdCIpCi0iICAgICBjYWxsIERlY2hvKCJzOmRpZHNwbGl0IGRvZXMgbm90IGV4aXN0OyBnOm5ldHJ3X2Jyb3dzZV9zcGxpdD0iLmc6bmV0cndfYnJvd3NlX3NwbGl0LiIgd2luIyIud2lubnIoKSkKKyIgICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcjplZGl0LWEtZmlsZSkgczpkaWRzcGxpdCBkb2VzIG5vdCBleGlzdDsgZzpuZXRyd19icm93c2Vfc3BsaXQ9Ii5nOm5ldHJ3X2Jyb3dzZV9zcGxpdC4iIHdpbiMiLndpbm5yKCkpCiAgICAgIGlmICAgICBnOm5ldHJ3X2Jyb3dzZV9zcGxpdCA9PSAxCiAgICAgICAiIGhvcml6b250YWxseSBzcGxpdHRpbmcgdGhlIHdpbmRvdyBmaXJzdAotICAgICAgbmV3CisgICAgICBrZWVwYWx0IG5ldwogICAgICAgaWYgISZlYQotICAgICAgIHdpbmNtZCBfCisgICAgICAga2VlcGFsdCB3aW5jbWQgXwogICAgICAgZW5kaWYKICAgICAgZWxzZWlmIGc6bmV0cndfYnJvd3NlX3NwbGl0ID09IDIKICAgICAgICIgdmVydGljYWxseSBzcGxpdHRpbmcgdGhlIHdpbmRvdyBmaXJzdAotICAgICAgcmlnaHRiIHZlcnQgbmV3CisgICAgICBrZWVwYWx0IHJpZ2h0YiB2ZXJ0IG5ldwogICAgICAgaWYgISZlYQotICAgICAgIHdpbmNtZCB8CisgICAgICAga2VlcGFsdCB3aW5jbWQgfAogICAgICAgZW5kaWYKICAgICAgZWxzZWlmIGc6bmV0cndfYnJvd3NlX3NwbGl0ID09IDMKICAgICAgICIgb3BlbiBmaWxlIGluIG5ldyB0YWIKLSAgICAgIHRhYm5ldworICAgICAga2VlcGFsdCB0YWJuZXcKICAgICAgZWxzZWlmIGc6bmV0cndfYnJvd3NlX3NwbGl0ID09IDQKICAgICAgICIgYWN0IGxpa2UgIlAiIChpZS4gb3BlbiBwcmV2aW91cyB3aW5kb3cpCiAgICAgICBpZiBzOk5ldHJ3UHJldldpbk9wZW4oMikgPT0gMwpAQCAtMzU2NywxMSArNDM1MywxMSBAQAogICAgICAgZW5kaWYKICAgICAgZWxzZQogICAgICAgIiBoYW5kbGluZyBhIGZpbGUsIGRpZG4ndCBzcGxpdCwgc28gcmVtb3ZlIG1lbnUKLSIgICAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXIpIGhhbmRsaW5nIGEgZmlsZStkaWRuJ3Qgc3BsaXQsIHNvIHJlbW92ZSBtZW51IikKKyIgICAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXI6ZWRpdC1hLWZpbGUpIGhhbmRsaW5nIGEgZmlsZStkaWRuJ3Qgc3BsaXQsIHNvIHJlbW92ZSBtZW51IikKICAgICAgIGNhbGwgczpOZXRyd01lbnUoMCkKICAgICAgICIgb3B0aW9uYWwgY2hhbmdlIHRvIHdpbmRvdwogICAgICAgaWYgZzpuZXRyd19jaGd3aW4gPj0gMQotICAgICAgIGV4ZSAia2VlcGp1bXBzICIuZzpuZXRyd19jaGd3aW4uIndpbmNtZCB3IgorICAgICAgIGV4ZSAia2VlcGoga2VlcGFsdCAiLmc6bmV0cndfY2hnd2luLiJ3aW5jbWQgdyIKICAgICAgIGVuZGlmCiAgICAgIGVuZGlmCiAgICAgZW5kaWYKQEAgLTM1NzksMTEgKzQzNjUsMTEgQEAKICAgICAiIHRoZSBwb2ludCB3aGVyZSBuZXRydyBhY3R1YWxseSBlZGl0cyB0aGUgKGxvY2FsKSBmaWxlCiAgICAgIiBpZiBpdHMgbG9jYWwgb25seTogTG9jYWxCcm93c2VDaGVjaygpIGRvZXNuJ3QgZWRpdCBhIGZpbGUsIGJ1dCBOZXRyd0Jyb3dzZSgpIHdpbGwKICAgICBpZiBhOmlzbG9jYWwKLSIgICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcikgZWRpdCBsb2NhbCBmaWxlOiBleGUgZSEgIi5mbmFtZWVzY2FwZShkaXJuYW1lKSkKLSAgICAgZXhlICJlISAiLmZuYW1lZXNjYXBlKGRpcm5hbWUpCisiICAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXI6ZWRpdC1hLWZpbGUpIGVkaXQgbG9jYWwgZmlsZTogZXhlIGUhICIuZm5hbWVlc2NhcGUoZGlybmFtZSkpCisgICAgIGV4ZSAia2VlcGoga2VlcGFsdCBlISAiLmZuYW1lZXNjYXBlKGRpcm5hbWUpCiAgICAgIGNhbGwgczpOZXRyd0N1cnNvcigpCiAgICAgZWxzZQotIiAgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyKSByZW1vdGUgZmlsZTogTmV0cndCcm93c2Ugd2lsbCBlZGl0IGl0IikKKyIgICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcjplZGl0LWEtZmlsZSkgcmVtb3RlIGZpbGU6IE5ldHJ3QnJvd3NlIHdpbGwgZWRpdCBpdCIpCiAgICAgZW5kaWYKICAgICBsZXQgZG9sb2Nrb3V0PSAxCiAKQEAgLTM1OTIsMTIgKzQzNzgsMTIgQEAKICAgICAiICAgb3IgYXMgYSBsaXN0IG9mIGZ1bmN0aW9uIHJlZmVyZW5jZXMuICBJdCB3aWxsIGlnbm9yZSBhbnl0aGluZyB0aGF0J3Mgbm90CiAgICAgIiAgIGEgZnVuY3Rpb24gcmVmZXJlbmNlLiAgU2VlICA6aGVscCBGdW5jcmVmICBmb3IgaW5mb3JtYXRpb24gYWJvdXQgZnVuY3Rpb24gcmVmZXJlbmNlcy4KICAgICBpZiBleGlzdHMoImc6TmV0cndfZnVuY3JlZiIpCi0iICAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXIpIGhhbmRsZSBvcHRpb25hbCBGdW5jcmVmcyIpCisiICAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXI6ZWRpdC1hLWZpbGUpIGhhbmRsZSBvcHRpb25hbCBGdW5jcmVmcyIpCiAgICAgIGlmIHR5cGUoZzpOZXRyd19mdW5jcmVmKSA9PSAyCi0iICAgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyKSBoYW5kbGluZyBhIGc6TmV0cndfZnVuY3JlZiIpCisiICAgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyOmVkaXQtYS1maWxlKSBoYW5kbGluZyBhIGc6TmV0cndfZnVuY3JlZiIpCiAgICAgICBrZWVwaiBjYWxsIGc6TmV0cndfZnVuY3JlZigpCiAgICAgIGVsc2VpZiB0eXBlKGc6TmV0cndfZnVuY3JlZikgPT0gMwotIiAgICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcikgaGFuZGxpbmcgYSBsaXN0IG9mIGc6TmV0cndfZnVuY3JlZnMiKQorIiAgICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcjplZGl0LWEtZmlsZSkgaGFuZGxpbmcgYSBsaXN0IG9mIGc6TmV0cndfZnVuY3JlZnMiKQogICAgICAgZm9yIEZuY3JlZiBpbiBnOk5ldHJ3X2Z1bmNyZWYKICAgICAgICBpZiB0eXBlKEZuY1JlZikgPT0gMgogICAgICAgICBrZWVwaiBjYWxsIEZuY1JlZigpCkBAIC0zNjExLDcgKzQzOTcsNyBAQAogICAgIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAiIE5ldHJ3QnJvd3NlQ2hnRGlyOiBqdXN0IGdvIHRvIHRoZSBuZXcgZGlyZWN0b3J5IHNwZWMge3t7MwogICAgIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0iICAgY2FsbCBEZWNobygnKE5ldHJ3QnJvd3NlQ2hnRGlyKSBjYXNlICJqdXN0IGdvIHRvIG5ldyBkaXJlY3Rvcnkgc3BlYyI6IG5ld2RpcjwnLm5ld2Rpci4nPicpCisiICAgY2FsbCBEZWNobygnKE5ldHJ3QnJvd3NlQ2hnRGlyOmdvdG8tbmV3ZGlyKSBjYXNlICJqdXN0IGdvIHRvIG5ldyBkaXJlY3Rvcnkgc3BlYyI6IG5ld2RpcjwnLm5ld2Rpci4nPicpCiAgICBsZXQgZGlybmFtZSAgICA9IG5ld2RpcgogICAga2VlcGogY2FsbCBzOlNldFJleERpcihhOmlzbG9jYWwsZGlybmFtZSkKICAgIGtlZXBqIGNhbGwgczpOZXRyd09wdGlvblJlc3RvcmUoInM6IikKQEAgLTM2MjAsMzcgKzQ0MDYsMzcgQEAKICAgICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAiIE5ldHJ3QnJvd3NlQ2hnRGlyOiByZWZyZXNoIHRoZSBkaXJlY3RvcnkgbGlzdCB7e3szCiAgICAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIiAgIGNhbGwgRGVjaG8oJyhOZXRyd0Jyb3dzZUNoZ0RpcikgY2FzZSAicmVmcmVzaCBkaXJlY3RvcnkgbGlzdGluZyI6IG5ld2RpciA9PSAiLi8iJykKKyIgICBjYWxsIERlY2hvKCcoTmV0cndCcm93c2VDaGdEaXI6cmVmcmVzaC1kaXJsaXN0KSBjYXNlICJyZWZyZXNoIGRpcmVjdG9yeSBsaXN0aW5nIjogbmV3ZGlyID09ICIuLyInKQogICAga2VlcGogY2FsbCBzOlNldFJleERpcihhOmlzbG9jYWwsZGlybmFtZSkKIAogICBlbHNlaWYgbmV3ZGlyID09ICcuLi8nCiAgICAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAiIE5ldHJ3QnJvd3NlQ2hnRGlyOiBnbyB1cCBvbmUgZGlyZWN0b3J5IHt7ezMKICAgICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSIgICBjYWxsIERlY2hvKCcoTmV0cndCcm93c2VDaGdEaXIpIGNhc2UgImdvIHVwIG9uZSBkaXJlY3RvcnkiOiBuZXdkaXIgPT0gIi4uLyInKQorIiAgIGNhbGwgRGVjaG8oJyhOZXRyd0Jyb3dzZUNoZ0Rpcjpnby11cCkgY2FzZSAiZ28gdXAgb25lIGRpcmVjdG9yeSI6IG5ld2RpciA9PSAiLi4vIicpCiAKICAgIGlmIHc6bmV0cndfbGlzdHN0eWxlID09IHM6VFJFRUxJU1QgJiYgZXhpc3RzKCJ3Om5ldHJ3X3RyZWVkaWN0IikKICAgICAiIGZvcmNlIGEgcmVmcmVzaAotIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXIpIGNsZWFyIGJ1ZmZlcjwiLmV4cGFuZCgiJSIpLiI+IHdpdGggOiVkIikKLSIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyKSBzZXRsIG5vcm8gbWEiKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXI6Z28tdXApIGNsZWFyIGJ1ZmZlcjwiLmV4cGFuZCgiJSIpLiI+IHdpdGggOiVkIikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyOmdvLXVwKSBzZXRsIG5vcm8gbWEiKQogICAgIHNldGwgbm9ybyBtYQogICAgIGtlZXBqICVkCiAgICBlbmRpZgogCiAgICBpZiBoYXMoImFtaWdhIikKICAgICAiIGFtaWdhCi0iICAgIGNhbGwgRGVjaG8oJyhOZXRyd0Jyb3dzZUNoZ0RpcikgY2FzZSAiZ28gdXAgb25lIGRpcmVjdG9yeSI6IG5ld2RpciA9PSAiLi4vIiBhbmQgYW1pZ2EnKQorIiAgICBjYWxsIERlY2hvKCcoTmV0cndCcm93c2VDaGdEaXI6Z28tdXApIGNhc2UgImdvIHVwIG9uZSBkaXJlY3RvcnkiOiBuZXdkaXIgPT0gIi4uLyIgYW5kIGFtaWdhJykKICAgICBpZiBhOmlzbG9jYWwKICAgICAgbGV0IGRpcm5hbWU9IHN1YnN0aXR1dGUoZGlybmFtZSwnXlwoLipbLzpdXClcKFteL11cKyRcKScsJ1wxJywnJykKICAgICAgbGV0IGRpcm5hbWU9IHN1YnN0aXR1dGUoZGlybmFtZSwnLyQnLCcnLCcnKQogICAgIGVsc2UKICAgICAgbGV0IGRpcm5hbWU9IHN1YnN0aXR1dGUoZGlybmFtZSwnXlwoLipbLzpdXClcKFteL11cKy8kXCknLCdcMScsJycpCiAgICAgZW5kaWYKLSIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyKSBhbWlnYTogZGlybmFtZTwiLmRpcm5hbWUuIj4gKGdvIHVwIG9uZSBkaXIpIikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyOmdvLXVwKSBhbWlnYTogZGlybmFtZTwiLmRpcm5hbWUuIj4gKGdvIHVwIG9uZSBkaXIpIikKIAogICAgZWxzZQogICAgICIgdW5peCBvciBjeWd3aW4KLSIgICAgY2FsbCBEZWNobygnKE5ldHJ3QnJvd3NlQ2hnRGlyKSBjYXNlICJnbyB1cCBvbmUgZGlyZWN0b3J5IjogbmV3ZGlyID09ICIuLi8iIGFuZCB1bml4IG9yIGN5Z3dpbicpCisiICAgIGNhbGwgRGVjaG8oJyhOZXRyd0Jyb3dzZUNoZ0Rpcjpnby11cCkgY2FzZSAiZ28gdXAgb25lIGRpcmVjdG9yeSI6IG5ld2RpciA9PSAiLi4vIiBhbmQgdW5peCBvciBjeWd3aW4nKQogICAgIGlmIGE6aXNsb2NhbAogICAgICBsZXQgZGlybmFtZT0gc3Vic3RpdHV0ZShkaXJuYW1lLCdeXCguKlwpL1woW14vXVwrXCkvJCcsJ1wxJywnJykKICAgICAgaWYgZGlybmFtZSA9PSAiIgpAQCAtMzY1OSw3ICs0NDQ1LDcgQEAKICAgICBlbHNlCiAgICAgIGxldCBkaXJuYW1lPSBzdWJzdGl0dXRlKGRpcm5hbWUsJ15cKFxhXCs6Ly8uXHstfS9cezEsMn1cKVwoLlx7LX1cKVwoW14vXVwrXCkvJCcsJ1wxXDInLCcnKQogICAgIGVuZGlmCi0iICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcikgdW5peDogZGlybmFtZTwiLmRpcm5hbWUuIj4gKGdvIHVwIG9uZSBkaXIpIikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyOmdvLXVwKSB1bml4OiBkaXJuYW1lPCIuZGlybmFtZS4iPiAoZ28gdXAgb25lIGRpcikiKQogICAgZW5kaWYKICAgIGtlZXBqIGNhbGwgczpTZXRSZXhEaXIoYTppc2xvY2FsLGRpcm5hbWUpCiAKQEAgLTM2NjcsOSArNDQ1Myw5IEBACiAgICAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAiIE5ldHJ3QnJvd3NlQ2hnRGlyOiBIYW5kbGUgVHJlZSBMaXN0aW5nIHt7ezMKICAgICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSIgICBjYWxsIERlY2hvKCcoTmV0cndCcm93c2VDaGdEaXIpIGNhc2UgbGlzdHN0eWxlIGlzIFRSRUVMSVNUIGFuZCB3Om5ldHJ3X3RyZWVkaWN0IGV4aXN0cycpCisiICAgY2FsbCBEZWNobygnKE5ldHJ3QnJvd3NlQ2hnRGlyOnRyZWUtbGlzdCkgY2FzZSBsaXN0c3R5bGUgaXMgVFJFRUxJU1QgYW5kIHc6bmV0cndfdHJlZWRpY3QgZXhpc3RzJykKICAgICIgZm9yY2UgYSByZWZyZXNoIChmb3IgVFJFRUxJU1QsIHdhaXQgZm9yIE5ldHJ3VHJlZURpcigpIHRvIGZvcmNlIHRoZSByZWZyZXNoKQotIiAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0Rpcikgc2V0bCBub3JvIG1hIikKKyIgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXIpICh0cmVlbGlzdCkgc2V0bCBub3JvIG1hIikKICAgIHNldGwgbm9ybyBtYQogICAgaWYgIShleGlzdHMoInc6bmV0cndfbGlzdHN0eWxlIikgJiYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpUUkVFTElTVCAmJiBleGlzdHMoImI6bmV0cndfY3VyZGlyIikpCiAiICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcikgY2xlYXIgYnVmZmVyPCIuZXhwYW5kKCIlIikuIj4gd2l0aCA6JWQiKQpAQCAtMzY3OCwyNCArNDQ2NCwyNCBAQAogICAgbGV0IHRyZWVkaXIgICAgICA9IHM6TmV0cndUcmVlRGlyKCkKICAgIGxldCBzOnRyZWVjdXJwb3MgPSBuYmNkX2N1cnBvcwogICAgbGV0IGhhc2tleT0gMAotIiAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcikgdzpuZXRyd190cmVlZGljdDwiLnN0cmluZyh3Om5ldHJ3X3RyZWVkaWN0KS4iPiIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyOnRyZWUtbGlzdCkgdzpuZXRyd190cmVlZGljdDwiLnN0cmluZyh3Om5ldHJ3X3RyZWVkaWN0KS4iPiIpCiAKICAgICIgc2VhcmNoIHRyZWVkaWN0IGZvciB0cmVlIGRpciBhcy1pcwogICAgaWYgaGFzX2tleSh3Om5ldHJ3X3RyZWVkaWN0LHRyZWVkaXIpCi0iICAgIGNhbGwgRGVjaG8oJyhOZXRyd0Jyb3dzZUNoZ0RpcikgLi4uLnNlYXJjaGVkIGZvciB0cmVlZGlyPCcudHJlZWRpci4nPiA6IGZvdW5kIGl0IScpCisiICAgIGNhbGwgRGVjaG8oJyhOZXRyd0Jyb3dzZUNoZ0Rpcjp0cmVlLWxpc3QpIC4uLi5zZWFyY2hlZCBmb3IgdHJlZWRpcjwnLnRyZWVkaXIuJz4gOiBmb3VuZCBpdCEnKQogICAgIGxldCBoYXNrZXk9IDEKICAgIGVsc2UKLSIgICAgY2FsbCBEZWNobygnKE5ldHJ3QnJvd3NlQ2hnRGlyKSAuLi4uc2VhcmNoZWQgZm9yIHRyZWVkaXI8Jy50cmVlZGlyLic+IDogbm90IGZvdW5kJykKKyIgICAgY2FsbCBEZWNobygnKE5ldHJ3QnJvd3NlQ2hnRGlyOnRyZWUtbGlzdCkgLi4uLnNlYXJjaGVkIGZvciB0cmVlZGlyPCcudHJlZWRpci4nPiA6IG5vdCBmb3VuZCcpCiAgICBlbmRpZgogCiAgICAiIHNlYXJjaCB0cmVlZGljdCBmb3IgdHJlZWRpciB3aXRoIGEgLyBhcHBlbmRlZAogICAgaWYgIWhhc2tleSAmJiB0cmVlZGlyICF+ICcvJCcKICAgICBpZiBoYXNfa2V5KHc6bmV0cndfdHJlZWRpY3QsdHJlZWRpci4iLyIpCiAgICAgIGxldCB0cmVlZGlyPSB0cmVlZGlyLiIvIgotIiAgICAgY2FsbCBEZWNobygnKE5ldHJ3QnJvd3NlQ2hnRGlyKSAuLi4uc2VhcmNoZWQuZm9yIHRyZWVkaXI8Jy50cmVlZGlyLic+IGZvdW5kIGl0IScpCisiICAgICBjYWxsIERlY2hvKCcoTmV0cndCcm93c2VDaGdEaXI6dHJlZS1saXN0KSAuLi4uc2VhcmNoZWQuZm9yIHRyZWVkaXI8Jy50cmVlZGlyLic+IGZvdW5kIGl0IScpCiAgICAgIGxldCBoYXNrZXkgPSAxCiAgICAgZWxzZQotIiAgICAgY2FsbCBEZWNobygnKE5ldHJ3QnJvd3NlQ2hnRGlyKSAuLi4uc2VhcmNoZWQgZm9yIHRyZWVkaXI8Jy50cmVlZGlyLicvPiA6IG5vdCBmb3VuZCcpCisiICAgICBjYWxsIERlY2hvKCcoTmV0cndCcm93c2VDaGdEaXI6dHJlZS1saXN0KSAuLi4uc2VhcmNoZWQgZm9yIHRyZWVkaXI8Jy50cmVlZGlyLicvPiA6IG5vdCBmb3VuZCcpCiAgICAgZW5kaWYKICAgIGVuZGlmCiAKQEAgLTM3MDMsMTYgKzQ0ODksMTYgQEAKICAgIGlmICFoYXNrZXkgJiYgdHJlZWRpciA9fiAnLyQnCiAgICAgbGV0IHRyZWVkaXI9IHN1YnN0aXR1dGUodHJlZWRpciwnLyQnLCcnLCcnKQogICAgIGlmIGhhc19rZXkodzpuZXRyd190cmVlZGljdCx0cmVlZGlyKQotIiAgICAgY2FsbCBEZWNobygnKE5ldHJ3QnJvd3NlQ2hnRGlyKSAuLi4uc2VhcmNoZWQuZm9yIHRyZWVkaXI8Jy50cmVlZGlyLic+IGZvdW5kIGl0IScpCisiICAgICBjYWxsIERlY2hvKCcoTmV0cndCcm93c2VDaGdEaXI6dHJlZS1saXN0KSAuLi4uc2VhcmNoZWQuZm9yIHRyZWVkaXI8Jy50cmVlZGlyLic+IGZvdW5kIGl0IScpCiAgICAgIGxldCBoYXNrZXkgPSAxCiAgICAgZWxzZQotIiAgICAgY2FsbCBEZWNobygnKE5ldHJ3QnJvd3NlQ2hnRGlyKSAuLi4uc2VhcmNoZWQgZm9yIHRyZWVkaXI8Jy50cmVlZGlyLic+IDogbm90IGZvdW5kJykKKyIgICAgIGNhbGwgRGVjaG8oJyhOZXRyd0Jyb3dzZUNoZ0Rpcjp0cmVlLWxpc3QpIC4uLi5zZWFyY2hlZCBmb3IgdHJlZWRpcjwnLnRyZWVkaXIuJz4gOiBub3QgZm91bmQnKQogICAgIGVuZGlmCiAgICBlbmRpZgogCiAgICBpZiBoYXNrZXkKICAgICAiIGNsb3NlIHRyZWUgbGlzdGluZyBmb3Igc2VsZWN0ZWQgc3ViZGlyZWN0b3J5Ci0iICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcikgY2xvc2luZyBzZWxlY3RlZCBzdWJkaXJlY3Rvcnk8Ii5kaXJuYW1lLiI+IikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyOnRyZWUtbGlzdCkgY2xvc2luZyBzZWxlY3RlZCBzdWJkaXJlY3Rvcnk8Ii5kaXJuYW1lLiI+IikKICAgICBjYWxsIHJlbW92ZSh3Om5ldHJ3X3RyZWVkaWN0LHRyZWVkaXIpCiAiICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcikgcmVtb3ZlZCAgICAgZW50cnk8Ii50cmVlZGlyLiI+IGZyb20gdHJlZWRpY3QiKQogIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXIpIHlpZWxkaW5nIHRyZWVkaWN0PCIuc3RyaW5nKHc6bmV0cndfdHJlZWRpY3QpLiI+IikKQEAgLTM3MjAsNyArNDUwNiw3IEBACiAgICBlbHNlCiAgICAgIiBnbyBkb3duIG9uZSBkaXJlY3RvcnkKICAgICBsZXQgZGlybmFtZT0gc3Vic3RpdHV0ZSh0cmVlZGlyLCcvKiQnLCcvJywnJykKLSIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyKSBnbyBkb3duIG9uZSBkaXI6IHRyZWVkaXI8Ii50cmVlZGlyLiI+IikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyOnRyZWUtbGlzdCkgZ28gZG93biBvbmUgZGlyOiB0cmVlZGlyPCIudHJlZWRpci4iPiIpCiAgICBlbmRpZgogICAga2VlcGogY2FsbCBzOlNldFJleERpcihhOmlzbG9jYWwsZGlybmFtZSkKICAgIGxldCBzOnRyZWVmb3JjZXJlZHJhdyA9IDEKQEAgLTM3MzAsNyArNDUxNiw3IEBACiAgICAiIE5ldHJ3QnJvd3NlQ2hnRGlyOiBHbyBkb3duIG9uZSBkaXJlY3Rvcnkge3t7MwogICAgIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBsZXQgZGlybmFtZSAgICA9IHM6Q29tcG9zZVBhdGgoZGlybmFtZSxuZXdkaXIpCi0iICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyKSBnbyBkb3duIG9uZSBkaXI6IGRpcm5hbWU8Ii5kaXJuYW1lLiI+IG5ld2RpcjwiLm5ld2Rpci4iPiIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyOmdvLWRvd24pIGdvIGRvd24gb25lIGRpcjogZGlybmFtZTwiLmRpcm5hbWUuIj4gbmV3ZGlyPCIubmV3ZGlyLiI+IikKICAgIGtlZXBqIGNhbGwgczpTZXRSZXhEaXIoYTppc2xvY2FsLGRpcm5hbWUpCiAgIGVuZGlmCiAKQEAgLTM3MzksMTcgKzQ1MjUsMTcgQEAKICAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIGtlZXBqIGNhbGwgczpOZXRyd09wdGlvblJlc3RvcmUoInM6IikKICAgaWYgZG9sb2Nrb3V0Ci0iICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyKSBmaWxld3JpdGFibGUoZGlybmFtZTwiLmRpcm5hbWUuIj4pPSIuZmlsZXdyaXRhYmxlKGRpcm5hbWUpKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcjpyZXN0b3JlKSBmaWxld3JpdGFibGUoZGlybmFtZTwiLmRpcm5hbWUuIj4pPSIuZmlsZXdyaXRhYmxlKGRpcm5hbWUpKQogICAgaWYgZmlsZXdyaXRhYmxlKGRpcm5hbWUpCi0iICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcikgZG9pbmcgbW9kaWZpY2F0aW9uIGxvY2tvdXQgc2V0dGluZ3M6IG1hIG5vbW9kIG5vcm8iKQotIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXIpIHNldGwgbWEgbm9tb2Qgbm9ybyIpCisiICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcjpyZXN0b3JlKSBkb2luZyBtb2RpZmljYXRpb24gbG9ja291dCBzZXR0aW5nczogbWEgbm9tb2Qgbm9ybyIpCisiICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcjpyZXN0b3JlKSBzZXRsIG1hIG5vbW9kIG5vcm8iKQogICAgIHNldGwgbWEgbm9tb2Qgbm9ybwotIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXIpIHJvPSIuJmw6cm8uIiBtYT0iLiZsOm1hLiIgbW9kPSIuJmw6bW9kLiIgd3JhcD0iLiZsOndyYXAuIiAoZmlsZW5hbWU8Ii5leHBhbmQoIiUiKS4iPiB3aW4jIi53aW5ucigpLiIgZnQ8Ii4mZnQuIj4pIikKKyIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyOnJlc3RvcmUpIHJvPSIuJmw6cm8uIiBtYT0iLiZsOm1hLiIgbW9kPSIuJmw6bW9kLiIgd3JhcD0iLiZsOndyYXAuIiAoZmlsZW5hbWU8Ii5leHBhbmQoIiUiKS4iPiB3aW4jIi53aW5ucigpLiIgZnQ8Ii4mZnQuIj4pIikKICAgIGVsc2UKLSIgICAgY2FsbCBEZWNobygiKE5ldHJ3QnJvd3NlQ2hnRGlyKSBkb2luZyBtb2RpZmljYXRpb24gbG9ja291dCBzZXR0aW5nczogbWEgbm9tb2Qgcm8iKQotIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXIpIHNldGwgbWEgbm9tb2Qgbm9ybyIpCisiICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0RpcjpyZXN0b3JlKSBkb2luZyBtb2RpZmljYXRpb24gbG9ja291dCBzZXR0aW5nczogbWEgbm9tb2Qgcm8iKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXI6cmVzdG9yZSkgc2V0bCBtYSBub21vZCBub3JvIikKICAgICBzZXRsIG1hIG5vbW9kIHJvCi0iICAgIGNhbGwgRGVjaG8oIihOZXRyd0Jyb3dzZUNoZ0Rpcikgcm89Ii4mbDpyby4iIG1hPSIuJmw6bWEuIiBtb2Q9Ii4mbDptb2QuIiB3cmFwPSIuJmw6d3JhcC4iIChmaWxlbmFtZTwiLmV4cGFuZCgiJSIpLiI+IHdpbiMiLndpbm5yKCkuIiBmdDwiLiZmdC4iPikiKQorIiAgICBjYWxsIERlY2hvKCIoTmV0cndCcm93c2VDaGdEaXI6cmVzdG9yZSkgcm89Ii4mbDpyby4iIG1hPSIuJmw6bWEuIiBtb2Q9Ii4mbDptb2QuIiB3cmFwPSIuJmw6d3JhcC4iIChmaWxlbmFtZTwiLmV4cGFuZCgiJSIpLiI+IHdpbiMiLndpbm5yKCkuIiBmdDwiLiZmdC4iPikiKQogICAgZW5kaWYKICAgZW5kaWYKICAgbGV0IEBAPSB5a2VlcApAQCAtMzc3NSw3ICs0NTYxLDcgQEAKICAgICAgIiBnOk5ldHJ3X2NvcmVoYW5kbGVyIGlzIGEgZnVuY3Rpb24gcmVmZXJlbmNlIChzZWUgOmhlbHAgRnVuY3JlZikKICIgICAgIGNhbGwgRGVjaG8oImc6TmV0cndfY29yZWhhbmRsZXIgaXMgYSBmdW5jcmVmIikKICAgICAgY2FsbCBnOk5ldHJ3X2NvcmVoYW5kbGVyKGE6Zm5hbWUpCi0gICAgZWxzZWlmIHR5cGUoZzpOZXRyd19jb3JlaGFuZGxlcikgPT0gMykKKyAgICBlbHNlaWYgdHlwZShnOk5ldHJ3X2NvcmVoYW5kbGVyKSA9PSAzCiAgICAgICIgZzpOZXRyd19jb3JlaGFuZGxlciBpcyBhIExpc3Qgb2YgZnVuY3Rpb24gcmVmZXJlbmNlcyAoc2VlIDpoZWxwIEZ1bmNyZWYpCiAiICAgICBjYWxsIERlY2hvKCJnOk5ldHJ3X2NvcmVoYW5kbGVyIGlzIGEgTGlzdCIpCiAgICAgIGZvciBGbmNyZWYgaW4gZzpOZXRyd19jb3JlaGFuZGxlcgpAQCAtMzgxNyw3ICs0NjAzLDcgQEAKICAgaWYgYTpyZW1vdGUgPT0gMQogICAgIiBjcmVhdGUgYSBsb2NhbCBjb3B5CiAiICAgY2FsbCBEZWNobygiKHJlbW90ZSkgYTpyZW1vdGU9Ii5hOnJlbW90ZS4iOiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIDwiLmE6Zm5hbWUuIj4iKQotICAgc2V0bG9jYWwgYmg9ZGVsZXRlCisgICBzZXRsIGJoPWRlbGV0ZQogICAgY2FsbCBuZXRydyNOZXRSZWFkKDMsYTpmbmFtZSkKICAgICIgYXR0ZW1wdCB0byByZW5hbWUgdGVtcGZpbGUKICAgIGxldCBiYXNlbmFtZT0gc3Vic3RpdHV0ZShhOmZuYW1lLCdeXCguKlwpL1woLipcKVwuXChbXi5dKlwpJCcsJ1wyJywnJykKQEAgLTM5NjMsOSArNDc0OSw5IEBACiAiICBlbmRpZgogCiAgIGlmIGE6cmVtb3RlID09IDEKLSAgIHNldGxvY2FsIGJoPWRlbGV0ZSBidD1ub2ZpbGUKKyAgIHNldGwgYmg9ZGVsZXRlIGJ0PW5vZmlsZQogICAgaWYgZzpuZXRyd191c2Vfbm9zd2YKLSAgICBzZXRsb2NhbCBub3N3ZgorICAgIHNldGwgbm9zd2YKICAgIGVuZGlmCiAgICBleGUgInNpbCEga2VlcGogbm9ybSEgXDxjLW8+IgogIiAgIHJlZHJhdyEKQEAgLTQwMTksNDUzICs0ODA1LDYgQEAKIGVuZGZ1bgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIiBuZXRydyNFeHBsb3JlOiBsYXVuY2ggdGhlIGxvY2FsIGJyb3dzZXIgaW4gdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBmaWxlIHt7ezIKLSIgICAgICAgICAgaW5keDogID09IC0xOiBOZXhwbG9yZQotIiAgICAgICAgICAgICAgICAgPT0gLTI6IFBleHBsb3JlCi0iICAgICAgICAgICAgICAgICA9PSAgKzogdGhpcyBpcyBvdmVybG9hZGVkOgotIiAgICAgICAgICAgICAgICAgICAgICAqIElmIE5leHBsb3JlL1BleHBsb3JlIGlzIGluIHVzZSwgdGhlbiB0aGlzIHJlZmVycyB0byB0aGUKLSIgICAgICAgICAgICAgICAgICAgICAgICBpbmR4J3RoIGl0ZW0gaW4gdGhlIHc6bmV0cndfZXhwbG9yZV9saXN0W10gb2YgaXRlbXMgd2hpY2gKLSIgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkIHRoZSAqL3BhdHRlcm4gKiovcGF0dGVybiAqLy9wYXR0ZXJuICoqLy9wYXR0ZXJuCi0iICAgICAgICAgICAgICAgICAgICAgICogSWYgSGV4cGxvcmUgb3IgVmV4cGxvcmUsIHRoZW4gdGhpcyB3aWxsIG92ZXJyaWRlCi0iICAgICAgICAgICAgICAgICAgICAgICAgZzpuZXRyd193aW5zaXplIHRvIHNwZWNpZnkgdGhlIHF0eSBvZiByb3dzIG9yIGNvbHVtbnMgdGhlCi0iICAgICAgICAgICAgICAgICAgICAgICAgbmV3bHkgc3BsaXQgd2luZG93IHNob3VsZCBoYXZlLgotIiAgICAgICAgICBkb3NwbGl0PT0wOiB0aGUgd2luZG93IHdpbGwgYmUgc3BsaXQgaWZmIHRoZSBjdXJyZW50IGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQKLSIgICAgICAgICAgZG9zcGxpdD09MTogdGhlIHdpbmRvdyB3aWxsIGJlIHNwbGl0IGJlZm9yZSBydW5uaW5nIHRoZSBsb2NhbCBicm93c2VyCi0iICAgICAgICAgIHN0eWxlID09IDA6IEV4cGxvcmUgICAgIHN0eWxlID09IDE6IEV4cGxvcmUhCi0iICAgICAgICAgICAgICAgID09IDI6IEhleHBsb3JlICAgIHN0eWxlID09IDM6IEhleHBsb3JlIQotIiAgICAgICAgICAgICAgICA9PSA0OiBWZXhwbG9yZSAgICBzdHlsZSA9PSA1OiBWZXhwbG9yZSEKLSIgICAgICAgICAgICAgICAgPT0gNjogVGV4cGxvcmUKLWZ1biEgbmV0cncjRXhwbG9yZShpbmR4LGRvc3BsaXQsc3R5bGUsLi4uKQotIiAgY2FsbCBEZnVuYygibmV0cncjRXhwbG9yZShpbmR4PSIuYTppbmR4LiIgZG9zcGxpdD0iLmE6ZG9zcGxpdC4iIHN0eWxlPSIuYTpzdHlsZS4iLGE6MTwiLmE6MS4iPikgJm1vZGlmaWVkPSIuJm1vZGlmaWVkLiIgbW9kaWZpYWJsZT0iLiZtb2RpZmlhYmxlLiIgYTowPSIuYTowLiIgd2luIyIud2lubnIoKS4iIGJ1ZiMiLmJ1Zm5yKCIlIikpCi0gIGlmICFleGlzdHMoImI6bmV0cndfY3VyZGlyIikKLSAgIGxldCBiOm5ldHJ3X2N1cmRpcj0gZ2V0Y3dkKCkKLSIgICBjYWxsIERlY2hvKCJzZXQgYjpuZXRyd19jdXJkaXI8Ii5iOm5ldHJ3X2N1cmRpci4iPiAodXNlZCBnZXRjd2QpIikKLSAgZW5kaWYKLSAgbGV0IGN1cmRpciAgICAgPSBzaW1wbGlmeShiOm5ldHJ3X2N1cmRpcikKLSAgbGV0IGN1cmZpbGVkaXIgPSBzdWJzdGl0dXRlKGV4cGFuZCgiJTpwIiksJ15cKC4qWy9cXF1cKVteL1xcXSokJywnXDEnLCdlJykKLSIgIGNhbGwgRGVjaG8oImN1cmRpcjwiLmN1cmRpci4iPiAgY3VyZmlsZWRpcjwiLmN1cmZpbGVkaXIuIj4iKQotCi0gICIgc2F2ZSByZWdpc3RlcnMKLSAgc2lsISBsZXQga2VlcHJlZ3N0YXIgPSBAKgotICBzaWwhIGxldCBrZWVwcmVncGx1cyA9IEArCi0gIHNpbCEgbGV0IGtlZXByZWdzbGFzaD0gQC8KLQotICAiIGlmIGRvc3BsaXQgb3IgZmlsZSBoYXMgYmVlbiBtb2RpZmllZAotICBpZiBhOmRvc3BsaXQgfHwgJm1vZGlmaWVkIHx8IGE6c3R5bGUgPT0gNgotIiAgIGNhbGwgRGVjaG8oImNhc2UgZG9zcGxpdD0iLmE6ZG9zcGxpdC4iIG1vZGlmaWVkPSIuJm1vZGlmaWVkLiIgYTpzdHlsZT0iLmE6c3R5bGUuIjogZG9zcGxpdCBvciBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIikKLSAgIGNhbGwgczpTYXZlV2luVmFycygpCi0gICBsZXQgd2luc3o9IGc6bmV0cndfd2luc2l6ZQotICAgaWYgYTppbmR4ID4gMAotICAgIGxldCB3aW5zej0gYTppbmR4Ci0gICBlbmRpZgotCi0gICBpZiBhOnN0eWxlID09IDAgICAgICAiIEV4cGxvcmUsIFNleHBsb3JlCi0iICAgIGNhbGwgRGVjaG8oInN0eWxlPTA6IEV4cGxvcmUgb3IgU2V4cGxvcmUiKQotICAgIGxldCB3aW5zej0gKHdpbnN6ID4gMCk/ICh3aW5zeip3aW5oZWlnaHQoMCkpLzEwMCA6IC13aW5zegotICAgIGV4ZSB3aW5zei4id2luY21kIHMiCi0KLSAgIGVsc2VpZiBhOnN0eWxlID09IDEgICJFeHBsb3JlISwgU2V4cGxvcmUhCi0iICAgIGNhbGwgRGVjaG8oInN0eWxlPTE6IEV4cGxvcmUhIG9yIFNleHBsb3JlISIpCi0gICAgbGV0IHdpbnN6PSAod2luc3ogPiAwKT8gKHdpbnN6KndpbndpZHRoKDApKS8xMDAgOiAtd2luc3oKLSAgICBleGUgd2luc3ouIndpbmNtZCB2IgotCi0gICBlbHNlaWYgYTpzdHlsZSA9PSAyICAiIEhleHBsb3JlCi0iICAgIGNhbGwgRGVjaG8oInN0eWxlPTI6IEhleHBsb3JlIikKLSAgICBsZXQgd2luc3o9ICh3aW5zeiA+IDApPyAod2luc3oqd2luaGVpZ2h0KDApKS8xMDAgOiAtd2luc3oKLSAgICBleGUgImJlbCAiLndpbnN6LiJ3aW5jbWQgcyIKLQotICAgZWxzZWlmIGE6c3R5bGUgPT0gMyAgIiBIZXhwbG9yZSEKLSIgICAgY2FsbCBEZWNobygic3R5bGU9MzogSGV4cGxvcmUhIikKLSAgICBsZXQgd2luc3o9ICh3aW5zeiA+IDApPyAod2luc3oqd2luaGVpZ2h0KDApKS8xMDAgOiAtd2luc3oKLSAgICBleGUgImFibyAiLndpbnN6LiJ3aW5jbWQgcyIKLQotICAgZWxzZWlmIGE6c3R5bGUgPT0gNCAgIiBWZXhwbG9yZQotIiAgICBjYWxsIERlY2hvKCJzdHlsZT00OiBWZXhwbG9yZSIpCi0gICAgbGV0IHdpbnN6PSAod2luc3ogPiAwKT8gKHdpbnN6KndpbndpZHRoKDApKS8xMDAgOiAtd2luc3oKLSAgICBleGUgImxlZnRhICIud2luc3ouIndpbmNtZCB2IgotCi0gICBlbHNlaWYgYTpzdHlsZSA9PSA1ICAiIFZleHBsb3JlIQotIiAgICBjYWxsIERlY2hvKCJzdHlsZT01OiBWZXhwbG9yZSEiKQotICAgIGxldCB3aW5zej0gKHdpbnN6ID4gMCk/ICh3aW5zeip3aW53aWR0aCgwKSkvMTAwIDogLXdpbnN6Ci0gICAgZXhlICJyaWdodGIgIi53aW5zei4id2luY21kIHYiCi0KLSAgIGVsc2VpZiBhOnN0eWxlID09IDYgICIgVGV4cGxvcmUKLSAgICBjYWxsIHM6U2F2ZUJ1ZlZhcnMoKQotIiAgICBjYWxsIERlY2hvKCJzdHlsZSAgPSA2OiBUZXhwbG9yZSIpCi0gICAgZXhlICJ0YWJuZXcgIi5mbmFtZWVzY2FwZShjdXJkaXIpCi0gICAgY2FsbCBzOlJlc3RvcmVCdWZWYXJzKCkKLSAgIGVuZGlmCi0gICBjYWxsIHM6UmVzdG9yZVdpblZhcnMoKQotIiAgZWxzZSAiIERlY2hvCi0iICAgY2FsbCBEZWNobygiY2FzZSBhOmRvc3BsaXQ9Ii5hOmRvc3BsaXQuIiBBTkQgbW9kaWZpZWQ9Ii4mbW9kaWZpZWQuIiBBTkQgYTpzdHlsZT0iLmE6c3R5bGUuIiBpcyBub3QgNiIpCi0gIGVuZGlmCi0gIGtlZXBqIG5vcm0hIDAKLQotICBpZiBhOjAgPiAwCi0iICAgY2FsbCBEZWNobygiY2FzZSBbYTowPSIuYTowLiJdID4gMCIpCi0gICBpZiBhOjEgPX4gJ15cficgJiYgKGhhcygidW5peCIpIHx8IChleGlzdHMoImc6bmV0cndfY3lnd2luIikgJiYgZzpuZXRyd19jeWd3aW4pKQotIiAgICBjYWxsIERlY2hvKCIuLmNhc2UgYToxPCIuYToxLiI+OiBzdGFydHMgd2l0aCB+IGFuZCB1bml4IG9yIGN5Z3dpbiIpCi0gICAgbGV0IGRpcm5hbWU9IHNpbXBsaWZ5KHN1YnN0aXR1dGUoYToxLCdcficsZXhwYW5kKCIkSE9NRSIpLCcnKSkKLSIgICAgY2FsbCBEZWNobygiLi51c2luZyBkaXJuYW1lPCIuZGlybmFtZS4iPiAgKGNhc2U6IH4gJiYgdW5peHx8Y3lnd2luKSIpCi0gICBlbHNlaWYgYToxID09ICcuJwotIiAgICBjYWxsIERlY2hvKCIuLmNhc2UgYToxPCIuYToxLiI+OiBtYXRjaGVzIC4iKQotICAgIGxldCBkaXJuYW1lPSBzaW1wbGlmeShleGlzdHMoImI6bmV0cndfY3VyZGlyIik/IGI6bmV0cndfY3VyZGlyIDogZ2V0Y3dkKCkpCi0gICAgaWYgZGlybmFtZSAhfiAnLyQnCi0gICAgIGxldCBkaXJuYW1lPSBkaXJuYW1lLiIvIgotICAgIGVuZGlmCi0iICAgIGNhbGwgRGVjaG8oIi4udXNpbmcgZGlybmFtZTwiLmRpcm5hbWUuIj4gIChjYXNlOiAiLihleGlzdHMoImI6bmV0cndfY3VyZGlyIik/ICJiOm5ldHJ3X2N1cmRpciIgOiAiZ2V0Y3dkKCkiKS4iKSIpCi0gICBlbHNlaWYgYToxID1+ICdcJCcKLSIgICAgY2FsbCBEZWNobygiLi5jYXNlIGE6MTwiLmE6MS4iPjogbWF0Y2hlcyBlbmRpbmcgJCIpCi0gICAgbGV0IGRpcm5hbWU9IHNpbXBsaWZ5KGV4cGFuZChhOjEpKQotIiAgICBjYWxsIERlY2hvKCIuLnVzaW5nIHVzZXItc3BlY2lmaWVkIGRpcm5hbWU8Ii5kaXJuYW1lLiI+IHdpdGggJGVudi12YXIiKQotICAgZWxzZWlmIGE6MSAhfiAnXlwqXHsxLDJ9LycKLSIgICAgY2FsbCBEZWNobygiLi5jYXNlIGE6MTwiLmE6MS4iPjogb3RoZXIsIG5vdCBwYXR0ZXJuIG9yIGZpbGVwYXR0ZXJuIikKLSAgICBsZXQgZGlybmFtZT0gc2ltcGxpZnkoYToxKQotIiAgICBjYWxsIERlY2hvKCIuLnVzaW5nIHVzZXItc3BlY2lmaWVkIGRpcm5hbWU8Ii5kaXJuYW1lLiI+IikKLSAgIGVsc2UKLSIgICAgY2FsbCBEZWNobygiLi5jYXNlIGE6MTogcGF0dGVybiBvciBmaWxlcGF0dGVybiIpCi0gICAgbGV0IGRpcm5hbWU9IGE6MQotICAgZW5kaWYKLSAgZWxzZQotICAgIiBjbGVhciBleHBsb3JlCi0iICAgY2FsbCBEZWNobygiY2FzZSBhOjA9Ii5hOjAuIjogY2xlYXJpbmcgRXhwbG9yZSBsaXN0IikKLSAgIGNhbGwgczpOZXRyd0NsZWFyRXhwbG9yZSgpCi0iICAgY2FsbCBEcmV0KCJuZXRydyNFeHBsb3JlIDogY2xlYXJlZCBsaXN0IikKLSAgIHJldHVybgotICBlbmRpZgotCi0iICBjYWxsIERlY2hvKCJkaXJuYW1lPCIuZGlybmFtZS4iPiIpCi0gIGlmIGRpcm5hbWUgPX4gJ1wuXC4vXD0kJwotICAgbGV0IGRpcm5hbWU9IHNpbXBsaWZ5KGZuYW1lbW9kaWZ5KGRpcm5hbWUsJzpwOmgnKSkKLSAgZWxzZWlmIGRpcm5hbWUgPX4gJ1wuXC4nIHx8IGRpcm5hbWUgPT0gJy4nCi0gICBsZXQgZGlybmFtZT0gc2ltcGxpZnkoZm5hbWVtb2RpZnkoZGlybmFtZSwnOnAnKSkKLSAgZW5kaWYKLSIgIGNhbGwgRGVjaG8oImRpcm5hbWU8Ii5kaXJuYW1lLiI+ICAoYWZ0ZXIgc2ltcGxpZnkpIikKLQotICBpZiBkaXJuYW1lID1+ICdeXCovLycKLSAgICIgc3RhcnBhdD0xOiBFeHBsb3JlICovL3BhdHRlcm4gICAoY3VycmVudCBkaXJlY3Rvcnkgb25seSBzZWFyY2ggZm9yIGZpbGVzIGNvbnRhaW5pbmcgcGF0dGVybikKLSIgICBjYWxsIERlY2hvKCJjYXNlIEV4cGxvcmUgKi8vcGF0dGVybiIpCi0gICBsZXQgcGF0dGVybj0gc3Vic3RpdHV0ZShkaXJuYW1lLCdeXCovL1woLipcKSQnLCdcMScsJycpCi0gICBsZXQgc3RhcnBhdD0gMQotIiAgIGNhbGwgRGVjaG8oIi4uRXhwbG9yZSAqLy9wYXQ6IChzdGFycGF0PSIuc3RhcnBhdC4iKSBkaXJuYW1lPCIuZGlybmFtZS4iPiAtPiBwYXR0ZXJuPCIucGF0dGVybi4iPiIpCi0gICBpZiAmaGxzIHwgbGV0IGtlZXByZWdzbGFzaD0gczpFeHBsb3JlUGF0SGxzKHBhdHRlcm4pIHwgZW5kaWYKLQotICBlbHNlaWYgZGlybmFtZSA9fiAnXlwqXCovLycKLSAgICIgc3RhcnBhdD0yOiBFeHBsb3JlICoqLy9wYXR0ZXJuICAocmVjdXJzaXZlIGRlc2NlbnQgc2VhcmNoIGZvciBmaWxlcyBjb250YWluaW5nIHBhdHRlcm4pCi0iICAgY2FsbCBEZWNobygiY2FzZSBFeHBsb3JlICoqLy9wYXR0ZXJuIikKLSAgIGxldCBwYXR0ZXJuPSBzdWJzdGl0dXRlKGRpcm5hbWUsJ15cKlwqLy8nLCcnLCcnKQotICAgbGV0IHN0YXJwYXQ9IDIKLSIgICBjYWxsIERlY2hvKCIuLkV4cGxvcmUgKiovL3BhdDogKHN0YXJwYXQ9Ii5zdGFycGF0LiIpIGRpcm5hbWU8Ii5kaXJuYW1lLiI+IC0+IHBhdHRlcm48Ii5wYXR0ZXJuLiI+IikKLQotICBlbHNlaWYgZGlybmFtZSA9fiAnL1wqXCovJwotICAgIiBoYW5kbGUgLi4uLyoqLy4uLi9maWxlcGF0Ci0iICAgY2FsbCBEZWNobygiY2FzZSBFeHBsb3JlIC4uLi8qKi8uLi4vZmlsZXBhdCIpCi0gICBsZXQgcHJlZml4ZGlyPSBzdWJzdGl0dXRlKGRpcm5hbWUsJ15cKC5cey19XClcKlwqLiokJywnXDEnLCcnKQotICAgaWYgcHJlZml4ZGlyID1+ICdeLycgfHwgKHByZWZpeGRpciA9fiAnXlxhOi8nICYmIChoYXMoIndpbjMyIikgfHwgaGFzKCJ3aW45NSIpIHx8IGhhcygid2luNjQiKSB8fCBoYXMoIndpbjE2IikpKQotICAgIGxldCBiOm5ldHJ3X2N1cmRpciA9IHByZWZpeGRpcgotICAgZWxzZQotICAgIGxldCBiOm5ldHJ3X2N1cmRpcj0gZ2V0Y3dkKCkuJy8nLnByZWZpeGRpcgotICAgZW5kaWYKLSAgIGxldCBkaXJuYW1lPSBzdWJzdGl0dXRlKGRpcm5hbWUsJ14uXHstfVwoXCpcKi8uKlwpJCcsJ1wxJywnJykKLSAgIGxldCBzdGFycGF0PSA0OwotIiAgIGNhbGwgRGVjaG8oIi4ucHdkPCIuZ2V0Y3dkKCkuIj4gZGlybmFtZTwiLmRpcm5hbWUuIj4iKQotIiAgIGNhbGwgRGVjaG8oIi4uY2FzZSBFeHBsb3JlIC4uLyoqLy4uL2ZpbGVwYXQgKHN0YXJwYXQ9Ii5zdGFycGF0LiIpIikKLQotICBlbHNlaWYgZGlybmFtZSA9fiAnXlwqLycKLSAgICIgc3RhcnBhdD0zOiBFeHBsb3JlICovZmlsZXBhdCAgIChzZWFyY2ggaW4gY3VycmVudCBkaXJlY3RvcnkgZm9yIGZpbGVuYW1lcyBtYXRjaGluZyBmaWxlcGF0KQotICAgbGV0IHN0YXJwYXQ9IDMKLSIgICBjYWxsIERlY2hvKCJjYXNlIEV4cGxvcmUgKi9maWxlcGF0IChzdGFycGF0PSIuc3RhcnBhdC4iKSIpCi0KLSAgZWxzZWlmIGRpcm5hbWU9fiAnXlwqXCovJwotICAgIiBzdGFycGF0PTQ6IEV4cGxvcmUgKiovZmlsZXBhdCAgKHJlY3Vyc2l2ZSBkZXNjZW50IHNlYXJjaCBmb3IgZmlsZW5hbWVzIG1hdGNoaW5nIGZpbGVwYXQpCi0gICBsZXQgc3RhcnBhdD0gNAotIiAgIGNhbGwgRGVjaG8oImNhc2UgRXhwbG9yZSAqKi9maWxlcGF0IChzdGFycGF0PSIuc3RhcnBhdC4iKSIpCi0KLSAgZWxzZQotICAgbGV0IHN0YXJwYXQ9IDAKLSIgICBjYWxsIERlY2hvKCJkZWZhdWx0IGNhc2U6IHN0YXJwYXQ9Ii5zdGFycGF0KQotICBlbmRpZgotCi0gIGlmIHN0YXJwYXQgPT0gMCAmJiBhOmluZHggPj0gMAotICAgIiBbRXhwbG9yZSBIZXhwbG9yZSBWZXhwbG9yZSBTZXhwbG9yZV0gW2Rpcm5hbWVdCi0iICAgY2FsbCBEZWNobygiY2FzZSBzdGFycGF0PT0wICYmIGE6aW5keD0iLmE6aW5keC4iOiBkaXJuYW1lPCIuZGlybmFtZS4iPiBFeHBsb3JlIEhleHBsb3JlIFZleHBsb3JlIFNleHBsb3JlIikKLSAgIGlmIGRpcm5hbWUgPT0gIiIKLSAgICBsZXQgZGlybmFtZT0gY3VyZmlsZWRpcgotIiAgICBjYWxsIERlY2hvKCIuLmVtcHR5IGRpcm5hbWUsIHVzaW5nIGN1cnJlbnQgZmlsZSdzIGRpcmVjdG9yeTwiLmRpcm5hbWUuIj4iKQotICAgZW5kaWYKLSAgIGlmIGRpcm5hbWUgPX4gJ15zY3A6JyB8fCBkaXJuYW1lID1+ICdeZnRwOicKLSIgICAgY2FsbCBEZWNobygiLi5jYWxsaW5nIE5ldHJ3QnJvd3NlKDAsZGlybmFtZTwiLmRpcm5hbWUuIj4pIikKLSAgICBjYWxsIHM6TmV0cndCcm93c2UoMCxkaXJuYW1lKQotICAgZWxzZQotICAgIGlmIGRpcm5hbWUgPT0gIiJ8bGV0IGRpcm5hbWU9IGdldGN3ZCgpfGVuZGlmCi0iICAgIGNhbGwgRGVjaG8oIi4uY2FsbGluZyBMb2NhbEJyb3dzZUNoZWNrKGRpcm5hbWU8Ii5kaXJuYW1lLiI+KSIpCi0gICAgY2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKGRpcm5hbWUpCi0iICAgIGNhbGwgRGVjaG8oIndpbiMiLndpbm5yKCkuIiBidWYjIi5idWZucigiJSIpLiIgbW9kaWZpZWQ9Ii4mbW9kaWZpZWQuIiBtb2RpZmlhYmxlPSIuJm1vZGlmaWFibGUuIiByZWFkb25seT0iLiZyZWFkb25seSkKLSAgIGVuZGlmCi0KLSIgICBjYWxsIERlY2hvKCJjdXJkaXI8Ii5jdXJkaXIuIj4iKQotICAgaWYgaGFzKCJ3aW4zMiIpIHx8IGhhcygid2luOTUiKSB8fCBoYXMoIndpbjY0IikgfHwgaGFzKCJ3aW4xNiIpCi0gICAga2VlcGogY2FsbCBzZWFyY2goJ1w8Jy5zdWJzdGl0dXRlKGN1cmRpciwnXi4qWy9cXF0nLCcnLCdlJykuJ1w+JywnY1cnKQotICAgZWxzZQotICAgIGtlZXBqIGNhbGwgc2VhcmNoKCdcPCcuc3Vic3RpdHV0ZShjdXJkaXIsJ14uKi8nLCcnLCdlJykuJ1w+JywnY1cnKQotICAgZW5kaWYKLQotICAiIHN0YXJwYXQ9MTogRXhwbG9yZSAqLy9wYXR0ZXJuICAoY3VycmVudCBkaXJlY3Rvcnkgb25seSBzZWFyY2ggZm9yIGZpbGVzIGNvbnRhaW5pbmcgcGF0dGVybikKLSAgIiBzdGFycGF0PTI6IEV4cGxvcmUgKiovL3BhdHRlcm4gKHJlY3Vyc2l2ZSBkZXNjZW50IHNlYXJjaCBmb3IgZmlsZXMgY29udGFpbmluZyBwYXR0ZXJuKQotICAiIHN0YXJwYXQ9MzogRXhwbG9yZSAqL2ZpbGVwYXQgICAoc2VhcmNoIGluIGN1cnJlbnQgZGlyZWN0b3J5IGZvciBmaWxlbmFtZXMgbWF0Y2hpbmcgZmlsZXBhdCkKLSAgIiBzdGFycGF0PTQ6IEV4cGxvcmUgKiovZmlsZXBhdCAgKHJlY3Vyc2l2ZSBkZXNjZW50IHNlYXJjaCBmb3IgZmlsZW5hbWVzIG1hdGNoaW5nIGZpbGVwYXQpCi0gIGVsc2VpZiBhOmluZHggPD0gMAotICAgIiBOZXhwbG9yZSwgUGV4cGxvcmUsIEV4cGxvcmU6IGhhbmRsZSBzdGFycGF0Ci0iICAgY2FsbCBEZWNobygiY2FzZSBhOmluZHg8PTA6IE5leHBsb3JlLCBQZXhwbG9yZSwgPHMtZG93bj4sIDxzLXVwPiBzdGFycGF0PSIuc3RhcnBhdC4iIGE6aW5keD0iLmE6aW5keCkKLSAgIGlmICFtYXBjaGVjaygiPHMtdXA+IiwibiIpICYmICFtYXBjaGVjaygiPHMtZG93bj4iLCJuIikgJiYgZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpCi0iICAgIGNhbGwgRGVjaG8oIi4uc2V0IHVwIDxzLXVwPiBhbmQgPHMtZG93bj4gbWFwcyIpCi0gICAgbGV0IHM6ZGlkc3RhcnN0YXI9IDEKLSAgICBubm9yZW1hcCA8YnVmZmVyPiA8c2lsZW50PiA8cy11cD4JOlBleHBsb3JlPGNyPgotICAgIG5ub3JlbWFwIDxidWZmZXI+IDxzaWxlbnQ+IDxzLWRvd24+CTpOZXhwbG9yZTxjcj4KLSAgIGVuZGlmCi0KLSAgIGlmIGhhcygicGF0aF9leHRyYSIpCi0iICAgIGNhbGwgRGVjaG8oIi4uc3RhcnBhdD0iLnN0YXJwYXQuIjogaGFzICtwYXRoX2V4dHJhIikKLSAgICBpZiAhZXhpc3RzKCJ3Om5ldHJ3X2V4cGxvcmVfaW5keCIpCi0gICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfaW5keD0gMAotICAgIGVuZGlmCi0KLSAgICBsZXQgaW5keCA9IGE6aW5keAotIiAgICBjYWxsIERlY2hvKCIuLnN0YXJwYXQ9Ii5zdGFycGF0LiI6IHNldCBpbmR4PSBbYTppbmR4PSIuaW5keC4iXSIpCi0KLSAgICBpZiBpbmR4ID09IC0xCi0gICAgICIgTmV4cGxvcmUKLSIgICAgIGNhbGwgRGVjaG8oIi4uY2FzZSBOZXhwbG9yZSB3aXRoIHN0YXJwYXQ9Ii5zdGFycGF0LiI6IChpbmR4PSIuaW5keC4iKSIpCi0gICAgIGlmICFleGlzdHMoInc6bmV0cndfZXhwbG9yZV9saXN0IikgIiBzYW5pdHkgY2hlY2sKLSAgICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJ1c2luZyBOZXhwbG9yZSBvciA8cy1kb3duPiBpbXByb3Blcmx5OyBzZWUgaGVscCBmb3IgbmV0cnctc3RhcnN0YXIiLDQwKQotICAgICAgc2lsISBsZXQgQCogPSBrZWVwcmVnc3RhcgotICAgICAgc2lsISBsZXQgQCsgPSBrZWVwcmVnc3RhcgotICAgICAgc2lsISBsZXQgQC8gPSBrZWVwcmVnc2xhc2gKLSIgICAgICBjYWxsIERyZXQoIm5ldHJ3I0V4cGxvcmUiKQotICAgICAgcmV0dXJuCi0gICAgIGVuZGlmCi0gICAgIGxldCBpbmR4PSB3Om5ldHJ3X2V4cGxvcmVfaW5keAotICAgICBpZiBpbmR4IDwgMCAgICAgICAgICAgICAgICAgICAgICAgIHwgbGV0IGluZHg9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVuZGlmCi0gICAgIGlmIGluZHggPj0gdzpuZXRyd19leHBsb3JlX2xpc3RsZW4gfCBsZXQgaW5keD0gdzpuZXRyd19leHBsb3JlX2xpc3RsZW4gLSAxIHwgZW5kaWYKLSAgICAgbGV0IGN1cmZpbGU9IHc6bmV0cndfZXhwbG9yZV9saXN0W2luZHhdCi0iICAgICBjYWxsIERlY2hvKCIuLi4uaW5keD0iLmluZHguIiBjdXJmaWxlPCIuY3VyZmlsZS4iPiIpCi0gICAgIHdoaWxlIGluZHggPCB3Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbiAmJiBjdXJmaWxlID09IHc6bmV0cndfZXhwbG9yZV9saXN0W2luZHhdCi0gICAgICBsZXQgaW5keD0gaW5keCArIDEKLSIgICAgICBjYWxsIERlY2hvKCIuLi4uaW5keD0iLmluZHguIiAoTmV4cGxvcmUgd2hpbGUgbG9vcCkiKQotICAgICBlbmR3aGlsZQotICAgICBpZiBpbmR4ID49IHc6bmV0cndfZXhwbG9yZV9saXN0bGVuIHwgbGV0IGluZHg9IHc6bmV0cndfZXhwbG9yZV9saXN0bGVuIC0gMSB8IGVuZGlmCi0iICAgICBjYWxsIERlY2hvKCIuLi4uTmV4cGxvcmU6IGluZHg9IFt3Om5ldHJ3X2V4cGxvcmVfaW5keD0iLnc6bmV0cndfZXhwbG9yZV9pbmR4LiJdPSIuaW5keCkKLQotICAgIGVsc2VpZiBpbmR4ID09IC0yCi0gICAgICIgUGV4cGxvcmUKLSIgICAgIGNhbGwgRGVjaG8oImNhc2UgUGV4cGxvcmUgd2l0aCBzdGFycGF0PSIuc3RhcnBhdC4iOiAoaW5keD0iLmluZHguIikiKQotICAgICBpZiAhZXhpc3RzKCJ3Om5ldHJ3X2V4cGxvcmVfbGlzdCIpICIgc2FuaXR5IGNoZWNrCi0gICAgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywidXNpbmcgUGV4cGxvcmUgb3IgPHMtdXA+IGltcHJvcGVybHk7IHNlZSBoZWxwIGZvciBuZXRydy1zdGFyc3RhciIsNDEpCi0gICAgICBzaWwhIGxldCBAKiA9IGtlZXByZWdzdGFyCi0gICAgICBzaWwhIGxldCBAKyA9IGtlZXByZWdzdGFyCi0gICAgICBzaWwhIGxldCBALyA9IGtlZXByZWdzbGFzaAotIiAgICAgIGNhbGwgRHJldCgibmV0cncjRXhwbG9yZSIpCi0gICAgICByZXR1cm4KLSAgICAgZW5kaWYKLSAgICAgbGV0IGluZHg9IHc6bmV0cndfZXhwbG9yZV9pbmR4Ci0gICAgIGlmIGluZHggPCAwICAgICAgICAgICAgICAgICAgICAgICAgfCBsZXQgaW5keD0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW5kaWYKLSAgICAgaWYgaW5keCA+PSB3Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbiB8IGxldCBpbmR4PSB3Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbiAtIDEgfCBlbmRpZgotICAgICBsZXQgY3VyZmlsZT0gdzpuZXRyd19leHBsb3JlX2xpc3RbaW5keF0KLSIgICAgIGNhbGwgRGVjaG8oIi4uLi5pbmR4PSIuaW5keC4iIGN1cmZpbGU8Ii5jdXJmaWxlLiI+IikKLSAgICAgd2hpbGUgaW5keCA+PSAwICYmIGN1cmZpbGUgPT0gdzpuZXRyd19leHBsb3JlX2xpc3RbaW5keF0KLSAgICAgIGxldCBpbmR4PSBpbmR4IC0gMQotIiAgICAgIGNhbGwgRGVjaG8oIi4uLi5pbmR4PSIuaW5keC4iIChQZXhwbG9yZSB3aGlsZSBsb29wKSIpCi0gICAgIGVuZHdoaWxlCi0gICAgIGlmIGluZHggPCAwICAgICAgICAgICAgICAgICAgICAgICAgfCBsZXQgaW5keD0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW5kaWYKLSIgICAgIGNhbGwgRGVjaG8oIi4uLi5QZXhwbG9yZTogaW5keD0gW3c6bmV0cndfZXhwbG9yZV9pbmR4PSIudzpuZXRyd19leHBsb3JlX2luZHguIl09Ii5pbmR4KQotCi0gICAgZWxzZQotICAgICAiIEV4cGxvcmUgLS0gaW5pdGlhbGl6ZQotICAgICAiIGJ1aWxkIGxpc3Qgb2YgZmlsZXMgdG8gRXhwbG9yZSB3aXRoIE5leHBsb3JlL1BleHBsb3JlCi0iICAgICBjYWxsIERlY2hvKCIuLnN0YXJwYXQ9Ii5zdGFycGF0LiI6IGNhc2UgRXhwbG9yZTogaW5pdGlhbGl6ZSAoaW5keD0iLmluZHguIikiKQotICAgICBrZWVwaiBjYWxsIHM6TmV0cndDbGVhckV4cGxvcmUoKQotICAgICBsZXQgdzpuZXRyd19leHBsb3JlX2luZHg9IDAKLSAgICAgaWYgIWV4aXN0cygiYjpuZXRyd19jdXJkaXIiKQotICAgICAgbGV0IGI6bmV0cndfY3VyZGlyPSBnZXRjd2QoKQotICAgICBlbmRpZgotIiAgICAgY2FsbCBEZWNobygiLi4uLnN0YXJwYXQ9Ii5zdGFycGF0LiI6IGI6bmV0cndfY3VyZGlyPCIuYjpuZXRyd19jdXJkaXIuIj4iKQotCi0gICAgICIgc3dpdGNoIG9uIHN0YXJwYXQgdG8gYnVpbGQgdGhlIHc6bmV0cndfZXhwbG9yZV9saXN0IG9mIGZpbGVzCi0gICAgIGlmIHN0YXJwYXQgPT0gMQotICAgICAgIiBzdGFycGF0PTE6IEV4cGxvcmUgKi8vcGF0dGVybiAgKGN1cnJlbnQgZGlyZWN0b3J5IG9ubHkgc2VhcmNoIGZvciBmaWxlcyBjb250YWluaW5nIHBhdHRlcm4pCi0iICAgICAgY2FsbCBEZWNobygiLi5jYXNlIHN0YXJwYXQ9Ii5zdGFycGF0LiI6IGJ1aWxkICovL3BhdHRlcm4gbGlzdCAgKGN1cmRpci1vbmx5IHNyY2ggZm9yIGZpbGVzIGNvbnRhaW5pbmcgcGF0dGVybikgICZobHM9Ii4maGxzKQotIiAgICAgIGNhbGwgRGVjaG8oIi4uLi5wYXR0ZXJuPCIucGF0dGVybi4iPiIpCi0gICAgICB0cnkKLSAgICAgICBleGUgImtlZXBqIG5vYXV0b2NtZCB2aW1ncmVwIC8iLnBhdHRlcm4uIi9naiAiLmZuYW1lZXNjYXBlKGI6bmV0cndfY3VyZGlyKS4iLyoiCi0gICAgICBjYXRjaCAvXlZpbVwlKChcYVwrKVwpXD06RTQ4MC8KLSAgICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywibm8gbWF0Y2ggd2l0aCBwYXR0ZXJuPCIucGF0dGVybi4iPiIsNzYpCi0iICAgICAgIGNhbGwgRHJldCgibmV0cncjRXhwbG9yZSA6IHVuYWJsZSB0byBmaW5kIHBhdHRlcm48Ii5wYXR0ZXJuLiI+IikKLSAgICAgICByZXR1cm4KLSAgICAgIGVuZHRyeQotICAgICAgbGV0IHc6bmV0cndfZXhwbG9yZV9saXN0ID0gczpOZXRyd0V4cGxvcmVMaXN0VW5pcShtYXAoZ2V0cWZsaXN0KCksJ2J1Zm5hbWUodjp2YWwuYnVmbnIpJykpCi0gICAgICBpZiAmaGxzIHwgbGV0IGtlZXByZWdzbGFzaD0gczpFeHBsb3JlUGF0SGxzKHBhdHRlcm4pIHwgZW5kaWYKLQotICAgICBlbHNlaWYgc3RhcnBhdCA9PSAyCi0gICAgICAiIHN0YXJwYXQ9MjogRXhwbG9yZSAqKi8vcGF0dGVybiAocmVjdXJzaXZlIGRlc2NlbnQgc2VhcmNoIGZvciBmaWxlcyBjb250YWluaW5nIHBhdHRlcm4pCi0iICAgICAgY2FsbCBEZWNobygiLi5jYXNlIHN0YXJwYXQ9Ii5zdGFycGF0LiI6IGJ1aWxkICoqLy9wYXR0ZXJuIGxpc3QgIChyZWN1cnNpdmUgZGVzY2VudCBmaWxlcyBjb250YWluaW5nIHBhdHRlcm4pIikKLSIgICAgICBjYWxsIERlY2hvKCIuLi4ucGF0dGVybjwiLnBhdHRlcm4uIj4iKQotICAgICAgdHJ5Ci0gICAgICAgZXhlICJzaWwga2VlcGogbm9hdXRvY21kIHZpbWdyZXAgLyIucGF0dGVybi4iL2dqICIuIioqLyoiCi0gICAgICBjYXRjaCAvXlZpbVwlKChcYVwrKVwpXD06RTQ4MC8KLSAgICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywnbm8gZmlsZXMgbWF0Y2hlZCBwYXR0ZXJuPCcucGF0dGVybi4nPicsNDUpCi0gICAgICAgaWYgJmhscyB8IGxldCBrZWVwcmVnc2xhc2g9IHM6RXhwbG9yZVBhdEhscyhwYXR0ZXJuKSB8IGVuZGlmCi0gICAgICAgc2lsISBsZXQgQCogPSBrZWVwcmVnc3RhcgotICAgICAgIHNpbCEgbGV0IEArID0ga2VlcHJlZ3N0YXIKLSAgICAgICBzaWwhIGxldCBALyA9IGtlZXByZWdzbGFzaAotIiAgICAgICBjYWxsIERyZXQoIm5ldHJ3I0V4cGxvcmUgOiBubyBmaWxlcyBtYXRjaGVkIHBhdHRlcm4iKQotICAgICAgIHJldHVybgotICAgICAgZW5kdHJ5Ci0gICAgICBsZXQgczpuZXRyd19jdXJkaXIgICAgICAgPSBiOm5ldHJ3X2N1cmRpcgotICAgICAgbGV0IHc6bmV0cndfZXhwbG9yZV9saXN0ID0gZ2V0cWZsaXN0KCkKLSAgICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfbGlzdCA9IHM6TmV0cndFeHBsb3JlTGlzdFVuaXEobWFwKHc6bmV0cndfZXhwbG9yZV9saXN0LCdzOm5ldHJ3X2N1cmRpci4iLyIuYnVmbmFtZSh2OnZhbC5idWZuciknKSkKLSAgICAgIGlmICZobHMgfCBsZXQga2VlcHJlZ3NsYXNoPSBzOkV4cGxvcmVQYXRIbHMocGF0dGVybikgfCBlbmRpZgotCi0gICAgIGVsc2VpZiBzdGFycGF0ID09IDMKLSAgICAgICIgc3RhcnBhdD0zOiBFeHBsb3JlICovZmlsZXBhdCAgIChzZWFyY2ggaW4gY3VycmVudCBkaXJlY3RvcnkgZm9yIGZpbGVuYW1lcyBtYXRjaGluZyBmaWxlcGF0KQotIiAgICAgIGNhbGwgRGVjaG8oIi4uY2FzZSBzdGFycGF0PSIuc3RhcnBhdC4iOiBidWlsZCAqL2ZpbGVwYXQgbGlzdCAgKGN1cmRpci1vbmx5IHNyY2ggZmlsZW5hbWVzIG1hdGNoaW5nIGZpbGVwYXQpICAmaGxzPSIuJmhscykKLSAgICAgIGxldCBmaWxlcGF0PSBzdWJzdGl0dXRlKGRpcm5hbWUsJ15cKi8nLCcnLCcnKQotICAgICAgbGV0IGZpbGVwYXQ9IHN1YnN0aXR1dGUoZmlsZXBhdCwnXlslIzxdJywnXFwmJywnJykKLSIgICAgICBjYWxsIERlY2hvKCIuLi4uYjpuZXRyd19jdXJkaXI8Ii5iOm5ldHJ3X2N1cmRpci4iPiIpCi0iICAgICAgY2FsbCBEZWNobygiLi4uLmZpbGVwYXQ8Ii5maWxlcGF0LiI+IikKLSAgICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfbGlzdD0gczpOZXRyd0V4cGxvcmVMaXN0VW5pcShzcGxpdChleHBhbmQoYjpuZXRyd19jdXJkaXIuIi8iLmZpbGVwYXQpLCdcbicpKQotICAgICAgaWYgJmhscyB8IGxldCBrZWVwcmVnc2xhc2g9IHM6RXhwbG9yZVBhdEhscyhmaWxlcGF0KSB8IGVuZGlmCi0KLSAgICAgZWxzZWlmIHN0YXJwYXQgPT0gNAotICAgICAgIiBzdGFycGF0PTQ6IEV4cGxvcmUgKiovZmlsZXBhdCAgKHJlY3Vyc2l2ZSBkZXNjZW50IHNlYXJjaCBmb3IgZmlsZW5hbWVzIG1hdGNoaW5nIGZpbGVwYXQpCi0iICAgICAgY2FsbCBEZWNobygiLi5jYXNlIHN0YXJwYXQ9Ii5zdGFycGF0LiI6IGJ1aWxkICoqL2ZpbGVwYXQgbGlzdCAgKHJlY3Vyc2l2ZSBkZXNjZW50IHNyY2ggZmlsZW5hbWVzIG1hdGNoaW5nIGZpbGVwYXQpICAmaGxzPSIuJmhscykKLSAgICAgIGxldCB3Om5ldHJ3X2V4cGxvcmVfbGlzdD0gczpOZXRyd0V4cGxvcmVMaXN0VW5pcShzcGxpdChleHBhbmQoYjpuZXRyd19jdXJkaXIuIi8iLmRpcm5hbWUpLCdcbicpKQotICAgICAgaWYgJmhscyB8IGxldCBrZWVwcmVnc2xhc2g9IHM6RXhwbG9yZVBhdEhscyhkaXJuYW1lKSB8IGVuZGlmCi0gICAgIGVuZGlmICIgc3dpdGNoIG9uIHN0YXJwYXQgdG8gYnVpbGQgdzpuZXRyd19leHBsb3JlX2xpc3QKLQotICAgICBsZXQgdzpuZXRyd19leHBsb3JlX2xpc3RsZW4gPSBsZW4odzpuZXRyd19leHBsb3JlX2xpc3QpCi0iICAgICBjYWxsIERlY2hvKCIuLi4udzpuZXRyd19leHBsb3JlX2xpc3Q8Ii5zdHJpbmcodzpuZXRyd19leHBsb3JlX2xpc3QpLiI+IikKLSIgICAgIGNhbGwgRGVjaG8oIi4uLi53Om5ldHJ3X2V4cGxvcmVfbGlzdGxlbj0iLnc6bmV0cndfZXhwbG9yZV9saXN0bGVuKQotCi0gICAgIGlmIHc6bmV0cndfZXhwbG9yZV9saXN0bGVuID09IDAgfHwgKHc6bmV0cndfZXhwbG9yZV9saXN0bGVuID09IDEgJiYgdzpuZXRyd19leHBsb3JlX2xpc3RbMF0gPX4gJ1wqXCpcLycpCi0gICAgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywibm8gZmlsZXMgbWF0Y2hlZCIsNDIpCi0gICAgICBzaWwhIGxldCBAKiA9IGtlZXByZWdzdGFyCi0gICAgICBzaWwhIGxldCBAKyA9IGtlZXByZWdzdGFyCi0gICAgICBzaWwhIGxldCBALyA9IGtlZXByZWdzbGFzaAotIiAgICAgIGNhbGwgRHJldCgibmV0cncjRXhwbG9yZSA6IG5vIGZpbGVzIG1hdGNoZWQiKQotICAgICAgcmV0dXJuCi0gICAgIGVuZGlmCi0gICAgZW5kaWYgICIgaWYgaW5keCAuLi4gZW5kaWYKLQotICAgICIgTmV0cndTdGF0dXNMaW5lIHN1cHBvcnQgLSBmb3IgZXhwbG9yaW5nIHN1cHBvcnQKLSAgICBsZXQgdzpuZXRyd19leHBsb3JlX2luZHg9IGluZHgKLSIgICAgY2FsbCBEZWNobygiLi4uLnc6bmV0cndfZXhwbG9yZV9saXN0PCIuam9pbih3Om5ldHJ3X2V4cGxvcmVfbGlzdCwnLCcpLiI+IGxlbj0iLnc6bmV0cndfZXhwbG9yZV9saXN0bGVuKQotCi0gICAgIiB3cmFwIHRoZSBpbmR4IGFyb3VuZCwgYnV0IGlzc3VlIGEgbm90ZQotICAgIGlmIGluZHggPj0gdzpuZXRyd19leHBsb3JlX2xpc3RsZW4gfHwgaW5keCA8IDAKLSIgICAgIGNhbGwgRGVjaG8oIi4uLi53cmFwIGluZHggKGluZHg9Ii5pbmR4LiIgbGlzdGxlbj0iLnc6bmV0cndfZXhwbG9yZV9saXN0bGVuLiIpIikKLSAgICAgbGV0IGluZHggICAgICAgICAgICAgICAgPSAoaW5keCA8IDApPyAoIHc6bmV0cndfZXhwbG9yZV9saXN0bGVuIC0gMSApIDogMAotICAgICBsZXQgdzpuZXRyd19leHBsb3JlX2luZHg9IGluZHgKLSAgICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOk5PVEUsIm5vIG1vcmUgZmlsZXMgbWF0Y2ggRXhwbG9yZSBwYXR0ZXJuIiw0MykKLSAgICBlbmRpZgotCi0gICAgZXhlICJsZXQgZGlyZmlsZT0gdzpuZXRyd19leHBsb3JlX2xpc3RbIi5pbmR4LiJdIgotIiAgICBjYWxsIERlY2hvKCIuLi4uZGlyZmlsZT13Om5ldHJ3X2V4cGxvcmVfbGlzdFtpbmR4PSIuaW5keC4iXT0gPCIuZGlyZmlsZS4iPiIpCi0gICAgbGV0IG5ld2Rpcj0gc3Vic3RpdHV0ZShkaXJmaWxlLCcvW14vXSokJywnJywnZScpCi0iICAgIGNhbGwgRGVjaG8oIi4uLi5uZXdkaXI8Ii5uZXdkaXIuIj4iKQotCi0iICAgIGNhbGwgRGVjaG8oIi4uLi5jYWxsaW5nIExvY2FsQnJvd3NlQ2hlY2sobmV3ZGlyPCIubmV3ZGlyLiI+KSIpCi0gICAgY2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKG5ld2RpcikKLSAgICBpZiAhZXhpc3RzKCJ3Om5ldHJ3X2xpc3RzdHlsZSIpCi0gICAgIGxldCB3Om5ldHJ3X2xpc3RzdHlsZT0gZzpuZXRyd19saXN0c3R5bGUKLSAgICBlbmRpZgotICAgIGlmIHc6bmV0cndfbGlzdHN0eWxlID09IHM6VEhJTkxJU1QgfHwgdzpuZXRyd19saXN0c3R5bGUgPT0gczpMT05HTElTVAotICAgICBrZWVwaiBjYWxsIHNlYXJjaCgnXicuc3Vic3RpdHV0ZShkaXJmaWxlLCJeLiovIiwiIiwiIikuJ1w+JywiVyIpCi0gICAgZWxzZQotICAgICBrZWVwaiBjYWxsIHNlYXJjaCgnXDwnLnN1YnN0aXR1dGUoZGlyZmlsZSwiXi4qLyIsIiIsIiIpLidcPicsInciKQotICAgIGVuZGlmCi0gICAgbGV0IHc6bmV0cndfZXhwbG9yZV9tdGNoY250ID0gaW5keCArIDEKLSAgICBsZXQgdzpuZXRyd19leHBsb3JlX2J1Zm5yICAgPSBidWZucigiJSIpCi0gICAgbGV0IHc6bmV0cndfZXhwbG9yZV9saW5lICAgID0gbGluZSgiLiIpCi0gICAga2VlcGogY2FsbCBzOlNldHVwTmV0cndTdGF0dXNMaW5lKCclZiAlaCVtJXIlPSU5KiV7TmV0cndTdGF0dXNMaW5lKCl9JykKLSIgICAgY2FsbCBEZWNobygiLi4uLmV4cGxvcmU6IG10Y2hjbnQ9Ii53Om5ldHJ3X2V4cGxvcmVfbXRjaGNudC4iIGJ1Zm5yPSIudzpuZXRyd19leHBsb3JlX2J1Zm5yLiIgbGluZSMiLnc6bmV0cndfZXhwbG9yZV9saW5lKQotCi0gICBlbHNlCi0iICAgIGNhbGwgRGVjaG8oIi4ueW91ciB2aW0gZG9lcyBub3QgaGF2ZSArcGF0aF9leHRyYSIpCi0gICAgaWYgIWV4aXN0cygiZzpuZXRyd19xdWlldCIpCi0gICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpXQVJOSU5HLCJ5b3VyIHZpbSBuZWVkcyB0aGUgK3BhdGhfZXh0cmEgZmVhdHVyZSBmb3IgRXhwbG9yaW5nIHdpdGggKiohIiw0NCkKLSAgICBlbmRpZgotICAgIHNpbCEgbGV0IEAqID0ga2VlcHJlZ3N0YXIKLSAgICBzaWwhIGxldCBAKyA9IGtlZXByZWdzdGFyCi0gICAgc2lsISBsZXQgQC8gPSBrZWVwcmVnc2xhc2gKLSIgICAgY2FsbCBEcmV0KCJuZXRydyNFeHBsb3JlIDogbWlzc2luZyArcGF0aF9leHRyYSIpCi0gICAgcmV0dXJuCi0gICBlbmRpZgotCi0gIGVsc2UKLSIgICBjYWxsIERlY2hvKCIuLmRlZmF1bHQgY2FzZTogRXhwbG9yZSBuZXdkaXI8Ii5kaXJuYW1lLiI+IikKLSAgIGlmIGV4aXN0cygidzpuZXRyd19saXN0c3R5bGUiKSAmJiB3Om5ldHJ3X2xpc3RzdHlsZSA9PSBzOlRSRUVMSVNUICYmIGRpcm5hbWUgPX4gJy8nCi0gICAgc2lsISB1bmxldCB3Om5ldHJ3X3RyZWVkaWN0Ci0gICAgc2lsISB1bmxldCB3Om5ldHJ3X3RyZWV0b3AKLSAgIGVuZGlmCi0gICBsZXQgbmV3ZGlyPSBkaXJuYW1lCi0gICBpZiAhZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpCi0gICAga2VlcGogY2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKGdldGN3ZCgpKQotICAgZWxzZQotICAgIGtlZXBqIGNhbGwgbmV0cncjTG9jYWxCcm93c2VDaGVjayhzOk5ldHJ3QnJvd3NlQ2hnRGlyKDEsbmV3ZGlyKSkKLSAgIGVuZGlmCi0gIGVuZGlmCi0KLSAgIiB2aXN1YWwgZGlzcGxheSBvZiAqKi8gKiovLyAqLyBFeHBsb3JhdGlvbiBmaWxlcwotIiAgY2FsbCBEZWNobygidzpuZXRyd19leHBsb3JlX2luZHg9Ii4oZXhpc3RzKCJ3Om5ldHJ3X2V4cGxvcmVfaW5keCIpPyB3Om5ldHJ3X2V4cGxvcmVfaW5keCA6ICJkb2Vzbid0IGV4aXN0IikpCi0iICBjYWxsIERlY2hvKCJiOm5ldHJ3X2N1cmRpcjwiLihleGlzdHMoImI6bmV0cndfY3VyZGlyIik/IGI6bmV0cndfY3VyZGlyIDogIm4vYSIpLiI+IikKLSAgaWYgZXhpc3RzKCJ3Om5ldHJ3X2V4cGxvcmVfaW5keCIpICYmIGV4aXN0cygiYjpuZXRyd19jdXJkaXIiKQotIiAgIGNhbGwgRGVjaG8oInM6ZXhwbG9yZV9wcnZkaXI8Ii4oZXhpc3RzKCJzOmV4cGxvcmVfcHJ2ZGlyIik/IHM6ZXhwbG9yZV9wcnZkaXIgOiAiLWRvZXNuJ3QgZXhpc3QtIikpCi0gICBpZiAhZXhpc3RzKCJzOmV4cGxvcmVfcHJ2ZGlyIikgfHwgczpleHBsb3JlX3BydmRpciAhPSBiOm5ldHJ3X2N1cmRpcgotICAgICIgb25seSB1cGRhdGUgbWF0Y2ggbGlzdCBpZiBjdXJyZW50IGRpcmVjdG9yeSBpc24ndCB0aGUgc2FtZSBhcyBiZWZvcmUKLSIgICAgY2FsbCBEZWNobygib25seSB1cGRhdGUgbWF0Y2ggbGlzdCBpZiBjdXJyZW50IGRpcmVjdG9yeSBub3QgdGhlIHNhbWUgYXMgYmVmb3JlIikKLSAgICBsZXQgczpleHBsb3JlX3BydmRpciA9IGI6bmV0cndfY3VyZGlyCi0gICAgbGV0IHM6ZXhwbG9yZV9tYXRjaCAgPSAiIgotICAgIGxldCBkaXJsZW4gICAgICAgICAgID0gczpTdHJsZW4oYjpuZXRyd19jdXJkaXIpCi0gICAgaWYgYjpuZXRyd19jdXJkaXIgIX4gJy8kJwotICAgICBsZXQgZGlybGVuPSBkaXJsZW4gKyAxCi0gICAgZW5kaWYKLSAgICBsZXQgcHJ2Zm5hbWU9ICIiCi0gICAgZm9yIGZuYW1lIGluIHc6bmV0cndfZXhwbG9yZV9saXN0Ci0iICAgICBjYWxsIERlY2hvKCJmbmFtZTwiLmZuYW1lLiI+IikKLSAgICAgaWYgZm5hbWUgPX4gJ14nLmI6bmV0cndfY3VyZGlyCi0gICAgICBpZiBzOmV4cGxvcmVfbWF0Y2ggPT0gIiIKLSAgICAgICBsZXQgczpleHBsb3JlX21hdGNoPSAnXDwnLmVzY2FwZShzdHJwYXJ0KGZuYW1lLGRpcmxlbiksZzpuZXRyd19tYXJrZmlsZWVzYykuJ1w+JwotICAgICAgZWxzZQotICAgICAgIGxldCBzOmV4cGxvcmVfbWF0Y2g9IHM6ZXhwbG9yZV9tYXRjaC4nXHxcPCcuZXNjYXBlKHN0cnBhcnQoZm5hbWUsZGlybGVuKSxnOm5ldHJ3X21hcmtmaWxlZXNjKS4nXD4nCi0gICAgICBlbmRpZgotICAgICBlbHNlaWYgZm5hbWUgIX4gJ14vJyAmJiBmbmFtZSAhPSBwcnZmbmFtZQotICAgICAgaWYgczpleHBsb3JlX21hdGNoID09ICIiCi0gICAgICAgbGV0IHM6ZXhwbG9yZV9tYXRjaD0gJ1w8Jy5lc2NhcGUoZm5hbWUsZzpuZXRyd19tYXJrZmlsZWVzYykuJ1w+JwotICAgICAgZWxzZQotICAgICAgIGxldCBzOmV4cGxvcmVfbWF0Y2g9IHM6ZXhwbG9yZV9tYXRjaC4nXHxcPCcuZXNjYXBlKGZuYW1lLGc6bmV0cndfbWFya2ZpbGVlc2MpLidcPicKLSAgICAgIGVuZGlmCi0gICAgIGVuZGlmCi0gICAgIGxldCBwcnZmbmFtZT0gZm5hbWUKLSAgICBlbmRmb3IKLSIgICAgY2FsbCBEZWNobygiZXhwbG9yZV9tYXRjaDwiLnM6ZXhwbG9yZV9tYXRjaC4iPiIpCi0gICAgZXhlICIybWF0Y2ggbmV0cndNYXJrRmlsZSAvIi5zOmV4cGxvcmVfbWF0Y2guIi8iCi0gICBlbmRpZgotICAgZWNobyAiPHMtdXA+PT1QZXhwbG9yZSAgPHMtZG93bj49PU5leHBsb3JlIgotICBlbHNlCi0gICAybWF0Y2ggbm9uZQotICAgaWYgZXhpc3RzKCJzOmV4cGxvcmVfbWF0Y2giKSAgfCB1bmxldCBzOmV4cGxvcmVfbWF0Y2ggIHwgZW5kaWYKLSAgIGlmIGV4aXN0cygiczpleHBsb3JlX3BydmRpciIpIHwgdW5sZXQgczpleHBsb3JlX3BydmRpciB8IGVuZGlmCi0gICBlY2hvICIgIgotIiAgIGNhbGwgRGVjaG8oImNsZWFyZWQgZXhwbG9yZSBtYXRjaCBsaXN0IikKLSAgZW5kaWYKLQotICBzaWwhIGxldCBAKiA9IGtlZXByZWdzdGFyCi0gIHNpbCEgbGV0IEArID0ga2VlcHJlZ3N0YXIKLSAgc2lsISBsZXQgQC8gPSBrZWVwcmVnc2xhc2gKLSIgIGNhbGwgRHJldCgibmV0cncjRXhwbG9yZSA6IEAvPCIuQC8uIj4iKQotZW5kZnVuCi0KLSIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAiIHM6TmV0cndFeHBsb3JlTGlzdFVuaXE6IHt7ezIKIGZ1biEgczpOZXRyd0V4cGxvcmVMaXN0VW5pcShleHBsaXN0KQogIiAgY2FsbCBEZnVuYygiczpOZXRyd0V4cGxvcmVMaXN0VW5pcShleHBsaXN0PCIuc3RyaW5nKGE6ZXhwbGlzdCkuIj4pIikKQEAgLTQ1MTEsMTMgKzQ4NTAsMTcgQEAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAiIHM6TmV0cndGb3JjZUZpbGU6IChnZiBzdXBwb3J0KSBGb3JjZSB0cmVhdG1lbnQgYXMgYSBmaWxlIHt7ezIKIGZ1biEgczpOZXRyd0ZvcmNlRmlsZShpc2xvY2FsLG5ld2ZpbGUpCi0iICAiICBjYWxsIERmdW5jKCJzOk5ldHJ3Rm9yY2VGaWxlKGlzbG9jYWw9Ii5hOmlzbG9jYWwuIiBuZXdkaXI8Ii5hOm5ld2Rpci4iPikiKQorIiAgY2FsbCBEZnVuYygiczpOZXRyd0ZvcmNlRmlsZShpc2xvY2FsPSIuYTppc2xvY2FsLiIgbmV3ZGlyPCIuYTpuZXdmaWxlLiI+KSIpCiAgIGlmIGE6bmV3ZmlsZSA9fiAnWy9AKj18XFxdJCcKICAgIGxldCBuZXdmaWxlPSBzdWJzdGl0dXRlKGE6bmV3ZmlsZSwnLiQnLCcnLCcnKQogICBlbHNlCiAgICBsZXQgbmV3ZmlsZT0gYTpuZXdmaWxlCiAgIGVuZGlmCi0gIGNhbGwgczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsbmV3ZmlsZSkKKyAgaWYgYTppc2xvY2FsCisgICBjYWxsIHM6TmV0cndCcm93c2VDaGdEaXIoYTppc2xvY2FsLG5ld2ZpbGUpCisgIGVsc2UKKyAgIGNhbGwgczpOZXRyd0Jyb3dzZShhOmlzbG9jYWwsczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsbmV3ZmlsZSkpCisgIGVuZGlmCiAiICBjYWxsIERyZXQoInM6TmV0cndGb3JjZUZpbGUiKQogZW5kZnVuCiAKQEAgLTQ1MzksNyArNDg4Miw3IEBACiAKICAgICIgaGlkZSB0aGUgZmlsZXMgaW4gdGhlIG1hcmtmaWxlIGxpc3QKICAgIGZvciBmbmFtZSBpbiBzOm5ldHJ3bWFya2ZpbGVsaXN0X3tidWZucigiJSIpfQotIiAgICBjYWxsIERlY2hvKCJtYXRjaChnOm5ldHJ3X2xpc3RfaGlkZTwiLmc6bmV0cndfbGlzdF9oaWRlLic+IGZuYW1lPFw8Jy5mbmFtZS4nXD4+KT0nLm1hdGNoKGc6bmV0cndfbGlzdF9oaWRlLCdcPCcuZm5hbWUuJ1w+JykuIiBpc2s9Ii4maXNrKQorIiAgICBjYWxsIERlY2hvKCJtYXRjaChnOm5ldHJ3X2xpc3RfaGlkZTwiLmc6bmV0cndfbGlzdF9oaWRlLic+IGZuYW1lPFw8Jy5mbmFtZS4nXD4+KT0nLm1hdGNoKGc6bmV0cndfbGlzdF9oaWRlLCdcPCcuZm5hbWUuJ1w+JykuIiBsOmlzaz0iLiZsOmlzaykKICAgICBpZiBtYXRjaChnOm5ldHJ3X2xpc3RfaGlkZSwnXDwnLmZuYW1lLidcPicpICE9IC0xCiAgICAgICIgcmVtb3ZlIGZuYW1lIGZyb20gaGlkaW5nIGxpc3QKICAgICAgbGV0IGc6bmV0cndfbGlzdF9oaWRlPSBzdWJzdGl0dXRlKGc6bmV0cndfbGlzdF9oaWRlLCcuLlw8Jy5lc2NhcGUoZm5hbWUsZzpuZXRyd19mbmFtZV9lc2NhcGUpLidcPi4uJywnJywnJykKQEAgLTQ2MjYsNyArNDk2OSw3IEBACiAgICBlbmRpZgogICBlbmRpZgogICAiIGluc3VyZSB0aGF0IHRoZSBob21lIGRpcmVjdG9yeSBleGlzdHMKLSAgaWYgIWlzZGlyZWN0b3J5KGhvbWUpCisgIGlmIGc6bmV0cndfZGlyaGlzdG1heCA+IDAgJiYgIWlzZGlyZWN0b3J5KGhvbWUpCiAgICBpZiBleGlzdHMoImc6bmV0cndfbWtkaXIiKQogICAgIGNhbGwgc3lzdGVtKGc6bmV0cndfbWtkaXIuIiAiLnNoZWxsZXNjYXBlKGhvbWUpKQogICAgZWxzZQpAQCAtNDY0MCw2ICs0OTgzLDkgQEAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAiIHM6TmV0cndMZWZ0bW91c2U6IGhhbmRsZXMgdGhlIDxsZWZ0bW91c2U+IHdoZW4gaW4gYSBuZXRydyBicm93c2luZyB3aW5kb3cge3t7MgogZnVuISBzOk5ldHJ3TGVmdG1vdXNlKGlzbG9jYWwpCisgIGlmIGV4aXN0cygiczpuZXRyd2RyYWciKQorICAgcmV0dXJuCisgIGVuZGlmCiAiICBjYWxsIERmdW5jKCJzOk5ldHJ3TGVmdG1vdXNlKGlzbG9jYWw9Ii5hOmlzbG9jYWwuIikiKQogCiAgIGxldCB5a2VlcD0gQEAKQEAgLTQ2ODAsNiArNTAyNiw0NyBAQAogZW5kZnVuCiAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIHM6TmV0cndSaWdodGRyYWc6IHt7ezIKKyJEZWNob1RhYk9uCitmdW4hIHM6TmV0cndSaWdodGRyYWcoaXNsb2NhbCkKKyIgIGNhbGwgRGZ1bmMoInM6TmV0cndSaWdodGRyYWcoaXNsb2NhbD0iLmE6aXNsb2NhbC4iKSIpCisgIGlmICFleGlzdHMoInM6bmV0cndkcmFnIikKKyAgIGxldCBzOm5ldHJ3ZHJhZyAgICAgPSB3aW5ucigpCisgICBjYWxsIHM6TmV0cndNYXJrRmlsZShhOmlzbG9jYWwsczpOZXRyd0dldFdvcmQoKSkKKyAgIGlmIGE6aXNsb2NhbAorICAgIG5ubyA8c2lsZW50PiA8cy1yaWdodHJlbGVhc2U+IDxsZWZ0bW91c2U+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3UmlnaHRyZWxlYXNlKDEpPGNyPgorICAgZWxzZQorICAgIG5ubyA8c2lsZW50PiA8cy1yaWdodHJlbGVhc2U+IDxsZWZ0bW91c2U+OjxjLXU+Y2FsbCA8U0lEPk5ldHJ3UmlnaHRyZWxlYXNlKDApPGNyPgorICAgZW5kaWYKKyAgZW5kaWYKKyIgIGNhbGwgRHJldCgiczpOZXRyd1JpZ2h0ZHJhZyA6IHM6bmV0cndkcmFnPSIuczpuZXRyd2RyYWcuIiBidWYjIi5idWZucigiJSIpKQorZW5kZnVuCisKKyIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiIHM6TmV0cndSaWdodHJlbGVhc2U6IHt7ezIKK2Z1biEgczpOZXRyd1JpZ2h0cmVsZWFzZShpc2xvY2FsKQorIiAgY2FsbCBEZnVuYygiczpOZXRyd1JpZ2h0cmVsZWFzZShpc2xvY2FsPSIuYTppc2xvY2FsLiIpIHM6bmV0cndkcmFnPSIuczpuZXRyd2RyYWcuIiBidWYjIi5idWZucigiJSIpKQorICBpZiBleGlzdHMoInM6bmV0cndkcmFnIikKKyAgIG51bm1hcCA8cy1yaWdodHJlbGVhc2U+CisgICBsZXQgdGd0ID0gczpOZXRyd0dldFdvcmQoKQorIiAgIGNhbGwgRGVjaG8oInRhcmdldCMxOiAiLnRndCkKKyAgIGlmIHRndCA9fiAnLyQnICYmIHRndCAhfiAnXlwuLyQnCisgICAgbGV0IHRndCA9IGI6bmV0cndfY3VyZGlyLiIvIi50Z3QKKyAgIGVsc2UKKyAgICBsZXQgdGd0PSBiOm5ldHJ3X2N1cmRpcgorICAgZW5kaWYKKyIgICBjYWxsIERlY2hvKCJ0YXJnZXQjMjogIi50Z3QpCisgICBjYWxsIG5ldHJ3I05ldHJ3TWFrZVRndCh0Z3QpCisgICBsZXQgY3Vyd2luPSB3aW5ucigpCisgICBleGUgczpuZXRyd2RyYWcuIndpbmNtZCB3IgorICAgY2FsbCBzOk5ldHJ3TWFya0ZpbGVNb3ZlKGE6aXNsb2NhbCkKKyAgIGV4ZSBjdXJ3aW4uIndpbmNtZCB3IgorICAgdW5sZXQgczpuZXRyd2RyYWcKKyAgZW5kaWYKKyIgIGNhbGwgRHJldCgiczpOZXRyd1JpZ2h0cmVsZWFzZSIpCitlbmRmdW4KKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgczpOZXRyd0xpc3RIaWRlOiB1c2VzIFtyYW5nZV1nfi4uLn5kIHRvIGRlbGV0ZSBmaWxlcyB0aGF0IG1hdGNoIGNvbW1hIHt7ezIKICIgc2VwYXJhdGVkIHBhdHRlcm5zIGdpdmVuIGluIGc6bmV0cndfbGlzdF9oaWRlCiBmdW4hIHM6TmV0cndMaXN0SGlkZSgpCkBAIC00OTAwLDYgKzUyODcsMTMgQEAKICIgICAgYjpuZXRyd19pc2xvY2FsCiBmdW4hIHM6TmV0cndNYXJrRmlsZShpc2xvY2FsLGZuYW1lKQogIiAgY2FsbCBEZnVuYygiczpOZXRyd01hcmtGaWxlKGlzbG9jYWw9Ii5hOmlzbG9jYWwuIiBmbmFtZTwiLmE6Zm5hbWUuIj4pIikKKworICAiIHNhbml0eSBjaGVjaworICBpZiBlbXB0eShhOmZuYW1lKQorIiAgIGNhbGwgRHJldCgiczpOZXRyd01hcmtGaWxlIDogZW10cHkgZm5hbWUiKQorICAgcmV0dXJuCisgIGVuZGlmCisKICAgbGV0IHlrZWVwICAgPSBAQAogICBsZXQgY3VyYnVmbnI9IGJ1Zm5yKCIlIikKICAgbGV0IGN1cmRpciAgPSBiOm5ldHJ3X2N1cmRpcgpAQCAtNTAxMCwzNCArNTQwNCw0NCBAQAogICBsZXQgY3VyZGlyICAgPSBiOm5ldHJ3X2N1cmRpcgogICBsZXQgY3VyYnVmbnIgPSBidWZucigiJSIpCiAKKyAgIiBzYW5pdHkgY2hlY2sKKyAgaWYgIWV4aXN0cygiczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9IikgfHwgZW1wdHkoczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9KQorICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZygyLCJ0aGVyZSBhcmUgbm8gbWFya2VkIGZpbGVzIGluIHRoaXMgd2luZG93ICg6aGVscCBuZXRydy1tZikiLDY2KQorIiAgIGNhbGwgRHJldCgiczpOZXRyd01hcmtGaWxlQ29tcHJlc3MiKQorICAgcmV0dXJuCisgIGVuZGlmCisiICBjYWxsIERlY2hvKCJzYW5pdHkgY2hrIHBhc3NlZDogczpuZXRyd21hcmtmaWxlbGlzdF8iLmN1cmJ1Zm5yLiI8Ii5zdHJpbmcoczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9KSkKKwogICBpZiBleGlzdHMoInM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSIpICYmIGV4aXN0cygiZzpuZXRyd19jb21wcmVzcyIpICYmIGV4aXN0cygiZzpuZXRyd19kZWNvbXByZXNzIikKKworICAgIiBmb3IgZXZlcnkgZmlsZW5hbWUgaW4gdGhlIG1hcmtlZCBsaXN0CiAgICBmb3IgZm5hbWUgaW4gczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9Ci0gICAgIiBmb3IgZXZlcnkgZmlsZW5hbWUgaW4gdGhlIG1hcmtlZCBsaXN0Ci0gICAgZm9yIHNmeCBpbiBzb3J0KGtleXMoZzpuZXRyd19kZWNvbXByZXNzKSkKLSAgICAgaWYgZm5hbWUgPX4gJ1wnLnNmeC4nJCcKLSAgICAgICIgZm5hbWUgaGFzIGEgc3VmZml4IGluZGljYXRpbmcgdGhhdCBpdHMgY29tcHJlc3NlZDsgYXBwbHkgYXNzb2NpYXRlZCBkZWNvbXByZXNzaW9uIHJvdXRpbmUKLSAgICAgIGxldCBleGU9IG5ldHJ3I1dpblBhdGgoZzpuZXRyd19kZWNvbXByZXNzW3NmeF0pCi0iICAgICAgY2FsbCBEZWNobygiZm5hbWU8Ii5mbmFtZS4iPiBpcyBjb21wcmVzc2VkIHNvIGRlY29tcHJlc3Mgd2l0aCA8Ii5leGUuIj4iKQotICAgICAgaWYgYTppc2xvY2FsCi0gICAgICAgaWYgZzpuZXRyd19rZWVwZGlyCi0gICAgICAgIGxldCBmbmFtZT0gc2hlbGxlc2NhcGUoczpDb21wb3NlUGF0aChjdXJkaXIsZm5hbWUpKQotICAgICAgIGVuZGlmCi0gICAgICBlbHNlCi0gICAgICAgbGV0IGZuYW1lPSBzaGVsbGVzY2FwZShiOm5ldHJ3X2N1cmRpci5mbmFtZSwxKQorICAgIGxldCBzZng9IHN1YnN0aXR1dGUoZm5hbWUsJ14uXHstfVwoXC5cYVwrXCkkJywnXDEnLCcnKQorIiAgICBjYWxsIERlY2hvKCJleHRyYWN0ZWQgc2Z4PCIuc2Z4LiI+IikKKyAgICBpZiBleGlzdHMoImc6bmV0cndfZGVjb21wcmVzc1snIi5zZnguIiddIikKKyAgICAgIiBmbmFtZSBoYXMgYSBzdWZmaXggaW5kaWNhdGluZyB0aGF0IGl0cyBjb21wcmVzc2VkOyBhcHBseSBhc3NvY2lhdGVkIGRlY29tcHJlc3Npb24gcm91dGluZQorICAgICBsZXQgZXhlPSBnOm5ldHJ3X2RlY29tcHJlc3Nbc2Z4XQorIiAgICAgY2FsbCBEZWNobygiZm5hbWU8Ii5mbmFtZS4iPiBpcyBjb21wcmVzc2VkIHNvIGRlY29tcHJlc3Mgd2l0aCA8Ii5leGUuIj4iKQorICAgICBsZXQgZXhlPSBuZXRydyNXaW5QYXRoKGV4ZSkKKyAgICAgaWYgYTppc2xvY2FsCisgICAgICBpZiBnOm5ldHJ3X2tlZXBkaXIKKyAgICAgICBsZXQgZm5hbWU9IHNoZWxsZXNjYXBlKHM6Q29tcG9zZVBhdGgoY3VyZGlyLGZuYW1lKSkKICAgICAgIGVuZGlmCi0gICAgICBpZiBleGVjdXRhYmxlKGV4ZSkKLSAgICAgICBpZiBhOmlzbG9jYWwKLQljYWxsIHN5c3RlbShleGUuIiAiLmZuYW1lKQotICAgICAgIGVsc2UKLSAgICAgICAga2VlcGogY2FsbCBzOlJlbW90ZVN5c3RlbShleGUuIiAiLmZuYW1lKQotICAgICAgIGVuZGlmCi0gICAgICBlbHNlCi0gICAgICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsInVuYWJsZSB0byBhcHBseTwiLmV4ZS4iPiB0byBmaWxlPCIuZm5hbWUuIj4iLDUwKQotICAgICAgZW5kaWYKLSAgICAgIGJyZWFrCisgICAgIGVsc2UKKyAgICAgIGxldCBmbmFtZT0gc2hlbGxlc2NhcGUoYjpuZXRyd19jdXJkaXIuZm5hbWUsMSkKICAgICAgZW5kaWYKLSAgICAgdW5sZXQgc2Z4Ci0gICAgZW5kZm9yCisgICAgIGlmIGV4ZWN1dGFibGUoZXhlKQorICAgICAgaWYgYTppc2xvY2FsCisgICAgICAgY2FsbCBzeXN0ZW0oZXhlLiIgIi5mbmFtZSkKKyAgICAgIGVsc2UKKyAgICAgICBrZWVwaiBjYWxsIHM6UmVtb3RlU3lzdGVtKGV4ZS4iICIuZm5hbWUpCisgICAgICBlbmRpZgorICAgICBlbHNlCisgICAgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywidW5hYmxlIHRvIGFwcGx5PCIuZXhlLiI+IHRvIGZpbGU8Ii5mbmFtZS4iPiIsNTApCisgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgICB1bmxldCBzZngKKwogICAgIGlmIGV4aXN0cygiZXhlIikKICAgICAgdW5sZXQgZXhlCiAgICAgZWxzZWlmIGE6aXNsb2NhbApAQCAtNTA0Nyw3ICs1NDUxLDggQEAKICAgICAgIiBmbmFtZSBub3QgYSBjb21wcmVzc2VkIGZpbGUsIHNvIGNvbXByZXNzIGl0CiAgICAgIGtlZXBqIGNhbGwgczpSZW1vdGVTeXN0ZW0obmV0cncjV2luUGF0aChnOm5ldHJ3X2NvbXByZXNzKS4iICIuc2hlbGxlc2NhcGUoZm5hbWUpKQogICAgIGVuZGlmCi0gICBlbmRmb3IKKyAgIGVuZGZvcgkiIGZvciBldmVyeSBmaWxlIGluIHRoZSBtYXJrZWQgbGlzdAorCiAgICBjYWxsIHM6TmV0cndVbm1hcmtMaXN0KGN1cmJ1Zm5yLGN1cmRpcikKICAgIGtlZXBqIGNhbGwgczpOZXRyd1JlZnJlc2goYTppc2xvY2FsLHM6TmV0cndCcm93c2VDaGdEaXIoYTppc2xvY2FsLCcuLycpKQogICAga2VlcGogY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQpAQCAtNTA2NCwzNiArNTQ2OSw1MiBAQAogIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA9ZmFpbHVyZQogZnVuISBzOk5ldHJ3TWFya0ZpbGVDb3B5KGlzbG9jYWwpCiAiICBjYWxsIERmdW5jKCJzOk5ldHJ3TWFya0ZpbGVDb3B5KGlzbG9jYWw9Ii5hOmlzbG9jYWwuIikgdGFyZ2V0PCIuKGV4aXN0cygiczpuZXRyd21mdGd0Iik/IHM6bmV0cndtZnRndCA6ICctLS0nKS4iPiIpCisgIGxldCBjdXJkaXIgICA9IGI6bmV0cndfY3VyZGlyCisgIGxldCBjdXJidWZuciA9IGJ1Zm5yKCIlIikKIAotICAiIHNhbml0eSBjaGVja3MKLSAgaWYgIWV4aXN0cygiczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoJyUnKX0iKSB8fCBlbXB0eShzOm5ldHJ3bWFya2ZpbGVsaXN0X3tidWZucignJScpfSkKLSAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwidGhlcmUgYXJlIG5vIG1hcmtlZCBmaWxlcyBpbiB0aGlzIHdpbmRvdyAoOmhlbHAgbmV0cnctbWYpIiw2NikKLSIgICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZUNvcHkgMCIpCi0gICByZXR1cm4gMAorICAiIHNhbml0eSBjaGVjaworICBpZiAhZXhpc3RzKCJzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0iKSB8fCBlbXB0eShzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0pCisgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKDIsInRoZXJlIGFyZSBubyBtYXJrZWQgZmlsZXMgaW4gdGhpcyB3aW5kb3cgKDpoZWxwIG5ldHJ3LW1mKSIsNjYpCisiICAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGVDb3B5IikKKyAgIHJldHVybgogICBlbmRpZgotIiAgY2FsbCBEZWNobygic2FuaXR5IGNoayBwYXNzZWQ6IHM6bmV0cndtYXJrZmlsZWxpc3RfIi5idWZucignJScpLiI8Ii5zdHJpbmcoczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoJyUnKX0pKQorIiAgY2FsbCBEZWNobygic2FuaXR5IGNoayBwYXNzZWQ6IHM6bmV0cndtYXJrZmlsZWxpc3RfIi5jdXJidWZuci4iPCIuc3RyaW5nKHM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSkpCisKICAgaWYgIWV4aXN0cygiczpuZXRyd21mdGd0IikKICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwieW91ciBtYXJrZWQgZmlsZSB0YXJnZXQgaXMgZW1wdHkhICg6aGVscCBuZXRydy1tdCkiLDY3KQogIiAgIGNhbGwgRHJldCgiczpOZXRyd01hcmtGaWxlQ29weSAwIikKICAgIHJldHVybiAwCiAgIGVuZGlmCiAiICBjYWxsIERlY2hvKCJzYW5pdHkgY2hrIHBhc3NlZDogczpuZXRyd21mdGd0PCIuczpuZXRyd21mdGd0LiI+IikKLSAgbGV0IGN1cmRpciAgID0gYjpuZXRyd19jdXJkaXIKLSAgbGV0IGN1cmJ1Zm5yID0gYnVmbnIoIiUiKQogCiAgIGlmICAgICAgYTppc2xvY2FsICYmICBzOm5ldHJ3bWZ0Z3RfaXNsb2NhbAogICAgIiBDb3B5IG1hcmtlZCBmaWxlcywgbG9jYWwgZGlyZWN0b3J5IHRvIGxvY2FsIGRpcmVjdG9yeQogIiAgIGNhbGwgRGVjaG8oImNvcHkgZnJvbSBsb2NhbCB0byBsb2NhbCIpCi0gICBpZiAhZXhlY3V0YWJsZShnOm5ldHJ3X2xvY2FsY29weWNtZCkgJiYgZzpuZXRyd19sb2NhbGNvcHljbWQgIX4gJ15jbWQgJworICAgaWYgIWV4ZWN1dGFibGUoZzpuZXRyd19sb2NhbGNvcHljbWQpICYmIGc6bmV0cndfbG9jYWxjb3B5Y21kICF+ICdcPGNtZFxzJwogICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwiZzpuZXRyd19sb2NhbGNvcHljbWQ8Ii5nOm5ldHJ3X2xvY2FsY29weWNtZC4iPiBub3QgZXhlY3V0YWJsZSBvbiB5b3VyIHN5c3RlbSwgYWJvcnRpbmciLDkxKQogIiAgICBjYWxsIERmdW5jKCJzOk5ldHJ3TWFya0ZpbGVNb3ZlIDogZzpuZXRyd19sb2NhbGNvcHljbWQ8Ii5nOm5ldHJ3X2xvY2FsY29weWNtZC4iPiBuL2EhIikKICAgICByZXR1cm4KICAgIGVuZGlmCiAgICBsZXQgYXJncz0gam9pbihtYXAoZGVlcGNvcHkoczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoJyUnKX0pLCJzaGVsbGVzY2FwZShiOm5ldHJ3X2N1cmRpci5cIi9cIi52OnZhbCkiKSkKLSIgICBjYWxsIERlY2hvKCJzeXN0ZW0oIi5nOm5ldHJ3X2xvY2FsY29weWNtZC4iICIuYXJncy4iICIuc2hlbGxlc2NhcGUoczpuZXRyd21mdGd0KS4iKSIpCi0gICBjYWxsIHN5c3RlbShuZXRydyNXaW5QYXRoKGc6bmV0cndfbG9jYWxjb3B5Y21kKS4iICIuYXJncy4iICIuc2hlbGxlc2NhcGUoczpuZXRyd21mdGd0KSkKKyAgIGxldCB0Z3QgPSBzaGVsbGVzY2FwZShzOm5ldHJ3bWZ0Z3QpCisgICBpZiAhZzpuZXRyd19jeWd3aW4gJiYgKGhhcygid2luMzIiKSB8fCBoYXMoIndpbjk1IikgfHwgaGFzKCJ3aW42NCIpIHx8IGhhcygid2luMTYiKSkKKyAgICBsZXQgYXJncz0gc3Vic3RpdHV0ZShhcmdzLCcvJywnXFwnLCdnJykKKyAgICBsZXQgdGd0ID0gc3Vic3RpdHV0ZSh0Z3QsICcvJywnXFwnLCdnJykKKyAgIGVuZGlmCisgICBpZiBnOm5ldHJ3X2xvY2FsY29weWNtZCA9fiAnXHMnCisgICAgbGV0IGNvcHljbWQgICAgID0gc3Vic3RpdHV0ZShnOm5ldHJ3X2xvY2FsY29weWNtZCwnXHMuKiQnLCcnLCcnKQorICAgIGxldCBjb3B5Y21kYXJncyA9IHN1YnN0aXR1dGUoZzpuZXRyd19sb2NhbGNvcHljbWQsJ14uXHstfVwoXHMuKlwpJCcsJ1wxJywnJykKKyAgICBsZXQgY29weWNtZCAgICAgPSBuZXRydyNXaW5QYXRoKGNvcHljbWQpLmNvcHljbWRhcmdzCisgICBlbHNlCisgICAgbGV0IGNvcHljbWQgPSBuZXRydyNXaW5QYXRoKGc6bmV0cndfbG9jYWxjb3B5Y21kKQorICAgZW5kaWYKKyIgICBjYWxsIERlY2hvKCJhcmdzICAgPCIuYXJncy4iPiIpCisiICAgY2FsbCBEZWNobygidGd0ICAgIDwiLnRndC4iPiIpCisiICAgY2FsbCBEZWNobygiY29weWNtZDwiLmNvcHljbWQuIj4iKQorIiAgIGNhbGwgRGVjaG8oInN5c3RlbSgiLmNvcHljbWQuIiAiLmFyZ3MuIiAiLnRndC4iKSIpCisgICBjYWxsIHN5c3RlbShjb3B5Y21kLiIgIi5hcmdzLiIgIi50Z3QpCiAgICBpZiB2OnNoZWxsX2Vycm9yICE9IDAKLSAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywiY29uc2lkZXIgc2V0dGluZyBnOm5ldHJ3X2xvY2FsY29weWNtZDwiLmc6bmV0cndfbG9jYWxjb3B5Y21kLiI+IHRvIHNvbWV0aGluZyB0aGF0IHdvcmtzIiw4MCkKKyAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsInRyaWVkIHVzaW5nIGc6bmV0cndfbG9jYWxjb3B5Y21kPCIuZzpuZXRyd19sb2NhbGNvcHljbWQuIj47IGl0IGRvZXNuJ3Qgd29yayEiLDgwKQogIiAgICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZUNvcHkgMCA6IGZhaWxlZDogc3lzdGVtKCIuZzpuZXRyd19sb2NhbGNvcHljbWQuIiAiLmFyZ3MuIiAiLnNoZWxsZXNjYXBlKHM6bmV0cndtZnRndCkpCiAgICAgcmV0dXJuIDAKICAgIGVuZGlmCkBAIC01MTc4LDcgKzU1OTksMTUgQEAKICIgIGNhbGwgRGZ1bmMoInM6TmV0cndNYXJrRmlsZURpZmYoaXNsb2NhbD0iLmE6aXNsb2NhbC4iKSBiOm5ldHJ3X2N1cmRpcjwiLmI6bmV0cndfY3VyZGlyLiI+IikKICAgbGV0IGN1cmJ1Zm5yPSBidWZucigiJSIpCiAKLSAgaWYgZXhpc3RzKCJzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0iKQorICAiIHNhbml0eSBjaGVjaworICBpZiAhZXhpc3RzKCJzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0iKSB8fCBlbXB0eShzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0pCisgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKDIsInRoZXJlIGFyZSBubyBtYXJrZWQgZmlsZXMgaW4gdGhpcyB3aW5kb3cgKDpoZWxwIG5ldHJ3LW1mKSIsNjYpCisiICAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGVEaWZmIikKKyAgIHJldHVybgorICBlbmRpZgorIiAgY2FsbCBEZWNobygic2FuaXR5IGNoayBwYXNzZWQ6IHM6bmV0cndtYXJrZmlsZWxpc3RfIi5jdXJidWZuci4iPCIuc3RyaW5nKHM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSkpCisKKyAgaWYgZXhpc3RzKCJzOm5ldHJ3bWFya2ZpbGVsaXN0X3suImN1cmJ1Zm5yfSIpCiAgICBsZXQgY250ICAgID0gMAogICAgbGV0IGN1cmRpciA9IGI6bmV0cndfY3VyZGlyCiAgICBmb3IgZm5hbWUgaW4gczpuZXRyd21hcmtmaWxlbGlzdApAQCAtNTIxMSw2ICs1NjQwLDE1IEBACiAKICAgbGV0IGN1cmRpciAgID0gYjpuZXRyd19jdXJkaXIKICAgbGV0IGN1cmJ1Zm5yID0gYnVmbnIoIiUiKQorCisgICIgc2FuaXR5IGNoZWNrCisgIGlmICFleGlzdHMoInM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSIpIHx8IGVtcHR5KHM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSkKKyAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coMiwidGhlcmUgYXJlIG5vIG1hcmtlZCBmaWxlcyBpbiB0aGlzIHdpbmRvdyAoOmhlbHAgbmV0cnctbWYpIiw2NikKKyIgICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZUVkaXQiKQorICAgcmV0dXJuCisgIGVuZGlmCisiICBjYWxsIERlY2hvKCJzYW5pdHkgY2hrIHBhc3NlZDogczpuZXRyd21hcmtmaWxlbGlzdF8iLmN1cmJ1Zm5yLiI8Ii5zdHJpbmcoczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9KSkKKwogICBpZiBleGlzdHMoInM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSIpCiAgICBjYWxsIHM6U2V0UmV4RGlyKGE6aXNsb2NhbCxjdXJkaXIpCiAgICBsZXQgZmxpc3Q9IGpvaW4obWFwKGRlZXBjb3B5KHM6bmV0cndtYXJrZmlsZWxpc3QpLCAiZm5hbWVlc2NhcGUodjp2YWwpIikpCkBAIC01MjIwLDExICs1NjU4LDQzIEBACiAiICAgY2FsbCBEZWNobygiZXhlIHNpbCBhcmdzICIuZmxpc3QpCiAgICBleGUgInNpbCBhcmdzICIuZmxpc3QKICAgZW5kaWYKKyAgZWNobyAiKHVzZSA6Ym4sIDpicCB0byBuYXZpZ2F0ZSBmaWxlczsgOlJleCB0byByZXR1cm4pIgogICAKICIgIGNhbGwgRHJldCgiczpOZXRyd01hcmtGaWxlRWRpdCIpCiBlbmRmdW4KIAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgczpOZXRyd01hcmtGaWxlUUZFTDogY29udmVydCBhIHF1aWNrZml4LWVycm9yIGxpc3QgaW50byBhIG1hcmtlZCBmaWxlIGxpc3Qge3t7MgorZnVuISBzOk5ldHJ3TWFya0ZpbGVRRkVMKGlzbG9jYWwscWZlbCkKKyIgIGNhbGwgRGZ1bmMoInM6TmV0cndNYXJrRmlsZVFGRUwoaXNsb2NhbD0iLmE6aXNsb2NhbC4iLHFmZWwpIikKKyAgY2FsbCBzOk5ldHJ3VW5tYXJrQWxsKCkKKyAgbGV0IGN1cmJ1Zm5yPSBidWZucigiJSIpCisKKyAgaWYgIWVtcHR5KGE6cWZlbCkKKyAgIGZvciBlbnRyeSBpbiBhOnFmZWwKKyAgICBsZXQgYnVmbm1icj0gZW50cnlbImJ1Zm5yIl0KKyIgICAgY2FsbCBEZWNobygiYnVmbmFtZSgiLmJ1Zm5tYnIuIik8Ii5idWZuYW1lKGJ1Zm5tYnIpLiI+IGxpbmUjIi5lbnRyeVsibG51bSJdLiIgdGV4dD0iLmVudHJ5WyJ0ZXh0Il0pCisgICAgaWYgIWV4aXN0cygiczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9IikKKyIgICAgIGNhbGwgRGVjaG8oImNhc2U6IG5vIG1hcmtlZCBmaWxlIGxpc3QiKQorICAgICBjYWxsIHM6TmV0cndNYXJrRmlsZShhOmlzbG9jYWwsYnVmbmFtZShidWZubWJyKSkKKyAgICBlbHNlaWYgaW5kZXgoczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9LGJ1Zm5hbWUoYnVmbm1icikpID09IC0xCisgICAgICIgczpOZXRyd01hcmtGaWxlIHdpbGwgcmVtb3ZlIGR1cGxpY2F0ZSBlbnRyaWVzIGZyb20gdGhlIG1hcmtlZCBmaWxlIGxpc3QuCisgICAgICIgU28sIHRoaXMgdGVzdCBsZXRzIHR3byBvciBtb3JlIGhpdHMgb24gdGhlIHNhbWUgcGF0dGVybiB0byBiZSBpZ25vcmVkLgorIiAgICAgY2FsbCBEZWNobygiY2FzZTogIi5idWZuYW1lKGJ1Zm5tYnIpLiIgbm90IGN1cnJlbnRseSBpbiBtYXJrZWQgZmlsZSBsaXN0IikKKyAgICAgY2FsbCBzOk5ldHJ3TWFya0ZpbGUoYTppc2xvY2FsLGJ1Zm5hbWUoYnVmbm1icikpCisgICAgZWxzZQorIiAgICAgY2FsbCBEZWNobygiY2FzZTogIi5idWZuYW1lKGJ1Zm5tYnIpLiIgYWxyZWFkeSBpbiBtYXJrZWQgZmlsZSBsaXN0IikKKyAgICBlbmRpZgorICAgZW5kZm9yCisgICBlY2hvICIodXNlIG1lIHRvIGVkaXQgbWFya2VkIGZpbGVzKSIKKyAgZWxzZQorICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsImNhbid0IGNvbnZlcnQgcXVpY2tmaXggZXJyb3IgbGlzdDsgaXRzIGVtcHR5ISIsOTIpCisgIGVuZGlmCisKKyIgIGNhbGwgRHJldCgiczpOZXRyd01hcmtGaWxlUUZFTCIpCitlbmRmdW4KKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgczpOZXRyd01hcmtGaWxlRXhlOiAoaW52b2tlZCBieSBteCkgZXhlY3V0ZSBhcmJpdHJhcnkgc3lzdGVtIGNvbW1hbmQgb24gbWFya2VkIGZpbGVzLCBvbmUgYXQgYSB0aW1lIHt7ezIKICIgICAgICAgICAgICAgICAgICAgICBVc2VzIHRoZSBsb2NhbCBtYXJrZWQtZmlsZSBsaXN0LgogZnVuISBzOk5ldHJ3TWFya0ZpbGVFeGUoaXNsb2NhbCkKQEAgLTUyMzMsNiArNTcwMywxNCBAQAogICBsZXQgY3VyZGlyICAgPSBiOm5ldHJ3X2N1cmRpcgogICBsZXQgY3VyYnVmbnIgPSBidWZucigiJSIpCiAKKyAgIiBzYW5pdHkgY2hlY2sKKyAgaWYgIWV4aXN0cygiczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9IikgfHwgZW1wdHkoczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9KQorICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZygyLCJ0aGVyZSBhcmUgbm8gbWFya2VkIGZpbGVzIGluIHRoaXMgd2luZG93ICg6aGVscCBuZXRydy1tZikiLDY2KQorIiAgIGNhbGwgRHJldCgiczpOZXRyd01hcmtGaWxlRXhlIikKKyAgIHJldHVybgorICBlbmRpZgorIiAgY2FsbCBEZWNobygic2FuaXR5IGNoayBwYXNzZWQ6IHM6bmV0cndtYXJrZmlsZWxpc3RfIi5jdXJidWZuci4iPCIuc3RyaW5nKHM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSkpCisKICAgaWYgZXhpc3RzKCJzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0iKQogICAgIiBnZXQgdGhlIGNvbW1hbmQKICAgIGNhbGwgaW5wdXRzYXZlKCkKQEAgLTUzNTMsNiArNTgzMSwxNCBAQAogICBsZXQgY3VyZGlyICAgPSBiOm5ldHJ3X2N1cmRpcgogICBsZXQgY3VyYnVmbnIgPSBidWZucigiJSIpCiAKKyAgIiBzYW5pdHkgY2hlY2sKKyAgaWYgIWV4aXN0cygiczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9IikgfHwgZW1wdHkoczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9KQorICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZygyLCJ0aGVyZSBhcmUgbm8gbWFya2VkIGZpbGVzIGluIHRoaXMgd2luZG93ICg6aGVscCBuZXRydy1tZikiLDY2KQorIiAgIGNhbGwgRHJldCgiczpOZXRyd01hcmtGaWxlVmltQ21kIikKKyAgIHJldHVybgorICBlbmRpZgorIiAgY2FsbCBEZWNobygic2FuaXR5IGNoayBwYXNzZWQ6IHM6bmV0cndtYXJrZmlsZWxpc3RfIi5jdXJidWZuci4iPCIuc3RyaW5nKHM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSkpCisKICAgaWYgZXhpc3RzKCJzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0iKQogICAgIiBnZXQgdGhlIGNvbW1hbmQKICAgIGNhbGwgaW5wdXRzYXZlKCkKQEAgLTU0NjMsMzAgKzU5NDksNDcgQEAKICIgIGNhbGwgRGVjaG8oInM6bmV0cndtYXJrZmlsZWxpc3QiLnN0cmluZyhzOm5ldHJ3bWFya2ZpbGVsaXN0KS4iPiIpCiAgICBsZXQgbmV0cndtYXJrZmlsZWxpc3Q9IGpvaW4obWFwKGRlZXBjb3B5KHM6bmV0cndtYXJrZmlsZWxpc3QpLCAiZm5hbWVlc2NhcGUodjp2YWwpIikpCiAgICBjYWxsIHM6TmV0cndVbm1hcmtBbGwoKQorICBlbHNlCisiICAgY2FsbCBEZWNobygnbm8gbWFya2VkIGZpbGVzLCB1c2luZyAiKiInKQorICAgbGV0IG5ldHJ3bWFya2ZpbGVsaXN0PSAiKiIKKyAgZW5kaWYKIAotICAgIiBhc2sgdXNlciBmb3IgcGF0dGVybgotICAgY2FsbCBpbnB1dHNhdmUoKQotICAgbGV0IHBhdD0gaW5wdXQoIkVudGVyIHBhdHRlcm46ICIsIiIpCi0gICBjYWxsIGlucHV0cmVzdG9yZSgpCi0gICBpZiBwYXQgIX4gJ15ccycKLSAgICBpZiBwYXQgIX4gJ14vJwotICAgICBsZXQgcGF0PSAnLycucGF0LicvJwotICAgIGVuZGlmCi0gICAgbGV0IHBhdD0gIiAiLnBhdAorICAiIGFzayB1c2VyIGZvciBwYXR0ZXJuCisgIGNhbGwgaW5wdXRzYXZlKCkKKyAgbGV0IHBhdD0gaW5wdXQoIkVudGVyIHBhdHRlcm46ICIsIiIpCisgIGNhbGwgaW5wdXRyZXN0b3JlKCkKKyAgbGV0IHBhdGJhbmcgPSAiIgorICBpZiBwYXQgPX4gJ14hJworICAgbGV0IHBhdGJhbmcgPSAiISIKKyAgIGxldCBwYXQ9IHN0cnBhcnQocGF0LDIpCisgIGVuZGlmCisgIGlmIHBhdCA9fiAnXlxpJworICAgbGV0IHBhdCAgICA9IGVzY2FwZShwYXQsJy8nKQorICAgbGV0IHBhdCAgICA9ICcvJy5wYXQuJy8nCisgIGVsc2UKKyAgIGxldCBub25pc2kgPSBwYXRbMF0KKyAgZW5kaWYKKworICAiIHVzZSB2aW1ncmVwIGZvciBib3RoIGxvY2FsIGFuZCByZW1vdGUKKyIgIGNhbGwgRGVjaG8oImV4ZSB2aW1ncmVwIi5wYXRiYW5nLiIgIi5wYXQuIiAiLm5ldHJ3bWFya2ZpbGVsaXN0KQorICB0cnkKKyAgIGV4ZSAia2VlcGogbm9hdXRvY21kIHZpbWdyZXAiLnBhdGJhbmcuIiAiLnBhdC4iICIubmV0cndtYXJrZmlsZWxpc3QKKyAgY2F0Y2ggL15WaW1cJSgoXGFcKylcKVw9OkU0ODAvCisgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywibm8gbWF0Y2ggd2l0aCBwYXR0ZXJuPCIucGF0LiI+Iiw3NikKKyIgICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZUdyZXAgOiB1bmFibGUgdG8gZmluZCBwYXR0ZXJuPCIucGF0LiI+IikKKyAgIHJldHVybgorICBlbmR0cnkKKyAgZWNobyAiKHVzZSA6Y24sIDpjcCB0byBuYXZpZ2F0ZSwgOlJleCB0byByZXR1cm4pIgorCisgIDJtYXRjaCBub25lCisgIGtlZXBqIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvcykKKworICBpZiBleGlzdHMoIm5vbmlzaSIpCisgICAiIG9yaWdpbmFsLCB1c2VyLXN1cHBsaWVkIHBhdHRlcm4gZGlkIG5vdCBiZWdpbiB3aXRoIGEgY2hhcmFjdGVyIGZyb20gaXNpZGVudAorIiAgIGNhbGwgRGVjaG8oImxvb2tpbmcgZm9yIHRyYWlsaW5nIG5vbmlzaTwiLm5vbmlzaS4iPiBmb2xsb3dlZCBieSBhIGosIGdqLCBvciBqZyIpCisgICBpZiBwYXQgPX4gbm9uaXNpLidqJFx8Jy5ub25pc2kuJ2dqJFx8Jy5ub25pc2kuJ2pnJCcKKyAgICBjYWxsIHM6TmV0cndNYXJrRmlsZVFGRUwoYTppc2xvY2FsLGdldHFmbGlzdCgpKQogICAgZW5kaWYKLQotICAgIiB1c2UgdmltZ3JlcCBmb3IgYm90aCBsb2NhbCBhbmQgcmVtb3RlCi0iICAgY2FsbCBEZWNobygiZXhlIHZpbWdyZXAiLnBhdC4iICIubmV0cndtYXJrZmlsZWxpc3QpCi0gICB0cnkKLSAgICBleGUgImtlZXBqIG5vYXV0b2NtZCB2aW1ncmVwIi5wYXQuIiAiLm5ldHJ3bWFya2ZpbGVsaXN0Ci0gICAgY2F0Y2ggL15WaW1cJSgoXGFcKylcKVw9OkU0ODAvCi0gICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsIm5vIG1hdGNoIHdpdGggcGF0dGVybjwiLnBhdHRlcm4uIj4iLDc2KQotIiAgICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZUdyZXAgOiB1bmFibGUgdG8gZmluZCBwYXR0ZXJuPCIucGF0dGVybi4iPiIpCi0gICAgcmV0dXJuCi0gICBlbmR0cnkKLQotICAgMm1hdGNoIG5vbmUKLSAgIGtlZXBqIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvcykKICAgZW5kaWYKIAogIiAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGVHcmVwIikKQEAgLTU1MDMsMTIgKzYwMDYsMTMgQEAKICAgbGV0IGN1cmJ1Zm5yID0gYnVmbnIoIiUiKQogCiAgICIgc2FuaXR5IGNoZWNrCi0gIGlmICFleGlzdHMoInM6bmV0cndtYXJrZmlsZWxpc3Rfe2J1Zm5yKCclJyl9IikgfHwgZW1wdHkoczpuZXRyd21hcmtmaWxlbGlzdF97YnVmbnIoJyUnKX0pCisgIGlmICFleGlzdHMoInM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSIpIHx8IGVtcHR5KHM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSkKICAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coMiwidGhlcmUgYXJlIG5vIG1hcmtlZCBmaWxlcyBpbiB0aGlzIHdpbmRvdyAoOmhlbHAgbmV0cnctbWYpIiw2NikKICIgICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZU1vdmUiKQogICAgcmV0dXJuCiAgIGVuZGlmCi0iICBjYWxsIERlY2hvKCJzYW5pdHkgY2hrIHBhc3NlZDogczpuZXRyd21hcmtmaWxlbGlzdF8iLmJ1Zm5yKCclJykuIjwiLnN0cmluZyhzOm5ldHJ3bWFya2ZpbGVsaXN0X3tidWZucignJScpfSkpCisiICBjYWxsIERlY2hvKCJzYW5pdHkgY2hrIHBhc3NlZDogczpuZXRyd21hcmtmaWxlbGlzdF8iLmN1cmJ1Zm5yLiI8Ii5zdHJpbmcoczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9KSkKKwogICBpZiAhZXhpc3RzKCJzOm5ldHJ3bWZ0Z3QiKQogICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZygyLCJ5b3VyIG1hcmtlZCBmaWxlIHRhcmdldCBpcyBlbXB0eSEgKDpoZWxwIG5ldHJ3LW10KSIsNjcpCiAiICAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGVDb3B5IDAiKQpAQCAtNTUyMCwxNiArNjAyNCwzNyBAQAogICAgIiBtb3ZlOiBsb2NhbCAtPiBsb2NhbAogIiAgIGNhbGwgRGVjaG8oIm1vdmUgZnJvbSBsb2NhbCB0byBsb2NhbCIpCiAiICAgY2FsbCBEZWNobygiKHM6TmV0cndNYXJrRmlsZU1vdmUpIGxvY2FsIHRvIGxvY2FsIG1vdmUiKQotICAgaWYgIWV4ZWN1dGFibGUoZzpuZXRyd19sb2NhbG1vdmVjbWQpICYmIGc6bmV0cndfbG9jYWxtb3ZlY21kICF+ICdeY21kICcKKyAgIGlmICFleGVjdXRhYmxlKGc6bmV0cndfbG9jYWxtb3ZlY21kKSAmJiBnOm5ldHJ3X2xvY2FsbW92ZWNtZCAhfiAnXDxjbWRccycKICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsImc6bmV0cndfbG9jYWxtb3ZlY21kPCIuZzpuZXRyd19sb2NhbG1vdmVjbWQuIj4gbm90IGV4ZWN1dGFibGUgb24geW91ciBzeXN0ZW0sIGFib3J0aW5nIiw5MCkKICIgICAgY2FsbCBEZnVuYygiczpOZXRyd01hcmtGaWxlTW92ZSA6IGc6bmV0cndfbG9jYWxtb3ZlY21kPCIuZzpuZXRyd19sb2NhbG1vdmVjbWQuIj4gbi9hISIpCiAgICAgcmV0dXJuCiAgICBlbmRpZgorICAgbGV0IHRndCAgICAgICAgID0gc2hlbGxlc2NhcGUoczpuZXRyd21mdGd0KQorIiAgIGNhbGwgRGVjaG8oInRndDwiLnRndC4iPiIpCisgICBpZiAhZzpuZXRyd19jeWd3aW4gJiYgKGhhcygid2luMzIiKSB8fCBoYXMoIndpbjk1IikgfHwgaGFzKCJ3aW42NCIpIHx8IGhhcygid2luMTYiKSkKKyAgICBsZXQgdGd0ICAgICAgICAgPSBzdWJzdGl0dXRlKHRndCwgJy8nLCdcXCcsJ2cnKQorIiAgICBjYWxsIERlY2hvKCJ3aW5kb3dzIGV4Y2VwdGlvbjogdGd0PCIudGd0LiI+IikKKyAgICBpZiBnOm5ldHJ3X2xvY2FsbW92ZWNtZCA9fiAnXHMnCisgICAgIGxldCBtb3ZlY21kICAgICA9IHN1YnN0aXR1dGUoZzpuZXRyd19sb2NhbG1vdmVjbWQsJ1xzLiokJywnJywnJykKKyAgICAgbGV0IG1vdmVjbWRhcmdzID0gc3Vic3RpdHV0ZShnOm5ldHJ3X2xvY2FsbW92ZWNtZCwnXi5cey19XChccy4qXCkkJywnXDEnLCcnKQorICAgICBsZXQgbW92ZWNtZCAgICAgPSBuZXRydyNXaW5QYXRoKG1vdmVjbWQpLm1vdmVjbWRhcmdzCisiICAgICBjYWxsIERlY2hvKCJ3aW5kb3dzIGV4Y2VwdGlvbjogbW92ZWNtZDwiLm1vdmVjbWQuIj4gKCMxOiBoYWQgYSBzcGFjZSkiKQorICAgIGVsc2UKKyAgICAgbGV0IG1vdmVjbWQgPSBuZXRydyNXaW5QYXRoKG1vdmVjbWQpCisiICAgICBjYWxsIERlY2hvKCJ3aW5kb3dzIGV4Y2VwdGlvbjogbW92ZWNtZDwiLm1vdmVjbWQuIj4gKCMyOiBubyBzcGFjZSkiKQorICAgIGVuZGlmCisgICBlbHNlCisgICAgbGV0IG1vdmVjbWQgPSBuZXRydyNXaW5QYXRoKGc6bmV0cndfbG9jYWxtb3ZlY21kKQorIiAgICBjYWxsIERlY2hvKCJtb3ZlY21kPCIubW92ZWNtZC4iPiAoIzMgbGludXggb3IgY3lnd2luKSIpCisgICBlbmRpZgogICAgZm9yIGZuYW1lIGluIHM6bmV0cndtYXJrZmlsZWxpc3Rfe2J1Zm5yKCIlIil9Ci0iICAgIGNhbGwgRGVjaG8oInN5c3RlbSgiLmc6bmV0cndfbG9jYWxtb3ZlY21kLiIgIi5zaGVsbGVzY2FwZShmbmFtZSkuIiAiLnNoZWxsZXNjYXBlKHM6bmV0cndtZnRndCkuIikiKQotICAgIGxldCByZXQ9IHN5c3RlbShnOm5ldHJ3X2xvY2FsbW92ZWNtZC4iICIuc2hlbGxlc2NhcGUoZm5hbWUpLiIgIi5zaGVsbGVzY2FwZShzOm5ldHJ3bWZ0Z3QpKQotICAgIGlmIHY6c2hlbGxfZXJyb3IgPCAwCi0gICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwiY29tbWFuZDwiLmc6bmV0cndfbG9jYWxtb3ZlY21kLiI+IGZhaWxlZCwgYWJvcnRpbmciLDU0KQorIiAgICBjYWxsIERlY2hvKCJzeXN0ZW0oIi5tb3ZlY21kLiIgIi5zaGVsbGVzY2FwZShmbmFtZSkuIiAiLnRndC4iKSIpCisgICAgaWYgIWc6bmV0cndfY3lnd2luICYmIChoYXMoIndpbjMyIikgfHwgaGFzKCJ3aW45NSIpIHx8IGhhcygid2luNjQiKSB8fCBoYXMoIndpbjE2IikpCisgICAgIGxldCBmbmFtZT0gc3Vic3RpdHV0ZShmbmFtZSwnLycsJ1xcJywnZycpCisgICAgZW5kaWYKKyAgICBsZXQgcmV0PSBzeXN0ZW0oZzpuZXRyd19sb2NhbG1vdmVjbWQuIiAiLnNoZWxsZXNjYXBlKGZuYW1lKS4iICIudGd0KQorICAgIGlmIHY6c2hlbGxfZXJyb3IgIT0gMAorICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsInRyaWVkIHVzaW5nIGc6bmV0cndfbG9jYWxtb3ZlY21kPCIuZzpuZXRyd19sb2NhbG1vdmVjbWQuIj47IGl0IGRvZXNuJ3Qgd29yayEiLDU0KQogICAgICBicmVhawogICAgIGVuZGlmCiAgICBlbmRmb3IKQEAgLTU2MDUsNiArNjEzMCwxNCBAQAogZnVuISBzOk5ldHJ3TWFya0ZpbGVQcmludChpc2xvY2FsKQogIiAgY2FsbCBEZnVuYygiczpOZXRyd01hcmtGaWxlUHJpbnQoaXNsb2NhbD0iLmE6aXNsb2NhbC4iKSIpCiAgIGxldCBjdXJidWZucj0gYnVmbnIoIiUiKQorCisgICIgc2FuaXR5IGNoZWNrCisgIGlmICFleGlzdHMoInM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSIpIHx8IGVtcHR5KHM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSkKKyAgIGtlZXBqIGNhbGwgbmV0cncjRXJyb3JNc2coMiwidGhlcmUgYXJlIG5vIG1hcmtlZCBmaWxlcyBpbiB0aGlzIHdpbmRvdyAoOmhlbHAgbmV0cnctbWYpIiw2NikKKyIgICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZVByaW50IikKKyAgIHJldHVybgorICBlbmRpZgorIiAgY2FsbCBEZWNobygic2FuaXR5IGNoayBwYXNzZWQ6IHM6bmV0cndtYXJrZmlsZWxpc3RfIi5jdXJidWZuci4iPCIuc3RyaW5nKHM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSkpCiAgIGlmIGV4aXN0cygiczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9IikKICAgIGxldCBuZXRyd21hcmtmaWxlbGlzdCA9IHM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfQogICAgbGV0IGN1cmRpciAgICAgICAgICAgID0gYjpuZXRyd19jdXJkaXIKQEAgLTU2MzMsNyArNjE2Niw3IEBACiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIiBzOk5ldHJ3TWFya0ZpbGVSZWdleHA6IChpbnZva2VkIGJ5IG1yKSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFyayB7e3syCiAiICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgd2hlbiBnaXZlbiBhIHJlZ2V4cCAoZm9yIHdoaWNoIGEgcHJvbXB0IGlzCi0iICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVkKS4KKyIgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZWQpIChtYXRjaGVzIHRvIG5hbWUgb2YgZmlsZXMpLgogZnVuISBzOk5ldHJ3TWFya0ZpbGVSZWdleHAoaXNsb2NhbCkKICIgIGNhbGwgRGZ1bmMoInM6TmV0cndNYXJrRmlsZVJlZ2V4cChpc2xvY2FsPSIuYTppc2xvY2FsLiIpIikKIApAQCAtNTY0NSw4ICs2MTc4LDggQEAKICAgaWYgYTppc2xvY2FsCiAgICAiIGdldCB0aGUgbWF0Y2hpbmcgbGlzdCBvZiBmaWxlcyB1c2luZyBsb2NhbCBnbG9iKCkKICIgICBjYWxsIERlY2hvKCJoYW5kbGUgbG9jYWwgcmVnZXhwIikKLSAgIGxldCBkaXJuYW1lICA9IGVzY2FwZShiOm5ldHJ3X2N1cmRpcixnOm5ldHJ3X2dsb2JfZXNjYXBlKQotICAgbGV0IGZpbGVzID0gZ2xvYihzOkNvbXBvc2VQYXRoKGRpcm5hbWUscmVnZXhwKSkKKyAgIGxldCBkaXJuYW1lID0gZXNjYXBlKGI6bmV0cndfY3VyZGlyLGc6bmV0cndfZ2xvYl9lc2NhcGUpCisgICBsZXQgZmlsZXMgICA9IGdsb2IoczpDb21wb3NlUGF0aChkaXJuYW1lLHJlZ2V4cCkpCiAiICAgY2FsbCBEZWNobygiZmlsZXM8Ii5maWxlcy4iPiIpCiAgICBsZXQgZmlsZWxpc3Q9IHNwbGl0KGZpbGVzLCJcbiIpCiAKQEAgLTU2OTksNiArNjIzMiw3IEBACiAgICBsZXQgQGEgID0gYXJlZwogICAgbGV0ICZlaSA9IGVpa2VlcAogICBlbmRpZgorICBlY2hvICIgICh1c2UgbWUgdG8gZWRpdCBtYXJrZWQgZmlsZXMpIgogCiAiICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZVJlZ2V4cCIpCiBlbmRmdW4KQEAgLTU3MDksNiArNjI0MywxNCBAQAogZnVuISBzOk5ldHJ3TWFya0ZpbGVTb3VyY2UoaXNsb2NhbCkKICIgIGNhbGwgRGZ1bmMoInM6TmV0cndNYXJrRmlsZVNvdXJjZShpc2xvY2FsPSIuYTppc2xvY2FsLiIpIikKICAgbGV0IGN1cmJ1Zm5yPSBidWZucigiJSIpCisKKyAgIiBzYW5pdHkgY2hlY2sKKyAgaWYgIWV4aXN0cygiczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9IikgfHwgZW1wdHkoczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9KQorICAga2VlcGogY2FsbCBuZXRydyNFcnJvck1zZygyLCJ0aGVyZSBhcmUgbm8gbWFya2VkIGZpbGVzIGluIHRoaXMgd2luZG93ICg6aGVscCBuZXRydy1tZikiLDY2KQorIiAgIGNhbGwgRHJldCgiczpOZXRyd01hcmtGaWxlU291cmNlIikKKyAgIHJldHVybgorICBlbmRpZgorIiAgY2FsbCBEZWNobygic2FuaXR5IGNoayBwYXNzZWQ6IHM6bmV0cndtYXJrZmlsZWxpc3RfIi5jdXJidWZuci4iPCIuc3RyaW5nKHM6bmV0cndtYXJrZmlsZWxpc3Rfe2N1cmJ1Zm5yfSkpCiAgIGlmIGV4aXN0cygiczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9IikKICAgIGxldCBuZXRyd21hcmtmaWxlbGlzdCA9IHM6bmV0cndtYXJrZmlsZWxpc3Rfe2J1Zm5yKCIlIil9CiAgICBsZXQgY3VyZGlyICAgICAgICAgICAgPSBiOm5ldHJ3X2N1cmRpcgpAQCAtNTczOSw2ICs2MjgxLDE0IEBACiAgIGxldCBjdXJkaXIgICA9IGI6bmV0cndfY3VyZGlyCiAgIGxldCBjdXJidWZuciA9IGJ1Zm5yKCIlIikKIAorICAiIHNhbml0eSBjaGVjaworICBpZiAhZXhpc3RzKCJzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0iKSB8fCBlbXB0eShzOm5ldHJ3bWFya2ZpbGVsaXN0X3tjdXJidWZucn0pCisgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKDIsInRoZXJlIGFyZSBubyBtYXJrZWQgZmlsZXMgaW4gdGhpcyB3aW5kb3cgKDpoZWxwIG5ldHJ3LW1mKSIsNjYpCisiICAgY2FsbCBEcmV0KCJzOk5ldHJ3TWFya0ZpbGVUYWciKQorICAgcmV0dXJuCisgIGVuZGlmCisiICBjYWxsIERlY2hvKCJzYW5pdHkgY2hrIHBhc3NlZDogczpuZXRyd21hcmtmaWxlbGlzdF8iLmN1cmJ1Zm5yLiI8Ii5zdHJpbmcoczpuZXRyd21hcmtmaWxlbGlzdF97Y3VyYnVmbnJ9KSkKKwogICBpZiBleGlzdHMoInM6bmV0cndtYXJrZmlsZWxpc3QiKQogIiAgIGNhbGwgRGVjaG8oInM6bmV0cndtYXJrZmlsZWxpc3QiLnN0cmluZyhzOm5ldHJ3bWFya2ZpbGVsaXN0KS4iPiIpCiAgICBsZXQgbmV0cndtYXJrZmlsZWxpc3Q9IGpvaW4obWFwKGRlZXBjb3B5KHM6bmV0cndtYXJrZmlsZWxpc3QpLCAic2hlbGxlc2NhcGUodjp2YWwsIi4hYTppc2xvY2FsLiIpIikpCkBAIC01Nzc0LDkgKzYzMjQsOSBAQAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgczpOZXRyd01hcmtGaWxlVGd0OiAgKGludm9rZWQgYnkgbXQpIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCBhIG1hcmtlZCBmaWxlIHRhcmdldCB7e3syCiAiICAgU2V0cyB1cCB0d28gdmFyaWFibGVzLCAKLSIgICAgIHM6bmV0cndtZnRndCA6IGhvbGRzIHRoZSB0YXJnZXQgZGlyZWN0b3J5CisiICAgICBzOm5ldHJ3bWZ0Z3QgICAgICAgICA6IGhvbGRzIHRoZSB0YXJnZXQgZGlyZWN0b3J5CiAiICAgICBzOm5ldHJ3bWZ0Z3RfaXNsb2NhbCA6IDA9dGFyZ2V0IGRpcmVjdG9yeSBpcyByZW1vdGUKLSIgICAgICAgICAgICAgICAgICAgIDE9dGFyZ2V0IGRpcmVjdG9yeSBpcyBsb2NhbAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxPXRhcmdldCBkaXJlY3RvcnkgaXMgbG9jYWwKIGZ1biEgczpOZXRyd01hcmtGaWxlVGd0KGlzbG9jYWwpCiAiICBjYWxsIERmdW5jKCJzOk5ldHJ3TWFya0ZpbGVUZ3QoaXNsb2NhbD0iLmE6aXNsb2NhbC4iKSIpCiAgIGxldCBzdnBvcyAgPSBuZXRydyNOZXRyd1NhdmVQb3NuKCkKQEAgLTU3ODgsOSArNjMzOCwyMSBAQAogCiAgICIgc2V0IHVwIHRhcmdldAogICBpZiBsaW5lKCIuIikgPCB3Om5ldHJ3X2Jhbm5lcmNudAotICAgIiBpZiBjdXJzb3IgaW4gYmFubmVyIHJlZ2lvbiwgdXNlIGI6bmV0cndfY3VyZGlyIGZvciB0aGUgdGFyZ2V0Ci0gICBsZXQgczpuZXRyd21mdGd0PSBiOm5ldHJ3X2N1cmRpcgotIiAgIGNhbGwgRGVjaG8oImluYmFubmVyOiBzOm5ldHJ3bWZ0Z3Q8Ii5zOm5ldHJ3bWZ0Z3QuIj4iKQorICAgIiBpZiBjdXJzb3IgaW4gYmFubmVyIHJlZ2lvbiwgdXNlIGI6bmV0cndfY3VyZGlyIGZvciB0aGUgdGFyZ2V0IHVubGVzcyBpdHMgYWxyZWFkeSB0aGUgdGFyZ2V0CisgICBpZiBleGlzdHMoInM6bmV0cndtZnRndCIpICYmIGV4aXN0cygiczpuZXRyd21mdGd0X2lzbG9jYWwiKSAmJiBzOm5ldHJ3bWZ0Z3QgPT0gYjpuZXRyd19jdXJkaXIKKyIgICAgY2FsbCBEZWNobygiY3Vyc29yIGluIGJhbm5lciByZWdpb24sIGFuZCB0YXJnZXQgYWxyZWFkeSBpcyA8Ii5iOm5ldHJ3X2N1cmRpci4iPjogcmVtb3ZpbmcgdGFyZ2V0IikKKyAgICB1bmxldCBzOm5ldHJ3bWZ0Z3QgczpuZXRyd21mdGd0X2lzbG9jYWwKKyAgICBpZiBnOm5ldHJ3X2Zhc3Ricm93c2UgPD0gMQorICAgICBjYWxsIHM6TG9jYWxCcm93c2VTaGVsbENtZFJlZnJlc2goKQorICAgIGVuZGlmCisgICAgY2FsbCBzOk5ldHJ3UmVmcmVzaChhOmlzbG9jYWwsczpOZXRyd0Jyb3dzZUNoZ0RpcihhOmlzbG9jYWwsJy4vJykpCisgICAgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zKQorIiAgICBjYWxsIERyZXQoInM6TmV0cndNYXJrRmlsZVRndCA6IHJlbW92ZWQgdGFyZ2V0IikKKyAgICByZXR1cm4KKyAgIGVsc2UKKyAgICBsZXQgczpuZXRyd21mdGd0PSBiOm5ldHJ3X2N1cmRpcgorIiAgICBjYWxsIERlY2hvKCJpbmJhbm5lcjogczpuZXRyd21mdGd0PCIuczpuZXRyd21mdGd0LiI+IikKKyAgIGVuZGlmCiAKICAgZWxzZQogICAgIiBnZXQgd29yZCB1bmRlciBjdXJzb3IuCkBAIC01ODY2LDYgKzY0MjgsOCBAQAogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIiBzOk5ldHJ3VW5tYXJrTGlzdDogZGVsZXRlIGxvY2FsIG1hcmtlZCBmaWxlIGxpc3RzIGFuZCByZW1vdmUgdGhlaXIgY29udGVudHMgZnJvbSB0aGUgZ2xvYmFsIG1hcmtlZC1maWxlIGxpc3Qge3t7MgorIiAgIFVzZXIgYWNjZXNzIHByb3ZpZGVkIGJ5IHRoZSA8bXU+IG1hcHBpbmcuIChzZWUgOmhlbHAgbmV0cnctbXUpCisiICAgVXNlZCBieSBtYW55IE1hcmtGaWxlIGZ1bmN0aW9ucy4KIGZ1biEgczpOZXRyd1VubWFya0xpc3QoY3VyYnVmbnIsY3VyZGlyKQogIiAgY2FsbCBEZnVuYygiczpOZXRyd1VubWFya0xpc3QoY3VyYnVmbnI9Ii5hOmN1cmJ1Zm5yLiIgY3VyZGlyPCIuYTpjdXJkaXIuIj4pIikKIApAQCAtNTkwMyw3ICs2NDY3LDcgQEAKIGVuZGZ1bgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIiBzOk5ldHJ3VW5tYXJrQWxsMjoge3t7MgorIiBzOk5ldHJ3VW5tYXJrQWxsMjogdW5tYXJrIGFsbCBmaWxlcyBmcm9tIGFsbCBidWZmZXJzIHt7ezIKIGZ1biEgczpOZXRyd1VubWFya0FsbDIoKQogIiAgY2FsbCBEZnVuYygiczpOZXRyd1VubWFya0FsbDIoKSIpCiAgIHJlZGlyID0+IG5ldHJ3bWFya2ZpbGVsaXN0X2xldApAQCAtNTk1Niw1OCArNjUyMCw3NCBAQAogICAgaWYgIWV4aXN0cygiczpuZXRyd19tZW51X2VuYWJsZWQiKSAmJiBhOmRvbWVudQogIiAgICBjYWxsIERlY2hvKCJpbml0aWFsaXplIG1lbnUiKQogICAgIGxldCBzOm5ldHJ3X21lbnVfZW5hYmxlZD0gMQotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjEgICAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0hlbHA8dGFiPjxGMT4JPEYxPicKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy41ICAgICAnLmc6TmV0cndUb3BMdmxNZW51LictU2VwMS0JOicKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy42ICAgICAnLmc6TmV0cndUb3BMdmxNZW51LidHb1wgVXBcIERpcmVjdG9yeTx0YWI+LQktJwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjcgICAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0FwcGx5XCBTcGVjaWFsXCBWaWV3ZXI8dGFiPngJeCcKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy44LjEgICAnLmc6TmV0cndUb3BMdmxNZW51LidCb29rbWFya3NcIGFuZFwgSGlzdG9yeS5Cb29rbWFya1wgQ3VycmVudFwgRGlyZWN0b3J5PHRhYj5tYgltYicKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy44LjQgICAnLmc6TmV0cndUb3BMdmxNZW51LidCb29rbWFya3NcIGFuZFwgSGlzdG9yeS5Hb3RvXCBQcmV2XCBEaXJcIChIaXN0b3J5KTx0YWI+dQl1JwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjguNSAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0Jvb2ttYXJrc1wgYW5kXCBIaXN0b3J5LkdvdG9cIE5leHRcIERpclwgKEhpc3RvcnkpPHRhYj5VCVUnCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuOC42ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nQm9va21hcmtzXCBhbmRcIEhpc3RvcnkuTGlzdDx0YWI+cWIJcWInCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuOS4xICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nQnJvd3NpbmdcIENvbnRyb2wuRWRpdFwgRmlsZVwgSGlkaW5nXCBMaXN0PHRhYj48Y3RybC1oPicuIglcPGMtaD4nIgotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjkuMiAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0Jyb3dzaW5nXCBDb250cm9sLkVkaXRcIFNvcnRpbmdcIFNlcXVlbmNlPHRhYj5TCVMnCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuOS4zICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nQnJvd3NpbmdcIENvbnRyb2wuUXVpY2tcIEhpZGUvVW5oaWRlXCBEb3RcIEZpbGVzPHRhYj4nLiJnaAlnaCIKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy45LjQgICAnLmc6TmV0cndUb3BMdmxNZW51LidCcm93c2luZ1wgQ29udHJvbC5SZWZyZXNoXCBMaXN0aW5nPHRhYj4nLiI8Y3RybC1sPglcPGMtbD4iCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuOS41ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nQnJvd3NpbmdcIENvbnRyb2wuU2V0dGluZ3MvT3B0aW9uczx0YWI+Ok5ldHJ3U2V0dGluZ3MJJy4iOk5ldHJ3U2V0dGluZ3NcPGNyPiIKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMCAgICAnLmc6TmV0cndUb3BMdmxNZW51LidEZWxldGVcIEZpbGUvRGlyZWN0b3J5PHRhYj5ECUQnCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTEuMSAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nRWRpdFwgRmlsZS9EaXIuQ3JlYXRlXCBOZXdcIEZpbGU8dGFiPiUJJScKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMS4xICAnLmc6TmV0cndUb3BMdmxNZW51LidFZGl0XCBGaWxlL0Rpci5JblwgQ3VycmVudFwgV2luZG93PHRhYj48Y3I+CScuIlw8Y3I+IgotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjExLjIgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0VkaXRcIEZpbGUvRGlyLlByZXZpZXdcIEZpbGUvRGlyZWN0b3J5PHRhYj5wCXAnCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTEuMyAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nRWRpdFwgRmlsZS9EaXIuSW5cIFByZXZpb3VzXCBXaW5kb3c8dGFiPlAJUCcKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMS40ICAnLmc6TmV0cndUb3BMdmxNZW51LidFZGl0XCBGaWxlL0Rpci5JblwgTmV3XCBXaW5kb3c8dGFiPm8JbycKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMS41ICAnLmc6TmV0cndUb3BMdmxNZW51LidFZGl0XCBGaWxlL0Rpci5JblwgTmV3XCBWZXJ0aWNhbFwgV2luZG93PHRhYj52CXYnCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTIuMSAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nRXhwbG9yZS5EaXJlY3RvcnlcIE5hbWUJOkV4cGxvcmUgJwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjEyLjIgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0V4cGxvcmUuRmlsZW5hbWVzXCBNYXRjaGluZ1wgUGF0dGVyblwgKGN1cmRpclwgb25seSk8dGFiPjpFeHBsb3JlXCAqLwk6RXhwbG9yZSAqLycKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMi4yICAnLmc6TmV0cndUb3BMdmxNZW51LidFeHBsb3JlLkZpbGVuYW1lc1wgTWF0Y2hpbmdcIFBhdHRlcm5cICgrc3ViZGlycyk8dGFiPjpFeHBsb3JlXCAqKi8JOkV4cGxvcmUgKiovJwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjEyLjMgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0V4cGxvcmUuRmlsZXNcIENvbnRhaW5pbmdcIFN0cmluZ1wgUGF0dGVyblwgKGN1cmRpclwgb25seSk8dGFiPjpFeHBsb3JlXCAqLy8JOkV4cGxvcmUgKi8vJwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjEyLjQgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0V4cGxvcmUuRmlsZXNcIENvbnRhaW5pbmdcIFN0cmluZ1wgUGF0dGVyblwgKCtzdWJkaXJzKTx0YWI+OkV4cGxvcmVcICoqLy8JOkV4cGxvcmUgKiovLycKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMi40ICAnLmc6TmV0cndUb3BMdmxNZW51LidFeHBsb3JlLk5leHRcIE1hdGNoPHRhYj46TmV4cGxvcmUJOk5leHBsb3JlPGNyPicKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMi40ICAnLmc6TmV0cndUb3BMdmxNZW51LidFeHBsb3JlLlByZXZcIE1hdGNoPHRhYj46UGV4cGxvcmUJOlBleHBsb3JlPGNyPicKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMyAgICAnLmc6TmV0cndUb3BMdmxNZW51LidNYWtlXCBTdWJkaXJlY3Rvcnk8dGFiPmQJZCcKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC4xICAnLmc6TmV0cndUb3BMdmxNZW51LidNYXJrZWRcIEZpbGVzLk1hcmtcIEZpbGU8dGFiPm1mCW1mJwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE0LjIgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ01hcmtlZFwgRmlsZXMuTWFya1wgRmlsZXNcIGJ5XCBSZWdleHA8dGFiPm1yCW1yJwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE0LjMgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ01hcmtlZFwgRmlsZXMuSGlkZS1TaG93LUxpc3RcIENvbnRyb2w8dGFiPmEJYScKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC40ICAnLmc6TmV0cndUb3BMdmxNZW51LidNYXJrZWRcIEZpbGVzLkNvcHlcIFRvXCBUYXJnZXQ8dGFiPm1jCW1jJwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE0LjUgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ01hcmtlZFwgRmlsZXMuRGVsZXRlPHRhYj5ECUQnCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTQuNiAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5EaWZmPHRhYj5tZAltZCcKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC43ICAnLmc6TmV0cndUb3BMdmxNZW51LidNYXJrZWRcIEZpbGVzLkVkaXQ8dGFiPm1lCW1lJwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE0LjggICcuZzpOZXRyd1RvcEx2bE1lbnUuJ01hcmtlZFwgRmlsZXMuRXhlXCBDbWQ8dGFiPm14CW14JwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE0LjkgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ01hcmtlZFwgRmlsZXMuTW92ZVwgVG9cIFRhcmdldDx0YWI+bW0JbW0nCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTQuMTAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5PYnRhaW48dGFiPk8JTycKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC4xMSAnLmc6TmV0cndUb3BMdmxNZW51LidNYXJrZWRcIEZpbGVzLlByaW50PHRhYj5tcAltcCcKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC4xMiAnLmc6TmV0cndUb3BMdmxNZW51LidNYXJrZWRcIEZpbGVzLlJlcGxhY2U8dGFiPlIJUicKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC4xMyAnLmc6TmV0cndUb3BMdmxNZW51LidNYXJrZWRcIEZpbGVzLlNldFwgVGFyZ2V0PHRhYj5tdAltdCcKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC4xNCAnLmc6TmV0cndUb3BMdmxNZW51LidNYXJrZWRcIEZpbGVzLlRhZzx0YWI+bVQJbVQnCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTQuMTUgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5aaXAvVW56aXAvQ29tcHJlc3MvVW5jb21wcmVzczx0YWI+bXoJbXonCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTUgICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nT2J0YWluXCBGaWxlPHRhYj5PCU8nCi0gICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTYuMSAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nU3R5bGUuTGlzdGluZ1wgU3R5bGVcICh0aGluLWxvbmctd2lkZS10cmVlKTx0YWI+aQlpJwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE2LjIgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ1N0eWxlLk5vcm1hbC1IaWRlLVNob3c8dGFiPmEJYScKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNi4zICAnLmc6TmV0cndUb3BMdmxNZW51LidTdHlsZS5SZXZlcnNlXCBTb3J0aW5nXCBPcmRlcjx0YWI+Jy4icglyIgotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE2LjQgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ1N0eWxlLlNvcnRpbmdcIE1ldGhvZFwgKG5hbWUtdGltZS1zaXplKTx0YWI+cwlzJwotICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE3ICAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ1JlbmFtZVwgRmlsZS9EaXJlY3Rvcnk8dGFiPlIJUicKLSAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xOCAgICAnLmc6TmV0cndUb3BMdmxNZW51LidTZXRcIEN1cnJlbnRcIERpcmVjdG9yeTx0YWI+YwljJwotICAgIGNhbGwgczpOZXRyd0Jvb2ttYXJrTWVudSgpICIgcHJvdmlkZSBzb21lIGhpc3RvcnkhICB1c2VzIHByaW9yaXRpZXMgMiwzLCByZXNlcnZlcyA0LCA4LjIueAorICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjEgICAgICAnLmc6TmV0cndUb3BMdmxNZW51LidIZWxwPHRhYj48RjE+CTxGMT4nCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuNSAgICAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJy1TZXAxLQk6JworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjYgICAgICAnLmc6TmV0cndUb3BMdmxNZW51LidHb1wgVXBcIERpcmVjdG9yeTx0YWI+LQktJworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjcgICAgICAnLmc6TmV0cndUb3BMdmxNZW51LidBcHBseVwgU3BlY2lhbFwgVmlld2VyPHRhYj54CXgnCisgICAgaWYgZzpuZXRyd19kaXJoaXN0bWF4ID4gMAorICAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy44LjEgICAnLmc6TmV0cndUb3BMdmxNZW51LidCb29rbWFya3NcIGFuZFwgSGlzdG9yeS5Cb29rbWFya1wgQ3VycmVudFwgRGlyZWN0b3J5PHRhYj5tYgltYicKKyAgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuOC40ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nQm9va21hcmtzXCBhbmRcIEhpc3RvcnkuR290b1wgUHJldlwgRGlyXCAoSGlzdG9yeSk8dGFiPnUJdScKKyAgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuOC41ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nQm9va21hcmtzXCBhbmRcIEhpc3RvcnkuR290b1wgTmV4dFwgRGlyXCAoSGlzdG9yeSk8dGFiPlUJVScKKyAgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuOC42ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nQm9va21hcmtzXCBhbmRcIEhpc3RvcnkuTGlzdDx0YWI+cWIJcWInCisgICAgZWxzZQorICAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy44ICAgICAnLmc6TmV0cndUb3BMdmxNZW51LidCb29rbWFya3NcIGFuZFwgSGlzdG9yeQk6ZWNobyAiKGRpc2FibGVkKSInLiJcPGNyPiIKKyAgICBlbmRpZgorICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjkuMSAgICAnLmc6TmV0cndUb3BMdmxNZW51LidCcm93c2luZ1wgQ29udHJvbC5Ib3Jpem9udGFsXCBTcGxpdDx0YWI+bwlvJworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjkuMiAgICAnLmc6TmV0cndUb3BMdmxNZW51LidCcm93c2luZ1wgQ29udHJvbC5WZXJ0aWNhbFwgU3BsaXQ8dGFiPnYJdicKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy45LjMgICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nQnJvd3NpbmdcIENvbnRyb2wuTmV3XCBUYWI8dGFiPnQJdCcKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy45LjQgICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nQnJvd3NpbmdcIENvbnRyb2wuUHJldmlldzx0YWI+cAlwJworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjkuNSAgICAnLmc6TmV0cndUb3BMdmxNZW51LidCcm93c2luZ1wgQ29udHJvbC5FZGl0XCBGaWxlXCBIaWRpbmdcIExpc3Q8dGFiPjxjdHJsLWg+Jy4iCVw8Yy1oPiciCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuOS42ICAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0Jyb3dzaW5nXCBDb250cm9sLkVkaXRcIFNvcnRpbmdcIFNlcXVlbmNlPHRhYj5TCVMnCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuOS43ICAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0Jyb3dzaW5nXCBDb250cm9sLlF1aWNrXCBIaWRlL1VuaGlkZVwgRG90XCBGaWxlczx0YWI+Jy4iZ2gJZ2giCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuOS44ICAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0Jyb3dzaW5nXCBDb250cm9sLlJlZnJlc2hcIExpc3Rpbmc8dGFiPicuIjxjdHJsLWw+CVw8Yy1sPiIKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy45LjkgICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nQnJvd3NpbmdcIENvbnRyb2wuU2V0dGluZ3MvT3B0aW9uczx0YWI+Ok5ldHJ3U2V0dGluZ3MJJy4iOk5ldHJ3U2V0dGluZ3NcPGNyPiIKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMCAgICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nRGVsZXRlXCBGaWxlL0RpcmVjdG9yeTx0YWI+RAlEJworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjExLjEgICAnLmc6TmV0cndUb3BMdmxNZW51LidFZGl0XCBGaWxlL0Rpci5DcmVhdGVcIE5ld1wgRmlsZTx0YWI+JQklJworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjExLjEgICAnLmc6TmV0cndUb3BMdmxNZW51LidFZGl0XCBGaWxlL0Rpci5JblwgQ3VycmVudFwgV2luZG93PHRhYj48Y3I+CScuIlw8Y3I+IgorICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjExLjIgICAnLmc6TmV0cndUb3BMdmxNZW51LidFZGl0XCBGaWxlL0Rpci5QcmV2aWV3XCBGaWxlL0RpcmVjdG9yeTx0YWI+cAlwJworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjExLjMgICAnLmc6TmV0cndUb3BMdmxNZW51LidFZGl0XCBGaWxlL0Rpci5JblwgUHJldmlvdXNcIFdpbmRvdzx0YWI+UAlQJworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjExLjQgICAnLmc6TmV0cndUb3BMdmxNZW51LidFZGl0XCBGaWxlL0Rpci5JblwgTmV3XCBXaW5kb3c8dGFiPm8JbycKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMS41ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nRWRpdFwgRmlsZS9EaXIuSW5cIE5ld1wgVmVydGljYWxcIFdpbmRvdzx0YWI+dgl2JworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjEyLjEgICAnLmc6TmV0cndUb3BMdmxNZW51LidFeHBsb3JlLkRpcmVjdG9yeVwgTmFtZQk6RXhwbG9yZSAnCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTIuMiAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0V4cGxvcmUuRmlsZW5hbWVzXCBNYXRjaGluZ1wgUGF0dGVyblwgKGN1cmRpclwgb25seSk8dGFiPjpFeHBsb3JlXCAqLwk6RXhwbG9yZSAqLycKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMi4yICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nRXhwbG9yZS5GaWxlbmFtZXNcIE1hdGNoaW5nXCBQYXR0ZXJuXCAoK3N1YmRpcnMpPHRhYj46RXhwbG9yZVwgKiovCTpFeHBsb3JlICoqLycKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMi4zICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nRXhwbG9yZS5GaWxlc1wgQ29udGFpbmluZ1wgU3RyaW5nXCBQYXR0ZXJuXCAoY3VyZGlyXCBvbmx5KTx0YWI+OkV4cGxvcmVcICovLwk6RXhwbG9yZSAqLy8nCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTIuNCAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0V4cGxvcmUuRmlsZXNcIENvbnRhaW5pbmdcIFN0cmluZ1wgUGF0dGVyblwgKCtzdWJkaXJzKTx0YWI+OkV4cGxvcmVcICoqLy8JOkV4cGxvcmUgKiovLycKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xMi40ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nRXhwbG9yZS5OZXh0XCBNYXRjaDx0YWI+Ok5leHBsb3JlCTpOZXhwbG9yZTxjcj4nCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTIuNCAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ0V4cGxvcmUuUHJldlwgTWF0Y2g8dGFiPjpQZXhwbG9yZQk6UGV4cGxvcmU8Y3I+JworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjEzICAgICAnLmc6TmV0cndUb3BMdmxNZW51LidNYWtlXCBTdWJkaXJlY3Rvcnk8dGFiPmQJZCcKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC4xICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5NYXJrXCBGaWxlPHRhYj5tZgltZicKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC4yICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5NYXJrXCBGaWxlc1wgYnlcIFJlZ2V4cDx0YWI+bXIJbXInCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTQuMyAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ01hcmtlZFwgRmlsZXMuSGlkZS1TaG93LUxpc3RcIENvbnRyb2w8dGFiPmEJYScKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC40ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5Db3B5XCBUb1wgVGFyZ2V0PHRhYj5tYwltYycKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC41ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5EZWxldGU8dGFiPkQJRCcKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC42ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5EaWZmPHRhYj5tZAltZCcKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC43ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5FZGl0PHRhYj5tZQltZScKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC44ICAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5FeGVcIENtZDx0YWI+bXgJbXgnCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTQuOSAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ01hcmtlZFwgRmlsZXMuTW92ZVwgVG9cIFRhcmdldDx0YWI+bW0JbW0nCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTQuMTAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ01hcmtlZFwgRmlsZXMuT2J0YWluPHRhYj5PCU8nCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTQuMTEgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ01hcmtlZFwgRmlsZXMuUHJpbnQ8dGFiPm1wCW1wJworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE0LjEyICAnLmc6TmV0cndUb3BMdmxNZW51LidNYXJrZWRcIEZpbGVzLlJlcGxhY2U8dGFiPlIJUicKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC4xMyAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5TZXRcIFRhcmdldDx0YWI+bXQJbXQnCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTQuMTQgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ01hcmtlZFwgRmlsZXMuVGFnPHRhYj5tVAltVCcKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNC4xNSAgJy5nOk5ldHJ3VG9wTHZsTWVudS4nTWFya2VkXCBGaWxlcy5aaXAvVW56aXAvQ29tcHJlc3MvVW5jb21wcmVzczx0YWI+bXoJbXonCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTUgICAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ09idGFpblwgRmlsZTx0YWI+TwlPJworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE2LjEuMSAnLmc6TmV0cndUb3BMdmxNZW51LidTdHlsZS5MaXN0aW5nLnRoaW48dGFiPmkJOmxldCB3Om5ldHJ3X2xpc3RzdHlsZT0wPGNyPjxjLUw+JworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE2LjEuMSAnLmc6TmV0cndUb3BMdmxNZW51LidTdHlsZS5MaXN0aW5nLmxvbmc8dGFiPmkJOmxldCB3Om5ldHJ3X2xpc3RzdHlsZT0xPGNyPjxjLUw+JworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE2LjEuMSAnLmc6TmV0cndUb3BMdmxNZW51LidTdHlsZS5MaXN0aW5nLndpZGU8dGFiPmkJOmxldCB3Om5ldHJ3X2xpc3RzdHlsZT0yPGNyPjxjLUw+JworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE2LjEuMSAnLmc6TmV0cndUb3BMdmxNZW51LidTdHlsZS5MaXN0aW5nLnRyZWU8dGFiPmkJOmxldCB3Om5ldHJ3X2xpc3RzdHlsZT0zPGNyPjxjLUw+JworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE2LjIuMSAnLmc6TmV0cndUb3BMdmxNZW51LidTdHlsZS5Ob3JtYWwtSGlkZS1TaG93LlNob3dcIEFsbDx0YWI+YQk6bGV0IGc6bmV0cndfaGlkZT0wPGNyPjxjLUw+JworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE2LjIuMyAnLmc6TmV0cndUb3BMdmxNZW51LidTdHlsZS5Ob3JtYWwtSGlkZS1TaG93Lk5vcm1hbDx0YWI+YQk6bGV0IGc6bmV0cndfaGlkZT0xPGNyPjxjLUw+JworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE2LjIuMiAnLmc6TmV0cndUb3BMdmxNZW51LidTdHlsZS5Ob3JtYWwtSGlkZS1TaG93LkhpZGRlblwgT25seTx0YWI+YQk6bGV0IGc6bmV0cndfaGlkZT0yPGNyPjxjLUw+JworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE2LjMgICAnLmc6TmV0cndUb3BMdmxNZW51LidTdHlsZS5SZXZlcnNlXCBTb3J0aW5nXCBPcmRlcjx0YWI+Jy4icglyIgorICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE2LjQuMSAnLmc6TmV0cndUb3BMdmxNZW51LidTdHlsZS5Tb3J0aW5nXCBNZXRob2QuTmFtZTx0YWI+cyAgICAgICA6bGV0IGc6bmV0cndfc29ydF9ieT0ibmFtZSI8Y3I+PGMtTD4nCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTYuNC4yICcuZzpOZXRyd1RvcEx2bE1lbnUuJ1N0eWxlLlNvcnRpbmdcIE1ldGhvZC5UaW1lPHRhYj5zICAgICAgIDpsZXQgZzpuZXRyd19zb3J0X2J5PSJ0aW1lIjxjcj48Yy1MPicKKyAgICBleGUgJ3NpbCEgbWVudSAnLmc6TmV0cndNZW51UHJpb3JpdHkuJy4xNi40LjMgJy5nOk5ldHJ3VG9wTHZsTWVudS4nU3R5bGUuU29ydGluZ1wgTWV0aG9kLlNpemU8dGFiPnMgICAgICAgOmxldCBnOm5ldHJ3X3NvcnRfYnk9InNpemUiPGNyPjxjLUw+JworICAgIGV4ZSAnc2lsISBtZW51ICcuZzpOZXRyd01lbnVQcmlvcml0eS4nLjE3ICAgICAnLmc6TmV0cndUb3BMdmxNZW51LidSZW5hbWVcIEZpbGUvRGlyZWN0b3J5PHRhYj5SCVInCisgICAgZXhlICdzaWwhIG1lbnUgJy5nOk5ldHJ3TWVudVByaW9yaXR5LicuMTggICAgICcuZzpOZXRyd1RvcEx2bE1lbnUuJ1NldFwgQ3VycmVudFwgRGlyZWN0b3J5PHRhYj5jCWMnCiAgICAgbGV0IHM6bmV0cndfbWVudWNudD0gMjgKKyAgICBjYWxsIHM6TmV0cndCb29rbWFya01lbnUoKSAiIHByb3ZpZGUgc29tZSBoaXN0b3J5ISAgdXNlcyBwcmlvcml0aWVzIDIsMywgcmVzZXJ2ZXMgNCwgOC4yLngKKyAgICBjYWxsIHM6TmV0cndUZ3RNZW51KCkgICAgICAiIGxldCBib29rbWFya3MgYW5kIGhpc3RvcnkgYmUgZWFzeSB0YXJnZXRzCiAKICAgIGVsc2VpZiAhYTpkb21lbnUKICAgICBsZXQgczpuZXRyd2NudCA9IDAKQEAgLTYwNDgsMjIyICs2NjI4LDYgQEAKIGVuZGZ1bgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIiBuZXRydyNOZXRyd09idGFpbjoge3t7MgotIiAgIG5ldHJ3I05ldHJ3T2J0YWluKGlzbG9jYWwsZm5hbWVbLHRndGRpcmVjdG9yeV0pCi0iICAgICBpc2xvY2FsPTAgIG9idGFpbiBmcm9tIHJlbW90ZSBzb3VyY2UKLSIgICAgICAgICAgICA9MSAgb2J0YWluIGZyb20gbG9jYWwgc291cmNlCi0iICAgICBmbmFtZSAgOiAgIGEgZmlsZW5hbWUgb3IgYSBsaXN0IG9mIGZpbGVuYW1lcwotIiAgICAgdGd0ZGlyIDogICBvcHRpb25hbCBwbGFjZSB3aGVyZSBmaWxlcyBhcmUgdG8gZ28gIChub3QgcHJlc2VudCwgdXNlcyBnZXRjd2QoKSkKLWZ1biEgbmV0cncjTmV0cndPYnRhaW4oaXNsb2NhbCxmbmFtZSwuLi4pCi0iICBjYWxsIERmdW5jKCJuZXRydyNOZXRyd09idGFpbihpc2xvY2FsPSIuYTppc2xvY2FsLiIgZm5hbWU8Ii4oKHR5cGUoYTpmbmFtZSkgPT0gMSk/IGE6Zm5hbWUgOiBzdHJpbmcoYTpmbmFtZSkpLiI+KSBhOjA9Ii5hOjApCi0gICIgTmV0cndTdGF0dXNMaW5lIHN1cHBvcnQgLSBmb3Igb2J0YWluaW5nIHN1cHBvcnQKLQotICBpZiB0eXBlKGE6Zm5hbWUpID09IDEKLSAgIGxldCBmbmFtZWxpc3Q9IFsgYTpmbmFtZSBdCi0gIGVsc2VpZiB0eXBlKGE6Zm5hbWUpID09IDMKLSAgIGxldCBmbmFtZWxpc3Q9IGE6Zm5hbWUKLSAgZWxzZQotICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLCJhdHRlbXB0aW5nIHRvIHVzZSBOZXRyd09idGFpbiBvbiBzb21ldGhpbmcgbm90IGEgZmlsZW5hbWUgb3IgYSBsaXN0Iiw2MikKLSIgICBjYWxsIERyZXQoIm5ldHJ3I05ldHJ3T2J0YWluIikKLSAgIHJldHVybgotICBlbmRpZgotIiAgY2FsbCBEZWNobygiZm5hbWVsaXN0PCIuc3RyaW5nKGZuYW1lbGlzdCkuIj4iKQotICBpZiBhOjAgPiAwCi0gICBsZXQgdGd0ZGlyPSBhOjEKLSAgZWxzZQotICAgbGV0IHRndGRpcj0gZ2V0Y3dkKCkKLSAgZW5kaWYKLSIgIGNhbGwgRGVjaG8oInRndGRpcjwiLnRndGRpci4iPiIpCi0KLSAgaWYgZXhpc3RzKCJiOm5ldHJ3X2lzbG9jYWwiKSAmJiBiOm5ldHJ3X2lzbG9jYWwKLSAgICIgb2J0YWluIGEgZmlsZSBmcm9tIGxvY2FsIGI6bmV0cndfY3VyZGlyIHRvIChsb2NhbCkgdGd0ZGlyCi0iICAgY2FsbCBEZWNobygib2J0YWluIGEgZmlsZSBmcm9tIGxvY2FsICIuYjpuZXRyd19jdXJkaXIuIiB0byAiLnRndGRpcikKLSAgIGlmIGV4aXN0cygiYjpuZXRyd19jdXJkaXIiKSAmJiBnZXRjd2QoKSAhPSBiOm5ldHJ3X2N1cmRpcgotICAgIGxldCB0b3BhdGg9IHM6Q29tcG9zZVBhdGgodGd0ZGlyLCIiKQotICAgIGlmIChoYXMoIndpbjMyIikgfHwgaGFzKCJ3aW45NSIpIHx8IGhhcygid2luNjQiKSB8fCBoYXMoIndpbjE2IikpCi0gICAgICIgdHJhbnNmZXIgZmlsZXMgb25lIGF0IHRpbWUKLSIgICAgIGNhbGwgRGVjaG8oInRyYW5zZmVyIGZpbGVzIG9uZSBhdCBhIHRpbWUiKQotICAgICBmb3IgZm5hbWUgaW4gZm5hbWVsaXN0Ci0iICAgICAgY2FsbCBEZWNobygic3lzdGVtKCIuZzpuZXRyd19sb2NhbGNvcHljbWQuIiAiLnNoZWxsZXNjYXBlKGZuYW1lKS4iICIuc2hlbGxlc2NhcGUodG9wYXRoKS4iKSIpCi0gICAgICBjYWxsIHN5c3RlbShnOm5ldHJ3X2xvY2FsY29weWNtZC4iICIuc2hlbGxlc2NhcGUoZm5hbWUpLiIgIi5zaGVsbGVzY2FwZSh0b3BhdGgpKQotICAgICAgaWYgdjpzaGVsbF9lcnJvciAhPSAwCi0gICAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOldBUk5JTkcsImNvbnNpZGVyIHNldHRpbmcgZzpuZXRyd19sb2NhbGNvcHljbWQ8Ii5nOm5ldHJ3X2xvY2FsY29weWNtZC4iPiB0byBzb21ldGhpbmcgdGhhdCB3b3JrcyIsODApCi0iICAgICAgIGNhbGwgRHJldCgiczpOZXRyd09idGFpbiAwIDogZmFpbGVkOiAiLmc6bmV0cndfbG9jYWxjb3B5Y21kLiIgIi5zaGVsbGVzY2FwZShmbmFtZSkuIiAiLnNoZWxsZXNjYXBlKHRvcGF0aCkpCi0gICAgICAgcmV0dXJuCi0gICAgIGVuZGZvcgotICAgIGVsc2UKLSAgICAgIiB0cmFuc2ZlciBmaWxlcyB3aXRoIG9uZSBjb21tYW5kCi0iICAgICBjYWxsIERlY2hvKCJ0cmFuc2ZlciBmaWxlcyB3aXRoIG9uZSBjb21tYW5kIikKLSAgICAgbGV0IGZpbGVsaXN0PSBqb2luKG1hcChkZWVwY29weShmbmFtZWxpc3QpLCJzaGVsbGVzY2FwZSh2OnZhbCkiKSkKLSIgICAgIGNhbGwgRGVjaG8oInN5c3RlbSgiLmc6bmV0cndfbG9jYWxjb3B5Y21kLiIgIi5maWxlbGlzdC4iICIuc2hlbGxlc2NhcGUodG9wYXRoKS4iKSIpCi0gICAgIGNhbGwgc3lzdGVtKGc6bmV0cndfbG9jYWxjb3B5Y21kLiIgIi5maWxlbGlzdC4iICIuc2hlbGxlc2NhcGUodG9wYXRoKSkKLSAgICAgaWYgdjpzaGVsbF9lcnJvciAhPSAwCi0gICAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywiY29uc2lkZXIgc2V0dGluZyBnOm5ldHJ3X2xvY2FsY29weWNtZDwiLmc6bmV0cndfbG9jYWxjb3B5Y21kLiI+IHRvIHNvbWV0aGluZyB0aGF0IHdvcmtzIiw4MCkKLSIgICAgICBjYWxsIERyZXQoInM6TmV0cndPYnRhaW4gMCA6IGZhaWxlZDogIi5nOm5ldHJ3X2xvY2FsY29weWNtZC4iICIuZmlsZWxpc3QuIiAiLnNoZWxsZXNjYXBlKHRvcGF0aCkpCi0gICAgIHJldHVybgotICAgIGVuZGlmCi0gICBlbHNlaWYgIWV4aXN0cygiYjpuZXRyd19jdXJkaXIiKQotICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUiwibG9jYWwgYnJvd3NpbmcgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QhIiwzNikKLSAgIGVsc2UKLSAgICBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6V0FSTklORywibG9jYWwgYnJvd3NpbmcgZGlyZWN0b3J5IGFuZCBjdXJyZW50IGRpcmVjdG9yeSBhcmUgaWRlbnRpY2FsIiwzNykKLSAgIGVuZGlmCi0KLSAgZWxzZQotICAgIiBvYnRhaW4gZmlsZXMgZnJvbSByZW1vdGUgYjpuZXRyd19jdXJkaXIgdG8gbG9jYWwgdGd0ZGlyCi0iICAgY2FsbCBEZWNobygib2J0YWluIGEgZmlsZSBmcm9tIHJlbW90ZSAiLmI6bmV0cndfY3VyZGlyLiIgdG8gIi50Z3RkaXIpCi0gICBpZiB0eXBlKGE6Zm5hbWUpID09IDEKLSAgICBjYWxsIHM6U2V0dXBOZXRyd1N0YXR1c0xpbmUoJyVmICVoJW0lciU9JTkqT2J0YWluaW5nICcuYTpmbmFtZSkKLSAgIGVuZGlmCi0gICBjYWxsIHM6TmV0cndNZXRob2QoYjpuZXRyd19jdXJkaXIpCi0KLSAgIGlmIGI6bmV0cndfbWV0aG9kID09IDQKLSAgICAiIG9idGFpbiBmaWxlIHVzaW5nIHNjcAotIiAgICBjYWxsIERlY2hvKCJvYnRhaW4gdmlhIHNjcCAobWV0aG9kIzQpIikKLSAgICBpZiBleGlzdHMoImc6bmV0cndfcG9ydCIpICYmIGc6bmV0cndfcG9ydCAhPSAiIgotICAgICBsZXQgdXNlcG9ydD0gIiAiLmc6bmV0cndfc2NwcG9ydC4iICIuZzpuZXRyd19wb3J0Ci0gICAgZWxzZQotICAgICBsZXQgdXNlcG9ydD0gIiIKLSAgICBlbmRpZgotICAgIGlmIGI6bmV0cndfZm5hbWUgPX4gJy8nCi0gICAgIGxldCBwYXRoPSBzdWJzdGl0dXRlKGI6bmV0cndfZm5hbWUsJ15cKC4qL1wpLlx7LX0kJywnXDEnLCcnKQotICAgIGVsc2UKLSAgICAgbGV0IHBhdGg9ICIiCi0gICAgZW5kaWYKLSAgICBsZXQgZmlsZWxpc3Q9IGpvaW4obWFwKGRlZXBjb3B5KGZuYW1lbGlzdCksJ3NoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZS4iOiIucGF0aC52OnZhbCwxKScpKQotIiAgICBjYWxsIERlY2hvKCJleGUgIi5zOm5ldHJ3X3NpbGVudHhmZXIuIiEiLmc6bmV0cndfc2NwX2NtZC5zaGVsbGVzY2FwZSh1c2Vwb3J0LDEpLiIgIi5maWxlbGlzdC4iICIuc2hlbGxlc2NhcGUodGd0ZGlyLDEpKQotICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiEiLmc6bmV0cndfc2NwX2NtZC5zaGVsbGVzY2FwZSh1c2Vwb3J0LDEpLiIgIi5maWxlbGlzdC4iICIuc2hlbGxlc2NhcGUodGd0ZGlyLDEpCi0KLSAgIGVsc2VpZiBiOm5ldHJ3X21ldGhvZCA9PSAyCi0gICAgIiBvYnRhaW4gZmlsZSB1c2luZyBmdHAgKyAubmV0cmMKLSIgICAgIGNhbGwgRGVjaG8oIm9idGFpbiB2aWEgZnRwKy5uZXRyYyAobWV0aG9kICMyKSIpCi0gICAgIGNhbGwgczpTYXZlQnVmVmFycygpfHNpbCBrZWVwanVtcHMgbmV3fGNhbGwgczpSZXN0b3JlQnVmVmFycygpCi0gICAgIGxldCB0bXBidWZucj0gYnVmbnIoIiUiKQotICAgICBzZXRsb2NhbCBmZj11bml4Ci0gICAgIGlmIGV4aXN0cygiZzpuZXRyd19mdHBtb2RlIikgJiYgZzpuZXRyd19mdHBtb2RlICE9ICIiCi0gICAgICBrZWVwaiBwdXQgPWc6bmV0cndfZnRwbW9kZQotIiAgICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dDogIi5nZXRsaW5lKCckJykpCi0gICAgIGVuZGlmCi0KLSAgICAgaWYgZXhpc3RzKCJiOm5ldHJ3X2ZuYW1lIikgJiYgYjpuZXRyd19mbmFtZSAhPSAiIgotICAgICAgY2FsbCBzZXRsaW5lKGxpbmUoIiQiKSsxLCdjZCAiJy5iOm5ldHJ3X2ZuYW1lLiciJykKLSIgICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQotICAgICBlbmRpZgotCi0gICAgIGlmIGV4aXN0cygiZzpuZXRyd19mdHBleHRyYWNtZCIpCi0gICAgICBrZWVwaiBwdXQgPWc6bmV0cndfZnRwZXh0cmFjbWQKLSIgICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQotICAgICBlbmRpZgotICAgICBmb3IgZm5hbWUgaW4gZm5hbWVsaXN0Ci0gICAgICBjYWxsIHNldGxpbmUobGluZSgiJCIpKzEsJ2dldCAiJy5mbmFtZS4nIicpCi0iICAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJyQnKSkKLSAgICAgZW5kZm9yCi0gICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCi0iICAgICAgY2FsbCBEZWNobygiZXhlY3V0aW5nOiAlISIuczpuZXRyd19mdHBfY21kLiIgLWkgIi5zaGVsbGVzY2FwZShnOm5ldHJ3X21hY2hpbmUsMSkuIiAiLnNoZWxsZXNjYXBlKGc6bmV0cndfcG9ydCwxKSkKLSAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKS4iICIuc2hlbGxlc2NhcGUoZzpuZXRyd19wb3J0LDEpCi0gICAgIGVsc2UKLSIgICAgICBjYWxsIERlY2hvKCJleGVjdXRpbmc6ICUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKSkKLSAgICAgIGV4ZSBzOm5ldHJ3X3NpbGVudHhmZXIuIiUhIi5zOm5ldHJ3X2Z0cF9jbWQuIiAtaSAiLnNoZWxsZXNjYXBlKGc6bmV0cndfbWFjaGluZSwxKQotICAgICBlbmRpZgotICAgICAiIElmIHRoZSByZXN1bHQgb2YgdGhlIGZ0cCBvcGVyYXRpb24gaXNuJ3QgYmxhbmssIHNob3cgYW4gZXJyb3IgbWVzc2FnZSAodG54IHRvIERvdWcgQ2xhYXIpCi0gICAgIGlmIGdldGxpbmUoMSkgIX4gIl4kIiAmJiAhZXhpc3RzKCJnOm5ldHJ3X3F1aWV0IikgJiYgZ2V0bGluZSgxKSAhfiAnXlRyeWluZyAnCi0gICAgICBsZXQgZGVidWdrZWVwPSAmZGVidWcKLSAgICAgIHNldGxvY2FsIGRlYnVnPW1zZwotICAgICAgY2FsbCBuZXRydyNFcnJvck1zZyhzOkVSUk9SLGdldGxpbmUoMSksNCkKLSAgICAgIGxldCAmZGVidWc9IGRlYnVna2VlcAotICAgICBlbmRpZgotCi0gICBlbHNlaWYgYjpuZXRyd19tZXRob2QgPT0gMwotICAgICIgb2J0YWluIHdpdGggZnRwICsgbWFjaGluZSwgaWQsIHBhc3N3ZCwgYW5kIGZuYW1lIChpZS4gbm8gLm5ldHJjKQotIiAgICBjYWxsIERlY2hvKCJvYnRhaW4gdmlhIGZ0cCttaXBmIChtZXRob2QgIzMpIikKLSAgICBjYWxsIHM6U2F2ZUJ1ZlZhcnMoKXxzaWwga2VlcGp1bXBzIG5ld3xjYWxsIHM6UmVzdG9yZUJ1ZlZhcnMoKQotICAgIGxldCB0bXBidWZucj0gYnVmbnIoIiUiKQotICAgIHNldGxvY2FsIGZmPXVuaXgKLQotICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCi0gICAgIGtlZXBqIHB1dCA9J29wZW4gJy5nOm5ldHJ3X21hY2hpbmUuJyAnLmc6bmV0cndfcG9ydAotIiAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJyQnKSkKLSAgICBlbHNlCi0gICAgIGtlZXBqIHB1dCA9J29wZW4gJy5nOm5ldHJ3X21hY2hpbmUKLSIgICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dDogIi5nZXRsaW5lKCckJykpCi0gICAgZW5kaWYKLQotICAgIGlmIGV4aXN0cygiZzpuZXRyd191aWQiKSAmJiBnOm5ldHJ3X3VpZCAhPSAiIgotICAgICBpZiBleGlzdHMoImc6bmV0cndfZnRwIikgJiYgZzpuZXRyd19mdHAgPT0gMQotICAgICAga2VlcGogcHV0ID1nOm5ldHJ3X3VpZAotIiAgICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dDogIi5nZXRsaW5lKCckJykpCi0gICAgICBpZiBleGlzdHMoInM6bmV0cndfcGFzc3dkIikgJiYgczpuZXRyd19wYXNzd2QgIT0gIiIKLSAgICAgICBrZWVwaiBwdXQgPSdcIicuczpuZXRyd19wYXNzd2QuJ1wiJwotICAgICAgZW5kaWYKLSIgICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQotICAgICBlbHNlaWYgZXhpc3RzKCJzOm5ldHJ3X3Bhc3N3ZCIpCi0gICAgICBrZWVwaiBwdXQgPSd1c2VyIFwiJy5nOm5ldHJ3X3VpZC4nXCIgXCInLnM6bmV0cndfcGFzc3dkLidcIicKLSIgICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQotICAgICBlbmRpZgotICAgIGVuZGlmCi0KLSAgICBpZiBleGlzdHMoImc6bmV0cndfZnRwbW9kZSIpICYmIGc6bmV0cndfZnRwbW9kZSAhPSAiIgotICAgICBrZWVwaiBwdXQgPWc6bmV0cndfZnRwbW9kZQotIiAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJyQnKSkKLSAgICBlbmRpZgotCi0gICAgaWYgZXhpc3RzKCJiOm5ldHJ3X2ZuYW1lIikgJiYgYjpuZXRyd19mbmFtZSAhPSAiIgotICAgICBrZWVwaiBjYWxsIHNldGxpbmUobGluZSgiJCIpKzEsJ2NkICInLmI6bmV0cndfZm5hbWUuJyInKQotIiAgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJyQnKSkKLSAgICBlbmRpZgotCi0gICAgaWYgZXhpc3RzKCJnOm5ldHJ3X2Z0cGV4dHJhY21kIikKLSAgICAga2VlcGogcHV0ID1nOm5ldHJ3X2Z0cGV4dHJhY21kCi0iICAgICBjYWxsIERlY2hvKCJmaWx0ZXIgaW5wdXQ6ICIuZ2V0bGluZSgnJCcpKQotICAgIGVuZGlmCi0KLSAgICBpZiBleGlzdHMoImc6bmV0cndfZnRwZXh0cmFjbWQiKQotICAgICBrZWVwaiBwdXQgPWc6bmV0cndfZnRwZXh0cmFjbWQKLSIgICAgIGNhbGwgRGVjaG8oImZpbHRlciBpbnB1dDogIi5nZXRsaW5lKCckJykpCi0gICAgZW5kaWYKLSAgICBmb3IgZm5hbWUgaW4gZm5hbWVsaXN0Ci0gICAgIGtlZXBqIGNhbGwgc2V0bGluZShsaW5lKCIkIikrMSwnZ2V0ICInLmZuYW1lLiciJykKLSAgICBlbmRmb3IKLSIgICAgY2FsbCBEZWNobygiZmlsdGVyIGlucHV0OiAiLmdldGxpbmUoJyQnKSkKLQotICAgICIgcGVyZm9ybSBmdHA6Ci0gICAgIiAtaSAgICAgICA6IHR1cm5zIG9mZiBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgZnJvbSBmdHAKLSAgICAiIC1uICB1bml4IDogRE9OJ1QgdXNlIDwubmV0cmM+LCBldmVuIHRob3VnaCBpdCBleGlzdHMKLSAgICAiIC1uICB3aW4zMjogcXVpdCBiZWluZyBvYm5veGlvdXMgYWJvdXQgcGFzc3dvcmQKLSAgICBrZWVwaiBub3JtISAxR2RkCi0iICAgIGNhbGwgRGVjaG8oImV4ZWN1dGluZzogJSEiLnM6bmV0cndfZnRwX2NtZC4iICIuZzpuZXRyd19mdHBfb3B0aW9ucykKLSAgICBleGUgczpuZXRyd19zaWxlbnR4ZmVyLiIlISIuczpuZXRyd19mdHBfY21kLiIgIi5nOm5ldHJ3X2Z0cF9vcHRpb25zCi0gICAgIiBJZiB0aGUgcmVzdWx0IG9mIHRoZSBmdHAgb3BlcmF0aW9uIGlzbid0IGJsYW5rLCBzaG93IGFuIGVycm9yIG1lc3NhZ2UgKHRueCB0byBEb3VnIENsYWFyKQotICAgIGlmIGdldGxpbmUoMSkgIX4gIl4kIgotIiAgICAgY2FsbCBEZWNobygiZXJyb3I8Ii5nZXRsaW5lKDEpLiI+IikKLSAgICAgaWYgIWV4aXN0cygiZzpuZXRyd19xdWlldCIpCi0gICAgICBrZWVwaiBjYWxsIG5ldHJ3I0Vycm9yTXNnKHM6RVJST1IsZ2V0bGluZSgxKSw1KQotICAgICBlbmRpZgotICAgIGVuZGlmCi0gICBlbHNlaWYgIWV4aXN0cygiYjpuZXRyd19tZXRob2QiKSB8fCBiOm5ldHJ3X21ldGhvZCA8IDAKLSIgICAgY2FsbCBEZnVuYygibmV0cncjTmV0cndPYnRhaW4gOiB1bnN1cHBvcnRlZCBtZXRob2QiKQotICAgIHJldHVybgotICAgZW5kaWYKLQotICAgIiByZXN0b3JlIHN0YXR1cyBsaW5lCi0gICBpZiB0eXBlKGE6Zm5hbWUpID09IDEgJiYgZXhpc3RzKCJzOm5ldHJ3X3VzZXJzX3N0bCIpCi0gICAga2VlcGogY2FsbCBzOlNldHVwTmV0cndTdGF0dXNMaW5lKHM6bmV0cndfdXNlcnNfc3RsKQotICAgZW5kaWYKLQotICBlbmRpZgotCi0gICIgY2xlYW51cAotICBpZiBleGlzdHMoInRtcGJ1Zm5yIikKLSAgIGlmIGJ1Zm5yKCIlIikgIT0gdG1wYnVmbnIKLSAgICBleGUgdG1wYnVmbnIuImJ3ISIKLSAgIGVsc2UKLSAgICBxIQotICAgZW5kaWYKLSAgZW5kaWYKLQotIiAgY2FsbCBEcmV0KCJuZXRydyNOZXRyd09idGFpbiIpCi1lbmRmdW4KLQotIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgczpOZXRyd1ByZXZXaW5PcGVuOiBvcGVuIGZpbGUvZGlyZWN0b3J5IGluIHByZXZpb3VzIHdpbmRvdy4gIHt7ezIKICIgICBJZiB0aGVyZSdzIG9ubHkgb25lIHdpbmRvdywgdGhlbiB0aGUgd2luZG93IHdpbGwgZmlyc3QgYmUgc3BsaXQuCiAiICAgUmV0dXJuczoKQEAgLTY0ODcsNyArNjg1MSw3IEBACiAgICAgIGxldCBuZXRyd19mbmFtZT0gYjpuZXRyd19mbmFtZQogICAgICBrZWVwaiBjYWxsIHM6U2F2ZUJ1ZlZhcnMoKXxzaWwga2VlcGogbmV3fGtlZXBqIGNhbGwgczpSZXN0b3JlQnVmVmFycygpCiAgICAgIGxldCB0bXBidWZucj0gYnVmbnIoIiUiKQotICAgICBzZXRsb2NhbCBmZj11bml4CisgICAgIHNldGwgZmY9dW5peAogCiAgICAgIGlmIGV4aXN0cygiZzpuZXRyd19wb3J0IikgJiYgZzpuZXRyd19wb3J0ICE9ICIiCiAgICAgICBrZWVwaiBwdXQgPSdvcGVuICcuZzpuZXRyd19tYWNoaW5lLicgJy5nOm5ldHJ3X3BvcnQKQEAgLTY1NDEsNyArNjkwNSw3IEBACiAgICAgIGNhbGwgaGlzdGRlbCgiLyIsLTEpCiAgICAgIGlmIGdldGxpbmUoMSkgIX4gIl4kIiAmJiAhZXhpc3RzKCJnOm5ldHJ3X3F1aWV0IikgJiYgZ2V0bGluZSgxKSAhfiAnXlRyeWluZyAnCiAgICAgICBsZXQgZGVidWdrZWVwPSAmZGVidWcKLSAgICAgIHNldGxvY2FsIGRlYnVnPW1zZworICAgICAgc2V0bCBkZWJ1Zz1tc2cKICAgICAgIGNhbGwgbmV0cncjRXJyb3JNc2coczpFUlJPUixnZXRsaW5lKDEpLDE1KQogICAgICAgbGV0ICZkZWJ1ZyA9IGRlYnVna2VlcAogICAgICAgbGV0IG1vZCAgICA9IDEKQEAgLTY1OTYsMTEgKzY5NjAsMTIgQEAKICAgIiBhdCB0aGUgY3VycmVudCB0aW1lIChNYXIgMTksIDIwMDcpIGFsbCBjYWxscyB0byBOZXRyd1JlZnJlc2goKSBjYWxsIE5ldHJ3QnJvd3NlQ2hnRGlyKCkgZmlyc3QuCiAgICIgKGRlZnVuY3QpIE5ldHJ3QnJvd3NlQ2hnRGlyKCkgbWF5IGNsZWFyIHRoZSBkaXNwbGF5OyBoZW5jZSBhIE5ldHJ3U2F2ZVBvc24oKSBtYXkgbm90IHdvcmsgaWYgaXRzIHBsYWNlZCBoZXJlLgogICAiIChkZWZ1bmN0KSBBbHNvLCBOZXRyd0Jyb3dzZUNoZ0RpcigpIG5vdyBkb2VzIGEgTmV0cndTYXZlUG9zbigpIGl0c2VsZi4KLSAgc2V0bG9jYWwgbWEgbm9ybwotIiAgY2FsbCBEZWNobygic2V0bG9jYWwgbWEgbm9ybyIpCisgIHNldGwgbWEgbm9ybworIiAgY2FsbCBEZWNobygic2V0bCBtYSBub3JvIikKICIgIGNhbGwgRGVjaG8oImNsZWFyIGJ1ZmZlcjwiLmV4cGFuZCgiJSIpLiI+IHdpdGggOiVkIikKICAgbGV0IHlrZWVwICAgICAgPSBAQAogICBsZXQgc2NyZWVucG9zbiA9IG5ldHJ3I05ldHJ3U2F2ZVBvc24oKQorIiAgY2FsbCBEZWNobygiY2xlYXJpbmcgYnVmZmVyIHByaW9yIHRvIHJlZnJlc2giKQogICBzaWwhIGtlZXBqICVkCiAgIGlmIGE6aXNsb2NhbAogICAga2VlcGogY2FsbCBuZXRydyNMb2NhbEJyb3dzZUNoZWNrKGE6ZGlybmFtZSkKQEAgLTY3MzAsNiArNzA5NSwzNyBAQAogIiAgY2FsbCBEcmV0KCJTZXRTb3J0IikKIGVuZGZ1bgogCisiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiBzOk5ldHJ3U2V0VGd0OiBzZXRzIHRoZSB0YXJnZXQgdG8gdGhlIHNwZWNpZmllZCBjaG9pY2UgaW5kZXgge3t7MgorIiAgICBJbXBsZW1lbnRzIFtjb3VudF1UYiAgKGJvb2toaXN0PGI+KQorIiAgICAgICAgICAgICAgIFtjb3VudF1UaCAgKGJvb2toaXN0PGg+KQorIiAgICAgICAgICAgICAgIFNlZSA6aGVscCBuZXRydy1xYiBmb3IgaG93IHRvIG1ha2UgdGhlIGNob2ljZS4KK2Z1biEgczpOZXRyd1NldFRndChib29raGlzdCxjaG9pY2UpCisiICBjYWxsIERmdW5jKCJzOk5ldHJ3U2V0VGd0KGJvb2toaXN0PCIuYTpib29raGlzdC4iPiBjaG9pY2UjIi5hOmNob2ljZS4iKSIpCisKKyAgaWYgICAgIGE6Ym9va2hpc3QgPT0gJ2InCisgICAiIHN1cHBvcnRzIGNob29zaW5nIGEgYm9va21hcmsgYXMgYSB0YXJnZXQgdXNpbmcgYSBxYi1nZW5lcmF0ZWQgbGlzdAorICAgbGV0IGNob2ljZT0gYTpjaG9pY2UgLSAxCisgICBpZiBleGlzdHMoImc6bmV0cndfYm9va21hcmtsaXN0WyIuY2hvaWNlLiJdIikKKyAgICBjYWxsIG5ldHJ3I05ldHJ3TWFrZVRndChnOm5ldHJ3X2Jvb2ttYXJrbGlzdFtjaG9pY2VdKQorICAgZWxzZQorICAgIGVjaG9tc2cgIlNvcnJ5LCBib29rbWFyayMiLmE6Y2hvaWNlLiIgZG9lc24ndCBleGlzdCEiCisgICBlbmRpZgorCisgIGVsc2VpZiBhOmJvb2toaXN0ID09ICdoJworICAgIiBzdXBwb3J0cyBjaG9vc2luZyBhIGhpc3Rvcnkgc3RhY2sgZW50cnkgYXMgYSB0YXJnZXQgdXNpbmcgYSBxYi1nZW5lcmF0ZWQgbGlzdAorICAgbGV0IGNob2ljZT0gKGE6Y2hvaWNlICUgZzpuZXRyd19kaXJoaXN0bWF4KSArIDEKKyAgIGlmIGV4aXN0cygiZzpuZXRyd19kaXJoaXN0XyIuY2hvaWNlKQorICAgIGxldCBoaXN0ZW50cnkgPSBnOm5ldHJ3X2Rpcmhpc3Rfe2Nob2ljZX0KKyAgICBjYWxsIG5ldHJ3I05ldHJ3TWFrZVRndChoaXN0ZW50cnkpCisgICBlbHNlCisgICAgZWNob21zZyAiU29ycnksIGhpc3RvcnkjIi5hOmNob2ljZS4iIG5vdCBhdmFpbGFibGUhIgorICAgZW5kaWYKKyAgZW5kaWYKKworIiAgY2FsbCBEcmV0KCJzOk5ldHJ3U2V0VGd0IikKK2VuZGZ1bgorCiAiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIiBzOk5ldHJ3U29ydFN0eWxlOiBjaGFuZ2Ugc29ydGluZyBzdHlsZSAobmFtZSAtIHRpbWUgLSBzaXplKSBhbmQgcmVmcmVzaCBkaXNwbGF5IHt7ezIKIGZ1biEgczpOZXRyd1NvcnRTdHlsZShpc2xvY2FsKQpAQCAtNjgzMCwzNiArNzIyNiw1MyBAQAogZW5kZnVuCiAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0iIE5ldHJ3U3RhdHVzTGluZToge3t7MgotZnVuISBOZXRyd1N0YXR1c0xpbmUoKQotCi0iIHZ2diBOZXRyd1N0YXR1c0xpbmUoKSBkZWJ1Z2dpbmcgdnZ2Ci0iICBsZXQgZzpzdGxtc2c9IiIKLSIgIGlmICFleGlzdHMoInc6bmV0cndfZXhwbG9yZV9idWZuciIpCi0iICAgbGV0IGc6c3RsbXNnPSIhWDxleHBsb3JlX2J1Zm5yPiIKLSIgIGVsc2VpZiB3Om5ldHJ3X2V4cGxvcmVfYnVmbnIgIT0gYnVmbnIoIiUiKQotIiAgIGxldCBnOnN0bG1zZz0iZXhwbG9yZV9idWZuciE9Ii5idWZucigiJSIpCi0iICBlbmRpZgotIiAgaWYgIWV4aXN0cygidzpuZXRyd19leHBsb3JlX2xpbmUiKQotIiAgIGxldCBnOnN0bG1zZz0iICFYPGV4cGxvcmVfbGluZT4iCi0iICBlbHNlaWYgdzpuZXRyd19leHBsb3JlX2xpbmUgIT0gbGluZSgiLiIpCi0iICAgbGV0IGc6c3RsbXNnPSIgZXhwbG9yZV9saW5lIT17bGluZSguKTwiLmxpbmUoIi4iKS4iPiIKLSIgIGVuZGlmCi0iICBpZiAhZXhpc3RzKCJ3Om5ldHJ3X2V4cGxvcmVfbGlzdCIpCi0iICAgbGV0IGc6c3RsbXNnPSIgIVg8ZXhwbG9yZV9saXN0PiIKLSIgIGVuZGlmCi0iIF5eXiBOZXRyd1N0YXR1c0xpbmUoKSBkZWJ1Z2dpbmcgXl5eCi0KLSAgaWYgIWV4aXN0cygidzpuZXRyd19leHBsb3JlX2J1Zm5yIikgfHwgdzpuZXRyd19leHBsb3JlX2J1Zm5yICE9IGJ1Zm5yKCIlIikgfHwgIWV4aXN0cygidzpuZXRyd19leHBsb3JlX2xpbmUiKSB8fCB3Om5ldHJ3X2V4cGxvcmVfbGluZSAhPSBsaW5lKCIuIikgfHwgIWV4aXN0cygidzpuZXRyd19leHBsb3JlX2xpc3QiKQotICAgIiByZXN0b3JlIHVzZXIncyBzdGF0dXMgbGluZQotICAgbGV0ICZzdGwgICAgICAgID0gczpuZXRyd191c2Vyc19zdGwKLSAgIGxldCAmbGFzdHN0YXR1cyA9IHM6bmV0cndfdXNlcnNfbHMKLSAgIGlmIGV4aXN0cygidzpuZXRyd19leHBsb3JlX2J1Zm5yIil8dW5sZXQgdzpuZXRyd19leHBsb3JlX2J1Zm5yfGVuZGlmCi0gICBpZiBleGlzdHMoInc6bmV0cndfZXhwbG9yZV9saW5lIikgfHVubGV0IHc6bmV0cndfZXhwbG9yZV9saW5lIHxlbmRpZgotICAgcmV0dXJuICIiCi0gIGVsc2UKLSAgIHJldHVybiAiTWF0Y2ggIi53Om5ldHJ3X2V4cGxvcmVfbXRjaGNudC4iIG9mICIudzpuZXRyd19leHBsb3JlX2xpc3RsZW4KKyIgczpOZXRyd1RndE1lbnU6IHt7ezIKK2Z1biEgczpOZXRyd1RndE1lbnUoKQorICBpZiAhZXhpc3RzKCJzOm5ldHJ3X21lbnVjbnQiKQorICAgcmV0dXJuCiAgIGVuZGlmCisiICBjYWxsIERmdW5jKCJzOk5ldHJ3VGd0TWVudSgpIikKKworICAiIHRoZSBmb2xsb3dpbmcgdGVzdCBhc3N1cmVzIHRoYXQgZ3ZpbSBpcyBydW5uaW5nLCBoYXMgbWVudXMgYXZhaWxhYmxlLCBhbmQgaGFzIG1lbnVzIGVuYWJsZWQuCisgIGlmIGhhcygiZ3VpIikgJiYgaGFzKCJtZW51IikgJiYgaGFzKCJndWlfcnVubmluZyIpICYmICZnbyA9fiMgJ20nICYmIGc6bmV0cndfbWVudQorICAgaWYgZXhpc3RzKCJnOk5ldHJ3VG9wTHZsTWVudSIpCisiICAgIGNhbGwgRGVjaG8oInJlbW92aW5nICIuZzpOZXRyd1RvcEx2bE1lbnUuIkJvb2ttYXJrcyBtZW51IGl0ZW0ocykiKQorICAgIGV4ZSAnc2lsISB1bm1lbnUgJy5nOk5ldHJ3VG9wTHZsTWVudS4nVGFyZ2V0cycKKyAgIGVuZGlmCisgICBpZiAhZXhpc3RzKCJzOm5ldHJ3X2luaXRib29raGlzdCIpCisgICAgY2FsbCBzOk5ldHJ3Qm9va0hpc3RSZWFkKCkKKyAgIGVuZGlmCisKKyAgICIgdGFyZ2V0IGJvb2ttYXJrZWQgcGxhY2VzCisgICBpZiBleGlzdHMoImc6bmV0cndfYm9va21hcmtsaXN0IikgJiYgZzpuZXRyd19ib29rbWFya2xpc3QgIT0gW10gJiYgZzpuZXRyd19kaXJoaXN0bWF4ID4gMAorIiAgICBjYWxsIERlY2hvKCJpbnN0YWxsaW5nIGJvb2ttYXJrcyBhcyBlYXN5IHRhcmdldHMiKQorICAgIGxldCBjbnQ9IDEKKyAgICBmb3IgYm1kIGluIGc6bmV0cndfYm9va21hcmtsaXN0CisgICAgIGxldCBlYm1kPSBlc2NhcGUoYm1kLGc6bmV0cndfbWVudV9lc2NhcGUpCisgICAgICIgc2hvdyBib29rbWFya3MgZm9yIGdvdG8gbWVudQorIiAgICAgY2FsbCBEZWNobygibWVudTogVGFyZ2V0czogIi5ibWQpCisgICAgIGV4ZSAnc2lsISBtZW51IDxzaWxlbnQ+ICcuZzpOZXRyd01lbnVQcmlvcml0eS4iLjE5LjEuIi5jbnQuIiAiLmc6TmV0cndUb3BMdmxNZW51LidUYXJnZXRzLicuZWJtZC4iCTpjYWxsIG5ldHJ3I05ldHJ3TWFrZVRndCgnIi5ibWQuIicpXDxjcj4iCisgICAgIGxldCBjbnQ9IGNudCArIDEKKyAgICBlbmRmb3IKKyAgIGVuZGlmCisKKyAgICIgdGFyZ2V0IGRpcmVjdG9yeSBicm93c2luZyBoaXN0b3J5CisgICBpZiBleGlzdHMoImc6bmV0cndfZGlyaGlzdG1heCIpICYmIGc6bmV0cndfZGlyaGlzdG1heCA+IDAKKyIgICAgY2FsbCBEZWNobygiaW5zdGFsbGluZyBoaXN0b3J5IGFzIGVhc3kgdGFyZ2V0cyAoaGlzdG1heD0iLmc6bmV0cndfZGlyaGlzdG1heC4iKSIpCisgICAgbGV0IGhpc3RjbnQgPSAxCisgICAgd2hpbGUgaGlzdGNudCA8PSBnOm5ldHJ3X2Rpcmhpc3RtYXgKKyAgICAgbGV0IHByaW9yaXR5ID0gZzpuZXRyd19kaXJoaXN0X2NudCArIGhpc3RjbnQKKyAgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X2Rpcmhpc3Rfe2hpc3RjbnR9IikKKyAgICAgIGxldCBoaXN0ZW50cnkgID0gZzpuZXRyd19kaXJoaXN0X3toaXN0Y250fQorICAgICAgbGV0IGVoaXN0ZW50cnkgPSBlc2NhcGUoaGlzdGVudHJ5LGc6bmV0cndfbWVudV9lc2NhcGUpCisiICAgICAgY2FsbCBEZWNobygibWVudTogVGFyZ2V0czogIi5oaXN0ZW50cnkpCisgICAgICBleGUgJ3NpbCEgbWVudSA8c2lsZW50PiAnLmc6TmV0cndNZW51UHJpb3JpdHkuIi4xOS4yLiIucHJpb3JpdHkuIiAiLmc6TmV0cndUb3BMdmxNZW51LidUYXJnZXRzLicuZWhpc3RlbnRyeS4iCTpjYWxsIG5ldHJ3I05ldHJ3TWFrZVRndCgnIi5oaXN0ZW50cnkuIicpXDxjcj4iCisgICAgIGVuZGlmCisgICAgIGxldCBoaXN0Y250ID0gaGlzdGNudCArIDEKKyAgICBlbmR3aGlsZQorICAgZW5kaWYKKyAgZW5kaWYKKyIgIGNhbGwgRHJldCgiczpOZXRyd1RndE1lbnUiKQogZW5kZnVuCiAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02ODY5LDEyICs3MjgyLDEyIEBACiAiICBjYWxsIERmdW5jKCJOZXRyd1RyZWVEaXIoKSBjdXJsaW5lIyIubGluZSgiLiIpLiI8Ii5nZXRsaW5lKCcuJykuIj4gYjpuZXRyd19jdXJkaXI8Ii5iOm5ldHJ3X2N1cmRpci4iPiB0YWIjIi50YWJwYWdlbnIoKS4iIHdpbiMiLndpbm5yKCkuIiBidWYjIi5idWZucigiJSIpLiI8Ii5idWZuYW1lKCIlIikuIj4iKQogCiAgIGxldCB0cmVlZGlyPSBiOm5ldHJ3X2N1cmRpcgotIiAgY2FsbCBEZWNobygic2V0IGluaXRpYWwgdHJlZWRpcjwiLnRyZWVkaXIuIj4iKQorIiAgY2FsbCBEZWNobygiKE5ldHJ3VHJlZURpcikgc2V0IGluaXRpYWwgdHJlZWRpcjwiLnRyZWVkaXIuIj4iKQogICBsZXQgczp0cmVlY3VycG9zPSBuZXRydyNOZXRyd1NhdmVQb3NuKCkKIAogICBpZiB3Om5ldHJ3X2xpc3RzdHlsZSA9PSBzOlRSRUVMSVNUCi0iICAgY2FsbCBEZWNobygidzpuZXRycndfbGlzdHN0eWxlIGlzIFRSRUVMSVNUOiIpCi0iICAgY2FsbCBEZWNobygibGluZSMiLmxpbmUoIi4iKS4iIGdldGxpbmUoLik8Ii5nZXRsaW5lKCcuJykuIj4gdHJlZWN1cnBvczwiLnN0cmluZyhzOnRyZWVjdXJwb3MpLiI+IikKKyIgICBjYWxsIERlY2hvKCIoTmV0cndUcmVlRGlyKSB3Om5ldHJ3X2xpc3RzdHlsZSBpcyBUUkVFTElTVDoiKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd1RyZWVEaXIpIGxpbmUjIi5saW5lKCIuIikuIiBnZXRsaW5lKC4pPCIuZ2V0bGluZSgnLicpLiI+IHRyZWVjdXJwb3M8Ii5zdHJpbmcoczp0cmVlY3VycG9zKS4iPiIpCiAKICAgICIgZXh0cmFjdCB0cmVlIGRpcmVjdG9yeSBpZiBvbiBhIGxpbmUgc3BlY2lmeWluZyBhIHN1YmRpcmVjdG9yeSAoaWUuIGVuZHMgd2l0aCAiLyIpCiAgICBpZiBnZXRsaW5lKCcuJykgPX4gJy8kJwpAQCAtNjg4MiwxMyArNzI5NSwxMyBAQAogICAgZWxzZQogICAgIGxldCB0cmVlZGlyPSAiIgogICAgZW5kaWYKLSIgICBjYWxsIERlY2hvKCJ0cmVlZGlyPCIudHJlZWRpci4iPiIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3VHJlZURpcikgdHJlZWRpcjwiLnRyZWVkaXIuIj4iKQogCiAgICAiIGRldGVjdCB1c2VyIGF0dGVtcHRpbmcgdG8gY2xvc2UgdHJlZXJvb3QKICAgIGlmIGdldGxpbmUoJy4nKSAhfiAnfCcgJiYgZ2V0bGluZSgnLicpICE9ICcuLicKICIgICAgY2FsbCBEZWNobygidXNlciBhdHRlbXB0ZWQgdG8gY2xvc2UgdHJlZXJvb3QiKQogICAgICIgbm93IGZvcmNlIGEgcmVmcmVzaAotIiAgICBjYWxsIERlY2hvKCJjbGVhciBidWZmZXI8Ii5leHBhbmQoIiUiKS4iPiB3aXRoIDolZCIpCisiICAgIGNhbGwgRGVjaG8oIihOZXRyd1RyZWVEaXIpIGNsZWFyIGJ1ZmZlcjwiLmV4cGFuZCgiJSIpLiI+IHdpdGggOiVkIikKICAgICBzaWwhIGtlZXBqICVkCiAiICAgIGNhbGwgRHJldCgiTmV0cndUcmVlRGlyIDwiLnRyZWVkaXIuIj4gOiAoc2lkZSBlZmZlY3QpIHM6dHJlZWN1cnBvczwiLnN0cmluZyhzOnRyZWVjdXJwb3MpLiI+IikKICAgICByZXR1cm4gYjpuZXRyd19jdXJkaXIKQEAgLTY4OTYsMjYgKzczMDksMjYgQEAKIAogICAgIiBlbGlkZSBhbGwgbm9uLWRlcHRoIGluZm9ybWF0aW9uCiAgICBsZXQgZGVwdGggPSBzdWJzdGl0dXRlKGdldGxpbmUoJy4nKSwnXlwoXCUofCBcKSpcKVtefF0uXHstfSQnLCdcMScsJ2UnKQotIiAgIGNhbGwgRGVjaG8oImRlcHRoPCIuZGVwdGguIj4gMXN0IHN1YnN0IChub24tZGVwdGggaW5mbyByZW1vdmVkKSIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3VHJlZURpcikgZGVwdGg8Ii5kZXB0aC4iPiAxc3Qgc3Vic3QgKG5vbi1kZXB0aCBpbmZvIHJlbW92ZWQpIikKIAogICAgIiBlbGlkZSBmaXJzdCBkZXB0aAogICAgbGV0IGRlcHRoID0gc3Vic3RpdHV0ZShkZXB0aCwnXnwgJywnJywnJykKLSIgICBjYWxsIERlY2hvKCJkZXB0aDwiLmRlcHRoLiI+IDJuZCBzdWJzdCAoZmlyc3QgZGVwdGggcmVtb3ZlZCkiKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd1RyZWVEaXIpIGRlcHRoPCIuZGVwdGguIj4gMm5kIHN1YnN0IChmaXJzdCBkZXB0aCByZW1vdmVkKSIpCiAKICAgICIgY29uc3RydWN0IHRyZWVkaXIgYnkgc2VhcmNoaW5nIGJhY2t3YXJkcyBhdCBjb3JyZWN0IGRlcHRoCi0iICAgY2FsbCBEZWNobygiY29uc3RydWN0aW5nIHRyZWVkaXI8Ii50cmVlZGlyLiI+IGRlcHRoPCIuZGVwdGguIj4iKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd1RyZWVEaXIpIGNvbnN0cnVjdGluZyB0cmVlZGlyPCIudHJlZWRpci4iPiBkZXB0aDwiLmRlcHRoLiI+IikKICAgIHdoaWxlIGRlcHRoICE9ICIiICYmIHNlYXJjaCgnXicuZGVwdGguJ1tefF0uXHstfS8kJywnYlcnKQogICAgIGxldCBkaXJuYW1lPSBzdWJzdGl0dXRlKGdldGxpbmUoJy4nKSwnXlwofCBcKSonLCcnLCdlJykKICAgICBsZXQgdHJlZWRpcj0gZGlybmFtZS50cmVlZGlyCiAgICAgbGV0IGRlcHRoICA9IHN1YnN0aXR1dGUoZGVwdGgsJ158ICcsJycsJycpCi0iICAgIGNhbGwgRGVjaG8oImNvbnN0cnVjdGluZyB0cmVlZGlyPCIudHJlZWRpci4iPjogZGlybmFtZTwiLmRpcm5hbWUuIj4gd2hpbGUgZGVwdGg8Ii5kZXB0aC4iPiIpCisiICAgIGNhbGwgRGVjaG8oIihOZXRyd1RyZWVEaXIpIGNvbnN0cnVjdGluZyB0cmVlZGlyPCIudHJlZWRpci4iPjogZGlybmFtZTwiLmRpcm5hbWUuIj4gd2hpbGUgZGVwdGg8Ii5kZXB0aC4iPiIpCiAgICBlbmR3aGlsZQogICAgaWYgdzpuZXRyd190cmVldG9wID1+ICcvJCcKICAgICBsZXQgdHJlZWRpcj0gdzpuZXRyd190cmVldG9wLnRyZWVkaXIKICAgIGVsc2UKICAgICBsZXQgdHJlZWRpcj0gdzpuZXRyd190cmVldG9wLicvJy50cmVlZGlyCiAgICBlbmRpZgotIiAgIGNhbGwgRGVjaG8oImJ1Zm5yKC4pPSIuYnVmbnIoIiUiKS4iIGxpbmUoJCk9Ii5saW5lKCIkIikuIiBsaW5lKC4pPSIubGluZSgiLiIpKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd1RyZWVEaXIpIGJ1Zm5yKC4pPSIuYnVmbnIoIiUiKS4iIGxpbmUoJCk9Ii5saW5lKCIkIikuIiBsaW5lKC4pPSIubGluZSgiLiIpKQogICBlbmRpZgogICBsZXQgdHJlZWRpcj0gc3Vic3RpdHV0ZSh0cmVlZGlyLCcvLyQnLCcvJywnJykKIApAQCAtNjkyOSw3ICs3MzQyLDcgQEAKICIgIGNhbGwgRGZ1bmMoIk5ldHJ3VHJlZURpc3BsYXkoZGlyPCIuYTpkaXIuIj4gZGVwdGg8Ii5hOmRlcHRoLiI+KSIpCiAKICAgIiBpbnN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gZm9sZHMKLSAgc2V0bG9jYWwgbm9mZW4KKyAgc2V0bCBub2ZlbgogCiAgICIgaW5zdGFsbCAuLi8gYW5kIHNob3J0ZGlyCiAgIGlmIGE6ZGVwdGggPT0gIiIKQEAgLTcwMzMsOCArNzQ0Niw4IEBACiAgICAiIGNwZjogY2hhcmFjdGVycyBwZXIgZmlsZW5hbWUKICAgICIgZnBsOiBmaWxlbmFtZXMgcGVyIGxpbmUKICAgICIgZnBjOiBmaWxlbmFtZXMgcGVyIGNvbHVtbgotICAgc2V0bG9jYWwgbWEgbm9ybwotIiAgIGNhbGwgRGVjaG8oInNldGxvY2FsIG1hIG5vcm8iKQorICAgc2V0bCBtYSBub3JvCisiICAgY2FsbCBEZWNobygic2V0bCBtYSBub3JvIikKICAgIGxldCBiOm5ldHJ3X2NwZj0gMAogICAgaWYgbGluZSgiJCIpID49IHc6bmV0cndfYmFubmVyY250CiAgICAgZXhlICdzaWwga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRnL14uL2lmIHZpcnRjb2woIiQiKSA+IGI6bmV0cndfY3BmfGxldCBiOm5ldHJ3X2NwZj0gdmlydGNvbCgiJCIpfGVuZGlmJwpAQCAtNzA5MSwyOCArNzUwNCwyOCBAQAogIiAgY2FsbCBEZnVuYygiczpQZXJmb3JtTGlzdGluZyhpc2xvY2FsPSIuYTppc2xvY2FsLiIpIGJ1Zm5yKCUpPSIuYnVmbnIoIiUiKS4iPCIuYnVmbmFtZSgiJSIpLiI+IikKIAogICAiIHNldCB1cCBzeW50YXggaGlnaGxpZ2h0aW5nIHt7ezMKLSIgIGNhbGwgRGVjaG8oInNldCB1cCBzeW50YXggaGlnaGxpZ2h0aW5nIikKKyIgIGNhbGwgRGVjaG8oIihQZXJmb3JtTGlzdGluZykgc2V0IHVwIHN5bnRheCBoaWdobGlnaHRpbmciKQogICBpZiBoYXMoInN5bnRheCIpCiAgICBpZiAhZXhpc3RzKCJnOnN5bnRheF9vbiIpIHx8ICFnOnN5bnRheF9vbgotIiAgICBjYWxsIERlY2hvKCJidXQgZzpzeW50YXhfb24iLihleGlzdHMoImc6c3ludGF4X29uIik/ICI9Ii5nOnN5bnRheF9vbiA6ICI8ZG9lc24ndCBleGlzdD4iKSkKLSAgICBzZXRsb2NhbCBmdD0KKyIgICAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSBidXQgZzpzeW50YXhfb24iLihleGlzdHMoImc6c3ludGF4X29uIik/ICI9Ii5nOnN5bnRheF9vbiA6ICI8ZG9lc24ndCBleGlzdD4iKSkKKyAgICBzZXRsIGZ0PQogICAgZWxzZWlmICZmdCAhPSAibmV0cnciCi0gICAgc2V0bG9jYWwgZnQ9bmV0cncKKyAgICBzZXRsIGZ0PW5ldHJ3CiAgICBlbmRpZgogICBlbmRpZgogCiAgIGtlZXBqIGNhbGwgczpOZXRyd1NhZmVPcHRpb25zKCkKLSAgc2V0bG9jYWwgbm9ybyBtYQotIiAgY2FsbCBEZWNobygic2V0bG9jYWwgbm9ybyBtYSIpCisgIHNldCBub3JvIG1hCisiICBjYWxsIERlY2hvKCIoUGVyZm9ybUxpc3RpbmcpIHNldGwgbm9ybyBtYSBiaD0iLiZiaCkKIAogIiAgaWYgZXhpc3RzKCJnOm5ldHJ3X3NpbGVudCIpICYmIGc6bmV0cndfc2lsZW50ID09IDAgJiYgJmNoID49IDEJIiBEZWNobwotIiAgIGNhbGwgRGVjaG8oIihuZXRydykgUHJvY2Vzc2luZyB5b3VyIGJyb3dzaW5nIHJlcXVlc3QuLi4iKQorIiAgIGNhbGwgRGVjaG8oIihQZXJmb3JtTGlzdGluZykgKG5ldHJ3KSBQcm9jZXNzaW5nIHlvdXIgYnJvd3NpbmcgcmVxdWVzdC4uLiIpCiAiICBlbmRpZgkJCQkJCQkJIiBEZWNobwogCiAiICBjYWxsIERlY2hvKCd3Om5ldHJ3X2xpc3RzdHlsZT0nLihleGlzdHMoInc6bmV0cndfbGlzdHN0eWxlIik/IHc6bmV0cndfbGlzdHN0eWxlIDogJ24vYScpKQogICBpZiBleGlzdHMoInc6bmV0cndfbGlzdHN0eWxlIikgJiYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpUUkVFTElTVCAmJiBleGlzdHMoInc6bmV0cndfdHJlZWRpY3QiKQogICAgIiBmb3JjZSBhIHJlZnJlc2ggZm9yIHRyZWUgbGlzdGluZ3MKLSIgICBjYWxsIERlY2hvKCJmb3JjZSByZWZyZXNoIGZvciB0cmVlbGlzdGluZzogY2xlYXIgYnVmZmVyPCIuZXhwYW5kKCIlIikuIj4gd2l0aCA6JWQiKQorIiAgIGNhbGwgRGVjaG8oIihQZXJmb3JtTGlzdGluZykgZm9yY2UgcmVmcmVzaCBmb3IgdHJlZWxpc3Rpbmc6IGNsZWFyIGJ1ZmZlcjwiLmV4cGFuZCgiJSIpLiI+IHdpdGggOiVkIikKICAgIHNpbCEga2VlcGogJWQKICAgZW5kaWYKIApAQCAtNzEyMSw3ICs3NTM0LDcgQEAKIAogICAiIFNldCB1cCB0aGUgYmFubmVyIHt7ezMKICAgaWYgZzpuZXRyd19iYW5uZXIKLSIgICBjYWxsIERlY2hvKCJzZXQgdXAgYmFubmVyIikKKyIgICBjYWxsIERlY2hvKCIoUGVyZm9ybUxpc3RpbmcpIHNldCB1cCBiYW5uZXIiKQogICAga2VlcGogY2FsbCBzZXRsaW5lKDEsJyIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpCiAgICBrZWVwaiBjYWxsIHNldGxpbmUoMiwnIiBOZXRydyBEaXJlY3RvcnkgTGlzdGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0cncgJy5nOmxvYWRlZF9uZXRydy4nKScpCiAgICBrZWVwaiBjYWxsIHNldGxpbmUoMywnIiAgICcuYjpuZXRyd19jdXJkaXIpCkBAIC03MTM5LDE1ICs3NTUyLDE1IEBACiAKICAgIiBTb3J0ZWQgYnkuLi4ge3t7MwogICBpZiBnOm5ldHJ3X2Jhbm5lcgotIiAgIGNhbGwgRGVjaG8oImhhbmRsZSBzcGVjaWZpZWQgc29ydGluZzogZzpuZXRyd19zb3J0X2J5PCIuZzpuZXRyd19zb3J0X2J5LiI+IikKKyIgICBjYWxsIERlY2hvKCIoUGVyZm9ybUxpc3RpbmcpIGhhbmRsZSBzcGVjaWZpZWQgc29ydGluZzogZzpuZXRyd19zb3J0X2J5PCIuZzpuZXRyd19zb3J0X2J5LiI+IikKICAgIGlmIGc6bmV0cndfc29ydF9ieSA9fiAiXm4iCi0iICAgY2FsbCBEZWNobygiZGlyZWN0b3JpZXMgd2lsbCBiZSBzb3J0ZWQgYnkgbmFtZSIpCisiICAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSBkaXJlY3RvcmllcyB3aWxsIGJlIHNvcnRlZCBieSBuYW1lIikKICAgICAiIHNvcnRlZCBieSBuYW1lCiAgICAga2VlcGogcHV0ID0nXCIgICBTb3J0ZWQgYnkgICAgICAnLnNvcnRieQogICAgIGtlZXBqIHB1dCA9J1wiICAgU29ydCBzZXF1ZW5jZTogJy5nOm5ldHJ3X3NvcnRfc2VxdWVuY2UKICAgICBsZXQgdzpuZXRyd19iYW5uZXJjbnQ9IHc6bmV0cndfYmFubmVyY250ICsgMgogICAgZWxzZQotIiAgIGNhbGwgRGVjaG8oImRpcmVjdG9yaWVzIHdpbGwgYmUgc29ydGVkIGJ5IHNpemUgb3IgdGltZSIpCisiICAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSBkaXJlY3RvcmllcyB3aWxsIGJlIHNvcnRlZCBieSBzaXplIG9yIHRpbWUiKQogICAgICIgc29ydGVkIGJ5IHNpemUgb3IgZGF0ZQogICAgIGtlZXBqIHB1dCA9J1wiICAgU29ydGVkIGJ5ICcuc29ydGJ5CiAgICAgbGV0IHc6bmV0cndfYmFubmVyY250PSB3Om5ldHJ3X2Jhbm5lcmNudCArIDEKQEAgLTcxNTgsNyArNzU3MSw3IEBACiAgICIgc2hvdyBjb3B5L21vdmUgdGFyZ2V0LCBpZiBhbnkKICAgaWYgZzpuZXRyd19iYW5uZXIKICAgIGlmIGV4aXN0cygiczpuZXRyd21mdGd0IikgJiYgZXhpc3RzKCJzOm5ldHJ3bWZ0Z3RfaXNsb2NhbCIpCi0iICAgIGNhbGwgRGVjaG8oInNob3cgY29weS9tb3ZlIHRhcmdldDwiLnM6bmV0cndtZnRndC4iPiIpCisiICAgIGNhbGwgRGVjaG8oIihQZXJmb3JtTGlzdGluZykgc2hvdyBjb3B5L21vdmUgdGFyZ2V0PCIuczpuZXRyd21mdGd0LiI+IikKICAgICBrZWVwaiBwdXQgPScnCiAgICAgaWYgczpuZXRyd21mdGd0X2lzbG9jYWwKICAgICAgc2lsISBrZWVwaiBjYWxsIHNldGxpbmUobGluZSgiLiIpLCciICAgQ29weS9Nb3ZlIFRndDogJy5zOm5ldHJ3bWZ0Z3QuJyAobG9jYWwpJykKQEAgLTcxNjcsMTQgKzc1ODAsMTQgQEAKICAgICBlbmRpZgogICAgIGxldCB3Om5ldHJ3X2Jhbm5lcmNudD0gdzpuZXRyd19iYW5uZXJjbnQgKyAxCiAgICBlbHNlCi0iICAgIGNhbGwgRGVjaG8oInM6bmV0cndtZnRndCBkb2VzIG5vdCBleGlzdCwgZG9uJ3QgbWFrZSBDb3B5L01vdmUgVGd0IikKKyIgICAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSBzOm5ldHJ3bWZ0Z3QgZG9lcyBub3QgZXhpc3QsIGRvbid0IG1ha2UgQ29weS9Nb3ZlIFRndCIpCiAgICBlbmRpZgogICAgZXhlICJzaWwhIGtlZXBqICIudzpuZXRyd19iYW5uZXJjbnQKICAgZW5kaWYKIAogICAiIEhpZGluZy4uLiAgLW9yLSAgU2hvd2luZy4uLiB7e3szCiAgIGlmIGc6bmV0cndfYmFubmVyCi0iICAgY2FsbCBEZWNobygiaGFuZGxlIGhpZGluZy9zaG93aW5nIChnOm5ldHJ3X2hpZGU9Ii5nOm5ldHJ3X2xpc3RfaGlkZS4iIGc6bmV0cndfbGlzdF9oaWRlPCIuZzpuZXRyd19saXN0X2hpZGUuIj4pIikKKyIgICBjYWxsIERlY2hvKCIoUGVyZm9ybUxpc3RpbmcpIGhhbmRsZSBoaWRpbmcvc2hvd2luZyAoZzpuZXRyd19oaWRlPSIuZzpuZXRyd19saXN0X2hpZGUuIiBnOm5ldHJ3X2xpc3RfaGlkZTwiLmc6bmV0cndfbGlzdF9oaWRlLiI+KSIpCiAgICBpZiBnOm5ldHJ3X2xpc3RfaGlkZSAhPSAiIiAmJiBnOm5ldHJ3X2hpZGUKICAgICBpZiBnOm5ldHJ3X2hpZGUgPT0gMQogICAgICBrZWVwaiBwdXQgPSdcIiAgIEhpZGluZzogICAgICAgICcuZzpuZXRyd19saXN0X2hpZGUKQEAgLTcxOTMsMzcgKzc2MDYsMzcgQEAKICAgaWYgZzpuZXRyd19iYW5uZXIKICAgIGxldCB3Om5ldHJ3X2Jhbm5lcmNudD0gdzpuZXRyd19iYW5uZXJjbnQgKyAxCiAgICBleGUgInNpbCEga2VlcGogIi53Om5ldHJ3X2Jhbm5lcmNudAotIiAgIGNhbGwgRGVjaG8oImJhbm5lcmNudD0iLnc6bmV0cndfYmFubmVyY250LiIgKHNob3VsZCBpbmRleCBsaW5lIGp1c3QgYWZ0ZXIgYmFubmVyKSBsaW5lKCQpPSIubGluZSgiJCIpKQorIiAgIGNhbGwgRGVjaG8oIihQZXJmb3JtTGlzdGluZykgYmFubmVyY250PSIudzpuZXRyd19iYW5uZXJjbnQuIiAoc2hvdWxkIGluZGV4IGxpbmUganVzdCBhZnRlciBiYW5uZXIpIGxpbmUoJCk9Ii5saW5lKCIkIikpCiAgIGVuZGlmCiAKICAgIiBnZXQgbGlzdCBvZiBmaWxlcwotIiAgY2FsbCBEZWNobygiR2V0IGxpc3Qgb2YgZmlsZXMgLSBpc2xvY2FsPSIuYTppc2xvY2FsKQorIiAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSBHZXQgbGlzdCBvZiBmaWxlcyAtIGlzbG9jYWw9Ii5hOmlzbG9jYWwpCiAgIGlmIGE6aXNsb2NhbAogICAga2VlcGogY2FsbCBzOkxvY2FsTGlzdGluZygpCiAgIGVsc2UgIiByZW1vdGUKICAgIGtlZXBqIGNhbGwgczpOZXRyd1JlbW90ZUxpc3RpbmcoKQogICBlbmRpZgotIiAgY2FsbCBEZWNobygiZzpuZXRyd19iYW5uZXI9Ii5nOm5ldHJ3X2Jhbm5lci4iIHc6bmV0cndfYmFubmVyY250PSIudzpuZXRyd19iYW5uZXJjbnQuIiAoYmFubmVyIGNvbXBsZXRlKSIpCisiICBjYWxsIERlY2hvKCIoUGVyZm9ybUxpc3RpbmcpIGc6bmV0cndfYmFubmVyPSIuZzpuZXRyd19iYW5uZXIuIiB3Om5ldHJ3X2Jhbm5lcmNudD0iLnc6bmV0cndfYmFubmVyY250LiIgKGJhbm5lciBjb21wbGV0ZSkiKQogCiAgICIgbWFuaXB1bGF0ZSB0aGUgZGlyZWN0b3J5IGxpc3RpbmcgKGhpZGUsIHNvcnQpIHt7ezMKICAgaWYgIWV4aXN0cygidzpuZXRyd19iYW5uZXJjbnQiKQogICAgbGV0IHc6bmV0cndfYmFubmVyY250PSAwCiAgIGVuZGlmCiAgIGlmICFnOm5ldHJ3X2Jhbm5lciB8fCBsaW5lKCIkIikgPj0gdzpuZXRyd19iYW5uZXJjbnQKLSIgICBjYWxsIERlY2hvKCJtYW5pcHVsYXRlIGRpcmVjdG9yeSBsaXN0aW5nIChoaWRlKSIpCi0iICAgY2FsbCBEZWNobygiZzpuZXRyd19oaWRlPSIuZzpuZXRyd19oaWRlLiIgZzpuZXRyd19saXN0X2hpZGU8Ii5nOm5ldHJ3X2xpc3RfaGlkZS4iPiIpCisiICAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSBtYW5pcHVsYXRlIGRpcmVjdG9yeSBsaXN0aW5nIChoaWRlKSIpCisiICAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSBnOm5ldHJ3X2hpZGU9Ii5nOm5ldHJ3X2hpZGUuIiBnOm5ldHJ3X2xpc3RfaGlkZTwiLmc6bmV0cndfbGlzdF9oaWRlLiI+IikKICAgIGlmIGc6bmV0cndfaGlkZSAmJiBnOm5ldHJ3X2xpc3RfaGlkZSAhPSAiIgogICAgIGtlZXBqIGNhbGwgczpOZXRyd0xpc3RIaWRlKCkKICAgIGVuZGlmCiAgICBpZiAhZzpuZXRyd19iYW5uZXIgfHwgbGluZSgiJCIpID49IHc6bmV0cndfYmFubmVyY250Ci0iICAgIGNhbGwgRGVjaG8oIm1hbmlwdWxhdGUgZGlyZWN0b3J5IGxpc3RpbmcgKHNvcnQpIDogZzpuZXRyd19zb3J0X2J5PCIuZzpuZXRyd19zb3J0X2J5LiI+IikKKyIgICAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSBtYW5pcHVsYXRlIGRpcmVjdG9yeSBsaXN0aW5nIChzb3J0KSA6IGc6bmV0cndfc29ydF9ieTwiLmc6bmV0cndfc29ydF9ieS4iPiIpCiAKICAgICBpZiBnOm5ldHJ3X3NvcnRfYnkgPX4gIl5uIgogICAgICAiIHNvcnQgYnkgbmFtZQogICAgICBrZWVwaiBjYWxsIHM6TmV0cndTZXRTb3J0KCkKIAogICAgICBpZiAhZzpuZXRyd19iYW5uZXIgfHwgdzpuZXRyd19iYW5uZXJjbnQgPCBsaW5lKCIkIikKLSIgICAgICBjYWxsIERlY2hvKCJnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uPSIuZzpuZXRyd19zb3J0X2RpcmVjdGlvbi4iIChiYW5uZXJjbnQ9Ii53Om5ldHJ3X2Jhbm5lcmNudC4iKSIpCisiICAgICAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSBnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uPSIuZzpuZXRyd19zb3J0X2RpcmVjdGlvbi4iIChiYW5uZXJjbnQ9Ii53Om5ldHJ3X2Jhbm5lcmNudC4iKSIpCiAgICAgICBpZiBnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uID1+ICduJwogICAgICAgICIgbm9ybWFsIGRpcmVjdGlvbiBzb3J0aW5nCiAgICAgICAgZXhlICdzaWwga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzb3J0Jy4nICcuZzpuZXRyd19zb3J0X29wdGlvbnMKQEAgLTcyMzMsMTMgKzc2NDYsMTMgQEAKICAgICAgIGVuZGlmCiAgICAgIGVuZGlmCiAgICAgICIgcmVtb3ZlIHByaW9yaXR5IHBhdHRlcm4gcHJlZml4Ci0iICAgICBjYWxsIERlY2hvKCJyZW1vdmUgcHJpb3JpdHkgcGF0dGVybiBwcmVmaXgiKQorIiAgICAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSByZW1vdmUgcHJpb3JpdHkgcGF0dGVybiBwcmVmaXgiKQogICAgICBleGUgJ3NpbCEga2VlcGogJy53Om5ldHJ3X2Jhbm5lcmNudC4nLCRzL15cZFx7M30nLmc6bmV0cndfc2VwY2hyLicvL2UnCiAgICAgIGtlZXBqIGNhbGwgaGlzdGRlbCgiLyIsLTEpCiAKICAgICBlbHNlaWYgYTppc2xvY2FsCiAgICAgIGlmICFnOm5ldHJ3X2Jhbm5lciB8fCB3Om5ldHJ3X2Jhbm5lcmNudCA8IGxpbmUoIiQiKQotIiAgICAgIGNhbGwgRGVjaG8oImc6bmV0cndfc29ydF9kaXJlY3Rpb249Ii5nOm5ldHJ3X3NvcnRfZGlyZWN0aW9uKQorIiAgICAgIGNhbGwgRGVjaG8oIihQZXJmb3JtTGlzdGluZykgZzpuZXRyd19zb3J0X2RpcmVjdGlvbj0iLmc6bmV0cndfc29ydF9kaXJlY3Rpb24pCiAgICAgICBpZiBnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uID1+ICduJwogIiAgICAgICBjYWxsIERlY2hvKCdleGUgc2lsIGtlZXBqdW1wcyAnLnc6bmV0cndfYmFubmVyY250LicsJHNvcnQnKQogICAgICAgIGV4ZSAnc2lsISBrZWVwaiAnLnc6bmV0cndfYmFubmVyY250LicsJHNvcnQnLicgJy5nOm5ldHJ3X3NvcnRfb3B0aW9ucwpAQCAtNzI2MiwzMCArNzY3NSwzMCBAQAogICBlbmRpZgogCiAgICIgY29udmVydCB0byB3aWRlL3RyZWUgbGlzdGluZyB7e3szCi0iICBjYWxsIERlY2hvKCJtb2RpZnkgZGlzcGxheSBpZiB3aWRlL3RyZWUgbGlzdGluZyBzdHlsZSIpCisiICBjYWxsIERlY2hvKCIoUGVyZm9ybUxpc3RpbmcpIG1vZGlmeSBkaXNwbGF5IGlmIHdpZGUvdHJlZSBsaXN0aW5nIHN0eWxlIikKICAga2VlcGogY2FsbCBzOk5ldHJ3V2lkZUxpc3RpbmcoKQogICBrZWVwaiBjYWxsIHM6TmV0cndUcmVlTGlzdGluZyhiOm5ldHJ3X2N1cmRpcikKIAogICBpZiBleGlzdHMoInc6bmV0cndfYmFubmVyY250IikgJiYgKGxpbmUoIiQiKSA+IHc6bmV0cndfYmFubmVyY250IHx8ICFnOm5ldHJ3X2Jhbm5lcikKICAgICIgcGxhY2UgY3Vyc29yIG9uIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGZpbGUgbGlzdGluZwotIiAgIGNhbGwgRGVjaG8oInBsYWNlIGN1cnNvciBvbiB0b3AtbGVmdCBjb3JuZXIgb2YgZmlsZSBsaXN0aW5nIikKKyIgICBjYWxsIERlY2hvKCIoUGVyZm9ybUxpc3RpbmcpIHBsYWNlIGN1cnNvciBvbiB0b3AtbGVmdCBjb3JuZXIgb2YgZmlsZSBsaXN0aW5nIikKICAgIGV4ZSAnc2lsISBrZWVwaiAnLnc6bmV0cndfYmFubmVyY250CiAgICBzaWwhIGtlZXBqIG5vcm0hIDAKICAgZW5kaWYKIAogICAiIHJlY29yZCBwcmV2aW91cyBjdXJyZW50IGRpcmVjdG9yeQogICBsZXQgdzpuZXRyd19wcnZkaXI9IGI6bmV0cndfY3VyZGlyCi0iICBjYWxsIERlY2hvKCJyZWNvcmQgbmV0cndfcHJ2ZGlyPCIudzpuZXRyd19wcnZkaXIuIj4iKQorIiAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSByZWNvcmQgbmV0cndfcHJ2ZGlyPCIudzpuZXRyd19wcnZkaXIuIj4iKQogCiAgICIgc2F2ZSBjZXJ0YWluIHdpbmRvdy1vcmllbnRlZCB2YXJpYWJsZXMgaW50byBidWZmZXItb3JpZW50ZWQgdmFyaWFibGVzIHt7ezMKICAga2VlcGogY2FsbCBzOlNldEJ1ZldpblZhcnMoKQogICBrZWVwaiBjYWxsIHM6TmV0cndPcHRpb25SZXN0b3JlKCJ3OiIpCiAKICAgIiBzZXQgZGlzcGxheSB0byBuZXRydyBkaXNwbGF5IHNldHRpbmdzCi0iICBjYWxsIERlY2hvKCJzZXQgZGlzcGxheSB0byBuZXRydyBkaXNwbGF5IHNldHRpbmdzIChub21hIG5vbW9kIGV0YykiKQorIiAgY2FsbCBEZWNobygiKFBlcmZvcm1MaXN0aW5nKSBzZXQgZGlzcGxheSB0byBuZXRydyBkaXNwbGF5IHNldHRpbmdzICgiLmc6bmV0cndfYnVmc2V0dGluZ3MuIikiKQogICBleGUgInNldGwgIi5nOm5ldHJ3X2J1ZnNldHRpbmdzCiAgIGlmIGc6bmV0cndfbGlzdHN0eWxlID09IHM6TE9OR0xJU1QKLSIgICBjYWxsIERlY2hvKCIoTG9jYWxMaXN0aW5nKSBleGUgc2V0bCB0cz0iLihnOm5ldHJ3X21heGZpbGVuYW1lbGVuKzEpKQorIiAgIGNhbGwgRGVjaG8oIihQZXJmb3JtTGlzdGluZykgZXhlIHNldGwgdHM9Ii4oZzpuZXRyd19tYXhmaWxlbmFtZWxlbisxKSkKICAgIGV4ZSAic2V0bCB0cz0iLihnOm5ldHJ3X21heGZpbGVuYW1lbGVuKzEpCiAgIGVuZGlmCiAgIGlmIGV4aXN0cygiczp0cmVlY3VycG9zIikKQEAgLTczMzMsNyArNzc0Niw3IEBACiAgICIgaW5zdXJlIHRoYXQgd2luZG93cyBoYXZlIGEgc3RhdHVzbGluZQogICAiIG1ha2Ugc3VyZSBzdGF0dXNsaW5lIGlzIGRpc3BsYXllZAogICBsZXQgJnN0bD1hOnN0YXRsaW5lCi0gIHNldGxvY2FsIGxhc3RzdGF0dXM9MgorICBzZXRsIGxhc3RzdGF0dXM9MgogIiAgY2FsbCBEZWNobygic3RsPSIuJnN0bCkKICAgcmVkcmF3CiAKQEAgLTc2MzQsNyArODA0Nyw2IEBACiAgICAgZW5kaWYKICAgIGVsc2VpZiBvayA9fiAncVwlW3VpdF0nCiAiICAgIGNhbGwgRGVjaG8oIm9rPT0iLm9rKQotICAgIGJyZWFrCiAgICBlbmRpZgogCiAgIGVsc2UKQEAgLTc2NzcsNyArODA4OSw3IEBACiAgICAgZW5kaWYKIAogICAgZWxzZWlmIG9rID1+ICdxXCVbdWl0XScKLSAgICBicmVhaworIiAgICBjYWxsIERlY2hvKCJvaz09Ii5vaykKICAgIGVuZGlmCiAgIGVuZGlmCiAKQEAgLTc2OTYsOCArODEwOCw4IEBACiAKICAgIiBiZWNhdXNlIFdpblhYIGZ0cCB1c2VzIHVuaXggc3R5bGUgaW5wdXQKICAgbGV0IGZma2VlcD0gJmZmCi0gIHNldGxvY2FsIG1hIGZmPXVuaXggbm9ybwotIiAgY2FsbCBEZWNobygic2V0bG9jYWwgbWEgZmY9dW5peCBub3JvIikKKyAgc2V0bCBtYSBmZj11bml4IG5vcm8KKyIgIGNhbGwgRGVjaG8oInNldGwgbWEgZmY9dW5peCBub3JvIikKIAogICAiIGNsZWFyIG9mZiBhbnkgb2xkZXIgbm9uLWJhbm5lciBsaW5lcwogICAiIG5vdGUgdGhhdCB3Om5ldHJ3X2Jhbm5lcmNudCBpbmRleGVzIHRoZSBsaW5lIGFmdGVyIHRoZSBiYW5uZXIKQEAgLTc3MjcsNyArODEzOSw3IEBACiAgICAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KICAgZWxzZWlmIHc6bmV0cndfbWV0aG9kID09IDMKICAgICIgZnRwICsgbWFjaGluZSxpZCxwYXNzd2QsZmlsZW5hbWU6ICBNZXRob2QgIzMKLSAgICBzZXRsb2NhbCBmZj11bml4CisgICAgc2V0bCBmZj11bml4CiAgICAgaWYgZXhpc3RzKCJnOm5ldHJ3X3BvcnQiKSAmJiBnOm5ldHJ3X3BvcnQgIT0gIiIKICAgICAga2VlcGogcHV0ID0nb3BlbiAnLmc6bmV0cndfbWFjaGluZS4nICcuZzpuZXRyd19wb3J0CiAgICAgZWxzZQpAQCAtNzkyMyw3ICs4MzM1LDggQEAKICIgIGNhbGwgRGVjaG8oInBsYWluZm5hbWU8Ii5wbGFpbmZuYW1lLiI+IikKICAgZXhlICJzaWwgZG9hdSBCdWZSZWFkUHJlICIuZm5hbWUyMzk2ZQogICBleGUgJ2tlZXBqIHIgJy5wbGFpbmZuYW1lCi0gIGV4ZSAnZmlsZSEgJy5wbGFpbmZuYW1lCisgIGV4ZSAnc2lsISBiZGVsZXRlICcucGxhaW5mbmFtZQorICBleGUgJ2tlZXBhbHQgZmlsZSEgJy5wbGFpbmZuYW1lCiAgIGtlZXBqIDFkCiAiICBjYWxsIERlY2hvKCIoRmlsZVVybFJlYWQpIHNldGwgbm9tb2QiKQogICBzZXRsIG5vbW9kCkBAIC03OTQyLDIyICs4MzU1LDIyIEBACiAgICIgVGhlICZmdCA9PSAibmV0cnciIHRlc3Qgd2FzIGluc3RhbGxlZCBiZWNhdXNlIHRoZSBCdWZFbnRlciBldmVudAogICAiIHdvdWxkIGhpdCB3aGVuIHJlLWVudGVyaW5nIG5ldHJ3IHdpbmRvd3MsIGNyZWF0aW5nIHVuZXhwZWN0ZWQKICAgIiByZWZyZXNoZXMgKGFuZCB3b3VsZCBkbyBzbyBpbiB0aGUgbWlkZGxlIG9mIE5ldHJ3U2F2ZU9wdGlvbnMoKSwgdG9vKQotIiAgY2FsbCBEZWNobygibmV0cncjTG9jYWxCcm93c2VDaGVjazogaXNkaXI8Ii5hOmRpcm5hbWUuIj49Ii5pc2RpcmVjdG9yeShhOmRpcm5hbWUpLigoZXhpc3RzKCJzOnRyZWVmb3JjZXJlZHJhdyIpPyAiIHRyZWVmb3JjZXJlZHJhdyIgOiAiIikpKQorIiAgY2FsbCBEZWNobygiKExvY2FsQnJvd3NlQ2hlY2spIGlzZGlyPCIuYTpkaXJuYW1lLiI+PSIuaXNkaXJlY3RvcnkoYTpkaXJuYW1lKS4oKGV4aXN0cygiczp0cmVlZm9yY2VyZWRyYXciKT8gIiB0cmVlZm9yY2VyZWRyYXciIDogIiIpKSkKICIgIGNhbGwgRHJlZGlyKCJMb2NhbEJyb3dzZUNoZWNrIiwibHMhIil8cmVkcmF3IXxzbGVlcCAzCiAgIGxldCB5a2VlcD0gQEAKICAgaWYgaXNkaXJlY3RvcnkoYTpkaXJuYW1lKQotIiAgIGNhbGwgRGVjaG8oIiBmdDwiLiZmdC4iPiBiOm5ldHJ3X2N1cmRpcjwiLihleGlzdHMoImI6bmV0cndfY3VyZGlyIik/IGI6bmV0cndfY3VyZGlyIDogIiBkb2Vzbid0IGV4aXN0IikuIj4gZGlybmFtZTwiLmE6ZGlybmFtZS4iPiIuIiBsaW5lKCQpPSIubGluZSgiJCIpLiIgZnQ8Ii4mZnQuIj4gZzpuZXRyd19mYXN0YnJvd3NlPSIuZzpuZXRyd19mYXN0YnJvd3NlKQorIiAgIGNhbGwgRGVjaG8oIihMb2NhbEJyb3dzZUNoZWNrKSBmdDwiLiZmdC4iPiBiOm5ldHJ3X2N1cmRpcjwiLihleGlzdHMoImI6bmV0cndfY3VyZGlyIik/IGI6bmV0cndfY3VyZGlyIDogIiBkb2Vzbid0IGV4aXN0IikuIj4gZGlybmFtZTwiLmE6ZGlybmFtZS4iPiIuIiBsaW5lKCQpPSIubGluZSgiJCIpLiIgZnQ8Ii4mZnQuIj4gZzpuZXRyd19mYXN0YnJvd3NlPSIuZzpuZXRyd19mYXN0YnJvd3NlKQogICAgbGV0IHN2cG9zbj0gbmV0cncjTmV0cndTYXZlUG9zbigpCiAgICBpZiAmZnQgIT0gIm5ldHJ3IiB8fCAoZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpICYmIGI6bmV0cndfY3VyZGlyICE9IGE6ZGlybmFtZSkgfHwgZzpuZXRyd19mYXN0YnJvd3NlIDw9IDEKLSAgICBzaWwhIGtlZXBqIGNhbGwgczpOZXRyd0Jyb3dzZSgxLGE6ZGlybmFtZSkKLSAgICBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oc3Zwb3NuKQorICAgIHNpbCEga2VlcGoga2VlcGFsdCBjYWxsIHM6TmV0cndCcm93c2UoMSxhOmRpcm5hbWUpCisgICAga2VlcGFsdCBjYWxsIG5ldHJ3I05ldHJ3UmVzdG9yZVBvc24oc3Zwb3NuKQogICAgZWxzZWlmICZmdCA9PSAibmV0cnciICYmIGxpbmUoIiQiKSA9PSAxCi0gICAgc2lsISBrZWVwaiBjYWxsIHM6TmV0cndCcm93c2UoMSxhOmRpcm5hbWUpCi0gICAgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zbikKKyAgICBzaWwhIGtlZXBqIGtlZXBhbHQgY2FsbCBzOk5ldHJ3QnJvd3NlKDEsYTpkaXJuYW1lKQorICAgIGtlZXBhbHQgY2FsbCBuZXRydyNOZXRyd1Jlc3RvcmVQb3NuKHN2cG9zbikKICAgIGVsc2VpZiBleGlzdHMoInM6dHJlZWZvcmNlcmVkcmF3IikKICAgICB1bmxldCBzOnRyZWVmb3JjZXJlZHJhdwotICAgIHNpbCEga2VlcGogY2FsbCBzOk5ldHJ3QnJvd3NlKDEsYTpkaXJuYW1lKQotICAgIGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvc24pCisgICAgc2lsISBrZWVwaiBrZWVwYWx0IGNhbGwgczpOZXRyd0Jyb3dzZSgxLGE6ZGlybmFtZSkKKyAgICBrZWVwYWx0IGNhbGwgbmV0cncjTmV0cndSZXN0b3JlUG9zbihzdnBvc24pCiAgICBlbmRpZgogICBlbmRpZgogICAiIGZvbGxvd2luZyBjb2RlIHdpcGVzIG91dCBjdXJyZW50bHkgdW51c2VkIG5ldHJ3IGJ1ZmZlcnMKQEAgLTc5NjgsNyArODM4MSw3IEBACiAgICBsZXQgYnVmbGFzdCA9IGJ1Zm5yKCIkIikKICAgIHdoaWxlIGlidWYgPD0gYnVmbGFzdAogICAgIGlmIGJ1Zndpbm5yKGlidWYpID09IC0xICYmIGlzZGlyZWN0b3J5KGJ1Zm5hbWUoaWJ1ZikpCi0gICAgIGV4ZSAic2lsISAiLmlidWYuImJ3ISIKKyAgICAgZXhlICJzaWwhIGtlZXBhbHQgIi5pYnVmLiJidyEiCiAgICAgZW5kaWYKICAgICBsZXQgaWJ1Zj0gaWJ1ZiArIDEKICAgIGVuZHdoaWxlCkBAIC03OTg0LDc0ICs4Mzk3LDM2IEBACiAiICBjYWxsIERlY2hvKCIoTG9jYWxMaXN0aW5nKSBybz0iLiZsOnJvLiIgbWE9Ii4mbDptYS4iIG1vZD0iLiZsOm1vZC4iIHdyYXA9Ii4mbDp3cmFwLiIgKGZpbGVuYW1lPCIuZXhwYW5kKCIlIikuIj4gd2luIyIud2lubnIoKS4iIGZ0PCIuJmZ0LiI+KSIpCiAiICBjYWxsIERlY2hvKCIoTG9jYWxMaXN0aW5nKSB0YWIjIi50YWJwYWdlbnIoKS4iIHdpbiMiLndpbm5yKCkuIiBidWYjIi5idWZucigiJSIpLiI8Ii5idWZuYW1lKCIlIikuIj4gbW9kaWZpZWQ9Ii4mbW9kaWZpZWQuIiBtb2RpZmlhYmxlPSIuJm1vZGlmaWFibGUuIiByZWFkb25seT0iLiZyZWFkb25seSkKIAotIiAgaWYgZXhpc3RzKCJiOm5ldHJ3X2N1cmRpciIpIHxjYWxsIERlY2hvKCdiOm5ldHJ3X2N1cmRpcjwnLmI6bmV0cndfY3VyZGlyLiI+IikgIHxlbHNlfGNhbGwgRGVjaG8oImI6bmV0cndfY3VyZGlyIGRvZXNuJ3QgZXhpc3QiKSB8ZW5kaWYKLSIgIGlmIGV4aXN0cygiZzpuZXRyd19zb3J0X2J5Iil8Y2FsbCBEZWNobygnZzpuZXRyd19zb3J0X2J5PCcuZzpuZXRyd19zb3J0X2J5LiI+Iil8ZWxzZXxjYWxsIERlY2hvKCJnOm5ldHJ3X3NvcnRfYnkgZG9lc24ndCBleGlzdCIpfGVuZGlmCisiICBpZiBleGlzdHMoImI6bmV0cndfY3VyZGlyIikgfGNhbGwgRGVjaG8oJyhMb2NhbExpc3RpbmcpIGI6bmV0cndfY3VyZGlyPCcuYjpuZXRyd19jdXJkaXIuIj4iKSAgfGVsc2V8Y2FsbCBEZWNobygiKExvY2FsTGlzdGluZykgYjpuZXRyd19jdXJkaXIgZG9lc24ndCBleGlzdCIpIHxlbmRpZgorIiAgaWYgZXhpc3RzKCJnOm5ldHJ3X3NvcnRfYnkiKXxjYWxsIERlY2hvKCcoTG9jYWxMaXN0aW5nKSBnOm5ldHJ3X3NvcnRfYnk8Jy5nOm5ldHJ3X3NvcnRfYnkuIj4iKXxlbHNlfGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpIGc6bmV0cndfc29ydF9ieSBkb2Vzbid0IGV4aXN0Iil8ZW5kaWYKIAogICAiIGdldCB0aGUgbGlzdCBvZiBmaWxlcyBjb250YWluZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CiAgIGxldCBkaXJuYW1lICAgID0gYjpuZXRyd19jdXJkaXIKICAgbGV0IGRpcm5hbWVsZW4gPSBzOlN0cmxlbihiOm5ldHJ3X2N1cmRpcikKLSAgbGV0IGZpbGVsaXN0ICAgPSBnbG9iKHM6Q29tcG9zZVBhdGgoZGlybmFtZSwiKiIpKQotIiAgY2FsbCBEZWNobygiKExvY2FsTGlzdGluZykgZ2xvYihkaXJuYW1lPCIuZGlybmFtZS4iLyo+KT0iLmZpbGVsaXN0KQotICBpZiBmaWxlbGlzdCAhPSAiIgotICAgbGV0IGZpbGVsaXN0PSBmaWxlbGlzdC4iXG4iCi0gIGVuZGlmCi0gIGxldCBmaWxlbGlzdD0gZmlsZWxpc3QuZ2xvYihzOkNvbXBvc2VQYXRoKGRpcm5hbWUsIi4qIikpCi0iICBjYWxsIERlY2hvKCIoTG9jYWxMaXN0aW5nKSBnbG9iKGRpcm5hbWU8Ii5kaXJuYW1lLiIvLio+KT0iLmZpbGVsaXN0KQorICBsZXQgZmlsZWxpc3QgICA9IGdsb2IoczpDb21wb3NlUGF0aChkaXJuYW1lLCIqIiksMCwxKQorICBsZXQgZmlsZWxpc3QgICA9IGZpbGVsaXN0ICsgZ2xvYihzOkNvbXBvc2VQYXRoKGRpcm5hbWUsIi4qIiksMCwxKQorIiAgY2FsbCBEZWNobygiKExvY2FsTGlzdGluZykgZmlsZWxpc3Q9Ii5maWxlbGlzdCkKIAotICAiIENvZGluZyBjaG9pY2U6IGVpdGhlciAgIGVsaWRlICAgLi8gaWYgcHJlc2VudAotICAiICAgICAgICAgICAgICAgIG9yICAgICAgIGluY2x1ZGUgLi8gaWYgbm90IHByZXNlbnQKLSAgaWYgZmlsZWxpc3QgPX4gJ1tcXC9dXC5bXFwvXVw9XChcblx8JFwpJwotICAgIiBlbGlkZSAvcGF0aC8uIGZyb20gZ2xvYigpIGVudHJpZXMgaWYgcHJlc2VudAotIiAgIGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpIGVsaWRlIC9wYXRoLy4gZnJvbSBnbG9iIGVudHJpZXMgaWYgcHJlc2VudCIpCi0gICBsZXQgZmlsZWxpc3QgPSBzdWJzdGl0dXRlKGZpbGVsaXN0LCdcbicsJ1x0JywnZycpCi0gICBsZXQgZmlsZWxpc3QgPSBzdWJzdGl0dXRlKGZpbGVsaXN0LCdeW15cdF1cK1svXFxdXC5cdCcsJycsJycpCi0gICBsZXQgZmlsZWxpc3QgPSBzdWJzdGl0dXRlKGZpbGVsaXN0LCdbXlx0XVwrWy9cXF1cLiQnLCcnLCcnKQotICAgbGV0IGZpbGVsaXN0ID0gc3Vic3RpdHV0ZShmaWxlbGlzdCwnXHRcenNbXlx0XVwrWy9cXF1cLlx0JywnJywnJykKLSAgIGxldCBmaWxlbGlzdCA9IHN1YnN0aXR1dGUoZmlsZWxpc3QsJ1x0JywnXG4nLCdnJykKLSAgZW5kaWYKLSIgIGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpIGZpbGVsaXN0PCIuZmlsZWxpc3QuIj4iKQotICBpZiBmaWxlbGlzdCAhfiAnW1xcL11cLlwuW1xcL11cPVwoXG5cfCRcKScKKyAgaWYgaW5kZXgoZmlsZWxpc3QsJy4uJykgPT0gLTEgJiYgYjpuZXRyd19jdXJkaXIgIT0gJy8nCiAgICAgIiBpbmNsdWRlIC4uLyBpbiB0aGUgZ2xvYigpIGVudHJ5IGlmIGl0cyBtaXNzaW5nCi0iICAgIGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpIGZvcmNpYmx5IHRhY2tpbmcgb24gLi4iKQotICAgbGV0IGZpbGVsaXN0PSBmaWxlbGlzdC4iXG4iLnM6Q29tcG9zZVBhdGgoYjpuZXRyd19jdXJkaXIsIi4uLyIpCi0iICAgY2FsbCBEZWNobygiKExvY2FsTGlzdGluZykgZmlsZWxpc3Q8Ii5maWxlbGlzdC4iPiIpCi0gIGVuZGlmCi0gIGlmIGI6bmV0cndfY3VyZGlyID09ICcvJwotICAgIiByZW1vdmUgLi4gZnJvbSBmaWxlbGlzdCB3aGVuIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHJvb3QgZGlyZWN0b3J5Ci0iICAgY2FsbCBEZWNobygiKExvY2FsTGlzdGluZykgcmVtb3ZlIC4uIGZyb20gZmlsZWxpc3QiKQotICAgbGV0IGZpbGVsaXN0PSBzdWJzdGl0dXRlKGZpbGVsaXN0LCcvXC5cLlxuJywnJywnJykKLSAgZW5kaWYKLSAgIiByZW1vdmUgbXVsdGlwbGUgY29udGlndW91cyBuZXdsaW5lcwotICBsZXQgZmlsZWxpc3Q9IHN1YnN0aXR1dGUoZmlsZWxpc3QsJ1xuXHsyLH0nLCdcbicsJ2dlJykKLSAgaWYgIWc6bmV0cndfY3lnd2luICYmIChoYXMoIndpbjMyIikgfHwgaGFzKCJ3aW45NSIpIHx8IGhhcygid2luNjQiKSB8fCBoYXMoIndpbjE2IikpCi0gICAiIGNoYW5nZSBhbGwgXHMgdG8gL3MKLSIgICBjYWxsIERlY2hvKCcoTG9jYWxMaXN0aW5nKSBjaGFuZ2UgYWxsIFxzIHRvIC9zJykKLSAgIGxldCBmaWxlbGlzdD0gc3Vic3RpdHV0ZShmaWxlbGlzdCwnXCcsJy8nLCdnJykKLSAgZWxzZQotICAgIiBlc2NhcGUgYWxsIFxzIHRvIFxcCi0iICAgY2FsbCBEZWNobygnKExvY2FsTGlzdGluZykgZXNjYXBlIGFsbCBccyB0byBcXCcpCi0gICBsZXQgZmlsZWxpc3Q9IHN1YnN0aXR1dGUoZmlsZWxpc3QsJ1wnLCdcXCcsJ2cnKQorIiAgIGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpIGZvcmNpYmx5IHRhY2tpbmcgb24gXCIuLlwiIikKKyAgIGxldCBmaWxlbGlzdD0gZmlsZWxpc3QrW3M6Q29tcG9zZVBhdGgoYjpuZXRyd19jdXJkaXIsIi4uLyIpXQorIiAgIGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpIGZpbGVsaXN0PSIuc3RyaW5nKGZpbGVsaXN0KSkKICAgZW5kaWYKIAogIiAgY2FsbCBEZWNobygiKExvY2FsTGlzdGluZykgKGJlZm9yZSB3aGlsZSkgZGlybmFtZTwiLmRpcm5hbWUuIj4iKQogIiAgY2FsbCBEZWNobygiKExvY2FsTGlzdGluZykgKGJlZm9yZSB3aGlsZSkgZGlybmFtZWxlbjwiLmRpcm5hbWVsZW4uIj4iKQotIiAgY2FsbCBEZWNobygiKExvY2FsTGlzdGluZykgKGJlZm9yZSB3aGlsZSkgZmlsZWxpc3Q8Ii5maWxlbGlzdC4iPiIpCi0KKyIgIGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpIChiZWZvcmUgd2hpbGUpIGZpbGVsaXN0PSIuc3RyaW5nKGZpbGVsaXN0KSkKIAogICBpZiBnZXQoZzosICduZXRyd19keW5hbWljX21heGZpbGVuYW1lbGVuJywgMCkKLSAgICBsZXQgZzpuZXRyd19tYXhmaWxlbmFtZWxlbiA9IG1heChtYXAoc3BsaXQoZmlsZWxpc3QsICdcbicpLCAnbGVuKGZuYW1lbW9kaWZ5KHY6dmFsLCAiOnQiKSknKSkgKyAxCisgICBsZXQgZmlsZWxpc3Rjb3B5ICAgICAgICAgICA9IG1hcChkZWVwY29weShmaWxlbGlzdCksJ2ZuYW1lbW9kaWZ5KHY6dmFsLCAiOnQiKScpCisgICBsZXQgZzpuZXRyd19tYXhmaWxlbmFtZWxlbiA9IG1heChtYXAoZmlsZWxpc3Rjb3B5LCdsZW4odjp2YWwpJykpICsgMQorIiAgIGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpIGR5bmFtaWNfbWF4ZmlsZW5hbWVsZW46IGZpbGVuYW1lcyAgICAgICAgICAgICA9Ii5zdHJpbmcoZmlsZWxpc3Rjb3B5KSkKKyIgICBjYWxsIERlY2hvKCIoTG9jYWxMaXN0aW5nKSBkeW5hbWljX21heGZpbGVuYW1lbGVuOiBnOm5ldHJ3X21heGZpbGVuYW1lbGVuPSIuZzpuZXRyd19tYXhmaWxlbmFtZWxlbikKICAgZW5kaWYKIAotICB3aGlsZSBmaWxlbGlzdCAhPSAiIgotICAgaWYgZmlsZWxpc3QgPX4gJ1xuJwotICAgIGxldCBmaWxlbmFtZSA9IHN1YnN0aXR1dGUoZmlsZWxpc3QsJ1xuLiokJywnJywnZScpCi0gICAgbGV0IGZpbGVsaXN0ID0gc3Vic3RpdHV0ZShmaWxlbGlzdCwnXi5cey19XG5cKC4qXCkkJywnXDEnLCdlJykKLSAgIGVsc2UKLSAgICBsZXQgZmlsZW5hbWUgPSBmaWxlbGlzdAotICAgIGxldCBmaWxlbGlzdCA9ICIiCi0gICBlbmRpZgotIiAgIGNhbGwgRGVjaG8oIiAiKQotIiAgIGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpICh3aGlsZSkgZmlsZWxpc3Q8Ii5maWxlbGlzdC4iPiIpCisgIGZvciBmaWxlbmFtZSBpbiBmaWxlbGlzdAorIiAgIGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpICAiKQogIiAgIGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpICh3aGlsZSkgZmlsZW5hbWU8Ii5maWxlbmFtZS4iPiIpCiAKICAgIGlmIGdldGZ0eXBlKGZpbGVuYW1lKSA9PSAibGluayIKQEAgLTgxMTcsNyArODQ5Miw3IEBACiAKICAgIGlmICAgICBnOm5ldHJ3X3NvcnRfYnkgPX4gIl50IgogICAgICIgc29ydCBieSB0aW1lIChoYW5kbGVzIHRpbWUgdXAgdG8gMSBxdWludGlsbGlvbiBzZWNvbmRzLCBVUykKLSIgICAgY2FsbCBEZWNobygiZ2V0ZnRpbWUoIi5maWxlbmFtZS4iKT0iLmdldGZ0aW1lKGZpbGVuYW1lKSkKKyIgICAgY2FsbCBEZWNobygiKExvY2FsTGlzdGluZykgZ2V0ZnRpbWUoIi5maWxlbmFtZS4iKT0iLmdldGZ0aW1lKGZpbGVuYW1lKSkKICAgICBsZXQgdCAgPSBnZXRmdGltZShmaWxlbmFtZSkKICAgICBsZXQgZnQgPSBzdHJwYXJ0KCIwMDAwMDAwMDAwMDAwMDAwMDAiLDEsMTgtc3RybGVuKHQpKS50CiAiICAgIGNhbGwgRGVjaG8oIihMb2NhbExpc3RpbmcpIGV4ZSBrZWVwanVtcHMgcHV0ID0nIi5mdC4nLycuZmlsZW5hbWUuIiciKQpAQCAtODEzOCw3ICs4NTEzLDcgQEAKICIgICAgY2FsbCBEZWNobygiKExvY2FsTGlzdGluZykgZXhlIGtlZXBqdW1wcyBwdXQgPSciLnBmaWxlLiInIikKICAgICBzaWwhIGtlZXBqIHB1dD1wZmlsZQogICAgZW5kaWYKLSAgZW5kd2hpbGUKKyAgZW5kZm9yCiAKICAgIiBjbGVhbnVwIGFueSB3aW5kb3dzIG1lc3MgYXQgZW5kLW9mLWxpbmUKICAgc2lsISBrZWVwaiBnL14kL2QKQEAgLTgxODIsMjUgKzg1NTcsMjUgQEAKICAgIGxldCBpdGFiICAgICAgID0gaXRhYiArIDEKICAgIHRhYm4KICAgZW5kd2hpbGUKLSIgIGNhbGwgRGVjaG8oImJ1ZnRhYmxpc3QiLnN0cmluZyhidWZ0YWJsaXN0KSkKLSIgIGNhbGwgRGVjaG8oInM6bmV0cndfYnJvd3NlbGlzdDwiLihleGlzdHMoInM6bmV0cndfYnJvd3NlbGlzdCIpPyBzdHJpbmcoczpuZXRyd19icm93c2VsaXN0KSA6ICIiKS4iPiIpCisiICBjYWxsIERlY2hvKCIoTG9jYWxCcm93c2VTaGVsbENtZFJlZnJlc2gpIGJ1ZnRhYmxpc3QiLnN0cmluZyhidWZ0YWJsaXN0KSkKKyIgIGNhbGwgRGVjaG8oIihMb2NhbEJyb3dzZVNoZWxsQ21kUmVmcmVzaCkgczpuZXRyd19icm93c2VsaXN0PCIuKGV4aXN0cygiczpuZXRyd19icm93c2VsaXN0Iik/IHN0cmluZyhzOm5ldHJ3X2Jyb3dzZWxpc3QpIDogIiIpLiI+IikKICAgIiAgR08gdGhyb3VnaCBhbGwgYnVmZmVycyBvbiBuZXRyd19icm93c2VsaXN0IChpZS4ganVzdCBsb2NhbC1uZXRydyBidWZmZXJzKToKICAgIiAgIHwgcmVmcmVzaCBhbnkgbmV0cncgd2luZG93CiAgICIgICB8IHdpcGUgb3V0IGFueSBub24tZGlzcGxheWluZyBuZXRydyBidWZmZXIKICAgbGV0IGN1cndpbiA9IHdpbm5yKCkKICAgbGV0IGlibCAgICA9IDAKICAgZm9yIGlidWYgaW4gczpuZXRyd19icm93c2VsaXN0Ci0iICAgY2FsbCBEZWNobygiYnVmd2lubnIoIi5pYnVmLiIpIGluZGV4KGJ1ZnRhYmxpc3QsIi5pYnVmLiIpPSIuaW5kZXgoYnVmdGFibGlzdCxpYnVmKSkKKyIgICBjYWxsIERlY2hvKCIoTG9jYWxCcm93c2VTaGVsbENtZFJlZnJlc2gpIGJ1Zndpbm5yKCIuaWJ1Zi4iKSBpbmRleChidWZ0YWJsaXN0LCIuaWJ1Zi4iKT0iLmluZGV4KGJ1ZnRhYmxpc3QsaWJ1ZikpCiAgICBpZiBidWZ3aW5ucihpYnVmKSA9PSAtMSAmJiBpbmRleChidWZ0YWJsaXN0LGlidWYpID09IC0xCiAgICAgIiB3aXBlIG91dCBhbnkgbm9uLWRpc3BsYXlpbmcgbmV0cncgYnVmZmVyCi0iICAgIGNhbGwgRGVjaG8oIndpcGluZyAgYnVmIyIuaWJ1ZiwiPCIuYnVmbmFtZShpYnVmKS4iPiIpCisiICAgIGNhbGwgRGVjaG8oIihMb2NhbEJyb3dzZVNoZWxsQ21kUmVmcmVzaCkgd2lwaW5nICBidWYjIi5pYnVmLCI8Ii5idWZuYW1lKGlidWYpLiI+IikKICAgICBleGUgInNpbCEgYmQgIi5mbmFtZWVzY2FwZShpYnVmKQogICAgIGNhbGwgcmVtb3ZlKHM6bmV0cndfYnJvd3NlbGlzdCxpYmwpCi0iICAgIGNhbGwgRGVjaG8oImJyb3dzZWxpc3Q9Ii5zdHJpbmcoczpuZXRyd19icm93c2VsaXN0KSkKKyIgICAgY2FsbCBEZWNobygiKExvY2FsQnJvd3NlU2hlbGxDbWRSZWZyZXNoKSBicm93c2VsaXN0PSIuc3RyaW5nKHM6bmV0cndfYnJvd3NlbGlzdCkpCiAgICAgY29udGludWUKICAgIGVsc2VpZiBpbmRleCh0YWJwYWdlYnVmbGlzdCgpLGlidWYpICE9IC0xCiAgICAgIiByZWZyZXNoIGFueSBuZXRydyBidWZmZXIKLSIgICAgY2FsbCBEZWNobygicmVmcmVzaCBidWYjIi5pYnVmLictPiB3aW4jJy5idWZ3aW5ucihpYnVmKSkKKyIgICAgY2FsbCBEZWNobygiKExvY2FsQnJvd3NlU2hlbGxDbWRSZWZyZXNoKSByZWZyZXNoIGJ1ZiMiLmlidWYuJy0+IHdpbiMnLmJ1Zndpbm5yKGlidWYpKQogICAgIGV4ZSBidWZ3aW5ucihpYnVmKS4id2luY21kIHciCiAgICAga2VlcGogY2FsbCBzOk5ldHJ3UmVmcmVzaCgxLHM6TmV0cndCcm93c2VDaGdEaXIoMSwnLi8nKSkKICAgIGVuZGlmCkBAIC04MjI5LDE1ICs4NjA0LDE1IEBACiAKICAgIiBpbml0aWFsaXplIGJyb3dzZWxpc3QsIGEgbGlzdCBvZiBidWZmZXIgbnVtYmVycyB0aGF0IHRoZSBsb2NhbCBicm93c2VyIGhhcyB1c2VkCiAgIGlmICFleGlzdHMoInM6bmV0cndfYnJvd3NlbGlzdCIpCi0iICAgY2FsbCBEZWNobygiaW5pdGlhbGl6ZSBzOm5ldHJ3X2Jyb3dzZWxpc3QiKQorIiAgIGNhbGwgRGVjaG8oIihMb2NhbEZhc3RCcm93c2VyKSBpbml0aWFsaXplIHM6bmV0cndfYnJvd3NlbGlzdCIpCiAgICBsZXQgczpuZXRyd19icm93c2VsaXN0PSBbXQogICBlbmRpZgogCiAgICIgYXBwZW5kIGN1cnJlbnQgYnVmZmVyIHRvIGZhc3Ricm93c2UgbGlzdAogICBpZiBlbXB0eShzOm5ldHJ3X2Jyb3dzZWxpc3QpIHx8IGJ1Zm5yKCIlIikgPiBzOm5ldHJ3X2Jyb3dzZWxpc3RbLTFdCi0iICAgY2FsbCBEZWNobygiYXBwZW5kbmcgY3VycmVudCBidWZmZXIgdG8gYnJvd3NlbGlzdCIpCisiICAgY2FsbCBEZWNobygiKExvY2FsRmFzdEJyb3dzZXIpIGFwcGVuZG5nIGN1cnJlbnQgYnVmZmVyIHRvIGJyb3dzZWxpc3QiKQogICAgY2FsbCBhZGQoczpuZXRyd19icm93c2VsaXN0LGJ1Zm5yKCIlIikpCi0iICAgY2FsbCBEZWNobygiYnJvd3NlbGlzdD0iLnN0cmluZyhzOm5ldHJ3X2Jyb3dzZWxpc3QpKQorIiAgIGNhbGwgRGVjaG8oIihMb2NhbEZhc3RCcm93c2VyKSBicm93c2VsaXN0PSIuc3RyaW5nKHM6bmV0cndfYnJvd3NlbGlzdCkpCiAgIGVuZGlmCiAKICAgIiBlbmFibGUgYXV0b2NtZCBldmVudHMgdG8gaGFuZGxlIHJlZnJlc2hpbmcvcmVtb3ZpbmcgbG9jYWwgYnJvd3NlciBidWZmZXJzCkBAIC04MjQ3LDE2ICs4NjIyLDE2IEBACiAgICIgICAgICAgICAgICAgICAgICAgICAgPTEgOiBtZWRpdW0gc3BlZWQsIHJlLXVzZSBkaXJlY3RvcnkgbGlzdGluZyBmb3IgcmVtb3RlIG9ubHkKICAgIiAgICAgICAgICAgICAgICAgICAgICA9MiA6IGZhc3QgICBzcGVlZCwgYWx3YXlzIHJlLXVzZSBkaXJlY3RvcnkgbGlzdGluZyB3aGVuIHBvc3NpYmxlCiAgIGlmICFleGlzdHMoInM6bmV0cndfYnJvd3Nlcl9zaGVsbGNtZCIpICYmIGc6bmV0cndfZmFzdGJyb3dzZSA8PSAxCi0iICAgY2FsbCBEZWNobygic2V0dGluZyB1cCBsb2NhbC1icm93c2VyIHNoZWxsIGNvbW1hbmQgcmVmcmVzaCIpCisiICAgY2FsbCBEZWNobygiKExvY2FsRmFzdEJyb3dzZXIpIHNldHRpbmcgdXAgbG9jYWwtYnJvd3NlciBzaGVsbCBjb21tYW5kIHJlZnJlc2giKQogICAgbGV0IHM6bmV0cndfYnJvd3Nlcl9zaGVsbGNtZD0gMQogICAgYXVncm91cCBBdU5ldHJ3U2hlbGxDbWQKICAgICBhdSEKICAgICBpZiAoaGFzKCJ3aW4zMiIpIHx8IGhhcygid2luOTUiKSB8fCBoYXMoIndpbjY0IikgfHwgaGFzKCJ3aW4xNiIpKQotIiAgICAgY2FsbCBEZWNobygiYXV0b2NtZDogU2hlbGxDbWRQb3N0ICogY2FsbCBzOkxvY2FsQnJvd3NlU2hlbGxDbWRSZWZyZXNoKCkiKQorIiAgICAgY2FsbCBEZWNobygiKExvY2FsRmFzdEJyb3dzZXIpIGF1dG9jbWQ6IFNoZWxsQ21kUG9zdCAqIGNhbGwgczpMb2NhbEJyb3dzZVNoZWxsQ21kUmVmcmVzaCgpIikKICAgICAgYXUgU2hlbGxDbWRQb3N0CQkJKgljYWxsIHM6TG9jYWxCcm93c2VTaGVsbENtZFJlZnJlc2goKQogICAgIGVsc2UKICAgICAgYXUgU2hlbGxDbWRQb3N0LEZvY3VzR2FpbmVkCSoJY2FsbCBzOkxvY2FsQnJvd3NlU2hlbGxDbWRSZWZyZXNoKCkKLSIgICAgIGNhbGwgRGVjaG8oImF1dG9jbWQ6IFNoZWxsQ21kUG9zdCxGb2N1c0dhaW5lZCAqIGNhbGwgczpMb2NhbEJyb3dzZVNoZWxsQ21kUmVmcmVzaCgpIikKKyIgICAgIGNhbGwgRGVjaG8oIihMb2NhbEZhc3RCcm93c2VyKSBhdXRvY21kOiBTaGVsbENtZFBvc3QsRm9jdXNHYWluZWQgKiBjYWxsIHM6TG9jYWxCcm93c2VTaGVsbENtZFJlZnJlc2goKSIpCiAgICAgZW5kaWYKICAgIGF1Z3JvdXAgRU5ECiAgIGVuZGlmCkBAIC04MjY0LDcgKzg2MzksNyBAQAogICAiIHVzZXIgbXVzdCBoYXZlIGNoYW5nZWQgZmFzdGJyb3dzZSB0byBpdHMgZmFzdCBzZXR0aW5nLCBzbyByZW1vdmUKICAgIiB0aGUgYXNzb2NpYXRlZCBhdXRvY21kIGV2ZW50cwogICBpZiBnOm5ldHJ3X2Zhc3Ricm93c2UgPiAxICYmIGV4aXN0cygiczpuZXRyd19icm93c2VyX3NoZWxsY21kIikKLSIgICBjYWxsIERlY2hvKCJyZW1vdmUgQXVOZXRyd1NoZWxsQ21kIGF1dGNtZCBncm91cCIpCisiICAgY2FsbCBEZWNobygiKExvY2FsRmFzdEJyb3dzZXIpIHJlbW92ZSBBdU5ldHJ3U2hlbGxDbWQgYXV0Y21kIGdyb3VwIikKICAgIHVubGV0IHM6bmV0cndfYnJvd3Nlcl9zaGVsbGNtZAogICAgYXVncm91cCBBdU5ldHJ3U2hlbGxDbWQKICAgICBhdSEKQEAgLTg1MzUsNyArODkxMCw5IEBACiAgIGxldCBlaWtlZXA9ICZlaQogICBzZXQgZWk9YWxsCiAgIGlmIGV4cGFuZCgiJSIpID09ICJOZXRyd01lc3NhZ2UiCi0gICBleGUgczp3aW5CZWZvcmVFcnIuIndpbmNtZCB3IgorICAgaWYgZXhpc3RzKCJzOndpbkJlZm9yZUVyciIpCisgICAgZXhlIHM6d2luQmVmb3JlRXJyLiJ3aW5jbWQgdyIKKyAgIGVuZGlmCiAgIGVuZGlmCiAKICAgaWYgYTowID4gMApAQCAtODU0NCw3ICs4OTIxLDcgQEAKIAogICAiIHJlc3RvcmUgd2luZG93CiAgIGlmIGV4aXN0cygidzpuZXRyd193aW5uciIpCi0iICAgY2FsbCBEZWNobygicmVzdG9yZSB3aW5kb3c6IGV4ZSBzaWwhICIudzpuZXRyd193aW5uci4id2luY21kIHciKQorIiAgIGNhbGwgRGVjaG8oIihOZXRyd1Jlc3RvcmVQb3NuKSByZXN0b3JlIHdpbmRvdzogZXhlIHNpbCEgIi53Om5ldHJ3X3dpbm5yLiJ3aW5jbWQgdyIpCiAgICBleGUgInNpbCEgIi53Om5ldHJ3X3dpbm5yLiJ3aW5jbWQgdyIKICAgZW5kaWYKICAgaWYgdjpzaGVsbF9lcnJvciA9PSAwCkBAIC04NTU1LDI5ICs4OTMyLDI5IEBACiAKICAgIiByZXN0b3JlIHRvcC1vZi1zY3JlZW4gbGluZQogICBpZiBleGlzdHMoInc6bmV0cndfaGxpbmUiKQotIiAgIGNhbGwgRGVjaG8oInJlc3RvcmUgdG9wb2ZzY3JlZW46IGV4ZSBrZWVwaiBub3JtISAiLnc6bmV0cndfaGxpbmUuIkcweiIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3UmVzdG9yZVBvc24pIHJlc3RvcmUgdG9wb2ZzY3JlZW46IGV4ZSBrZWVwaiBub3JtISAiLnc6bmV0cndfaGxpbmUuIkcweiIpCiAgICBleGUgImtlZXBqIG5vcm0hICIudzpuZXRyd19obGluZS4iRzB6XDxDUj4iCiAgIGVuZGlmCiAKICAgIiByZXN0b3JlIHBvc2l0aW9uCiAgIGlmIGV4aXN0cygidzpuZXRyd19saW5lIikgJiYgZXhpc3RzKCJ3Om5ldHJ3X2NvbCIpCi0iICAgY2FsbCBEZWNobygicmVzdG9yZSBwb3NuOiBleGUga2VlcGogbm9ybSEgIi53Om5ldHJ3X2xpbmUuIkcwIi53Om5ldHJ3X2NvbC4ifCIpCisiICAgY2FsbCBEZWNobygiKE5ldHJ3UmVzdG9yZVBvc24pIHJlc3RvcmUgcG9zbjogZXhlIGtlZXBqIG5vcm0hICIudzpuZXRyd19saW5lLiJHMCIudzpuZXRyd19jb2wuInwiKQogICAgZXhlICJrZWVwaiBub3JtISAiLnc6bmV0cndfbGluZS4iRzAiLnc6bmV0cndfY29sLiJcPGJhcj4iCiAgIGVuZGlmCiAKICAgbGV0ICZlaT0gZWlrZWVwCi0iICBjYWxsIERyZXQoIm5ldHJ3I05ldHJ3UmVzdG9yZVBvc24iKQorIiAgY2FsbCBEcmV0KCJuZXRydyNOZXRyd1Jlc3RvcmVQb3NuIDogbGluZSMiLmxpbmUoIi4iKS4iIGNvbCMiLmNvbCgiLiIpLiIgd2lubGluZSMiLndpbmxpbmUoKS4iIHdpbmNvbCMiLndpbmNvbCgpKQogZW5kZnVuCiAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAiIG5ldHJ3I05ldHJ3U2F2ZVBvc246IHNhdmVzIHBvc2l0aW9uIG9mIGN1cnNvciBvbiBzY3JlZW4ge3t7MgogZnVuISBuZXRydyNOZXRyd1NhdmVQb3NuKCkKLSIgIGNhbGwgRGZ1bmMoIm5ldHJ3I05ldHJ3U2F2ZVBvc24oKSIpCisiICBjYWxsIERmdW5jKCJuZXRydyNOZXRyd1NhdmVQb3NuKCkgbGluZSMiLmxpbmUoIi4iKS4iIGNvbCMiLmNvbCgiLiIpLiIgd2lubGluZSMiLndpbmxpbmUoKS4iIHdpbmNvbCMiLndpbmNvbCgpKQogICAiIFNhdmUgY3VycmVudCBsaW5lIGFuZCBjb2x1bW4KICAgbGV0IHc6bmV0cndfd2lubnI9IHdpbm5yKCkKICAgbGV0IHc6bmV0cndfbGluZSA9IGxpbmUoIi4iKQogICBsZXQgdzpuZXRyd19jb2wgID0gdmlydGNvbCgiLiIpCi0iICBjYWxsIERlY2hvKCJjdXJyZW50bHksIHdpbiMiLnc6bmV0cndfd2lubnIuIiBsaW5lIyIudzpuZXRyd19saW5lLiIgY29sIyIudzpuZXRyd19jb2wpCisiICBjYWxsIERlY2hvKCIoTmV0cndTYXZlUG9zbikgY3VycmVudGx5LCB3aW4jIi53Om5ldHJ3X3dpbm5yLiIgbGluZSMiLnc6bmV0cndfbGluZS4iIGNvbCMiLnc6bmV0cndfY29sKQogCiAgICIgU2F2ZSB0b3Atb2Ytc2NyZWVuIGxpbmUKICAga2VlcGogbm9ybSEgSDAKQEAgLTg4MDUsMTEgKzkxODIsMTEgQEAKICAgICIgdGhpbi1sb25nLXRyZWU6IGN1cnNvcmxpbmUsIHVzZXIncyBjdXJzb3Jjb2x1bW4KICAgICIgd2lkZSAgICAgICAgICA6IGN1cnNvcmxpbmUsIGN1cnNvcmNvbHVtbgogICAgaWYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpXSURFTElTVAotIiAgICBjYWxsIERlY2hvKCJjYXNlIGc6bmV0cndfY3Vyc29yPT0zIGFuZCB3aWRlOiBzZXRsb2NhbCBjdWwgY3VjIikKKyIgICAgY2FsbCBEZWNobygiY2FzZSBnOm5ldHJ3X2N1cnNvcj09MyBhbmQgd2lkZTogc2V0bCBjdWwgY3VjIikKICAgICBzZXRsIGN1cnNvcmxpbmUKICAgICBzZXRsIGN1cnNvcmNvbHVtbgogICAgZWxzZQotIiAgICBjYWxsIERlY2hvKCJjYXNlIGc6bmV0cndfY3Vyc29yPT0zIGFuZCBub3Qgd2lkZTogc2V0bG9jYWwgY3VsICh1c2UgdXNlcidzIGN1YykiKQorIiAgICBjYWxsIERlY2hvKCJjYXNlIGc6bmV0cndfY3Vyc29yPT0zIGFuZCBub3Qgd2lkZTogc2V0bCBjdWwgKHVzZSB1c2VyJ3MgY3VjKSIpCiAgICAgc2V0bCBjdXJzb3JsaW5lCiAgICAgbGV0ICZsOmN1cnNvcmNvbHVtbiAgID0gczpuZXRyd191c2VyY3VjCiAgICBlbmRpZgpAQCAtODgxNyw3ICs5MTk0LDcgQEAKICAgZWxzZWlmIGc6bmV0cndfY3Vyc29yID09IDIKICAgICIgdGhpbi1sb25nLXRyZWU6IGN1cnNvcmxpbmUsIHVzZXIncyBjdXJzb3Jjb2x1bW4KICAgICIgd2lkZSAgICAgICAgICA6IGN1cnNvcmxpbmUsIHVzZXIncyBjdXJzb3Jjb2x1bW4KLSIgICBjYWxsIERlY2hvKCJjYXNlIGc6bmV0cndfY3Vyc29yPT0yOiBzZXRsb2NhbCBjdWMgKHVzZSB1c2VyJ3MgY3VsKSIpCisiICAgY2FsbCBEZWNobygiY2FzZSBnOm5ldHJ3X2N1cnNvcj09Mjogc2V0bCBjdWMgKHVzZSB1c2VyJ3MgY3VsKSIpCiAgICBsZXQgJmw6Y3Vyc29yY29sdW1uID0gczpuZXRyd191c2VyY3VjCiAgICBzZXRsIGN1cnNvcmxpbmUKIApAQCAtODgyNiw3ICs5MjAzLDcgQEAKICAgICIgd2lkZSAgICAgICAgICA6IGN1cnNvcmxpbmUsICAgICAgICB1c2VyJ3MgY3Vyc29yY29sdW1uCiAgICBsZXQgJmw6Y3Vyc29yY29sdW1uID0gczpuZXRyd191c2VyY3VjCiAgICBpZiB3Om5ldHJ3X2xpc3RzdHlsZSA9PSBzOldJREVMSVNUCi0iICAgIGNhbGwgRGVjaG8oImNhc2UgZzpuZXRyd19jdXJzb3I9PTIgYW5kIHdpZGU6IHNldGxvY2FsIGN1bCAodXNlIHVzZXIncyBjdWMpIikKKyIgICAgY2FsbCBEZWNobygiY2FzZSBnOm5ldHJ3X2N1cnNvcj09MiBhbmQgd2lkZTogc2V0bCBjdWwgKHVzZSB1c2VyJ3MgY3VjKSIpCiAgICAgc2V0IGN1cnNvcmxpbmUKICAgIGVsc2UKICIgICAgY2FsbCBEZWNobygiY2FzZSBnOm5ldHJ3X2N1cnNvcj09MiBhbmQgbm90IHdpZGU6ICh1c2UgdXNlcidzIGN1bCxjdWMpIikKQEAgLTg4NjgsNyArOTI0NSw3IEBACiAgIGlmICFnOm5ldHJ3X2N5Z3dpbiAmJiAoaGFzKCJ3aW4zMiIpIHx8IGhhcygid2luOTUiKSB8fCBoYXMoIndpbjY0IikgfHwgaGFzKCJ3aW4xNiIpKQogICAgaWYgZXhpc3RzKCIrc2hlbGxzbGFzaCIpCiAgICAgbGV0IHNza2VlcD0gJnNoZWxsc2xhc2gKLSAgICBzZXRsb2NhbCBub3NoZWxsc2xhc2gKKyAgICBzZXRsIG5vc2hlbGxzbGFzaAogICAgIGxldCByZXN1bHQgICAgICA9IGRlbGV0ZShwYXRoKQogICAgIGxldCAmc2hlbGxzbGFzaCA9IHNza2VlcAogICAgZWxzZQpAQCAtODk0OCw3ICs5MzI1LDcgQEAKICAgIGlmIGI6bmV0cndfY3VyZGlyID1+ICcvJCcKICAgICBpZiBleGlzdHMoInc6bmV0cndfbGlzdHN0eWxlIikgJiYgdzpuZXRyd19saXN0c3R5bGUgPT0gczpUUkVFTElTVAogICAgICBmaWxlIE5ldHJ3VHJlZUxpc3RpbmcKLSAgICAgc2V0IGJ0PW5vd3JpdGUgbm9zd2YKKyAgICAgc2V0IGJ0PW5vd3JpdGUgbm9zd2YgYmg9aGlkZQogICAgICBubm8gPHNpbGVudD4gPGJ1ZmZlcj4gWwk6c2lsIGNhbGwgPFNJRD5UcmVlTGlzdE1vdmUoJ1snKTxjcj4KICAgICAgbm5vIDxzaWxlbnQ+IDxidWZmZXI+IF0JOnNpbCBjYWxsIDxTSUQ+VHJlZUxpc3RNb3ZlKCddJyk8Y3I+CiAgICAgZWxzZQpAQCAtODk1Nyw3ICs5MzM0LDcgQEAKICAgIGVuZGlmCiAgIGVuZGlmCiAKLSIgIGNhbGwgRHJldCgiczpOZXRyd0VuZXcgOiBidWYjIi5idWZucigiJSIpLiI8Ii5idWZuYW1lKCIlIikuIj4gZXhwYW5kKCUpPCIuZXhwYW5kKCIlIikuIj4gZXhwYW5kKCMpPCIuZXhwYW5kKCIjIikuIj4iKQorIiAgY2FsbCBEcmV0KCJzOk5ldHJ3RW5ldyA6IGJ1ZiMiLmJ1Zm5yKCIlIikuIjwiLmJ1Zm5hbWUoIiUiKS4iPiBleHBhbmQoJSk8Ii5leHBhbmQoIiUiKS4iPiBleHBhbmQoIyk8Ii5leHBhbmQoIiMiKS4iPiBiaD0iLiZiaCkKIGVuZGZ1bgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODk3Nyw3ICs5MzU0LDcgQEAKICAgICBlbmRpZgogICAgIGxldCBpd2luPSBpd2luICsgMQogICAgZW5kd2hpbGUKLSAgIGV4ZSBjdXJ3aW4uIndpbmNtZCB3IgorICAgZXhlICJrZWVwYWx0ICIuY3Vyd2luLiJ3aW5jbWQgdyIKICAgIGlmIGV4aXN0cygid2ludmFycyIpCiAiICAgIGNhbGwgRGVjaG8oImNvcHlpbmcgdyMiLml3aW4uIiB3aW5kb3cgdmFyaWFibGVzIHRvIHcjIi5jdXJ3aW4pCiAgICAgZm9yIGsgaW4ga2V5cyh3aW52YXJzKQpAQCAtOTEwNSw2ICs5NDgyLDkgQEAKICIKICIgICAgICAgICAgICAgczpuYmNkX2N1cnBvc197YnVmbnIoJyUnKX0gaXMgc2V0IHVwIGJ5IHM6TmV0cndCcm93c2VDaGdEaXIoKQogZnVuISBzOk5ldHJ3UmV4cGxvcmUoaXNsb2NhbCxkaXJuYW1lKQorICBpZiBleGlzdHMoInM6bmV0cndkcmFnIikKKyAgIHJldHVybgorICBlbmRpZgogIiAgY2FsbCBEZnVuYygiczpOZXRyd1JleHBsb3JlKCkgdzpuZXRyd19yZXhsb2NhbD0iLnc6bmV0cndfcmV4bG9jYWwuIiB3Om5ldHJ3X3JleGRpcjwiLnc6bmV0cndfcmV4ZGlyLiI+IikKICAgaWYgIWV4aXN0cygidzpuZXRyd19yZXhsb2NhbCIpCiAiICAgIiAgIGNhbGwgRHJldCgiczpOZXRyd1JleHBsb3JlKCkgdzpuZXRyd19yZXhsb2NhbCBkb2Vzbid0IGV4aXN0IikKQEAgLTkyMDQsNyArOTU4NCw3IEBACiAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAiIHM6U3RybGVuOiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiBhIHN0cmluZywgZXZlbiBpZiBpdHMge3t7MgotIiAgICAgICAgICAgdXNpbmcgdHdvLWJ5dGUgZXRjIGNoYXJhY3RlcnMuCisiICAgICAgICAgICB1c2luZyBtdWx0aXBsZS1ieXRlIGNoYXJhY3RlcnMuCiAiICAgICAgICAgICBTb2x1dGlvbiBmcm9tIE5pY29sYWkgV2VpYnVsbCwgdmltIGRvY3MgKDpoZWxwIHN0cmxlbigpKSwgVG9ueSBNZWNoZWx5bmNrLAogIiAgICAgICAgICAgYW5kIGEgYml0IGZyb20gbWUuCiAiICAgICAgICAgICBpZiBnOm5ldHJ3X3hzdHJsZW4gaXMgemVybyAoZGVmYXVsdCksIHRoZW4gdGhlIGJ1aWx0aW4gc3RybGVuKCkgZnVuY3Rpb24gaXMgdXNlZC4KQEAgLTkyMzEsNiArOTYxMSw3IEBACiAgICBjYWxsIHNldGxpbmUobGluZSgiLiIpLGE6eCkKICAgIGxldCByZXQ9IHZpcnRjb2woIiQiKSAtIDEKICAgIGtlZXBqIGQKKyAgIGtlZXBqIG5vcm0hIGsKICAgIGxldCAmbW9kPSBtb2RrZWVwCiAKICAgZWxzZQpkaWZmIC0tZ2l0IGEvcnVudGltZS9hdXRvbG9hZC9uZXRyd0ZpbGVIYW5kbGVycy52aW0gYi9ydW50aW1lL2F1dG9sb2FkL25ldHJ3RmlsZUhhbmRsZXJzLnZpbQppbmRleCBiMTFlM2NmLi44NGY3MGM0IDEwMDY0NAotLS0gYS9ydW50aW1lL2F1dG9sb2FkL25ldHJ3RmlsZUhhbmRsZXJzLnZpbQorKysgYi9ydW50aW1lL2F1dG9sb2FkL25ldHJ3RmlsZUhhbmRsZXJzLnZpbQpAQCAtMSw5ICsxLDkgQEAKICIgbmV0cndGaWxlSGFuZGxlcnM6IGNvbnRhaW5zIHZhcmlvdXMgZXh0ZW5zaW9uLWJhc2VkIGZpbGUgaGFuZGxlcnMgZm9yCiAiICAgICAgICAgICAgICAgICAgICBuZXRydydzIGJyb3dzZXJzJyB4IGNvbW1hbmQgKCJlWGVjdXRlIGxhdW5jaGVyIikKLSIgQXV0aG9yOglDaGFybGVzIEUuIENhbXBiZWxsLCBKci4KKyIgQXV0aG9yOglDaGFybGVzIEUuIENhbXBiZWxsCiAiIERhdGU6CQlNYXIgMTQsIDIwMTIKICIgVmVyc2lvbjoJMTFhCi0iIENvcHlyaWdodDogICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTIgQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIHt7ezEKKyIgQ29weXJpZ2h0OiAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMiBDaGFybGVzIEUuIENhbXBiZWxsIHt7ezEKICIgICAgICAgICAgICAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGNvZGUsCiAiICAgICAgICAgICAgICAgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQKICIgICAgICAgICAgICAgICBub3RpY2UgaXMgY29waWVkIHdpdGggaXQuIExpa2UgYW55dGhpbmcgZWxzZSB0aGF0J3MgZnJlZSwKZGlmZiAtLWdpdCBhL3J1bnRpbWUvYXV0b2xvYWQvbmV0cndTZXR0aW5ncy52aW0gYi9ydW50aW1lL2F1dG9sb2FkL25ldHJ3U2V0dGluZ3MudmltCmluZGV4IGVmMzYxZGMuLjY4MzQ4ZDggMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvYXV0b2xvYWQvbmV0cndTZXR0aW5ncy52aW0KKysrIGIvcnVudGltZS9hdXRvbG9hZC9uZXRyd1NldHRpbmdzLnZpbQpAQCAtMSw4ICsxLDggQEAKICIgbmV0cndTZXR0aW5ncy52aW06IG1ha2VzIG5ldHJ3IHNldHRpbmdzIHNpbXBsZXIKICIgRGF0ZToJCVNlcCAwMywgMjAwOAotIiBNYWludGFpbmVyOglDaGFybGVzIEUgQ2FtcGJlbGwsIEpyIDxkcmNoaXBOT1NQQU0gYXQgY2FtcGJlbGxmYW1pbHkgZG90IGJpej4KKyIgTWFpbnRhaW5lcjoJQ2hhcmxlcyBFIENhbXBiZWxsIDxkcmNoaXBOT1NQQU0gYXQgY2FtcGJlbGxmYW1pbHkgZG90IGJpej4KICIgVmVyc2lvbjoJMTMKLSIgQ29weXJpZ2h0OiAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNyBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4ge3t7MQorIiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDA3IENoYXJsZXMgRS4gQ2FtcGJlbGwge3t7MQogIiAgICAgICAgICAgICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoaXMgY29kZSwKICIgICAgICAgICAgICAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodAogIiAgICAgICAgICAgICAgIG5vdGljZSBpcyBjb3BpZWQgd2l0aCBpdC4gTGlrZSBhbnl0aGluZyBlbHNlIHRoYXQncyBmcmVlLApAQCAtNjMsNyArNjMsNyBAQAogICBlbmRpZgogCiAgIHB1dCA9JysgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwotICBwdXQgPScrICBOZXRyd1NldHRpbmdzOiAgYnkgQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuJworICBwdXQgPScrICBOZXRyd1NldHRpbmdzOiAgYnkgQ2hhcmxlcyBFLiBDYW1wYmVsbCcKICAgcHV0ID0nKyBQcmVzcyA8RjE+IHdpdGggY3Vyc29yIGF0b3AgYW55IGxpbmUgZm9yIGhlbHAnCiAgIHB1dCA9JysgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwogICBsZXQgczpuZXRyd19zZXR0aW5nc19zdG9wPSBsaW5lKCIuIikKZGlmZiAtLWdpdCBhL3J1bnRpbWUvYXV0b2xvYWQvdGFyLnZpbSBiL3J1bnRpbWUvYXV0b2xvYWQvdGFyLnZpbQppbmRleCBkNjcyMTI5Li41ZTc2ODcwIDEwMDY0NAotLS0gYS9ydW50aW1lL2F1dG9sb2FkL3Rhci52aW0KKysrIGIvcnVudGltZS9hdXRvbG9hZC90YXIudmltCkBAIC0xLDEzICsxLDEzIEBACiAiIHRhci52aW06IEhhbmRsZXMgYnJvd3NpbmcgdGFyZmlsZXMKICIgICAgICAgICAgICBBVVRPTE9BRCBQT1JUSU9OCi0iIERhdGU6CQkJSmFuIDE3LCAyMDEyCi0iIFZlcnNpb246CQkyOAotIiBNYWludGFpbmVyOglDaGFybGVzIEUgQ2FtcGJlbGwsIEpyIDxOZHJPY2hpcEBTY2FtcGJlbGxQZmFtaWx5LkFiaXpNLU5PU1BBTT4KKyIgRGF0ZToJCQlBcHIgMTcsIDIwMTMKKyIgVmVyc2lvbjoJCTI5CisiIE1haW50YWluZXI6CUNoYXJsZXMgRSBDYW1wYmVsbCA8TmRyT2NoaXBAU2NhbXBiZWxsUGZhbWlseS5BYml6TS1OT1NQQU0+CiAiIExpY2Vuc2U6CQlWaW0gTGljZW5zZSAgKHNlZSB2aW0ncyA6aGVscCBsaWNlbnNlKQogIgogIglDb250YWlucyBtYW55IGlkZWFzIGZyb20gTWljaGFlbCBUb3JlbidzIDx0YXIudmltPgogIgotIiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCAoQykgMjAwNS0yMDExIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiB7e3sxCisiIENvcHlyaWdodDogICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTEgQ2hhcmxlcyBFLiBDYW1wYmVsbCB7e3sxCiAiICAgICAgICAgICAgICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhpcyBjb2RlLAogIiAgICAgICAgICAgICAgIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0CiAiICAgICAgICAgICAgICAgbm90aWNlIGlzIGNvcGllZCB3aXRoIGl0LiBMaWtlIGFueXRoaW5nIGVsc2UgdGhhdCdzIGZyZWUsCkBAIC0yMiw3ICsyMiw3IEBACiBpZiAmY3AgfHwgZXhpc3RzKCJnOmxvYWRlZF90YXIiKQogIGZpbmlzaAogZW5kaWYKLWxldCBnOmxvYWRlZF90YXI9ICJ2MjgiCitsZXQgZzpsb2FkZWRfdGFyPSAidjI5IgogaWYgdjp2ZXJzaW9uIDwgNzAyCiAgZWNob2hsIFdhcm5pbmdNc2cKICBlY2hvICIqKip3YXJuaW5nKioqIHRoaXMgdmVyc2lvbiBvZiB0YXIgbmVlZHMgdmltIDcuMiIKQEAgLTMxLDYgKzMxLDcgQEAKIGVuZGlmCiBsZXQgczprZWVwY3BvPSAmY3BvCiBzZXQgY3BvJnZpbQorIkRlY2hvVGFiT24KICJjYWxsIERlY2hvKCJsb2FkaW5nIGF1dG9sb2FkL3Rhci52aW0iKQogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODAsNyArODEsNyBAQAogCiAiIHNldCB1cCBzaGVsbCBxdW90aW5nIGNoYXJhY3RlcgogaWYgIWV4aXN0cygiZzp0YXJfc2hxIikKLSBpZiBleGlzdHMoIiZzaHEiKSAmJiAmc2hxICE9ICIiCisgaWYgZXhpc3RzKCIrc2hxIikgJiYgZXhpc3RzKCImc2hxIikgJiYgJnNocSAhPSAiIgogICBsZXQgZzp0YXJfc2hxPSAmc2hxCiAgZWxzZWlmIGhhcygid2luMzIiKSB8fCBoYXMoIndpbjk1IikgfHwgaGFzKCJ3aW42NCIpIHx8IGhhcygid2luMTYiKQogICBpZiBleGlzdHMoImc6bmV0cndfY3lnd2luIikgJiYgZzpuZXRyd19jeWd3aW4KQEAgLTE0Nyw3ICsxNDgsNyBAQAogICBrZWVwaiAkCiAKICAgbGV0IHRhcmZpbGU9IGE6dGFyZmlsZQotICBpZiBoYXMoIndpbjMyIikgJiYgZXhlY3V0YWJsZSgiY3lncGF0aCIpCisgIGlmIGhhcygid2luMzJ1bml4IikgJiYgZXhlY3V0YWJsZSgiY3lncGF0aCIpCiAgICAiIGFzc3VtaW5nIGN5Z3dpbgogICAgbGV0IHRhcmZpbGU9c3Vic3RpdHV0ZShzeXN0ZW0oImN5Z3BhdGggLXUgIi5zaGVsbGVzY2FwZSh0YXJmaWxlLDApKSwnXG4kJywnJywnZScpCiAgIGVuZGlmCkBAIC0yMjcsNyArMjI4LDcgQEAKICAgIiBhYm91dCB0byBtYWtlIGEgbmV3IHdpbmRvdywgbmVlZCB0byB1c2UgYjp0YXJmaWxlCiAgIGxldCB0YXJmaWxlPSBiOnRhcmZpbGUKICAgbGV0IGN1cmZpbGU9IGV4cGFuZCgiJSIpCi0gIGlmIGhhcygid2luMzIiKSAmJiBleGVjdXRhYmxlKCJjeWdwYXRoIikKKyAgaWYgaGFzKCJ3aW4zMnVuaXgiKSAmJiBleGVjdXRhYmxlKCJjeWdwYXRoIikKICAgICIgYXNzdW1pbmcgY3lnd2luCiAgICBsZXQgdGFyZmlsZT1zdWJzdGl0dXRlKHN5c3RlbSgiY3lncGF0aCAtdSAiLnNoZWxsZXNjYXBlKHRhcmZpbGUsMCkpLCdcbiQnLCcnLCdlJykKICAgZW5kaWYKQEAgLTIzOSw2ICsyNDAsOCBAQAogICBsZXQgczp0YmxmaWxlX3t3aW5ucigpfT0gY3VyZmlsZQogICBjYWxsIHRhciNSZWFkKCJ0YXJmaWxlOiIudGFyZmlsZS4nOjonLmZuYW1lLDEpCiAgIGZpbGV0eXBlIGRldGVjdAorICBzZXQgbm9tb2QKKyAgZXhlICdjb20hIC1idWZmZXIgLW5hcmdzPT8gLWNvbXBsZXRlPWZpbGUgVGFyRGlmZgk6Y2FsbCB0YXIjRGlmZig8cS1hcmdzPiwiJy5mbmFtZWVzY2FwZShmbmFtZSkuJyIpJwogCiAgIGxldCAmcmVwb3J0PSByZXBrZWVwCiAiICBjYWxsIERyZXQoIlRhckJyb3dzZVNlbGVjdCA6IHM6dGJsZmlsZV8iLndpbm5yKCkuIjwiLnM6dGJsZmlsZV97d2lubnIoKX0uIj4iKQpAQCAtMjUyLDcgKzI1NSw3IEBACiAgIHNldCByZXBvcnQ9MTAKICAgbGV0IHRhcmZpbGUgPSBzdWJzdGl0dXRlKGE6Zm5hbWUsJ3RhcmZpbGU6XCguXHstfVwpOjouKiQnLCdcMScsJycpCiAgIGxldCBmbmFtZSAgID0gc3Vic3RpdHV0ZShhOmZuYW1lLCd0YXJmaWxlOi5cey19OjpcKC4qXCkkJywnXDEnLCcnKQotICBpZiBoYXMoIndpbjMyIikgJiYgZXhlY3V0YWJsZSgiY3lncGF0aCIpCisgIGlmIGhhcygid2luMzJ1bml4IikgJiYgZXhlY3V0YWJsZSgiY3lncGF0aCIpCiAgICAiIGFzc3VtaW5nIGN5Z3dpbgogICAgbGV0IHRhcmZpbGU9c3Vic3RpdHV0ZShzeXN0ZW0oImN5Z3BhdGggLXUgIi5zaGVsbGVzY2FwZSh0YXJmaWxlLDApKSwnXG4kJywnJywnZScpCiAgIGVuZGlmCkBAIC00MjUsNyArNDI4LDcgQEAKICAKICAgIGlmIGZuYW1lID1+ICcvJwogICAgIGxldCBkaXJwYXRoID0gc3Vic3RpdHV0ZShmbmFtZSwnL1teL11cKyQnLCcnLCdlJykKLSAgICBpZiBleGVjdXRhYmxlKCJjeWdwYXRoIikKKyAgICBpZiBoYXMoIndpbjMydW5peCIpICYmIGV4ZWN1dGFibGUoImN5Z3BhdGgiKQogICAgICBsZXQgZGlycGF0aCA9IHN1YnN0aXR1dGUoc3lzdGVtKCJjeWdwYXRoICIuc2hlbGxlc2NhcGUoZGlycGF0aCwgMCkpLCdcbicsJycsJ2UnKQogICAgIGVuZGlmCiAgICAgY2FsbCBta2RpcihkaXJwYXRoLCJwIikKQEAgLTQ0NSw3ICs0NDgsNyBAQAogICAgIGxldCB0YXJfc2VjdXJlPSAiICIKICAgIGVuZGlmCiAgICBleGUgInchICIuZm5hbWVlc2NhcGUoZm5hbWUpCi0gICBpZiBleGVjdXRhYmxlKCJjeWdwYXRoIikKKyAgIGlmIGhhcygid2luMzJ1bml4IikgJiYgZXhlY3V0YWJsZSgiY3lncGF0aCIpCiAgICAgbGV0IHRhcmZpbGUgPSBzdWJzdGl0dXRlKHN5c3RlbSgiY3lncGF0aCAiLnNoZWxsZXNjYXBlKHRhcmZpbGUsMCkpLCdcbicsJycsJ2UnKQogICAgZW5kaWYKICAKQEAgLTUwMSw2ICs1MDQsMzAgQEAKIGVuZGZ1bgogCiAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiB0YXIjRGlmZjoge3t7MgorZnVuISB0YXIjRGlmZih1c2VyZm5hbWUsZm5hbWUpCisiICBjYWxsIERmdW5jKCJ0YXIjRGlmZih1c2VyZm5hbWU8Ii5hOnVzZXJmbmFtZS4iPiBmbmFtZTwiLmE6Zm5hbWUuIikiKQorICBsZXQgZm5hbWU9IGE6Zm5hbWUKKyAgaWYgYTp1c2VyZm5hbWUgIT0gIiIKKyAgIGxldCBmbmFtZT0gYTp1c2VyZm5hbWUKKyAgZW5kaWYKKyAgaWYgZmlsZXJlYWRhYmxlKGZuYW1lKQorICAgIiBzZXRzIGN1cnJlbnQgZmlsZSAoZnJvbSB0YXJiYWxsKSBmb3IgZGlmZidpbmcKKyAgICIgc3BsaXRzIHdpbmRvdyB2ZXJ0aWNhbGx5CisgICAiIG9wZW5zIG9yaWdpbmFsIGZpbGUsIHNldHMgaXQgZm9yIGRpZmYnaW5nCisgICAiIHNldHMgdXAgYjp0YXJkaWZmX290aGVyYnVmIHZhcmlhYmxlcyBzbyBlYWNoIGJ1ZmZlciBrbm93cyBhYm91dCB0aGUgb3RoZXIgKGZvciBjbG9zaW5nIHB1cnBvc2VzKQorICAgZGlmZnRoaXMKKyAgIHdpbmNtZCB2CisgICBleGUgImUgIi5mbmFtZWVzY2FwZShmbmFtZSkKKyAgIGRpZmZ0aGlzCisgIGVsc2UKKyAgIHJlZHJhdyEKKyAgIGVjaG8gIioqKndhcm5pbmcqKiogdW5hYmxlIHRvIHJlYWQgZmlsZTwiLmZuYW1lLiI+IgorICBlbmRpZgorIiAgY2FsbCBEcmV0KCJ0YXIjRGlmZiIpCitlbmRmdW4KKworIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICIgczpSbWRpcjoge3t7MgogZnVuISBzOlJtZGlyKGZuYW1lKQogIiAgY2FsbCBEZnVuYygiUm1kaXIoZm5hbWU8Ii5hOmZuYW1lLiI+KSIpCmRpZmYgLS1naXQgYS9ydW50aW1lL2F1dG9sb2FkL3ppcC52aW0gYi9ydW50aW1lL2F1dG9sb2FkL3ppcC52aW0KaW5kZXggYWQ1Y2NlMi4uYjdhNWJmZiAxMDA2NDQKLS0tIGEvcnVudGltZS9hdXRvbG9hZC96aXAudmltCisrKyBiL3J1bnRpbWUvYXV0b2xvYWQvemlwLnZpbQpAQCAtMSwxMCArMSwxMCBAQAogIiB6aXAudmltOiBIYW5kbGVzIGJyb3dzaW5nIHppcGZpbGVzCiAiICAgICAgICAgICAgQVVUT0xPQUQgUE9SVElPTgotIiBEYXRlOgkJSmFuIDE3LCAyMDEyCi0iIFZlcnNpb246CTI1Ci0iIE1haW50YWluZXI6CUNoYXJsZXMgRSBDYW1wYmVsbCwgSnIgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0tTk9TUEFNPgorIiBEYXRlOgkJQXByIDE3LCAyMDEzCisiIFZlcnNpb246CTI2CisiIE1haW50YWluZXI6CUNoYXJsZXMgRSBDYW1wYmVsbCA8TmRyT2NoaXBAU2NhbXBiZWxsUGZhbWlseS5BYml6TS1OT1NQQU0+CiAiIExpY2Vuc2U6CVZpbSBMaWNlbnNlICAoc2VlIHZpbSdzIDpoZWxwIGxpY2Vuc2UpCi0iIENvcHlyaWdodDogICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTIgQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuIHt7ezEKKyIgQ29weXJpZ2h0OiAgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMiBDaGFybGVzIEUuIENhbXBiZWxsIHt7ezEKICIgICAgICAgICAgICAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGNvZGUsCiAiICAgICAgICAgICAgICAgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQKICIgICAgICAgICAgICAgICBub3RpY2UgaXMgY29waWVkIHdpdGggaXQuIExpa2UgYW55dGhpbmcgZWxzZSB0aGF0J3MgZnJlZSwKQEAgLTE5LDcgKzE5LDcgQEAKIGlmICZjcCB8fCBleGlzdHMoImc6bG9hZGVkX3ppcCIpCiAgZmluaXNoCiBlbmRpZgotbGV0IGc6bG9hZGVkX3ppcD0gInYyNSIKK2xldCBnOmxvYWRlZF96aXA9ICJ2MjYiCiBpZiB2OnZlcnNpb24gPCA3MDIKICBlY2hvaGwgV2FybmluZ01zZwogIGVjaG8gIioqKndhcm5pbmcqKiogdGhpcyB2ZXJzaW9uIG9mIHppcCBuZWVkcyB2aW0gNy4yIgpAQCAtMTg4LDEzICsxODgsMjMgQEAKICAgZWxzZQogICAgbGV0IHppcGZpbGUgPSBzdWJzdGl0dXRlKGE6Zm5hbWUsJ14uXHstfXppcGZpbGU6XCguXHstfVwpOjpbXlxcXS4qJCcsJ1wxJywnJykKICAgIGxldCBmbmFtZSAgID0gc3Vic3RpdHV0ZShhOmZuYW1lLCdeLlx7LX16aXBmaWxlOi5cey19OjpcKFteXFxdLipcKSQnLCdcMScsJycpCi0gICBsZXQgZm5hbWUgPSBzdWJzdGl0dXRlKGZuYW1lLCAnWycsICdbW10nLCAnZycpCisgICBsZXQgZm5hbWUgICA9IHN1YnN0aXR1dGUoZm5hbWUsICdbJywgJ1tbXScsICdnJykKICAgZW5kaWYKICIgIGNhbGwgRGVjaG8oInppcGZpbGU8Ii56aXBmaWxlLiI+IikKICIgIGNhbGwgRGVjaG8oImZuYW1lICA8Ii5mbmFtZS4iPiIpCiAKLSIgIGNhbGwgRGVjaG8oImV4ZSByISAiLmc6emlwX3VuemlwY21kLiIgLXAgLS0gIi5zOkVzY2FwZSh6aXBmaWxlLDEpLiIgIi5zOkVzY2FwZShmbmFtZWVzY2FwZShmbmFtZSksMSkpCi0gIGV4ZSAia2VlcGogc2lsISByISAiLmc6emlwX3VuemlwY21kLiIgLXAgLS0gIi5zOkVzY2FwZSh6aXBmaWxlLDEpLiIgIi5zOkVzY2FwZShmbmFtZWVzY2FwZShmbmFtZSksMSkKKyAgIiB0aGUgZm9sbG93aW5nIGNvZGUgZG9lcyBtdWNoIHRoZSBzYW1lIHRoaW5nIGFzCisgICIgICBleGUgImtlZXBqIHNpbCEgciEgIi5nOnppcF91bnppcGNtZC4iIC1wIC0tICIuczpFc2NhcGUoemlwZmlsZSwxKS4iICIuczpFc2NhcGUoZm5hbWVlc2NhcGUoZm5hbWUpLDEpCisgICIgYnV0IGFsbG93cyB6aXBmaWxlOi4uLiBlbnRyaWVzIGluIHF1aWNrZml4IGxpc3RzCisgIGxldCB0ZW1wID0gdGVtcG5hbWUoKQorICBsZXQgZm4gICA9IGV4cGFuZCgnJTpwJykKKyAgZXhlICJzaWwhICEiLmc6emlwX3VuemlwY21kLiIgLXAgLS0gIi5zOkVzY2FwZSh6aXBmaWxlLDEpLiIgIi5zOkVzY2FwZShmbmFtZWVzY2FwZShmbmFtZSksMSkuJyA+ICcudGVtcAorIiAgY2FsbCBEZWNobygiZXhlIHNpbCEgISIuZzp6aXBfdW56aXBjbWQuIiAtcCAtLSAiLnM6RXNjYXBlKHppcGZpbGUsMSkuIiAiLnM6RXNjYXBlKGZuYW1lZXNjYXBlKGZuYW1lKSwxKS4nID4gJy50ZW1wKQorICBzaWwgZXhlICdrZWVwYWx0IGZpbGUgJy50ZW1wCisgIHNpbCBrZWVwaiBlIQorICBzaWwgZXhlICdrZWVwYWx0IGZpbGUgJy5mbmFtZWVzY2FwZShmbikKKyAgY2FsbCBkZWxldGUodGVtcCkKKwogICBmaWxldHlwZSBkZXRlY3QKIAogICAiIGNsZWFudXAKQEAgLTI2Nyw3ICsyNzcsNyBAQAogCiAgIGlmIGZuYW1lID1+ICcvJwogICAgbGV0IGRpcnBhdGggPSBzdWJzdGl0dXRlKGZuYW1lLCcvW14vXVwrJCcsJycsJ2UnKQotICAgaWYgZXhlY3V0YWJsZSgiY3lncGF0aCIpCisgICBpZiBoYXMoIndpbjMydW5peCIpICYmIGV4ZWN1dGFibGUoImN5Z3BhdGgiKQogICAgIGxldCBkaXJwYXRoID0gc3Vic3RpdHV0ZShzeXN0ZW0oImN5Z3BhdGggIi5zOkVzY2FwZShkaXJwYXRoLDApKSwnXG4nLCcnLCdlJykKICAgIGVuZGlmCiAiICAgY2FsbCBEZWNobygibWtkaXIoZGlycGF0aDwiLmRpcnBhdGguIj4scCkiKQpAQCAtMjc5LDcgKzI4OSw3IEBACiAiICBjYWxsIERlY2hvKCJ6aXBmaWxlPCIuemlwZmlsZS4iPiBmbmFtZTwiLmZuYW1lLiI+IikKIAogICBleGUgInchICIuZm5hbWVlc2NhcGUoZm5hbWUpCi0gIGlmIGV4ZWN1dGFibGUoImN5Z3BhdGgiKQorICBpZiBoYXMoIndpbjMydW5peCIpICYmIGV4ZWN1dGFibGUoImN5Z3BhdGgiKQogICAgbGV0IHppcGZpbGUgPSBzdWJzdGl0dXRlKHN5c3RlbSgiY3lncGF0aCAiLnM6RXNjYXBlKHppcGZpbGUsMCkpLCdcbicsJycsJ2UnKQogICBlbmRpZgogCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9wYXR0ZXJuLnR4dCBiL3J1bnRpbWUvZG9jL3BhdHRlcm4udHh0CmluZGV4IDc1NjVjODkuLjMzMmRiZWUgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3BhdHRlcm4udHh0CisrKyBiL3J1bnRpbWUvZG9jL3BhdHRlcm4udHh0CkBAIC0xLDQgKzEsNCBAQAotKnBhdHRlcm4udHh0KiAgIEZvciBWaW0gdmVyc2lvbiA3LjMuICBMYXN0IGNoYW5nZTogMjAxMyBKYW4gMjUKKypwYXR0ZXJuLnR4dCogICBGb3IgVmltIHZlcnNpb24gNy4zLiAgTGFzdCBjaGFuZ2U6IDIwMTMgQXByIDIwCiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0xMDYxLDYgKzEwNjEsOCBAQAogCSAgYW55IGNoYXJhY3RlciB0aGF0J3Mgbm90IGluICJeXS1cYmRlcnRub1V1eCIuICAiW1x4eXpdIiBtYXRjaGVzICdcJywKIAkgICd4JywgJ3knIGFuZCAneicuICBJdCdzIGJldHRlciB0byB1c2UgIlxcIiB0aG91Z2gsIGZ1dHVyZSBleHBhbnNpb25zCiAJICBtYXkgdXNlIG90aGVyIGNoYXJhY3RlcnMgYWZ0ZXIgJ1wnLgorCS0gT21pdHRpbmcgdGhlIHRyYWlsaW5nIF0gaXMgbm90IGNvbnNpZGVyZWQgYW4gZXJyb3IuICJbXSIgd29ya3MgbGlrZQorCSAgIltdXSIsIGl0IG1hdGNoZXMgdGhlICddJyBjaGFyYWN0ZXIuCiAJLSBUaGUgZm9sbG93aW5nIHRyYW5zbGF0aW9ucyBhcmUgYWNjZXB0ZWQgd2hlbiB0aGUgJ2wnIGZsYWcgaXMgbm90CiAJICBpbmNsdWRlZCBpbiAnY3BvcHRpb25zJyB7bm90IGluIFZpfToKIAkJXGUJPEVzYz4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL3BpX2dldHNjcmlwdC50eHQgYi9ydW50aW1lL2RvYy9waV9nZXRzY3JpcHQudHh0CmluZGV4IDU1NDM1NzMuLmZhMjUyM2MgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3BpX2dldHNjcmlwdC50eHQKKysrIGIvcnVudGltZS9kb2MvcGlfZ2V0c2NyaXB0LnR4dApAQCAtMSwxMSArMSwxMSBAQAotKnBpX2dldHNjcmlwdC50eHQqICBGb3IgVmltIHZlcnNpb24gNy4wLiAgTGFzdCBjaGFuZ2U6IDIwMTEgSnVuIDIzCisqcGlfZ2V0c2NyaXB0LnR4dCogIEZvciBWaW0gdmVyc2lvbiA3LjAuICBMYXN0IGNoYW5nZTogMjAxMiBBcHIgMDcKID4KLQkJR0VUU0NSSVBUIFJFRkVSRU5DRSBNQU5VQUwgIGJ5IENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLgorCQlHRVRTQ1JJUFQgUkVGRVJFTkNFIE1BTlVBTCAgYnkgQ2hhcmxlcyBFLiBDYW1wYmVsbAogPAotQXV0aG9yczogIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiAgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHlBLk1iaXo+CitBdXRob3JzOiAgQ2hhcmxlcyBFLiBDYW1wYmVsbCAgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHlBLk1iaXo+CiAJICAocmVtb3ZlIE5PU1BBTSBmcm9tIHRoZSBlbWFpbCBhZGRyZXNzKQogCQkJCQkJKkdldExhdGVzdFZpbVNjcmlwdHMtY29weXJpZ2h0KgotQ29weXJpZ2h0OiAoYykgMjAwNC0yMDEyIGJ5IENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLgkqZ2x2cy1jb3B5cmlnaHQqCitDb3B5cmlnaHQ6IChjKSAyMDA0LTIwMTIgYnkgQ2hhcmxlcyBFLiBDYW1wYmVsbAkqZ2x2cy1jb3B5cmlnaHQqCiAJVGhlIFZJTSBMSUNFTlNFIChzZWUgfGNvcHlyaWdodHwpIGFwcGxpZXMgdG8gdGhlIGZpbGVzIGluIHRoaXMKIAlwYWNrYWdlLCBpbmNsdWRpbmcgZ2V0c2NyaXB0UGx1Z2luLnZpbSwgZ2V0c2NyaXB0LnZpbSwKIAlHZXRMYXRlc3RWaW1TY3JpcHRzLmRpc3QsIGFuZCBwaV9nZXRzY3JpcHQudHh0LCBleGNlcHQgdXNlICJnZXRzY3JpcHQiCkBAIC0zNDMsNiArMzQzLDExIEBACiAJZGVmYXVsdD0gJEhPTUUvdmltZmlsZXMgKHdpbmRvd3MpCiAJCU92ZXJyaWRlIHdoZXJlIDpBdXRvSW5zdGFsbDogc2NyaXB0cyB3aWxsIGJlIGluc3RhbGxlZC4KIAkJRG9lc24ndCBvdmVycmlkZSB2aW1iYWxsIGluc3RhbGxhdGlvbi4KKz4KKwlnOkdldExhdGVzdFZpbVNjcmlwdHNfc2NyaXB0YWRkcgorPCAgICAgICBkZWZhdWx0PSdodHRwOi8vdmltLnNvdXJjZWZvcmdlLm5ldC9zY3JpcHQucGhwP3NjcmlwdF9pZD0nCisJCU92ZXJyaWRlIHRoaXMgaWYgeW91ciBzeXN0ZW0gbmVlZHMKKwkgIC4uLiAgPSdodHRwOi8vdmltLnNvdXJjZWZvcmdlLm5ldC9zY3JpcHQvc2NyaXB0LnBocD9zY3JpcHRfaWQ9JwogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIDguIEdldExhdGVzdFZpbVNjcmlwdHMgQWxnb3JpdGhtCQkqZ2x2cy1hbGdvcml0aG0qICpnbHZzLWFsZyoKQEAgLTM4MCw3ICszODUsMTEgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogOS4gR2V0TGF0ZXN0VmltU2NyaXB0cyBIaXN0b3J5CQkqZ2V0c2NyaXB0LWhpc3RvcnkqICpnbHZzLWhpc3QqIHt7ezEKIAotdjQ0IEp1biAyMywgMjAxMSA6ICogaGFuZGxlcyBhZGRpdGlvbmFsIGRlY29tcHJlc3Npb24gb3B0aW9ucyBmb3IgdGFyYmFsbHMKK3YzNSBBcHIgMDcsIDIwMTIgOiAqIChNZW5nSHVhbiBZdSkgcG9pbnRlZCBvdXQgdGhhdCB0aGUgc2NyaXB0IHVybCBoYXMKKwkJICAgICBjaGFuZ2VkIChzb21ld2hhdCkuICBIb3dldmVyLCBpdCBkb2Vzbid0IHdvcmssIGFuZAorCQkgICAgIHRoZSBvcmlnaW5hbCBvbmUgZG9lcyAodW5kZXIgTGludXgpLiBJJ2xsIG1ha2UgaXQKKwkJICAgICB5ZXQtYW5vdGhlci1vcHRpb24uCit2MzQgSnVuIDIzLCAyMDExIDogKiBoYW5kbGVzIGFkZGl0aW9uYWwgZGVjb21wcmVzc2lvbiBvcHRpb25zIGZvciB0YXJiYWxscwogICAgICAgICAgICAgICAgICAgICAgKHRneiB0YXogdGJ6IHR4eikKIHYzMyBNYXkgMzEsIDIwMTEgOiAqIHVzaW5nIGZuYW1lZXNjYXBlKCkgaW5zdGVhZCBvZiBlc2NhcGUoKQogCQkgICAqICoueHogc3VwcG9ydApkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvcGlfbmV0cncudHh0IGIvcnVudGltZS9kb2MvcGlfbmV0cncudHh0CmluZGV4IGMxN2NhNWYuLjk4NTE1NjQgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvZG9jL3BpX25ldHJ3LnR4dAorKysgYi9ydW50aW1lL2RvYy9waV9uZXRydy50eHQKQEAgLTEsMTIgKzEsMTIgQEAKLSpwaV9uZXRydy50eHQqICBGb3IgVmltIHZlcnNpb24gNy4zLiAgTGFzdCBjaGFuZ2U6IDIwMTIgT2N0IDI1CisqcGlfbmV0cncudHh0KiAgRm9yIFZpbSB2ZXJzaW9uIDcuMy4gIExhc3QgY2hhbmdlOiAyMDEzIEFwciAxOQogCi0JICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICAgIE5FVFJXIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuCi0JICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BdXRob3I6ICBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4gIDxOZHJPY2hpcEBTY2FtcGJlbGxQZmFtaWx5LkFiaXpNPgorCSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgTkVUUlcgUkVGRVJFTkNFIE1BTlVBTCAgICBieSBDaGFybGVzIEUuIENhbXBiZWxsCisJICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXV0aG9yOiAgQ2hhcmxlcyBFLiBDYW1wYmVsbCAgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0+CiAJICAocmVtb3ZlIE5PU1BBTSBmcm9tIENhbXBiZWxsJ3MgZW1haWwgZmlyc3QpCiAKLUNvcHlyaWdodDogQ29weXJpZ2h0IChDKSAxOTk5LTIwMTIgQ2hhcmxlcyBFIENhbXBiZWxsLCBKciAgICAqbmV0cnctY29weXJpZ2h0KgorQ29weXJpZ2h0OiBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBDaGFybGVzIEUgQ2FtcGJlbGwgICAgKm5ldHJ3LWNvcHlyaWdodCoKIAlUaGUgVklNIExJQ0VOU0UgYXBwbGllcyB0byB0aGUgZmlsZXMgaW4gdGhpcyBwYWNrYWdlLCBpbmNsdWRpbmcKIAluZXRydy52aW0sIHBpX25ldHJ3LnR4dCwgbmV0cndGaWxlSGFuZGxlcnMudmltLCBuZXRyd1NldHRpbmdzLnZpbSwgYW5kCiAJc3ludGF4L25ldHJ3LnZpbS4gIExpa2UgYW55dGhpbmcgZWxzZSB0aGF0J3MgZnJlZSwgbmV0cncudmltIGFuZCBpdHMKQEAgLTI1LDgzICsyNSw4NyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAxLiBDb250ZW50cwkJCQkJCSpuZXRydy1jb250ZW50cyoge3t7MQogCi0xLiAgQ29udGVudHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctY29udGVudHN8Ci0yLiAgU3RhcnRpbmcgV2l0aCBOZXRydy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctc3RhcnR8Ci0zLiAgTmV0cncgUmVmZXJlbmNlLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctcmVmfAotICAgICAgRVhURVJOQUwgQVBQTElDQVRJT05TIEFORCBQUk9UT0NPTFMuLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWV4dGVybmFwcHwKLSAgICAgIFJFQURJTkcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1yZWFkfAotICAgICAgV1JJVElORy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXdyaXRlfAotICAgICAgU09VUkNJTkcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXNvdXJjZXwKLSAgICAgIERJUkVDVE9SWSBMSVNUSU5HLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1kaXJsaXN0fAotICAgICAgQ0hBTkdJTkcgVEhFIFVTRVJJRCBBTkQgUEFTU1dPUkQuLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWNoZ3VwfAotICAgICAgVkFSSUFCTEVTIEFORCBTRVRUSU5HUy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXZhcmlhYmxlc3wKLSAgICAgIFBBVEhTLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1wYXRofAotNC4gIE5ldHdvcmstT3JpZW50ZWQgRmlsZSBUcmFuc2Zlci4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXhmZXJ8Ci0gICAgICBORVRSQy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbmV0cmN8Ci0gICAgICBQQVNTV09SRC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctcGFzc3dkfAotNS4gIEFjdGl2YXRpb24uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWFjdGl2YXRlfAotNi4gIFRyYW5zcGFyZW50IFJlbW90ZSBGaWxlIEVkaXRpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXRyYW5zcGFyZW50fAotNy4gIEV4IENvbW1hbmRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWV4fAotOC4gIFZhcmlhYmxlcyBhbmQgT3B0aW9ucy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXZhcmlhYmxlc3wKLTkuICBCcm93c2luZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1icm93c2V8Ci0gICAgICBJbnRyb2R1Y3Rpb24gVG8gQnJvd3NpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctaW50cm8tYnJvd3NlfAotICAgICAgUXVpY2sgUmVmZXJlbmNlOiBNYXBzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWJyb3dzZS1tYXBzfAotICAgICAgUXVpY2sgUmVmZXJlbmNlOiBDb21tYW5kcy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWJyb3dzZS1jbWRzfAotICAgICAgQm9va21hcmtpbmcgQSBEaXJlY3RvcnkuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1ifAotICAgICAgQnJvd3NpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWNyfAotICAgICAgQnJvd3NpbmcgV2l0aCBBIEhvcml6b250YWxseSBTcGxpdCBXaW5kb3cuLi4uLi4uLi4ufG5ldHJ3LW98Ci0gICAgICBCcm93c2luZyBXaXRoIEEgTmV3IFRhYi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctdHwKLSAgICAgIEJyb3dzaW5nIFdpdGggQSBWZXJ0aWNhbGx5IFNwbGl0IFdpbmRvdy4uLi4uLi4uLi4uLnxuZXRydy12fAotICAgICAgQ2hhbmdlIExpc3RpbmcgU3R5bGUuKHRoaW4gd2lkZSBsb25nIHRyZWUpLi4uLi4uLi4ufG5ldHJ3LWl8Ci0gICAgICBDaGFuZ2luZyBUbyBBIEJvb2ttYXJrZWQgRGlyZWN0b3J5Li4uLi4uLi4uLi4uLi4uLi58bmV0cnctZ2J8Ci0gICAgICBDaGFuZ2luZyBUbyBBIFByZWRlY2Vzc29yIERpcmVjdG9yeS4uLi4uLi4uLi4uLi4uLi58bmV0cnctdXwKLSAgICAgIENoYW5naW5nIFRvIEEgU3VjY2Vzc29yIERpcmVjdG9yeS4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1VfAotICAgICAgQ3VzdG9taXppbmcgQnJvd3NpbmcgV2l0aCBBIFVzZXIgRnVuY3Rpb24uLi4uLi4uLi4ufG5ldHJ3LXh8Ci0gICAgICBEZWxldGluZyBCb29rbWFya3MuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbUJ8Ci0gICAgICBEZWxldGluZyBGaWxlcyBPciBEaXJlY3Rvcmllcy4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctRHwKLSAgICAgIERpcmVjdG9yeSBFeHBsb3JpbmcgQ29tbWFuZHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1leHBsb3JlfAotICAgICAgRXhwbG9yaW5nIFdpdGggU3RhcnMgYW5kIFBhdHRlcm5zLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXN0YXJ8Ci0gICAgICBEaXNwbGF5aW5nIEluZm9ybWF0aW9uIEFib3V0IEZpbGUuLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctcWZ8Ci0gICAgICBFZGl0IEZpbGUgT3IgRGlyZWN0b3J5IEhpZGluZyBMaXN0Li4uLi4uLi4uLi4uLi4uLi58bmV0cnctY3RybC1ofAotICAgICAgRWRpdGluZyBUaGUgU29ydGluZyBTZXF1ZW5jZS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LVN8Ci0gICAgICBGb3JjaW5nIHRyZWF0bWVudCBhcyBhIGZpbGUgb3IgZGlyZWN0b3J5Li4uLi4uLi4uLi58bmV0cnctZ2R8IHxuZXRydy1nZnwKLSAgICAgIEdvaW5nIFVwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy0tfAotICAgICAgSGlkaW5nIEZpbGVzIE9yIERpcmVjdG9yaWVzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWF8Ci0gICAgICBJbXByb3ZpbmcgQnJvd3NpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctc3NoLWhhY2t8Ci0gICAgICBMaXN0aW5nIEJvb2ttYXJrcyBBbmQgSGlzdG9yeS4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctcWJ8Ci0gICAgICBNYWtpbmcgQSBOZXcgRGlyZWN0b3J5Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctZHwKLSAgICAgIE1ha2luZyBUaGUgQnJvd3NpbmcgRGlyZWN0b3J5IFRoZSBDdXJyZW50IERpcmVjdG9yeXxuZXRydy1jfAotICAgICAgTWFya2luZyBGaWxlcy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1mfAotICAgICAgTWFya2luZyBGaWxlcyBCeSBSZWd1bGFyIEV4cHJlc3Npb24uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1yfAotICAgICAgTWFya2VkIEZpbGVzOiBBcmJpdHJhcnkgQ29tbWFuZC4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW14fAotICAgICAgTWFya2VkIEZpbGVzOiBDb21wcmVzc2lvbiBBbmQgRGVjb21wcmVzc2lvbi4uLi4uLi4ufG5ldHJ3LW16fAotICAgICAgTWFya2VkIEZpbGVzOiBDb3B5aW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1jfAotICAgICAgTWFya2VkIEZpbGVzOiBEaWZmLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1kfAotICAgICAgTWFya2VkIEZpbGVzOiBFZGl0aW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1lfAotICAgICAgTWFya2VkIEZpbGVzOiBHcmVwLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1nfAotICAgICAgTWFya2VkIEZpbGVzOiBIaWRpbmcgYW5kIFVuaGlkaW5nIGJ5IFN1ZmZpeC4uLi4uLi4ufG5ldHJ3LW1ofAotICAgICAgTWFya2VkIEZpbGVzOiBNb3ZpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1tfAotICAgICAgTWFya2VkIEZpbGVzOiBQcmludGluZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1wfAotICAgICAgTWFya2VkIEZpbGVzOiBTb3VyY2luZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1zfAotICAgICAgTWFya2VkIEZpbGVzOiBUYWdnaW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1UfAotICAgICAgTWFya2VkIEZpbGVzOiBTZXR0aW5nIHRoZSBUYXJnZXQgRGlyZWN0b3J5Li4uLi4uLi4ufG5ldHJ3LW10fAotICAgICAgTWFya2VkIEZpbGVzOiBVbm1hcmtpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW11fAotICAgICAgTmV0cncgQnJvd3NlciBWYXJpYWJsZXMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWJyb3dzZXItdmFyfAotICAgICAgTmV0cncgQnJvd3NpbmcgQW5kIE9wdGlvbiBJbmNvbXBhdGliaWxpdGllcy4uLi4uLi4ufG5ldHJ3LWluY29tcGF0aWJsZXwKLSAgICAgIE5ldHJ3IFNldHRpbmdzIFdpbmRvdy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1zZXR0aW5ncy13aW5kb3d8Ci0gICAgICBPYnRhaW5pbmcgQSBGaWxlLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctT3wKLSAgICAgIFByZXZpZXcgV2luZG93Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1wfAotICAgICAgUHJldmlvdXMgV2luZG93Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LVB8Ci0gICAgICBSZWZyZXNoaW5nIFRoZSBMaXN0aW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctY3RybC1sfAotICAgICAgUmVuYW1pbmcgRmlsZXMgT3IgRGlyZWN0b3JpZXMuLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1vdmV8Ci0gICAgICBSZXZlcnNpbmcgU29ydGluZyBPcmRlci4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctcnwKLSAgICAgIFNlbGVjdGluZyBTb3J0aW5nIFN0eWxlLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1zfAotICAgICAgU2V0dGluZyBFZGl0aW5nIFdpbmRvdy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LUN8Ci0xMC4gUHJvYmxlbXMgYW5kIEZpeGVzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctcHJvYmxlbXN8Ci0xMS4gRGVidWdnaW5nIE5ldHJ3IEl0c2VsZi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctZGVidWd8Ci0xMi4gSGlzdG9yeS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctaGlzdG9yeXwKLTEzLiBUb2RvLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy10b2RvfAotMTQuIENyZWRpdHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWNyZWRpdHN8CisxLiAgQ29udGVudHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWNvbnRlbnRzfAorMi4gIFN0YXJ0aW5nIFdpdGggTmV0cncuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1zdGFydHwKKzMuICBOZXRydyBSZWZlcmVuY2UuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctcmVmfAorICAgICAgRVhURVJOQUwgQVBQTElDQVRJT05TIEFORCBQUk9UT0NPTFMuLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1leHRlcm5hcHB8CisgICAgICBSRUFESU5HLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXJlYWR8CisgICAgICBXUklUSU5HLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXdyaXRlfAorICAgICAgU09VUkNJTkcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1zb3VyY2V8CisgICAgICBESVJFQ1RPUlkgTElTVElORy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWRpcmxpc3R8CisgICAgICBDSEFOR0lORyBUSEUgVVNFUklEIEFORCBQQVNTV09SRC4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWNoZ3VwfAorICAgICAgVkFSSUFCTEVTIEFORCBTRVRUSU5HUy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy12YXJpYWJsZXN8CisgICAgICBQQVRIUy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXBhdGh8Cis0LiAgTmV0d29yay1PcmllbnRlZCBGaWxlIFRyYW5zZmVyLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXhmZXJ8CisgICAgICBORVRSQy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW5ldHJjfAorICAgICAgUEFTU1dPUkQuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1wYXNzd2R8Cis1LiAgQWN0aXZhdGlvbi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWFjdGl2YXRlfAorNi4gIFRyYW5zcGFyZW50IFJlbW90ZSBGaWxlIEVkaXRpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy10cmFuc3BhcmVudHwKKzcuICBFeCBDb21tYW5kcy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctZXh8Cis4LiAgVmFyaWFibGVzIGFuZCBPcHRpb25zLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXZhcmlhYmxlc3wKKzkuICBCcm93c2luZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctYnJvd3NlfAorICAgICAgSW50cm9kdWN0aW9uIFRvIEJyb3dzaW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1pbnRyby1icm93c2V8CisgICAgICBRdWljayBSZWZlcmVuY2U6IE1hcHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWJyb3dzZS1tYXBzfAorICAgICAgUXVpY2sgUmVmZXJlbmNlOiBDb21tYW5kcy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1icm93c2UtY21kc3wKKyAgICAgIEJvb2ttYXJraW5nIEEgRGlyZWN0b3J5Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbWJ8CisgICAgICBCcm93c2luZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWNyfAorICAgICAgQnJvd3NpbmcgV2l0aCBBIEhvcml6b250YWxseSBTcGxpdCBXaW5kb3cuLi4uLi4uLi4uLnxuZXRydy1vfAorICAgICAgQnJvd3NpbmcgV2l0aCBBIE5ldyBUYWIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy10fAorICAgICAgQnJvd3NpbmcgV2l0aCBBIFZlcnRpY2FsbHkgU3BsaXQgV2luZG93Li4uLi4uLi4uLi4uLnxuZXRydy12fAorICAgICAgQ2hhbmdlIExpc3RpbmcgU3R5bGUuKHRoaW4gd2lkZSBsb25nIHRyZWUpLi4uLi4uLi4uLnxuZXRydy1pfAorICAgICAgQ2hhbmdpbmcgVG8gQSBCb29rbWFya2VkIERpcmVjdG9yeS4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1nYnwKKyAgICAgIENoYW5naW5nIFRvIEEgUHJlZGVjZXNzb3IgRGlyZWN0b3J5Li4uLi4uLi4uLi4uLi4uLi58bmV0cnctdXwKKyAgICAgIENoYW5naW5nIFRvIEEgU3VjY2Vzc29yIERpcmVjdG9yeS4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctVXwKKyAgICAgIEN1c3RvbWl6aW5nIEJyb3dzaW5nIFdpdGggQSBVc2VyIEZ1bmN0aW9uLi4uLi4uLi4uLi58bmV0cncteHwKKyAgICAgIERlbGV0aW5nIEJvb2ttYXJrcy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbUJ8CisgICAgICBEZWxldGluZyBGaWxlcyBPciBEaXJlY3Rvcmllcy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LUR8CisgICAgICBEaXJlY3RvcnkgRXhwbG9yaW5nIENvbW1hbmRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWV4cGxvcmV8CisgICAgICBFeHBsb3JpbmcgV2l0aCBTdGFycyBhbmQgUGF0dGVybnMuLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXN0YXJ8CisgICAgICBEaXNwbGF5aW5nIEluZm9ybWF0aW9uIEFib3V0IEZpbGUuLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXFmfAorICAgICAgRWRpdCBGaWxlIE9yIERpcmVjdG9yeSBIaWRpbmcgTGlzdC4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1jdHJsLWh8CisgICAgICBFZGl0aW5nIFRoZSBTb3J0aW5nIFNlcXVlbmNlLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LVN8CisgICAgICBGb3JjaW5nIHRyZWF0bWVudCBhcyBhIGZpbGUgb3IgZGlyZWN0b3J5Li4uLi4uLi4uLi4ufG5ldHJ3LWdkfCB8bmV0cnctZ2Z8CisgICAgICBHb2luZyBVcC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LS18CisgICAgICBIaWRpbmcgRmlsZXMgT3IgRGlyZWN0b3JpZXMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWF8CisgICAgICBJbXByb3ZpbmcgQnJvd3NpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXNzaC1oYWNrfAorICAgICAgTGlzdGluZyBCb29rbWFya3MgQW5kIEhpc3RvcnkuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1xYnwKKyAgICAgIE1ha2luZyBBIE5ldyBEaXJlY3RvcnkuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctZHwKKyAgICAgIE1ha2luZyBUaGUgQnJvd3NpbmcgRGlyZWN0b3J5IFRoZSBDdXJyZW50IERpcmVjdG9yeS58bmV0cnctY3wKKyAgICAgIE1hcmtpbmcgRmlsZXMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbWZ8CisgICAgICBVbm1hcmtpbmcgRmlsZXMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1GfAorICAgICAgTWFya2luZyBGaWxlcyBCeSBRdWlja0ZpeCBMaXN0Li4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1xRnwKKyAgICAgIE1hcmtpbmcgRmlsZXMgQnkgUmVndWxhciBFeHByZXNzaW9uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbXJ8CisgICAgICBNYXJrZWQgRmlsZXM6IEFyYml0cmFyeSBDb21tYW5kLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW14fAorICAgICAgTWFya2VkIEZpbGVzOiBDb21wcmVzc2lvbiBBbmQgRGVjb21wcmVzc2lvbi4uLi4uLi4uLnxuZXRydy1tenwKKyAgICAgIE1hcmtlZCBGaWxlczogQ29weWluZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbWN8CisgICAgICBNYXJrZWQgRmlsZXM6IERpZmYuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1kfAorICAgICAgTWFya2VkIEZpbGVzOiBFZGl0aW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1tZXwKKyAgICAgIE1hcmtlZCBGaWxlczogR3JlcC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbWd8CisgICAgICBNYXJrZWQgRmlsZXM6IEhpZGluZyBhbmQgVW5oaWRpbmcgYnkgU3VmZml4Li4uLi4uLi4ufG5ldHJ3LW1ofAorICAgICAgTWFya2VkIEZpbGVzOiBNb3ZpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1tbXwKKyAgICAgIE1hcmtlZCBGaWxlczogUHJpbnRpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbXB8CisgICAgICBNYXJrZWQgRmlsZXM6IFNvdXJjaW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1zfAorICAgICAgTWFya2VkIEZpbGVzOiBTZXR0aW5nIHRoZSBUYXJnZXQgRGlyZWN0b3J5Li4uLi4uLi4uLnxuZXRydy1tdHwKKyAgICAgIE1hcmtlZCBGaWxlczogVGFnZ2luZy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbVR8CisgICAgICBNYXJrZWQgRmlsZXM6IFRhcmdldCBEaXJlY3RvcnkgVXNpbmcgQm9va21hcmtzLi4uLi4ufG5ldHJ3LVRifAorICAgICAgTWFya2VkIEZpbGVzOiBUYXJnZXQgRGlyZWN0b3J5IFVzaW5nIEhpc3RvcnkuLi4uLi4uLnxuZXRydy1UaHwKKyAgICAgIE1hcmtlZCBGaWxlczogVW5tYXJraW5nLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbXV8CisgICAgICBOZXRydyBCcm93c2VyIFZhcmlhYmxlcy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWJyb3dzZXItdmFyfAorICAgICAgTmV0cncgQnJvd3NpbmcgQW5kIE9wdGlvbiBJbmNvbXBhdGliaWxpdGllcy4uLi4uLi4uLnxuZXRydy1pbmNvbXBhdGlibGV8CisgICAgICBOZXRydyBTZXR0aW5ncyBXaW5kb3cuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXNldHRpbmdzLXdpbmRvd3wKKyAgICAgIE9idGFpbmluZyBBIEZpbGUuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctT3wKKyAgICAgIFByZXZpZXcgV2luZG93Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctcHwKKyAgICAgIFByZXZpb3VzIFdpbmRvdy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctUHwKKyAgICAgIFJlZnJlc2hpbmcgVGhlIExpc3RpbmcuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctY3RybC1sfAorICAgICAgUmV2ZXJzaW5nIFNvcnRpbmcgT3JkZXIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1yfAorICAgICAgUmVuYW1pbmcgRmlsZXMgT3IgRGlyZWN0b3JpZXMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1SfAorICAgICAgU2VsZWN0aW5nIFNvcnRpbmcgU3R5bGUuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1zfAorICAgICAgU2V0dGluZyBFZGl0aW5nIFdpbmRvdy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1DfAorMTAuIFByb2JsZW1zIGFuZCBGaXhlcy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1wcm9ibGVtc3wKKzExLiBEZWJ1Z2dpbmcgTmV0cncgSXRzZWxmLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctZGVidWd8CisxMi4gSGlzdG9yeS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWhpc3Rvcnl8CisxMy4gVG9kby4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXRvZG98CisxNC4gQ3JlZGl0cy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LWNyZWRpdHN8CiAKIHtWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGlzfQogCkBAIC0xNDIsNyArMTQ2LDcgQEAKIDwKIFdpbmRvd3MnIGZ0cCBkb2Vzbid0IHN1cHBvcnQgLm5ldHJjOyBob3dldmVyLCBvbmUgbWF5IGhhdmUgaW4gb25lJ3MgLnZpbXJjOiAgPgogCi0JbGV0IGc6bmV0cndfZnRwX2NtZD0gJ2M6XFdpbmRvd3NcU3lzdGVtMzJcZnRwIC1zOkM6XFVzZXJzXE15c2VsZlxNQUNISU5FJworICAgbGV0IGc6bmV0cndfZnRwX2NtZD0gJ2M6XFdpbmRvd3NcU3lzdGVtMzJcZnRwIC1zOkM6XFVzZXJzXE15c2VsZlxNQUNISU5FJwogPAogTmV0cncgd2lsbCBzdWJzdGl0dXRlIHRoZSBob3N0J3MgbWFjaGluZSBuYW1lIGZvciBNQUNISU5FIGZyb20gdGhlIHVybCBpdCBpcwogYXR0ZW1wdGluZyB0byBvcGVuLCBhbmQgc28gb25lIG1heSBzcGVjaWZ5ID4KQEAgLTI4Miw3ICsyODYsNyBAQAogCTpOc291cmNlICJzY3A6Ly9bdXNlckBdbWFjaGluZVtbOiNdcG9ydF0vcGF0aCIJdXNlcyBzY3AKIAk6TnNvdXJjZSAic2Z0cDovL1t1c2VyQF1tYWNoaW5lL3BhdGgiCQl1c2VzIHNmdHAKIAotRElSRUNUT1JZIExJU1RJTkcJCQkJKm5ldHJ3LXRyYWlsaW5nc2xhc2gqICpuZXRydy1kaXJsaXN0KiB7e3syCitESVJFQ1RPUlkgTElTVElORwkJCSpuZXRydy10cmFpbGluZ3NsYXNoKiAqbmV0cnctZGlybGlzdCoge3t7MgogCiAJT25lIG1heSBicm93c2UgYSBkaXJlY3RvcnkgdG8gZ2V0IGEgbGlzdGluZyBieSBzaW1wbHkgYXR0ZW1wdGluZyB0bwogCWVkaXQgdGhlIGRpcmVjdG9yeTogPgpAQCAtNTM4LDggKzU0Miw4IEBACiBmb3IgTUFDSElORS4gIEhlbmNlIG9uZSBjYW4gaGF2ZSBtdWx0aXBsZSBtYWNoaW5lLmZ0cCBmaWxlcyBjb250YWluaW5nIGxvZ2luCiBhbmQgcGFzc3dvcmQgZm9yIGZ0cC4gIEV4YW1wbGU6ID4KIAotCWxldCBnOm5ldHJ3X2Z0cF9jbWQ9ICdjOlxXaW5kb3dzXFN5c3RlbTMyXGZ0cCAtczpDOlxVc2Vyc1xNeXNlbGZcTUFDSElORScKLQl2aW0gZnRwOi8vbXlob3N0LnNvbWV3aGVyZS5uZXQvCisgICAgbGV0IGc6bmV0cndfZnRwX2NtZD0gJ2M6XFdpbmRvd3NcU3lzdGVtMzJcZnRwIC1zOkM6XFVzZXJzXE15c2VsZlxNQUNISU5FJworICAgIHZpbSBmdHA6Ly9teWhvc3Quc29tZXdoZXJlLm5ldC8KIHdpbGwgdXNlIGEgZmlsZSA+CiAJQzpcVXNlcnNcTXlzZWxmXG15aG9zdC5mdHAKIDwKQEAgLTEwODYsOCArMTA5MCw4IEBACiAJPDItbGVmdG1vdXNlPgkoZ3ZpbSBvbmx5KSB3aGVuOgogCSAgICAgICAgICAgICAgICAgKiBpbiBhIG5ldHJ3LXNlbGVjdGVkIGZpbGUsIEFORAogCQkgICAgICAgICAqIHxnOm5ldHJ3X3JldG1hcHwgPT0gMSAgICAgQU5ECi0JCSAgICAgICAgICogdGhlIHVzZXIgZG9lc24ndCBhbHJlYWR5IGhhdmUgYSA8Mi1sZWZ0bW91c2U+IG1hcHBpbmcKLQkJCSAgIGRlZmluZWQgYmVmb3JlIG5ldHJ3IGlzIGF1dG9sb2FkZWQsCisJCSAgICAgICAgICogdGhlIHVzZXIgZG9lc24ndCBhbHJlYWR5IGhhdmUgYSA8Mi1sZWZ0bW91c2U+CisJCQkgICBtYXBwaW5nIGRlZmluZWQgYmVmb3JlIG5ldHJ3IGlzIGF1dG9sb2FkZWQsCiAJCQl0aGVuIGEgZG91YmxlIGNsaWNrZWQgbGVmdG1vdXNlIGJ1dHRvbiB3aWxsIHJldHVybgogCQkJdG8gdGhlIG5ldHJ3IGJyb3dzZXIgd2luZG93LiAgU2VlIHxnOm5ldHJ3X3JldG1hcHwuCiAJPHMtbGVmdG1vdXNlPgkoZ3ZpbSBvbmx5KSBsaWtlIG1mLCB3aWxsIG1hcmsgZmlsZXMKQEAgLTExODMsMTcgKzExODcsMTggQEAKIAogQXNzb2NpYXRlZCBzZXR0aW5nIHZhcmlhYmxlczogfGc6bmV0cndfYWx0b3wgfGc6bmV0cndfd2luc2l6ZXwKIAotUmVsYXRlZCBBY3Rpb25zIHxuZXRydy1jcnwgfG5ldHJ3LXB8IHxuZXRydy10fCB8bmV0cnctVHwgfG5ldHJ3LXZ8CitSZWxhdGVkIEFjdGlvbnMgfG5ldHJ3LWNyfCB8bmV0cnctcHwgfG5ldHJ3LXR8IHxuZXRydy12fAogQXNzb2NpYXRlZCBzZXR0aW5nIHZhcmlhYmxlczoKICAgIHxnOm5ldHJ3X2FsdG98ICAgIGNvbnRyb2wgYWJvdmUvYmVsb3cgc3BsaXR0aW5nCiAgICB8ZzpuZXRyd193aW5zaXplfCBjb250cm9sIGluaXRpYWwgc2l6aW5nCiAKLUJST1dTSU5HIFdJVEggQSBORVcgVEFCCQkJCSpuZXRydy10KiAqbmV0cnctVCoge3t7MgorQlJPV1NJTkcgV0lUSCBBIE5FVyBUQUIJCQkJKm5ldHJ3LXQqCiAKIE5vcm1hbGx5IG9uZSBlbnRlcnMgYSBmaWxlIG9yIGRpcmVjdG9yeSB1c2luZyB0aGUgPGNyPi4gIFRoZSAidCIgbWFwCiBhbGxvd3Mgb25lIHRvIG9wZW4gYSBuZXcgd2luZG93IGhvbGRpbmcgdGhlIG5ldyBkaXJlY3RvcnkgbGlzdGluZyBvciBmaWxlIGluCi1hIG5ldyB0YWIuICBUaGUgIlQiIHZlcnNpb24gcHV0cyB0aGUgZmlsZSBvciBkaXJlY3RvcnkgaW50byBhIGJhY2tncm91bmQgdGFiCi0oc2VlIHxnVHwpCithIG5ldyB0YWIuCisKK0lmIHlvdSdkIGxpa2UgdG8gaGF2ZSB0aGUgbmV3IGxpc3RpbmcgaW4gYSBiYWNrZ3JvdW5kIHRhYiwgdXNlIHxnVHwuCiAKIFJlbGF0ZWQgQWN0aW9ucyB8bmV0cnctY3J8IHxuZXRydy1vfCB8bmV0cnctcHwgfG5ldHJ3LXZ8CiBBc3NvY2lhdGVkIHNldHRpbmcgdmFyaWFibGVzOgpAQCAtMTIxMyw3ICsxMjE4LDcgQEAKIAogQXNzb2NpYXRlZCBzZXR0aW5nIHZhcmlhYmxlOiB8ZzpuZXRyd19hbHR2fCB8ZzpuZXRyd193aW5zaXplfAogCi1SZWxhdGVkIEFjdGlvbnMgfG5ldHJ3LWNyfCB8bmV0cnctb3wgfG5ldHJ3LXR8IHxuZXRydy1UfCB8bmV0cnctdnwKK1JlbGF0ZWQgQWN0aW9ucyB8bmV0cnctY3J8IHxuZXRydy1vfCB8bmV0cnctdHwgfG5ldHJ3LXZ8CiBBc3NvY2lhdGVkIHNldHRpbmcgdmFyaWFibGVzOgogICAgfGc6bmV0cndfYWx0dnwgICAgY29udHJvbCByaWdodC9sZWZ0IHNwbGl0dGluZwogICAgfGc6bmV0cndfd2luc2l6ZXwgY29udHJvbCBpbml0aWFsIHNpemluZwpAQCAtMTI3Niw2ICsxMjgxLDggQEAKIAl7Y250fWdiCiAKIEFueSBjb3VudCBtYXkgYmUgdXNlZCB0byByZWZlcmVuY2UgYW55IG9mIHRoZSBib29rbWFya3MuCitOb3RlIHRoYXQgfG5ldHJ3LXFifCBzaG93cyBib3RoIGJvb2ttYXJrcyBhbmQgaGlzdG9yeTsgdG8gZ28KK3RvIGEgbG9jYXRpb24gc3RvcmVkIGluIHRoZSBoaXN0b3J5IHNlZSB8bmV0cnctdXwgYW5kIHxuZXRydy1VfC4KIAogUmVsYXRlZCBUb3BpY3M6CiAJfG5ldHJ3LW1CfCBob3cgdG8gZGVsZXRlIGJvb2ttYXJrcwpAQCAtMTI5MSw2ICsxMjk4LDEzIEBACiAidSIgbWFwLCBvbmUgY2FuIGNoYW5nZSB0byBhbiBlYXJsaWVyIGRpcmVjdG9yeSAocHJlZGVjZXNzb3IpLiAgVG8gZG8KIHRoZSBvcHBvc2l0ZSwgc2VlIHxuZXRydy1VfC4KIAorVGhlICJ1IiBtYXAgYWxzbyBhY2NlcHRzIGNvdW50cyB0byBnbyBiYWNrIGluIHRoZSBoaXN0b3J5IHNldmVyYWwgc2xvdHMuCitGb3IgeW91ciBjb252ZW5pZW5jZSwgfG5ldHJ3LXFifCBsaXN0cyB0aGUgaGlzdG9yeSBudW1iZXIgd2hpY2ggY2FuIGJlCityZS11c2VkIGluIHRoYXQgY291bnQuCisKK1NlZSB8ZzpuZXRyd19kaXJoaXN0bWF4fCBmb3IgaG93IHRvIGNvbnRyb2wgdGhlIHF1YW50aXR5IG9mIGhpc3Rvcnkgc3RhY2sKK3Nsb3RzLgorCiAKIENIQU5HSU5HIFRPIEEgU1VDQ0VTU09SIERJUkVDVE9SWQkJKm5ldHJ3LVUqICpuZXRydy1kb3duZGlyKiB7e3syCiAKQEAgLTEyOTgsNiArMTMxMiwxMSBAQAogVGhpcyBtYXAgaXMgdGhlIG9wcG9zaXRlIG9mIHRoZSAidSIgbWFwLiAoc2VlIHxuZXRydy11fCkgIFVzZSB0aGUKIHEgbWFwIHRvIGxpc3QgYm90aCB0aGUgYm9va21hcmtzIGFuZCBoaXN0b3J5LiAoc2VlIHxuZXRydy1xYnwpCiAKK1RoZSAiVSIgbWFwIGFsc28gYWNjZXB0cyBjb3VudHMgdG8gZ28gZm9yd2FyZCBpbiB0aGUgaGlzdG9yeSBzZXZlcmFsIHNsb3RzLgorCitTZWUgfGc6bmV0cndfZGlyaGlzdG1heHwgZm9yIGhvdyB0byBjb250cm9sIHRoZSBxdWFudGl0eSBvZiBoaXN0b3J5IHN0YWNrCitzbG90cy4KKwogCiBORVRSVyBDTEVBTgkJCQkJKm5ldHJ3LWNsZWFuKiAqOk5ldHJ3Q2xlYW4qCiAKQEAgLTE2NzQsNyArMTY5Myw3IEBACiB0byB0b2dnbGUgYmV0d2VlbiBoaWRpbmcgZmlsZXMgd2hpY2ggYmVnaW4gd2l0aCBhIHBlcmlvZCAoZG90KSBhbmQgbm90IGhpZGluZwogdGhlbS4KIAotQXNzb2NpYXRlZCBzZXR0aW5nIHZhcmlhYmxlOiB8ZzpuZXRyd19saXN0X2hpZGV8CitBc3NvY2lhdGVkIHNldHRpbmcgdmFyaWFibGU6IHxnOm5ldHJ3X2xpc3RfaGlkZXwgIHxnOm5ldHJ3X2hpZGV8CiBBc3NvY2lhdGVkIHRvcGljczogfG5ldHJ3LWF8IHxuZXRydy1jdHJsLWh8IHxuZXRydy1taHwKIAogSU1QUk9WSU5HIEJST1dTSU5HCQkJKm5ldHJ3LWxpc3RoYWNrKiAqbmV0cnctc3NoLWhhY2sqIHt7ezIKQEAgLTE3ODUsOSArMTgwNCwxMCBAQAogTUFLSU5HIFRIRSBCUk9XU0lORyBESVJFQ1RPUlkgVEhFIENVUlJFTlQgRElSRUNUT1JZCSpuZXRydy1jKiB7e3syCiAKIEJ5IGRlZmF1bHQsIHxnOm5ldHJ3X2tlZXBkaXJ8IGlzIDEuICBUaGlzIHNldHRpbmcgbWVhbnMgdGhhdCB0aGUgY3VycmVudAotZGlyZWN0b3J5IHdpbGwgbm90IHRyYWNrIHRoZSBicm93c2luZyBkaXJlY3RvcnkuCitkaXJlY3Rvcnkgd2lsbCBub3QgdHJhY2sgdGhlIGJyb3dzaW5nIGRpcmVjdG9yeS4gKGRvbmUgZm9yIGJhY2t3YXJkcworY29tcGF0aWJpbGl0eSB3aXRoIHY2J3MgZmlsZSBleHBsb3JlcikuCiAKLVNldHRpbmcgZzpuZXRyd19rZWVwZGlyIHRvIDAgdGVsbHMgbmV0cncgdG8gbWFrZSB2aW0ncyBjdXJyZW50IGRpcmVjdG9yeSB0bworU2V0dGluZyBnOm5ldHJ3X2tlZXBkaXIgdG8gMCB0ZWxscyBuZXRydyB0byBtYWtlIHZpbSdzIGN1cnJlbnQgZGlyZWN0b3J5CiB0cmFjayBuZXRydydzIGJyb3dzaW5nIGRpcmVjdG9yeS4KIAogSG93ZXZlciwgZ2l2ZW4gdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgZzpuZXRyd19rZWVwZGlyIG9mIDEgd2hlcmUgbmV0cncKQEAgLTE4MTAsNiArMTgzMCw3IEBACiAgICAgfG5ldHJ3LW1jfAlDb3B5IG1hcmtlZCBmaWxlcyB0byB0YXJnZXQKICAgICB8bmV0cnctbWR8CUFwcGx5IHZpbWRpZmYgdG8gbWFya2VkIGZpbGVzCiAgICAgfG5ldHJ3LW1lfAlFZGl0IG1hcmtlZCBmaWxlcworICAgIHxuZXRydy1tRnwJVW5tYXJrIG1hcmtlZCBmaWxlcwogICAgIHxuZXRydy1tZ3wJQXBwbHkgdmltZ3JlcCB0byBtYXJrZWQgZmlsZXMKICAgICB8bmV0cnctbW18CU1vdmUgbWFya2VkIGZpbGVzCiAgICAgfG5ldHJ3LW1wfAlQcmludCBtYXJrZWQgZmlsZXMKQEAgLTE4MTcsNiArMTgzOCw3IEBACiAgICAgfG5ldHJ3LW1UfAlHZW5lcmF0ZSB0YWdzIHVzaW5nIG1hcmtlZCBmaWxlcwogICAgIHxuZXRydy1teHwJQXBwbHkgc2hlbGwgY29tbWFuZCB0byBtYXJrZWQgZmlsZXMKICAgICB8bmV0cnctbXp8CUNvbXByZXNzL0RlY29tcHJlc3MgbWFya2VkIGZpbGVzCisgICAgfG5ldHJ3LXFGfAlNYXJrIGZpbGVzIHVzaW5nIHF1aWNrZml4IGxpc3QKICAgICB8bmV0cnctT3wJT2J0YWluIG1hcmtlZCBmaWxlcwogICAgIHxuZXRydy1SfAlSZW5hbWUgbWFya2VkIGZpbGVzCiAKQEAgLTE4NDQsNiArMTg2NiwyMiBAQAogbGlzdHMuCiAKIAorVU5NQVJLSU5HIEZJTEVTCQkJCQkJCSpuZXRydy1tRioge3t7MgorCShhbHNvIHNlZSB8bmV0cnctbWZ8KQorCitUaGlzIGNvbW1hbmQgd2lsbCB1bm1hcmsgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4gIE9uZSBtYXkgYWxzbyB1c2UKK21mICh8bmV0cnctbWZ8KSBvbiBhIHNwZWNpZmljIGZpbGUgdG8gdW5tYXJrIGp1c3QgdGhhdCBmaWxlLgorCisKK01BUktJTkcgRklMRVMgQlkgUVVJQ0tGSVggTElTVAkJCQkqbmV0cnctcUYqCisJKGFsc28gc2VlIHxuZXRydy1tZnwpCisKK09uZSBtYXkgY29udmVydCB0aGUgfHF1aWNrZml4LWVycm9yLWxpc3RzfCBpbnRvIGEgbWFya2VkIGZpbGUgbGlzdCB1c2luZworInFGIi4gIFlvdSBtYXkgdGhlbiBwcm9jZWVkIHdpdGggY29tbWFuZHMgc3VjaCBhcyBtZSAofG5ldHJ3LW1lfCkgdG8KK2VkaXQgdGhlbS4gIFF1aWNrZml4IGVycm9yIGxpc3RzIGFyZSBnZW5lcmF0ZWQsIGZvciBleGFtcGxlLCBieSBjYWxscwordG8gfDp2aW1ncmVwfC4KKworCiBNQVJLSU5HIEZJTEVTIEJZIFJFR1VMQVIgRVhQUkVTU0lPTgkJCQkqbmV0cnctbXIqIHt7ezIKIAkoYWxzbyBzZWUgfG5ldHJ3LW1mfCkKIApAQCAtMTkwMiwxNyArMTk0MCwyNyBAQAogCiBUaGlzIGNvbW1hbmQgd2lsbCBwbGFjZSB0aGUgbWFya2VkIGZpbGVzIG9uIHRoZSB8YXJnbGlzdHwgYW5kIGNvbW1lbmNlCiBlZGl0aW5nIHRoZW0uICBPbmUgbWF5IHJldHVybiB0aGUgdG8gZXhwbG9yZXIgd2luZG93IHdpdGggfDpSZXhwbG9yZXwuCisodXNlIHw6bnwgYW5kIHw6cHwgdG8gZWRpdCBuZXh0IGFuZCBwcmV2aW91cyBmaWxlcyBpbiB0aGUgYXJnbGlzdCkKIAogTUFSS0VEIEZJTEVTOiBHUkVQCQkJCQkJKm5ldHJ3LW1nKiB7e3syCiAJICAgIChTZWUgfG5ldHJ3LW1mfCBhbmQgfG5ldHJ3LW1yfCBmb3IgaG93IHRvIG1hcmsgZmlsZXMpCiAJCSAgICAgICh1c2VzIHRoZSBnbG9iYWwgbWFya2VkIGZpbGUgbGlzdCkKIAotVGhpcyBjb21tYW5kIHdpbGwgYXBwbHkgfDp2aW1ncmVwfCB0byB0aGUgbWFya2VkIGZpbGVzLiAgVGhlIGNvbW1hbmQgd2lsbCBhc2sKLWZvciB0aGUgcmVxdWVzdGVkIHBhdHRlcm47IG9uZSBtYXkgZW50ZXI6ID4KK1RoaXMgY29tbWFuZCB3aWxsIGFwcGx5IHw6dmltZ3JlcHwgdG8gdGhlIG1hcmtlZCBmaWxlcy4KK1RoZSBjb21tYW5kIHdpbGwgYXNrIGZvciB0aGUgcmVxdWVzdGVkIHBhdHRlcm47IG9uZSBtYXkgdGhlbiBlbnRlcjogPgorCiAJL3BhdHRlcm4vW2ddW2pdCiAJISAvcGF0dGVybi9bZ11bal0KIAlwYXR0ZXJuCiA8CitJbiB0aGUgY2FzZXMgb2YgImoiIG9wdGlvbiB1c2FnZSBhcyBzaG93biBhYm92ZSwgIm1nIiB3aWxsIHdpbm5vdyB0aGUgY3VycmVudAorbWFya2VkIGZpbGUgbGlzdCB0byBqdXN0IHRob3NlIHBvc3Nlc3NpbmcgdGhlIHNwZWNpZmllZCBwYXR0ZXJuLgorVGh1cywgb25lIG1heSB1c2UgPgorCW1yIC4uLmZpbGUtcGF0dGVybgorCW1nIC4uY29udGVudHMtcGF0dGVybgordG8gaGF2ZSBhIG1hcmtlZCBmaWxlIGxpc3Qgc2F0aXNmeWluZyB0aGUgZmlsZS1wYXR0ZXJuIGJ1dCBjb250YWluaW5nIHRoZQorZGVzcmllZCBjb250ZW50cy1wYXR0ZXJuLgorCiBNQVJLRUQgRklMRVM6IEhJRElORyBBTkQgVU5ISURJTkcgQlkgU1VGRklYCQkJKm5ldHJ3LW1oKiB7e3syCiAJICAgIChTZWUgfG5ldHJ3LW1mfCBhbmQgfG5ldHJ3LW1yfCBmb3IgaG93IHRvIG1hcmsgZmlsZXMpCiAJCSAgICAgICh1c2VzIHRoZSBsb2NhbCBtYXJrZWQgZmlsZSBsaXN0KQpAQCAtMTk1OCw2ICsyMDA2LDM2IEBACiBOZXRydyB3aWxsIHNvdXJjZSB0aGUgbWFya2VkIGZpbGVzICh1c2luZyB2aW0ncyB8OnNvdXJjZXwgY29tbWFuZCkKIAogCitNQVJLRUQgRklMRVM6IFNFVFRJTkcgVEhFIFRBUkdFVCBESVJFQ1RPUlkJCQkqbmV0cnctbXQqIHt7ezIKKyAgICAgKFNlZSB8bmV0cnctbWZ8IGFuZCB8bmV0cnctbXJ8IGZvciBob3cgdG8gbWFyayBmaWxlcykKKworU2V0IHRoZSBtYXJrZWQgZmlsZSBjb3B5L21vdmUtdG8gdGFyZ2V0IChzZWUgfG5ldHJ3LW1jfCBhbmQgfG5ldHJ3LW1tfCk6CisKKyAgKiBJZiB0aGUgY3Vyc29yIGlzIGF0b3AgYSBmaWxlIG5hbWUsIHRoZW4gdGhlIG5ldHJ3IHdpbmRvdydzIGN1cnJlbnRseQorICAgIGRpc3BsYXllZCBkaXJlY3RvcnkgaXMgdXNlZCBmb3IgdGhlIGNvcHkvbW92ZS10byB0YXJnZXQuCisKKyAgKiBBbHNvLCBpZiB0aGUgY3Vyc29yIGlzIGluIHRoZSBiYW5uZXIsIHRoZW4gdGhlIG5ldHJ3IHdpbmRvdydzIGN1cnJlbnRseQorICAgIGRpc3BsYXllZCBkaXJlY3RvcnkgaXMgdXNlZCBmb3IgdGhlIGNvcHkvbW92ZS10byB0YXJnZXQuCisgICAgVW5sZXNzIHRoZSB0YXJnZXQgYWxyZWFkeSBpcyB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBJbiB3aGljaCBjYXNlLAorICAgIHJlbW92ZSB0aGUgdGFyZ2V0LgorCisgICogSG93ZXZlciwgaWYgdGhlIGN1cnNvciBpcyBhdG9wIGEgZGlyZWN0b3J5IG5hbWUsIHRoZW4gdGhhdCBkaXJlY3RvcnkgaXMKKyAgICB1c2VkIGZvciB0aGUgY29weS9tb3ZlLXRvIHRhcmdldAorCitUaGVyZSBpcyBvbmx5IG9uZSBjb3B5L21vdmUtdG8gdGFyZ2V0IHBlciB2aW0gc2Vzc2lvbjsgaWUuIHRoZSB0YXJnZXQgaXMgYQorc2NyaXB0IHZhcmlhYmxlIChzZWUgfHM6dmFyfCkgYW5kIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBuZXRydyB3aW5kb3dzIChpbiBhbgoraW5zdGFuY2Ugb2YgdmltKS4KKworV2hlbiB1c2luZyBtZW51cyBhbmQgZ3ZpbSwgbmV0cncgcHJvdmlkZXMgYSAiVGFyZ2V0cyIgZW50cnkgd2hpY2ggYWxsb3dzIG9uZQordG8gcGljayBhIHRhcmdldCBmcm9tIHRoZSBsaXN0IG9mIGJvb2ttYXJrcyBhbmQgaGlzdG9yeS4KKworUmVsYXRlZCB0b3BpY3M6CisgICAgICBNYXJraW5nIEZpbGVzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbWZ8CisgICAgICBNYXJraW5nIEZpbGVzIGJ5IFJlZ3VsYXIgRXhwcmVzc2lvbi4uLi4uLi4uLi4uLi4uLi58bmV0cnctbXJ8CisgICAgICBNYXJrZWQgRmlsZXM6IFRhcmdldCBEaXJlY3RvcnkgVXNpbmcgQm9va21hcmtzLi4uLi58bmV0cnctVGJ8CisgICAgICBNYXJrZWQgRmlsZXM6IFRhcmdldCBEaXJlY3RvcnkgVXNpbmcgSGlzdG9yeS4uLi4uLi58bmV0cnctVGh8CisKKwogTUFSS0VEIEZJTEVTOiBUQUdHSU5HCQkJCQkJKm5ldHJ3LW1UKiB7e3syCiAJICAgIChTZWUgfG5ldHJ3LW1mfCBhbmQgfG5ldHJ3LW1yfCBmb3IgaG93IHRvIG1hcmsgZmlsZXMpCiAJCSAgICAgICh1c2VzIHRoZSBnbG9iYWwgbWFya2VkIGZpbGUgbGlzdCkKQEAgLTE5ODMsMjQgKzIwNjEsMzcgQEAKIAogQXNzb2NpYXRlZCBzZXR0aW5nIHZhcmlhYmxlczogfGc6bmV0cndfY3RhZ3N8IHxnOm5ldHJ3X3NzaF9jbWR8CiAKK01BUktFRCBGSUxFUzogVEFSR0VUIERJUkVDVE9SWSBVU0lORyBCT09LTUFSS1MgIAkJKm5ldHJ3LVRiKiB7e3syCiAKLU1BUktFRCBGSUxFUzogU0VUVElORyBUSEUgVEFSR0VUIERJUkVDVE9SWQkJCSpuZXRydy1tdCoge3t7MgotICAgICAoU2VlIHxuZXRydy1tZnwgYW5kIHxuZXRydy1tcnwgZm9yIGhvdyB0byBtYXJrIGZpbGVzKQorU2V0cyB0aGUgbWFya2VkIGZpbGUgY29weS9tb3ZlLXRvIHRhcmdldCAoc2VlIHxuZXRydy1tY3wgYW5kIHxuZXRydy1tbXwpLgogCi1TZXQgdGhlIG1hcmtlZCBmaWxlIGNvcHkvbW92ZS10byB0YXJnZXQgKHNlZSB8bmV0cnctbWN8IGFuZCB8bmV0cnctbW18KToKK1RoZSB8bmV0cnctcWJ8IG1hcCB3aWxsIGdpdmUgeW91IGEgbGlzdCBvZiBib29rbWFya3MgKGFuZCBoaXN0b3J5KS4KK09uZSBtYXkgY2hvb3NlIG9uZSBvZiB0aGUgYm9va21hcmtzIHRvIGJlY29tZSB5b3VyIG1hcmtlZCBmaWxlCit0YXJnZXQgYnkgdXNpbmcgW2NvdW50XVRiIChkZWZhdWx0IGNvdW50OiAxKS4KIAotICAqIGlmIHRoZSBjdXJzb3IgaXMgYXRvcCBhIGZpbGUgbmFtZSwgdGhlbiB0aGUgbmV0cncgd2luZG93J3MgY3VycmVudGx5Ci0gICAgZGlzcGxheWVkIGRpcmVjdG9yeSBpcyB1c2VkIGZvciB0aGUgY29weS9tb3ZlLXRvIHRhcmdldC4KK1JlbGF0ZWQgdG9waWNzOgorICAgICAgTGlzdGluZyBCb29rbWFya3MgYW5kIEhpc3RvcnkuLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LXFifAorICAgICAgTWFya2VkIEZpbGVzOiBTZXR0aW5nIFRoZSBUYXJnZXQgRGlyZWN0b3J5Li4uLi4uLi4ufG5ldHJ3LW10fAorICAgICAgTWFya2VkIEZpbGVzOiBUYXJnZXQgRGlyZWN0b3J5IFVzaW5nIEhpc3RvcnkuLi4uLi4ufG5ldHJ3LVRofAorICAgICAgTWFya2luZyBGaWxlcy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1mfAorICAgICAgTWFya2luZyBGaWxlcyBieSBSZWd1bGFyIEV4cHJlc3Npb24uLi4uLi4uLi4uLi4uLi4ufG5ldHJ3LW1yfAogCi0gICogYWxzbywgaWYgdGhlIGN1cnNvciBpcyBpbiB0aGUgYmFubmVyLCB0aGVuIHRoZSBuZXRydyB3aW5kb3cncyBjdXJyZW50bHkKLSAgICBkaXNwbGF5ZWQgZGlyZWN0b3J5IGlzIHVzZWQgZm9yIHRoZSBjb3B5L21vdmUtdG8gdGFyZ2V0LgogCi0gICogaG93ZXZlciwgaWYgdGhlIGN1cnNvciBpcyBhdG9wIGEgZGlyZWN0b3J5IG5hbWUsIHRoZW4gdGhhdCBkaXJlY3RvcnkgaXMKLSAgICB1c2VkIGZvciB0aGUgY29weS9tb3ZlLXRvIHRhcmdldAorTUFSS0VEIEZJTEVTOiBUQVJHRVQgRElSRUNUT1JZIFVTSU5HIEhJU1RPUlkJICAJCSpuZXRydy1UaCoge3t7MgogCi1UaGVyZSBpcyBvbmx5IG9uZSBjb3B5L21vdmUtdG8gdGFyZ2V0IHBlciB2aW0gc2Vzc2lvbjsgaWUuIHRoZSB0YXJnZXQgaXMgYQotc2NyaXB0IHZhcmlhYmxlIChzZWUgfHM6dmFyfCkgYW5kIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBuZXRydyB3aW5kb3dzIChpbiBhbgotaW5zdGFuY2Ugb2YgdmltKS4KK1NldHMgdGhlIG1hcmtlZCBmaWxlIGNvcHkvbW92ZS10byB0YXJnZXQgKHNlZSB8bmV0cnctbWN8IGFuZCB8bmV0cnctbW18KS4KKworVGhlIHxuZXRydy1xYnwgbWFwIHdpbGwgZ2l2ZSB5b3UgYSBsaXN0IG9mIGhpc3RvcnkgKGFuZCBib29rbWFya3MpLgorT25lIG1heSBjaG9vc2Ugb25lIG9mIHRoZSBoaXN0b3J5IGVudHJpZXMgdG8gYmVjb21lIHlvdXIgbWFya2VkIGZpbGUKK3RhcmdldCBieSB1c2luZyBbY291bnRdVGggKGRlZmF1bHQgY291bnQ6IDA7IGllLiB0aGUgY3VycmVudCBkaXJlY3RvcnkpLgorCitSZWxhdGVkIHRvcGljczoKKyAgICAgIExpc3RpbmcgQm9va21hcmtzIGFuZCBIaXN0b3J5Li4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1xYnwKKyAgICAgIE1hcmtlZCBGaWxlczogU2V0dGluZyBUaGUgVGFyZ2V0IERpcmVjdG9yeS4uLi4uLi4uLnxuZXRydy1tdHwKKyAgICAgIE1hcmtlZCBGaWxlczogVGFyZ2V0IERpcmVjdG9yeSBVc2luZyBCb29rbWFya3MuLi4uLnxuZXRydy1UYnwKKyAgICAgIE1hcmtpbmcgRmlsZXMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1tZnwKKyAgICAgIE1hcmtpbmcgRmlsZXMgYnkgUmVndWxhciBFeHByZXNzaW9uLi4uLi4uLi4uLi4uLi4uLnxuZXRydy1tcnwKKwogCiBNQVJLRUQgRklMRVM6IFVOTUFSS0lORwkJCQkJCSpuZXRydy1tdSoge3t7MgogICAgICAoU2VlIHxuZXRydy1tZnwgYW5kIHxuZXRydy1tcnwgZm9yIGhvdyB0byBtYXJrIGZpbGVzKQpAQCAtMjAyMCwyMSArMjExMSwyMSBAQAogICAgLS0tCQkJCS0tLS0tLS0tLS0tCiAgICBWYXIJCQkJRXhwbGFuYXRpb24KICAgIC0tLQkJCQktLS0tLS0tLS0tLQotPCAqZzpuZXRyd19hbHRvKgkJICBjaGFuZ2UgZnJvbSBhYm92ZSBzcGxpdHRpbmcgdG8gYmVsb3cgc3BsaXR0aW5nCis8ICpnOm5ldHJ3X2FsdG8qCQljaGFuZ2UgZnJvbSBhYm92ZSBzcGxpdHRpbmcgdG8gYmVsb3cgc3BsaXR0aW5nCiAJCQkJYnkgc2V0dGluZyB0aGlzIHZhcmlhYmxlIChzZWUgfG5ldHJ3LW98KQogCQkJCSBkZWZhdWx0OiA9JnNiICAgICAgICAgICAoc2VlIHwnc2InfCkKIAotICAqZzpuZXRyd19hbHR2KgkJICBjaGFuZ2UgZnJvbSBsZWZ0IHNwbGl0dGluZyB0byByaWdodCBzcGxpdHRpbmcKKyAgKmc6bmV0cndfYWx0dioJCWNoYW5nZSBmcm9tIGxlZnQgc3BsaXR0aW5nIHRvIHJpZ2h0IHNwbGl0dGluZwogCQkJCWJ5IHNldHRpbmcgdGhpcyB2YXJpYWJsZSAoc2VlIHxuZXRydy12fCkKIAkJCQkgZGVmYXVsdDogPSZzcHIgICAgICAgICAgKHNlZSB8J3Nwcid8KQogCi0gICpnOm5ldHJ3X2Jhbm5lcioJCSAgZW5hYmxlL3N1cHByZXNzIHRoZSBiYW5uZXIKKyAgKmc6bmV0cndfYmFubmVyKgkJZW5hYmxlL3N1cHByZXNzIHRoZSBiYW5uZXIKIAkJCQk9MDogc3VwcHJlc3MgdGhlIGJhbm5lcgogCQkJCT0xOiBiYW5uZXIgaXMgZW5hYmxlZCAoZGVmYXVsdCkKIAkJCQlOT1RFOiBzdXBwcmVzc2luZyB0aGUgYmFubmVyIGlzIGEgbmV3IGZlYXR1cmUKIAkJCQl3aGljaCBtYXkgY2F1c2UgcHJvYmxlbXMuCiAKLSAgKmc6bmV0cndfYnJvd3NlX3NwbGl0KgkgIHdoZW4gYnJvd3NpbmcsIDxjcj4gd2lsbCBvcGVuIHRoZSBmaWxlIGJ5OgorICAqZzpuZXRyd19icm93c2Vfc3BsaXQqCXdoZW4gYnJvd3NpbmcsIDxjcj4gd2lsbCBvcGVuIHRoZSBmaWxlIGJ5OgogCQkJCT0wOiByZS11c2luZyB0aGUgc2FtZSB3aW5kb3cKIAkJCQk9MTogaG9yaXpvbnRhbGx5IHNwbGl0dGluZyB0aGUgd2luZG93IGZpcnN0CiAJCQkJPTI6IHZlcnRpY2FsbHkgICBzcGxpdHRpbmcgdGhlIHdpbmRvdyBmaXJzdApAQCAtMjA0NCw3ICsyMTM1LDcgQEAKIAkJCQkgICAgdG8gZ2V0IHZlcnRpY2FsIHNwbGl0dGluZyBpbnN0ZWFkIG9mCiAJCQkJICAgIGhvcml6b250YWwgc3BsaXR0aW5nLgogCi0gICpnOm5ldHJ3X2Jyb3dzZXhfdmlld2VyKgkgIHNwZWNpZnkgdXNlcidzIHByZWZlcmVuY2UgZm9yIGEgdmlld2VyOiA+CisgICpnOm5ldHJ3X2Jyb3dzZXhfdmlld2VyKglzcGVjaWZ5IHVzZXIncyBwcmVmZXJlbmNlIGZvciBhIHZpZXdlcjogPgogCQkJCQkia2ZtY2xpZW50IGV4ZWMiCiAJCQkJCSJnbm9tZS1vcGVuIgogPAkJCQlJZiA+CkBAIC0yMDUzLDE1ICsyMTQ0LDE1IEBACiAJCQkJYSBzY3JpcHQvZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBnaXZlbgogCQkJCWV4dGVuc2lvbi4gIChzZWUgfG5ldHJ3X2ZpbGVoYW5kbGVyfCkuCiAKLSAgKmc6bmV0cndfY2hncGVybSoJCSAgVW5peC9MaW51eDogImNobW9kIFBFUk0gRklMRU5BTUUiCisgICpnOm5ldHJ3X2NoZ3Blcm0qCQlVbml4L0xpbnV4OiAiY2htb2QgUEVSTSBGSUxFTkFNRSIKIAkJCQlXaW5kb3dzOiAgICAiY2FjbHMgRklMRU5BTUUgL2UgL3AgUEVSTSIKIAkJCQlVc2VkIHRvIGNoYW5nZSBhY2Nlc3MgcGVybWlzc2lvbiBmb3IgYSBmaWxlLgogCi0gICpnOm5ldHJ3X2NvbXByZXNzKgkJICA9Imd6aXAiCisgICpnOm5ldHJ3X2NvbXByZXNzKgkJPSJnemlwIgogCQkJCSAgICBXaWxsIGNvbXByZXNzIG1hcmtlZCBmaWxlcyB3aXRoIHRoaXMKIAkJCQkgICAgY29tbWFuZAogCi0gICpnOk5ldHJ3X2NvcmVoYW5kbGVyKgkJICBBbGxvd3Mgb25lIHRvIHNwZWNpZnkgc29tZXRoaW5nIGFkZGl0aW9uYWwKKyAgKmc6TmV0cndfY29yZWhhbmRsZXIqCQlBbGxvd3Mgb25lIHRvIHNwZWNpZnkgc29tZXRoaW5nIGFkZGl0aW9uYWwKIAkJCQl0byBkbyB3aGVuIGhhbmRsaW5nIDxjb3JlPiBmaWxlcyB2aWEgbmV0cncncwogCQkJCWJyb3dzZXIncyAieCIgY29tbWFuZCAoc2VlIHxuZXRydy14fCkuICBJZgogCQkJCXByZXNlbnQsIGc6TmV0cndfY29yZWhhbmRsZXIgc3BlY2lmaWVzCkBAIC0yMDcwLDEwICsyMTYxLDExIEBACiAJCQkJaXMgcmVxdWlyZWQgaXRzIGhvbGRpbmcgYSBmdW5jdGlvbiByZWZlcmVuY2UpCiAKIAotICAqZzpuZXRyd19jdGFncyoJCSAgPSJjdGFncyIKLQkJCQlUaGUgZGVmYXVsdCBleHRlcm5hbCBwcm9ncmFtIHVzZWQgdG8gY3JlYXRlIHRhZ3MKKyAgKmc6bmV0cndfY3RhZ3MqCQk9ImN0YWdzIgorCQkJCVRoZSBkZWZhdWx0IGV4dGVybmFsIHByb2dyYW0gdXNlZCB0byBjcmVhdGUKKwkJCQl0YWdzCiAKLSAgKmc6bmV0cndfY3Vyc29yKgkJICA9IDIgKGRlZmF1bHQpCisgICpnOm5ldHJ3X2N1cnNvcioJCT0gMiAoZGVmYXVsdCkKICAgCQkJCVRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSB1c2Ugb2YgdGhlCiAJCQkJfCdjdXJzb3JsaW5lJ3wgKGN1bCkgYW5kIHwnY3Vyc29yY29sdW1uJ3wKIAkJCQkoY3VjKSBzZXR0aW5ncyBieSBuZXRydzoKQEAgLTIwOTEsNyArMjE4Myw3IEBACiAJCQkJICBjdWwgICA6IHwnY3Vyc29ybGluZSd8ICBsb2NhbGx5IHNldAogCQkJCSAgY3VjICAgOiB8J2N1cnNvcmNvbHVtbid8IGxvY2FsbHkgc2V0CiAKLSAgKmc6bmV0cndfZGVjb21wcmVzcyoJCSAgPSB7ICIuZ3oiIDogImd1bnppcCIgLAorICAqZzpuZXRyd19kZWNvbXByZXNzKgkJPSB7ICIuZ3oiICA6ICJndW56aXAiICwKIAkJCQkgICAgIi5iejIiIDogImJ1bnppcDIiICwKIAkJCQkgICAgIi56aXAiIDogInVuemlwIiAsCiAJCQkJICAgICIudGFyIiA6ICJ0YXIgLXhmIn0KQEAgLTIxMTIsNyArMjIwNCw3IEBACiAJCQkJICAgIDE6IHdhcm5pbmdzCiAJCQkJICAgIDI6IGVycm9ycwogCi0gICpnOm5ldHJ3X2Zhc3Ricm93c2UqCQkgID0wOiBzbG93IHNwZWVkIGRpcmVjdG9yeSBicm93c2luZzsKKyAgKmc6bmV0cndfZmFzdGJyb3dzZSoJCT0wOiBzbG93IHNwZWVkIGRpcmVjdG9yeSBicm93c2luZzsKIAkJCQkgICAgbmV2ZXIgcmUtdXNlcyBkaXJlY3RvcnkgbGlzdGluZ3MsCiAJCQkJICAgIGFsd2F5cyBvYnRhaW5zIGRpcmVjdG9yeSBsaXN0aW5ncy4KIAkJCQk9MTogbWVkaXVtIHNwZWVkIGRpcmVjdG9yeSBicm93c2luZzsKQEAgLTIxMzYsMTAgKzIyMjgsMTAgQEAKIAkJCQl0cmFkaW5nIG9mZiBhY2N1cmFjeSAoaWUuIHVwLXRvLWRhdGUgbGlzdGluZykKIAkJCQl2ZXJzdXMgc3BlZWQuCiAKLSAgKmc6bmV0cndfZm5hbWVfZXNjYXBlKgkgID0nID8mOyUnCisgICpnOm5ldHJ3X2ZuYW1lX2VzY2FwZSoJPScgPyY7JScKIAkJCQlVc2VkIG9uIGZpbGVuYW1lcyBiZWZvcmUgcmVtb3RlIHJlYWRpbmcvd3JpdGluZwogCi0gICpnOm5ldHJ3X2Z0cF9icm93c2VfcmVqZWN0KgkgIGZ0cCBjYW4gcHJvZHVjZSBhIG51bWJlciBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzCisgICpnOm5ldHJ3X2Z0cF9icm93c2VfcmVqZWN0KglmdHAgY2FuIHByb2R1Y2UgYSBudW1iZXIgb2YgZXJyb3JzIGFuZCB3YXJuaW5ncwogCQkJCXRoYXQgY2FuIHNob3cgdXAgYXMgImRpcmVjdG9yaWVzIiBhbmQgImZpbGVzIgogCQkJCWluIHRoZSBsaXN0aW5nLiAgVGhpcyBwYXR0ZXJuIGlzIHVzZWQgdG8KIAkJCQlyZW1vdmUgc3VjaCBlbWJlZGRlZCBtZXNzYWdlcy4gIEJ5IGRlZmF1bHQgaXRzCkBAIC0yMTUyLDE5ICsyMjQ0LDE5IEBACiAJCQkJIDogY29ubmVjdCB0byBhZGRyZXNzIFswLTlhLWZBLUY6XSoKIAkJCQkgOiBObyByb3V0ZSB0byBob3N0JCcKIAotICAqZzpuZXRyd19mdHBfbGlzdF9jbWQqCSAgb3B0aW9ucyBmb3IgcGFzc2luZyBhbG9uZyB0byBmdHAgZm9yIGRpcmVjdG9yeQorICAqZzpuZXRyd19mdHBfbGlzdF9jbWQqCW9wdGlvbnMgZm9yIHBhc3NpbmcgYWxvbmcgdG8gZnRwIGZvciBkaXJlY3RvcnkKIAkJCQlsaXN0aW5nLiAgRGVmYXVsdHM6CiAJCQkJIHVuaXggb3IgZzpuZXRyd19jeWd3aW4gc2V0OiA6ICJscyAtbEYiCiAJCQkJIG90aGVyd2lzZSAgICAgICAgICAgICAgICAgICAgICJkaXIiCiAKIAotICAqZzpuZXRyd19mdHBfc2l6ZWxpc3RfY21kKgkgIG9wdGlvbnMgZm9yIHBhc3NpbmcgYWxvbmcgdG8gZnRwIGZvciBkaXJlY3RvcnkKKyAgKmc6bmV0cndfZnRwX3NpemVsaXN0X2NtZCoJb3B0aW9ucyBmb3IgcGFzc2luZyBhbG9uZyB0byBmdHAgZm9yIGRpcmVjdG9yeQogCQkJCWxpc3RpbmcsIHNvcnRlZCBieSBzaXplIG9mIGZpbGUuCiAJCQkJRGVmYXVsdHM6CiAJCQkJIHVuaXggb3IgZzpuZXRyd19jeWd3aW4gc2V0OiA6ICJscyAtc2xGIgogCQkJCSBvdGhlcndpc2UgICAgICAgICAgICAgICAgICAgICAiZGlyIgogCi0gICpnOm5ldHJ3X2Z0cF90aW1lbGlzdF9jbWQqCSAgb3B0aW9ucyBmb3IgcGFzc2luZyBhbG9uZyB0byBmdHAgZm9yIGRpcmVjdG9yeQorICAqZzpuZXRyd19mdHBfdGltZWxpc3RfY21kKglvcHRpb25zIGZvciBwYXNzaW5nIGFsb25nIHRvIGZ0cCBmb3IgZGlyZWN0b3J5CiAJCQkJbGlzdGluZywgc29ydGVkIGJ5IHRpbWUgb2YgbGFzdCBtb2RpZmljYXRpb24uCiAJCQkJRGVmYXVsdHM6CiAJCQkJIHVuaXggb3IgZzpuZXRyd19jeWd3aW4gc2V0OiA6ICJscyAtdGxGIgpAQCAtMjE3NSw2MSArMjI2Nyw2NCBAQAogCQkJCVRoZXNlIGNoYXJhY3RlcnMgaW4gZGlyZWN0b3J5IG5hbWVzIGFyZQogCQkJCWVzY2FwZWQgYmVmb3JlIGFwcGx5aW5nIGdsb2IoKQogCi0gICpnOm5ldHJ3X2hpZGUqCQkgIGlmIHRydWUsIHRoZSBoaWRpbmcgbGlzdCBpcyB1c2VkCisgICpnOm5ldHJ3X2hpZGUqCQlDb250cm9sbGVkIGJ5IHRoZSAiYSIgbWFwIChzZWUgfG5ldHJ3LWF8KQorCQkJCT0wIDogc2hvdyBhbGwKKwkJCQk9MSA6IHNob3cgbm90LWhpZGRlbiBmaWxlcworCQkJCT0yIDogc2hvdyBoaWRkZW4gZmlsZXMgb25seQogCQkJCSBkZWZhdWx0OiA9MAogCi0gICpnOm5ldHJ3X2hvbWUqCQkgIFRoZSBob21lIGRpcmVjdG9yeSBmb3Igd2hlcmUgYm9va21hcmtzIGFuZAorICAqZzpuZXRyd19ob21lKgkJVGhlIGhvbWUgZGlyZWN0b3J5IGZvciB3aGVyZSBib29rbWFya3MgYW5kCiAJCQkJaGlzdG9yeSBhcmUgc2F2ZWQgKGFzIC5uZXRyd2Jvb2sgYW5kCiAJCQkJLm5ldHJ3aGlzdCkuCiAJCQkJIGRlZmF1bHQ6IHRoZSBmaXJzdCBkaXJlY3Rvcnkgb24gdGhlCiAJCQkJICAgICAgICAgfCdydW50aW1lcGF0aCd8CiAKLSAgKmc6bmV0cndfa2VlcGRpcioJCSAgPTEgKGRlZmF1bHQpIGtlZXAgY3VycmVudCBkaXJlY3RvcnkgaW1tdW5lIGZyb20KKyAgKmc6bmV0cndfa2VlcGRpcioJCT0xIChkZWZhdWx0KSBrZWVwIGN1cnJlbnQgZGlyZWN0b3J5IGltbXVuZSBmcm9tCiAJCQkJICAgdGhlIGJyb3dzaW5nIGRpcmVjdG9yeS4KIAkJCQk9MCBrZWVwIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0aGUgc2FtZSBhcyB0aGUKIAkJCQkgICBicm93c2luZyBkaXJlY3RvcnkuCiAJCQkJVGhlIGN1cnJlbnQgYnJvd3NpbmcgZGlyZWN0b3J5IGlzIGNvbnRhaW5lZCBpbgogCQkJCWI6bmV0cndfY3VyZGlyIChhbHNvIHNlZSB8bmV0cnctY3wpCiAKLSAgKmc6bmV0cndfbGlzdF9jbWQqCQkgIGNvbW1hbmQgZm9yIGxpc3RpbmcgcmVtb3RlIGRpcmVjdG9yaWVzCisgICpnOm5ldHJ3X2xpc3RfY21kKgkJY29tbWFuZCBmb3IgbGlzdGluZyByZW1vdGUgZGlyZWN0b3JpZXMKIAkJCQkgZGVmYXVsdDogKGlmIHNzaCBpcyBleGVjdXRhYmxlKQogCQkJCSAgICAgICAgICAic3NoIEhPU1ROQU1FIGxzIC1GTGEiCiAKLSAgKmc6bmV0cndfbGlzdHN0eWxlKgkJICBTZXQgdGhlIGRlZmF1bHQgbGlzdGluZyBzdHlsZToKKyAgKmc6bmV0cndfbGlzdHN0eWxlKgkJU2V0IHRoZSBkZWZhdWx0IGxpc3Rpbmcgc3R5bGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMDogdGhpbiBsaXN0aW5nIChvbmUgZmlsZSBwZXIgbGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxOiBsb25nIGxpc3RpbmcgKG9uZSBmaWxlIHBlciBsaW5lIHdpdGggdGltZQogCQkJCSAgICAgc3RhbXAgaW5mb3JtYXRpb24gYW5kIGZpbGUgc2l6ZSkKIAkJCQk9IDI6IHdpZGUgbGlzdGluZyAobXVsdGlwbGUgZmlsZXMgaW4gY29sdW1ucykKIAkJCQk9IDM6IHRyZWUgc3R5bGUgbGlzdGluZwotICAqZzpuZXRyd19saXN0X2hpZGUqCQkgIGNvbW1hIHNlcGFyYXRlZCBwYXR0ZXJuIGxpc3QgZm9yIGhpZGluZyBmaWxlcworICAqZzpuZXRyd19saXN0X2hpZGUqCQljb21tYSBzZXBhcmF0ZWQgcGF0dGVybiBsaXN0IGZvciBoaWRpbmcgZmlsZXMKIAkJCQlQYXR0ZXJucyBhcmUgcmVndWxhciBleHByZXNzaW9ucyAoc2VlIHxyZWdleHB8KQogCQkJCUV4YW1wbGU6IGxldCBnOm5ldHJ3X2xpc3RfaGlkZT0gJy4qXC5zd3AkJwogCQkJCSBkZWZhdWx0OiAiIgogCi0gICpnOm5ldHJ3X2xvY2FsY29weWNtZCoJICA9ImNwIiBMaW51eC9Vbml4L01hY09TL0N5Z3dpbgorICAqZzpuZXRyd19sb2NhbGNvcHljbWQqCT0iY3AiIExpbnV4L1VuaXgvTWFjT1MvQ3lnd2luCiAJCQkJPSJjb3B5IiBXaW5kb3dzCiAJCQkJQ29waWVzIG1hcmtlZCBmaWxlcyAofG5ldHJ3LW1mfCkgdG8gdGFyZ2V0CiAJCQkJZGlyZWN0b3J5ICh8bmV0cnctbXR8LCB8bmV0cnctbWN8KQogCi0gICpnOm5ldHJ3X2xvY2FsbW92ZWNtZCoJICA9Im12IiBMaW51eC9Vbml4L01hY09TL0N5Z3dpbgorICAqZzpuZXRyd19sb2NhbG1vdmVjbWQqCT0ibXYiIExpbnV4L1VuaXgvTWFjT1MvQ3lnd2luCiAJCQkJPSJtb3ZlIiBXaW5kb3dzCiAJCQkJTW92ZXMgbWFya2VkIGZpbGVzICh8bmV0cnctbWZ8KSB0byB0YXJnZXQKIAkJCQlkaXJlY3RvcnkgKHxuZXRydy1tdHwsIHxuZXRydy1tbXwpCiAKLSAgKmc6bmV0cndfbG9jYWxta2RpcioJCSAgY29tbWFuZCBmb3IgbWFraW5nIGEgbG9jYWwgZGlyZWN0b3J5CisgICpnOm5ldHJ3X2xvY2FsbWtkaXIqCQljb21tYW5kIGZvciBtYWtpbmcgYSBsb2NhbCBkaXJlY3RvcnkKIAkJCQkgZGVmYXVsdDogIm1rZGlyIgogCi0gICpnOm5ldHJ3X2xvY2Fscm1kaXIqCQkgIHJlbW92ZSBkaXJlY3RvcnkgY29tbWFuZCAocm1kaXIpCisgICpnOm5ldHJ3X2xvY2Fscm1kaXIqCQlyZW1vdmUgZGlyZWN0b3J5IGNvbW1hbmQgKHJtZGlyKQogCQkJCSBkZWZhdWx0OiAicm1kaXIiCiAKLSAgKmc6bmV0cndfbWF4ZmlsZW5hbWVsZW4qCSAgPTMyIGJ5IGRlZmF1bHQsIHNlbGVjdGVkIHNvIGFzIHRvIG1ha2UgbG9uZworICAqZzpuZXRyd19tYXhmaWxlbmFtZWxlbioJPTMyIGJ5IGRlZmF1bHQsIHNlbGVjdGVkIHNvIGFzIHRvIG1ha2UgbG9uZwogCQkJCSAgICBsaXN0aW5ncyBmaXQgb24gODAgY29sdW1uIGRpc3BsYXlzLgogCQkJCUlmIHlvdXIgc2NyZWVuIGlzIHdpZGVyLCBhbmQgeW91IGhhdmUgZmlsZQogCQkJCW9yIGRpcmVjdG9yeSBuYW1lcyBsb25nZXIgdGhhbiAzMiBieXRlcywKIAkJCQl5b3UgbWF5IHNldCB0aGlzIG9wdGlvbiB0byBrZWVwIGxpc3RpbmdzCiAJCQkJY29sdW1uYXIuCiAKLSAgKmc6bmV0cndfbWtkaXJfY21kKgkJICBjb21tYW5kIGZvciBtYWtpbmcgYSByZW1vdGUgZGlyZWN0b3J5CisgICpnOm5ldHJ3X21rZGlyX2NtZCoJCWNvbW1hbmQgZm9yIG1ha2luZyBhIHJlbW90ZSBkaXJlY3RvcnkKIAkJCQl2aWEgc3NoICAoYWxzbyBzZWUgfGc6bmV0cndfcmVtb3RlX21rZGlyfCkKIAkJCQkgZGVmYXVsdDogInNzaCBVU0VQT1JUIEhPU1ROQU1FIG1rZGlyIgogCkBAIC0yMjQ2LDExICsyMzQxLDExIEBACiAJCQkJZXZhbHVhdGlvbiB3aWxsIGJlIHN1cHByZXNzZWQKIAkJCQkoc2VlIHwnYmFsbG9vbmV2YWwnfCkKIAotICAqZzpuZXRyd19yZW1vdGVfbWtkaXIqCSAgY29tbWFuZCBmb3IgbWFraW5nIGEgbG9jYWwgZGlyZWN0b3J5CisgICpnOm5ldHJ3X3JlbW90ZV9ta2RpcioJY29tbWFuZCBmb3IgbWFraW5nIGEgbG9jYWwgZGlyZWN0b3J5CiAJCQkJdmlhIGZ0cCAgKGFsc28gc2VlIHxnOm5ldHJ3X21rZGlyX2NtZHwpCiAJCQkJIGRlZmF1bHQ6ICJta2RpciIKIAotICAqZzpuZXRyd19yZXRtYXAqCQkgIGlmIGl0IGV4aXN0cyBhbmQgaXMgc2V0IHRvIG9uZSwgdGhlbjoKKyAgKmc6bmV0cndfcmV0bWFwKgkJaWYgaXQgZXhpc3RzIGFuZCBpcyBzZXQgdG8gb25lLCB0aGVuOgogCQkJCSAqIGlmIGluIGEgbmV0cnctc2VsZWN0ZWQgZmlsZSwgQU5ECiAJCQkJICogbm8gbm9ybWFsLW1vZGUgPDItbGVmdG1vdXNlPiBtYXBwaW5nIGV4aXN0cywKIAkJCQl0aGVuIHRoZSA8Mi1sZWZ0bW91c2U+IHdpbGwgYmUgbWFwcGVkIGZvciBlYXN5CkBAIC0yMjY5LDIyICsyMzY0LDIyIEBACiAKIAkJCQkgIGRlZmF1bHQ6ID0wCiAKLSAgKmc6bmV0cndfcm1fY21kKgkJICBjb21tYW5kIGZvciByZW1vdmluZyBmaWxlcworICAqZzpuZXRyd19ybV9jbWQqCQljb21tYW5kIGZvciByZW1vdmluZyBmaWxlcwogCQkJCSBkZWZhdWx0OiAic3NoIFVTRVBPUlQgSE9TVE5BTUUgcm0iCiAKLSAgKmc6bmV0cndfcm1kaXJfY21kKgkJICBjb21tYW5kIGZvciByZW1vdmluZyBkaXJlY3RvcmllcworICAqZzpuZXRyd19ybWRpcl9jbWQqCQljb21tYW5kIGZvciByZW1vdmluZyBkaXJlY3RvcmllcwogCQkJCSBkZWZhdWx0OiAic3NoIFVTRVBPUlQgSE9TVE5BTUUgcm1kaXIiCiAKLSAgKmc6bmV0cndfcm1mX2NtZCoJCSAgIGNvbW1hbmQgZm9yIHJlbW92aW5nIHNvZnRsaW5rcworICAqZzpuZXRyd19ybWZfY21kKgkJY29tbWFuZCBmb3IgcmVtb3Zpbmcgc29mdGxpbmtzCiAJCQkJIGRlZmF1bHQ6ICJzc2ggVVNFUE9SVCBIT1NUTkFNRSBybSAtZiIKIAotICAqZzpuZXRyd19zb3J0X2J5KgkJICBzb3J0IGJ5ICJuYW1lIiwgInRpbWUiLCBvciAic2l6ZSIKKyAgKmc6bmV0cndfc29ydF9ieSoJCXNvcnQgYnkgIm5hbWUiLCAidGltZSIsIG9yICJzaXplIgogCQkJCSBkZWZhdWx0OiAibmFtZSIKIAotICAqZzpuZXRyd19zb3J0X2RpcmVjdGlvbioJICBzb3J0aW5nIGRpcmVjdGlvbjogIm5vcm1hbCIgb3IgInJldmVyc2UiCisgICpnOm5ldHJ3X3NvcnRfZGlyZWN0aW9uKglzb3J0aW5nIGRpcmVjdGlvbjogIm5vcm1hbCIgb3IgInJldmVyc2UiCiAJCQkJIGRlZmF1bHQ6ICJub3JtYWwiCiAKLSAgKmc6bmV0cndfc29ydF9vcHRpb25zKgkgIHNvcnRpbmcgaXMgZG9uZSB1c2luZyB8OnNvcnR8OyB0aGlzCisgICpnOm5ldHJ3X3NvcnRfb3B0aW9ucyoJc29ydGluZyBpcyBkb25lIHVzaW5nIHw6c29ydHw7IHRoaXMKIAkJCQl2YXJpYWJsZSdzIHZhbHVlIGlzIGFwcGVuZGVkIHRvIHRoZQogCQkJCXNvcnQgY29tbWFuZC4gIFRodXMgb25lIG1heSBpZ25vcmUgY2FzZSwKIAkJCQlmb3IgZXhhbXBsZSwgd2l0aCB0aGUgZm9sbG93aW5nIGluIHlvdXIKQEAgLTIyOTIsMTQgKzIzODcsMTQgQEAKIAkJCQkJbGV0IGc6bmV0cndfc29ydF9vcHRpb25zPSJpIgogPAkJCQkgZGVmYXVsdDogIiIKIAotICAqZzpuZXRyd19zb3J0X3NlcXVlbmNlKgkgIHdoZW4gc29ydGluZyBieSBuYW1lLCBmaXJzdCBzb3J0IGJ5IHRoZQorICAqZzpuZXRyd19zb3J0X3NlcXVlbmNlKgl3aGVuIHNvcnRpbmcgYnkgbmFtZSwgZmlyc3Qgc29ydCBieSB0aGUKIAkJCQljb21tYS1zZXBhcmF0ZWQgcGF0dGVybiBzZXF1ZW5jZS4gIE5vdGUgdGhhdAogCQkJCXRoZSBmaWxpZ3JlZSBhZGRlZCB0byBpbmRpY2F0ZSBmaWxldHlwZXMKIAkJCQlzaG91bGQgYmUgYWNjb3VudGVkIGZvciBpbiB5b3VyIHBhdHRlcm4uCiAJCQkJIGRlZmF1bHQ6ICdbXC9dJCwqLFwuYmFrJCxcLm8kLFwuaCQsCiAJCQkJICAgICAgICAgICBcLmluZm8kLFwuc3dwJCxcLm9iaiQnCiAKLSAgKmc6bmV0cndfc3BlY2lhbF9zeW50YXgqCSAgSWYgdHJ1ZSwgdGhlbiBjZXJ0YWluIGZpbGVzIHdpbGwgYmUgc2hvd24KKyAgKmc6bmV0cndfc3BlY2lhbF9zeW50YXgqCUlmIHRydWUsIHRoZW4gY2VydGFpbiBmaWxlcyB3aWxsIGJlIHNob3duCiAJCQkJdXNpbmcgc3BlY2lhbCBzeW50YXggaW4gdGhlIGJyb3dzZXI6CiAKIAkJCQkJbmV0cndCYWsgICAgIDogKi5iYWsKQEAgLTIzMjEsMTIgKzI0MTYsMTIgQEAKIDwJCQkJaW50byBvbmUncyA8LnZpbXJjPiB0byB1c2Ugb25lJ3Mgb3duCiAJCQkJcHJlZmVyZW5jZXMuCiAKLSAgKmc6bmV0cndfc3NoX2NtZCoJCSAgT25lIG1heSBzcGVjaWZ5IGFuIGV4ZWN1dGFibGUgY29tbWFuZAorICAqZzpuZXRyd19zc2hfY21kKgkJT25lIG1heSBzcGVjaWZ5IGFuIGV4ZWN1dGFibGUgY29tbWFuZAogCQkJCXRvIHVzZSBpbnN0ZWFkIG9mIHNzaCBmb3IgcmVtb3RlIGFjdGlvbnMKIAkJCQlzdWNoIGFzIGxpc3RpbmcsIGZpbGUgcmVtb3ZhbCwgZXRjLgogCQkJCSBkZWZhdWx0OiBzc2gKIAotICAqZzpuZXRyd19zc2hfYnJvd3NlX3JlamVjdCoJICBzc2ggY2FuIHNvbWV0aW1lcyBwcm9kdWNlIHVud2FudGVkIGxpbmVzLAorICAqZzpuZXRyd19zc2hfYnJvd3NlX3JlamVjdCoJc3NoIGNhbiBzb21ldGltZXMgcHJvZHVjZSB1bndhbnRlZCBsaW5lcywKIAkJCQltZXNzYWdlcywgYmFubmVycywgYW5kIHdoYXRub3QgdGhhdCBvbmUgZG9lc24ndAogCQkJCXdhbnQgbWFzcXVlcmFkaW5nIGFzICJkaXJlY3RvcmllcyIgYW5kICJmaWxlcyIuCiAJCQkJVXNlIHRoaXMgcGF0dGVybiB0byByZW1vdmUgc3VjaCBlbWJlZGRlZApAQCAtMjMzNCwxMSArMjQyOSwxMSBAQAogCQkJCQkgJ150b3RhbFxzXCtcZFwrJCcKIAogCi0gICpnOm5ldHJ3X3RtcGZpbGVfZXNjYXBlKgkgID0nICY7JworICAqZzpuZXRyd190bXBmaWxlX2VzY2FwZSoJPScgJjsnCiAJCQkJZXNjYXBlKCkgaXMgYXBwbGllZCB0byBhbGwgdGVtcG9yYXJ5IGZpbGVzCiAJCQkJdG8gZXNjYXBlIHRoZXNlIGNoYXJhY3RlcnMuCiAKLSAgKmc6bmV0cndfdGltZWZtdCoJCSAgc3BlY2lmeSBmb3JtYXQgc3RyaW5nIHRvIHZpbSdzIHN0cmZ0aW1lKCkuCisgICpnOm5ldHJ3X3RpbWVmbXQqCQlzcGVjaWZ5IGZvcm1hdCBzdHJpbmcgdG8gdmltJ3Mgc3RyZnRpbWUoKS4KIAkJCQlUaGUgZGVmYXVsdCwgIiVjIiwgaXMgInRoZSBwcmVmZXJyZWQgZGF0ZQogCQkJCWFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgY3VycmVudAogCQkJCWxvY2FsZSIgYWNjb3JkaW5nIHRvIG15IG1hbnBhZ2UgZW50cnkgZm9yCkBAIC0yMzQ4LDcgKzI0NDMsNyBAQAogCQkJCSAiICVhICVZLSVtLSVkICAlSS0lTS0lUyAlcCIKIAkJCQkgZGVmYXVsdDogIiVjIgogCi0gICpnOm5ldHJ3X3VzZV9ub3N3ZioJCSAgbmV0cncgbm9ybWFsbHkgYXZvaWRzIHdyaXRpbmcgc3dhcGZpbGVzCisgICpnOm5ldHJ3X3VzZV9ub3N3ZioJCW5ldHJ3IG5vcm1hbGx5IGF2b2lkcyB3cml0aW5nIHN3YXBmaWxlcwogCQkJCWZvciBicm93c2VyIGJ1ZmZlcnMuICBIb3dldmVyLCB1bmRlciBzb21lCiAJCQkJc3lzdGVtcyB0aGlzIGFwcGFyZW50bHkgaXMgY2F1c2luZyBuYXN0eQogCQkJCW1sX2dldCBlcnJvcnMgdG8gYXBwZWFyOyBpZiB5b3UncmUgZ2V0dGluZwpAQCAtMjM1Niw3ICsyNDUxLDcgQEAKIAkJCQkgIGxldCBnOm5ldHJ3X3VzZV9ub3N3Zj0gMAogCQkJCWluIHlvdXIgLnZpbXJjLgogCi0gICpnOm5ldHJ3X3dpbnNpemUqCQkgIHNwZWNpZnkgaW5pdGlhbCBzaXplIG9mIG5ldyB3aW5kb3dzIG1hZGUgd2l0aAorICAqZzpuZXRyd193aW5zaXplKgkJc3BlY2lmeSBpbml0aWFsIHNpemUgb2YgbmV3IHdpbmRvd3MgbWFkZSB3aXRoCiAJCQkJIm8iIChzZWUgfG5ldHJ3LW98KSwgInYiIChzZWUgfG5ldHJ3LXZ8KSwKIAkJCQl8OkhleHBsb3JlfCBvciB8OlZleHBsb3JlfC4gIFRoZSBnOm5ldHJ3X3dpbnNpemUKIAkJCQlpcyBhbiBpbnRlZ2VyIGRlc2NyaWJpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlCkBAIC0yMzY3LDcgKzI0NjIsNyBAQAogCQkJCW9yIGNvbHVtbnMgd2lsbCBiZSB1c2VkIGZvciB0aGUgbmV3IHdpbmRvdy4KIAkJCQkgZGVmYXVsdDogNTAgIChmb3IgNTAlKQogCi0gICpnOm5ldHJ3X3hzdHJsZW4qCQkgIENvbnRyb2xzIGhvdyBuZXRydyBjb21wdXRlcyBzdHJpbmcgbGVuZ3RocywKKyAgKmc6bmV0cndfeHN0cmxlbioJCUNvbnRyb2xzIGhvdyBuZXRydyBjb21wdXRlcyBzdHJpbmcgbGVuZ3RocywKIAkJCQlpbmNsdWRpbmcgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzJyBzdHJpbmcKIAkJCQlsZW5ndGguICh0aGFua3MgdG8gTiBXZWlidWxsLCBUIE1lY2hlbHluY2spCiAJCQkJPTA6IHVzZXMgVmltJ3MgYnVpbHQtaW4gc3RybGVuKCkKQEAgLTIzODMsNyArMjQ3OCw3IEBACiAJCQkJICAgIGltbWVkaWF0ZWx5IHByZWNlZGVkIGJ5IGxhbSwgb25lCiAJCQkJICAgIG90aGVyd2lzZSwgZXRjKQogCi0gICpnOk5ldHJ3VG9wTHZsTWVudSoJCSAgVGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHRvcCBsZXZlbAorICAqZzpOZXRyd1RvcEx2bE1lbnUqCQlUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgdG9wIGxldmVsCiAJCQkJbWVudSBuYW1lOyBieSBkZWZhdWx0LCBpdCdzICJOZXRydy4iLiAgSWYKIAkJCQl5b3Ugd2lzaCB0byBjaGFuZ2UgdGhpcywgZG8gc28gaW4geW91cgogCQkJCS52aW1yYy4KQEAgLTI0ODMsNyArMjU3OCw3IEBACiB0aGUgdXNlciB3aWxsIGJlIGFza2VkIGlmIHMvaGUgd2lzaGVzIHRvIHNhdmUgdGhlIGJ1ZmZlciBmaXJzdCAoeWVzLAogbm8sIG9yIGNhbmNlbCkuCiAKLVJlbGF0ZWQgQWN0aW9ucyB8bmV0cnctY3J8IHxuZXRydy1vfCB8bmV0cnctdHwgfG5ldHJ3LVR8IHxuZXRydy12fAorUmVsYXRlZCBBY3Rpb25zIHxuZXRydy1jcnwgfG5ldHJ3LW98IHxuZXRydy10fCB8bmV0cnctdnwKIEFzc29jaWF0ZWQgc2V0dGluZyB2YXJpYWJsZXM6CiAgICB8ZzpuZXRyd19hbHRvfCAgICBjb250cm9sIGFib3ZlL2JlbG93IHNwbGl0dGluZwogICAgfGc6bmV0cndfYWx0dnwgICAgY29udHJvbCByaWdodC9sZWZ0IHNwbGl0dGluZwpAQCAtMjQ5OCw2ICsyNTkzLDE1IEBACiByZWZyZXNoIGEgbG9jYWwgZGlyZWN0b3J5IGJ5IHVzaW5nICI6ZSAuIi4KIAogCitSRVZFUlNJTkcgU09SVElORyBPUkRFUgkJKm5ldHJ3LXIqICpuZXRydy1yZXZlcnNlKiB7e3syCisKK09uZSBtYXkgdG9nZ2xlIGJldHdlZW4gbm9ybWFsIGFuZCByZXZlcnNlIHNvcnRpbmcgb3JkZXIgYnkgcHJlc3NpbmcgdGhlCisiciIga2V5LgorCitSZWxhdGVkIHRvcGljczogICAgICAgICAgICAgIHxuZXRydy1zfAorQXNzb2NpYXRlZCBzZXR0aW5nIHZhcmlhYmxlOiB8ZzpuZXRyd19zb3J0X2RpcmVjdGlvbnwKKworCiBSRU5BTUlORyBGSUxFUyBPUiBESVJFQ1RPUklFUwkqbmV0cnctbW92ZSogKm5ldHJ3LXJlbmFtZSogKm5ldHJ3LVIqIHt7ezIKIAogSWYgdGhlcmUgYXJlIG5vIG1hcmtlZCBmaWxlczogKHNlZSB8bmV0cnctbWZ8KQpAQCAtMjUyOCwxNSArMjYzMiw2IEBACiB0aGUgViAofGxpbmV3aXNlLXZpc3VhbHwpLgogCiAKLVJFVkVSU0lORyBTT1JUSU5HIE9SREVSCQkqbmV0cnctciogKm5ldHJ3LXJldmVyc2UqIHt7ezIKLQotT25lIG1heSB0b2dnbGUgYmV0d2VlbiBub3JtYWwgYW5kIHJldmVyc2Ugc29ydGluZyBvcmRlciBieSBwcmVzc2luZyB0aGUKLSJyIiBrZXkuCi0KLVJlbGF0ZWQgdG9waWNzOiAgICAgICAgICAgICAgfG5ldHJ3LXN8Ci1Bc3NvY2lhdGVkIHNldHRpbmcgdmFyaWFibGU6IHxnOm5ldHJ3X3NvcnRfZGlyZWN0aW9ufAotCi0KIFNFTEVDVElORyBTT1JUSU5HIFNUWUxFCQkJKm5ldHJ3LXMqICpuZXRydy1zb3J0KiB7e3syCiAKIE9uZSBtYXkgc2VsZWN0IHRoZSBzb3J0aW5nIHN0eWxlIGJ5IG5hbWUsIHRpbWUsIG9yIChmaWxlKSBzaXplLiAgVGhlICJzIiBtYXAKQEAgLTI2MjAsOSArMjcxNSw5IEBACiAJUDUuIE15IHRpbWVzIGNvbWUgdXAgb2RkbHkgaW4gbG9jYWwgYnJvd3NpbmcKIAogCQlEb2VzIHlvdXIgc3lzdGVtJ3Mgc3RyZnRpbWUoKSBhY2NlcHQgdGhlICIlYyIgdG8geWllbGQgZGF0ZXMKLQkJc3VjaCBhcyAiU3VuIEFwciAyNyAxMTo0OToyMyAxOTk3Ij8gIElmIG5vdCwgZG8gYSAibWFuIHN0cmZ0aW1lIgotCQlhbmQgZmluZCBvdXQgd2hhdCBvcHRpb24gc2hvdWxkIGJlIHVzZWQuICBUaGVuIHB1dCBpdCBpbnRvCi0JCXlvdXIgfC52aW1yY3w6ID4KKwkJc3VjaCBhcyAiU3VuIEFwciAyNyAxMTo0OToyMyAxOTk3Ij8gIElmIG5vdCwgZG8gYQorCQkibWFuIHN0cmZ0aW1lIiBhbmQgZmluZCBvdXQgd2hhdCBvcHRpb24gc2hvdWxkIGJlIHVzZWQuICBUaGVuCisJCXB1dCBpdCBpbnRvIHlvdXIgfC52aW1yY3w6ID4KIAogCQkJbGV0IGc6bmV0cndfdGltZWZtdD0gIiVYIiAgKHdoZXJlIFggaXMgdGhlIG9wdGlvbikKIDwKQEAgLTI4OTUsNiArMjk5MCw1NyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAxMi4gSGlzdG9yeQkJCQkJCSpuZXRydy1oaXN0b3J5KiB7e3sxCiAKKwl2MTQ4OglBcHIgMTYsIDIwMTMJKiBjaGFuZ2VkIE5ldHJ3J3MgU3R5bGUgbWVudSB0byBhbGxvdyBkaXJlY3QKKwkJCQkgIGNob2ljZSBvZiBsaXN0aW5nIHN0eWxlLCBoaWRpbmcgc3R5bGUsIGFuZAorCQkJCSAgc29ydGluZyBzdHlsZQorCXYxNDc6CU5vdiAyNCwgMjAxMgkqIChKYW1lcyBNY0NveSkgRXZlbiB3aXRoIGc6bmV0cndfZGlyaGlzdG1heAorCQkJCSAgYXQgemVybywgdGhlIC52aW0vIGRpcmVjdG9yeSB3b3VsZCBiZQorCQkJCSAgY3JlYXRlZCB0byBzdXBwb3J0IGhpc3RvcnkvYm9va21hcmtzLiAgSSd2ZQorCQkJCSAgZ29uZSBvdmVyIG5ldHJ3IHRvIHN1cHByZXNzIGhpc3RvcnkgYW5kCisJCQkJICBib29rbWFya2luZyB3aGVuIGc6bmV0cndfZGlyaGlzdG1heCBpcyB6ZXJvLgorCQkJCSAgRm9yIGluc3RhbmNlLCB0aGUgbWVudXMgd2lsbCBkaXNwbGF5CisJCQkJICAoZGlzYWJsZWQpIHdoZW4gYXR0ZW1wdHMgdG8gdXNlCisJCQkJICBib29rbWFya3MvaGlzdG9yeSBhcmUgbWFkZS4KKwkJTm92IDI5LCAyMDEyCSogKEtpbSBKYW5nLWh3YW4pIHJlcG9ydGVkIHRoYXQgd2l0aAorCQkJCSAgZzpBbGlnbl94c3RybGVuIHNldCB0byAzIHRoYXQgdGhlIGN1cnNvciB3YXMKKwkJCQkgIG1vdmVkIChsaW5ld2lzZSkgYWZ0ZXIgaW52b2NhdGlvbi4gIFRoaXMKKwkJCQkgIHByb2JsZW0gYWxzbyBhZmZsaWN0ZWQgbmV0cncuCisJCQkJICAoc2VlIHxnOm5ldHJ3X3hzdHJsZW58KSBGaXhlZC4KKwkJSmFuIDIxLCAyMDEzCSogKG1hdHRuKSBwcm92aWRlZCBhIHBhdGNoIHRvIGluc2VydCBzb21lCisJCQkJICBlbmRpZnMgbmVlZGVkIHdpdGggdGhlIGNvZGUgaW1wbGVtZW50aW5nCisJCQkJICB8bmV0cnctT3wuCisJCUphbiAyNCwgMjAxMwkqIChKb2huIFN6YWttZWlzdGVyKSBmb3VuZCB0aGF0IHJlbW90ZSBmaWxlCisJCQkJICBlZGl0aW5nIHJlc3VsdGVkIGluIGZpbGV0eXBlIG9wdGlvbnMgYmVpbmcKKwkJCQkgIG92ZXJ3cml0dGVuIGJ5IE5ldHJ3T3B0aW9uUmVzdG9yZSgpLiAgSQorCQkJCSAgbW92ZWQgZmlsZXR5cGUgZGV0ZWN0IGZyb20gTmV0cndHZXRGaWxlKCkKKwkJCQkgIHRvIE5ldHJ3T3B0aW9uUmVzdG9yZS4KKwkJRmViIDE3LCAyMDEzCSogKFl1a2hpcm8gTmFrYWRhaXJhKSBwcm92aWRlZCBhIHBhdGNoCisJCQkJICBjb3JyZWN0aW5nIHNvbWUgc3ludGF4IGVycm9ycy4KKwkJRmViIDI4LCAyMDEzCSogKEluZ28gS2Fya2F0KSBwcm92aWRlZCBhIHBhdGNoIHByZXZlbnRpbmcKKwkJCQkgIHJlY2VpcHQgb2YgYW4gfEU5NXwgd2hlbiByZXZpc2l0aW5nIGEKKwkJCQkgIGZpbGU6Ly8uLi4gc3R5bGUgdXJsLgorCQlNYXIgMTgsIDIwMTMJKiAoR2FyeSBKb2huc29uKSBwb2ludGVkIG91dCB0aGF0IGNoYW5naW5nCisJCQkJICBjZWRpdCB0byA8RXNjPiBjYXVzZWQgcHJvYmxlbXMgd2l0aCB2aXNpbmNyOworCQkJCSAgdGhlIGNlZGl0IHNldHRpbmcgaXMgbm93IGJ5cGFzc2VkIGluIG5ldHJ3IHRvby4KKwkJQXByIDAyLCAyMDEzCSogKFBhdWwgRG9tYXNraXMpIHJlcG9ydGVkIGFuIHVuZGVmaW5lZAorCQkJCSAgdmFyaWFibGUgZXJyb3IgKHM6ZGlkc3RhcnN0YXIpIHdhcworCQkJCSAgb2NjdXJyaW5nLiAgSXQgaXMgbm93IGRlZmluZWQgYXQKKwkJCQkgIGluaXRpYWxpemF0aW9uLgorCQkJCSogaW5jbHVkZWQgYWRkaXRpb25hbCBzYW5pdHkgY2hlY2tpbmcgZm9yIHRoZQorCQkJCSAgbWFya2VkIGZpbGUgZnVuY3Rpb25zLgorCQkJCSogaW5jbHVkZWQgfG5ldHJ3LXFGfCBhbmQgc3BlY2lhbCAiaiIgb3B0aW9uCisJCQkJICBoYW5kbGluZyBmb3IgfG5ldHJ3LW1nfAorCQlBcHIgMTIsIDIwMTMJKiB8bmV0cnctdXwgYW5kIHxuZXRydy1VfCBub3cgaGFuZGxlIGNvdW50cworCQkJCSogdGhlIGZvcm1lciBtYXBwaW5nIGZvciAiVCIgaGFzIGJlZW4gcmVtb3ZlZDsKKwkJCQkgIGluIGl0cyBwbGFjZSBhcmUgbmV3IG1hcHMsIHxuZXRydy1UYnwgYW5kIHxuZXRydy1UaHwuCisJCQkJKiB0aGUgbWVudSBub3cgc3VwcG9ydHMgYSAiVGFyZ2V0cyIgZW50cnkgZm9yCisJCQkJICBlYXNpZXIgdGFyZ2V0IHNlbGVjdGlvbi4gKHNlZSB8bmV0cnctbXR8KQorCQkJCSogKFBhdWwgRG9tYXNraXMpIHJlcG9ydGVkIHNvbWUgcHJvYmxlbXMgd2l0aAorCQkJCSAgbW92aW5nL2NvcHlpbmcgZmlsZXMgdW5kZXIgV2luZG93cycgZ3ZpbQorCQkJCSAgKGllLiBub3QgY3lnd2luKS4gIEZpeGVkLgorCQkJCSogKFBhdWwgTXVlbGxlcikgcHJvdmlkZWQgYSBwYXRjaCB0byBnZXQKKwkJCQkgIHN0YXJ0IGFuZCBydW5kbGwgd29ya2luZyB2aWEgfG5ldHJ3LWd4fAorCQkJCSAgYnkgYnlwYXNzaW5nIHRoZSB1c2VyJ3MgfCdzaGVsbHNsYXNoJ3wgb3B0aW9uLgogCXYxNDY6CU9jdCAyMCwgMjAxMgkqIChEYXZpZCBLb3RjaGFuKSByZXBvcnRlZCB0aGF0IHVuZGVyIFdpbmRvd3MsCiAJCQkJICBkaXJlY3RvcmllcyBuYW1lZCB3aXRoIHVudXN1YWwgY2hhcmFjdGVycwogCQkJCSAgc3VjaCBhcyAiIyIgb3IgIiQiIHdlcmUgbm90IGJlaW5nIGxpc3RlZApAQCAtMjkwNCw2ICszMDUwLDEwIEBACiAJCQkJICBOZXRydyB3aWxsIG5vdyB8OmJ3aXBlfCBuZXRydyBidWZmZXJzCiAJCQkJICB1cG9uIGVkaXRpbmcgYSBmaWxlIGlmIGc6bmV0cndfZmFzdGJyb3dzZQogCQkJCSAgaXMgemVybyBhbmQgaXRzIG5vdCBpbiB0cmVlIGxpc3Rpbmcgc3R5bGUuCisJCQkJKiBmaXhlZCBhIGJ1ZyB3aXRoIHM6TmV0cndJbml0KCkgdGhhdAorCQkJCSAgcHJldmVudGVkIGluaXRpYWxpemF0aW9uIHdpdGggfExpc3RzfCBhbmQKKwkJCQkgIHxEaWN0aW9uYXJpZXN8LgorCQkJCSogfG5ldHJ3LW11fCBub3cgdW5tYXJrcyBtYXJrZWQtZmlsZSBsaXN0cwogCXYxNDU6CUFwciAwNSwgMjAxMgkqIG1vdmVkIHNvbWUgY29tbWFuZCBmcm9tIGEgZzpuZXRyd19sb2NhbF8uLi4KIAkJCQkgIGZvcm1hdCB0byBnOm5ldHdyX2xvY2FsLi4uIGZvcm1hdAogCQkJCSogaW5jbHVkZWQgc29tZSBOT1RFIGxldmVsIG1lc3NhZ2VzIGFib3V0CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9waV90YXIudHh0IGIvcnVudGltZS9kb2MvcGlfdGFyLnR4dAppbmRleCAxZmY0ZDdjLi5hZDIzNDEzIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9waV90YXIudHh0CisrKyBiL3J1bnRpbWUvZG9jL3BpX3Rhci50eHQKQEAgLTEsMTAgKzEsMTAgQEAKLSpwaV90YXIudHh0KglGb3IgVmltIHZlcnNpb24gNy4zLiAgTGFzdCBjaGFuZ2U6IDIwMTIgSmFuIDE3CisqcGlfdGFyLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMy4gIExhc3QgY2hhbmdlOiAyMDEzIEFwciAxNwogCiAJCSAgICAgICArPT09PT09PT09PT09PT09PT09PT0rCiAJCSAgICAgICB8IFRhciBGaWxlIEludGVyZmFjZSB8CiAJCSAgICAgICArPT09PT09PT09PT09PT09PT09PT0rCiAKLUF1dGhvcjogIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiAgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0+CitBdXRob3I6ICBDaGFybGVzIEUuIENhbXBiZWxsICA8TmRyT2NoaXBAU2NhbXBiZWxsUGZhbWlseS5BYml6TT4KIAkgIChyZW1vdmUgTk9TUEFNIGZyb20gQ2FtcGJlbGwncyBlbWFpbCBmaXJzdCkKIENvcHlyaWdodCAyMDA1LTIwMTI6CQkJCQkqdGFyLWNvcHlyaWdodCoKIAlUaGUgVklNIExJQ0VOU0UgKHNlZSB8Y29weXJpZ2h0fCkgYXBwbGllcyB0byB0aGUgZmlsZXMgaW4gdGhpcwpAQCAtNTAsNiArNTAsMjEgQEAKIAkqZzp0YXJfZXh0cmFjdGNtZCogLCB3aGljaCBieSBkZWZhdWx0IGlzID4KIAkJInRhciAteGYiCiA8CisJCQkJCQkqOlRhckRpZmYqCisgICBESUZGRVJFTkNJTkcgU1VQUE9SVH4KKworICAgOlRhckRpZmYgW2ZpbGVuYW1lXQorCisJVGhpcyBjb21tYW5kIHdpbGwgYXR0ZW1wdCB0byBzaG93IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0YXJiYWxsCisJdmVyc2lvbiBvZiBhIGZpbGUgYW5kIHRoZSBhc3NvY2lhdGVkIGZpbGUgb24gdGhlIHN5c3RlbS4gIEluIG9yZGVyIHRvCisJZmluZCB0aGF0IGZpbGUgb24gdGhlIHN5c3RlbSwgdGhlIHNjcmlwdCB1c2VzIHRoZSBwYXRoIGFzc29jaWF0ZWQgd2l0aAorCXRoZSBmaWxlIG1lbnRpb25lZCBpbiB0aGUgdGFyYmFsbC4gIElmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBub3QKKwljb3JyZWN0IGZvciB0aGF0IHBhdGgsIDpUYXJEaWZmIHdpbGwgZmFpbCB0byBmaW5kIHRoZSBhc3NvY2lhdGVkIGZpbGUuCisKKwlJZiB0aGUgW2ZpbGVuYW1lXSBpcyBnaXZlbiwgdGhhdCB0aGF0IGZpbGVuYW1lIChhbmQgcGF0aCkgd2lsbCBiZSB1c2VkCisJdG8gc3BlY2lmeSB0aGUgYXNzb2NpYXRlZCBmaWxlLgorCisKICAgIFBSRVZFTlRJTkcgTE9BRElOR34KIAogICAgSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBkbyBub3Qgd2lzaCB0byB1c2UgdmltIHRvIGV4YW1pbmUgdGFyJ2QgZmlsZXMsCmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy9waV96aXAudHh0IGIvcnVudGltZS9kb2MvcGlfemlwLnR4dAppbmRleCBkOTc2MDU1Li5lNzJkOTgxIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy9waV96aXAudHh0CisrKyBiL3J1bnRpbWUvZG9jL3BpX3ppcC50eHQKQEAgLTEsMTIgKzEsMTIgQEAKLSpwaV96aXAudHh0KglGb3IgVmltIHZlcnNpb24gNy4zLiAgTGFzdCBjaGFuZ2U6IDIwMTIgSmFuIDE3CisqcGlfemlwLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMy4gIExhc3QgY2hhbmdlOiAyMDEzIEFwciAxNwogCiAJCQkJKz09PT09PT09PT09PT09PT09PT09KwogCQkJCXwgWmlwIEZpbGUgSW50ZXJmYWNlIHwKIAkJCQkrPT09PT09PT09PT09PT09PT09PT0rCiAKLUF1dGhvcjogIENoYXJsZXMgRS4gQ2FtcGJlbGwsIEpyLiAgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0+CitBdXRob3I6ICBDaGFybGVzIEUuIENhbXBiZWxsICA8TmRyT2NoaXBAU2NhbXBiZWxsUGZhbWlseS5BYml6TT4KIAkgIChyZW1vdmUgTk9TUEFNIGZyb20gQ2FtcGJlbGwncyBlbWFpbCBmaXJzdCkKLUNvcHlyaWdodDogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTEgQ2hhcmxlcyBFIENhbXBiZWxsLCBKciAqemlwLWNvcHlyaWdodCoKK0NvcHlyaWdodDogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTIgQ2hhcmxlcyBFIENhbXBiZWxsCSAqemlwLWNvcHlyaWdodCoKIAlUaGUgVklNIExJQ0VOU0UgKHNlZSB8Y29weXJpZ2h0fCkgYXBwbGllcyB0byB0aGUgZmlsZXMgaW4gdGhpcwogCXBhY2thZ2UsIGluY2x1ZGluZyB6aXBQbHVnaW4udmltLCB6aXAudmltLCBhbmQgcGlfemlwLnZpbS4gIGV4Y2VwdCB1c2UKIAkiemlwLnZpbSIgaW5zdGVhZCBvZiAiVklNIi4gIExpa2UgYW55dGhpbmcgZWxzZSB0aGF0J3MgZnJlZSwgemlwLnZpbQpAQCAtODUsOCArODUsMTMgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiA0LiBIaXN0b3J5CQkJCQkJCSp6aXAtaGlzdG9yeSoge3t7MQorICAgdjI2IE5vdiAxNSwgMjAxMiAqIChKYXNvbiBTcGlybykgcHJvdmlkZWQgYSBsb3Qgb2YgbmV3IGV4dGVuc2lvbnMgdGhhdAorCQkgICAgICBhcmUgc3lub255bXMgZm9yIC56aXAKICAgIHYyNSBKdW4gMjcsIDIwMTEgKiB1c2luZyBrZWVwaiB3aXRoIHVuemlwIC1aCiAJCSAgICAgIChjb25zaXN0ZW50IHdpdGggdGhlIC1wIHZhcmlhbnQpCisJCSAgICAqIChCZW4gU3Rhbmlmb3JkKSBub3cgdXNlcworCQkJaGFzKCJ3aW4zMnVuaXgiKSAmJiBleGVjdXRhYmxlKCJjeWdwYXRoIikKKwkJICAgICAgYmVmb3JlIGNvbnZlcnRpbmcgdG8gY3lnd2luLXN0eWxlIHBhdGhzCiAgICB2MjQgSnVuIDIxLCAyMDEwICogKEPDqWRyaWMgQm9zZG9ubmF0KSB1bnppcCBzZWVtcyB0byBuZWVkIGl0cyBmaWxlbmFtZXMKIAkJICAgICAgZm5hbWVlc2NhcGUnZCBhcyB3ZWxsIGFzIHNoZWxscXVvdGUnZAogCQkgICAgKiAoTW90b3lhIEt1cm90c3UpIGluc2VydGVkIGtlZXBqIGJlZm9yZSAwZCB0byBwcm90ZWN0CmRpZmYgLS1naXQgYS9ydW50aW1lL2RvYy90YWdzIGIvcnVudGltZS9kb2MvdGFncwppbmRleCA0ZGIxZjVlLi5jOWI3MTQwIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy90YWdzCisrKyBiL3J1bnRpbWUvZG9jL3RhZ3MKQEAgLTE4MzQsNiArMTgzNCw3IEBACiA6Um1WaW1iYWxsCXBpX3ZpbWJhbGwudHh0CS8qOlJtVmltYmFsbCoKIDpTZXhwbG9yZQlwaV9uZXRydy50eHQJLyo6U2V4cGxvcmUqCiA6VE9odG1sCXN5bnRheC50eHQJLyo6VE9odG1sKgorOlRhckRpZmYJcGlfdGFyLnR4dAkvKjpUYXJEaWZmKgogOlRleHBsb3JlCXBpX25ldHJ3LnR4dAkvKjpUZXhwbG9yZSoKIDpVc2VWaW1iYWxsCXBpX3ZpbWJhbGwudHh0CS8qOlVzZVZpbWJhbGwqCiA6VmV4cGxvcmUJcGlfbmV0cncudHh0CS8qOlZleHBsb3JlKgpAQCAtNjg2Miw3ICs2ODYzLDggQEAKIG5ldHJ3LVAJcGlfbmV0cncudHh0CS8qbmV0cnctUCoKIG5ldHJ3LVIJcGlfbmV0cncudHh0CS8qbmV0cnctUioKIG5ldHJ3LVMJcGlfbmV0cncudHh0CS8qbmV0cnctUyoKLW5ldHJ3LVQJcGlfbmV0cncudHh0CS8qbmV0cnctVCoKK25ldHJ3LVRiCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LVRiKgorbmV0cnctVGgJcGlfbmV0cncudHh0CS8qbmV0cnctVGgqCiBuZXRydy1VCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LVUqCiBuZXRydy1YCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LVgqCiBuZXRydy1hCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LWEqCkBAIC02OTMxLDYgKzY5MzMsNyBAQAogbmV0cnctbGlzdGhhY2sJcGlfbmV0cncudHh0CS8qbmV0cnctbGlzdGhhY2sqCiBuZXRydy1sb2dpbglwaV9uZXRydy50eHQJLypuZXRydy1sb2dpbioKIG5ldHJ3LW1CCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LW1CKgorbmV0cnctbUYJcGlfbmV0cncudHh0CS8qbmV0cnctbUYqCiBuZXRydy1tVAlwaV9uZXRydy50eHQJLypuZXRydy1tVCoKIG5ldHJ3LW1iCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LW1iKgogbmV0cnctbWMJcGlfbmV0cncudHh0CS8qbmV0cnctbWMqCkBAIC02OTg1LDYgKzY5ODgsNyBAQAogbmV0cnctcHNjcAlwaV9uZXRydy50eHQJLypuZXRydy1wc2NwKgogbmV0cnctcHNmdHAJcGlfbmV0cncudHh0CS8qbmV0cnctcHNmdHAqCiBuZXRydy1wdXR0eQlwaV9uZXRydy50eHQJLypuZXRydy1wdXR0eSoKK25ldHJ3LXFGCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LXFGKgogbmV0cnctcWIJcGlfbmV0cncudHh0CS8qbmV0cnctcWIqCiBuZXRydy1xZglwaV9uZXRydy50eHQJLypuZXRydy1xZioKIG5ldHJ3LXF1aWNrY29tCXBpX25ldHJ3LnR4dAkvKm5ldHJ3LXF1aWNrY29tKgpAQCAtNzMyOCw3ICs3MzMyLDkgQEAKIHB5dGhvbi1vdXRwdXQJaWZfcHl0aC50eHQJLypweXRob24tb3V0cHV0KgogcHl0aG9uLXB5ZXZhbAlpZl9weXRoLnR4dAkvKnB5dGhvbi1weWV2YWwqCiBweXRob24tcmFuZ2UJaWZfcHl0aC50eHQJLypweXRob24tcmFuZ2UqCitweXRob24tdmFycwlpZl9weXRoLnR4dAkvKnB5dGhvbi12YXJzKgogcHl0aG9uLXZpbQlpZl9weXRoLnR4dAkvKnB5dGhvbi12aW0qCitweXRob24tdnZhcnMJaWZfcHl0aC50eHQJLypweXRob24tdnZhcnMqCiBweXRob24td2luZG93CWlmX3B5dGgudHh0CS8qcHl0aG9uLXdpbmRvdyoKIHB5dGhvbi13aW5kb3dzCWlmX3B5dGgudHh0CS8qcHl0aG9uLXdpbmRvd3MqCiBweXRob24udmltCXN5bnRheC50eHQJLypweXRob24udmltKgpkaWZmIC0tZ2l0IGEvcnVudGltZS9kb2MvdG9kby50eHQgYi9ydW50aW1lL2RvYy90b2RvLnR4dAppbmRleCAyNzc0ODY0Li44MzgxZTZiIDEwMDY0NAotLS0gYS9ydW50aW1lL2RvYy90b2RvLnR4dAorKysgYi9ydW50aW1lL2RvYy90b2RvLnR4dApAQCAtMSw0ICsxLDQgQEAKLSp0b2RvLnR4dCogICAgICBGb3IgVmltIHZlcnNpb24gNy4zLiAgTGFzdCBjaGFuZ2U6IDIwMTMgQXByIDEyCisqdG9kby50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMy4gIExhc3QgY2hhbmdlOiAyMDEzIEFwciAyNAogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0zOSw4ICszOSw2IEBACiAKIEdvIHRocm91Z2ggbW9yZSBjb3Zlcml0eSByZXBvcnRzLgogCi1WYWxncmluZCBlcnJvcnMgaW4gdGVzdCAxNi4KLQogRGlzY3Vzc2lvbiBhYm91dCBjYW5vbmljYWxpemF0aW9uIG9mIEhlYnJldy4gKFJvbiBBYXJvbiwgMjAxMSBBcHJpbCAxMCkKIAogQ2hlY2tpbmcgcnVudGltZSBzY3JpcHRzOiBUaGlsbyBTaXgsIDIwMTIgSnVuIDYuCkBAIC01OSwxNiArNTcsMTQgQEAKIFdvcmtzIE9LIGZvciBlY2hvLCBqdXN0IG5vdCBmb3IgICI6Y2FsbCIgYW5kICI6Y2FsbCBjYWxsKCkiLiAoVGVkLCAyMDExIE1hcgogMTcpCiBQYXRjaCBieSBDaHJpc3RpYW4gQnJhYmFuZHQsIDIwMTMgTWFyIDIzLgotCi1QYXRjaCB0byBtYWtlIGJ1aWxkaW5nIHdpdGggUnVieSAyLjAgb24gNjQgYml0IHN5c3RlbSB3b3JrLiAoZWFnbGV0bXQgKEtvaGVpCi1TdXp1a2kpLCAyMDEzIE1hciAyNSkKK05vdCAxMDAlIHN1cmUgdGhpcyBpcyB0aGUgcmlnaHQgc29sdXRpb24uCiAKIFdpbjMyOiBXaGVuIGEgZGlyZWN0b3J5IG5hbWUgY29udGFpbnMgYW4gZXhjbGFtYXRpb24gbWFyaywgY29tcGxldGlvbiBkb2Vzbid0CiBjb21wbGV0ZSB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeS4gIE5vIGVzY2FwaW5nIGZvciB0aGUgIiEiPyAoSmFuCiBTdG9ja2VyLCAyMDEyIEphbiA1KQogCi1QYXRjaCB0byBhdm9pZCB0aGF0IHZpc3VsIG1vdGlvbiBicmVha3MgcmVwZWF0IHdpdGggIi4iLiAoU3VuZyBQYWUsIDIwMTMgTWFyCi0yNSkKK1BhdGNoIHRvIGxvYWQgfi8udmltL3ZpbXJjIHdoZW4gfi8udmltcmMgaXNuJ3QgZm91bmQuIChMZWNoIExvcmVucywgMjAxMyBBcHIKKzEzKQogCiBQcm9ibGVtIGNhdXNlZCBieSBwYXRjaCA3LjMuNjM4OiB3aW5kb3ctPm9wZW4gZG9lcyBub3QgdXBkYXRlIHdpbmRvdwogY29ycmVjdGx5LiBJc3N1ZSA5MS4KQEAgLTg3LDIyICs4MywzMSBAQAogCiBQYXRjaCB0byBtYWtlIGZvbGQgdXBkYXRlcyBtdWNoIGZhc3Rlci4gKENocmlzdGlhbiBCcmFiYW5kdCwgMjAxMiBEZWMpCiAKLVBhdGNoIHRvIGFkZCBtb3JlIHRlc3RpbmcgZm9yIFZpc3VhbCBvcGVyYXRvcnMuIChnbHRzLCAyMDEzIE1hciAyOCkKLQogUGF0Y2ggZm9yIElNRSBoYW5kbGluZywgYWRkcyAnaW1hY3RpdmF0ZWZ1bmMnIGFuZCAnaW1zdGF0dXNmdW5jJyBvcHRpb24uCiAoWXVraWhpcm8gTmFrYWRhaXJhLCAyMDEyIEF1ZyAxNikKIFBhdGNoIHRvIGltcHJvdmUgSU1FIGhhbmRsaW5nLiAoWWFzdWhpcm8gTWF0c3Vtb3RvLCAyMDEyIEp1bCAxOCkKIAorVW5kbyBwcm9ibGVtOiBsaW5lIG5vdCByZW1vdmVkIGFzIGV4cGVjdGVkIHdoZW4gdXNpbmcgc2V0bGluZSgpIGZyb20gSW5zZXJ0Cittb2RlLiAoSXNyYWVsIENoYXVjYSwgMjAxMCBNYXkgMTMsIG1vcmUgaW4gc2Vjb25kIG1zZykKK0JyZWFrIHVuZG8gd2hlbiBDVFJMLVIgPSBjaGFuZ2VzIHRoZSB0ZXh0PyAgT3Igc2F2ZSBtb3JlIGxpbmVzPworUGF0Y2ggYnkgQ2hyaXN0aWFuIEJyYWJhbmR0LCAyMDEyIE5vdiAxNi4KKwogSXNzdWUgNTQ6IGRvY3VtZW50IGJlaGF2aW9yIG9mIC1jb21wbGV0ZSwgYWxzbyBleHBhbmRzIGFyZy4KIAogTWF0Y2hlcyBtaWdodCBiZSBoaWdobGlnaHRlZCBjb3JyZWN0bHkuIEluZWZmaWNpZW50IHBhdGNoIGJ5IENocmlzdGlhbgogQnJhYmFuZHQsIDIwMTMgRmViIDI2LgogCi1OZXcgc3ludGF4IGZpbGVzIGZvciBhcHQuIChxdWlkYW1lLCAyMDEyIFNlcCAyMSkKKy0gICBBZGQgcmVnZXggZm9yICdwYXJhZ3JhcGhzJyBhbmQgJ3NlY3Rpb25zJzogJ3BhcmFyZScgYW5kICdzZWN0cmUnLiAgQ29tYmluZQorICAgIHRoZSB0d28gaW50byBhIHJlZ2V4IGZvciBzZWFyY2hpbmcuIChOZWQgS29ueikKK1BhdGNoIGJ5IENocmlzdGlhbiBCcmFiYW5kdCwgMjAxMyBBcHIgMjAsIHVuZmluaXNoZWQuCiAKIFBhdGNoIHRvIHVzZSBib2xkL2l0YWxpYyBmb250cyB3aGVuICdndWlmb250ZXdpZGUnIGlzIHNldC4gKEtlbiBUYWthdGEsIDIwMTMKIE1hciAzMSkKIAorUGF0Y2ggdG8gZml4IGZpbmRpbmcgdG9vbGJhciBiaXRtYXBzLiAgSXNzdWUgMTI5LgorCitQYXRjaCB0byBoYW5kbGUgUHl0aG9uIFN5c3RlbUV4aXQuIChZYXN1aGlybyBNYXRzdW1vdG8sIDIwMTMgQXByIDE1KQorCiB2OnJlZ2lzdGVyIGlzIG5vdCBkaXJlY3RseSByZXNldCB0byAiIGFmdGVyIGEgZGVsZXRlIGNvbW1hbmQgdGhhdCBzcGVjaWZpZXMgYQogcmVnaXN0ZXIuICBJdCBpcyByZXNldCBhZnRlciB0aGUgbmV4dCBjb21tYW5kLiAoU3RldmUgVmVybWV1bGVuLCAyMDEzIE1hciAxNikKIApAQCAtMTE2LDE1ICsxMjEsOCBAQAogUGF0Y2ggdG8gc2V0IGFudGlhbGlhc2luZyBzdHlsZSBvbiBXaW5kb3dzLiAoT25kcmVqIEJhbGF6LCAyMDEzIE1hciAxNCkKIE5lZWRzIGEgZGlmZmVyZW50IGNoZWNrIGZvciBDTEVBUlRZUEVfUVVBTElUWS4KIAotUGF0Y2ggZm9yIHJlcGVhdGluZyBjaGFuZ2UgdGhhdCB1c2VzICI6bm9ybWFsIi4gKGdsdHMsIDIwMTMgTWFyY2ggMjMpCi0KIElzc3VlIDcyOiAnYXV0b2NoZGlyJyBjYXVzZXMgcHJvYmxlbXMgZm9yIDp2aW1ncmVwLgogCi1VbmRvIHByb2JsZW06IGxpbmUgbm90IHJlbW92ZWQgYXMgZXhwZWN0ZWQgd2hlbiB1c2luZyBzZXRsaW5lKCkgZnJvbSBJbnNlcnQKLW1vZGUuIChJc3JhZWwgQ2hhdWNhLCAyMDEwIE1heSAxMywgbW9yZSBpbiBzZWNvbmQgbXNnKQotQnJlYWsgdW5kbyB3aGVuIENUUkwtUiA9IGNoYW5nZXMgdGhlIHRleHQ/ICBPciBzYXZlIG1vcmUgbGluZXM/Ci1QYXRjaCBieSBDaHJpc3RpYW4gQnJhYmFuZHQsIDIwMTIgTm92IDE2LgotCiBJbiB0aGUgQVRURU5USU9OIG1lc3NhZ2UgYWJvdXQgYW4gZXhpc3Rpbmcgc3dhcCBmaWxlLCBtZW50aW9uIHRoZSBuYW1lIG9mIHRoZQogcHJvY2VzcyB0aGF0IGlzIHJ1bm5pbmcuICBJdCBtaWdodCBhY3R1YWxseSBiZSBzb21lIG90aGVyIHByb2dyYW0sIGUuZy4gYWZ0ZXIKIGEgcmVib290LgpAQCAtMTc3LDYgKzE3NSw5IEBACiBQYXRjaCB3aXRoIHN1Z2dlc3Rpb25zIGZvciBzdGFydGluZy50eHQuIChUb255IE1lY2hlbHluY2ssIDIwMTIgT2N0IDI0KQogQnV0IHVzZSBHbm9tZSBpbnN0ZWFkIG9mIEdUSz8KIAorUGF0Y2ggdG8gbWFrZSBGb2N1c0dhaW5lZCBhbmQgRm9jdXNMb3N0IHdvcmsgaW4gbW9kZXJuIHRlcm1pbmFscy4gKEhheWFraQorU2FpdG8sIDIwMTMgQXByIDI0KQorCiBTaG91bGQgYmUgcG9zc2libGUgdG8gZW5hYmxlL2Rpc2FibGUgbWF0Y2hwYXJlbiBwZXIgd2luZG93IG9yIGJ1ZmZlci4KIEFkZCBhIGNoZWNrIGZvciBiOm5vX21hdGNoX3BhcmVuIGluIEhpZ2hsaWdodF9tYXRjaGluZ19QYWlyKCkgKE1hcmNpbgogU3phbW90dWxza2ksIDIwMTIgTm92IDgpCkBAIC0yNDYsNiArMjQ3LDkgQEAKIFBhdGNoIHRvIHByaW50IHRoZSByZXN1bHQgb2YgYSA6cHl0aG9uIGNvbW1hbmQuIChNYXhpbSBQaGlsaXBwb3YKIDxwaGlsaXBwb3ZtaUBnbWFpbC5jb20+LCAyMDEyIEF1ZyAxNikgIFVwZGF0ZSBBdWcgMTcuCiAKK1BhdGNoIHRvIHVzZSAucG5nIGljb25zIGZvciB0aGUgdG9vbGJhciBvbiBNUy1XaW5kb3dzLiAoTWFydGluIEdpZXNla2luZywgMjAxMworQXByIDE4KQorCiBQcm9ibGVtIHdpdGggd2luZml4aGVpZ2h0IGFuZCByZXNpemluZy4gKFl1a2loaXJvIE5ha2FkYWlyYSwgMjAxMSBTZXAgMTcpCiBQYXRjaCBTZXAgMTguCiAKQEAgLTkzNCw2ICs5MzgsNyBAQAogQWxzbzogc3dhcCBmaWxlcyBhcmUgaW4gfi90bXAvICBPbmUgaGFzIHJlbGF0aXZlIGZpbGUgbmFtZSAiLm1vemlsbGEvLi4uIi4KIAogQWRkIHY6bW90aW9uX2ZvcmNlLiAoS2FuYSBOYXRzdW5vLCAyMDA4IERlYyA2KQorTWF5YmUgY2FsbCBpdCB2Om1vdGlvbnR5cGUuCiAKIFJ1bnRpbWUgZmlsZXMgZm9yIENsb2p1cmUuIChUb3JhbGYgV2l0dG5lciwgMjAwOCBKdW4gMjUpCiAKQEAgLTUwODYsOCArNTA5MSw2IEBACiAtICAgQWRkIGEgdmFyaWFudCBvZiBDVFJMLVYgdGhhdCBzdG9wcyBpbnRlcnByZXRhdGlvbiBvZiBtb3JlIHRoYW4gb25lCiAgICAgY2hhcmFjdGVyLglGb3IgZW50ZXJpbmcgbWFwcGluZ3Mgb24gdGhlIGNvbW1hbmQgbGluZSB3aGVyZSBhIGtleSBjb250YWlucwogICAgIHNldmVyYWwgc3BlY2lhbCBjaGFyYWN0ZXJzLCBlLmcuIGEgdHJhaWxpbmcgbmV3bGluZS4KLS0gICBBZGQgcmVnZXggZm9yICdwYXJhZ3JhcGhzJyBhbmQgJ3NlY3Rpb25zJzogJ3BhcmFyZScgYW5kICdzZWN0cmUnLiAgQ29tYmluZQotICAgIHRoZSB0d28gaW50byBhIHJlZ2V4IGZvciBzZWFyY2hpbmcuIChOZWQgS29ueikKIC0gICBNYWtlICcyJyBvcHRpb24gaW4gJ2Zvcm1hdG9wdGlvbnMnIGFsc28gd29yayBpbnNpZGUgY29tbWVudHMuCiAtICAgQWRkICdzJyBmbGFnIHRvICdmb3JtYXRvcHRpb25zJzogRG8gbm90IGJyZWFrIHdoZW4gaW5zaWRlIGEgc3RyaW5nLiAoRG9kdCkKIC0gICBXaGVuIHdpbmRvdyBzaXplIGNoYW5nZWQgKHdpdGggdGhlIG1vdXNlKSBhbmQgbWFkZSB0b28gc21hbGwsIHNldCBpdCBiYWNrCmRpZmYgLS1naXQgYS9ydW50aW1lL2Z0cGx1Z2luL21ha2UudmltIGIvcnVudGltZS9mdHBsdWdpbi9tYWtlLnZpbQppbmRleCAzOGVlMDMwLi5mYjE4MGMwIDEwMDY0NAotLS0gYS9ydW50aW1lL2Z0cGx1Z2luL21ha2UudmltCisrKyBiL3J1bnRpbWUvZnRwbHVnaW4vbWFrZS52aW0KQEAgLTEsNyArMSw3IEBACiAiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQogIiBMYW5ndWFnZToJTWFrZQogIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgotIiBMYXN0IENoYW5nZToJMjAwNiBKdW4gMTcKKyIgTGFzdCBDaGFuZ2U6CTIwMTMgQXByIDIyCiAKICIgT25seSBkbyB0aGlzIHdoZW4gbm90IGRvbmUgeWV0IGZvciB0aGlzIGJ1ZmZlcgogaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCkBAIC0yNiwzICsyNiw4IEBACiAKICIgSW5jbHVkaW5nIGZpbGVzLgogbGV0ICZsOmluY2x1ZGUgPSAnXlxzKmluY2x1ZGUnCisKKyIgRm9yIG1hdGNoaXQudmltLCBzdWdnZXN0ZWQgYnkgQWxiZXJ0IE5ldHltay4KK2lmIGV4aXN0cygibG9hZGVkX21hdGNoaXQiKQorICBsZXQgYjptYXRjaF93b3JkcyA9ICdcPGlmXChuXClcPVwoZXFcfGRlZlwpXD46XDxlbHNlXD46XDxlbmRpZlw+LFw8ZGVmaW5lXD46XDxlbmRlZlw+JworZW5kaWYKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcGx1Z2luL2dldHNjcmlwdFBsdWdpbi52aW0gYi9ydW50aW1lL3BsdWdpbi9nZXRzY3JpcHRQbHVnaW4udmltCmluZGV4IDI2OTdjZGIuLjQ1Yzg1OGEgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvcGx1Z2luL2dldHNjcmlwdFBsdWdpbi52aW0KKysrIGIvcnVudGltZS9wbHVnaW4vZ2V0c2NyaXB0UGx1Z2luLnZpbQpAQCAtMSw2ICsxLDYgQEAKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAiIGdldHNjcmlwdFBsdWdpbi52aW0KLSIgIEF1dGhvcjoJQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuCisiICBBdXRob3I6CUNoYXJsZXMgRS4gQ2FtcGJlbGwKICIgIERhdGU6CUphbiAwNywgMjAwOAogIiAgSW5zdGFsbGluZzoJOmhlbHAgZ2x2cy1pbnN0YWxsCiAiICBVc2FnZToJOmhlbHAgZ2x2cwpAQCAtMTksNyArMTksNyBAQAogIGVuZGlmCiAgZmluaXNoCiBlbmRpZgotbGV0IGc6bG9hZGVkX2dldHNjcmlwdFBsdWdpbiA9ICJ2MzQiCitsZXQgZzpsb2FkZWRfZ2V0c2NyaXB0UGx1Z2luID0gInYzNSIKIGxldCBzOmtlZXBjcG8gICAgICAgICAgICAgICAgPSAmY3BvCiBzZXQgY3BvJnZpbQogCmRpZmYgLS1naXQgYS9ydW50aW1lL3BsdWdpbi9uZXRyd1BsdWdpbi52aW0gYi9ydW50aW1lL3BsdWdpbi9uZXRyd1BsdWdpbi52aW0KaW5kZXggYWM0ZGZjNi4uY2ZmODEyYiAxMDA2NDQKLS0tIGEvcnVudGltZS9wbHVnaW4vbmV0cndQbHVnaW4udmltCisrKyBiL3J1bnRpbWUvcGx1Z2luL25ldHJ3UGx1Z2luLnZpbQpAQCAtMSw5ICsxLDkgQEAKICIgbmV0cndQbHVnaW4udmltOiBIYW5kbGVzIGZpbGUgdHJhbnNmZXIgYW5kIHJlbW90ZSBkaXJlY3RvcnkgbGlzdGluZyBhY3Jvc3MgYSBuZXR3b3JrCiAiICAgICAgICAgICAgUExVR0lOIFNFQ1RJT04KLSIgRGF0ZToJCUF1ZyAyNCwgMjAxMQotIiBNYWludGFpbmVyOglDaGFybGVzIEUgQ2FtcGJlbGwsIEpyIDxOZHJPY2hpcEBTY2FtcGJlbGxQZmFtaWx5LkFiaXpNLU5PU1BBTT4KKyIgRGF0ZToJCURlYyAwNiwgMjAxMgorIiBNYWludGFpbmVyOglDaGFybGVzIEUgQ2FtcGJlbGwgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0tTk9TUEFNPgogIiBHZXRMYXRlc3RWaW1TY3JpcHRzOiAxMDc1IDEgOkF1dG9JbnN0YWxsOiBuZXRydy52aW0KLSIgQ29weXJpZ2h0OiAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwOCBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4ge3t7MQorIiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDEyIENoYXJsZXMgRS4gQ2FtcGJlbGwge3t7MQogIiAgICAgICAgICAgICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoaXMgY29kZSwKICIgICAgICAgICAgICAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodAogIiAgICAgICAgICAgICAgIG5vdGljZSBpcyBjb3BpZWQgd2l0aCBpdC4gTGlrZSBhbnl0aGluZyBlbHNlIHRoYXQncyBmcmVlLApAQCAtMjAsNyArMjAsNyBAQAogaWYgJmNwIHx8IGV4aXN0cygiZzpsb2FkZWRfbmV0cndQbHVnaW4iKQogIGZpbmlzaAogZW5kaWYKLWxldCBnOmxvYWRlZF9uZXRyd1BsdWdpbiA9ICJ2MTQ2IgorbGV0IGc6bG9hZGVkX25ldHJ3UGx1Z2luID0gInYxNDgiCiBpZiB2OnZlcnNpb24gPCA3MDIKICBlY2hvaGwgV2FybmluZ01zZyB8IGVjaG8gIioqKm5ldHJ3KioqIHlvdSBuZWVkIHZpbSB2ZXJzaW9uIDcuMiBmb3IgdGhpcyB2ZXJzaW9uIG9mIG5ldHJ3IiB8IGVjaG9obCBOb25lCiAgZmluaXNoCkBAIC00OCwxMCArNDgsMTAgQEAKIGF1Z3JvdXAgTmV0d29yawogIGF1IQogIGF1IEJ1ZlJlYWRDbWQgICBmaWxlOi8vKgkJY2FsbCBuZXRydyNGaWxlVXJsUmVhZChleHBhbmQoIjxhbWF0Y2g+IikpCi0gYXUgQnVmUmVhZENtZCAgIGZ0cDovLyoscmNwOi8vKixzY3A6Ly8qLGh0dHA6Ly8qLGh0dHBzOi8vKixkYXY6Ly8qLGRhdnM6Ly8qLHJzeW5jOi8vKixzZnRwOi8vKglleGUgInNpbGVudCBkb2F1IEJ1ZlJlYWRQcmUgIi5mbmFtZWVzY2FwZShleHBhbmQoIjxhbWF0Y2g+IikpfGNhbGwgbmV0cncjTnJlYWQoMixleHBhbmQoIjxhbWF0Y2g+IikpfGV4ZSAic2lsZW50IGRvYXUgQnVmUmVhZFBvc3QgIi5mbmFtZWVzY2FwZShleHBhbmQoIjxhbWF0Y2g+IikpCi0gYXUgRmlsZVJlYWRDbWQgIGZ0cDovLyoscmNwOi8vKixzY3A6Ly8qLGh0dHA6Ly8qLGh0dHBzOi8vKixkYXY6Ly8qLGRhdnM6Ly8qLHJzeW5jOi8vKixzZnRwOi8vKglleGUgInNpbGVudCBkb2F1IEZpbGVSZWFkUHJlICIuZm5hbWVlc2NhcGUoZXhwYW5kKCI8YW1hdGNoPiIpKXxjYWxsIG5ldHJ3I05yZWFkKDEsZXhwYW5kKCI8YW1hdGNoPiIpKXxleGUgInNpbGVudCBkb2F1IEZpbGVSZWFkUG9zdCAiLmZuYW1lZXNjYXBlKGV4cGFuZCgiPGFtYXRjaD4iKSkKLSBhdSBCdWZXcml0ZUNtZCAgZnRwOi8vKixyY3A6Ly8qLHNjcDovLyosZGF2Oi8vKixkYXZzOi8vKixyc3luYzovLyosc2Z0cDovLyoJCQlleGUgInNpbGVudCBkb2F1IEJ1ZldyaXRlUHJlICIuZm5hbWVlc2NhcGUoZXhwYW5kKCI8YW1hdGNoPiIpKXxleGUgJ053cml0ZSAnLmZuYW1lZXNjYXBlKGV4cGFuZCgiPGFtYXRjaD4iKSl8ZXhlICJzaWxlbnQgZG9hdSBCdWZXcml0ZVBvc3QgIi5mbmFtZWVzY2FwZShleHBhbmQoIjxhbWF0Y2g+IikpCi0gYXUgRmlsZVdyaXRlQ21kIGZ0cDovLyoscmNwOi8vKixzY3A6Ly8qLGRhdjovLyosZGF2czovLyoscnN5bmM6Ly8qLHNmdHA6Ly8qCQkJZXhlICJzaWxlbnQgZG9hdSBGaWxlV3JpdGVQcmUgIi5mbmFtZWVzY2FwZShleHBhbmQoIjxhbWF0Y2g+IikpfGV4ZSAiJ1ssJ10iLidOd3JpdGUgJy5mbmFtZWVzY2FwZShleHBhbmQoIjxhbWF0Y2g+IikpfGV4ZSAic2lsZW50IGRvYXUgRmlsZVdyaXRlUG9zdCAiLmZuYW1lZXNjYXBlKGV4cGFuZCgiPGFtYXRjaD4iKSkKKyBhdSBCdWZSZWFkQ21kICAgZnRwOi8vKixyY3A6Ly8qLHNjcDovLyosaHR0cDovLyosaHR0cHM6Ly8qLGRhdjovLyosZGF2czovLyoscnN5bmM6Ly8qLHNmdHA6Ly8qCWV4ZSAic2lsIGRvYXUgQnVmUmVhZFByZSAiLmZuYW1lZXNjYXBlKGV4cGFuZCgiPGFtYXRjaD4iKSl8Y2FsbCBuZXRydyNOcmVhZCgyLGV4cGFuZCgiPGFtYXRjaD4iKSl8ZXhlICJzaWwgZG9hdSBCdWZSZWFkUG9zdCAiLmZuYW1lZXNjYXBlKGV4cGFuZCgiPGFtYXRjaD4iKSkKKyBhdSBGaWxlUmVhZENtZCAgZnRwOi8vKixyY3A6Ly8qLHNjcDovLyosaHR0cDovLyosaHR0cHM6Ly8qLGRhdjovLyosZGF2czovLyoscnN5bmM6Ly8qLHNmdHA6Ly8qCWV4ZSAic2lsIGRvYXUgRmlsZVJlYWRQcmUgIi5mbmFtZWVzY2FwZShleHBhbmQoIjxhbWF0Y2g+IikpfGNhbGwgbmV0cncjTnJlYWQoMSxleHBhbmQoIjxhbWF0Y2g+IikpfGV4ZSAic2lsIGRvYXUgRmlsZVJlYWRQb3N0ICIuZm5hbWVlc2NhcGUoZXhwYW5kKCI8YW1hdGNoPiIpKQorIGF1IEJ1ZldyaXRlQ21kICBmdHA6Ly8qLHJjcDovLyosc2NwOi8vKixkYXY6Ly8qLGRhdnM6Ly8qLHJzeW5jOi8vKixzZnRwOi8vKgkJCWV4ZSAic2lsIGRvYXUgQnVmV3JpdGVQcmUgIi5mbmFtZWVzY2FwZShleHBhbmQoIjxhbWF0Y2g+IikpfGV4ZSAnTndyaXRlICcuZm5hbWVlc2NhcGUoZXhwYW5kKCI8YW1hdGNoPiIpKXxleGUgInNpbCBkb2F1IEJ1ZldyaXRlUG9zdCAiLmZuYW1lZXNjYXBlKGV4cGFuZCgiPGFtYXRjaD4iKSkKKyBhdSBGaWxlV3JpdGVDbWQgZnRwOi8vKixyY3A6Ly8qLHNjcDovLyosZGF2Oi8vKixkYXZzOi8vKixyc3luYzovLyosc2Z0cDovLyoJCQlleGUgInNpbCBkb2F1IEZpbGVXcml0ZVByZSAiLmZuYW1lZXNjYXBlKGV4cGFuZCgiPGFtYXRjaD4iKSl8ZXhlICInWywnXSIuJ053cml0ZSAnLmZuYW1lZXNjYXBlKGV4cGFuZCgiPGFtYXRjaD4iKSl8ZXhlICJzaWwgZG9hdSBGaWxlV3JpdGVQb3N0ICIuZm5hbWVlc2NhcGUoZXhwYW5kKCI8YW1hdGNoPiIpKQogIHRyeQogICBhdSBTb3VyY2VDbWQgICBmdHA6Ly8qLHJjcDovLyosc2NwOi8vKixodHRwOi8vKixodHRwczovLyosZGF2Oi8vKixkYXZzOi8vKixyc3luYzovLyosc2Z0cDovLyoJZXhlICdOc291cmNlICcuZm5hbWVlc2NhcGUoZXhwYW5kKCI8YW1hdGNoPiIpKQogIGNhdGNoIC9eVmltXCUoKFxhXCspXClcPTpFMjE2LwpkaWZmIC0tZ2l0IGEvcnVudGltZS9wbHVnaW4vdGFyUGx1Z2luLnZpbSBiL3J1bnRpbWUvcGx1Z2luL3RhclBsdWdpbi52aW0KaW5kZXggMDFkZGQ0OC4uMDM0Y2JlMiAxMDA2NDQKLS0tIGEvcnVudGltZS9wbHVnaW4vdGFyUGx1Z2luLnZpbQorKysgYi9ydW50aW1lL3BsdWdpbi90YXJQbHVnaW4udmltCkBAIC0xLDYgKzEsNiBAQAogIiB0YXJQbHVnaW4udmltIC0tIGEgVmltIHBsdWdpbiBmb3IgYnJvd3NpbmcgdGFyZmlsZXMKICIgT3JpZ2luYWwgd2FzIGNvcHlyaWdodCAoYykgMjAwMiwgTWljaGFlbCBDLiBUb3JlbiA8bWN0QHRvcmVuLm5ldD4KLSIgTW9kaWZpZWQgYnkgQ2hhcmxlcyBFLiBDYW1wYmVsbCwgSnIuCisiIE1vZGlmaWVkIGJ5IENoYXJsZXMgRS4gQ2FtcGJlbGwKICIgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgogIgogIiBVcGRhdGVzIGFyZSBhdmFpbGFibGUgZnJvbSA8aHR0cDovL21pY2hhZWwudG9yZW4ubmV0L2NvZGUvPi4gIElmIHlvdQpAQCAtMTQsNyArMTQsNyBAQAogaWYgJmNwIHx8IGV4aXN0cygiZzpsb2FkZWRfdGFyUGx1Z2luIikKICBmaW5pc2gKIGVuZGlmCi1sZXQgZzpsb2FkZWRfdGFyUGx1Z2luID0gInYyOCIKK2xldCBnOmxvYWRlZF90YXJQbHVnaW4gPSAidjI5IgogbGV0IHM6a2VlcGNwbyAgICAgICAgICA9ICZjcG8KIHNldCBjcG8mdmltCiAKZGlmZiAtLWdpdCBhL3J1bnRpbWUvcGx1Z2luL3ppcFBsdWdpbi52aW0gYi9ydW50aW1lL3BsdWdpbi96aXBQbHVnaW4udmltCmluZGV4IGViYjY0MjcuLmM4NjIzMGMgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvcGx1Z2luL3ppcFBsdWdpbi52aW0KKysrIGIvcnVudGltZS9wbHVnaW4vemlwUGx1Z2luLnZpbQpAQCAtMSw5ICsxLDkgQEAKICIgemlwUGx1Z2luLnZpbTogSGFuZGxlcyBicm93c2luZyB6aXBmaWxlcwogIiAgICAgICAgICAgIFBMVUdJTiBQT1JUSU9OCi0iIERhdGU6CQkJQXVnIDE1LCAyMDExCi0iIE1haW50YWluZXI6CUNoYXJsZXMgRSBDYW1wYmVsbCwgSnIgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0tTk9TUEFNPgorIiBEYXRlOgkJCU5vdiAxNSwgMjAxMgorIiBNYWludGFpbmVyOglDaGFybGVzIEUgQ2FtcGJlbGwgPE5kck9jaGlwQFNjYW1wYmVsbFBmYW1pbHkuQWJpek0tTk9TUEFNPgogIiBMaWNlbnNlOgkJVmltIExpY2Vuc2UgIChzZWUgdmltJ3MgOmhlbHAgbGljZW5zZSkKLSIgQ29weXJpZ2h0OiAgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMSBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4ge3t7MQorIiBDb3B5cmlnaHQ6ICAgIENvcHlyaWdodCAoQykgMjAwNS0yMDEyIENoYXJsZXMgRS4gQ2FtcGJlbGwge3t7MQogIiAgICAgICAgICAgICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoaXMgY29kZSwKICIgICAgICAgICAgICAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodAogIiAgICAgICAgICAgICAgIG5vdGljZSBpcyBjb3BpZWQgd2l0aCBpdC4gTGlrZSBhbnl0aGluZyBlbHNlIHRoYXQncyBmcmVlLApAQCAtMjAsNyArMjAsNyBAQAogaWYgJmNwIHx8IGV4aXN0cygiZzpsb2FkZWRfemlwUGx1Z2luIikKICBmaW5pc2gKIGVuZGlmCi1sZXQgZzpsb2FkZWRfemlwUGx1Z2luID0gInYyNSIKK2xldCBnOmxvYWRlZF96aXBQbHVnaW4gPSAidjI2IgogbGV0IHM6a2VlcGNwbyAgICAgICAgICA9ICZjcG8KIHNldCBjcG8mdmltCiAKQEAgLTQwLDcgKzQwLDcgQEAKICAgYXUgRmlsZVdyaXRlQ21kIHppcGZpbGU6Ki8qCWNhbGwgemlwI1dyaXRlKGV4cGFuZCgiPGFtYXRjaD4iKSkKICBlbmRpZgogCi0gYXUgQnVmUmVhZENtZCAgICouemlwLCouamFyLCoueHBpLCoud2FyLCouZWFyLCouY2VsemlwLCoub3h0CQljYWxsIHppcCNCcm93c2UoZXhwYW5kKCI8YW1hdGNoPiIpKQorIGF1IEJ1ZlJlYWRDbWQgICAqLnppcCwqLmphciwqLnhwaSwqLmphLCoud2FyLCouZWFyLCouY2VsemlwLCoub3h0LCoua216LCoud3N6LCoueGFwLCouZG9jeCwqLmRvY20sKi5kb3R4LCouZG90bSwqLnBvdHgsKi5wb3RtLCoucHBzeCwqLnBwc20sKi5wcHR4LCoucHB0bSwqLnBwYW0sKi5zbGR4LCoudGhteCwqLnhsYW0sKi54bHN4LCoueGxzbSwqLnhsc2IsKi54bHR4LCoueGx0bSwqLnhsYW0sKi5jcnR4LCoudmR3LCouZ2xveCwqLmdjc3gsKi5ncXN4CQljYWxsIHppcCNCcm93c2UoZXhwYW5kKCI8YW1hdGNoPiIpKQogYXVncm91cCBFTkQKIAogIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L2FwdGNvbmYudmltIGIvcnVudGltZS9zeW50YXgvYXB0Y29uZi52aW0KaW5kZXggZGFiZmU1Ni4uMDYwN2NhMSAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvYXB0Y29uZi52aW0KKysrIGIvcnVudGltZS9zeW50YXgvYXB0Y29uZi52aW0KQEAgLTEsNyArMSw3IEBACiAiIFZpbSBzeW50YXggZmlsZQogIiBMYW5ndWFnZToJQVBUIGNvbmZpZyBmaWxlCiAiIE1haW50YWluZXI6CVlhbm4gQW1hciA8cXVpZGFtZUBwb2l2cm9uLm9yZz4KLSIgTGFzdCBDaGFuZ2U6CTIwMTIgT2N0IDA2CisiIExhc3QgQ2hhbmdlOgkyMDEzIEFwciAxMgogCiAiIEZvciB2ZXJzaW9uIDUueDogQ2xlYXIgYWxsIHN5bnRheCBpdGVtcwogIiBGb3IgdmVyc2lvbiA2LnggYW5kIDcueDogUXVpdCB3aGVuIGEgc3ludGF4IGZpbGUgd2FzIGFscmVhZHkgbG9hZGVkCkBAIC0xNyw3ICsxNyw2IEBACiBsZXQgczpjcG9fc2F2ZSA9ICZjcG8KIHNldCBjcG8mdmltCiAKLQogIiBFcnJvcnM6CiAiIENhdGNoIGFsbCB0aGF0IGlzIG5vdCBvdmVycmlkZGVuIGJ5IG5leHQgcnVsZXMvaXRlbXM6CiBzeW4gbWF0Y2gJYXB0Y29uZkVycm9yCQlkaXNwbGF5ICdbXls6Ymxhbms6XV0nCkBAIC0xOTgsNiArMTk3LDI0IEBACiAJXCBQYWNrYWdlLVN0YXR1cy1Gb3JtYXQgUGF1c2UtQWZ0ZXItRG93bmxvYWQgUHJldmlldy1MaW1pdAogCVwgUHJvbXB0LU9uLUV4aXQgU3R5bGVzIFZpZXdUYWJzCiAKK3N5biBrZXl3b3JkCWFwdGNvbmZBcHRpdHVkZVVJS2V5QmluZGluZ3MgY29udGFpbmVkCisJXCBBcHBseVNvbHV0aW9uIEJlZ2luIEJ1Z1JlcG9ydCBDYW5jZWwgQ2hhbmdlbG9nIENoYW5nZVBrZ1RyZWVHcm91cGluZworCVwgQ2hhbmdlUGtnVHJlZUxpbWl0IENoYW5nZVBrZ1RyZWVTb3J0aW5nIENsZWFyQXV0byBDb2xsYXBzZUFsbAorCVwgQ29sbGFwc2VUcmVlIENvbW1pdCBDb25maXJtIEN5Y2xlIEN5Y2xlTmV4dCBDeWNsZU9yZGVyIEN5Y2xlUHJldgorCVwgRGVsQk9MIERlbEJhY2sgRGVsRU9MIERlbEZvcndhcmQgRGVwZW5kZW5jaWVzIERlc2NyaXB0aW9uQ3ljbGUKKwlcIERlc2NyaXB0aW9uRG93biBEZXNjcmlwdGlvblVwIERvSW5zdGFsbFJ1biBEb3duIERwa2dSZWNvbmZpZ3VyZQorCVwgRHVtcFJlc29sdmVyIEVkaXRIaWVyIEVuZCBFeGFtaW5lU29sdXRpb24gRXhwYW5kQWxsIEV4cGFuZFRyZWUKKwlcIEZpcnN0U29sdXRpb24gRm9yYmlkVXBncmFkZSBGb3JnZXROZXdQYWNrYWdlcyBIZWxwIEhpc3RvcnlOZXh0CisJXCBIaXN0b3J5UHJldiBIb2xkIEluc3RhbGwgSW5zdGFsbFNpbmdsZSBLZWVwIExhc3RTb2x1dGlvbiBMZWZ0CisJXCBMZXZlbERvd24gTGV2ZWxVcCBNYXJrVXBncmFkYWJsZSBNaW5lRmxhZ1NxdWFyZSBNaW5lTG9hZEdhbWUKKwlcIE1pbmVTYXZlR2FtZSBNaW5lU3dlZXBTcXVhcmUgTWluZVVuY292ZXJTcXVhcmUgTWluZVVuY292ZXJTd2VlcFNxdWFyZQorCVwgTmV4dFBhZ2UgTmV4dFNvbHV0aW9uIE5vIFBhcmVudCBQcmV2UGFnZSBQcmV2U29sdXRpb24gUHVyZ2UKKwlcIFB1c2hCdXR0b24gUXVpdCBRdWl0UHJvZ3JhbSBSZWplY3RCcmVha0hvbGRzIFJlZnJlc2ggUmVtb3ZlCisJXCBSZUluc3RhbGwgUmVwZWF0U2VhcmNoQmFjayBSZVNlYXJjaCBSZXZlcnNlRGVwZW5kZW5jaWVzIFJpZ2h0CisJXCBTYXZlSGllciBTZWFyY2ggU2VhcmNoQmFjayBTZWFyY2hCcm9rZW4gU2V0QXV0byBTaG93SGlkZURlc2NyaXB0aW9uCisJXCBTb2x1dGlvbkFjdGlvbkFwcHJvdmUgU29sdXRpb25BY3Rpb25SZWplY3QgVG9nZ2xlRXhwYW5kZWQKKwlcIFRvZ2dsZU1lbnVBY3RpdmUgVW5kbyBVcCBVcGRhdGVQYWNrYWdlTGlzdCBWZXJzaW9ucyBZZXMKKwogc3luIGtleXdvcmQJYXB0Y29uZkFwdGl0dWRlVUlTdHlsZXMgY29udGFpbmVkCiAJXCBCdWxsZXQgQ2hhbmdlTG9nTmV3ZXJWZXJzaW9uIERlZmF1bHQgRGVwQnJva2VuIERpc2FibGVkTWVudUVudHJ5CiAJXCBEb3dubG9hZEhpdCBEb3dubG9hZFByb2dyZXNzIEVkaXRMaW5lIEVycm9yIEhlYWRlciBIaWdobGlnaHRlZE1lbnVCYXIKQEAgLTIyMCw3ICsyMzcsOCBAQAogCVwgYXB0Y29uZkFwdGl0dWRlQ21kbGluZVNhZmVVcGdyYWRlLGFwdGNvbmZBcHRpdHVkZUxvZ2dpbmcsCiAJXCBhcHRjb25mQXB0aXR1ZGVQcm9ibGVtUmVzb2x2ZXIsYXB0Y29uZkFwdGl0dWRlU2FmZVJlc29sdmVyLAogCVwgYXB0Y29uZkFwdGl0dWRlU2NyZWVuc2hvdCxhcHRjb25mQXB0aXR1ZGVTZWN0aW9ucyxhcHRjb25mQXB0aXR1ZGVVSSwKLQlcIGFwdGNvbmZBcHRpdHVkZVVJU3R5bGVzLGFwdGNvbmZBcHRpdHVkZVVJU3R5bGVzRWxlbWVudHMKKwlcIGFwdGNvbmZBcHRpdHVkZVVJS2V5QmluZGluZ3MsYXB0Y29uZkFwdGl0dWRlVUlTdHlsZXMsCisJXCBhcHRjb25mQXB0aXR1ZGVVSVN0eWxlc0VsZW1lbnRzCiAiIH19fQogIiBEZWJUYWdzOiB7e3sKIHN5biBrZXl3b3JkCWFwdGNvbmZEZWJUYWdzIGNvbnRhaW5lZApAQCAtNDQ5LDYgKzQ2Nyw3IEBACiBoaSBkZWYgbGluayBhcHRjb25mQXB0aXR1ZGVTY3JlZW5zaG90CQlhcHRjb25mT3B0aW9uCiBoaSBkZWYgbGluayBhcHRjb25mQXB0aXR1ZGVTZWN0aW9ucwkJYXB0Y29uZk9wdGlvbgogaGkgZGVmIGxpbmsgYXB0Y29uZkFwdGl0dWRlVUkJCQlhcHRjb25mT3B0aW9uCitoaSBkZWYgbGluayBhcHRjb25mQXB0aXR1ZGVVSUtleUJpbmRpbmdzCWFwdGNvbmZPcHRpb24KIGhpIGRlZiBsaW5rIGFwdGNvbmZBcHRpdHVkZVVJU3R5bGVzCQlhcHRjb25mT3B0aW9uCiBoaSBkZWYgbGluayBhcHRjb25mQXB0aXR1ZGVVSVN0eWxlc0VsZW1lbnRzCWFwdGNvbmZPcHRpb24KIApkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvZ3Jvb3Z5LnZpbSBiL3J1bnRpbWUvc3ludGF4L2dyb292eS52aW0KaW5kZXggNzQ1YTA5Ny4uMjA1NmJkMSAxMDA2NDQKLS0tIGEvcnVudGltZS9zeW50YXgvZ3Jvb3Z5LnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9ncm9vdnkudmltCkBAIC0yLDkgKzIsOSBAQAogIiBMYW5ndWFnZToJR3Jvb3Z5CiAiIE9yaWdpbmFsIEF1dGhvcjoJQWxlc3NpbyBQYWNlIDxiaWxseS5jb3JnYW5AdGlzY2FsaS5pdD4KICIgTWFpbnRhaW5lcjoJVG9iaWFzIFJhcHAgPHlhaHV4b0BnbXguZGU+Ci0iIFZlcnNpb246IAkwLjEuMTIKKyIgVmVyc2lvbjogCTAuMS4xMwogIiBVUkw6CSAgaHR0cDovL3d3dy52aW0ub3JnL3NjcmlwdHMvc2NyaXB0LnBocD9zY3JpcHRfaWQ9OTQ1Ci0iIExhc3QgQ2hhbmdlOgkyMDEzIE1hciAxNAorIiBMYXN0IENoYW5nZToJMjAxMyBBcHIgMjQKIAogIiBUSEUgT1JJR0lOQUwgQVVUSE9SJ1MgTk9URVM6CiAiCkBAIC03NCw3ICs3NCw3IEBACiAKICIga2V5d29yZCBkZWZpbml0aW9ucwogc3luIGtleXdvcmQgZ3Jvb3Z5RXh0ZXJuYWwgICAgICAgIG5hdGl2ZSBwYWNrYWdlCi1zeW4gbWF0Y2ggZ3Jvb3Z5RXh0ZXJuYWwgICAgICAgICAgIlw8aW1wb3J0XChcc1wrc3RhdGljXD5cKVw/Igorc3luIG1hdGNoIGdyb292eUV4dGVybmFsICAgICAgICAgICJcPGltcG9ydFw+XChcc1wrc3RhdGljXD5cKVw/Igogc3luIGtleXdvcmQgZ3Jvb3Z5RXJyb3IgICAgICAgICAgIGdvdG8gY29uc3QKIHN5biBrZXl3b3JkIGdyb292eUNvbmRpdGlvbmFsICAgICBpZiBlbHNlIHN3aXRjaAogc3luIGtleXdvcmQgZ3Jvb3Z5UmVwZWF0ICAgICAgICAgIHdoaWxlIGZvciBkbwpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbmV0cncudmltIGIvcnVudGltZS9zeW50YXgvbmV0cncudmltCmluZGV4IGQ0ZDI2NmMuLmEzMTlkN2MgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvc3ludGF4L25ldHJ3LnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9uZXRydy52aW0KQEAgLTEsNyArMSw3IEBACiAiIExhbmd1YWdlICAgOiBOZXRydyBSZW1vdGUtRGlyZWN0b3J5IExpc3RpbmcgU3ludGF4CiAiIE1haW50YWluZXIgOiBDaGFybGVzIEUuIENhbXBiZWxsLCBKci4KLSIgTGFzdCBjaGFuZ2U6IEphbiAxNCwgMjAwOQotIiBWZXJzaW9uICAgIDogMTYKKyIgTGFzdCBjaGFuZ2U6IERlYyAxOCwgMjAxMgorIiBWZXJzaW9uICAgIDogMTcKICIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICIgU3ludGF4IENsZWFyaW5nOiB7e3sxCkBAIC01NiwxMyArNTYsMTYgQEAKICBpZiBoYXMoInVuaXgiKQogICBzeW4gbWF0Y2ggbmV0cndDb3JlRHVtcAkiXDxjb3JlXCUoXC5cZFwrXClcPVw+IgkJCQljb250YWlucz1uZXRyd1RyZWVCYXIsQE5vU3BlbGwKICBlbmRpZgorIHN5biBtYXRjaCBuZXRyd0xleAkJIlwoXFNcKyBcKSpcU1wrXC5cJShsXHxsZXhcKVw+IgkJCWNvbnRhaW5zPW5ldHJ3VHJlZUJhcixATm9TcGVsbAorIHN5biBtYXRjaCBuZXRyd1lhY2MJCSJcKFxTXCsgXCkqXFNcK1wueVw+IgkJCQljb250YWlucz1uZXRyd1RyZWVCYXIsQE5vU3BlbGwKICBzeW4gbWF0Y2ggbmV0cndEYXRhCQkiXChcU1wrIFwpKlxTXCtcLmRhdFw+IgkJCQljb250YWlucz1uZXRyd1RyZWVCYXIsQE5vU3BlbGwKLSBzeW4gbWF0Y2ggbmV0cndIZHIJCSJcKFxTXCsgXCkqXFNcK1wuaFw+IgkJCQljb250YWlucz1uZXRyd1RyZWVCYXIsQE5vU3BlbGwKKyBzeW4gbWF0Y2ggbmV0cndEb2MJCSJcKFxTXCsgXCkqXFNcK1wuXCUoZG9jXHx0eHRcfHBkZlx8cHNcKSIJY29udGFpbnM9bmV0cndUcmVlQmFyLEBOb1NwZWxsCisgc3luIG1hdGNoIG5ldHJ3SGRyCQkiXChcU1wrIFwpKlxTXCtcLlwlKGhcfGhwcFwpXD4iCQkJY29udGFpbnM9bmV0cndUcmVlQmFyLEBOb1NwZWxsCiAgc3luIG1hdGNoIG5ldHJ3TGliCQkiXChcU1wrIFwpKlxTKlwuXCUoYVx8c29cfGxpYlx8ZGxsXClcPiIJCWNvbnRhaW5zPW5ldHJ3VHJlZUJhcixATm9TcGVsbAogIHN5biBtYXRjaCBuZXRyd01ha2VGaWxlCSJcPFttTV1ha2VmaWxlXD5cfFwoXFNcKyBcKSpcU1wrXC5tYWtcPiIJY29udGFpbnM9bmV0cndUcmVlQmFyLEBOb1NwZWxsCiAgc3luIG1hdGNoIG5ldHJ3T2JqCQkiXChcU1wrIFwpKlxTKlwuXCUob1x8b2JqXClcPiIJCQljb250YWlucz1uZXRyd1RyZWVCYXIsQE5vU3BlbGwKLSBzeW4gbWF0Y2ggbmV0cndUYWdzICAgIAkiXDx0YWdzXD4iCQkJCQljb250YWlucz1uZXRyd1RyZWVCYXIsQE5vU3BlbGwKICBzeW4gbWF0Y2ggbmV0cndUYWdzCQkiXDxcKEFObWVudVx8QU50YWdzXClcPiIJCQljb250YWlucz1uZXRyd1RyZWVCYXIsQE5vU3BlbGwKKyBzeW4gbWF0Y2ggbmV0cndUYWdzICAgIAkiXDx0YWdzXD4iCQkJCQljb250YWlucz1uZXRyd1RyZWVCYXIsQE5vU3BlbGwKICBzeW4gbWF0Y2ggbmV0cndUaWxkZQkJIlwoXFNcKyBcKSpcU1wrXH5cKlw9XD4iCQkJY29udGFpbnM9bmV0cndUcmVlQmFyLEBOb1NwZWxsCiAgc3luIG1hdGNoIG5ldHJ3VG1wCQkiXDx0bXBcKFxTXCsgXCkqXFNcK1w+XHxcKFxTXCsgXCkqXFMqdG1wXD4iCWNvbnRhaW5zPW5ldHJ3VHJlZUJhcixATm9TcGVsbAogZW5kaWYKQEAgLTk1LDEyICs5OCwxNSBAQAogIGhpIGRlZmF1bHQgbGluayBuZXRyd0NvbXByZXNzCUZvbGRlZAogIGhpIGRlZmF1bHQgbGluayBuZXRyd0NvcmVEdW1wCVdhcm5pbmdNc2cKICBoaSBkZWZhdWx0IGxpbmsgbmV0cndEYXRhCURpZmZDaGFuZ2UKKyBoaSBkZWZhdWx0IGxpbmsgbmV0cndIZHIJbmV0cndQbGFpbgorIGhpIGRlZmF1bHQgbGluayBuZXRyd0xleAluZXRyd1BsYWluCiAgaGkgZGVmYXVsdCBsaW5rIG5ldHJ3TGliCURpZmZDaGFuZ2UKICBoaSBkZWZhdWx0IGxpbmsgbmV0cndNYWtlZmlsZQlEaWZmQ2hhbmdlCiAgaGkgZGVmYXVsdCBsaW5rIG5ldHJ3T2JqCUZvbGRlZAogIGhpIGRlZmF1bHQgbGluayBuZXRyd1RpbGRlCUZvbGRlZAogIGhpIGRlZmF1bHQgbGluayBuZXRyd1RtcAlGb2xkZWQKICBoaSBkZWZhdWx0IGxpbmsgbmV0cndUYWdzCUZvbGRlZAorIGhpIGRlZmF1bHQgbGluayBuZXRyd1lhY2MJbmV0cndQbGFpbgogZW5kaWYKIAogIiBDdXJyZW50IFN5bnRheDoge3t7MQpkaWZmIC0tZ2l0IGEvcnVudGltZS9zeW50YXgvbmluamEudmltIGIvcnVudGltZS9zeW50YXgvbmluamEudmltCmluZGV4IGY3MDA4ZWMuLmQ4MTMyNjcgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvc3ludGF4L25pbmphLnZpbQorKysgYi9ydW50aW1lL3N5bnRheC9uaW5qYS52aW0KQEAgLTIsOCArMiwxMSBAQAogIiBMYW5ndWFnZTogbmluamEgYnVpbGQgZmlsZSBhcyBkZXNjcmliZWQgYXQKICIgICAgICAgICAgIGh0dHA6Ly9tYXJ0aW5lLmdpdGh1Yi5jb20vbmluamEvbWFudWFsLmh0bWwKICIgVmVyc2lvbjogMS4zCi0iIExhc3QgQ2hhbmdlOiAyMDEzIEFwciAxMgorIiBMYXN0IENoYW5nZTogMjAxMy8wNC8xNgogIiBNYWludGFpbmVyOiBOaWNvbGFzIFdlYmVyIDxuaWNvbGFzd2ViZXJAZ214LmRlPgorIiBWZXJzaW9uIDEuMyBvZiB0aGlzIHNjcmlwdCBpcyBpbiB0aGUgdXBzdHJlYW0gdmltIHJlcG9zaXRvcnkgYW5kIHdpbGwgYmUKKyIgaW5jbHVkZWQgaW4gdGhlIG5leHQgdmltIHJlbGVhc2UuIElmIHlvdSBjaGFuZ2UgdGhpcywgcGxlYXNlIHNlbmQgeW91ciBjaGFuZ2UKKyIgdXBzdHJlYW0uCiAKICIgbmluamEgbGV4ZXIgYW5kIHBhcnNlciBhcmUgYXQKICIgaHR0cHM6Ly9naXRodWIuY29tL21hcnRpbmUvbmluamEvYmxvYi9tYXN0ZXIvc3JjL2xleGVyLmluLmNjCkBAIC0xMyw2ICsxNiw5IEBACiAgIGZpbmlzaAogZW5kaWYKIAorbGV0IHM6Y3BvX3NhdmUgPSAmY3BvCitzZXQgY3BvJnZpbQorCiBzeW4gY2FzZSBtYXRjaAogCiBzeW4gbWF0Y2ggbmluamFDb21tZW50IC8jLiovICBjb250YWlucz1AU3BlbGwKQEAgLTMzLDcgKzM5LDggQEAKICIgbGV0IGFzc2lnbm1lbnRzLgogIiBtYW5pZmVzdF9wYXJzZXIuY2MsIFBhcnNlUnVsZSgpCiBzeW4gcmVnaW9uIG5pbmphUnVsZSBzdGFydD0iXnJ1bGUiIGVuZD0iXlx6ZVxTIiBjb250YWlucz1BTEwgdHJhbnNwYXJlbnQKLXN5biBrZXl3b3JkIG5pbmphUnVsZUNvbW1hbmQgY29udGFpbmVkIGNvbW1hbmQgZGVwcyBkZXBmaWxlIGRlc2NyaXB0aW9uIGdlbmVyYXRvciBwb29sIHJlc3RhdCByc3BmaWxlIHJzcGZpbGVfY29udGVudAorc3luIGtleXdvcmQgbmluamFSdWxlQ29tbWFuZCBjb250YWluZWQgY29tbWFuZCBkZXBzIGRlcGZpbGUgZGVzY3JpcHRpb24gZ2VuZXJhdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCBwb29sIHJlc3RhdCByc3BmaWxlIHJzcGZpbGVfY29udGVudAogCiBzeW4gcmVnaW9uIG5pbmphUG9vbCBzdGFydD0iXnBvb2wiIGVuZD0iXlx6ZVxTIiBjb250YWlucz1BTEwgdHJhbnNwYXJlbnQKIHN5biBrZXl3b3JkIG5pbmphUG9vbENvbW1hbmQgY29udGFpbmVkIGRlcHRoCkBAIC02OSwzICs3Niw2IEBACiBoaSBkZWYgbGluayBuaW5qYVZhciBJZGVudGlmaWVyCiAKIGxldCBiOmN1cnJlbnRfc3ludGF4ID0gIm5pbmphIgorCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvc3ludGF4L3JlZGlmLnZpbSBiL3J1bnRpbWUvc3ludGF4L3JlZGlmLnZpbQppbmRleCA1NTRkZTU4Li4xYjgzYzA3IDEwMDY0NAotLS0gYS9ydW50aW1lL3N5bnRheC9yZWRpZi52aW0KKysrIGIvcnVudGltZS9zeW50YXgvcmVkaWYudmltCkBAIC0xLDcgKzEsNyBAQAogIiBWaW0gc3ludGF4IGZpbGUKICIgTGFuZ3VhZ2U6ICAgICAgICAgIFJlRElGCiAiIE1haW50YWluZXI6ICAgICAgICBBeGVsIENhc3RlbGxhbmUgPGF4ZWwuY2FzdGVsbGFuZUBwb2x5dGVjaG5pcXVlLmVkdT4KLSIgTGFzdCBDaGFuZ2U6ICAgICAgIDIwMTMgQXByaWwgMDgKKyIgTGFzdCBDaGFuZ2U6ICAgICAgIDIwMTMgQXByaWwgMTcKICIgT3JpZ2luYWwgQXV0aG9yOiAgIEF4ZWwgQ2FzdGVsbGFuZQogIiBTb3VyY2U6ICAgICAgICAgICAgaHR0cDovL29wZW5saWIub3JnL2FjbWVzL3Jvb3QvZG9jdS9yZWRpZl8xLmh0bWwKICIgRmlsZSBFeHRlbnNpb246ICAgIHJkZgpAQCAtNTgxLDYgKzU4MSw3IEBACiBzeW50YXggcmVnaW9uIHJlZGlmQXJndW1lbnROYW1lUHJlZml4IHN0YXJ0PS9cJSheXFNcey19OlwpXEAhXFMvIGVuZD0vXlxTXHstfTovbWU9cy0xIGNvbnRhaW5lZAogc3ludGF4IHJlZ2lvbiByZWRpZkFyZ3VtZW50TmFtZVN1ZmZpeCBzdGFydD0vXCUoXlxTXHstfTpcKVxAIVxTLyBlbmQ9L15cU1x7LX06L21lPXMtMSBjb250YWluZWQKIHN5bnRheCByZWdpb24gcmVkaWZBcmd1bWVudE5hbWUgc3RhcnQ9L1wlKF5cU1x7LX06XClcQCFcUy8gZW5kPS9eXFNcey19Oi9tZT1zLTEgY29udGFpbmVkCitzeW50YXggcmVnaW9uIHJlZGlmQXJndW1lbnROdW1iZXIgc3RhcnQ9L1wlKF5cU1x7LX06XClcQCFcUy8gZW5kPS9eXFNcey19Oi9tZT1zLTEgY29udGFpbmVkCiBzeW50YXggcmVnaW9uIHJlZGlmQXJndW1lbnRPcmRlckhvbWVwYWdlIHN0YXJ0PS9cJSheXFNcey19OlwpXEAhXFMvIGVuZD0vXlxTXHstfTovbWU9cy0xIGNvbnRhaW5lZAogc3ludGF4IHJlZ2lvbiByZWRpZkFyZ3VtZW50T3JkZXJVUkwgc3RhcnQ9L1wlKF5cU1x7LX06XClcQCFcUy8gZW5kPS9eXFNcey19Oi9tZT1zLTEgY29udGFpbmVkCiBzeW50YXggcmVnaW9uIHJlZGlmQXJndW1lbnRQaG9uZSBzdGFydD0vXCUoXlxTXHstfTpcKVxAIVxTLyBlbmQ9L15cU1x7LX06L21lPXMtMSBjb250YWluZWQKQEAgLTc5MywxMiArNzk0LDExIEBACiAiICAgIE1vbnRoCiAiICAgIFRPRE8gQXJlIG51bWJlcnMgYWxzbyBhbGxvd2VkPwogc3ludGF4IG1hdGNoIHJlZGlmQXJndW1lbnRNb250aCAvXCUoXlxTXHstfTpcKVxAIVxTLiovIGNvbnRhaW5zPXJlZGlmR29vZE1vbnRoIGNvbnRhaW5lZCBkaXNwbGF5Ci1zeW50YXggbWF0Y2ggcmVkaWZHb29kTW9udGggL1w8XChKYW5cJSh1YXJ5XClcPVx8RmViXCUocnVhcnlcKVw9XHxNYXJcJShjaFwpXD1cfEFwclwlKGlsXClcPVx8TWF5XHxKdW5lXD1cfEp1bHlcPVx8QXVnXCUodXN0XClcPVx8U2VwXCUodGVtYmVyXClcPVx8T2N0XCUob2JlclwpXD1cfE5vdlwlKGVtYmVyXClcPVx8RGVjXCUoZW1iZXJcKVw9XClcPi8gbmV4dGdyb3VwPXJlZGlmV3JvbmdMaW5lRW5kaW5nIGNvbnRhaW5lZCBkaXNwbGF5CitzeW50YXggbWF0Y2ggcmVkaWZHb29kTW9udGggL1w8XChKYW5cJSh1YXJ5XClcPVx8RmViXCUocnVhcnlcKVw9XHxNYXJcJShjaFwpXD1cfEFwclwlKGlsXClcPVx8TWF5XHxKdW5lXD1cfEp1bHlcPVx8QXVnXCUodXN0XClcPVx8U2VwXCUodGVtYmVyXClcPVx8T2N0XCUob2JlclwpXD1cfE5vdlwlKGVtYmVyXClcPVx8RGVjXCUoZW1iZXJcKVw9XClcPi8gY29udGFpbmVkIGRpc3BsYXkKIAogaGlnaGxpZ2h0IGRlZiBsaW5rIHJlZGlmR29vZE1vbnRoIHJlZGlmU3BlY2lhbAogCi0iICAgIEludGVnZXJzOiBOdW1iZXIsIFZvbHVtZSwgQ2hhcHRlcgotc3ludGF4IG1hdGNoIHJlZGlmQXJndW1lbnROdW1iZXIgL1wlKF5cU1x7LX06XClcQCFcUy4qLyBjb250YWlucz1yZWRpZkNvcnJlY3RJbnRlZ2VyIGNvbnRhaW5lZCBkaXNwbGF5CisiICAgIEludGVnZXJzOiBWb2x1bWUsIENoYXB0ZXIKIHN5bnRheCBtYXRjaCByZWRpZkFyZ3VtZW50Vm9sdW1lIC9cJSheXFNcey19OlwpXEAhXFMuKi8gY29udGFpbnM9cmVkaWZDb3JyZWN0SW50ZWdlciBjb250YWluZWQgZGlzcGxheQogc3ludGF4IG1hdGNoIHJlZGlmQXJndW1lbnRDaGFwdGVyIC9cJSheXFNcey19OlwpXEAhXFMuKi8gY29udGFpbnM9cmVkaWZDb3JyZWN0SW50ZWdlciBjb250YWluZWQgZGlzcGxheQogc3ludGF4IG1hdGNoIHJlZGlmQ29ycmVjdEludGVnZXIgL1sxLTldXGQqLyBuZXh0Z3JvdXA9cmVkaWZXcm9uZ0xpbmVFbmRpbmcgY29udGFpbmVkIGRpc3BsYXkKQEAgLTgxNSwxOSArODE1LDE5IEBACiAiICAgIEVkaXRpb24KICIgICAgQmFzZWQgb24gdGhlIGV4YW1wbGUgaW4gdGhlIGRvY3VtZW50YXRpb24uCiBzeW50YXggbWF0Y2ggcmVkaWZBcmd1bWVudEVkaXRpb24gL1wlKF5cU1x7LX06XClcQCFcUy4qLyBjb250YWlucz1yZWRpZkdvb2RFZGl0aW9uIGNvbnRhaW5lZCBkaXNwbGF5Ci1zeW50YXggbWF0Y2ggcmVkaWZHb29kRWRpdGlvbiAvMXN0XHwybmRcfDNyZFx8WzQtOV10aFx8WzEtOV1cZCpcJSgxc3RcfDJuZFx8M3JkXHxbNC05XXRoXClcfFsxLTldXGQqLyBuZXh0Z3JvdXA9cmVkaWZXcm9uZ0xpbmVFbmRpbmcgY29udGFpbmVkIGRpc3BsYXkKK3N5bnRheCBtYXRjaCByZWRpZkdvb2RFZGl0aW9uIC8xc3RcfDJuZFx8M3JkXHxbNC05XXRoXHxbMS05XVxkKlwlKDFzdFx8Mm5kXHwzcmRcfFs0LTlddGhcKVx8WzEtOV1cZCovIGNvbnRhaW5lZCBkaXNwbGF5CiAKIGhpZ2hsaWdodCBkZWYgbGluayByZWRpZkdvb2RFZGl0aW9uIHJlZGlmU3BlY2lhbAogCiAiICAgIElTQk4KIHN5bnRheCBtYXRjaCByZWRpZkFyZ3VtZW50SVNCTiAvXCUoXlxTXHstfTpcKVxAIVxTLiovIGNvbnRhaW5zPXJlZGlmR29vZElTQk4gY29udGFpbmVkIGRpc3BsYXkKLXN5bnRheCBtYXRjaCByZWRpZkdvb2RJU0JOIC9cZFswLTktXVx7OCwxNX1cZC8gbmV4dGdyb3VwPXJlZGlmV3JvbmdMaW5lRW5kaW5nIGNvbnRhaW5lZCBkaXNwbGF5CitzeW50YXggbWF0Y2ggcmVkaWZHb29kSVNCTiAvXGRbMC05LV1cezgsMTV9XGQvIGNvbnRhaW5lZCBkaXNwbGF5CiAKIGhpZ2hsaWdodCBkZWYgbGluayByZWRpZkdvb2RJU0JOIHJlZGlmU3BlY2lhbAogCiAiICAgIElTU04KIHN5bnRheCBtYXRjaCByZWRpZkFyZ3VtZW50SVNTTiAvXCUoXlxTXHstfTpcKVxAIVxTLiovIGNvbnRhaW5zPXJlZGlmR29vZElTU04gY29udGFpbmVkIGRpc3BsYXkKLXN5bnRheCBtYXRjaCByZWRpZkdvb2RJU1NOIC9cZFx7NH0tXGRcezN9WzAtOVhdLyBuZXh0Z3JvdXA9cmVkaWZXcm9uZ0xpbmVFbmRpbmcgY29udGFpbmVkIGRpc3BsYXkKK3N5bnRheCBtYXRjaCByZWRpZkdvb2RJU1NOIC9cZFx7NH0tXGRcezN9WzAtOVhdLyBjb250YWluZWQgZGlzcGxheQogCiBoaWdobGlnaHQgZGVmIGxpbmsgcmVkaWZHb29kSVNTTiByZWRpZlNwZWNpYWwKIApAQCAtODYyLDcgKzg2Miw3IEBACiAKICIgICAgQ2xhc3NpZmljYXRpb24tSkVMCiBzeW50YXggbWF0Y2ggcmVkaWZBcmd1bWVudENsYXNzaWZpY2F0aW9uSkVMIC9cJSheXFNcey19OlwpXEAhXFMuKi8gY29udGFpbnM9cmVkaWZDb3JyZWN0SkVMIGNvbnRhaW5lZCBkaXNwbGF5Ci1zeW50YXggbWF0Y2ggcmVkaWZDb3JyZWN0SkVMIC9cPFx1XGRceywyfVwlKFssOyBcdF1ccypcKVw9LyBjb250YWlucz1yZWRpZlNwZWNpYWxKRUwgbmV4dGdyb3VwPXJlZGlmV3JvbmdMaW5lRW5kaW5nIGNvbnRhaW5lZCBkaXNwbGF5CitzeW50YXggbWF0Y2ggcmVkaWZDb3JyZWN0SkVMIC9cPFwlKFx1XGRceywyfVssOyBcdF1ccypcKSpcdVxkXHssMn0vIGNvbnRhaW5zPXJlZGlmU3BlY2lhbEpFTCBuZXh0Z3JvdXA9cmVkaWZXcm9uZ0xpbmVFbmRpbmcgY29udGFpbmVkIGRpc3BsYXkKIHN5bnRheCBtYXRjaCByZWRpZlNwZWNpYWxKRUwgL1w8XHVcZFx7LDJ9LyBjb250YWluZWQgZGlzcGxheQogCiBoaWdobGlnaHQgZGVmIGxpbmsgcmVkaWZBcmd1bWVudENsYXNzaWZpY2F0aW9uSkVMIHJlZGlmRXJyb3IKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvdHV0b3IuZW8gYi9ydW50aW1lL3R1dG9yL3R1dG9yLmVvCmluZGV4IGNjOWE4YmUuLmMwNzVlYzcgMTAwNjQ0Ci0tLSBhL3J1bnRpbWUvdHV0b3IvdHV0b3IuZW8KKysrIGIvcnVudGltZS90dXRvci90dXRvci5lbwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAgIDMuIE51biB0YWpwdTogICA6dyBURVNUTyAgIChraWUgVEVTVE8gZXN0YXMgbGEgZWxla3RpdGEgZG9zaWVybm9tbykKIAogICA0LiBUaW8ga29uc2VydmFzIGxhIHR1dGFuIGRvc2llcm9uIChpbnN0cnVpbG9uIGRlIFZpbSkga3VuIGxhIG5vbW8gVEVTVE8uCi0gICAgIFBvciBrb250cm9saSB0aW9uLCB0YWpwdSAgIDohZGlyICAgYf0gICAhbHMgICBkZW5vdmUgcG9yIHZpZGlnaSB2aWFuCisgICAgIFBvciBrb250cm9saSB0aW9uLCB0YWpwdSAgIDohZGlyICAgYf0gICA6IWxzICAgZGVub3ZlIHBvciB2aWRpZ2kgdmlhbgogICAgICBkb3NpZXJ1am9uLgogCiBSSU1BUktPOiBTZSB2aSB2b2x1cyBlbGlyaSBlbCBWaW0ga2FqIHJlc3RhcnRpZ2kg+GluIGRlbm92ZSBwZXIgIHZpbSBURVNUTywKZGlmZiAtLWdpdCBhL3NyYy9wby9maS5wbyBiL3NyYy9wby9maS5wbwppbmRleCBjYWNiMDBhLi41Njg1ZDE3IDEwMDY0NAotLS0gYS9zcmMvcG8vZmkucG8KKysrIGIvc3JjL3BvL2ZpLnBvCkBAIC0zNjcsNyArMzY3LDcgQEAKIAogIywgYy1mb3JtYXQKIG1zZ2lkICJFMTIxOiBVbmRlZmluZWQgdmFyaWFibGU6ICVzIgotbXNnc3RyICJFMTIxOiBN5ORyaXR0ZWxlbeR09m4gbXV1dHR1amEgJXMiCittc2dzdHIgIkUxMjE6IE3k5HJpdHRlbGVt5HT2biBtdXV0dHVqYTogJXMiCiAKIG1zZ2lkICJFMTExOiBNaXNzaW5nICddJyIKIG1zZ3N0ciAiRTExMTogXSBwdXV0dHV1IgpAQCAtMzkyLDcgKzM5Miw3IEBACiAKICMsIGMtZm9ybWF0CiBtc2dpZCAiRTExODogVG9vIG1hbnkgYXJndW1lbnRzIGZvciBmdW5jdGlvbjogJXMiCi1tc2dzdHIgIkUxMTg6IExpaWthYSBhcmd1bWVudHRlamEgZnVua3Rpb2xsZSAlcyIKK21zZ3N0ciAiRTExODogTGlpa2FhIGFyZ3VtZW50dGVqYSBmdW5rdGlvbGxlOiAlcyIKIAogIywgYy1mb3JtYXQKIG1zZ2lkICJFNzE2OiBLZXkgbm90IHByZXNlbnQgaW4gRGljdGlvbmFyeTogJXMiCkBAIC0xMjY2LDcgKzEyNjYsNyBAQAogCiAjLCBjLWZvcm1hdAogbXNnaWQgIkUxODE6IEludmFsaWQgYXR0cmlidXRlOiAlcyIKLW1zZ3N0ciAiRTE4MTogVmlyaGVlbGxpbmVuIGF0dHJpYnV1dHRpICVzIgorbXNnc3RyICJFMTgxOiBWaXJoZWVsbGluZW4gYXR0cmlidXV0dGk6ICVzIgogCiBtc2dpZCAiRTE4MjogSW52YWxpZCBjb21tYW5kIG5hbWUiCiBtc2dzdHIgIkUxODI6IFZpcmhlZWxsaW5lbiBrb21lbm5vbiBuaW1pIgpAQCAtMjIyMCw3ICsyMjIwLDcgQEAKIAogIywgYy1mb3JtYXQKIG1zZ2lkICJGb250MDogJXNcbiIKLW1zZ3N0ciAiRm9udHRpMC4gJXNcbiIKK21zZ3N0ciAiRm9udHRpMDogJXNcbiIKIAogIywgYy1mb3JtYXQKIG1zZ2lkICJGb250MTogJXNcbiIKQEAgLTI0ODEsNyArMjQ4MSw3IEBACiAKICMsIGMtZm9ybWF0CiBtc2dpZCAiRTYyNTogY2Fubm90IG9wZW4gY3Njb3BlIGRhdGFiYXNlOiAlcyIKLW1zZ3N0ciAiRTYyNTogZWkgdm9pIGF2YXRhIGNzb3BlLXRpZXRva2FudGFhICVzIgorbXNnc3RyICJFNjI1OiBlaSB2b2kgYXZhdGEgY3Njb3BlLXRpZXRva2FudGFhOiAlcyIKIAogbXNnaWQgIkU2MjY6IGNhbm5vdCBnZXQgY3Njb3BlIGRhdGFiYXNlIGluZm9ybWF0aW9uIgogbXNnc3RyICJFNjI2OiBlaSB2b2kgaGFrZWEgY3Njb3BlLXRpZXRva2FubmFuIHRpZXRvamEiCkBAIC01MzI4LDcgKzUzMjgsNyBAQAogCiAjLCBjLWZvcm1hdAogbXNnaWQgIkU3ODk6IE1pc3NpbmcgJ10nOiAlcyIKLW1zZ3N0ciAiRTc4OTogXSBwdXV0dHV1OyAlcyIKK21zZ3N0ciAiRTc4OTogXSBwdXV0dHV1OiAlcyIKIAogIywgYy1mb3JtYXQKIG1zZ2lkICJFMzk4OiBNaXNzaW5nICc9JzogJXMiCkBAIC02MTczLDExICs2MTczLDExIEBACiAKICMsIGMtZm9ybWF0CiBtc2dpZCAiRTQ3NTogSW52YWxpZCBhcmd1bWVudDogJXMiCi1tc2dzdHIgIkU0NzU6IFZpcmhlZWxsaW5lbiBhcmd1bWVudHRpICVzIgorbXNnc3RyICJFNDc1OiBWaXJoZWVsbGluZW4gYXJndW1lbnR0aTogJXMiCiAKICMsIGMtZm9ybWF0CiBtc2dpZCAiRTE1OiBJbnZhbGlkIGV4cHJlc3Npb246ICVzIgotbXNnc3RyICJFMTU6IFZpcmhlZWxsaW5lbiBpbG1hdXMgJXMiCittc2dzdHIgIkUxNTogVmlyaGVlbGxpbmVuIGlsbWF1czogJXMiCiAKIG1zZ2lkICJFMTY6IEludmFsaWQgcmFuZ2UiCiBtc2dzdHIgIkUxNjogVmlyaGVlbGxpbmVuIGFydm9hbHVlIgpkaWZmIC0tZ2l0IGEvc3JjL3BvL2phLnBvIGIvc3JjL3BvL2phLnBvCmluZGV4IDE0YWUzNzguLjdmNDU4NzMgMTAwNjQ0Ci0tLSBhL3NyYy9wby9qYS5wbworKysgYi9zcmMvcG8vamEucG8KQEAgLTMsNyArMyw3IEBACiAjIERvICI6aGVscCB1Z2FuZGEiICBpbiBWaW0gdG8gcmVhZCBjb3B5aW5nIGFuZCB1c2FnZSBjb25kaXRpb25zLgogIyBEbyAiOmhlbHAgY3JlZGl0cyIgaW4gVmltIHRvIHNlZSBhIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZC4KICMKLSMgTGFzdCBDaGFuZ2U6IDI0LUZlYi0yMDEzLgorIyBMYXN0IENoYW5nZTogMTctQXByLTIwMTMuCiAjCiAjIENvcHlyaWdodCAoQykgMjAwMS0xMiBNVVJBT0tBIFRhcm8gPGtvcm9uLmthb3JpeWFAZ21haWwuY29tPgogIyBUSElTIEZJTEUgSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIFZJTSBMSUNFTlNFLgpAQCAtMTIsOCArMTIsOCBAQAogbXNnc3RyICIiCiAiUHJvamVjdC1JZC1WZXJzaW9uOiBWaW0gNy4zXG4iCiAiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEzLTAyLTI0IDEyOjM4KzA5MDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDEzLTAyLTI0IDEzOjMwKzA5MDBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMy0wNC0xNyAxOTo1NiswOTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMy0wNC0xNyAyMDowMCswOTAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBNVVJBT0tBIFRhcm8gPGtvcm9uLmthb3JpeWFAZ21haWwuY29tPlxuIgogIkxhbmd1YWdlLVRlYW06IE1VUkFPS0EgVGFybyA8a29yb24ua2Fvcml5YUBnbWFpbC5jb20+XG4iCiAiTGFuZ3VhZ2U6IEphcGFuZXNlXG4iCkBAIC01NjksNyArNTY5LDcgQEAKIG1zZ3N0ciAiYWRkKCkgpM6w+r/0IgogCiBtc2dpZCAiRTY5OTogVG9vIG1hbnkgYXJndW1lbnRzIgotbXNnc3RyICJFNjk5OiCkrMK/suGkrqTepLkiCittc2dzdHIgIkU2OTk6ILD6v/SkrMK/suGkrqTepLkiCiAKIG1zZ2lkICJFNzg1OiBjb21wbGV0ZSgpIGNhbiBvbmx5IGJlIHVzZWQgaW4gSW5zZXJ0IG1vZGUiCiBtc2dzdHIgIkU3ODU6IGNvbXBsZXRlKCkgpM/B3sb+peKhvKXJpMekt6SrzfjN0aTHpK2k3qS7pPMiCkBAIC02ODUsNyArNjg1LDcgQEAKIG1zZ3N0ciAiRTczMDogpeqluaXIt7+k8sq4u/rO86TIpLekxrC3pMOkxqSkpN6kuSIKIAogbXNnaWQgIkU3MzE6IHVzaW5nIERpY3Rpb25hcnkgYXMgYSBTdHJpbmciCi1tc2dzdHIgIkU3MzE6IMrRv/S3v6Tyyri7+s7zpMikt6TGsLekw6TGpKSk3qS5IgorbXNnc3RyICJFNzMxOiC8rb3xt7+k8sq4u/rO86TIpLekxrC3pMOkxqSkpN6kuSIKIAogbXNnaWQgIkU4MDY6IHVzaW5nIEZsb2F0IGFzIGEgU3RyaW5nIgogbXNnc3RyICJFODA2OiDJ4sawvq6/9MXAv/Sk8sq4u/rO86TIpLekxrC3pMOkxqSkpN6kuSIKQEAgLTk5OCw2ICs5OTgsMTAgQEAKIG1zZ2lkICJQYXR0ZXJuIGZvdW5kIGluIGV2ZXJ5IGxpbmU6ICVzIgogbXNnc3RyICKl0aW/obyl86SswbSkxqTOudSkx7irpMSkq6TqpN6kt6S/OiAlcyIKIAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXR0ZXJuIG5vdCBmb3VuZDogJXMiCittc2dzdHIgIqXRpb+hvKXzpM+4q6TEpKuk6qTepLuk86THpLekvzogJXMiCisKIG1zZ2lkICIiCiAiXG4iCiAiIyBMYXN0IFN1YnN0aXR1dGUgU3RyaW5nOlxuIgpkaWZmIC0tZ2l0IGEvc3JjL3BvL2phLnNqaXMucG8gYi9zcmMvcG8vamEuc2ppcy5wbwppbmRleCBiYzJlZTkwLi5hYzk4NGY2IDEwMDY0NAotLS0gYS9zcmMvcG8vamEuc2ppcy5wbworKysgYi9zcmMvcG8vamEuc2ppcy5wbwpAQCAtMyw3ICszLDcgQEAKICMgRG8gIjpoZWxwIHVnYW5kYSIgIGluIFZpbSB0byByZWFkIGNvcHlpbmcgYW5kIHVzYWdlIGNvbmRpdGlvbnMuCiAjIERvICI6aGVscCBjcmVkaXRzIiBpbiBWaW0gdG8gc2VlIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkLgogIwotIyBMYXN0IENoYW5nZTogMjQtRmViLTIwMTMuCisjIExhc3QgQ2hhbmdlOiAxNy1BcHItMjAxMy4KICMKICMgQ29weXJpZ2h0IChDKSAyMDAxLTEyIE1VUkFPS0EgVGFybyA8a29yb24ua2Fvcml5YUBnbWFpbC5jb20+CiAjIFRISVMgRklMRSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgVklNIExJQ0VOU0UuCkBAIC0xMiw4ICsxMiw4IEBACiBtc2dzdHIgIiIKICJQcm9qZWN0LUlkLVZlcnNpb246IFZpbSA3LjNcbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTMtMDItMjQgMTI6MzgrMDkwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTMtMDItMjQgMTM6MzArMDkwMFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEzLTA0LTE3IDE5OjU2KzA5MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEzLTA0LTE3IDIwOjAwKzA5MDBcbiIKICJMYXN0LVRyYW5zbGF0b3I6IE1VUkFPS0EgVGFybyA8a29yb24ua2Fvcml5YUBnbWFpbC5jb20+XG4iCiAiTGFuZ3VhZ2UtVGVhbTogTVVSQU9LQSBUYXJvIDxrb3Jvbi5rYW9yaXlhQGdtYWlsLmNvbT5cbiIKICJMYW5ndWFnZTogSmFwYW5lc2VcbiIKQEAgLTU2OSw3ICs1NjksNyBAQAogbXNnc3RyICJhZGQoKSCCzIj4kJQiCiAKIG1zZ2lkICJFNjk5OiBUb28gbWFueSBhcmd1bWVudHMiCi1tc2dzdHIgIkU2OTk6IIKqkb2J34KsgtyCtyIKK21zZ3N0ciAiRTY5OTogiPiQlIKqkb2J34KsgtyCtyIKIAogbXNnaWQgIkU3ODU6IGNvbXBsZXRlKCkgY2FuIG9ubHkgYmUgdXNlZCBpbiBJbnNlcnQgbW9kZSIKIG1zZ3N0ciAiRTc4NTogY29tcGxldGUoKSCCzZF9k/yDgoFbg2iCxYK1gqmXmJdwgsWCq4LcgrmC8SIKQEAgLTY4NSw3ICs2ODUsNyBAQAogbXNnc3RyICJFNzMwOiCDioNYg2eMXoLwlbaOmpfxgsaCtYLEiLWCwYLEgqKC3IK3IgogCiBtc2dpZCAiRTczMTogdXNpbmcgRGljdGlvbmFyeSBhcyBhIFN0cmluZyIKLW1zZ3N0ciAiRTczMToglc+QlIxegvCVto6al/GCxoK1gsSItYLBgsSCooLcgrciCittc2dzdHIgIkU3MzE6II6rj5GMXoLwlbaOmpfxgsaCtYLEiLWCwYLEgqKC3IK3IgogCiBtc2dpZCAiRTgwNjogdXNpbmcgRmxvYXQgYXMgYSBTdHJpbmciCiBtc2dzdHIgIkU4MDY6IJWCk66PrJCUk1+QlILwlbaOmpfxgsaCtYLEiLWCwYLEgqKC3IK3IgpAQCAtOTk4LDYgKzk5OCwxMCBAQAogbXNnaWQgIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiCiBtc2dzdHIgIoNwg16BW4OTgqqRU4LEgsyNc4LFjKmCwoKpguiC3IK1gr06ICVzIgogCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdHRlcm4gbm90IGZvdW5kOiAlcyIKK21zZ3N0ciAig3CDXoFbg5OCzYypgsKCqYLogtyCuYLxgsWCtYK9OiAlcyIKKwogbXNnaWQgIiIKICJcbiIKICIjIExhc3QgU3Vic3RpdHV0ZSBTdHJpbmc6XG4iCg==