IyEvdXNyL2Jpbi9wZXJsIC13IC1UCgpCRUdJTiB7CiAgaWYgKC1lICd0L3Rlc3RfZGlyJykgeyAjIGlmIHdlIGFyZSBydW5uaW5nICJ0L3J1bGVfdGVzdHMudCIsIGtsdWdlIGFyb3VuZCAuLi4KICAgIGNoZGlyICd0JzsKICB9CgogIGlmICgtZSAndGVzdF9kaXInKSB7ICAgICAgICAgICAgIyBydW5uaW5nIGZyb20gdGVzdCBkaXJlY3RvcnksIG5vdCAuLgogICAgdW5zaGlmdChASU5DLCAnLi4vYmxpYi9saWInKTsKICB9Cn0KCm15ICRwcmVmaXggPSAnLic7CmlmICgtZSAndGVzdF9kaXInKSB7ICAgICAgICAgICAgIyBydW5uaW5nIGZyb20gdGVzdCBkaXJlY3RvcnksIG5vdCAuLgogICRwcmVmaXggPSAnLi4nOwp9CgpteSAkaGF2ZV9saWJpZG47CkJFR0lOIHsKICBldmFsIHsgcmVxdWlyZSBOZXQ6OkxpYklETiB9IGFuZCBkbyB7ICRoYXZlX2xpYmlkbiA9IDEgfTsKfQoKdXNlIHN0cmljdDsKdXNlIFRlc3Q6Ok1vcmU7CnVzZSBsaWIgJy4nOyB1c2UgbGliICd0JzsKdXNlIFNBVGVzdDsgc2FfdF9pbml0KCJ1cmkiKTsKCm15ICR0ZXN0cyA9IDEwMjsKJHRlc3RzICs9IDUgaWYgJGhhdmVfbGliaWRuOwoKcGxhbiB0ZXN0cyA9PiAkdGVzdHM7Cgp1c2UgTWFpbDo6U3BhbUFzc2Fzc2luOwp1c2UgTWFpbDo6U3BhbUFzc2Fzc2luOjpIVE1MOwp1c2UgTWFpbDo6U3BhbUFzc2Fzc2luOjpVdGlsOwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCnRzdGxvY2FscnVsZXMgKCcKCiAgdXRpbF9yYl8ydGxkIGxpdmUuY29tCiAgdXRpbF9yYl8zdGxkIHRocmVlLjNsZGxpdmUuY29tCgonKTsKCiMgaW5pdGlhbGl6ZSBTcGFtQXNzYXNzaW4KbXkgJHNhID0gY3JlYXRlX3Nhb2JqKHsnZG9udF9jb3B5X3ByZWZzJyA9PiAxLAogICAgICAgICMgJ2RlYnVnJyA9PiAxCn0pOwoKJHNhLT5pbml0KDApOyAjIHBhcnNlIHJ1bGVzCgpvcGVuIChJTiwgIjxkYXRhL3NwYW0vMDA5Iik7Cm15ICRtYWlsID0gJHNhLT5wYXJzZShcKklOKTsKY2xvc2UgSU47Cm15ICRtc2cgPSBNYWlsOjpTcGFtQXNzYXNzaW46OlBlck1zZ1N0YXR1cy0+bmV3KCRzYSwgJG1haWwpOwoKbXkgQHVyaXMgPSAkbXNnLT5nZXRfdXJpX2xpc3QoKTsKcHJpbnQgImdvdCBVUklzOiAiLmpvaW4gKCIsICIsIEB1cmlzKS4iXG4iOwpvayAoQHVyaXMgPj0gNSk7Cm15ICV1cmltYXAgPSBtYXAgeyAkXyA9PiAxIH0gQHVyaXM7Cm9rICgkdXJpbWFweydodHRwOi8vNjIuMTYuMTAxLjU5L2xpdmVzZXguaHRtJ30pOwpvayAoJHVyaW1hcHsnaHR0cDovLzY2LjkyLjY5LjIyMS8nfSk7Cm9rICgkdXJpbWFweydodHRwOi8vNjYuOTIuNjkuMjIyLyd9KTsKb2sgKCR1cmltYXB7J2h0dHA6Ly82Ni45Mi42OS4yMjMvJ30pOwpvayAoJHVyaW1hcHsnaHR0cDovLzY2LjkyLjY5LjIyNC8nfSk7Cm9rICgkdXJpbWFweydodHRwOi8vc3BhbWFzc2Fzc2luLm9yZyd9KTsKb2sgKCEkdXJpbWFweydDVU1TTFVUUy4nfSk7Cm9rICghJHVyaW1hcHsnQ1VNU0xVVFMuLlZJUkdJTid9KTsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiB0cnlfZG9tYWlucyB7CiAgbXkoJHRyeSwgJGV4cGVjdCkgPSBAXzsKICBteSAkcmVzdWx0ID0gJHNhLT57cmVnaXN0cnlib3VuZGFyaWVzfS0+dXJpX3RvX2RvbWFpbigkdHJ5KTsKCiAgIyB1bmRlZiBpcyB2YWxpZCBpbiBzb21lIHNpdHVhdGlvbnMsIHNvIGRlYWwgd2l0aCBpdC4uLgogIGlmICghZGVmaW5lZCAkZXhwZWN0KSB7CiAgICB3YXJuKCJ0cnlfZG9tYWluczogZmFpbGVkISBleHBlY3Q6IHVuZGVmaW5lZCBnb3Q6ICckcmVzdWx0J1xuIikgaWYgKGRlZmluZWQgJHJlc3VsdCk7CiAgICByZXR1cm4gIWRlZmluZWQgJHJlc3VsdDsKICB9CiAgZWxzaWYgKCFkZWZpbmVkICRyZXN1bHQpIHsKICAgIHdhcm4gInRyeV9kb21haW5zOiBmYWlsZWQhIGV4cGVjdDogJyRleHBlY3QnIGdvdDogdW5kZWZpbmVkXG4iOwogICAgcmV0dXJuIDA7CiAgfQoKICBpZiAoJGV4cGVjdCBlcSAkcmVzdWx0KSB7CiAgICByZXR1cm4gMTsKICB9IGVsc2UgewogICAgd2FybiAidHJ5X2RvbWFpbnM6IGZhaWxlZCEgZXhwZWN0OiAnJGV4cGVjdCcgZ290OiAnJHJlc3VsdCdcbiI7CiAgICByZXR1cm4gMDsKICB9Cn0KCm9rKHRyeV9kb21haW5zKCdqYXZhc2NyaXB0Ontzb21lIGNyYXB9JywgdW5kZWYpKTsKb2sodHJ5X2RvbWFpbnMoJ21haWx0bzpub2JvZHlAZXhhbXBsZS5jb20nLCAnZXhhbXBsZS5jb20nKSk7Cm9rKHRyeV9kb21haW5zKCdtYWlsdG86bm9ib2R5QGV4YW1wbGUuY29tP3N1YmplY3Q9Zm9vJywgJ2V4YW1wbGUuY29tJykpOwpvayh0cnlfZG9tYWlucygnbWFpbHRvOm5vYm9keScsIHVuZGVmKSk7Cm9rKHRyeV9kb21haW5zKCdjaWQ6Zm9vYmFyLm5ldCcsIHVuZGVmKSk7Cm9rKHRyeV9kb21haW5zKCdodHRwOi8vNjYuOTIuNjkuMjIxLycsICc2Ni45Mi42OS4yMjEnKSk7Cm9rKHRyeV9kb21haW5zKCdodHRwOi8vd3d3LnNwYW1hc3Nhc3Npbi5vcmc6ODA4MC9saXN0cy5odG1sJywgJ3NwYW1hc3Nhc3Npbi5vcmcnKSk7Cm9rKHRyeV9kb21haW5zKCdodHRwOi8vd3d3LnNwYW1hc3Nhc3Npbi5vcmcvbGlzdHMuaHRtbCNzb21lX3RhZycsICdzcGFtYXNzYXNzaW4ub3JnJykpOwpvayh0cnlfZG9tYWlucygnaHR0cDovL3VzZXJuYW1lQHd3dy5zcGFtYXNzYXNzaW4ub3JnL2xpc3RzLmh0bWwnLCAnc3BhbWFzc2Fzc2luLm9yZycpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6Ly91c2VybmFtZTpwYXNzd29yZEB3d3cuc3BhbWFzc2Fzc2luLm9yZy9saXN0cy5odG1sJywgJ3NwYW1hc3Nhc3Npbi5vcmcnKSk7Cm9rKHRyeV9kb21haW5zKCdodHRwOi8lNzclNzclNzcuc3BhbWFzc2Fzc2luLm9yZy9saXN0cy5odG1sJywgdW5kZWYpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6L3d3dy5zcGFtYXNzYXNzaW4ub3JnL2xpc3RzLmh0bWwnLCAnc3BhbWFzc2Fzc2luLm9yZycpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6d3d3LnNwYW1hc3Nhc3Npbi5vcmcvbGlzdHMuaHRtbCcsICdzcGFtYXNzYXNzaW4ub3JnJykpOwpvayh0cnlfZG9tYWlucygnaHR0cDovL2t1bmcucGFvLmNvbS5jbicsICdwYW8uY29tLmNuJykpOwpvayh0cnlfZG9tYWlucygna3VuZy5wYW8uY29tLmNuJywgJ3Bhby5jb20uY24nKSk7Cm9rKHRyeV9kb21haW5zKCdrdW5nLXBhby5jb20uY24nLCAna3VuZy1wYW8uY29tLmNuJykpOwpvayh0cnlfZG9tYWlucygndXNlcm5hbWU6cGFzc3dvcmRAd3d3LnNwYW1hc3Nhc3Npbi5vcmcvbGlzdHMuaHRtbCcsICdzcGFtYXNzYXNzaW4ub3JnJykpOwpvayh0cnlfZG9tYWlucygnc3BhbWFzc2Fzc2luLm9yZycsICdzcGFtYXNzYXNzaW4ub3JnJykpOwpvayh0cnlfZG9tYWlucygnU1BBTUFTU0FTU0lOLk9SRycsICdzcGFtYXNzYXNzaW4ub3JnJykpOwpvayh0cnlfZG9tYWlucygnV1dXLlNQQU1BU1NBU1NJTi5PUkcnLCAnc3BhbWFzc2Fzc2luLm9yZycpKTsKb2sodHJ5X2RvbWFpbnMoJ3NwYW1hc3Nhc3Npbi50eHQnLCB1bmRlZikpOwpvayh0cnlfZG9tYWlucygnbG9uZ2VyLnVybC5idXQubm90LnNwYW1hc3Nhc3Npbi50eHQnLCB1bmRlZikpOwojIFByb2JhYmx5IGRvZXNuJ3Qgd29yayB0aGVzZSBkYXlzPz8gTWVzc2VzIHVwIGlzX2ZxZG5fdmFsaWQKI29rKHRyeV9kb21haW5zKCdodHRwOi8vZWJnJnZvc3hmb3YuY29tLm11bmdlZC1yeHNwZWNpYWxzLm5ldC9iL1RyM2YwYW1HJywnbXVuZ2VkLXJ4c3BlY2lhbHMubmV0JykpOwpvayh0cnlfZG9tYWlucygnaHR0cDovL2ViZyZ2b3N4Zm92LmNvbS5tdW5nZWQtcnhzcGVjaWFscy5uZXQvYi9UcjNmMGFtRycsdW5kZWYpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6Ly9ibGFoLmJsYWguY29tOi8nLCAnYmxhaC5jb20nKSk7CiMgUHJvYmFibHkgZG9lc24ndCB3b3JrIHRoZXNlIGRheXM/PyBNZXNzZXMgdXAgaXNfZnFkbl92YWxpZAojb2sodHJ5X2RvbWFpbnMoJ2h0dHA6Ly9leGFtcGxlLmNvbS4lMjAuaG9zdC5leGFtcGxlLmluZm8vJywgJ2V4YW1wbGUuaW5mbycpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6Ly9leGFtcGxlLmNvbS4lMjAuaG9zdC5leGFtcGxlLmluZm8vJywgdW5kZWYpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6Ly9mb28uLmJhckBleGFtcGxlLmNvbScsICdleGFtcGxlLmNvbScpKTsKb2sodHJ5X2RvbWFpbnMoJ2Jhci4uZXhhbXBsZS5jb20nLCB1bmRlZikpOwpvayh0cnlfZG9tYWlucygnaHR0cDovL2V4YW1wbGUuLmNvbScsIHVuZGVmKSk7CgppZiAoJGhhdmVfbGliaWRuKSB7CiAgb2sodHJ5X2RvbWFpbnMoJ0NpbultYS5jYScsICd4bi0tY2lubWEtZHNhLmNhJykpOwogIG9rKHRyeV9kb21haW5zKCdtYXJjYWVzcGHxYS5lcycsICd4bi0tbWFyY2Flc3BhYS0xOWEuZXMnKSk7CiAgb2sodHJ5X2RvbWFpbnMoJ+Rr5HNsb21wb2xvLmZpJywgJ3huLS1rc2xvbXBvbG8tdTJhYi5maScpKTsKICBvayh0cnlfZG9tYWlucygnZm9vLnhuLS1maXFzOHMnLCAnZm9vLnhuLS1maXFzOHMnKSk7CiAgb2sodHJ5X2RvbWFpbnMoImZvb1x4MmVceGU5XHhhNlx4OTlceGU2XHhiOFx4YWYiLCAnZm9vLnhuLS1qNncxOTNnJykpOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgYXJyYXlfY21wIHsKICBteSgkYSwgJGIpID0gQF87CiAgcmV0dXJuIDAgaWYgKEB7JGF9ICE9IEB7JGJ9KTsKICBmb3IobXkgJGkgPSAwOyAkaTxAeyRhfTsgJGkrKykgewogICAgcmV0dXJuIDAgaWYgKCRhLT5bJGldIG5lICRiLT5bJGldKTsKICB9CiAgcmV0dXJuIDE7Cn0KCnN1YiB0cnlfY2Fub24gewogIG15KCRpbnB1dCwgJGV4cGVjdCkgPSBAXzsKICBteSAkcmVkaXJzID0gJHNhLT57Y29uZn0tPntyZWRpcmVjdG9yX3BhdHRlcm5zfTsKICBteSBAaW5wdXQgPSBzb3J0IHsgJGEgY21wICRiIH0gTWFpbDo6U3BhbUFzc2Fzc2luOjpVdGlsOjp1cmlfbGlzdF9jYW5vbmlmeSgkcmVkaXJzLCBAeyRpbnB1dH0pOwogIG15IEBleHBlY3QgPSBzb3J0IHsgJGEgY21wICRiIH0gQHskZXhwZWN0fTsKCiAgIyBvdXRwdXQgd2hhdCB3ZSB3YW50L2dldCBmb3IgZGVidWdnaW5nCiAgbXkgJHJlcyA9IGFycmF5X2NtcChcQGlucHV0LCBcQGV4cGVjdCk7CiAgaWYgKCEkcmVzKSB7CiAgICB3YXJuICI+PiBleHBlY3Q6IFsgQGV4cGVjdCBdXG4+PiBnb3Q6IFsgQGlucHV0IF1cbiI7CiAgfQogIHJldHVybiAkcmVzOwp9CgojIFdlIHNob3VsZCBnZXQgdGhlIHJhdyB2ZXJzaW9ucyBhbmQgYSBzaW5nbGUgImNvcnJlY3QiIHZlcnNpb24Kb2sodHJ5X2Nhbm9uKFsKICAgJ2h0dHA6d3d3LnNwYW1hc3Nhc3Npbi5vcmcnLAogICAnaHR0cDovd3d3LnNwYW1hc3Nhc3Npbi5vcmcnLAogICAiaHRccnRwOi9cci93d3cuZXhhXHJtcGxlLmNvbSIsCiAgIF0sIFsKICAgJ2h0dHA6Ly93d3cuc3BhbWFzc2Fzc2luLm9yZycsCiAgICdodHRwOnd3dy5zcGFtYXNzYXNzaW4ub3JnJywKICAgJ2h0dHA6L3d3dy5zcGFtYXNzYXNzaW4ub3JnJywKICAgJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nLAogICBdKSk7CgojIFRyeSBhIHNpbXBsZSByZWRpcmVjdG9yLiAgU2hvdWxkIHJldHVybiB0aGUgcmVkaXJlY3RvciBhbmQgdGhlIFVSSQojIHRoYXQgaXMgcG9pbnRlZCB0by4Kb2sodHJ5X2Nhbm9uKFsnaHR0cDovL3JkLnlhaG9vLmNvbS8/aHR0cDovd3d3LnNwYW1hc3Nhc3Npbi5vcmcnXSwKICAgWwogICAnaHR0cDovL3JkLnlhaG9vLmNvbS8/aHR0cDovd3d3LnNwYW1hc3Nhc3Npbi5vcmcnLAogICAnaHR0cDovL3d3dy5zcGFtYXNzYXNzaW4ub3JnJywKICAgJ2h0dHA6L3d3dy5zcGFtYXNzYXNzaW4ub3JnJywKICAgXSkpOwoKb2sodHJ5X2Nhbm9uKFsnaHR0cDovL2ltYWdlcy5nb29nbGUuY2EvaW1ncmVzP2ltZ3VybD1nbWliLmZyZWUuZnIvdmlhZ3JhLmpwZyZpbWdyZWZ1cmw9aHR0cDovL3d3dy5nb29nbGUuY29tL3VybD9xPWh0dHA6Ly93d3cuZ29vZ2xlLmNvbS91cmw/cT0lNjglNzQlNzQlNzAlM0ElMkYlMkYlNzclNzclNzclMkUlNjUlNzglNzAlNjElNjclNjUlMkUlNjMlNkYlNkQlMkYlNkQlNjElNkUlNjclNjUlNzIlMzMlMzInXSwKCiAgIFsKICAgJ2h0dHA6Ly9pbWFnZXMuZ29vZ2xlLmNhL2ltZ3Jlcz9pbWd1cmw9Z21pYi5mcmVlLmZyL3ZpYWdyYS5qcGcmaW1ncmVmdXJsPWh0dHA6Ly93d3cuZ29vZ2xlLmNvbS91cmw/cT1odHRwOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3E9JTY4JTc0JTc0JTcwJTNBJTJGJTJGJTc3JTc3JTc3JTJFJTY1JTc4JTcwJTYxJTY3JTY1JTJFJTYzJTZGJTZEJTJGJTZEJTYxJTZFJTY3JTY1JTcyJTMzJTMyJywKICAgJ2h0dHA6Ly9pbWFnZXMuZ29vZ2xlLmNhL2ltZ3Jlcz9pbWd1cmw9Z21pYi5mcmVlLmZyL3ZpYWdyYS5qcGcmaW1ncmVmdXJsPWh0dHA6Ly93d3cuZ29vZ2xlLmNvbS91cmw/cT1odHRwOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3E9aHR0cDovL3d3dy5leHBhZ2UuY29tL21hbmdlcjMyJywKICAgJ2h0dHA6Ly93d3cuZXhwYWdlLmNvbS9tYW5nZXIzMicsCiAgICdodHRwOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3E9aHR0cDovL3d3dy5leHBhZ2UuY29tL21hbmdlcjMyJywKICAgJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS91cmw/cT1odHRwOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3E9aHR0cDovL3d3dy5leHBhZ2UuY29tL21hbmdlcjMyJywKICAgXSkpOwoKIyByZWRpcmVjdG9yX3BhdHRlcm4gdGVzdApvayh0cnlfY2Fub24oWydodHRwOi8vY2hrcHQuemRuZXQuY29tL2Noa3B0L2Jhei9qbWFzb24ub3JnJ10sCiAgIFsKICAgJ2h0dHA6Ly9jaGtwdC56ZG5ldC5jb20vY2hrcHQvYmF6L2ptYXNvbi5vcmcnLAogICAnaHR0cDovL2ptYXNvbi5vcmcnLAogICAnam1hc29uLm9yZycsCiAgIF0pKTsKCm9rKHRyeV9jYW5vbihbJ2h0dHA6Ly9lbWYwLmNvbS9yLmNmbT9mb289YmFyJnI9am1hc29uLm9yZyddLAogICBbCiAgICdodHRwOi8vZW1mMC5jb20vci5jZm0/Zm9vPWJhciZyPWptYXNvbi5vcmcnLAogICAnaHR0cDovL2ptYXNvbi5vcmcnLAogICAnam1hc29uLm9yZycsCiAgIF0pKTsKCm9rKHRyeV9jYW5vbihbImh0XHJ0cFxyOi8vd3d3LmtsXG51Z2UublxuZXQvIl0sCiAgWydodHRwOi8vd3d3LmtsdWdlLm5ldC8nXQogICkpOwoKb2sodHJ5X2Nhbm9uKFsnaHR0cDpcXFxccGVvcGxlLmFwYWNoZS5vcmdcXH5mZWxpY2l0eVxcJ10sCiAgWydodHRwOlxcXFxwZW9wbGUuYXBhY2hlLm9yZ1xcfmZlbGljaXR5XFwnLAogICdodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmZlbGljaXR5LyddCiAgKSk7Cgpvayh0cnlfY2Fub24oWwogICAnaHR0cCUzQS8vZWJnJnZvc3hmb3YuY29tJTJFbXVuZ2VkLSU3MnhzcGVjaWFscyUyRW5ldC9iL1RyM2YwYW1HJwogICBdLCBbCiAgICdodHRwJTNBLy9lYmcmdm9zeGZvdi5jb20lMkVtdW5nZWQtJTcyeHNwZWNpYWxzJTJFbmV0L2IvVHIzZjBhbUcnLAogICAnaHR0cDovL2ViZyZ2b3N4Zm92LmNvbS5tdW5nZWQtcnhzcGVjaWFscy5uZXQvYi9UcjNmMGFtRycKICAgXSkpOwoKb2sodHJ5X2Nhbm9uKFsKICAgJ2h0dHA6Ly93d3cubmF0ZS5jb20vci9ETTAzL24lNjV2ZXJwNCU3OXJlJTc0JTYxJTY5JTZjJTJlY28lNmQvJTYyJTYxbS8/bSU2MSU2ZT0lNkRpJTYzNCUzOScKICAgXSwgWwogICAnaHR0cDovL3d3dy5uYXRlLmNvbS9yL0RNMDMvbiU2NXZlcnA0JTc5cmUlNzQlNjElNjklNmMlMmVjbyU2ZC8lNjIlNjFtLz9tJTYxJTZlPSU2RGklNjM0JTM5JywKICAgJ2h0dHA6Ly93d3cubmF0ZS5jb20vci9ETTAzL25ldmVycDR5cmV0YWlsLmNvbS9iYW0vP21hbj1taWM0OScsCiAgICdodHRwOi8vbmV2ZXJwNHlyZXRhaWwuY29tL2JhbS8/bWFuPW1pYzQ5JywKICAgJ25ldmVycDR5cmV0YWlsLmNvbS9iYW0vP21hbj1taWM0OScsCiAgIF0pKTsKCm9rKHRyeV9jYW5vbihbCiAgICdodHRwOi8vd3d3Lmdvb2dsZS5jb20vcGFnZWFkL2ljbGs/c2E9bCZhaT1CcjN5Y05RejVRLWZYQkpHU2lRTFUwZURTQXVlSGtBcm5odFdaQXUtRm1RV2dqbGtRQXhnRktBZzRBRURLRVVpRk9WRC00cjJmLVBfX19fOEJvQUd5cW9yX0E4Z0JBWlVDQ2FwQ0Nxa0N4VTdOTFFIMHN6NCZudW09NSZhZHVybD1odHRwOi8vMTA5MjIyOTcyNzo5OTk5L2h0dHBzLXd3dy5wYXlwYWwuY29tL3dlYnNjcnIvaW5kZXgucGhwJwogICBdLCBbCiAgICdodHRwOi8vMTA5MjIyOTcyNzo5OTk5L2h0dHBzLXd3dy5wYXlwYWwuY29tL3dlYnNjcnIvaW5kZXgucGhwJywKICAgJ2h0dHA6Ly82NS4yNi4yNi45NTo5OTk5L2h0dHBzLXd3dy5wYXlwYWwuY29tL3dlYnNjcnIvaW5kZXgucGhwJywKICAgJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS9wYWdlYWQvaWNsaz9zYT1sJmFpPUJyM3ljTlF6NVEtZlhCSkdTaVFMVTBlRFNBdWVIa0Fybmh0V1pBdS1GbVFXZ2psa1FBeGdGS0FnNEFFREtFVWlGT1ZELTRyMmYtUF9fX184Qm9BR3lxb3JfQThnQkFaVUNDYXBDQ3FrQ3hVN05MUUgwc3o0Jm51bT01JmFkdXJsPWh0dHA6Ly8xMDkyMjI5NzI3Ojk5OTkvaHR0cHMtd3d3LnBheXBhbC5jb20vd2Vic2Nyci9pbmRleC5waHAnLAogICBdKSk7Cgpvayh0cnlfY2Fub24oWwogICAnaHR0cDovL3d3dy5nb29nbGUuY29tL3BhZ2VhZC9pY2xrP3NhPWwmYWk9QnIzeWNOUXo1US1mWEJKR1NpUUxVMGVEU0F1ZUhrQXJuaHRXWkF1LUZtUVdnamxrUUF4Z0ZLQWc0QUVES0VVaUZPVkQtNHIyZi1QX19fXzhCb0FHeXFvcl9BOGdCQVpVQ0NhcENDcWtDeFU3TkxRSDBzejQmbnVtPTUmYWR1cmw9aHR0cDovLzEwOTIyMjk3Mjc6L2h0dHBzLXd3dy5wYXlwYWwuY29tL3dlYnNjcnIvaW5kZXgucGhwJwogICBdLCBbCiAgICdodHRwOi8vMTA5MjIyOTcyNzovaHR0cHMtd3d3LnBheXBhbC5jb20vd2Vic2Nyci9pbmRleC5waHAnLAogICAnaHR0cDovLzY1LjI2LjI2Ljk1Oi9odHRwcy13d3cucGF5cGFsLmNvbS93ZWJzY3JyL2luZGV4LnBocCcsCiAgICdodHRwOi8vd3d3Lmdvb2dsZS5jb20vcGFnZWFkL2ljbGs/c2E9bCZhaT1CcjN5Y05RejVRLWZYQkpHU2lRTFUwZURTQXVlSGtBcm5odFdaQXUtRm1RV2dqbGtRQXhnRktBZzRBRURLRVVpRk9WRC00cjJmLVBfX19fOEJvQUd5cW9yX0E4Z0JBWlVDQ2FwQ0Nxa0N4VTdOTFFIMHN6NCZudW09NSZhZHVybD1odHRwOi8vMTA5MjIyOTcyNzovaHR0cHMtd3d3LnBheXBhbC5jb20vd2Vic2Nyci9pbmRleC5waHAnLAogICBdKSk7Cgpvayh0cnlfY2Fub24oWwogICAnaHR0cDovLzg5LjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwNjguMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2MC4weDAwMDAwMDAwMDAwMDExJwogICBdLCBbCiAgICdodHRwOi8vODkuMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYwLjB4MDAwMDAwMDAwMDAwMTEnLAogICAnaHR0cDovLzg5LjEwNC4xMTIuMTcnLAogICBdKSk7Cgpvayh0cnlfY2Fub24oWwogICAnaHR0cDovLzB4MDAwMDAwMDU5LjEwNC4wMDAwMDAwMDAwMDE2MC4weDAwMDExJwogICBdLCBbCiAgICdodHRwOi8vMHgwMDAwMDAwNTkuMTA0LjAwMDAwMDAwMDAwMTYwLjB4MDAwMTEnLAogICAnaHR0cDovLzg5LjEwNC4xMTIuMTcnLAogICBdKSk7Cgpvayh0cnlfY2Fub24oWwogICAnaHR0cDovLzB4ZGQuMHg2LjB4Zi4weDhhL3dzL2VCYXlJU0FQSS5kbGwnLAogICBdLCBbCiAgICdodHRwOi8vMHhkZC4weDYuMHhmLjB4OGEvd3MvZUJheUlTQVBJLmRsbCcsCiAgICdodHRwOi8vMjIxLjYuMTUuMTM4L3dzL2VCYXlJU0FQSS5kbGwnLAogICBdKSk7Cgpvayh0cnlfY2Fub24oWwogICAnaHR0cDovLzA4OS4xMDQuMDE2MC4weDExJywKICAgXSwgWwogICAnaHR0cDovLzA4OS4xMDQuMDE2MC4weDExJywKICAgJ2h0dHA6Ly84OS4xMDQuMTEyLjE3JywKICAgXSkpOwoKb2sodHJ5X2Nhbm9uKFsKICAgJ2h0dHA6Ly8weDdmMDAwMDAxJywKICAgXSwgWwogICAnaHR0cDovLzB4N2YwMDAwMDEnLAogICAnaHR0cDovLzEyNy4wLjAuMScsCiAgIF0pKTsKCm9rKHRyeV9jYW5vbihbCiAgICdodHRwOi8vMHhjYy4weGYuMHg1MC4weDg5LycsCiAgIF0sIFsKICAgJ2h0dHA6Ly8weGNjLjB4Zi4weDUwLjB4ODkvJywKICAgJ2h0dHA6Ly8yMDQuMTUuODAuMTM3LycsCiAgICAgICBdKSk7Cgpvayh0cnlfY2Fub24oWwogICAnaHR0cDovLzB4Y2MuMHg1MC4weDg5LjB4Zi8nLAogICBdLCBbCiAgICdodHRwOi8vMHhjYy4weDUwLjB4ODkuMHhmLycsCiAgICdodHRwOi8vMjA0LjgwLjEzNy4xNS8nLAogICAgICAgXSkpOwoKIyBGaXJlZm94IGxpa2UgZm9vIC0+IHd3dy5mb28uY29tIHJld3JpdGUKb2sgKHRyeV9jYW5vbihbCiAgICdodHRwOi8vZm9vLycsCiAgIF0sIFsKICAgJ2h0dHA6Ly9mb28vJywKICAgJ2h0dHA6Ly93d3cuZm9vLmNvbS8nLAogICAgICAgXSkpOwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIHRyeSB7CiAgbXkgKCRiYXNlLCAkdXJpLCAkd2FudCkgPSBAXzsKCiAgbXkgJHRhcmdldCA9IE1haWw6OlNwYW1Bc3Nhc3Npbjo6SFRNTDo6dGFyZ2V0X3VyaSgkYmFzZSwgJHVyaSk7CgogIGlmICgkdGFyZ2V0IG5lICR3YW50KSB7CiAgICBwcmludCAiVVJJIG1pc21hdGNoOiAkYmFzZSBhbmQgJHVyaSAtPiAkdGFyZ2V0IGJ1dCB3YW50ZWQgJHdhbnRcbiI7CiAgICByZXR1cm4gMDsKICB9CiAgcmV0dXJuIDE7Cn0KCm15ICRiYXNlID0gJ2h0dHA6Ly9hL2IvYy9kO3A/cSc7CgojIHRlc3RzIGZyb20gUkZDIDIzOTYgZHJhZnQKIyBodHRwOi8vd3d3LmdiaXYuY29tL3Byb3RvY29scy91cmkvcmV2LTIwMDIvcmZjMjM5NmJpcy5odG1sCm9rKHRyeSgkYmFzZSwgImc6aCIsICJnOmgiKSk7Cm9rKHRyeSgkYmFzZSwgImciLCAiaHR0cDovL2EvYi9jL2ciKSk7Cm9rKHRyeSgkYmFzZSwgIi4vZyIsICJodHRwOi8vYS9iL2MvZyIpKTsKb2sodHJ5KCRiYXNlLCAiZy8iLCAiaHR0cDovL2EvYi9jL2cvIikpOwpvayh0cnkoJGJhc2UsICIvZyIsICJodHRwOi8vYS9nIikpOwpvayh0cnkoJGJhc2UsICIvL2ciLCAiaHR0cDovL2ciKSk7Cm9rKHRyeSgkYmFzZSwgIj95IiwgImh0dHA6Ly9hL2IvYy9kO3A/eSIpKTsKb2sodHJ5KCRiYXNlLCAiZz95IiwgImh0dHA6Ly9hL2IvYy9nP3kiKSk7Cm9rKHRyeSgkYmFzZSwgIiNzIiwgImh0dHA6Ly9hL2IvYy9kO3A/cSNzIikpOwpvayh0cnkoJGJhc2UsICJnI3MiLCAiaHR0cDovL2EvYi9jL2cjcyIpKTsKb2sodHJ5KCRiYXNlLCAiZz95I3MiLCAiaHR0cDovL2EvYi9jL2c/eSNzIikpOwpvayh0cnkoJGJhc2UsICI7eCIsICJodHRwOi8vYS9iL2MvO3giKSk7Cm9rKHRyeSgkYmFzZSwgImc7eCIsICJodHRwOi8vYS9iL2MvZzt4IikpOwpvayh0cnkoJGJhc2UsICJnO3g/eSNzIiwgImh0dHA6Ly9hL2IvYy9nO3g/eSNzIikpOwpvayh0cnkoJGJhc2UsICIuIiwgImh0dHA6Ly9hL2IvYy8iKSk7Cm9rKHRyeSgkYmFzZSwgIi4vIiwgImh0dHA6Ly9hL2IvYy8iKSk7Cm9rKHRyeSgkYmFzZSwgIi4uIiwgImh0dHA6Ly9hL2IvIikpOwpvayh0cnkoJGJhc2UsICIuLi8iLCAiaHR0cDovL2EvYi8iKSk7Cm9rKHRyeSgkYmFzZSwgIi4uL2ciLCAiaHR0cDovL2EvYi9nIikpOwpvayh0cnkoJGJhc2UsICIuLi8uLiIsICJodHRwOi8vYS8iKSk7Cm9rKHRyeSgkYmFzZSwgIi4uLy4uLyIsICJodHRwOi8vYS8iKSk7Cm9rKHRyeSgkYmFzZSwgIi4uLy4uL2ciLCAiaHR0cDovL2EvZyIpKTsKCm9rKHRyeSgkYmFzZSwgIiIsICJodHRwOi8vYS9iL2MvZDtwP3EiKSk7Cm9rKHRyeSgkYmFzZSwgIi4uLy4uLy4uL2ciLCAiaHR0cDovL2EvZyIpKTsKb2sodHJ5KCRiYXNlLCAiLi4vLi4vLi4vLi4vZyIsICJodHRwOi8vYS9nIikpOwpvayh0cnkoJGJhc2UsICIvLi9nIiwgImh0dHA6Ly9hL2ciKSk7Cm9rKHRyeSgkYmFzZSwgIi8uLi9nIiwgImh0dHA6Ly9hL2ciKSk7Cm9rKHRyeSgkYmFzZSwgImcuIiwgImh0dHA6Ly9hL2IvYy9nLiIpKTsKb2sodHJ5KCRiYXNlLCAiLmciLCAiaHR0cDovL2EvYi9jLy5nIikpOwpvayh0cnkoJGJhc2UsICJnLi4iLCAiaHR0cDovL2EvYi9jL2cuLiIpKTsKb2sodHJ5KCRiYXNlLCAiLi5nIiwgImh0dHA6Ly9hL2IvYy8uLmciKSk7Cm9rKHRyeSgkYmFzZSwgIi4vLi4vZyIsICJodHRwOi8vYS9iL2ciKSk7Cm9rKHRyeSgkYmFzZSwgIi4vZy8uIiwgImh0dHA6Ly9hL2IvYy9nLyIpKTsKb2sodHJ5KCRiYXNlLCAiZy8uL2giLCAiaHR0cDovL2EvYi9jL2cvaCIpKTsKb2sodHJ5KCRiYXNlLCAiZy8uLi9oIiwgImh0dHA6Ly9hL2IvYy9oIikpOwpvayh0cnkoJGJhc2UsICJnO3g9MS8uL3kiLCAiaHR0cDovL2EvYi9jL2c7eD0xL3kiKSk7Cm9rKHRyeSgkYmFzZSwgImc7eD0xLy4uL3kiLCAiaHR0cDovL2EvYi9jL3kiKSk7Cm9rKHRyeSgkYmFzZSwgImc/eS8uL3giLCAiaHR0cDovL2EvYi9jL2c/eS8uL3giKSk7Cm9rKHRyeSgkYmFzZSwgImc/eS8uLi94IiwgImh0dHA6Ly9hL2IvYy9nP3kvLi4veCIpKTsKb2sodHJ5KCRiYXNlLCAiZyNzLy4veCIsICJodHRwOi8vYS9iL2MvZyNzLy4veCIpKTsKb2sodHJ5KCRiYXNlLCAiZyNzLy4uL3giLCAiaHR0cDovL2EvYi9jL2cjcy8uLi94IikpOwpvayh0cnkoJGJhc2UsICJodHRwOmciLCAiaHR0cDovL2EvYi9jL2ciKSk7CgojIHVzZXMgdGhlIHV0aWxfcmJfKnRsZCBsaW5lcyBhYm92ZQpvayh0cnlfZG9tYWlucygnV1dXLkxJVkUuY29tJywgJ3d3dy5saXZlLmNvbScpKTsKb2sodHJ5X2RvbWFpbnMoJ1dXVy5mb28uTElWRS5jb20nLCAnZm9vLmxpdmUuY29tJykpOwpvayh0cnlfZG9tYWlucygnV1dXLnRocmVlLjNsZExJVkUuY29tJywgJ3d3dy50aHJlZS4zbGRsaXZlLmNvbScpKTsKb2sodHJ5X2RvbWFpbnMoJ1dXVy5mb28uYmFzaWNMSVZFLmNvbScsICdiYXNpY2xpdmUuY29tJykpOwoK