ZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL0dyYW1tYXIudHh0IGIvTGliL2xpYjJ0bzMvR3JhbW1hci50eHQKaW5kZXggMWY0YTUwZi4uNGNmNGUzMiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvR3JhbW1hci50eHQKKysrIGIvTGliL2xpYjJ0bzMvR3JhbW1hci50eHQKQEAgLTkwLDcgKzkwLDggQEAKIAkgICAgWydlbHNlJyAnOicgc3VpdGVdCiAJICAgIFsnZmluYWxseScgJzonIHN1aXRlXSB8CiAJICAgJ2ZpbmFsbHknICc6JyBzdWl0ZSkpCi13aXRoX3N0bXQ6ICd3aXRoJyB0ZXN0IFsgd2l0aF92YXIgXSAnOicgc3VpdGUKK3dpdGhfc3RtdDogJ3dpdGgnIHdpdGhfaXRlbSAoJywnIHdpdGhfaXRlbSkqICAnOicgc3VpdGUKK3dpdGhfaXRlbTogdGVzdCBbJ2FzJyBleHByXQogd2l0aF92YXI6ICdhcycgZXhwcgogIyBOQiBjb21waWxlLmMgbWFrZXMgc3VyZSB0aGF0IHRoZSBkZWZhdWx0IGV4Y2VwdCBjbGF1c2UgaXMgbGFzdAogZXhjZXB0X2NsYXVzZTogJ2V4Y2VwdCcgW3Rlc3QgWygnLCcgfCAnYXMnKSB0ZXN0XV0KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVyX2Jhc2UucHkgYi9MaWIvbGliMnRvMy9maXhlcl9iYXNlLnB5CmluZGV4IDY2NzM3ZjQuLmMzNjFlNjEgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVyX2Jhc2UucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXJfYmFzZS5weQpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICIiIgogICAgICAgICBsaW5lbm8gPSBub2RlLmdldF9saW5lbm8oKQogICAgICAgICBmb3Jfb3V0cHV0ID0gbm9kZS5jbG9uZSgpCi0gICAgICAgIGZvcl9vdXRwdXQuc2V0X3ByZWZpeCgiIikKKyAgICAgICAgZm9yX291dHB1dC5wcmVmaXggPSAiIgogICAgICAgICBtc2cgPSAiTGluZSAlZDogY291bGQgbm90IGNvbnZlcnQ6ICVzIgogICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKG1zZyAlIChsaW5lbm8sIGZvcl9vdXRwdXQpKQogICAgICAgICBpZiByZWFzb246CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weQppbmRleCAzNzM0M2MwLi41YzBhMDg4IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBpZiBub3QgaXNpbnN0YW5jZSh0YXJnZXQsIGxpc3QpOgogICAgICAgICB0YXJnZXQgPSBbdGFyZ2V0XQogICAgIGlmIG5vdCBpc2luc3RhbmNlKHNvdXJjZSwgbGlzdCk6Ci0gICAgICAgIHNvdXJjZS5zZXRfcHJlZml4KCIgIikKKyAgICAgICAgc291cmNlLnByZWZpeCA9ICIgIgogICAgICAgICBzb3VyY2UgPSBbc291cmNlXQogCiAgICAgcmV0dXJuIE5vZGUoc3ltcy5hdG9tLApAQCAtNjAsNyArNjAsNyBAQAogICAgICIiIkEgZnVuY3Rpb24gY2FsbCIiIgogICAgIG5vZGUgPSBOb2RlKHN5bXMucG93ZXIsIFtmdW5jX25hbWUsIEFyZ0xpc3QoYXJncyldKQogICAgIGlmIHByZWZpeCBpcyBub3QgTm9uZToKLSAgICAgICAgbm9kZS5zZXRfcHJlZml4KHByZWZpeCkKKyAgICAgICAgbm9kZS5wcmVmaXggPSBwcmVmaXgKICAgICByZXR1cm4gbm9kZQogCiBkZWYgTmV3bGluZSgpOgpAQCAtODksMTggKzg5LDE4IEBACiAKICAgICBJZiB0ZXN0IGlzIE5vbmUsIHRoZSAiaWYgdGVzdCIgcGFydCBpcyBvbWl0dGVkLgogICAgICIiIgotICAgIHhwLnNldF9wcmVmaXgoIiIpCi0gICAgZnAuc2V0X3ByZWZpeCgiICIpCi0gICAgaXQuc2V0X3ByZWZpeCgiICIpCisgICAgeHAucHJlZml4ID0gIiIKKyAgICBmcC5wcmVmaXggPSAiICIKKyAgICBpdC5wcmVmaXggPSAiICIKICAgICBmb3JfbGVhZiA9IExlYWYodG9rZW4uTkFNRSwgImZvciIpCi0gICAgZm9yX2xlYWYuc2V0X3ByZWZpeCgiICIpCisgICAgZm9yX2xlYWYucHJlZml4ID0gIiAiCiAgICAgaW5fbGVhZiA9IExlYWYodG9rZW4uTkFNRSwgImluIikKLSAgICBpbl9sZWFmLnNldF9wcmVmaXgoIiAiKQorICAgIGluX2xlYWYucHJlZml4ID0gIiAiCiAgICAgaW5uZXJfYXJncyA9IFtmb3JfbGVhZiwgZnAsIGluX2xlYWYsIGl0XQogICAgIGlmIHRlc3Q6Ci0gICAgICAgIHRlc3Quc2V0X3ByZWZpeCgiICIpCisgICAgICAgIHRlc3QucHJlZml4ID0gIiAiCiAgICAgICAgIGlmX2xlYWYgPSBMZWFmKHRva2VuLk5BTUUsICJpZiIpCi0gICAgICAgIGlmX2xlYWYuc2V0X3ByZWZpeCgiICIpCisgICAgICAgIGlmX2xlYWYucHJlZml4ID0gIiAiCiAgICAgICAgIGlubmVyX2FyZ3MuYXBwZW5kKE5vZGUoc3ltcy5jb21wX2lmLCBbaWZfbGVhZiwgdGVzdF0pKQogICAgIGlubmVyID0gTm9kZShzeW1zLmxpc3RtYWtlciwgW3hwLCBOb2RlKHN5bXMuY29tcF9mb3IsIGlubmVyX2FyZ3MpXSkKICAgICByZXR1cm4gTm9kZShzeW1zLmF0b20sCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfYXBwbHkucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfYXBwbHkucHkKaW5kZXggNWFmMTNiNy4uOTljZDIxYSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2FwcGx5LnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9hcHBseS5weQpAQCAtMzMsMjUgKzMzLDI1IEBACiAgICAgICAgIGZ1bmMgPSByZXN1bHRzWyJmdW5jIl0KICAgICAgICAgYXJncyA9IHJlc3VsdHNbImFyZ3MiXQogICAgICAgICBrd2RzID0gcmVzdWx0cy5nZXQoImt3ZHMiKQotICAgICAgICBwcmVmaXggPSBub2RlLmdldF9wcmVmaXgoKQorICAgICAgICBwcmVmaXggPSBub2RlLnByZWZpeAogICAgICAgICBmdW5jID0gZnVuYy5jbG9uZSgpCiAgICAgICAgIGlmIChmdW5jLnR5cGUgbm90IGluICh0b2tlbi5OQU1FLCBzeW1zLmF0b20pIGFuZAogICAgICAgICAgICAgKGZ1bmMudHlwZSAhPSBzeW1zLnBvd2VyIG9yCiAgICAgICAgICAgICAgZnVuYy5jaGlsZHJlblstMl0udHlwZSA9PSB0b2tlbi5ET1VCTEVTVEFSKSk6CiAgICAgICAgICAgICAjIE5lZWQgdG8gcGFyZW50aGVzaXplCiAgICAgICAgICAgICBmdW5jID0gcGFyZW50aGVzaXplKGZ1bmMpCi0gICAgICAgIGZ1bmMuc2V0X3ByZWZpeCgiIikKKyAgICAgICAgZnVuYy5wcmVmaXggPSAiIgogICAgICAgICBhcmdzID0gYXJncy5jbG9uZSgpCi0gICAgICAgIGFyZ3Muc2V0X3ByZWZpeCgiIikKKyAgICAgICAgYXJncy5wcmVmaXggPSAiIgogICAgICAgICBpZiBrd2RzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAga3dkcyA9IGt3ZHMuY2xvbmUoKQotICAgICAgICAgICAga3dkcy5zZXRfcHJlZml4KCIiKQorICAgICAgICAgICAga3dkcy5wcmVmaXggPSAiIgogICAgICAgICBsX25ld2FyZ3MgPSBbcHl0cmVlLkxlYWYodG9rZW4uU1RBUiwgIioiKSwgYXJnc10KICAgICAgICAgaWYga3dkcyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGxfbmV3YXJncy5leHRlbmQoW0NvbW1hKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRyZWUuTGVhZih0b2tlbi5ET1VCTEVTVEFSLCAiKioiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3ZHNdKQotICAgICAgICAgICAgbF9uZXdhcmdzWy0yXS5zZXRfcHJlZml4KCIgIikgIyB0aGF0J3MgdGhlICoqIHRva2VuCisgICAgICAgICAgICBsX25ld2FyZ3NbLTJdLnByZWZpeCA9ICIgIiAjIHRoYXQncyB0aGUgKiogdG9rZW4KICAgICAgICAgIyBYWFggU29tZXRpbWVzIHdlIGNvdWxkIGJlIGNsZXZlcmVyLCBlLmcuIGFwcGx5KGYsICh4LCB5KSArIHQpCiAgICAgICAgICMgY2FuIGJlIHRyYW5zbGF0ZWQgaW50byBmKHgsIHksICp0KSBpbnN0ZWFkIG9mIGYoKih4LCB5KSArIHQpCiAgICAgICAgICNuZXcgPSBweXRyZWUuTm9kZShzeW1zLnBvd2VyLCAoZnVuYywgQXJnTGlzdChsX25ld2FyZ3MpKSkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9iYXNlc3RyaW5nLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Jhc2VzdHJpbmcucHkKaW5kZXggNWQ4NGNjNy4uN2QxMWExZiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Jhc2VzdHJpbmcucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Jhc2VzdHJpbmcucHkKQEAgLTEwLDQgKzEwLDQgQEAKICAgICBQQVRURVJOID0gIidiYXNlc3RyaW5nJyIKIAogICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6Ci0gICAgICAgIHJldHVybiBOYW1lKCJzdHIiLCBwcmVmaXg9bm9kZS5nZXRfcHJlZml4KCkpCisgICAgICAgIHJldHVybiBOYW1lKCJzdHIiLCBwcmVmaXg9bm9kZS5wcmVmaXgpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfYnVmZmVyLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2J1ZmZlci5weQppbmRleCAyZjY4MjJiLi4yMWQwNGFlIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfYnVmZmVyLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9idWZmZXIucHkKQEAgLTEzLDkgKzEzLDkgQEAKICAgICBleHBsaWNpdCA9IFRydWUgIyBUaGUgdXNlciBtdXN0IGFzayBmb3IgdGhpcyBmaXhlcgogCiAgICAgUEFUVEVSTiA9ICIiIgotICAgICAgICAgICAgICBwb3dlcjwgbmFtZT0nYnVmZmVyJyB0cmFpbGVyPCAnKCcgW2FueV0gJyknID4gPgorICAgICAgICAgICAgICBwb3dlcjwgbmFtZT0nYnVmZmVyJyB0cmFpbGVyPCAnKCcgW2FueV0gJyknID4gYW55KiA+CiAgICAgICAgICAgICAgICIiIgogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKICAgICAgICAgbmFtZSA9IHJlc3VsdHNbIm5hbWUiXQotICAgICAgICBuYW1lLnJlcGxhY2UoTmFtZSgibWVtb3J5dmlldyIsIHByZWZpeD1uYW1lLmdldF9wcmVmaXgoKSkpCisgICAgICAgIG5hbWUucmVwbGFjZShOYW1lKCJtZW1vcnl2aWV3IiwgcHJlZml4PW5hbWUucHJlZml4KSkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9jYWxsYWJsZS5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9jYWxsYWJsZS5weQppbmRleCBkZTkzNzkyLi44MzFiOTEzIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfY2FsbGFibGUucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2NhbGxhYmxlLnB5CkBAIC0yOCw0ICsyOCw0IEBACiAgICAgICAgIGZ1bmMgPSByZXN1bHRzWyJmdW5jIl0KIAogICAgICAgICBhcmdzID0gW2Z1bmMuY2xvbmUoKSwgU3RyaW5nKCcsICcpLCBTdHJpbmcoIidfX2NhbGxfXyciKV0KLSAgICAgICAgcmV0dXJuIENhbGwoTmFtZSgiaGFzYXR0ciIpLCBhcmdzLCBwcmVmaXg9bm9kZS5nZXRfcHJlZml4KCkpCisgICAgICAgIHJldHVybiBDYWxsKE5hbWUoImhhc2F0dHIiKSwgYXJncywgcHJlZml4PW5vZGUucHJlZml4KQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2RpY3QucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZGljdC5weQppbmRleCBkZWM5NGM1Li5jZTk3M2ZkIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZGljdC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZGljdC5weQpAQCAtNjEsMTUgKzYxLDE1IEBACiAgICAgICAgIGFyZ3MgPSBoZWFkICsgW3B5dHJlZS5Ob2RlKHN5bXMudHJhaWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RvdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZShtZXRob2RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PW1ldGhvZC5nZXRfcHJlZml4KCkpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1tZXRob2QucHJlZml4KV0pLAogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzWyJwYXJlbnMiXS5jbG9uZSgpXQogICAgICAgICBuZXcgPSBweXRyZWUuTm9kZShzeW1zLnBvd2VyLCBhcmdzKQogICAgICAgICBpZiBub3Qgc3BlY2lhbDoKLSAgICAgICAgICAgIG5ldy5zZXRfcHJlZml4KCIiKQorICAgICAgICAgICAgbmV3LnByZWZpeCA9ICIiCiAgICAgICAgICAgICBuZXcgPSBDYWxsKE5hbWUoaXNpdGVyIGFuZCAiaXRlciIgb3IgImxpc3QiKSwgW25ld10pCiAgICAgICAgIGlmIHRhaWw6CiAgICAgICAgICAgICBuZXcgPSBweXRyZWUuTm9kZShzeW1zLnBvd2VyLCBbbmV3XSArIHRhaWwpCi0gICAgICAgIG5ldy5zZXRfcHJlZml4KG5vZGUuZ2V0X3ByZWZpeCgpKQorICAgICAgICBuZXcucHJlZml4ID0gbm9kZS5wcmVmaXgKICAgICAgICAgcmV0dXJuIG5ldwogCiAgICAgUDEgPSAicG93ZXI8IGZ1bmM9TkFNRSB0cmFpbGVyPCAnKCcgbm9kZT1hbnkgJyknID4gYW55KiA+IgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4Y2VwdC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGNlcHQucHkKaW5kZXggNTU1NGMwMi4uYWNlM2Y4NCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4Y2VwdC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhjZXB0LnB5CkBAIC0zNiwxMSArMzYsMTEgQEAKIGNsYXNzIEZpeEV4Y2VwdChmaXhlcl9iYXNlLkJhc2VGaXgpOgogCiAgICAgUEFUVEVSTiA9ICIiIgotICAgIHRyeV9zdG10PCAndHJ5JyAnOicgc3VpdGUKLSAgICAgICAgICAgICAgICAgIGNsZWFudXA9KGV4Y2VwdF9jbGF1c2UgJzonIHN1aXRlKSsKLSAgICAgICAgICAgICAgICAgIHRhaWw9KFsnZXhjZXB0JyAnOicgc3VpdGVdCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2Vsc2UnICc6JyBzdWl0ZV0KLSAgICAgICAgICAgICAgICAgICAgICAgIFsnZmluYWxseScgJzonIHN1aXRlXSkgPgorICAgIHRyeV9zdG10PCAndHJ5JyAnOicgKHNpbXBsZV9zdG10IHwgc3VpdGUpCisgICAgICAgICAgICAgICAgICBjbGVhbnVwPShleGNlcHRfY2xhdXNlICc6JyAoc2ltcGxlX3N0bXQgfCBzdWl0ZSkpKworICAgICAgICAgICAgICAgICAgdGFpbD0oWydleGNlcHQnICc6JyAoc2ltcGxlX3N0bXQgfCBzdWl0ZSldCisgICAgICAgICAgICAgICAgICAgICAgICBbJ2Vsc2UnICc6JyAoc2ltcGxlX3N0bXQgfCBzdWl0ZSldCisgICAgICAgICAgICAgICAgICAgICAgICBbJ2ZpbmFsbHknICc6JyAoc2ltcGxlX3N0bXQgfCBzdWl0ZSldKSA+CiAgICAgIiIiCiAKICAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAjIEdlbmVyYXRlIGEgbmV3IE4gZm9yIHRoZSBleGNlcHQgY2xhdXNlCiAgICAgICAgICAgICAgICAgICAgIG5ld19OID0gTmFtZShzZWxmLm5ld19uYW1lKCksIHByZWZpeD0iICIpCiAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IE4uY2xvbmUoKQotICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0X3ByZWZpeCgiIikKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnByZWZpeCA9ICIiCiAgICAgICAgICAgICAgICAgICAgIE4ucmVwbGFjZShuZXdfTikKICAgICAgICAgICAgICAgICAgICAgbmV3X04gPSBuZXdfTi5jbG9uZSgpCiAKQEAgLTgyLDEwICs4MiwxMCBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgY2hpbGQgaW4gcmV2ZXJzZWQoc3VpdGVfc3RtdHNbOmldKToKICAgICAgICAgICAgICAgICAgICAgICAgIGVfc3VpdGUuaW5zZXJ0X2NoaWxkKDAsIGNoaWxkKQogICAgICAgICAgICAgICAgICAgICBlX3N1aXRlLmluc2VydF9jaGlsZChpLCBhc3NpZ24pCi0gICAgICAgICAgICAgICAgZWxpZiBOLmdldF9wcmVmaXgoKSA9PSAiIjoKKyAgICAgICAgICAgICAgICBlbGlmIE4ucHJlZml4ID09ICIiOgogICAgICAgICAgICAgICAgICAgICAjIE5vIHNwYWNlIGFmdGVyIGEgY29tbWEgaXMgbGVnYWw7IG5vIHNwYWNlIGFmdGVyICJhcyIsCiAgICAgICAgICAgICAgICAgICAgICMgbm90IHNvIG11Y2guCi0gICAgICAgICAgICAgICAgICAgIE4uc2V0X3ByZWZpeCgiICIpCisgICAgICAgICAgICAgICAgICAgIE4ucHJlZml4ID0gIiAiCiAKICAgICAgICAgI1RPRE8oY3dpbnRlcikgZml4IHRoaXMgd2hlbiBjaGlsZHJlbiBiZWNvbWVzIGEgc21hcnQgbGlzdAogICAgICAgICBjaGlsZHJlbiA9IFtjLmNsb25lKCkgZm9yIGMgaW4gbm9kZS5jaGlsZHJlbls6M11dICsgdHJ5X2NsZWFudXAgKyB0YWlsCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhlYy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGVjLnB5CmluZGV4IDliNDdhZWMuLjY4Mzc2YmEgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGVjLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGVjLnB5CkBAIC0zMCwxMCArMzAsMTAgQEAKICAgICAgICAgYiA9IHJlc3VsdHMuZ2V0KCJiIikKICAgICAgICAgYyA9IHJlc3VsdHMuZ2V0KCJjIikKICAgICAgICAgYXJncyA9IFthLmNsb25lKCldCi0gICAgICAgIGFyZ3NbMF0uc2V0X3ByZWZpeCgiIikKKyAgICAgICAgYXJnc1swXS5wcmVmaXggPSAiIgogICAgICAgICBpZiBiIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgYXJncy5leHRlbmQoW0NvbW1hKCksIGIuY2xvbmUoKV0pCiAgICAgICAgIGlmIGMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBhcmdzLmV4dGVuZChbQ29tbWEoKSwgYy5jbG9uZSgpXSkKIAotICAgICAgICByZXR1cm4gQ2FsbChOYW1lKCJleGVjIiksIGFyZ3MsIHByZWZpeD1ub2RlLmdldF9wcmVmaXgoKSkKKyAgICAgICAgcmV0dXJuIENhbGwoTmFtZSgiZXhlYyIpLCBhcmdzLCBwcmVmaXg9bm9kZS5wcmVmaXgpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhlY2ZpbGUucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhlY2ZpbGUucHkKaW5kZXggZjdhN2E3MC4uNDMzNmZmMyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4ZWNmaWxlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGVjZmlsZS5weQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAjIFdyYXAgdGhlIG9wZW4gY2FsbCBpbiBhIGNvbXBpbGUgY2FsbC4gVGhpcyBpcyBzbyB0aGUgZmlsZW5hbWUgd2lsbCBiZQogICAgICAgICAjIHByZXNlcnZlZCBpbiB0aGUgZXhlY2VkIGNvZGUuCiAgICAgICAgIGZpbGVuYW1lX2FyZyA9IGZpbGVuYW1lLmNsb25lKCkKLSAgICAgICAgZmlsZW5hbWVfYXJnLnNldF9wcmVmaXgoIiAiKQorICAgICAgICBmaWxlbmFtZV9hcmcucHJlZml4ID0gIiAiCiAgICAgICAgIGV4ZWNfc3RyID0gU3RyaW5nKCInZXhlYyciLCAiICIpCiAgICAgICAgIGNvbXBpbGVfYXJncyA9IG9wZW5fZXhwciArIFtDb21tYSgpLCBmaWxlbmFtZV9hcmcsIENvbW1hKCksIGV4ZWNfc3RyXQogICAgICAgICBjb21waWxlX2NhbGwgPSBDYWxsKE5hbWUoImNvbXBpbGUiKSwgY29tcGlsZV9hcmdzLCAiIikKQEAgLTQ4LDQgKzQ4LDQgQEAKICAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKFtDb21tYSgpLCBnbG9iYWxzLmNsb25lKCldKQogICAgICAgICBpZiBsb2NhbHMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBhcmdzLmV4dGVuZChbQ29tbWEoKSwgbG9jYWxzLmNsb25lKCldKQotICAgICAgICByZXR1cm4gQ2FsbChOYW1lKCJleGVjIiksIGFyZ3MsIHByZWZpeD1ub2RlLmdldF9wcmVmaXgoKSkKKyAgICAgICAgcmV0dXJuIENhbGwoTmFtZSgiZXhlYyIpLCBhcmdzLCBwcmVmaXg9bm9kZS5wcmVmaXgpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZmlsdGVyLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ZpbHRlci5weQppbmRleCA1MWZkMDJhLi41MjdkYzNkIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZmlsdGVyLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9maWx0ZXIucHkKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgICAgIGlmIGluX3NwZWNpYWxfY29udGV4dChub2RlKToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgbmV3ID0gbm9kZS5jbG9uZSgpCi0gICAgICAgICAgICBuZXcuc2V0X3ByZWZpeCgiIikKKyAgICAgICAgICAgIG5ldy5wcmVmaXggPSAiIgogICAgICAgICAgICAgbmV3ID0gQ2FsbChOYW1lKCJsaXN0IiksIFtuZXddKQotICAgICAgICBuZXcuc2V0X3ByZWZpeChub2RlLmdldF9wcmVmaXgoKSkKKyAgICAgICAgbmV3LnByZWZpeCA9IG5vZGUucHJlZml4CiAgICAgICAgIHJldHVybiBuZXcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9mdW5jYXR0cnMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZnVuY2F0dHJzLnB5CmluZGV4IDQyMzQ5OTMuLjQ2NWRiYzggMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9mdW5jYXR0cnMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Z1bmNhdHRycy5weQpAQCAtMTYsNCArMTYsNCBAQAogICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CiAgICAgICAgIGF0dHIgPSByZXN1bHRzWyJhdHRyIl1bMF0KICAgICAgICAgYXR0ci5yZXBsYWNlKE5hbWUoKCJfXyVzX18iICUgYXR0ci52YWx1ZVs1Ol0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9YXR0ci5nZXRfcHJlZml4KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9YXR0ci5wcmVmaXgpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Z1dHVyZS5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9mdXR1cmUucHkKaW5kZXggYTAzMmU4OC4uODYxZTEzYyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Z1dHVyZS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZnV0dXJlLnB5CkBAIC0xNiw1ICsxNiw1IEBACiAKICAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgogICAgICAgICBuZXcgPSBCbGFua0xpbmUoKQotICAgICAgICBuZXcucHJlZml4ID0gbm9kZS5nZXRfcHJlZml4KCkKKyAgICAgICAgbmV3LnByZWZpeCA9IG5vZGUucHJlZml4CiAgICAgICAgIHJldHVybiBuZXcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9nZXRjd2R1LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2dldGN3ZHUucHkKaW5kZXggMTE3NWU1Ni4uOGFmYjMwZCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2dldGN3ZHUucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2dldGN3ZHUucHkKQEAgLTE1LDQgKzE1LDQgQEAKIAogICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CiAgICAgICAgIG5hbWUgPSByZXN1bHRzWyJuYW1lIl0KLSAgICAgICAgbmFtZS5yZXBsYWNlKE5hbWUoImdldGN3ZCIsIHByZWZpeD1uYW1lLmdldF9wcmVmaXgoKSkpCisgICAgICAgIG5hbWUucmVwbGFjZShOYW1lKCJnZXRjd2QiLCBwcmVmaXg9bmFtZS5wcmVmaXgpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2hhc19rZXkucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaGFzX2tleS5weQppbmRleCA0ODJmMjdkLi5iM2EyNTcyIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaGFzX2tleS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaGFzX2tleS5weQpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgbmVnYXRpb24gPSByZXN1bHRzLmdldCgibmVnYXRpb24iKQogICAgICAgICBhbmNob3IgPSByZXN1bHRzWyJhbmNob3IiXQotICAgICAgICBwcmVmaXggPSBub2RlLmdldF9wcmVmaXgoKQorICAgICAgICBwcmVmaXggPSBub2RlLnByZWZpeAogICAgICAgICBiZWZvcmUgPSBbbi5jbG9uZSgpIGZvciBuIGluIHJlc3VsdHNbImJlZm9yZSJdXQogICAgICAgICBhcmcgPSByZXN1bHRzWyJhcmciXS5jbG9uZSgpCiAgICAgICAgIGFmdGVyID0gcmVzdWx0cy5nZXQoImFmdGVyIikKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgIGJlZm9yZSA9IGJlZm9yZVswXQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYmVmb3JlID0gcHl0cmVlLk5vZGUoc3ltcy5wb3dlciwgYmVmb3JlKQotICAgICAgICBiZWZvcmUuc2V0X3ByZWZpeCgiICIpCisgICAgICAgIGJlZm9yZS5wcmVmaXggPSAiICIKICAgICAgICAgbl9vcCA9IE5hbWUoImluIiwgcHJlZml4PSIgIikKICAgICAgICAgaWYgbmVnYXRpb246CiAgICAgICAgICAgICBuX25vdCA9IE5hbWUoIm5vdCIsIHByZWZpeD0iICIpCkBAIC0xMDUsNSArMTA1LDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltcy5hcml0aF9leHByLCBzeW1zLnRlcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuZmFjdG9yLCBzeW1zLnBvd2VyKToKICAgICAgICAgICAgIG5ldyA9IHBhcmVudGhlc2l6ZShuZXcpCi0gICAgICAgIG5ldy5zZXRfcHJlZml4KHByZWZpeCkKKyAgICAgICAgbmV3LnByZWZpeCA9IHByZWZpeAogICAgICAgICByZXR1cm4gbmV3CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaWRpb21zLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lkaW9tcy5weQppbmRleCA4YmM2Mzk3Li4xZjY4ZmFmIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaWRpb21zLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pZGlvbXMucHkKQEAgLTEwMSwxOCArMTAxLDE4IEBACiAgICAgZGVmIHRyYW5zZm9ybV9pc2luc3RhbmNlKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgogICAgICAgICB4ID0gcmVzdWx0c1sieCJdLmNsb25lKCkgIyBUaGUgdGhpbmcgaW5zaWRlIG9mIHR5cGUoKQogICAgICAgICBUID0gcmVzdWx0c1siVCJdLmNsb25lKCkgIyBUaGUgdHlwZSBiZWluZyBjb21wYXJlZCBhZ2FpbnN0Ci0gICAgICAgIHguc2V0X3ByZWZpeCgiIikKLSAgICAgICAgVC5zZXRfcHJlZml4KCIgIikKKyAgICAgICAgeC5wcmVmaXggPSAiIgorICAgICAgICBULnByZWZpeCA9ICIgIgogICAgICAgICB0ZXN0ID0gQ2FsbChOYW1lKCJpc2luc3RhbmNlIiksIFt4LCBDb21tYSgpLCBUXSkKICAgICAgICAgaWYgIm4iIGluIHJlc3VsdHM6Ci0gICAgICAgICAgICB0ZXN0LnNldF9wcmVmaXgoIiAiKQorICAgICAgICAgICAgdGVzdC5wcmVmaXggPSAiICIKICAgICAgICAgICAgIHRlc3QgPSBOb2RlKHN5bXMubm90X3Rlc3QsIFtOYW1lKCJub3QiKSwgdGVzdF0pCi0gICAgICAgIHRlc3Quc2V0X3ByZWZpeChub2RlLmdldF9wcmVmaXgoKSkKKyAgICAgICAgdGVzdC5wcmVmaXggPSBub2RlLnByZWZpeAogICAgICAgICByZXR1cm4gdGVzdAogCiAgICAgZGVmIHRyYW5zZm9ybV93aGlsZShzZWxmLCBub2RlLCByZXN1bHRzKToKICAgICAgICAgb25lID0gcmVzdWx0c1sid2hpbGUiXQotICAgICAgICBvbmUucmVwbGFjZShOYW1lKCJUcnVlIiwgcHJlZml4PW9uZS5nZXRfcHJlZml4KCkpKQorICAgICAgICBvbmUucmVwbGFjZShOYW1lKCJUcnVlIiwgcHJlZml4PW9uZS5wcmVmaXgpKQogCiAgICAgZGVmIHRyYW5zZm9ybV9zb3J0KHNlbGYsIG5vZGUsIHJlc3VsdHMpOgogICAgICAgICBzb3J0X3N0bXQgPSByZXN1bHRzWyJzb3J0Il0KQEAgLTEyMSwxNCArMTIxLDE0IEBACiAgICAgICAgIHNpbXBsZV9leHByID0gcmVzdWx0cy5nZXQoImV4cHIiKQogCiAgICAgICAgIGlmIGxpc3RfY2FsbDoKLSAgICAgICAgICAgIGxpc3RfY2FsbC5yZXBsYWNlKE5hbWUoInNvcnRlZCIsIHByZWZpeD1saXN0X2NhbGwuZ2V0X3ByZWZpeCgpKSkKKyAgICAgICAgICAgIGxpc3RfY2FsbC5yZXBsYWNlKE5hbWUoInNvcnRlZCIsIHByZWZpeD1saXN0X2NhbGwucHJlZml4KSkKICAgICAgICAgZWxpZiBzaW1wbGVfZXhwcjoKICAgICAgICAgICAgIG5ldyA9IHNpbXBsZV9leHByLmNsb25lKCkKLSAgICAgICAgICAgIG5ldy5zZXRfcHJlZml4KCIiKQorICAgICAgICAgICAgbmV3LnByZWZpeCA9ICIiCiAgICAgICAgICAgICBzaW1wbGVfZXhwci5yZXBsYWNlKENhbGwoTmFtZSgic29ydGVkIiksIFtuZXddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1zaW1wbGVfZXhwci5nZXRfcHJlZml4KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1zaW1wbGVfZXhwci5wcmVmaXgpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJzaG91bGQgbm90IGhhdmUgcmVhY2hlZCBoZXJlIikKICAgICAgICAgc29ydF9zdG10LnJlbW92ZSgpCiAgICAgICAgIGlmIG5leHRfc3RtdDoKLSAgICAgICAgICAgIG5leHRfc3RtdFswXS5zZXRfcHJlZml4KHNvcnRfc3RtdC5nZXRfcHJlZml4KCkpCisgICAgICAgICAgICBuZXh0X3N0bXRbMF0ucHJlZml4ID0gc29ydF9zdG10LnByZWZpeApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ltcG9ydC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbXBvcnQucHkKaW5kZXggNGM3NTEzMy4uMTAzYzNlZiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ltcG9ydC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW1wb3J0LnB5CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgICAgIG5ldyA9IEZyb21JbXBvcnQoJy4nLCBbaW1wXSkKLSAgICAgICAgICAgIG5ldy5zZXRfcHJlZml4KG5vZGUuZ2V0X3ByZWZpeCgpKQorICAgICAgICAgICAgbmV3LnByZWZpeCA9IG5vZGUucHJlZml4CiAgICAgICAgICAgICByZXR1cm4gbmV3CiAKICAgICBkZWYgcHJvYmFibHlfYV9sb2NhbF9pbXBvcnQoc2VsZiwgaW1wX25hbWUpOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ltcG9ydHMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW1wb3J0cy5weQppbmRleCA0NmJhNGEyLi45YWVjYTM4IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW1wb3J0cy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW1wb3J0cy5weQpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgIGlmIGltcG9ydF9tb2Q6CiAgICAgICAgICAgICBtb2RfbmFtZSA9IGltcG9ydF9tb2QudmFsdWUKICAgICAgICAgICAgIG5ld19uYW1lID0gc2VsZi5tYXBwaW5nW21vZF9uYW1lXQotICAgICAgICAgICAgaW1wb3J0X21vZC5yZXBsYWNlKE5hbWUobmV3X25hbWUsIHByZWZpeD1pbXBvcnRfbW9kLmdldF9wcmVmaXgoKSkpCisgICAgICAgICAgICBpbXBvcnRfbW9kLnJlcGxhY2UoTmFtZShuZXdfbmFtZSwgcHJlZml4PWltcG9ydF9tb2QucHJlZml4KSkKICAgICAgICAgICAgIGlmICJuYW1lX2ltcG9ydCIgaW4gcmVzdWx0czoKICAgICAgICAgICAgICAgICAjIElmIGl0J3Mgbm90IGEgImZyb20geCBpbXBvcnQgeCwgeSIgb3IgImltcG9ydCB4IGFzIHkiIGltcG9ydCwKICAgICAgICAgICAgICAgICAjIG1hcmtlZCBpdHMgdXNhZ2UgdG8gYmUgcmVwbGFjZWQuCkBAIC0xNDIsNCArMTQyLDQgQEAKICAgICAgICAgICAgIGJhcmVfbmFtZSA9IHJlc3VsdHNbImJhcmVfd2l0aF9hdHRyIl1bMF0KICAgICAgICAgICAgIG5ld19uYW1lID0gc2VsZi5yZXBsYWNlLmdldChiYXJlX25hbWUudmFsdWUpCiAgICAgICAgICAgICBpZiBuZXdfbmFtZToKLSAgICAgICAgICAgICAgICBiYXJlX25hbWUucmVwbGFjZShOYW1lKG5ld19uYW1lLCBwcmVmaXg9YmFyZV9uYW1lLmdldF9wcmVmaXgoKSkpCisgICAgICAgICAgICAgICAgYmFyZV9uYW1lLnJlcGxhY2UoTmFtZShuZXdfbmFtZSwgcHJlZml4PWJhcmVfbmFtZS5wcmVmaXgpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lucHV0LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lucHV0LnB5CmluZGV4IGUwMjY0Y2YuLjNmYWU0OTEgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnB1dC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW5wdXQucHkKQEAgLTIyLDUgKzIyLDUgQEAKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIG5ldyA9IG5vZGUuY2xvbmUoKQotICAgICAgICBuZXcuc2V0X3ByZWZpeCgiIikKLSAgICAgICAgcmV0dXJuIENhbGwoTmFtZSgiZXZhbCIpLCBbbmV3XSwgcHJlZml4PW5vZGUuZ2V0X3ByZWZpeCgpKQorICAgICAgICBuZXcucHJlZml4ID0gIiIKKyAgICAgICAgcmV0dXJuIENhbGwoTmFtZSgiZXZhbCIpLCBbbmV3XSwgcHJlZml4PW5vZGUucHJlZml4KQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnRlcm4ucHkKaW5kZXggNjZjNjE2ZS4uMmE1N2NlMSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5CkBAIC0zOSw2ICszOSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0c1sibHBhciJdLmNsb25lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3YXJnbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzWyJycGFyIl0uY2xvbmUoKV0pXSArIGFmdGVyKQotICAgICAgICBuZXcuc2V0X3ByZWZpeChub2RlLmdldF9wcmVmaXgoKSkKKyAgICAgICAgbmV3LnByZWZpeCA9IG5vZGUucHJlZml4CiAgICAgICAgIHRvdWNoX2ltcG9ydChOb25lLCAnc3lzJywgbm9kZSkKICAgICAgICAgcmV0dXJuIG5ldwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lzaW5zdGFuY2UucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaXNpbnN0YW5jZS5weQppbmRleCAxNGRhMThhLi40ZDIxMmZjIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaXNpbnN0YW5jZS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaXNpbnN0YW5jZS5weQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgZGVsIG5ld19hcmdzWy0xXQogICAgICAgICBpZiBsZW4obmV3X2FyZ3MpID09IDE6CiAgICAgICAgICAgICBhdG9tID0gdGVzdGxpc3QucGFyZW50Ci0gICAgICAgICAgICBuZXdfYXJnc1swXS5zZXRfcHJlZml4KGF0b20uZ2V0X3ByZWZpeCgpKQorICAgICAgICAgICAgbmV3X2FyZ3NbMF0ucHJlZml4ID0gYXRvbS5wcmVmaXgKICAgICAgICAgICAgIGF0b20ucmVwbGFjZShuZXdfYXJnc1swXSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFyZ3NbOl0gPSBuZXdfYXJncwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2l0ZXJ0b29scy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pdGVydG9vbHMucHkKaW5kZXggODZkNmI0Ni4uYTYzN2ZlZSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2l0ZXJ0b29scy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaXRlcnRvb2xzLnB5CkBAIC0zMCwxMiArMzAsMTIgQEAKICAgICAgICAgaWYgJ2l0JyBpbiByZXN1bHRzIGFuZCBmdW5jLnZhbHVlICE9ICdpZmlsdGVyZmFsc2UnOgogICAgICAgICAgICAgZG90LCBpdCA9IChyZXN1bHRzWydkb3QnXSwgcmVzdWx0c1snaXQnXSkKICAgICAgICAgICAgICMgUmVtb3ZlIHRoZSAnaXRlcnRvb2xzJwotICAgICAgICAgICAgcHJlZml4ID0gaXQuZ2V0X3ByZWZpeCgpCisgICAgICAgICAgICBwcmVmaXggPSBpdC5wcmVmaXgKICAgICAgICAgICAgIGl0LnJlbW92ZSgpCiAgICAgICAgICAgICAjIFJlcGxhY2UgdGhlIG5vZGUgd2ljaCBjb250YWlucyAoJy4nLCAnZnVuY3Rpb24nKSB3aXRoIHRoZQogICAgICAgICAgICAgIyBmdW5jdGlvbiAodG8gYmUgY29uc2lzdGFudCB3aXRoIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgcGF0dGVybikKICAgICAgICAgICAgIGRvdC5yZW1vdmUoKQogICAgICAgICAgICAgZnVuYy5wYXJlbnQucmVwbGFjZShmdW5jKQogCi0gICAgICAgIHByZWZpeCA9IHByZWZpeCBvciBmdW5jLmdldF9wcmVmaXgoKQorICAgICAgICBwcmVmaXggPSBwcmVmaXggb3IgZnVuYy5wcmVmaXgKICAgICAgICAgZnVuYy5yZXBsYWNlKE5hbWUoZnVuYy52YWx1ZVsxOl0sIHByZWZpeD1wcmVmaXgpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2l0ZXJ0b29sc19pbXBvcnRzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2l0ZXJ0b29sc19pbXBvcnRzLnB5CmluZGV4IDhhNTdmNmQuLjQ4NDlkZDIgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pdGVydG9vbHNfaW1wb3J0cy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaXRlcnRvb2xzX2ltcG9ydHMucHkKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgIyBJZiB0aGVyZSBhcmUgbm8gaW1wb3J0cyBsZWZ0LCBqdXN0IGdldCByaWQgb2YgdGhlIGVudGlyZSBzdGF0ZW1lbnQKICAgICAgICAgaWYgbm90IChpbXBvcnRzLmNoaWxkcmVuIG9yIGdldGF0dHIoaW1wb3J0cywgJ3ZhbHVlJywgTm9uZSkpIG9yIFwKICAgICAgICAgICAgICAgICBpbXBvcnRzLnBhcmVudCBpcyBOb25lOgotICAgICAgICAgICAgcCA9IG5vZGUuZ2V0X3ByZWZpeCgpCisgICAgICAgICAgICBwID0gbm9kZS5wcmVmaXgKICAgICAgICAgICAgIG5vZGUgPSBCbGFua0xpbmUoKQogICAgICAgICAgICAgbm9kZS5wcmVmaXggPSBwCiAgICAgICAgIHJldHVybiBub2RlCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfbG9uZy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9sb25nLnB5CmluZGV4IDg3M2VjZjEuLmI1ZTBiZGIgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9sb25nLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9sb25nLnB5CkBAIC0xOCw1ICsxOCw1IEBACiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKICAgICAgICAgaWYgaXNfcHJvYmFibHlfYnVpbHRpbihub2RlKToKICAgICAgICAgICAgIG5ldyA9IHNlbGYuc3RhdGljX2ludC5jbG9uZSgpCi0gICAgICAgICAgICBuZXcuc2V0X3ByZWZpeChub2RlLmdldF9wcmVmaXgoKSkKKyAgICAgICAgICAgIG5ldy5wcmVmaXggPSBub2RlLnByZWZpeAogICAgICAgICAgICAgcmV0dXJuIG5ldwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21hcC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tYXAucHkKaW5kZXggMjk1NzhlMi4uY2Y4ZjM1MSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21hcC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbWFwLnB5CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIGlmIG5vZGUucGFyZW50LnR5cGUgPT0gc3ltcy5zaW1wbGVfc3RtdDoKICAgICAgICAgICAgIHNlbGYud2FybmluZyhub2RlLCAiWW91IHNob3VsZCB1c2UgYSBmb3IgbG9vcCBoZXJlIikKICAgICAgICAgICAgIG5ldyA9IG5vZGUuY2xvbmUoKQotICAgICAgICAgICAgbmV3LnNldF9wcmVmaXgoIiIpCisgICAgICAgICAgICBuZXcucHJlZml4ID0gIiIKICAgICAgICAgICAgIG5ldyA9IENhbGwoTmFtZSgibGlzdCIpLCBbbmV3XSkKICAgICAgICAgZWxpZiAibWFwX2xhbWJkYSIgaW4gcmVzdWx0czoKICAgICAgICAgICAgIG5ldyA9IExpc3RDb21wKHJlc3VsdHMuZ2V0KCJ4cCIpLmNsb25lKCksCkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgICAgICAgICAgaWYgaW5fc3BlY2lhbF9jb250ZXh0KG5vZGUpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgICAgIG5ldyA9IG5vZGUuY2xvbmUoKQotICAgICAgICAgICAgbmV3LnNldF9wcmVmaXgoIiIpCisgICAgICAgICAgICBuZXcucHJlZml4ID0gIiIKICAgICAgICAgICAgIG5ldyA9IENhbGwoTmFtZSgibGlzdCIpLCBbbmV3XSkKLSAgICAgICAgbmV3LnNldF9wcmVmaXgobm9kZS5nZXRfcHJlZml4KCkpCisgICAgICAgIG5ldy5wcmVmaXggPSBub2RlLnByZWZpeAogICAgICAgICByZXR1cm4gbmV3CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0YWNsYXNzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGFjbGFzcy5weQppbmRleCBiNTA4ZjVmLi5mNzg0MGQ0IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0YWNsYXNzLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tZXRhY2xhc3MucHkKQEAgLTg5LDcgKzg5LDcgQEAKICAgICBwYXJlbnQuaW5zZXJ0X2NoaWxkKGksIG5ld19zdG10KQogICAgIG5ld19sZWFmMSA9IG5ld19zdG10LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdCiAgICAgb2xkX2xlYWYxID0gc3RtdF9ub2RlLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdCi0gICAgbmV3X2xlYWYxLnNldF9wcmVmaXgob2xkX2xlYWYxLmdldF9wcmVmaXgoKSkKKyAgICBuZXdfbGVhZjEucHJlZml4ID0gb2xkX2xlYWYxLnByZWZpeAogCiAKIGRlZiByZW1vdmVfdHJhaWxpbmdfbmV3bGluZShub2RlKToKQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgICAgICBub2RlID0ga2lkcy5wb3AoKQogICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIExlYWYpIGFuZCBub2RlLnR5cGUgIT0gdG9rZW4uREVERU5UOgogICAgICAgICAgICAgaWYgbm9kZS5wcmVmaXg6Ci0gICAgICAgICAgICAgICAgbm9kZS5zZXRfcHJlZml4KCcnKQorICAgICAgICAgICAgICAgIG5vZGUucHJlZml4ID0gJycKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBlbHNlOgogICAgICAgICAgICAga2lkcy5leHRlbmQobm9kZS5jaGlsZHJlbls6Oi0xXSkKQEAgLTE5MSwxOSArMTkxLDE5IEBACiAgICAgICAgICMgbm93IHN0aWNrIHRoZSBtZXRhY2xhc3MgaW4gdGhlIGFyZ2xpc3QKICAgICAgICAgbWV0YV90eHQgPSBsYXN0X21ldGFjbGFzcy5jaGlsZHJlblswXS5jaGlsZHJlblswXQogICAgICAgICBtZXRhX3R4dC52YWx1ZSA9ICdtZXRhY2xhc3MnCi0gICAgICAgIG9yaWdfbWV0YV9wcmVmaXggPSBtZXRhX3R4dC5nZXRfcHJlZml4KCkKKyAgICAgICAgb3JpZ19tZXRhX3ByZWZpeCA9IG1ldGFfdHh0LnByZWZpeAogCiAgICAgICAgIGlmIGFyZ2xpc3QuY2hpbGRyZW46CiAgICAgICAgICAgICBhcmdsaXN0LmFwcGVuZF9jaGlsZChMZWFmKHRva2VuLkNPTU1BLCAnLCcpKQotICAgICAgICAgICAgbWV0YV90eHQuc2V0X3ByZWZpeCgnICcpCisgICAgICAgICAgICBtZXRhX3R4dC5wcmVmaXggPSAnICcKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1ldGFfdHh0LnNldF9wcmVmaXgoJycpCisgICAgICAgICAgICBtZXRhX3R4dC5wcmVmaXggPSAnJwogCiAgICAgICAgICMgY29tcGFjdCB0aGUgZXhwcmVzc2lvbiAibWV0YWNsYXNzID0gTWV0YSIgLT4gIm1ldGFjbGFzcz1NZXRhIgogICAgICAgICBleHByX3N0bXQgPSBsYXN0X21ldGFjbGFzcy5jaGlsZHJlblswXQogICAgICAgICBhc3NlcnQgZXhwcl9zdG10LnR5cGUgPT0gc3ltcy5leHByX3N0bXQKLSAgICAgICAgZXhwcl9zdG10LmNoaWxkcmVuWzFdLnNldF9wcmVmaXgoJycpCi0gICAgICAgIGV4cHJfc3RtdC5jaGlsZHJlblsyXS5zZXRfcHJlZml4KCcnKQorICAgICAgICBleHByX3N0bXQuY2hpbGRyZW5bMV0ucHJlZml4ID0gJycKKyAgICAgICAgZXhwcl9zdG10LmNoaWxkcmVuWzJdLnByZWZpeCA9ICcnCiAKICAgICAgICAgYXJnbGlzdC5hcHBlbmRfY2hpbGQobGFzdF9tZXRhY2xhc3MpCiAKQEAgLTIxNCw3ICsyMTQsNyBAQAogICAgICAgICAgICAgIyBvbmUtbGluZXIgdGhhdCB3YXMganVzdCBfX21ldGFjbGFzc18KICAgICAgICAgICAgIHN1aXRlLnJlbW92ZSgpCiAgICAgICAgICAgICBwYXNzX2xlYWYgPSBMZWFmKHRleHRfdHlwZSwgJ3Bhc3MnKQotICAgICAgICAgICAgcGFzc19sZWFmLnNldF9wcmVmaXgob3JpZ19tZXRhX3ByZWZpeCkKKyAgICAgICAgICAgIHBhc3NfbGVhZi5wcmVmaXggPSBvcmlnX21ldGFfcHJlZml4CiAgICAgICAgICAgICBub2RlLmFwcGVuZF9jaGlsZChwYXNzX2xlYWYpCiAgICAgICAgICAgICBub2RlLmFwcGVuZF9jaGlsZChMZWFmKHRva2VuLk5FV0xJTkUsICdcbicpKQogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0aG9kYXR0cnMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0aG9kYXR0cnMucHkKaW5kZXggYWU0MDk2Yy4uZjFiZjc4YSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGhvZGF0dHJzLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tZXRob2RhdHRycy5weQpAQCAtMjAsNCArMjAsNCBAQAogICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CiAgICAgICAgIGF0dHIgPSByZXN1bHRzWyJhdHRyIl1bMF0KICAgICAgICAgbmV3ID0gTUFQW2F0dHIudmFsdWVdCi0gICAgICAgIGF0dHIucmVwbGFjZShOYW1lKG5ldywgcHJlZml4PWF0dHIuZ2V0X3ByZWZpeCgpKSkKKyAgICAgICAgYXR0ci5yZXBsYWNlKE5hbWUobmV3LCBwcmVmaXg9YXR0ci5wcmVmaXgpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25lLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25lLnB5CmluZGV4IDM4MmY0M2QuLjE0NzIwMzYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9uZS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbmUucHkKQEAgLTE3LDYgKzE3LDUgQEAKICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PSB0b2tlbi5OT1RFUVVBTCBhbmQgbm9kZS52YWx1ZSA9PSAiPD4iCiAKICAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgotICAgICAgICBuZXcgPSBweXRyZWUuTGVhZih0b2tlbi5OT1RFUVVBTCwgIiE9IikKLSAgICAgICAgbmV3LnNldF9wcmVmaXgobm9kZS5nZXRfcHJlZml4KCkpCisgICAgICAgIG5ldyA9IHB5dHJlZS5MZWFmKHRva2VuLk5PVEVRVUFMLCAiIT0iLCBwcmVmaXg9bm9kZS5wcmVmaXgpCiAgICAgICAgIHJldHVybiBuZXcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9uZXh0LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25leHQucHkKaW5kZXggNDkyYjUxNS4uYzk5OWQ2ZiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25leHQucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25leHQucHkKQEAgLTQ4LDE3ICs0OCwxNiBAQAogICAgICAgICBiYXNlID0gcmVzdWx0cy5nZXQoImJhc2UiKQogICAgICAgICBhdHRyID0gcmVzdWx0cy5nZXQoImF0dHIiKQogICAgICAgICBuYW1lID0gcmVzdWx0cy5nZXQoIm5hbWUiKQotICAgICAgICBtb2QgPSByZXN1bHRzLmdldCgibW9kIikKIAogICAgICAgICBpZiBiYXNlOgogICAgICAgICAgICAgaWYgc2VsZi5zaGFkb3dlZF9uZXh0OgotICAgICAgICAgICAgICAgIGF0dHIucmVwbGFjZShOYW1lKCJfX25leHRfXyIsIHByZWZpeD1hdHRyLmdldF9wcmVmaXgoKSkpCisgICAgICAgICAgICAgICAgYXR0ci5yZXBsYWNlKE5hbWUoIl9fbmV4dF9fIiwgcHJlZml4PWF0dHIucHJlZml4KSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYmFzZSA9IFtuLmNsb25lKCkgZm9yIG4gaW4gYmFzZV0KLSAgICAgICAgICAgICAgICBiYXNlWzBdLnNldF9wcmVmaXgoIiIpCi0gICAgICAgICAgICAgICAgbm9kZS5yZXBsYWNlKENhbGwoTmFtZSgibmV4dCIsIHByZWZpeD1ub2RlLmdldF9wcmVmaXgoKSksIGJhc2UpKQorICAgICAgICAgICAgICAgIGJhc2VbMF0ucHJlZml4ID0gIiIKKyAgICAgICAgICAgICAgICBub2RlLnJlcGxhY2UoQ2FsbChOYW1lKCJuZXh0IiwgcHJlZml4PW5vZGUucHJlZml4KSwgYmFzZSkpCiAgICAgICAgIGVsaWYgbmFtZToKLSAgICAgICAgICAgIG4gPSBOYW1lKCJfX25leHRfXyIsIHByZWZpeD1uYW1lLmdldF9wcmVmaXgoKSkKKyAgICAgICAgICAgIG4gPSBOYW1lKCJfX25leHRfXyIsIHByZWZpeD1uYW1lLnByZWZpeCkKICAgICAgICAgICAgIG5hbWUucmVwbGFjZShuKQogICAgICAgICBlbGlmIGF0dHI6CiAgICAgICAgICAgICAjIFdlIGRvbid0IGRvIHRoaXMgdHJhbnNmb3JtYXRpb24gaWYgd2UncmUgYXNzaWduaW5nIHRvICJ4Lm5leHQiLgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X25vbnplcm8ucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbm9uemVyby5weQppbmRleCBhYmIxZjRlLi5jZDM5ZGMzIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfbm9uemVyby5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbm9uemVyby5weQpAQCAtMTYsNSArMTYsNSBAQAogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKICAgICAgICAgbmFtZSA9IHJlc3VsdHNbIm5hbWUiXQotICAgICAgICBuZXcgPSBOYW1lKCJfX2Jvb2xfXyIsIHByZWZpeD1uYW1lLmdldF9wcmVmaXgoKSkKKyAgICAgICAgbmV3ID0gTmFtZSgiX19ib29sX18iLCBwcmVmaXg9bmFtZS5wcmVmaXgpCiAgICAgICAgIG5hbWUucmVwbGFjZShuZXcpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfbnVtbGl0ZXJhbHMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbnVtbGl0ZXJhbHMucHkKaW5kZXggZDgyMWUzOS4uNjU1Mjc0MCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X251bWxpdGVyYWxzLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9udW1saXRlcmFscy5weQpAQCAtMjQsNCArMjQsNCBAQAogICAgICAgICBlbGlmIHZhbC5zdGFydHN3aXRoKCcwJykgYW5kIHZhbC5pc2RpZ2l0KCkgYW5kIGxlbihzZXQodmFsKSkgPiAxOgogICAgICAgICAgICAgdmFsID0gIjBvIiArIHZhbFsxOl0KIAotICAgICAgICByZXR1cm4gTnVtYmVyKHZhbCwgcHJlZml4PW5vZGUuZ2V0X3ByZWZpeCgpKQorICAgICAgICByZXR1cm4gTnVtYmVyKHZhbCwgcHJlZml4PW5vZGUucHJlZml4KQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3BhcmVuLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3BhcmVuLnB5CmluZGV4IDBiNzJiYjEuLjcxYWYyMzggMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9wYXJlbi5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcGFyZW4ucHkKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgdGFyZ2V0ID0gcmVzdWx0c1sidGFyZ2V0Il0KIAogICAgICAgICBscGFyZW4gPSBMUGFyZW4oKQotICAgICAgICBscGFyZW4uc2V0X3ByZWZpeCh0YXJnZXQuZ2V0X3ByZWZpeCgpKQotICAgICAgICB0YXJnZXQuc2V0X3ByZWZpeCgiIikgIyBNYWtlIGl0IGh1ZyB0aGUgcGFyZW50aGVzZXMKKyAgICAgICAgbHBhcmVuLnByZWZpeCA9IHRhcmdldC5wcmVmaXgKKyAgICAgICAgdGFyZ2V0LnByZWZpeCA9ICIiICMgTWFrZSBpdCBodWcgdGhlIHBhcmVudGhlc2VzCiAgICAgICAgIHRhcmdldC5pbnNlcnRfY2hpbGQoMCwgbHBhcmVuKQogICAgICAgICB0YXJnZXQuYXBwZW5kX2NoaWxkKFJQYXJlbigpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3ByaW50LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3ByaW50LnB5CmluZGV4IDEzNGE5NzIuLmFiY2UyNTEgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9wcmludC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcHJpbnQucHkKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgaWYgYmFyZV9wcmludDoKICAgICAgICAgICAgICMgU3BlY2lhbC1jYXNlIHByaW50IGFsbCBieSBpdHNlbGYKICAgICAgICAgICAgIGJhcmVfcHJpbnQucmVwbGFjZShDYWxsKE5hbWUoInByaW50IiksIFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1iYXJlX3ByaW50LmdldF9wcmVmaXgoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PWJhcmVfcHJpbnQucHJlZml4KSkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBhc3NlcnQgbm9kZS5jaGlsZHJlblswXSA9PSBOYW1lKCJwcmludCIpCiAgICAgICAgIGFyZ3MgPSBub2RlLmNoaWxkcmVuWzE6XQpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICAjIE5vdyBzeW50aGVzaXplIGEgcHJpbnQoYXJncywgc2VwPS4uLiwgZW5kPS4uLiwgZmlsZT0uLi4pIG5vZGUuCiAgICAgICAgIGxfYXJncyA9IFthcmcuY2xvbmUoKSBmb3IgYXJnIGluIGFyZ3NdCiAgICAgICAgIGlmIGxfYXJnczoKLSAgICAgICAgICAgIGxfYXJnc1swXS5zZXRfcHJlZml4KCIiKQorICAgICAgICAgICAgbF9hcmdzWzBdLnByZWZpeCA9ICIiCiAgICAgICAgIGlmIHNlcCBpcyBub3QgTm9uZSBvciBlbmQgaXMgbm90IE5vbmUgb3IgZmlsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGlmIHNlcCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBzZWxmLmFkZF9rd2FyZyhsX2FyZ3MsICJzZXAiLCBTdHJpbmcocmVwcihzZXApKSkKQEAgLTc0LDE3ICs3NCwxNyBAQAogICAgICAgICAgICAgaWYgZmlsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBzZWxmLmFkZF9rd2FyZyhsX2FyZ3MsICJmaWxlIiwgZmlsZSkKICAgICAgICAgbl9zdG10ID0gQ2FsbChOYW1lKCJwcmludCIpLCBsX2FyZ3MpCi0gICAgICAgIG5fc3RtdC5zZXRfcHJlZml4KG5vZGUuZ2V0X3ByZWZpeCgpKQorICAgICAgICBuX3N0bXQucHJlZml4ID0gbm9kZS5wcmVmaXgKICAgICAgICAgcmV0dXJuIG5fc3RtdAogCiAgICAgZGVmIGFkZF9rd2FyZyhzZWxmLCBsX25vZGVzLCBzX2t3ZCwgbl9leHByKToKICAgICAgICAgIyBYWFggQWxsIHRoaXMgcHJlZml4LXNldHRpbmcgbWF5IGxvc2UgY29tbWVudHMgKHRob3VnaCByYXJlbHkpCi0gICAgICAgIG5fZXhwci5zZXRfcHJlZml4KCIiKQorICAgICAgICBuX2V4cHIucHJlZml4ID0gIiIKICAgICAgICAgbl9hcmd1bWVudCA9IHB5dHJlZS5Ob2RlKHNlbGYuc3ltcy5hcmd1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOYW1lKHNfa3dkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRyZWUuTGVhZih0b2tlbi5FUVVBTCwgIj0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2V4cHIpKQogICAgICAgICBpZiBsX25vZGVzOgogICAgICAgICAgICAgbF9ub2Rlcy5hcHBlbmQoQ29tbWEoKSkKLSAgICAgICAgICAgIG5fYXJndW1lbnQuc2V0X3ByZWZpeCgiICIpCisgICAgICAgICAgICBuX2FyZ3VtZW50LnByZWZpeCA9ICIgIgogICAgICAgICBsX25vZGVzLmFwcGVuZChuX2FyZ3VtZW50KQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JhaXNlLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JhaXNlLnB5CmluZGV4IGJlNzg1ZjUuLjhmMTc1MzQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yYWlzZS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmFpc2UucHkKQEAgLTUyLDMxICs1MiwzMSBAQAogICAgICAgICAgICAgICAgICMgZXhjLmNoaWxkcmVuWzE6LTFdIGlzIHRoZSB1bnBhcmVudGhlc2l6ZWQgdHVwbGUKICAgICAgICAgICAgICAgICAjIGV4Yy5jaGlsZHJlblsxXS5jaGlsZHJlblswXSBpcyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHVwbGUKICAgICAgICAgICAgICAgICBleGMgPSBleGMuY2hpbGRyZW5bMV0uY2hpbGRyZW5bMF0uY2xvbmUoKQotICAgICAgICAgICAgZXhjLnNldF9wcmVmaXgoIiAiKQorICAgICAgICAgICAgZXhjLnByZWZpeCA9ICIgIgogCiAgICAgICAgIGlmICJ2YWwiIG5vdCBpbiByZXN1bHRzOgogICAgICAgICAgICAgIyBPbmUtYXJndW1lbnQgcmFpc2UKICAgICAgICAgICAgIG5ldyA9IHB5dHJlZS5Ob2RlKHN5bXMucmFpc2Vfc3RtdCwgW05hbWUoInJhaXNlIiksIGV4Y10pCi0gICAgICAgICAgICBuZXcuc2V0X3ByZWZpeChub2RlLmdldF9wcmVmaXgoKSkKKyAgICAgICAgICAgIG5ldy5wcmVmaXggPSBub2RlLnByZWZpeAogICAgICAgICAgICAgcmV0dXJuIG5ldwogCiAgICAgICAgIHZhbCA9IHJlc3VsdHNbInZhbCJdLmNsb25lKCkKICAgICAgICAgaWYgaXNfdHVwbGUodmFsKToKICAgICAgICAgICAgIGFyZ3MgPSBbYy5jbG9uZSgpIGZvciBjIGluIHZhbC5jaGlsZHJlblsxOi0xXV0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHZhbC5zZXRfcHJlZml4KCIiKQorICAgICAgICAgICAgdmFsLnByZWZpeCA9ICIiCiAgICAgICAgICAgICBhcmdzID0gW3ZhbF0KIAogICAgICAgICBpZiAidGIiIGluIHJlc3VsdHM6CiAgICAgICAgICAgICB0YiA9IHJlc3VsdHNbInRiIl0uY2xvbmUoKQotICAgICAgICAgICAgdGIuc2V0X3ByZWZpeCgiIikKKyAgICAgICAgICAgIHRiLnByZWZpeCA9ICIiCiAKICAgICAgICAgICAgIGUgPSBDYWxsKGV4YywgYXJncykKICAgICAgICAgICAgIHdpdGhfdGIgPSBBdHRyKGUsIE5hbWUoJ3dpdGhfdHJhY2ViYWNrJykpICsgW0FyZ0xpc3QoW3RiXSldCiAgICAgICAgICAgICBuZXcgPSBweXRyZWUuTm9kZShzeW1zLnNpbXBsZV9zdG10LCBbTmFtZSgicmFpc2UiKV0gKyB3aXRoX3RiKQotICAgICAgICAgICAgbmV3LnNldF9wcmVmaXgobm9kZS5nZXRfcHJlZml4KCkpCisgICAgICAgICAgICBuZXcucHJlZml4ID0gbm9kZS5wcmVmaXgKICAgICAgICAgICAgIHJldHVybiBuZXcKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBweXRyZWUuTm9kZShzeW1zLnJhaXNlX3N0bXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW05hbWUoInJhaXNlIiksIENhbGwoZXhjLCBhcmdzKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PW5vZGUuZ2V0X3ByZWZpeCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1ub2RlLnByZWZpeCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yYXdfaW5wdXQucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmF3X2lucHV0LnB5CmluZGV4IDUzZTdhMzIuLmZjYTcxMjkgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yYXdfaW5wdXQucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3Jhd19pbnB1dC5weQpAQCAtMTMsNCArMTMsNCBAQAogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKICAgICAgICAgbmFtZSA9IHJlc3VsdHNbIm5hbWUiXQotICAgICAgICBuYW1lLnJlcGxhY2UoTmFtZSgiaW5wdXQiLCBwcmVmaXg9bmFtZS5nZXRfcHJlZml4KCkpKQorICAgICAgICBuYW1lLnJlcGxhY2UoTmFtZSgiaW5wdXQiLCBwcmVmaXg9bmFtZS5wcmVmaXgpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlbmFtZXMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVuYW1lcy5weQppbmRleCAzMDQ5NjEwLi4yNzVlMjNmIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVuYW1lcy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVuYW1lcy5weQpAQCAtNjYsNCArNjYsNCBAQAogCiAgICAgICAgIGlmIG1vZF9uYW1lIGFuZCBhdHRyX25hbWU6CiAgICAgICAgICAgICBuZXdfYXR0ciA9IExPT0tVUFsobW9kX25hbWUudmFsdWUsIGF0dHJfbmFtZS52YWx1ZSldCi0gICAgICAgICAgICBhdHRyX25hbWUucmVwbGFjZShOYW1lKG5ld19hdHRyLCBwcmVmaXg9YXR0cl9uYW1lLmdldF9wcmVmaXgoKSkpCisgICAgICAgICAgICBhdHRyX25hbWUucmVwbGFjZShOYW1lKG5ld19hdHRyLCBwcmVmaXg9YXR0cl9uYW1lLnByZWZpeCkpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVwci5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZXByLnB5CmluZGV4IDBiYzZiYTYuLjdkZGQwOTYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZXByLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZXByLnB5CkBAIC0xOSw0ICsxOSw0IEBACiAKICAgICAgICAgaWYgZXhwci50eXBlID09IHNlbGYuc3ltcy50ZXN0bGlzdDE6CiAgICAgICAgICAgICBleHByID0gcGFyZW50aGVzaXplKGV4cHIpCi0gICAgICAgIHJldHVybiBDYWxsKE5hbWUoInJlcHIiKSwgW2V4cHJdLCBwcmVmaXg9bm9kZS5nZXRfcHJlZml4KCkpCisgICAgICAgIHJldHVybiBDYWxsKE5hbWUoInJlcHIiKSwgW2V4cHJdLCBwcmVmaXg9bm9kZS5wcmVmaXgpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfc2V0X2xpdGVyYWwucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfc2V0X2xpdGVyYWwucHkKaW5kZXggMzU3NDNkMi4uYjNjMjY3YyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3NldF9saXRlcmFsLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9zZXRfbGl0ZXJhbC5weQpAQCAtMzgsMTUgKzM4LDE1IEBACiAgICAgICAgIGxpdGVyYWwuZXh0ZW5kKG4uY2xvbmUoKSBmb3IgbiBpbiBpdGVtcy5jaGlsZHJlbikKICAgICAgICAgbGl0ZXJhbC5hcHBlbmQocHl0cmVlLkxlYWYodG9rZW4uUkJSQUNFLCAifSIpKQogICAgICAgICAjIFNldCB0aGUgcHJlZml4IG9mIHRoZSByaWdodCBicmFjZSB0byB0aGF0IG9mIHRoZSAnKScgb3IgJ10nCi0gICAgICAgIGxpdGVyYWxbLTFdLnNldF9wcmVmaXgoaXRlbXMubmV4dF9zaWJsaW5nLmdldF9wcmVmaXgoKSkKKyAgICAgICAgbGl0ZXJhbFstMV0ucHJlZml4ID0gaXRlbXMubmV4dF9zaWJsaW5nLnByZWZpeAogICAgICAgICBtYWtlciA9IHB5dHJlZS5Ob2RlKHN5bXMuZGljdHNldG1ha2VyLCBsaXRlcmFsKQotICAgICAgICBtYWtlci5zZXRfcHJlZml4KG5vZGUuZ2V0X3ByZWZpeCgpKQorICAgICAgICBtYWtlci5wcmVmaXggPSBub2RlLnByZWZpeAogCiAgICAgICAgICMgSWYgdGhlIG9yaWdpbmFsIHdhcyBhIG9uZSB0dXBsZSwgd2UgbmVlZCB0byByZW1vdmUgdGhlIGV4dHJhIGNvbW1hLgogICAgICAgICBpZiBsZW4obWFrZXIuY2hpbGRyZW4pID09IDQ6CiAgICAgICAgICAgICBuID0gbWFrZXIuY2hpbGRyZW5bMl0KICAgICAgICAgICAgIG4ucmVtb3ZlKCkKLSAgICAgICAgICAgIG1ha2VyLmNoaWxkcmVuWy0xXS5zZXRfcHJlZml4KG4uZ2V0X3ByZWZpeCgpKQorICAgICAgICAgICAgbWFrZXIuY2hpbGRyZW5bLTFdLnByZWZpeCA9IG4ucHJlZml4CiAKICAgICAgICAgIyBGaW5hbGx5LCByZXBsYWNlIHRoZSBzZXQgY2FsbCB3aXRoIG91ciBzaGlueSBuZXcgbGl0ZXJhbC4KICAgICAgICAgcmV0dXJuIG1ha2VyCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfc3RhbmRhcmRlcnJvci5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9zdGFuZGFyZGVycm9yLnB5CmluZGV4IDRmODcwMTQuLjc4ZDVhN2UgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9zdGFuZGFyZGVycm9yLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9zdGFuZGFyZGVycm9yLnB5CkBAIC0xNSw0ICsxNSw0IEBACiAgICAgICAgICAgICAgICIiIgogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKLSAgICAgICAgcmV0dXJuIE5hbWUoIkV4Y2VwdGlvbiIsIHByZWZpeD1ub2RlLmdldF9wcmVmaXgoKSkKKyAgICAgICAgcmV0dXJuIE5hbWUoIkV4Y2VwdGlvbiIsIHByZWZpeD1ub2RlLnByZWZpeCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9zeXNfZXhjLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3N5c19leGMucHkKaW5kZXggMThkOTM2My4uZTA0MWU2ZSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3N5c19leGMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3N5c19leGMucHkKQEAgLTIyLDggKzIyLDggQEAKICAgICAgICAgc3lzX2F0dHIgPSByZXN1bHRzWyJhdHRyaWJ1dGUiXVswXQogICAgICAgICBpbmRleCA9IE51bWJlcihzZWxmLmV4Y19pbmZvLmluZGV4KHN5c19hdHRyLnZhbHVlKSkKIAotICAgICAgICBjYWxsID0gQ2FsbChOYW1lKCJleGNfaW5mbyIpLCBwcmVmaXg9c3lzX2F0dHIuZ2V0X3ByZWZpeCgpKQorICAgICAgICBjYWxsID0gQ2FsbChOYW1lKCJleGNfaW5mbyIpLCBwcmVmaXg9c3lzX2F0dHIucHJlZml4KQogICAgICAgICBhdHRyID0gQXR0cihOYW1lKCJzeXMiKSwgY2FsbCkKLSAgICAgICAgYXR0clsxXS5jaGlsZHJlblswXS5zZXRfcHJlZml4KHJlc3VsdHNbImRvdCJdLmdldF9wcmVmaXgoKSkKKyAgICAgICAgYXR0clsxXS5jaGlsZHJlblswXS5wcmVmaXggPSByZXN1bHRzWyJkb3QiXS5wcmVmaXgKICAgICAgICAgYXR0ci5hcHBlbmQoU3Vic2NyaXB0KGluZGV4KSkKLSAgICAgICAgcmV0dXJuIE5vZGUoc3ltcy5wb3dlciwgYXR0ciwgcHJlZml4PW5vZGUuZ2V0X3ByZWZpeCgpKQorICAgICAgICByZXR1cm4gTm9kZShzeW1zLnBvd2VyLCBhdHRyLCBwcmVmaXg9bm9kZS5wcmVmaXgpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfdGhyb3cucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfdGhyb3cucHkKaW5kZXggYmY4NmQ4NC4uNjA5NjM0OCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3Rocm93LnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90aHJvdy5weQpAQCAtNDAsMTQgKzQwLDE0IEBACiAgICAgICAgIGlmIGlzX3R1cGxlKHZhbCk6CiAgICAgICAgICAgICBhcmdzID0gW2MuY2xvbmUoKSBmb3IgYyBpbiB2YWwuY2hpbGRyZW5bMTotMV1dCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB2YWwuc2V0X3ByZWZpeCgiIikKKyAgICAgICAgICAgIHZhbC5wcmVmaXggPSAiIgogICAgICAgICAgICAgYXJncyA9IFt2YWxdCiAKICAgICAgICAgdGhyb3dfYXJncyA9IHJlc3VsdHNbImFyZ3MiXQogCiAgICAgICAgIGlmICJ0YiIgaW4gcmVzdWx0czoKICAgICAgICAgICAgIHRiID0gcmVzdWx0c1sidGIiXS5jbG9uZSgpCi0gICAgICAgICAgICB0Yi5zZXRfcHJlZml4KCIiKQorICAgICAgICAgICAgdGIucHJlZml4ID0gIiIKIAogICAgICAgICAgICAgZSA9IENhbGwoZXhjLCBhcmdzKQogICAgICAgICAgICAgd2l0aF90YiA9IEF0dHIoZSwgTmFtZSgnd2l0aF90cmFjZWJhY2snKSkgKyBbQXJnTGlzdChbdGJdKV0KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90dXBsZV9wYXJhbXMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfdHVwbGVfcGFyYW1zLnB5CmluZGV4IGZiMjlmNWMuLjQxYjhkYzIgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90dXBsZV9wYXJhbXMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3R1cGxlX3BhcmFtcy5weQpAQCAtNjMsMTAgKzYzLDEwIEBACiAgICAgICAgIGRlZiBoYW5kbGVfdHVwbGUodHVwbGVfYXJnLCBhZGRfcHJlZml4PUZhbHNlKToKICAgICAgICAgICAgIG4gPSBOYW1lKHNlbGYubmV3X25hbWUoKSkKICAgICAgICAgICAgIGFyZyA9IHR1cGxlX2FyZy5jbG9uZSgpCi0gICAgICAgICAgICBhcmcuc2V0X3ByZWZpeCgiIikKKyAgICAgICAgICAgIGFyZy5wcmVmaXggPSAiIgogICAgICAgICAgICAgc3RtdCA9IEFzc2lnbihhcmcsIG4uY2xvbmUoKSkKICAgICAgICAgICAgIGlmIGFkZF9wcmVmaXg6Ci0gICAgICAgICAgICAgICAgbi5zZXRfcHJlZml4KCIgIikKKyAgICAgICAgICAgICAgICBuLnByZWZpeCA9ICIgIgogICAgICAgICAgICAgdHVwbGVfYXJnLnJlcGxhY2UobikKICAgICAgICAgICAgIG5ld19saW5lcy5hcHBlbmQocHl0cmVlLk5vZGUoc3ltcy5zaW1wbGVfc3RtdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0bXQsIGVuZC5jbG9uZSgpXSkpCkBAIC05MSwxNCArOTEsMTQgQEAKICAgICAgICAgIyBUT0RPKGN3aW50ZXIpIHN1aXRlLWNsZWFudXAKICAgICAgICAgYWZ0ZXIgPSBzdGFydAogICAgICAgICBpZiBzdGFydCA9PSAwOgotICAgICAgICAgICAgbmV3X2xpbmVzWzBdLnNldF9wcmVmaXgoIiAiKQorICAgICAgICAgICAgbmV3X2xpbmVzWzBdLnByZWZpeCA9ICIgIgogICAgICAgICBlbGlmIGlzX2RvY3N0cmluZyhzdWl0ZVswXS5jaGlsZHJlbltzdGFydF0pOgotICAgICAgICAgICAgbmV3X2xpbmVzWzBdLnNldF9wcmVmaXgoaW5kZW50KQorICAgICAgICAgICAgbmV3X2xpbmVzWzBdLnByZWZpeCA9IGluZGVudAogICAgICAgICAgICAgYWZ0ZXIgPSBzdGFydCArIDEKIAogICAgICAgICBzdWl0ZVswXS5jaGlsZHJlblthZnRlcjphZnRlcl0gPSBuZXdfbGluZXMKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoYWZ0ZXIrMSwgYWZ0ZXIrbGVuKG5ld19saW5lcykrMSk6Ci0gICAgICAgICAgICBzdWl0ZVswXS5jaGlsZHJlbltpXS5zZXRfcHJlZml4KGluZGVudCkKKyAgICAgICAgICAgIHN1aXRlWzBdLmNoaWxkcmVuW2ldLnByZWZpeCA9IGluZGVudAogICAgICAgICBzdWl0ZVswXS5jaGFuZ2VkKCkKIAogICAgIGRlZiB0cmFuc2Zvcm1fbGFtYmRhKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICMgUmVwbGFjZSBsYW1iZGEgKCgoKHgpKSkpOiB4ICB3aXRoIGxhbWJkYSB4OiB4CiAgICAgICAgIGlmIGlubmVyLnR5cGUgPT0gdG9rZW4uTkFNRToKICAgICAgICAgICAgIGlubmVyID0gaW5uZXIuY2xvbmUoKQotICAgICAgICAgICAgaW5uZXIuc2V0X3ByZWZpeCgiICIpCisgICAgICAgICAgICBpbm5lci5wcmVmaXggPSAiICIKICAgICAgICAgICAgIGFyZ3MucmVwbGFjZShpbm5lcikKICAgICAgICAgICAgIHJldHVybgogCkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICAgICAgICBzdWJzY3JpcHRzID0gW2MuY2xvbmUoKSBmb3IgYyBpbiB0b19pbmRleFtuLnZhbHVlXV0KICAgICAgICAgICAgICAgICBuZXcgPSBweXRyZWUuTm9kZShzeW1zLnBvd2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZXdfcGFyYW0uY2xvbmUoKV0gKyBzdWJzY3JpcHRzKQotICAgICAgICAgICAgICAgIG5ldy5zZXRfcHJlZml4KG4uZ2V0X3ByZWZpeCgpKQorICAgICAgICAgICAgICAgIG5ldy5wcmVmaXggPSBuLnByZWZpeAogICAgICAgICAgICAgICAgIG4ucmVwbGFjZShuZXcpCiAKIApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3R5cGVzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3R5cGVzLnB5CmluZGV4IDQ0NWYxYjIuLjJmNjNjZGYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90eXBlcy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfdHlwZXMucHkKQEAgLTU4LDUgKzU4LDUgQEAKICAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgogICAgICAgICBuZXdfdmFsdWUgPSBfVFlQRV9NQVBQSU5HLmdldChyZXN1bHRzWyJuYW1lIl0udmFsdWUpCiAgICAgICAgIGlmIG5ld192YWx1ZToKLSAgICAgICAgICAgIHJldHVybiBOYW1lKG5ld192YWx1ZSwgcHJlZml4PW5vZGUuZ2V0X3ByZWZpeCgpKQorICAgICAgICAgICAgcmV0dXJuIE5hbWUobmV3X3ZhbHVlLCBwcmVmaXg9bm9kZS5wcmVmaXgpCiAgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfdW5pY29kZS5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF91bmljb2RlLnB5CmluZGV4IDdmNWNjODAuLjM5MzM5NmUgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF91bmljb2RlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF91bmljb2RlLnB5CkBAIC02LDIzICs2LDIwIEBACiBmcm9tIC4ucGdlbjIgaW1wb3J0IHRva2VuCiBmcm9tIC4uIGltcG9ydCBmaXhlcl9iYXNlCiAKK19tYXBwaW5nID0geyJ1bmljaHIiIDogImNociIsICJ1bmljb2RlIiA6ICJzdHIifQorX2xpdGVyYWxfcmUgPSByZS5jb21waWxlKHIiW3VVXVtyUl0/W1wnXCJdIikKKwogY2xhc3MgRml4VW5pY29kZShmaXhlcl9iYXNlLkJhc2VGaXgpOgogCi0gICAgUEFUVEVSTiA9ICJTVFJJTkcgfCBOQU1FPCd1bmljb2RlJyB8ICd1bmljaHInPiIKKyAgICBQQVRURVJOID0gIlNUUklORyB8ICd1bmljb2RlJyB8ICd1bmljaHInIgogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKICAgICAgICAgaWYgbm9kZS50eXBlID09IHRva2VuLk5BTUU6Ci0gICAgICAgICAgICBpZiBub2RlLnZhbHVlID09ICJ1bmljb2RlIjoKLSAgICAgICAgICAgICAgICBuZXcgPSBub2RlLmNsb25lKCkKLSAgICAgICAgICAgICAgICBuZXcudmFsdWUgPSAic3RyIgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcKLSAgICAgICAgICAgIGlmIG5vZGUudmFsdWUgPT0gInVuaWNociI6Ci0gICAgICAgICAgICAgICAgbmV3ID0gbm9kZS5jbG9uZSgpCi0gICAgICAgICAgICAgICAgbmV3LnZhbHVlID0gImNociIKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3Ci0gICAgICAgICAgICAjIFhYWCBXYXJuIHdoZW4gX191bmljb2RlX18gZm91bmQ/CisgICAgICAgICAgICBuZXcgPSBub2RlLmNsb25lKCkKKyAgICAgICAgICAgIG5ldy52YWx1ZSA9IF9tYXBwaW5nW25vZGUudmFsdWVdCisgICAgICAgICAgICByZXR1cm4gbmV3CiAgICAgICAgIGVsaWYgbm9kZS50eXBlID09IHRva2VuLlNUUklORzoKLSAgICAgICAgICAgIGlmIHJlLm1hdGNoKHIiW3VVXVtyUl0/W1wnXCJdIiwgbm9kZS52YWx1ZSk6CisgICAgICAgICAgICBpZiBfbGl0ZXJhbF9yZS5tYXRjaChub2RlLnZhbHVlKToKICAgICAgICAgICAgICAgICBuZXcgPSBub2RlLmNsb25lKCkKICAgICAgICAgICAgICAgICBuZXcudmFsdWUgPSBuZXcudmFsdWVbMTpdCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3VybGxpYi5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF91cmxsaWIucHkKaW5kZXggZjI2MjUzNy4uYTg5MjY2ZSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3VybGxpYi5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfdXJsbGliLnB5CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgIHJlcGxhY2VtZW50cy4KICAgICAgICAgIiIiCiAgICAgICAgIGltcG9ydF9tb2QgPSByZXN1bHRzLmdldCgnbW9kdWxlJykKLSAgICAgICAgcHJlZiA9IGltcG9ydF9tb2QuZ2V0X3ByZWZpeCgpCisgICAgICAgIHByZWYgPSBpbXBvcnRfbW9kLnByZWZpeAogCiAgICAgICAgIG5hbWVzID0gW10KIApAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICAgICBtb2R1bGUuCiAgICAgICAgICIiIgogICAgICAgICBtb2RfbWVtYmVyID0gcmVzdWx0cy5nZXQoJ21vZF9tZW1iZXInKQotICAgICAgICBwcmVmID0gbW9kX21lbWJlci5nZXRfcHJlZml4KCkKKyAgICAgICAgcHJlZiA9IG1vZF9tZW1iZXIucHJlZml4CiAgICAgICAgIG1lbWJlciA9IHJlc3VsdHMuZ2V0KCdtZW1iZXInKQogCiAgICAgICAgICMgU2ltcGxlIGNhc2Ugd2l0aCBvbmx5IGEgc2luZ2xlIG1lbWJlciBiZWluZyBpbXBvcnRlZApAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgbmV3X25hbWU6CiAgICAgICAgICAgICBtb2R1bGVfZG90LnJlcGxhY2UoTmFtZShuZXdfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1tb2R1bGVfZG90LmdldF9wcmVmaXgoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9bW9kdWxlX2RvdC5wcmVmaXgpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5jYW5ub3RfY29udmVydChub2RlLCAnVGhpcyBpcyBhbiBpbnZhbGlkIG1vZHVsZSBlbGVtZW50JykKIApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3dzX2NvbW1hLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3dzX2NvbW1hLnB5CmluZGV4IGU0OTM0OTguLmE1NGEzNzYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF93c19jb21tYS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfd3NfY29tbWEucHkKQEAgLTI2LDE0ICsyNiwxNCBAQAogICAgICAgICBjb21tYSA9IEZhbHNlCiAgICAgICAgIGZvciBjaGlsZCBpbiBuZXcuY2hpbGRyZW46CiAgICAgICAgICAgICBpZiBjaGlsZCBpbiBzZWxmLlNFUFM6Ci0gICAgICAgICAgICAgICAgcHJlZml4ID0gY2hpbGQuZ2V0X3ByZWZpeCgpCisgICAgICAgICAgICAgICAgcHJlZml4ID0gY2hpbGQucHJlZml4CiAgICAgICAgICAgICAgICAgaWYgcHJlZml4Lmlzc3BhY2UoKSBhbmQgIlxuIiBub3QgaW4gcHJlZml4OgotICAgICAgICAgICAgICAgICAgICBjaGlsZC5zZXRfcHJlZml4KCIiKQorICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcmVmaXggPSAiIgogICAgICAgICAgICAgICAgIGNvbW1hID0gVHJ1ZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBjb21tYToKLSAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gY2hpbGQuZ2V0X3ByZWZpeCgpCisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IGNoaWxkLnByZWZpeAogICAgICAgICAgICAgICAgICAgICBpZiBub3QgcHJlZml4OgotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc2V0X3ByZWZpeCgiICIpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcmVmaXggPSAiICIKICAgICAgICAgICAgICAgICBjb21tYSA9IEZhbHNlCiAgICAgICAgIHJldHVybiBuZXcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF94cmFuZ2UucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfeHJhbmdlLnB5CmluZGV4IGNhOGYyMWEuLjY3NzU1NmIgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF94cmFuZ2UucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3hyYW5nZS5weQpAQCAtMjgsMTQgKzI4LDE0IEBACiAKICAgICBkZWYgdHJhbnNmb3JtX3hyYW5nZShzZWxmLCBub2RlLCByZXN1bHRzKToKICAgICAgICAgbmFtZSA9IHJlc3VsdHNbIm5hbWUiXQotICAgICAgICBuYW1lLnJlcGxhY2UoTmFtZSgicmFuZ2UiLCBwcmVmaXg9bmFtZS5nZXRfcHJlZml4KCkpKQorICAgICAgICBuYW1lLnJlcGxhY2UoTmFtZSgicmFuZ2UiLCBwcmVmaXg9bmFtZS5wcmVmaXgpKQogCiAgICAgZGVmIHRyYW5zZm9ybV9yYW5nZShzZWxmLCBub2RlLCByZXN1bHRzKToKICAgICAgICAgaWYgbm90IHNlbGYuaW5fc3BlY2lhbF9jb250ZXh0KG5vZGUpOgogICAgICAgICAgICAgcmFuZ2VfY2FsbCA9IENhbGwoTmFtZSgicmFuZ2UiKSwgW3Jlc3VsdHNbImFyZ3MiXS5jbG9uZSgpXSkKICAgICAgICAgICAgICMgRW5jYXNlIHRoZSByYW5nZSBjYWxsIGluIGxpc3QoKS4KICAgICAgICAgICAgIGxpc3RfY2FsbCA9IENhbGwoTmFtZSgibGlzdCIpLCBbcmFuZ2VfY2FsbF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1ub2RlLmdldF9wcmVmaXgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PW5vZGUucHJlZml4KQogICAgICAgICAgICAgIyBQdXQgdGhpbmdzIHRoYXQgd2VyZSBhZnRlciB0aGUgcmFuZ2UoKSBjYWxsIGFmdGVyIHRoZSBsaXN0IGNhbGwuCiAgICAgICAgICAgICBmb3IgbiBpbiByZXN1bHRzWyJyZXN0Il06CiAgICAgICAgICAgICAgICAgbGlzdF9jYWxsLmFwcGVuZF9jaGlsZChuKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3hyZWFkbGluZXMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfeHJlYWRsaW5lcy5weQppbmRleCAyZDNmM2M4Li45NGY1MjU0IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfeHJlYWRsaW5lcy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfeHJlYWRsaW5lcy5weQpAQCAtMTksNiArMTksNiBAQAogICAgICAgICBub19jYWxsID0gcmVzdWx0cy5nZXQoIm5vX2NhbGwiKQogCiAgICAgICAgIGlmIG5vX2NhbGw6Ci0gICAgICAgICAgICBub19jYWxsLnJlcGxhY2UoTmFtZSgiX19pdGVyX18iLCBwcmVmaXg9bm9fY2FsbC5nZXRfcHJlZml4KCkpKQorICAgICAgICAgICAgbm9fY2FsbC5yZXBsYWNlKE5hbWUoIl9faXRlcl9fIiwgcHJlZml4PW5vX2NhbGwucHJlZml4KSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG5vZGUucmVwbGFjZShbeC5jbG9uZSgpIGZvciB4IGluIHJlc3VsdHNbImNhbGwiXV0pCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfemlwLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3ppcC5weQppbmRleCAwODI5NmMwLi5mYjczYzdiIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfemlwLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF96aXAucHkKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgbmV3ID0gbm9kZS5jbG9uZSgpCi0gICAgICAgIG5ldy5zZXRfcHJlZml4KCIiKQorICAgICAgICBuZXcucHJlZml4ID0gIiIKICAgICAgICAgbmV3ID0gQ2FsbChOYW1lKCJsaXN0IiksIFtuZXddKQotICAgICAgICBuZXcuc2V0X3ByZWZpeChub2RlLmdldF9wcmVmaXgoKSkKKyAgICAgICAgbmV3LnByZWZpeCA9IG5vZGUucHJlZml4CiAgICAgICAgIHJldHVybiBuZXcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3BhdGNvbXAucHkgYi9MaWIvbGliMnRvMy9wYXRjb21wLnB5CmluZGV4IDA3NmZkYzEuLjI0MjUxY2IgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BhdGNvbXAucHkKKysrIGIvTGliL2xpYjJ0bzMvcGF0Y29tcC5weQpAQCAtMTQsMTAgKzE0LDcgQEAKIGltcG9ydCBvcwogCiAjIEZhaXJseSBsb2NhbCBpbXBvcnRzCi1mcm9tIC5wZ2VuMiBpbXBvcnQgZHJpdmVyCi1mcm9tIC5wZ2VuMiBpbXBvcnQgbGl0ZXJhbHMKLWZyb20gLnBnZW4yIGltcG9ydCB0b2tlbgotZnJvbSAucGdlbjIgaW1wb3J0IHRva2VuaXplCitmcm9tIC5wZ2VuMiBpbXBvcnQgZHJpdmVyLCBsaXRlcmFscywgdG9rZW4sIHRva2VuaXplLCBwYXJzZQogCiAjIFJlYWxseSBsb2NhbCBpbXBvcnRzCiBmcm9tIC4gaW1wb3J0IHB5dHJlZQpAQCAtMjgsNiArMjUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGF0dGVybkdyYW1tYXIudHh0IikKIAogCitjbGFzcyBQYXR0ZXJuU3ludGF4RXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKwogZGVmIHRva2VuaXplX3dyYXBwZXIoaW5wdXQpOgogICAgICIiIlRva2VuaXplcyBhIHN0cmluZyBzdXBwcmVzc2luZyBzaWduaWZpY2FudCB3aGl0ZXNwYWNlLiIiIgogICAgIHNraXAgPSBzZXQoKHRva2VuLk5FV0xJTkUsIHRva2VuLklOREVOVCwgdG9rZW4uREVERU5UKSkKQEAgLTU0LDcgKzU1LDEwIEBACiAgICAgZGVmIGNvbXBpbGVfcGF0dGVybihzZWxmLCBpbnB1dCwgZGVidWc9RmFsc2UpOgogICAgICAgICAiIiJDb21waWxlcyBhIHBhdHRlcm4gc3RyaW5nIHRvIGEgbmVzdGVkIHB5dHJlZS4qUGF0dGVybiBvYmplY3QuIiIiCiAgICAgICAgIHRva2VucyA9IHRva2VuaXplX3dyYXBwZXIoaW5wdXQpCi0gICAgICAgIHJvb3QgPSBzZWxmLmRyaXZlci5wYXJzZV90b2tlbnModG9rZW5zLCBkZWJ1Zz1kZWJ1ZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcm9vdCA9IHNlbGYuZHJpdmVyLnBhcnNlX3Rva2Vucyh0b2tlbnMsIGRlYnVnPWRlYnVnKQorICAgICAgICBleGNlcHQgcGFyc2UuUGFyc2VFcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgUGF0dGVyblN5bnRheEVycm9yKHN0cihlKSkKICAgICAgICAgcmV0dXJuIHNlbGYuY29tcGlsZV9ub2RlKHJvb3QpCiAKICAgICBkZWYgY29tcGlsZV9ub2RlKHNlbGYsIG5vZGUpOgpAQCAtMTM5LDcgKzE0Myw5IEBACiAgICAgICAgICAgICB2YWx1ZSA9IG5vZGUudmFsdWUKICAgICAgICAgICAgIGlmIHZhbHVlLmlzdXBwZXIoKToKICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBub3QgaW4gVE9LRU5fTUFQOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiSW52YWxpZCB0b2tlbjogJXIiICUgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBhdHRlcm5TeW50YXhFcnJvcigiSW52YWxpZCB0b2tlbjogJXIiICUgdmFsdWUpCisgICAgICAgICAgICAgICAgaWYgbm9kZXNbMTpdOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBQYXR0ZXJuU3ludGF4RXJyb3IoIkNhbid0IGhhdmUgZGV0YWlscyBmb3IgdG9rZW4iKQogICAgICAgICAgICAgICAgIHJldHVybiBweXRyZWUuTGVhZlBhdHRlcm4oVE9LRU5fTUFQW3ZhbHVlXSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaWYgdmFsdWUgPT0gImFueSI6CkBAIC0xNDcsNyArMTUzLDcgQEAKICAgICAgICAgICAgICAgICBlbGlmIG5vdCB2YWx1ZS5zdGFydHN3aXRoKCJfIik6CiAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBnZXRhdHRyKHNlbGYucHlzeW1zLCB2YWx1ZSwgTm9uZSkKICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIkludmFsaWQgc3ltYm9sOiAlciIgJSB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBhdHRlcm5TeW50YXhFcnJvcigiSW52YWxpZCBzeW1ib2w6ICVyIiAlIHZhbHVlKQogICAgICAgICAgICAgICAgIGlmIG5vZGVzWzE6XTogIyBEZXRhaWxzIHByZXNlbnQKICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IFtzZWxmLmNvbXBpbGVfbm9kZShub2Rlc1sxXS5jaGlsZHJlblsxXSldCiAgICAgICAgICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3B5dHJlZS5weSBiL0xpYi9saWIydG8zL3B5dHJlZS5weQppbmRleCBjNjBmMTA3Li5mNmRmM2EwIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9weXRyZWUucHkKKysrIGIvTGliL2xpYjJ0bzMvcHl0cmVlLnB5CkBAIC0xMyw2ICsxMyw3IEBACiBfX2F1dGhvcl9fID0gIkd1aWRvIHZhbiBSb3NzdW0gPGd1aWRvQHB5dGhvbi5vcmc+IgogCiBpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAKIApAQCAtMTExLDE3ICsxMTIsMjEgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFNldCB0aGUgcHJlZml4IGZvciB0aGUgbm9kZSAoc2VlIExlYWYgY2xhc3MpLgogCi0gICAgICAgIFRoaXMgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgY29uY3JldGUgc3ViY2xhc3MuCisgICAgICAgIERFUFJFQ0FURUQ7IHVzZSB0aGUgcHJlZml4IHByb3BlcnR5IGRpcmVjdGx5LgogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICB3YXJuaW5ncy53YXJuKCJzZXRfcHJlZml4KCkgaXMgZGVwcmVjYXRlZDsgdXNlIHRoZSBwcmVmaXggcHJvcGVydHkiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICBzZWxmLnByZWZpeCA9IHByZWZpeAogCiAgICAgZGVmIGdldF9wcmVmaXgoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBSZXR1cm4gdGhlIHByZWZpeCBmb3IgdGhlIG5vZGUgKHNlZSBMZWFmIGNsYXNzKS4KIAotICAgICAgICBUaGlzIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGNvbmNyZXRlIHN1YmNsYXNzLgorICAgICAgICBERVBSRUNBVEVEOyB1c2UgdGhlIHByZWZpeCBwcm9wZXJ0eSBkaXJlY3RseS4KICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgd2FybmluZ3Mud2FybigiZ2V0X3ByZWZpeCgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSB0aGUgcHJlZml4IHByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgcmV0dXJuIHNlbGYucHJlZml4CiAKICAgICBkZWYgcmVwbGFjZShzZWxmLCBuZXcpOgogICAgICAgICAiIiJSZXBsYWNlIHRoaXMgbm9kZSB3aXRoIGEgbmV3IG9uZSBpbiB0aGUgcGFyZW50LiIiIgpAQCAtMjA5LDEyICsyMTQsMTIgQEAKICAgICBkZWYgZ2V0X3N1ZmZpeChzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFJldHVybiB0aGUgc3RyaW5nIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgaW52b2NhbnQgbm9kZS4gVGhpcyBpcwotICAgICAgICBlZmZlY3RpdmVseSBlcXVpdmFsZW50IHRvIG5vZGUubmV4dF9zaWJsaW5nLmdldF9wcmVmaXgoKQorICAgICAgICBlZmZlY3RpdmVseSBlcXVpdmFsZW50IHRvIG5vZGUubmV4dF9zaWJsaW5nLnByZWZpeAogICAgICAgICAiIiIKICAgICAgICAgbmV4dF9zaWIgPSBzZWxmLm5leHRfc2libGluZwogICAgICAgICBpZiBuZXh0X3NpYiBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuICIiCi0gICAgICAgIHJldHVybiBuZXh0X3NpYi5nZXRfcHJlZml4KCkKKyAgICAgICAgcmV0dXJuIG5leHRfc2liLnByZWZpeAogCiAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCAwKToKICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CkBAIC0yNDEsNyArMjQ2LDcgQEAKICAgICAgICAgICAgIGFzc2VydCBjaC5wYXJlbnQgaXMgTm9uZSwgcmVwcihjaCkKICAgICAgICAgICAgIGNoLnBhcmVudCA9IHNlbGYKICAgICAgICAgaWYgcHJlZml4IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5zZXRfcHJlZml4KHByZWZpeCkKKyAgICAgICAgICAgIHNlbGYucHJlZml4ID0gcHJlZml4CiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIGNhbm9uaWNhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24uIiIiCkBAIC0yODIsMjQgKzI4NywxOSBAQAogICAgICAgICAgICAgZm9yIG5vZGUgaW4gY2hpbGQucG9zdF9vcmRlcigpOgogICAgICAgICAgICAgICAgIHlpZWxkIG5vZGUKIAotICAgIGRlZiBzZXRfcHJlZml4KHNlbGYsIHByZWZpeCk6CisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZWZpeChzZWxmKToKICAgICAgICAgIiIiCi0gICAgICAgIFNldCB0aGUgcHJlZml4IGZvciB0aGUgbm9kZS4KLQotICAgICAgICBUaGlzIHBhc3NlcyB0aGUgcmVzcG9uc2liaWxpdHkgb24gdG8gdGhlIGZpcnN0IGNoaWxkLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5jaGlsZHJlbjoKLSAgICAgICAgICAgIHNlbGYuY2hpbGRyZW5bMF0uc2V0X3ByZWZpeChwcmVmaXgpCi0KLSAgICBkZWYgZ2V0X3ByZWZpeChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiB0aGUgcHJlZml4IGZvciB0aGUgbm9kZS4KLQotICAgICAgICBUaGlzIHBhc3NlcyB0aGUgY2FsbCBvbiB0byB0aGUgZmlyc3QgY2hpbGQuCisgICAgICAgIFRoZSB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cyBwcmVjZWRpbmcgdGhpcyBub2RlIGluIHRoZSBpbnB1dC4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLmNoaWxkcmVuOgogICAgICAgICAgICAgcmV0dXJuICIiCi0gICAgICAgIHJldHVybiBzZWxmLmNoaWxkcmVuWzBdLmdldF9wcmVmaXgoKQorICAgICAgICByZXR1cm4gc2VsZi5jaGlsZHJlblswXS5wcmVmaXgKKworICAgIEBwcmVmaXguc2V0dGVyCisgICAgZGVmIHByZWZpeChzZWxmLCBwcmVmaXgpOgorICAgICAgICBpZiBzZWxmLmNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5jaGlsZHJlblswXS5wcmVmaXggPSBwcmVmaXgKIAogICAgIGRlZiBzZXRfY2hpbGQoc2VsZiwgaSwgY2hpbGQpOgogICAgICAgICAiIiIKQEAgLTMzNSw5ICszMzUsOSBAQAogICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIGZvciBsZWFmIG5vZGVzLiIiIgogCiAgICAgIyBEZWZhdWx0IHZhbHVlcyBmb3IgaW5zdGFuY2UgdmFyaWFibGVzCi0gICAgcHJlZml4ID0gIiIgICMgV2hpdGVzcGFjZSBhbmQgY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgdG9rZW4gaW4gdGhlIGlucHV0Ci0gICAgbGluZW5vID0gMCAgICMgTGluZSB3aGVyZSB0aGlzIHRva2VuIHN0YXJ0cyBpbiB0aGUgaW5wdXQKLSAgICBjb2x1bW4gPSAwICAgIyBDb2x1bW4gd2hlcmUgdGhpcyB0b2tlbiB0YXJ0cyBpbiB0aGUgaW5wdXQKKyAgICBfcHJlZml4ID0gIiIgICMgV2hpdGVzcGFjZSBhbmQgY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgdG9rZW4gaW4gdGhlIGlucHV0CisgICAgbGluZW5vID0gMCAgICAjIExpbmUgd2hlcmUgdGhpcyB0b2tlbiBzdGFydHMgaW4gdGhlIGlucHV0CisgICAgY29sdW1uID0gMCAgICAjIENvbHVtbiB3aGVyZSB0aGlzIHRva2VuIHRhcnRzIGluIHRoZSBpbnB1dAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCBjb250ZXh0PU5vbmUsIHByZWZpeD1Ob25lKToKICAgICAgICAgIiIiCkBAIC0zNDgsMTEgKzM0OCwxMSBAQAogICAgICAgICAiIiIKICAgICAgICAgYXNzZXJ0IDAgPD0gdHlwZSA8IDI1NiwgdHlwZQogICAgICAgICBpZiBjb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5wcmVmaXgsIChzZWxmLmxpbmVubywgc2VsZi5jb2x1bW4pID0gY29udGV4dAorICAgICAgICAgICAgc2VsZi5fcHJlZml4LCAoc2VsZi5saW5lbm8sIHNlbGYuY29sdW1uKSA9IGNvbnRleHQKICAgICAgICAgc2VsZi50eXBlID0gdHlwZQogICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgICAgICAgaWYgcHJlZml4IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5wcmVmaXggPSBwcmVmaXgKKyAgICAgICAgICAgIHNlbGYuX3ByZWZpeCA9IHByZWZpeAogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiIiIgpAQCAtMzg4LDE0ICszODgsMTcgQEAKICAgICAgICAgIiIiUmV0dXJuIGEgcHJlLW9yZGVyIGl0ZXJhdG9yIGZvciB0aGUgdHJlZS4iIiIKICAgICAgICAgeWllbGQgc2VsZgogCi0gICAgZGVmIHNldF9wcmVmaXgoc2VsZiwgcHJlZml4KToKLSAgICAgICAgIiIiU2V0IHRoZSBwcmVmaXggZm9yIHRoZSBub2RlLiIiIgotICAgICAgICBzZWxmLmNoYW5nZWQoKQotICAgICAgICBzZWxmLnByZWZpeCA9IHByZWZpeAorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmVmaXgoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgd2hpdGVzcGFjZSBhbmQgY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgdG9rZW4gaW4gdGhlIGlucHV0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ByZWZpeAogCi0gICAgZGVmIGdldF9wcmVmaXgoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgcHJlZml4IGZvciB0aGUgbm9kZS4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYucHJlZml4CisgICAgQHByZWZpeC5zZXR0ZXIKKyAgICBkZWYgcHJlZml4KHNlbGYsIHByZWZpeCk6CisgICAgICAgIHNlbGYuY2hhbmdlZCgpCisgICAgICAgIHNlbGYuX3ByZWZpeCA9IHByZWZpeAogCiAKIGRlZiBjb252ZXJ0KGdyLCByYXdfbm9kZSk6CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9yZWZhY3Rvci5weSBiL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CmluZGV4IDgyYTk4ZDEuLmM1Mzk4YzggMTAwNzU1Ci0tLSBhL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CisrKyBiL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CkBAIC0xLDQgKzEsMyBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMi41CiAjIENvcHlyaWdodCAyMDA2IEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAKQEAgLTIzLDExICsyMiw3IEBACiAKICMgTG9jYWwgaW1wb3J0cwogZnJvbSAucGdlbjIgaW1wb3J0IGRyaXZlciwgdG9rZW5pemUKLQotZnJvbSAuIGltcG9ydCBweXRyZWUKLWZyb20gLiBpbXBvcnQgcGF0Y29tcAotZnJvbSAuIGltcG9ydCBmaXhlcwotZnJvbSAuIGltcG9ydCBweWdyYW0KK2Zyb20gLiBpbXBvcnQgcHl0cmVlLCBweWdyYW0KIAogCiBkZWYgZ2V0X2FsbF9maXhfbmFtZXMoZml4ZXJfcGtnLCByZW1vdmVfcHJlZml4PVRydWUpOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvZGF0YS9kaWZmZXJlbnRfZW5jb2RpbmcucHkgYi9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL2RpZmZlcmVudF9lbmNvZGluZy5weQppbmRleCA0YmI4MmJkLi44ODhmNTFmIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL2RpZmZlcmVudF9lbmNvZGluZy5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL2RpZmZlcmVudF9lbmNvZGluZy5weQpAQCAtMSw0ICsxLDMgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQotcHJpbnQodSff4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb4+fr7/P3+/8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW2Nna29zd3icpCi0KK3ByaW50IHUn3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX2+Pn6+/z9/v/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tjZ2tvc3d4nCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL2ZpeF9wYXJyb3QucHkgYi9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL2ZpeF9wYXJyb3QucHkKaW5kZXggNmJkMmY0OS4uNmRiNzlhZCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvZGF0YS9maXhlcnMvbXlmaXhlcy9maXhfcGFycm90LnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvZml4X3BhcnJvdC5weQpAQCAtMTAsNCArMTAsNCBAQAogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKICAgICAgICAgbmFtZSA9IHJlc3VsdHNbIm5hbWUiXQotICAgICAgICBuYW1lLnJlcGxhY2UoTmFtZSgiY2hlZXNlIiwgbmFtZS5nZXRfcHJlZml4KCkpKQorICAgICAgICBuYW1lLnJlcGxhY2UoTmFtZSgiY2hlZXNlIiwgbmFtZS5wcmVmaXgpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvZGF0YS9weTJfdGVzdF9ncmFtbWFyLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvZGF0YS9weTJfdGVzdF9ncmFtbWFyLnB5CmluZGV4IGRjNzk0ZTIuLjE3ZjlmNGMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL2RhdGEvcHkyX3Rlc3RfZ3JhbW1hci5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL3B5Ml90ZXN0X2dyYW1tYXIucHkKQEAgLTEsNSArMSwzIEBACi0jIFB5dGhvbiAyJ3MgTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5IChyNjYxODkpCi0KICMgUHl0aG9uIHRlc3Qgc2V0IC0tIHBhcnQgMSwgZ3JhbW1hci4KICMgVGhpcyBqdXN0IHRlc3RzIHdoZXRoZXIgdGhlIHBhcnNlciBhY2NlcHRzIHRoZW0gYWxsLgogCkBAIC05MjIsNiArOTIwLDI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3ggZm9yIHgsIGluIFsoNCwpLCAoNSwpLCAoNiwpXV0sIFs0LCA1LCA2XSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHggZm9yIHgsIGluIFsoNywpLCAoOCwpLCAoOSwpXSksIFs3LCA4LCA5XSkKIAorICAgIGRlZiB0ZXN0X3dpdGhfc3RhdGVtZW50KHNlbGYpOgorICAgICAgICBjbGFzcyBtYW5hZ2VyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoMSwgMikKKyAgICAgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggbWFuYWdlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyB4OgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyAoeCwgeSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggbWFuYWdlcigpLCBtYW5hZ2VyKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggbWFuYWdlcigpIGFzIHgsIG1hbmFnZXIoKSBhcyB5OgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyB4LCBtYW5hZ2VyKCk6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdElmRWxzZUV4cHIoc2VsZik6CiAgICAgICAgICMgVGVzdCBpZmVsc2UgZXhwcmVzc2lvbnMgaW4gdmFyaW91cyBjYXNlcwogICAgICAgICBkZWYgX2NoZWNrZXZhbChtc2csIHJldCk6CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL3B5M190ZXN0X2dyYW1tYXIucHkgYi9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL3B5M190ZXN0X2dyYW1tYXIucHkKaW5kZXggZWFkZjFkYi4uOTc3ZjBiOCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvZGF0YS9weTNfdGVzdF9ncmFtbWFyLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL2RhdGEvcHkzX3Rlc3RfZ3JhbW1hci5weQpAQCAtODY4LDYgKzg2OCwyNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt4IGZvciB4LCBpbiBbKDQsKSwgKDUsKSwgKDYsKV1dLCBbNCwgNSwgNl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4IGZvciB4LCBpbiBbKDcsKSwgKDgsKSwgKDksKV0pLCBbNywgOCwgOV0pCiAKKyAgICBkZWYgdGVzdF93aXRoX3N0YXRlbWVudChzZWxmKToKKyAgICAgICAgY2xhc3MgbWFuYWdlcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKDEsIDIpCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIG1hbmFnZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBtYW5hZ2VyKCkgYXMgeDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBtYW5hZ2VyKCkgYXMgKHgsIHkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSwgbWFuYWdlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyB4LCBtYW5hZ2VyKCkgYXMgeToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBtYW5hZ2VyKCkgYXMgeCwgbWFuYWdlcigpOgorICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIHRlc3RJZkVsc2VFeHByKHNlbGYpOgogICAgICAgICAjIFRlc3QgaWZlbHNlIGV4cHJlc3Npb25zIGluIHZhcmlvdXMgY2FzZXMKICAgICAgICAgZGVmIF9jaGVja2V2YWwobXNnLCByZXQpOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CmluZGV4IDNmM2FiOTIuLjQxNGViNGQgMTAwNzU1Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24yLjUKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIyBDb3B5cmlnaHQgMjAwNiBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy9zdXBwb3J0LnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvc3VwcG9ydC5weQppbmRleCA4Yjg0NjhjLi42ZjJkMjE0IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy9zdXBwb3J0LnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3N1cHBvcnQucHkKQEAgLTMwLDcgKzMwLDcgQEAKIGRlZiByZWZvcm1hdChzdHJpbmcpOgogICAgIHJldHVybiBkZWRlbnQoc3RyaW5nKSArICJcblxuIgogCi1kZWYgZ2V0X3JlZmFjdG9yZXIoZml4ZXJzPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CitkZWYgZ2V0X3JlZmFjdG9yZXIoZml4ZXJfcGtnPSJsaWIydG8zIiwgZml4ZXJzPU5vbmUsIG9wdGlvbnM9Tm9uZSk6CiAgICAgIiIiCiAgICAgQSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBSZWZhY3RvcmluZ1Rvb2wgZm9yIHRlc3RzLgogCkBAIC0zOSw5ICszOSw5IEBACiAgICAgYmUgcGFzc2VkIHRvIHRoZSBSZWZhY3RvcmluZ1Rvb2wuCiAgICAgIiIiCiAgICAgaWYgZml4ZXJzIGlzIG5vdCBOb25lOgotICAgICAgICBmaXhlcnMgPSBbImxpYjJ0bzMuZml4ZXMuZml4XyIgKyBmaXggZm9yIGZpeCBpbiBmaXhlcnNdCisgICAgICAgIGZpeGVycyA9IFtmaXhlcl9wa2cgKyAiLmZpeGVzLmZpeF8iICsgZml4IGZvciBmaXggaW4gZml4ZXJzXQogICAgIGVsc2U6Ci0gICAgICAgIGZpeGVycyA9IHJlZmFjdG9yLmdldF9maXhlcnNfZnJvbV9wYWNrYWdlKCJsaWIydG8zLmZpeGVzIikKKyAgICAgICAgZml4ZXJzID0gcmVmYWN0b3IuZ2V0X2ZpeGVyc19mcm9tX3BhY2thZ2UoZml4ZXJfcGtnICsgIi5maXhlcyIpCiAgICAgb3B0aW9ucyA9IG9wdGlvbnMgb3Ige30KICAgICByZXR1cm4gcmVmYWN0b3IuUmVmYWN0b3JpbmdUb29sKGZpeGVycywgb3B0aW9ucywgZXhwbGljaXQ9VHJ1ZSkKIApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9hbGxfZml4ZXJzLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9hbGxfZml4ZXJzLnB5CmluZGV4IDE3OTVhZGUuLjhlZjIyMmQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfYWxsX2ZpeGVycy5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2FsbF9maXhlcnMucHkKQEAgLTEsNCArMSwzIEBACi0jIS91c3IvYmluL2VudiBweXRob24yLjUKICIiIlRlc3RzIHRoYXQgcnVuIGFsbCBmaXhlciBtb2R1bGVzIG92ZXIgYW4gaW5wdXQgc3RyZWFtLgogCiBUaGlzIGhhcyBiZWVuIGJyb2tlbiBvdXQgaW50byBpdHMgb3duIHRlc3QgbW9kdWxlIGJlY2F1c2Ugb2YgaXRzCkBAIC02LDE4ICs1LDEzIEBACiAiIiIKICMgQXV0aG9yOiBDb2xsaW4gV2ludGVyCiAKLSMgVGVzdGluZyBpbXBvcnRzCi10cnk6Ci0gICAgZnJvbSAuIGltcG9ydCBzdXBwb3J0Ci1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgaW1wb3J0IHN1cHBvcnQKLQogIyBQeXRob24gaW1wb3J0cwogaW1wb3J0IHVuaXR0ZXN0CiAKICMgTG9jYWwgaW1wb3J0cwogZnJvbSAuLiBpbXBvcnQgcHl0cmVlCiBmcm9tIC4uIGltcG9ydCByZWZhY3RvcgorZnJvbSAuIGltcG9ydCBzdXBwb3J0CiAKIAogY2xhc3MgVGVzdF9hbGwoc3VwcG9ydC5UZXN0Q2FzZSk6CkBAIC0yOSw4ICsyMywzIEBACiAgICAgICAgIGZvciBmaWxlcGF0aCBpbiBzdXBwb3J0LmFsbF9wcm9qZWN0X2ZpbGVzKCk6CiAgICAgICAgICAgICBwcmludCgiRml4aW5nICVzLi4uIiAlIGZpbGVwYXRoKQogICAgICAgICAgICAgc2VsZi5yZWZhY3Rvci5yZWZhY3Rvcl9maWxlKGZpbGVwYXRoKQotCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgaW1wb3J0IF9fbWFpbl9fCi0gICAgc3VwcG9ydC5ydW5fYWxsX3Rlc3RzKF9fbWFpbl9fKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9maXhlcnMucHkgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQppbmRleCA1MDc2ODU0Li4yZjg3ZmIyIDEwMDc1NQotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQpAQCAtMSwxMiArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24yLjUKICIiIiBUZXN0IHN1aXRlIGZvciB0aGUgZml4ZXIgbW9kdWxlcyAiIiIKLSMgQXV0aG9yOiBDb2xsaW4gV2ludGVyCi0KLSMgVGVzdGluZyBpbXBvcnRzCi10cnk6Ci0gICAgZnJvbSB0ZXN0cyBpbXBvcnQgc3VwcG9ydAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZyb20gLiBpbXBvcnQgc3VwcG9ydAogCiAjIFB5dGhvbiBpbXBvcnRzCiBpbXBvcnQgb3MKQEAgLTE2LDE0ICs4LDE5IEBACiAKICMgTG9jYWwgaW1wb3J0cwogZnJvbSBsaWIydG8zIGltcG9ydCBweWdyYW0sIHB5dHJlZSwgcmVmYWN0b3IsIGZpeGVyX3V0aWwKK2Zyb20gbGliMnRvMy50ZXN0cyBpbXBvcnQgc3VwcG9ydAogCiAKIGNsYXNzIEZpeGVyVGVzdENhc2Uoc3VwcG9ydC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYsIGZpeF9saXN0PU5vbmUpOgorCisgICAgIyBPdGhlciB0ZXN0IGNhc2VzIGNhbiBzdWJjbGFzcyB0aGlzIGNsYXNzIGFuZCByZXBsYWNlICJmaXhlcl9wa2ciIHdpdGgKKyAgICAjIHRoZWlyIG93bi4KKyAgICBkZWYgc2V0VXAoc2VsZiwgZml4X2xpc3Q9Tm9uZSwgZml4ZXJfcGtnPSJsaWIydG8zIiwgb3B0aW9ucz1Ob25lKToKICAgICAgICAgaWYgZml4X2xpc3QgaXMgTm9uZToKICAgICAgICAgICAgIGZpeF9saXN0ID0gW3NlbGYuZml4ZXJdCi0gICAgICAgIG9wdGlvbnMgPSB7InByaW50X2Z1bmN0aW9uIiA6IEZhbHNlfQotICAgICAgICBzZWxmLnJlZmFjdG9yID0gc3VwcG9ydC5nZXRfcmVmYWN0b3JlcihmaXhfbGlzdCwgb3B0aW9ucykKKyAgICAgICAgaWYgb3B0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgb3B0aW9ucyA9IHsicHJpbnRfZnVuY3Rpb24iIDogRmFsc2V9CisgICAgICAgIHNlbGYucmVmYWN0b3IgPSBzdXBwb3J0LmdldF9yZWZhY3RvcmVyKGZpeGVyX3BrZywgZml4X2xpc3QsIG9wdGlvbnMpCiAgICAgICAgIHNlbGYuZml4ZXJfbG9nID0gW10KICAgICAgICAgc2VsZi5maWxlbmFtZSA9ICI8c3RyaW5nPiIKIApAQCAtNjIsNyArNTksNyBAQAogICAgICAgICBmaXhlcyA9IFtzZWxmLmZpeGVyXQogICAgICAgICBmaXhlcy5leHRlbmQobmFtZXMpCiAgICAgICAgIG9wdGlvbnMgPSB7InByaW50X2Z1bmN0aW9uIiA6IEZhbHNlfQotICAgICAgICByID0gc3VwcG9ydC5nZXRfcmVmYWN0b3JlcihmaXhlcywgb3B0aW9ucykKKyAgICAgICAgciA9IHN1cHBvcnQuZ2V0X3JlZmFjdG9yZXIoImxpYjJ0bzMiLCBmaXhlcywgb3B0aW9ucykKICAgICAgICAgKHByZSwgcG9zdCkgPSByLmdldF9maXhlcnMoKQogICAgICAgICBuID0gImZpeF8iICsgc2VsZi5maXhlcgogICAgICAgICBpZiBwb3N0IGFuZCBwb3N0Wy0xXS5fX2NsYXNzX18uX19tb2R1bGVfXy5lbmRzd2l0aChuKToKQEAgLTQxOSw2ICs0MTYsNyBAQAogICAgIGRlZiB0ZXN0XzUoc2VsZik6CiAgICAgICAgIGIgPSAiIiJwcmludDsgcHJpbnQgd2hhdGV2ZXI7IiIiCiAgICAgICAgIGEgPSAiIiJwcmludCgpOyBwcmludCh3aGF0ZXZlcik7IiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKIAogICAgIGRlZiB0ZXN0X3R1cGxlKHNlbGYpOgogICAgICAgICBiID0gIiIicHJpbnQgKGEsIGIsIGMpIiIiCkBAIC03ODIsNiArNzgwLDUyIEBACiAgICAgICAgICAgICAgICAgcGFzcyIiIgogICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCiAKKyAgICBkZWYgdGVzdF9vbmVfbGluZV9zdWl0ZXMoc2VsZik6CisgICAgICAgIGIgPSAiIiIKKyAgICAgICAgICAgIHRyeTogcmFpc2UgVHlwZUVycm9yCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIgorICAgICAgICBhID0gIiIiCisgICAgICAgICAgICB0cnk6IHJhaXNlIFR5cGVFcnJvcgorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAiIiIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6IHBhc3MKKyAgICAgICAgICAgICIiIgorICAgICAgICBhID0gIiIiCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6IHBhc3MKKyAgICAgICAgICAgICIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAiIiIKKyAgICAgICAgICAgIHRyeTogcmFpc2UgVHlwZUVycm9yCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOiBwYXNzCisgICAgICAgICAgICAiIiIKKyAgICAgICAgYSA9ICIiIgorICAgICAgICAgICAgdHJ5OiByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZTogcGFzcworICAgICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICIiIgorICAgICAgICAgICAgdHJ5OiByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6IHBhc3MKKyAgICAgICAgICAgIGVsc2U6IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgIGZpbmFsbHk6IGRvbmUoKQorICAgICAgICAgICAgIiIiCisgICAgICAgIGEgPSAiIiIKKyAgICAgICAgICAgIHRyeTogcmFpc2UgVHlwZUVycm9yCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6IHBhc3MKKyAgICAgICAgICAgIGVsc2U6IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgIGZpbmFsbHk6IGRvbmUoKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKwogICAgICMgVGhlc2Ugc2hvdWxkIG5vdCBiZSB0b3VjaGVkOgogCiAgICAgZGVmIHRlc3RfdW5jaGFuZ2VkXzEoc2VsZik6CkBAIC0yNjQwLDExICsyNjg0LDI5IEBACiBjbGFzcyBUZXN0X3VuaWNvZGUoRml4ZXJUZXN0Q2FzZSk6CiAgICAgZml4ZXIgPSAidW5pY29kZSIKIAorICAgIGRlZiB0ZXN0X3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIGIgPSAiIiJ1bmljb2RlKCB4KSIiIgorICAgICAgICBhID0gIiIic3RyKCB4KSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgYiA9ICIiIiB1bmljb2RlKHggKSIiIgorICAgICAgICBhID0gIiIiIHN0cih4ICkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAiIiIgdSdoJyIiIgorICAgICAgICBhID0gIiIiICdoJyIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKICAgICBkZWYgdGVzdF91bmljb2RlX2NhbGwoc2VsZik6CiAgICAgICAgIGIgPSAiIiJ1bmljb2RlKHgsIHksIHopIiIiCiAgICAgICAgIGEgPSAiIiJzdHIoeCwgeSwgeikiIiIKICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQogCisgICAgZGVmIHRlc3RfdW5pY2hyKHNlbGYpOgorICAgICAgICBiID0gIiIidW5pY2hyKHUnaCcpIiIiCisgICAgICAgIGEgPSAiIiJjaHIoJ2gnKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKICAgICBkZWYgdGVzdF91bmljb2RlX2xpdGVyYWxfMShzZWxmKToKICAgICAgICAgYiA9ICcnJ3UieCInJycKICAgICAgICAgYSA9ICcnJyJ4IicnJwpAQCAtMjY1Niw4ICsyNzE4LDggQEAKICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9saXRlcmFsXzMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJVUicnJ3gnJyciIiIKLSAgICAgICAgYSA9ICIiIlInJyd4JycnIiIiCisgICAgICAgIGIgPSAiIiJVUicnJ3gnJycgIiIiCisgICAgICAgIGEgPSAiIiJSJycneCcnJyAiIiIKICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQogCiBjbGFzcyBUZXN0X2NhbGxhYmxlKEZpeGVyVGVzdENhc2UpOgpAQCAtMzMwNiw2ICszMzY4LDExIEBACiAgICAgICAgIGEgPSAiIiJ4ID0gbWVtb3J5dmlldyh5KSIiIgogICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCiAKKyAgICBkZWYgdGVzdF9zbGljaW5nKHNlbGYpOgorICAgICAgICBiID0gIiIiYnVmZmVyKHkpWzQ6NV0iIiIKKyAgICAgICAgYSA9ICIiIm1lbW9yeXZpZXcoeSlbNDo1XSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKIGNsYXNzIFRlc3RfZnV0dXJlKEZpeGVyVGVzdENhc2UpOgogICAgIGZpeGVyID0gImZ1dHVyZSIKIApAQCAtNDAyOCw4ICs0MDk1LDMgQEAKICAgICAgICAgYiA9ICIiIm9zLmdldGN3ZHUgKCAgKSIiIgogICAgICAgICBhID0gIiIib3MuZ2V0Y3dkICggICkiIiIKICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgaW1wb3J0IF9fbWFpbl9fCi0gICAgc3VwcG9ydC5ydW5fYWxsX3Rlc3RzKF9fbWFpbl9fKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9wYXJzZXIucHkgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weQppbmRleCAyYWE3MzdjLi4wOGU3YmRjIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weQpAQCAtMSw0ICsxLDMgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbjIuNQogIiIiVGVzdCBzdWl0ZSBmb3IgMnRvMydzIHBhcnNlciBhbmQgZ3JhbW1hciBmaWxlcy4KIAogVGhpcyBpcyB0aGUgcGxhY2UgdG8gYWRkIHRlc3RzIGZvciBjaGFuZ2VzIHRvIDJ0bzMncyBncmFtbWFyLCBzdWNoIGFzIHRob3NlCkBAIC02LDcgKzUsNiBAQAogcGFydHMgb2YgdGhlIGdyYW1tYXIgd2UndmUgY2hhbmdlZCwgd2UgYWxzbyBtYWtlIHN1cmUgd2UgY2FuIHBhcnNlIHRoZQogdGVzdF9ncmFtbWFyLnB5IGZpbGVzIGZyb20gYm90aCBQeXRob24gMiBhbmQgUHl0aG9uIDMuCiAiIiIKLSMgQXV0aG9yOiBDb2xsaW4gV2ludGVyCiAKICMgVGVzdGluZyBpbXBvcnRzCiBmcm9tIC4gaW1wb3J0IHN1cHBvcnQKQEAgLTE5OCw3ICsxOTYsNyBAQAogCiAKIGRlZiBkaWZmKGZuLCByZXN1bHQpOgotICAgIGYgPSBvcGVuKCJAIiwgInciKQorICAgIGYgPSBvcGVuKCJAIiwgIndiIikKICAgICB0cnk6CiAgICAgICAgIGYud3JpdGUocmVzdWx0KQogICAgIGZpbmFsbHk6CkBAIC0yMDcsOCArMjA1LDMgQEAKICAgICAgICAgcmV0dXJuIG9zLnN5c3RlbSgiZGlmZiAtdSAlcyBAIiAlIGZuKQogICAgIGZpbmFsbHk6CiAgICAgICAgIG9zLnJlbW92ZSgiQCIpCi0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBpbXBvcnQgX19tYWluX18KLSAgICBzdXBwb3J0LnJ1bl9hbGxfdGVzdHMoX19tYWluX18pCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3B5dHJlZS5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcHl0cmVlLnB5CmluZGV4IDlkYzZlMDcuLjgzYTliMTggMTAwNzU1Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcHl0cmVlLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcHl0cmVlLnB5CkBAIC0xLDQgKzEsMyBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMi41CiAjIENvcHlyaWdodCAyMDA2IEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAKQEAgLTEwLDExICs5LDEyIEBACiBlc3BlY2lhbGx5IHdoZW4gZGVidWdnaW5nIGEgdGVzdC4KICIiIgogCitpbXBvcnQgd2FybmluZ3MKKwogIyBUZXN0aW5nIGltcG9ydHMKIGZyb20gLiBpbXBvcnQgc3VwcG9ydAogCi0jIExvY2FsIGltcG9ydHMgKFhYWCBzaG91bGQgYmVjb21lIGEgcGFja2FnZSkKLWZyb20gLi4gaW1wb3J0IHB5dHJlZQorZnJvbSBsaWIydG8zIGltcG9ydCBweXRyZWUKIAogdHJ5OgogICAgIHNvcnRlZApAQCAtMjgsMzQgKzI4LDQ4IEBACiAKICAgICAiIiJVbml0IHRlc3RzIGZvciBub2RlcyAoQmFzZSwgTGVhZiwgTm9kZSkuIiIiCiAKLSAgICBkZWYgdGVzdEJhc2VDYW50Q29uc3RydWN0KHNlbGYpOgorICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfcHJlZml4X21ldGhvZHMoc2VsZik6CisgICAgICAgIGwgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLmdldF9wcmVmaXgoKSwgIiIpCisgICAgICAgICAgICBsLnNldF9wcmVmaXgoImhpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLnByZWZpeCwgImhpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDIpCisgICAgICAgIGZvciB3YXJuaW5nIGluIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FybmluZy5jYXRlZ29yeSBpcyBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdbMF0ubWVzc2FnZSksICJnZXRfcHJlZml4KCkgaXMgZGVwcmVjYXRlZDsgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgdGhlIHByZWZpeCBwcm9wZXJ0eSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdbMV0ubWVzc2FnZSksICJzZXRfcHJlZml4KCkgaXMgZGVwcmVjYXRlZDsgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgdGhlIHByZWZpeCBwcm9wZXJ0eSIpCisKKyAgICBkZWYgdGVzdF9pbnN0YW50aWF0ZV9iYXNlKHNlbGYpOgogICAgICAgICBpZiBfX2RlYnVnX186CiAgICAgICAgICAgICAjIFRlc3QgdGhhdCBpbnN0YW50aWF0aW5nIEJhc2UoKSByYWlzZXMgYW4gQXNzZXJ0aW9uRXJyb3IKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBweXRyZWUuQmFzZSkKIAotICAgIGRlZiB0ZXN0TGVhZihzZWxmKToKKyAgICBkZWYgdGVzdF9sZWFmKHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEudHlwZSwgMTAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLnZhbHVlLCAiZm9vIikKIAotICAgIGRlZiB0ZXN0TGVhZlJlcHIoc2VsZik6CisgICAgZGVmIHRlc3RfbGVhZl9yZXByKHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihsMSksICJMZWFmKDEwMCwgJ2ZvbycpIikKIAotICAgIGRlZiB0ZXN0TGVhZlN0cihzZWxmKToKKyAgICBkZWYgdGVzdF9sZWFmX3N0cihzZWxmKToKICAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihsMSksICJmb28iKQogICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIsIGNvbnRleHQ9KCIgIiwgKDEwLCAxKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGwyKSwgIiBmb28iKQogCi0gICAgZGVmIHRlc3RMZWFmU3RyTnVtZXJpY1ZhbHVlKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xlYWZfc3RyX251bWVyaWNfdmFsdWUoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIExlYWYncyB2YWx1ZSBpcyBzdHJpbmdpZmllZC4gRmFpbGluZyB0bwogICAgICAgICAjICBkbyB0aGlzIGNhbiBjYXVzZSBhIFR5cGVFcnJvciBpbiBjZXJ0YWluIHNpdHVhdGlvbnMuCiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMiwgNSkKLSAgICAgICAgbDEuc2V0X3ByZWZpeCgiZm9vXyIpCisgICAgICAgIGwxLnByZWZpeCA9ICJmb29fIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihsMSksICJmb29fNSIpCiAKLSAgICBkZWYgdGVzdExlYWZFcShzZWxmKToKKyAgICBkZWYgdGVzdF9sZWFmX2VxdWFsaXR5KHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCiAgICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIiwgY29udGV4dD0oIiAiLCAoMSwgMCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLCBsMikKQEAgLTY0LDY3ICs3OCw2NyBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGwxLCBsMykKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsMSwgbDQpCiAKLSAgICBkZWYgdGVzdExlYWZQcmVmaXgoc2VsZik6CisgICAgZGVmIHRlc3RfbGVhZl9wcmVmaXgoc2VsZik6CiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMS5nZXRfcHJlZml4KCksICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLnByZWZpeCwgIiIpCiAgICAgICAgIHNlbGYuZmFpbElmKGwxLndhc19jaGFuZ2VkKQotICAgICAgICBsMS5zZXRfcHJlZml4KCIgICMjXG5cbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEuZ2V0X3ByZWZpeCgpLCAiICAjI1xuXG4iKQorICAgICAgICBsMS5wcmVmaXggPSAiICAjI1xuXG4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEucHJlZml4LCAiICAjI1xuXG4iKQogICAgICAgICBzZWxmLmZhaWxVbmxlc3MobDEud2FzX2NoYW5nZWQpCiAKLSAgICBkZWYgdGVzdE5vZGUoc2VsZik6CisgICAgZGVmIHRlc3Rfbm9kZShzZWxmKToKICAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQogICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDIwMCwgImJhciIpCiAgICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxLCBsMl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEudHlwZSwgMTAwMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5jaGlsZHJlbiwgW2wxLCBsMl0pCiAKLSAgICBkZWYgdGVzdE5vZGVSZXByKHNlbGYpOgorICAgIGRlZiB0ZXN0X25vZGVfcmVwcihzZWxmKToKICAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQogICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIsIGNvbnRleHQ9KCIgIiwgKDEsIDApKSkKICAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG4xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSgxMDAwLCBbJXMsICVzXSkiICUgKHJlcHIobDEpLCByZXByKGwyKSkpCiAKLSAgICBkZWYgdGVzdE5vZGVTdHIoc2VsZik6CisgICAgZGVmIHRlc3Rfbm9kZV9zdHIoc2VsZik6CiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKICAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiLCBjb250ZXh0PSgiICIsICgxLCAwKSkpCiAgICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxLCBsMl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG4xKSwgImZvbyBiYXIiKQogCi0gICAgZGVmIHRlc3ROb2RlUHJlZml4KHNlbGYpOgorICAgIGRlZiB0ZXN0X25vZGVfcHJlZml4KHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEuZ2V0X3ByZWZpeCgpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMS5wcmVmaXgsICIiKQogICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEuZ2V0X3ByZWZpeCgpLCAiIikKLSAgICAgICAgbjEuc2V0X3ByZWZpeCgiICIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEuZ2V0X3ByZWZpeCgpLCAiICIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEuZ2V0X3ByZWZpeCgpLCAiICIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEucHJlZml4LCAiIikKKyAgICAgICAgbjEucHJlZml4ID0gIiAiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEucHJlZml4LCAiICIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEucHJlZml4LCAiICIpCiAKLSAgICBkZWYgdGVzdEdldFN1ZmZpeChzZWxmKToKKyAgICBkZWYgdGVzdF9nZXRfc3VmZml4KHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIsIHByZWZpeD0iYSIpCiAgICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiYmFyIiwgcHJlZml4PSJiIikKICAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLmdldF9zdWZmaXgoKSwgbDIuZ2V0X3ByZWZpeCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLmdldF9zdWZmaXgoKSwgbDIucHJlZml4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwyLmdldF9zdWZmaXgoKSwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEuZ2V0X3N1ZmZpeCgpLCAiIikKIAogICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIsIHByZWZpeD0iYyIpCiAgICAgICAgIG4yID0gcHl0cmVlLk5vZGUoMTAwMCwgW24xLCBsM10pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5nZXRfc3VmZml4KCksIGwzLmdldF9wcmVmaXgoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5nZXRfc3VmZml4KCksIGwzLnByZWZpeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMy5nZXRfc3VmZml4KCksICIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4yLmdldF9zdWZmaXgoKSwgIiIpCiAKLSAgICBkZWYgdGVzdE5vZGVFcShzZWxmKToKKyAgICBkZWYgdGVzdF9ub2RlX2VxdWFsaXR5KHNlbGYpOgogICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsICgpKQogICAgICAgICBuMiA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtdLCBjb250ZXh0PSgiICIsICgxLCAwKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEsIG4yKQogICAgICAgICBuMyA9IHB5dHJlZS5Ob2RlKDEwMDEsICgpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG4xLCBuMykKIAotICAgIGRlZiB0ZXN0Tm9kZUVxUmVjdXJzaXZlKHNlbGYpOgorICAgIGRlZiB0ZXN0X25vZGVfcmVjdXJzaXZlX2VxdWFsaXR5KHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCiAgICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKICAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDFdKQpAQCAtMTM0LDcgKzE0OCw3IEBACiAgICAgICAgIG4zID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wzXSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChuMSwgbjMpCiAKLSAgICBkZWYgdGVzdFJlcGxhY2Uoc2VsZik6CisgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKICAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQogICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgIisiKQogICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIpCkBAIC0xNDgsNyArMTYyLDcgQEAKICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UobjEuY2hpbGRyZW4sIGxpc3QpKQogICAgICAgICBzZWxmLmZhaWxVbmxlc3MobjEud2FzX2NoYW5nZWQpCiAKLSAgICBkZWYgdGVzdFJlcGxhY2VXaXRoTGlzdChzZWxmKToKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3dpdGhfbGlzdChzZWxmKToKICAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQogICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgIisiKQogICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIpCkBAIC0xNTgsMzQgKzE3MiwzMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihuMSksICJmb28qKmJhciIpCiAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKG4xLmNoaWxkcmVuLCBsaXN0KSkKIAotICAgIGRlZiB0ZXN0UG9zdE9yZGVyKHNlbGYpOgorICAgIGRlZiB0ZXN0X3Bvc3Rfb3JkZXIoc2VsZik6CiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKICAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiKQogICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMSwgbDJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobjEucG9zdF9vcmRlcigpKSwgW2wxLCBsMiwgbjFdKQogCi0gICAgZGVmIHRlc3RQcmVPcmRlcihzZWxmKToKKyAgICBkZWYgdGVzdF9wcmVfb3JkZXIoc2VsZik6CiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKICAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiKQogICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMSwgbDJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobjEucHJlX29yZGVyKCkpLCBbbjEsIGwxLCBsMl0pCiAKLSAgICBkZWYgdGVzdENoYW5nZWRMZWFmKHNlbGYpOgorICAgIGRlZiB0ZXN0X2NoYW5nZWQoc2VsZik6CiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZiIpCiAgICAgICAgIHNlbGYuZmFpbElmKGwxLndhc19jaGFuZ2VkKQotCiAgICAgICAgIGwxLmNoYW5nZWQoKQogICAgICAgICBzZWxmLmZhaWxVbmxlc3MobDEud2FzX2NoYW5nZWQpCiAKLSAgICBkZWYgdGVzdENoYW5nZWROb2RlKHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImYiKQogICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMV0pCiAgICAgICAgIHNlbGYuZmFpbElmKG4xLndhc19jaGFuZ2VkKQotCiAgICAgICAgIG4xLmNoYW5nZWQoKQogICAgICAgICBzZWxmLmZhaWxVbmxlc3MobjEud2FzX2NoYW5nZWQpCiAKLSAgICBkZWYgdGVzdENoYW5nZWRSZWN1cnNpdmUoc2VsZik6CiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKICAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICIrIikKICAgICAgICAgbDMgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiKQpAQCAtMjAwLDIzICsyMTAsMjMgQEAKICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG4yLndhc19jaGFuZ2VkKQogICAgICAgICBzZWxmLmZhaWxJZihsMS53YXNfY2hhbmdlZCkKIAotICAgIGRlZiB0ZXN0TGVhZkNvbnN0cnVjdG9yUHJlZml4KHNlbGYpOgorICAgIGRlZiB0ZXN0X2xlYWZfY29uc3RydWN0b3JfcHJlZml4KHNlbGYpOgogICAgICAgICBmb3IgcHJlZml4IGluICgieHl6XyIsICIiKToKICAgICAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAic2VsZiIsIHByZWZpeD1wcmVmaXgpCiAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyKGwxKSwgcHJlZml4ICsgInNlbGYiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMS5nZXRfcHJlZml4KCksIHByZWZpeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEucHJlZml4LCBwcmVmaXgpCiAKLSAgICBkZWYgdGVzdE5vZGVDb25zdHJ1Y3RvclByZWZpeChzZWxmKToKKyAgICBkZWYgdGVzdF9ub2RlX2NvbnN0cnVjdG9yX3ByZWZpeChzZWxmKToKICAgICAgICAgZm9yIHByZWZpeCBpbiAoInh5el8iLCAiIik6CiAgICAgICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgInNlbGYiKQogICAgICAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJmb28iLCBwcmVmaXg9Il8iKQogICAgICAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSwgcHJlZml4PXByZWZpeCkKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHIobjEpLCBwcmVmaXggKyAic2VsZl9mb28iKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5nZXRfcHJlZml4KCksIHByZWZpeCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEuZ2V0X3ByZWZpeCgpLCBwcmVmaXgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwyLmdldF9wcmVmaXgoKSwgIl8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5wcmVmaXgsIHByZWZpeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEucHJlZml4LCBwcmVmaXgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwyLnByZWZpeCwgIl8iKQogCi0gICAgZGVmIHRlc3RSZW1vdmUoc2VsZik6CisgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCiAgICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKICAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKQEAgLTIzOSw3ICsyNDksNyBAQAogICAgICAgICBzZWxmLmZhaWxVbmxlc3MobjEud2FzX2NoYW5nZWQpCiAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhuMi53YXNfY2hhbmdlZCkKIAotICAgIGRlZiB0ZXN0UmVtb3ZlUGFyZW50bGVzcyhzZWxmKToKKyAgICBkZWYgdGVzdF9yZW1vdmVfcGFyZW50bGVzcyhzZWxmKToKICAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbXSkKICAgICAgICAgbjEucmVtb3ZlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5wYXJlbnQsIE5vbmUpCkBAIC0yNDgsNyArMjU4LDcgQEAKICAgICAgICAgbDEucmVtb3ZlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMS5wYXJlbnQsIE5vbmUpCiAKLSAgICBkZWYgdGVzdE5vZGVTZXRDaGlsZChzZWxmKToKKyAgICBkZWYgdGVzdF9ub2RlX3NldF9jaGlsZChzZWxmKToKICAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQogICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMV0pCiAKQEAgLTI2OSw3ICsyNzksNyBAQAogICAgICAgICAjIEkgZG9uJ3QgY2FyZSB3aGF0IGl0IHJhaXNlcywgc28gbG9uZyBhcyBpdCdzIGFuIGV4Y2VwdGlvbgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIG4xLnNldF9jaGlsZCwgMCwgbGlzdCkKIAotICAgIGRlZiB0ZXN0Tm9kZUluc2VydENoaWxkKHNlbGYpOgorICAgIGRlZiB0ZXN0X25vZGVfaW5zZXJ0X2NoaWxkKHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCiAgICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxXSkKIApAQCAtMjg1LDcgKzI5NSw3IEBACiAgICAgICAgICMgSSBkb24ndCBjYXJlIHdoYXQgaXQgcmFpc2VzLCBzbyBsb25nIGFzIGl0J3MgYW4gZXhjZXB0aW9uCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgbjEuaW5zZXJ0X2NoaWxkLCAwLCBsaXN0KQogCi0gICAgZGVmIHRlc3ROb2RlQXBwZW5kQ2hpbGQoc2VsZik6CisgICAgZGVmIHRlc3Rfbm9kZV9hcHBlbmRfY2hpbGQoc2VsZik6CiAgICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW10pCiAKICAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQpAQCAtMzAxLDcgKzMxMSw3IEBACiAgICAgICAgICMgSSBkb24ndCBjYXJlIHdoYXQgaXQgcmFpc2VzLCBzbyBsb25nIGFzIGl0J3MgYW4gZXhjZXB0aW9uCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgbjEuYXBwZW5kX2NoaWxkLCBsaXN0KQogCi0gICAgZGVmIHRlc3ROb2RlTmV4dFNpYmxpbmcoc2VsZik6CisgICAgZGVmIHRlc3Rfbm9kZV9uZXh0X3NpYmxpbmcoc2VsZik6CiAgICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW10pCiAgICAgICAgIG4yID0gcHl0cmVlLk5vZGUoMTAwMCwgW10pCiAgICAgICAgIHAxID0gcHl0cmVlLk5vZGUoMTAwMCwgW24xLCBuMl0pCkBAIC0zMTAsNyArMzIwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMi5uZXh0X3NpYmxpbmcsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEubmV4dF9zaWJsaW5nLCBOb25lKQogCi0gICAgZGVmIHRlc3RMZWFmTmV4dFNpYmxpbmcoc2VsZik6CisgICAgZGVmIHRlc3RfbGVhZl9uZXh0X3NpYmxpbmcoc2VsZik6CiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiYSIpCiAgICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiYiIpCiAgICAgICAgIHAxID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxLCBsMl0pCkBAIC0zMTksNyArMzI5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMi5uZXh0X3NpYmxpbmcsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEubmV4dF9zaWJsaW5nLCBOb25lKQogCi0gICAgZGVmIHRlc3ROb2RlUHJldlNpYmxpbmcoc2VsZik6CisgICAgZGVmIHRlc3Rfbm9kZV9wcmV2X3NpYmxpbmcoc2VsZik6CiAgICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW10pCiAgICAgICAgIG4yID0gcHl0cmVlLk5vZGUoMTAwMCwgW10pCiAgICAgICAgIHAxID0gcHl0cmVlLk5vZGUoMTAwMCwgW24xLCBuMl0pCkBAIC0zMjgsNyArMzM4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5wcmV2X3NpYmxpbmcsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEucHJldl9zaWJsaW5nLCBOb25lKQogCi0gICAgZGVmIHRlc3RMZWFmUHJldlNpYmxpbmcoc2VsZik6CisgICAgZGVmIHRlc3RfbGVhZl9wcmV2X3NpYmxpbmcoc2VsZik6CiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiYSIpCiAgICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiYiIpCiAgICAgICAgIHAxID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxLCBsMl0pCkBAIC0zNDIsNyArMzUyLDcgQEAKIAogICAgICIiIlVuaXQgdGVzdHMgZm9yIHRyZWUgbWF0Y2hpbmcgcGF0dGVybnMuIiIiCiAKLSAgICBkZWYgdGVzdEJhc2ljUGF0dGVybnMoc2VsZik6CisgICAgZGVmIHRlc3RfYmFzaWNfcGF0dGVybnMoc2VsZik6CiAgICAgICAgICMgQnVpbGQgYSB0cmVlCiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKICAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiKQpAQCAtMzc4LDcgKzM4OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG4ubWF0Y2gobDIsIHJlc3VsdHM9cikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwge30pCiAKLSAgICBkZWYgdGVzdFdpbGRjYXJkUGF0dGVybnMoc2VsZik6CisgICAgZGVmIHRlc3Rfd2lsZGNhcmQoc2VsZik6CiAgICAgICAgICMgQnVpbGQgYSB0cmVlIGZvciB0ZXN0aW5nCiAgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKICAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiKQpAQCAtNDA5LDcgKzQxOSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0XyhyWyJwbCJdIGlzIGwzKQogICAgICAgICByID0ge30KIAotICAgIGRlZiB0ZXN0R2VuZXJhdGVNYXRjaGVzKHNlbGYpOgorICAgIGRlZiB0ZXN0X2dlbmVyYXRlX21hdGNoZXMoc2VsZik6CiAgICAgICAgIGxhID0gcHl0cmVlLkxlYWYoMSwgImEiKQogICAgICAgICBsYiA9IHB5dHJlZS5MZWFmKDEsICJiIikKICAgICAgICAgbGMgPSBweXRyZWUuTGVhZigxLCAiYyIpCkBAIC00MzksNyArNDQ5LDcgQEAKICAgICAgICAgZm9yIGMgaW4gImFiY2RlZiI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbInAiICsgY10sIHB5dHJlZS5MZWFmKDEsIGMpKQogCi0gICAgZGVmIHRlc3RIYXNLZXlFeGFtcGxlKHNlbGYpOgorICAgIGRlZiB0ZXN0X2hhc19rZXlfZXhhbXBsZShzZWxmKToKICAgICAgICAgcGF0dGVybiA9IHB5dHJlZS5Ob2RlUGF0dGVybigzMzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB5dHJlZS5MZWFmUGF0dGVybig3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHl0cmVlLldpbGRjYXJkUGF0dGVybihuYW1lPSJhcmdzIiksCkBAIC00NTEsOCArNDYxLDMgQEAKICAgICAgICAgciA9IHt9CiAgICAgICAgIHNlbGYuYXNzZXJ0XyhwYXR0ZXJuLm1hdGNoKG5vZGUsIHIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbImFyZ3MiXSwgW2wyXSkKLQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIGltcG9ydCBfX21haW5fXwotICAgIHN1cHBvcnQucnVuX2FsbF90ZXN0cyhfX21haW5fXykKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfdXRpbC5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfdXRpbC5weQppbmRleCA5NWI1NjZhLi4xZGU3YTgzIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3V0aWwucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF91dGlsLnB5CkBAIC0xLDYgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMi41CiAiIiIgVGVzdCBzdWl0ZSBmb3IgdGhlIGNvZGUgaW4gZml4ZXMudXRpbCAiIiIKLSMgQXV0aG9yOiBDb2xsaW4gV2ludGVyCiAKICMgVGVzdGluZyBpbXBvcnRzCiBmcm9tIC4gaW1wb3J0IHN1cHBvcnQKQEAgLTU1Miw4ICs1NTAsMyBAQAogICAgICAgICBub2RlID0gcGFyc2UoJ2JhcigpJykKICAgICAgICAgZml4ZXJfdXRpbC50b3VjaF9pbXBvcnQoTm9uZSwgImNnaSIsIG5vZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG5vZGUpLCAnaW1wb3J0IGNnaVxuYmFyKClcblxuJykKLQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIGltcG9ydCBfX21haW5fXwotICAgIHN1cHBvcnQucnVuX2FsbF90ZXN0cyhfX21haW5fXykK