Name: series-workflownvxnp Phase: Failed StartedAt: 2026-09-12 05:19:03 +0000 UTC FinishedAt: 2026-09-12 06:09:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownvxnp[0] Phase: Succeeded StartedAt: 2026-09-12 05:19:03 +0000 UTC FinishedAt: 2026-09-12 06:09:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownvxnp[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 05:19:03 +0000 UTC FinishedAt: 2026-09-12 06:09: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+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODY1YzE0ZWI2MzNjNzM0ODZiZGE1YmVmODBhMjNkNDM2ZmU4ZTA3N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDA2OjA4OjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XG5pbmRleCBiN2FjMDY2MGFkYzAxLi5mYWZlMjk3NTQwMWIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuQEAgLTQwLDEzICYjNDM7NDAsMTcgQEAgVGVzdCBjYXNlczpcbiAgIC0gaXBfdjZleHRfZGlmZjogKElQdjYpIElQdjYgZXh0IGhlYWRlciB3aXRoIGRpZmZlcmVudCBwYXlsb2FkIGRvZXNuJiMzOTt0IGNvYWxlc2NlXG4gICAtIGxhcmdlX21heDogUGFja2V0cyBleGNlZWRpbmcgR1JPX01BWF9TSVpFIGRvbiYjMzk7dCBjb2FsZXNjZVxuICAgLSBsYXJnZV9yZW06IExhcmdlIHBhY2tldCByZW1haW5kZXIgaGFuZGxpbmdcbiYjNDM7ICAtIGJpZ190Y3BfZGF0YV9zYW1lOiBTYW1lIHNpemUgcGFja2V0cyBjb2FsZXNjZSBwYXN0IElQX01BWFBBQ0tFVFxuJiM0MzsgIC0gYmlnX3RjcF9kYXRhX2xyZ19zbWw6IFNtYWxsZXIgbGFzdCBwYWNrZXQgY29hbGVzY2VzIHBhc3QgSVBfTUFYUEFDS0VUXG4mIzQzOyAgLSBiaWdfdGNwX3RjcF9zZXE6IFBhY2tldHMgd2l0aCAxNi1iaXQgdHJ1bmNhdGVkIHNlcW5vIGRvbiYjMzk7dCBjb2FsZXNjZVxuJiM0MzsgIC0gYmlnX3RjcF9sYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIHRoZSBCSUcgVENQIGxpbWl0IGRvbiYjMzk7dCBjb2FsZXNjZVxuIFwmIzM0O1wmIzM0O1wmIzM0O1xuIFxuIGltcG9ydCBnbG9iXG4gaW1wb3J0IG9zXG4gaW1wb3J0IHJlXG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByLCBrc2Z0X2VxXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgS3NmdEZhaWxFeCwgS3NmdFNraXBFeCwgS3NmdFhmYWlsRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0ZGV2RmFtaWx5LCBFdGh0b29sRmFtaWx5XG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgY21kLCBjdGxfZmlsZV93cml0ZSwgZGVmZXIsIGV0aHRvb2wsIGlwXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnRcbkBAIC01NSw2ICYjNDM7NTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxuICMgZ3JvLmMgdXNlcyBoYXJkY29kZWQgRFBPUlQ9ODAwMFxuIEdST19EUE9SVCA9IDgwMDBcbiBcbiYjNDM7QklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDBcbiYjNDM7XG4gXG4gZGVmIF9yZXNvbHZlX2RtYWMoY2ZnLCBpcHZlcik6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuQEAgLTkxLDYgJiM0Mzs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XG4gICAgICAgICBkZWZlcihpcCwgZlwmIzM0O2xpbmsgc2V0IGRldiB7ZGV2WyYjMzk7aWZuYW1lJiMzOTtdfSBtdHUge2RldlsmIzM5O210dSYjMzk7XX1cJiMzNDssIGhvc3Q9aG9zdClcbiBcbiBcbiYjNDM7ZGVmIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIHNpemUpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBTZXQgdGhlIGxvY2FsIGRldmljZSYjMzk7cyBHUk8gc2l6ZSBsaW1pdHMsIHRoZW4gY29uZmlybSB0aGV5IHN0dWNrLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgX3NldF9tdHVfcmVzdG9yZShjZmcuZGV2LCA0MDk2LCBOb25lKVxuJiM0MzsgICAgX3NldF9tdHVfcmVzdG9yZShjZmcucmVtb3RlX2RldiwgNDA5NiwgY2ZnLnJlbW90ZSlcbiYjNDM7XG4mIzQzOyAgICBpZiBcJiMzNDtncm9fbWF4X3NpemVcJiMzNDsgbm90IGluIGNmZy5kZXYgb3IgXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemVcJiMzNDsgbm90IGluIGNmZy5kZXY6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtpcHJvdXRlMiBkb2VzIG5vdCByZXBvcnQgdGhlIEdSTyBzaXplIGxpbWl0c1wmIzM0OylcbiYjNDM7XG4mIzQzOyAgICBpZiAoY2ZnLmRldltcJiMzNDtncm9fbWF4X3NpemVcJiMzNDtdID09IHNpemUgYW5kXG4mIzQzOyAgICAgICAgICAgIGNmZy5kZXZbXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemVcJiMzNDtdID09IHNpemUpOlxuJiM0MzsgICAgICAgIHJldHVyblxuJiM0MztcbiYjNDM7ICAgIG9sZCA9IChmXCYjMzQ7Z3JvX21heF9zaXplIHtjZmcuZGV2WyYjMzk7Z3JvX21heF9zaXplJiMzOTtdfSBcJiMzNDtcbiYjNDM7ICAgICAgICAgICBmXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemUge2NmZy5kZXZbJiMzOTtncm9faXB2NF9tYXhfc2l6ZSYjMzk7XX1cJiMzNDspXG4mIzQzOyAgICBuZXcgPSBmXCYjMzQ7Z3JvX21heF9zaXplIHtzaXplfSBncm9faXB2NF9tYXhfc2l6ZSB7c2l6ZX1cJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBpcChmXCYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7bmV3fVwmIzM0OylcbiYjNDM7ICAgIGRlZmVyKGlwLCBmXCYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICBkZXYgPSBpcChcJiMzNDstZCBsaW5rIHNob3cgZGV2IFwmIzM0OyAmIzQzOyBjZmcuaWZuYW1lLCBqc29uPVRydWUpWzBdXG4mIzQzOyAgICBrc2Z0X2VxKGRldltcJiMzNDtncm9fbWF4X3NpemVcJiMzNDtdLCBzaXplLCBjb21tZW50PVwmIzM0O2dyb19tYXhfc2l6ZSBub3QgYXBwbGllZFwmIzM0OylcbiYjNDM7ICAgIGtzZnRfZXEoZGV2W1wmIzM0O2dyb19pcHY0X21heF9zaXplXCYjMzQ7XSwgc2l6ZSxcbiYjNDM7ICAgICAgICAgICAgY29tbWVudD1cJiMzNDtncm9faXB2NF9tYXhfc2l6ZSBub3QgYXBwbGllZFwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBfc2V0X2V0aHRvb2xfZmVhdChkZXYsIGN1cnJlbnQsIGZlYXRzLCBob3N0PU5vbmUpOlxuICAgICBzMm4gPSB7VHJ1ZTogXCYjMzQ7b25cJiMzNDssIEZhbHNlOiBcJiMzNDtvZmZcJiMzNDt9XG4gXG5AQCAtMjM5LDcgJiM0MzsyNzMsMTEgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4gICAgICAgICBmbHVzaF9wYXRoID0gZlwmIzM0Oy9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9ncm9fZmx1c2hfdGltZW91dFwmIzM0O1xuICAgICAgICAgaXJxX3BhdGggPSBmXCYjMzQ7L3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzXCYjMzQ7XG4gXG4tICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCBcJiMzNDsyMDAwMDBcJiMzNDspXG4mIzQzOyAgICAgICAgIyBcJiMzNDtiaWdfdGNwXypcJiMzNDsgdGVzdHMgbmVlZCBhIGxvbmdlciB0aW1lb3V0LCB1c2UgMTV4IHRoZSByZWd1bGFyIHRpbWVvdXRcbiYjNDM7ICAgICAgICBpZiB0ZXN0X25hbWUuc3RhcnRzd2l0aChcJiMzNDtiaWdfdGNwX1wmIzM0Oyk6XG4mIzQzOyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFwmIzM0OzMwMDAwMDBcJiMzNDspXG4mIzQzOyAgICAgICAgZWxzZTpcbiYjNDM7ICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXCYjMzQ7MjAwMDAwXCYjMzQ7KVxuICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoaXJxX3BhdGgsIFwmIzM0OzEwXCYjMzQ7KVxuIFxuICAgICAgICAgX3NldF9ldGh0b29sX2ZlYXQoY2ZnLmlmbmFtZSwgY2ZnLmZlYXQsXG5AQCAtMjg5LDYgJiM0MzszMjcsOSBAQCBkZWYgX3NldHVwKGNmZywgbW9kZSwgdGVzdF9uYW1lKTpcbiAgICAgZXhjZXB0IEtzZnRYZmFpbEV4OlxuICAgICAgICAgcGFzc1xuIFxuJiM0MzsgICAgaWYgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoXCYjMzQ7YmlnX3RjcF9cJiMzNDspOlxuJiM0MzsgICAgICAgIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIEJJR19UQ1BfR1JPX01BWF9TSVpFKVxuJiM0MztcbiBcbiBkZWYgX2dyb192YXJpYW50cygpOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtHZW5lcmF0b3IgdGhhdCB5aWVsZHMgYWxsIGNvbWJpbmF0aW9ucyBvZiBwcm90b2NvbCBhbmQgdGVzdCB0eXBlcy5cJiMzNDtcJiMzNDtcJiMzNDtcbkBAIC0zMDQsNiAmIzQzOzM0NSwxMSBAQCBkZWYgX2dyb192YXJpYW50cygpOlxuICAgICAgICAgXCYjMzQ7bGFyZ2VfbWF4XCYjMzQ7LCBcJiMzNDtsYXJnZV9yZW1cJiMzNDssXG4gICAgIF1cbiBcbiYjNDM7ICAgIGJpZ190Y3BfdGVzdHMgPSBbXG4mIzQzOyAgICAgICAgXCYjMzQ7YmlnX3RjcF9kYXRhX3NhbWVcJiMzNDssIFwmIzM0O2JpZ190Y3BfZGF0YV9scmdfc21sXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2JpZ190Y3BfdGNwX3NlcVwmIzM0OywgXCYjMzQ7YmlnX3RjcF9sYXJnZV9tYXhcJiMzNDssXG4mIzQzOyAgICBdXG4mIzQzO1xuICAgICAjIFRlc3RzIHNwZWNpZmljIHRvIElQdjRcbiAgICAgaXB2NF90ZXN0cyA9IFtcbiAgICAgICAgIFwmIzM0O2lwX2NzdW1cJiMzNDssXG5AQCAtMzIyLDYgJiM0MzszNjgsMTAgQEAgZGVmIF9ncm9fdmFyaWFudHMoKTpcbiAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gY29tbW9uX3Rlc3RzOlxuICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcbiBcbiYjNDM7ICAgICAgICBpZiBwcm90b2NvbCBpbiBbXCYjMzQ7aXB2NFwmIzM0OywgXCYjMzQ7aXB2NlwmIzM0O106XG4mIzQzOyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gYmlnX3RjcF90ZXN0czpcbiYjNDM7ICAgICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcbiYjNDM7XG4gICAgICAgICBpZiBwcm90b2NvbCBpbiBbXCYjMzQ7aXB2NFwmIzM0OywgXCYjMzQ7aXBpcFwmIzM0O106XG4gICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBpcHY0X3Rlc3RzOlxuICAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcbmluZGV4IDdhMzMzMTU1ZGUxYWIuLjcwYjBkZWIzYzExZmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXG5AQCAtNDYsNiAmIzQzOzQ2LDEyIEBAXG4gICogICAtIGxhcmdlX21heDogZXhjZWVkaW5nIG1heCBzaXplXG4gICogICAtIGxhcmdlX3JlbTogcmVtYWluZGVyIGhhbmRsaW5nXG4gICpcbiYjNDM7ICogYmlnX3RjcF8qOlxuJiM0MzsgKiAgIC0gYmlnX3RjcF9kYXRhX3NhbWU6ICAgIGVxdWFsIHNlZ21lbnRzIGNvYWxlc2NpbmcgcGFzdCBJUF9NQVhQQUNLRVRcbiYjNDM7ICogICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBhIHNtYWxsZXIgZmluYWwgc2VnbWVudCBjYXJyeWluZyBpdCBvdmVyXG4mIzQzOyAqICAgLSBiaWdfdGNwX3RjcF9zZXE6ICAgICAgMTYtYml0IHRydW5jYXRlZCBzZXF1ZW5jZSBudW1iZXIgbXVzdCBub3QgY29hbGVzY2VcbiYjNDM7ICogICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiAgICBjb2FsZXNjaW5nIHN0b3BzIGF0IHRoZSBjb25maWd1cmVkIGxpbWl0XG4mIzQzOyAqXG4gICogc2luZ2xlLCBjYXBhY2l0eTpcbiAgKiAgQm9yaW5nIGNhc2VzIHVzZWQgdG8gdGVzdCBjb2FsZXNjaW5nIG1hY2hpbmVyeSBpdHNlbGYgYW5kIHN0YXRzXG4gICogIG1vcmUgdGhhbiBwcm90b2NvbCBiZWhhdmlvci5cbkBAIC0xMTAsNiAmIzQzOzExNiwxNiBAQFxuIFxuICNkZWZpbmUgRVhJVF9PVkVSX0NPQUxFU0NFXHQ0MlxuIFxuJiM0MzsvKiBNdXN0IG1hdGNoIEJJR19UQ1BfR1JPX01BWF9TSVpFIGluIGdyb19saWIucHkuICovXG4mIzQzOyNkZWZpbmUgQklHX1RDUF9HUk9fTUFYX1NJWkVcdDEyODAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBCSUdfVENQX1JFQ1ZfQlVGX0xFTiBcXFxuJiM0MztcdChCSUdfVENQX0dST19NQVhfU0laRSAmIzQzOyBNQVhfTVNTICYjNDM7IEwyX0hMRU5fTUFYKVxuJiM0MzsjZGVmaW5lIEJJR19UQ1BfTUlOX01TU1x0XHQoQVNTVU1FRF9NVFUgLSAoTUFYX0hEUl9MRU4gLSBFVEhfSExFTikpXG4mIzQzOyNkZWZpbmUgQklHX1RDUF9NQVhfRklMTF9DTlQgXFxcbiYjNDM7XHQoKGludCkoKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSkgLyBcXFxuJiM0MztcdCAgICAgICBCSUdfVENQX01JTl9NU1MpKVxuJiM0MztcbiAjZGVmaW5lIGlwdjZfb3B0bGVuKHApICAoKChwKS1cdTAwM2VoZHJsZW4mIzQzOzEpIFx1MDAzY1x1MDAzYyAzKSAvKiBjYWxjdWxhdGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIGxlbiAqL1xuICNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSlcbiBcbkBAIC0xNjYsNiAmIzQzOzE4MiwyNyBAQCBzdGF0aWMgaW50IG51bV9sYXJnZV9wa3Qodm9pZClcbiBcdHJldHVybiBtYXhfcGF5bG9hZCgpIC8gY2FsY19tc3MoKTtcbiB9XG4gXG4mIzQzOy8qIEhvdyBtYW55IG1heGltdW0gc2l6ZWQgc2VnbWVudHMgZml0IHVuZGVyIHRoZSBjb25maWd1cmVkIGxpbWl0LiAqL1xuJiM0MztzdGF0aWMgaW50IGJpZ190Y3BfbGFyZ2VfY250KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtICh0b3RhbF9oZHJfbGVuIC0gRVRIX0hMRU4pKSAvXG4mIzQzO1x0ICAgICAgIGNhbGNfbXNzKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEhvdyBtYW55IGNhbGNfbXNzKCkgc2l6ZWQgc2VnbWVudHMgYXJlIG5lZWRlZCB0byBzYXRpc2Z5IHRoZVxuJiM0MzsgKiBmb2xsb3dpbmcgY29uZGl0aW9uOlxuJiM0MzsgKiBwa3RfY291bnQgKiBjYWxjX21zcygpIFx1MDAzYyBJUF9NQVhQQUNLRVQgXHUwMDNjIChwa3RfY291bnQgJiM0MzsgMSkgKiBjYWxjX21zcygpXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGJpZ190Y3BfZmlsbF9jbnQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBJUF9NQVhQQUNLRVQgLyBjYWxjX21zcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJpZ190Y3BfZmlsbF9sZW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiaWdfdGNwX2ZpbGxfY250KCkgKiBjYWxjX21zcygpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHZsb2coY29uc3QgY2hhciAqZm10LCAuLi4pXG4ge1xuIFx0dmFfbGlzdCBhcmdzO1xuQEAgLTU2MCw2ICYjNDM7NTk3LDYxIEBAIHN0YXRpYyB2b2lkIHNlbmRfZGF0YV9wa3RzKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkcixcbiBcdHdyaXRlX3BhY2tldChmZCwgYnVmLCB0b3RhbF9oZHJfbGVuICYjNDM7IHBheWxvYWRfbGVuMiwgZGFkZHIpO1xuIH1cbiBcbiYjNDM7LyogU2VuZCBudW1fcGt0IHNlZ21lbnRzIG9mIHBrdF9sZW4gYnl0ZXMsIHRoZW4gb25lIG9mIHJlbWFpbmRlciBsZW4uICovXG4mIzQzO3N0YXRpYyB2b2lkIHNlbmRfYmlnX3RjcChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsIGludCBwa3RfbGVuLFxuJiM0MztcdFx0XHQgaW50IG51bV9wa3QsIGludCByZW1haW5kZXIpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTtcbiYjNDM7XHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICYjNDM7IE1BWF9NU1NdO1xuJiM0MztcdGNvbnN0IGludCBmaWxsZWQgPSBudW1fcGt0ICogcGt0X2xlbjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bV9wa3QgXHUwMDNlIEJJR19UQ1BfTUFYX0ZJTExfQ05UKVxuJiM0MztcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7bmVlZCAlZCBwYWNrZXRzLCBhcnJheSBob2xkcyAlZFwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRjcmVhdGVfcGFja2V0KHBrdHNbaV0sIGkgKiBwa3RfbGVuLCAwLCBwa3RfbGVuLCAwKTtcbiYjNDM7XHRjcmVhdGVfcGFja2V0KGxhc3QsIGZpbGxlZCwgMCwgcmVtYWluZGVyLCAwKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQoZmQsIHBrdHNbaV0sIHRvdGFsX2hkcl9sZW4gJiM0MzsgcGt0X2xlbiwgZGFkZHIpO1xuJiM0MztcdHdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiAmIzQzOyByZW1haW5kZXIsIGRhZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogSW4gQklHIFRDUCBjb25maWd1cmF0aW9uLCB0aGUgdG90YWwgYWdncmVnYXRlIGxlbmd0aCBjYW5cbiYjNDM7ICogYmUgZ3JlYXRlciB0aGFuIHRoZSBsZWdhY3kgSVBfTUFYUEFDS0VULiBTaW5jZSB0aGUgYWdncmVnYXRlXG4mIzQzOyAqIGxlbmd0aCBpcyB1c2VkIGluIGNhbGN1bGF0aW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzLFxuJiM0MzsgKiBzZW5kIGEgcGFja2V0IHdpdGggYSBzZXF1ZW5jZSBudW1iZXIgdGhhdCBkaWZmZXJzIGJ5IElQX01BWFBBQ0tFVCAmIzQzOyAxLFxuJiM0MzsgKiB0byB0ZXN0IGFnYWluc3QgdHJ1bmNhdGlvbiBidWdzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwX2JhZF9zZXEoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNoYXIgcGt0c1tCSUdfVENQX01BWF9GSUxMX0NOVF1bTUFYX0hEUl9MRU4gJiM0MzsgTUFYX01TU107XG4mIzQzO1x0Y29uc3QgaW50IG51bV9wa3QgPSBiaWdfdGNwX2ZpbGxfY250KCkgJiM0MzsgMTtcbiYjNDM7XHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICYjNDM7IE1BWF9NU1NdO1xuJiM0MztcdGNvbnN0IGludCBwa3RfbGVuID0gY2FsY19tc3MoKTtcbiYjNDM7XHRpbnQgYmFkX3NlcTtcbiYjNDM7XHRpbnQgZmlsbGVkO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmaWxsZWQgPSBudW1fcGt0ICogcGt0X2xlbjtcbiYjNDM7XHQvKiBMb3cgMTYgYml0cyBtYXRjaCB3aXRoIHRoZSBjb3JyZWN0IGluY29taW5nIHNlcXVlbmNlIG51bWJlci4gKi9cbiYjNDM7XHRiYWRfc2VxID0gZmlsbGVkIC0gKElQX01BWFBBQ0tFVCAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bV9wa3QgXHUwMDNlIEJJR19UQ1BfTUFYX0ZJTExfQ05UKVxuJiM0MztcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7bmVlZCAlZCBwYWNrZXRzLCBhcnJheSBob2xkcyAlZFwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRjcmVhdGVfcGFja2V0KHBrdHNbaV0sIGkgKiBwa3RfbGVuLCAwLCBwa3RfbGVuLCAwKTtcbiYjNDM7XHRjcmVhdGVfcGFja2V0KGxhc3QsIGJhZF9zZXEsIDAsIHBrdF9sZW4sIDApO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcGt0OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiAmIzQzOyBwa3RfbGVuLCBkYWRkcik7XG4mIzQzO1x0d3JpdGVfcGFja2V0KGZkLCBsYXN0LCB0b3RhbF9oZHJfbGVuICYjNDM7IHBrdF9sZW4sIGRhZGRyKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBJZiBpbmNvbWluZyBzZWdtZW50cyBtYWtlIHRyYWNrZWQgc2VnbWVudCBsZW5ndGggZXhjZWVkXG4gICogbGVnYWwgSVAgZGF0YWdyYW0gbGVuZ3RoLCBkbyBub3QgY29hbGVzY2VcbiAgKi9cbkBAIC0xMTYxLDcgJiM0MzsxMjUzLDcgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJvcihpbnQgZmQsIGludCByY3ZfZXJybm8pXG4gc3RhdGljIHZvaWQgY2hlY2tfcmVjdl9wa3RzKGludCBmZCwgaW50ICpjb3JyZWN0X3BheWxvYWQsXG4gXHRcdFx0ICAgIGludCBjb3JyZWN0X251bV9wa3RzKVxuIHtcbi1cdHN0YXRpYyBjaGFyIGJ1ZmZlcltJUF9NQVhQQUNLRVQgJiM0MzsgTDJfSExFTl9NQVggJiM0MzsgMV07XG4mIzQzO1x0c3RhdGljIGNoYXIgYnVmZmVyW0JJR19UQ1BfUkVDVl9CVUZfTEVOXTtcbiBcdGludCBuaG9mZiA9IEVUSF9ITEVOICYjNDM7IChwcHBvZSA/IFBQUE9FX1NFU19ITEVOIDogMCk7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoYnVmZmVyICYjNDM7IG5ob2ZmKTtcbiBcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKGJ1ZmZlciAmIzQzOyBuaG9mZik7XG5AQCAtMTU0MSw2ICYjNDM7MTYzMywyNSBAQCBzdGF0aWMgdm9pZCBncm9fc2VuZGVyKHZvaWQpXG4gXHRcdHNlbmRfbGFyZ2UodHhmZCwgXHUwMDI2ZGFkZHIsIHJlbWFpbmRlciAmIzQzOyAxKTtcbiBcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbiBcbiYjNDM7XHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX2RhdGFfc2FtZVwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2ZpbGxfY250KCksXG4mIzQzO1x0XHRcdCAgICAgY2FsY19tc3MoKSk7XG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX2RhdGFfbHJnX3NtbFwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0aW50IHJlbWFpbmRlciA9IGNhbGNfbXNzKCkgLyAyO1xuJiM0MztcbiYjNDM7XHRcdHNlbmRfYmlnX3RjcCh0eGZkLCBcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLFxuJiM0MztcdFx0XHQgICAgIHJlbWFpbmRlcik7XG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX3RjcF9zZXFcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdHNlbmRfYmlnX3RjcF9iYWRfc2VxKHR4ZmQsIFx1MDAyNmRhZGRyKTtcbiYjNDM7XHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4mIzQzO1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwmIzM0O2JpZ190Y3BfbGFyZ2VfbWF4XCYjMzQ7KSA9PSAwKSB7XG4mIzQzO1x0XHRzZW5kX2JpZ190Y3AodHhmZCwgXHUwMDI2ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfbGFyZ2VfY250KCksXG4mIzQzO1x0XHRcdCAgICAgY2FsY19tc3MoKSk7XG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuJiM0MztcbiBcdC8qIG1hY2hpbmVyeSBzdWItdGVzdHMgKi9cbiBcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtzaW5nbGVcJiMzNDspID09IDApIHtcbiBcdFx0c3RhdGljIGNoYXIgYnVmW01BWF9IRFJfTEVOICYjNDM7IFBBWUxPQURfTEVOXTtcbkBAIC0xNzY4LDYgJiM0MzsxODc5LDI2IEBAIHN0YXRpYyB2b2lkIGdyb19yZWNlaXZlcih2b2lkKVxuIFx0XHRwcmludGYoXCYjMzQ7bGFzdCBzZWdtZW50IHNlbnQgaW5kaXZpZHVhbGx5OiBcJiMzNDspO1xuIFx0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAzKTtcbiBcbiYjNDM7XHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX2RhdGFfc2FtZVwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICYjNDM7IGNhbGNfbXNzKCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7ZGF0YSBwYWNrZXRzIG9mIHNhbWUgc2l6ZSBwYXN0IElQX01BWFBBQ0tFVDogXCYjMzQ7KTtcbiYjNDM7XHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDEpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX2RhdGFfbHJnX3NtbFwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICYjNDM7IGNhbGNfbXNzKCkgLyAyO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O3NtYWxsZXIgbGFzdCBwYWNrZXQgcGFzdCBJUF9NQVhQQUNLRVQ6IFwmIzM0Oyk7XG4mIzQzO1x0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF90Y3Bfc2VxXCYjMzQ7KSA9PSAwKSB7XG4mIzQzO1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSAoYmlnX3RjcF9maWxsX2NudCgpICYjNDM7IDEpICogY2FsY19tc3MoKTtcbiYjNDM7XHRcdGNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7YWxpYXNlZCBzZXEgcGFzdCBJUF9NQVhQQUNLRVQgZG9lc24mIzM5O3QgY29hbGVzY2U6IFwmIzM0Oyk7XG4mIzQzO1x0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAyKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF9sYXJnZV9tYXhcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfbGFyZ2VfY250KCkgKiBjYWxjX21zcygpO1xuJiM0MztcdFx0Y29ycmVjdF9wYXlsb2FkWzFdID0gY2FsY19tc3MoKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDtzaG91bGRuJiMzOTt0IGNvYWxlc2NlIHBhc3QgZ3JvX21heF9zaXplOiBcJiMzNDspO1xuJiM0MztcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XG4mIzQzO1xuIFx0LyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqL1xuIFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwmIzM0O3NpbmdsZVwmIzM0OykgPT0gMCkge1xuIFx0XHRwcmludGYoXCYjMzQ7c2luZ2xlIGRhdGEgcGFja2V0OiBcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5IGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jKSBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2NWMxNGViNjMzYzczNDg2YmRhNWJlZjgwYTIzZDQzNmZlOGUwNzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAwNjowODozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5CmluZGV4IGI3YWMwNjYwYWRjMDEuLmZhZmUyOTc1NDAxYjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weQpAQCAtNDAsMTMgJiM0Mzs0MCwxNyBAQCBUZXN0IGNhc2VzOgogICAtIGlwX3Y2ZXh0X2RpZmY6IChJUHY2KSBJUHY2IGV4dCBoZWFkZXIgd2l0aCBkaWZmZXJlbnQgcGF5bG9hZCBkb2VzbiYjMzk7dCBjb2FsZXNjZQogICAtIGxhcmdlX21heDogUGFja2V0cyBleGNlZWRpbmcgR1JPX01BWF9TSVpFIGRvbiYjMzk7dCBjb2FsZXNjZQogICAtIGxhcmdlX3JlbTogTGFyZ2UgcGFja2V0IHJlbWFpbmRlciBoYW5kbGluZwomIzQzOyAgLSBiaWdfdGNwX2RhdGFfc2FtZTogU2FtZSBzaXplIHBhY2tldHMgY29hbGVzY2UgcGFzdCBJUF9NQVhQQUNLRVQKJiM0MzsgIC0gYmlnX3RjcF9kYXRhX2xyZ19zbWw6IFNtYWxsZXIgbGFzdCBwYWNrZXQgY29hbGVzY2VzIHBhc3QgSVBfTUFYUEFDS0VUCiYjNDM7ICAtIGJpZ190Y3BfdGNwX3NlcTogUGFja2V0cyB3aXRoIDE2LWJpdCB0cnVuY2F0ZWQgc2Vxbm8gZG9uJiMzOTt0IGNvYWxlc2NlCiYjNDM7ICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiBQYWNrZXRzIGV4Y2VlZGluZyB0aGUgQklHIFRDUCBsaW1pdCBkb24mIzM5O3QgY29hbGVzY2UKICYjMzQ7JiMzNDsmIzM0OwogCiBpbXBvcnQgZ2xvYgogaW1wb3J0IG9zCiBpbXBvcnQgcmUKLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByCi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHIsIGtzZnRfZXEKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRTa2lwRXgsIEtzZnRYZmFpbEV4CiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0ZGV2RmFtaWx5LCBFdGh0b29sRmFtaWx5CiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBjbWQsIGN0bF9maWxlX3dyaXRlLCBkZWZlciwgZXRodG9vbCwgaXAKIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3ZhcmlhbnRzLCBLc2Z0TmFtZWRWYXJpYW50CkBAIC01NSw2ICYjNDM7NTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudAogIyBncm8uYyB1c2VzIGhhcmRjb2RlZCBEUE9SVD04MDAwCiBHUk9fRFBPUlQgPSA4MDAwCiAKJiM0MztCSUdfVENQX0dST19NQVhfU0laRSA9IDEyODAwMAomIzQzOwogCiBkZWYgX3Jlc29sdmVfZG1hYyhjZmcsIGlwdmVyKToKICAgICAmIzM0OyYjMzQ7JiMzNDsKQEAgLTkxLDYgJiM0Mzs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6CiAgICAgICAgIGRlZmVyKGlwLCBmJiMzNDtsaW5rIHNldCBkZXYge2RldlsmIzM5O2lmbmFtZSYjMzk7XX0gbXR1IHtkZXZbJiMzOTttdHUmIzM5O119JiMzNDssIGhvc3Q9aG9zdCkKIAogCiYjNDM7ZGVmIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIHNpemUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgU2V0IHRoZSBsb2NhbCBkZXZpY2UmIzM5O3MgR1JPIHNpemUgbGltaXRzLCB0aGVuIGNvbmZpcm0gdGhleSBzdHVjay4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIF9zZXRfbXR1X3Jlc3RvcmUoY2ZnLmRldiwgNDA5NiwgTm9uZSkKJiM0MzsgICAgX3NldF9tdHVfcmVzdG9yZShjZmcucmVtb3RlX2RldiwgNDA5NiwgY2ZnLnJlbW90ZSkKJiM0MzsKJiM0MzsgICAgaWYgJiMzNDtncm9fbWF4X3NpemUmIzM0OyBub3QgaW4gY2ZnLmRldiBvciAmIzM0O2dyb19pcHY0X21heF9zaXplJiMzNDsgbm90IGluIGNmZy5kZXY6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7aXByb3V0ZTIgZG9lcyBub3QgcmVwb3J0IHRoZSBHUk8gc2l6ZSBsaW1pdHMmIzM0OykKJiM0MzsKJiM0MzsgICAgaWYgKGNmZy5kZXZbJiMzNDtncm9fbWF4X3NpemUmIzM0O10gPT0gc2l6ZSBhbmQKJiM0MzsgICAgICAgICAgICBjZmcuZGV2WyYjMzQ7Z3JvX2lwdjRfbWF4X3NpemUmIzM0O10gPT0gc2l6ZSk6CiYjNDM7ICAgICAgICByZXR1cm4KJiM0MzsKJiM0MzsgICAgb2xkID0gKGYmIzM0O2dyb19tYXhfc2l6ZSB7Y2ZnLmRldlsmIzM5O2dyb19tYXhfc2l6ZSYjMzk7XX0gJiMzNDsKJiM0MzsgICAgICAgICAgIGYmIzM0O2dyb19pcHY0X21heF9zaXplIHtjZmcuZGV2WyYjMzk7Z3JvX2lwdjRfbWF4X3NpemUmIzM5O119JiMzNDspCiYjNDM7ICAgIG5ldyA9IGYmIzM0O2dyb19tYXhfc2l6ZSB7c2l6ZX0gZ3JvX2lwdjRfbWF4X3NpemUge3NpemV9JiMzNDsKJiM0MzsKJiM0MzsgICAgaXAoZiYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7bmV3fSYjMzQ7KQomIzQzOyAgICBkZWZlcihpcCwgZiYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfSYjMzQ7KQomIzQzOwomIzQzOyAgICBkZXYgPSBpcCgmIzM0Oy1kIGxpbmsgc2hvdyBkZXYgJiMzNDsgJiM0MzsgY2ZnLmlmbmFtZSwganNvbj1UcnVlKVswXQomIzQzOyAgICBrc2Z0X2VxKGRldlsmIzM0O2dyb19tYXhfc2l6ZSYjMzQ7XSwgc2l6ZSwgY29tbWVudD0mIzM0O2dyb19tYXhfc2l6ZSBub3QgYXBwbGllZCYjMzQ7KQomIzQzOyAgICBrc2Z0X2VxKGRldlsmIzM0O2dyb19pcHY0X21heF9zaXplJiMzNDtdLCBzaXplLAomIzQzOyAgICAgICAgICAgIGNvbW1lbnQ9JiMzNDtncm9faXB2NF9tYXhfc2l6ZSBub3QgYXBwbGllZCYjMzQ7KQomIzQzOwomIzQzOwogZGVmIF9zZXRfZXRodG9vbF9mZWF0KGRldiwgY3VycmVudCwgZmVhdHMsIGhvc3Q9Tm9uZSk6CiAgICAgczJuID0ge1RydWU6ICYjMzQ7b24mIzM0OywgRmFsc2U6ICYjMzQ7b2ZmJiMzNDt9CiAKQEAgLTIzOSw3ICYjNDM7MjczLDExIEBAIGRlZiBfc2V0dXAoY2ZnLCBtb2RlLCB0ZXN0X25hbWUpOgogICAgICAgICBmbHVzaF9wYXRoID0gZiYjMzQ7L3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L2dyb19mbHVzaF90aW1lb3V0JiMzNDsKICAgICAgICAgaXJxX3BhdGggPSBmJiMzNDsvc3lzL2NsYXNzL25ldC97Y2ZnLmlmbmFtZX0vbmFwaV9kZWZlcl9oYXJkX2lycXMmIzM0OwogCi0gICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsICYjMzQ7MjAwMDAwJiMzNDspCiYjNDM7ICAgICAgICAjICYjMzQ7YmlnX3RjcF8qJiMzNDsgdGVzdHMgbmVlZCBhIGxvbmdlciB0aW1lb3V0LCB1c2UgMTV4IHRoZSByZWd1bGFyIHRpbWVvdXQKJiM0MzsgICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKCYjMzQ7YmlnX3RjcF8mIzM0Oyk6CiYjNDM7ICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgJiMzNDszMDAwMDAwJiMzNDspCiYjNDM7ICAgICAgICBlbHNlOgomIzQzOyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsICYjMzQ7MjAwMDAwJiMzNDspCiAgICAgICAgIGN0bF9maWxlX3dyaXRlKGlycV9wYXRoLCAmIzM0OzEwJiMzNDspCiAKICAgICAgICAgX3NldF9ldGh0b29sX2ZlYXQoY2ZnLmlmbmFtZSwgY2ZnLmZlYXQsCkBAIC0yODksNiAmIzQzOzMyNyw5IEBAIGRlZiBfc2V0dXAoY2ZnLCBtb2RlLCB0ZXN0X25hbWUpOgogICAgIGV4Y2VwdCBLc2Z0WGZhaWxFeDoKICAgICAgICAgcGFzcwogCiYjNDM7ICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKCYjMzQ7YmlnX3RjcF8mIzM0Oyk6CiYjNDM7ICAgICAgICBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBCSUdfVENQX0dST19NQVhfU0laRSkKJiM0MzsKIAogZGVmIF9ncm9fdmFyaWFudHMoKToKICAgICAmIzM0OyYjMzQ7JiMzNDtHZW5lcmF0b3IgdGhhdCB5aWVsZHMgYWxsIGNvbWJpbmF0aW9ucyBvZiBwcm90b2NvbCBhbmQgdGVzdCB0eXBlcy4mIzM0OyYjMzQ7JiMzNDsKQEAgLTMwNCw2ICYjNDM7MzQ1LDExIEBAIGRlZiBfZ3JvX3ZhcmlhbnRzKCk6CiAgICAgICAgICYjMzQ7bGFyZ2VfbWF4JiMzNDssICYjMzQ7bGFyZ2VfcmVtJiMzNDssCiAgICAgXQogCiYjNDM7ICAgIGJpZ190Y3BfdGVzdHMgPSBbCiYjNDM7ICAgICAgICAmIzM0O2JpZ190Y3BfZGF0YV9zYW1lJiMzNDssICYjMzQ7YmlnX3RjcF9kYXRhX2xyZ19zbWwmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7YmlnX3RjcF90Y3Bfc2VxJiMzNDssICYjMzQ7YmlnX3RjcF9sYXJnZV9tYXgmIzM0OywKJiM0MzsgICAgXQomIzQzOwogICAgICMgVGVzdHMgc3BlY2lmaWMgdG8gSVB2NAogICAgIGlwdjRfdGVzdHMgPSBbCiAgICAgICAgICYjMzQ7aXBfY3N1bSYjMzQ7LApAQCAtMzIyLDYgJiM0MzszNjgsMTAgQEAgZGVmIF9ncm9fdmFyaWFudHMoKToKICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBjb21tb25fdGVzdHM6CiAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lCiAKJiM0MzsgICAgICAgIGlmIHByb3RvY29sIGluIFsmIzM0O2lwdjQmIzM0OywgJiMzNDtpcHY2JiMzNDtdOgomIzQzOyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gYmlnX3RjcF90ZXN0czoKJiM0MzsgICAgICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZQomIzQzOwogICAgICAgICBpZiBwcm90b2NvbCBpbiBbJiMzNDtpcHY0JiMzNDssICYjMzQ7aXBpcCYjMzQ7XToKICAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gaXB2NF90ZXN0czoKICAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYwppbmRleCA3YTMzMzE1NWRlMWFiLi43MGIwZGViM2MxMWZhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMKQEAgLTQ2LDYgJiM0Mzs0NiwxMiBAQAogICogICAtIGxhcmdlX21heDogZXhjZWVkaW5nIG1heCBzaXplCiAgKiAgIC0gbGFyZ2VfcmVtOiByZW1haW5kZXIgaGFuZGxpbmcKICAqCiYjNDM7ICogYmlnX3RjcF8qOgomIzQzOyAqICAgLSBiaWdfdGNwX2RhdGFfc2FtZTogICAgZXF1YWwgc2VnbWVudHMgY29hbGVzY2luZyBwYXN0IElQX01BWFBBQ0tFVAomIzQzOyAqICAgLSBiaWdfdGNwX2RhdGFfbHJnX3NtbDogYSBzbWFsbGVyIGZpbmFsIHNlZ21lbnQgY2FycnlpbmcgaXQgb3ZlcgomIzQzOyAqICAgLSBiaWdfdGNwX3RjcF9zZXE6ICAgICAgMTYtYml0IHRydW5jYXRlZCBzZXF1ZW5jZSBudW1iZXIgbXVzdCBub3QgY29hbGVzY2UKJiM0MzsgKiAgIC0gYmlnX3RjcF9sYXJnZV9tYXg6ICAgIGNvYWxlc2Npbmcgc3RvcHMgYXQgdGhlIGNvbmZpZ3VyZWQgbGltaXQKJiM0MzsgKgogICogc2luZ2xlLCBjYXBhY2l0eToKICAqICBCb3JpbmcgY2FzZXMgdXNlZCB0byB0ZXN0IGNvYWxlc2NpbmcgbWFjaGluZXJ5IGl0c2VsZiBhbmQgc3RhdHMKICAqICBtb3JlIHRoYW4gcHJvdG9jb2wgYmVoYXZpb3IuCkBAIC0xMTAsNiAmIzQzOzExNiwxNiBAQAogCiAjZGVmaW5lIEVYSVRfT1ZFUl9DT0FMRVNDRQk0MgogCiYjNDM7LyogTXVzdCBtYXRjaCBCSUdfVENQX0dST19NQVhfU0laRSBpbiBncm9fbGliLnB5LiAqLwomIzQzOyNkZWZpbmUgQklHX1RDUF9HUk9fTUFYX1NJWkUJMTI4MDAwCiYjNDM7CiYjNDM7I2RlZmluZSBCSUdfVENQX1JFQ1ZfQlVGX0xFTiBcCiYjNDM7CShCSUdfVENQX0dST19NQVhfU0laRSAmIzQzOyBNQVhfTVNTICYjNDM7IEwyX0hMRU5fTUFYKQomIzQzOyNkZWZpbmUgQklHX1RDUF9NSU5fTVNTCQkoQVNTVU1FRF9NVFUgLSAoTUFYX0hEUl9MRU4gLSBFVEhfSExFTikpCiYjNDM7I2RlZmluZSBCSUdfVENQX01BWF9GSUxMX0NOVCBcCiYjNDM7CSgoaW50KSgoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKSAvIFwKJiM0MzsJICAgICAgIEJJR19UQ1BfTUlOX01TUykpCiYjNDM7CiAjZGVmaW5lIGlwdjZfb3B0bGVuKHApICAoKChwKS0mZ3Q7aGRybGVuJiM0MzsxKSAmbHQ7Jmx0OyAzKSAvKiBjYWxjdWxhdGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIGxlbiAqLwogI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKQogCkBAIC0xNjYsNiAmIzQzOzE4MiwyNyBAQCBzdGF0aWMgaW50IG51bV9sYXJnZV9wa3Qodm9pZCkKIAlyZXR1cm4gbWF4X3BheWxvYWQoKSAvIGNhbGNfbXNzKCk7CiB9CiAKJiM0MzsvKiBIb3cgbWFueSBtYXhpbXVtIHNpemVkIHNlZ21lbnRzIGZpdCB1bmRlciB0aGUgY29uZmlndXJlZCBsaW1pdC4gKi8KJiM0MztzdGF0aWMgaW50IGJpZ190Y3BfbGFyZ2VfY250KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtICh0b3RhbF9oZHJfbGVuIC0gRVRIX0hMRU4pKSAvCiYjNDM7CSAgICAgICBjYWxjX21zcygpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBIb3cgbWFueSBjYWxjX21zcygpIHNpemVkIHNlZ21lbnRzIGFyZSBuZWVkZWQgdG8gc2F0aXNmeSB0aGUKJiM0MzsgKiBmb2xsb3dpbmcgY29uZGl0aW9uOgomIzQzOyAqIHBrdF9jb3VudCAqIGNhbGNfbXNzKCkgJmx0OyBJUF9NQVhQQUNLRVQgJmx0OyAocGt0X2NvdW50ICYjNDM7IDEpICogY2FsY19tc3MoKQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYmlnX3RjcF9maWxsX2NudCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIElQX01BWFBBQ0tFVCAvIGNhbGNfbXNzKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYmlnX3RjcF9maWxsX2xlbih2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJpZ190Y3BfZmlsbF9jbnQoKSAqIGNhbGNfbXNzKCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdmxvZyhjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CkBAIC01NjAsNiAmIzQzOzU5Nyw2MSBAQCBzdGF0aWMgdm9pZCBzZW5kX2RhdGFfcGt0cyhpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsCiAJd3JpdGVfcGFja2V0KGZkLCBidWYsIHRvdGFsX2hkcl9sZW4gJiM0MzsgcGF5bG9hZF9sZW4yLCBkYWRkcik7CiB9CiAKJiM0MzsvKiBTZW5kIG51bV9wa3Qgc2VnbWVudHMgb2YgcGt0X2xlbiBieXRlcywgdGhlbiBvbmUgb2YgcmVtYWluZGVyIGxlbi4gKi8KJiM0MztzdGF0aWMgdm9pZCBzZW5kX2JpZ190Y3AoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyLCBpbnQgcGt0X2xlbiwKJiM0MzsJCQkgaW50IG51bV9wa3QsIGludCByZW1haW5kZXIpCiYjNDM7ewomIzQzOwlzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTsKJiM0MzsJc3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTsKJiM0MzsJY29uc3QgaW50IGZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKG51bV9wa3QgJmd0OyBCSUdfVENQX01BWF9GSUxMX0NOVCkKJiM0MzsJCWVycm9yKDEsIDAsICYjMzQ7bmVlZCAlZCBwYWNrZXRzLCBhcnJheSBob2xkcyAlZCYjMzQ7LAomIzQzOwkJICAgICAgbnVtX3BrdCwgQklHX1RDUF9NQVhfRklMTF9DTlQpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3BrdDsgaSYjNDM7JiM0MzspCiYjNDM7CQljcmVhdGVfcGFja2V0KHBrdHNbaV0sIGkgKiBwa3RfbGVuLCAwLCBwa3RfbGVuLCAwKTsKJiM0MzsJY3JlYXRlX3BhY2tldChsYXN0LCBmaWxsZWQsIDAsIHJlbWFpbmRlciwgMCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcGt0OyBpJiM0MzsmIzQzOykKJiM0MzsJCXdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiAmIzQzOyBwa3RfbGVuLCBkYWRkcik7CiYjNDM7CXdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiAmIzQzOyByZW1haW5kZXIsIGRhZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogSW4gQklHIFRDUCBjb25maWd1cmF0aW9uLCB0aGUgdG90YWwgYWdncmVnYXRlIGxlbmd0aCBjYW4KJiM0MzsgKiBiZSBncmVhdGVyIHRoYW4gdGhlIGxlZ2FjeSBJUF9NQVhQQUNLRVQuIFNpbmNlIHRoZSBhZ2dyZWdhdGUKJiM0MzsgKiBsZW5ndGggaXMgdXNlZCBpbiBjYWxjdWxhdGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycywKJiM0MzsgKiBzZW5kIGEgcGFja2V0IHdpdGggYSBzZXF1ZW5jZSBudW1iZXIgdGhhdCBkaWZmZXJzIGJ5IElQX01BWFBBQ0tFVCAmIzQzOyAxLAomIzQzOyAqIHRvIHRlc3QgYWdhaW5zdCB0cnVuY2F0aW9uIGJ1Z3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwX2JhZF9zZXEoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyKQomIzQzO3sKJiM0MzsJc3RhdGljIGNoYXIgcGt0c1tCSUdfVENQX01BWF9GSUxMX0NOVF1bTUFYX0hEUl9MRU4gJiM0MzsgTUFYX01TU107CiYjNDM7CWNvbnN0IGludCBudW1fcGt0ID0gYmlnX3RjcF9maWxsX2NudCgpICYjNDM7IDE7CiYjNDM7CXN0YXRpYyBjaGFyIGxhc3RbTUFYX0hEUl9MRU4gJiM0MzsgTUFYX01TU107CiYjNDM7CWNvbnN0IGludCBwa3RfbGVuID0gY2FsY19tc3MoKTsKJiM0MzsJaW50IGJhZF9zZXE7CiYjNDM7CWludCBmaWxsZWQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmaWxsZWQgPSBudW1fcGt0ICogcGt0X2xlbjsKJiM0MzsJLyogTG93IDE2IGJpdHMgbWF0Y2ggd2l0aCB0aGUgY29ycmVjdCBpbmNvbWluZyBzZXF1ZW5jZSBudW1iZXIuICovCiYjNDM7CWJhZF9zZXEgPSBmaWxsZWQgLSAoSVBfTUFYUEFDS0VUICYjNDM7IDEpOwomIzQzOwomIzQzOwlpZiAobnVtX3BrdCAmZ3Q7IEJJR19UQ1BfTUFYX0ZJTExfQ05UKQomIzQzOwkJZXJyb3IoMSwgMCwgJiMzNDtuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkJiMzNDssCiYjNDM7CQkgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcGt0OyBpJiM0MzsmIzQzOykKJiM0MzsJCWNyZWF0ZV9wYWNrZXQocGt0c1tpXSwgaSAqIHBrdF9sZW4sIDAsIHBrdF9sZW4sIDApOwomIzQzOwljcmVhdGVfcGFja2V0KGxhc3QsIGJhZF9zZXEsIDAsIHBrdF9sZW4sIDApOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3BrdDsgaSYjNDM7JiM0MzspCiYjNDM7CQl3cml0ZV9wYWNrZXQoZmQsIHBrdHNbaV0sIHRvdGFsX2hkcl9sZW4gJiM0MzsgcGt0X2xlbiwgZGFkZHIpOwomIzQzOwl3cml0ZV9wYWNrZXQoZmQsIGxhc3QsIHRvdGFsX2hkcl9sZW4gJiM0MzsgcGt0X2xlbiwgZGFkZHIpOwomIzQzO30KJiM0MzsKIC8qIElmIGluY29taW5nIHNlZ21lbnRzIG1ha2UgdHJhY2tlZCBzZWdtZW50IGxlbmd0aCBleGNlZWQKICAqIGxlZ2FsIElQIGRhdGFncmFtIGxlbmd0aCwgZG8gbm90IGNvYWxlc2NlCiAgKi8KQEAgLTExNjEsNyAmIzQzOzEyNTMsNyBAQCBzdGF0aWMgdm9pZCByZWN2X2Vycm9yKGludCBmZCwgaW50IHJjdl9lcnJubykKIHN0YXRpYyB2b2lkIGNoZWNrX3JlY3ZfcGt0cyhpbnQgZmQsIGludCAqY29ycmVjdF9wYXlsb2FkLAogCQkJICAgIGludCBjb3JyZWN0X251bV9wa3RzKQogewotCXN0YXRpYyBjaGFyIGJ1ZmZlcltJUF9NQVhQQUNLRVQgJiM0MzsgTDJfSExFTl9NQVggJiM0MzsgMV07CiYjNDM7CXN0YXRpYyBjaGFyIGJ1ZmZlcltCSUdfVENQX1JFQ1ZfQlVGX0xFTl07CiAJaW50IG5ob2ZmID0gRVRIX0hMRU4gJiM0MzsgKHBwcG9lID8gUFBQT0VfU0VTX0hMRU4gOiAwKTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoYnVmZmVyICYjNDM7IG5ob2ZmKTsKIAlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShidWZmZXIgJiM0MzsgbmhvZmYpOwpAQCAtMTU0MSw2ICYjNDM7MTYzMywyNSBAQCBzdGF0aWMgdm9pZCBncm9fc2VuZGVyKHZvaWQpCiAJCXNlbmRfbGFyZ2UodHhmZCwgJmFtcDtkYWRkciwgcmVtYWluZGVyICYjNDM7IDEpOwogCQl3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgJmFtcDtkYWRkcik7CiAKJiM0MzsJLyogYmlnIHRjcCBzdWItdGVzdHMgKi8KJiM0MzsJfSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICYjMzQ7YmlnX3RjcF9kYXRhX3NhbWUmIzM0OykgPT0gMCkgewomIzQzOwkJc2VuZF9iaWdfdGNwKHR4ZmQsICZhbXA7ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfZmlsbF9jbnQoKSwKJiM0MzsJCQkgICAgIGNhbGNfbXNzKCkpOwomIzQzOwkJd3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sICZhbXA7ZGFkZHIpOwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX2RhdGFfbHJnX3NtbCYjMzQ7KSA9PSAwKSB7CiYjNDM7CQlpbnQgcmVtYWluZGVyID0gY2FsY19tc3MoKSAvIDI7CiYjNDM7CiYjNDM7CQlzZW5kX2JpZ190Y3AodHhmZCwgJmFtcDtkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLAomIzQzOwkJCSAgICAgcmVtYWluZGVyKTsKJiM0MzsJCXdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCAmYW1wO2RhZGRyKTsKJiM0MzsJfSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICYjMzQ7YmlnX3RjcF90Y3Bfc2VxJiMzNDspID09IDApIHsKJiM0MzsJCXNlbmRfYmlnX3RjcF9iYWRfc2VxKHR4ZmQsICZhbXA7ZGFkZHIpOwomIzQzOwkJd3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sICZhbXA7ZGFkZHIpOwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX2xhcmdlX21heCYjMzQ7KSA9PSAwKSB7CiYjNDM7CQlzZW5kX2JpZ190Y3AodHhmZCwgJmFtcDtkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9sYXJnZV9jbnQoKSwKJiM0MzsJCQkgICAgIGNhbGNfbXNzKCkpOwomIzQzOwkJd3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sICZhbXA7ZGFkZHIpOwomIzQzOwogCS8qIG1hY2hpbmVyeSBzdWItdGVzdHMgKi8KIAl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtzaW5nbGUmIzM0OykgPT0gMCkgewogCQlzdGF0aWMgY2hhciBidWZbTUFYX0hEUl9MRU4gJiM0MzsgUEFZTE9BRF9MRU5dOwpAQCAtMTc2OCw2ICYjNDM7MTg3OSwyNiBAQCBzdGF0aWMgdm9pZCBncm9fcmVjZWl2ZXIodm9pZCkKIAkJcHJpbnRmKCYjMzQ7bGFzdCBzZWdtZW50IHNlbnQgaW5kaXZpZHVhbGx5OiAmIzM0Oyk7CiAJCWNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDMpOwogCiYjNDM7CS8qIGJpZyB0Y3Agc3ViLXRlc3RzICovCiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfZGF0YV9zYW1lJiMzNDspID09IDApIHsKJiM0MzsJCWNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfZmlsbF9sZW4oKSAmIzQzOyBjYWxjX21zcygpOwomIzQzOwkJcHJpbnRmKCYjMzQ7ZGF0YSBwYWNrZXRzIG9mIHNhbWUgc2l6ZSBwYXN0IElQX01BWFBBQ0tFVDogJiMzNDspOwomIzQzOwkJY2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMSk7CiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfZGF0YV9scmdfc21sJiMzNDspID09IDApIHsKJiM0MzsJCWNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfZmlsbF9sZW4oKSAmIzQzOyBjYWxjX21zcygpIC8gMjsKJiM0MzsJCXByaW50ZigmIzM0O3NtYWxsZXIgbGFzdCBwYWNrZXQgcGFzdCBJUF9NQVhQQUNLRVQ6ICYjMzQ7KTsKJiM0MzsJCWNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDEpOwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX3RjcF9zZXEmIzM0OykgPT0gMCkgewomIzQzOwkJY29ycmVjdF9wYXlsb2FkWzBdID0gKGJpZ190Y3BfZmlsbF9jbnQoKSAmIzQzOyAxKSAqIGNhbGNfbXNzKCk7CiYjNDM7CQljb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpOwomIzQzOwkJcHJpbnRmKCYjMzQ7YWxpYXNlZCBzZXEgcGFzdCBJUF9NQVhQQUNLRVQgZG9lc24mIzM5O3QgY29hbGVzY2U6ICYjMzQ7KTsKJiM0MzsJCWNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpOwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX2xhcmdlX21heCYjMzQ7KSA9PSAwKSB7CiYjNDM7CQljb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2xhcmdlX2NudCgpICogY2FsY19tc3MoKTsKJiM0MzsJCWNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7CiYjNDM7CQlwcmludGYoJiMzNDtzaG91bGRuJiMzOTt0IGNvYWxlc2NlIHBhc3QgZ3JvX21heF9zaXplOiAmIzM0Oyk7CiYjNDM7CQljaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAyKTsKJiM0MzsKIAkvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovCiAJfSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICYjMzQ7c2luZ2xlJiMzNDspID09IDApIHsKIAkJcHJpbnRmKCYjMzQ7c2luZ2xlIGRhdGEgcGFja2V0OiAmIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNDMKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogODg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZGlmZiBhZmZlY3RzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5YCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGF0ICpvbmx5KiB0aGVzZSBmaWxlcyBhcmUgbW9kaWZpZWQsIGFuZCBJJiMzOTtkIHR5cGljYWxseSB1c2UgYGdpdCBsb2dgIG9yIGBnaXQgc3RhdHVzYCBmb3IgdGhhdC4gVGhlbiBJIHJlbWVtYmVyIHRoZSBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3IgdGhpcyBzY2VuYXJpbyDigJMgdG8gY2hlY2sgaWYgYW55IGtlcm5lbCBmaWxlcyBhcmUgYWZmZWN0ZWQuIFRoZSBwcm9tcHQgc2hvd3MgdGhlIGZ1bGwgY29tbWl0IGRpZmYsIGNvbmZpcm1pbmcgb25seSB0aG9zZSB0d28gZmlsZXMuIEdvb2QuCgpUaGVzZSBmaWxlcyBhcmUgbG9jYXRlZCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCwgY2xlYXJseSB1c2VyLXNwYWNlIHNlbGYtdGVzdHMgZm9yIG5ldHdvcmstcmVsYXRlZCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBmdW5jdGlvbmFsaXR5LiBUaGV5ICpkb24mIzM5O3QqIGJ1aWxkIGludG8gdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBOb3csIEkgaGF2ZSB0byBhcHBseSB0aGUgbG9naWMgYmFzZWQgb24gU2VjdGlvbiAyIG9mIHRoZSBkaXJlY3Rpb25zLgoKVGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYzogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzLi4uJiMzNDsgYW5kIG9uZSBvZiB0aG9zZSBjYXRlZ29yaWVzIGV4cGxpY2l0bHkgaW5jbHVkZXMgJiMzNDtVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7IFRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IHdlIGhhdmUgaGVyZS4gVGhlc2Ugc2VsZi10ZXN0cyBmYWxsIHNxdWFyZWx5IGludG8gdGhhdCBjYXRlZ29yeS4KClNvLCBgV29ydGhGdXp6aW5nYCBoYXMgdG8gYmUgYGZhbHNlYC4gVGhlcmUmIzM5O3Mgbm8ga2VybmVsIGNvZGUgYmVpbmcgbW9kaWZpZWQsIG5vIG5lZWQgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBhbmQgbm8gc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvbi4gQmFzZWQgb24gdGhlIGRvY3VtZW50YXRpb24sIHRoaXMgbWVhbnM6CgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBsaXN0KQoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QpCiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIChzcGVjaWZpY2FsbHkgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHlgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY2ApLiBObyBrZXJuZWwtc3BhY2UgY29kZSwgdm1saW51eCwgb3Iga2VybmVsIG1vZHVsZXMgYXJlIG1vZGlmaWVkLgoqICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKCkkgbmVlZCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcmVxdWlyZWQgZm9ybWF0IGZvciBgc2V0LXJlc3VsdHNgLCBhbmQgZXZlcnl0aGluZyBzZWVtcyBjb3JyZWN0LiBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5IGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jKSBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjowODo0MS43MzUwODk4MjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDg2MDMyNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjowODo0MS43MzUwOTQzOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzE0NTYxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NjVjMTRlYjYzM2M3MzQ4NmJkYTViZWY4MGEyM2Q0MzZmZThlMDc3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDA2OjA4OjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XFxuaW5kZXggYjdhYzA2NjBhZGMwMS4uZmFmZTI5NzU0MDFiMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxcbkBAIC00MCwxMyArNDAsMTcgQEAgVGVzdCBjYXNlczpcXG4gICAtIGlwX3Y2ZXh0X2RpZmY6IChJUHY2KSBJUHY2IGV4dCBoZWFkZXIgd2l0aCBkaWZmZXJlbnQgcGF5bG9hZCBkb2Vzbid0IGNvYWxlc2NlXFxuICAgLSBsYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIEdST19NQVhfU0laRSBkb24ndCBjb2FsZXNjZVxcbiAgIC0gbGFyZ2VfcmVtOiBMYXJnZSBwYWNrZXQgcmVtYWluZGVyIGhhbmRsaW5nXFxuKyAgLSBiaWdfdGNwX2RhdGFfc2FtZTogU2FtZSBzaXplIHBhY2tldHMgY29hbGVzY2UgcGFzdCBJUF9NQVhQQUNLRVRcXG4rICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBTbWFsbGVyIGxhc3QgcGFja2V0IGNvYWxlc2NlcyBwYXN0IElQX01BWFBBQ0tFVFxcbisgIC0gYmlnX3RjcF90Y3Bfc2VxOiBQYWNrZXRzIHdpdGggMTYtYml0IHRydW5jYXRlZCBzZXFubyBkb24ndCBjb2FsZXNjZVxcbisgIC0gYmlnX3RjcF9sYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIHRoZSBCSUcgVENQIGxpbWl0IGRvbid0IGNvYWxlc2NlXFxuIFxcXCJcXFwiXFxcIlxcbiBcXG4gaW1wb3J0IGdsb2JcXG4gaW1wb3J0IG9zXFxuIGltcG9ydCByZVxcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wclxcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByLCBrc2Z0X2VxXFxuK2Zyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgS3NmdEZhaWxFeCwgS3NmdFNraXBFeCwgS3NmdFhmYWlsRXhcXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldGRldkZhbWlseSwgRXRodG9vbEZhbWlseVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBjbWQsIGN0bF9maWxlX3dyaXRlLCBkZWZlciwgZXRodG9vbCwgaXBcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnRcXG5AQCAtNTUsNiArNTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxcbiAjIGdyby5jIHVzZXMgaGFyZGNvZGVkIERQT1JUPTgwMDBcXG4gR1JPX0RQT1JUID0gODAwMFxcbiBcXG4rQklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDBcXG4rXFxuIFxcbiBkZWYgX3Jlc29sdmVfZG1hYyhjZmcsIGlwdmVyKTpcXG4gICAgIFxcXCJcXFwiXFxcIlxcbkBAIC05MSw2ICs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XFxuICAgICAgICAgZGVmZXIoaXAsIGZcXFwibGluayBzZXQgZGV2IHtkZXZbJ2lmbmFtZSddfSBtdHUge2RldlsnbXR1J119XFxcIiwgaG9zdD1ob3N0KVxcbiBcXG4gXFxuK2RlZiBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBzaXplKTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgU2V0IHRoZSBsb2NhbCBkZXZpY2UncyBHUk8gc2l6ZSBsaW1pdHMsIHRoZW4gY29uZmlybSB0aGV5IHN0dWNrLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgX3NldF9tdHVfcmVzdG9yZShjZmcuZGV2LCA0MDk2LCBOb25lKVxcbisgICAgX3NldF9tdHVfcmVzdG9yZShjZmcucmVtb3RlX2RldiwgNDA5NiwgY2ZnLnJlbW90ZSlcXG4rXFxuKyAgICBpZiBcXFwiZ3JvX21heF9zaXplXFxcIiBub3QgaW4gY2ZnLmRldiBvciBcXFwiZ3JvX2lwdjRfbWF4X3NpemVcXFwiIG5vdCBpbiBjZmcuZGV2OlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImlwcm91dGUyIGRvZXMgbm90IHJlcG9ydCB0aGUgR1JPIHNpemUgbGltaXRzXFxcIilcXG4rXFxuKyAgICBpZiAoY2ZnLmRldltcXFwiZ3JvX21heF9zaXplXFxcIl0gPT0gc2l6ZSBhbmRcXG4rICAgICAgICAgICAgY2ZnLmRldltcXFwiZ3JvX2lwdjRfbWF4X3NpemVcXFwiXSA9PSBzaXplKTpcXG4rICAgICAgICByZXR1cm5cXG4rXFxuKyAgICBvbGQgPSAoZlxcXCJncm9fbWF4X3NpemUge2NmZy5kZXZbJ2dyb19tYXhfc2l6ZSddfSBcXFwiXFxuKyAgICAgICAgICAgZlxcXCJncm9faXB2NF9tYXhfc2l6ZSB7Y2ZnLmRldlsnZ3JvX2lwdjRfbWF4X3NpemUnXX1cXFwiKVxcbisgICAgbmV3ID0gZlxcXCJncm9fbWF4X3NpemUge3NpemV9IGdyb19pcHY0X21heF9zaXplIHtzaXplfVxcXCJcXG4rXFxuKyAgICBpcChmXFxcImxpbmsgc2V0IGRldiB7Y2ZnLmlmbmFtZX0ge25ld31cXFwiKVxcbisgICAgZGVmZXIoaXAsIGZcXFwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVxcXCIpXFxuK1xcbisgICAgZGV2ID0gaXAoXFxcIi1kIGxpbmsgc2hvdyBkZXYgXFxcIiArIGNmZy5pZm5hbWUsIGpzb249VHJ1ZSlbMF1cXG4rICAgIGtzZnRfZXEoZGV2W1xcXCJncm9fbWF4X3NpemVcXFwiXSwgc2l6ZSwgY29tbWVudD1cXFwiZ3JvX21heF9zaXplIG5vdCBhcHBsaWVkXFxcIilcXG4rICAgIGtzZnRfZXEoZGV2W1xcXCJncm9faXB2NF9tYXhfc2l6ZVxcXCJdLCBzaXplLFxcbisgICAgICAgICAgICBjb21tZW50PVxcXCJncm9faXB2NF9tYXhfc2l6ZSBub3QgYXBwbGllZFxcXCIpXFxuK1xcbitcXG4gZGVmIF9zZXRfZXRodG9vbF9mZWF0KGRldiwgY3VycmVudCwgZmVhdHMsIGhvc3Q9Tm9uZSk6XFxuICAgICBzMm4gPSB7VHJ1ZTogXFxcIm9uXFxcIiwgRmFsc2U6IFxcXCJvZmZcXFwifVxcbiBcXG5AQCAtMjM5LDcgKzI3MywxMSBAQCBkZWYgX3NldHVwKGNmZywgbW9kZSwgdGVzdF9uYW1lKTpcXG4gICAgICAgICBmbHVzaF9wYXRoID0gZlxcXCIvc3lzL2NsYXNzL25ldC97Y2ZnLmlmbmFtZX0vZ3JvX2ZsdXNoX3RpbWVvdXRcXFwiXFxuICAgICAgICAgaXJxX3BhdGggPSBmXFxcIi9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9uYXBpX2RlZmVyX2hhcmRfaXJxc1xcXCJcXG4gXFxuLSAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXFxcIjIwMDAwMFxcXCIpXFxuKyAgICAgICAgIyBcXFwiYmlnX3RjcF8qXFxcIiB0ZXN0cyBuZWVkIGEgbG9uZ2VyIHRpbWVvdXQsIHVzZSAxNXggdGhlIHJlZ3VsYXIgdGltZW91dFxcbisgICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFxcXCJiaWdfdGNwX1xcXCIpOlxcbisgICAgICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCBcXFwiMzAwMDAwMFxcXCIpXFxuKyAgICAgICAgZWxzZTpcXG4rICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXFxcIjIwMDAwMFxcXCIpXFxuICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoaXJxX3BhdGgsIFxcXCIxMFxcXCIpXFxuIFxcbiAgICAgICAgIF9zZXRfZXRodG9vbF9mZWF0KGNmZy5pZm5hbWUsIGNmZy5mZWF0LFxcbkBAIC0yODksNiArMzI3LDkgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XFxuICAgICBleGNlcHQgS3NmdFhmYWlsRXg6XFxuICAgICAgICAgcGFzc1xcbiBcXG4rICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFxcXCJiaWdfdGNwX1xcXCIpOlxcbisgICAgICAgIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIEJJR19UQ1BfR1JPX01BWF9TSVpFKVxcbitcXG4gXFxuIGRlZiBfZ3JvX3ZhcmlhbnRzKCk6XFxuICAgICBcXFwiXFxcIlxcXCJHZW5lcmF0b3IgdGhhdCB5aWVsZHMgYWxsIGNvbWJpbmF0aW9ucyBvZiBwcm90b2NvbCBhbmQgdGVzdCB0eXBlcy5cXFwiXFxcIlxcXCJcXG5AQCAtMzA0LDYgKzM0NSwxMSBAQCBkZWYgX2dyb192YXJpYW50cygpOlxcbiAgICAgICAgIFxcXCJsYXJnZV9tYXhcXFwiLCBcXFwibGFyZ2VfcmVtXFxcIixcXG4gICAgIF1cXG4gXFxuKyAgICBiaWdfdGNwX3Rlc3RzID0gW1xcbisgICAgICAgIFxcXCJiaWdfdGNwX2RhdGFfc2FtZVxcXCIsIFxcXCJiaWdfdGNwX2RhdGFfbHJnX3NtbFxcXCIsXFxuKyAgICAgICAgXFxcImJpZ190Y3BfdGNwX3NlcVxcXCIsIFxcXCJiaWdfdGNwX2xhcmdlX21heFxcXCIsXFxuKyAgICBdXFxuK1xcbiAgICAgIyBUZXN0cyBzcGVjaWZpYyB0byBJUHY0XFxuICAgICBpcHY0X3Rlc3RzID0gW1xcbiAgICAgICAgIFxcXCJpcF9jc3VtXFxcIixcXG5AQCAtMzIyLDYgKzM2OCwxMCBAQCBkZWYgX2dyb192YXJpYW50cygpOlxcbiAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gY29tbW9uX3Rlc3RzOlxcbiAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXFxuIFxcbisgICAgICAgIGlmIHByb3RvY29sIGluIFtcXFwiaXB2NFxcXCIsIFxcXCJpcHY2XFxcIl06XFxuKyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gYmlnX3RjcF90ZXN0czpcXG4rICAgICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcXG4rXFxuICAgICAgICAgaWYgcHJvdG9jb2wgaW4gW1xcXCJpcHY0XFxcIiwgXFxcImlwaXBcXFwiXTpcXG4gICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBpcHY0X3Rlc3RzOlxcbiAgICAgICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY1xcbmluZGV4IDdhMzMzMTU1ZGUxYWIuLjcwYjBkZWIzYzExZmEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcXG5AQCAtNDYsNiArNDYsMTIgQEBcXG4gICogICAtIGxhcmdlX21heDogZXhjZWVkaW5nIG1heCBzaXplXFxuICAqICAgLSBsYXJnZV9yZW06IHJlbWFpbmRlciBoYW5kbGluZ1xcbiAgKlxcbisgKiBiaWdfdGNwXyo6XFxuKyAqICAgLSBiaWdfdGNwX2RhdGFfc2FtZTogICAgZXF1YWwgc2VnbWVudHMgY29hbGVzY2luZyBwYXN0IElQX01BWFBBQ0tFVFxcbisgKiAgIC0gYmlnX3RjcF9kYXRhX2xyZ19zbWw6IGEgc21hbGxlciBmaW5hbCBzZWdtZW50IGNhcnJ5aW5nIGl0IG92ZXJcXG4rICogICAtIGJpZ190Y3BfdGNwX3NlcTogICAgICAxNi1iaXQgdHJ1bmNhdGVkIHNlcXVlbmNlIG51bWJlciBtdXN0IG5vdCBjb2FsZXNjZVxcbisgKiAgIC0gYmlnX3RjcF9sYXJnZV9tYXg6ICAgIGNvYWxlc2Npbmcgc3RvcHMgYXQgdGhlIGNvbmZpZ3VyZWQgbGltaXRcXG4rICpcXG4gICogc2luZ2xlLCBjYXBhY2l0eTpcXG4gICogIEJvcmluZyBjYXNlcyB1c2VkIHRvIHRlc3QgY29hbGVzY2luZyBtYWNoaW5lcnkgaXRzZWxmIGFuZCBzdGF0c1xcbiAgKiAgbW9yZSB0aGFuIHByb3RvY29sIGJlaGF2aW9yLlxcbkBAIC0xMTAsNiArMTE2LDE2IEBAXFxuIFxcbiAjZGVmaW5lIEVYSVRfT1ZFUl9DT0FMRVNDRVxcdDQyXFxuIFxcbisvKiBNdXN0IG1hdGNoIEJJR19UQ1BfR1JPX01BWF9TSVpFIGluIGdyb19saWIucHkuICovXFxuKyNkZWZpbmUgQklHX1RDUF9HUk9fTUFYX1NJWkVcXHQxMjgwMDBcXG4rXFxuKyNkZWZpbmUgQklHX1RDUF9SRUNWX0JVRl9MRU4gXFxcXFxcbitcXHQoQklHX1RDUF9HUk9fTUFYX1NJWkUgKyBNQVhfTVNTICsgTDJfSExFTl9NQVgpXFxuKyNkZWZpbmUgQklHX1RDUF9NSU5fTVNTXFx0XFx0KEFTU1VNRURfTVRVIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKVxcbisjZGVmaW5lIEJJR19UQ1BfTUFYX0ZJTExfQ05UIFxcXFxcXG4rXFx0KChpbnQpKChCSUdfVENQX0dST19NQVhfU0laRSAtIDEgLSAoTUFYX0hEUl9MRU4gLSBFVEhfSExFTikpIC8gXFxcXFxcbitcXHQgICAgICAgQklHX1RDUF9NSU5fTVNTKSlcXG4rXFxuICNkZWZpbmUgaXB2Nl9vcHRsZW4ocCkgICgoKHApLVxcdTAwM2VoZHJsZW4rMSkgXFx1MDAzY1xcdTAwM2MgMykgLyogY2FsY3VsYXRlIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBsZW4gKi9cXG4gI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKVxcbiBcXG5AQCAtMTY2LDYgKzE4MiwyNyBAQCBzdGF0aWMgaW50IG51bV9sYXJnZV9wa3Qodm9pZClcXG4gXFx0cmV0dXJuIG1heF9wYXlsb2FkKCkgLyBjYWxjX21zcygpO1xcbiB9XFxuIFxcbisvKiBIb3cgbWFueSBtYXhpbXVtIHNpemVkIHNlZ21lbnRzIGZpdCB1bmRlciB0aGUgY29uZmlndXJlZCBsaW1pdC4gKi9cXG4rc3RhdGljIGludCBiaWdfdGNwX2xhcmdlX2NudCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiAoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKHRvdGFsX2hkcl9sZW4gLSBFVEhfSExFTikpIC9cXG4rXFx0ICAgICAgIGNhbGNfbXNzKCk7XFxuK31cXG4rXFxuKy8qIEhvdyBtYW55IGNhbGNfbXNzKCkgc2l6ZWQgc2VnbWVudHMgYXJlIG5lZWRlZCB0byBzYXRpc2Z5IHRoZVxcbisgKiBmb2xsb3dpbmcgY29uZGl0aW9uOlxcbisgKiBwa3RfY291bnQgKiBjYWxjX21zcygpIFxcdTAwM2MgSVBfTUFYUEFDS0VUIFxcdTAwM2MgKHBrdF9jb3VudCArIDEpICogY2FsY19tc3MoKVxcbisgKi9cXG4rc3RhdGljIGludCBiaWdfdGNwX2ZpbGxfY250KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIElQX01BWFBBQ0tFVCAvIGNhbGNfbXNzKCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYmlnX3RjcF9maWxsX2xlbih2b2lkKVxcbit7XFxuK1xcdHJldHVybiBiaWdfdGNwX2ZpbGxfY250KCkgKiBjYWxjX21zcygpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB2bG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiB7XFxuIFxcdHZhX2xpc3QgYXJncztcXG5AQCAtNTYwLDYgKzU5Nyw2MSBAQCBzdGF0aWMgdm9pZCBzZW5kX2RhdGFfcGt0cyhpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsXFxuIFxcdHdyaXRlX3BhY2tldChmZCwgYnVmLCB0b3RhbF9oZHJfbGVuICsgcGF5bG9hZF9sZW4yLCBkYWRkcik7XFxuIH1cXG4gXFxuKy8qIFNlbmQgbnVtX3BrdCBzZWdtZW50cyBvZiBwa3RfbGVuIGJ5dGVzLCB0aGVuIG9uZSBvZiByZW1haW5kZXIgbGVuLiAqL1xcbitzdGF0aWMgdm9pZCBzZW5kX2JpZ190Y3AoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyLCBpbnQgcGt0X2xlbixcXG4rXFx0XFx0XFx0IGludCBudW1fcGt0LCBpbnQgcmVtYWluZGVyKVxcbit7XFxuK1xcdHN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICsgTUFYX01TU107XFxuK1xcdHN0YXRpYyBjaGFyIGxhc3RbTUFYX0hEUl9MRU4gKyBNQVhfTVNTXTtcXG4rXFx0Y29uc3QgaW50IGZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChudW1fcGt0IFxcdTAwM2UgQklHX1RDUF9NQVhfRklMTF9DTlQpXFxuK1xcdFxcdGVycm9yKDEsIDAsIFxcXCJuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkXFxcIixcXG4rXFx0XFx0ICAgICAgbnVtX3BrdCwgQklHX1RDUF9NQVhfRklMTF9DTlQpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wa3Q7IGkrKylcXG4rXFx0XFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XFxuK1xcdGNyZWF0ZV9wYWNrZXQobGFzdCwgZmlsbGVkLCAwLCByZW1haW5kZXIsIDApO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wa3Q7IGkrKylcXG4rXFx0XFx0d3JpdGVfcGFja2V0KGZkLCBwa3RzW2ldLCB0b3RhbF9oZHJfbGVuICsgcGt0X2xlbiwgZGFkZHIpO1xcbitcXHR3cml0ZV9wYWNrZXQoZmQsIGxhc3QsIHRvdGFsX2hkcl9sZW4gKyByZW1haW5kZXIsIGRhZGRyKTtcXG4rfVxcbitcXG4rLyogSW4gQklHIFRDUCBjb25maWd1cmF0aW9uLCB0aGUgdG90YWwgYWdncmVnYXRlIGxlbmd0aCBjYW5cXG4rICogYmUgZ3JlYXRlciB0aGFuIHRoZSBsZWdhY3kgSVBfTUFYUEFDS0VULiBTaW5jZSB0aGUgYWdncmVnYXRlXFxuKyAqIGxlbmd0aCBpcyB1c2VkIGluIGNhbGN1bGF0aW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzLFxcbisgKiBzZW5kIGEgcGFja2V0IHdpdGggYSBzZXF1ZW5jZSBudW1iZXIgdGhhdCBkaWZmZXJzIGJ5IElQX01BWFBBQ0tFVCArIDEsXFxuKyAqIHRvIHRlc3QgYWdhaW5zdCB0cnVuY2F0aW9uIGJ1Z3MuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzZW5kX2JpZ190Y3BfYmFkX3NlcShpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIpXFxuK3tcXG4rXFx0c3RhdGljIGNoYXIgcGt0c1tCSUdfVENQX01BWF9GSUxMX0NOVF1bTUFYX0hEUl9MRU4gKyBNQVhfTVNTXTtcXG4rXFx0Y29uc3QgaW50IG51bV9wa3QgPSBiaWdfdGNwX2ZpbGxfY250KCkgKyAxO1xcbitcXHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICsgTUFYX01TU107XFxuK1xcdGNvbnN0IGludCBwa3RfbGVuID0gY2FsY19tc3MoKTtcXG4rXFx0aW50IGJhZF9zZXE7XFxuK1xcdGludCBmaWxsZWQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0ZmlsbGVkID0gbnVtX3BrdCAqIHBrdF9sZW47XFxuK1xcdC8qIExvdyAxNiBiaXRzIG1hdGNoIHdpdGggdGhlIGNvcnJlY3QgaW5jb21pbmcgc2VxdWVuY2UgbnVtYmVyLiAqL1xcbitcXHRiYWRfc2VxID0gZmlsbGVkIC0gKElQX01BWFBBQ0tFVCArIDEpO1xcbitcXG4rXFx0aWYgKG51bV9wa3QgXFx1MDAzZSBCSUdfVENQX01BWF9GSUxMX0NOVClcXG4rXFx0XFx0ZXJyb3IoMSwgMCwgXFxcIm5lZWQgJWQgcGFja2V0cywgYXJyYXkgaG9sZHMgJWRcXFwiLFxcbitcXHRcXHQgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3BrdDsgaSsrKVxcbitcXHRcXHRjcmVhdGVfcGFja2V0KHBrdHNbaV0sIGkgKiBwa3RfbGVuLCAwLCBwa3RfbGVuLCAwKTtcXG4rXFx0Y3JlYXRlX3BhY2tldChsYXN0LCBiYWRfc2VxLCAwLCBwa3RfbGVuLCAwKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcGt0OyBpKyspXFxuK1xcdFxcdHdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcXG4rXFx0d3JpdGVfcGFja2V0KGZkLCBsYXN0LCB0b3RhbF9oZHJfbGVuICsgcGt0X2xlbiwgZGFkZHIpO1xcbit9XFxuK1xcbiAvKiBJZiBpbmNvbWluZyBzZWdtZW50cyBtYWtlIHRyYWNrZWQgc2VnbWVudCBsZW5ndGggZXhjZWVkXFxuICAqIGxlZ2FsIElQIGRhdGFncmFtIGxlbmd0aCwgZG8gbm90IGNvYWxlc2NlXFxuICAqL1xcbkBAIC0xMTYxLDcgKzEyNTMsNyBAQCBzdGF0aWMgdm9pZCByZWN2X2Vycm9yKGludCBmZCwgaW50IHJjdl9lcnJubylcXG4gc3RhdGljIHZvaWQgY2hlY2tfcmVjdl9wa3RzKGludCBmZCwgaW50ICpjb3JyZWN0X3BheWxvYWQsXFxuIFxcdFxcdFxcdCAgICBpbnQgY29ycmVjdF9udW1fcGt0cylcXG4ge1xcbi1cXHRzdGF0aWMgY2hhciBidWZmZXJbSVBfTUFYUEFDS0VUICsgTDJfSExFTl9NQVggKyAxXTtcXG4rXFx0c3RhdGljIGNoYXIgYnVmZmVyW0JJR19UQ1BfUkVDVl9CVUZfTEVOXTtcXG4gXFx0aW50IG5ob2ZmID0gRVRIX0hMRU4gKyAocHBwb2UgPyBQUFBPRV9TRVNfSExFTiA6IDApO1xcbiBcXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoYnVmZmVyICsgbmhvZmYpO1xcbiBcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShidWZmZXIgKyBuaG9mZik7XFxuQEAgLTE1NDEsNiArMTYzMywyNSBAQCBzdGF0aWMgdm9pZCBncm9fc2VuZGVyKHZvaWQpXFxuIFxcdFxcdHNlbmRfbGFyZ2UodHhmZCwgXFx1MDAyNmRhZGRyLCByZW1haW5kZXIgKyAxKTtcXG4gXFx0XFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFxcdTAwMjZkYWRkcik7XFxuIFxcbitcXHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfZGF0YV9zYW1lXFxcIikgPT0gMCkge1xcbitcXHRcXHRzZW5kX2JpZ190Y3AodHhmZCwgXFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2ZpbGxfY250KCksXFxuK1xcdFxcdFxcdCAgICAgY2FsY19tc3MoKSk7XFxuK1xcdFxcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcXHUwMDI2ZGFkZHIpO1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfZGF0YV9scmdfc21sXFxcIikgPT0gMCkge1xcbitcXHRcXHRpbnQgcmVtYWluZGVyID0gY2FsY19tc3MoKSAvIDI7XFxuK1xcbitcXHRcXHRzZW5kX2JpZ190Y3AodHhmZCwgXFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2ZpbGxfY250KCksXFxuK1xcdFxcdFxcdCAgICAgcmVtYWluZGVyKTtcXG4rXFx0XFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFxcdTAwMjZkYWRkcik7XFxuK1xcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwiYmlnX3RjcF90Y3Bfc2VxXFxcIikgPT0gMCkge1xcbitcXHRcXHRzZW5kX2JpZ190Y3BfYmFkX3NlcSh0eGZkLCBcXHUwMDI2ZGFkZHIpO1xcbitcXHRcXHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXFx1MDAyNmRhZGRyKTtcXG4rXFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFxcXCJiaWdfdGNwX2xhcmdlX21heFxcXCIpID09IDApIHtcXG4rXFx0XFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFxcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9sYXJnZV9jbnQoKSxcXG4rXFx0XFx0XFx0ICAgICBjYWxjX21zcygpKTtcXG4rXFx0XFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFxcdTAwMjZkYWRkcik7XFxuK1xcbiBcXHQvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovXFxuIFxcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwic2luZ2xlXFxcIikgPT0gMCkge1xcbiBcXHRcXHRzdGF0aWMgY2hhciBidWZbTUFYX0hEUl9MRU4gKyBQQVlMT0FEX0xFTl07XFxuQEAgLTE3NjgsNiArMTg3OSwyNiBAQCBzdGF0aWMgdm9pZCBncm9fcmVjZWl2ZXIodm9pZClcXG4gXFx0XFx0cHJpbnRmKFxcXCJsYXN0IHNlZ21lbnQgc2VudCBpbmRpdmlkdWFsbHk6IFxcXCIpO1xcbiBcXHRcXHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAzKTtcXG4gXFxuK1xcdC8qIGJpZyB0Y3Agc3ViLXRlc3RzICovXFxuK1xcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwiYmlnX3RjcF9kYXRhX3NhbWVcXFwiKSA9PSAwKSB7XFxuK1xcdFxcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfZmlsbF9sZW4oKSArIGNhbGNfbXNzKCk7XFxuK1xcdFxcdHByaW50ZihcXFwiZGF0YSBwYWNrZXRzIG9mIHNhbWUgc2l6ZSBwYXN0IElQX01BWFBBQ0tFVDogXFxcIik7XFxuK1xcdFxcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDEpO1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfZGF0YV9scmdfc21sXFxcIikgPT0gMCkge1xcbitcXHRcXHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2ZpbGxfbGVuKCkgKyBjYWxjX21zcygpIC8gMjtcXG4rXFx0XFx0cHJpbnRmKFxcXCJzbWFsbGVyIGxhc3QgcGFja2V0IHBhc3QgSVBfTUFYUEFDS0VUOiBcXFwiKTtcXG4rXFx0XFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMSk7XFxuK1xcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwiYmlnX3RjcF90Y3Bfc2VxXFxcIikgPT0gMCkge1xcbitcXHRcXHRjb3JyZWN0X3BheWxvYWRbMF0gPSAoYmlnX3RjcF9maWxsX2NudCgpICsgMSkgKiBjYWxjX21zcygpO1xcbitcXHRcXHRjb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpO1xcbitcXHRcXHRwcmludGYoXFxcImFsaWFzZWQgc2VxIHBhc3QgSVBfTUFYUEFDS0VUIGRvZXNuJ3QgY29hbGVzY2U6IFxcXCIpO1xcbitcXHRcXHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAyKTtcXG4rXFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFxcXCJiaWdfdGNwX2xhcmdlX21heFxcXCIpID09IDApIHtcXG4rXFx0XFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9sYXJnZV9jbnQoKSAqIGNhbGNfbXNzKCk7XFxuK1xcdFxcdGNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7XFxuK1xcdFxcdHByaW50ZihcXFwic2hvdWxkbid0IGNvYWxlc2NlIHBhc3QgZ3JvX21heF9zaXplOiBcXFwiKTtcXG4rXFx0XFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XFxuK1xcbiBcXHQvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovXFxuIFxcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwic2luZ2xlXFxcIikgPT0gMCkge1xcbiBcXHRcXHRwcmludGYoXFxcInNpbmdsZSBkYXRhIHBhY2tldDogXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjA4OjQzLjI2NzIxMzA1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTU1Mzg3NjUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2NWMxNGViNjMzYzczNDg2YmRhNWJlZjgwYTIzZDQzNmZlOGUwNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAwNjowODozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XG5pbmRleCBiN2FjMDY2MGFkYzAxLi5mYWZlMjk3NTQwMWIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuQEAgLTQwLDEzICs0MCwxNyBAQCBUZXN0IGNhc2VzOlxuICAgLSBpcF92NmV4dF9kaWZmOiAoSVB2NikgSVB2NiBleHQgaGVhZGVyIHdpdGggZGlmZmVyZW50IHBheWxvYWQgZG9lc24ndCBjb2FsZXNjZVxuICAgLSBsYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIEdST19NQVhfU0laRSBkb24ndCBjb2FsZXNjZVxuICAgLSBsYXJnZV9yZW06IExhcmdlIHBhY2tldCByZW1haW5kZXIgaGFuZGxpbmdcbisgIC0gYmlnX3RjcF9kYXRhX3NhbWU6IFNhbWUgc2l6ZSBwYWNrZXRzIGNvYWxlc2NlIHBhc3QgSVBfTUFYUEFDS0VUXG4rICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBTbWFsbGVyIGxhc3QgcGFja2V0IGNvYWxlc2NlcyBwYXN0IElQX01BWFBBQ0tFVFxuKyAgLSBiaWdfdGNwX3RjcF9zZXE6IFBhY2tldHMgd2l0aCAxNi1iaXQgdHJ1bmNhdGVkIHNlcW5vIGRvbid0IGNvYWxlc2NlXG4rICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiBQYWNrZXRzIGV4Y2VlZGluZyB0aGUgQklHIFRDUCBsaW1pdCBkb24ndCBjb2FsZXNjZVxuIFwiXCJcIlxuIFxuIGltcG9ydCBnbG9iXG4gaW1wb3J0IG9zXG4gaW1wb3J0IHJlXG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHIsIGtzZnRfZXFcbitmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRTa2lwRXgsIEtzZnRYZmFpbEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldGRldkZhbWlseSwgRXRodG9vbEZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGNtZCwgY3RsX2ZpbGVfd3JpdGUsIGRlZmVyLCBldGh0b29sLCBpcFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3ZhcmlhbnRzLCBLc2Z0TmFtZWRWYXJpYW50XG5AQCAtNTUsNiArNTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxuICMgZ3JvLmMgdXNlcyBoYXJkY29kZWQgRFBPUlQ9ODAwMFxuIEdST19EUE9SVCA9IDgwMDBcbiBcbitCSUdfVENQX0dST19NQVhfU0laRSA9IDEyODAwMFxuK1xuIFxuIGRlZiBfcmVzb2x2ZV9kbWFjKGNmZywgaXB2ZXIpOlxuICAgICBcIlwiXCJcbkBAIC05MSw2ICs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XG4gICAgICAgICBkZWZlcihpcCwgZlwibGluayBzZXQgZGV2IHtkZXZbJ2lmbmFtZSddfSBtdHUge2RldlsnbXR1J119XCIsIGhvc3Q9aG9zdClcbiBcbiBcbitkZWYgX3NldF9ncm9fc2l6ZV9yZXN0b3JlKGNmZywgc2l6ZSk6XG4rICAgIFwiXCJcIlxuKyAgICBTZXQgdGhlIGxvY2FsIGRldmljZSdzIEdSTyBzaXplIGxpbWl0cywgdGhlbiBjb25maXJtIHRoZXkgc3R1Y2suXG4rICAgIFwiXCJcIlxuK1xuKyAgICBfc2V0X210dV9yZXN0b3JlKGNmZy5kZXYsIDQwOTYsIE5vbmUpXG4rICAgIF9zZXRfbXR1X3Jlc3RvcmUoY2ZnLnJlbW90ZV9kZXYsIDQwOTYsIGNmZy5yZW1vdGUpXG4rXG4rICAgIGlmIFwiZ3JvX21heF9zaXplXCIgbm90IGluIGNmZy5kZXYgb3IgXCJncm9faXB2NF9tYXhfc2l6ZVwiIG5vdCBpbiBjZmcuZGV2OlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImlwcm91dGUyIGRvZXMgbm90IHJlcG9ydCB0aGUgR1JPIHNpemUgbGltaXRzXCIpXG4rXG4rICAgIGlmIChjZmcuZGV2W1wiZ3JvX21heF9zaXplXCJdID09IHNpemUgYW5kXG4rICAgICAgICAgICAgY2ZnLmRldltcImdyb19pcHY0X21heF9zaXplXCJdID09IHNpemUpOlxuKyAgICAgICAgcmV0dXJuXG4rXG4rICAgIG9sZCA9IChmXCJncm9fbWF4X3NpemUge2NmZy5kZXZbJ2dyb19tYXhfc2l6ZSddfSBcIlxuKyAgICAgICAgICAgZlwiZ3JvX2lwdjRfbWF4X3NpemUge2NmZy5kZXZbJ2dyb19pcHY0X21heF9zaXplJ119XCIpXG4rICAgIG5ldyA9IGZcImdyb19tYXhfc2l6ZSB7c2l6ZX0gZ3JvX2lwdjRfbWF4X3NpemUge3NpemV9XCJcbitcbisgICAgaXAoZlwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7bmV3fVwiKVxuKyAgICBkZWZlcihpcCwgZlwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVwiKVxuK1xuKyAgICBkZXYgPSBpcChcIi1kIGxpbmsgc2hvdyBkZXYgXCIgKyBjZmcuaWZuYW1lLCBqc29uPVRydWUpWzBdXG4rICAgIGtzZnRfZXEoZGV2W1wiZ3JvX21heF9zaXplXCJdLCBzaXplLCBjb21tZW50PVwiZ3JvX21heF9zaXplIG5vdCBhcHBsaWVkXCIpXG4rICAgIGtzZnRfZXEoZGV2W1wiZ3JvX2lwdjRfbWF4X3NpemVcIl0sIHNpemUsXG4rICAgICAgICAgICAgY29tbWVudD1cImdyb19pcHY0X21heF9zaXplIG5vdCBhcHBsaWVkXCIpXG4rXG4rXG4gZGVmIF9zZXRfZXRodG9vbF9mZWF0KGRldiwgY3VycmVudCwgZmVhdHMsIGhvc3Q9Tm9uZSk6XG4gICAgIHMybiA9IHtUcnVlOiBcIm9uXCIsIEZhbHNlOiBcIm9mZlwifVxuIFxuQEAgLTIzOSw3ICsyNzMsMTEgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4gICAgICAgICBmbHVzaF9wYXRoID0gZlwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L2dyb19mbHVzaF90aW1lb3V0XCJcbiAgICAgICAgIGlycV9wYXRoID0gZlwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzXCJcbiBcbi0gICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFwiMjAwMDAwXCIpXG4rICAgICAgICAjIFwiYmlnX3RjcF8qXCIgdGVzdHMgbmVlZCBhIGxvbmdlciB0aW1lb3V0LCB1c2UgMTV4IHRoZSByZWd1bGFyIHRpbWVvdXRcbisgICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwiYmlnX3RjcF9cIik6XG4rICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXCIzMDAwMDAwXCIpXG4rICAgICAgICBlbHNlOlxuKyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFwiMjAwMDAwXCIpXG4gICAgICAgICBjdGxfZmlsZV93cml0ZShpcnFfcGF0aCwgXCIxMFwiKVxuIFxuICAgICAgICAgX3NldF9ldGh0b29sX2ZlYXQoY2ZnLmlmbmFtZSwgY2ZnLmZlYXQsXG5AQCAtMjg5LDYgKzMyNyw5IEBAIGRlZiBfc2V0dXAoY2ZnLCBtb2RlLCB0ZXN0X25hbWUpOlxuICAgICBleGNlcHQgS3NmdFhmYWlsRXg6XG4gICAgICAgICBwYXNzXG4gXG4rICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwiYmlnX3RjcF9cIik6XG4rICAgICAgICBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBCSUdfVENQX0dST19NQVhfU0laRSlcbitcbiBcbiBkZWYgX2dyb192YXJpYW50cygpOlxuICAgICBcIlwiXCJHZW5lcmF0b3IgdGhhdCB5aWVsZHMgYWxsIGNvbWJpbmF0aW9ucyBvZiBwcm90b2NvbCBhbmQgdGVzdCB0eXBlcy5cIlwiXCJcbkBAIC0zMDQsNiArMzQ1LDExIEBAIGRlZiBfZ3JvX3ZhcmlhbnRzKCk6XG4gICAgICAgICBcImxhcmdlX21heFwiLCBcImxhcmdlX3JlbVwiLFxuICAgICBdXG4gXG4rICAgIGJpZ190Y3BfdGVzdHMgPSBbXG4rICAgICAgICBcImJpZ190Y3BfZGF0YV9zYW1lXCIsIFwiYmlnX3RjcF9kYXRhX2xyZ19zbWxcIixcbisgICAgICAgIFwiYmlnX3RjcF90Y3Bfc2VxXCIsIFwiYmlnX3RjcF9sYXJnZV9tYXhcIixcbisgICAgXVxuK1xuICAgICAjIFRlc3RzIHNwZWNpZmljIHRvIElQdjRcbiAgICAgaXB2NF90ZXN0cyA9IFtcbiAgICAgICAgIFwiaXBfY3N1bVwiLFxuQEAgLTMyMiw2ICszNjgsMTAgQEAgZGVmIF9ncm9fdmFyaWFudHMoKTpcbiAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gY29tbW9uX3Rlc3RzOlxuICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcbiBcbisgICAgICAgIGlmIHByb3RvY29sIGluIFtcImlwdjRcIiwgXCJpcHY2XCJdOlxuKyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gYmlnX3RjcF90ZXN0czpcbisgICAgICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZVxuK1xuICAgICAgICAgaWYgcHJvdG9jb2wgaW4gW1wiaXB2NFwiLCBcImlwaXBcIl06XG4gICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBpcHY0X3Rlc3RzOlxuICAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcbmluZGV4IDdhMzMzMTU1ZGUxYWIuLjcwYjBkZWIzYzExZmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXG5AQCAtNDYsNiArNDYsMTIgQEBcbiAgKiAgIC0gbGFyZ2VfbWF4OiBleGNlZWRpbmcgbWF4IHNpemVcbiAgKiAgIC0gbGFyZ2VfcmVtOiByZW1haW5kZXIgaGFuZGxpbmdcbiAgKlxuKyAqIGJpZ190Y3BfKjpcbisgKiAgIC0gYmlnX3RjcF9kYXRhX3NhbWU6ICAgIGVxdWFsIHNlZ21lbnRzIGNvYWxlc2NpbmcgcGFzdCBJUF9NQVhQQUNLRVRcbisgKiAgIC0gYmlnX3RjcF9kYXRhX2xyZ19zbWw6IGEgc21hbGxlciBmaW5hbCBzZWdtZW50IGNhcnJ5aW5nIGl0IG92ZXJcbisgKiAgIC0gYmlnX3RjcF90Y3Bfc2VxOiAgICAgIDE2LWJpdCB0cnVuY2F0ZWQgc2VxdWVuY2UgbnVtYmVyIG11c3Qgbm90IGNvYWxlc2NlXG4rICogICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiAgICBjb2FsZXNjaW5nIHN0b3BzIGF0IHRoZSBjb25maWd1cmVkIGxpbWl0XG4rICpcbiAgKiBzaW5nbGUsIGNhcGFjaXR5OlxuICAqICBCb3JpbmcgY2FzZXMgdXNlZCB0byB0ZXN0IGNvYWxlc2NpbmcgbWFjaGluZXJ5IGl0c2VsZiBhbmQgc3RhdHNcbiAgKiAgbW9yZSB0aGFuIHByb3RvY29sIGJlaGF2aW9yLlxuQEAgLTExMCw2ICsxMTYsMTYgQEBcbiBcbiAjZGVmaW5lIEVYSVRfT1ZFUl9DT0FMRVNDRVx0NDJcbiBcbisvKiBNdXN0IG1hdGNoIEJJR19UQ1BfR1JPX01BWF9TSVpFIGluIGdyb19saWIucHkuICovXG4rI2RlZmluZSBCSUdfVENQX0dST19NQVhfU0laRVx0MTI4MDAwXG4rXG4rI2RlZmluZSBCSUdfVENQX1JFQ1ZfQlVGX0xFTiBcXFxuK1x0KEJJR19UQ1BfR1JPX01BWF9TSVpFICsgTUFYX01TUyArIEwyX0hMRU5fTUFYKVxuKyNkZWZpbmUgQklHX1RDUF9NSU5fTVNTXHRcdChBU1NVTUVEX01UVSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSlcbisjZGVmaW5lIEJJR19UQ1BfTUFYX0ZJTExfQ05UIFxcXG4rXHQoKGludCkoKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSkgLyBcXFxuK1x0ICAgICAgIEJJR19UQ1BfTUlOX01TUykpXG4rXG4gI2RlZmluZSBpcHY2X29wdGxlbihwKSAgKCgocCktXHUwMDNlaGRybGVuKzEpIFx1MDAzY1x1MDAzYyAzKSAvKiBjYWxjdWxhdGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIGxlbiAqL1xuICNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSlcbiBcbkBAIC0xNjYsNiArMTgyLDI3IEBAIHN0YXRpYyBpbnQgbnVtX2xhcmdlX3BrdCh2b2lkKVxuIFx0cmV0dXJuIG1heF9wYXlsb2FkKCkgLyBjYWxjX21zcygpO1xuIH1cbiBcbisvKiBIb3cgbWFueSBtYXhpbXVtIHNpemVkIHNlZ21lbnRzIGZpdCB1bmRlciB0aGUgY29uZmlndXJlZCBsaW1pdC4gKi9cbitzdGF0aWMgaW50IGJpZ190Y3BfbGFyZ2VfY250KHZvaWQpXG4re1xuK1x0cmV0dXJuIChCSUdfVENQX0dST19NQVhfU0laRSAtIDEgLSAodG90YWxfaGRyX2xlbiAtIEVUSF9ITEVOKSkgL1xuK1x0ICAgICAgIGNhbGNfbXNzKCk7XG4rfVxuK1xuKy8qIEhvdyBtYW55IGNhbGNfbXNzKCkgc2l6ZWQgc2VnbWVudHMgYXJlIG5lZWRlZCB0byBzYXRpc2Z5IHRoZVxuKyAqIGZvbGxvd2luZyBjb25kaXRpb246XG4rICogcGt0X2NvdW50ICogY2FsY19tc3MoKSBcdTAwM2MgSVBfTUFYUEFDS0VUIFx1MDAzYyAocGt0X2NvdW50ICsgMSkgKiBjYWxjX21zcygpXG4rICovXG4rc3RhdGljIGludCBiaWdfdGNwX2ZpbGxfY250KHZvaWQpXG4re1xuK1x0cmV0dXJuIElQX01BWFBBQ0tFVCAvIGNhbGNfbXNzKCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYmlnX3RjcF9maWxsX2xlbih2b2lkKVxuK3tcbitcdHJldHVybiBiaWdfdGNwX2ZpbGxfY250KCkgKiBjYWxjX21zcygpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2bG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHtcbiBcdHZhX2xpc3QgYXJncztcbkBAIC01NjAsNiArNTk3LDYxIEBAIHN0YXRpYyB2b2lkIHNlbmRfZGF0YV9wa3RzKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkcixcbiBcdHdyaXRlX3BhY2tldChmZCwgYnVmLCB0b3RhbF9oZHJfbGVuICsgcGF5bG9hZF9sZW4yLCBkYWRkcik7XG4gfVxuIFxuKy8qIFNlbmQgbnVtX3BrdCBzZWdtZW50cyBvZiBwa3RfbGVuIGJ5dGVzLCB0aGVuIG9uZSBvZiByZW1haW5kZXIgbGVuLiAqL1xuK3N0YXRpYyB2b2lkIHNlbmRfYmlnX3RjcChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsIGludCBwa3RfbGVuLFxuK1x0XHRcdCBpbnQgbnVtX3BrdCwgaW50IHJlbWFpbmRlcilcbit7XG4rXHRzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xuK1x0c3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xuK1x0Y29uc3QgaW50IGZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAobnVtX3BrdCBcdTAwM2UgQklHX1RDUF9NQVhfRklMTF9DTlQpXG4rXHRcdGVycm9yKDEsIDAsIFwibmVlZCAlZCBwYWNrZXRzLCBhcnJheSBob2xkcyAlZFwiLFxuK1x0XHQgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcGt0OyBpKyspXG4rXHRcdGNyZWF0ZV9wYWNrZXQocGt0c1tpXSwgaSAqIHBrdF9sZW4sIDAsIHBrdF9sZW4sIDApO1xuK1x0Y3JlYXRlX3BhY2tldChsYXN0LCBmaWxsZWQsIDAsIHJlbWFpbmRlciwgMCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcGt0OyBpKyspXG4rXHRcdHdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcbitcdHdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiArIHJlbWFpbmRlciwgZGFkZHIpO1xuK31cbitcbisvKiBJbiBCSUcgVENQIGNvbmZpZ3VyYXRpb24sIHRoZSB0b3RhbCBhZ2dyZWdhdGUgbGVuZ3RoIGNhblxuKyAqIGJlIGdyZWF0ZXIgdGhhbiB0aGUgbGVnYWN5IElQX01BWFBBQ0tFVC4gU2luY2UgdGhlIGFnZ3JlZ2F0ZVxuKyAqIGxlbmd0aCBpcyB1c2VkIGluIGNhbGN1bGF0aW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzLFxuKyAqIHNlbmQgYSBwYWNrZXQgd2l0aCBhIHNlcXVlbmNlIG51bWJlciB0aGF0IGRpZmZlcnMgYnkgSVBfTUFYUEFDS0VUICsgMSxcbisgKiB0byB0ZXN0IGFnYWluc3QgdHJ1bmNhdGlvbiBidWdzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHNlbmRfYmlnX3RjcF9iYWRfc2VxKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkcilcbit7XG4rXHRzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xuK1x0Y29uc3QgaW50IG51bV9wa3QgPSBiaWdfdGNwX2ZpbGxfY250KCkgKyAxO1xuK1x0c3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xuK1x0Y29uc3QgaW50IHBrdF9sZW4gPSBjYWxjX21zcygpO1xuK1x0aW50IGJhZF9zZXE7XG4rXHRpbnQgZmlsbGVkO1xuK1x0aW50IGk7XG4rXG4rXHRmaWxsZWQgPSBudW1fcGt0ICogcGt0X2xlbjtcbitcdC8qIExvdyAxNiBiaXRzIG1hdGNoIHdpdGggdGhlIGNvcnJlY3QgaW5jb21pbmcgc2VxdWVuY2UgbnVtYmVyLiAqL1xuK1x0YmFkX3NlcSA9IGZpbGxlZCAtIChJUF9NQVhQQUNLRVQgKyAxKTtcbitcbitcdGlmIChudW1fcGt0IFx1MDAzZSBCSUdfVENQX01BWF9GSUxMX0NOVClcbitcdFx0ZXJyb3IoMSwgMCwgXCJuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkXCIsXG4rXHRcdCAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkrKylcbitcdFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XG4rXHRjcmVhdGVfcGFja2V0KGxhc3QsIGJhZF9zZXEsIDAsIHBrdF9sZW4sIDApO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSsrKVxuK1x0XHR3cml0ZV9wYWNrZXQoZmQsIHBrdHNbaV0sIHRvdGFsX2hkcl9sZW4gKyBwa3RfbGVuLCBkYWRkcik7XG4rXHR3cml0ZV9wYWNrZXQoZmQsIGxhc3QsIHRvdGFsX2hkcl9sZW4gKyBwa3RfbGVuLCBkYWRkcik7XG4rfVxuK1xuIC8qIElmIGluY29taW5nIHNlZ21lbnRzIG1ha2UgdHJhY2tlZCBzZWdtZW50IGxlbmd0aCBleGNlZWRcbiAgKiBsZWdhbCBJUCBkYXRhZ3JhbSBsZW5ndGgsIGRvIG5vdCBjb2FsZXNjZVxuICAqL1xuQEAgLTExNjEsNyArMTI1Myw3IEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJyb3IoaW50IGZkLCBpbnQgcmN2X2Vycm5vKVxuIHN0YXRpYyB2b2lkIGNoZWNrX3JlY3ZfcGt0cyhpbnQgZmQsIGludCAqY29ycmVjdF9wYXlsb2FkLFxuIFx0XHRcdCAgICBpbnQgY29ycmVjdF9udW1fcGt0cylcbiB7XG4tXHRzdGF0aWMgY2hhciBidWZmZXJbSVBfTUFYUEFDS0VUICsgTDJfSExFTl9NQVggKyAxXTtcbitcdHN0YXRpYyBjaGFyIGJ1ZmZlcltCSUdfVENQX1JFQ1ZfQlVGX0xFTl07XG4gXHRpbnQgbmhvZmYgPSBFVEhfSExFTiArIChwcHBvZSA/IFBQUE9FX1NFU19ITEVOIDogMCk7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoYnVmZmVyICsgbmhvZmYpO1xuIFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoYnVmZmVyICsgbmhvZmYpO1xuQEAgLTE1NDEsNiArMTYzMywyNSBAQCBzdGF0aWMgdm9pZCBncm9fc2VuZGVyKHZvaWQpXG4gXHRcdHNlbmRfbGFyZ2UodHhmZCwgXHUwMDI2ZGFkZHIsIHJlbWFpbmRlciArIDEpO1xuIFx0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuIFxuK1x0LyogYmlnIHRjcCBzdWItdGVzdHMgKi9cbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfZGF0YV9zYW1lXCIpID09IDApIHtcbitcdFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2ZpbGxfY250KCksXG4rXHRcdFx0ICAgICBjYWxjX21zcygpKTtcbitcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfZGF0YV9scmdfc21sXCIpID09IDApIHtcbitcdFx0aW50IHJlbWFpbmRlciA9IGNhbGNfbXNzKCkgLyAyO1xuK1xuK1x0XHRzZW5kX2JpZ190Y3AodHhmZCwgXHUwMDI2ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfZmlsbF9jbnQoKSxcbitcdFx0XHQgICAgIHJlbWFpbmRlcik7XG4rXHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4rXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJiaWdfdGNwX3RjcF9zZXFcIikgPT0gMCkge1xuK1x0XHRzZW5kX2JpZ190Y3BfYmFkX3NlcSh0eGZkLCBcdTAwMjZkYWRkcik7XG4rXHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4rXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJiaWdfdGNwX2xhcmdlX21heFwiKSA9PSAwKSB7XG4rXHRcdHNlbmRfYmlnX3RjcCh0eGZkLCBcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9sYXJnZV9jbnQoKSxcbitcdFx0XHQgICAgIGNhbGNfbXNzKCkpO1xuK1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuK1xuIFx0LyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqL1xuIFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwic2luZ2xlXCIpID09IDApIHtcbiBcdFx0c3RhdGljIGNoYXIgYnVmW01BWF9IRFJfTEVOICsgUEFZTE9BRF9MRU5dO1xuQEAgLTE3NjgsNiArMTg3OSwyNiBAQCBzdGF0aWMgdm9pZCBncm9fcmVjZWl2ZXIodm9pZClcbiBcdFx0cHJpbnRmKFwibGFzdCBzZWdtZW50IHNlbnQgaW5kaXZpZHVhbGx5OiBcIik7XG4gXHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDMpO1xuIFxuK1x0LyogYmlnIHRjcCBzdWItdGVzdHMgKi9cbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfZGF0YV9zYW1lXCIpID09IDApIHtcbitcdFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICsgY2FsY19tc3MoKTtcbitcdFx0cHJpbnRmKFwiZGF0YSBwYWNrZXRzIG9mIHNhbWUgc2l6ZSBwYXN0IElQX01BWFBBQ0tFVDogXCIpO1xuK1x0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTtcbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfZGF0YV9scmdfc21sXCIpID09IDApIHtcbitcdFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICsgY2FsY19tc3MoKSAvIDI7XG4rXHRcdHByaW50ZihcInNtYWxsZXIgbGFzdCBwYWNrZXQgcGFzdCBJUF9NQVhQQUNLRVQ6IFwiKTtcbitcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMSk7XG4rXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJiaWdfdGNwX3RjcF9zZXFcIikgPT0gMCkge1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSAoYmlnX3RjcF9maWxsX2NudCgpICsgMSkgKiBjYWxjX21zcygpO1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpO1xuK1x0XHRwcmludGYoXCJhbGlhc2VkIHNlcSBwYXN0IElQX01BWFBBQ0tFVCBkb2Vzbid0IGNvYWxlc2NlOiBcIik7XG4rXHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpO1xuK1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwiYmlnX3RjcF9sYXJnZV9tYXhcIikgPT0gMCkge1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2xhcmdlX2NudCgpICogY2FsY19tc3MoKTtcbitcdFx0Y29ycmVjdF9wYXlsb2FkWzFdID0gY2FsY19tc3MoKTtcbitcdFx0cHJpbnRmKFwic2hvdWxkbid0IGNvYWxlc2NlIHBhc3QgZ3JvX21heF9zaXplOiBcIik7XG4rXHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpO1xuK1xuIFx0LyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqL1xuIFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwic2luZ2xlXCIpID09IDApIHtcbiBcdFx0cHJpbnRmKFwic2luZ2xlIGRhdGEgcGFja2V0OiBcIik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjowODo0My4yNjcyMTQ4MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NTUzODUxODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGRpZmYgYWZmZWN0cyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weWAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCAqb25seSogdGhlc2UgZmlsZXMgYXJlIG1vZGlmaWVkLCBhbmQgSSdkIHR5cGljYWxseSB1c2UgYGdpdCBsb2dgIG9yIGBnaXQgc3RhdHVzYCBmb3IgdGhhdC4gVGhlbiBJIHJlbWVtYmVyIHRoZSBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3IgdGhpcyBzY2VuYXJpbyDigJMgdG8gY2hlY2sgaWYgYW55IGtlcm5lbCBmaWxlcyBhcmUgYWZmZWN0ZWQuIFRoZSBwcm9tcHQgc2hvd3MgdGhlIGZ1bGwgY29tbWl0IGRpZmYsIGNvbmZpcm1pbmcgb25seSB0aG9zZSB0d28gZmlsZXMuIEdvb2QuXG5cblRoZXNlIGZpbGVzIGFyZSBsb2NhdGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLCBjbGVhcmx5IHVzZXItc3BhY2Ugc2VsZi10ZXN0cyBmb3IgbmV0d29yay1yZWxhdGVkIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGZ1bmN0aW9uYWxpdHkuIFRoZXkgKmRvbid0KiBidWlsZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gTm93LCBJIGhhdmUgdG8gYXBwbHkgdGhlIGxvZ2ljIGJhc2VkIG9uIFNlY3Rpb24gMiBvZiB0aGUgZGlyZWN0aW9ucy5cblxuVGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYzogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzLi4uXCIgYW5kIG9uZSBvZiB0aG9zZSBjYXRlZ29yaWVzIGV4cGxpY2l0bHkgaW5jbHVkZXMgXCJVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiIFRoYXQncyBleGFjdGx5IHdoYXQgd2UgaGF2ZSBoZXJlLiBUaGVzZSBzZWxmLXRlc3RzIGZhbGwgc3F1YXJlbHkgaW50byB0aGF0IGNhdGVnb3J5LlxuXG5TbywgYFdvcnRoRnV6emluZ2AgaGFzIHRvIGJlIGBmYWxzZWAuIFRoZXJlJ3Mgbm8ga2VybmVsIGNvZGUgYmVpbmcgbW9kaWZpZWQsIG5vIG5lZWQgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBhbmQgbm8gc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvbi4gQmFzZWQgb24gdGhlIGRvY3VtZW50YXRpb24sIHRoaXMgbWVhbnM6XG5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKGVtcHR5IGxpc3QpXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QpXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCAoc3BlY2lmaWNhbGx5IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5YCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNgKS4gTm8ga2VybmVsLXNwYWNlIGNvZGUsIHZtbGludXgsIG9yIGtlcm5lbCBtb2R1bGVzIGFyZSBtb2RpZmllZC5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuXG5JIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHJlcXVpcmVkIGZvcm1hdCBmb3IgYHNldC1yZXN1bHRzYCwgYW5kIGV2ZXJ5dGhpbmcgc2VlbXMgY29ycmVjdC4gSSdtIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0MywiT3V0cHV0VG9rZW5zIjoxMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjowODo0OC44MjEwNjk1OTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5IGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jKSBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjowODo0OC44MjEwOTE2MTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflownvxnp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 05:19:03 +0000 UTC FinishedAt: 2026-09-12 06:08: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+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODY1YzE0ZWI2MzNjNzM0ODZiZGE1YmVmODBhMjNkNDM2ZmU4ZTA3N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDA2OjA4OjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XG5pbmRleCBiN2FjMDY2MGFkYzAxLi5mYWZlMjk3NTQwMWIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuQEAgLTQwLDEzICYjNDM7NDAsMTcgQEAgVGVzdCBjYXNlczpcbiAgIC0gaXBfdjZleHRfZGlmZjogKElQdjYpIElQdjYgZXh0IGhlYWRlciB3aXRoIGRpZmZlcmVudCBwYXlsb2FkIGRvZXNuJiMzOTt0IGNvYWxlc2NlXG4gICAtIGxhcmdlX21heDogUGFja2V0cyBleGNlZWRpbmcgR1JPX01BWF9TSVpFIGRvbiYjMzk7dCBjb2FsZXNjZVxuICAgLSBsYXJnZV9yZW06IExhcmdlIHBhY2tldCByZW1haW5kZXIgaGFuZGxpbmdcbiYjNDM7ICAtIGJpZ190Y3BfZGF0YV9zYW1lOiBTYW1lIHNpemUgcGFja2V0cyBjb2FsZXNjZSBwYXN0IElQX01BWFBBQ0tFVFxuJiM0MzsgIC0gYmlnX3RjcF9kYXRhX2xyZ19zbWw6IFNtYWxsZXIgbGFzdCBwYWNrZXQgY29hbGVzY2VzIHBhc3QgSVBfTUFYUEFDS0VUXG4mIzQzOyAgLSBiaWdfdGNwX3RjcF9zZXE6IFBhY2tldHMgd2l0aCAxNi1iaXQgdHJ1bmNhdGVkIHNlcW5vIGRvbiYjMzk7dCBjb2FsZXNjZVxuJiM0MzsgIC0gYmlnX3RjcF9sYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIHRoZSBCSUcgVENQIGxpbWl0IGRvbiYjMzk7dCBjb2FsZXNjZVxuIFwmIzM0O1wmIzM0O1wmIzM0O1xuIFxuIGltcG9ydCBnbG9iXG4gaW1wb3J0IG9zXG4gaW1wb3J0IHJlXG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByLCBrc2Z0X2VxXG4mIzQzO2Zyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgS3NmdEZhaWxFeCwgS3NmdFNraXBFeCwgS3NmdFhmYWlsRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0ZGV2RmFtaWx5LCBFdGh0b29sRmFtaWx5XG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgY21kLCBjdGxfZmlsZV93cml0ZSwgZGVmZXIsIGV0aHRvb2wsIGlwXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnRcbkBAIC01NSw2ICYjNDM7NTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxuICMgZ3JvLmMgdXNlcyBoYXJkY29kZWQgRFBPUlQ9ODAwMFxuIEdST19EUE9SVCA9IDgwMDBcbiBcbiYjNDM7QklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDBcbiYjNDM7XG4gXG4gZGVmIF9yZXNvbHZlX2RtYWMoY2ZnLCBpcHZlcik6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuQEAgLTkxLDYgJiM0Mzs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XG4gICAgICAgICBkZWZlcihpcCwgZlwmIzM0O2xpbmsgc2V0IGRldiB7ZGV2WyYjMzk7aWZuYW1lJiMzOTtdfSBtdHUge2RldlsmIzM5O210dSYjMzk7XX1cJiMzNDssIGhvc3Q9aG9zdClcbiBcbiBcbiYjNDM7ZGVmIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIHNpemUpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBTZXQgdGhlIGxvY2FsIGRldmljZSYjMzk7cyBHUk8gc2l6ZSBsaW1pdHMsIHRoZW4gY29uZmlybSB0aGV5IHN0dWNrLlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgX3NldF9tdHVfcmVzdG9yZShjZmcuZGV2LCA0MDk2LCBOb25lKVxuJiM0MzsgICAgX3NldF9tdHVfcmVzdG9yZShjZmcucmVtb3RlX2RldiwgNDA5NiwgY2ZnLnJlbW90ZSlcbiYjNDM7XG4mIzQzOyAgICBpZiBcJiMzNDtncm9fbWF4X3NpemVcJiMzNDsgbm90IGluIGNmZy5kZXYgb3IgXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemVcJiMzNDsgbm90IGluIGNmZy5kZXY6XG4mIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtpcHJvdXRlMiBkb2VzIG5vdCByZXBvcnQgdGhlIEdSTyBzaXplIGxpbWl0c1wmIzM0OylcbiYjNDM7XG4mIzQzOyAgICBpZiAoY2ZnLmRldltcJiMzNDtncm9fbWF4X3NpemVcJiMzNDtdID09IHNpemUgYW5kXG4mIzQzOyAgICAgICAgICAgIGNmZy5kZXZbXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemVcJiMzNDtdID09IHNpemUpOlxuJiM0MzsgICAgICAgIHJldHVyblxuJiM0MztcbiYjNDM7ICAgIG9sZCA9IChmXCYjMzQ7Z3JvX21heF9zaXplIHtjZmcuZGV2WyYjMzk7Z3JvX21heF9zaXplJiMzOTtdfSBcJiMzNDtcbiYjNDM7ICAgICAgICAgICBmXCYjMzQ7Z3JvX2lwdjRfbWF4X3NpemUge2NmZy5kZXZbJiMzOTtncm9faXB2NF9tYXhfc2l6ZSYjMzk7XX1cJiMzNDspXG4mIzQzOyAgICBuZXcgPSBmXCYjMzQ7Z3JvX21heF9zaXplIHtzaXplfSBncm9faXB2NF9tYXhfc2l6ZSB7c2l6ZX1cJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBpcChmXCYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7bmV3fVwmIzM0OylcbiYjNDM7ICAgIGRlZmVyKGlwLCBmXCYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVwmIzM0OylcbiYjNDM7XG4mIzQzOyAgICBkZXYgPSBpcChcJiMzNDstZCBsaW5rIHNob3cgZGV2IFwmIzM0OyAmIzQzOyBjZmcuaWZuYW1lLCBqc29uPVRydWUpWzBdXG4mIzQzOyAgICBrc2Z0X2VxKGRldltcJiMzNDtncm9fbWF4X3NpemVcJiMzNDtdLCBzaXplLCBjb21tZW50PVwmIzM0O2dyb19tYXhfc2l6ZSBub3QgYXBwbGllZFwmIzM0OylcbiYjNDM7ICAgIGtzZnRfZXEoZGV2W1wmIzM0O2dyb19pcHY0X21heF9zaXplXCYjMzQ7XSwgc2l6ZSxcbiYjNDM7ICAgICAgICAgICAgY29tbWVudD1cJiMzNDtncm9faXB2NF9tYXhfc2l6ZSBub3QgYXBwbGllZFwmIzM0OylcbiYjNDM7XG4mIzQzO1xuIGRlZiBfc2V0X2V0aHRvb2xfZmVhdChkZXYsIGN1cnJlbnQsIGZlYXRzLCBob3N0PU5vbmUpOlxuICAgICBzMm4gPSB7VHJ1ZTogXCYjMzQ7b25cJiMzNDssIEZhbHNlOiBcJiMzNDtvZmZcJiMzNDt9XG4gXG5AQCAtMjM5LDcgJiM0MzsyNzMsMTEgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4gICAgICAgICBmbHVzaF9wYXRoID0gZlwmIzM0Oy9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9ncm9fZmx1c2hfdGltZW91dFwmIzM0O1xuICAgICAgICAgaXJxX3BhdGggPSBmXCYjMzQ7L3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzXCYjMzQ7XG4gXG4tICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCBcJiMzNDsyMDAwMDBcJiMzNDspXG4mIzQzOyAgICAgICAgIyBcJiMzNDtiaWdfdGNwXypcJiMzNDsgdGVzdHMgbmVlZCBhIGxvbmdlciB0aW1lb3V0LCB1c2UgMTV4IHRoZSByZWd1bGFyIHRpbWVvdXRcbiYjNDM7ICAgICAgICBpZiB0ZXN0X25hbWUuc3RhcnRzd2l0aChcJiMzNDtiaWdfdGNwX1wmIzM0Oyk6XG4mIzQzOyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFwmIzM0OzMwMDAwMDBcJiMzNDspXG4mIzQzOyAgICAgICAgZWxzZTpcbiYjNDM7ICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXCYjMzQ7MjAwMDAwXCYjMzQ7KVxuICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoaXJxX3BhdGgsIFwmIzM0OzEwXCYjMzQ7KVxuIFxuICAgICAgICAgX3NldF9ldGh0b29sX2ZlYXQoY2ZnLmlmbmFtZSwgY2ZnLmZlYXQsXG5AQCAtMjg5LDYgJiM0MzszMjcsOSBAQCBkZWYgX3NldHVwKGNmZywgbW9kZSwgdGVzdF9uYW1lKTpcbiAgICAgZXhjZXB0IEtzZnRYZmFpbEV4OlxuICAgICAgICAgcGFzc1xuIFxuJiM0MzsgICAgaWYgdGVzdF9uYW1lLnN0YXJ0c3dpdGgoXCYjMzQ7YmlnX3RjcF9cJiMzNDspOlxuJiM0MzsgICAgICAgIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIEJJR19UQ1BfR1JPX01BWF9TSVpFKVxuJiM0MztcbiBcbiBkZWYgX2dyb192YXJpYW50cygpOlxuICAgICBcJiMzNDtcJiMzNDtcJiMzNDtHZW5lcmF0b3IgdGhhdCB5aWVsZHMgYWxsIGNvbWJpbmF0aW9ucyBvZiBwcm90b2NvbCBhbmQgdGVzdCB0eXBlcy5cJiMzNDtcJiMzNDtcJiMzNDtcbkBAIC0zMDQsNiAmIzQzOzM0NSwxMSBAQCBkZWYgX2dyb192YXJpYW50cygpOlxuICAgICAgICAgXCYjMzQ7bGFyZ2VfbWF4XCYjMzQ7LCBcJiMzNDtsYXJnZV9yZW1cJiMzNDssXG4gICAgIF1cbiBcbiYjNDM7ICAgIGJpZ190Y3BfdGVzdHMgPSBbXG4mIzQzOyAgICAgICAgXCYjMzQ7YmlnX3RjcF9kYXRhX3NhbWVcJiMzNDssIFwmIzM0O2JpZ190Y3BfZGF0YV9scmdfc21sXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2JpZ190Y3BfdGNwX3NlcVwmIzM0OywgXCYjMzQ7YmlnX3RjcF9sYXJnZV9tYXhcJiMzNDssXG4mIzQzOyAgICBdXG4mIzQzO1xuICAgICAjIFRlc3RzIHNwZWNpZmljIHRvIElQdjRcbiAgICAgaXB2NF90ZXN0cyA9IFtcbiAgICAgICAgIFwmIzM0O2lwX2NzdW1cJiMzNDssXG5AQCAtMzIyLDYgJiM0MzszNjgsMTAgQEAgZGVmIF9ncm9fdmFyaWFudHMoKTpcbiAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gY29tbW9uX3Rlc3RzOlxuICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcbiBcbiYjNDM7ICAgICAgICBpZiBwcm90b2NvbCBpbiBbXCYjMzQ7aXB2NFwmIzM0OywgXCYjMzQ7aXB2NlwmIzM0O106XG4mIzQzOyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gYmlnX3RjcF90ZXN0czpcbiYjNDM7ICAgICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcbiYjNDM7XG4gICAgICAgICBpZiBwcm90b2NvbCBpbiBbXCYjMzQ7aXB2NFwmIzM0OywgXCYjMzQ7aXBpcFwmIzM0O106XG4gICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBpcHY0X3Rlc3RzOlxuICAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcbmluZGV4IDdhMzMzMTU1ZGUxYWIuLjcwYjBkZWIzYzExZmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXG5AQCAtNDYsNiAmIzQzOzQ2LDEyIEBAXG4gICogICAtIGxhcmdlX21heDogZXhjZWVkaW5nIG1heCBzaXplXG4gICogICAtIGxhcmdlX3JlbTogcmVtYWluZGVyIGhhbmRsaW5nXG4gICpcbiYjNDM7ICogYmlnX3RjcF8qOlxuJiM0MzsgKiAgIC0gYmlnX3RjcF9kYXRhX3NhbWU6ICAgIGVxdWFsIHNlZ21lbnRzIGNvYWxlc2NpbmcgcGFzdCBJUF9NQVhQQUNLRVRcbiYjNDM7ICogICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBhIHNtYWxsZXIgZmluYWwgc2VnbWVudCBjYXJyeWluZyBpdCBvdmVyXG4mIzQzOyAqICAgLSBiaWdfdGNwX3RjcF9zZXE6ICAgICAgMTYtYml0IHRydW5jYXRlZCBzZXF1ZW5jZSBudW1iZXIgbXVzdCBub3QgY29hbGVzY2VcbiYjNDM7ICogICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiAgICBjb2FsZXNjaW5nIHN0b3BzIGF0IHRoZSBjb25maWd1cmVkIGxpbWl0XG4mIzQzOyAqXG4gICogc2luZ2xlLCBjYXBhY2l0eTpcbiAgKiAgQm9yaW5nIGNhc2VzIHVzZWQgdG8gdGVzdCBjb2FsZXNjaW5nIG1hY2hpbmVyeSBpdHNlbGYgYW5kIHN0YXRzXG4gICogIG1vcmUgdGhhbiBwcm90b2NvbCBiZWhhdmlvci5cbkBAIC0xMTAsNiAmIzQzOzExNiwxNiBAQFxuIFxuICNkZWZpbmUgRVhJVF9PVkVSX0NPQUxFU0NFXHQ0MlxuIFxuJiM0MzsvKiBNdXN0IG1hdGNoIEJJR19UQ1BfR1JPX01BWF9TSVpFIGluIGdyb19saWIucHkuICovXG4mIzQzOyNkZWZpbmUgQklHX1RDUF9HUk9fTUFYX1NJWkVcdDEyODAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBCSUdfVENQX1JFQ1ZfQlVGX0xFTiBcXFxuJiM0MztcdChCSUdfVENQX0dST19NQVhfU0laRSAmIzQzOyBNQVhfTVNTICYjNDM7IEwyX0hMRU5fTUFYKVxuJiM0MzsjZGVmaW5lIEJJR19UQ1BfTUlOX01TU1x0XHQoQVNTVU1FRF9NVFUgLSAoTUFYX0hEUl9MRU4gLSBFVEhfSExFTikpXG4mIzQzOyNkZWZpbmUgQklHX1RDUF9NQVhfRklMTF9DTlQgXFxcbiYjNDM7XHQoKGludCkoKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSkgLyBcXFxuJiM0MztcdCAgICAgICBCSUdfVENQX01JTl9NU1MpKVxuJiM0MztcbiAjZGVmaW5lIGlwdjZfb3B0bGVuKHApICAoKChwKS1cdTAwM2VoZHJsZW4mIzQzOzEpIFx1MDAzY1x1MDAzYyAzKSAvKiBjYWxjdWxhdGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIGxlbiAqL1xuICNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSlcbiBcbkBAIC0xNjYsNiAmIzQzOzE4MiwyNyBAQCBzdGF0aWMgaW50IG51bV9sYXJnZV9wa3Qodm9pZClcbiBcdHJldHVybiBtYXhfcGF5bG9hZCgpIC8gY2FsY19tc3MoKTtcbiB9XG4gXG4mIzQzOy8qIEhvdyBtYW55IG1heGltdW0gc2l6ZWQgc2VnbWVudHMgZml0IHVuZGVyIHRoZSBjb25maWd1cmVkIGxpbWl0LiAqL1xuJiM0MztzdGF0aWMgaW50IGJpZ190Y3BfbGFyZ2VfY250KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtICh0b3RhbF9oZHJfbGVuIC0gRVRIX0hMRU4pKSAvXG4mIzQzO1x0ICAgICAgIGNhbGNfbXNzKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEhvdyBtYW55IGNhbGNfbXNzKCkgc2l6ZWQgc2VnbWVudHMgYXJlIG5lZWRlZCB0byBzYXRpc2Z5IHRoZVxuJiM0MzsgKiBmb2xsb3dpbmcgY29uZGl0aW9uOlxuJiM0MzsgKiBwa3RfY291bnQgKiBjYWxjX21zcygpIFx1MDAzYyBJUF9NQVhQQUNLRVQgXHUwMDNjIChwa3RfY291bnQgJiM0MzsgMSkgKiBjYWxjX21zcygpXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGJpZ190Y3BfZmlsbF9jbnQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBJUF9NQVhQQUNLRVQgLyBjYWxjX21zcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJpZ190Y3BfZmlsbF9sZW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiaWdfdGNwX2ZpbGxfY250KCkgKiBjYWxjX21zcygpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHZsb2coY29uc3QgY2hhciAqZm10LCAuLi4pXG4ge1xuIFx0dmFfbGlzdCBhcmdzO1xuQEAgLTU2MCw2ICYjNDM7NTk3LDYxIEBAIHN0YXRpYyB2b2lkIHNlbmRfZGF0YV9wa3RzKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkcixcbiBcdHdyaXRlX3BhY2tldChmZCwgYnVmLCB0b3RhbF9oZHJfbGVuICYjNDM7IHBheWxvYWRfbGVuMiwgZGFkZHIpO1xuIH1cbiBcbiYjNDM7LyogU2VuZCBudW1fcGt0IHNlZ21lbnRzIG9mIHBrdF9sZW4gYnl0ZXMsIHRoZW4gb25lIG9mIHJlbWFpbmRlciBsZW4uICovXG4mIzQzO3N0YXRpYyB2b2lkIHNlbmRfYmlnX3RjcChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsIGludCBwa3RfbGVuLFxuJiM0MztcdFx0XHQgaW50IG51bV9wa3QsIGludCByZW1haW5kZXIpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTtcbiYjNDM7XHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICYjNDM7IE1BWF9NU1NdO1xuJiM0MztcdGNvbnN0IGludCBmaWxsZWQgPSBudW1fcGt0ICogcGt0X2xlbjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bV9wa3QgXHUwMDNlIEJJR19UQ1BfTUFYX0ZJTExfQ05UKVxuJiM0MztcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7bmVlZCAlZCBwYWNrZXRzLCBhcnJheSBob2xkcyAlZFwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRjcmVhdGVfcGFja2V0KHBrdHNbaV0sIGkgKiBwa3RfbGVuLCAwLCBwa3RfbGVuLCAwKTtcbiYjNDM7XHRjcmVhdGVfcGFja2V0KGxhc3QsIGZpbGxlZCwgMCwgcmVtYWluZGVyLCAwKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQoZmQsIHBrdHNbaV0sIHRvdGFsX2hkcl9sZW4gJiM0MzsgcGt0X2xlbiwgZGFkZHIpO1xuJiM0MztcdHdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiAmIzQzOyByZW1haW5kZXIsIGRhZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogSW4gQklHIFRDUCBjb25maWd1cmF0aW9uLCB0aGUgdG90YWwgYWdncmVnYXRlIGxlbmd0aCBjYW5cbiYjNDM7ICogYmUgZ3JlYXRlciB0aGFuIHRoZSBsZWdhY3kgSVBfTUFYUEFDS0VULiBTaW5jZSB0aGUgYWdncmVnYXRlXG4mIzQzOyAqIGxlbmd0aCBpcyB1c2VkIGluIGNhbGN1bGF0aW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzLFxuJiM0MzsgKiBzZW5kIGEgcGFja2V0IHdpdGggYSBzZXF1ZW5jZSBudW1iZXIgdGhhdCBkaWZmZXJzIGJ5IElQX01BWFBBQ0tFVCAmIzQzOyAxLFxuJiM0MzsgKiB0byB0ZXN0IGFnYWluc3QgdHJ1bmNhdGlvbiBidWdzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwX2JhZF9zZXEoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNoYXIgcGt0c1tCSUdfVENQX01BWF9GSUxMX0NOVF1bTUFYX0hEUl9MRU4gJiM0MzsgTUFYX01TU107XG4mIzQzO1x0Y29uc3QgaW50IG51bV9wa3QgPSBiaWdfdGNwX2ZpbGxfY250KCkgJiM0MzsgMTtcbiYjNDM7XHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICYjNDM7IE1BWF9NU1NdO1xuJiM0MztcdGNvbnN0IGludCBwa3RfbGVuID0gY2FsY19tc3MoKTtcbiYjNDM7XHRpbnQgYmFkX3NlcTtcbiYjNDM7XHRpbnQgZmlsbGVkO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmaWxsZWQgPSBudW1fcGt0ICogcGt0X2xlbjtcbiYjNDM7XHQvKiBMb3cgMTYgYml0cyBtYXRjaCB3aXRoIHRoZSBjb3JyZWN0IGluY29taW5nIHNlcXVlbmNlIG51bWJlci4gKi9cbiYjNDM7XHRiYWRfc2VxID0gZmlsbGVkIC0gKElQX01BWFBBQ0tFVCAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bV9wa3QgXHUwMDNlIEJJR19UQ1BfTUFYX0ZJTExfQ05UKVxuJiM0MztcdFx0ZXJyb3IoMSwgMCwgXCYjMzQ7bmVlZCAlZCBwYWNrZXRzLCBhcnJheSBob2xkcyAlZFwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRjcmVhdGVfcGFja2V0KHBrdHNbaV0sIGkgKiBwa3RfbGVuLCAwLCBwa3RfbGVuLCAwKTtcbiYjNDM7XHRjcmVhdGVfcGFja2V0KGxhc3QsIGJhZF9zZXEsIDAsIHBrdF9sZW4sIDApO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcGt0OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiAmIzQzOyBwa3RfbGVuLCBkYWRkcik7XG4mIzQzO1x0d3JpdGVfcGFja2V0KGZkLCBsYXN0LCB0b3RhbF9oZHJfbGVuICYjNDM7IHBrdF9sZW4sIGRhZGRyKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBJZiBpbmNvbWluZyBzZWdtZW50cyBtYWtlIHRyYWNrZWQgc2VnbWVudCBsZW5ndGggZXhjZWVkXG4gICogbGVnYWwgSVAgZGF0YWdyYW0gbGVuZ3RoLCBkbyBub3QgY29hbGVzY2VcbiAgKi9cbkBAIC0xMTYxLDcgJiM0MzsxMjUzLDcgQEAgc3RhdGljIHZvaWQgcmVjdl9lcnJvcihpbnQgZmQsIGludCByY3ZfZXJybm8pXG4gc3RhdGljIHZvaWQgY2hlY2tfcmVjdl9wa3RzKGludCBmZCwgaW50ICpjb3JyZWN0X3BheWxvYWQsXG4gXHRcdFx0ICAgIGludCBjb3JyZWN0X251bV9wa3RzKVxuIHtcbi1cdHN0YXRpYyBjaGFyIGJ1ZmZlcltJUF9NQVhQQUNLRVQgJiM0MzsgTDJfSExFTl9NQVggJiM0MzsgMV07XG4mIzQzO1x0c3RhdGljIGNoYXIgYnVmZmVyW0JJR19UQ1BfUkVDVl9CVUZfTEVOXTtcbiBcdGludCBuaG9mZiA9IEVUSF9ITEVOICYjNDM7IChwcHBvZSA/IFBQUE9FX1NFU19ITEVOIDogMCk7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoYnVmZmVyICYjNDM7IG5ob2ZmKTtcbiBcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKGJ1ZmZlciAmIzQzOyBuaG9mZik7XG5AQCAtMTU0MSw2ICYjNDM7MTYzMywyNSBAQCBzdGF0aWMgdm9pZCBncm9fc2VuZGVyKHZvaWQpXG4gXHRcdHNlbmRfbGFyZ2UodHhmZCwgXHUwMDI2ZGFkZHIsIHJlbWFpbmRlciAmIzQzOyAxKTtcbiBcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbiBcbiYjNDM7XHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX2RhdGFfc2FtZVwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2ZpbGxfY250KCksXG4mIzQzO1x0XHRcdCAgICAgY2FsY19tc3MoKSk7XG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX2RhdGFfbHJnX3NtbFwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0aW50IHJlbWFpbmRlciA9IGNhbGNfbXNzKCkgLyAyO1xuJiM0MztcbiYjNDM7XHRcdHNlbmRfYmlnX3RjcCh0eGZkLCBcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLFxuJiM0MztcdFx0XHQgICAgIHJlbWFpbmRlcik7XG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX3RjcF9zZXFcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdHNlbmRfYmlnX3RjcF9iYWRfc2VxKHR4ZmQsIFx1MDAyNmRhZGRyKTtcbiYjNDM7XHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4mIzQzO1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwmIzM0O2JpZ190Y3BfbGFyZ2VfbWF4XCYjMzQ7KSA9PSAwKSB7XG4mIzQzO1x0XHRzZW5kX2JpZ190Y3AodHhmZCwgXHUwMDI2ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfbGFyZ2VfY250KCksXG4mIzQzO1x0XHRcdCAgICAgY2FsY19tc3MoKSk7XG4mIzQzO1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuJiM0MztcbiBcdC8qIG1hY2hpbmVyeSBzdWItdGVzdHMgKi9cbiBcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtzaW5nbGVcJiMzNDspID09IDApIHtcbiBcdFx0c3RhdGljIGNoYXIgYnVmW01BWF9IRFJfTEVOICYjNDM7IFBBWUxPQURfTEVOXTtcbkBAIC0xNzY4LDYgJiM0MzsxODc5LDI2IEBAIHN0YXRpYyB2b2lkIGdyb19yZWNlaXZlcih2b2lkKVxuIFx0XHRwcmludGYoXCYjMzQ7bGFzdCBzZWdtZW50IHNlbnQgaW5kaXZpZHVhbGx5OiBcJiMzNDspO1xuIFx0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAzKTtcbiBcbiYjNDM7XHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX2RhdGFfc2FtZVwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICYjNDM7IGNhbGNfbXNzKCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7ZGF0YSBwYWNrZXRzIG9mIHNhbWUgc2l6ZSBwYXN0IElQX01BWFBBQ0tFVDogXCYjMzQ7KTtcbiYjNDM7XHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDEpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcJiMzNDtiaWdfdGNwX2RhdGFfbHJnX3NtbFwmIzM0OykgPT0gMCkge1xuJiM0MztcdFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICYjNDM7IGNhbGNfbXNzKCkgLyAyO1xuJiM0MztcdFx0cHJpbnRmKFwmIzM0O3NtYWxsZXIgbGFzdCBwYWNrZXQgcGFzdCBJUF9NQVhQQUNLRVQ6IFwmIzM0Oyk7XG4mIzQzO1x0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF90Y3Bfc2VxXCYjMzQ7KSA9PSAwKSB7XG4mIzQzO1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSAoYmlnX3RjcF9maWxsX2NudCgpICYjNDM7IDEpICogY2FsY19tc3MoKTtcbiYjNDM7XHRcdGNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7YWxpYXNlZCBzZXEgcGFzdCBJUF9NQVhQQUNLRVQgZG9lc24mIzM5O3QgY29hbGVzY2U6IFwmIzM0Oyk7XG4mIzQzO1x0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAyKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCYjMzQ7YmlnX3RjcF9sYXJnZV9tYXhcJiMzNDspID09IDApIHtcbiYjNDM7XHRcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfbGFyZ2VfY250KCkgKiBjYWxjX21zcygpO1xuJiM0MztcdFx0Y29ycmVjdF9wYXlsb2FkWzFdID0gY2FsY19tc3MoKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDtzaG91bGRuJiMzOTt0IGNvYWxlc2NlIHBhc3QgZ3JvX21heF9zaXplOiBcJiMzNDspO1xuJiM0MztcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XG4mIzQzO1xuIFx0LyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqL1xuIFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwmIzM0O3NpbmdsZVwmIzM0OykgPT0gMCkge1xuIFx0XHRwcmludGYoXCYjMzQ7c2luZ2xlIGRhdGEgcGFja2V0OiBcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5IGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jKSBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2NWMxNGViNjMzYzczNDg2YmRhNWJlZjgwYTIzZDQzNmZlOGUwNzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAwNjowODozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5CmluZGV4IGI3YWMwNjYwYWRjMDEuLmZhZmUyOTc1NDAxYjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weQpAQCAtNDAsMTMgJiM0Mzs0MCwxNyBAQCBUZXN0IGNhc2VzOgogICAtIGlwX3Y2ZXh0X2RpZmY6IChJUHY2KSBJUHY2IGV4dCBoZWFkZXIgd2l0aCBkaWZmZXJlbnQgcGF5bG9hZCBkb2VzbiYjMzk7dCBjb2FsZXNjZQogICAtIGxhcmdlX21heDogUGFja2V0cyBleGNlZWRpbmcgR1JPX01BWF9TSVpFIGRvbiYjMzk7dCBjb2FsZXNjZQogICAtIGxhcmdlX3JlbTogTGFyZ2UgcGFja2V0IHJlbWFpbmRlciBoYW5kbGluZwomIzQzOyAgLSBiaWdfdGNwX2RhdGFfc2FtZTogU2FtZSBzaXplIHBhY2tldHMgY29hbGVzY2UgcGFzdCBJUF9NQVhQQUNLRVQKJiM0MzsgIC0gYmlnX3RjcF9kYXRhX2xyZ19zbWw6IFNtYWxsZXIgbGFzdCBwYWNrZXQgY29hbGVzY2VzIHBhc3QgSVBfTUFYUEFDS0VUCiYjNDM7ICAtIGJpZ190Y3BfdGNwX3NlcTogUGFja2V0cyB3aXRoIDE2LWJpdCB0cnVuY2F0ZWQgc2Vxbm8gZG9uJiMzOTt0IGNvYWxlc2NlCiYjNDM7ICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiBQYWNrZXRzIGV4Y2VlZGluZyB0aGUgQklHIFRDUCBsaW1pdCBkb24mIzM5O3QgY29hbGVzY2UKICYjMzQ7JiMzNDsmIzM0OwogCiBpbXBvcnQgZ2xvYgogaW1wb3J0IG9zCiBpbXBvcnQgcmUKLWZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByCi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHIsIGtzZnRfZXEKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRTa2lwRXgsIEtzZnRYZmFpbEV4CiBmcm9tIGxpYi5weSBpbXBvcnQgTmV0ZGV2RmFtaWx5LCBFdGh0b29sRmFtaWx5CiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBjbWQsIGN0bF9maWxlX3dyaXRlLCBkZWZlciwgZXRodG9vbCwgaXAKIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3ZhcmlhbnRzLCBLc2Z0TmFtZWRWYXJpYW50CkBAIC01NSw2ICYjNDM7NTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudAogIyBncm8uYyB1c2VzIGhhcmRjb2RlZCBEUE9SVD04MDAwCiBHUk9fRFBPUlQgPSA4MDAwCiAKJiM0MztCSUdfVENQX0dST19NQVhfU0laRSA9IDEyODAwMAomIzQzOwogCiBkZWYgX3Jlc29sdmVfZG1hYyhjZmcsIGlwdmVyKToKICAgICAmIzM0OyYjMzQ7JiMzNDsKQEAgLTkxLDYgJiM0Mzs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6CiAgICAgICAgIGRlZmVyKGlwLCBmJiMzNDtsaW5rIHNldCBkZXYge2RldlsmIzM5O2lmbmFtZSYjMzk7XX0gbXR1IHtkZXZbJiMzOTttdHUmIzM5O119JiMzNDssIGhvc3Q9aG9zdCkKIAogCiYjNDM7ZGVmIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIHNpemUpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgU2V0IHRoZSBsb2NhbCBkZXZpY2UmIzM5O3MgR1JPIHNpemUgbGltaXRzLCB0aGVuIGNvbmZpcm0gdGhleSBzdHVjay4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIF9zZXRfbXR1X3Jlc3RvcmUoY2ZnLmRldiwgNDA5NiwgTm9uZSkKJiM0MzsgICAgX3NldF9tdHVfcmVzdG9yZShjZmcucmVtb3RlX2RldiwgNDA5NiwgY2ZnLnJlbW90ZSkKJiM0MzsKJiM0MzsgICAgaWYgJiMzNDtncm9fbWF4X3NpemUmIzM0OyBub3QgaW4gY2ZnLmRldiBvciAmIzM0O2dyb19pcHY0X21heF9zaXplJiMzNDsgbm90IGluIGNmZy5kZXY6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7aXByb3V0ZTIgZG9lcyBub3QgcmVwb3J0IHRoZSBHUk8gc2l6ZSBsaW1pdHMmIzM0OykKJiM0MzsKJiM0MzsgICAgaWYgKGNmZy5kZXZbJiMzNDtncm9fbWF4X3NpemUmIzM0O10gPT0gc2l6ZSBhbmQKJiM0MzsgICAgICAgICAgICBjZmcuZGV2WyYjMzQ7Z3JvX2lwdjRfbWF4X3NpemUmIzM0O10gPT0gc2l6ZSk6CiYjNDM7ICAgICAgICByZXR1cm4KJiM0MzsKJiM0MzsgICAgb2xkID0gKGYmIzM0O2dyb19tYXhfc2l6ZSB7Y2ZnLmRldlsmIzM5O2dyb19tYXhfc2l6ZSYjMzk7XX0gJiMzNDsKJiM0MzsgICAgICAgICAgIGYmIzM0O2dyb19pcHY0X21heF9zaXplIHtjZmcuZGV2WyYjMzk7Z3JvX2lwdjRfbWF4X3NpemUmIzM5O119JiMzNDspCiYjNDM7ICAgIG5ldyA9IGYmIzM0O2dyb19tYXhfc2l6ZSB7c2l6ZX0gZ3JvX2lwdjRfbWF4X3NpemUge3NpemV9JiMzNDsKJiM0MzsKJiM0MzsgICAgaXAoZiYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7bmV3fSYjMzQ7KQomIzQzOyAgICBkZWZlcihpcCwgZiYjMzQ7bGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfSYjMzQ7KQomIzQzOwomIzQzOyAgICBkZXYgPSBpcCgmIzM0Oy1kIGxpbmsgc2hvdyBkZXYgJiMzNDsgJiM0MzsgY2ZnLmlmbmFtZSwganNvbj1UcnVlKVswXQomIzQzOyAgICBrc2Z0X2VxKGRldlsmIzM0O2dyb19tYXhfc2l6ZSYjMzQ7XSwgc2l6ZSwgY29tbWVudD0mIzM0O2dyb19tYXhfc2l6ZSBub3QgYXBwbGllZCYjMzQ7KQomIzQzOyAgICBrc2Z0X2VxKGRldlsmIzM0O2dyb19pcHY0X21heF9zaXplJiMzNDtdLCBzaXplLAomIzQzOyAgICAgICAgICAgIGNvbW1lbnQ9JiMzNDtncm9faXB2NF9tYXhfc2l6ZSBub3QgYXBwbGllZCYjMzQ7KQomIzQzOwomIzQzOwogZGVmIF9zZXRfZXRodG9vbF9mZWF0KGRldiwgY3VycmVudCwgZmVhdHMsIGhvc3Q9Tm9uZSk6CiAgICAgczJuID0ge1RydWU6ICYjMzQ7b24mIzM0OywgRmFsc2U6ICYjMzQ7b2ZmJiMzNDt9CiAKQEAgLTIzOSw3ICYjNDM7MjczLDExIEBAIGRlZiBfc2V0dXAoY2ZnLCBtb2RlLCB0ZXN0X25hbWUpOgogICAgICAgICBmbHVzaF9wYXRoID0gZiYjMzQ7L3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L2dyb19mbHVzaF90aW1lb3V0JiMzNDsKICAgICAgICAgaXJxX3BhdGggPSBmJiMzNDsvc3lzL2NsYXNzL25ldC97Y2ZnLmlmbmFtZX0vbmFwaV9kZWZlcl9oYXJkX2lycXMmIzM0OwogCi0gICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsICYjMzQ7MjAwMDAwJiMzNDspCiYjNDM7ICAgICAgICAjICYjMzQ7YmlnX3RjcF8qJiMzNDsgdGVzdHMgbmVlZCBhIGxvbmdlciB0aW1lb3V0LCB1c2UgMTV4IHRoZSByZWd1bGFyIHRpbWVvdXQKJiM0MzsgICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKCYjMzQ7YmlnX3RjcF8mIzM0Oyk6CiYjNDM7ICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgJiMzNDszMDAwMDAwJiMzNDspCiYjNDM7ICAgICAgICBlbHNlOgomIzQzOyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsICYjMzQ7MjAwMDAwJiMzNDspCiAgICAgICAgIGN0bF9maWxlX3dyaXRlKGlycV9wYXRoLCAmIzM0OzEwJiMzNDspCiAKICAgICAgICAgX3NldF9ldGh0b29sX2ZlYXQoY2ZnLmlmbmFtZSwgY2ZnLmZlYXQsCkBAIC0yODksNiAmIzQzOzMyNyw5IEBAIGRlZiBfc2V0dXAoY2ZnLCBtb2RlLCB0ZXN0X25hbWUpOgogICAgIGV4Y2VwdCBLc2Z0WGZhaWxFeDoKICAgICAgICAgcGFzcwogCiYjNDM7ICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKCYjMzQ7YmlnX3RjcF8mIzM0Oyk6CiYjNDM7ICAgICAgICBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBCSUdfVENQX0dST19NQVhfU0laRSkKJiM0MzsKIAogZGVmIF9ncm9fdmFyaWFudHMoKToKICAgICAmIzM0OyYjMzQ7JiMzNDtHZW5lcmF0b3IgdGhhdCB5aWVsZHMgYWxsIGNvbWJpbmF0aW9ucyBvZiBwcm90b2NvbCBhbmQgdGVzdCB0eXBlcy4mIzM0OyYjMzQ7JiMzNDsKQEAgLTMwNCw2ICYjNDM7MzQ1LDExIEBAIGRlZiBfZ3JvX3ZhcmlhbnRzKCk6CiAgICAgICAgICYjMzQ7bGFyZ2VfbWF4JiMzNDssICYjMzQ7bGFyZ2VfcmVtJiMzNDssCiAgICAgXQogCiYjNDM7ICAgIGJpZ190Y3BfdGVzdHMgPSBbCiYjNDM7ICAgICAgICAmIzM0O2JpZ190Y3BfZGF0YV9zYW1lJiMzNDssICYjMzQ7YmlnX3RjcF9kYXRhX2xyZ19zbWwmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7YmlnX3RjcF90Y3Bfc2VxJiMzNDssICYjMzQ7YmlnX3RjcF9sYXJnZV9tYXgmIzM0OywKJiM0MzsgICAgXQomIzQzOwogICAgICMgVGVzdHMgc3BlY2lmaWMgdG8gSVB2NAogICAgIGlwdjRfdGVzdHMgPSBbCiAgICAgICAgICYjMzQ7aXBfY3N1bSYjMzQ7LApAQCAtMzIyLDYgJiM0MzszNjgsMTAgQEAgZGVmIF9ncm9fdmFyaWFudHMoKToKICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBjb21tb25fdGVzdHM6CiAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lCiAKJiM0MzsgICAgICAgIGlmIHByb3RvY29sIGluIFsmIzM0O2lwdjQmIzM0OywgJiMzNDtpcHY2JiMzNDtdOgomIzQzOyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gYmlnX3RjcF90ZXN0czoKJiM0MzsgICAgICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZQomIzQzOwogICAgICAgICBpZiBwcm90b2NvbCBpbiBbJiMzNDtpcHY0JiMzNDssICYjMzQ7aXBpcCYjMzQ7XToKICAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gaXB2NF90ZXN0czoKICAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYwppbmRleCA3YTMzMzE1NWRlMWFiLi43MGIwZGViM2MxMWZhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMKQEAgLTQ2LDYgJiM0Mzs0NiwxMiBAQAogICogICAtIGxhcmdlX21heDogZXhjZWVkaW5nIG1heCBzaXplCiAgKiAgIC0gbGFyZ2VfcmVtOiByZW1haW5kZXIgaGFuZGxpbmcKICAqCiYjNDM7ICogYmlnX3RjcF8qOgomIzQzOyAqICAgLSBiaWdfdGNwX2RhdGFfc2FtZTogICAgZXF1YWwgc2VnbWVudHMgY29hbGVzY2luZyBwYXN0IElQX01BWFBBQ0tFVAomIzQzOyAqICAgLSBiaWdfdGNwX2RhdGFfbHJnX3NtbDogYSBzbWFsbGVyIGZpbmFsIHNlZ21lbnQgY2FycnlpbmcgaXQgb3ZlcgomIzQzOyAqICAgLSBiaWdfdGNwX3RjcF9zZXE6ICAgICAgMTYtYml0IHRydW5jYXRlZCBzZXF1ZW5jZSBudW1iZXIgbXVzdCBub3QgY29hbGVzY2UKJiM0MzsgKiAgIC0gYmlnX3RjcF9sYXJnZV9tYXg6ICAgIGNvYWxlc2Npbmcgc3RvcHMgYXQgdGhlIGNvbmZpZ3VyZWQgbGltaXQKJiM0MzsgKgogICogc2luZ2xlLCBjYXBhY2l0eToKICAqICBCb3JpbmcgY2FzZXMgdXNlZCB0byB0ZXN0IGNvYWxlc2NpbmcgbWFjaGluZXJ5IGl0c2VsZiBhbmQgc3RhdHMKICAqICBtb3JlIHRoYW4gcHJvdG9jb2wgYmVoYXZpb3IuCkBAIC0xMTAsNiAmIzQzOzExNiwxNiBAQAogCiAjZGVmaW5lIEVYSVRfT1ZFUl9DT0FMRVNDRQk0MgogCiYjNDM7LyogTXVzdCBtYXRjaCBCSUdfVENQX0dST19NQVhfU0laRSBpbiBncm9fbGliLnB5LiAqLwomIzQzOyNkZWZpbmUgQklHX1RDUF9HUk9fTUFYX1NJWkUJMTI4MDAwCiYjNDM7CiYjNDM7I2RlZmluZSBCSUdfVENQX1JFQ1ZfQlVGX0xFTiBcCiYjNDM7CShCSUdfVENQX0dST19NQVhfU0laRSAmIzQzOyBNQVhfTVNTICYjNDM7IEwyX0hMRU5fTUFYKQomIzQzOyNkZWZpbmUgQklHX1RDUF9NSU5fTVNTCQkoQVNTVU1FRF9NVFUgLSAoTUFYX0hEUl9MRU4gLSBFVEhfSExFTikpCiYjNDM7I2RlZmluZSBCSUdfVENQX01BWF9GSUxMX0NOVCBcCiYjNDM7CSgoaW50KSgoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKSAvIFwKJiM0MzsJICAgICAgIEJJR19UQ1BfTUlOX01TUykpCiYjNDM7CiAjZGVmaW5lIGlwdjZfb3B0bGVuKHApICAoKChwKS0mZ3Q7aGRybGVuJiM0MzsxKSAmbHQ7Jmx0OyAzKSAvKiBjYWxjdWxhdGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIGxlbiAqLwogI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKQogCkBAIC0xNjYsNiAmIzQzOzE4MiwyNyBAQCBzdGF0aWMgaW50IG51bV9sYXJnZV9wa3Qodm9pZCkKIAlyZXR1cm4gbWF4X3BheWxvYWQoKSAvIGNhbGNfbXNzKCk7CiB9CiAKJiM0MzsvKiBIb3cgbWFueSBtYXhpbXVtIHNpemVkIHNlZ21lbnRzIGZpdCB1bmRlciB0aGUgY29uZmlndXJlZCBsaW1pdC4gKi8KJiM0MztzdGF0aWMgaW50IGJpZ190Y3BfbGFyZ2VfY250KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtICh0b3RhbF9oZHJfbGVuIC0gRVRIX0hMRU4pKSAvCiYjNDM7CSAgICAgICBjYWxjX21zcygpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBIb3cgbWFueSBjYWxjX21zcygpIHNpemVkIHNlZ21lbnRzIGFyZSBuZWVkZWQgdG8gc2F0aXNmeSB0aGUKJiM0MzsgKiBmb2xsb3dpbmcgY29uZGl0aW9uOgomIzQzOyAqIHBrdF9jb3VudCAqIGNhbGNfbXNzKCkgJmx0OyBJUF9NQVhQQUNLRVQgJmx0OyAocGt0X2NvdW50ICYjNDM7IDEpICogY2FsY19tc3MoKQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYmlnX3RjcF9maWxsX2NudCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIElQX01BWFBBQ0tFVCAvIGNhbGNfbXNzKCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYmlnX3RjcF9maWxsX2xlbih2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJpZ190Y3BfZmlsbF9jbnQoKSAqIGNhbGNfbXNzKCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdmxvZyhjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CkBAIC01NjAsNiAmIzQzOzU5Nyw2MSBAQCBzdGF0aWMgdm9pZCBzZW5kX2RhdGFfcGt0cyhpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsCiAJd3JpdGVfcGFja2V0KGZkLCBidWYsIHRvdGFsX2hkcl9sZW4gJiM0MzsgcGF5bG9hZF9sZW4yLCBkYWRkcik7CiB9CiAKJiM0MzsvKiBTZW5kIG51bV9wa3Qgc2VnbWVudHMgb2YgcGt0X2xlbiBieXRlcywgdGhlbiBvbmUgb2YgcmVtYWluZGVyIGxlbi4gKi8KJiM0MztzdGF0aWMgdm9pZCBzZW5kX2JpZ190Y3AoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyLCBpbnQgcGt0X2xlbiwKJiM0MzsJCQkgaW50IG51bV9wa3QsIGludCByZW1haW5kZXIpCiYjNDM7ewomIzQzOwlzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTsKJiM0MzsJc3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiAmIzQzOyBNQVhfTVNTXTsKJiM0MzsJY29uc3QgaW50IGZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKG51bV9wa3QgJmd0OyBCSUdfVENQX01BWF9GSUxMX0NOVCkKJiM0MzsJCWVycm9yKDEsIDAsICYjMzQ7bmVlZCAlZCBwYWNrZXRzLCBhcnJheSBob2xkcyAlZCYjMzQ7LAomIzQzOwkJICAgICAgbnVtX3BrdCwgQklHX1RDUF9NQVhfRklMTF9DTlQpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3BrdDsgaSYjNDM7JiM0MzspCiYjNDM7CQljcmVhdGVfcGFja2V0KHBrdHNbaV0sIGkgKiBwa3RfbGVuLCAwLCBwa3RfbGVuLCAwKTsKJiM0MzsJY3JlYXRlX3BhY2tldChsYXN0LCBmaWxsZWQsIDAsIHJlbWFpbmRlciwgMCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcGt0OyBpJiM0MzsmIzQzOykKJiM0MzsJCXdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiAmIzQzOyBwa3RfbGVuLCBkYWRkcik7CiYjNDM7CXdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiAmIzQzOyByZW1haW5kZXIsIGRhZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogSW4gQklHIFRDUCBjb25maWd1cmF0aW9uLCB0aGUgdG90YWwgYWdncmVnYXRlIGxlbmd0aCBjYW4KJiM0MzsgKiBiZSBncmVhdGVyIHRoYW4gdGhlIGxlZ2FjeSBJUF9NQVhQQUNLRVQuIFNpbmNlIHRoZSBhZ2dyZWdhdGUKJiM0MzsgKiBsZW5ndGggaXMgdXNlZCBpbiBjYWxjdWxhdGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycywKJiM0MzsgKiBzZW5kIGEgcGFja2V0IHdpdGggYSBzZXF1ZW5jZSBudW1iZXIgdGhhdCBkaWZmZXJzIGJ5IElQX01BWFBBQ0tFVCAmIzQzOyAxLAomIzQzOyAqIHRvIHRlc3QgYWdhaW5zdCB0cnVuY2F0aW9uIGJ1Z3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc2VuZF9iaWdfdGNwX2JhZF9zZXEoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyKQomIzQzO3sKJiM0MzsJc3RhdGljIGNoYXIgcGt0c1tCSUdfVENQX01BWF9GSUxMX0NOVF1bTUFYX0hEUl9MRU4gJiM0MzsgTUFYX01TU107CiYjNDM7CWNvbnN0IGludCBudW1fcGt0ID0gYmlnX3RjcF9maWxsX2NudCgpICYjNDM7IDE7CiYjNDM7CXN0YXRpYyBjaGFyIGxhc3RbTUFYX0hEUl9MRU4gJiM0MzsgTUFYX01TU107CiYjNDM7CWNvbnN0IGludCBwa3RfbGVuID0gY2FsY19tc3MoKTsKJiM0MzsJaW50IGJhZF9zZXE7CiYjNDM7CWludCBmaWxsZWQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmaWxsZWQgPSBudW1fcGt0ICogcGt0X2xlbjsKJiM0MzsJLyogTG93IDE2IGJpdHMgbWF0Y2ggd2l0aCB0aGUgY29ycmVjdCBpbmNvbWluZyBzZXF1ZW5jZSBudW1iZXIuICovCiYjNDM7CWJhZF9zZXEgPSBmaWxsZWQgLSAoSVBfTUFYUEFDS0VUICYjNDM7IDEpOwomIzQzOwomIzQzOwlpZiAobnVtX3BrdCAmZ3Q7IEJJR19UQ1BfTUFYX0ZJTExfQ05UKQomIzQzOwkJZXJyb3IoMSwgMCwgJiMzNDtuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkJiMzNDssCiYjNDM7CQkgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fcGt0OyBpJiM0MzsmIzQzOykKJiM0MzsJCWNyZWF0ZV9wYWNrZXQocGt0c1tpXSwgaSAqIHBrdF9sZW4sIDAsIHBrdF9sZW4sIDApOwomIzQzOwljcmVhdGVfcGFja2V0KGxhc3QsIGJhZF9zZXEsIDAsIHBrdF9sZW4sIDApOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3BrdDsgaSYjNDM7JiM0MzspCiYjNDM7CQl3cml0ZV9wYWNrZXQoZmQsIHBrdHNbaV0sIHRvdGFsX2hkcl9sZW4gJiM0MzsgcGt0X2xlbiwgZGFkZHIpOwomIzQzOwl3cml0ZV9wYWNrZXQoZmQsIGxhc3QsIHRvdGFsX2hkcl9sZW4gJiM0MzsgcGt0X2xlbiwgZGFkZHIpOwomIzQzO30KJiM0MzsKIC8qIElmIGluY29taW5nIHNlZ21lbnRzIG1ha2UgdHJhY2tlZCBzZWdtZW50IGxlbmd0aCBleGNlZWQKICAqIGxlZ2FsIElQIGRhdGFncmFtIGxlbmd0aCwgZG8gbm90IGNvYWxlc2NlCiAgKi8KQEAgLTExNjEsNyAmIzQzOzEyNTMsNyBAQCBzdGF0aWMgdm9pZCByZWN2X2Vycm9yKGludCBmZCwgaW50IHJjdl9lcnJubykKIHN0YXRpYyB2b2lkIGNoZWNrX3JlY3ZfcGt0cyhpbnQgZmQsIGludCAqY29ycmVjdF9wYXlsb2FkLAogCQkJICAgIGludCBjb3JyZWN0X251bV9wa3RzKQogewotCXN0YXRpYyBjaGFyIGJ1ZmZlcltJUF9NQVhQQUNLRVQgJiM0MzsgTDJfSExFTl9NQVggJiM0MzsgMV07CiYjNDM7CXN0YXRpYyBjaGFyIGJ1ZmZlcltCSUdfVENQX1JFQ1ZfQlVGX0xFTl07CiAJaW50IG5ob2ZmID0gRVRIX0hMRU4gJiM0MzsgKHBwcG9lID8gUFBQT0VfU0VTX0hMRU4gOiAwKTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoYnVmZmVyICYjNDM7IG5ob2ZmKTsKIAlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShidWZmZXIgJiM0MzsgbmhvZmYpOwpAQCAtMTU0MSw2ICYjNDM7MTYzMywyNSBAQCBzdGF0aWMgdm9pZCBncm9fc2VuZGVyKHZvaWQpCiAJCXNlbmRfbGFyZ2UodHhmZCwgJmFtcDtkYWRkciwgcmVtYWluZGVyICYjNDM7IDEpOwogCQl3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgJmFtcDtkYWRkcik7CiAKJiM0MzsJLyogYmlnIHRjcCBzdWItdGVzdHMgKi8KJiM0MzsJfSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICYjMzQ7YmlnX3RjcF9kYXRhX3NhbWUmIzM0OykgPT0gMCkgewomIzQzOwkJc2VuZF9iaWdfdGNwKHR4ZmQsICZhbXA7ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfZmlsbF9jbnQoKSwKJiM0MzsJCQkgICAgIGNhbGNfbXNzKCkpOwomIzQzOwkJd3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sICZhbXA7ZGFkZHIpOwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX2RhdGFfbHJnX3NtbCYjMzQ7KSA9PSAwKSB7CiYjNDM7CQlpbnQgcmVtYWluZGVyID0gY2FsY19tc3MoKSAvIDI7CiYjNDM7CiYjNDM7CQlzZW5kX2JpZ190Y3AodHhmZCwgJmFtcDtkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9maWxsX2NudCgpLAomIzQzOwkJCSAgICAgcmVtYWluZGVyKTsKJiM0MzsJCXdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCAmYW1wO2RhZGRyKTsKJiM0MzsJfSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICYjMzQ7YmlnX3RjcF90Y3Bfc2VxJiMzNDspID09IDApIHsKJiM0MzsJCXNlbmRfYmlnX3RjcF9iYWRfc2VxKHR4ZmQsICZhbXA7ZGFkZHIpOwomIzQzOwkJd3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sICZhbXA7ZGFkZHIpOwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX2xhcmdlX21heCYjMzQ7KSA9PSAwKSB7CiYjNDM7CQlzZW5kX2JpZ190Y3AodHhmZCwgJmFtcDtkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9sYXJnZV9jbnQoKSwKJiM0MzsJCQkgICAgIGNhbGNfbXNzKCkpOwomIzQzOwkJd3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sICZhbXA7ZGFkZHIpOwomIzQzOwogCS8qIG1hY2hpbmVyeSBzdWItdGVzdHMgKi8KIAl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtzaW5nbGUmIzM0OykgPT0gMCkgewogCQlzdGF0aWMgY2hhciBidWZbTUFYX0hEUl9MRU4gJiM0MzsgUEFZTE9BRF9MRU5dOwpAQCAtMTc2OCw2ICYjNDM7MTg3OSwyNiBAQCBzdGF0aWMgdm9pZCBncm9fcmVjZWl2ZXIodm9pZCkKIAkJcHJpbnRmKCYjMzQ7bGFzdCBzZWdtZW50IHNlbnQgaW5kaXZpZHVhbGx5OiAmIzM0Oyk7CiAJCWNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDMpOwogCiYjNDM7CS8qIGJpZyB0Y3Agc3ViLXRlc3RzICovCiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfZGF0YV9zYW1lJiMzNDspID09IDApIHsKJiM0MzsJCWNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfZmlsbF9sZW4oKSAmIzQzOyBjYWxjX21zcygpOwomIzQzOwkJcHJpbnRmKCYjMzQ7ZGF0YSBwYWNrZXRzIG9mIHNhbWUgc2l6ZSBwYXN0IElQX01BWFBBQ0tFVDogJiMzNDspOwomIzQzOwkJY2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMSk7CiYjNDM7CX0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAmIzM0O2JpZ190Y3BfZGF0YV9scmdfc21sJiMzNDspID09IDApIHsKJiM0MzsJCWNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfZmlsbF9sZW4oKSAmIzQzOyBjYWxjX21zcygpIC8gMjsKJiM0MzsJCXByaW50ZigmIzM0O3NtYWxsZXIgbGFzdCBwYWNrZXQgcGFzdCBJUF9NQVhQQUNLRVQ6ICYjMzQ7KTsKJiM0MzsJCWNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDEpOwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX3RjcF9zZXEmIzM0OykgPT0gMCkgewomIzQzOwkJY29ycmVjdF9wYXlsb2FkWzBdID0gKGJpZ190Y3BfZmlsbF9jbnQoKSAmIzQzOyAxKSAqIGNhbGNfbXNzKCk7CiYjNDM7CQljb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpOwomIzQzOwkJcHJpbnRmKCYjMzQ7YWxpYXNlZCBzZXEgcGFzdCBJUF9NQVhQQUNLRVQgZG9lc24mIzM5O3QgY29hbGVzY2U6ICYjMzQ7KTsKJiM0MzsJCWNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpOwomIzQzOwl9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgJiMzNDtiaWdfdGNwX2xhcmdlX21heCYjMzQ7KSA9PSAwKSB7CiYjNDM7CQljb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2xhcmdlX2NudCgpICogY2FsY19tc3MoKTsKJiM0MzsJCWNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7CiYjNDM7CQlwcmludGYoJiMzNDtzaG91bGRuJiMzOTt0IGNvYWxlc2NlIHBhc3QgZ3JvX21heF9zaXplOiAmIzM0Oyk7CiYjNDM7CQljaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAyKTsKJiM0MzsKIAkvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovCiAJfSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsICYjMzQ7c2luZ2xlJiMzNDspID09IDApIHsKIAkJcHJpbnRmKCYjMzQ7c2luZ2xlIGRhdGEgcGFja2V0OiAmIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNDMKCQkJCQkJCW91dHB1dDogMTAyCgkJCQkJCQl0aG91Z2h0czogODg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZGlmZiBhZmZlY3RzIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5YCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGF0ICpvbmx5KiB0aGVzZSBmaWxlcyBhcmUgbW9kaWZpZWQsIGFuZCBJJiMzOTtkIHR5cGljYWxseSB1c2UgYGdpdCBsb2dgIG9yIGBnaXQgc3RhdHVzYCBmb3IgdGhhdC4gVGhlbiBJIHJlbWVtYmVyIHRoZSBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3IgdGhpcyBzY2VuYXJpbyDigJMgdG8gY2hlY2sgaWYgYW55IGtlcm5lbCBmaWxlcyBhcmUgYWZmZWN0ZWQuIFRoZSBwcm9tcHQgc2hvd3MgdGhlIGZ1bGwgY29tbWl0IGRpZmYsIGNvbmZpcm1pbmcgb25seSB0aG9zZSB0d28gZmlsZXMuIEdvb2QuCgpUaGVzZSBmaWxlcyBhcmUgbG9jYXRlZCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCwgY2xlYXJseSB1c2VyLXNwYWNlIHNlbGYtdGVzdHMgZm9yIG5ldHdvcmstcmVsYXRlZCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBmdW5jdGlvbmFsaXR5LiBUaGV5ICpkb24mIzM5O3QqIGJ1aWxkIGludG8gdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBOb3csIEkgaGF2ZSB0byBhcHBseSB0aGUgbG9naWMgYmFzZWQgb24gU2VjdGlvbiAyIG9mIHRoZSBkaXJlY3Rpb25zLgoKVGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYzogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzLi4uJiMzNDsgYW5kIG9uZSBvZiB0aG9zZSBjYXRlZ29yaWVzIGV4cGxpY2l0bHkgaW5jbHVkZXMgJiMzNDtVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7IFRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IHdlIGhhdmUgaGVyZS4gVGhlc2Ugc2VsZi10ZXN0cyBmYWxsIHNxdWFyZWx5IGludG8gdGhhdCBjYXRlZ29yeS4KClNvLCBgV29ydGhGdXp6aW5nYCBoYXMgdG8gYmUgYGZhbHNlYC4gVGhlcmUmIzM5O3Mgbm8ga2VybmVsIGNvZGUgYmVpbmcgbW9kaWZpZWQsIG5vIG5lZWQgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBhbmQgbm8gc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvbi4gQmFzZWQgb24gdGhlIGRvY3VtZW50YXRpb24sIHRoaXMgbWVhbnM6CgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBsaXN0KQoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QpCiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgc2VsZnRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIChzcGVjaWZpY2FsbHkgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHlgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY2ApLiBObyBrZXJuZWwtc3BhY2UgY29kZSwgdm1saW51eCwgb3Iga2VybmVsIG1vZHVsZXMgYXJlIG1vZGlmaWVkLgoqICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKCkkgbmVlZCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcmVxdWlyZWQgZm9ybWF0IGZvciBgc2V0LXJlc3VsdHNgLCBhbmQgZXZlcnl0aGluZyBzZWVtcyBjb3JyZWN0LiBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5IGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jKSBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA2OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjowODo0MS43MzUwODk4MjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDg2MDMyNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjowODo0MS43MzUwOTQzOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzE0NTYxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NjVjMTRlYjYzM2M3MzQ4NmJkYTViZWY4MGEyM2Q0MzZmZThlMDc3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDA2OjA4OjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XFxuaW5kZXggYjdhYzA2NjBhZGMwMS4uZmFmZTI5NzU0MDFiMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxcbkBAIC00MCwxMyArNDAsMTcgQEAgVGVzdCBjYXNlczpcXG4gICAtIGlwX3Y2ZXh0X2RpZmY6IChJUHY2KSBJUHY2IGV4dCBoZWFkZXIgd2l0aCBkaWZmZXJlbnQgcGF5bG9hZCBkb2Vzbid0IGNvYWxlc2NlXFxuICAgLSBsYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIEdST19NQVhfU0laRSBkb24ndCBjb2FsZXNjZVxcbiAgIC0gbGFyZ2VfcmVtOiBMYXJnZSBwYWNrZXQgcmVtYWluZGVyIGhhbmRsaW5nXFxuKyAgLSBiaWdfdGNwX2RhdGFfc2FtZTogU2FtZSBzaXplIHBhY2tldHMgY29hbGVzY2UgcGFzdCBJUF9NQVhQQUNLRVRcXG4rICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBTbWFsbGVyIGxhc3QgcGFja2V0IGNvYWxlc2NlcyBwYXN0IElQX01BWFBBQ0tFVFxcbisgIC0gYmlnX3RjcF90Y3Bfc2VxOiBQYWNrZXRzIHdpdGggMTYtYml0IHRydW5jYXRlZCBzZXFubyBkb24ndCBjb2FsZXNjZVxcbisgIC0gYmlnX3RjcF9sYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIHRoZSBCSUcgVENQIGxpbWl0IGRvbid0IGNvYWxlc2NlXFxuIFxcXCJcXFwiXFxcIlxcbiBcXG4gaW1wb3J0IGdsb2JcXG4gaW1wb3J0IG9zXFxuIGltcG9ydCByZVxcbi1mcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF9wclxcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3ByLCBrc2Z0X2VxXFxuK2Zyb20gbGliLnB5IGltcG9ydCBOZXREcnZFcEVudiwgS3NmdEZhaWxFeCwgS3NmdFNraXBFeCwgS3NmdFhmYWlsRXhcXG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldGRldkZhbWlseSwgRXRodG9vbEZhbWlseVxcbiBmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBjbWQsIGN0bF9maWxlX3dyaXRlLCBkZWZlciwgZXRodG9vbCwgaXBcXG4gZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfdmFyaWFudHMsIEtzZnROYW1lZFZhcmlhbnRcXG5AQCAtNTUsNiArNTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxcbiAjIGdyby5jIHVzZXMgaGFyZGNvZGVkIERQT1JUPTgwMDBcXG4gR1JPX0RQT1JUID0gODAwMFxcbiBcXG4rQklHX1RDUF9HUk9fTUFYX1NJWkUgPSAxMjgwMDBcXG4rXFxuIFxcbiBkZWYgX3Jlc29sdmVfZG1hYyhjZmcsIGlwdmVyKTpcXG4gICAgIFxcXCJcXFwiXFxcIlxcbkBAIC05MSw2ICs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XFxuICAgICAgICAgZGVmZXIoaXAsIGZcXFwibGluayBzZXQgZGV2IHtkZXZbJ2lmbmFtZSddfSBtdHUge2RldlsnbXR1J119XFxcIiwgaG9zdD1ob3N0KVxcbiBcXG4gXFxuK2RlZiBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBzaXplKTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgU2V0IHRoZSBsb2NhbCBkZXZpY2UncyBHUk8gc2l6ZSBsaW1pdHMsIHRoZW4gY29uZmlybSB0aGV5IHN0dWNrLlxcbisgICAgXFxcIlxcXCJcXFwiXFxuK1xcbisgICAgX3NldF9tdHVfcmVzdG9yZShjZmcuZGV2LCA0MDk2LCBOb25lKVxcbisgICAgX3NldF9tdHVfcmVzdG9yZShjZmcucmVtb3RlX2RldiwgNDA5NiwgY2ZnLnJlbW90ZSlcXG4rXFxuKyAgICBpZiBcXFwiZ3JvX21heF9zaXplXFxcIiBub3QgaW4gY2ZnLmRldiBvciBcXFwiZ3JvX2lwdjRfbWF4X3NpemVcXFwiIG5vdCBpbiBjZmcuZGV2OlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImlwcm91dGUyIGRvZXMgbm90IHJlcG9ydCB0aGUgR1JPIHNpemUgbGltaXRzXFxcIilcXG4rXFxuKyAgICBpZiAoY2ZnLmRldltcXFwiZ3JvX21heF9zaXplXFxcIl0gPT0gc2l6ZSBhbmRcXG4rICAgICAgICAgICAgY2ZnLmRldltcXFwiZ3JvX2lwdjRfbWF4X3NpemVcXFwiXSA9PSBzaXplKTpcXG4rICAgICAgICByZXR1cm5cXG4rXFxuKyAgICBvbGQgPSAoZlxcXCJncm9fbWF4X3NpemUge2NmZy5kZXZbJ2dyb19tYXhfc2l6ZSddfSBcXFwiXFxuKyAgICAgICAgICAgZlxcXCJncm9faXB2NF9tYXhfc2l6ZSB7Y2ZnLmRldlsnZ3JvX2lwdjRfbWF4X3NpemUnXX1cXFwiKVxcbisgICAgbmV3ID0gZlxcXCJncm9fbWF4X3NpemUge3NpemV9IGdyb19pcHY0X21heF9zaXplIHtzaXplfVxcXCJcXG4rXFxuKyAgICBpcChmXFxcImxpbmsgc2V0IGRldiB7Y2ZnLmlmbmFtZX0ge25ld31cXFwiKVxcbisgICAgZGVmZXIoaXAsIGZcXFwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVxcXCIpXFxuK1xcbisgICAgZGV2ID0gaXAoXFxcIi1kIGxpbmsgc2hvdyBkZXYgXFxcIiArIGNmZy5pZm5hbWUsIGpzb249VHJ1ZSlbMF1cXG4rICAgIGtzZnRfZXEoZGV2W1xcXCJncm9fbWF4X3NpemVcXFwiXSwgc2l6ZSwgY29tbWVudD1cXFwiZ3JvX21heF9zaXplIG5vdCBhcHBsaWVkXFxcIilcXG4rICAgIGtzZnRfZXEoZGV2W1xcXCJncm9faXB2NF9tYXhfc2l6ZVxcXCJdLCBzaXplLFxcbisgICAgICAgICAgICBjb21tZW50PVxcXCJncm9faXB2NF9tYXhfc2l6ZSBub3QgYXBwbGllZFxcXCIpXFxuK1xcbitcXG4gZGVmIF9zZXRfZXRodG9vbF9mZWF0KGRldiwgY3VycmVudCwgZmVhdHMsIGhvc3Q9Tm9uZSk6XFxuICAgICBzMm4gPSB7VHJ1ZTogXFxcIm9uXFxcIiwgRmFsc2U6IFxcXCJvZmZcXFwifVxcbiBcXG5AQCAtMjM5LDcgKzI3MywxMSBAQCBkZWYgX3NldHVwKGNmZywgbW9kZSwgdGVzdF9uYW1lKTpcXG4gICAgICAgICBmbHVzaF9wYXRoID0gZlxcXCIvc3lzL2NsYXNzL25ldC97Y2ZnLmlmbmFtZX0vZ3JvX2ZsdXNoX3RpbWVvdXRcXFwiXFxuICAgICAgICAgaXJxX3BhdGggPSBmXFxcIi9zeXMvY2xhc3MvbmV0L3tjZmcuaWZuYW1lfS9uYXBpX2RlZmVyX2hhcmRfaXJxc1xcXCJcXG4gXFxuLSAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXFxcIjIwMDAwMFxcXCIpXFxuKyAgICAgICAgIyBcXFwiYmlnX3RjcF8qXFxcIiB0ZXN0cyBuZWVkIGEgbG9uZ2VyIHRpbWVvdXQsIHVzZSAxNXggdGhlIHJlZ3VsYXIgdGltZW91dFxcbisgICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFxcXCJiaWdfdGNwX1xcXCIpOlxcbisgICAgICAgICAgICBjdGxfZmlsZV93cml0ZShmbHVzaF9wYXRoLCBcXFwiMzAwMDAwMFxcXCIpXFxuKyAgICAgICAgZWxzZTpcXG4rICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXFxcIjIwMDAwMFxcXCIpXFxuICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoaXJxX3BhdGgsIFxcXCIxMFxcXCIpXFxuIFxcbiAgICAgICAgIF9zZXRfZXRodG9vbF9mZWF0KGNmZy5pZm5hbWUsIGNmZy5mZWF0LFxcbkBAIC0yODksNiArMzI3LDkgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XFxuICAgICBleGNlcHQgS3NmdFhmYWlsRXg6XFxuICAgICAgICAgcGFzc1xcbiBcXG4rICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFxcXCJiaWdfdGNwX1xcXCIpOlxcbisgICAgICAgIF9zZXRfZ3JvX3NpemVfcmVzdG9yZShjZmcsIEJJR19UQ1BfR1JPX01BWF9TSVpFKVxcbitcXG4gXFxuIGRlZiBfZ3JvX3ZhcmlhbnRzKCk6XFxuICAgICBcXFwiXFxcIlxcXCJHZW5lcmF0b3IgdGhhdCB5aWVsZHMgYWxsIGNvbWJpbmF0aW9ucyBvZiBwcm90b2NvbCBhbmQgdGVzdCB0eXBlcy5cXFwiXFxcIlxcXCJcXG5AQCAtMzA0LDYgKzM0NSwxMSBAQCBkZWYgX2dyb192YXJpYW50cygpOlxcbiAgICAgICAgIFxcXCJsYXJnZV9tYXhcXFwiLCBcXFwibGFyZ2VfcmVtXFxcIixcXG4gICAgIF1cXG4gXFxuKyAgICBiaWdfdGNwX3Rlc3RzID0gW1xcbisgICAgICAgIFxcXCJiaWdfdGNwX2RhdGFfc2FtZVxcXCIsIFxcXCJiaWdfdGNwX2RhdGFfbHJnX3NtbFxcXCIsXFxuKyAgICAgICAgXFxcImJpZ190Y3BfdGNwX3NlcVxcXCIsIFxcXCJiaWdfdGNwX2xhcmdlX21heFxcXCIsXFxuKyAgICBdXFxuK1xcbiAgICAgIyBUZXN0cyBzcGVjaWZpYyB0byBJUHY0XFxuICAgICBpcHY0X3Rlc3RzID0gW1xcbiAgICAgICAgIFxcXCJpcF9jc3VtXFxcIixcXG5AQCAtMzIyLDYgKzM2OCwxMCBAQCBkZWYgX2dyb192YXJpYW50cygpOlxcbiAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gY29tbW9uX3Rlc3RzOlxcbiAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXFxuIFxcbisgICAgICAgIGlmIHByb3RvY29sIGluIFtcXFwiaXB2NFxcXCIsIFxcXCJpcHY2XFxcIl06XFxuKyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gYmlnX3RjcF90ZXN0czpcXG4rICAgICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcXG4rXFxuICAgICAgICAgaWYgcHJvdG9jb2wgaW4gW1xcXCJpcHY0XFxcIiwgXFxcImlwaXBcXFwiXTpcXG4gICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBpcHY0X3Rlc3RzOlxcbiAgICAgICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY1xcbmluZGV4IDdhMzMzMTU1ZGUxYWIuLjcwYjBkZWIzYzExZmEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcXG5AQCAtNDYsNiArNDYsMTIgQEBcXG4gICogICAtIGxhcmdlX21heDogZXhjZWVkaW5nIG1heCBzaXplXFxuICAqICAgLSBsYXJnZV9yZW06IHJlbWFpbmRlciBoYW5kbGluZ1xcbiAgKlxcbisgKiBiaWdfdGNwXyo6XFxuKyAqICAgLSBiaWdfdGNwX2RhdGFfc2FtZTogICAgZXF1YWwgc2VnbWVudHMgY29hbGVzY2luZyBwYXN0IElQX01BWFBBQ0tFVFxcbisgKiAgIC0gYmlnX3RjcF9kYXRhX2xyZ19zbWw6IGEgc21hbGxlciBmaW5hbCBzZWdtZW50IGNhcnJ5aW5nIGl0IG92ZXJcXG4rICogICAtIGJpZ190Y3BfdGNwX3NlcTogICAgICAxNi1iaXQgdHJ1bmNhdGVkIHNlcXVlbmNlIG51bWJlciBtdXN0IG5vdCBjb2FsZXNjZVxcbisgKiAgIC0gYmlnX3RjcF9sYXJnZV9tYXg6ICAgIGNvYWxlc2Npbmcgc3RvcHMgYXQgdGhlIGNvbmZpZ3VyZWQgbGltaXRcXG4rICpcXG4gICogc2luZ2xlLCBjYXBhY2l0eTpcXG4gICogIEJvcmluZyBjYXNlcyB1c2VkIHRvIHRlc3QgY29hbGVzY2luZyBtYWNoaW5lcnkgaXRzZWxmIGFuZCBzdGF0c1xcbiAgKiAgbW9yZSB0aGFuIHByb3RvY29sIGJlaGF2aW9yLlxcbkBAIC0xMTAsNiArMTE2LDE2IEBAXFxuIFxcbiAjZGVmaW5lIEVYSVRfT1ZFUl9DT0FMRVNDRVxcdDQyXFxuIFxcbisvKiBNdXN0IG1hdGNoIEJJR19UQ1BfR1JPX01BWF9TSVpFIGluIGdyb19saWIucHkuICovXFxuKyNkZWZpbmUgQklHX1RDUF9HUk9fTUFYX1NJWkVcXHQxMjgwMDBcXG4rXFxuKyNkZWZpbmUgQklHX1RDUF9SRUNWX0JVRl9MRU4gXFxcXFxcbitcXHQoQklHX1RDUF9HUk9fTUFYX1NJWkUgKyBNQVhfTVNTICsgTDJfSExFTl9NQVgpXFxuKyNkZWZpbmUgQklHX1RDUF9NSU5fTVNTXFx0XFx0KEFTU1VNRURfTVRVIC0gKE1BWF9IRFJfTEVOIC0gRVRIX0hMRU4pKVxcbisjZGVmaW5lIEJJR19UQ1BfTUFYX0ZJTExfQ05UIFxcXFxcXG4rXFx0KChpbnQpKChCSUdfVENQX0dST19NQVhfU0laRSAtIDEgLSAoTUFYX0hEUl9MRU4gLSBFVEhfSExFTikpIC8gXFxcXFxcbitcXHQgICAgICAgQklHX1RDUF9NSU5fTVNTKSlcXG4rXFxuICNkZWZpbmUgaXB2Nl9vcHRsZW4ocCkgICgoKHApLVxcdTAwM2VoZHJsZW4rMSkgXFx1MDAzY1xcdTAwM2MgMykgLyogY2FsY3VsYXRlIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBsZW4gKi9cXG4gI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKVxcbiBcXG5AQCAtMTY2LDYgKzE4MiwyNyBAQCBzdGF0aWMgaW50IG51bV9sYXJnZV9wa3Qodm9pZClcXG4gXFx0cmV0dXJuIG1heF9wYXlsb2FkKCkgLyBjYWxjX21zcygpO1xcbiB9XFxuIFxcbisvKiBIb3cgbWFueSBtYXhpbXVtIHNpemVkIHNlZ21lbnRzIGZpdCB1bmRlciB0aGUgY29uZmlndXJlZCBsaW1pdC4gKi9cXG4rc3RhdGljIGludCBiaWdfdGNwX2xhcmdlX2NudCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiAoQklHX1RDUF9HUk9fTUFYX1NJWkUgLSAxIC0gKHRvdGFsX2hkcl9sZW4gLSBFVEhfSExFTikpIC9cXG4rXFx0ICAgICAgIGNhbGNfbXNzKCk7XFxuK31cXG4rXFxuKy8qIEhvdyBtYW55IGNhbGNfbXNzKCkgc2l6ZWQgc2VnbWVudHMgYXJlIG5lZWRlZCB0byBzYXRpc2Z5IHRoZVxcbisgKiBmb2xsb3dpbmcgY29uZGl0aW9uOlxcbisgKiBwa3RfY291bnQgKiBjYWxjX21zcygpIFxcdTAwM2MgSVBfTUFYUEFDS0VUIFxcdTAwM2MgKHBrdF9jb3VudCArIDEpICogY2FsY19tc3MoKVxcbisgKi9cXG4rc3RhdGljIGludCBiaWdfdGNwX2ZpbGxfY250KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIElQX01BWFBBQ0tFVCAvIGNhbGNfbXNzKCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYmlnX3RjcF9maWxsX2xlbih2b2lkKVxcbit7XFxuK1xcdHJldHVybiBiaWdfdGNwX2ZpbGxfY250KCkgKiBjYWxjX21zcygpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB2bG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiB7XFxuIFxcdHZhX2xpc3QgYXJncztcXG5AQCAtNTYwLDYgKzU5Nyw2MSBAQCBzdGF0aWMgdm9pZCBzZW5kX2RhdGFfcGt0cyhpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsXFxuIFxcdHdyaXRlX3BhY2tldChmZCwgYnVmLCB0b3RhbF9oZHJfbGVuICsgcGF5bG9hZF9sZW4yLCBkYWRkcik7XFxuIH1cXG4gXFxuKy8qIFNlbmQgbnVtX3BrdCBzZWdtZW50cyBvZiBwa3RfbGVuIGJ5dGVzLCB0aGVuIG9uZSBvZiByZW1haW5kZXIgbGVuLiAqL1xcbitzdGF0aWMgdm9pZCBzZW5kX2JpZ190Y3AoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHJfbGwgKmRhZGRyLCBpbnQgcGt0X2xlbixcXG4rXFx0XFx0XFx0IGludCBudW1fcGt0LCBpbnQgcmVtYWluZGVyKVxcbit7XFxuK1xcdHN0YXRpYyBjaGFyIHBrdHNbQklHX1RDUF9NQVhfRklMTF9DTlRdW01BWF9IRFJfTEVOICsgTUFYX01TU107XFxuK1xcdHN0YXRpYyBjaGFyIGxhc3RbTUFYX0hEUl9MRU4gKyBNQVhfTVNTXTtcXG4rXFx0Y29uc3QgaW50IGZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmIChudW1fcGt0IFxcdTAwM2UgQklHX1RDUF9NQVhfRklMTF9DTlQpXFxuK1xcdFxcdGVycm9yKDEsIDAsIFxcXCJuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkXFxcIixcXG4rXFx0XFx0ICAgICAgbnVtX3BrdCwgQklHX1RDUF9NQVhfRklMTF9DTlQpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wa3Q7IGkrKylcXG4rXFx0XFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XFxuK1xcdGNyZWF0ZV9wYWNrZXQobGFzdCwgZmlsbGVkLCAwLCByZW1haW5kZXIsIDApO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9wa3Q7IGkrKylcXG4rXFx0XFx0d3JpdGVfcGFja2V0KGZkLCBwa3RzW2ldLCB0b3RhbF9oZHJfbGVuICsgcGt0X2xlbiwgZGFkZHIpO1xcbitcXHR3cml0ZV9wYWNrZXQoZmQsIGxhc3QsIHRvdGFsX2hkcl9sZW4gKyByZW1haW5kZXIsIGRhZGRyKTtcXG4rfVxcbitcXG4rLyogSW4gQklHIFRDUCBjb25maWd1cmF0aW9uLCB0aGUgdG90YWwgYWdncmVnYXRlIGxlbmd0aCBjYW5cXG4rICogYmUgZ3JlYXRlciB0aGFuIHRoZSBsZWdhY3kgSVBfTUFYUEFDS0VULiBTaW5jZSB0aGUgYWdncmVnYXRlXFxuKyAqIGxlbmd0aCBpcyB1c2VkIGluIGNhbGN1bGF0aW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzLFxcbisgKiBzZW5kIGEgcGFja2V0IHdpdGggYSBzZXF1ZW5jZSBudW1iZXIgdGhhdCBkaWZmZXJzIGJ5IElQX01BWFBBQ0tFVCArIDEsXFxuKyAqIHRvIHRlc3QgYWdhaW5zdCB0cnVuY2F0aW9uIGJ1Z3MuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzZW5kX2JpZ190Y3BfYmFkX3NlcShpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIpXFxuK3tcXG4rXFx0c3RhdGljIGNoYXIgcGt0c1tCSUdfVENQX01BWF9GSUxMX0NOVF1bTUFYX0hEUl9MRU4gKyBNQVhfTVNTXTtcXG4rXFx0Y29uc3QgaW50IG51bV9wa3QgPSBiaWdfdGNwX2ZpbGxfY250KCkgKyAxO1xcbitcXHRzdGF0aWMgY2hhciBsYXN0W01BWF9IRFJfTEVOICsgTUFYX01TU107XFxuK1xcdGNvbnN0IGludCBwa3RfbGVuID0gY2FsY19tc3MoKTtcXG4rXFx0aW50IGJhZF9zZXE7XFxuK1xcdGludCBmaWxsZWQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0ZmlsbGVkID0gbnVtX3BrdCAqIHBrdF9sZW47XFxuK1xcdC8qIExvdyAxNiBiaXRzIG1hdGNoIHdpdGggdGhlIGNvcnJlY3QgaW5jb21pbmcgc2VxdWVuY2UgbnVtYmVyLiAqL1xcbitcXHRiYWRfc2VxID0gZmlsbGVkIC0gKElQX01BWFBBQ0tFVCArIDEpO1xcbitcXG4rXFx0aWYgKG51bV9wa3QgXFx1MDAzZSBCSUdfVENQX01BWF9GSUxMX0NOVClcXG4rXFx0XFx0ZXJyb3IoMSwgMCwgXFxcIm5lZWQgJWQgcGFja2V0cywgYXJyYXkgaG9sZHMgJWRcXFwiLFxcbitcXHRcXHQgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3BrdDsgaSsrKVxcbitcXHRcXHRjcmVhdGVfcGFja2V0KHBrdHNbaV0sIGkgKiBwa3RfbGVuLCAwLCBwa3RfbGVuLCAwKTtcXG4rXFx0Y3JlYXRlX3BhY2tldChsYXN0LCBiYWRfc2VxLCAwLCBwa3RfbGVuLCAwKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fcGt0OyBpKyspXFxuK1xcdFxcdHdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcXG4rXFx0d3JpdGVfcGFja2V0KGZkLCBsYXN0LCB0b3RhbF9oZHJfbGVuICsgcGt0X2xlbiwgZGFkZHIpO1xcbit9XFxuK1xcbiAvKiBJZiBpbmNvbWluZyBzZWdtZW50cyBtYWtlIHRyYWNrZWQgc2VnbWVudCBsZW5ndGggZXhjZWVkXFxuICAqIGxlZ2FsIElQIGRhdGFncmFtIGxlbmd0aCwgZG8gbm90IGNvYWxlc2NlXFxuICAqL1xcbkBAIC0xMTYxLDcgKzEyNTMsNyBAQCBzdGF0aWMgdm9pZCByZWN2X2Vycm9yKGludCBmZCwgaW50IHJjdl9lcnJubylcXG4gc3RhdGljIHZvaWQgY2hlY2tfcmVjdl9wa3RzKGludCBmZCwgaW50ICpjb3JyZWN0X3BheWxvYWQsXFxuIFxcdFxcdFxcdCAgICBpbnQgY29ycmVjdF9udW1fcGt0cylcXG4ge1xcbi1cXHRzdGF0aWMgY2hhciBidWZmZXJbSVBfTUFYUEFDS0VUICsgTDJfSExFTl9NQVggKyAxXTtcXG4rXFx0c3RhdGljIGNoYXIgYnVmZmVyW0JJR19UQ1BfUkVDVl9CVUZfTEVOXTtcXG4gXFx0aW50IG5ob2ZmID0gRVRIX0hMRU4gKyAocHBwb2UgPyBQUFBPRV9TRVNfSExFTiA6IDApO1xcbiBcXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoYnVmZmVyICsgbmhvZmYpO1xcbiBcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShidWZmZXIgKyBuaG9mZik7XFxuQEAgLTE1NDEsNiArMTYzMywyNSBAQCBzdGF0aWMgdm9pZCBncm9fc2VuZGVyKHZvaWQpXFxuIFxcdFxcdHNlbmRfbGFyZ2UodHhmZCwgXFx1MDAyNmRhZGRyLCByZW1haW5kZXIgKyAxKTtcXG4gXFx0XFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFxcdTAwMjZkYWRkcik7XFxuIFxcbitcXHQvKiBiaWcgdGNwIHN1Yi10ZXN0cyAqL1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfZGF0YV9zYW1lXFxcIikgPT0gMCkge1xcbitcXHRcXHRzZW5kX2JpZ190Y3AodHhmZCwgXFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2ZpbGxfY250KCksXFxuK1xcdFxcdFxcdCAgICAgY2FsY19tc3MoKSk7XFxuK1xcdFxcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcXHUwMDI2ZGFkZHIpO1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfZGF0YV9scmdfc21sXFxcIikgPT0gMCkge1xcbitcXHRcXHRpbnQgcmVtYWluZGVyID0gY2FsY19tc3MoKSAvIDI7XFxuK1xcbitcXHRcXHRzZW5kX2JpZ190Y3AodHhmZCwgXFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2ZpbGxfY250KCksXFxuK1xcdFxcdFxcdCAgICAgcmVtYWluZGVyKTtcXG4rXFx0XFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFxcdTAwMjZkYWRkcik7XFxuK1xcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwiYmlnX3RjcF90Y3Bfc2VxXFxcIikgPT0gMCkge1xcbitcXHRcXHRzZW5kX2JpZ190Y3BfYmFkX3NlcSh0eGZkLCBcXHUwMDI2ZGFkZHIpO1xcbitcXHRcXHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXFx1MDAyNmRhZGRyKTtcXG4rXFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFxcXCJiaWdfdGNwX2xhcmdlX21heFxcXCIpID09IDApIHtcXG4rXFx0XFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFxcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9sYXJnZV9jbnQoKSxcXG4rXFx0XFx0XFx0ICAgICBjYWxjX21zcygpKTtcXG4rXFx0XFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFxcdTAwMjZkYWRkcik7XFxuK1xcbiBcXHQvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovXFxuIFxcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwic2luZ2xlXFxcIikgPT0gMCkge1xcbiBcXHRcXHRzdGF0aWMgY2hhciBidWZbTUFYX0hEUl9MRU4gKyBQQVlMT0FEX0xFTl07XFxuQEAgLTE3NjgsNiArMTg3OSwyNiBAQCBzdGF0aWMgdm9pZCBncm9fcmVjZWl2ZXIodm9pZClcXG4gXFx0XFx0cHJpbnRmKFxcXCJsYXN0IHNlZ21lbnQgc2VudCBpbmRpdmlkdWFsbHk6IFxcXCIpO1xcbiBcXHRcXHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAzKTtcXG4gXFxuK1xcdC8qIGJpZyB0Y3Agc3ViLXRlc3RzICovXFxuK1xcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwiYmlnX3RjcF9kYXRhX3NhbWVcXFwiKSA9PSAwKSB7XFxuK1xcdFxcdGNvcnJlY3RfcGF5bG9hZFswXSA9IGJpZ190Y3BfZmlsbF9sZW4oKSArIGNhbGNfbXNzKCk7XFxuK1xcdFxcdHByaW50ZihcXFwiZGF0YSBwYWNrZXRzIG9mIHNhbWUgc2l6ZSBwYXN0IElQX01BWFBBQ0tFVDogXFxcIik7XFxuK1xcdFxcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDEpO1xcbitcXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXFxcImJpZ190Y3BfZGF0YV9scmdfc21sXFxcIikgPT0gMCkge1xcbitcXHRcXHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2ZpbGxfbGVuKCkgKyBjYWxjX21zcygpIC8gMjtcXG4rXFx0XFx0cHJpbnRmKFxcXCJzbWFsbGVyIGxhc3QgcGFja2V0IHBhc3QgSVBfTUFYUEFDS0VUOiBcXFwiKTtcXG4rXFx0XFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMSk7XFxuK1xcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwiYmlnX3RjcF90Y3Bfc2VxXFxcIikgPT0gMCkge1xcbitcXHRcXHRjb3JyZWN0X3BheWxvYWRbMF0gPSAoYmlnX3RjcF9maWxsX2NudCgpICsgMSkgKiBjYWxjX21zcygpO1xcbitcXHRcXHRjb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpO1xcbitcXHRcXHRwcmludGYoXFxcImFsaWFzZWQgc2VxIHBhc3QgSVBfTUFYUEFDS0VUIGRvZXNuJ3QgY29hbGVzY2U6IFxcXCIpO1xcbitcXHRcXHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAyKTtcXG4rXFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFxcXCJiaWdfdGNwX2xhcmdlX21heFxcXCIpID09IDApIHtcXG4rXFx0XFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9sYXJnZV9jbnQoKSAqIGNhbGNfbXNzKCk7XFxuK1xcdFxcdGNvcnJlY3RfcGF5bG9hZFsxXSA9IGNhbGNfbXNzKCk7XFxuK1xcdFxcdHByaW50ZihcXFwic2hvdWxkbid0IGNvYWxlc2NlIHBhc3QgZ3JvX21heF9zaXplOiBcXFwiKTtcXG4rXFx0XFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMik7XFxuK1xcbiBcXHQvKiBtYWNoaW5lcnkgc3ViLXRlc3RzICovXFxuIFxcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcXFwic2luZ2xlXFxcIikgPT0gMCkge1xcbiBcXHRcXHRwcmludGYoXFxcInNpbmdsZSBkYXRhIHBhY2tldDogXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA2OjA4OjQzLjI2NzIxMzA1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTU1Mzg3NjUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2NWMxNGViNjMzYzczNDg2YmRhNWJlZjgwYTIzZDQzNmZlOGUwNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAwNjowODozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5XG5pbmRleCBiN2FjMDY2MGFkYzAxLi5mYWZlMjk3NTQwMWIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weVxuQEAgLTQwLDEzICs0MCwxNyBAQCBUZXN0IGNhc2VzOlxuICAgLSBpcF92NmV4dF9kaWZmOiAoSVB2NikgSVB2NiBleHQgaGVhZGVyIHdpdGggZGlmZmVyZW50IHBheWxvYWQgZG9lc24ndCBjb2FsZXNjZVxuICAgLSBsYXJnZV9tYXg6IFBhY2tldHMgZXhjZWVkaW5nIEdST19NQVhfU0laRSBkb24ndCBjb2FsZXNjZVxuICAgLSBsYXJnZV9yZW06IExhcmdlIHBhY2tldCByZW1haW5kZXIgaGFuZGxpbmdcbisgIC0gYmlnX3RjcF9kYXRhX3NhbWU6IFNhbWUgc2l6ZSBwYWNrZXRzIGNvYWxlc2NlIHBhc3QgSVBfTUFYUEFDS0VUXG4rICAtIGJpZ190Y3BfZGF0YV9scmdfc21sOiBTbWFsbGVyIGxhc3QgcGFja2V0IGNvYWxlc2NlcyBwYXN0IElQX01BWFBBQ0tFVFxuKyAgLSBiaWdfdGNwX3RjcF9zZXE6IFBhY2tldHMgd2l0aCAxNi1iaXQgdHJ1bmNhdGVkIHNlcW5vIGRvbid0IGNvYWxlc2NlXG4rICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiBQYWNrZXRzIGV4Y2VlZGluZyB0aGUgQklHIFRDUCBsaW1pdCBkb24ndCBjb2FsZXNjZVxuIFwiXCJcIlxuIFxuIGltcG9ydCBnbG9iXG4gaW1wb3J0IG9zXG4gaW1wb3J0IHJlXG4tZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHJcbi1mcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRYZmFpbEV4XG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfcHIsIGtzZnRfZXFcbitmcm9tIGxpYi5weSBpbXBvcnQgTmV0RHJ2RXBFbnYsIEtzZnRGYWlsRXgsIEtzZnRTa2lwRXgsIEtzZnRYZmFpbEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IE5ldGRldkZhbWlseSwgRXRodG9vbEZhbWlseVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGNtZCwgY3RsX2ZpbGVfd3JpdGUsIGRlZmVyLCBldGh0b29sLCBpcFxuIGZyb20gbGliLnB5IGltcG9ydCBrc2Z0X3ZhcmlhbnRzLCBLc2Z0TmFtZWRWYXJpYW50XG5AQCAtNTUsNiArNTksOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQga3NmdF92YXJpYW50cywgS3NmdE5hbWVkVmFyaWFudFxuICMgZ3JvLmMgdXNlcyBoYXJkY29kZWQgRFBPUlQ9ODAwMFxuIEdST19EUE9SVCA9IDgwMDBcbiBcbitCSUdfVENQX0dST19NQVhfU0laRSA9IDEyODAwMFxuK1xuIFxuIGRlZiBfcmVzb2x2ZV9kbWFjKGNmZywgaXB2ZXIpOlxuICAgICBcIlwiXCJcbkBAIC05MSw2ICs5NywzNCBAQCBkZWYgX3NldF9tdHVfcmVzdG9yZShkZXYsIG10dSwgaG9zdCk6XG4gICAgICAgICBkZWZlcihpcCwgZlwibGluayBzZXQgZGV2IHtkZXZbJ2lmbmFtZSddfSBtdHUge2RldlsnbXR1J119XCIsIGhvc3Q9aG9zdClcbiBcbiBcbitkZWYgX3NldF9ncm9fc2l6ZV9yZXN0b3JlKGNmZywgc2l6ZSk6XG4rICAgIFwiXCJcIlxuKyAgICBTZXQgdGhlIGxvY2FsIGRldmljZSdzIEdSTyBzaXplIGxpbWl0cywgdGhlbiBjb25maXJtIHRoZXkgc3R1Y2suXG4rICAgIFwiXCJcIlxuK1xuKyAgICBfc2V0X210dV9yZXN0b3JlKGNmZy5kZXYsIDQwOTYsIE5vbmUpXG4rICAgIF9zZXRfbXR1X3Jlc3RvcmUoY2ZnLnJlbW90ZV9kZXYsIDQwOTYsIGNmZy5yZW1vdGUpXG4rXG4rICAgIGlmIFwiZ3JvX21heF9zaXplXCIgbm90IGluIGNmZy5kZXYgb3IgXCJncm9faXB2NF9tYXhfc2l6ZVwiIG5vdCBpbiBjZmcuZGV2OlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImlwcm91dGUyIGRvZXMgbm90IHJlcG9ydCB0aGUgR1JPIHNpemUgbGltaXRzXCIpXG4rXG4rICAgIGlmIChjZmcuZGV2W1wiZ3JvX21heF9zaXplXCJdID09IHNpemUgYW5kXG4rICAgICAgICAgICAgY2ZnLmRldltcImdyb19pcHY0X21heF9zaXplXCJdID09IHNpemUpOlxuKyAgICAgICAgcmV0dXJuXG4rXG4rICAgIG9sZCA9IChmXCJncm9fbWF4X3NpemUge2NmZy5kZXZbJ2dyb19tYXhfc2l6ZSddfSBcIlxuKyAgICAgICAgICAgZlwiZ3JvX2lwdjRfbWF4X3NpemUge2NmZy5kZXZbJ2dyb19pcHY0X21heF9zaXplJ119XCIpXG4rICAgIG5ldyA9IGZcImdyb19tYXhfc2l6ZSB7c2l6ZX0gZ3JvX2lwdjRfbWF4X3NpemUge3NpemV9XCJcbitcbisgICAgaXAoZlwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7bmV3fVwiKVxuKyAgICBkZWZlcihpcCwgZlwibGluayBzZXQgZGV2IHtjZmcuaWZuYW1lfSB7b2xkfVwiKVxuK1xuKyAgICBkZXYgPSBpcChcIi1kIGxpbmsgc2hvdyBkZXYgXCIgKyBjZmcuaWZuYW1lLCBqc29uPVRydWUpWzBdXG4rICAgIGtzZnRfZXEoZGV2W1wiZ3JvX21heF9zaXplXCJdLCBzaXplLCBjb21tZW50PVwiZ3JvX21heF9zaXplIG5vdCBhcHBsaWVkXCIpXG4rICAgIGtzZnRfZXEoZGV2W1wiZ3JvX2lwdjRfbWF4X3NpemVcIl0sIHNpemUsXG4rICAgICAgICAgICAgY29tbWVudD1cImdyb19pcHY0X21heF9zaXplIG5vdCBhcHBsaWVkXCIpXG4rXG4rXG4gZGVmIF9zZXRfZXRodG9vbF9mZWF0KGRldiwgY3VycmVudCwgZmVhdHMsIGhvc3Q9Tm9uZSk6XG4gICAgIHMybiA9IHtUcnVlOiBcIm9uXCIsIEZhbHNlOiBcIm9mZlwifVxuIFxuQEAgLTIzOSw3ICsyNzMsMTEgQEAgZGVmIF9zZXR1cChjZmcsIG1vZGUsIHRlc3RfbmFtZSk6XG4gICAgICAgICBmbHVzaF9wYXRoID0gZlwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L2dyb19mbHVzaF90aW1lb3V0XCJcbiAgICAgICAgIGlycV9wYXRoID0gZlwiL3N5cy9jbGFzcy9uZXQve2NmZy5pZm5hbWV9L25hcGlfZGVmZXJfaGFyZF9pcnFzXCJcbiBcbi0gICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFwiMjAwMDAwXCIpXG4rICAgICAgICAjIFwiYmlnX3RjcF8qXCIgdGVzdHMgbmVlZCBhIGxvbmdlciB0aW1lb3V0LCB1c2UgMTV4IHRoZSByZWd1bGFyIHRpbWVvdXRcbisgICAgICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwiYmlnX3RjcF9cIik6XG4rICAgICAgICAgICAgY3RsX2ZpbGVfd3JpdGUoZmx1c2hfcGF0aCwgXCIzMDAwMDAwXCIpXG4rICAgICAgICBlbHNlOlxuKyAgICAgICAgICAgIGN0bF9maWxlX3dyaXRlKGZsdXNoX3BhdGgsIFwiMjAwMDAwXCIpXG4gICAgICAgICBjdGxfZmlsZV93cml0ZShpcnFfcGF0aCwgXCIxMFwiKVxuIFxuICAgICAgICAgX3NldF9ldGh0b29sX2ZlYXQoY2ZnLmlmbmFtZSwgY2ZnLmZlYXQsXG5AQCAtMjg5LDYgKzMyNyw5IEBAIGRlZiBfc2V0dXAoY2ZnLCBtb2RlLCB0ZXN0X25hbWUpOlxuICAgICBleGNlcHQgS3NmdFhmYWlsRXg6XG4gICAgICAgICBwYXNzXG4gXG4rICAgIGlmIHRlc3RfbmFtZS5zdGFydHN3aXRoKFwiYmlnX3RjcF9cIik6XG4rICAgICAgICBfc2V0X2dyb19zaXplX3Jlc3RvcmUoY2ZnLCBCSUdfVENQX0dST19NQVhfU0laRSlcbitcbiBcbiBkZWYgX2dyb192YXJpYW50cygpOlxuICAgICBcIlwiXCJHZW5lcmF0b3IgdGhhdCB5aWVsZHMgYWxsIGNvbWJpbmF0aW9ucyBvZiBwcm90b2NvbCBhbmQgdGVzdCB0eXBlcy5cIlwiXCJcbkBAIC0zMDQsNiArMzQ1LDExIEBAIGRlZiBfZ3JvX3ZhcmlhbnRzKCk6XG4gICAgICAgICBcImxhcmdlX21heFwiLCBcImxhcmdlX3JlbVwiLFxuICAgICBdXG4gXG4rICAgIGJpZ190Y3BfdGVzdHMgPSBbXG4rICAgICAgICBcImJpZ190Y3BfZGF0YV9zYW1lXCIsIFwiYmlnX3RjcF9kYXRhX2xyZ19zbWxcIixcbisgICAgICAgIFwiYmlnX3RjcF90Y3Bfc2VxXCIsIFwiYmlnX3RjcF9sYXJnZV9tYXhcIixcbisgICAgXVxuK1xuICAgICAjIFRlc3RzIHNwZWNpZmljIHRvIElQdjRcbiAgICAgaXB2NF90ZXN0cyA9IFtcbiAgICAgICAgIFwiaXBfY3N1bVwiLFxuQEAgLTMyMiw2ICszNjgsMTAgQEAgZGVmIF9ncm9fdmFyaWFudHMoKTpcbiAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gY29tbW9uX3Rlc3RzOlxuICAgICAgICAgICAgIHlpZWxkIHByb3RvY29sLCB0ZXN0X25hbWVcbiBcbisgICAgICAgIGlmIHByb3RvY29sIGluIFtcImlwdjRcIiwgXCJpcHY2XCJdOlxuKyAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gYmlnX3RjcF90ZXN0czpcbisgICAgICAgICAgICAgICAgeWllbGQgcHJvdG9jb2wsIHRlc3RfbmFtZVxuK1xuICAgICAgICAgaWYgcHJvdG9jb2wgaW4gW1wiaXB2NFwiLCBcImlwaXBcIl06XG4gICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBpcHY0X3Rlc3RzOlxuICAgICAgICAgICAgICAgICB5aWVsZCBwcm90b2NvbCwgdGVzdF9uYW1lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9ncm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNcbmluZGV4IDdhMzMzMTU1ZGUxYWIuLjcwYjBkZWIzYzExZmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jXG5AQCAtNDYsNiArNDYsMTIgQEBcbiAgKiAgIC0gbGFyZ2VfbWF4OiBleGNlZWRpbmcgbWF4IHNpemVcbiAgKiAgIC0gbGFyZ2VfcmVtOiByZW1haW5kZXIgaGFuZGxpbmdcbiAgKlxuKyAqIGJpZ190Y3BfKjpcbisgKiAgIC0gYmlnX3RjcF9kYXRhX3NhbWU6ICAgIGVxdWFsIHNlZ21lbnRzIGNvYWxlc2NpbmcgcGFzdCBJUF9NQVhQQUNLRVRcbisgKiAgIC0gYmlnX3RjcF9kYXRhX2xyZ19zbWw6IGEgc21hbGxlciBmaW5hbCBzZWdtZW50IGNhcnJ5aW5nIGl0IG92ZXJcbisgKiAgIC0gYmlnX3RjcF90Y3Bfc2VxOiAgICAgIDE2LWJpdCB0cnVuY2F0ZWQgc2VxdWVuY2UgbnVtYmVyIG11c3Qgbm90IGNvYWxlc2NlXG4rICogICAtIGJpZ190Y3BfbGFyZ2VfbWF4OiAgICBjb2FsZXNjaW5nIHN0b3BzIGF0IHRoZSBjb25maWd1cmVkIGxpbWl0XG4rICpcbiAgKiBzaW5nbGUsIGNhcGFjaXR5OlxuICAqICBCb3JpbmcgY2FzZXMgdXNlZCB0byB0ZXN0IGNvYWxlc2NpbmcgbWFjaGluZXJ5IGl0c2VsZiBhbmQgc3RhdHNcbiAgKiAgbW9yZSB0aGFuIHByb3RvY29sIGJlaGF2aW9yLlxuQEAgLTExMCw2ICsxMTYsMTYgQEBcbiBcbiAjZGVmaW5lIEVYSVRfT1ZFUl9DT0FMRVNDRVx0NDJcbiBcbisvKiBNdXN0IG1hdGNoIEJJR19UQ1BfR1JPX01BWF9TSVpFIGluIGdyb19saWIucHkuICovXG4rI2RlZmluZSBCSUdfVENQX0dST19NQVhfU0laRVx0MTI4MDAwXG4rXG4rI2RlZmluZSBCSUdfVENQX1JFQ1ZfQlVGX0xFTiBcXFxuK1x0KEJJR19UQ1BfR1JPX01BWF9TSVpFICsgTUFYX01TUyArIEwyX0hMRU5fTUFYKVxuKyNkZWZpbmUgQklHX1RDUF9NSU5fTVNTXHRcdChBU1NVTUVEX01UVSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSlcbisjZGVmaW5lIEJJR19UQ1BfTUFYX0ZJTExfQ05UIFxcXG4rXHQoKGludCkoKEJJR19UQ1BfR1JPX01BWF9TSVpFIC0gMSAtIChNQVhfSERSX0xFTiAtIEVUSF9ITEVOKSkgLyBcXFxuK1x0ICAgICAgIEJJR19UQ1BfTUlOX01TUykpXG4rXG4gI2RlZmluZSBpcHY2X29wdGxlbihwKSAgKCgocCktXHUwMDNlaGRybGVuKzEpIFx1MDAzY1x1MDAzYyAzKSAvKiBjYWxjdWxhdGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIGxlbiAqL1xuICNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSlcbiBcbkBAIC0xNjYsNiArMTgyLDI3IEBAIHN0YXRpYyBpbnQgbnVtX2xhcmdlX3BrdCh2b2lkKVxuIFx0cmV0dXJuIG1heF9wYXlsb2FkKCkgLyBjYWxjX21zcygpO1xuIH1cbiBcbisvKiBIb3cgbWFueSBtYXhpbXVtIHNpemVkIHNlZ21lbnRzIGZpdCB1bmRlciB0aGUgY29uZmlndXJlZCBsaW1pdC4gKi9cbitzdGF0aWMgaW50IGJpZ190Y3BfbGFyZ2VfY250KHZvaWQpXG4re1xuK1x0cmV0dXJuIChCSUdfVENQX0dST19NQVhfU0laRSAtIDEgLSAodG90YWxfaGRyX2xlbiAtIEVUSF9ITEVOKSkgL1xuK1x0ICAgICAgIGNhbGNfbXNzKCk7XG4rfVxuK1xuKy8qIEhvdyBtYW55IGNhbGNfbXNzKCkgc2l6ZWQgc2VnbWVudHMgYXJlIG5lZWRlZCB0byBzYXRpc2Z5IHRoZVxuKyAqIGZvbGxvd2luZyBjb25kaXRpb246XG4rICogcGt0X2NvdW50ICogY2FsY19tc3MoKSBcdTAwM2MgSVBfTUFYUEFDS0VUIFx1MDAzYyAocGt0X2NvdW50ICsgMSkgKiBjYWxjX21zcygpXG4rICovXG4rc3RhdGljIGludCBiaWdfdGNwX2ZpbGxfY250KHZvaWQpXG4re1xuK1x0cmV0dXJuIElQX01BWFBBQ0tFVCAvIGNhbGNfbXNzKCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYmlnX3RjcF9maWxsX2xlbih2b2lkKVxuK3tcbitcdHJldHVybiBiaWdfdGNwX2ZpbGxfY250KCkgKiBjYWxjX21zcygpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2bG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIHtcbiBcdHZhX2xpc3QgYXJncztcbkBAIC01NjAsNiArNTk3LDYxIEBAIHN0YXRpYyB2b2lkIHNlbmRfZGF0YV9wa3RzKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkcixcbiBcdHdyaXRlX3BhY2tldChmZCwgYnVmLCB0b3RhbF9oZHJfbGVuICsgcGF5bG9hZF9sZW4yLCBkYWRkcik7XG4gfVxuIFxuKy8qIFNlbmQgbnVtX3BrdCBzZWdtZW50cyBvZiBwa3RfbGVuIGJ5dGVzLCB0aGVuIG9uZSBvZiByZW1haW5kZXIgbGVuLiAqL1xuK3N0YXRpYyB2b2lkIHNlbmRfYmlnX3RjcChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkcl9sbCAqZGFkZHIsIGludCBwa3RfbGVuLFxuK1x0XHRcdCBpbnQgbnVtX3BrdCwgaW50IHJlbWFpbmRlcilcbit7XG4rXHRzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xuK1x0c3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xuK1x0Y29uc3QgaW50IGZpbGxlZCA9IG51bV9wa3QgKiBwa3RfbGVuO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAobnVtX3BrdCBcdTAwM2UgQklHX1RDUF9NQVhfRklMTF9DTlQpXG4rXHRcdGVycm9yKDEsIDAsIFwibmVlZCAlZCBwYWNrZXRzLCBhcnJheSBob2xkcyAlZFwiLFxuK1x0XHQgICAgICBudW1fcGt0LCBCSUdfVENQX01BWF9GSUxMX0NOVCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcGt0OyBpKyspXG4rXHRcdGNyZWF0ZV9wYWNrZXQocGt0c1tpXSwgaSAqIHBrdF9sZW4sIDAsIHBrdF9sZW4sIDApO1xuK1x0Y3JlYXRlX3BhY2tldChsYXN0LCBmaWxsZWQsIDAsIHJlbWFpbmRlciwgMCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fcGt0OyBpKyspXG4rXHRcdHdyaXRlX3BhY2tldChmZCwgcGt0c1tpXSwgdG90YWxfaGRyX2xlbiArIHBrdF9sZW4sIGRhZGRyKTtcbitcdHdyaXRlX3BhY2tldChmZCwgbGFzdCwgdG90YWxfaGRyX2xlbiArIHJlbWFpbmRlciwgZGFkZHIpO1xuK31cbitcbisvKiBJbiBCSUcgVENQIGNvbmZpZ3VyYXRpb24sIHRoZSB0b3RhbCBhZ2dyZWdhdGUgbGVuZ3RoIGNhblxuKyAqIGJlIGdyZWF0ZXIgdGhhbiB0aGUgbGVnYWN5IElQX01BWFBBQ0tFVC4gU2luY2UgdGhlIGFnZ3JlZ2F0ZVxuKyAqIGxlbmd0aCBpcyB1c2VkIGluIGNhbGN1bGF0aW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzLFxuKyAqIHNlbmQgYSBwYWNrZXQgd2l0aCBhIHNlcXVlbmNlIG51bWJlciB0aGF0IGRpZmZlcnMgYnkgSVBfTUFYUEFDS0VUICsgMSxcbisgKiB0byB0ZXN0IGFnYWluc3QgdHJ1bmNhdGlvbiBidWdzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHNlbmRfYmlnX3RjcF9iYWRfc2VxKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2xsICpkYWRkcilcbit7XG4rXHRzdGF0aWMgY2hhciBwa3RzW0JJR19UQ1BfTUFYX0ZJTExfQ05UXVtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xuK1x0Y29uc3QgaW50IG51bV9wa3QgPSBiaWdfdGNwX2ZpbGxfY250KCkgKyAxO1xuK1x0c3RhdGljIGNoYXIgbGFzdFtNQVhfSERSX0xFTiArIE1BWF9NU1NdO1xuK1x0Y29uc3QgaW50IHBrdF9sZW4gPSBjYWxjX21zcygpO1xuK1x0aW50IGJhZF9zZXE7XG4rXHRpbnQgZmlsbGVkO1xuK1x0aW50IGk7XG4rXG4rXHRmaWxsZWQgPSBudW1fcGt0ICogcGt0X2xlbjtcbitcdC8qIExvdyAxNiBiaXRzIG1hdGNoIHdpdGggdGhlIGNvcnJlY3QgaW5jb21pbmcgc2VxdWVuY2UgbnVtYmVyLiAqL1xuK1x0YmFkX3NlcSA9IGZpbGxlZCAtIChJUF9NQVhQQUNLRVQgKyAxKTtcbitcbitcdGlmIChudW1fcGt0IFx1MDAzZSBCSUdfVENQX01BWF9GSUxMX0NOVClcbitcdFx0ZXJyb3IoMSwgMCwgXCJuZWVkICVkIHBhY2tldHMsIGFycmF5IGhvbGRzICVkXCIsXG4rXHRcdCAgICAgIG51bV9wa3QsIEJJR19UQ1BfTUFYX0ZJTExfQ05UKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9wa3Q7IGkrKylcbitcdFx0Y3JlYXRlX3BhY2tldChwa3RzW2ldLCBpICogcGt0X2xlbiwgMCwgcGt0X2xlbiwgMCk7XG4rXHRjcmVhdGVfcGFja2V0KGxhc3QsIGJhZF9zZXEsIDAsIHBrdF9sZW4sIDApO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3BrdDsgaSsrKVxuK1x0XHR3cml0ZV9wYWNrZXQoZmQsIHBrdHNbaV0sIHRvdGFsX2hkcl9sZW4gKyBwa3RfbGVuLCBkYWRkcik7XG4rXHR3cml0ZV9wYWNrZXQoZmQsIGxhc3QsIHRvdGFsX2hkcl9sZW4gKyBwa3RfbGVuLCBkYWRkcik7XG4rfVxuK1xuIC8qIElmIGluY29taW5nIHNlZ21lbnRzIG1ha2UgdHJhY2tlZCBzZWdtZW50IGxlbmd0aCBleGNlZWRcbiAgKiBsZWdhbCBJUCBkYXRhZ3JhbSBsZW5ndGgsIGRvIG5vdCBjb2FsZXNjZVxuICAqL1xuQEAgLTExNjEsNyArMTI1Myw3IEBAIHN0YXRpYyB2b2lkIHJlY3ZfZXJyb3IoaW50IGZkLCBpbnQgcmN2X2Vycm5vKVxuIHN0YXRpYyB2b2lkIGNoZWNrX3JlY3ZfcGt0cyhpbnQgZmQsIGludCAqY29ycmVjdF9wYXlsb2FkLFxuIFx0XHRcdCAgICBpbnQgY29ycmVjdF9udW1fcGt0cylcbiB7XG4tXHRzdGF0aWMgY2hhciBidWZmZXJbSVBfTUFYUEFDS0VUICsgTDJfSExFTl9NQVggKyAxXTtcbitcdHN0YXRpYyBjaGFyIGJ1ZmZlcltCSUdfVENQX1JFQ1ZfQlVGX0xFTl07XG4gXHRpbnQgbmhvZmYgPSBFVEhfSExFTiArIChwcHBvZSA/IFBQUE9FX1NFU19ITEVOIDogMCk7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoYnVmZmVyICsgbmhvZmYpO1xuIFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoYnVmZmVyICsgbmhvZmYpO1xuQEAgLTE1NDEsNiArMTYzMywyNSBAQCBzdGF0aWMgdm9pZCBncm9fc2VuZGVyKHZvaWQpXG4gXHRcdHNlbmRfbGFyZ2UodHhmZCwgXHUwMDI2ZGFkZHIsIHJlbWFpbmRlciArIDEpO1xuIFx0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuIFxuK1x0LyogYmlnIHRjcCBzdWItdGVzdHMgKi9cbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfZGF0YV9zYW1lXCIpID09IDApIHtcbitcdFx0c2VuZF9iaWdfdGNwKHR4ZmQsIFx1MDAyNmRhZGRyLCBjYWxjX21zcygpLCBiaWdfdGNwX2ZpbGxfY250KCksXG4rXHRcdFx0ICAgICBjYWxjX21zcygpKTtcbitcdFx0d3JpdGVfcGFja2V0KHR4ZmQsIGZpbl9wa3QsIHRvdGFsX2hkcl9sZW4sIFx1MDAyNmRhZGRyKTtcbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfZGF0YV9scmdfc21sXCIpID09IDApIHtcbitcdFx0aW50IHJlbWFpbmRlciA9IGNhbGNfbXNzKCkgLyAyO1xuK1xuK1x0XHRzZW5kX2JpZ190Y3AodHhmZCwgXHUwMDI2ZGFkZHIsIGNhbGNfbXNzKCksIGJpZ190Y3BfZmlsbF9jbnQoKSxcbitcdFx0XHQgICAgIHJlbWFpbmRlcik7XG4rXHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4rXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJiaWdfdGNwX3RjcF9zZXFcIikgPT0gMCkge1xuK1x0XHRzZW5kX2JpZ190Y3BfYmFkX3NlcSh0eGZkLCBcdTAwMjZkYWRkcik7XG4rXHRcdHdyaXRlX3BhY2tldCh0eGZkLCBmaW5fcGt0LCB0b3RhbF9oZHJfbGVuLCBcdTAwMjZkYWRkcik7XG4rXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJiaWdfdGNwX2xhcmdlX21heFwiKSA9PSAwKSB7XG4rXHRcdHNlbmRfYmlnX3RjcCh0eGZkLCBcdTAwMjZkYWRkciwgY2FsY19tc3MoKSwgYmlnX3RjcF9sYXJnZV9jbnQoKSxcbitcdFx0XHQgICAgIGNhbGNfbXNzKCkpO1xuK1x0XHR3cml0ZV9wYWNrZXQodHhmZCwgZmluX3BrdCwgdG90YWxfaGRyX2xlbiwgXHUwMDI2ZGFkZHIpO1xuK1xuIFx0LyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqL1xuIFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwic2luZ2xlXCIpID09IDApIHtcbiBcdFx0c3RhdGljIGNoYXIgYnVmW01BWF9IRFJfTEVOICsgUEFZTE9BRF9MRU5dO1xuQEAgLTE3NjgsNiArMTg3OSwyNiBAQCBzdGF0aWMgdm9pZCBncm9fcmVjZWl2ZXIodm9pZClcbiBcdFx0cHJpbnRmKFwibGFzdCBzZWdtZW50IHNlbnQgaW5kaXZpZHVhbGx5OiBcIik7XG4gXHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDMpO1xuIFxuK1x0LyogYmlnIHRjcCBzdWItdGVzdHMgKi9cbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfZGF0YV9zYW1lXCIpID09IDApIHtcbitcdFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICsgY2FsY19tc3MoKTtcbitcdFx0cHJpbnRmKFwiZGF0YSBwYWNrZXRzIG9mIHNhbWUgc2l6ZSBwYXN0IElQX01BWFBBQ0tFVDogXCIpO1xuK1x0XHRjaGVja19yZWN2X3BrdHMocnhmZCwgY29ycmVjdF9wYXlsb2FkLCAxKTtcbitcdH0gZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCBcImJpZ190Y3BfZGF0YV9scmdfc21sXCIpID09IDApIHtcbitcdFx0Y29ycmVjdF9wYXlsb2FkWzBdID0gYmlnX3RjcF9maWxsX2xlbigpICsgY2FsY19tc3MoKSAvIDI7XG4rXHRcdHByaW50ZihcInNtYWxsZXIgbGFzdCBwYWNrZXQgcGFzdCBJUF9NQVhQQUNLRVQ6IFwiKTtcbitcdFx0Y2hlY2tfcmVjdl9wa3RzKHJ4ZmQsIGNvcnJlY3RfcGF5bG9hZCwgMSk7XG4rXHR9IGVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgXCJiaWdfdGNwX3RjcF9zZXFcIikgPT0gMCkge1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSAoYmlnX3RjcF9maWxsX2NudCgpICsgMSkgKiBjYWxjX21zcygpO1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMV0gPSBjYWxjX21zcygpO1xuK1x0XHRwcmludGYoXCJhbGlhc2VkIHNlcSBwYXN0IElQX01BWFBBQ0tFVCBkb2Vzbid0IGNvYWxlc2NlOiBcIik7XG4rXHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpO1xuK1x0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwiYmlnX3RjcF9sYXJnZV9tYXhcIikgPT0gMCkge1xuK1x0XHRjb3JyZWN0X3BheWxvYWRbMF0gPSBiaWdfdGNwX2xhcmdlX2NudCgpICogY2FsY19tc3MoKTtcbitcdFx0Y29ycmVjdF9wYXlsb2FkWzFdID0gY2FsY19tc3MoKTtcbitcdFx0cHJpbnRmKFwic2hvdWxkbid0IGNvYWxlc2NlIHBhc3QgZ3JvX21heF9zaXplOiBcIik7XG4rXHRcdGNoZWNrX3JlY3ZfcGt0cyhyeGZkLCBjb3JyZWN0X3BheWxvYWQsIDIpO1xuK1xuIFx0LyogbWFjaGluZXJ5IHN1Yi10ZXN0cyAqL1xuIFx0fSBlbHNlIGlmIChzdHJjbXAodGVzdG5hbWUsIFwic2luZ2xlXCIpID09IDApIHtcbiBcdFx0cHJpbnRmKFwic2luZ2xlIGRhdGEgcGFja2V0OiBcIik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjowODo0My4yNjcyMTQ4MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NTUzODUxODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGRpZmYgYWZmZWN0cyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvZ3JvX2xpYi5weWAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCAqb25seSogdGhlc2UgZmlsZXMgYXJlIG1vZGlmaWVkLCBhbmQgSSdkIHR5cGljYWxseSB1c2UgYGdpdCBsb2dgIG9yIGBnaXQgc3RhdHVzYCBmb3IgdGhhdC4gVGhlbiBJIHJlbWVtYmVyIHRoZSBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3IgdGhpcyBzY2VuYXJpbyDigJMgdG8gY2hlY2sgaWYgYW55IGtlcm5lbCBmaWxlcyBhcmUgYWZmZWN0ZWQuIFRoZSBwcm9tcHQgc2hvd3MgdGhlIGZ1bGwgY29tbWl0IGRpZmYsIGNvbmZpcm1pbmcgb25seSB0aG9zZSB0d28gZmlsZXMuIEdvb2QuXG5cblRoZXNlIGZpbGVzIGFyZSBsb2NhdGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLCBjbGVhcmx5IHVzZXItc3BhY2Ugc2VsZi10ZXN0cyBmb3IgbmV0d29yay1yZWxhdGVkIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGZ1bmN0aW9uYWxpdHkuIFRoZXkgKmRvbid0KiBidWlsZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgbW9kdWxlcy4gTm93LCBJIGhhdmUgdG8gYXBwbHkgdGhlIGxvZ2ljIGJhc2VkIG9uIFNlY3Rpb24gMiBvZiB0aGUgZGlyZWN0aW9ucy5cblxuVGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYzogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzLi4uXCIgYW5kIG9uZSBvZiB0aG9zZSBjYXRlZ29yaWVzIGV4cGxpY2l0bHkgaW5jbHVkZXMgXCJVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiIFRoYXQncyBleGFjdGx5IHdoYXQgd2UgaGF2ZSBoZXJlLiBUaGVzZSBzZWxmLXRlc3RzIGZhbGwgc3F1YXJlbHkgaW50byB0aGF0IGNhdGVnb3J5LlxuXG5TbywgYFdvcnRoRnV6emluZ2AgaGFzIHRvIGJlIGBmYWxzZWAuIFRoZXJlJ3Mgbm8ga2VybmVsIGNvZGUgYmVpbmcgbW9kaWZpZWQsIG5vIG5lZWQgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBhbmQgbm8gc3BlY2lmaWMgc3ltYm9scyB0byBmb2N1cyBvbi4gQmFzZWQgb24gdGhlIGRvY3VtZW50YXRpb24sIHRoaXMgbWVhbnM6XG5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKGVtcHR5IGxpc3QpXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QpXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCAoc3BlY2lmaWNhbGx5IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5YCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmNgKS4gTm8ga2VybmVsLXNwYWNlIGNvZGUsIHZtbGludXgsIG9yIGtlcm5lbCBtb2R1bGVzIGFyZSBtb2RpZmllZC5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuXG5JIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHJlcXVpcmVkIGZvcm1hdCBmb3IgYHNldC1yZXN1bHRzYCwgYW5kIGV2ZXJ5dGhpbmcgc2VlbXMgY29ycmVjdC4gSSdtIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0MywiT3V0cHV0VG9rZW5zIjoxMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjowODo0OC44MjEwNjk1OTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ncm9fbGliLnB5IGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL2dyby5jKSBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8gKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2dyb19saWIucHkgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvZ3JvLmMpIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNjowODo0OC44MjEwOTE2MTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflownvxnp[1] Phase: Running StartedAt: 2026-09-12 06:09:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownvxnp[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-12 06:09:00 +0000 UTC FinishedAt: 2026-09-12 06:09: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,}