Name: series-workflowgtsrz Phase: Failed StartedAt: 2026-07-17 20:17:10 +0000 UTC FinishedAt: 2026-07-17 20:43:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgtsrz[0] Phase: Succeeded StartedAt: 2026-07-17 20:17:10 +0000 UTC FinishedAt: 2026-07-17 20:42:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgtsrz[0].run-triage Phase: Succeeded StartedAt: 2026-07-17 20:17:10 +0000 UTC FinishedAt: 2026-07-17 20:42:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIwOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgX19pbml0IGZ1bmN0aW9ucyAoa2hvX3Jlc2VydmVfc2NyYXRjaCwgc2NyYXRjaF9zaXplX3VwZGF0ZSwgc2NyYXRjaF9zaXplX25vZGUpIHdoaWNoIGFyZSBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGtlcm5lbCBib290IGFuZCB0aGVuIGRpc2NhcmRlZC4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYW4gYWxpZ25tZW50IGNvbnN0YW50IHBhc3NlZCB0byBtZW1ibG9jayBhbGxvY2F0b3JzLCB3aGljaCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgY2FuIGJlIGZ1enplZCBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZDQ1NzNmOWQ5MTJlY2U2NTlmZmEwMTU5ODI0YzhhMzBmYjVhMWRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMjA6NDE6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbmluZGV4IDQ4MzRhODA5OTg1YWI3Li4xNzVjMDhhNmU0MWUzZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbkBAIC0zOCw2ICYjNDM7MzgsMTYgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi9rZXhlY19pbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaFwmIzM0O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIGlzIHRoZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBkZWZlcnJlZCBzdHJ1Y3QgcGFnZSBpbml0LlxuJiM0MzsgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3NcbiYjNDM7ICogYXQgdGhlIG5laWdoYm9yaW5nIHBhZ2VzICh1cCB0byBNQVhfUEFHRV9PUkRFUikgdG8gbWVyZ2UgdGhlbS5cbiYjNDM7ICogSWYgS0hPIHNjcmF0Y2ggaXMgbm90IGFsaWduZWQgdG8gdGhhdCB2YWx1ZSwgYnVkZHkgY2FuIGFjY2VzcyB1bmluaXRpYWxpemVkXG4mIzQzOyAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIChQQUdFX1NJWkUgKiBNQVhfT1JERVJfTlJfUEFHRVMpXG4mIzQzO3N0YXRpY19hc3NlcnQoU0NSQVRDSF9BTElHTk1FTlRfQllURVMgXHUwMDNlPSBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4mIzQzO1xuIC8qIFRoZSBtYWdpYyB0b2tlbiBmb3IgcHJlc2VydmVkIHBhZ2VzICovXG4gI2RlZmluZSBLSE9fUEFHRV9NQUdJQyAweDRiNDg0ZjUwVSAvKiBBU0NJSSBmb3IgJiMzOTtLSE9QJiMzOTsgKi9cbiBcbkBAIC02NDAsOCAmIzQzOzY1MCw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzY3JhdGNoX3NpemVfdXBkYXRlKHZvaWQpXG4gXHQgKiBTY3JhdGNoIGFyZWFzIGFyZSByZWxlYXNlZCBhcyBNSUdSQVRFX0NNQS4gUm91bmQgdGhlbSB1cCB0byB0aGUgcmlnaHRcbiBcdCAqIHNpemUuXG4gXHQgKi9cbi1cdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSByb3VuZF91cChzY3JhdGNoX3NpemVfbG93bWVtLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4tXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuJiM0MztcdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSByb3VuZF91cChzY3JhdGNoX3NpemVfbG93bWVtLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4mIzQzO1x0c2NyYXRjaF9zaXplX2dsb2JhbCA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9nbG9iYWwsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTtcbiB9XG4gXG4gc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuQEAgLTY1Niw3ICYjNDM7NjY2LDcgQEAgc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuIFx0XHRzaXplID0gc2NyYXRjaF9zaXplX3Blcm5vZGU7XG4gXHR9XG4gXG4tXHRyZXR1cm4gcm91bmRfdXAoc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuJiM0MztcdHJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4gfVxuIFxuIC8qKlxuQEAgLTY5Miw3ICYjNDM7NzAyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdCAqIG5leHQga2VybmVsXG4gXHQgKi9cbiBcdHNpemUgPSBzY3JhdGNoX3NpemVfbG93bWVtO1xuLVx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMsIDAsXG4mIzQzO1x0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsIDAsXG4gXHRcdFx0XHRcdCBBUkNIX0xPV19BRERSRVNTX0xJTUlUKTtcbiBcdGlmICghYWRkcikge1xuIFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgbG93bWVtIHNjcmF0Y2ggYnVmZmVyXFxuXCYjMzQ7KTtcbkBAIC03MDUsNyAmIzQzOzcxNSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gXG4gXHQvKiByZXNlcnZlIGxhcmdlIGNvbnRpZ3VvdXMgYXJlYSBmb3IgYWxsb2NhdGlvbnMgd2l0aG91dCBuaWQgKi9cbiBcdHNpemUgPSBzY3JhdGNoX3NpemVfZ2xvYmFsO1xuLVx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuJiM0MztcdGFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTtcbiBcdGlmICghYWRkcikge1xuIFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgZ2xvYmFsIHNjcmF0Y2ggYnVmZmVyXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBlcnJfZnJlZV9zY3JhdGNoX2FyZWFzO1xuQEAgLTcyMSw3ICYjNDM7NzMxLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdCAqL1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG4gXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuLVx0XHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTLFxuJiM0MztcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbiBcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4gXHRcdGlmICghYWRkcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIwOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgX19pbml0IGZ1bmN0aW9ucyAoa2hvX3Jlc2VydmVfc2NyYXRjaCwgc2NyYXRjaF9zaXplX3VwZGF0ZSwgc2NyYXRjaF9zaXplX25vZGUpIHdoaWNoIGFyZSBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGtlcm5lbCBib290IGFuZCB0aGVuIGRpc2NhcmRlZC4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYW4gYWxpZ25tZW50IGNvbnN0YW50IHBhc3NlZCB0byBtZW1ibG9jayBhbGxvY2F0b3JzLCB3aGljaCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgY2FuIGJlIGZ1enplZCBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkNDU3M2Y5ZDkxMmVjZTY1OWZmYTAxNTk4MjRjOGEzMGZiNWExZGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxNyAyMDo0MTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCmluZGV4IDQ4MzRhODA5OTg1YWI3Li4xNzVjMDhhNmU0MWUzZiAxMDA2NDQKLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCkBAIC0zOCw2ICYjNDM7MzgsMTYgQEAKICNpbmNsdWRlICYjMzQ7Li4va2V4ZWNfaW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgmIzM0OwogCiYjNDM7LyoKJiM0MzsgKiBUaGlzIGlzIHRoZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBkZWZlcnJlZCBzdHJ1Y3QgcGFnZSBpbml0LgomIzQzOyAqIGRlZmVycmVkX2luaXRfbWVtbWFwX2NodW5rIGZyZWVzIG1lbW9yeSB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLCB3aGljaCBsb29rcwomIzQzOyAqIGF0IHRoZSBuZWlnaGJvcmluZyBwYWdlcyAodXAgdG8gTUFYX1BBR0VfT1JERVIpIHRvIG1lcmdlIHRoZW0uCiYjNDM7ICogSWYgS0hPIHNjcmF0Y2ggaXMgbm90IGFsaWduZWQgdG8gdGhhdCB2YWx1ZSwgYnVkZHkgY2FuIGFjY2VzcyB1bmluaXRpYWxpemVkCiYjNDM7ICogc3RydWN0IHBhZ2VzLCB3aGljaCBjYW4gY2F1c2UgYSBjcmFzaC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIChQQUdFX1NJWkUgKiBNQVhfT1JERVJfTlJfUEFHRVMpCiYjNDM7c3RhdGljX2Fzc2VydChTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyAmZ3Q7PSBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7CiYjNDM7CiAvKiBUaGUgbWFnaWMgdG9rZW4gZm9yIHByZXNlcnZlZCBwYWdlcyAqLwogI2RlZmluZSBLSE9fUEFHRV9NQUdJQyAweDRiNDg0ZjUwVSAvKiBBU0NJSSBmb3IgJiMzOTtLSE9QJiMzOTsgKi8KIApAQCAtNjQwLDggJiM0Mzs2NTAsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2NyYXRjaF9zaXplX3VwZGF0ZSh2b2lkKQogCSAqIFNjcmF0Y2ggYXJlYXMgYXJlIHJlbGVhc2VkIGFzIE1JR1JBVEVfQ01BLiBSb3VuZCB0aGVtIHVwIHRvIHRoZSByaWdodAogCSAqIHNpemUuCiAJICovCi0Jc2NyYXRjaF9zaXplX2xvd21lbSA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9sb3dtZW0sIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTsKLQlzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpOwomIzQzOwlzY3JhdGNoX3NpemVfbG93bWVtID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2xvd21lbSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpOwomIzQzOwlzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpOwogfQogCiBzdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IHNjcmF0Y2hfc2l6ZV9ub2RlKGludCBuaWQpCkBAIC02NTYsNyAmIzQzOzY2Niw3IEBAIHN0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgc2NyYXRjaF9zaXplX25vZGUoaW50IG5pZCkKIAkJc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9wZXJub2RlOwogCX0KIAotCXJldHVybiByb3VuZF91cChzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7CiYjNDM7CXJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7CiB9CiAKIC8qKgpAQCAtNjkyLDcgJiM0Mzs3MDIsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKQogCSAqIG5leHQga2VybmVsCiAJICovCiAJc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9sb3dtZW07Ci0JYWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMsIDAsCiYjNDM7CWFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jX3JhbmdlKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTLCAwLAogCQkJCQkgQVJDSF9MT1dfQUREUkVTU19MSU1JVCk7CiAJaWYgKCFhZGRyKSB7CiAJCXByX2VycigmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGxvd21lbSBzY3JhdGNoIGJ1ZmZlclxuJiMzNDspOwpAQCAtNzA1LDcgJiM0Mzs3MTUsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKQogCiAJLyogcmVzZXJ2ZSBsYXJnZSBjb250aWd1b3VzIGFyZWEgZm9yIGFsbG9jYXRpb25zIHdpdGhvdXQgbmlkICovCiAJc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7Ci0JYWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpOwomIzQzOwlhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7CiAJaWYgKCFhZGRyKSB7CiAJCXByX2VycigmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGdsb2JhbCBzY3JhdGNoIGJ1ZmZlclxuJiMzNDspOwogCQlnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7CkBAIC03MjEsNyAmIzQzOzczMSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpCiAJICovCiAJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7CiAJCXNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpOwotCQlhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTLAomIzQzOwkJYWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywKIAkJCQkJCTAsIE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsCiAJCQkJCQluaWQsIHRydWUpOwogCQlpZiAoIWFkZHIpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTGl2ZSBVcGRhdGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIGNoYW5nZSBpbiBzY3JhdGNoIGFyZWEgYWxpZ25tZW50LiBUaGV5JiMzOTtyZSBnb2luZyBmcm9tIGBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFU2AgdG8gYFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTYCwgYW5kIHRoYXQmIzM5O3MgZGVmaW5lZCBhcyBgKFBBR0VfU0laRSAqIE1BWF9PUkRFUl9OUl9QQUdFUylgLiBIbW0sIHRoaXMgaXMgS0hPLXJlbGF0ZWQsIGtleGVjIGhhbmRvdmVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIGlmIGl0JiMzOTtzIGV2ZW4gd29ydGggY29uc2lkZXJpbmcgZm9yIGZ1enppbmcuIFNlZW1zIGxpa2UgaXQgbWlnaHQgaW52b2x2ZSBzb21lIGNvbXBsZXggc3RhdGUgY2hhbmdlcy4KCkxldCYjMzk7cyBsb2NhdGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBhbmQgYHNjcmF0Y2hfc2l6ZV91cGRhdGVgLiBPbmNlIEkmIzM5O3ZlIGZvdW5kIHRob3NlLCBJIGNhbiBzdGFydCBtYXBwaW5nIHRoZSBjYWxsIGdyYXBoIGFuZCByZWFzb25pbmcgYWJvdXQgdGhlIGlucHV0IGNvbmRpdGlvbnMuIEkgd29uZGVyIHdoYXQgc2NlbmFyaW9zIHRyaWdnZXIgS0hPIGFuZCBpZiB0aGlzIGFsaWdubWVudCBjaGFuZ2UgaGFzIGFueSBpbXBsaWNhdGlvbnMgZm9yIHRob3NlLiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3Jlc2VydmVfc2NyYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz02NTc9c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjcyLS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2NzM6ICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjc0LSAqXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02ODAtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY4MTpzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02ODIte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTYzMj12b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXQodm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE2MzktXHR9IGVsc2Uge1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxNjQwOlx0XHRraG9fcmVzZXJ2ZV9zY3JhdGNoKCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE2NDEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoIG9mIGBraG9fbWVtb3J5X2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBraG9fbWVtb3J5YCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCBldmVyeSBjYWxsIHNpdGUgb2YgYGtob19tZW1vcnlfaW5pdGAuIEtub3dpbmcgd2hlcmUgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gaG93IGFuZCB3aGVuIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gaXMgYnJvdWdodCBvbmxpbmUuIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBlYWNoIGxvY2F0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGluaXRpYWxpemF0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIGVhcmx5IGJvb3Qgc3RhZ2VzLCB0aHJlYWQgaW5pdGlhbGl6YXRpb24sIG9yIHBlcmhhcHMgYSBtb3JlIGR5bmFtaWMgYWxsb2NhdGlvbiBzY2hlbWU/IFRoZSBjYWxsaW5nIGNvbnRleHQgcHJvdmlkZXMga2V5IGluc2lnaHRzIGludG8gdGhlIGRlc2lnbiBwaGlsb3NvcGh5IG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19tZW1vcnlfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Mzc9aW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM4LVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjM5OnZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQwLVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0xMDc9c3RhdGljIGlubGluZSBpbnQga2hvX3JldHJpZXZlX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgcGh5c19hZGRyX3QgKnBoeXMsXG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTExMi1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoxMTM6c3RhdGljIGlubGluZSB2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMTQtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xNjMwPWZzX2luaXRjYWxsKGtob19pbml0KTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTYzMS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTYzMjp2b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXQodm9pZClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTYzMy17XG4tLVxubW0vbW1faW5pdC5jPTI2OTU9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTI3MTktXHQgKi9cbm1tL21tX2luaXQuYzoyNzIwOlx0a2hvX21lbW9yeV9pbml0KCk7XG5tbS9tbV9pbml0LmMtMjcyMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTI2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQm9vdC1UaW1lIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIGBraG9fbWVtb3J5X2luaXRgIGdldHMgY2FsbGVkIHByZXR0eSBlYXJseSwgcmlnaHQgZnJvbSBgbW1fY29yZV9pbml0YCwgd2hpY2ggaXRzZWxmIGtpY2tzIG9mZiBkdXJpbmcgYm9vdC4gUmlnaHQsIGFuZCB0aGlzIHBhdGNoLi4uIGl0JiMzOTtzIHR3ZWFraW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbGlnbm1lbnQgZm9yIEtITyBzY3JhdGNoIG1lbW9yeSBkdXJpbmcgdGhhdCBib290LXVwIHBoYXNlLiBIbW0sIGlzIHRoaXMgZXZlbiBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nPyBUaGlzIGlzIGEgYm9vdC10aW1lIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZnJvbSBhIHVzZXJsYW5kIHBlcnNwZWN0aXZlLCBmdXp6aW5nIHRoYXQgaXMuLi4gdHJpY2t5LiBJIGNhbiYjMzk7dCB0aGluayBvZiBhIGRpcmVjdCB3YXksIHVubGVzcyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBrZXhlYyBoYW5kb2ZmcyDigJMgY291bGQgd2Ugc29tZWhvdyBjb250cm9sIHRoZSBwYXJhbWV0ZXJzIGR1cmluZyBhIGtleGVjIGFuZCBtYXliZSB0cmlnZ2VyIHNvbWV0aGluZyBpbnRlcmVzdGluZz8gTGV0JiMzOTtzIG5vdCBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzLiBGaXJzdCBzdGVwLCBsZXQgbWUgY2hlY2sgdGhlIGNvbmZpZ3MuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3Rpbmcgc2V0dGluZ3MgdGhlcmUgdGhhdCBjb3VsZCBvcGVuIHVwIGEgcGF0aCBJJiMzOTttIG5vdCBzZWVpbmcgaW1tZWRpYXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtFWEVDX0hBTkRPVkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL0tjb25maWc9Mz1tZW51IFwmIzM0O0xpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclwmIzM0O1xua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy00LVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlclwmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjE4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR1xua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEtleGVjIEhhbmRvdmVyIGRlYnVnIGNoZWNrc1wmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMjYtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjI3OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlciBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDYzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGtleGVjX2hhbmRvdmVyLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIEl0JiMzOTtzIHR3ZWFraW5nIHRoZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAgZnVuY3Rpb24sIHdoaWNoLCBpZiBJIHJlY2FsbCwgaXMgYSBib290LXRpbWUgaW5pdGlhbGl6YXRpb24gdGhpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIG1lbW9yeSBhbGlnbm1lbnQgZnJvbSBgQ01BX01JTl9BTElHTk1FTlRfQllURVNgIHRvIGBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFU2AuIEhtbSwgZnVuY3Rpb25hbGx5IHRoaXMgaXMgYSByZWFsIGNoYW5nZSwgYXMgaW4sIGl0JiMzOTtzIGFjdHVhbGx5IGFsdGVyaW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGR1cmluZyBib290LCBmaXhpbmcgYSBwb3RlbnRpYWwgY3Jhc2ggcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWdlcy4KCkJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgdXN1YWwgU3l6a2FsbGVyIGFwcHJvYWNoIGRvZXNuJiMzOTt0IGRvIGEgZ3JlYXQgam9iIHdpdGggYm9vdC10aW1lIHN0dWZmLiBJIG1lYW4sIHdlICpjb3VsZCogZnV6eiBpdCwgYnV0IHRoYXQmIzM5O3Mgbm90IGl0cyBzdHJvbmcgc3VpdC4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgcHJvbXB0IGd1aWRlbGluZXMuIFJpZ2h0LCB0aGUgcHJvbXB0IHNheXMsIGRvbiYjMzk7dCByZXR1cm4gJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGlmIGl0JiMzOTtzIGNoYW5naW5nIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0ICpkb24mIzM5O3QqIGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuIFRoaXMgKmlzKiBjaGFuZ2luZyBhIG1hY3JvLCBidXQgaXTigJlzIGFuIGFsaWdubWVudCByZXF1aXJlbWVudCwgd2hpY2ggaGFzIGRpcmVjdCBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucy4gSXQgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbi4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1Byb2JhYmx5IG5vdCB3b3J0aCBpdC4mIzM0OyBCb290LXRpbWUgYWxsb2NhdGlvbiBjaGFuZ2VzIGFyZW4mIzM5O3QgU3l6a2FsbGVyJiMzOTtzIHR5cGljYWwgdGFyZ2V0LiBIb3dldmVyLCBga2hvX3Jlc2VydmVfc2NyYXRjaGAgaXMgbGlrZWx5IHRvIGJlIGNhbGxlZCBkdXJpbmcgYm9vdCBhbmQgdGhhdCBtaWdodCBoYXZlIGludGVyYWN0aW9ucyBJJiMzOTttIG5vdCBzZWVpbmcgeWV0LiBDb3VsZCB0aGlzIGNoYW5nZSBhZmZlY3Qga2V4ZWMgc29tZWhvdz8gRG9lcyB0aGlzIHRoZW4gb3BlbiB0aGUgcG9zc2liaWxpdHkgb2YgYSBjcmFzaCBJICpjb3VsZCogdHJpZ2dlciBsYXRlcj8gSXMgdGhlcmUgYW55IHVzZXJzcGFjZSBpbnRlcmZhY2UgZm9yIEtITz8gTGV0IG1lIGNoZWNrIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fcmVzZXJ2ZV9zY3JhdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjU3PXN0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgc2NyYXRjaF9zaXplX25vZGUoaW50IG5pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3Mi0vKipcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NjczOiAqIGtob19yZXNlcnZlX3NjcmF0Y2ggLSBSZXNlcnZlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgZm9yIGtleGVjXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3NC0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjgwLSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2ODE6c3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjgyLXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE2MzI9dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNjM5LVx0fSBlbHNlIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTY0MDpcdFx0a2hvX3Jlc2VydmVfc2NyYXRjaCgpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNjQxLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDg0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gdGhlIGZ1bmN0aW9uIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQgb25seSBydW5zIG9uY2UgYXQgYm9vdCB0aW1lLiBTeXprYWxsZXIsIGluIGl0cyBzdGFuZGFyZCBvcGVyYXRpb24sIGZ1enpleiBzeXN0ZW0gY2FsbHMgYW5kIHVzZXItc3BhY2UgaW50ZXJmYWNlcyAqYWZ0ZXIqIHRoZSBzeXN0ZW0gaGFzIGJvb3RlZC4gVGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBhIGNoYW5nZSB0byBhbiBgX19pbml0YCBmdW5jdGlvbiwgZXNwZWNpYWxseSBvbmUgY29uY2VybmluZyBzb21ldGhpbmcgYXMgZ3JhbnVsYXIgYXMgYW4gYWxpZ25tZW50IHBhcmFtZXRlciBmb3IgYG1lbWJsb2NrX2FsbG9jYCwgaXMgYWxtb3N0IGNlcnRhaW5seSBvdXRzaWRlIHRoZSBzY29wZSBvZiB3aGF0IFN5emthbGxlciBjYW4gbWVhbmluZ2Z1bGx5IGZ1enogaW4gaXRzIHR5cGljYWwgbW9kZSBvZiBvcGVyYXRpb24uCgpDb3VsZCBJIHRyaWdnZXIgdGhpcyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGtleGVjPyBObywgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gd29yaywgYF9faW5pdGAgZnVuY3Rpb25zIGFyZSBmcmVlZCB1cCBhZnRlciB0aGUgaW5pdGlhbCBib290IHByb2Nlc3MuCgpTbywgc2luY2UgaXQmIzM5O3MgYW4gYF9faW5pdGAgZnVuY3Rpb24sIGl0JiMzOTtzIGRlZmluaXRpdmVseSB1bnJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIGZ1enppbmcuIFdhaXQsIEkgc2hvdWxkIGRvdWJsZSBjaGVjazogdGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gY2hlY2sgaWYgaXQgbW9kaWZpZXMgJiMzNDtyZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMmIzM0Oy4gSXMgaXQgcmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nPyBObywgaXQmIzM5O3MgYF9faW5pdGAuIEhvd2V2ZXIsIHN5emthbGxlciBib290cyB0aGUga2VybmVsIGZvciBlYWNoIFZNLCBzbyB0aGUgY29kZSAqaXMqIGV4ZWN1dGVkIGR1cmluZyBib290LiBCdXQgZnV6emluZyBkb2VzbiYjMzk7dCB0YXJnZXQgYm9vdCBjb2RlLgoKTGV0JiMzOTtzIGNoZWNrIGZvciBhbnkgb3RoZXIgY29kZSBjaGFuZ2VzIHRvIGRldGVybWluZSBpZiBpdCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIGBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFU2AgYW5kIHVzZXMgaXQgaW4gYHNjcmF0Y2hfc2l6ZV91cGRhdGVgLCBgc2NyYXRjaF9zaXplX25vZGVgLCBhbmQgYGtob19yZXNlcnZlX3NjcmF0Y2hgLiBPa2F5LCByaWdodCwgYWxsIG9mIHRoZXNlIGFyZSBhbHNvIGBfX2luaXRgIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIGFsbCB0aG9zZSBmdW5jdGlvbnMgYXJlIGBfX2luaXRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3JhdGNoX3NpemVfdXBkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjI3PWVhcmx5X3BhcmFtKFwmIzM0O2tob19zY3JhdGNoXCYjMzQ7LCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjI4LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2Mjk6c3RhdGljIHZvaWQgX19pbml0IHNjcmF0Y2hfc2l6ZV91cGRhdGUodm9pZClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjMwLXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTY4MT1zdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjg4LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2ODk6XHRzY3JhdGNoX3NpemVfdXBkYXRlKCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY5MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0NQoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gUmlnaHQsIHRoZSBtb2RpZmljYXRpb25zIGFyZSBhbGwgY2VudGVyZWQgYXJvdW5kIGBfX2luaXRgIGZ1bmN0aW9uczogYF9faW5pdGAsIGBzY3JhdGNoX3NpemVfdXBkYXRlYCwgYHNjcmF0Y2hfc2l6ZV9ub2RlYCwgYW5kIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYC4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZy4gVGhlc2UgYXJlIGV4ZWN1dGVkIG9ubHkgb25jZSwgZHVyaW5nIGJvb3QsIGFuZCB0aGVuLCBlZmZlY3RpdmVseSwgZGlzY2FyZGVkLiBNeSBpbnR1aXRpb24gc2NyZWFtcyAmIzM0O3VuZnV6emFibGUmIzM0OyBhdCB0aGlzIHBvaW50LCBiZWNhdXNlIFN5emthbGxlciBjYW4mIzM5O3QgZ2VuZXJhdGUgaW5wdXRzIGZvciB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnMgYWZ0ZXIgdGhlIGluaXRpYWwgYm9vdCBwaGFzZSwgcmlnaHQ/IFRoZSBpbnB1dHMsIHN1Y2ggYXMgdGhlIGBraG9fc2NyYXRjaGAga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIsIGFyZSBmaXhlZCBmb3IgdGhlIGVudGlyZSBmdXp6aW5nIHNlc3Npb24uCgpIb2xkIG9uLCB0aG91Z2guLi4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgbGltaXRlZCBjYXBhYmlsaXRpZXMgZm9yIGZ1enppbmcga2VybmVsIGNvbW1hbmQgbGluZXMsIGRvZXNuJiMzOTt0IGl0PyBCdXQsIHdlIHR5cGljYWxseSBkb24mIzM5O3QgY29uc2lkZXIgYF9faW5pdGAgZnVuY3Rpb25zIHRhcmdldHMsIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHJlYXNvbiB0byBkbyBzby4gSW4gdGhpcyBjYXNlLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBhbnN3ZXIgaXMgbm8uIFRoaXMgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIHRoZSBjYXNlLiBJdCBpcyB1bmxpa2VseSB0aGF0IFN5emthbGxlciB3aWxsIGNvbnNpZGVyIHRoaXMgcGF0Y2ggb2YgYW55IHZhbHVlLgoKQW5kLCBpZiB0aGF0JiMzOTtzIG5vdCBlbm91Z2gsIHRoaXMgcGF0Y2ggaXMgb25seSBjaGFuZ2luZyBhbiBhbGlnbm1lbnQgY29uc3RhbnQuIEl0JiMzOTtzIGEgJiMzNDtDaGFuZ2UgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdyYjMzQ7LiBXZWxsLCBpdCAqZG9lcyogYWx0ZXIgdGhlIGFsaWdubWVudCwgYnV0IHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBmbG93IHJlbWFpbnMgdGhlIHNhbWU7IGl0JiMzOTtzIGp1c3QgZGlmZmVyZW50IGFyZ3VtZW50cyB0byBgbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZWAuIFRoZSBpbXBhY3QgaXMgbmVnbGlnaWJsZS4KClRoZXJlZm9yZSwgbXkgZmluYWwgdmVyZGljdCBpczogdGhpcyBwYXRjaCBpcyAqKm5vdCB3b3J0aCBmdXp6aW5nKiouIEkmIzM5O2xsIGRvY3VtZW50IG15IHJlYXNvbmluZyBjbGVhcmx5OiBhbGwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYF9faW5pdGAsIHNvIHRoZXkgb25seSBleGVjdXRlIG9uY2UgZHVyaW5nIGJvb3QgYW5kIGFyZSB0aGVyZWZvcmUgdW5yZWFjaGFibGUgZm9yIHVzZXItc3BhY2UgZnV6emluZy4gQW5kLCB0aGUgY2hhbmdlIGlzIGp1c3QgYW4gYWRqdXN0bWVudCB0byBhbiBhbGlnbm1lbnQgY29uc3RhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIChraG9fcmVzZXJ2ZV9zY3JhdGNoLCBzY3JhdGNoX3NpemVfdXBkYXRlLCBzY3JhdGNoX3NpemVfbm9kZSkgd2hpY2ggYXJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgb25seSBhbHRlciBhbiBhbGlnbm1lbnQgY29uc3RhbnQgcGFzc2VkIHRvIG1lbWJsb2NrIGFsbG9jYXRvcnMsIHdoaWNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYSB3YXkgdGhhdCBjYW4gYmUgZnV6emVkIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIChraG9fcmVzZXJ2ZV9zY3JhdGNoLCBzY3JhdGNoX3NpemVfdXBkYXRlLCBzY3JhdGNoX3NpemVfbm9kZSkgd2hpY2ggYXJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgb25seSBhbHRlciBhbiBhbGlnbm1lbnQgY29uc3RhbnQgcGFzc2VkIHRvIG1lbWJsb2NrIGFsbG9jYXRvcnMsIHdoaWNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYSB3YXkgdGhhdCBjYW4gYmUgZnV6emVkIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjAyLjI3MTgzNzkzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTY0MDA2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIF9faW5pdCBmdW5jdGlvbnMgKGtob19yZXNlcnZlX3NjcmF0Y2gsIHNjcmF0Y2hfc2l6ZV91cGRhdGUsIHNjcmF0Y2hfc2l6ZV9ub2RlKSB3aGljaCBhcmUgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdCBhbmQgdGhlbiBkaXNjYXJkZWQuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBvbmx5IGFsdGVyIGFuIGFsaWdubWVudCBjb25zdGFudCBwYXNzZWQgdG8gbWVtYmxvY2sgYWxsb2NhdG9ycywgd2hpY2ggZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IGNhbiBiZSBmdXp6ZWQgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMDo0MTowMi4yNzE4NjQ3MDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTcxNDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRkNDU3M2Y5ZDkxMmVjZTY1OWZmYTAxNTk4MjRjOGEzMGZiNWExZGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTcgMjA6NDE6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG5pbmRleCA0ODM0YTgwOTk4NWFiNy4uMTc1YzA4YTZlNDFlM2YgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG5AQCAtMzgsNiArMzgsMTYgQEBcXG4gI2luY2x1ZGUgXFxcIi4uL2tleGVjX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oXFxcIlxcbiBcXG4rLypcXG4rICogVGhpcyBpcyB0aGUgbWluaW1hbCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgZGVmZXJyZWQgc3RydWN0IHBhZ2UgaW5pdC5cXG4rICogZGVmZXJyZWRfaW5pdF9tZW1tYXBfY2h1bmsgZnJlZXMgbWVtb3J5IHRvIHRoZSBidWRkeSBhbGxvY2F0b3IsIHdoaWNoIGxvb2tzXFxuKyAqIGF0IHRoZSBuZWlnaGJvcmluZyBwYWdlcyAodXAgdG8gTUFYX1BBR0VfT1JERVIpIHRvIG1lcmdlIHRoZW0uXFxuKyAqIElmIEtITyBzY3JhdGNoIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZFxcbisgKiBzdHJ1Y3QgcGFnZXMsIHdoaWNoIGNhbiBjYXVzZSBhIGNyYXNoLlxcbisgKi9cXG4rI2RlZmluZSBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyAoUEFHRV9TSVpFICogTUFYX09SREVSX05SX1BBR0VTKVxcbitzdGF0aWNfYXNzZXJ0KFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIFxcdTAwM2U9IENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4rXFxuIC8qIFRoZSBtYWdpYyB0b2tlbiBmb3IgcHJlc2VydmVkIHBhZ2VzICovXFxuICNkZWZpbmUgS0hPX1BBR0VfTUFHSUMgMHg0YjQ4NGY1MFUgLyogQVNDSUkgZm9yICdLSE9QJyAqL1xcbiBcXG5AQCAtNjQwLDggKzY1MCw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzY3JhdGNoX3NpemVfdXBkYXRlKHZvaWQpXFxuIFxcdCAqIFNjcmF0Y2ggYXJlYXMgYXJlIHJlbGVhc2VkIGFzIE1JR1JBVEVfQ01BLiBSb3VuZCB0aGVtIHVwIHRvIHRoZSByaWdodFxcbiBcXHQgKiBzaXplLlxcbiBcXHQgKi9cXG4tXFx0c2NyYXRjaF9zaXplX2xvd21lbSA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9sb3dtZW0sIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4tXFx0c2NyYXRjaF9zaXplX2dsb2JhbCA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9nbG9iYWwsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4rXFx0c2NyYXRjaF9zaXplX2xvd21lbSA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9sb3dtZW0sIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTtcXG4rXFx0c2NyYXRjaF9zaXplX2dsb2JhbCA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9nbG9iYWwsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTtcXG4gfVxcbiBcXG4gc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxcbkBAIC02NTYsNyArNjY2LDcgQEAgc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxcbiBcXHRcXHRzaXplID0gc2NyYXRjaF9zaXplX3Blcm5vZGU7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiByb3VuZF91cChzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XFxuK1xcdHJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC02OTIsNyArNzAyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcXG4gXFx0ICogbmV4dCBrZXJuZWxcXG4gXFx0ICovXFxuIFxcdHNpemUgPSBzY3JhdGNoX3NpemVfbG93bWVtO1xcbi1cXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUywgMCxcXG4rXFx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCBBUkNIX0xPV19BRERSRVNTX0xJTUlUKTtcXG4gXFx0aWYgKCFhZGRyKSB7XFxuIFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgbG93bWVtIHNjcmF0Y2ggYnVmZmVyXFxcXG5cXFwiKTtcXG5AQCAtNzA1LDcgKzcxNSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuIFxcbiBcXHQvKiByZXNlcnZlIGxhcmdlIGNvbnRpZ3VvdXMgYXJlYSBmb3IgYWxsb2NhdGlvbnMgd2l0aG91dCBuaWQgKi9cXG4gXFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7XFxuLVxcdGFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4rXFx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xcbiBcXHRpZiAoIWFkZHIpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBnbG9iYWwgc2NyYXRjaCBidWZmZXJcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7XFxuQEAgLTcyMSw3ICs3MzEsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxcbiBcXHQgKi9cXG4gXFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XFxuIFxcdFxcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xcbi1cXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTLFxcbitcXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRuaWQsIHRydWUpO1xcbiBcXHRcXHRpZiAoIWFkZHIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjA6NDE6MDMuMDM4NTUyODg3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDc5NzI4MDg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIChraG9fcmVzZXJ2ZV9zY3JhdGNoLCBzY3JhdGNoX3NpemVfdXBkYXRlLCBzY3JhdGNoX3NpemVfbm9kZSkgd2hpY2ggYXJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgb25seSBhbHRlciBhbiBhbGlnbm1lbnQgY29uc3RhbnQgcGFzc2VkIHRvIG1lbWJsb2NrIGFsbG9jYXRvcnMsIHdoaWNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYSB3YXkgdGhhdCBjYW4gYmUgZnV6emVkIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZDQ1NzNmOWQ5MTJlY2U2NTlmZmEwMTU5ODI0YzhhMzBmYjVhMWRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMjA6NDE6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuaW5kZXggNDgzNGE4MDk5ODVhYjcuLjE3NWMwOGE2ZTQxZTNmIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTM4LDYgKzM4LDE2IEBAXG4gI2luY2x1ZGUgXCIuLi9rZXhlY19pbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcImtleGVjX2hhbmRvdmVyX2ludGVybmFsLmhcIlxuIFxuKy8qXG4rICogVGhpcyBpcyB0aGUgbWluaW1hbCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgZGVmZXJyZWQgc3RydWN0IHBhZ2UgaW5pdC5cbisgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3NcbisgKiBhdCB0aGUgbmVpZ2hib3JpbmcgcGFnZXMgKHVwIHRvIE1BWF9QQUdFX09SREVSKSB0byBtZXJnZSB0aGVtLlxuKyAqIElmIEtITyBzY3JhdGNoIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZFxuKyAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guXG4rICovXG4rI2RlZmluZSBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyAoUEFHRV9TSVpFICogTUFYX09SREVSX05SX1BBR0VTKVxuK3N0YXRpY19hc3NlcnQoU0NSQVRDSF9BTElHTk1FTlRfQllURVMgXHUwMDNlPSBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4rXG4gLyogVGhlIG1hZ2ljIHRva2VuIGZvciBwcmVzZXJ2ZWQgcGFnZXMgKi9cbiAjZGVmaW5lIEtIT19QQUdFX01BR0lDIDB4NGI0ODRmNTBVIC8qIEFTQ0lJIGZvciAnS0hPUCcgKi9cbiBcbkBAIC02NDAsOCArNjUwLDggQEAgc3RhdGljIHZvaWQgX19pbml0IHNjcmF0Y2hfc2l6ZV91cGRhdGUodm9pZClcbiBcdCAqIFNjcmF0Y2ggYXJlYXMgYXJlIHJlbGVhc2VkIGFzIE1JR1JBVEVfQ01BLiBSb3VuZCB0aGVtIHVwIHRvIHRoZSByaWdodFxuIFx0ICogc2l6ZS5cbiBcdCAqL1xuLVx0c2NyYXRjaF9zaXplX2xvd21lbSA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9sb3dtZW0sIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcbi1cdHNjcmF0Y2hfc2l6ZV9nbG9iYWwgPSByb3VuZF91cChzY3JhdGNoX3NpemVfZ2xvYmFsLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4rXHRzY3JhdGNoX3NpemVfbG93bWVtID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2xvd21lbSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xuK1x0c2NyYXRjaF9zaXplX2dsb2JhbCA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9nbG9iYWwsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTtcbiB9XG4gXG4gc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuQEAgLTY1Niw3ICs2NjYsNyBAQCBzdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IHNjcmF0Y2hfc2l6ZV9ub2RlKGludCBuaWQpXG4gXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfcGVybm9kZTtcbiBcdH1cbiBcbi1cdHJldHVybiByb3VuZF91cChzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4rXHRyZXR1cm4gcm91bmRfdXAoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xuIH1cbiBcbiAvKipcbkBAIC02OTIsNyArNzAyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdCAqIG5leHQga2VybmVsXG4gXHQgKi9cbiBcdHNpemUgPSBzY3JhdGNoX3NpemVfbG93bWVtO1xuLVx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMsIDAsXG4rXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywgMCxcbiBcdFx0XHRcdFx0IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpO1xuIFx0aWYgKCFhZGRyKSB7XG4gXHRcdHByX2VycihcIkZhaWxlZCB0byByZXNlcnZlIGxvd21lbSBzY3JhdGNoIGJ1ZmZlclxcblwiKTtcbkBAIC03MDUsNyArNzE1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcbiBcdC8qIHJlc2VydmUgbGFyZ2UgY29udGlndW91cyBhcmVhIGZvciBhbGxvY2F0aW9ucyB3aXRob3V0IG5pZCAqL1xuIFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7XG4tXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4rXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4gXHRpZiAoIWFkZHIpIHtcbiBcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIHJlc2VydmUgZ2xvYmFsIHNjcmF0Y2ggYnVmZmVyXFxuXCIpO1xuIFx0XHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7XG5AQCAtNzIxLDcgKzczMSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gXHQgKi9cbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuIFx0XHRzaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTtcbi1cdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyxcbitcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbiBcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4gXHRcdGlmICghYWRkcikge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjA6NDE6MDMuMDM4NTU0ODM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg5OTE5ODI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgTGl2ZSBVcGRhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBjaGFuZ2UgaW4gc2NyYXRjaCBhcmVhIGFsaWdubWVudC4gVGhleSdyZSBnb2luZyBmcm9tIGBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFU2AgdG8gYFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTYCwgYW5kIHRoYXQncyBkZWZpbmVkIGFzIGAoUEFHRV9TSVpFICogTUFYX09SREVSX05SX1BBR0VTKWAuIEhtbSwgdGhpcyBpcyBLSE8tcmVsYXRlZCwga2V4ZWMgaGFuZG92ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBhbmQgaWYgaXQncyBldmVuIHdvcnRoIGNvbnNpZGVyaW5nIGZvciBmdXp6aW5nLiBTZWVtcyBsaWtlIGl0IG1pZ2h0IGludm9sdmUgc29tZSBjb21wbGV4IHN0YXRlIGNoYW5nZXMuXG5cbkxldCdzIGxvY2F0ZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgZmlsZSB0byB1bmRlcnN0YW5kIHRoaXMuIEknbGwgbmVlZCB0byBsb29rIGZvciBga2hvX3Jlc2VydmVfc2NyYXRjaGAgYW5kIGBzY3JhdGNoX3NpemVfdXBkYXRlYC4gT25jZSBJJ3ZlIGZvdW5kIHRob3NlLCBJIGNhbiBzdGFydCBtYXBwaW5nIHRoZSBjYWxsIGdyYXBoIGFuZCByZWFzb25pbmcgYWJvdXQgdGhlIGlucHV0IGNvbmRpdGlvbnMuIEkgd29uZGVyIHdoYXQgc2NlbmFyaW9zIHRyaWdnZXIgS0hPIGFuZCBpZiB0aGlzIGFsaWdubWVudCBjaGFuZ2UgaGFzIGFueSBpbXBsaWNhdGlvbnMgZm9yIHRob3NlLiBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMDo0MToxMi45Mzc3NTUxNzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzM0Njc2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fcmVzZXJ2ZV9zY3JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz02NTc9c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NzItLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2NzM6ICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3NC0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02ODAtICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2ODE6c3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY4Mi17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE2MzI9dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE2MzktXFx0fSBlbHNlIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE2NDA6XFx0XFx0a2hvX3Jlc2VydmVfc2NyYXRjaCgpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTY0MS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjE0LjYxMTEwODA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk5MzM0MTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGtob19tZW1vcnlfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBraG9fbWVtb3J5YCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCBldmVyeSBjYWxsIHNpdGUgb2YgYGtob19tZW1vcnlfaW5pdGAuIEtub3dpbmcgd2hlcmUgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gaG93IGFuZCB3aGVuIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gaXMgYnJvdWdodCBvbmxpbmUuIEknbGwgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGVhY2ggbG9jYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgaW5pdGlhbGl6YXRpb24uIEFyZSB3ZSBkZWFsaW5nIHdpdGggZWFybHkgYm9vdCBzdGFnZXMsIHRocmVhZCBpbml0aWFsaXphdGlvbiwgb3IgcGVyaGFwcyBhIG1vcmUgZHluYW1pYyBhbGxvY2F0aW9uIHNjaGVtZT8gVGhlIGNhbGxpbmcgY29udGV4dCBwcm92aWRlcyBrZXkgaW5zaWdodHMgaW50byB0aGUgZGVzaWduIHBoaWxvc29waHkgb2YgdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNhbGwgZ3JhcGggcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjIyLjYwNDQ1MTI1OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzAxMjIyODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19tZW1vcnlfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Mzc9aW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0zOC1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6Mzk6dm9pZCBraG9fbWVtb3J5X2luaXQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTEwNz1zdGF0aWMgaW5saW5lIGludCBraG9fcmV0cmlldmVfc3VidHJlZShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCAqcGh5cyxcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMTItXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjExMzpzdGF0aWMgaW5saW5lIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpIHsgfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMTQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE2MzA9ZnNfaW5pdGNhbGwoa2hvX2luaXQpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTYzMS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE2MzI6dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNjMzLXtcXG4tLVxcbm1tL21tX2luaXQuYz0yNjk1PXZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTI3MTktXFx0ICovXFxubW0vbW1faW5pdC5jOjI3MjA6XFx0a2hvX21lbW9yeV9pbml0KCk7XFxubW0vbW1faW5pdC5jLTI3MjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjI3LjkwNTY4NDYwNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTE2ODk0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQm9vdC1UaW1lIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gYGtob19tZW1vcnlfaW5pdGAgZ2V0cyBjYWxsZWQgcHJldHR5IGVhcmx5LCByaWdodCBmcm9tIGBtbV9jb3JlX2luaXRgLCB3aGljaCBpdHNlbGYga2lja3Mgb2ZmIGR1cmluZyBib290LiBSaWdodCwgYW5kIHRoaXMgcGF0Y2guLi4gaXQncyB0d2Vha2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYWxpZ25tZW50IGZvciBLSE8gc2NyYXRjaCBtZW1vcnkgZHVyaW5nIHRoYXQgYm9vdC11cCBwaGFzZS4gSG1tLCBpcyB0aGlzIGV2ZW4gYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZz8gVGhpcyBpcyBhIGJvb3QtdGltZSBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIGZyb20gYSB1c2VybGFuZCBwZXJzcGVjdGl2ZSwgZnV6emluZyB0aGF0IGlzLi4uIHRyaWNreS4gSSBjYW4ndCB0aGluayBvZiBhIGRpcmVjdCB3YXksIHVubGVzcyB3ZSdyZSB0YWxraW5nIGFib3V0IGtleGVjIGhhbmRvZmZzIOKAkyBjb3VsZCB3ZSBzb21laG93IGNvbnRyb2wgdGhlIHBhcmFtZXRlcnMgZHVyaW5nIGEga2V4ZWMgYW5kIG1heWJlIHRyaWdnZXIgc29tZXRoaW5nIGludGVyZXN0aW5nPyBMZXQncyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gRmlyc3Qgc3RlcCwgbGV0IG1lIGNoZWNrIHRoZSBjb25maWdzLiBUaGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHNldHRpbmdzIHRoZXJlIHRoYXQgY291bGQgb3BlbiB1cCBhIHBhdGggSSdtIG5vdCBzZWVpbmcgaW1tZWRpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMDo0MTozMS41MTczNzYxMDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NTY4NTg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS0VYRUNfSEFORE9WRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlclxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjM2LjUxMzA2NzU0MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMDczNzg5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBga2V4ZWNfaGFuZG92ZXIuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIEl0J3MgdHdlYWtpbmcgdGhlIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBmdW5jdGlvbiwgd2hpY2gsIGlmIEkgcmVjYWxsLCBpcyBhIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiB0aGluZy4gU3BlY2lmaWNhbGx5LCBpdCdzIGNoYW5naW5nIHRoZSBtZW1vcnkgYWxpZ25tZW50IGZyb20gYENNQV9NSU5fQUxJR05NRU5UX0JZVEVTYCB0byBgU0NSQVRDSF9BTElHTk1FTlRfQllURVNgLiBIbW0sIGZ1bmN0aW9uYWxseSB0aGlzIGlzIGEgcmVhbCBjaGFuZ2UsIGFzIGluLCBpdCdzIGFjdHVhbGx5IGFsdGVyaW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGR1cmluZyBib290LCBmaXhpbmcgYSBwb3RlbnRpYWwgY3Jhc2ggcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWdlcy5cblxuQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSB1c3VhbCBTeXprYWxsZXIgYXBwcm9hY2ggZG9lc24ndCBkbyBhIGdyZWF0IGpvYiB3aXRoIGJvb3QtdGltZSBzdHVmZi4gSSBtZWFuLCB3ZSAqY291bGQqIGZ1enogaXQsIGJ1dCB0aGF0J3Mgbm90IGl0cyBzdHJvbmcgc3VpdC4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgcHJvbXB0IGd1aWRlbGluZXMuIFJpZ2h0LCB0aGUgcHJvbXB0IHNheXMsIGRvbid0IHJldHVybiBcIldvcnRoRnV6emluZz10cnVlXCIgaWYgaXQncyBjaGFuZ2luZyBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCAqZG9uJ3QqIGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuIFRoaXMgKmlzKiBjaGFuZ2luZyBhIG1hY3JvLCBidXQgaXTigJlzIGFuIGFsaWdubWVudCByZXF1aXJlbWVudCwgd2hpY2ggaGFzIGRpcmVjdCBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucy4gSXQgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbi5cblxuTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiUHJvYmFibHkgbm90IHdvcnRoIGl0LlwiIEJvb3QtdGltZSBhbGxvY2F0aW9uIGNoYW5nZXMgYXJlbid0IFN5emthbGxlcidzIHR5cGljYWwgdGFyZ2V0LiBIb3dldmVyLCBga2hvX3Jlc2VydmVfc2NyYXRjaGAgaXMgbGlrZWx5IHRvIGJlIGNhbGxlZCBkdXJpbmcgYm9vdCBhbmQgdGhhdCBtaWdodCBoYXZlIGludGVyYWN0aW9ucyBJJ20gbm90IHNlZWluZyB5ZXQuIENvdWxkIHRoaXMgY2hhbmdlIGFmZmVjdCBrZXhlYyBzb21laG93PyBEb2VzIHRoaXMgdGhlbiBvcGVuIHRoZSBwb3NzaWJpbGl0eSBvZiBhIGNyYXNoIEkgKmNvdWxkKiB0cmlnZ2VyIGxhdGVyPyBJcyB0aGVyZSBhbnkgdXNlcnNwYWNlIGludGVyZmFjZSBmb3IgS0hPPyBMZXQgbWUgY2hlY2sgZm9yIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjA6NDE6NDIuODIwNDQ4NTQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQzMTk2Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19yZXNlcnZlX3NjcmF0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz02NTc9c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NzItLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2NzM6ICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3NC0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02ODAtICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2ODE6c3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY4Mi17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE2MzI9dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE2MzktXFx0fSBlbHNlIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE2NDA6XFx0XFx0a2hvX3Jlc2VydmVfc2NyYXRjaCgpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTY0MS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjQ2Ljg2MzY1MTE4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjcwOTYyNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgZnVuY3Rpb24gYGtob19yZXNlcnZlX3NjcmF0Y2hgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCBvbmx5IHJ1bnMgb25jZSBhdCBib290IHRpbWUuIFN5emthbGxlciwgaW4gaXRzIHN0YW5kYXJkIG9wZXJhdGlvbiwgZnV6emV6IHN5c3RlbSBjYWxscyBhbmQgdXNlci1zcGFjZSBpbnRlcmZhY2VzICphZnRlciogdGhlIHN5c3RlbSBoYXMgYm9vdGVkLiBUaGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGEgY2hhbmdlIHRvIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IG9uZSBjb25jZXJuaW5nIHNvbWV0aGluZyBhcyBncmFudWxhciBhcyBhbiBhbGlnbm1lbnQgcGFyYW1ldGVyIGZvciBgbWVtYmxvY2tfYWxsb2NgLCBpcyBhbG1vc3QgY2VydGFpbmx5IG91dHNpZGUgdGhlIHNjb3BlIG9mIHdoYXQgU3l6a2FsbGVyIGNhbiBtZWFuaW5nZnVsbHkgZnV6eiBpbiBpdHMgdHlwaWNhbCBtb2RlIG9mIG9wZXJhdGlvbi5cblxuQ291bGQgSSB0cmlnZ2VyIHRoaXMgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBrZXhlYz8gTm8sIHRoYXQncyBub3QgZ29pbmcgdG8gd29yaywgYF9faW5pdGAgZnVuY3Rpb25zIGFyZSBmcmVlZCB1cCBhZnRlciB0aGUgaW5pdGlhbCBib290IHByb2Nlc3MuXG5cblNvLCBzaW5jZSBpdCdzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBpdCdzIGRlZmluaXRpdmVseSB1bnJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIGZ1enppbmcuIFdhaXQsIEkgc2hvdWxkIGRvdWJsZSBjaGVjazogdGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gY2hlY2sgaWYgaXQgbW9kaWZpZXMgXCJyZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXNcIi4gSXMgaXQgcmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nPyBObywgaXQncyBgX19pbml0YC4gSG93ZXZlciwgc3l6a2FsbGVyIGJvb3RzIHRoZSBrZXJuZWwgZm9yIGVhY2ggVk0sIHNvIHRoZSBjb2RlICppcyogZXhlY3V0ZWQgZHVyaW5nIGJvb3QuIEJ1dCBmdXp6aW5nIGRvZXNuJ3QgdGFyZ2V0IGJvb3QgY29kZS5cblxuTGV0J3MgY2hlY2sgZm9yIGFueSBvdGhlciBjb2RlIGNoYW5nZXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgYFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTYCBhbmQgdXNlcyBpdCBpbiBgc2NyYXRjaF9zaXplX3VwZGF0ZWAsIGBzY3JhdGNoX3NpemVfbm9kZWAsIGFuZCBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIE9rYXksIHJpZ2h0LCBhbGwgb2YgdGhlc2UgYXJlIGFsc28gYF9faW5pdGAgZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gY29uZmlybSBhbGwgdGhvc2UgZnVuY3Rpb25zIGFyZSBgX19pbml0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ4NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMDo0MTo1Mi4xMzQ2MTYyNDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjM2NDY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NyYXRjaF9zaXplX3VwZGF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTYyNz1lYXJseV9wYXJhbShcXFwia2hvX3NjcmF0Y2hcXFwiLCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTYyOC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjYyOTpzdGF0aWMgdm9pZCBfX2luaXQgc2NyYXRjaF9zaXplX3VwZGF0ZSh2b2lkKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjMwLXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjgxPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY4OC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY4OTpcXHRzY3JhdGNoX3NpemVfdXBkYXRlKCk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02OTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjU3LjI5ODI2ODMzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTM3NTMzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBSaWdodCwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGFsbCBjZW50ZXJlZCBhcm91bmQgYF9faW5pdGAgZnVuY3Rpb25zOiBgX19pbml0YCwgYHNjcmF0Y2hfc2l6ZV91cGRhdGVgLCBgc2NyYXRjaF9zaXplX25vZGVgLCBhbmQgYGtob19yZXNlcnZlX3NjcmF0Y2hgLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBUaGVzZSBhcmUgZXhlY3V0ZWQgb25seSBvbmNlLCBkdXJpbmcgYm9vdCwgYW5kIHRoZW4sIGVmZmVjdGl2ZWx5LCBkaXNjYXJkZWQuIE15IGludHVpdGlvbiBzY3JlYW1zIFwidW5mdXp6YWJsZVwiIGF0IHRoaXMgcG9pbnQsIGJlY2F1c2UgU3l6a2FsbGVyIGNhbid0IGdlbmVyYXRlIGlucHV0cyBmb3IgdGhlc2UgdHlwZXMgb2YgZnVuY3Rpb25zIGFmdGVyIHRoZSBpbml0aWFsIGJvb3QgcGhhc2UsIHJpZ2h0PyBUaGUgaW5wdXRzLCBzdWNoIGFzIHRoZSBga2hvX3NjcmF0Y2hgIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyLCBhcmUgZml4ZWQgZm9yIHRoZSBlbnRpcmUgZnV6emluZyBzZXNzaW9uLlxuXG5Ib2xkIG9uLCB0aG91Z2guLi4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgbGltaXRlZCBjYXBhYmlsaXRpZXMgZm9yIGZ1enppbmcga2VybmVsIGNvbW1hbmQgbGluZXMsIGRvZXNuJ3QgaXQ/IEJ1dCwgd2UgdHlwaWNhbGx5IGRvbid0IGNvbnNpZGVyIGBfX2luaXRgIGZ1bmN0aW9ucyB0YXJnZXRzLCB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHJlYXNvbiB0byBkbyBzby4gSW4gdGhpcyBjYXNlLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBhbnN3ZXIgaXMgbm8uIFRoaXMgZG9lc24ndCBzZWVtIGxpa2UgdGhlIGNhc2UuIEl0IGlzIHVubGlrZWx5IHRoYXQgU3l6a2FsbGVyIHdpbGwgY29uc2lkZXIgdGhpcyBwYXRjaCBvZiBhbnkgdmFsdWUuXG5cbkFuZCwgaWYgdGhhdCdzIG5vdCBlbm91Z2gsIHRoaXMgcGF0Y2ggaXMgb25seSBjaGFuZ2luZyBhbiBhbGlnbm1lbnQgY29uc3RhbnQuIEl0J3MgYSBcIkNoYW5nZSB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93XCIuIFdlbGwsIGl0ICpkb2VzKiBhbHRlciB0aGUgYWxpZ25tZW50LCBidXQgdGhlIG92ZXJhbGwgZXhlY3V0aW9uIGZsb3cgcmVtYWlucyB0aGUgc2FtZTsgaXQncyBqdXN0IGRpZmZlcmVudCBhcmd1bWVudHMgdG8gYG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2VgLiBUaGUgaW1wYWN0IGlzIG5lZ2xpZ2libGUuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgdmVyZGljdCBpczogdGhpcyBwYXRjaCBpcyAqKm5vdCB3b3J0aCBmdXp6aW5nKiouIEknbGwgZG9jdW1lbnQgbXkgcmVhc29uaW5nIGNsZWFybHk6IGFsbCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBgX19pbml0YCwgc28gdGhleSBvbmx5IGV4ZWN1dGUgb25jZSBkdXJpbmcgYm9vdCBhbmQgYXJlIHRoZXJlZm9yZSB1bnJlYWNoYWJsZSBmb3IgdXNlci1zcGFjZSBmdXp6aW5nLiBBbmQsIHRoZSBjaGFuZ2UgaXMganVzdCBhbiBhZGp1c3RtZW50IHRvIGFuIGFsaWdubWVudCBjb25zdGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM0NSwiT3V0cHV0VG9rZW5zIjoxMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjA6NDI6MDMuODM1ODA0MDM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIChraG9fcmVzZXJ2ZV9zY3JhdGNoLCBzY3JhdGNoX3NpemVfdXBkYXRlLCBzY3JhdGNoX3NpemVfbm9kZSkgd2hpY2ggYXJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgb25seSBhbHRlciBhbiBhbGlnbm1lbnQgY29uc3RhbnQgcGFzc2VkIHRvIG1lbWJsb2NrIGFsbG9jYXRvcnMsIHdoaWNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYSB3YXkgdGhhdCBjYW4gYmUgZnV6emVkIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIChraG9fcmVzZXJ2ZV9zY3JhdGNoLCBzY3JhdGNoX3NpemVfdXBkYXRlLCBzY3JhdGNoX3NpemVfbm9kZSkgd2hpY2ggYXJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgb25seSBhbHRlciBhbiBhbGlnbm1lbnQgY29uc3RhbnQgcGFzc2VkIHRvIG1lbWJsb2NrIGFsbG9jYXRvcnMsIHdoaWNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYSB3YXkgdGhhdCBjYW4gYmUgZnV6emVkIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgtsrz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-17 20:17:10 +0000 UTC FinishedAt: 2026-07-17 20:42:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIwOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgX19pbml0IGZ1bmN0aW9ucyAoa2hvX3Jlc2VydmVfc2NyYXRjaCwgc2NyYXRjaF9zaXplX3VwZGF0ZSwgc2NyYXRjaF9zaXplX25vZGUpIHdoaWNoIGFyZSBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGtlcm5lbCBib290IGFuZCB0aGVuIGRpc2NhcmRlZC4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYW4gYWxpZ25tZW50IGNvbnN0YW50IHBhc3NlZCB0byBtZW1ibG9jayBhbGxvY2F0b3JzLCB3aGljaCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgY2FuIGJlIGZ1enplZCBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZDQ1NzNmOWQ5MTJlY2U2NTlmZmEwMTU5ODI0YzhhMzBmYjVhMWRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMjA6NDE6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbmluZGV4IDQ4MzRhODA5OTg1YWI3Li4xNzVjMDhhNmU0MWUzZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbkBAIC0zOCw2ICYjNDM7MzgsMTYgQEBcbiAjaW5jbHVkZSBcJiMzNDsuLi9rZXhlY19pbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7a2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaFwmIzM0O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIGlzIHRoZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBkZWZlcnJlZCBzdHJ1Y3QgcGFnZSBpbml0LlxuJiM0MzsgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3NcbiYjNDM7ICogYXQgdGhlIG5laWdoYm9yaW5nIHBhZ2VzICh1cCB0byBNQVhfUEFHRV9PUkRFUikgdG8gbWVyZ2UgdGhlbS5cbiYjNDM7ICogSWYgS0hPIHNjcmF0Y2ggaXMgbm90IGFsaWduZWQgdG8gdGhhdCB2YWx1ZSwgYnVkZHkgY2FuIGFjY2VzcyB1bmluaXRpYWxpemVkXG4mIzQzOyAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIChQQUdFX1NJWkUgKiBNQVhfT1JERVJfTlJfUEFHRVMpXG4mIzQzO3N0YXRpY19hc3NlcnQoU0NSQVRDSF9BTElHTk1FTlRfQllURVMgXHUwMDNlPSBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4mIzQzO1xuIC8qIFRoZSBtYWdpYyB0b2tlbiBmb3IgcHJlc2VydmVkIHBhZ2VzICovXG4gI2RlZmluZSBLSE9fUEFHRV9NQUdJQyAweDRiNDg0ZjUwVSAvKiBBU0NJSSBmb3IgJiMzOTtLSE9QJiMzOTsgKi9cbiBcbkBAIC02NDAsOCAmIzQzOzY1MCw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzY3JhdGNoX3NpemVfdXBkYXRlKHZvaWQpXG4gXHQgKiBTY3JhdGNoIGFyZWFzIGFyZSByZWxlYXNlZCBhcyBNSUdSQVRFX0NNQS4gUm91bmQgdGhlbSB1cCB0byB0aGUgcmlnaHRcbiBcdCAqIHNpemUuXG4gXHQgKi9cbi1cdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSByb3VuZF91cChzY3JhdGNoX3NpemVfbG93bWVtLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4tXHRzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuJiM0MztcdHNjcmF0Y2hfc2l6ZV9sb3dtZW0gPSByb3VuZF91cChzY3JhdGNoX3NpemVfbG93bWVtLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4mIzQzO1x0c2NyYXRjaF9zaXplX2dsb2JhbCA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9nbG9iYWwsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTtcbiB9XG4gXG4gc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuQEAgLTY1Niw3ICYjNDM7NjY2LDcgQEAgc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuIFx0XHRzaXplID0gc2NyYXRjaF9zaXplX3Blcm5vZGU7XG4gXHR9XG4gXG4tXHRyZXR1cm4gcm91bmRfdXAoc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuJiM0MztcdHJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4gfVxuIFxuIC8qKlxuQEAgLTY5Miw3ICYjNDM7NzAyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdCAqIG5leHQga2VybmVsXG4gXHQgKi9cbiBcdHNpemUgPSBzY3JhdGNoX3NpemVfbG93bWVtO1xuLVx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMsIDAsXG4mIzQzO1x0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsIDAsXG4gXHRcdFx0XHRcdCBBUkNIX0xPV19BRERSRVNTX0xJTUlUKTtcbiBcdGlmICghYWRkcikge1xuIFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgbG93bWVtIHNjcmF0Y2ggYnVmZmVyXFxuXCYjMzQ7KTtcbkBAIC03MDUsNyAmIzQzOzcxNSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gXG4gXHQvKiByZXNlcnZlIGxhcmdlIGNvbnRpZ3VvdXMgYXJlYSBmb3IgYWxsb2NhdGlvbnMgd2l0aG91dCBuaWQgKi9cbiBcdHNpemUgPSBzY3JhdGNoX3NpemVfZ2xvYmFsO1xuLVx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpO1xuJiM0MztcdGFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTtcbiBcdGlmICghYWRkcikge1xuIFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgZ2xvYmFsIHNjcmF0Y2ggYnVmZmVyXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBlcnJfZnJlZV9zY3JhdGNoX2FyZWFzO1xuQEAgLTcyMSw3ICYjNDM7NzMxLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdCAqL1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG4gXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuLVx0XHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTLFxuJiM0MztcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbiBcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4gXHRcdGlmICghYWRkcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIwOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgX19pbml0IGZ1bmN0aW9ucyAoa2hvX3Jlc2VydmVfc2NyYXRjaCwgc2NyYXRjaF9zaXplX3VwZGF0ZSwgc2NyYXRjaF9zaXplX25vZGUpIHdoaWNoIGFyZSBleGVjdXRlZCBleGFjdGx5IG9uY2UgZHVyaW5nIGtlcm5lbCBib290IGFuZCB0aGVuIGRpc2NhcmRlZC4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2VzIG9ubHkgYWx0ZXIgYW4gYWxpZ25tZW50IGNvbnN0YW50IHBhc3NlZCB0byBtZW1ibG9jayBhbGxvY2F0b3JzLCB3aGljaCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgY2FuIGJlIGZ1enplZCBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkNDU3M2Y5ZDkxMmVjZTY1OWZmYTAxNTk4MjRjOGEzMGZiNWExZGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxNyAyMDo0MTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCmluZGV4IDQ4MzRhODA5OTg1YWI3Li4xNzVjMDhhNmU0MWUzZiAxMDA2NDQKLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCkBAIC0zOCw2ICYjNDM7MzgsMTYgQEAKICNpbmNsdWRlICYjMzQ7Li4va2V4ZWNfaW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgmIzM0OwogCiYjNDM7LyoKJiM0MzsgKiBUaGlzIGlzIHRoZSBtaW5pbWFsIGFsaWdubWVudCByZXF1aXJlZCBieSBkZWZlcnJlZCBzdHJ1Y3QgcGFnZSBpbml0LgomIzQzOyAqIGRlZmVycmVkX2luaXRfbWVtbWFwX2NodW5rIGZyZWVzIG1lbW9yeSB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLCB3aGljaCBsb29rcwomIzQzOyAqIGF0IHRoZSBuZWlnaGJvcmluZyBwYWdlcyAodXAgdG8gTUFYX1BBR0VfT1JERVIpIHRvIG1lcmdlIHRoZW0uCiYjNDM7ICogSWYgS0hPIHNjcmF0Y2ggaXMgbm90IGFsaWduZWQgdG8gdGhhdCB2YWx1ZSwgYnVkZHkgY2FuIGFjY2VzcyB1bmluaXRpYWxpemVkCiYjNDM7ICogc3RydWN0IHBhZ2VzLCB3aGljaCBjYW4gY2F1c2UgYSBjcmFzaC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIChQQUdFX1NJWkUgKiBNQVhfT1JERVJfTlJfUEFHRVMpCiYjNDM7c3RhdGljX2Fzc2VydChTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyAmZ3Q7PSBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7CiYjNDM7CiAvKiBUaGUgbWFnaWMgdG9rZW4gZm9yIHByZXNlcnZlZCBwYWdlcyAqLwogI2RlZmluZSBLSE9fUEFHRV9NQUdJQyAweDRiNDg0ZjUwVSAvKiBBU0NJSSBmb3IgJiMzOTtLSE9QJiMzOTsgKi8KIApAQCAtNjQwLDggJiM0Mzs2NTAsOCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2NyYXRjaF9zaXplX3VwZGF0ZSh2b2lkKQogCSAqIFNjcmF0Y2ggYXJlYXMgYXJlIHJlbGVhc2VkIGFzIE1JR1JBVEVfQ01BLiBSb3VuZCB0aGVtIHVwIHRvIHRoZSByaWdodAogCSAqIHNpemUuCiAJICovCi0Jc2NyYXRjaF9zaXplX2xvd21lbSA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9sb3dtZW0sIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTsKLQlzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpOwomIzQzOwlzY3JhdGNoX3NpemVfbG93bWVtID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2xvd21lbSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpOwomIzQzOwlzY3JhdGNoX3NpemVfZ2xvYmFsID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2dsb2JhbCwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpOwogfQogCiBzdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IHNjcmF0Y2hfc2l6ZV9ub2RlKGludCBuaWQpCkBAIC02NTYsNyAmIzQzOzY2Niw3IEBAIHN0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgc2NyYXRjaF9zaXplX25vZGUoaW50IG5pZCkKIAkJc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9wZXJub2RlOwogCX0KIAotCXJldHVybiByb3VuZF91cChzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7CiYjNDM7CXJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7CiB9CiAKIC8qKgpAQCAtNjkyLDcgJiM0Mzs3MDIsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKQogCSAqIG5leHQga2VybmVsCiAJICovCiAJc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9sb3dtZW07Ci0JYWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMsIDAsCiYjNDM7CWFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jX3JhbmdlKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTLCAwLAogCQkJCQkgQVJDSF9MT1dfQUREUkVTU19MSU1JVCk7CiAJaWYgKCFhZGRyKSB7CiAJCXByX2VycigmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGxvd21lbSBzY3JhdGNoIGJ1ZmZlclxuJiMzNDspOwpAQCAtNzA1LDcgJiM0Mzs3MTUsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKQogCiAJLyogcmVzZXJ2ZSBsYXJnZSBjb250aWd1b3VzIGFyZWEgZm9yIGFsbG9jYXRpb25zIHdpdGhvdXQgbmlkICovCiAJc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7Ci0JYWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMpOwomIzQzOwlhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7CiAJaWYgKCFhZGRyKSB7CiAJCXByX2VycigmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGdsb2JhbCBzY3JhdGNoIGJ1ZmZlclxuJiMzNDspOwogCQlnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7CkBAIC03MjEsNyAmIzQzOzczMSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpCiAJICovCiAJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7CiAJCXNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpOwotCQlhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTLAomIzQzOwkJYWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywKIAkJCQkJCTAsIE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUsCiAJCQkJCQluaWQsIHRydWUpOwogCQlpZiAoIWFkZHIpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTGl2ZSBVcGRhdGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIGNoYW5nZSBpbiBzY3JhdGNoIGFyZWEgYWxpZ25tZW50LiBUaGV5JiMzOTtyZSBnb2luZyBmcm9tIGBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFU2AgdG8gYFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTYCwgYW5kIHRoYXQmIzM5O3MgZGVmaW5lZCBhcyBgKFBBR0VfU0laRSAqIE1BWF9PUkRFUl9OUl9QQUdFUylgLiBIbW0sIHRoaXMgaXMgS0hPLXJlbGF0ZWQsIGtleGVjIGhhbmRvdmVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUgYW5kIGlmIGl0JiMzOTtzIGV2ZW4gd29ydGggY29uc2lkZXJpbmcgZm9yIGZ1enppbmcuIFNlZW1zIGxpa2UgaXQgbWlnaHQgaW52b2x2ZSBzb21lIGNvbXBsZXggc3RhdGUgY2hhbmdlcy4KCkxldCYjMzk7cyBsb2NhdGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBhbmQgYHNjcmF0Y2hfc2l6ZV91cGRhdGVgLiBPbmNlIEkmIzM5O3ZlIGZvdW5kIHRob3NlLCBJIGNhbiBzdGFydCBtYXBwaW5nIHRoZSBjYWxsIGdyYXBoIGFuZCByZWFzb25pbmcgYWJvdXQgdGhlIGlucHV0IGNvbmRpdGlvbnMuIEkgd29uZGVyIHdoYXQgc2NlbmFyaW9zIHRyaWdnZXIgS0hPIGFuZCBpZiB0aGlzIGFsaWdubWVudCBjaGFuZ2UgaGFzIGFueSBpbXBsaWNhdGlvbnMgZm9yIHRob3NlLiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3Jlc2VydmVfc2NyYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz02NTc9c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjcyLS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2NzM6ICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjc0LSAqXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02ODAtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY4MTpzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02ODIte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTYzMj12b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXQodm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE2MzktXHR9IGVsc2Uge1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxNjQwOlx0XHRraG9fcmVzZXJ2ZV9zY3JhdGNoKCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE2NDEtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoIG9mIGBraG9fbWVtb3J5X2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBraG9fbWVtb3J5YCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCBldmVyeSBjYWxsIHNpdGUgb2YgYGtob19tZW1vcnlfaW5pdGAuIEtub3dpbmcgd2hlcmUgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gaG93IGFuZCB3aGVuIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gaXMgYnJvdWdodCBvbmxpbmUuIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBlYWNoIGxvY2F0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGluaXRpYWxpemF0aW9uLiBBcmUgd2UgZGVhbGluZyB3aXRoIGVhcmx5IGJvb3Qgc3RhZ2VzLCB0aHJlYWQgaW5pdGlhbGl6YXRpb24sIG9yIHBlcmhhcHMgYSBtb3JlIGR5bmFtaWMgYWxsb2NhdGlvbiBzY2hlbWU/IFRoZSBjYWxsaW5nIGNvbnRleHQgcHJvdmlkZXMga2V5IGluc2lnaHRzIGludG8gdGhlIGRlc2lnbiBwaGlsb3NvcGh5IG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19tZW1vcnlfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Mzc9aW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM4LVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjM5OnZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQwLVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0xMDc9c3RhdGljIGlubGluZSBpbnQga2hvX3JldHJpZXZlX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgcGh5c19hZGRyX3QgKnBoeXMsXG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTExMi1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoxMTM6c3RhdGljIGlubGluZSB2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMTQtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xNjMwPWZzX2luaXRjYWxsKGtob19pbml0KTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTYzMS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTYzMjp2b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXQodm9pZClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTYzMy17XG4tLVxubW0vbW1faW5pdC5jPTI2OTU9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTI3MTktXHQgKi9cbm1tL21tX2luaXQuYzoyNzIwOlx0a2hvX21lbW9yeV9pbml0KCk7XG5tbS9tbV9pbml0LmMtMjcyMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTI2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQm9vdC1UaW1lIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIGBraG9fbWVtb3J5X2luaXRgIGdldHMgY2FsbGVkIHByZXR0eSBlYXJseSwgcmlnaHQgZnJvbSBgbW1fY29yZV9pbml0YCwgd2hpY2ggaXRzZWxmIGtpY2tzIG9mZiBkdXJpbmcgYm9vdC4gUmlnaHQsIGFuZCB0aGlzIHBhdGNoLi4uIGl0JiMzOTtzIHR3ZWFraW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbGlnbm1lbnQgZm9yIEtITyBzY3JhdGNoIG1lbW9yeSBkdXJpbmcgdGhhdCBib290LXVwIHBoYXNlLiBIbW0sIGlzIHRoaXMgZXZlbiBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nPyBUaGlzIGlzIGEgYm9vdC10aW1lIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZnJvbSBhIHVzZXJsYW5kIHBlcnNwZWN0aXZlLCBmdXp6aW5nIHRoYXQgaXMuLi4gdHJpY2t5LiBJIGNhbiYjMzk7dCB0aGluayBvZiBhIGRpcmVjdCB3YXksIHVubGVzcyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBrZXhlYyBoYW5kb2ZmcyDigJMgY291bGQgd2Ugc29tZWhvdyBjb250cm9sIHRoZSBwYXJhbWV0ZXJzIGR1cmluZyBhIGtleGVjIGFuZCBtYXliZSB0cmlnZ2VyIHNvbWV0aGluZyBpbnRlcmVzdGluZz8gTGV0JiMzOTtzIG5vdCBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzLiBGaXJzdCBzdGVwLCBsZXQgbWUgY2hlY2sgdGhlIGNvbmZpZ3MuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3Rpbmcgc2V0dGluZ3MgdGhlcmUgdGhhdCBjb3VsZCBvcGVuIHVwIGEgcGF0aCBJJiMzOTttIG5vdCBzZWVpbmcgaW1tZWRpYXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtFWEVDX0hBTkRPVkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL0tjb25maWc9Mz1tZW51IFwmIzM0O0xpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclwmIzM0O1xua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy00LVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlclwmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjE4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR1xua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEtleGVjIEhhbmRvdmVyIGRlYnVnIGNoZWNrc1wmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMjYtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjI3OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlciBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDYzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGtleGVjX2hhbmRvdmVyLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIEl0JiMzOTtzIHR3ZWFraW5nIHRoZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAgZnVuY3Rpb24sIHdoaWNoLCBpZiBJIHJlY2FsbCwgaXMgYSBib290LXRpbWUgaW5pdGlhbGl6YXRpb24gdGhpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIG1lbW9yeSBhbGlnbm1lbnQgZnJvbSBgQ01BX01JTl9BTElHTk1FTlRfQllURVNgIHRvIGBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFU2AuIEhtbSwgZnVuY3Rpb25hbGx5IHRoaXMgaXMgYSByZWFsIGNoYW5nZSwgYXMgaW4sIGl0JiMzOTtzIGFjdHVhbGx5IGFsdGVyaW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGR1cmluZyBib290LCBmaXhpbmcgYSBwb3RlbnRpYWwgY3Jhc2ggcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWdlcy4KCkJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgdXN1YWwgU3l6a2FsbGVyIGFwcHJvYWNoIGRvZXNuJiMzOTt0IGRvIGEgZ3JlYXQgam9iIHdpdGggYm9vdC10aW1lIHN0dWZmLiBJIG1lYW4sIHdlICpjb3VsZCogZnV6eiBpdCwgYnV0IHRoYXQmIzM5O3Mgbm90IGl0cyBzdHJvbmcgc3VpdC4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgcHJvbXB0IGd1aWRlbGluZXMuIFJpZ2h0LCB0aGUgcHJvbXB0IHNheXMsIGRvbiYjMzk7dCByZXR1cm4gJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGlmIGl0JiMzOTtzIGNoYW5naW5nIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0ICpkb24mIzM5O3QqIGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuIFRoaXMgKmlzKiBjaGFuZ2luZyBhIG1hY3JvLCBidXQgaXTigJlzIGFuIGFsaWdubWVudCByZXF1aXJlbWVudCwgd2hpY2ggaGFzIGRpcmVjdCBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucy4gSXQgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbi4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1Byb2JhYmx5IG5vdCB3b3J0aCBpdC4mIzM0OyBCb290LXRpbWUgYWxsb2NhdGlvbiBjaGFuZ2VzIGFyZW4mIzM5O3QgU3l6a2FsbGVyJiMzOTtzIHR5cGljYWwgdGFyZ2V0LiBIb3dldmVyLCBga2hvX3Jlc2VydmVfc2NyYXRjaGAgaXMgbGlrZWx5IHRvIGJlIGNhbGxlZCBkdXJpbmcgYm9vdCBhbmQgdGhhdCBtaWdodCBoYXZlIGludGVyYWN0aW9ucyBJJiMzOTttIG5vdCBzZWVpbmcgeWV0LiBDb3VsZCB0aGlzIGNoYW5nZSBhZmZlY3Qga2V4ZWMgc29tZWhvdz8gRG9lcyB0aGlzIHRoZW4gb3BlbiB0aGUgcG9zc2liaWxpdHkgb2YgYSBjcmFzaCBJICpjb3VsZCogdHJpZ2dlciBsYXRlcj8gSXMgdGhlcmUgYW55IHVzZXJzcGFjZSBpbnRlcmZhY2UgZm9yIEtITz8gTGV0IG1lIGNoZWNrIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fcmVzZXJ2ZV9zY3JhdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjU3PXN0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQgc2NyYXRjaF9zaXplX25vZGUoaW50IG5pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3Mi0vKipcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NjczOiAqIGtob19yZXNlcnZlX3NjcmF0Y2ggLSBSZXNlcnZlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgZm9yIGtleGVjXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3NC0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjgwLSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2ODE6c3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjgyLXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE2MzI9dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNjM5LVx0fSBlbHNlIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTY0MDpcdFx0a2hvX3Jlc2VydmVfc2NyYXRjaCgpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNjQxLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDg0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gdGhlIGZ1bmN0aW9uIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQgb25seSBydW5zIG9uY2UgYXQgYm9vdCB0aW1lLiBTeXprYWxsZXIsIGluIGl0cyBzdGFuZGFyZCBvcGVyYXRpb24sIGZ1enpleiBzeXN0ZW0gY2FsbHMgYW5kIHVzZXItc3BhY2UgaW50ZXJmYWNlcyAqYWZ0ZXIqIHRoZSBzeXN0ZW0gaGFzIGJvb3RlZC4gVGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBhIGNoYW5nZSB0byBhbiBgX19pbml0YCBmdW5jdGlvbiwgZXNwZWNpYWxseSBvbmUgY29uY2VybmluZyBzb21ldGhpbmcgYXMgZ3JhbnVsYXIgYXMgYW4gYWxpZ25tZW50IHBhcmFtZXRlciBmb3IgYG1lbWJsb2NrX2FsbG9jYCwgaXMgYWxtb3N0IGNlcnRhaW5seSBvdXRzaWRlIHRoZSBzY29wZSBvZiB3aGF0IFN5emthbGxlciBjYW4gbWVhbmluZ2Z1bGx5IGZ1enogaW4gaXRzIHR5cGljYWwgbW9kZSBvZiBvcGVyYXRpb24uCgpDb3VsZCBJIHRyaWdnZXIgdGhpcyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGtleGVjPyBObywgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gd29yaywgYF9faW5pdGAgZnVuY3Rpb25zIGFyZSBmcmVlZCB1cCBhZnRlciB0aGUgaW5pdGlhbCBib290IHByb2Nlc3MuCgpTbywgc2luY2UgaXQmIzM5O3MgYW4gYF9faW5pdGAgZnVuY3Rpb24sIGl0JiMzOTtzIGRlZmluaXRpdmVseSB1bnJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIGZ1enppbmcuIFdhaXQsIEkgc2hvdWxkIGRvdWJsZSBjaGVjazogdGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gY2hlY2sgaWYgaXQgbW9kaWZpZXMgJiMzNDtyZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMmIzM0Oy4gSXMgaXQgcmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nPyBObywgaXQmIzM5O3MgYF9faW5pdGAuIEhvd2V2ZXIsIHN5emthbGxlciBib290cyB0aGUga2VybmVsIGZvciBlYWNoIFZNLCBzbyB0aGUgY29kZSAqaXMqIGV4ZWN1dGVkIGR1cmluZyBib290LiBCdXQgZnV6emluZyBkb2VzbiYjMzk7dCB0YXJnZXQgYm9vdCBjb2RlLgoKTGV0JiMzOTtzIGNoZWNrIGZvciBhbnkgb3RoZXIgY29kZSBjaGFuZ2VzIHRvIGRldGVybWluZSBpZiBpdCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggb25seSBjaGFuZ2VzIGBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFU2AgYW5kIHVzZXMgaXQgaW4gYHNjcmF0Y2hfc2l6ZV91cGRhdGVgLCBgc2NyYXRjaF9zaXplX25vZGVgLCBhbmQgYGtob19yZXNlcnZlX3NjcmF0Y2hgLiBPa2F5LCByaWdodCwgYWxsIG9mIHRoZXNlIGFyZSBhbHNvIGBfX2luaXRgIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIGFsbCB0aG9zZSBmdW5jdGlvbnMgYXJlIGBfX2luaXRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3JhdGNoX3NpemVfdXBkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjI3PWVhcmx5X3BhcmFtKFwmIzM0O2tob19zY3JhdGNoXCYjMzQ7LCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjI4LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2Mjk6c3RhdGljIHZvaWQgX19pbml0IHNjcmF0Y2hfc2l6ZV91cGRhdGUodm9pZClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjMwLXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTY4MT1zdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjg4LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2ODk6XHRzY3JhdGNoX3NpemVfdXBkYXRlKCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY5MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0NQoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gUmlnaHQsIHRoZSBtb2RpZmljYXRpb25zIGFyZSBhbGwgY2VudGVyZWQgYXJvdW5kIGBfX2luaXRgIGZ1bmN0aW9uczogYF9faW5pdGAsIGBzY3JhdGNoX3NpemVfdXBkYXRlYCwgYHNjcmF0Y2hfc2l6ZV9ub2RlYCwgYW5kIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYC4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZy4gVGhlc2UgYXJlIGV4ZWN1dGVkIG9ubHkgb25jZSwgZHVyaW5nIGJvb3QsIGFuZCB0aGVuLCBlZmZlY3RpdmVseSwgZGlzY2FyZGVkLiBNeSBpbnR1aXRpb24gc2NyZWFtcyAmIzM0O3VuZnV6emFibGUmIzM0OyBhdCB0aGlzIHBvaW50LCBiZWNhdXNlIFN5emthbGxlciBjYW4mIzM5O3QgZ2VuZXJhdGUgaW5wdXRzIGZvciB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnMgYWZ0ZXIgdGhlIGluaXRpYWwgYm9vdCBwaGFzZSwgcmlnaHQ/IFRoZSBpbnB1dHMsIHN1Y2ggYXMgdGhlIGBraG9fc2NyYXRjaGAga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIsIGFyZSBmaXhlZCBmb3IgdGhlIGVudGlyZSBmdXp6aW5nIHNlc3Npb24uCgpIb2xkIG9uLCB0aG91Z2guLi4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgbGltaXRlZCBjYXBhYmlsaXRpZXMgZm9yIGZ1enppbmcga2VybmVsIGNvbW1hbmQgbGluZXMsIGRvZXNuJiMzOTt0IGl0PyBCdXQsIHdlIHR5cGljYWxseSBkb24mIzM5O3QgY29uc2lkZXIgYF9faW5pdGAgZnVuY3Rpb25zIHRhcmdldHMsIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHJlYXNvbiB0byBkbyBzby4gSW4gdGhpcyBjYXNlLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBhbnN3ZXIgaXMgbm8uIFRoaXMgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIHRoZSBjYXNlLiBJdCBpcyB1bmxpa2VseSB0aGF0IFN5emthbGxlciB3aWxsIGNvbnNpZGVyIHRoaXMgcGF0Y2ggb2YgYW55IHZhbHVlLgoKQW5kLCBpZiB0aGF0JiMzOTtzIG5vdCBlbm91Z2gsIHRoaXMgcGF0Y2ggaXMgb25seSBjaGFuZ2luZyBhbiBhbGlnbm1lbnQgY29uc3RhbnQuIEl0JiMzOTtzIGEgJiMzNDtDaGFuZ2UgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdyYjMzQ7LiBXZWxsLCBpdCAqZG9lcyogYWx0ZXIgdGhlIGFsaWdubWVudCwgYnV0IHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBmbG93IHJlbWFpbnMgdGhlIHNhbWU7IGl0JiMzOTtzIGp1c3QgZGlmZmVyZW50IGFyZ3VtZW50cyB0byBgbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZWAuIFRoZSBpbXBhY3QgaXMgbmVnbGlnaWJsZS4KClRoZXJlZm9yZSwgbXkgZmluYWwgdmVyZGljdCBpczogdGhpcyBwYXRjaCBpcyAqKm5vdCB3b3J0aCBmdXp6aW5nKiouIEkmIzM5O2xsIGRvY3VtZW50IG15IHJlYXNvbmluZyBjbGVhcmx5OiBhbGwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYF9faW5pdGAsIHNvIHRoZXkgb25seSBleGVjdXRlIG9uY2UgZHVyaW5nIGJvb3QgYW5kIGFyZSB0aGVyZWZvcmUgdW5yZWFjaGFibGUgZm9yIHVzZXItc3BhY2UgZnV6emluZy4gQW5kLCB0aGUgY2hhbmdlIGlzIGp1c3QgYW4gYWRqdXN0bWVudCB0byBhbiBhbGlnbm1lbnQgY29uc3RhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIChraG9fcmVzZXJ2ZV9zY3JhdGNoLCBzY3JhdGNoX3NpemVfdXBkYXRlLCBzY3JhdGNoX3NpemVfbm9kZSkgd2hpY2ggYXJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgb25seSBhbHRlciBhbiBhbGlnbm1lbnQgY29uc3RhbnQgcGFzc2VkIHRvIG1lbWJsb2NrIGFsbG9jYXRvcnMsIHdoaWNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYSB3YXkgdGhhdCBjYW4gYmUgZnV6emVkIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIChraG9fcmVzZXJ2ZV9zY3JhdGNoLCBzY3JhdGNoX3NpemVfdXBkYXRlLCBzY3JhdGNoX3NpemVfbm9kZSkgd2hpY2ggYXJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgb25seSBhbHRlciBhbiBhbGlnbm1lbnQgY29uc3RhbnQgcGFzc2VkIHRvIG1lbWJsb2NrIGFsbG9jYXRvcnMsIHdoaWNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYSB3YXkgdGhhdCBjYW4gYmUgZnV6emVkIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjAyLjI3MTgzNzkzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTY0MDA2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIF9faW5pdCBmdW5jdGlvbnMgKGtob19yZXNlcnZlX3NjcmF0Y2gsIHNjcmF0Y2hfc2l6ZV91cGRhdGUsIHNjcmF0Y2hfc2l6ZV9ub2RlKSB3aGljaCBhcmUgZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdCBhbmQgdGhlbiBkaXNjYXJkZWQuIEZ1cnRoZXJtb3JlLCB0aGUgY2hhbmdlcyBvbmx5IGFsdGVyIGFuIGFsaWdubWVudCBjb25zdGFudCBwYXNzZWQgdG8gbWVtYmxvY2sgYWxsb2NhdG9ycywgd2hpY2ggZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IGNhbiBiZSBmdXp6ZWQgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMDo0MTowMi4yNzE4NjQ3MDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTcxNDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRkNDU3M2Y5ZDkxMmVjZTY1OWZmYTAxNTk4MjRjOGEzMGZiNWExZGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTcgMjA6NDE6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG5pbmRleCA0ODM0YTgwOTk4NWFiNy4uMTc1YzA4YTZlNDFlM2YgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG5AQCAtMzgsNiArMzgsMTYgQEBcXG4gI2luY2x1ZGUgXFxcIi4uL2tleGVjX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJrZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oXFxcIlxcbiBcXG4rLypcXG4rICogVGhpcyBpcyB0aGUgbWluaW1hbCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgZGVmZXJyZWQgc3RydWN0IHBhZ2UgaW5pdC5cXG4rICogZGVmZXJyZWRfaW5pdF9tZW1tYXBfY2h1bmsgZnJlZXMgbWVtb3J5IHRvIHRoZSBidWRkeSBhbGxvY2F0b3IsIHdoaWNoIGxvb2tzXFxuKyAqIGF0IHRoZSBuZWlnaGJvcmluZyBwYWdlcyAodXAgdG8gTUFYX1BBR0VfT1JERVIpIHRvIG1lcmdlIHRoZW0uXFxuKyAqIElmIEtITyBzY3JhdGNoIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZFxcbisgKiBzdHJ1Y3QgcGFnZXMsIHdoaWNoIGNhbiBjYXVzZSBhIGNyYXNoLlxcbisgKi9cXG4rI2RlZmluZSBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyAoUEFHRV9TSVpFICogTUFYX09SREVSX05SX1BBR0VTKVxcbitzdGF0aWNfYXNzZXJ0KFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTIFxcdTAwM2U9IENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4rXFxuIC8qIFRoZSBtYWdpYyB0b2tlbiBmb3IgcHJlc2VydmVkIHBhZ2VzICovXFxuICNkZWZpbmUgS0hPX1BBR0VfTUFHSUMgMHg0YjQ4NGY1MFUgLyogQVNDSUkgZm9yICdLSE9QJyAqL1xcbiBcXG5AQCAtNjQwLDggKzY1MCw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzY3JhdGNoX3NpemVfdXBkYXRlKHZvaWQpXFxuIFxcdCAqIFNjcmF0Y2ggYXJlYXMgYXJlIHJlbGVhc2VkIGFzIE1JR1JBVEVfQ01BLiBSb3VuZCB0aGVtIHVwIHRvIHRoZSByaWdodFxcbiBcXHQgKiBzaXplLlxcbiBcXHQgKi9cXG4tXFx0c2NyYXRjaF9zaXplX2xvd21lbSA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9sb3dtZW0sIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4tXFx0c2NyYXRjaF9zaXplX2dsb2JhbCA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9nbG9iYWwsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4rXFx0c2NyYXRjaF9zaXplX2xvd21lbSA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9sb3dtZW0sIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTtcXG4rXFx0c2NyYXRjaF9zaXplX2dsb2JhbCA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9nbG9iYWwsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTtcXG4gfVxcbiBcXG4gc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxcbkBAIC02NTYsNyArNjY2LDcgQEAgc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxcbiBcXHRcXHRzaXplID0gc2NyYXRjaF9zaXplX3Blcm5vZGU7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiByb3VuZF91cChzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XFxuK1xcdHJldHVybiByb3VuZF91cChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC02OTIsNyArNzAyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcXG4gXFx0ICogbmV4dCBrZXJuZWxcXG4gXFx0ICovXFxuIFxcdHNpemUgPSBzY3JhdGNoX3NpemVfbG93bWVtO1xcbi1cXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUywgMCxcXG4rXFx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCBBUkNIX0xPV19BRERSRVNTX0xJTUlUKTtcXG4gXFx0aWYgKCFhZGRyKSB7XFxuIFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgbG93bWVtIHNjcmF0Y2ggYnVmZmVyXFxcXG5cXFwiKTtcXG5AQCAtNzA1LDcgKzcxNSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuIFxcbiBcXHQvKiByZXNlcnZlIGxhcmdlIGNvbnRpZ3VvdXMgYXJlYSBmb3IgYWxsb2NhdGlvbnMgd2l0aG91dCBuaWQgKi9cXG4gXFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7XFxuLVxcdGFkZHIgPSBtZW1ibG9ja19waHlzX2FsbG9jKHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcXG4rXFx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xcbiBcXHRpZiAoIWFkZHIpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBnbG9iYWwgc2NyYXRjaCBidWZmZXJcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7XFxuQEAgLTcyMSw3ICs3MzEsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxcbiBcXHQgKi9cXG4gXFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XFxuIFxcdFxcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xcbi1cXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTLFxcbitcXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRuaWQsIHRydWUpO1xcbiBcXHRcXHRpZiAoIWFkZHIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjA6NDE6MDMuMDM4NTUyODg3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDc5NzI4MDg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIChraG9fcmVzZXJ2ZV9zY3JhdGNoLCBzY3JhdGNoX3NpemVfdXBkYXRlLCBzY3JhdGNoX3NpemVfbm9kZSkgd2hpY2ggYXJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgb25seSBhbHRlciBhbiBhbGlnbm1lbnQgY29uc3RhbnQgcGFzc2VkIHRvIG1lbWJsb2NrIGFsbG9jYXRvcnMsIHdoaWNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYSB3YXkgdGhhdCBjYW4gYmUgZnV6emVkIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZDQ1NzNmOWQ5MTJlY2U2NTlmZmEwMTU5ODI0YzhhMzBmYjVhMWRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMjA6NDE6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuaW5kZXggNDgzNGE4MDk5ODVhYjcuLjE3NWMwOGE2ZTQxZTNmIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTM4LDYgKzM4LDE2IEBAXG4gI2luY2x1ZGUgXCIuLi9rZXhlY19pbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcImtleGVjX2hhbmRvdmVyX2ludGVybmFsLmhcIlxuIFxuKy8qXG4rICogVGhpcyBpcyB0aGUgbWluaW1hbCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgZGVmZXJyZWQgc3RydWN0IHBhZ2UgaW5pdC5cbisgKiBkZWZlcnJlZF9pbml0X21lbW1hcF9jaHVuayBmcmVlcyBtZW1vcnkgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvciwgd2hpY2ggbG9va3NcbisgKiBhdCB0aGUgbmVpZ2hib3JpbmcgcGFnZXMgKHVwIHRvIE1BWF9QQUdFX09SREVSKSB0byBtZXJnZSB0aGVtLlxuKyAqIElmIEtITyBzY3JhdGNoIGlzIG5vdCBhbGlnbmVkIHRvIHRoYXQgdmFsdWUsIGJ1ZGR5IGNhbiBhY2Nlc3MgdW5pbml0aWFsaXplZFxuKyAqIHN0cnVjdCBwYWdlcywgd2hpY2ggY2FuIGNhdXNlIGEgY3Jhc2guXG4rICovXG4rI2RlZmluZSBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyAoUEFHRV9TSVpFICogTUFYX09SREVSX05SX1BBR0VTKVxuK3N0YXRpY19hc3NlcnQoU0NSQVRDSF9BTElHTk1FTlRfQllURVMgXHUwMDNlPSBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4rXG4gLyogVGhlIG1hZ2ljIHRva2VuIGZvciBwcmVzZXJ2ZWQgcGFnZXMgKi9cbiAjZGVmaW5lIEtIT19QQUdFX01BR0lDIDB4NGI0ODRmNTBVIC8qIEFTQ0lJIGZvciAnS0hPUCcgKi9cbiBcbkBAIC02NDAsOCArNjUwLDggQEAgc3RhdGljIHZvaWQgX19pbml0IHNjcmF0Y2hfc2l6ZV91cGRhdGUodm9pZClcbiBcdCAqIFNjcmF0Y2ggYXJlYXMgYXJlIHJlbGVhc2VkIGFzIE1JR1JBVEVfQ01BLiBSb3VuZCB0aGVtIHVwIHRvIHRoZSByaWdodFxuIFx0ICogc2l6ZS5cbiBcdCAqL1xuLVx0c2NyYXRjaF9zaXplX2xvd21lbSA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9sb3dtZW0sIENNQV9NSU5fQUxJR05NRU5UX0JZVEVTKTtcbi1cdHNjcmF0Y2hfc2l6ZV9nbG9iYWwgPSByb3VuZF91cChzY3JhdGNoX3NpemVfZ2xvYmFsLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4rXHRzY3JhdGNoX3NpemVfbG93bWVtID0gcm91bmRfdXAoc2NyYXRjaF9zaXplX2xvd21lbSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xuK1x0c2NyYXRjaF9zaXplX2dsb2JhbCA9IHJvdW5kX3VwKHNjcmF0Y2hfc2l6ZV9nbG9iYWwsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTKTtcbiB9XG4gXG4gc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuQEAgLTY1Niw3ICs2NjYsNyBAQCBzdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IHNjcmF0Y2hfc2l6ZV9ub2RlKGludCBuaWQpXG4gXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfcGVybm9kZTtcbiBcdH1cbiBcbi1cdHJldHVybiByb3VuZF91cChzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4rXHRyZXR1cm4gcm91bmRfdXAoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xuIH1cbiBcbiAvKipcbkBAIC02OTIsNyArNzAyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdCAqIG5leHQga2VybmVsXG4gXHQgKi9cbiBcdHNpemUgPSBzY3JhdGNoX3NpemVfbG93bWVtO1xuLVx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgQ01BX01JTl9BTElHTk1FTlRfQllURVMsIDAsXG4rXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywgMCxcbiBcdFx0XHRcdFx0IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpO1xuIFx0aWYgKCFhZGRyKSB7XG4gXHRcdHByX2VycihcIkZhaWxlZCB0byByZXNlcnZlIGxvd21lbSBzY3JhdGNoIGJ1ZmZlclxcblwiKTtcbkBAIC03MDUsNyArNzE1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcbiBcdC8qIHJlc2VydmUgbGFyZ2UgY29udGlndW91cyBhcmVhIGZvciBhbGxvY2F0aW9ucyB3aXRob3V0IG5pZCAqL1xuIFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7XG4tXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyk7XG4rXHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4gXHRpZiAoIWFkZHIpIHtcbiBcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIHJlc2VydmUgZ2xvYmFsIHNjcmF0Y2ggYnVmZmVyXFxuXCIpO1xuIFx0XHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7XG5AQCAtNzIxLDcgKzczMSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gXHQgKi9cbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuIFx0XHRzaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTtcbi1cdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFUyxcbitcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbiBcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4gXHRcdGlmICghYWRkcikge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjA6NDE6MDMuMDM4NTU0ODM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg5OTE5ODI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgTGl2ZSBVcGRhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBjaGFuZ2UgaW4gc2NyYXRjaCBhcmVhIGFsaWdubWVudC4gVGhleSdyZSBnb2luZyBmcm9tIGBDTUFfTUlOX0FMSUdOTUVOVF9CWVRFU2AgdG8gYFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTYCwgYW5kIHRoYXQncyBkZWZpbmVkIGFzIGAoUEFHRV9TSVpFICogTUFYX09SREVSX05SX1BBR0VTKWAuIEhtbSwgdGhpcyBpcyBLSE8tcmVsYXRlZCwga2V4ZWMgaGFuZG92ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBhbmQgaWYgaXQncyBldmVuIHdvcnRoIGNvbnNpZGVyaW5nIGZvciBmdXp6aW5nLiBTZWVtcyBsaWtlIGl0IG1pZ2h0IGludm9sdmUgc29tZSBjb21wbGV4IHN0YXRlIGNoYW5nZXMuXG5cbkxldCdzIGxvY2F0ZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgZmlsZSB0byB1bmRlcnN0YW5kIHRoaXMuIEknbGwgbmVlZCB0byBsb29rIGZvciBga2hvX3Jlc2VydmVfc2NyYXRjaGAgYW5kIGBzY3JhdGNoX3NpemVfdXBkYXRlYC4gT25jZSBJJ3ZlIGZvdW5kIHRob3NlLCBJIGNhbiBzdGFydCBtYXBwaW5nIHRoZSBjYWxsIGdyYXBoIGFuZCByZWFzb25pbmcgYWJvdXQgdGhlIGlucHV0IGNvbmRpdGlvbnMuIEkgd29uZGVyIHdoYXQgc2NlbmFyaW9zIHRyaWdnZXIgS0hPIGFuZCBpZiB0aGlzIGFsaWdubWVudCBjaGFuZ2UgaGFzIGFueSBpbXBsaWNhdGlvbnMgZm9yIHRob3NlLiBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMDo0MToxMi45Mzc3NTUxNzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzM0Njc2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fcmVzZXJ2ZV9zY3JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz02NTc9c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NzItLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2NzM6ICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3NC0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02ODAtICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2ODE6c3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY4Mi17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE2MzI9dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE2MzktXFx0fSBlbHNlIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE2NDA6XFx0XFx0a2hvX3Jlc2VydmVfc2NyYXRjaCgpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTY0MS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjE0LjYxMTEwODA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk5MzM0MTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgRXhlY3V0aW9uIFBhdGggb2YgYGtob19tZW1vcnlfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBraG9fbWVtb3J5YCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCBldmVyeSBjYWxsIHNpdGUgb2YgYGtob19tZW1vcnlfaW5pdGAuIEtub3dpbmcgd2hlcmUgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gaG93IGFuZCB3aGVuIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gaXMgYnJvdWdodCBvbmxpbmUuIEknbGwgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGVhY2ggbG9jYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgaW5pdGlhbGl6YXRpb24uIEFyZSB3ZSBkZWFsaW5nIHdpdGggZWFybHkgYm9vdCBzdGFnZXMsIHRocmVhZCBpbml0aWFsaXphdGlvbiwgb3IgcGVyaGFwcyBhIG1vcmUgZHluYW1pYyBhbGxvY2F0aW9uIHNjaGVtZT8gVGhlIGNhbGxpbmcgY29udGV4dCBwcm92aWRlcyBrZXkgaW5zaWdodHMgaW50byB0aGUgZGVzaWduIHBoaWxvc29waHkgb2YgdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNhbGwgZ3JhcGggcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjIyLjYwNDQ1MTI1OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzAxMjIyODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19tZW1vcnlfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Mzc9aW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0zOC1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6Mzk6dm9pZCBraG9fbWVtb3J5X2luaXQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTEwNz1zdGF0aWMgaW5saW5lIGludCBraG9fcmV0cmlldmVfc3VidHJlZShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCAqcGh5cyxcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMTItXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjExMzpzdGF0aWMgaW5saW5lIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpIHsgfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMTQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE2MzA9ZnNfaW5pdGNhbGwoa2hvX2luaXQpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTYzMS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE2MzI6dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNjMzLXtcXG4tLVxcbm1tL21tX2luaXQuYz0yNjk1PXZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTI3MTktXFx0ICovXFxubW0vbW1faW5pdC5jOjI3MjA6XFx0a2hvX21lbW9yeV9pbml0KCk7XFxubW0vbW1faW5pdC5jLTI3MjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjI3LjkwNTY4NDYwNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTE2ODk0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQm9vdC1UaW1lIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gYGtob19tZW1vcnlfaW5pdGAgZ2V0cyBjYWxsZWQgcHJldHR5IGVhcmx5LCByaWdodCBmcm9tIGBtbV9jb3JlX2luaXRgLCB3aGljaCBpdHNlbGYga2lja3Mgb2ZmIGR1cmluZyBib290LiBSaWdodCwgYW5kIHRoaXMgcGF0Y2guLi4gaXQncyB0d2Vha2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYWxpZ25tZW50IGZvciBLSE8gc2NyYXRjaCBtZW1vcnkgZHVyaW5nIHRoYXQgYm9vdC11cCBwaGFzZS4gSG1tLCBpcyB0aGlzIGV2ZW4gYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZz8gVGhpcyBpcyBhIGJvb3QtdGltZSBtZW1vcnkgYWxsb2NhdGlvbiwgYW5kIGZyb20gYSB1c2VybGFuZCBwZXJzcGVjdGl2ZSwgZnV6emluZyB0aGF0IGlzLi4uIHRyaWNreS4gSSBjYW4ndCB0aGluayBvZiBhIGRpcmVjdCB3YXksIHVubGVzcyB3ZSdyZSB0YWxraW5nIGFib3V0IGtleGVjIGhhbmRvZmZzIOKAkyBjb3VsZCB3ZSBzb21laG93IGNvbnRyb2wgdGhlIHBhcmFtZXRlcnMgZHVyaW5nIGEga2V4ZWMgYW5kIG1heWJlIHRyaWdnZXIgc29tZXRoaW5nIGludGVyZXN0aW5nPyBMZXQncyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gRmlyc3Qgc3RlcCwgbGV0IG1lIGNoZWNrIHRoZSBjb25maWdzLiBUaGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHNldHRpbmdzIHRoZXJlIHRoYXQgY291bGQgb3BlbiB1cCBhIHBhdGggSSdtIG5vdCBzZWVpbmcgaW1tZWRpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMDo0MTozMS41MTczNzYxMDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NTY4NTg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS0VYRUNfSEFORE9WRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXFxcIkxpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclxcXCJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzo1OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctNi1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlclxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMTctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzoxODpjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBLZXhlYyBIYW5kb3ZlciBkZWJ1ZyBjaGVja3NcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI2LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTI4LVxcdGJvb2wgXFxcImtleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjM4OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVFxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRW5hYmxlIGtleGVjIGhhbmRvdmVyIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjM2LjUxMzA2NzU0MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMDczNzg5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBga2V4ZWNfaGFuZG92ZXIuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIEl0J3MgdHdlYWtpbmcgdGhlIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBmdW5jdGlvbiwgd2hpY2gsIGlmIEkgcmVjYWxsLCBpcyBhIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiB0aGluZy4gU3BlY2lmaWNhbGx5LCBpdCdzIGNoYW5naW5nIHRoZSBtZW1vcnkgYWxpZ25tZW50IGZyb20gYENNQV9NSU5fQUxJR05NRU5UX0JZVEVTYCB0byBgU0NSQVRDSF9BTElHTk1FTlRfQllURVNgLiBIbW0sIGZ1bmN0aW9uYWxseSB0aGlzIGlzIGEgcmVhbCBjaGFuZ2UsIGFzIGluLCBpdCdzIGFjdHVhbGx5IGFsdGVyaW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGR1cmluZyBib290LCBmaXhpbmcgYSBwb3RlbnRpYWwgY3Jhc2ggcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWdlcy5cblxuQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IFRoZSB1c3VhbCBTeXprYWxsZXIgYXBwcm9hY2ggZG9lc24ndCBkbyBhIGdyZWF0IGpvYiB3aXRoIGJvb3QtdGltZSBzdHVmZi4gSSBtZWFuLCB3ZSAqY291bGQqIGZ1enogaXQsIGJ1dCB0aGF0J3Mgbm90IGl0cyBzdHJvbmcgc3VpdC4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgcHJvbXB0IGd1aWRlbGluZXMuIFJpZ2h0LCB0aGUgcHJvbXB0IHNheXMsIGRvbid0IHJldHVybiBcIldvcnRoRnV6emluZz10cnVlXCIgaWYgaXQncyBjaGFuZ2luZyBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCAqZG9uJ3QqIGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuIFRoaXMgKmlzKiBjaGFuZ2luZyBhIG1hY3JvLCBidXQgaXTigJlzIGFuIGFsaWdubWVudCByZXF1aXJlbWVudCwgd2hpY2ggaGFzIGRpcmVjdCBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucy4gSXQgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbi5cblxuTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiUHJvYmFibHkgbm90IHdvcnRoIGl0LlwiIEJvb3QtdGltZSBhbGxvY2F0aW9uIGNoYW5nZXMgYXJlbid0IFN5emthbGxlcidzIHR5cGljYWwgdGFyZ2V0LiBIb3dldmVyLCBga2hvX3Jlc2VydmVfc2NyYXRjaGAgaXMgbGlrZWx5IHRvIGJlIGNhbGxlZCBkdXJpbmcgYm9vdCBhbmQgdGhhdCBtaWdodCBoYXZlIGludGVyYWN0aW9ucyBJJ20gbm90IHNlZWluZyB5ZXQuIENvdWxkIHRoaXMgY2hhbmdlIGFmZmVjdCBrZXhlYyBzb21laG93PyBEb2VzIHRoaXMgdGhlbiBvcGVuIHRoZSBwb3NzaWJpbGl0eSBvZiBhIGNyYXNoIEkgKmNvdWxkKiB0cmlnZ2VyIGxhdGVyPyBJcyB0aGVyZSBhbnkgdXNlcnNwYWNlIGludGVyZmFjZSBmb3IgS0hPPyBMZXQgbWUgY2hlY2sgZm9yIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjA6NDE6NDIuODIwNDQ4NTQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQzMTk2Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19yZXNlcnZlX3NjcmF0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz02NTc9c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NzItLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2NzM6ICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3NC0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02ODAtICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2ODE6c3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY4Mi17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE2MzI9dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE2MzktXFx0fSBlbHNlIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE2NDA6XFx0XFx0a2hvX3Jlc2VydmVfc2NyYXRjaCgpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTY0MS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjQ2Ljg2MzY1MTE4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjcwOTYyNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgZnVuY3Rpb24gYGtob19yZXNlcnZlX3NjcmF0Y2hgIGlzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCBvbmx5IHJ1bnMgb25jZSBhdCBib290IHRpbWUuIFN5emthbGxlciwgaW4gaXRzIHN0YW5kYXJkIG9wZXJhdGlvbiwgZnV6emV6IHN5c3RlbSBjYWxscyBhbmQgdXNlci1zcGFjZSBpbnRlcmZhY2VzICphZnRlciogdGhlIHN5c3RlbSBoYXMgYm9vdGVkLiBUaGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGEgY2hhbmdlIHRvIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBlc3BlY2lhbGx5IG9uZSBjb25jZXJuaW5nIHNvbWV0aGluZyBhcyBncmFudWxhciBhcyBhbiBhbGlnbm1lbnQgcGFyYW1ldGVyIGZvciBgbWVtYmxvY2tfYWxsb2NgLCBpcyBhbG1vc3QgY2VydGFpbmx5IG91dHNpZGUgdGhlIHNjb3BlIG9mIHdoYXQgU3l6a2FsbGVyIGNhbiBtZWFuaW5nZnVsbHkgZnV6eiBpbiBpdHMgdHlwaWNhbCBtb2RlIG9mIG9wZXJhdGlvbi5cblxuQ291bGQgSSB0cmlnZ2VyIHRoaXMgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBrZXhlYz8gTm8sIHRoYXQncyBub3QgZ29pbmcgdG8gd29yaywgYF9faW5pdGAgZnVuY3Rpb25zIGFyZSBmcmVlZCB1cCBhZnRlciB0aGUgaW5pdGlhbCBib290IHByb2Nlc3MuXG5cblNvLCBzaW5jZSBpdCdzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBpdCdzIGRlZmluaXRpdmVseSB1bnJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIGZ1enppbmcuIFdhaXQsIEkgc2hvdWxkIGRvdWJsZSBjaGVjazogdGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gY2hlY2sgaWYgaXQgbW9kaWZpZXMgXCJyZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXNcIi4gSXMgaXQgcmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nPyBObywgaXQncyBgX19pbml0YC4gSG93ZXZlciwgc3l6a2FsbGVyIGJvb3RzIHRoZSBrZXJuZWwgZm9yIGVhY2ggVk0sIHNvIHRoZSBjb2RlICppcyogZXhlY3V0ZWQgZHVyaW5nIGJvb3QuIEJ1dCBmdXp6aW5nIGRvZXNuJ3QgdGFyZ2V0IGJvb3QgY29kZS5cblxuTGV0J3MgY2hlY2sgZm9yIGFueSBvdGhlciBjb2RlIGNoYW5nZXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgYFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTYCBhbmQgdXNlcyBpdCBpbiBgc2NyYXRjaF9zaXplX3VwZGF0ZWAsIGBzY3JhdGNoX3NpemVfbm9kZWAsIGFuZCBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIE9rYXksIHJpZ2h0LCBhbGwgb2YgdGhlc2UgYXJlIGFsc28gYF9faW5pdGAgZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gY29uZmlybSBhbGwgdGhvc2UgZnVuY3Rpb25zIGFyZSBgX19pbml0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ4NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMDo0MTo1Mi4xMzQ2MTYyNDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjM2NDY0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2NyYXRjaF9zaXplX3VwZGF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTYyNz1lYXJseV9wYXJhbShcXFwia2hvX3NjcmF0Y2hcXFwiLCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTYyOC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjYyOTpzdGF0aWMgdm9pZCBfX2luaXQgc2NyYXRjaF9zaXplX3VwZGF0ZSh2b2lkKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjMwLXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjgxPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY4OC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY4OTpcXHRzY3JhdGNoX3NpemVfdXBkYXRlKCk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02OTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIwOjQxOjU3LjI5ODI2ODMzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTM3NTMzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBSaWdodCwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGFsbCBjZW50ZXJlZCBhcm91bmQgYF9faW5pdGAgZnVuY3Rpb25zOiBgX19pbml0YCwgYHNjcmF0Y2hfc2l6ZV91cGRhdGVgLCBgc2NyYXRjaF9zaXplX25vZGVgLCBhbmQgYGtob19yZXNlcnZlX3NjcmF0Y2hgLiBUaGlzIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBUaGVzZSBhcmUgZXhlY3V0ZWQgb25seSBvbmNlLCBkdXJpbmcgYm9vdCwgYW5kIHRoZW4sIGVmZmVjdGl2ZWx5LCBkaXNjYXJkZWQuIE15IGludHVpdGlvbiBzY3JlYW1zIFwidW5mdXp6YWJsZVwiIGF0IHRoaXMgcG9pbnQsIGJlY2F1c2UgU3l6a2FsbGVyIGNhbid0IGdlbmVyYXRlIGlucHV0cyBmb3IgdGhlc2UgdHlwZXMgb2YgZnVuY3Rpb25zIGFmdGVyIHRoZSBpbml0aWFsIGJvb3QgcGhhc2UsIHJpZ2h0PyBUaGUgaW5wdXRzLCBzdWNoIGFzIHRoZSBga2hvX3NjcmF0Y2hgIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVyLCBhcmUgZml4ZWQgZm9yIHRoZSBlbnRpcmUgZnV6emluZyBzZXNzaW9uLlxuXG5Ib2xkIG9uLCB0aG91Z2guLi4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgbGltaXRlZCBjYXBhYmlsaXRpZXMgZm9yIGZ1enppbmcga2VybmVsIGNvbW1hbmQgbGluZXMsIGRvZXNuJ3QgaXQ/IEJ1dCwgd2UgdHlwaWNhbGx5IGRvbid0IGNvbnNpZGVyIGBfX2luaXRgIGZ1bmN0aW9ucyB0YXJnZXRzLCB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHJlYXNvbiB0byBkbyBzby4gSW4gdGhpcyBjYXNlLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBhbnN3ZXIgaXMgbm8uIFRoaXMgZG9lc24ndCBzZWVtIGxpa2UgdGhlIGNhc2UuIEl0IGlzIHVubGlrZWx5IHRoYXQgU3l6a2FsbGVyIHdpbGwgY29uc2lkZXIgdGhpcyBwYXRjaCBvZiBhbnkgdmFsdWUuXG5cbkFuZCwgaWYgdGhhdCdzIG5vdCBlbm91Z2gsIHRoaXMgcGF0Y2ggaXMgb25seSBjaGFuZ2luZyBhbiBhbGlnbm1lbnQgY29uc3RhbnQuIEl0J3MgYSBcIkNoYW5nZSB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93XCIuIFdlbGwsIGl0ICpkb2VzKiBhbHRlciB0aGUgYWxpZ25tZW50LCBidXQgdGhlIG92ZXJhbGwgZXhlY3V0aW9uIGZsb3cgcmVtYWlucyB0aGUgc2FtZTsgaXQncyBqdXN0IGRpZmZlcmVudCBhcmd1bWVudHMgdG8gYG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2VgLiBUaGUgaW1wYWN0IGlzIG5lZ2xpZ2libGUuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgdmVyZGljdCBpczogdGhpcyBwYXRjaCBpcyAqKm5vdCB3b3J0aCBmdXp6aW5nKiouIEknbGwgZG9jdW1lbnQgbXkgcmVhc29uaW5nIGNsZWFybHk6IGFsbCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBgX19pbml0YCwgc28gdGhleSBvbmx5IGV4ZWN1dGUgb25jZSBkdXJpbmcgYm9vdCBhbmQgYXJlIHRoZXJlZm9yZSB1bnJlYWNoYWJsZSBmb3IgdXNlci1zcGFjZSBmdXp6aW5nLiBBbmQsIHRoZSBjaGFuZ2UgaXMganVzdCBhbiBhZGp1c3RtZW50IHRvIGFuIGFsaWdubWVudCBjb25zdGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM0NSwiT3V0cHV0VG9rZW5zIjoxMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjA6NDI6MDMuODM1ODA0MDM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIChraG9fcmVzZXJ2ZV9zY3JhdGNoLCBzY3JhdGNoX3NpemVfdXBkYXRlLCBzY3JhdGNoX3NpemVfbm9kZSkgd2hpY2ggYXJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgb25seSBhbHRlciBhbiBhbGlnbm1lbnQgY29uc3RhbnQgcGFzc2VkIHRvIG1lbWJsb2NrIGFsbG9jYXRvcnMsIHdoaWNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYSB3YXkgdGhhdCBjYW4gYmUgZnV6emVkIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBfX2luaXQgZnVuY3Rpb25zIChraG9fcmVzZXJ2ZV9zY3JhdGNoLCBzY3JhdGNoX3NpemVfdXBkYXRlLCBzY3JhdGNoX3NpemVfbm9kZSkgd2hpY2ggYXJlIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcga2VybmVsIGJvb3QgYW5kIHRoZW4gZGlzY2FyZGVkLiBGdXJ0aGVybW9yZSwgdGhlIGNoYW5nZXMgb25seSBhbHRlciBhbiBhbGlnbm1lbnQgY29uc3RhbnQgcGFzc2VkIHRvIG1lbWJsb2NrIGFsbG9jYXRvcnMsIHdoaWNoIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYSB3YXkgdGhhdCBjYW4gYmUgZnV6emVkIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgtsrz[1] Phase: Running StartedAt: 2026-07-17 20:42:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgtsrz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-17 20:42:15 +0000 UTC FinishedAt: 2026-07-17 20:42:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}