Name: series-workflowxl5fp Phase: Failed StartedAt: 2026-09-11 19:15:31 +0000 UTC FinishedAt: 2026-09-11 19:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxl5fp[0] Phase: Succeeded StartedAt: 2026-09-11 19:15:31 +0000 UTC FinishedAt: 2026-09-11 19:20:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxl5fp[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 19:15:31 +0000 UTC FinishedAt: 2026-09-11 19:20:00 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyBhIEtWTSBzZWxmdGVzdCBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIGFuZCBtb2RpZmllcyBpdHMgTWFrZWZpbGUuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSBjb2RlLCBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLCBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMGEyNTljNWQzYTNkZDVkODBlMGM3NDNmNTQ4Njc2OTkxNGFkMWNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTk6MTk6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDk2YmFiNzAwMmQzOWUuLjE3ODEwMWU0MGU0MDEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTM1LDYgJiM0MzsxMzUsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfZXhjZXB0aW9uX3dpdGhfaW52YWxpZF9ndWVzdF9zdGF0ZVxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ZteF9tc3JzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGVcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2FwaWNfYnVzX2Nsb2NrX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni94YXBpY19pcGlfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3hhcGljX3N0YXRlX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMDg2M2VmMjBkM2VkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDMxNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIHZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0XG4mIzQzOyAqXG4mIzQzOyAqIFZlcmlmeSB0aGF0IGRlc3Ryb3lpbmcgYSBuZXN0ZWQgVk1NIHdpdGggYWN0aXZlIHNoYWRvdyBWTUNTMTIgZG9lcyBub3RcbiYjNDM7ICogZmx1c2ggdGhlIGNhY2hlZCBzaGFkb3cgVk1DUyBpbnRvIGFuIHVucmVsYXRlZCBwcm9jZXNzIG1lbW9yeSBzcGFjZVxuJiM0MzsgKiBkdXJpbmcgcHJvY2VzcyBleGl0IGluIGxhenkgVExCIG1vZGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm14LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUE9SVF9MMF9FWElUXHRcdDB4MjAwMFxuJiM0MzsjZGVmaW5lIFNIQURPV19WTUNTX0dQQVx0XHQweDgwMDAwMDAwVUxMXG4mIzQzOyNkZWZpbmUgU0hBRE9XX1ZNQ1NfR1ZBXHRcdDB4ODAwMDAwMDBVTExcbiYjNDM7I2RlZmluZSBDQU5BUllfQllURVx0XHQweDVhXG4mIzQzOyNkZWZpbmUgTDJfR1VFU1RfU1RBQ0tfU0laRVx0NjRcbiYjNDM7XG4mIzQzO3N0cnVjdCB0ZXN0X3Jlc3VsdCB7XG4mIzQzO1x0Ym9vbCBjb3JydXB0ZWQ7XG4mIzQzO1x0c2l6ZV90IGNvcnJ1cHRfb2Zmc2V0O1xuJiM0MztcdHVpbnQ4X3QgY29ycnVwdF92YWw7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHQvKiBFeGl0IHRvIEwwICovXG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luYiAlJWR4LCAlJWFsXCYjMzQ7XG4mIzQzO1x0XHQgICAgIDogOiBbcG9ydF0gXCYjMzQ7ZFwmIzM0OyAoUE9SVF9MMF9FWElUKSA6IFwmIzM0O3JheFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsMl9ndWVzdF9zdGFja1tMMl9HVUVTVF9TVEFDS19TSVpFXTtcbiYjNDM7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbiYjNDM7XG4mIzQzO1x0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xuJiM0MztcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUsXG4mIzQzO1x0XHQgICAgIFx1MDAyNmwyX2d1ZXN0X3N0YWNrW0wyX0dVRVNUX1NUQUNLX1NJWkVdKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIFZNQ1Mgc2hhZG93aW5nIGFuZCBzZXQgdGhlIHNoYWRvdyBWTUNTIGxpbmsgcG9pbnRlci4gKi9cbiYjNDM7XHR2bXdyaXRlKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsXG4mIzQzO1x0XHR2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpIHwgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1MpO1xuJiM0MztcdHZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuJiM0MztcbiYjNDM7XHR2bWxhdW5jaCgpO1xuJiM0MztcdEdVRVNUX0ZBSUwoXCYjMzQ7TDEgZ3Vlc3QgbXVzdCBub3QgcmVnYWluIGNvbnRyb2xcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBrdm1fY3B1X2hhc19zaGFkb3dfdm1jcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dWludDY0X3QgY3RybDtcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IGt2bV9nZXRfZmVhdHVyZV9tc3IoTVNSX0lBMzJfVk1YX1RSVUVfUFJPQ0JBU0VEX0NUTFMpIFx1MDAzZVx1MDAzZSAzMjtcbiYjNDM7XHRpZiAoIShjdHJsIFx1MDAyNiBDUFVfQkFTRURfQUNUSVZBVEVfU0VDT05EQVJZX0NPTlRST0xTKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IGt2bV9nZXRfZmVhdHVyZV9tc3IoTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMikgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcdHJldHVybiBjdHJsIFx1MDAyNiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX3ZtbShpbnQgcGNwdSwgdm9pZCAqdGFyZ2V0X2h2YSwgaW50IGMyX3RvX2MxX2ZkKVxuJiM0Mzt7XG4mIzQzO1x0dm1fdmFkZHJfdCB2bXhfcGFnZXNfZ3ZhO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRzdHJ1Y3Qgdm14X3BhZ2VzICp2bXg7XG4mIzQzO1x0dm9pZCAqc2hhZG93X2h2YTtcbiYjNDM7XG4mIzQzO1x0cGluX3NlbGZfdG9fY3B1KHBjcHUpO1xuJiM0MztcbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGwxX2d1ZXN0X2NvZGUpO1xuJiM0MztcbiYjNDM7XHQvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycy4gKi9cbiYjNDM7XHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2dm14X3BhZ2VzX2d2YSk7XG4mIzQzO1x0dm14ID0gYWRkcl9ndmEyaHZhKHZtLCB2bXhfcGFnZXNfZ3ZhKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgdGhlIHNoYWRvdyBWTUNTIHBhZ2UgYXQgdGhlIGV4YWN0IHRhcmdldF9odmEgYWxsb2NhdGVkIGJ5IHRoZVxuJiM0MztcdCAqIHZpY3RpbSBzbyBpdCBjb2xsaWRlcyB3aXRoIHRoZSB2aWN0aW0gcHJvY2VzcyYjMzk7cyBtYXBwaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdHNoYWRvd19odmEgPSBtbWFwKHRhcmdldF9odmEsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdFx0ICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfRklYRURfTk9SRVBMQUNFLCAtMSwgMCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc2hhZG93X2h2YSA9PSB0YXJnZXRfaHZhLCBcJiMzNDttbWFwIHRhcmdldF9odmEgZmFpbGVkIGluIFZNTVwmIzM0Oyk7XG4mIzQzO1x0bWVtc2V0KHNoYWRvd19odmEsIDAsIFBBR0VfU0laRSk7XG4mIzQzO1xuJiM0MztcdC8qIEFkZCBhIGNhbGxlci1tYW5hZ2VkIG1lbXNsb3QgZm9yIHRoZSBzaGFkb3cgVk1DUyBiYWNraW5nIHBhZ2UuICovXG4mIzQzO1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkX2NhbGxlcl9tYW5hZ2VkKHZtLCBzaGFkb3dfaHZhLFxuJiM0MztcdFx0XHRcdFx0XHQgICBTSEFET1dfVk1DU19HUEEsIDEwLCAxLCAwKTtcbiYjNDM7XHR2aXJ0X3BnX21hcCh2bSwgU0hBRE9XX1ZNQ1NfR1ZBLCBTSEFET1dfVk1DU19HUEEpO1xuJiM0MztcbiYjNDM7XHQvKiBPdmVycmlkZSB0aGUgc2hhZG93IFZNQ1MgcG9pbnRlcnMgaW4gdm14X3BhZ2VzLiAqL1xuJiM0MztcdHZteC1cdTAwM2VzaGFkb3dfdm1jcyA9ICh2b2lkICopU0hBRE9XX1ZNQ1NfR1ZBO1xuJiM0MztcdHZteC1cdTAwM2VzaGFkb3dfdm1jc19odmEgPSBzaGFkb3dfaHZhO1xuJiM0MztcdHZteC1cdTAwM2VzaGFkb3dfdm1jc19ncGEgPSBTSEFET1dfVk1DU19HUEE7XG4mIzQzO1xuJiM0MztcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XG4mIzQzO1xuJiM0MztcdGZvciAoOzspIHtcbiYjNDM7XHRcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiYjNDM7XHRcdHN0cnVjdCB1Y2FsbCB1YztcbiYjNDM7XG4mIzQzO1x0XHR2Y3B1X3J1bih2Y3B1KTtcbiYjNDM7XHRcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJ1bi1cdTAwM2Vpby5wb3J0ID09IFBPUlRfTDBfRVhJVClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKSB7XG4mIzQzO1x0XHRjYXNlIFVDQUxMX0FCT1JUOlxuJiM0MztcdFx0XHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcbiYjNDM7XHRcdFx0LyogTk9UIFJFQUNIRUQgKi9cbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdFRFU1RfRkFJTChcJiMzNDtVbmtub3duIHVjYWxsICVsdVwmIzM0OywgdWMuY21kKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2lnbmFsIHRoZSB2aWN0aW0gcHJvY2VzcyB0aGF0IHRoZSBWTU0gaXMgYWJvdXQgdG8gdGVybWluYXRlXG4mIzQzO1x0ICogd2hpbGUgTDIgaXMgYWN0aXZlIHdpdGggVk1DUyBzaGFkb3dpbmcgZW5hYmxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRURVNUX0FTU0VSVCh3cml0ZShjMl90b19jMV9mZCwgXCYjMzQ7WFwmIzM0OywgMSkgPT0gMSwgXCYjMzQ7d3JpdGUgdG8gdmljdGltIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRXhpdCBpbW1lZGlhdGVseSB3aXRob3V0IGNsb3NpbmcgVk0gb3IgdkNQVSBmaWxlIGRlc2NyaXB0b3JzLlxuJiM0MztcdCAqIFRoZSBrZXJuZWwgY2xvc2VzIHRoZW0gaW4gZXhpdF9maWxlcygpIGFmdGVyIGV4aXRfbW0oKSBzZXRzXG4mIzQzO1x0ICogY3VycmVudC1cdTAwM2VtbSA9IE5VTEwuXG4mIzQzO1x0ICovXG4mIzQzO1x0X2V4aXQoMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl92aWN0aW0oaW50IHBjcHUsIGludCByZWFkeV9mZCwgaW50IGMyX3RvX2MxX2ZkLFxuJiM0MztcdFx0ICAgICAgIGludCBwX3RvX2MxX2ZkLCBpbnQgcmVzdWx0X2ZkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlc3RfcmVzdWx0IHJlc3VsdCA9IHsgLmNvcnJ1cHRlZCA9IGZhbHNlIH07XG4mIzQzO1x0dm9pZCAqdmljdGltX2h2YTtcbiYjNDM7XHRjaGFyIHN5bmNfYnl0ZTtcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XHRpbnQgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHBpbl9zZWxmX3RvX2NwdShwY3B1KTtcbiYjNDM7XG4mIzQzO1x0dmljdGltX2h2YSA9IG1tYXAoTlVMTCwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0XHQgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuJiM0MztcdFRFU1RfQVNTRVJUKHZpY3RpbV9odmEgIT0gTUFQX0ZBSUxFRCwgXCYjMzQ7bW1hcCBmYWlsZWQgaW4gdmljdGltXCYjMzQ7KTtcbiYjNDM7XHRtZW1zZXQodmljdGltX2h2YSwgQ0FOQVJZX0JZVEUsIFBBR0VfU0laRSk7XG4mIzQzO1xuJiM0MztcdC8qIFNlbmQgbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyB0byBwYXJlbnQgc28gVk1NIGNhbiBjb2xsaWRlIHdpdGggaXQuICovXG4mIzQzO1x0VEVTVF9BU1NFUlQod3JpdGUocmVhZHlfZmQsIFx1MDAyNnZpY3RpbV9odmEsIHNpemVvZih2aWN0aW1faHZhKSkgPT0gc2l6ZW9mKHZpY3RpbV9odmEpLFxuJiM0MztcdFx0ICAgIFwmIzM0O3dyaXRlIHJlYWR5IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIFZNTSB0byBsYXVuY2ggTDIgYW5kIHJlYWNoIGV4aXQgdG8gdXNlcnNwYWNlLiAqL1xuJiM0MztcdFRFU1RfQVNTRVJUKHJlYWQoYzJfdG9fYzFfZmQsIFx1MDAyNnN5bmNfYnl0ZSwgMSkgPT0gMSwgXCYjMzQ7cmVhZCBzeW5jIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBwYXJlbnQtdG8tdmljdGltIHBpcGUgdG8gbm9uLWJsb2NraW5nLiAqL1xuJiM0MztcdGZsYWdzID0gZmNudGwocF90b19jMV9mZCwgRl9HRVRGTCwgMCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoZmxhZ3MgXHUwMDNlPSAwLCBcJiMzNDtmY250bCBGX0dFVEZMIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoZmNudGwocF90b19jMV9mZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAwLFxuJiM0MztcdFx0ICAgIFwmIzM0O2ZjbnRsIEZfU0VURkwgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMb29wIHlpZWxkaW5nIHRoZSBDUFUgd2hpbGUgdGhlIFZNTSB0ZXJtaW5hdGVzLiBXaGVuIHRoZSBWTU1cbiYjNDM7XHQgKiBzbGVlcHMgaW4gc3luY2hyb25pemVfc3JjdSgpIGR1cmluZyB0ZWFyZG93biwgdGhlIHNjaGVkdWxlclxuJiM0MztcdCAqIHJ1bnMgdGhpcyB2aWN0aW0gcHJvY2VzcyBvbiB0aGUgQ1BVLiBXaGVuIHRoZSBWTU0gd2FrZXMgdXAsXG4mIzQzO1x0ICogdGhlIHNjaGVkdWxlciBjb250ZXh0IHN3aXRjaGVzIGZyb20gdGhpcyB2aWN0aW0gdG8gdGhlIFZNTVxuJiM0MztcdCAqIHdpdGggY3VycmVudC1cdTAwM2VtbSA9PSBOVUxMLCBsZWF2aW5nIHRoZSB2aWN0aW0mIzM5O3MgQ1IzIGFjdGl2ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRzc2l6ZV90IHJldCA9IHJlYWQocF90b19jMV9mZCwgXHUwMDI2c3luY19ieXRlLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0ID09IDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSykpIHtcbiYjNDM7XHRcdFx0c2NoZWRfeWllbGQoKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRURVNUX0ZBSUwoXCYjMzQ7cmVhZCBmcm9tIHBhcmVudCBwaXBlIGZhaWxlZDogcmV0PSV6ZCwgZXJybm89JWRcJiMzNDssXG4mIzQzO1x0XHRcdCAgcmV0LCBlcnJubyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBWZXJpZnkgdGhhdCB0aGUgZW50aXJlIHBhZ2UgcmVtYWluZWQgdW50b3VjaGVkLiAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBBR0VfU0laRTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICgoKHVpbnQ4X3QgKil2aWN0aW1faHZhKVtpXSAhPSBDQU5BUllfQllURSkge1xuJiM0MztcdFx0XHRyZXN1bHQuY29ycnVwdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmVzdWx0LmNvcnJ1cHRfb2Zmc2V0ID0gaTtcbiYjNDM7XHRcdFx0cmVzdWx0LmNvcnJ1cHRfdmFsID0gKCh1aW50OF90ICopdmljdGltX2h2YSlbaV07XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQod3JpdGUocmVzdWx0X2ZkLCBcdTAwMjZyZXN1bHQsIHNpemVvZihyZXN1bHQpKSA9PSBzaXplb2YocmVzdWx0KSxcbiYjNDM7XHRcdCAgICBcJiMzNDt3cml0ZSByZXN1bHQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRfZXhpdCgwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcnVuX2l0ZXJhdGlvbihpbnQgcGNwdSlcbiYjNDM7e1xuJiM0MztcdGludCBwaXBlX3JlYWR5WzJdO1xuJiM0MztcdGludCBwaXBlX2MyX3RvX2MxWzJdO1xuJiM0MztcdGludCBwaXBlX3BfdG9fYzFbMl07XG4mIzQzO1x0aW50IHBpcGVfcmVzdWx0WzJdO1xuJiM0MztcdHBpZF90IHBpZF92aWN0aW07XG4mIzQzO1x0cGlkX3QgcGlkX3ZtbTtcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9yZXN1bHQgcmVzdWx0ID0ge307XG4mIzQzO1x0dm9pZCAqdGFyZ2V0X2h2YSA9IE5VTEw7XG4mIzQzO1x0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQocGlwZShwaXBlX3JlYWR5KSA9PSAwLCBcJiMzNDtwaXBlIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocGlwZShwaXBlX2MyX3RvX2MxKSA9PSAwLCBcJiMzNDtwaXBlIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocGlwZShwaXBlX3BfdG9fYzEpID09IDAsIFwmIzM0O3BpcGUgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRURVNUX0FTU0VSVChwaXBlKHBpcGVfcmVzdWx0KSA9PSAwLCBcJiMzNDtwaXBlIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBpZF92aWN0aW0gPSBmb3JrKCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocGlkX3ZpY3RpbSBcdTAwM2U9IDAsIFwmIzM0O2ZvcmsgdmljdGltIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHBpZF92aWN0aW0gPT0gMCkge1xuJiM0MztcdFx0Y2xvc2UocGlwZV9yZWFkeVswXSk7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2MyX3RvX2MxWzFdKTtcbiYjNDM7XHRcdGNsb3NlKHBpcGVfcF90b19jMVsxXSk7XG4mIzQzO1x0XHRjbG9zZShwaXBlX3Jlc3VsdFswXSk7XG4mIzQzO1x0XHRydW5fdmljdGltKHBjcHUsIHBpcGVfcmVhZHlbMV0sIHBpcGVfYzJfdG9fYzFbMF0sXG4mIzQzO1x0XHRcdCAgIHBpcGVfcF90b19jMVswXSwgcGlwZV9yZXN1bHRbMV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xvc2UocGlwZV9yZWFkeVsxXSk7XG4mIzQzO1x0Y2xvc2UocGlwZV9yZXN1bHRbMV0pO1xuJiM0MztcdGNsb3NlKHBpcGVfcF90b19jMVswXSk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIHZpY3RpbSB0byBpbml0aWFsaXplIGl0cyBtYXBwaW5nIGFuZCByZXRyaWV2ZSBpdHMgYWRkcmVzcy4gKi9cbiYjNDM7XHRURVNUX0FTU0VSVChyZWFkKHBpcGVfcmVhZHlbMF0sIFx1MDAyNnRhcmdldF9odmEsIHNpemVvZih0YXJnZXRfaHZhKSkgPT0gc2l6ZW9mKHRhcmdldF9odmEpLFxuJiM0MztcdFx0ICAgIFwmIzM0O3dhaXQgcmVhZHkgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRjbG9zZShwaXBlX3JlYWR5WzBdKTtcbiYjNDM7XG4mIzQzO1x0cGlkX3ZtbSA9IGZvcmsoKTtcbiYjNDM7XHRURVNUX0FTU0VSVChwaWRfdm1tIFx1MDAzZT0gMCwgXCYjMzQ7Zm9yayBWTU0gZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRpZiAocGlkX3ZtbSA9PSAwKSB7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2MyX3RvX2MxWzBdKTtcbiYjNDM7XHRcdGNsb3NlKHBpcGVfcF90b19jMVsxXSk7XG4mIzQzO1x0XHRjbG9zZShwaXBlX3Jlc3VsdFswXSk7XG4mIzQzO1x0XHRydW5fdm1tKHBjcHUsIHRhcmdldF9odmEsIHBpcGVfYzJfdG9fYzFbMV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xvc2UocGlwZV9jMl90b19jMVswXSk7XG4mIzQzO1x0Y2xvc2UocGlwZV9jMl90b19jMVsxXSk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIFZNTSB0byBjb21wbGV0ZWx5IHRlcm1pbmF0ZS4gKi9cbiYjNDM7XHR3YWl0cGlkKHBpZF92bW0sIFx1MDAyNnN0YXR1cywgMCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCxcbiYjNDM7XHRcdCAgICBcJiMzNDtWTU0gY2hpbGQgZmFpbGVkIHdpdGggc3RhdHVzICVkXCYjMzQ7LCBzdGF0dXMpO1xuJiM0MztcbiYjNDM7XHQvKiBTaWduYWwgdmljdGltIHRvIGV4aXQgeWllbGQgbG9vcC4gKi9cbiYjNDM7XHRURVNUX0FTU0VSVCh3cml0ZShwaXBlX3BfdG9fYzFbMV0sIFwmIzM0O0RcJiMzNDssIDEpID09IDEsIFwmIzM0O3NpZ25hbCB2aWN0aW0gZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRjbG9zZShwaXBlX3BfdG9fYzFbMV0pO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIHJlc3VsdCBmcm9tIHZpY3RpbS4gKi9cbiYjNDM7XHRURVNUX0FTU0VSVChyZWFkKHBpcGVfcmVzdWx0WzBdLCBcdTAwMjZyZXN1bHQsIHNpemVvZihyZXN1bHQpKSA9PSBzaXplb2YocmVzdWx0KSxcbiYjNDM7XHRcdCAgICBcJiMzNDtyZWFkIHJlc3VsdCBmYWlsZWRcJiMzNDspO1xuJiM0MztcdGNsb3NlKHBpcGVfcmVzdWx0WzBdKTtcbiYjNDM7XG4mIzQzO1x0d2FpdHBpZChwaWRfdmljdGltLCBcdTAwMjZzdGF0dXMsIDApO1xuJiM0MztcdFRFU1RfQVNTRVJUKFdJRkVYSVRFRChzdGF0dXMpIFx1MDAyNlx1MDAyNiBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsXG4mIzQzO1x0XHQgICAgXCYjMzQ7VmljdGltIGNoaWxkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFwmIzM0Oywgc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlc3VsdC5jb3JydXB0ZWQpXG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O01lbW9yeSBjaGVjazogY29ycnVwdGlvbiBhdCBvZmZzZXQgMHgleng6IGV4cGVjdGVkIDB4JTAyeCwgYWN0dWFsIDB4JTAyeFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmVzdWx0LmNvcnJ1cHRfb2Zmc2V0LCBDQU5BUllfQllURSwgcmVzdWx0LmNvcnJ1cHRfdmFsKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O01lbW9yeSBjaGVjazogZW50aXJlIHBhZ2UgaW50YWN0IChjYW5hcnkgPSAweCUwMngpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRDQU5BUllfQllURSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXN1bHQuY29ycnVwdGVkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBjb3JydXB0ZWQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcGNwdTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XHRjb25zdCBpbnQgaXRlcmF0aW9ucyA9IDU7XG4mIzQzO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXNfc2hhZG93X3ZtY3MoKSk7XG4mIzQzO1xuJiM0MztcdHBjcHUgPSBwaW5fc2VsZl90b19hbnlfY3B1KCk7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBzaGFkb3cgVk1DUyB0ZWFyZG93biBvbiBwQ1BVICVkICglZCBpdGVyYXRpb25zKS4uLlxcblwmIzM0OyxcbiYjNDM7XHRcdHBjcHUsIGl0ZXJhdGlvbnMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpdGVyYXRpb25zOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHJ1bl9pdGVyYXRpb24ocGNwdSkpIHtcbiYjNDM7XHRcdFx0Y29ycnVwdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVCghY29ycnVwdGVkLFxuJiM0MztcdFx0ICAgIFwmIzM0O01lbW9yeSBjb3JydXB0aW9uIGRldGVjdGVkISBBY3RpdmUgTU0gd2FzIGNvcnJ1cHRlZCBkdXJpbmcgdkNQVSB0ZWFyZG93bjogY2FuYXJ5IGJ5dGUgMHglMDJ4IG92ZXJ3cml0dGVuXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgIENBTkFSWV9CWVRFKTtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtQQVNTOiBObyBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RlZCBkdXJpbmcgdGVhcmRvd24uXFxuXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBLVk0gc2VsZnRlc3QgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgbW9kaWZpZXMgaXRzIE1ha2VmaWxlLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTBhMjU5YzVkM2EzZGQ1ZDgwZTBjNzQzZjU0ODY3Njk5MTRhZDFjYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE5OjE5OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggOTZiYWI3MDAyZDM5ZS4uMTc4MTAxZTQwZTQwMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC0xMzUsNiAmIzQzOzEzNSw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ZteF9leGNlcHRpb25fd2l0aF9pbnZhbGlkX2d1ZXN0X3N0YXRlCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfbXNyc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2FwaWNfYnVzX2Nsb2NrX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3hhcGljX2lwaV90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni94YXBpY19zdGF0ZV90ZXN0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZTA4NjNlZjIwZDNlZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSwzMTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiB2bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdAomIzQzOyAqCiYjNDM7ICogVmVyaWZ5IHRoYXQgZGVzdHJveWluZyBhIG5lc3RlZCBWTU0gd2l0aCBhY3RpdmUgc2hhZG93IFZNQ1MxMiBkb2VzIG5vdAomIzQzOyAqIGZsdXNoIHRoZSBjYWNoZWQgc2hhZG93IFZNQ1MgaW50byBhbiB1bnJlbGF0ZWQgcHJvY2VzcyBtZW1vcnkgc3BhY2UKJiM0MzsgKiBkdXJpbmcgcHJvY2VzcyBleGl0IGluIGxhenkgVExCIG1vZGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBQT1JUX0wwX0VYSVQJCTB4MjAwMAomIzQzOyNkZWZpbmUgU0hBRE9XX1ZNQ1NfR1BBCQkweDgwMDAwMDAwVUxMCiYjNDM7I2RlZmluZSBTSEFET1dfVk1DU19HVkEJCTB4ODAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIENBTkFSWV9CWVRFCQkweDVhCiYjNDM7I2RlZmluZSBMMl9HVUVTVF9TVEFDS19TSVpFCTY0CiYjNDM7CiYjNDM7c3RydWN0IHRlc3RfcmVzdWx0IHsKJiM0MzsJYm9vbCBjb3JydXB0ZWQ7CiYjNDM7CXNpemVfdCBjb3JydXB0X29mZnNldDsKJiM0MzsJdWludDhfdCBjb3JydXB0X3ZhbDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZCkKJiM0Mzt7CiYjNDM7CS8qIEV4aXQgdG8gTDAgKi8KJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7aW5iICUlZHgsICUlYWwmIzM0OwomIzQzOwkJICAgICA6IDogW3BvcnRdICYjMzQ7ZCYjMzQ7IChQT1JUX0wwX0VYSVQpIDogJiMzNDtyYXgmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBsMl9ndWVzdF9zdGFja1tMMl9HVUVTVF9TVEFDS19TSVpFXTsKJiM0MzsKJiM0MzsJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CiYjNDM7CS8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi8KJiM0MzsJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSwKJiM0MzsJCSAgICAgJmFtcDtsMl9ndWVzdF9zdGFja1tMMl9HVUVTVF9TVEFDS19TSVpFXSk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBWTUNTIHNoYWRvd2luZyBhbmQgc2V0IHRoZSBzaGFkb3cgVk1DUyBsaW5rIHBvaW50ZXIuICovCiYjNDM7CXZtd3JpdGUoU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwKJiM0MzsJCXZtcmVhZHooU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCkgfCBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyk7CiYjNDM7CXZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKTsKJiM0MzsKJiM0MzsJdm1sYXVuY2goKTsKJiM0MzsJR1VFU1RfRkFJTCgmIzM0O0wxIGd1ZXN0IG11c3Qgbm90IHJlZ2FpbiBjb250cm9sJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBrdm1fY3B1X2hhc19zaGFkb3dfdm1jcyh2b2lkKQomIzQzO3sKJiM0MzsJdWludDY0X3QgY3RybDsKJiM0MzsKJiM0MzsJY3RybCA9IGt2bV9nZXRfZmVhdHVyZV9tc3IoTVNSX0lBMzJfVk1YX1RSVUVfUFJPQ0JBU0VEX0NUTFMpICZndDsmZ3Q7IDMyOwomIzQzOwlpZiAoIShjdHJsICZhbXA7IENQVV9CQVNFRF9BQ1RJVkFURV9TRUNPTkRBUllfQ09OVFJPTFMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljdHJsID0ga3ZtX2dldF9mZWF0dXJlX21zcihNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMyKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsJcmV0dXJuIGN0cmwgJmFtcDsgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl92bW0oaW50IHBjcHUsIHZvaWQgKnRhcmdldF9odmEsIGludCBjMl90b19jMV9mZCkKJiM0Mzt7CiYjNDM7CXZtX3ZhZGRyX3Qgdm14X3BhZ2VzX2d2YTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJc3RydWN0IHZteF9wYWdlcyAqdm14OwomIzQzOwl2b2lkICpzaGFkb3dfaHZhOwomIzQzOwomIzQzOwlwaW5fc2VsZl90b19jcHUocGNwdSk7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBsMV9ndWVzdF9jb2RlKTsKJiM0MzsKJiM0MzsJLyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMuICovCiYjNDM7CXZjcHVfYWxsb2Nfdm14KHZtLCAmYW1wO3ZteF9wYWdlc19ndmEpOwomIzQzOwl2bXggPSBhZGRyX2d2YTJodmEodm0sIHZteF9wYWdlc19ndmEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgdGhlIHNoYWRvdyBWTUNTIHBhZ2UgYXQgdGhlIGV4YWN0IHRhcmdldF9odmEgYWxsb2NhdGVkIGJ5IHRoZQomIzQzOwkgKiB2aWN0aW0gc28gaXQgY29sbGlkZXMgd2l0aCB0aGUgdmljdGltIHByb2Nlc3MmIzM5O3MgbWFwcGluZy4KJiM0MzsJICovCiYjNDM7CXNoYWRvd19odmEgPSBtbWFwKHRhcmdldF9odmEsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCQkgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9GSVhFRF9OT1JFUExBQ0UsIC0xLCAwKTsKJiM0MzsJVEVTVF9BU1NFUlQoc2hhZG93X2h2YSA9PSB0YXJnZXRfaHZhLCAmIzM0O21tYXAgdGFyZ2V0X2h2YSBmYWlsZWQgaW4gVk1NJiMzNDspOwomIzQzOwltZW1zZXQoc2hhZG93X2h2YSwgMCwgUEFHRV9TSVpFKTsKJiM0MzsKJiM0MzsJLyogQWRkIGEgY2FsbGVyLW1hbmFnZWQgbWVtc2xvdCBmb3IgdGhlIHNoYWRvdyBWTUNTIGJhY2tpbmcgcGFnZS4gKi8KJiM0MzsJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkX2NhbGxlcl9tYW5hZ2VkKHZtLCBzaGFkb3dfaHZhLAomIzQzOwkJCQkJCSAgIFNIQURPV19WTUNTX0dQQSwgMTAsIDEsIDApOwomIzQzOwl2aXJ0X3BnX21hcCh2bSwgU0hBRE9XX1ZNQ1NfR1ZBLCBTSEFET1dfVk1DU19HUEEpOwomIzQzOwomIzQzOwkvKiBPdmVycmlkZSB0aGUgc2hhZG93IFZNQ1MgcG9pbnRlcnMgaW4gdm14X3BhZ2VzLiAqLwomIzQzOwl2bXgtJmd0O3NoYWRvd192bWNzID0gKHZvaWQgKilTSEFET1dfVk1DU19HVkE7CiYjNDM7CXZteC0mZ3Q7c2hhZG93X3ZtY3NfaHZhID0gc2hhZG93X2h2YTsKJiM0MzsJdm14LSZndDtzaGFkb3dfdm1jc19ncGEgPSBTSEFET1dfVk1DU19HUEE7CiYjNDM7CiYjNDM7CXZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCXN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LSZndDtydW47CiYjNDM7CQlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CiYjNDM7CQl2Y3B1X3J1bih2Y3B1KTsKJiM0MzsJCVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7CiYjNDM7CiYjNDM7CQlpZiAocnVuLSZndDtpby5wb3J0ID09IFBPUlRfTDBfRVhJVCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsICZhbXA7dWMpKSB7CiYjNDM7CQljYXNlIFVDQUxMX0FCT1JUOgomIzQzOwkJCVJFUE9SVF9HVUVTVF9BU1NFUlQodWMpOwomIzQzOwkJCS8qIE5PVCBSRUFDSEVEICovCiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCVRFU1RfRkFJTCgmIzM0O1Vua25vd24gdWNhbGwgJWx1JiMzNDssIHVjLmNtZCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2lnbmFsIHRoZSB2aWN0aW0gcHJvY2VzcyB0aGF0IHRoZSBWTU0gaXMgYWJvdXQgdG8gdGVybWluYXRlCiYjNDM7CSAqIHdoaWxlIEwyIGlzIGFjdGl2ZSB3aXRoIFZNQ1Mgc2hhZG93aW5nIGVuYWJsZWQuCiYjNDM7CSAqLwomIzQzOwlURVNUX0FTU0VSVCh3cml0ZShjMl90b19jMV9mZCwgJiMzNDtYJiMzNDssIDEpID09IDEsICYjMzQ7d3JpdGUgdG8gdmljdGltIGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRXhpdCBpbW1lZGlhdGVseSB3aXRob3V0IGNsb3NpbmcgVk0gb3IgdkNQVSBmaWxlIGRlc2NyaXB0b3JzLgomIzQzOwkgKiBUaGUga2VybmVsIGNsb3NlcyB0aGVtIGluIGV4aXRfZmlsZXMoKSBhZnRlciBleGl0X21tKCkgc2V0cwomIzQzOwkgKiBjdXJyZW50LSZndDttbSA9IE5VTEwuCiYjNDM7CSAqLwomIzQzOwlfZXhpdCgwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX3ZpY3RpbShpbnQgcGNwdSwgaW50IHJlYWR5X2ZkLCBpbnQgYzJfdG9fYzFfZmQsCiYjNDM7CQkgICAgICAgaW50IHBfdG9fYzFfZmQsIGludCByZXN1bHRfZmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9yZXN1bHQgcmVzdWx0ID0geyAuY29ycnVwdGVkID0gZmFsc2UgfTsKJiM0MzsJdm9pZCAqdmljdGltX2h2YTsKJiM0MzsJY2hhciBzeW5jX2J5dGU7CiYjNDM7CXNpemVfdCBpOwomIzQzOwlpbnQgZmxhZ3M7CiYjNDM7CiYjNDM7CXBpbl9zZWxmX3RvX2NwdShwY3B1KTsKJiM0MzsKJiM0MzsJdmljdGltX2h2YSA9IG1tYXAoTlVMTCwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJCSAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CiYjNDM7CVRFU1RfQVNTRVJUKHZpY3RpbV9odmEgIT0gTUFQX0ZBSUxFRCwgJiMzNDttbWFwIGZhaWxlZCBpbiB2aWN0aW0mIzM0Oyk7CiYjNDM7CW1lbXNldCh2aWN0aW1faHZhLCBDQU5BUllfQllURSwgUEFHRV9TSVpFKTsKJiM0MzsKJiM0MzsJLyogU2VuZCBtYXBwZWQgdmlydHVhbCBhZGRyZXNzIHRvIHBhcmVudCBzbyBWTU0gY2FuIGNvbGxpZGUgd2l0aCBpdC4gKi8KJiM0MzsJVEVTVF9BU1NFUlQod3JpdGUocmVhZHlfZmQsICZhbXA7dmljdGltX2h2YSwgc2l6ZW9mKHZpY3RpbV9odmEpKSA9PSBzaXplb2YodmljdGltX2h2YSksCiYjNDM7CQkgICAgJiMzNDt3cml0ZSByZWFkeSBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIFZNTSB0byBsYXVuY2ggTDIgYW5kIHJlYWNoIGV4aXQgdG8gdXNlcnNwYWNlLiAqLwomIzQzOwlURVNUX0FTU0VSVChyZWFkKGMyX3RvX2MxX2ZkLCAmYW1wO3N5bmNfYnl0ZSwgMSkgPT0gMSwgJiMzNDtyZWFkIHN5bmMgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwkvKiBTZXQgcGFyZW50LXRvLXZpY3RpbSBwaXBlIHRvIG5vbi1ibG9ja2luZy4gKi8KJiM0MzsJZmxhZ3MgPSBmY250bChwX3RvX2MxX2ZkLCBGX0dFVEZMLCAwKTsKJiM0MzsJVEVTVF9BU1NFUlQoZmxhZ3MgJmd0Oz0gMCwgJiMzNDtmY250bCBGX0dFVEZMIGZhaWxlZCYjMzQ7KTsKJiM0MzsJVEVTVF9BU1NFUlQoZmNudGwocF90b19jMV9mZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAwLAomIzQzOwkJICAgICYjMzQ7ZmNudGwgRl9TRVRGTCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIExvb3AgeWllbGRpbmcgdGhlIENQVSB3aGlsZSB0aGUgVk1NIHRlcm1pbmF0ZXMuIFdoZW4gdGhlIFZNTQomIzQzOwkgKiBzbGVlcHMgaW4gc3luY2hyb25pemVfc3JjdSgpIGR1cmluZyB0ZWFyZG93biwgdGhlIHNjaGVkdWxlcgomIzQzOwkgKiBydW5zIHRoaXMgdmljdGltIHByb2Nlc3Mgb24gdGhlIENQVS4gV2hlbiB0aGUgVk1NIHdha2VzIHVwLAomIzQzOwkgKiB0aGUgc2NoZWR1bGVyIGNvbnRleHQgc3dpdGNoZXMgZnJvbSB0aGlzIHZpY3RpbSB0byB0aGUgVk1NCiYjNDM7CSAqIHdpdGggY3VycmVudC0mZ3Q7bW0gPT0gTlVMTCwgbGVhdmluZyB0aGUgdmljdGltJiMzOTtzIENSMyBhY3RpdmUuCiYjNDM7CSAqLwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlzc2l6ZV90IHJldCA9IHJlYWQocF90b19jMV9mZCwgJmFtcDtzeW5jX2J5dGUsIDEpOwomIzQzOwomIzQzOwkJaWYgKHJldCA9PSAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLKSkgewomIzQzOwkJCXNjaGVkX3lpZWxkKCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlURVNUX0ZBSUwoJiMzNDtyZWFkIGZyb20gcGFyZW50IHBpcGUgZmFpbGVkOiByZXQ9JXpkLCBlcnJubz0lZCYjMzQ7LAomIzQzOwkJCSAgcmV0LCBlcnJubyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVmVyaWZ5IHRoYXQgdGhlIGVudGlyZSBwYWdlIHJlbWFpbmVkIHVudG91Y2hlZC4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFBBR0VfU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICgoKHVpbnQ4X3QgKil2aWN0aW1faHZhKVtpXSAhPSBDQU5BUllfQllURSkgewomIzQzOwkJCXJlc3VsdC5jb3JydXB0ZWQgPSB0cnVlOwomIzQzOwkJCXJlc3VsdC5jb3JydXB0X29mZnNldCA9IGk7CiYjNDM7CQkJcmVzdWx0LmNvcnJ1cHRfdmFsID0gKCh1aW50OF90ICopdmljdGltX2h2YSlbaV07CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQod3JpdGUocmVzdWx0X2ZkLCAmYW1wO3Jlc3VsdCwgc2l6ZW9mKHJlc3VsdCkpID09IHNpemVvZihyZXN1bHQpLAomIzQzOwkJICAgICYjMzQ7d3JpdGUgcmVzdWx0IGZhaWxlZCYjMzQ7KTsKJiM0MzsJX2V4aXQoMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHJ1bl9pdGVyYXRpb24oaW50IHBjcHUpCiYjNDM7ewomIzQzOwlpbnQgcGlwZV9yZWFkeVsyXTsKJiM0MzsJaW50IHBpcGVfYzJfdG9fYzFbMl07CiYjNDM7CWludCBwaXBlX3BfdG9fYzFbMl07CiYjNDM7CWludCBwaXBlX3Jlc3VsdFsyXTsKJiM0MzsJcGlkX3QgcGlkX3ZpY3RpbTsKJiM0MzsJcGlkX3QgcGlkX3ZtbTsKJiM0MzsJc3RydWN0IHRlc3RfcmVzdWx0IHJlc3VsdCA9IHt9OwomIzQzOwl2b2lkICp0YXJnZXRfaHZhID0gTlVMTDsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQocGlwZShwaXBlX3JlYWR5KSA9PSAwLCAmIzM0O3BpcGUgZmFpbGVkJiMzNDspOwomIzQzOwlURVNUX0FTU0VSVChwaXBlKHBpcGVfYzJfdG9fYzEpID09IDAsICYjMzQ7cGlwZSBmYWlsZWQmIzM0Oyk7CiYjNDM7CVRFU1RfQVNTRVJUKHBpcGUocGlwZV9wX3RvX2MxKSA9PSAwLCAmIzM0O3BpcGUgZmFpbGVkJiMzNDspOwomIzQzOwlURVNUX0FTU0VSVChwaXBlKHBpcGVfcmVzdWx0KSA9PSAwLCAmIzM0O3BpcGUgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwlwaWRfdmljdGltID0gZm9yaygpOwomIzQzOwlURVNUX0FTU0VSVChwaWRfdmljdGltICZndDs9IDAsICYjMzQ7Zm9yayB2aWN0aW0gZmFpbGVkJiMzNDspOwomIzQzOwlpZiAocGlkX3ZpY3RpbSA9PSAwKSB7CiYjNDM7CQljbG9zZShwaXBlX3JlYWR5WzBdKTsKJiM0MzsJCWNsb3NlKHBpcGVfYzJfdG9fYzFbMV0pOwomIzQzOwkJY2xvc2UocGlwZV9wX3RvX2MxWzFdKTsKJiM0MzsJCWNsb3NlKHBpcGVfcmVzdWx0WzBdKTsKJiM0MzsJCXJ1bl92aWN0aW0ocGNwdSwgcGlwZV9yZWFkeVsxXSwgcGlwZV9jMl90b19jMVswXSwKJiM0MzsJCQkgICBwaXBlX3BfdG9fYzFbMF0sIHBpcGVfcmVzdWx0WzFdKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShwaXBlX3JlYWR5WzFdKTsKJiM0MzsJY2xvc2UocGlwZV9yZXN1bHRbMV0pOwomIzQzOwljbG9zZShwaXBlX3BfdG9fYzFbMF0pOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciB2aWN0aW0gdG8gaW5pdGlhbGl6ZSBpdHMgbWFwcGluZyBhbmQgcmV0cmlldmUgaXRzIGFkZHJlc3MuICovCiYjNDM7CVRFU1RfQVNTRVJUKHJlYWQocGlwZV9yZWFkeVswXSwgJmFtcDt0YXJnZXRfaHZhLCBzaXplb2YodGFyZ2V0X2h2YSkpID09IHNpemVvZih0YXJnZXRfaHZhKSwKJiM0MzsJCSAgICAmIzM0O3dhaXQgcmVhZHkgZmFpbGVkJiMzNDspOwomIzQzOwljbG9zZShwaXBlX3JlYWR5WzBdKTsKJiM0MzsKJiM0MzsJcGlkX3ZtbSA9IGZvcmsoKTsKJiM0MzsJVEVTVF9BU1NFUlQocGlkX3ZtbSAmZ3Q7PSAwLCAmIzM0O2ZvcmsgVk1NIGZhaWxlZCYjMzQ7KTsKJiM0MzsJaWYgKHBpZF92bW0gPT0gMCkgewomIzQzOwkJY2xvc2UocGlwZV9jMl90b19jMVswXSk7CiYjNDM7CQljbG9zZShwaXBlX3BfdG9fYzFbMV0pOwomIzQzOwkJY2xvc2UocGlwZV9yZXN1bHRbMF0pOwomIzQzOwkJcnVuX3ZtbShwY3B1LCB0YXJnZXRfaHZhLCBwaXBlX2MyX3RvX2MxWzFdKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShwaXBlX2MyX3RvX2MxWzBdKTsKJiM0MzsJY2xvc2UocGlwZV9jMl90b19jMVsxXSk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIFZNTSB0byBjb21wbGV0ZWx5IHRlcm1pbmF0ZS4gKi8KJiM0MzsJd2FpdHBpZChwaWRfdm1tLCAmYW1wO3N0YXR1cywgMCk7CiYjNDM7CVRFU1RfQVNTRVJUKFdJRkVYSVRFRChzdGF0dXMpICZhbXA7JmFtcDsgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLAomIzQzOwkJICAgICYjMzQ7Vk1NIGNoaWxkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCYjMzQ7LCBzdGF0dXMpOwomIzQzOwomIzQzOwkvKiBTaWduYWwgdmljdGltIHRvIGV4aXQgeWllbGQgbG9vcC4gKi8KJiM0MzsJVEVTVF9BU1NFUlQod3JpdGUocGlwZV9wX3RvX2MxWzFdLCAmIzM0O0QmIzM0OywgMSkgPT0gMSwgJiMzNDtzaWduYWwgdmljdGltIGZhaWxlZCYjMzQ7KTsKJiM0MzsJY2xvc2UocGlwZV9wX3RvX2MxWzFdKTsKJiM0MzsKJiM0MzsJLyogUmVhZCByZXN1bHQgZnJvbSB2aWN0aW0uICovCiYjNDM7CVRFU1RfQVNTRVJUKHJlYWQocGlwZV9yZXN1bHRbMF0sICZhbXA7cmVzdWx0LCBzaXplb2YocmVzdWx0KSkgPT0gc2l6ZW9mKHJlc3VsdCksCiYjNDM7CQkgICAgJiMzNDtyZWFkIHJlc3VsdCBmYWlsZWQmIzM0Oyk7CiYjNDM7CWNsb3NlKHBpcGVfcmVzdWx0WzBdKTsKJiM0MzsKJiM0MzsJd2FpdHBpZChwaWRfdmljdGltLCAmYW1wO3N0YXR1cywgMCk7CiYjNDM7CVRFU1RfQVNTRVJUKFdJRkVYSVRFRChzdGF0dXMpICZhbXA7JmFtcDsgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLAomIzQzOwkJICAgICYjMzQ7VmljdGltIGNoaWxkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCYjMzQ7LCBzdGF0dXMpOwomIzQzOwomIzQzOwlpZiAocmVzdWx0LmNvcnJ1cHRlZCkKJiM0MzsJCXByX2luZm8oJiMzNDtNZW1vcnkgY2hlY2s6IGNvcnJ1cHRpb24gYXQgb2Zmc2V0IDB4JXp4OiBleHBlY3RlZCAweCUwMngsIGFjdHVhbCAweCUwMnhcbiYjMzQ7LAomIzQzOwkJCXJlc3VsdC5jb3JydXB0X29mZnNldCwgQ0FOQVJZX0JZVEUsIHJlc3VsdC5jb3JydXB0X3ZhbCk7CiYjNDM7CWVsc2UKJiM0MzsJCXByX2luZm8oJiMzNDtNZW1vcnkgY2hlY2s6IGVudGlyZSBwYWdlIGludGFjdCAoY2FuYXJ5ID0gMHglMDJ4KVxuJiMzNDssCiYjNDM7CQkJQ0FOQVJZX0JZVEUpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzdWx0LmNvcnJ1cHRlZDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CWJvb2wgY29ycnVwdGVkID0gZmFsc2U7CiYjNDM7CWludCBwY3B1OwomIzQzOwlpbnQgaTsKJiM0MzsJY29uc3QgaW50IGl0ZXJhdGlvbnMgPSA1OwomIzQzOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fY3B1X2hhc19zaGFkb3dfdm1jcygpKTsKJiM0MzsKJiM0MzsJcGNwdSA9IHBpbl9zZWxmX3RvX2FueV9jcHUoKTsKJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O1Rlc3Rpbmcgc2hhZG93IFZNQ1MgdGVhcmRvd24gb24gcENQVSAlZCAoJWQgaXRlcmF0aW9ucykuLi5cbiYjMzQ7LAomIzQzOwkJcGNwdSwgaXRlcmF0aW9ucyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpdGVyYXRpb25zOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHJ1bl9pdGVyYXRpb24ocGNwdSkpIHsKJiM0MzsJCQljb3JydXB0ZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKCFjb3JydXB0ZWQsCiYjNDM7CQkgICAgJiMzNDtNZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RlZCEgQWN0aXZlIE1NIHdhcyBjb3JydXB0ZWQgZHVyaW5nIHZDUFUgdGVhcmRvd246IGNhbmFyeSBieXRlIDB4JTAyeCBvdmVyd3JpdHRlblxuJiMzNDssCiYjNDM7CQkgICAgQ0FOQVJZX0JZVEUpOwomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7UEFTUzogTm8gbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0ZWQgZHVyaW5nIHRlYXJkb3duLlxuJiMzNDspOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5OTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlIERldGVybWluYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBjb21taXQgZGlmZiBzaG93cyBjaGFuZ2VzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QuY2AuIEdpdmVuIHRoYXQgdGhlc2UgcmVzaWRlIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCwgaXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yLgoKTm93LCBsZXQgbWUgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgdHJpYWdlIGluc3RydWN0aW9ucy4gU3BlY2lmaWNhbGx5LCBTZWN0aW9uIDImIzM5O3MgbmVnYXRpdmUgY3JpdGVyaWEgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVsZXZhbnQgY29uZGl0aW9uIGhlcmUgaXM6ICYjMzQ7VXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OwoKVGhlc2UgZmlsZXMgYXJlIHVuZGVuaWFibHkgdXNlcnNwYWNlIHNlbGYtdGVzdHMgbG9jYXRlZCB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gVGhleSYjMzk7cmUgcGFydCBvZiB0aGUgc2VsZi10ZXN0IHN1aXRlIGFuZCBkb24mIzM5O3QgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMgaW4gYW55IHdheS4gQmFzZWQgb24gdGhpcywgSSYjMzk7bSBmYWlybHkgY29uZmlkZW50IHRoYXQgYWxsIG1vZGlmaWNhdGlvbnMgYWxpZ24gd2l0aCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBnaXQgc3RhdHVzYCBvciBkaWZmIHRvIGNvbmZpcm0gbm8gb3RoZXIgZmlsZXMgd2VyZSBpbmFkdmVydGVudGx5IG1vZGlmaWVkIGluIEhFQUQuIEkgbmVlZCB0byBiZSAxMDAlIHN1cmUgdGhpcyBpcyB0aGUgb25seSBzY29wZSBvZiB0aGUgcGF0Y2ggYmVmb3JlIEkgY29uZmlkZW50bHkgbWFrZSB0aGUgZGV0ZXJtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTEzNz1URVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxMzg6VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTM5LVRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2FwaWNfYnVzX2Nsb2NrX3Rlc3Rcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMtMi0vKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdC5jOjM6ICogdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QuYy00LSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA0MgoJCQkJCQkJb3V0cHV0OiA3OQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjaGFuZ2UgbG9nIHRlbGxzIG1lIHRoZSBtb2RpZmljYXRpb25zIGFyZSBpc29sYXRlZCB0byBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiBUaGF0JiMzOTtzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvci4gQmFzZWQgb24gdGhpcywgSSBpbW1lZGlhdGVseSBhc3Nlc3MgdGhlIGltcGFjdC4gQmVjYXVzZSB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZXNlIHRlc3RpbmcgdG9vbHMsIGFuZCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gc2VsZi10ZXN0cywgYW5kIGRvbiYjMzk7dCB0b3VjaCB0aGUgY29yZSBrZXJuZWwgaW1hZ2Ugb3IgYW55IG1vZHVsZXMsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IHRoaXMgcGF0Y2ggaXMgbm90IHdvcnRoIGZ1enppbmcuIFRoZSBjb21waWxlZCBrZXJuZWwgaXMgdW50b3VjaGVkLiBUaHVzLCBubyBmdXp6aW5nIGlzIHJlcXVpcmVkLiBNeSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIGBmYWxzZWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBsaXN0cyBhcmUgYm90aCBlbXB0eSwgYXMgdGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQgd2FycmFudHMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBjaGFuZ2VzIG9yIHN5bWJvbCB0cmFja2luZyBmb3IgZnV6emluZyBwdXJwb3Nlcy4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhZGhlcmUgdG8gdGhlIG9wZXJhdGlvbmFsIGd1aWRlbGluZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgYW5hbHlzaXMsIGFuZCBvbmx5IG9uY2UsIGJlZm9yZSBmaW5hbGl6aW5nLiBEZXNwaXRlIGluc3RydWN0aW9ucyB0byBpZ25vcmUgdGhlIHJlc3VsdHMgZnJvbSB0aGlzIHRvb2wsIG15IGZ1bmN0aW9uIGlzIHRvIGNhbGwgaXQuIEkgd2lsbCBub3cgaW5pdGlhdGUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBLVk0gc2VsZnRlc3QgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgbW9kaWZpZXMgaXRzIE1ha2VmaWxlLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzIGEgS1ZNIHNlbGZ0ZXN0IGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIG1vZGlmaWVzIGl0cyBNYWtlZmlsZS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MTk6MjcuNTUwNzY2MTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NTcwMDExNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzIGEgS1ZNIHNlbGZ0ZXN0IGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIG1vZGlmaWVzIGl0cyBNYWtlZmlsZS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MTk6MjcuNTUwNzcyNzI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg1OTExMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTBhMjU5YzVkM2EzZGQ1ZDgwZTBjNzQzZjU0ODY3Njk5MTRhZDFjYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAxOToxOToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbmluZGV4IDk2YmFiNzAwMmQzOWUuLjE3ODEwMWU0MGU0MDEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5AQCAtMTM1LDYgKzEzNSw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvdm14X2V4Y2VwdGlvbl93aXRoX2ludmFsaWRfZ3Vlc3Rfc3RhdGVcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfbXNyc190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3RcXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2FwaWNfYnVzX2Nsb2NrX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni94YXBpY19pcGlfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3hhcGljX3N0YXRlX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMDg2M2VmMjBkM2VkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMzE3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcXG4rICpcXG4rICogVmVyaWZ5IHRoYXQgZGVzdHJveWluZyBhIG5lc3RlZCBWTU0gd2l0aCBhY3RpdmUgc2hhZG93IFZNQ1MxMiBkb2VzIG5vdFxcbisgKiBmbHVzaCB0aGUgY2FjaGVkIHNoYWRvdyBWTUNTIGludG8gYW4gdW5yZWxhdGVkIHByb2Nlc3MgbWVtb3J5IHNwYWNlXFxuKyAqIGR1cmluZyBwcm9jZXNzIGV4aXQgaW4gbGF6eSBUTEIgbW9kZS5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvd2FpdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ2bXguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbitcXG4rI2RlZmluZSBQT1JUX0wwX0VYSVRcXHRcXHQweDIwMDBcXG4rI2RlZmluZSBTSEFET1dfVk1DU19HUEFcXHRcXHQweDgwMDAwMDAwVUxMXFxuKyNkZWZpbmUgU0hBRE9XX1ZNQ1NfR1ZBXFx0XFx0MHg4MDAwMDAwMFVMTFxcbisjZGVmaW5lIENBTkFSWV9CWVRFXFx0XFx0MHg1YVxcbisjZGVmaW5lIEwyX0dVRVNUX1NUQUNLX1NJWkVcXHQ2NFxcbitcXG4rc3RydWN0IHRlc3RfcmVzdWx0IHtcXG4rXFx0Ym9vbCBjb3JydXB0ZWQ7XFxuK1xcdHNpemVfdCBjb3JydXB0X29mZnNldDtcXG4rXFx0dWludDhfdCBjb3JydXB0X3ZhbDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcXG4re1xcbitcXHQvKiBFeGl0IHRvIEwwICovXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiaW5iICUlZHgsICUlYWxcXFwiXFxuK1xcdFxcdCAgICAgOiA6IFtwb3J0XSBcXFwiZFxcXCIgKFBPUlRfTDBfRVhJVCkgOiBcXFwicmF4XFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbDJfZ3Vlc3Rfc3RhY2tbTDJfR1VFU1RfU1RBQ0tfU0laRV07XFxuK1xcbitcXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcXG4rXFxuK1xcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cXG4rXFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSxcXG4rXFx0XFx0ICAgICBcXHUwMDI2bDJfZ3Vlc3Rfc3RhY2tbTDJfR1VFU1RfU1RBQ0tfU0laRV0pO1xcbitcXG4rXFx0LyogRW5hYmxlIFZNQ1Mgc2hhZG93aW5nIGFuZCBzZXQgdGhlIHNoYWRvdyBWTUNTIGxpbmsgcG9pbnRlci4gKi9cXG4rXFx0dm13cml0ZShTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxcbitcXHRcXHR2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpIHwgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1MpO1xcbitcXHR2bXdyaXRlKFZNQ1NfTElOS19QT0lOVEVSLCB2bXhfcGFnZXMtXFx1MDAzZXNoYWRvd192bWNzX2dwYSk7XFxuK1xcbitcXHR2bWxhdW5jaCgpO1xcbitcXHRHVUVTVF9GQUlMKFxcXCJMMSBndWVzdCBtdXN0IG5vdCByZWdhaW4gY29udHJvbFxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBrdm1fY3B1X2hhc19zaGFkb3dfdm1jcyh2b2lkKVxcbit7XFxuK1xcdHVpbnQ2NF90IGN0cmw7XFxuK1xcbitcXHRjdHJsID0ga3ZtX2dldF9mZWF0dXJlX21zcihNU1JfSUEzMl9WTVhfVFJVRV9QUk9DQkFTRURfQ1RMUykgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdGlmICghKGN0cmwgXFx1MDAyNiBDUFVfQkFTRURfQUNUSVZBVEVfU0VDT05EQVJZX0NPTlRST0xTKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y3RybCA9IGt2bV9nZXRfZmVhdHVyZV9tc3IoTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMikgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdHJldHVybiBjdHJsIFxcdTAwMjYgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1M7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl92bW0oaW50IHBjcHUsIHZvaWQgKnRhcmdldF9odmEsIGludCBjMl90b19jMV9mZClcXG4re1xcbitcXHR2bV92YWRkcl90IHZteF9wYWdlc19ndmE7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHN0cnVjdCB2bXhfcGFnZXMgKnZteDtcXG4rXFx0dm9pZCAqc2hhZG93X2h2YTtcXG4rXFxuK1xcdHBpbl9zZWxmX3RvX2NwdShwY3B1KTtcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGwxX2d1ZXN0X2NvZGUpO1xcbitcXG4rXFx0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMuICovXFxuK1xcdHZjcHVfYWxsb2Nfdm14KHZtLCBcXHUwMDI2dm14X3BhZ2VzX2d2YSk7XFxuK1xcdHZteCA9IGFkZHJfZ3ZhMmh2YSh2bSwgdm14X3BhZ2VzX2d2YSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYXAgdGhlIHNoYWRvdyBWTUNTIHBhZ2UgYXQgdGhlIGV4YWN0IHRhcmdldF9odmEgYWxsb2NhdGVkIGJ5IHRoZVxcbitcXHQgKiB2aWN0aW0gc28gaXQgY29sbGlkZXMgd2l0aCB0aGUgdmljdGltIHByb2Nlc3MncyBtYXBwaW5nLlxcbitcXHQgKi9cXG4rXFx0c2hhZG93X2h2YSA9IG1tYXAodGFyZ2V0X2h2YSwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRcXHQgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9GSVhFRF9OT1JFUExBQ0UsIC0xLCAwKTtcXG4rXFx0VEVTVF9BU1NFUlQoc2hhZG93X2h2YSA9PSB0YXJnZXRfaHZhLCBcXFwibW1hcCB0YXJnZXRfaHZhIGZhaWxlZCBpbiBWTU1cXFwiKTtcXG4rXFx0bWVtc2V0KHNoYWRvd19odmEsIDAsIFBBR0VfU0laRSk7XFxuK1xcbitcXHQvKiBBZGQgYSBjYWxsZXItbWFuYWdlZCBtZW1zbG90IGZvciB0aGUgc2hhZG93IFZNQ1MgYmFja2luZyBwYWdlLiAqL1xcbitcXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGRfY2FsbGVyX21hbmFnZWQodm0sIHNoYWRvd19odmEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFNIQURPV19WTUNTX0dQQSwgMTAsIDEsIDApO1xcbitcXHR2aXJ0X3BnX21hcCh2bSwgU0hBRE9XX1ZNQ1NfR1ZBLCBTSEFET1dfVk1DU19HUEEpO1xcbitcXG4rXFx0LyogT3ZlcnJpZGUgdGhlIHNoYWRvdyBWTUNTIHBvaW50ZXJzIGluIHZteF9wYWdlcy4gKi9cXG4rXFx0dm14LVxcdTAwM2VzaGFkb3dfdm1jcyA9ICh2b2lkICopU0hBRE9XX1ZNQ1NfR1ZBO1xcbitcXHR2bXgtXFx1MDAzZXNoYWRvd192bWNzX2h2YSA9IHNoYWRvd19odmE7XFxuK1xcdHZteC1cXHUwMDNlc2hhZG93X3ZtY3NfZ3BhID0gU0hBRE9XX1ZNQ1NfR1BBO1xcbitcXG4rXFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcXG4rXFxuK1xcdGZvciAoOzspIHtcXG4rXFx0XFx0c3RydWN0IGt2bV9ydW4gKnJ1biA9IHZjcHUtXFx1MDAzZXJ1bjtcXG4rXFx0XFx0c3RydWN0IHVjYWxsIHVjO1xcbitcXG4rXFx0XFx0dmNwdV9ydW4odmNwdSk7XFxuK1xcdFxcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuK1xcbitcXHRcXHRpZiAocnVuLVxcdTAwM2Vpby5wb3J0ID09IFBPUlRfTDBfRVhJVClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCBcXHUwMDI2dWMpKSB7XFxuK1xcdFxcdGNhc2UgVUNBTExfQUJPUlQ6XFxuK1xcdFxcdFxcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xcbitcXHRcXHRcXHQvKiBOT1QgUkVBQ0hFRCAqL1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRURVNUX0ZBSUwoXFxcIlVua25vd24gdWNhbGwgJWx1XFxcIiwgdWMuY21kKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTaWduYWwgdGhlIHZpY3RpbSBwcm9jZXNzIHRoYXQgdGhlIFZNTSBpcyBhYm91dCB0byB0ZXJtaW5hdGVcXG4rXFx0ICogd2hpbGUgTDIgaXMgYWN0aXZlIHdpdGggVk1DUyBzaGFkb3dpbmcgZW5hYmxlZC5cXG4rXFx0ICovXFxuK1xcdFRFU1RfQVNTRVJUKHdyaXRlKGMyX3RvX2MxX2ZkLCBcXFwiWFxcXCIsIDEpID09IDEsIFxcXCJ3cml0ZSB0byB2aWN0aW0gZmFpbGVkXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFeGl0IGltbWVkaWF0ZWx5IHdpdGhvdXQgY2xvc2luZyBWTSBvciB2Q1BVIGZpbGUgZGVzY3JpcHRvcnMuXFxuK1xcdCAqIFRoZSBrZXJuZWwgY2xvc2VzIHRoZW0gaW4gZXhpdF9maWxlcygpIGFmdGVyIGV4aXRfbW0oKSBzZXRzXFxuK1xcdCAqIGN1cnJlbnQtXFx1MDAzZW1tID0gTlVMTC5cXG4rXFx0ICovXFxuK1xcdF9leGl0KDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydW5fdmljdGltKGludCBwY3B1LCBpbnQgcmVhZHlfZmQsIGludCBjMl90b19jMV9mZCxcXG4rXFx0XFx0ICAgICAgIGludCBwX3RvX2MxX2ZkLCBpbnQgcmVzdWx0X2ZkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3Jlc3VsdCByZXN1bHQgPSB7IC5jb3JydXB0ZWQgPSBmYWxzZSB9O1xcbitcXHR2b2lkICp2aWN0aW1faHZhO1xcbitcXHRjaGFyIHN5bmNfYnl0ZTtcXG4rXFx0c2l6ZV90IGk7XFxuK1xcdGludCBmbGFncztcXG4rXFxuK1xcdHBpbl9zZWxmX3RvX2NwdShwY3B1KTtcXG4rXFxuK1xcdHZpY3RpbV9odmEgPSBtbWFwKE5VTEwsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0XFx0ICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcXG4rXFx0VEVTVF9BU1NFUlQodmljdGltX2h2YSAhPSBNQVBfRkFJTEVELCBcXFwibW1hcCBmYWlsZWQgaW4gdmljdGltXFxcIik7XFxuK1xcdG1lbXNldCh2aWN0aW1faHZhLCBDQU5BUllfQllURSwgUEFHRV9TSVpFKTtcXG4rXFxuK1xcdC8qIFNlbmQgbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyB0byBwYXJlbnQgc28gVk1NIGNhbiBjb2xsaWRlIHdpdGggaXQuICovXFxuK1xcdFRFU1RfQVNTRVJUKHdyaXRlKHJlYWR5X2ZkLCBcXHUwMDI2dmljdGltX2h2YSwgc2l6ZW9mKHZpY3RpbV9odmEpKSA9PSBzaXplb2YodmljdGltX2h2YSksXFxuK1xcdFxcdCAgICBcXFwid3JpdGUgcmVhZHkgZmFpbGVkXFxcIik7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBWTU0gdG8gbGF1bmNoIEwyIGFuZCByZWFjaCBleGl0IHRvIHVzZXJzcGFjZS4gKi9cXG4rXFx0VEVTVF9BU1NFUlQocmVhZChjMl90b19jMV9mZCwgXFx1MDAyNnN5bmNfYnl0ZSwgMSkgPT0gMSwgXFxcInJlYWQgc3luYyBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdC8qIFNldCBwYXJlbnQtdG8tdmljdGltIHBpcGUgdG8gbm9uLWJsb2NraW5nLiAqL1xcbitcXHRmbGFncyA9IGZjbnRsKHBfdG9fYzFfZmQsIEZfR0VURkwsIDApO1xcbitcXHRURVNUX0FTU0VSVChmbGFncyBcXHUwMDNlPSAwLCBcXFwiZmNudGwgRl9HRVRGTCBmYWlsZWRcXFwiKTtcXG4rXFx0VEVTVF9BU1NFUlQoZmNudGwocF90b19jMV9mZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAwLFxcbitcXHRcXHQgICAgXFxcImZjbnRsIEZfU0VURkwgZmFpbGVkXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBMb29wIHlpZWxkaW5nIHRoZSBDUFUgd2hpbGUgdGhlIFZNTSB0ZXJtaW5hdGVzLiBXaGVuIHRoZSBWTU1cXG4rXFx0ICogc2xlZXBzIGluIHN5bmNocm9uaXplX3NyY3UoKSBkdXJpbmcgdGVhcmRvd24sIHRoZSBzY2hlZHVsZXJcXG4rXFx0ICogcnVucyB0aGlzIHZpY3RpbSBwcm9jZXNzIG9uIHRoZSBDUFUuIFdoZW4gdGhlIFZNTSB3YWtlcyB1cCxcXG4rXFx0ICogdGhlIHNjaGVkdWxlciBjb250ZXh0IHN3aXRjaGVzIGZyb20gdGhpcyB2aWN0aW0gdG8gdGhlIFZNTVxcbitcXHQgKiB3aXRoIGN1cnJlbnQtXFx1MDAzZW1tID09IE5VTEwsIGxlYXZpbmcgdGhlIHZpY3RpbSdzIENSMyBhY3RpdmUuXFxuK1xcdCAqL1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHNzaXplX3QgcmV0ID0gcmVhZChwX3RvX2MxX2ZkLCBcXHUwMDI2c3luY19ieXRlLCAxKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQgPT0gMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRVdPVUxEQkxPQ0spKSB7XFxuK1xcdFxcdFxcdHNjaGVkX3lpZWxkKCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdFRFU1RfRkFJTChcXFwicmVhZCBmcm9tIHBhcmVudCBwaXBlIGZhaWxlZDogcmV0PSV6ZCwgZXJybm89JWRcXFwiLFxcbitcXHRcXHRcXHQgIHJldCwgZXJybm8pO1xcbitcXHR9XFxuK1xcbitcXHQvKiBWZXJpZnkgdGhhdCB0aGUgZW50aXJlIHBhZ2UgcmVtYWluZWQgdW50b3VjaGVkLiAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFOyBpKyspIHtcXG4rXFx0XFx0aWYgKCgodWludDhfdCAqKXZpY3RpbV9odmEpW2ldICE9IENBTkFSWV9CWVRFKSB7XFxuK1xcdFxcdFxcdHJlc3VsdC5jb3JydXB0ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRyZXN1bHQuY29ycnVwdF9vZmZzZXQgPSBpO1xcbitcXHRcXHRcXHRyZXN1bHQuY29ycnVwdF92YWwgPSAoKHVpbnQ4X3QgKil2aWN0aW1faHZhKVtpXTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0VEVTVF9BU1NFUlQod3JpdGUocmVzdWx0X2ZkLCBcXHUwMDI2cmVzdWx0LCBzaXplb2YocmVzdWx0KSkgPT0gc2l6ZW9mKHJlc3VsdCksXFxuK1xcdFxcdCAgICBcXFwid3JpdGUgcmVzdWx0IGZhaWxlZFxcXCIpO1xcbitcXHRfZXhpdCgwKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgcnVuX2l0ZXJhdGlvbihpbnQgcGNwdSlcXG4re1xcbitcXHRpbnQgcGlwZV9yZWFkeVsyXTtcXG4rXFx0aW50IHBpcGVfYzJfdG9fYzFbMl07XFxuK1xcdGludCBwaXBlX3BfdG9fYzFbMl07XFxuK1xcdGludCBwaXBlX3Jlc3VsdFsyXTtcXG4rXFx0cGlkX3QgcGlkX3ZpY3RpbTtcXG4rXFx0cGlkX3QgcGlkX3ZtbTtcXG4rXFx0c3RydWN0IHRlc3RfcmVzdWx0IHJlc3VsdCA9IHt9O1xcbitcXHR2b2lkICp0YXJnZXRfaHZhID0gTlVMTDtcXG4rXFx0aW50IHN0YXR1cztcXG4rXFxuK1xcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9yZWFkeSkgPT0gMCwgXFxcInBpcGUgZmFpbGVkXFxcIik7XFxuK1xcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9jMl90b19jMSkgPT0gMCwgXFxcInBpcGUgZmFpbGVkXFxcIik7XFxuK1xcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9wX3RvX2MxKSA9PSAwLCBcXFwicGlwZSBmYWlsZWRcXFwiKTtcXG4rXFx0VEVTVF9BU1NFUlQocGlwZShwaXBlX3Jlc3VsdCkgPT0gMCwgXFxcInBpcGUgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRwaWRfdmljdGltID0gZm9yaygpO1xcbitcXHRURVNUX0FTU0VSVChwaWRfdmljdGltIFxcdTAwM2U9IDAsIFxcXCJmb3JrIHZpY3RpbSBmYWlsZWRcXFwiKTtcXG4rXFx0aWYgKHBpZF92aWN0aW0gPT0gMCkge1xcbitcXHRcXHRjbG9zZShwaXBlX3JlYWR5WzBdKTtcXG4rXFx0XFx0Y2xvc2UocGlwZV9jMl90b19jMVsxXSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVfcF90b19jMVsxXSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVfcmVzdWx0WzBdKTtcXG4rXFx0XFx0cnVuX3ZpY3RpbShwY3B1LCBwaXBlX3JlYWR5WzFdLCBwaXBlX2MyX3RvX2MxWzBdLFxcbitcXHRcXHRcXHQgICBwaXBlX3BfdG9fYzFbMF0sIHBpcGVfcmVzdWx0WzFdKTtcXG4rXFx0fVxcbitcXG4rXFx0Y2xvc2UocGlwZV9yZWFkeVsxXSk7XFxuK1xcdGNsb3NlKHBpcGVfcmVzdWx0WzFdKTtcXG4rXFx0Y2xvc2UocGlwZV9wX3RvX2MxWzBdKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIHZpY3RpbSB0byBpbml0aWFsaXplIGl0cyBtYXBwaW5nIGFuZCByZXRyaWV2ZSBpdHMgYWRkcmVzcy4gKi9cXG4rXFx0VEVTVF9BU1NFUlQocmVhZChwaXBlX3JlYWR5WzBdLCBcXHUwMDI2dGFyZ2V0X2h2YSwgc2l6ZW9mKHRhcmdldF9odmEpKSA9PSBzaXplb2YodGFyZ2V0X2h2YSksXFxuK1xcdFxcdCAgICBcXFwid2FpdCByZWFkeSBmYWlsZWRcXFwiKTtcXG4rXFx0Y2xvc2UocGlwZV9yZWFkeVswXSk7XFxuK1xcbitcXHRwaWRfdm1tID0gZm9yaygpO1xcbitcXHRURVNUX0FTU0VSVChwaWRfdm1tIFxcdTAwM2U9IDAsIFxcXCJmb3JrIFZNTSBmYWlsZWRcXFwiKTtcXG4rXFx0aWYgKHBpZF92bW0gPT0gMCkge1xcbitcXHRcXHRjbG9zZShwaXBlX2MyX3RvX2MxWzBdKTtcXG4rXFx0XFx0Y2xvc2UocGlwZV9wX3RvX2MxWzFdKTtcXG4rXFx0XFx0Y2xvc2UocGlwZV9yZXN1bHRbMF0pO1xcbitcXHRcXHRydW5fdm1tKHBjcHUsIHRhcmdldF9odmEsIHBpcGVfYzJfdG9fYzFbMV0pO1xcbitcXHR9XFxuK1xcbitcXHRjbG9zZShwaXBlX2MyX3RvX2MxWzBdKTtcXG4rXFx0Y2xvc2UocGlwZV9jMl90b19jMVsxXSk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBWTU0gdG8gY29tcGxldGVseSB0ZXJtaW5hdGUuICovXFxuK1xcdHdhaXRwaWQocGlkX3ZtbSwgXFx1MDAyNnN0YXR1cywgMCk7XFxuK1xcdFRFU1RfQVNTRVJUKFdJRkVYSVRFRChzdGF0dXMpIFxcdTAwMjZcXHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCxcXG4rXFx0XFx0ICAgIFxcXCJWTU0gY2hpbGQgZmFpbGVkIHdpdGggc3RhdHVzICVkXFxcIiwgc3RhdHVzKTtcXG4rXFxuK1xcdC8qIFNpZ25hbCB2aWN0aW0gdG8gZXhpdCB5aWVsZCBsb29wLiAqL1xcbitcXHRURVNUX0FTU0VSVCh3cml0ZShwaXBlX3BfdG9fYzFbMV0sIFxcXCJEXFxcIiwgMSkgPT0gMSwgXFxcInNpZ25hbCB2aWN0aW0gZmFpbGVkXFxcIik7XFxuK1xcdGNsb3NlKHBpcGVfcF90b19jMVsxXSk7XFxuK1xcbitcXHQvKiBSZWFkIHJlc3VsdCBmcm9tIHZpY3RpbS4gKi9cXG4rXFx0VEVTVF9BU1NFUlQocmVhZChwaXBlX3Jlc3VsdFswXSwgXFx1MDAyNnJlc3VsdCwgc2l6ZW9mKHJlc3VsdCkpID09IHNpemVvZihyZXN1bHQpLFxcbitcXHRcXHQgICAgXFxcInJlYWQgcmVzdWx0IGZhaWxlZFxcXCIpO1xcbitcXHRjbG9zZShwaXBlX3Jlc3VsdFswXSk7XFxuK1xcbitcXHR3YWl0cGlkKHBpZF92aWN0aW0sIFxcdTAwMjZzdGF0dXMsIDApO1xcbitcXHRURVNUX0FTU0VSVChXSUZFWElURUQoc3RhdHVzKSBcXHUwMDI2XFx1MDAyNiBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsXFxuK1xcdFxcdCAgICBcXFwiVmljdGltIGNoaWxkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxcXCIsIHN0YXR1cyk7XFxuK1xcbitcXHRpZiAocmVzdWx0LmNvcnJ1cHRlZClcXG4rXFx0XFx0cHJfaW5mbyhcXFwiTWVtb3J5IGNoZWNrOiBjb3JydXB0aW9uIGF0IG9mZnNldCAweCV6eDogZXhwZWN0ZWQgMHglMDJ4LCBhY3R1YWwgMHglMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZXN1bHQuY29ycnVwdF9vZmZzZXQsIENBTkFSWV9CWVRFLCByZXN1bHQuY29ycnVwdF92YWwpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHByX2luZm8oXFxcIk1lbW9yeSBjaGVjazogZW50aXJlIHBhZ2UgaW50YWN0IChjYW5hcnkgPSAweCUwMngpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRDQU5BUllfQllURSk7XFxuK1xcbitcXHRyZXR1cm4gcmVzdWx0LmNvcnJ1cHRlZDtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4re1xcbitcXHRib29sIGNvcnJ1cHRlZCA9IGZhbHNlO1xcbitcXHRpbnQgcGNwdTtcXG4rXFx0aW50IGk7XFxuK1xcdGNvbnN0IGludCBpdGVyYXRpb25zID0gNTtcXG4rXFxuK1xcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzX3NoYWRvd192bWNzKCkpO1xcbitcXG4rXFx0cGNwdSA9IHBpbl9zZWxmX3RvX2FueV9jcHUoKTtcXG4rXFxuK1xcdHByX2luZm8oXFxcIlRlc3Rpbmcgc2hhZG93IFZNQ1MgdGVhcmRvd24gb24gcENQVSAlZCAoJWQgaXRlcmF0aW9ucykuLi5cXFxcblxcXCIsXFxuK1xcdFxcdHBjcHUsIGl0ZXJhdGlvbnMpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGl0ZXJhdGlvbnM7IGkrKykge1xcbitcXHRcXHRpZiAocnVuX2l0ZXJhdGlvbihwY3B1KSkge1xcbitcXHRcXHRcXHRjb3JydXB0ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRURVNUX0FTU0VSVCghY29ycnVwdGVkLFxcbitcXHRcXHQgICAgXFxcIk1lbW9yeSBjb3JydXB0aW9uIGRldGVjdGVkISBBY3RpdmUgTU0gd2FzIGNvcnJ1cHRlZCBkdXJpbmcgdkNQVSB0ZWFyZG93bjogY2FuYXJ5IGJ5dGUgMHglMDJ4IG92ZXJ3cml0dGVuXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgQ0FOQVJZX0JZVEUpO1xcbitcXG4rXFx0cHJfaW5mbyhcXFwiUEFTUzogTm8gbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0ZWQgZHVyaW5nIHRlYXJkb3duLlxcXFxuXFxcIik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjE5OjI5LjIzNzM4Nzc4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk3NzAzNjMyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBLVk0gc2VsZnRlc3QgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgbW9kaWZpZXMgaXRzIE1ha2VmaWxlLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEwYTI1OWM1ZDNhM2RkNWQ4MGUwYzc0M2Y1NDg2NzY5OTE0YWQxY2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxOToxOToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA5NmJhYjcwMDJkMzllLi4xNzgxMDFlNDBlNDAxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTEzNSw2ICsxMzUsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ZteF9leGNlcHRpb25fd2l0aF9pbnZhbGlkX2d1ZXN0X3N0YXRlXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfbXNyc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGVcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0XG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvYXBpY19idXNfY2xvY2tfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYveGFwaWNfaXBpX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3hhcGljX3N0YXRlX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMDg2M2VmMjBkM2VkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmNcbkBAIC0wLDAgKzEsMzE3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcbisgKlxuKyAqIFZlcmlmeSB0aGF0IGRlc3Ryb3lpbmcgYSBuZXN0ZWQgVk1NIHdpdGggYWN0aXZlIHNoYWRvdyBWTUNTMTIgZG9lcyBub3RcbisgKiBmbHVzaCB0aGUgY2FjaGVkIHNoYWRvdyBWTUNTIGludG8gYW4gdW5yZWxhdGVkIHByb2Nlc3MgbWVtb3J5IHNwYWNlXG4rICogZHVyaW5nIHByb2Nlc3MgZXhpdCBpbiBsYXp5IFRMQiBtb2RlLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ0ZXN0X3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInByb2Nlc3Nvci5oXCJcbisjaW5jbHVkZSBcInZteC5oXCJcbisjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbitcbisjZGVmaW5lIFBPUlRfTDBfRVhJVFx0XHQweDIwMDBcbisjZGVmaW5lIFNIQURPV19WTUNTX0dQQVx0XHQweDgwMDAwMDAwVUxMXG4rI2RlZmluZSBTSEFET1dfVk1DU19HVkFcdFx0MHg4MDAwMDAwMFVMTFxuKyNkZWZpbmUgQ0FOQVJZX0JZVEVcdFx0MHg1YVxuKyNkZWZpbmUgTDJfR1VFU1RfU1RBQ0tfU0laRVx0NjRcbitcbitzdHJ1Y3QgdGVzdF9yZXN1bHQge1xuK1x0Ym9vbCBjb3JydXB0ZWQ7XG4rXHRzaXplX3QgY29ycnVwdF9vZmZzZXQ7XG4rXHR1aW50OF90IGNvcnJ1cHRfdmFsO1xuK307XG4rXG4rc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuK3tcbitcdC8qIEV4aXQgdG8gTDAgKi9cbitcdGFzbSB2b2xhdGlsZShcImluYiAlJWR4LCAlJWFsXCJcbitcdFx0ICAgICA6IDogW3BvcnRdIFwiZFwiIChQT1JUX0wwX0VYSVQpIDogXCJyYXhcIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbDJfZ3Vlc3Rfc3RhY2tbTDJfR1VFU1RfU1RBQ0tfU0laRV07XG4rXG4rXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbitcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXG4rXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4rXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlLFxuK1x0XHQgICAgIFx1MDAyNmwyX2d1ZXN0X3N0YWNrW0wyX0dVRVNUX1NUQUNLX1NJWkVdKTtcbitcbitcdC8qIEVuYWJsZSBWTUNTIHNoYWRvd2luZyBhbmQgc2V0IHRoZSBzaGFkb3cgVk1DUyBsaW5rIHBvaW50ZXIuICovXG4rXHR2bXdyaXRlKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsXG4rXHRcdHZtcmVhZHooU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCkgfCBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyk7XG4rXHR2bXdyaXRlKFZNQ1NfTElOS19QT0lOVEVSLCB2bXhfcGFnZXMtXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKTtcbitcbitcdHZtbGF1bmNoKCk7XG4rXHRHVUVTVF9GQUlMKFwiTDEgZ3Vlc3QgbXVzdCBub3QgcmVnYWluIGNvbnRyb2xcIik7XG4rfVxuK1xuK3N0YXRpYyBib29sIGt2bV9jcHVfaGFzX3NoYWRvd192bWNzKHZvaWQpXG4re1xuK1x0dWludDY0X3QgY3RybDtcbitcbitcdGN0cmwgPSBrdm1fZ2V0X2ZlYXR1cmVfbXNyKE1TUl9JQTMyX1ZNWF9UUlVFX1BST0NCQVNFRF9DVExTKSBcdTAwM2VcdTAwM2UgMzI7XG4rXHRpZiAoIShjdHJsIFx1MDAyNiBDUFVfQkFTRURfQUNUSVZBVEVfU0VDT05EQVJZX0NPTlRST0xTKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y3RybCA9IGt2bV9nZXRfZmVhdHVyZV9tc3IoTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMikgXHUwMDNlXHUwMDNlIDMyO1xuK1x0cmV0dXJuIGN0cmwgXHUwMDI2IFNFQ09OREFSWV9FWEVDX1NIQURPV19WTUNTO1xuK31cbitcbitzdGF0aWMgdm9pZCBydW5fdm1tKGludCBwY3B1LCB2b2lkICp0YXJnZXRfaHZhLCBpbnQgYzJfdG9fYzFfZmQpXG4re1xuK1x0dm1fdmFkZHJfdCB2bXhfcGFnZXNfZ3ZhO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3Qgdm14X3BhZ2VzICp2bXg7XG4rXHR2b2lkICpzaGFkb3dfaHZhO1xuK1xuK1x0cGluX3NlbGZfdG9fY3B1KHBjcHUpO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbitcbitcdC8qIEFsbG9jYXRlIFZNWCBwYWdlcyBhbmQgc2hhcmVkIGRlc2NyaXB0b3JzLiAqL1xuK1x0dmNwdV9hbGxvY192bXgodm0sIFx1MDAyNnZteF9wYWdlc19ndmEpO1xuK1x0dm14ID0gYWRkcl9ndmEyaHZhKHZtLCB2bXhfcGFnZXNfZ3ZhKTtcbitcbitcdC8qXG4rXHQgKiBNYXAgdGhlIHNoYWRvdyBWTUNTIHBhZ2UgYXQgdGhlIGV4YWN0IHRhcmdldF9odmEgYWxsb2NhdGVkIGJ5IHRoZVxuK1x0ICogdmljdGltIHNvIGl0IGNvbGxpZGVzIHdpdGggdGhlIHZpY3RpbSBwcm9jZXNzJ3MgbWFwcGluZy5cbitcdCAqL1xuK1x0c2hhZG93X2h2YSA9IG1tYXAodGFyZ2V0X2h2YSwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHRcdCAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX0ZJWEVEX05PUkVQTEFDRSwgLTEsIDApO1xuK1x0VEVTVF9BU1NFUlQoc2hhZG93X2h2YSA9PSB0YXJnZXRfaHZhLCBcIm1tYXAgdGFyZ2V0X2h2YSBmYWlsZWQgaW4gVk1NXCIpO1xuK1x0bWVtc2V0KHNoYWRvd19odmEsIDAsIFBBR0VfU0laRSk7XG4rXG4rXHQvKiBBZGQgYSBjYWxsZXItbWFuYWdlZCBtZW1zbG90IGZvciB0aGUgc2hhZG93IFZNQ1MgYmFja2luZyBwYWdlLiAqL1xuK1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkX2NhbGxlcl9tYW5hZ2VkKHZtLCBzaGFkb3dfaHZhLFxuK1x0XHRcdFx0XHRcdCAgIFNIQURPV19WTUNTX0dQQSwgMTAsIDEsIDApO1xuK1x0dmlydF9wZ19tYXAodm0sIFNIQURPV19WTUNTX0dWQSwgU0hBRE9XX1ZNQ1NfR1BBKTtcbitcbitcdC8qIE92ZXJyaWRlIHRoZSBzaGFkb3cgVk1DUyBwb2ludGVycyBpbiB2bXhfcGFnZXMuICovXG4rXHR2bXgtXHUwMDNlc2hhZG93X3ZtY3MgPSAodm9pZCAqKVNIQURPV19WTUNTX0dWQTtcbitcdHZteC1cdTAwM2VzaGFkb3dfdm1jc19odmEgPSBzaGFkb3dfaHZhO1xuK1x0dm14LVx1MDAzZXNoYWRvd192bWNzX2dwYSA9IFNIQURPV19WTUNTX0dQQTtcbitcbitcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbitcdFx0c3RydWN0IHVjYWxsIHVjO1xuK1xuK1x0XHR2Y3B1X3J1bih2Y3B1KTtcbitcdFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbitcbitcdFx0aWYgKHJ1bi1cdTAwM2Vpby5wb3J0ID09IFBPUlRfTDBfRVhJVClcbitcdFx0XHRicmVhaztcbitcbitcdFx0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKSB7XG4rXHRcdGNhc2UgVUNBTExfQUJPUlQ6XG4rXHRcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRcdFx0LyogTk9UIFJFQUNIRUQgKi9cbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRURVNUX0ZBSUwoXCJVbmtub3duIHVjYWxsICVsdVwiLCB1Yy5jbWQpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogU2lnbmFsIHRoZSB2aWN0aW0gcHJvY2VzcyB0aGF0IHRoZSBWTU0gaXMgYWJvdXQgdG8gdGVybWluYXRlXG4rXHQgKiB3aGlsZSBMMiBpcyBhY3RpdmUgd2l0aCBWTUNTIHNoYWRvd2luZyBlbmFibGVkLlxuK1x0ICovXG4rXHRURVNUX0FTU0VSVCh3cml0ZShjMl90b19jMV9mZCwgXCJYXCIsIDEpID09IDEsIFwid3JpdGUgdG8gdmljdGltIGZhaWxlZFwiKTtcbitcbitcdC8qXG4rXHQgKiBFeGl0IGltbWVkaWF0ZWx5IHdpdGhvdXQgY2xvc2luZyBWTSBvciB2Q1BVIGZpbGUgZGVzY3JpcHRvcnMuXG4rXHQgKiBUaGUga2VybmVsIGNsb3NlcyB0aGVtIGluIGV4aXRfZmlsZXMoKSBhZnRlciBleGl0X21tKCkgc2V0c1xuK1x0ICogY3VycmVudC1cdTAwM2VtbSA9IE5VTEwuXG4rXHQgKi9cbitcdF9leGl0KDApO1xuK31cbitcbitzdGF0aWMgdm9pZCBydW5fdmljdGltKGludCBwY3B1LCBpbnQgcmVhZHlfZmQsIGludCBjMl90b19jMV9mZCxcbitcdFx0ICAgICAgIGludCBwX3RvX2MxX2ZkLCBpbnQgcmVzdWx0X2ZkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3Jlc3VsdCByZXN1bHQgPSB7IC5jb3JydXB0ZWQgPSBmYWxzZSB9O1xuK1x0dm9pZCAqdmljdGltX2h2YTtcbitcdGNoYXIgc3luY19ieXRlO1xuK1x0c2l6ZV90IGk7XG4rXHRpbnQgZmxhZ3M7XG4rXG4rXHRwaW5fc2VsZl90b19jcHUocGNwdSk7XG4rXG4rXHR2aWN0aW1faHZhID0gbW1hcChOVUxMLCBQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdFx0ICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcbitcdFRFU1RfQVNTRVJUKHZpY3RpbV9odmEgIT0gTUFQX0ZBSUxFRCwgXCJtbWFwIGZhaWxlZCBpbiB2aWN0aW1cIik7XG4rXHRtZW1zZXQodmljdGltX2h2YSwgQ0FOQVJZX0JZVEUsIFBBR0VfU0laRSk7XG4rXG4rXHQvKiBTZW5kIG1hcHBlZCB2aXJ0dWFsIGFkZHJlc3MgdG8gcGFyZW50IHNvIFZNTSBjYW4gY29sbGlkZSB3aXRoIGl0LiAqL1xuK1x0VEVTVF9BU1NFUlQod3JpdGUocmVhZHlfZmQsIFx1MDAyNnZpY3RpbV9odmEsIHNpemVvZih2aWN0aW1faHZhKSkgPT0gc2l6ZW9mKHZpY3RpbV9odmEpLFxuK1x0XHQgICAgXCJ3cml0ZSByZWFkeSBmYWlsZWRcIik7XG4rXG4rXHQvKiBXYWl0IGZvciBWTU0gdG8gbGF1bmNoIEwyIGFuZCByZWFjaCBleGl0IHRvIHVzZXJzcGFjZS4gKi9cbitcdFRFU1RfQVNTRVJUKHJlYWQoYzJfdG9fYzFfZmQsIFx1MDAyNnN5bmNfYnl0ZSwgMSkgPT0gMSwgXCJyZWFkIHN5bmMgZmFpbGVkXCIpO1xuK1xuK1x0LyogU2V0IHBhcmVudC10by12aWN0aW0gcGlwZSB0byBub24tYmxvY2tpbmcuICovXG4rXHRmbGFncyA9IGZjbnRsKHBfdG9fYzFfZmQsIEZfR0VURkwsIDApO1xuK1x0VEVTVF9BU1NFUlQoZmxhZ3MgXHUwMDNlPSAwLCBcImZjbnRsIEZfR0VURkwgZmFpbGVkXCIpO1xuK1x0VEVTVF9BU1NFUlQoZmNudGwocF90b19jMV9mZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAwLFxuK1x0XHQgICAgXCJmY250bCBGX1NFVEZMIGZhaWxlZFwiKTtcbitcbitcdC8qXG4rXHQgKiBMb29wIHlpZWxkaW5nIHRoZSBDUFUgd2hpbGUgdGhlIFZNTSB0ZXJtaW5hdGVzLiBXaGVuIHRoZSBWTU1cbitcdCAqIHNsZWVwcyBpbiBzeW5jaHJvbml6ZV9zcmN1KCkgZHVyaW5nIHRlYXJkb3duLCB0aGUgc2NoZWR1bGVyXG4rXHQgKiBydW5zIHRoaXMgdmljdGltIHByb2Nlc3Mgb24gdGhlIENQVS4gV2hlbiB0aGUgVk1NIHdha2VzIHVwLFxuK1x0ICogdGhlIHNjaGVkdWxlciBjb250ZXh0IHN3aXRjaGVzIGZyb20gdGhpcyB2aWN0aW0gdG8gdGhlIFZNTVxuK1x0ICogd2l0aCBjdXJyZW50LVx1MDAzZW1tID09IE5VTEwsIGxlYXZpbmcgdGhlIHZpY3RpbSdzIENSMyBhY3RpdmUuXG4rXHQgKi9cbitcdGZvciAoOzspIHtcbitcdFx0c3NpemVfdCByZXQgPSByZWFkKHBfdG9fYzFfZmQsIFx1MDAyNnN5bmNfYnl0ZSwgMSk7XG4rXG4rXHRcdGlmIChyZXQgPT0gMSlcbitcdFx0XHRicmVhaztcbitcdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSykpIHtcbitcdFx0XHRzY2hlZF95aWVsZCgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdFRFU1RfRkFJTChcInJlYWQgZnJvbSBwYXJlbnQgcGlwZSBmYWlsZWQ6IHJldD0lemQsIGVycm5vPSVkXCIsXG4rXHRcdFx0ICByZXQsIGVycm5vKTtcbitcdH1cbitcbitcdC8qIFZlcmlmeSB0aGF0IHRoZSBlbnRpcmUgcGFnZSByZW1haW5lZCB1bnRvdWNoZWQuICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkU7IGkrKykge1xuK1x0XHRpZiAoKCh1aW50OF90ICopdmljdGltX2h2YSlbaV0gIT0gQ0FOQVJZX0JZVEUpIHtcbitcdFx0XHRyZXN1bHQuY29ycnVwdGVkID0gdHJ1ZTtcbitcdFx0XHRyZXN1bHQuY29ycnVwdF9vZmZzZXQgPSBpO1xuK1x0XHRcdHJlc3VsdC5jb3JydXB0X3ZhbCA9ICgodWludDhfdCAqKXZpY3RpbV9odmEpW2ldO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRURVNUX0FTU0VSVCh3cml0ZShyZXN1bHRfZmQsIFx1MDAyNnJlc3VsdCwgc2l6ZW9mKHJlc3VsdCkpID09IHNpemVvZihyZXN1bHQpLFxuK1x0XHQgICAgXCJ3cml0ZSByZXN1bHQgZmFpbGVkXCIpO1xuK1x0X2V4aXQoMCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHJ1bl9pdGVyYXRpb24oaW50IHBjcHUpXG4re1xuK1x0aW50IHBpcGVfcmVhZHlbMl07XG4rXHRpbnQgcGlwZV9jMl90b19jMVsyXTtcbitcdGludCBwaXBlX3BfdG9fYzFbMl07XG4rXHRpbnQgcGlwZV9yZXN1bHRbMl07XG4rXHRwaWRfdCBwaWRfdmljdGltO1xuK1x0cGlkX3QgcGlkX3ZtbTtcbitcdHN0cnVjdCB0ZXN0X3Jlc3VsdCByZXN1bHQgPSB7fTtcbitcdHZvaWQgKnRhcmdldF9odmEgPSBOVUxMO1xuK1x0aW50IHN0YXR1cztcbitcbitcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9yZWFkeSkgPT0gMCwgXCJwaXBlIGZhaWxlZFwiKTtcbitcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9jMl90b19jMSkgPT0gMCwgXCJwaXBlIGZhaWxlZFwiKTtcbitcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9wX3RvX2MxKSA9PSAwLCBcInBpcGUgZmFpbGVkXCIpO1xuK1x0VEVTVF9BU1NFUlQocGlwZShwaXBlX3Jlc3VsdCkgPT0gMCwgXCJwaXBlIGZhaWxlZFwiKTtcbitcbitcdHBpZF92aWN0aW0gPSBmb3JrKCk7XG4rXHRURVNUX0FTU0VSVChwaWRfdmljdGltIFx1MDAzZT0gMCwgXCJmb3JrIHZpY3RpbSBmYWlsZWRcIik7XG4rXHRpZiAocGlkX3ZpY3RpbSA9PSAwKSB7XG4rXHRcdGNsb3NlKHBpcGVfcmVhZHlbMF0pO1xuK1x0XHRjbG9zZShwaXBlX2MyX3RvX2MxWzFdKTtcbitcdFx0Y2xvc2UocGlwZV9wX3RvX2MxWzFdKTtcbitcdFx0Y2xvc2UocGlwZV9yZXN1bHRbMF0pO1xuK1x0XHRydW5fdmljdGltKHBjcHUsIHBpcGVfcmVhZHlbMV0sIHBpcGVfYzJfdG9fYzFbMF0sXG4rXHRcdFx0ICAgcGlwZV9wX3RvX2MxWzBdLCBwaXBlX3Jlc3VsdFsxXSk7XG4rXHR9XG4rXG4rXHRjbG9zZShwaXBlX3JlYWR5WzFdKTtcbitcdGNsb3NlKHBpcGVfcmVzdWx0WzFdKTtcbitcdGNsb3NlKHBpcGVfcF90b19jMVswXSk7XG4rXG4rXHQvKiBXYWl0IGZvciB2aWN0aW0gdG8gaW5pdGlhbGl6ZSBpdHMgbWFwcGluZyBhbmQgcmV0cmlldmUgaXRzIGFkZHJlc3MuICovXG4rXHRURVNUX0FTU0VSVChyZWFkKHBpcGVfcmVhZHlbMF0sIFx1MDAyNnRhcmdldF9odmEsIHNpemVvZih0YXJnZXRfaHZhKSkgPT0gc2l6ZW9mKHRhcmdldF9odmEpLFxuK1x0XHQgICAgXCJ3YWl0IHJlYWR5IGZhaWxlZFwiKTtcbitcdGNsb3NlKHBpcGVfcmVhZHlbMF0pO1xuK1xuK1x0cGlkX3ZtbSA9IGZvcmsoKTtcbitcdFRFU1RfQVNTRVJUKHBpZF92bW0gXHUwMDNlPSAwLCBcImZvcmsgVk1NIGZhaWxlZFwiKTtcbitcdGlmIChwaWRfdm1tID09IDApIHtcbitcdFx0Y2xvc2UocGlwZV9jMl90b19jMVswXSk7XG4rXHRcdGNsb3NlKHBpcGVfcF90b19jMVsxXSk7XG4rXHRcdGNsb3NlKHBpcGVfcmVzdWx0WzBdKTtcbitcdFx0cnVuX3ZtbShwY3B1LCB0YXJnZXRfaHZhLCBwaXBlX2MyX3RvX2MxWzFdKTtcbitcdH1cbitcbitcdGNsb3NlKHBpcGVfYzJfdG9fYzFbMF0pO1xuK1x0Y2xvc2UocGlwZV9jMl90b19jMVsxXSk7XG4rXG4rXHQvKiBXYWl0IGZvciBWTU0gdG8gY29tcGxldGVseSB0ZXJtaW5hdGUuICovXG4rXHR3YWl0cGlkKHBpZF92bW0sIFx1MDAyNnN0YXR1cywgMCk7XG4rXHRURVNUX0FTU0VSVChXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjYgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLFxuK1x0XHQgICAgXCJWTU0gY2hpbGQgZmFpbGVkIHdpdGggc3RhdHVzICVkXCIsIHN0YXR1cyk7XG4rXG4rXHQvKiBTaWduYWwgdmljdGltIHRvIGV4aXQgeWllbGQgbG9vcC4gKi9cbitcdFRFU1RfQVNTRVJUKHdyaXRlKHBpcGVfcF90b19jMVsxXSwgXCJEXCIsIDEpID09IDEsIFwic2lnbmFsIHZpY3RpbSBmYWlsZWRcIik7XG4rXHRjbG9zZShwaXBlX3BfdG9fYzFbMV0pO1xuK1xuK1x0LyogUmVhZCByZXN1bHQgZnJvbSB2aWN0aW0uICovXG4rXHRURVNUX0FTU0VSVChyZWFkKHBpcGVfcmVzdWx0WzBdLCBcdTAwMjZyZXN1bHQsIHNpemVvZihyZXN1bHQpKSA9PSBzaXplb2YocmVzdWx0KSxcbitcdFx0ICAgIFwicmVhZCByZXN1bHQgZmFpbGVkXCIpO1xuK1x0Y2xvc2UocGlwZV9yZXN1bHRbMF0pO1xuK1xuK1x0d2FpdHBpZChwaWRfdmljdGltLCBcdTAwMjZzdGF0dXMsIDApO1xuK1x0VEVTVF9BU1NFUlQoV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCxcbitcdFx0ICAgIFwiVmljdGltIGNoaWxkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFwiLCBzdGF0dXMpO1xuK1xuK1x0aWYgKHJlc3VsdC5jb3JydXB0ZWQpXG4rXHRcdHByX2luZm8oXCJNZW1vcnkgY2hlY2s6IGNvcnJ1cHRpb24gYXQgb2Zmc2V0IDB4JXp4OiBleHBlY3RlZCAweCUwMngsIGFjdHVhbCAweCUwMnhcXG5cIixcbitcdFx0XHRyZXN1bHQuY29ycnVwdF9vZmZzZXQsIENBTkFSWV9CWVRFLCByZXN1bHQuY29ycnVwdF92YWwpO1xuK1x0ZWxzZVxuK1x0XHRwcl9pbmZvKFwiTWVtb3J5IGNoZWNrOiBlbnRpcmUgcGFnZSBpbnRhY3QgKGNhbmFyeSA9IDB4JTAyeClcXG5cIixcbitcdFx0XHRDQU5BUllfQllURSk7XG4rXG4rXHRyZXR1cm4gcmVzdWx0LmNvcnJ1cHRlZDtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRib29sIGNvcnJ1cHRlZCA9IGZhbHNlO1xuK1x0aW50IHBjcHU7XG4rXHRpbnQgaTtcbitcdGNvbnN0IGludCBpdGVyYXRpb25zID0gNTtcbitcbitcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhc19zaGFkb3dfdm1jcygpKTtcbitcbitcdHBjcHUgPSBwaW5fc2VsZl90b19hbnlfY3B1KCk7XG4rXG4rXHRwcl9pbmZvKFwiVGVzdGluZyBzaGFkb3cgVk1DUyB0ZWFyZG93biBvbiBwQ1BVICVkICglZCBpdGVyYXRpb25zKS4uLlxcblwiLFxuK1x0XHRwY3B1LCBpdGVyYXRpb25zKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGl0ZXJhdGlvbnM7IGkrKykge1xuK1x0XHRpZiAocnVuX2l0ZXJhdGlvbihwY3B1KSkge1xuK1x0XHRcdGNvcnJ1cHRlZCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdFRFU1RfQVNTRVJUKCFjb3JydXB0ZWQsXG4rXHRcdCAgICBcIk1lbW9yeSBjb3JydXB0aW9uIGRldGVjdGVkISBBY3RpdmUgTU0gd2FzIGNvcnJ1cHRlZCBkdXJpbmcgdkNQVSB0ZWFyZG93bjogY2FuYXJ5IGJ5dGUgMHglMDJ4IG92ZXJ3cml0dGVuXFxuXCIsXG4rXHRcdCAgICBDQU5BUllfQllURSk7XG4rXG4rXHRwcl9pbmZvKFwiUEFTUzogTm8gbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0ZWQgZHVyaW5nIHRlYXJkb3duLlxcblwiKTtcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjE5OjI5LjIzNzM4OTU2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NTc1OTMwMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZSBEZXRlcm1pbmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGNvbW1pdCBkaWZmIHNob3dzIGNoYW5nZXMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1gIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdC5jYC4gR2l2ZW4gdGhhdCB0aGVzZSByZXNpZGUgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLCBpdCdzIGEgc3Ryb25nIGluZGljYXRvci5cblxuTm93LCBsZXQgbWUgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgdHJpYWdlIGluc3RydWN0aW9ucy4gU3BlY2lmaWNhbGx5LCBTZWN0aW9uIDIncyBuZWdhdGl2ZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWxldmFudCBjb25kaXRpb24gaGVyZSBpczogXCJVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiXG5cblRoZXNlIGZpbGVzIGFyZSB1bmRlbmlhYmx5IHVzZXJzcGFjZSBzZWxmLXRlc3RzIGxvY2F0ZWQgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIFRoZXkncmUgcGFydCBvZiB0aGUgc2VsZi10ZXN0IHN1aXRlIGFuZCBkb24ndCBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcyBpbiBhbnkgd2F5LiBCYXNlZCBvbiB0aGlzLCBJJ20gZmFpcmx5IGNvbmZpZGVudCB0aGF0IGFsbCBtb2RpZmljYXRpb25zIGFsaWduIHdpdGggdGhlIGNyaXRlcmlhIGZvciBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGdpdCBzdGF0dXNgIG9yIGRpZmYgdG8gY29uZmlybSBubyBvdGhlciBmaWxlcyB3ZXJlIGluYWR2ZXJ0ZW50bHkgbW9kaWZpZWQgaW4gSEVBRC4gSSBuZWVkIHRvIGJlIDEwMCUgc3VyZSB0aGlzIGlzIHRoZSBvbmx5IHNjb3BlIG9mIHRoZSBwYXRjaCBiZWZvcmUgSSBjb25maWRlbnRseSBtYWtlIHRoZSBkZXRlcm1pbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTk5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MTk6NDMuODEzMzIyODYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDI2MTQyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xMzc9VEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm06MTM4OlRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtLTEzOS1URVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2FwaWNfYnVzX2Nsb2NrX3Rlc3RcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QuYy0yLS8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdC5jOjM6ICogdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMtNC0gKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOToxOTo0NS41MTU5NDU1MTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDkxNzgxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIGxvZyB0ZWxscyBtZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgaXNvbGF0ZWQgdG8gZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gVGhhdCdzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvci4gQmFzZWQgb24gdGhpcywgSSBpbW1lZGlhdGVseSBhc3Nlc3MgdGhlIGltcGFjdC4gQmVjYXVzZSB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZXNlIHRlc3RpbmcgdG9vbHMsIGFuZCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gc2VsZi10ZXN0cywgYW5kIGRvbid0IHRvdWNoIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBvciBhbnkgbW9kdWxlcywgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgdGhpcyBwYXRjaCBpcyBub3Qgd29ydGggZnV6emluZy4gVGhlIGNvbXBpbGVkIGtlcm5lbCBpcyB1bnRvdWNoZWQuIFRodXMsIG5vIGZ1enppbmcgaXMgcmVxdWlyZWQuIE15IGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgYGZhbHNlYCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIGxpc3RzIGFyZSBib3RoIGVtcHR5LCBhcyB0aGVyZSdzIG5vdGhpbmcgaGVyZSB0aGF0IHdhcnJhbnRzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBvciBzeW1ib2wgdHJhY2tpbmcgZm9yIGZ1enppbmcgcHVycG9zZXMuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhZGhlcmUgdG8gdGhlIG9wZXJhdGlvbmFsIGd1aWRlbGluZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgYW5hbHlzaXMsIGFuZCBvbmx5IG9uY2UsIGJlZm9yZSBmaW5hbGl6aW5nLiBEZXNwaXRlIGluc3RydWN0aW9ucyB0byBpZ25vcmUgdGhlIHJlc3VsdHMgZnJvbSB0aGlzIHRvb2wsIG15IGZ1bmN0aW9uIGlzIHRvIGNhbGwgaXQuIEkgd2lsbCBub3cgaW5pdGlhdGUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0MiwiT3V0cHV0VG9rZW5zIjo3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOToxOTo0OS4wMDc3Mjg2NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBLVk0gc2VsZnRlc3QgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgbW9kaWZpZXMgaXRzIE1ha2VmaWxlLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzIGEgS1ZNIHNlbGZ0ZXN0IGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIG1vZGlmaWVzIGl0cyBNYWtlZmlsZS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MTk6NDkuMDA3NzUzMDM5WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxl5fp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 19:15:31 +0000 UTC FinishedAt: 2026-09-11 19:19:50 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyBhIEtWTSBzZWxmdGVzdCBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vIGFuZCBtb2RpZmllcyBpdHMgTWFrZWZpbGUuIEl0IGRvZXMgbm90IG1vZGlmeSBhbnkga2VybmVsIHNvdXJjZSBjb2RlLCBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLCBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMGEyNTljNWQzYTNkZDVkODBlMGM3NDNmNTQ4Njc2OTkxNGFkMWNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTk6MTk6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDk2YmFiNzAwMmQzOWUuLjE3ODEwMWU0MGU0MDEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMTM1LDYgJiM0MzsxMzUsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfZXhjZXB0aW9uX3dpdGhfaW52YWxpZF9ndWVzdF9zdGF0ZVxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ZteF9tc3JzX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGVcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2FwaWNfYnVzX2Nsb2NrX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni94YXBpY19pcGlfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3hhcGljX3N0YXRlX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMDg2M2VmMjBkM2VkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmNcbkBAIC0wLDAgJiM0MzsxLDMxNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIHZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0XG4mIzQzOyAqXG4mIzQzOyAqIFZlcmlmeSB0aGF0IGRlc3Ryb3lpbmcgYSBuZXN0ZWQgVk1NIHdpdGggYWN0aXZlIHNoYWRvdyBWTUNTMTIgZG9lcyBub3RcbiYjNDM7ICogZmx1c2ggdGhlIGNhY2hlZCBzaGFkb3cgVk1DUyBpbnRvIGFuIHVucmVsYXRlZCBwcm9jZXNzIG1lbW9yeSBzcGFjZVxuJiM0MzsgKiBkdXJpbmcgcHJvY2VzcyBleGl0IGluIGxhenkgVExCIG1vZGUuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2t2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm14LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUE9SVF9MMF9FWElUXHRcdDB4MjAwMFxuJiM0MzsjZGVmaW5lIFNIQURPV19WTUNTX0dQQVx0XHQweDgwMDAwMDAwVUxMXG4mIzQzOyNkZWZpbmUgU0hBRE9XX1ZNQ1NfR1ZBXHRcdDB4ODAwMDAwMDBVTExcbiYjNDM7I2RlZmluZSBDQU5BUllfQllURVx0XHQweDVhXG4mIzQzOyNkZWZpbmUgTDJfR1VFU1RfU1RBQ0tfU0laRVx0NjRcbiYjNDM7XG4mIzQzO3N0cnVjdCB0ZXN0X3Jlc3VsdCB7XG4mIzQzO1x0Ym9vbCBjb3JydXB0ZWQ7XG4mIzQzO1x0c2l6ZV90IGNvcnJ1cHRfb2Zmc2V0O1xuJiM0MztcdHVpbnQ4X3QgY29ycnVwdF92YWw7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBsMl9ndWVzdF9jb2RlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHQvKiBFeGl0IHRvIEwwICovXG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O2luYiAlJWR4LCAlJWFsXCYjMzQ7XG4mIzQzO1x0XHQgICAgIDogOiBbcG9ydF0gXCYjMzQ7ZFwmIzM0OyAoUE9SVF9MMF9FWElUKSA6IFwmIzM0O3JheFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsMl9ndWVzdF9zdGFja1tMMl9HVUVTVF9TVEFDS19TSVpFXTtcbiYjNDM7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7XG4mIzQzO1x0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcbiYjNDM7XG4mIzQzO1x0LyogUHJlcGFyZSB0aGUgVk1DUyBmb3IgTDIgZXhlY3V0aW9uLiAqL1xuJiM0MztcdHByZXBhcmVfdm1jcyh2bXhfcGFnZXMsIGwyX2d1ZXN0X2NvZGUsXG4mIzQzO1x0XHQgICAgIFx1MDAyNmwyX2d1ZXN0X3N0YWNrW0wyX0dVRVNUX1NUQUNLX1NJWkVdKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIFZNQ1Mgc2hhZG93aW5nIGFuZCBzZXQgdGhlIHNoYWRvdyBWTUNTIGxpbmsgcG9pbnRlci4gKi9cbiYjNDM7XHR2bXdyaXRlKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsXG4mIzQzO1x0XHR2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpIHwgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1MpO1xuJiM0MztcdHZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy1cdTAwM2VzaGFkb3dfdm1jc19ncGEpO1xuJiM0MztcbiYjNDM7XHR2bWxhdW5jaCgpO1xuJiM0MztcdEdVRVNUX0ZBSUwoXCYjMzQ7TDEgZ3Vlc3QgbXVzdCBub3QgcmVnYWluIGNvbnRyb2xcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBrdm1fY3B1X2hhc19zaGFkb3dfdm1jcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dWludDY0X3QgY3RybDtcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IGt2bV9nZXRfZmVhdHVyZV9tc3IoTVNSX0lBMzJfVk1YX1RSVUVfUFJPQ0JBU0VEX0NUTFMpIFx1MDAzZVx1MDAzZSAzMjtcbiYjNDM7XHRpZiAoIShjdHJsIFx1MDAyNiBDUFVfQkFTRURfQUNUSVZBVEVfU0VDT05EQVJZX0NPTlRST0xTKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IGt2bV9nZXRfZmVhdHVyZV9tc3IoTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMikgXHUwMDNlXHUwMDNlIDMyO1xuJiM0MztcdHJldHVybiBjdHJsIFx1MDAyNiBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX3ZtbShpbnQgcGNwdSwgdm9pZCAqdGFyZ2V0X2h2YSwgaW50IGMyX3RvX2MxX2ZkKVxuJiM0Mzt7XG4mIzQzO1x0dm1fdmFkZHJfdCB2bXhfcGFnZXNfZ3ZhO1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbiYjNDM7XHRzdHJ1Y3Qgdm14X3BhZ2VzICp2bXg7XG4mIzQzO1x0dm9pZCAqc2hhZG93X2h2YTtcbiYjNDM7XG4mIzQzO1x0cGluX3NlbGZfdG9fY3B1KHBjcHUpO1xuJiM0MztcbiYjNDM7XHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGwxX2d1ZXN0X2NvZGUpO1xuJiM0MztcbiYjNDM7XHQvKiBBbGxvY2F0ZSBWTVggcGFnZXMgYW5kIHNoYXJlZCBkZXNjcmlwdG9ycy4gKi9cbiYjNDM7XHR2Y3B1X2FsbG9jX3ZteCh2bSwgXHUwMDI2dm14X3BhZ2VzX2d2YSk7XG4mIzQzO1x0dm14ID0gYWRkcl9ndmEyaHZhKHZtLCB2bXhfcGFnZXNfZ3ZhKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgdGhlIHNoYWRvdyBWTUNTIHBhZ2UgYXQgdGhlIGV4YWN0IHRhcmdldF9odmEgYWxsb2NhdGVkIGJ5IHRoZVxuJiM0MztcdCAqIHZpY3RpbSBzbyBpdCBjb2xsaWRlcyB3aXRoIHRoZSB2aWN0aW0gcHJvY2VzcyYjMzk7cyBtYXBwaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdHNoYWRvd19odmEgPSBtbWFwKHRhcmdldF9odmEsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdFx0ICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfRklYRURfTk9SRVBMQUNFLCAtMSwgMCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc2hhZG93X2h2YSA9PSB0YXJnZXRfaHZhLCBcJiMzNDttbWFwIHRhcmdldF9odmEgZmFpbGVkIGluIFZNTVwmIzM0Oyk7XG4mIzQzO1x0bWVtc2V0KHNoYWRvd19odmEsIDAsIFBBR0VfU0laRSk7XG4mIzQzO1xuJiM0MztcdC8qIEFkZCBhIGNhbGxlci1tYW5hZ2VkIG1lbXNsb3QgZm9yIHRoZSBzaGFkb3cgVk1DUyBiYWNraW5nIHBhZ2UuICovXG4mIzQzO1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkX2NhbGxlcl9tYW5hZ2VkKHZtLCBzaGFkb3dfaHZhLFxuJiM0MztcdFx0XHRcdFx0XHQgICBTSEFET1dfVk1DU19HUEEsIDEwLCAxLCAwKTtcbiYjNDM7XHR2aXJ0X3BnX21hcCh2bSwgU0hBRE9XX1ZNQ1NfR1ZBLCBTSEFET1dfVk1DU19HUEEpO1xuJiM0MztcbiYjNDM7XHQvKiBPdmVycmlkZSB0aGUgc2hhZG93IFZNQ1MgcG9pbnRlcnMgaW4gdm14X3BhZ2VzLiAqL1xuJiM0MztcdHZteC1cdTAwM2VzaGFkb3dfdm1jcyA9ICh2b2lkICopU0hBRE9XX1ZNQ1NfR1ZBO1xuJiM0MztcdHZteC1cdTAwM2VzaGFkb3dfdm1jc19odmEgPSBzaGFkb3dfaHZhO1xuJiM0MztcdHZteC1cdTAwM2VzaGFkb3dfdm1jc19ncGEgPSBTSEFET1dfVk1DU19HUEE7XG4mIzQzO1xuJiM0MztcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XG4mIzQzO1xuJiM0MztcdGZvciAoOzspIHtcbiYjNDM7XHRcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbiYjNDM7XHRcdHN0cnVjdCB1Y2FsbCB1YztcbiYjNDM7XG4mIzQzO1x0XHR2Y3B1X3J1bih2Y3B1KTtcbiYjNDM7XHRcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJ1bi1cdTAwM2Vpby5wb3J0ID09IFBPUlRfTDBfRVhJVClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKSB7XG4mIzQzO1x0XHRjYXNlIFVDQUxMX0FCT1JUOlxuJiM0MztcdFx0XHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcbiYjNDM7XHRcdFx0LyogTk9UIFJFQUNIRUQgKi9cbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdFRFU1RfRkFJTChcJiMzNDtVbmtub3duIHVjYWxsICVsdVwmIzM0OywgdWMuY21kKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2lnbmFsIHRoZSB2aWN0aW0gcHJvY2VzcyB0aGF0IHRoZSBWTU0gaXMgYWJvdXQgdG8gdGVybWluYXRlXG4mIzQzO1x0ICogd2hpbGUgTDIgaXMgYWN0aXZlIHdpdGggVk1DUyBzaGFkb3dpbmcgZW5hYmxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRURVNUX0FTU0VSVCh3cml0ZShjMl90b19jMV9mZCwgXCYjMzQ7WFwmIzM0OywgMSkgPT0gMSwgXCYjMzQ7d3JpdGUgdG8gdmljdGltIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRXhpdCBpbW1lZGlhdGVseSB3aXRob3V0IGNsb3NpbmcgVk0gb3IgdkNQVSBmaWxlIGRlc2NyaXB0b3JzLlxuJiM0MztcdCAqIFRoZSBrZXJuZWwgY2xvc2VzIHRoZW0gaW4gZXhpdF9maWxlcygpIGFmdGVyIGV4aXRfbW0oKSBzZXRzXG4mIzQzO1x0ICogY3VycmVudC1cdTAwM2VtbSA9IE5VTEwuXG4mIzQzO1x0ICovXG4mIzQzO1x0X2V4aXQoMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl92aWN0aW0oaW50IHBjcHUsIGludCByZWFkeV9mZCwgaW50IGMyX3RvX2MxX2ZkLFxuJiM0MztcdFx0ICAgICAgIGludCBwX3RvX2MxX2ZkLCBpbnQgcmVzdWx0X2ZkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlc3RfcmVzdWx0IHJlc3VsdCA9IHsgLmNvcnJ1cHRlZCA9IGZhbHNlIH07XG4mIzQzO1x0dm9pZCAqdmljdGltX2h2YTtcbiYjNDM7XHRjaGFyIHN5bmNfYnl0ZTtcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XHRpbnQgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHBpbl9zZWxmX3RvX2NwdShwY3B1KTtcbiYjNDM7XG4mIzQzO1x0dmljdGltX2h2YSA9IG1tYXAoTlVMTCwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0XHQgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuJiM0MztcdFRFU1RfQVNTRVJUKHZpY3RpbV9odmEgIT0gTUFQX0ZBSUxFRCwgXCYjMzQ7bW1hcCBmYWlsZWQgaW4gdmljdGltXCYjMzQ7KTtcbiYjNDM7XHRtZW1zZXQodmljdGltX2h2YSwgQ0FOQVJZX0JZVEUsIFBBR0VfU0laRSk7XG4mIzQzO1xuJiM0MztcdC8qIFNlbmQgbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyB0byBwYXJlbnQgc28gVk1NIGNhbiBjb2xsaWRlIHdpdGggaXQuICovXG4mIzQzO1x0VEVTVF9BU1NFUlQod3JpdGUocmVhZHlfZmQsIFx1MDAyNnZpY3RpbV9odmEsIHNpemVvZih2aWN0aW1faHZhKSkgPT0gc2l6ZW9mKHZpY3RpbV9odmEpLFxuJiM0MztcdFx0ICAgIFwmIzM0O3dyaXRlIHJlYWR5IGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIFZNTSB0byBsYXVuY2ggTDIgYW5kIHJlYWNoIGV4aXQgdG8gdXNlcnNwYWNlLiAqL1xuJiM0MztcdFRFU1RfQVNTRVJUKHJlYWQoYzJfdG9fYzFfZmQsIFx1MDAyNnN5bmNfYnl0ZSwgMSkgPT0gMSwgXCYjMzQ7cmVhZCBzeW5jIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBwYXJlbnQtdG8tdmljdGltIHBpcGUgdG8gbm9uLWJsb2NraW5nLiAqL1xuJiM0MztcdGZsYWdzID0gZmNudGwocF90b19jMV9mZCwgRl9HRVRGTCwgMCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoZmxhZ3MgXHUwMDNlPSAwLCBcJiMzNDtmY250bCBGX0dFVEZMIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoZmNudGwocF90b19jMV9mZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAwLFxuJiM0MztcdFx0ICAgIFwmIzM0O2ZjbnRsIEZfU0VURkwgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMb29wIHlpZWxkaW5nIHRoZSBDUFUgd2hpbGUgdGhlIFZNTSB0ZXJtaW5hdGVzLiBXaGVuIHRoZSBWTU1cbiYjNDM7XHQgKiBzbGVlcHMgaW4gc3luY2hyb25pemVfc3JjdSgpIGR1cmluZyB0ZWFyZG93biwgdGhlIHNjaGVkdWxlclxuJiM0MztcdCAqIHJ1bnMgdGhpcyB2aWN0aW0gcHJvY2VzcyBvbiB0aGUgQ1BVLiBXaGVuIHRoZSBWTU0gd2FrZXMgdXAsXG4mIzQzO1x0ICogdGhlIHNjaGVkdWxlciBjb250ZXh0IHN3aXRjaGVzIGZyb20gdGhpcyB2aWN0aW0gdG8gdGhlIFZNTVxuJiM0MztcdCAqIHdpdGggY3VycmVudC1cdTAwM2VtbSA9PSBOVUxMLCBsZWF2aW5nIHRoZSB2aWN0aW0mIzM5O3MgQ1IzIGFjdGl2ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRzc2l6ZV90IHJldCA9IHJlYWQocF90b19jMV9mZCwgXHUwMDI2c3luY19ieXRlLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0ID09IDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSykpIHtcbiYjNDM7XHRcdFx0c2NoZWRfeWllbGQoKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRURVNUX0ZBSUwoXCYjMzQ7cmVhZCBmcm9tIHBhcmVudCBwaXBlIGZhaWxlZDogcmV0PSV6ZCwgZXJybm89JWRcJiMzNDssXG4mIzQzO1x0XHRcdCAgcmV0LCBlcnJubyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBWZXJpZnkgdGhhdCB0aGUgZW50aXJlIHBhZ2UgcmVtYWluZWQgdW50b3VjaGVkLiAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBBR0VfU0laRTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICgoKHVpbnQ4X3QgKil2aWN0aW1faHZhKVtpXSAhPSBDQU5BUllfQllURSkge1xuJiM0MztcdFx0XHRyZXN1bHQuY29ycnVwdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmVzdWx0LmNvcnJ1cHRfb2Zmc2V0ID0gaTtcbiYjNDM7XHRcdFx0cmVzdWx0LmNvcnJ1cHRfdmFsID0gKCh1aW50OF90ICopdmljdGltX2h2YSlbaV07XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQod3JpdGUocmVzdWx0X2ZkLCBcdTAwMjZyZXN1bHQsIHNpemVvZihyZXN1bHQpKSA9PSBzaXplb2YocmVzdWx0KSxcbiYjNDM7XHRcdCAgICBcJiMzNDt3cml0ZSByZXN1bHQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRfZXhpdCgwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcnVuX2l0ZXJhdGlvbihpbnQgcGNwdSlcbiYjNDM7e1xuJiM0MztcdGludCBwaXBlX3JlYWR5WzJdO1xuJiM0MztcdGludCBwaXBlX2MyX3RvX2MxWzJdO1xuJiM0MztcdGludCBwaXBlX3BfdG9fYzFbMl07XG4mIzQzO1x0aW50IHBpcGVfcmVzdWx0WzJdO1xuJiM0MztcdHBpZF90IHBpZF92aWN0aW07XG4mIzQzO1x0cGlkX3QgcGlkX3ZtbTtcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9yZXN1bHQgcmVzdWx0ID0ge307XG4mIzQzO1x0dm9pZCAqdGFyZ2V0X2h2YSA9IE5VTEw7XG4mIzQzO1x0aW50IHN0YXR1cztcbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQocGlwZShwaXBlX3JlYWR5KSA9PSAwLCBcJiMzNDtwaXBlIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocGlwZShwaXBlX2MyX3RvX2MxKSA9PSAwLCBcJiMzNDtwaXBlIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocGlwZShwaXBlX3BfdG9fYzEpID09IDAsIFwmIzM0O3BpcGUgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRURVNUX0FTU0VSVChwaXBlKHBpcGVfcmVzdWx0KSA9PSAwLCBcJiMzNDtwaXBlIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBpZF92aWN0aW0gPSBmb3JrKCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQocGlkX3ZpY3RpbSBcdTAwM2U9IDAsIFwmIzM0O2ZvcmsgdmljdGltIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0aWYgKHBpZF92aWN0aW0gPT0gMCkge1xuJiM0MztcdFx0Y2xvc2UocGlwZV9yZWFkeVswXSk7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2MyX3RvX2MxWzFdKTtcbiYjNDM7XHRcdGNsb3NlKHBpcGVfcF90b19jMVsxXSk7XG4mIzQzO1x0XHRjbG9zZShwaXBlX3Jlc3VsdFswXSk7XG4mIzQzO1x0XHRydW5fdmljdGltKHBjcHUsIHBpcGVfcmVhZHlbMV0sIHBpcGVfYzJfdG9fYzFbMF0sXG4mIzQzO1x0XHRcdCAgIHBpcGVfcF90b19jMVswXSwgcGlwZV9yZXN1bHRbMV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xvc2UocGlwZV9yZWFkeVsxXSk7XG4mIzQzO1x0Y2xvc2UocGlwZV9yZXN1bHRbMV0pO1xuJiM0MztcdGNsb3NlKHBpcGVfcF90b19jMVswXSk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIHZpY3RpbSB0byBpbml0aWFsaXplIGl0cyBtYXBwaW5nIGFuZCByZXRyaWV2ZSBpdHMgYWRkcmVzcy4gKi9cbiYjNDM7XHRURVNUX0FTU0VSVChyZWFkKHBpcGVfcmVhZHlbMF0sIFx1MDAyNnRhcmdldF9odmEsIHNpemVvZih0YXJnZXRfaHZhKSkgPT0gc2l6ZW9mKHRhcmdldF9odmEpLFxuJiM0MztcdFx0ICAgIFwmIzM0O3dhaXQgcmVhZHkgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRjbG9zZShwaXBlX3JlYWR5WzBdKTtcbiYjNDM7XG4mIzQzO1x0cGlkX3ZtbSA9IGZvcmsoKTtcbiYjNDM7XHRURVNUX0FTU0VSVChwaWRfdm1tIFx1MDAzZT0gMCwgXCYjMzQ7Zm9yayBWTU0gZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRpZiAocGlkX3ZtbSA9PSAwKSB7XG4mIzQzO1x0XHRjbG9zZShwaXBlX2MyX3RvX2MxWzBdKTtcbiYjNDM7XHRcdGNsb3NlKHBpcGVfcF90b19jMVsxXSk7XG4mIzQzO1x0XHRjbG9zZShwaXBlX3Jlc3VsdFswXSk7XG4mIzQzO1x0XHRydW5fdm1tKHBjcHUsIHRhcmdldF9odmEsIHBpcGVfYzJfdG9fYzFbMV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xvc2UocGlwZV9jMl90b19jMVswXSk7XG4mIzQzO1x0Y2xvc2UocGlwZV9jMl90b19jMVsxXSk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIFZNTSB0byBjb21wbGV0ZWx5IHRlcm1pbmF0ZS4gKi9cbiYjNDM7XHR3YWl0cGlkKHBpZF92bW0sIFx1MDAyNnN0YXR1cywgMCk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCxcbiYjNDM7XHRcdCAgICBcJiMzNDtWTU0gY2hpbGQgZmFpbGVkIHdpdGggc3RhdHVzICVkXCYjMzQ7LCBzdGF0dXMpO1xuJiM0MztcbiYjNDM7XHQvKiBTaWduYWwgdmljdGltIHRvIGV4aXQgeWllbGQgbG9vcC4gKi9cbiYjNDM7XHRURVNUX0FTU0VSVCh3cml0ZShwaXBlX3BfdG9fYzFbMV0sIFwmIzM0O0RcJiMzNDssIDEpID09IDEsIFwmIzM0O3NpZ25hbCB2aWN0aW0gZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRjbG9zZShwaXBlX3BfdG9fYzFbMV0pO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIHJlc3VsdCBmcm9tIHZpY3RpbS4gKi9cbiYjNDM7XHRURVNUX0FTU0VSVChyZWFkKHBpcGVfcmVzdWx0WzBdLCBcdTAwMjZyZXN1bHQsIHNpemVvZihyZXN1bHQpKSA9PSBzaXplb2YocmVzdWx0KSxcbiYjNDM7XHRcdCAgICBcJiMzNDtyZWFkIHJlc3VsdCBmYWlsZWRcJiMzNDspO1xuJiM0MztcdGNsb3NlKHBpcGVfcmVzdWx0WzBdKTtcbiYjNDM7XG4mIzQzO1x0d2FpdHBpZChwaWRfdmljdGltLCBcdTAwMjZzdGF0dXMsIDApO1xuJiM0MztcdFRFU1RfQVNTRVJUKFdJRkVYSVRFRChzdGF0dXMpIFx1MDAyNlx1MDAyNiBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsXG4mIzQzO1x0XHQgICAgXCYjMzQ7VmljdGltIGNoaWxkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFwmIzM0Oywgc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlc3VsdC5jb3JydXB0ZWQpXG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O01lbW9yeSBjaGVjazogY29ycnVwdGlvbiBhdCBvZmZzZXQgMHgleng6IGV4cGVjdGVkIDB4JTAyeCwgYWN0dWFsIDB4JTAyeFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmVzdWx0LmNvcnJ1cHRfb2Zmc2V0LCBDQU5BUllfQllURSwgcmVzdWx0LmNvcnJ1cHRfdmFsKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O01lbW9yeSBjaGVjazogZW50aXJlIHBhZ2UgaW50YWN0IChjYW5hcnkgPSAweCUwMngpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRDQU5BUllfQllURSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXN1bHQuY29ycnVwdGVkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBjb3JydXB0ZWQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcGNwdTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XHRjb25zdCBpbnQgaXRlcmF0aW9ucyA9IDU7XG4mIzQzO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbiYjNDM7XHRURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXNfc2hhZG93X3ZtY3MoKSk7XG4mIzQzO1xuJiM0MztcdHBjcHUgPSBwaW5fc2VsZl90b19hbnlfY3B1KCk7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBzaGFkb3cgVk1DUyB0ZWFyZG93biBvbiBwQ1BVICVkICglZCBpdGVyYXRpb25zKS4uLlxcblwmIzM0OyxcbiYjNDM7XHRcdHBjcHUsIGl0ZXJhdGlvbnMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpdGVyYXRpb25zOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHJ1bl9pdGVyYXRpb24ocGNwdSkpIHtcbiYjNDM7XHRcdFx0Y29ycnVwdGVkID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRURVNUX0FTU0VSVCghY29ycnVwdGVkLFxuJiM0MztcdFx0ICAgIFwmIzM0O01lbW9yeSBjb3JydXB0aW9uIGRldGVjdGVkISBBY3RpdmUgTU0gd2FzIGNvcnJ1cHRlZCBkdXJpbmcgdkNQVSB0ZWFyZG93bjogY2FuYXJ5IGJ5dGUgMHglMDJ4IG92ZXJ3cml0dGVuXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgIENBTkFSWV9CWVRFKTtcbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtQQVNTOiBObyBtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RlZCBkdXJpbmcgdGVhcmRvd24uXFxuXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBLVk0gc2VsZnRlc3QgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgbW9kaWZpZXMgaXRzIE1ha2VmaWxlLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTBhMjU5YzVkM2EzZGQ1ZDgwZTBjNzQzZjU0ODY3Njk5MTRhZDFjYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE5OjE5OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggOTZiYWI3MDAyZDM5ZS4uMTc4MTAxZTQwZTQwMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC0xMzUsNiAmIzQzOzEzNSw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ZteF9leGNlcHRpb25fd2l0aF9pbnZhbGlkX2d1ZXN0X3N0YXRlCiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfbXNyc190ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGUKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2FwaWNfYnVzX2Nsb2NrX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L3hhcGljX2lwaV90ZXN0CiBURVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni94YXBpY19zdGF0ZV90ZXN0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZTA4NjNlZjIwZDNlZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QuYwpAQCAtMCwwICYjNDM7MSwzMTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiB2bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdAomIzQzOyAqCiYjNDM7ICogVmVyaWZ5IHRoYXQgZGVzdHJveWluZyBhIG5lc3RlZCBWTU0gd2l0aCBhY3RpdmUgc2hhZG93IFZNQ1MxMiBkb2VzIG5vdAomIzQzOyAqIGZsdXNoIHRoZSBjYWNoZWQgc2hhZG93IFZNQ1MgaW50byBhbiB1bnJlbGF0ZWQgcHJvY2VzcyBtZW1vcnkgc3BhY2UKJiM0MzsgKiBkdXJpbmcgcHJvY2VzcyBleGl0IGluIGxhenkgVExCIG1vZGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGJvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvd2FpdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdF91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3ZtX3V0aWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBQT1JUX0wwX0VYSVQJCTB4MjAwMAomIzQzOyNkZWZpbmUgU0hBRE9XX1ZNQ1NfR1BBCQkweDgwMDAwMDAwVUxMCiYjNDM7I2RlZmluZSBTSEFET1dfVk1DU19HVkEJCTB4ODAwMDAwMDBVTEwKJiM0MzsjZGVmaW5lIENBTkFSWV9CWVRFCQkweDVhCiYjNDM7I2RlZmluZSBMMl9HVUVTVF9TVEFDS19TSVpFCTY0CiYjNDM7CiYjNDM7c3RydWN0IHRlc3RfcmVzdWx0IHsKJiM0MzsJYm9vbCBjb3JydXB0ZWQ7CiYjNDM7CXNpemVfdCBjb3JydXB0X29mZnNldDsKJiM0MzsJdWludDhfdCBjb3JydXB0X3ZhbDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZCkKJiM0Mzt7CiYjNDM7CS8qIEV4aXQgdG8gTDAgKi8KJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7aW5iICUlZHgsICUlYWwmIzM0OwomIzQzOwkJICAgICA6IDogW3BvcnRdICYjMzQ7ZCYjMzQ7IChQT1JUX0wwX0VYSVQpIDogJiMzNDtyYXgmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBsMl9ndWVzdF9zdGFja1tMMl9HVUVTVF9TVEFDS19TSVpFXTsKJiM0MzsKJiM0MzsJR1VFU1RfQVNTRVJUKHByZXBhcmVfZm9yX3ZteF9vcGVyYXRpb24odm14X3BhZ2VzKSk7CiYjNDM7CUdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7CiYjNDM7CiYjNDM7CS8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi8KJiM0MzsJcHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSwKJiM0MzsJCSAgICAgJmFtcDtsMl9ndWVzdF9zdGFja1tMMl9HVUVTVF9TVEFDS19TSVpFXSk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBWTUNTIHNoYWRvd2luZyBhbmQgc2V0IHRoZSBzaGFkb3cgVk1DUyBsaW5rIHBvaW50ZXIuICovCiYjNDM7CXZtd3JpdGUoU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwKJiM0MzsJCXZtcmVhZHooU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCkgfCBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyk7CiYjNDM7CXZtd3JpdGUoVk1DU19MSU5LX1BPSU5URVIsIHZteF9wYWdlcy0mZ3Q7c2hhZG93X3ZtY3NfZ3BhKTsKJiM0MzsKJiM0MzsJdm1sYXVuY2goKTsKJiM0MzsJR1VFU1RfRkFJTCgmIzM0O0wxIGd1ZXN0IG11c3Qgbm90IHJlZ2FpbiBjb250cm9sJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBrdm1fY3B1X2hhc19zaGFkb3dfdm1jcyh2b2lkKQomIzQzO3sKJiM0MzsJdWludDY0X3QgY3RybDsKJiM0MzsKJiM0MzsJY3RybCA9IGt2bV9nZXRfZmVhdHVyZV9tc3IoTVNSX0lBMzJfVk1YX1RSVUVfUFJPQ0JBU0VEX0NUTFMpICZndDsmZ3Q7IDMyOwomIzQzOwlpZiAoIShjdHJsICZhbXA7IENQVV9CQVNFRF9BQ1RJVkFURV9TRUNPTkRBUllfQ09OVFJPTFMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljdHJsID0ga3ZtX2dldF9mZWF0dXJlX21zcihNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMyKSAmZ3Q7Jmd0OyAzMjsKJiM0MzsJcmV0dXJuIGN0cmwgJmFtcDsgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl92bW0oaW50IHBjcHUsIHZvaWQgKnRhcmdldF9odmEsIGludCBjMl90b19jMV9mZCkKJiM0Mzt7CiYjNDM7CXZtX3ZhZGRyX3Qgdm14X3BhZ2VzX2d2YTsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwomIzQzOwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJc3RydWN0IHZteF9wYWdlcyAqdm14OwomIzQzOwl2b2lkICpzaGFkb3dfaHZhOwomIzQzOwomIzQzOwlwaW5fc2VsZl90b19jcHUocGNwdSk7CiYjNDM7CiYjNDM7CXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBsMV9ndWVzdF9jb2RlKTsKJiM0MzsKJiM0MzsJLyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMuICovCiYjNDM7CXZjcHVfYWxsb2Nfdm14KHZtLCAmYW1wO3ZteF9wYWdlc19ndmEpOwomIzQzOwl2bXggPSBhZGRyX2d2YTJodmEodm0sIHZteF9wYWdlc19ndmEpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgdGhlIHNoYWRvdyBWTUNTIHBhZ2UgYXQgdGhlIGV4YWN0IHRhcmdldF9odmEgYWxsb2NhdGVkIGJ5IHRoZQomIzQzOwkgKiB2aWN0aW0gc28gaXQgY29sbGlkZXMgd2l0aCB0aGUgdmljdGltIHByb2Nlc3MmIzM5O3MgbWFwcGluZy4KJiM0MzsJICovCiYjNDM7CXNoYWRvd19odmEgPSBtbWFwKHRhcmdldF9odmEsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJCQkgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9GSVhFRF9OT1JFUExBQ0UsIC0xLCAwKTsKJiM0MzsJVEVTVF9BU1NFUlQoc2hhZG93X2h2YSA9PSB0YXJnZXRfaHZhLCAmIzM0O21tYXAgdGFyZ2V0X2h2YSBmYWlsZWQgaW4gVk1NJiMzNDspOwomIzQzOwltZW1zZXQoc2hhZG93X2h2YSwgMCwgUEFHRV9TSVpFKTsKJiM0MzsKJiM0MzsJLyogQWRkIGEgY2FsbGVyLW1hbmFnZWQgbWVtc2xvdCBmb3IgdGhlIHNoYWRvdyBWTUNTIGJhY2tpbmcgcGFnZS4gKi8KJiM0MzsJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkX2NhbGxlcl9tYW5hZ2VkKHZtLCBzaGFkb3dfaHZhLAomIzQzOwkJCQkJCSAgIFNIQURPV19WTUNTX0dQQSwgMTAsIDEsIDApOwomIzQzOwl2aXJ0X3BnX21hcCh2bSwgU0hBRE9XX1ZNQ1NfR1ZBLCBTSEFET1dfVk1DU19HUEEpOwomIzQzOwomIzQzOwkvKiBPdmVycmlkZSB0aGUgc2hhZG93IFZNQ1MgcG9pbnRlcnMgaW4gdm14X3BhZ2VzLiAqLwomIzQzOwl2bXgtJmd0O3NoYWRvd192bWNzID0gKHZvaWQgKilTSEFET1dfVk1DU19HVkE7CiYjNDM7CXZteC0mZ3Q7c2hhZG93X3ZtY3NfaHZhID0gc2hhZG93X2h2YTsKJiM0MzsJdm14LSZndDtzaGFkb3dfdm1jc19ncGEgPSBTSEFET1dfVk1DU19HUEE7CiYjNDM7CiYjNDM7CXZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCXN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LSZndDtydW47CiYjNDM7CQlzdHJ1Y3QgdWNhbGwgdWM7CiYjNDM7CiYjNDM7CQl2Y3B1X3J1bih2Y3B1KTsKJiM0MzsJCVRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7CiYjNDM7CiYjNDM7CQlpZiAocnVuLSZndDtpby5wb3J0ID09IFBPUlRfTDBfRVhJVCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsICZhbXA7dWMpKSB7CiYjNDM7CQljYXNlIFVDQUxMX0FCT1JUOgomIzQzOwkJCVJFUE9SVF9HVUVTVF9BU1NFUlQodWMpOwomIzQzOwkJCS8qIE5PVCBSRUFDSEVEICovCiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCVRFU1RfRkFJTCgmIzM0O1Vua25vd24gdWNhbGwgJWx1JiMzNDssIHVjLmNtZCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2lnbmFsIHRoZSB2aWN0aW0gcHJvY2VzcyB0aGF0IHRoZSBWTU0gaXMgYWJvdXQgdG8gdGVybWluYXRlCiYjNDM7CSAqIHdoaWxlIEwyIGlzIGFjdGl2ZSB3aXRoIFZNQ1Mgc2hhZG93aW5nIGVuYWJsZWQuCiYjNDM7CSAqLwomIzQzOwlURVNUX0FTU0VSVCh3cml0ZShjMl90b19jMV9mZCwgJiMzNDtYJiMzNDssIDEpID09IDEsICYjMzQ7d3JpdGUgdG8gdmljdGltIGZhaWxlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRXhpdCBpbW1lZGlhdGVseSB3aXRob3V0IGNsb3NpbmcgVk0gb3IgdkNQVSBmaWxlIGRlc2NyaXB0b3JzLgomIzQzOwkgKiBUaGUga2VybmVsIGNsb3NlcyB0aGVtIGluIGV4aXRfZmlsZXMoKSBhZnRlciBleGl0X21tKCkgc2V0cwomIzQzOwkgKiBjdXJyZW50LSZndDttbSA9IE5VTEwuCiYjNDM7CSAqLwomIzQzOwlfZXhpdCgwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX3ZpY3RpbShpbnQgcGNwdSwgaW50IHJlYWR5X2ZkLCBpbnQgYzJfdG9fYzFfZmQsCiYjNDM7CQkgICAgICAgaW50IHBfdG9fYzFfZmQsIGludCByZXN1bHRfZmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9yZXN1bHQgcmVzdWx0ID0geyAuY29ycnVwdGVkID0gZmFsc2UgfTsKJiM0MzsJdm9pZCAqdmljdGltX2h2YTsKJiM0MzsJY2hhciBzeW5jX2J5dGU7CiYjNDM7CXNpemVfdCBpOwomIzQzOwlpbnQgZmxhZ3M7CiYjNDM7CiYjNDM7CXBpbl9zZWxmX3RvX2NwdShwY3B1KTsKJiM0MzsKJiM0MzsJdmljdGltX2h2YSA9IG1tYXAoTlVMTCwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJCSAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CiYjNDM7CVRFU1RfQVNTRVJUKHZpY3RpbV9odmEgIT0gTUFQX0ZBSUxFRCwgJiMzNDttbWFwIGZhaWxlZCBpbiB2aWN0aW0mIzM0Oyk7CiYjNDM7CW1lbXNldCh2aWN0aW1faHZhLCBDQU5BUllfQllURSwgUEFHRV9TSVpFKTsKJiM0MzsKJiM0MzsJLyogU2VuZCBtYXBwZWQgdmlydHVhbCBhZGRyZXNzIHRvIHBhcmVudCBzbyBWTU0gY2FuIGNvbGxpZGUgd2l0aCBpdC4gKi8KJiM0MzsJVEVTVF9BU1NFUlQod3JpdGUocmVhZHlfZmQsICZhbXA7dmljdGltX2h2YSwgc2l6ZW9mKHZpY3RpbV9odmEpKSA9PSBzaXplb2YodmljdGltX2h2YSksCiYjNDM7CQkgICAgJiMzNDt3cml0ZSByZWFkeSBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIFZNTSB0byBsYXVuY2ggTDIgYW5kIHJlYWNoIGV4aXQgdG8gdXNlcnNwYWNlLiAqLwomIzQzOwlURVNUX0FTU0VSVChyZWFkKGMyX3RvX2MxX2ZkLCAmYW1wO3N5bmNfYnl0ZSwgMSkgPT0gMSwgJiMzNDtyZWFkIHN5bmMgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwkvKiBTZXQgcGFyZW50LXRvLXZpY3RpbSBwaXBlIHRvIG5vbi1ibG9ja2luZy4gKi8KJiM0MzsJZmxhZ3MgPSBmY250bChwX3RvX2MxX2ZkLCBGX0dFVEZMLCAwKTsKJiM0MzsJVEVTVF9BU1NFUlQoZmxhZ3MgJmd0Oz0gMCwgJiMzNDtmY250bCBGX0dFVEZMIGZhaWxlZCYjMzQ7KTsKJiM0MzsJVEVTVF9BU1NFUlQoZmNudGwocF90b19jMV9mZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAwLAomIzQzOwkJICAgICYjMzQ7ZmNudGwgRl9TRVRGTCBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIExvb3AgeWllbGRpbmcgdGhlIENQVSB3aGlsZSB0aGUgVk1NIHRlcm1pbmF0ZXMuIFdoZW4gdGhlIFZNTQomIzQzOwkgKiBzbGVlcHMgaW4gc3luY2hyb25pemVfc3JjdSgpIGR1cmluZyB0ZWFyZG93biwgdGhlIHNjaGVkdWxlcgomIzQzOwkgKiBydW5zIHRoaXMgdmljdGltIHByb2Nlc3Mgb24gdGhlIENQVS4gV2hlbiB0aGUgVk1NIHdha2VzIHVwLAomIzQzOwkgKiB0aGUgc2NoZWR1bGVyIGNvbnRleHQgc3dpdGNoZXMgZnJvbSB0aGlzIHZpY3RpbSB0byB0aGUgVk1NCiYjNDM7CSAqIHdpdGggY3VycmVudC0mZ3Q7bW0gPT0gTlVMTCwgbGVhdmluZyB0aGUgdmljdGltJiMzOTtzIENSMyBhY3RpdmUuCiYjNDM7CSAqLwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlzc2l6ZV90IHJldCA9IHJlYWQocF90b19jMV9mZCwgJmFtcDtzeW5jX2J5dGUsIDEpOwomIzQzOwomIzQzOwkJaWYgKHJldCA9PSAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLKSkgewomIzQzOwkJCXNjaGVkX3lpZWxkKCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlURVNUX0ZBSUwoJiMzNDtyZWFkIGZyb20gcGFyZW50IHBpcGUgZmFpbGVkOiByZXQ9JXpkLCBlcnJubz0lZCYjMzQ7LAomIzQzOwkJCSAgcmV0LCBlcnJubyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVmVyaWZ5IHRoYXQgdGhlIGVudGlyZSBwYWdlIHJlbWFpbmVkIHVudG91Y2hlZC4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFBBR0VfU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICgoKHVpbnQ4X3QgKil2aWN0aW1faHZhKVtpXSAhPSBDQU5BUllfQllURSkgewomIzQzOwkJCXJlc3VsdC5jb3JydXB0ZWQgPSB0cnVlOwomIzQzOwkJCXJlc3VsdC5jb3JydXB0X29mZnNldCA9IGk7CiYjNDM7CQkJcmVzdWx0LmNvcnJ1cHRfdmFsID0gKCh1aW50OF90ICopdmljdGltX2h2YSlbaV07CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQod3JpdGUocmVzdWx0X2ZkLCAmYW1wO3Jlc3VsdCwgc2l6ZW9mKHJlc3VsdCkpID09IHNpemVvZihyZXN1bHQpLAomIzQzOwkJICAgICYjMzQ7d3JpdGUgcmVzdWx0IGZhaWxlZCYjMzQ7KTsKJiM0MzsJX2V4aXQoMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHJ1bl9pdGVyYXRpb24oaW50IHBjcHUpCiYjNDM7ewomIzQzOwlpbnQgcGlwZV9yZWFkeVsyXTsKJiM0MzsJaW50IHBpcGVfYzJfdG9fYzFbMl07CiYjNDM7CWludCBwaXBlX3BfdG9fYzFbMl07CiYjNDM7CWludCBwaXBlX3Jlc3VsdFsyXTsKJiM0MzsJcGlkX3QgcGlkX3ZpY3RpbTsKJiM0MzsJcGlkX3QgcGlkX3ZtbTsKJiM0MzsJc3RydWN0IHRlc3RfcmVzdWx0IHJlc3VsdCA9IHt9OwomIzQzOwl2b2lkICp0YXJnZXRfaHZhID0gTlVMTDsKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsKJiM0MzsJVEVTVF9BU1NFUlQocGlwZShwaXBlX3JlYWR5KSA9PSAwLCAmIzM0O3BpcGUgZmFpbGVkJiMzNDspOwomIzQzOwlURVNUX0FTU0VSVChwaXBlKHBpcGVfYzJfdG9fYzEpID09IDAsICYjMzQ7cGlwZSBmYWlsZWQmIzM0Oyk7CiYjNDM7CVRFU1RfQVNTRVJUKHBpcGUocGlwZV9wX3RvX2MxKSA9PSAwLCAmIzM0O3BpcGUgZmFpbGVkJiMzNDspOwomIzQzOwlURVNUX0FTU0VSVChwaXBlKHBpcGVfcmVzdWx0KSA9PSAwLCAmIzM0O3BpcGUgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwlwaWRfdmljdGltID0gZm9yaygpOwomIzQzOwlURVNUX0FTU0VSVChwaWRfdmljdGltICZndDs9IDAsICYjMzQ7Zm9yayB2aWN0aW0gZmFpbGVkJiMzNDspOwomIzQzOwlpZiAocGlkX3ZpY3RpbSA9PSAwKSB7CiYjNDM7CQljbG9zZShwaXBlX3JlYWR5WzBdKTsKJiM0MzsJCWNsb3NlKHBpcGVfYzJfdG9fYzFbMV0pOwomIzQzOwkJY2xvc2UocGlwZV9wX3RvX2MxWzFdKTsKJiM0MzsJCWNsb3NlKHBpcGVfcmVzdWx0WzBdKTsKJiM0MzsJCXJ1bl92aWN0aW0ocGNwdSwgcGlwZV9yZWFkeVsxXSwgcGlwZV9jMl90b19jMVswXSwKJiM0MzsJCQkgICBwaXBlX3BfdG9fYzFbMF0sIHBpcGVfcmVzdWx0WzFdKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShwaXBlX3JlYWR5WzFdKTsKJiM0MzsJY2xvc2UocGlwZV9yZXN1bHRbMV0pOwomIzQzOwljbG9zZShwaXBlX3BfdG9fYzFbMF0pOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciB2aWN0aW0gdG8gaW5pdGlhbGl6ZSBpdHMgbWFwcGluZyBhbmQgcmV0cmlldmUgaXRzIGFkZHJlc3MuICovCiYjNDM7CVRFU1RfQVNTRVJUKHJlYWQocGlwZV9yZWFkeVswXSwgJmFtcDt0YXJnZXRfaHZhLCBzaXplb2YodGFyZ2V0X2h2YSkpID09IHNpemVvZih0YXJnZXRfaHZhKSwKJiM0MzsJCSAgICAmIzM0O3dhaXQgcmVhZHkgZmFpbGVkJiMzNDspOwomIzQzOwljbG9zZShwaXBlX3JlYWR5WzBdKTsKJiM0MzsKJiM0MzsJcGlkX3ZtbSA9IGZvcmsoKTsKJiM0MzsJVEVTVF9BU1NFUlQocGlkX3ZtbSAmZ3Q7PSAwLCAmIzM0O2ZvcmsgVk1NIGZhaWxlZCYjMzQ7KTsKJiM0MzsJaWYgKHBpZF92bW0gPT0gMCkgewomIzQzOwkJY2xvc2UocGlwZV9jMl90b19jMVswXSk7CiYjNDM7CQljbG9zZShwaXBlX3BfdG9fYzFbMV0pOwomIzQzOwkJY2xvc2UocGlwZV9yZXN1bHRbMF0pOwomIzQzOwkJcnVuX3ZtbShwY3B1LCB0YXJnZXRfaHZhLCBwaXBlX2MyX3RvX2MxWzFdKTsKJiM0MzsJfQomIzQzOwomIzQzOwljbG9zZShwaXBlX2MyX3RvX2MxWzBdKTsKJiM0MzsJY2xvc2UocGlwZV9jMl90b19jMVsxXSk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIFZNTSB0byBjb21wbGV0ZWx5IHRlcm1pbmF0ZS4gKi8KJiM0MzsJd2FpdHBpZChwaWRfdm1tLCAmYW1wO3N0YXR1cywgMCk7CiYjNDM7CVRFU1RfQVNTRVJUKFdJRkVYSVRFRChzdGF0dXMpICZhbXA7JmFtcDsgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLAomIzQzOwkJICAgICYjMzQ7Vk1NIGNoaWxkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCYjMzQ7LCBzdGF0dXMpOwomIzQzOwomIzQzOwkvKiBTaWduYWwgdmljdGltIHRvIGV4aXQgeWllbGQgbG9vcC4gKi8KJiM0MzsJVEVTVF9BU1NFUlQod3JpdGUocGlwZV9wX3RvX2MxWzFdLCAmIzM0O0QmIzM0OywgMSkgPT0gMSwgJiMzNDtzaWduYWwgdmljdGltIGZhaWxlZCYjMzQ7KTsKJiM0MzsJY2xvc2UocGlwZV9wX3RvX2MxWzFdKTsKJiM0MzsKJiM0MzsJLyogUmVhZCByZXN1bHQgZnJvbSB2aWN0aW0uICovCiYjNDM7CVRFU1RfQVNTRVJUKHJlYWQocGlwZV9yZXN1bHRbMF0sICZhbXA7cmVzdWx0LCBzaXplb2YocmVzdWx0KSkgPT0gc2l6ZW9mKHJlc3VsdCksCiYjNDM7CQkgICAgJiMzNDtyZWFkIHJlc3VsdCBmYWlsZWQmIzM0Oyk7CiYjNDM7CWNsb3NlKHBpcGVfcmVzdWx0WzBdKTsKJiM0MzsKJiM0MzsJd2FpdHBpZChwaWRfdmljdGltLCAmYW1wO3N0YXR1cywgMCk7CiYjNDM7CVRFU1RfQVNTRVJUKFdJRkVYSVRFRChzdGF0dXMpICZhbXA7JmFtcDsgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLAomIzQzOwkJICAgICYjMzQ7VmljdGltIGNoaWxkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZCYjMzQ7LCBzdGF0dXMpOwomIzQzOwomIzQzOwlpZiAocmVzdWx0LmNvcnJ1cHRlZCkKJiM0MzsJCXByX2luZm8oJiMzNDtNZW1vcnkgY2hlY2s6IGNvcnJ1cHRpb24gYXQgb2Zmc2V0IDB4JXp4OiBleHBlY3RlZCAweCUwMngsIGFjdHVhbCAweCUwMnhcbiYjMzQ7LAomIzQzOwkJCXJlc3VsdC5jb3JydXB0X29mZnNldCwgQ0FOQVJZX0JZVEUsIHJlc3VsdC5jb3JydXB0X3ZhbCk7CiYjNDM7CWVsc2UKJiM0MzsJCXByX2luZm8oJiMzNDtNZW1vcnkgY2hlY2s6IGVudGlyZSBwYWdlIGludGFjdCAoY2FuYXJ5ID0gMHglMDJ4KVxuJiMzNDssCiYjNDM7CQkJQ0FOQVJZX0JZVEUpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzdWx0LmNvcnJ1cHRlZDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKJiM0Mzt7CiYjNDM7CWJvb2wgY29ycnVwdGVkID0gZmFsc2U7CiYjNDM7CWludCBwY3B1OwomIzQzOwlpbnQgaTsKJiM0MzsJY29uc3QgaW50IGl0ZXJhdGlvbnMgPSA1OwomIzQzOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2NwdV9oYXMoWDg2X0ZFQVRVUkVfVk1YKSk7CiYjNDM7CVRFU1RfUkVRVUlSRShrdm1fY3B1X2hhc19zaGFkb3dfdm1jcygpKTsKJiM0MzsKJiM0MzsJcGNwdSA9IHBpbl9zZWxmX3RvX2FueV9jcHUoKTsKJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O1Rlc3Rpbmcgc2hhZG93IFZNQ1MgdGVhcmRvd24gb24gcENQVSAlZCAoJWQgaXRlcmF0aW9ucykuLi5cbiYjMzQ7LAomIzQzOwkJcGNwdSwgaXRlcmF0aW9ucyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpdGVyYXRpb25zOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHJ1bl9pdGVyYXRpb24ocGNwdSkpIHsKJiM0MzsJCQljb3JydXB0ZWQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKCFjb3JydXB0ZWQsCiYjNDM7CQkgICAgJiMzNDtNZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RlZCEgQWN0aXZlIE1NIHdhcyBjb3JydXB0ZWQgZHVyaW5nIHZDUFUgdGVhcmRvd246IGNhbmFyeSBieXRlIDB4JTAyeCBvdmVyd3JpdHRlblxuJiMzNDssCiYjNDM7CQkgICAgQ0FOQVJZX0JZVEUpOwomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7UEFTUzogTm8gbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0ZWQgZHVyaW5nIHRlYXJkb3duLlxuJiMzNDspOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5OTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlIERldGVybWluYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBjb21taXQgZGlmZiBzaG93cyBjaGFuZ2VzIHRvIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QuY2AuIEdpdmVuIHRoYXQgdGhlc2UgcmVzaWRlIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCwgaXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yLgoKTm93LCBsZXQgbWUgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgdHJpYWdlIGluc3RydWN0aW9ucy4gU3BlY2lmaWNhbGx5LCBTZWN0aW9uIDImIzM5O3MgbmVnYXRpdmUgY3JpdGVyaWEgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVsZXZhbnQgY29uZGl0aW9uIGhlcmUgaXM6ICYjMzQ7VXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0OwoKVGhlc2UgZmlsZXMgYXJlIHVuZGVuaWFibHkgdXNlcnNwYWNlIHNlbGYtdGVzdHMgbG9jYXRlZCB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gVGhleSYjMzk7cmUgcGFydCBvZiB0aGUgc2VsZi10ZXN0IHN1aXRlIGFuZCBkb24mIzM5O3QgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMgaW4gYW55IHdheS4gQmFzZWQgb24gdGhpcywgSSYjMzk7bSBmYWlybHkgY29uZmlkZW50IHRoYXQgYWxsIG1vZGlmaWNhdGlvbnMgYWxpZ24gd2l0aCB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBnaXQgc3RhdHVzYCBvciBkaWZmIHRvIGNvbmZpcm0gbm8gb3RoZXIgZmlsZXMgd2VyZSBpbmFkdmVydGVudGx5IG1vZGlmaWVkIGluIEhFQUQuIEkgbmVlZCB0byBiZSAxMDAlIHN1cmUgdGhpcyBpcyB0aGUgb25seSBzY29wZSBvZiB0aGUgcGF0Y2ggYmVmb3JlIEkgY29uZmlkZW50bHkgbWFrZSB0aGUgZGV0ZXJtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtPTEzNz1URVNUX0dFTl9QUk9HU194ODYgJiM0Mzs9IHg4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bToxMzg6VEVTVF9HRU5fUFJPR1NfeDg2ICYjNDM7PSB4ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0tMTM5LVRFU1RfR0VOX1BST0dTX3g4NiAmIzQzOz0geDg2L2FwaWNfYnVzX2Nsb2NrX3Rlc3Rcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMtMi0vKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdC5jOjM6ICogdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QuYy00LSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA0MgoJCQkJCQkJb3V0cHV0OiA3OQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjaGFuZ2UgbG9nIHRlbGxzIG1lIHRoZSBtb2RpZmljYXRpb25zIGFyZSBpc29sYXRlZCB0byBmaWxlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLiBUaGF0JiMzOTtzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvci4gQmFzZWQgb24gdGhpcywgSSBpbW1lZGlhdGVseSBhc3Nlc3MgdGhlIGltcGFjdC4gQmVjYXVzZSB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZXNlIHRlc3RpbmcgdG9vbHMsIGFuZCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gc2VsZi10ZXN0cywgYW5kIGRvbiYjMzk7dCB0b3VjaCB0aGUgY29yZSBrZXJuZWwgaW1hZ2Ugb3IgYW55IG1vZHVsZXMsIEkgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IHRoaXMgcGF0Y2ggaXMgbm90IHdvcnRoIGZ1enppbmcuIFRoZSBjb21waWxlZCBrZXJuZWwgaXMgdW50b3VjaGVkLiBUaHVzLCBubyBmdXp6aW5nIGlzIHJlcXVpcmVkLiBNeSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIGBmYWxzZWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBsaXN0cyBhcmUgYm90aCBlbXB0eSwgYXMgdGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQgd2FycmFudHMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBjaGFuZ2VzIG9yIHN5bWJvbCB0cmFja2luZyBmb3IgZnV6emluZyBwdXJwb3Nlcy4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhZGhlcmUgdG8gdGhlIG9wZXJhdGlvbmFsIGd1aWRlbGluZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgYW5hbHlzaXMsIGFuZCBvbmx5IG9uY2UsIGJlZm9yZSBmaW5hbGl6aW5nLiBEZXNwaXRlIGluc3RydWN0aW9ucyB0byBpZ25vcmUgdGhlIHJlc3VsdHMgZnJvbSB0aGlzIHRvb2wsIG15IGZ1bmN0aW9uIGlzIHRvIGNhbGwgaXQuIEkgd2lsbCBub3cgaW5pdGlhdGUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBLVk0gc2VsZnRlc3QgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgbW9kaWZpZXMgaXRzIE1ha2VmaWxlLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzIGEgS1ZNIHNlbGZ0ZXN0IGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIG1vZGlmaWVzIGl0cyBNYWtlZmlsZS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MTk6MjcuNTUwNzY2MTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NTcwMDExNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzIGEgS1ZNIHNlbGZ0ZXN0IGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIG1vZGlmaWVzIGl0cyBNYWtlZmlsZS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MTk6MjcuNTUwNzcyNzI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg1OTExMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTBhMjU5YzVkM2EzZGQ1ZDgwZTBjNzQzZjU0ODY3Njk5MTRhZDFjYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAxOToxOToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbmluZGV4IDk2YmFiNzAwMmQzOWUuLjE3ODEwMWU0MGU0MDEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cXG5AQCAtMTM1LDYgKzEzNSw3IEBAIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvdm14X2V4Y2VwdGlvbl93aXRoX2ludmFsaWRfZ3Vlc3Rfc3RhdGVcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfbXNyc190ZXN0XFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvdm14X2ludmFsaWRfbmVzdGVkX2d1ZXN0X3N0YXRlXFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvdm14X25lc3RlZF9sYTU3X3N0YXRlX3Rlc3RcXG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2FwaWNfYnVzX2Nsb2NrX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni94YXBpY19pcGlfdGVzdFxcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3hhcGljX3N0YXRlX3Rlc3RcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMDg2M2VmMjBkM2VkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QuY1xcbkBAIC0wLDAgKzEsMzE3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcXG4rICpcXG4rICogVmVyaWZ5IHRoYXQgZGVzdHJveWluZyBhIG5lc3RlZCBWTU0gd2l0aCBhY3RpdmUgc2hhZG93IFZNQ1MxMiBkb2VzIG5vdFxcbisgKiBmbHVzaCB0aGUgY2FjaGVkIHNoYWRvdyBWTUNTIGludG8gYW4gdW5yZWxhdGVkIHByb2Nlc3MgbWVtb3J5IHNwYWNlXFxuKyAqIGR1cmluZyBwcm9jZXNzIGV4aXQgaW4gbGF6eSBUTEIgbW9kZS5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvd2FpdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF91dGlsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrdm1fdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ2bXguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbitcXG4rI2RlZmluZSBQT1JUX0wwX0VYSVRcXHRcXHQweDIwMDBcXG4rI2RlZmluZSBTSEFET1dfVk1DU19HUEFcXHRcXHQweDgwMDAwMDAwVUxMXFxuKyNkZWZpbmUgU0hBRE9XX1ZNQ1NfR1ZBXFx0XFx0MHg4MDAwMDAwMFVMTFxcbisjZGVmaW5lIENBTkFSWV9CWVRFXFx0XFx0MHg1YVxcbisjZGVmaW5lIEwyX0dVRVNUX1NUQUNLX1NJWkVcXHQ2NFxcbitcXG4rc3RydWN0IHRlc3RfcmVzdWx0IHtcXG4rXFx0Ym9vbCBjb3JydXB0ZWQ7XFxuK1xcdHNpemVfdCBjb3JydXB0X29mZnNldDtcXG4rXFx0dWludDhfdCBjb3JydXB0X3ZhbDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIGwyX2d1ZXN0X2NvZGUodm9pZClcXG4re1xcbitcXHQvKiBFeGl0IHRvIEwwICovXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiaW5iICUlZHgsICUlYWxcXFwiXFxuK1xcdFxcdCAgICAgOiA6IFtwb3J0XSBcXFwiZFxcXCIgKFBPUlRfTDBfRVhJVCkgOiBcXFwicmF4XFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbDJfZ3Vlc3Rfc3RhY2tbTDJfR1VFU1RfU1RBQ0tfU0laRV07XFxuK1xcbitcXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKGxvYWRfdm1jcyh2bXhfcGFnZXMpKTtcXG4rXFxuK1xcdC8qIFByZXBhcmUgdGhlIFZNQ1MgZm9yIEwyIGV4ZWN1dGlvbi4gKi9cXG4rXFx0cHJlcGFyZV92bWNzKHZteF9wYWdlcywgbDJfZ3Vlc3RfY29kZSxcXG4rXFx0XFx0ICAgICBcXHUwMDI2bDJfZ3Vlc3Rfc3RhY2tbTDJfR1VFU1RfU1RBQ0tfU0laRV0pO1xcbitcXG4rXFx0LyogRW5hYmxlIFZNQ1Mgc2hhZG93aW5nIGFuZCBzZXQgdGhlIHNoYWRvdyBWTUNTIGxpbmsgcG9pbnRlci4gKi9cXG4rXFx0dm13cml0ZShTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLFxcbitcXHRcXHR2bXJlYWR6KFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wpIHwgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1MpO1xcbitcXHR2bXdyaXRlKFZNQ1NfTElOS19QT0lOVEVSLCB2bXhfcGFnZXMtXFx1MDAzZXNoYWRvd192bWNzX2dwYSk7XFxuK1xcbitcXHR2bWxhdW5jaCgpO1xcbitcXHRHVUVTVF9GQUlMKFxcXCJMMSBndWVzdCBtdXN0IG5vdCByZWdhaW4gY29udHJvbFxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBrdm1fY3B1X2hhc19zaGFkb3dfdm1jcyh2b2lkKVxcbit7XFxuK1xcdHVpbnQ2NF90IGN0cmw7XFxuK1xcbitcXHRjdHJsID0ga3ZtX2dldF9mZWF0dXJlX21zcihNU1JfSUEzMl9WTVhfVFJVRV9QUk9DQkFTRURfQ1RMUykgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdGlmICghKGN0cmwgXFx1MDAyNiBDUFVfQkFTRURfQUNUSVZBVEVfU0VDT05EQVJZX0NPTlRST0xTKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y3RybCA9IGt2bV9nZXRfZmVhdHVyZV9tc3IoTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMikgXFx1MDAzZVxcdTAwM2UgMzI7XFxuK1xcdHJldHVybiBjdHJsIFxcdTAwMjYgU0VDT05EQVJZX0VYRUNfU0hBRE9XX1ZNQ1M7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl92bW0oaW50IHBjcHUsIHZvaWQgKnRhcmdldF9odmEsIGludCBjMl90b19jMV9mZClcXG4re1xcbitcXHR2bV92YWRkcl90IHZteF9wYWdlc19ndmE7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4rXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdHN0cnVjdCB2bXhfcGFnZXMgKnZteDtcXG4rXFx0dm9pZCAqc2hhZG93X2h2YTtcXG4rXFxuK1xcdHBpbl9zZWxmX3RvX2NwdShwY3B1KTtcXG4rXFxuK1xcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXFx1MDAyNnZjcHUsIGwxX2d1ZXN0X2NvZGUpO1xcbitcXG4rXFx0LyogQWxsb2NhdGUgVk1YIHBhZ2VzIGFuZCBzaGFyZWQgZGVzY3JpcHRvcnMuICovXFxuK1xcdHZjcHVfYWxsb2Nfdm14KHZtLCBcXHUwMDI2dm14X3BhZ2VzX2d2YSk7XFxuK1xcdHZteCA9IGFkZHJfZ3ZhMmh2YSh2bSwgdm14X3BhZ2VzX2d2YSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYXAgdGhlIHNoYWRvdyBWTUNTIHBhZ2UgYXQgdGhlIGV4YWN0IHRhcmdldF9odmEgYWxsb2NhdGVkIGJ5IHRoZVxcbitcXHQgKiB2aWN0aW0gc28gaXQgY29sbGlkZXMgd2l0aCB0aGUgdmljdGltIHByb2Nlc3MncyBtYXBwaW5nLlxcbitcXHQgKi9cXG4rXFx0c2hhZG93X2h2YSA9IG1tYXAodGFyZ2V0X2h2YSwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRcXHQgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9GSVhFRF9OT1JFUExBQ0UsIC0xLCAwKTtcXG4rXFx0VEVTVF9BU1NFUlQoc2hhZG93X2h2YSA9PSB0YXJnZXRfaHZhLCBcXFwibW1hcCB0YXJnZXRfaHZhIGZhaWxlZCBpbiBWTU1cXFwiKTtcXG4rXFx0bWVtc2V0KHNoYWRvd19odmEsIDAsIFBBR0VfU0laRSk7XFxuK1xcbitcXHQvKiBBZGQgYSBjYWxsZXItbWFuYWdlZCBtZW1zbG90IGZvciB0aGUgc2hhZG93IFZNQ1MgYmFja2luZyBwYWdlLiAqL1xcbitcXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGRfY2FsbGVyX21hbmFnZWQodm0sIHNoYWRvd19odmEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFNIQURPV19WTUNTX0dQQSwgMTAsIDEsIDApO1xcbitcXHR2aXJ0X3BnX21hcCh2bSwgU0hBRE9XX1ZNQ1NfR1ZBLCBTSEFET1dfVk1DU19HUEEpO1xcbitcXG4rXFx0LyogT3ZlcnJpZGUgdGhlIHNoYWRvdyBWTUNTIHBvaW50ZXJzIGluIHZteF9wYWdlcy4gKi9cXG4rXFx0dm14LVxcdTAwM2VzaGFkb3dfdm1jcyA9ICh2b2lkICopU0hBRE9XX1ZNQ1NfR1ZBO1xcbitcXHR2bXgtXFx1MDAzZXNoYWRvd192bWNzX2h2YSA9IHNoYWRvd19odmE7XFxuK1xcdHZteC1cXHUwMDNlc2hhZG93X3ZtY3NfZ3BhID0gU0hBRE9XX1ZNQ1NfR1BBO1xcbitcXG4rXFx0dmNwdV9hcmdzX3NldCh2Y3B1LCAxLCB2bXhfcGFnZXNfZ3ZhKTtcXG4rXFxuK1xcdGZvciAoOzspIHtcXG4rXFx0XFx0c3RydWN0IGt2bV9ydW4gKnJ1biA9IHZjcHUtXFx1MDAzZXJ1bjtcXG4rXFx0XFx0c3RydWN0IHVjYWxsIHVjO1xcbitcXG4rXFx0XFx0dmNwdV9ydW4odmNwdSk7XFxuK1xcdFxcdFRFU1RfQVNTRVJUX0tWTV9FWElUX1JFQVNPTih2Y3B1LCBLVk1fRVhJVF9JTyk7XFxuK1xcbitcXHRcXHRpZiAocnVuLVxcdTAwM2Vpby5wb3J0ID09IFBPUlRfTDBfRVhJVClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCBcXHUwMDI2dWMpKSB7XFxuK1xcdFxcdGNhc2UgVUNBTExfQUJPUlQ6XFxuK1xcdFxcdFxcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xcbitcXHRcXHRcXHQvKiBOT1QgUkVBQ0hFRCAqL1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRURVNUX0ZBSUwoXFxcIlVua25vd24gdWNhbGwgJWx1XFxcIiwgdWMuY21kKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTaWduYWwgdGhlIHZpY3RpbSBwcm9jZXNzIHRoYXQgdGhlIFZNTSBpcyBhYm91dCB0byB0ZXJtaW5hdGVcXG4rXFx0ICogd2hpbGUgTDIgaXMgYWN0aXZlIHdpdGggVk1DUyBzaGFkb3dpbmcgZW5hYmxlZC5cXG4rXFx0ICovXFxuK1xcdFRFU1RfQVNTRVJUKHdyaXRlKGMyX3RvX2MxX2ZkLCBcXFwiWFxcXCIsIDEpID09IDEsIFxcXCJ3cml0ZSB0byB2aWN0aW0gZmFpbGVkXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFeGl0IGltbWVkaWF0ZWx5IHdpdGhvdXQgY2xvc2luZyBWTSBvciB2Q1BVIGZpbGUgZGVzY3JpcHRvcnMuXFxuK1xcdCAqIFRoZSBrZXJuZWwgY2xvc2VzIHRoZW0gaW4gZXhpdF9maWxlcygpIGFmdGVyIGV4aXRfbW0oKSBzZXRzXFxuK1xcdCAqIGN1cnJlbnQtXFx1MDAzZW1tID0gTlVMTC5cXG4rXFx0ICovXFxuK1xcdF9leGl0KDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydW5fdmljdGltKGludCBwY3B1LCBpbnQgcmVhZHlfZmQsIGludCBjMl90b19jMV9mZCxcXG4rXFx0XFx0ICAgICAgIGludCBwX3RvX2MxX2ZkLCBpbnQgcmVzdWx0X2ZkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3Jlc3VsdCByZXN1bHQgPSB7IC5jb3JydXB0ZWQgPSBmYWxzZSB9O1xcbitcXHR2b2lkICp2aWN0aW1faHZhO1xcbitcXHRjaGFyIHN5bmNfYnl0ZTtcXG4rXFx0c2l6ZV90IGk7XFxuK1xcdGludCBmbGFncztcXG4rXFxuK1xcdHBpbl9zZWxmX3RvX2NwdShwY3B1KTtcXG4rXFxuK1xcdHZpY3RpbV9odmEgPSBtbWFwKE5VTEwsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0XFx0ICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcXG4rXFx0VEVTVF9BU1NFUlQodmljdGltX2h2YSAhPSBNQVBfRkFJTEVELCBcXFwibW1hcCBmYWlsZWQgaW4gdmljdGltXFxcIik7XFxuK1xcdG1lbXNldCh2aWN0aW1faHZhLCBDQU5BUllfQllURSwgUEFHRV9TSVpFKTtcXG4rXFxuK1xcdC8qIFNlbmQgbWFwcGVkIHZpcnR1YWwgYWRkcmVzcyB0byBwYXJlbnQgc28gVk1NIGNhbiBjb2xsaWRlIHdpdGggaXQuICovXFxuK1xcdFRFU1RfQVNTRVJUKHdyaXRlKHJlYWR5X2ZkLCBcXHUwMDI2dmljdGltX2h2YSwgc2l6ZW9mKHZpY3RpbV9odmEpKSA9PSBzaXplb2YodmljdGltX2h2YSksXFxuK1xcdFxcdCAgICBcXFwid3JpdGUgcmVhZHkgZmFpbGVkXFxcIik7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBWTU0gdG8gbGF1bmNoIEwyIGFuZCByZWFjaCBleGl0IHRvIHVzZXJzcGFjZS4gKi9cXG4rXFx0VEVTVF9BU1NFUlQocmVhZChjMl90b19jMV9mZCwgXFx1MDAyNnN5bmNfYnl0ZSwgMSkgPT0gMSwgXFxcInJlYWQgc3luYyBmYWlsZWRcXFwiKTtcXG4rXFxuK1xcdC8qIFNldCBwYXJlbnQtdG8tdmljdGltIHBpcGUgdG8gbm9uLWJsb2NraW5nLiAqL1xcbitcXHRmbGFncyA9IGZjbnRsKHBfdG9fYzFfZmQsIEZfR0VURkwsIDApO1xcbitcXHRURVNUX0FTU0VSVChmbGFncyBcXHUwMDNlPSAwLCBcXFwiZmNudGwgRl9HRVRGTCBmYWlsZWRcXFwiKTtcXG4rXFx0VEVTVF9BU1NFUlQoZmNudGwocF90b19jMV9mZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAwLFxcbitcXHRcXHQgICAgXFxcImZjbnRsIEZfU0VURkwgZmFpbGVkXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBMb29wIHlpZWxkaW5nIHRoZSBDUFUgd2hpbGUgdGhlIFZNTSB0ZXJtaW5hdGVzLiBXaGVuIHRoZSBWTU1cXG4rXFx0ICogc2xlZXBzIGluIHN5bmNocm9uaXplX3NyY3UoKSBkdXJpbmcgdGVhcmRvd24sIHRoZSBzY2hlZHVsZXJcXG4rXFx0ICogcnVucyB0aGlzIHZpY3RpbSBwcm9jZXNzIG9uIHRoZSBDUFUuIFdoZW4gdGhlIFZNTSB3YWtlcyB1cCxcXG4rXFx0ICogdGhlIHNjaGVkdWxlciBjb250ZXh0IHN3aXRjaGVzIGZyb20gdGhpcyB2aWN0aW0gdG8gdGhlIFZNTVxcbitcXHQgKiB3aXRoIGN1cnJlbnQtXFx1MDAzZW1tID09IE5VTEwsIGxlYXZpbmcgdGhlIHZpY3RpbSdzIENSMyBhY3RpdmUuXFxuK1xcdCAqL1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHNzaXplX3QgcmV0ID0gcmVhZChwX3RvX2MxX2ZkLCBcXHUwMDI2c3luY19ieXRlLCAxKTtcXG4rXFxuK1xcdFxcdGlmIChyZXQgPT0gMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRVdPVUxEQkxPQ0spKSB7XFxuK1xcdFxcdFxcdHNjaGVkX3lpZWxkKCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdFRFU1RfRkFJTChcXFwicmVhZCBmcm9tIHBhcmVudCBwaXBlIGZhaWxlZDogcmV0PSV6ZCwgZXJybm89JWRcXFwiLFxcbitcXHRcXHRcXHQgIHJldCwgZXJybm8pO1xcbitcXHR9XFxuK1xcbitcXHQvKiBWZXJpZnkgdGhhdCB0aGUgZW50aXJlIHBhZ2UgcmVtYWluZWQgdW50b3VjaGVkLiAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFOyBpKyspIHtcXG4rXFx0XFx0aWYgKCgodWludDhfdCAqKXZpY3RpbV9odmEpW2ldICE9IENBTkFSWV9CWVRFKSB7XFxuK1xcdFxcdFxcdHJlc3VsdC5jb3JydXB0ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRyZXN1bHQuY29ycnVwdF9vZmZzZXQgPSBpO1xcbitcXHRcXHRcXHRyZXN1bHQuY29ycnVwdF92YWwgPSAoKHVpbnQ4X3QgKil2aWN0aW1faHZhKVtpXTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0VEVTVF9BU1NFUlQod3JpdGUocmVzdWx0X2ZkLCBcXHUwMDI2cmVzdWx0LCBzaXplb2YocmVzdWx0KSkgPT0gc2l6ZW9mKHJlc3VsdCksXFxuK1xcdFxcdCAgICBcXFwid3JpdGUgcmVzdWx0IGZhaWxlZFxcXCIpO1xcbitcXHRfZXhpdCgwKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgcnVuX2l0ZXJhdGlvbihpbnQgcGNwdSlcXG4re1xcbitcXHRpbnQgcGlwZV9yZWFkeVsyXTtcXG4rXFx0aW50IHBpcGVfYzJfdG9fYzFbMl07XFxuK1xcdGludCBwaXBlX3BfdG9fYzFbMl07XFxuK1xcdGludCBwaXBlX3Jlc3VsdFsyXTtcXG4rXFx0cGlkX3QgcGlkX3ZpY3RpbTtcXG4rXFx0cGlkX3QgcGlkX3ZtbTtcXG4rXFx0c3RydWN0IHRlc3RfcmVzdWx0IHJlc3VsdCA9IHt9O1xcbitcXHR2b2lkICp0YXJnZXRfaHZhID0gTlVMTDtcXG4rXFx0aW50IHN0YXR1cztcXG4rXFxuK1xcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9yZWFkeSkgPT0gMCwgXFxcInBpcGUgZmFpbGVkXFxcIik7XFxuK1xcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9jMl90b19jMSkgPT0gMCwgXFxcInBpcGUgZmFpbGVkXFxcIik7XFxuK1xcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9wX3RvX2MxKSA9PSAwLCBcXFwicGlwZSBmYWlsZWRcXFwiKTtcXG4rXFx0VEVTVF9BU1NFUlQocGlwZShwaXBlX3Jlc3VsdCkgPT0gMCwgXFxcInBpcGUgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRwaWRfdmljdGltID0gZm9yaygpO1xcbitcXHRURVNUX0FTU0VSVChwaWRfdmljdGltIFxcdTAwM2U9IDAsIFxcXCJmb3JrIHZpY3RpbSBmYWlsZWRcXFwiKTtcXG4rXFx0aWYgKHBpZF92aWN0aW0gPT0gMCkge1xcbitcXHRcXHRjbG9zZShwaXBlX3JlYWR5WzBdKTtcXG4rXFx0XFx0Y2xvc2UocGlwZV9jMl90b19jMVsxXSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVfcF90b19jMVsxXSk7XFxuK1xcdFxcdGNsb3NlKHBpcGVfcmVzdWx0WzBdKTtcXG4rXFx0XFx0cnVuX3ZpY3RpbShwY3B1LCBwaXBlX3JlYWR5WzFdLCBwaXBlX2MyX3RvX2MxWzBdLFxcbitcXHRcXHRcXHQgICBwaXBlX3BfdG9fYzFbMF0sIHBpcGVfcmVzdWx0WzFdKTtcXG4rXFx0fVxcbitcXG4rXFx0Y2xvc2UocGlwZV9yZWFkeVsxXSk7XFxuK1xcdGNsb3NlKHBpcGVfcmVzdWx0WzFdKTtcXG4rXFx0Y2xvc2UocGlwZV9wX3RvX2MxWzBdKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIHZpY3RpbSB0byBpbml0aWFsaXplIGl0cyBtYXBwaW5nIGFuZCByZXRyaWV2ZSBpdHMgYWRkcmVzcy4gKi9cXG4rXFx0VEVTVF9BU1NFUlQocmVhZChwaXBlX3JlYWR5WzBdLCBcXHUwMDI2dGFyZ2V0X2h2YSwgc2l6ZW9mKHRhcmdldF9odmEpKSA9PSBzaXplb2YodGFyZ2V0X2h2YSksXFxuK1xcdFxcdCAgICBcXFwid2FpdCByZWFkeSBmYWlsZWRcXFwiKTtcXG4rXFx0Y2xvc2UocGlwZV9yZWFkeVswXSk7XFxuK1xcbitcXHRwaWRfdm1tID0gZm9yaygpO1xcbitcXHRURVNUX0FTU0VSVChwaWRfdm1tIFxcdTAwM2U9IDAsIFxcXCJmb3JrIFZNTSBmYWlsZWRcXFwiKTtcXG4rXFx0aWYgKHBpZF92bW0gPT0gMCkge1xcbitcXHRcXHRjbG9zZShwaXBlX2MyX3RvX2MxWzBdKTtcXG4rXFx0XFx0Y2xvc2UocGlwZV9wX3RvX2MxWzFdKTtcXG4rXFx0XFx0Y2xvc2UocGlwZV9yZXN1bHRbMF0pO1xcbitcXHRcXHRydW5fdm1tKHBjcHUsIHRhcmdldF9odmEsIHBpcGVfYzJfdG9fYzFbMV0pO1xcbitcXHR9XFxuK1xcbitcXHRjbG9zZShwaXBlX2MyX3RvX2MxWzBdKTtcXG4rXFx0Y2xvc2UocGlwZV9jMl90b19jMVsxXSk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBWTU0gdG8gY29tcGxldGVseSB0ZXJtaW5hdGUuICovXFxuK1xcdHdhaXRwaWQocGlkX3ZtbSwgXFx1MDAyNnN0YXR1cywgMCk7XFxuK1xcdFRFU1RfQVNTRVJUKFdJRkVYSVRFRChzdGF0dXMpIFxcdTAwMjZcXHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCxcXG4rXFx0XFx0ICAgIFxcXCJWTU0gY2hpbGQgZmFpbGVkIHdpdGggc3RhdHVzICVkXFxcIiwgc3RhdHVzKTtcXG4rXFxuK1xcdC8qIFNpZ25hbCB2aWN0aW0gdG8gZXhpdCB5aWVsZCBsb29wLiAqL1xcbitcXHRURVNUX0FTU0VSVCh3cml0ZShwaXBlX3BfdG9fYzFbMV0sIFxcXCJEXFxcIiwgMSkgPT0gMSwgXFxcInNpZ25hbCB2aWN0aW0gZmFpbGVkXFxcIik7XFxuK1xcdGNsb3NlKHBpcGVfcF90b19jMVsxXSk7XFxuK1xcbitcXHQvKiBSZWFkIHJlc3VsdCBmcm9tIHZpY3RpbS4gKi9cXG4rXFx0VEVTVF9BU1NFUlQocmVhZChwaXBlX3Jlc3VsdFswXSwgXFx1MDAyNnJlc3VsdCwgc2l6ZW9mKHJlc3VsdCkpID09IHNpemVvZihyZXN1bHQpLFxcbitcXHRcXHQgICAgXFxcInJlYWQgcmVzdWx0IGZhaWxlZFxcXCIpO1xcbitcXHRjbG9zZShwaXBlX3Jlc3VsdFswXSk7XFxuK1xcbitcXHR3YWl0cGlkKHBpZF92aWN0aW0sIFxcdTAwMjZzdGF0dXMsIDApO1xcbitcXHRURVNUX0FTU0VSVChXSUZFWElURUQoc3RhdHVzKSBcXHUwMDI2XFx1MDAyNiBXRVhJVFNUQVRVUyhzdGF0dXMpID09IDAsXFxuK1xcdFxcdCAgICBcXFwiVmljdGltIGNoaWxkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxcXCIsIHN0YXR1cyk7XFxuK1xcbitcXHRpZiAocmVzdWx0LmNvcnJ1cHRlZClcXG4rXFx0XFx0cHJfaW5mbyhcXFwiTWVtb3J5IGNoZWNrOiBjb3JydXB0aW9uIGF0IG9mZnNldCAweCV6eDogZXhwZWN0ZWQgMHglMDJ4LCBhY3R1YWwgMHglMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZXN1bHQuY29ycnVwdF9vZmZzZXQsIENBTkFSWV9CWVRFLCByZXN1bHQuY29ycnVwdF92YWwpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHByX2luZm8oXFxcIk1lbW9yeSBjaGVjazogZW50aXJlIHBhZ2UgaW50YWN0IChjYW5hcnkgPSAweCUwMngpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRDQU5BUllfQllURSk7XFxuK1xcbitcXHRyZXR1cm4gcmVzdWx0LmNvcnJ1cHRlZDtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4re1xcbitcXHRib29sIGNvcnJ1cHRlZCA9IGZhbHNlO1xcbitcXHRpbnQgcGNwdTtcXG4rXFx0aW50IGk7XFxuK1xcdGNvbnN0IGludCBpdGVyYXRpb25zID0gNTtcXG4rXFxuK1xcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcXG4rXFx0VEVTVF9SRVFVSVJFKGt2bV9jcHVfaGFzX3NoYWRvd192bWNzKCkpO1xcbitcXG4rXFx0cGNwdSA9IHBpbl9zZWxmX3RvX2FueV9jcHUoKTtcXG4rXFxuK1xcdHByX2luZm8oXFxcIlRlc3Rpbmcgc2hhZG93IFZNQ1MgdGVhcmRvd24gb24gcENQVSAlZCAoJWQgaXRlcmF0aW9ucykuLi5cXFxcblxcXCIsXFxuK1xcdFxcdHBjcHUsIGl0ZXJhdGlvbnMpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGl0ZXJhdGlvbnM7IGkrKykge1xcbitcXHRcXHRpZiAocnVuX2l0ZXJhdGlvbihwY3B1KSkge1xcbitcXHRcXHRcXHRjb3JydXB0ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRURVNUX0FTU0VSVCghY29ycnVwdGVkLFxcbitcXHRcXHQgICAgXFxcIk1lbW9yeSBjb3JydXB0aW9uIGRldGVjdGVkISBBY3RpdmUgTU0gd2FzIGNvcnJ1cHRlZCBkdXJpbmcgdkNQVSB0ZWFyZG93bjogY2FuYXJ5IGJ5dGUgMHglMDJ4IG92ZXJ3cml0dGVuXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgQ0FOQVJZX0JZVEUpO1xcbitcXG4rXFx0cHJfaW5mbyhcXFwiUEFTUzogTm8gbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0ZWQgZHVyaW5nIHRlYXJkb3duLlxcXFxuXFxcIik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjE5OjI5LjIzNzM4Nzc4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk3NzAzNjMyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBLVk0gc2VsZnRlc3QgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgbW9kaWZpZXMgaXRzIE1ha2VmaWxlLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEwYTI1OWM1ZDNhM2RkNWQ4MGUwYzc0M2Y1NDg2NzY5OTE0YWQxY2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxOToxOToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA5NmJhYjcwMDJkMzllLi4xNzgxMDFlNDBlNDAxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTEzNSw2ICsxMzUsNyBAQCBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ZteF9leGNlcHRpb25fd2l0aF9pbnZhbGlkX2d1ZXN0X3N0YXRlXG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfbXNyc190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfaW52YWxpZF9uZXN0ZWRfZ3Vlc3Rfc3RhdGVcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3ZteF9uZXN0ZWRfbGE1N19zdGF0ZV90ZXN0XG4rVEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvYXBpY19idXNfY2xvY2tfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYveGFwaWNfaXBpX3Rlc3RcbiBURVNUX0dFTl9QUk9HU194ODYgKz0geDg2L3hhcGljX3N0YXRlX3Rlc3RcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMDg2M2VmMjBkM2VkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmNcbkBAIC0wLDAgKzEsMzE3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcbisgKlxuKyAqIFZlcmlmeSB0aGF0IGRlc3Ryb3lpbmcgYSBuZXN0ZWQgVk1NIHdpdGggYWN0aXZlIHNoYWRvdyBWTUNTMTIgZG9lcyBub3RcbisgKiBmbHVzaCB0aGUgY2FjaGVkIHNoYWRvdyBWTUNTIGludG8gYW4gdW5yZWxhdGVkIHByb2Nlc3MgbWVtb3J5IHNwYWNlXG4rICogZHVyaW5nIHByb2Nlc3MgZXhpdCBpbiBsYXp5IFRMQiBtb2RlLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ0ZXN0X3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbisjaW5jbHVkZSBcInByb2Nlc3Nvci5oXCJcbisjaW5jbHVkZSBcInZteC5oXCJcbisjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbitcbisjZGVmaW5lIFBPUlRfTDBfRVhJVFx0XHQweDIwMDBcbisjZGVmaW5lIFNIQURPV19WTUNTX0dQQVx0XHQweDgwMDAwMDAwVUxMXG4rI2RlZmluZSBTSEFET1dfVk1DU19HVkFcdFx0MHg4MDAwMDAwMFVMTFxuKyNkZWZpbmUgQ0FOQVJZX0JZVEVcdFx0MHg1YVxuKyNkZWZpbmUgTDJfR1VFU1RfU1RBQ0tfU0laRVx0NjRcbitcbitzdHJ1Y3QgdGVzdF9yZXN1bHQge1xuK1x0Ym9vbCBjb3JydXB0ZWQ7XG4rXHRzaXplX3QgY29ycnVwdF9vZmZzZXQ7XG4rXHR1aW50OF90IGNvcnJ1cHRfdmFsO1xuK307XG4rXG4rc3RhdGljIHZvaWQgbDJfZ3Vlc3RfY29kZSh2b2lkKVxuK3tcbitcdC8qIEV4aXQgdG8gTDAgKi9cbitcdGFzbSB2b2xhdGlsZShcImluYiAlJWR4LCAlJWFsXCJcbitcdFx0ICAgICA6IDogW3BvcnRdIFwiZFwiIChQT1JUX0wwX0VYSVQpIDogXCJyYXhcIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGwxX2d1ZXN0X2NvZGUoc3RydWN0IHZteF9wYWdlcyAqdm14X3BhZ2VzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbDJfZ3Vlc3Rfc3RhY2tbTDJfR1VFU1RfU1RBQ0tfU0laRV07XG4rXG4rXHRHVUVTVF9BU1NFUlQocHJlcGFyZV9mb3Jfdm14X29wZXJhdGlvbih2bXhfcGFnZXMpKTtcbitcdEdVRVNUX0FTU0VSVChsb2FkX3ZtY3Modm14X3BhZ2VzKSk7XG4rXG4rXHQvKiBQcmVwYXJlIHRoZSBWTUNTIGZvciBMMiBleGVjdXRpb24uICovXG4rXHRwcmVwYXJlX3ZtY3Modm14X3BhZ2VzLCBsMl9ndWVzdF9jb2RlLFxuK1x0XHQgICAgIFx1MDAyNmwyX2d1ZXN0X3N0YWNrW0wyX0dVRVNUX1NUQUNLX1NJWkVdKTtcbitcbitcdC8qIEVuYWJsZSBWTUNTIHNoYWRvd2luZyBhbmQgc2V0IHRoZSBzaGFkb3cgVk1DUyBsaW5rIHBvaW50ZXIuICovXG4rXHR2bXdyaXRlKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsXG4rXHRcdHZtcmVhZHooU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCkgfCBTRUNPTkRBUllfRVhFQ19TSEFET1dfVk1DUyk7XG4rXHR2bXdyaXRlKFZNQ1NfTElOS19QT0lOVEVSLCB2bXhfcGFnZXMtXHUwMDNlc2hhZG93X3ZtY3NfZ3BhKTtcbitcbitcdHZtbGF1bmNoKCk7XG4rXHRHVUVTVF9GQUlMKFwiTDEgZ3Vlc3QgbXVzdCBub3QgcmVnYWluIGNvbnRyb2xcIik7XG4rfVxuK1xuK3N0YXRpYyBib29sIGt2bV9jcHVfaGFzX3NoYWRvd192bWNzKHZvaWQpXG4re1xuK1x0dWludDY0X3QgY3RybDtcbitcbitcdGN0cmwgPSBrdm1fZ2V0X2ZlYXR1cmVfbXNyKE1TUl9JQTMyX1ZNWF9UUlVFX1BST0NCQVNFRF9DVExTKSBcdTAwM2VcdTAwM2UgMzI7XG4rXHRpZiAoIShjdHJsIFx1MDAyNiBDUFVfQkFTRURfQUNUSVZBVEVfU0VDT05EQVJZX0NPTlRST0xTKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y3RybCA9IGt2bV9nZXRfZmVhdHVyZV9tc3IoTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMikgXHUwMDNlXHUwMDNlIDMyO1xuK1x0cmV0dXJuIGN0cmwgXHUwMDI2IFNFQ09OREFSWV9FWEVDX1NIQURPV19WTUNTO1xuK31cbitcbitzdGF0aWMgdm9pZCBydW5fdm1tKGludCBwY3B1LCB2b2lkICp0YXJnZXRfaHZhLCBpbnQgYzJfdG9fYzFfZmQpXG4re1xuK1x0dm1fdmFkZHJfdCB2bXhfcGFnZXNfZ3ZhO1xuK1x0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuK1x0c3RydWN0IGt2bV92bSAqdm07XG4rXHRzdHJ1Y3Qgdm14X3BhZ2VzICp2bXg7XG4rXHR2b2lkICpzaGFkb3dfaHZhO1xuK1xuK1x0cGluX3NlbGZfdG9fY3B1KHBjcHUpO1xuK1xuK1x0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBsMV9ndWVzdF9jb2RlKTtcbitcbitcdC8qIEFsbG9jYXRlIFZNWCBwYWdlcyBhbmQgc2hhcmVkIGRlc2NyaXB0b3JzLiAqL1xuK1x0dmNwdV9hbGxvY192bXgodm0sIFx1MDAyNnZteF9wYWdlc19ndmEpO1xuK1x0dm14ID0gYWRkcl9ndmEyaHZhKHZtLCB2bXhfcGFnZXNfZ3ZhKTtcbitcbitcdC8qXG4rXHQgKiBNYXAgdGhlIHNoYWRvdyBWTUNTIHBhZ2UgYXQgdGhlIGV4YWN0IHRhcmdldF9odmEgYWxsb2NhdGVkIGJ5IHRoZVxuK1x0ICogdmljdGltIHNvIGl0IGNvbGxpZGVzIHdpdGggdGhlIHZpY3RpbSBwcm9jZXNzJ3MgbWFwcGluZy5cbitcdCAqL1xuK1x0c2hhZG93X2h2YSA9IG1tYXAodGFyZ2V0X2h2YSwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHRcdCAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX0ZJWEVEX05PUkVQTEFDRSwgLTEsIDApO1xuK1x0VEVTVF9BU1NFUlQoc2hhZG93X2h2YSA9PSB0YXJnZXRfaHZhLCBcIm1tYXAgdGFyZ2V0X2h2YSBmYWlsZWQgaW4gVk1NXCIpO1xuK1x0bWVtc2V0KHNoYWRvd19odmEsIDAsIFBBR0VfU0laRSk7XG4rXG4rXHQvKiBBZGQgYSBjYWxsZXItbWFuYWdlZCBtZW1zbG90IGZvciB0aGUgc2hhZG93IFZNQ1MgYmFja2luZyBwYWdlLiAqL1xuK1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkX2NhbGxlcl9tYW5hZ2VkKHZtLCBzaGFkb3dfaHZhLFxuK1x0XHRcdFx0XHRcdCAgIFNIQURPV19WTUNTX0dQQSwgMTAsIDEsIDApO1xuK1x0dmlydF9wZ19tYXAodm0sIFNIQURPV19WTUNTX0dWQSwgU0hBRE9XX1ZNQ1NfR1BBKTtcbitcbitcdC8qIE92ZXJyaWRlIHRoZSBzaGFkb3cgVk1DUyBwb2ludGVycyBpbiB2bXhfcGFnZXMuICovXG4rXHR2bXgtXHUwMDNlc2hhZG93X3ZtY3MgPSAodm9pZCAqKVNIQURPV19WTUNTX0dWQTtcbitcdHZteC1cdTAwM2VzaGFkb3dfdm1jc19odmEgPSBzaGFkb3dfaHZhO1xuK1x0dm14LVx1MDAzZXNoYWRvd192bWNzX2dwYSA9IFNIQURPV19WTUNTX0dQQTtcbitcbitcdHZjcHVfYXJnc19zZXQodmNwdSwgMSwgdm14X3BhZ2VzX2d2YSk7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdHN0cnVjdCBrdm1fcnVuICpydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbitcdFx0c3RydWN0IHVjYWxsIHVjO1xuK1xuK1x0XHR2Y3B1X3J1bih2Y3B1KTtcbitcdFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbitcbitcdFx0aWYgKHJ1bi1cdTAwM2Vpby5wb3J0ID09IFBPUlRfTDBfRVhJVClcbitcdFx0XHRicmVhaztcbitcbitcdFx0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKSB7XG4rXHRcdGNhc2UgVUNBTExfQUJPUlQ6XG4rXHRcdFx0UkVQT1JUX0dVRVNUX0FTU0VSVCh1Yyk7XG4rXHRcdFx0LyogTk9UIFJFQUNIRUQgKi9cbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRURVNUX0ZBSUwoXCJVbmtub3duIHVjYWxsICVsdVwiLCB1Yy5jbWQpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogU2lnbmFsIHRoZSB2aWN0aW0gcHJvY2VzcyB0aGF0IHRoZSBWTU0gaXMgYWJvdXQgdG8gdGVybWluYXRlXG4rXHQgKiB3aGlsZSBMMiBpcyBhY3RpdmUgd2l0aCBWTUNTIHNoYWRvd2luZyBlbmFibGVkLlxuK1x0ICovXG4rXHRURVNUX0FTU0VSVCh3cml0ZShjMl90b19jMV9mZCwgXCJYXCIsIDEpID09IDEsIFwid3JpdGUgdG8gdmljdGltIGZhaWxlZFwiKTtcbitcbitcdC8qXG4rXHQgKiBFeGl0IGltbWVkaWF0ZWx5IHdpdGhvdXQgY2xvc2luZyBWTSBvciB2Q1BVIGZpbGUgZGVzY3JpcHRvcnMuXG4rXHQgKiBUaGUga2VybmVsIGNsb3NlcyB0aGVtIGluIGV4aXRfZmlsZXMoKSBhZnRlciBleGl0X21tKCkgc2V0c1xuK1x0ICogY3VycmVudC1cdTAwM2VtbSA9IE5VTEwuXG4rXHQgKi9cbitcdF9leGl0KDApO1xuK31cbitcbitzdGF0aWMgdm9pZCBydW5fdmljdGltKGludCBwY3B1LCBpbnQgcmVhZHlfZmQsIGludCBjMl90b19jMV9mZCxcbitcdFx0ICAgICAgIGludCBwX3RvX2MxX2ZkLCBpbnQgcmVzdWx0X2ZkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3Jlc3VsdCByZXN1bHQgPSB7IC5jb3JydXB0ZWQgPSBmYWxzZSB9O1xuK1x0dm9pZCAqdmljdGltX2h2YTtcbitcdGNoYXIgc3luY19ieXRlO1xuK1x0c2l6ZV90IGk7XG4rXHRpbnQgZmxhZ3M7XG4rXG4rXHRwaW5fc2VsZl90b19jcHUocGNwdSk7XG4rXG4rXHR2aWN0aW1faHZhID0gbW1hcChOVUxMLCBQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdFx0ICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcbitcdFRFU1RfQVNTRVJUKHZpY3RpbV9odmEgIT0gTUFQX0ZBSUxFRCwgXCJtbWFwIGZhaWxlZCBpbiB2aWN0aW1cIik7XG4rXHRtZW1zZXQodmljdGltX2h2YSwgQ0FOQVJZX0JZVEUsIFBBR0VfU0laRSk7XG4rXG4rXHQvKiBTZW5kIG1hcHBlZCB2aXJ0dWFsIGFkZHJlc3MgdG8gcGFyZW50IHNvIFZNTSBjYW4gY29sbGlkZSB3aXRoIGl0LiAqL1xuK1x0VEVTVF9BU1NFUlQod3JpdGUocmVhZHlfZmQsIFx1MDAyNnZpY3RpbV9odmEsIHNpemVvZih2aWN0aW1faHZhKSkgPT0gc2l6ZW9mKHZpY3RpbV9odmEpLFxuK1x0XHQgICAgXCJ3cml0ZSByZWFkeSBmYWlsZWRcIik7XG4rXG4rXHQvKiBXYWl0IGZvciBWTU0gdG8gbGF1bmNoIEwyIGFuZCByZWFjaCBleGl0IHRvIHVzZXJzcGFjZS4gKi9cbitcdFRFU1RfQVNTRVJUKHJlYWQoYzJfdG9fYzFfZmQsIFx1MDAyNnN5bmNfYnl0ZSwgMSkgPT0gMSwgXCJyZWFkIHN5bmMgZmFpbGVkXCIpO1xuK1xuK1x0LyogU2V0IHBhcmVudC10by12aWN0aW0gcGlwZSB0byBub24tYmxvY2tpbmcuICovXG4rXHRmbGFncyA9IGZjbnRsKHBfdG9fYzFfZmQsIEZfR0VURkwsIDApO1xuK1x0VEVTVF9BU1NFUlQoZmxhZ3MgXHUwMDNlPSAwLCBcImZjbnRsIEZfR0VURkwgZmFpbGVkXCIpO1xuK1x0VEVTVF9BU1NFUlQoZmNudGwocF90b19jMV9mZCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKSA9PSAwLFxuK1x0XHQgICAgXCJmY250bCBGX1NFVEZMIGZhaWxlZFwiKTtcbitcbitcdC8qXG4rXHQgKiBMb29wIHlpZWxkaW5nIHRoZSBDUFUgd2hpbGUgdGhlIFZNTSB0ZXJtaW5hdGVzLiBXaGVuIHRoZSBWTU1cbitcdCAqIHNsZWVwcyBpbiBzeW5jaHJvbml6ZV9zcmN1KCkgZHVyaW5nIHRlYXJkb3duLCB0aGUgc2NoZWR1bGVyXG4rXHQgKiBydW5zIHRoaXMgdmljdGltIHByb2Nlc3Mgb24gdGhlIENQVS4gV2hlbiB0aGUgVk1NIHdha2VzIHVwLFxuK1x0ICogdGhlIHNjaGVkdWxlciBjb250ZXh0IHN3aXRjaGVzIGZyb20gdGhpcyB2aWN0aW0gdG8gdGhlIFZNTVxuK1x0ICogd2l0aCBjdXJyZW50LVx1MDAzZW1tID09IE5VTEwsIGxlYXZpbmcgdGhlIHZpY3RpbSdzIENSMyBhY3RpdmUuXG4rXHQgKi9cbitcdGZvciAoOzspIHtcbitcdFx0c3NpemVfdCByZXQgPSByZWFkKHBfdG9fYzFfZmQsIFx1MDAyNnN5bmNfYnl0ZSwgMSk7XG4rXG4rXHRcdGlmIChyZXQgPT0gMSlcbitcdFx0XHRicmVhaztcbitcdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSykpIHtcbitcdFx0XHRzY2hlZF95aWVsZCgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdFRFU1RfRkFJTChcInJlYWQgZnJvbSBwYXJlbnQgcGlwZSBmYWlsZWQ6IHJldD0lemQsIGVycm5vPSVkXCIsXG4rXHRcdFx0ICByZXQsIGVycm5vKTtcbitcdH1cbitcbitcdC8qIFZlcmlmeSB0aGF0IHRoZSBlbnRpcmUgcGFnZSByZW1haW5lZCB1bnRvdWNoZWQuICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkU7IGkrKykge1xuK1x0XHRpZiAoKCh1aW50OF90ICopdmljdGltX2h2YSlbaV0gIT0gQ0FOQVJZX0JZVEUpIHtcbitcdFx0XHRyZXN1bHQuY29ycnVwdGVkID0gdHJ1ZTtcbitcdFx0XHRyZXN1bHQuY29ycnVwdF9vZmZzZXQgPSBpO1xuK1x0XHRcdHJlc3VsdC5jb3JydXB0X3ZhbCA9ICgodWludDhfdCAqKXZpY3RpbV9odmEpW2ldO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRURVNUX0FTU0VSVCh3cml0ZShyZXN1bHRfZmQsIFx1MDAyNnJlc3VsdCwgc2l6ZW9mKHJlc3VsdCkpID09IHNpemVvZihyZXN1bHQpLFxuK1x0XHQgICAgXCJ3cml0ZSByZXN1bHQgZmFpbGVkXCIpO1xuK1x0X2V4aXQoMCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHJ1bl9pdGVyYXRpb24oaW50IHBjcHUpXG4re1xuK1x0aW50IHBpcGVfcmVhZHlbMl07XG4rXHRpbnQgcGlwZV9jMl90b19jMVsyXTtcbitcdGludCBwaXBlX3BfdG9fYzFbMl07XG4rXHRpbnQgcGlwZV9yZXN1bHRbMl07XG4rXHRwaWRfdCBwaWRfdmljdGltO1xuK1x0cGlkX3QgcGlkX3ZtbTtcbitcdHN0cnVjdCB0ZXN0X3Jlc3VsdCByZXN1bHQgPSB7fTtcbitcdHZvaWQgKnRhcmdldF9odmEgPSBOVUxMO1xuK1x0aW50IHN0YXR1cztcbitcbitcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9yZWFkeSkgPT0gMCwgXCJwaXBlIGZhaWxlZFwiKTtcbitcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9jMl90b19jMSkgPT0gMCwgXCJwaXBlIGZhaWxlZFwiKTtcbitcdFRFU1RfQVNTRVJUKHBpcGUocGlwZV9wX3RvX2MxKSA9PSAwLCBcInBpcGUgZmFpbGVkXCIpO1xuK1x0VEVTVF9BU1NFUlQocGlwZShwaXBlX3Jlc3VsdCkgPT0gMCwgXCJwaXBlIGZhaWxlZFwiKTtcbitcbitcdHBpZF92aWN0aW0gPSBmb3JrKCk7XG4rXHRURVNUX0FTU0VSVChwaWRfdmljdGltIFx1MDAzZT0gMCwgXCJmb3JrIHZpY3RpbSBmYWlsZWRcIik7XG4rXHRpZiAocGlkX3ZpY3RpbSA9PSAwKSB7XG4rXHRcdGNsb3NlKHBpcGVfcmVhZHlbMF0pO1xuK1x0XHRjbG9zZShwaXBlX2MyX3RvX2MxWzFdKTtcbitcdFx0Y2xvc2UocGlwZV9wX3RvX2MxWzFdKTtcbitcdFx0Y2xvc2UocGlwZV9yZXN1bHRbMF0pO1xuK1x0XHRydW5fdmljdGltKHBjcHUsIHBpcGVfcmVhZHlbMV0sIHBpcGVfYzJfdG9fYzFbMF0sXG4rXHRcdFx0ICAgcGlwZV9wX3RvX2MxWzBdLCBwaXBlX3Jlc3VsdFsxXSk7XG4rXHR9XG4rXG4rXHRjbG9zZShwaXBlX3JlYWR5WzFdKTtcbitcdGNsb3NlKHBpcGVfcmVzdWx0WzFdKTtcbitcdGNsb3NlKHBpcGVfcF90b19jMVswXSk7XG4rXG4rXHQvKiBXYWl0IGZvciB2aWN0aW0gdG8gaW5pdGlhbGl6ZSBpdHMgbWFwcGluZyBhbmQgcmV0cmlldmUgaXRzIGFkZHJlc3MuICovXG4rXHRURVNUX0FTU0VSVChyZWFkKHBpcGVfcmVhZHlbMF0sIFx1MDAyNnRhcmdldF9odmEsIHNpemVvZih0YXJnZXRfaHZhKSkgPT0gc2l6ZW9mKHRhcmdldF9odmEpLFxuK1x0XHQgICAgXCJ3YWl0IHJlYWR5IGZhaWxlZFwiKTtcbitcdGNsb3NlKHBpcGVfcmVhZHlbMF0pO1xuK1xuK1x0cGlkX3ZtbSA9IGZvcmsoKTtcbitcdFRFU1RfQVNTRVJUKHBpZF92bW0gXHUwMDNlPSAwLCBcImZvcmsgVk1NIGZhaWxlZFwiKTtcbitcdGlmIChwaWRfdm1tID09IDApIHtcbitcdFx0Y2xvc2UocGlwZV9jMl90b19jMVswXSk7XG4rXHRcdGNsb3NlKHBpcGVfcF90b19jMVsxXSk7XG4rXHRcdGNsb3NlKHBpcGVfcmVzdWx0WzBdKTtcbitcdFx0cnVuX3ZtbShwY3B1LCB0YXJnZXRfaHZhLCBwaXBlX2MyX3RvX2MxWzFdKTtcbitcdH1cbitcbitcdGNsb3NlKHBpcGVfYzJfdG9fYzFbMF0pO1xuK1x0Y2xvc2UocGlwZV9jMl90b19jMVsxXSk7XG4rXG4rXHQvKiBXYWl0IGZvciBWTU0gdG8gY29tcGxldGVseSB0ZXJtaW5hdGUuICovXG4rXHR3YWl0cGlkKHBpZF92bW0sIFx1MDAyNnN0YXR1cywgMCk7XG4rXHRURVNUX0FTU0VSVChXSUZFWElURUQoc3RhdHVzKSBcdTAwMjZcdTAwMjYgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwLFxuK1x0XHQgICAgXCJWTU0gY2hpbGQgZmFpbGVkIHdpdGggc3RhdHVzICVkXCIsIHN0YXR1cyk7XG4rXG4rXHQvKiBTaWduYWwgdmljdGltIHRvIGV4aXQgeWllbGQgbG9vcC4gKi9cbitcdFRFU1RfQVNTRVJUKHdyaXRlKHBpcGVfcF90b19jMVsxXSwgXCJEXCIsIDEpID09IDEsIFwic2lnbmFsIHZpY3RpbSBmYWlsZWRcIik7XG4rXHRjbG9zZShwaXBlX3BfdG9fYzFbMV0pO1xuK1xuK1x0LyogUmVhZCByZXN1bHQgZnJvbSB2aWN0aW0uICovXG4rXHRURVNUX0FTU0VSVChyZWFkKHBpcGVfcmVzdWx0WzBdLCBcdTAwMjZyZXN1bHQsIHNpemVvZihyZXN1bHQpKSA9PSBzaXplb2YocmVzdWx0KSxcbitcdFx0ICAgIFwicmVhZCByZXN1bHQgZmFpbGVkXCIpO1xuK1x0Y2xvc2UocGlwZV9yZXN1bHRbMF0pO1xuK1xuK1x0d2FpdHBpZChwaWRfdmljdGltLCBcdTAwMjZzdGF0dXMsIDApO1xuK1x0VEVTVF9BU1NFUlQoV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykgPT0gMCxcbitcdFx0ICAgIFwiVmljdGltIGNoaWxkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFwiLCBzdGF0dXMpO1xuK1xuK1x0aWYgKHJlc3VsdC5jb3JydXB0ZWQpXG4rXHRcdHByX2luZm8oXCJNZW1vcnkgY2hlY2s6IGNvcnJ1cHRpb24gYXQgb2Zmc2V0IDB4JXp4OiBleHBlY3RlZCAweCUwMngsIGFjdHVhbCAweCUwMnhcXG5cIixcbitcdFx0XHRyZXN1bHQuY29ycnVwdF9vZmZzZXQsIENBTkFSWV9CWVRFLCByZXN1bHQuY29ycnVwdF92YWwpO1xuK1x0ZWxzZVxuK1x0XHRwcl9pbmZvKFwiTWVtb3J5IGNoZWNrOiBlbnRpcmUgcGFnZSBpbnRhY3QgKGNhbmFyeSA9IDB4JTAyeClcXG5cIixcbitcdFx0XHRDQU5BUllfQllURSk7XG4rXG4rXHRyZXR1cm4gcmVzdWx0LmNvcnJ1cHRlZDtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRib29sIGNvcnJ1cHRlZCA9IGZhbHNlO1xuK1x0aW50IHBjcHU7XG4rXHRpbnQgaTtcbitcdGNvbnN0IGludCBpdGVyYXRpb25zID0gNTtcbitcbitcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhcyhYODZfRkVBVFVSRV9WTVgpKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fY3B1X2hhc19zaGFkb3dfdm1jcygpKTtcbitcbitcdHBjcHUgPSBwaW5fc2VsZl90b19hbnlfY3B1KCk7XG4rXG4rXHRwcl9pbmZvKFwiVGVzdGluZyBzaGFkb3cgVk1DUyB0ZWFyZG93biBvbiBwQ1BVICVkICglZCBpdGVyYXRpb25zKS4uLlxcblwiLFxuK1x0XHRwY3B1LCBpdGVyYXRpb25zKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGl0ZXJhdGlvbnM7IGkrKykge1xuK1x0XHRpZiAocnVuX2l0ZXJhdGlvbihwY3B1KSkge1xuK1x0XHRcdGNvcnJ1cHRlZCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdFRFU1RfQVNTRVJUKCFjb3JydXB0ZWQsXG4rXHRcdCAgICBcIk1lbW9yeSBjb3JydXB0aW9uIGRldGVjdGVkISBBY3RpdmUgTU0gd2FzIGNvcnJ1cHRlZCBkdXJpbmcgdkNQVSB0ZWFyZG93bjogY2FuYXJ5IGJ5dGUgMHglMDJ4IG92ZXJ3cml0dGVuXFxuXCIsXG4rXHRcdCAgICBDQU5BUllfQllURSk7XG4rXG4rXHRwcl9pbmZvKFwiUEFTUzogTm8gbWVtb3J5IGNvcnJ1cHRpb24gZGV0ZWN0ZWQgZHVyaW5nIHRlYXJkb3duLlxcblwiKTtcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjE5OjI5LjIzNzM4OTU2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NTc1OTMwMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZSBEZXRlcm1pbmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGNvbW1pdCBkaWZmIHNob3dzIGNoYW5nZXMgdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1gIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdC5jYC4gR2l2ZW4gdGhhdCB0aGVzZSByZXNpZGUgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLCBpdCdzIGEgc3Ryb25nIGluZGljYXRvci5cblxuTm93LCBsZXQgbWUgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgdHJpYWdlIGluc3RydWN0aW9ucy4gU3BlY2lmaWNhbGx5LCBTZWN0aW9uIDIncyBuZWdhdGl2ZSBjcml0ZXJpYSBmb3IgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWxldmFudCBjb25kaXRpb24gaGVyZSBpczogXCJVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiXG5cblRoZXNlIGZpbGVzIGFyZSB1bmRlbmlhYmx5IHVzZXJzcGFjZSBzZWxmLXRlc3RzIGxvY2F0ZWQgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuIFRoZXkncmUgcGFydCBvZiB0aGUgc2VsZi10ZXN0IHN1aXRlIGFuZCBkb24ndCBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcyBpbiBhbnkgd2F5LiBCYXNlZCBvbiB0aGlzLCBJJ20gZmFpcmx5IGNvbmZpZGVudCB0aGF0IGFsbCBtb2RpZmljYXRpb25zIGFsaWduIHdpdGggdGhlIGNyaXRlcmlhIGZvciBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGdpdCBzdGF0dXNgIG9yIGRpZmYgdG8gY29uZmlybSBubyBvdGhlciBmaWxlcyB3ZXJlIGluYWR2ZXJ0ZW50bHkgbW9kaWZpZWQgaW4gSEVBRC4gSSBuZWVkIHRvIGJlIDEwMCUgc3VyZSB0aGlzIGlzIHRoZSBvbmx5IHNjb3BlIG9mIHRoZSBwYXRjaCBiZWZvcmUgSSBjb25maWRlbnRseSBtYWtlIHRoZSBkZXRlcm1pbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTk5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MTk6NDMuODEzMzIyODYzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDI2MTQyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bT0xMzc9VEVTVF9HRU5fUFJPR1NfeDg2ICs9IHg4Ni92bXhfbmVzdGVkX2xhNTdfc3RhdGVfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm06MTM4OlRFU1RfR0VOX1BST0dTX3g4NiArPSB4ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtLTEzOS1URVNUX0dFTl9QUk9HU194ODYgKz0geDg2L2FwaWNfYnVzX2Nsb2NrX3Rlc3RcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3QuYy0yLS8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni92bXhfc2hhZG93X3ZtY3NfdGVhcmRvd25fdGVzdC5jOjM6ICogdm14X3NoYWRvd192bWNzX3RlYXJkb3duX3Rlc3RcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ZteF9zaGFkb3dfdm1jc190ZWFyZG93bl90ZXN0LmMtNC0gKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOToxOTo0NS41MTU5NDU1MTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDkxNzgxMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIGxvZyB0ZWxscyBtZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgaXNvbGF0ZWQgdG8gZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gVGhhdCdzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvci4gQmFzZWQgb24gdGhpcywgSSBpbW1lZGlhdGVseSBhc3Nlc3MgdGhlIGltcGFjdC4gQmVjYXVzZSB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZXNlIHRlc3RpbmcgdG9vbHMsIGFuZCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gc2VsZi10ZXN0cywgYW5kIGRvbid0IHRvdWNoIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBvciBhbnkgbW9kdWxlcywgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgdGhpcyBwYXRjaCBpcyBub3Qgd29ydGggZnV6emluZy4gVGhlIGNvbXBpbGVkIGtlcm5lbCBpcyB1bnRvdWNoZWQuIFRodXMsIG5vIGZ1enppbmcgaXMgcmVxdWlyZWQuIE15IGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgYGZhbHNlYCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIGxpc3RzIGFyZSBib3RoIGVtcHR5LCBhcyB0aGVyZSdzIG5vdGhpbmcgaGVyZSB0aGF0IHdhcnJhbnRzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBvciBzeW1ib2wgdHJhY2tpbmcgZm9yIGZ1enppbmcgcHVycG9zZXMuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhZGhlcmUgdG8gdGhlIG9wZXJhdGlvbmFsIGd1aWRlbGluZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgYW5hbHlzaXMsIGFuZCBvbmx5IG9uY2UsIGJlZm9yZSBmaW5hbGl6aW5nLiBEZXNwaXRlIGluc3RydWN0aW9ucyB0byBpZ25vcmUgdGhlIHJlc3VsdHMgZnJvbSB0aGlzIHRvb2wsIG15IGZ1bmN0aW9uIGlzIHRvIGNhbGwgaXQuIEkgd2lsbCBub3cgaW5pdGlhdGUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0MiwiT3V0cHV0VG9rZW5zIjo3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOToxOTo0OS4wMDc3Mjg2NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBLVk0gc2VsZnRlc3QgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLyBhbmQgbW9kaWZpZXMgaXRzIE1ha2VmaWxlLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzIGEgS1ZNIHNlbGZ0ZXN0IGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8gYW5kIG1vZGlmaWVzIGl0cyBNYWtlZmlsZS4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MTk6NDkuMDA3NzUzMDM5WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxl5fp[1] Phase: Running StartedAt: 2026-09-11 19:20:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxl5fp[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 19:20:00 +0000 UTC FinishedAt: 2026-09-11 19:20:05 +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,}