IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYwoKIyBUZXN0IG9mIGdldHRleHQgZmFjaWxpdGllcyBpbiB0aGUgUEhQIGxhbmd1YWdlLgojIEFzc3VtZXMgYW4gZnJfRlIgbG9jYWxlIGlzIGluc3RhbGxlZC4KIyBBc3N1bWVzIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgYXJlIGluc3RhbGxlZDogbW9kX3BocDQtY29yZS4KCmNhdCA8PFxFT0YgPiBwcm9nLnBocAo8P3BocAogIHNldGxvY2FsZSAoTENfQUxMLCAiIik7CiAgdGV4dGRvbWFpbiAoInByb2ciKTsKICBiaW5kdGV4dGRvbWFpbiAoInByb2ciLCAiLiIpOwogIGVjaG8gXygiJ1lvdXIgY29tbWFuZCwgcGxlYXNlPycsIGFza2VkIHRoZSB3YWl0ZXIuIik7CiAgZWNobyAiXG4iOwogIHByaW50ZihfKCIlcyBpcyByZXBsYWNlZCBieSAlcy4iKSwgIkZGIiwgIkVVUiIpOwogIGVjaG8gIlxuIjsKPz4KRU9GCgo6ICR7WEdFVFRFWFQ9eGdldHRleHR9CiR7WEdFVFRFWFR9IC1vIHByb2cudG1wIC0tb21pdC1oZWFkZXIgLS1uby1sb2NhdGlvbiBwcm9nLnBocCB8fCBFeGl0IDEKTENfQUxMPUMgdHIgLWQgJ1xyJyA8IHByb2cudG1wID4gcHJvZy5wb3QgfHwgRXhpdCAxCgpjYXQgPDxFT0YgPiBwcm9nLm9rCm1zZ2lkICInWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4iCm1zZ3N0ciAiIgoKIywgcGhwLWZvcm1hdAptc2dpZCAiJXMgaXMgcmVwbGFjZWQgYnkgJXMuIgptc2dzdHIgIiIKRU9GCgo6ICR7RElGRj1kaWZmfQoke0RJRkZ9IHByb2cub2sgcHJvZy5wb3QgfHwgRXhpdCAxCgpjYXQgPDxcRU9GID4gZnIucG8KbXNnaWQgIiIKbXNnc3RyICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgoKbXNnaWQgIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKbXNnc3RyICKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdLssIGRpdCBsZSBnYXLnb24uIgoKIyBSZXZlcnNlIHRoZSBhcmd1bWVudHMuCiMsIHBocC1mb3JtYXQKbXNnaWQgIiVzIGlzIHJlcGxhY2VkIGJ5ICVzLiIKbXNnc3RyICIlMiRzIHJlbXBsYWNlICUxJHMuIgpFT0YKCjogJHtNU0dNRVJHRT1tc2dtZXJnZX0KJHtNU0dNRVJHRX0gLXEgLW8gZnIucG8udG1wIGZyLnBvIHByb2cucG90IHx8IEV4aXQgMQpMQ19BTEw9QyB0ciAtZCAnXHInIDwgZnIucG8udG1wID4gZnIucG8ubmV3IHx8IEV4aXQgMQoKOiAke0RJRkY9ZGlmZn0KJHtESUZGfSBmci5wbyBmci5wby5uZXcgfHwgRXhpdCAxCgp0ZXN0IC1kIGZyIHx8IG1rZGlyIGZyCnRlc3QgLWQgZnIvTENfTUVTU0FHRVMgfHwgbWtkaXIgZnIvTENfTUVTU0FHRVMKCjogJHtNU0dGTVQ9bXNnZm10fQoke01TR0ZNVH0gLW8gZnIvTENfTUVTU0FHRVMvcHJvZy5tbyBmci5wbwoKIyBUZXN0IGZvciBwcmVzZW5jZSBvZiBwaHAgdmVyc2lvbiA0LjAgb3IgbmV3ZXIgd2l0aCBnZXR0ZXh0IHN1cHBvcnQuCihwaHAgLXYpID4vZGV2L251bGwgMj4vZGV2L251bGwKdGVzdCAkPyAtbGUgMSBcCiAgfHwgeyBlY2hvICJTa2lwcGluZyB0ZXN0OiBwaHAgbm90IGZvdW5kIjsgRXhpdCA3NzsgfQpjYXNlIGBwaHAgLXYgfCBzZWQgLW4gLWUgMXAgfCBzZWQgLWUgJ3MvXlteMC05XSovLydgIGluCiAgWzQtOV0uKikgOzsKICAqKSBlY2hvICJTa2lwcGluZyB0ZXN0OiBwaHAgdmVyc2lvbiB0b28gb2xkIjsgRXhpdCA3Nzs7CmVzYWMKeyBwaHAgLW0gfCBncmVwICdeZ2V0dGV4dCQnID4vZGV2L251bGw7IH0gXAogIHx8IHsgZWNobyAiU2tpcHBpbmcgdGVzdDogcGhwIHdhcyBidWlsdCB3aXRob3V0IGdldHRleHQgc3VwcG9ydCIKICAgICAgIEV4aXQgNzcKICAgICB9CgojIFRlc3Qgd2hpY2ggb2YgdGhlIGZyX0ZSIGxvY2FsZXMgYXJlIGluc3RhbGxlZC4KOiAke0xPQ0FMRV9GUj1mcl9GUn0KOiAke0xPQ0FMRV9GUl9VVEY4PWZyX0ZSLlVURi04fQppZiB0ZXN0ICRMT0NBTEVfRlIgIT0gbm9uZTsgdGhlbgogIExDX0FMTD0kTE9DQUxFX0ZSIC4uL3Rlc3Rsb2NhbGUKICBjYXNlICQ/IGluCiAgICAwKSA7OwogICAgNzcpIExPQ0FMRV9GUj1ub25lOzsKICAgICopIEV4aXQgMTs7CiAgZXNhYwpmaQppZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lOyB0aGVuCiAgTENfQUxMPSRMT0NBTEVfRlJfVVRGOCAuLi90ZXN0bG9jYWxlCiAgY2FzZSAkPyBpbgogICAgMCkgOzsKICAgIDc3KSBMT0NBTEVfRlJfVVRGOD1ub25lOzsKICAgICopIEV4aXQgMTs7CiAgZXNhYwpmaQppZiB0ZXN0ICRMT0NBTEVfRlIgPSBub25lICYmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ID0gbm9uZTsgdGhlbgogIGlmIHRlc3QgLWYgL3Vzci9iaW4vbG9jYWxlZGVmOyB0aGVuCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIGluc3RhbGxlZCIKICBlbHNlCiAgICBlY2hvICJTa2lwcGluZyB0ZXN0OiBubyBmcmVuY2ggbG9jYWxlIGlzIHN1cHBvcnRlZCIKICBmaQogIEV4aXQgNzcKZmkKCjogJHtESUZGPWRpZmZ9CmNhdCA8PFxFT0YgPiBwcm9nLm9rCqtWb3RyZSBjb21tYW5kZSwgcydpbCB2b3VzIHBsYWl0uywgZGl0IGxlIGdhcudvbi4KRVVSIHJlbXBsYWNlIEZGLgpFT0YKY2F0IDw8XEVPRiA+IHByb2cub2t1CsKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdMK7LCBkaXQgbGUgZ2Fyw6dvbi4KRVVSIHJlbXBsYWNlIEZGLgpFT0YKCjogJHtMT0NBTEVfRlI9ZnJfRlJ9CjogJHtMT0NBTEVfRlJfVVRGOD1mcl9GUi5VVEYtOH0KaWYgdGVzdCAkTE9DQUxFX0ZSICE9IG5vbmU7IHRoZW4KICBwcmVwYXJlX2xvY2FsZV8gZnIgJExPQ0FMRV9GUgogIExBTkdVQUdFPSBMQ19BTEw9JExPQ0FMRV9GUiBwaHAgLXEgcHJvZy5waHAgPiBwcm9nLm91dCB8fCBFeGl0IDEKICAke0RJRkZ9IHByb2cub2sgcHJvZy5vdXQgfHwgRXhpdCAxCmZpCmlmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ICE9IG5vbmU7IHRoZW4KICBwcmVwYXJlX2xvY2FsZV8gZnIgJExPQ0FMRV9GUl9VVEY4CiAgTEFOR1VBR0U9IExDX0FMTD0kTE9DQUxFX0ZSX1VURjggcGhwIC1xIHByb2cucGhwID4gcHJvZy5vdXQgfHwgRXhpdCAxCiAgJHtESUZGfSBwcm9nLm9rdSBwcm9nLm91dCB8fCBFeGl0IDEKZmkKCkV4aXQgMAo=