ZGlmZiAtLWdpdCBhL2xpYi9qcy90ZXN0L3Rlc3QuaHRtbCBiL2xpYi9qcy90ZXN0L3Rlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDNlYTQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2pzL3Rlc3QvdGVzdC5odG1sCkBAIC0wLDAgKzEsMTE1IEBACis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+VGhyaWZ0IEphdmFzY3JpcHQgQmluZGluZ3MgLSBFeGFtcGxlPC90aXRsZT4KKworICA8c2NyaXB0IHNyYz0iL3RocmlmdC5qcyIgICAgICAgICAgICAgICAgIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSJnZW4tanMvVGhyaWZ0VGVzdF90eXBlcy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Imdlbi1qcy9UaHJpZnRUZXN0LmpzIiAgICAgICB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PgorCisgIDwhLS0gZm9yIGFzeW5jIGV4YW1wbGUgLS0+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS4zLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CisKKyAgLy9jcmVhdGUgY2xpZW50CisgIHZhciB0cmFuc3BvcnQgPSBuZXcgVGhyaWZ0LlRyYW5zcG9ydCgiL3NlcnZpY2UiKQorICB2YXIgcHJvdG9jb2wgID0gbmV3IFRocmlmdC5Qcm90b2NvbCh0cmFuc3BvcnQpCisgIHZhciBjbGllbnQgICAgPSBuZXcgVGhyaWZ0VGVzdC5UaHJpZnRUZXN0Q2xpZW50KHByb3RvY29sKQorCisgIC8vY3JlYXRlIGluc2FuaXR5IG9iagorICB2YXIgaW5zYW5pdHkgID0gbmV3IFRocmlmdFRlc3QuSW5zYW5pdHkoKQorICBpbnNhbml0eS51c2VyTWFwW1RocmlmdFRlc3QuTnVtYmVyei5PTkVdID0gMQorICBpbnNhbml0eS51c2VyTWFwW1RocmlmdFRlc3QuTnVtYmVyei5UV09dID0gMgorCisgIHZhciB4dHIgPSBuZXcgVGhyaWZ0VGVzdC5YdHJ1Y3QoKQorICB4dHIuc3RyaW5nX3RoaW5nID0gJ3dvcmtlZCcKKyAgaW5zYW5pdHkueHRydWN0cy5wdXNoKHh0cikKKworICB2YXIgeHRyMj0gbmV3IFRocmlmdFRlc3QuWHRydWN0MigpCisgIHh0cjIuc3RydWN0X3RoaW5nID0geHRyCisKKyAgdmFyIGxpc3QgPSBbMSwyLDNdCisKKyAgLy9ydW4gdGVzdHMgc3luY2hyb25vdXNseQorCisgIGRvY3VtZW50LndyaXRlKCI8aDI+PHU+VGhyaWZ0IEphdmFzY3JpcHQgQmluZGluZ3M8L3U+PC9oMj4iKQorICBkb2N1bWVudC53cml0ZSgiPGgyPlN5bmNocm9ub3VzIEV4YW1wbGU8L2gyPiIpCisgIGRvY3VtZW50LndyaXRlKCJjbGllbnQudGVzdFN0cmluZygpID0+ICIrKGNsaWVudC50ZXN0U3RyaW5nKCJ3b3JrcyIpICAgICA9PSAid29ya3MiKSsiPGJyLz4iKQorICBkb2N1bWVudC53cml0ZSgiY2xpZW50LnRlc3RTdHJpbmcodXRmLTgpID0+ICIrKGNsaWVudC50ZXN0U3RyaW5nKCJhh46Sl5xlIikgICA9PSAiYYeOkpecZSIpKyI8YnIvPiIpCisgIGRvY3VtZW50LndyaXRlKCJjbGllbnQudGVzdERvdWJsZSgpID0+ICIrKGNsaWVudC50ZXN0RG91YmxlKDMuMTQpICAgICAgICA9PSAzLjE0KSsiPGJyLz4iKQorICBkb2N1bWVudC53cml0ZSgiY2xpZW50LnRlc3RCeXRlKCkgICA9PiAiKyhjbGllbnQudGVzdEJ5dGUoMHgwMSkgICAgICAgICAgPT0gMHgwMSkrIjxici8+IikKKyAgZG9jdW1lbnQud3JpdGUoImNsaWVudC50ZXN0STMyKCkgICAgPT4gIisoY2xpZW50LnRlc3RJMzIoTWF0aC5wb3coMiwzMCkpID09IE1hdGgucG93KDIsMzApKSsiPGJyLz4iKQorICBkb2N1bWVudC53cml0ZSgiY2xpZW50LnRlc3RJNjQoKSAgICA9PiAiKyhjbGllbnQudGVzdEk2NChNYXRoLnBvdygyLDYwKSkgPT0gTWF0aC5wb3coMiw2MCkpKyI8YnIvPiIpCisgIGRvY3VtZW50LndyaXRlKCJjbGllbnQudGVzdFN0cnVjdCgpID0+ICIrKGNsaWVudC50ZXN0U3RydWN0KHh0cikuc3RyaW5nX3RoaW5nID09ICJ3b3JrZWQiKSsiPGJyLz4iKQorICBkb2N1bWVudC53cml0ZSgiY2xpZW50LnRlc3ROZXN0KCkgICA9PiAiKyhjbGllbnQudGVzdE5lc3QoeHRyMikuc3RydWN0X3RoaW5nLnN0cmluZ190aGluZyA9PSAid29ya2VkIikrIjxici8+IikKKyAgZG9jdW1lbnQud3JpdGUoImNsaWVudC50ZXN0TWFwKCkgICAgPT4gIisoY2xpZW50LnRlc3RNYXAoaW5zYW5pdHkudXNlck1hcClbVGhyaWZ0VGVzdC5OdW1iZXJ6Lk9ORV0gPT0gMSkrIjxici8+IikKKyAgZG9jdW1lbnQud3JpdGUoImNsaWVudC50ZXN0TGlzdCgpICAgPT4gIisoY2xpZW50LnRlc3RMaXN0KGxpc3QpLmxlbmd0aCA9PSAzKSsiPGJyLz4iKQorICBkb2N1bWVudC53cml0ZSgiY2xpZW50LnRlc3RTZXQoKSAgICA9PiAiKyhjbGllbnQudGVzdFNldChsaXN0KS5sZW5ndGggPT0gMykrIjxici8+IikKKyAgZG9jdW1lbnQud3JpdGUoImNsaWVudC50ZXN0RW51bSgpICAgPT4gIisoY2xpZW50LnRlc3RFbnVtKFRocmlmdFRlc3QuTnVtYmVyei5PTkUpID09IFRocmlmdFRlc3QuTnVtYmVyei5PTkUpKyI8YnIvPiIpCisKKyAgZG9jdW1lbnQud3JpdGUoImNsaWVudC50ZXN0RXhjZXB0aW9uKCkgPT4gIikKKyAgdHJ5eworICAgIGNsaWVudC50ZXN0RXhjZXB0aW9uKCJnbyIpCisgICAgZG9jdW1lbnQud3JpdGUoImZhbHNlPGJyLz4iKQorICB9Y2F0Y2goZSl7CisgICAgZG9jdW1lbnQud3JpdGUoInRydWU8YnIvPiIpCisgIH0KKworICBkb2N1bWVudC53cml0ZSgiY2xpZW50LnRlc3RJbnNhbml0eSgpID0+ICIpCisgIHZhciByZXMgPSBjbGllbnQudGVzdEluc2FuaXR5KGluc2FuaXR5KQorCisgIGRvY3VtZW50LndyaXRlKChyZXNbIjEiXVsiMSJdLnh0cnVjdHNbMF0uc3RyaW5nX3RoaW5nID09ICJ3b3JrZWQiKSsiPGJyLz4iKQorCisgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgLy9SdW4gc2FtZSB0ZXN0cyBhc3luY2hyb25vdXNseQorCisgIHZhciB0cmFuc3BvcnQgPSBuZXcgVGhyaWZ0LlRyYW5zcG9ydCgpCisgIHZhciBwcm90b2NvbCAgPSBuZXcgVGhyaWZ0LlByb3RvY29sKHRyYW5zcG9ydCkKKyAgdmFyIGNsaWVudCAgICA9IG5ldyBUaHJpZnRUZXN0LlRocmlmdFRlc3RDbGllbnQocHJvdG9jb2wpCisKKyAgZG9jdW1lbnQud3JpdGUoIjxoMj5Bc3luY2hyb25vdXMgRXhhbXBsZTwvaDI+IikKKyAgalF1ZXJ5LmFqYXgoeworICAgICB1cmw6ICIvc2VydmljZSIsCisgICAgIGRhdGE6IGNsaWVudC5zZW5kX3Rlc3RJMzIoTWF0aC5wb3coMiwzMCkpLAorICAgICB0eXBlOiAiUE9TVCIsCisgICAgIGNhY2hlOiBmYWxzZSwKKyAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKXsKKyAgICAgICAgICAgIHZhciBfdHJhbnNwb3J0ID0gbmV3IFRocmlmdC5UcmFuc3BvcnQoKQorICAgICAgICAgICAgdmFyIF9wcm90b2NvbCAgPSBuZXcgVGhyaWZ0LlByb3RvY29sKF90cmFuc3BvcnQpCisgICAgICAgICAgICB2YXIgX2NsaWVudCAgICA9IG5ldyBUaHJpZnRUZXN0LlRocmlmdFRlc3RDbGllbnQoX3Byb3RvY29sKQorCisgICAgICAgICAgICBfdHJhbnNwb3J0LnNldFJlY3ZCdWZmZXIoIHJlcyApCisKKyAgICAgICAgICAgIHZhciB2ID0gIF9jbGllbnQucmVjdl90ZXN0STMyKCkKKyAgICAgICAgICAgICQoIiNib2R5IikuYXBwZW5kKCJjbGllbnQudGVzdEkzMigpICAgID0+ICIrKHYgPT0gTWF0aC5wb3coMiwzMCkpKyI8YnIvPiIpCisKKyAgICAgfQorICB9KQorCisgIGpRdWVyeS5hamF4KHsKKyAgICAgdXJsOiAiL3NlcnZpY2UiLAorICAgICBkYXRhOiBjbGllbnQuc2VuZF90ZXN0STY0KE1hdGgucG93KDIsNjApKSwKKyAgICAgdHlwZTogIlBPU1QiLAorICAgICBjYWNoZTogZmFsc2UsCisgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcyl7CisgICAgICAgICAgICB2YXIgX3RyYW5zcG9ydCA9IG5ldyBUaHJpZnQuVHJhbnNwb3J0KCkKKyAgICAgICAgICAgIHZhciBfcHJvdG9jb2wgID0gbmV3IFRocmlmdC5Qcm90b2NvbChfdHJhbnNwb3J0KQorICAgICAgICAgICAgdmFyIF9jbGllbnQgICAgPSBuZXcgVGhyaWZ0VGVzdC5UaHJpZnRUZXN0Q2xpZW50KF9wcm90b2NvbCkKKworICAgICAgICAgICAgX3RyYW5zcG9ydC5zZXRSZWN2QnVmZmVyKCByZXMgKQorCisgICAgICAgICAgICB2YXIgdiA9ICBfY2xpZW50LnJlY3ZfdGVzdEk2NCgpCisgICAgICAgICAgICAkKCIjYm9keSIpLmFwcGVuZCgiY2xpZW50LnRlc3RJNjQoKSAgICA9PiAiKyh2ID09IE1hdGgucG93KDIsNjApKSsiPGJyLz4iKQorCisgICAgIH0KKyAgfSkKKworCisKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+Cg==