IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYwoKIyBUZXN0IG9mIGdldHRleHQgZmFjaWxpdGllcyBpbiB0aGUgTHVhIGxhbmd1YWdlLgojIEFzc3VtZXMgYW4gZnJfRlIgbG9jYWxlIGlzIGluc3RhbGxlZC4KIyBBc3N1bWVzIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgYXJlIGluc3RhbGxlZDogbHVhLCBsdWEtZ2V0dGV4dC4KCmNhdCA8PFxFT0YgPiBwcm9nLmx1YQpyZXF1aXJlKCJnZXR0ZXh0IikKZ2V0dGV4dC5iaW5kdGV4dGRvbWFpbigicHJvZyIsICIuIikKZ2V0dGV4dC50ZXh0ZG9tYWluKCJwcm9nIikKXyA9IGdldHRleHQuZ2V0dGV4dApuID0gNDIKCnByaW50KGdldHRleHQuZ2V0dGV4dCgiJ1lvdXIgY29tbWFuZCwgcGxlYXNlPycsIGFza2VkIHRoZSB3YWl0ZXIuIikpCnByaW50KHN0cmluZy5mb3JtYXQoZ2V0dGV4dC5uZ2V0dGV4dCgnYSBwaWVjZSBvZiBjYWtlJywgW1slZCBwaWVjZXMgb2YgY2FrZV1dLCBuKSwgbikpCnByaW50KHN0cmluZy5mb3JtYXQoX1s9PVslcyBpcyByZXBsYWNlZCBieSAlcy5dPT1dLCAiRkYiLCAiRVVSIikpCkVPRgoKOiAke1hHRVRURVhUPXhnZXR0ZXh0fQoke1hHRVRURVhUfSAtbyBwcm9nLnRtcCAtLW9taXQtaGVhZGVyIC0tbm8tbG9jYXRpb24gcHJvZy5sdWEgfHwgRXhpdCAxCkxDX0FMTD1DIHRyIC1kICdccicgPCBwcm9nLnRtcCA+IHByb2cucG90IHx8IEV4aXQgMQoKY2F0IDw8XEVPRiA+IHByb2cub2sKbXNnaWQgIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKbXNnc3RyICIiCgojLCBsdWEtZm9ybWF0Cm1zZ2lkICJhIHBpZWNlIG9mIGNha2UiCm1zZ2lkX3BsdXJhbCAiJWQgcGllY2VzIG9mIGNha2UiCm1zZ3N0clswXSAiIgptc2dzdHJbMV0gIiIKCiMsIGx1YS1mb3JtYXQKbXNnaWQgIiVzIGlzIHJlcGxhY2VkIGJ5ICVzLiIKbXNnc3RyICIiCkVPRgoKOiAke0RJRkY9ZGlmZn0KJHtESUZGfSBwcm9nLm9rIHByb2cucG90IHx8IEV4aXQgMQoKY2F0IDw8XEVPRiA+IGZyLnBvCm1zZ2lkICIiCm1zZ3N0ciAiIgoiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuID4gMSk7XG4iCgptc2dpZCAiJ1lvdXIgY29tbWFuZCwgcGxlYXNlPycsIGFza2VkIHRoZSB3YWl0ZXIuIgptc2dzdHIgIqtWb3RyZSBjb21tYW5kZSwgcydpbCB2b3VzIHBsYWl0uywgZGl0IGxlIGdhcudvbi4iCgojLCBsdWEtZm9ybWF0Cm1zZ2lkICJhIHBpZWNlIG9mIGNha2UiCm1zZ2lkX3BsdXJhbCAiJWQgcGllY2VzIG9mIGNha2UiCm1zZ3N0clswXSAidW4gbW9yY2VhdSBkZSBnYXRlYXUiCm1zZ3N0clsxXSAiJWQgbW9yY2VhdXggZGUgZ2F0ZWF1IgoKIywgbHVhLWZvcm1hdAptc2dpZCAiJXMgaXMgcmVwbGFjZWQgYnkgJXMuIgptc2dzdHIgIiVzIHJlbXBsYWNlICVzLiIKRU9GCgo6ICR7TVNHTUVSR0U9bXNnbWVyZ2V9CiR7TVNHTUVSR0V9IC1xIC1vIGZyLnBvLnRtcCBmci5wbyBwcm9nLnBvdCB8fCBFeGl0IDEKTENfQUxMPUMgdHIgLWQgJ1xyJyA8IGZyLnBvLnRtcCA+IGZyLnBvLm5ldyB8fCBFeGl0IDEKCjogJHtESUZGPWRpZmZ9CiR7RElGRn0gZnIucG8gZnIucG8ubmV3IHx8IEV4aXQgMQoKdGVzdCAtZCBmciB8fCBta2RpciBmcgp0ZXN0IC1kIGZyL0xDX01FU1NBR0VTIHx8IG1rZGlyIGZyL0xDX01FU1NBR0VTCgo6ICR7TVNHRk1UPW1zZ2ZtdH0KJHtNU0dGTVR9IC1vIGZyL0xDX01FU1NBR0VTL3Byb2cubW8gZnIucG8KCiMgVGVzdCBmb3IgcHJlc2VuY2Ugb2YgbHVhIHZlcnNpb24gNS4wIG9yIG5ld2VyIHdpdGggZ2V0dGV4dCBzdXBwb3J0LgoobHVhIC12KSA+L2Rldi9udWxsIDI+L2Rldi9udWxsCnRlc3QgJD8gLWxlIDEgXAogIHx8IHsgZWNobyAiU2tpcHBpbmcgdGVzdDogbHVhIG5vdCBmb3VuZCI7IEV4aXQgNzc7IH0KY2FzZSBgbHVhIC12IDI+JjEgfCBzZWQgLWUgJ3MvXlteMC05XSovLydgIGluCiAgWzUtOV0uKikgOzsKICAqKSBlY2hvICJTa2lwcGluZyB0ZXN0OiBsdWEgdmVyc2lvbiB0b28gb2xkIjsgRXhpdCA3Nzs7CmVzYWMKeyBsdWEgLXYgLWwgZ2V0dGV4dCA+IC9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgfSBcCiAgfHwgeyBlY2hvICJTa2lwcGluZyB0ZXN0OiBsdWEgZ2V0dGV4dCBtb2R1bGUgbm90IGZvdW5kIgogICAgICAgRXhpdCA3NwogICAgIH0KCiMgVGVzdCB3aGljaCBvZiB0aGUgZnJfRlIgbG9jYWxlcyBhcmUgaW5zdGFsbGVkLgo6ICR7TE9DQUxFX0ZSPWZyX0ZSfQo6ICR7TE9DQUxFX0ZSX1VURjg9ZnJfRlIuVVRGLTh9CmlmIHRlc3QgJExPQ0FMRV9GUiAhPSBub25lOyB0aGVuCiAgTENfQUxMPSRMT0NBTEVfRlIgLi4vdGVzdGxvY2FsZQogIGNhc2UgJD8gaW4KICAgIDApIDs7CiAgICA3NykgTE9DQUxFX0ZSPW5vbmU7OwogICAgKikgRXhpdCAxOzsKICBlc2FjCmZpCmlmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ICE9IG5vbmU7IHRoZW4KICBMQ19BTEw9JExPQ0FMRV9GUl9VVEY4IC4uL3Rlc3Rsb2NhbGUKICBjYXNlICQ/IGluCiAgICAwKSA7OwogICAgNzcpIExPQ0FMRV9GUl9VVEY4PW5vbmU7OwogICAgKikgRXhpdCAxOzsKICBlc2FjCmZpCmlmIHRlc3QgJExPQ0FMRV9GUiA9IG5vbmUgJiYgdGVzdCAkTE9DQUxFX0ZSX1VURjggPSBub25lOyB0aGVuCiAgaWYgdGVzdCAtZiAvdXNyL2Jpbi9sb2NhbGVkZWY7IHRoZW4KICAgIGVjaG8gIlNraXBwaW5nIHRlc3Q6IG5vIGZyZW5jaCBsb2NhbGUgaXMgaW5zdGFsbGVkIgogIGVsc2UKICAgIGVjaG8gIlNraXBwaW5nIHRlc3Q6IG5vIGZyZW5jaCBsb2NhbGUgaXMgc3VwcG9ydGVkIgogIGZpCiAgRXhpdCA3NwpmaQoKOiAke0RJRkY9ZGlmZn0KY2F0IDw8XEVPRiA+IHByb2cub2sKq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXS7LCBkaXQgbGUgZ2Fy529uLgo0MiBtb3JjZWF1eCBkZSBnYXRlYXUKRkYgcmVtcGxhY2UgRVVSLgpFT0YKY2F0IDw8XEVPRiA+IHByb2cub2t1CsKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdMK7LCBkaXQgbGUgZ2Fyw6dvbi4KNDIgbW9yY2VhdXggZGUgZ2F0ZWF1CkZGIHJlbXBsYWNlIEVVUi4KRU9GCgo6ICR7TE9DQUxFX0ZSPWZyX0ZSfQo6ICR7TE9DQUxFX0ZSX1VURjg9ZnJfRlIuVVRGLTh9CmlmIHRlc3QgJExPQ0FMRV9GUiAhPSBub25lOyB0aGVuCiAgcHJlcGFyZV9sb2NhbGVfIGZyICRMT0NBTEVfRlIKICBMQU5HVUFHRT0gTENfQUxMPSRMT0NBTEVfRlIgbHVhIC1sIGdldHRleHQgcHJvZy5sdWEgPiBwcm9nLm91dCB8fCBFeGl0IDEKICAke0RJRkZ9IHByb2cub2sgcHJvZy5vdXQgfHwgRXhpdCAxCmZpCmlmIHRlc3QgJExPQ0FMRV9GUl9VVEY4ICE9IG5vbmU7IHRoZW4KICBwcmVwYXJlX2xvY2FsZV8gZnIgJExPQ0FMRV9GUl9VVEY4CiAgTEFOR1VBR0U9IExDX0FMTD0kTE9DQUxFX0ZSX1VURjggbHVhIC1sIGdldHRleHQgcHJvZy5sdWEgPiBwcm9nLm91dCB8fCBFeGl0IDEKICAke0RJRkZ9IHByb2cub2t1IHByb2cub3V0IHx8IEV4aXQgMQpmaQoKRXhpdCAwCg==