IyEgL2Jpbi9zaAouICIke3NyY2Rpcj0ufS9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuIC4uL3NyYwoKIyBUZXN0IG9mIGdldHRleHQgZmFjaWxpdGllcyBpbiB0aGUgR05VIGF3ayBsYW5ndWFnZS4KIyBBc3N1bWVzIGFuIGZyX0ZSIGxvY2FsZSBpcyBpbnN0YWxsZWQuCiMgQXNzdW1lcyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQ6IGdhd2suCgojIE5vdGU6IFRoaXMgdGVzdCBmYWlscyBvbiBNYWNPUyBYIDEwLjMuNSAoRGFyd2luIDcuNSkgaW4gdGhlIGZyX0ZSIGxvY2FsZQojIGJ1dCBub3QgaW4gdGhlIGZyX0ZSLlVURi04IGxvY2FsZS4gUHJvYmFibHkgYmVjYXVzZSBpbiB0aGUgZnJfRlIgbG9jYWxlLAojIG5sX2xhbmdpbmZvKENPREVTRVQpIHJldHVybnMgIiIuCgpjYXQgPDxcRU9GID4gcHJvZy5hd2sKQkVHSU4gewogIFRFWFRET01BSU4gPSAicHJvZyIKICBiaW5kdGV4dGRvbWFpbiAoIi4vIikKCiAgcHJpbnQgXyInWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4iCgogIHByaW50ZiBkY25nZXR0ZXh0ICgiYSBwaWVjZSBvZiBjYWtlIiwgIiVkIHBpZWNlcyBvZiBjYWtlIiwgbikgIlxuIiwgbgoKICBwcmludGYgXyIlcyBpcyByZXBsYWNlZCBieSAlcy4iICJcbiIsICJGRiIsICJFVVIiCn0KRU9GCgo6ICR7WEdFVFRFWFQ9eGdldHRleHR9CiR7WEdFVFRFWFR9IC1vIHByb2cudG1wIC0tb21pdC1oZWFkZXIgLS1uby1sb2NhdGlvbiBwcm9nLmF3ayB8fCBFeGl0IDEKTENfQUxMPUMgdHIgLWQgJ1xyJyA8IHByb2cudG1wID4gcHJvZy5wb3QgfHwgRXhpdCAxCgpjYXQgPDxFT0YgPiBwcm9nLm9rCm1zZ2lkICInWW91ciBjb21tYW5kLCBwbGVhc2U/JywgYXNrZWQgdGhlIHdhaXRlci4iCm1zZ3N0ciAiIgoKIywgYXdrLWZvcm1hdAptc2dpZCAiYSBwaWVjZSBvZiBjYWtlIgptc2dpZF9wbHVyYWwgIiVkIHBpZWNlcyBvZiBjYWtlIgptc2dzdHJbMF0gIiIKbXNnc3RyWzFdICIiCgojLCBhd2stZm9ybWF0Cm1zZ2lkICIlcyBpcyByZXBsYWNlZCBieSAlcy4iCm1zZ3N0ciAiIgpFT0YKCjogJHtESUZGPWRpZmZ9CiR7RElGRn0gcHJvZy5vayBwcm9nLnBvdCB8fCBFeGl0IDEKCmNhdCA8PFxFT0YgPiBmci5wbwptc2dpZCAiIgptc2dzdHIgIiIKIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCiJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgoKbXNnaWQgIidZb3VyIGNvbW1hbmQsIHBsZWFzZT8nLCBhc2tlZCB0aGUgd2FpdGVyLiIKbXNnc3RyICKrVm90cmUgY29tbWFuZGUsIHMnaWwgdm91cyBwbGFpdLssIGRpdCBsZSBnYXLnb24uIgoKIyBMZXMgZ2F0ZWF1eCBhbGxlbWFuZHMgc29udCBsZXMgbWVpbGxldXJzIGR1IG1vbmRlLgojLCBhd2stZm9ybWF0Cm1zZ2lkICJhIHBpZWNlIG9mIGNha2UiCm1zZ2lkX3BsdXJhbCAiJWQgcGllY2VzIG9mIGNha2UiCm1zZ3N0clswXSAidW4gbW9yY2VhdSBkZSBnYXRlYXUiCm1zZ3N0clsxXSAiJWQgbW9yY2VhdXggZGUgZ2F0ZWF1IgoKIyBSZXZlcnNlIHRoZSBhcmd1bWVudHMuCiMsIGF3ay1mb3JtYXQKbXNnaWQgIiVzIGlzIHJlcGxhY2VkIGJ5ICVzLiIKbXNnc3RyICIlMiRzIHJlbXBsYWNlICUxJHMuIgpFT0YKCjogJHtNU0dNRVJHRT1tc2dtZXJnZX0KJHtNU0dNRVJHRX0gLXEgLW8gZnIucG8udG1wIGZyLnBvIHByb2cucG90IHx8IEV4aXQgMQpMQ19BTEw9QyB0ciAtZCAnXHInIDwgZnIucG8udG1wID4gZnIucG8ubmV3IHx8IEV4aXQgMQoKOiAke0RJRkY9ZGlmZn0KJHtESUZGfSBmci5wbyBmci5wby5uZXcgfHwgRXhpdCAxCgp0ZXN0IC1kIGZyIHx8IG1rZGlyIGZyCnRlc3QgLWQgZnIvTENfTUVTU0FHRVMgfHwgbWtkaXIgZnIvTENfTUVTU0FHRVMKCjogJHtNU0dGTVQ9bXNnZm10fQoke01TR0ZNVH0gLW8gZnIvTENfTUVTU0FHRVMvcHJvZy5tbyBmci5wbwoKIyBUZXN0IGZvciBwcmVzZW5jZSBvZiBnYXdrIHZlcnNpb24gMy4xLjMgb3IgbmV3ZXIsIGV4Y2x1ZGluZyB2ZXJzaW9ucyAzLjEuNSBhbmQgNC4yLjAuCihnYXdrIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCBcCiAgfHwgeyBlY2hvICJTa2lwcGluZyB0ZXN0OiBnYXdrIG5vdCBmb3VuZCI7IEV4aXQgNzc7IH0KY2FzZSBgZ2F3ayAtLXZlcnNpb24gMj4mMSB8IHNlZCAtZSAncy9eW14wLTldKi8vJ2AgaW4KICAwLiogfCAxLiogfCAyLiogfCAzLjAqIHwgMy4xLjAqIHwgMy4xLjEqIHwgMy4xLjIqIHwgMy4xLjUqIHwgNC4yLjAqKQogICAgZWNobyAiU2tpcHBpbmcgdGVzdDogZ2F3ayB2ZXJzaW9uIHRvbyBvbGQiOyBFeGl0IDc3OzsKZXNhYwoKIyBUZXN0IHdoaWNoIG9mIHRoZSBmcl9GUiBsb2NhbGVzIGFyZSBpbnN0YWxsZWQuCjogJHtMT0NBTEVfRlI9ZnJfRlJ9CjogJHtMT0NBTEVfRlJfVVRGOD1mcl9GUi5VVEYtOH0KaWYgdGVzdCAkTE9DQUxFX0ZSICE9IG5vbmU7IHRoZW4KICBMQ19BTEw9JExPQ0FMRV9GUiAuLi90ZXN0bG9jYWxlCiAgY2FzZSAkPyBpbgogICAgMCkgOzsKICAgIDc3KSBMT0NBTEVfRlI9bm9uZTs7CiAgICAqKSBFeGl0IDE7OwogIGVzYWMKZmkKaWYgdGVzdCAkTE9DQUxFX0ZSX1VURjggIT0gbm9uZTsgdGhlbgogIExDX0FMTD0kTE9DQUxFX0ZSX1VURjggLi4vdGVzdGxvY2FsZQogIGNhc2UgJD8gaW4KICAgIDApIDs7CiAgICA3NykgTE9DQUxFX0ZSX1VURjg9bm9uZTs7CiAgICAqKSBFeGl0IDE7OwogIGVzYWMKZmkKaWYgdGVzdCAkTE9DQUxFX0ZSID0gbm9uZSAmJiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCA9IG5vbmU7IHRoZW4KICBpZiB0ZXN0IC1mIC91c3IvYmluL2xvY2FsZWRlZjsgdGhlbgogICAgZWNobyAiU2tpcHBpbmcgdGVzdDogbm8gZnJlbmNoIGxvY2FsZSBpcyBpbnN0YWxsZWQiCiAgZWxzZQogICAgZWNobyAiU2tpcHBpbmcgdGVzdDogbm8gZnJlbmNoIGxvY2FsZSBpcyBzdXBwb3J0ZWQiCiAgZmkKICBFeGl0IDc3CmZpCgojIFRlc3QgdGhhdCBnYXdrIHdhc24ndCBidWlsdCB3aXRoIC0tZGlzYWJsZS1ubHMuCjogJHtMT0NBTEVfRlI9ZnJfRlJ9CjogJHtMT0NBTEVfRlJfVVRGOD1mcl9GUi5VVEYtOH0KaWYgdGVzdCAkTE9DQUxFX0ZSICE9IG5vbmU7IHRoZW4KICBMQU5HVUFHRT0gTENfQUxMPSRMT0NBTEVfRlIgZ2F3ayAtLXZlcnNpb24gfCBncmVwIGxvZ2ljaWVsID4gL2Rldi9udWxsCiAgdGVzdCAkPyA9IDAgfHwgewogICAgZWNobyAiU2tpcHBpbmcgdGVzdDogZ2F3ayB3YXMgYnVpbHQgd2l0aG91dCBpMThuIHN1cHBvcnQiCiAgICBFeGl0IDc3CiAgfQpmaQppZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lOyB0aGVuCiAgTEFOR1VBR0U9IExDX0FMTD0kTE9DQUxFX0ZSX1VURjggZ2F3ayAtLXZlcnNpb24gfCBncmVwIGxvZ2ljaWVsID4gL2Rldi9udWxsCiAgdGVzdCAkPyA9IDAgfHwgewogICAgZWNobyAiU2tpcHBpbmcgdGVzdDogZ2F3ayB3YXMgYnVpbHQgd2l0aG91dCBpMThuIHN1cHBvcnQiCiAgICBFeGl0IDc3CiAgfQpmaQoKOiAke0RJRkY9ZGlmZn0KY2F0IDw8XEVPRiA+IHByb2cub2sKq1ZvdHJlIGNvbW1hbmRlLCBzJ2lsIHZvdXMgcGxhaXS7LCBkaXQgbGUgZ2Fy529uLgoyIG1vcmNlYXV4IGRlIGdhdGVhdQpFVVIgcmVtcGxhY2UgRkYuCkVPRgpjYXQgPDxcRU9GID4gcHJvZy5va3UKwqtWb3RyZSBjb21tYW5kZSwgcydpbCB2b3VzIHBsYWl0wrssIGRpdCBsZSBnYXLDp29uLgoyIG1vcmNlYXV4IGRlIGdhdGVhdQpFVVIgcmVtcGxhY2UgRkYuCkVPRgoKOiAke0xPQ0FMRV9GUj1mcl9GUn0KOiAke0xPQ0FMRV9GUl9VVEY4PWZyX0ZSLlVURi04fQppZiB0ZXN0ICRMT0NBTEVfRlIgIT0gbm9uZTsgdGhlbgogIHByZXBhcmVfbG9jYWxlXyBmciAkTE9DQUxFX0ZSCiAgTEFOR1VBR0U9IExDX0FMTD0kTE9DQUxFX0ZSIGdhd2sgLXYgbj0yIC1mIHByb2cuYXdrID4gcHJvZy5vdXQgfHwgRXhpdCAxCiAgJHtESUZGfSBwcm9nLm9rIHByb2cub3V0IHx8IEV4aXQgMQpmaQppZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lOyB0aGVuCiAgcHJlcGFyZV9sb2NhbGVfIGZyICRMT0NBTEVfRlJfVVRGOAogIExBTkdVQUdFPSBMQ19BTEw9JExPQ0FMRV9GUl9VVEY4IGdhd2sgLXYgbj0yIC1mIHByb2cuYXdrID4gcHJvZy5vdXQgfHwgRXhpdCAxCiAgJHtESUZGfSBwcm9nLm9rdSBwcm9nLm91dCB8fCBFeGl0IDEKZmkKCkV4aXQgMAo=