Name: series-workflow2pmbf Phase: Succeeded StartedAt: 2026-09-08 00:39:16 +0000 UTC FinishedAt: 2026-09-08 02:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[0] Phase: Succeeded StartedAt: 2026-09-08 00:39:16 +0000 UTC FinishedAt: 2026-09-08 01:11:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 00:39:16 +0000 UTC FinishedAt: 2026-09-08 01:11:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_RTL8152", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_RTL8152", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "cb82df5a-5b45-4608-b201-419a7333b5ff" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "generic_ocp_read", "generic_ocp_write", "pla_ocp_read", "pla_ocp_write", "usb_ocp_write", "rtl8152_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9SVEw4MTUyJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19vY3BfcmVhZCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX29jcF93cml0ZSYjMzQ7LAogICAgJiMzNDtwbGFfb2NwX3JlYWQmIzM0OywKICAgICYjMzQ7cGxhX29jcF93cml0ZSYjMzQ7LAogICAgJiMzNDt1c2Jfb2NwX3dyaXRlJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nIG9mIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgKGBkcml2ZXJzL25ldC91c2IvcjgxNTIuY2ApLCByZXBsYWNpbmcgcmVkdW5kYW50IGBpZiAoc2l6ZSBcdTAwM2UgbGltaXQpYCBicmFuY2hpbmcgd2l0aCBgbWluKHNpemUsIGxpbWl0KWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIGFsdGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGxlbmd0aHMgb3IgY29weSBib3VuZGFyaWVzLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgYW5kIGRvZXMgbm90IGNyZWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1ZmZlci9tZW1vcnkgc2FmZXR5IGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWdpc3RlciBjaHVuayBsb29wIGNhbGN1bGF0aW9ucyBpbiBnZW5lcmljX29jcF9yZWFkKCkgYW5kIGdlbmVyaWNfb2NwX3dyaXRlKCkgd2l0aGluIHRoZSBSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBVU0IgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC91c2IvcjgxNTIuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIGFuZCBVU0IgcmF3IGdhZGdldCBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2VkOTA4OWI4Y2UwYTNhZTYzMDJiNTRlYjJkZWZiNTQyMTBiZmU3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDE6MTA6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuaW5kZXggZjYxNjg2NDMzMDMxYy4uYWYzZDdkY2IyZjE0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuQEAgLTE0MzIsMjQgJiM0MzsxNDMyLDE1IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuIFx0d2hpbGUgKHNpemUpIHtcbi1cdFx0aWYgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4tXHRcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0YnJlYWs7XG4tXG4tXHRcdFx0aW5kZXggJiM0Mzs9IGxpbWl0O1xuLVx0XHRcdGRhdGEgJiM0Mzs9IGxpbWl0O1xuLVx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdHUxNiBuID0gbWluKHNpemUsIGxpbWl0KTtcbiBcbi1cdFx0XHRpbmRleCAmIzQzOz0gc2l6ZTtcbi1cdFx0XHRkYXRhICYjNDM7PSBzaXplO1xuLVx0XHRcdHNpemUgPSAwO1xuJiM0MztcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIG4sIGRhdGEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuJiM0MztcbiYjNDM7XHRcdGluZGV4ICYjNDM7PSBuO1xuJiM0MztcdFx0ZGF0YSAmIzQzOz0gbjtcbiYjNDM7XHRcdHNpemUgLT0gbjtcbiBcdH1cbiBcbiBcdGlmIChyZXQgPT0gLUVOT0RFVilcbkBAIC0xNDk5LDI4ICYjNDM7MTQ5MCwxNiBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbixcbiBcdFx0XHRzaXplIC09IDQ7XG4gXG4gXHRcdHdoaWxlIChzaXplKSB7XG4tXHRcdFx0aWYgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIGxpbWl0LCBkYXRhKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuLVxuLVx0XHRcdFx0aW5kZXggJiM0Mzs9IGxpbWl0O1xuLVx0XHRcdFx0ZGF0YSAmIzQzOz0gbGltaXQ7XG4tXHRcdFx0XHRzaXplIC09IGxpbWl0O1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIHNpemUsIGRhdGEpO1xuLVx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdFx0Z290byBlcnJvcjE7XG4tXG4tXHRcdFx0XHRpbmRleCAmIzQzOz0gc2l6ZTtcbi1cdFx0XHRcdGRhdGEgJiM0Mzs9IHNpemU7XG4tXHRcdFx0XHRzaXplID0gMDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiYjNDM7XHRcdFx0dTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuJiM0MztcdFx0XHRcdFx0ICAgIG4sIGRhdGEpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyb3IxO1xuJiM0MztcbiYjNDM7XHRcdFx0aW5kZXggJiM0Mzs9IG47XG4mIzQzO1x0XHRcdGRhdGEgJiM0Mzs9IG47XG4mIzQzO1x0XHRcdHNpemUgLT0gbjtcbiBcdFx0fVxuIFxuIFx0XHQvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfUlRMODE1MiYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX0RSSVZFUlMmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmVyaWNfb2NwX3JlYWQmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19vY3Bfd3JpdGUmIzM0OywKICAgICYjMzQ7cGxhX29jcF9yZWFkJiMzNDssCiAgICAmIzM0O3BsYV9vY3Bfd3JpdGUmIzM0OywKICAgICYjMzQ7dXNiX29jcF93cml0ZSYjMzQ7LAogICAgJiMzNDtydGw4MTUyX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVnaXN0ZXIgY2h1bmsgbG9vcCBjYWxjdWxhdGlvbnMgaW4gZ2VuZXJpY19vY3BfcmVhZCgpIGFuZCBnZW5lcmljX29jcF93cml0ZSgpIHdpdGhpbiB0aGUgUmVhbHRlayBSVEw4MTUyL1JUTDgxNTMgVVNCIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMpLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiBhbmQgVVNCIHJhdyBnYWRnZXQgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNlZDkwODliOGNlMGEzYWU2MzAyYjU0ZWIyZGVmYjU0MjEwYmZlNzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAxOjEwOjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwppbmRleCBmNjE2ODY0MzMwMzFjLi5hZjNkN2RjYjJmMTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwpAQCAtMTQzMiwyNCAmIzQzOzE0MzIsMTUgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsCiAJCXJldHVybiAtRVBFUk07CiAKIAl3aGlsZSAoc2l6ZSkgewotCQlpZiAoc2l6ZSAmZ3Q7IGxpbWl0KSB7Ci0JCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpOwotCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJYnJlYWs7Ci0KLQkJCWluZGV4ICYjNDM7PSBsaW1pdDsKLQkJCWRhdGEgJiM0Mzs9IGxpbWl0OwotCQkJc2l6ZSAtPSBsaW1pdDsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBzaXplLCBkYXRhKTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCWJyZWFrOwomIzQzOwkJdTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpOwogCi0JCQlpbmRleCAmIzQzOz0gc2l6ZTsKLQkJCWRhdGEgJiM0Mzs9IHNpemU7Ci0JCQlzaXplID0gMDsKJiM0MzsJCXJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQogCQkJYnJlYWs7Ci0JCX0KJiM0MzsKJiM0MzsJCWluZGV4ICYjNDM7PSBuOwomIzQzOwkJZGF0YSAmIzQzOz0gbjsKJiM0MzsJCXNpemUgLT0gbjsKIAl9CiAKIAlpZiAocmV0ID09IC1FTk9ERVYpCkBAIC0xNDk5LDI4ICYjNDM7MTQ5MCwxNiBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwKIAkJCXNpemUgLT0gNDsKIAogCQl3aGlsZSAoc2l6ZSkgewotCQkJaWYgKHNpemUgJmd0OyBsaW1pdCkgewotCQkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LAotCQkJCQkJICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELAotCQkJCQkJICAgIGxpbWl0LCBkYXRhKTsKLQkJCQlpZiAocmV0ICZsdDsgMCkKLQkJCQkJZ290byBlcnJvcjE7Ci0KLQkJCQlpbmRleCAmIzQzOz0gbGltaXQ7Ci0JCQkJZGF0YSAmIzQzOz0gbGltaXQ7Ci0JCQkJc2l6ZSAtPSBsaW1pdDsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsCi0JCQkJCQkgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsCi0JCQkJCQkgICAgc2l6ZSwgZGF0YSk7Ci0JCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJCWdvdG8gZXJyb3IxOwotCi0JCQkJaW5kZXggJiM0Mzs9IHNpemU7Ci0JCQkJZGF0YSAmIzQzOz0gc2l6ZTsKLQkJCQlzaXplID0gMDsKLQkJCQlicmVhazsKLQkJCX0KJiM0MzsJCQl1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7CiYjNDM7CiYjNDM7CQkJcmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELAomIzQzOwkJCQkJICAgIG4sIGRhdGEpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycm9yMTsKJiM0MzsKJiM0MzsJCQlpbmRleCAmIzQzOz0gbjsKJiM0MzsJCQlkYXRhICYjNDM7PSBuOwomIzQzOwkJCXNpemUgLT0gbjsKIAkJfQogCiAJCS8qIFNldCB0aGUgbGFzdCBEV09SRCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJldmlld2luZyB0aGUgcjgxNTIuYyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIHJlbGV2YW50IHRvIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSBmdW5jdGlvbnMgY2hhbmdlZCwgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBhcmUgdGhlIGZvY3VzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLCB3aGljaCB3b3VsZCBiZSByZWxldmFudCBzaW5jZSB3ZSBoYXZlIHN5emthbGxlciYjMzk7cyBVU0IgUmF3IEdhZGdldCBjYXBhYmlsaXRpZXMgYW5kIGdlbmVyYWwgVVNCIG5ldHdvcmtpbmcgZnV6emluZyB0byBjb25zaWRlci4KClRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgYHI4MTUyLmNgLCBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBhbmQgaG93IGl0JiMzOTtzIGNhbGxlZC4gVGhpcyBtZWFucyBjaGVja2luZyBpdHMgS2NvbmZpZyBlbnRyaWVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGRyaXZlciBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdGFyZ2V0ZWQgYnkgb3VyIGN1cnJlbnQgZnV6emluZyBzZXR1cC4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBlZmZpY2llbnRseSBnYXRoZXIgdGhpcyBpbmZvcm1hdGlvbi4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIG1vZGlmaWNhdGlvbiBpbnRyb2R1Y2VzIGFueSBuZXcgVVNCIGludGVyZmFjZXMgb3IgYmVoYXZpb3VycyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgYW5kIGZ1enplZCBlZmZlY3RpdmVseSB3aXRoaW4gb3VyIGN1cnJlbnQgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfUlRMODE1MiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz04OD1jb25maWcgVVNCX1JUTDgxNTBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy05OC1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjk5OmNvbmZpZyBVU0JfUlRMODE1MlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTAwLVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw4MTUyL1JUTDgxNTMgQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIFVTQiBOZXR3b3JraW5nIERyaXZlciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBVU0IgbmV0d29ya2luZyBkcml2ZXIgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5OS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCBhIHdob2xlIGJ1bmNoIG9mIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvbywgZGV0YWlsaW5nIHdoaWNoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoaXMgVVNCIG5ldHdvcmtpbmcgc3VwcG9ydCBiZWNvbWVzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIHNlZSBpZiBpdCBkZXBlbmRzIG9uIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGRyaXZlcnMsIG5ldHdvcmtpbmcgc3RhY2sgZmVhdHVyZXMsIG9yIHBlcmhhcHMgZXZlbiBvdGhlciBVU0ItcmVsYXRlZCBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgd2hlcmUgSSBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBJIG5lZWQgdG8gY2hlY2sgd2hlbiBJJiMzOTttIGRlYnVnZ2luZyBhIGNvbmZpZ3VyYXRpb24gaXNzdWUuIFRoaXMgbGluZSBpcyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcbiAgOTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDk3Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGw4MTUwLlxuICA5ODpcdFxuICA5OTpcdGNvbmZpZyBVU0JfUlRMODE1MlxuIDEwMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw4MTUyL1JUTDgxNTMgQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4gMTAxOlx0XHRzZWxlY3QgTUlJXG4gMTAyOlx0XHRzZWxlY3QgUEhZTElCXG4gMTAzOlx0XHRzZWxlY3QgQ1JDMzJcbiAxMDQ6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuIDEwNTpcdFx0aGVscFxuIDEwNjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODE1MiBiYXNlZCBVU0IgMi4wXG4gMTA3Olx0XHQgIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVycyBhbmQgUlRMODE1MyBiYXNlZCBVU0IgMy4wIDEwLzEwMC8xMDAwXG4gMTA4Olx0XHQgIEV0aGVybmV0IGFkYXB0ZXJzLlxuIDEwOTpcdFxuIDExMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxMTE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHI4MTUyLlxuIDExMjpcdFxuIDExMzpcdGNvbmZpZyBVU0JfTEFONzhYWFxuIDExNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIExBTjc4WFggQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4gMTE1Olx0XHRzZWxlY3QgTUlJXG4gMTE2Olx0XHRzZWxlY3QgUEhZTElOS1xuIDExNzpcdFx0c2VsZWN0IE1JQ1JPQ0hJUF9QSFlcbiAxMTg6XHRcdHNlbGVjdCBDUkMzMlxuIDExOTpcdFx0aW1wbHkgTkVUX1NFTEZURVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBTcGFjZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYFVTQl9SVEw4MTUyYCBkcml2ZXIgbGl2ZXMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoYXQgS2NvbmZpZyBmb3IgdGhlIHN1cnJvdW5kaW5nIG1lbnUgZW50cmllcy4gSSYjMzk7bSB0aGlua2luZywgaW4gdGVybXMgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRyZWUsIGl0JiMzOTtzIHByb2JhYmx5IGdyb3VwZWQgdW5kZXIgc29tZXRoaW5nIGxpa2UgYFVTQl9ORVRfRFJJVkVSU2Agb3IgYSBzaW1pbGFyIGJyb2FkZXIgY2F0ZWdvcnkgZm9yIFVTQiBuZXR3b3JrIGFkYXB0ZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoaXMgc3BlY2lmaWMgZHJpdmVyIHRvIHRoZSByZXN0IG9mIHRoZSBVU0IgbmV0d29yayBzdWJzeXN0ZW0sIG9yIG90aGVyIHNpbWlsYXIgZHJpdmVycy4gSSBuZWVkIHRvIGVuc3VyZSBpdCYjMzk7cyBub3Qgb3JwaGFuZWQuIFRoZSAqS2NvbmZpZyogZmlsZSBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb21tZW50IFwmIzM0O0hvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuICAgNjpcdFx0ZGVwZW5kcyBvbiAhVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xuICAgOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIE5ldHdvcmsgQWRhcHRlcnNcJiMzNDtcbiAgMTA6XHRcdGRlZmF1bHQgVVNCIGlmIFVTQlxuICAxMTpcdFx0ZGVwZW5kcyBvbiBVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAxMjpcdFxuICAxMzpcdGlmIFVTQl9ORVRfRFJJVkVSU1xuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBVU0JfQ0FUQ1xuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IENSQzMyXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XG4gIDIwOlx0XHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XG4gIDIxOlx0XHQgIEJlbGtpbiBGNVUwMTFcbiAgMjI6XHRcdCAgQmVsa2luIEY1VTExMVxuICAyMzpcdFx0ICBDQVRDIE5ldE1hdGVcbiAgMjQ6XHRcdCAgQ0FUQyBOZXRNYXRlIElJXG4gIDI1Olx0XHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xuICAyNjpcdFxuICAyNzpcdFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxuICAyODpcdFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXG4gIDI5Olx0XHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDMyOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjYXRjLlxuICAzMzpcdFxuICAzNDpcdGNvbmZpZyBVU0JfS0FXRVRIXG4gIDM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMzY6XHRcdGhlbHBcbiAgMzc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIG9ubHlcbiAgMzg6XHRcdCAgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBLTFNJIEtMNUtVU0IxMDFCIGNoaXBzZXQ6XG4gIDM5Olx0XHQgIDNDb20gM0MxOTI1MFxuICA0MDpcdFx0ICBBRFMgVVNCLTEwQlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDAyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBSODE1MiBEcml2ZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDE0MDAgdG8gMTU1MC4gVGhhdCBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBzZXQgb2YgaW50ZXJhY3Rpb25zLCBhbmQgZ2l2ZW4gdGhlIGNvbnRleHQgb2Ygd2hhdCBJJiMzOTttIHdvcmtpbmcgb24sIEkgc3VzcGVjdCB0aGUgaXNzdWUgbWlnaHQgYmUgY29uY2VudHJhdGVkIHRoZXJlLiBJJiMzOTtsbCBzdGFydCBieSByZXZpZXdpbmcgdGhvc2UgbGluZXMgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBvcnRpb24gb2YgdGhlIGRyaXZlciBvcGVyYXRlcy4gSG9wZWZ1bGx5LCB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBpcyBldmlkZW50IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQyMDpcdHtcbjE0MjE6XHRcdHUxNiBsaW1pdCA9IDY0O1xuMTQyMjpcdFx0aW50IHJldCA9IDA7XG4xNDIzOlx0XG4xNDI0Olx0XHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFx1MDAyNnRwLVx1MDAzZWZsYWdzKSlcbjE0MjU6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xNDI2Olx0XG4xNDI3Olx0XHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xuMTQyODpcdFx0aWYgKChzaXplIFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXHUwMDI2IDMpIHx8ICFkYXRhKVxuMTQyOTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQzMDpcdFxuMTQzMTpcdFx0aWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4xNDMyOlx0XHRcdHJldHVybiAtRVBFUk07XG4xNDMzOlx0XG4xNDM0Olx0XHR3aGlsZSAoc2l6ZSkge1xuMTQzNTpcdFx0XHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XG4xNDM2Olx0XG4xNDM3Olx0XHRcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcbjE0Mzg6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Mzk6XHRcdFx0XHRicmVhaztcbjE0NDA6XHRcbjE0NDE6XHRcdFx0aW5kZXggJiM0Mzs9IG47XG4xNDQyOlx0XHRcdGRhdGEgJiM0Mzs9IG47XG4xNDQzOlx0XHRcdHNpemUgLT0gbjtcbjE0NDQ6XHRcdH1cbjE0NDU6XHRcbjE0NDY6XHRcdGlmIChyZXQgPT0gLUVOT0RFVilcbjE0NDc6XHRcdFx0cnRsX3NldF91bnBsdWcodHApO1xuMTQ0ODpcdFxuMTQ0OTpcdFx0cmV0dXJuIHJldDtcbjE0NTA6XHR9XG4xNDUxOlx0XG4xNDUyOlx0c3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXG4xNDUzOlx0XHRcdFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXG4xNDU0Olx0e1xuMTQ1NTpcdFx0aW50IHJldDtcbjE0NTY6XHRcdHUxNiBieXRlZW5fc3RhcnQsIGJ5dGVlbl9lbmQsIGJ5ZW47XG4xNDU3Olx0XHR1MTYgbGltaXQgPSA1MTI7XG4xNDU4Olx0XG4xNDU5Olx0XHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFx1MDAyNnRwLVx1MDAzZWZsYWdzKSlcbjE0NjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xNDYxOlx0XG4xNDYyOlx0XHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xuMTQ2MzpcdFx0aWYgKChzaXplIFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXHUwMDI2IDMpIHx8ICFkYXRhKVxuMTQ2NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ2NTpcdFxuMTQ2NjpcdFx0aWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4xNDY3Olx0XHRcdHJldHVybiAtRVBFUk07XG4xNDY4Olx0XG4xNDY5Olx0XHRieXRlZW5fc3RhcnQgPSBieXRlZW4gXHUwMDI2IEJZVEVfRU5fU1RBUlRfTUFTSztcbjE0NzA6XHRcdGJ5dGVlbl9lbmQgPSBieXRlZW4gXHUwMDI2IEJZVEVfRU5fRU5EX01BU0s7XG4xNDcxOlx0XG4xNDcyOlx0XHRieWVuID0gYnl0ZWVuX3N0YXJ0IHwgKGJ5dGVlbl9zdGFydCBcdTAwM2NcdTAwM2MgNCk7XG4xNDczOlx0XG4xNDc0Olx0XHQvKiBTcGxpdCB0aGUgZmlyc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cbjE0NzU6XHRcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpIHtcbjE0NzY6XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBieWVuLCA0LCBkYXRhKTtcbjE0Nzc6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Nzg6XHRcdFx0XHRnb3RvIGVycm9yMTtcbjE0Nzk6XHRcbjE0ODA6XHRcdFx0aW5kZXggJiM0Mzs9IDQ7XG4xNDgxOlx0XHRcdGRhdGEgJiM0Mzs9IDQ7XG4xNDgyOlx0XHRcdHNpemUgLT0gNDtcbjE0ODM6XHRcdH1cbjE0ODQ6XHRcbjE0ODU6XHRcdGlmIChzaXplKSB7XG4xNDg2Olx0XHRcdGJ5ZW4gPSBieXRlZW5fZW5kIHwgKGJ5dGVlbl9lbmQgXHUwMDNlXHUwMDNlIDQpO1xuMTQ4NzpcdFxuMTQ4ODpcdFx0XHQvKiBTcGxpdCB0aGUgbGFzdCBEV09SRCBpZiB0aGUgYnl0ZV9lbiBpcyBub3QgMHhmZiAqL1xuMTQ4OTpcdFx0XHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxuMTQ5MDpcdFx0XHRcdHNpemUgLT0gNDtcbjE0OTE6XHRcbjE0OTI6XHRcdFx0d2hpbGUgKHNpemUpIHtcbjE0OTM6XHRcdFx0XHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XG4xNDk0Olx0XG4xNDk1Olx0XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuMTQ5NjpcdFx0XHRcdFx0XHQgICAgbiwgZGF0YSk7XG4xNDk3Olx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0OTg6XHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuMTQ5OTpcdFxuMTUwMDpcdFx0XHRcdGluZGV4ICYjNDM7PSBuO1xuMTUwMTpcdFx0XHRcdGRhdGEgJiM0Mzs9IG47XG4xNTAyOlx0XHRcdFx0c2l6ZSAtPSBuO1xuMTUwMzpcdFx0XHR9XG4xNTA0Olx0XG4xNTA1Olx0XHRcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xuMTUwNjpcdFx0XHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxuMTUwNzpcdFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XG4xNTA4Olx0XHR9XG4xNTA5Olx0XG4xNTEwOlx0ZXJyb3IxOlxuMTUxMTpcdFx0aWYgKHJldCA9PSAtRU5PREVWKVxuMTUxMjpcdFx0XHRydGxfc2V0X3VucGx1Zyh0cCk7XG4xNTEzOlx0XG4xNTE0Olx0XHRyZXR1cm4gcmV0O1xuMTUxNTpcdH1cbjE1MTY6XHRcbjE1MTc6XHRzdGF0aWMgaW5saW5lXG4xNTE4Olx0aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuMTUxOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAzMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDkxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBhbmdsZS4gVGhlIHBhdGNoIGZvY3VzZXMgb24gb3B0aW1pemluZyB0aGUgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIHJlZmFjdG9yaW5nIG9mIHRoZSBsb29wIGxvZ2ljIHVzaW5nIGBtaW4oKWAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYGlmL2Vsc2VgIGJyYW5jaGluZy4gVGhlIG9sZCBjb2RlIHdhczoKCmBgYGMKd2hpbGUgKHNpemUpIHsKICAgIGlmIChzaXplICZndDsgbGltaXQpIHsKICAgICAgICByZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpOwogICAgICAgIGlmIChyZXQgJmx0OyAwKQogICAgICAgICAgICBicmVhazsKICAgICAgICBpbmRleCAmIzQzOz0gbGltaXQ7CiAgICAgICAgZGF0YSAmIzQzOz0gbGltaXQ7CiAgICAgICAgc2l6ZSAtPSBsaW1pdDsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpOwogICAgICAgIGlmIChyZXQgJmx0OyAwKQogICAgICAgICAgICBicmVhazsKICAgICAgICBpbmRleCAmIzQzOz0gc2l6ZTsKICAgICAgICBkYXRhICYjNDM7PSBzaXplOwogICAgICAgIHNpemUgPSAwOwogICAgICAgIGJyZWFrOwogICAgfQp9CmBgYAoKTm93IGl0JiMzOTtzOgoKYGBgYwp3aGlsZSAoc2l6ZSkgewogICAgdTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpOwogICAgcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIG4sIGRhdGEpOwogICAgaWYgKHJldCAmbHQ7IDApCiAgICAgICAgYnJlYWs7CiAgICBpbmRleCAmIzQzOz0gbjsKICAgIGRhdGEgJiM0Mzs9IG47CiAgICBzaXplIC09IG47Cn0KYGBgCgpUaGUgc2FtZSByZWZhY3RvcmluZyBpcyBwcmVzZW50IGZvciB0aGUgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbiwgcmVwbGFjaW5nIGBzZXRfcmVnaXN0ZXJzYCBhbmQgYGdvdG8gZXJyb3IxYC4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIGZ1enppbmcgc2NlbmFyaW8uIFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgVVNCX1JUTDgxNTJgIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIHRhcmdldCBmb3IgZnV6emluZy4gVVNCIGRyaXZlcnMsIGluIGdlbmVyYWwsIGFyZSBpbmNyZWRpYmx5IHZ1bG5lcmFibGUgdG8gZnV6emluZyBhcyB0aGV5IGFyZSByZWFjaGFibGUgd2l0aCBzeXprYWxsZXImIzM5O3MgVVNCIFJhdyBHYWRnZXQsIFVTQiBlbXVsYXRpb24sIG9yIGR1bW15X2hjZC4gVGhpcyBkcml2ZXIgaXMgc3RhbmRhcmQsIHJlYWNoYWJsZSwgYW5kIGtub3duIHRvIGJlIGZ1enplZC4KClRoaXMgcmVmYWN0b3JpbmcgdG91Y2hlcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBkcml2ZXIuIFNvLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHZ1bG5lcmFiaWxpdHkgYW5hbHlzaXMsIHRoaXMgbXVzdCBiZSBmdXp6ZWQuIFJlZ2FyZGxlc3Mgb2YgdGhlICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBvciAmIzM0O3JlZmFjdG9yaW5nJiMzNDsgY2xhaW1zLCBhbnkgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSBjb2RlIHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIHRoZSBjb25maWd1cmF0aW9uLiBXZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIGBVU0JfUlRMODE1MmAuIFdlIGtub3cgYFVTQl9SVEw4MTUyYCBkZXBlbmRzIG9uIGBVU0JfTkVUX0RSSVZFUlNgLCBhbmQgYFVTQl9ORVRfRFJJVkVSU2AgZGVwZW5kcyBvbiBgVVNCICZhbXA7JmFtcDsgTkVUYC4gVGhlcmVmb3JlLCB0aGUgbWluaW1hbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyB3b3VsZCBpbmNsdWRlIGBVU0JfUlRMODE1MmAsIGBVU0JfTkVUX0RSSVZFUlNgLCBhbmQgYFVTQmAuCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgY2FsbCBwYXRocyB0byBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHVzZXMgb2YgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiBgcjgxNTIuY2AgdG8gaWRlbnRpZnkgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX29jcF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDEyPXN0YXRpYyB2b2lkIHJ0bF9zZXRfdW5wbHVnKHN0cnVjdCByODE1MiAqdHApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQxNy1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0MTg6c3RhdGljIGludCBnZW5lcmljX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDE5LVx0XHRcdCAgICB2b2lkICpkYXRhLCB1MTYgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDUxLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQ1MjpzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NTMtXHRcdFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUxOD1pbnQgcGxhX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTE5LXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjA6XHRyZXR1cm4gZ2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTIxLX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTI0PWludCBwbGFfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTI1LXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjY6XHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTI3LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTMwPWludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTMxLXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MzI6XHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTMzLX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTM1PXN0YXRpYyB1MzIgb2NwX3JlYWRfZHdvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTM4LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUzOTpcdGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplb2YoZGF0YSksIFx1MDAyNmRhdGEsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU0MC1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTQ0PXN0YXRpYyB2b2lkIG9jcF93cml0ZV9kd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTQ3LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU0ODpcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgQllURV9FTl9EV09SRCwgc2l6ZW9mKHRtcCksIFx1MDAyNnRtcCwgdHlwZSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTQ5LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTUxPXN0YXRpYyB1MTYgb2NwX3JlYWRfd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NjAtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTYxOlx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUgfCBieWVuKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NjItXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU3MD1zdGF0aWMgdm9pZCBvY3Bfd3JpdGVfd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTg3LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU4ODpcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnllbiwgc2l6ZW9mKHRtcCksIFx1MDAyNnRtcCwgdHlwZSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTg5LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTkxPXN0YXRpYyB1OCBvY3BfcmVhZF9ieXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU5OC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1OTk6XHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKHRtcCksIFx1MDAyNnRtcCwgdHlwZSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNjAwLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE2MDg9c3RhdGljIHZvaWQgb2NwX3dyaXRlX2J5dGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYyNS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE2MjY6XHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIGJ5ZW4sIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYyNy19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NDUwNT1zdGF0aWMgdm9pZCBydGxfY2xlYXJfYnAoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNDU0My1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjQ1NDQ6XHRnZW5lcmljX29jcF93cml0ZSh0cCwgUExBX0JQXzAsIEJZVEVfRU5fRFdPUkQsIGJwX251bSBcdTAwM2NcdTAwM2MgMSwgYnAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNDU0NS1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01Mjk4PXN0YXRpYyB2b2lkIHJ0bF9yYW1fY29kZV9zcGVlZF91cChzdHJ1Y3QgcjgxNTIgKnRwLCBzdHJ1Y3QgZndfcGh5X3NwZWVkX3VwICpwaHksIGJvb2wgd2FpdClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01MzI4LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTMyOTpcdFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUocGh5LVx1MDAzZWZ3X3JlZyksIDB4ZmYsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01MzMwLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTU0Nzk9c3RhdGljIHZvaWQgcnRsODE1Ml9md19tYWNfYXBwbHkoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X21hYyAqbWFjKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MTgtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTE5Olx0aWYgKGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBfX2xlMTZfdG9fY3B1KG1hYy1cdTAwM2Vmd19yZWcpLCAweGZmLCBsZW5ndGgsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTIwLVx0XHRcdCAgICAgIGRhdGEsIHR5cGUpIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUyOC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjU1Mjk6XHRpZiAoZ2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUobWFjLVx1MDAzZWJwX3N0YXJ0KSwgQllURV9FTl9EV09SRCxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MzAtXHRcdFx0ICAgICAgQUxJR04oX19sZTE2X3RvX2NwdShtYWMtXHUwMDNlYnBfbnVtKSBcdTAwM2NcdTAwM2MgMSwgNCksXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTA3Mj1zdGF0aWMgdm9pZCBydGw4MTUyX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTA4MC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjkwODE6XHRnZW5lcmljX29jcF9yZWFkKHRwLCBQTEFfVEFMTFlDTlQsIHNpemVvZih0YWxseSksIFx1MDAyNnRhbGx5LCBNQ1VfVFlQRV9QTEEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTA4Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHI4MTUyIERyaXZlciBGb2N1cyBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgRm9jdXNTeW1ib2xzYCBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRob3NlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMuIEkga25vdyB0aG9zZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyByZXNpZGluZyBpbiBgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGV5LCBvciBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZW0sIGdvb2QgY2FuZGlkYXRlcyBmb3IgZm9jdXMgc3ltYm9scz8gSSBzaG91bGQgZXhwYW5kIG15IHNjb3BlIGZyb20gdGhvc2UgdHdvIGFuZCBpbmNsdWRlIGBwbGFfb2NwX3JlYWRgLCBgcGxhX29jcF93cml0ZWAsIGFuZCBgdXNiX29jcF93cml0ZWAsIHNpbmNlIHRoZXkgbGlrZWx5IHJlbGF0ZSBzb21laG93LgoKQmV5b25kIHRob3NlLCBJIG5lZWQgdG8gbG9vayBmb3IgdHlwaWNhbCBkcml2ZXIgZnVuY3Rpb25zIHdpdGhpbiBgcjgxNTIuY2AsIHN1Y2ggYXMgdGhvc2UgcmVsYXRlZCB0byBwcm9iaW5nLCByZWNlaXZlLCBvciB0cmFuc21pdCBvcGVyYXRpb25zLiBTdGFuZGFyZCBkcml2ZXIgZnVuY3Rpb25zIGFyZSBhIGdvb2QgYmV0LiBTbywgbGV0JiMzOTtzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgcHJvYmUgZnVuY3Rpb24gaW4gYHI4MTUyLmNgLiBUaGF0JiMzOTtzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgZHJpdmVyIGluaXRpYWxpemVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTUyX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTAwODI9c3RhdGljIGJvb2wgcnRsODE1Ml9zdXBwb3J0c19sZW5vdm9fbWFjcGFzc3RocnUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAxMDctXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDEwODpzdGF0aWMgaW50IHJ0bDgxNTJfcHJvYmVfb25jZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMTA5LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwgdTggdmVyc2lvbilcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDMyNC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwMzI1OnN0YXRpYyBpbnQgcnRsODE1Ml9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMzI2LVx0XHRcdCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAzNDItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEw4MTUyX1BST0JFX1RSSUVTOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTAzNDM6XHRcdHJldCA9IHJ0bDgxNTJfcHJvYmVfb25jZShpbnRmLCBpZCwgdmVyc2lvbik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDM0NC1cdFx0aWYgKHJldCAhPSAtRUFHQUlOKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEwNDIxPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBydGw4MTUyX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDQyMy1cdC5pZF90YWJsZSA9XHRydGw4MTUyX3RhYmxlLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTA0MjQ6XHQucHJvYmUgPVx0cnRsODE1Ml9wcm9iZSxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwNDI1LVx0LmRpc2Nvbm5lY3QgPVx0cnRsODE1Ml9kaXNjb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3OQoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA0NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgcjgxNTIuYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBzZWUgdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gYHI4MTUyLmNgIGFyZSBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAsIGFsb25nc2lkZSB0aGVpciBjYWxsZXJzL2VudHJ5IHBvaW50czogYHJ0bDgxNTJfcHJvYmVgLCBgcGxhX29jcF9yZWFkYCwgYHBsYV9vY3Bfd3JpdGVgLCBhbmQgYHVzYl9vY3Bfd3JpdGVgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBhcmUgc3RhdGljIG9yIHBvdGVudGlhbGx5IGlubGluZWQuIEdpdmVuIHRoZWlyIGxlbmd0aHMgKDMwIGFuZCA2MCBsaW5lcyByZXNwZWN0aXZlbHkpIGFuZCBtdWx0aXBsZSBjYWxscyB3aXRoaW4gdGhlIGRyaXZlciwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGV5IGFyZSBub3Qgc3RhdGljIG9yIGlubGluZWQuIFRoaXMgbWFrZXMgdGhlbSBpZGVhbCBmb2N1cyBzeW1ib2xzLiBBZGRpbmcgdGhlIG90aGVycyBwcm92aWRlcyBnb29kIGNvdmVyYWdlLgoKTmV4dCwgdGhlIGBFbmFibGVDb25maWdzYC4gV2UgaGF2ZSBgVVNCX1JUTDgxNTJgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGFuZCBgTkVUYC4gTWFrZXMgc2Vuc2UsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBVU0IgZXRoZXJuZXQgYWRhcHRlci4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gZXZlcnl0aGluZy4gRmlyc3QsICppcyBpdCB3b3J0aCBmdXp6aW5nPyogWWVzLCBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggYWx0ZXJzIHJlZ2lzdGVyIHJlYWQvd3JpdGUgbG9naWMsIHdoaWNoIGlzIGEgY2xhc3NpYyB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAocmF3IGdhZGdldCBvciBzeXprYWxsZXIpIG1ha2VzIGl0IHZlcnkgcHJvbWlzaW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgYSAmIzM0O1dvcnRoRnV6emluZyA9IHRydWUmIzM0OyBzY2VuYXJpby4KClNvLCBpbiBzdW1tYXJ5OgoKMS4gICoqV29ydGhGdXp6aW5nOiBZZXMuKiogUmVnaXN0ZXIgcmVhZC93cml0ZSBtb2RpZmljYXRpb24gaW4gYHI4MTUyLmNgLCByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24uCjIuICAqKkZvY3VzU3ltYm9sczoqKiBgZ2VuZXJpY19vY3BfcmVhZGAsIGBnZW5lcmljX29jcF93cml0ZWAsIGBwbGFfb2NwX3JlYWRgLCBgcGxhX29jcF93cml0ZWAsIGB1c2Jfb2NwX3dyaXRlYCwgYW5kIGBydGw4MTUyX3Byb2JlYC4KMy4gICoqRW5hYmxlQ29uZmlnczoqKiBgVVNCX1JUTDgxNTJgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGBORVRgLgo0LiAgKipSZWFzb25pbmc6KiogVGhlIG1vZGlmaWNhdGlvbiB0YXJnZXRzIHJlZ2lzdGVyIGFjY2VzcyB3aXRoaW4gYSBVU0IgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZ29vZCBmdXp6aW5nIHRhcmdldCBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWwgZm9yIGV4cGxvaXRpbmcgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyB0aGF0IGRvIG5vdCBtZWV0IHNhbml0aXphdGlvbiBjcml0ZXJpYS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBXZSBoYXZlIG91ciBwbGFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1JUTDgxNTImIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX29jcF9yZWFkJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfb2NwX3dyaXRlJiMzNDssCiAgICAmIzM0O3BsYV9vY3BfcmVhZCYjMzQ7LAogICAgJiMzNDtwbGFfb2NwX3dyaXRlJiMzNDssCiAgICAmIzM0O3VzYl9vY3Bfd3JpdGUmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHJlZ2lzdGVyIGNodW5rIGxvb3AgY2FsY3VsYXRpb25zIGluIGdlbmVyaWNfb2NwX3JlYWQoKSBhbmQgZ2VuZXJpY19vY3Bfd3JpdGUoKSB3aXRoaW4gdGhlIFJlYWx0ZWsgUlRMODE1Mi9SVEw4MTUzIFVTQiBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gYW5kIFVTQiByYXcgZ2FkZ2V0IGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9SVEw4MTUyJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19vY3BfcmVhZCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX29jcF93cml0ZSYjMzQ7LAogICAgJiMzNDtwbGFfb2NwX3JlYWQmIzM0OywKICAgICYjMzQ7cGxhX29jcF93cml0ZSYjMzQ7LAogICAgJiMzNDt1c2Jfb2NwX3dyaXRlJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWdpc3RlciBjaHVuayBsb29wIGNhbGN1bGF0aW9ucyBpbiBnZW5lcmljX29jcF9yZWFkKCkgYW5kIGdlbmVyaWNfb2NwX3dyaXRlKCkgd2l0aGluIHRoZSBSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBVU0IgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC91c2IvcjgxNTIuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIGFuZCBVU0IgcmF3IGdhZGdldCBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBjbGVhbiByZWZhY3RvcmluZyBvZiB0aGUgY2h1bmtpbmcgbG9vcHMgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIChgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgKSwgcmVwbGFjaW5nIHJlZHVuZGFudCBgaWYgKHNpemUgXHUwMDNlIGxpbWl0KWAgYnJhbmNoaW5nIHdpdGggYG1pbihzaXplLCBsaW1pdClgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBhbHRlciB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBsZW5ndGhzIG9yIGNvcHkgYm91bmRhcmllcywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBjcmVhdGUgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBidWZmZXIvbWVtb3J5IHNhZmV0eSBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZWQ5MDg5YjhjZTBhM2FlNjMwMmI1NGViMmRlZmI1NDIxMGJmZTc1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwMToxMDozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jIGIvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMKaW5kZXggZjYxNjg2NDMzMDMxYy4uYWYzZDdkY2IyZjE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMKQEAgLTE0MzIsMjQgJiM0MzsxNDMyLDE1IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLAogCQlyZXR1cm4gLUVQRVJNOwogCiAJd2hpbGUgKHNpemUpIHsKLQkJaWYgKHNpemUgJmd0OyBsaW1pdCkgewotCQkJcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCWJyZWFrOwotCi0JCQlpbmRleCAmIzQzOz0gbGltaXQ7Ci0JCQlkYXRhICYjNDM7PSBsaW1pdDsKLQkJCXNpemUgLT0gbGltaXQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7Ci0JCQlpZiAocmV0ICZsdDsgMCkKLQkJCQlicmVhazsKJiM0MzsJCXUxNiBuID0gbWluKHNpemUsIGxpbWl0KTsKIAotCQkJaW5kZXggJiM0Mzs9IHNpemU7Ci0JCQlkYXRhICYjNDM7PSBzaXplOwotCQkJc2l6ZSA9IDA7CiYjNDM7CQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbiwgZGF0YSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKIAkJCWJyZWFrOwotCQl9CiYjNDM7CiYjNDM7CQlpbmRleCAmIzQzOz0gbjsKJiM0MzsJCWRhdGEgJiM0Mzs9IG47CiYjNDM7CQlzaXplIC09IG47CiAJfQogCiAJaWYgKHJldCA9PSAtRU5PREVWKQpAQCAtMTQ5OSwyOCAmIzQzOzE0OTAsMTYgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sCiAJCQlzaXplIC09IDQ7CiAKIAkJd2hpbGUgKHNpemUpIHsKLQkJCWlmIChzaXplICZndDsgbGltaXQpIHsKLQkJCQlyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwKLQkJCQkJCSAgICB0eXBlIHwgQllURV9FTl9EV09SRCwKLQkJCQkJCSAgICBsaW1pdCwgZGF0YSk7Ci0JCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJCWdvdG8gZXJyb3IxOwotCi0JCQkJaW5kZXggJiM0Mzs9IGxpbWl0OwotCQkJCWRhdGEgJiM0Mzs9IGxpbWl0OwotCQkJCXNpemUgLT0gbGltaXQ7Ci0JCQl9IGVsc2UgewotCQkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LAotCQkJCQkJICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELAotCQkJCQkJICAgIHNpemUsIGRhdGEpOwotCQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCQlnb3RvIGVycm9yMTsKLQotCQkJCWluZGV4ICYjNDM7PSBzaXplOwotCQkJCWRhdGEgJiM0Mzs9IHNpemU7Ci0JCQkJc2l6ZSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9CiYjNDM7CQkJdTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpOwomIzQzOwomIzQzOwkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCwKJiM0MzsJCQkJCSAgICBuLCBkYXRhKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJvcjE7CiYjNDM7CiYjNDM7CQkJaW5kZXggJiM0Mzs9IG47CiYjNDM7CQkJZGF0YSAmIzQzOz0gbjsKJiM0MzsJCQlzaXplIC09IG47CiAJCX0KIAogCQkvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKlJlZmFjdG9yaW5nIHRoZSBSODE1MiBPQ1AgQWNjZXNzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgY2xlYW5pbmcgdXAgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMgaW4gdGhlIGByODE1Mi5jYCBkcml2ZXIuIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyByZWR1Y2luZyBjb21wbGV4aXR5IGlzIGFsd2F5cyB3ZWxjb21lLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgKmhvdyogaXQmIzM5O3Mgc2ltcGxpZmllZC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAxNDMyIGFuZCAxNDk5LiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aG9zZSBzZWN0aW9ucywgb3IgbWF5YmUgYGdyZXBwZXJgIGlmIEkgd2FudCB0byBxdWlja2x5IHNlZSB0aGUgY29udGV4dCBhcm91bmQgdGhvc2UgbGluZXMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gR290dGEgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVlbiBzdHJlYW1saW5lZC4gV2hhdCB3YXMgaW5lZmZpY2llbnQgb3IgcmVkdW5kYW50IGJlZm9yZT8gSG9wZWZ1bGx5LCB0aGUgcGF0Y2ggbm90ZXMgcHJvdmlkZSBzb21lIGluc2lnaHRzIHRvby4gQnV0IEkgbmVlZCB0byB2ZXJpZnkgZXZlcnl0aGluZyB3aXRoIG15IG93biBleWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQyMDpcdHtcbjE0MjE6XHRcdHUxNiBsaW1pdCA9IDY0O1xuMTQyMjpcdFx0aW50IHJldCA9IDA7XG4xNDIzOlx0XG4xNDI0Olx0XHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFx1MDAyNnRwLVx1MDAzZWZsYWdzKSlcbjE0MjU6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xNDI2Olx0XG4xNDI3Olx0XHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xuMTQyODpcdFx0aWYgKChzaXplIFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXHUwMDI2IDMpIHx8ICFkYXRhKVxuMTQyOTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQzMDpcdFxuMTQzMTpcdFx0aWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4xNDMyOlx0XHRcdHJldHVybiAtRVBFUk07XG4xNDMzOlx0XG4xNDM0Olx0XHR3aGlsZSAoc2l6ZSkge1xuMTQzNTpcdFx0XHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XG4xNDM2Olx0XG4xNDM3Olx0XHRcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcbjE0Mzg6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Mzk6XHRcdFx0XHRicmVhaztcbjE0NDA6XHRcbjE0NDE6XHRcdFx0aW5kZXggJiM0Mzs9IG47XG4xNDQyOlx0XHRcdGRhdGEgJiM0Mzs9IG47XG4xNDQzOlx0XHRcdHNpemUgLT0gbjtcbjE0NDQ6XHRcdH1cbjE0NDU6XHRcbjE0NDY6XHRcdGlmIChyZXQgPT0gLUVOT0RFVilcbjE0NDc6XHRcdFx0cnRsX3NldF91bnBsdWcodHApO1xuMTQ0ODpcdFxuMTQ0OTpcdFx0cmV0dXJuIHJldDtcbjE0NTA6XHR9XG4xNDUxOlx0XG4xNDUyOlx0c3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXG4xNDUzOlx0XHRcdFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXG4xNDU0Olx0e1xuMTQ1NTpcdFx0aW50IHJldDtcbjE0NTY6XHRcdHUxNiBieXRlZW5fc3RhcnQsIGJ5dGVlbl9lbmQsIGJ5ZW47XG4xNDU3Olx0XHR1MTYgbGltaXQgPSA1MTI7XG4xNDU4Olx0XG4xNDU5Olx0XHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFx1MDAyNnRwLVx1MDAzZWZsYWdzKSlcbjE0NjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xNDYxOlx0XG4xNDYyOlx0XHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xuMTQ2MzpcdFx0aWYgKChzaXplIFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXHUwMDI2IDMpIHx8ICFkYXRhKVxuMTQ2NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ2NTpcdFxuMTQ2NjpcdFx0aWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4xNDY3Olx0XHRcdHJldHVybiAtRVBFUk07XG4xNDY4Olx0XG4xNDY5Olx0XHRieXRlZW5fc3RhcnQgPSBieXRlZW4gXHUwMDI2IEJZVEVfRU5fU1RBUlRfTUFTSztcbjE0NzA6XHRcdGJ5dGVlbl9lbmQgPSBieXRlZW4gXHUwMDI2IEJZVEVfRU5fRU5EX01BU0s7XG4xNDcxOlx0XG4xNDcyOlx0XHRieWVuID0gYnl0ZWVuX3N0YXJ0IHwgKGJ5dGVlbl9zdGFydCBcdTAwM2NcdTAwM2MgNCk7XG4xNDczOlx0XG4xNDc0Olx0XHQvKiBTcGxpdCB0aGUgZmlyc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cbjE0NzU6XHRcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpIHtcbjE0NzY6XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBieWVuLCA0LCBkYXRhKTtcbjE0Nzc6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Nzg6XHRcdFx0XHRnb3RvIGVycm9yMTtcbjE0Nzk6XHRcbjE0ODA6XHRcdFx0aW5kZXggJiM0Mzs9IDQ7XG4xNDgxOlx0XHRcdGRhdGEgJiM0Mzs9IDQ7XG4xNDgyOlx0XHRcdHNpemUgLT0gNDtcbjE0ODM6XHRcdH1cbjE0ODQ6XHRcbjE0ODU6XHRcdGlmIChzaXplKSB7XG4xNDg2Olx0XHRcdGJ5ZW4gPSBieXRlZW5fZW5kIHwgKGJ5dGVlbl9lbmQgXHUwMDNlXHUwMDNlIDQpO1xuMTQ4NzpcdFxuMTQ4ODpcdFx0XHQvKiBTcGxpdCB0aGUgbGFzdCBEV09SRCBpZiB0aGUgYnl0ZV9lbiBpcyBub3QgMHhmZiAqL1xuMTQ4OTpcdFx0XHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxuMTQ5MDpcdFx0XHRcdHNpemUgLT0gNDtcbjE0OTE6XHRcbjE0OTI6XHRcdFx0d2hpbGUgKHNpemUpIHtcbjE0OTM6XHRcdFx0XHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XG4xNDk0Olx0XG4xNDk1Olx0XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuMTQ5NjpcdFx0XHRcdFx0XHQgICAgbiwgZGF0YSk7XG4xNDk3Olx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0OTg6XHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuMTQ5OTpcdFxuMTUwMDpcdFx0XHRcdGluZGV4ICYjNDM7PSBuO1xuMTUwMTpcdFx0XHRcdGRhdGEgJiM0Mzs9IG47XG4xNTAyOlx0XHRcdFx0c2l6ZSAtPSBuO1xuMTUwMzpcdFx0XHR9XG4xNTA0Olx0XG4xNTA1Olx0XHRcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xuMTUwNjpcdFx0XHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxuMTUwNzpcdFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XG4xNTA4Olx0XHR9XG4xNTA5Olx0XG4xNTEwOlx0ZXJyb3IxOlxuMTUxMTpcdFx0aWYgKHJldCA9PSAtRU5PREVWKVxuMTUxMjpcdFx0XHRydGxfc2V0X3VucGx1Zyh0cCk7XG4xNTEzOlx0XG4xNTE0Olx0XHRyZXR1cm4gcmV0O1xuMTUxNTpcdH1cbjE1MTY6XHRcbjE1MTc6XHRzdGF0aWMgaW5saW5lXG4xNTE4Olx0aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuMTUxOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1MAoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiA0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBSZWZhY3RvcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZy4gVGhlIGNvZGUmIzM5O3MgY2hhbmdlZCB0byByZXBsYWNlIHRoZSByZWR1bmRhbnQgYGlmL2Vsc2VgIGxvZ2ljIHdpdGggYSBtb3JlIGVsZWdhbnQgdXNlIG9mIGBtaW4oc2l6ZSwgbGltaXQpYC4gVGhpcyBpcyBhIGNsYXNzaWMgc2ltcGxpZmljYXRpb24gc3RyYXRlZ3kuIEJ5IHVzaW5nIGB1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7YCB3ZSBlc3NlbnRpYWxseSBzdHJlYW1saW5lIHRoZSBjaHVua2luZyBsb2dpYyBpbiBib3RoIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYC4gSWYgYHNpemVgIGlzIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byBgbGltaXRgLCBgbWluYCBlZmZlY3RpdmVseSByZXR1cm5zIGBzaXplYCBzbyB0aGF0IHRoZSBvcmlnaW5hbCBiZWhhdmlvciBpcyBwcmVzZXJ2ZWQuIFRoZSBzdWJzZXF1ZW50IGNhbGxzIHRvIGBnZXRfcmVnaXN0ZXJzYC9gc2V0X3JlZ2lzdGVyc2AgY29ycmVjdGx5IHVzZSBgbmAgKGVmZmVjdGl2ZWx5IGBzaXplYCBpbiB0aGlzIGNhc2UpLCBhbmQgdGhlIGFkanVzdG1lbnRzIHRvIGBpbmRleGAsIGBkYXRhYCwgYW5kIGBzaXplYCBhcmUgY2xlYW4uIFdoZW4gYHNpemUgJmx0Oz0gbGltaXRgLCBhZnRlciB0aGUgcmVnaXN0ZXIgYWNjZXNzLCB0aGUgbG9vcCB3aWxsIHRlcm1pbmF0ZS4KCkNydWNpYWxseSwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHJlZmFjdG9yaW5nIGlzICpmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCogYW5kLCBtb3N0IGltcG9ydGFudGx5LCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnktcmVsYXRlZCBpc3N1ZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCB1c2FnZSBvZiBtZW1vcnkuIERvZXMgaXQgYWx0ZXIgaG93IG1lbW9yeSBpcyAqaW5pdGlhbGl6ZWQqPyBObywgdGhlIGV4aXN0aW5nIGJ1ZmZlcnMgYXJlIHVuY2hhbmdlZCwgdGhlIGFtb3VudCBvZiBkYXRhIHJlYWQvd3JpdHRlbiBpcyB0aGUgc2FtZSwgYW5kIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIGhvdyBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZC4gTm8gaW1wYWN0IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgZmllbGRzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLiBOb3RoaW5nIHRoZXJlLgoKTGV0JiMzOTtzIHJ1biB0aHJvdWdoIGEgcXVpY2sgY2hlY2tsaXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZToKKiAgIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlPyBOb3BlLgoqICAgS01TQU4tc3BlY2lmaWMgaXNzdWVzPyBOb25lIGFwcGFyZW50LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgZmFsc2UuIFRoaXMgaXMgYSBjbGVhbiByZWZhY3RvciB0aGF0JiMzOTtzIHB1cmVseSBhYm91dCBvcHRpbWl6aW5nIHRoZSBleGlzdGluZyBsb2dpYyBhbmQgZWxpbWluYXRpbmcgcmVkdW5kYW50IGNvZGUgcGF0aHMuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSByZWZhY3RvcmluZyB1c2VzIGBtaW5gIHRvIHNpbXBsaWZ5IGxvb3AgbG9naWMgd2l0aGluIGByODE1Mi5jYCYjMzk7cyBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgZnVuY3Rpb25zLiBUaGUgcmVmYWN0b3JpbmcgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSwgdG91Y2gsIG9yIGFsdGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjayB2YXJpYWJsZXMsIHN0cnVjdCBpbml0aWFsaXphdGlvbiwgb3IgbWVtb3J5IGNvcGllcyB0byB1c2VyIHNwYWNlLiBGdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBjbGVhbiByZWZhY3RvcmluZyBvZiB0aGUgY2h1bmtpbmcgbG9vcHMgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIChgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgKSwgcmVwbGFjaW5nIHJlZHVuZGFudCBgaWYgKHNpemUgXHUwMDNlIGxpbWl0KWAgYnJhbmNoaW5nIHdpdGggYG1pbihzaXplLCBsaW1pdClgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBhbHRlciB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBsZW5ndGhzIG9yIGNvcHkgYm91bmRhcmllcywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBjcmVhdGUgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBidWZmZXIvbWVtb3J5IHNhZmV0eSBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nIG9mIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgKGBkcml2ZXJzL25ldC91c2IvcjgxNTIuY2ApLCByZXBsYWNpbmcgcmVkdW5kYW50IGBpZiAoc2l6ZSBcdTAwM2UgbGltaXQpYCBicmFuY2hpbmcgd2l0aCBgbWluKHNpemUsIGxpbWl0KWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIGFsdGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGxlbmd0aHMgb3IgY29weSBib3VuZGFyaWVzLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgYW5kIGRvZXMgbm90IGNyZWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1ZmZlci9tZW1vcnkgc2FmZXR5IGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MTA6MzguMjgxMTE1MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM2NjEzMTgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfUlRMODE1MlwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmVyaWNfb2NwX3JlYWRcIixcbiAgICBcImdlbmVyaWNfb2NwX3dyaXRlXCIsXG4gICAgXCJwbGFfb2NwX3JlYWRcIixcbiAgICBcInBsYV9vY3Bfd3JpdGVcIixcbiAgICBcInVzYl9vY3Bfd3JpdGVcIixcbiAgICBcInJ0bDgxNTJfcHJvYmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgY2xlYW4gcmVmYWN0b3Jpbmcgb2YgdGhlIGNodW5raW5nIGxvb3BzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCAoYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCksIHJlcGxhY2luZyByZWR1bmRhbnQgYGlmIChzaXplIFxcdTAwM2UgbGltaXQpYCBicmFuY2hpbmcgd2l0aCBgbWluKHNpemUsIGxpbWl0KWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIGFsdGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGxlbmd0aHMgb3IgY29weSBib3VuZGFyaWVzLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgYW5kIGRvZXMgbm90IGNyZWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1ZmZlci9tZW1vcnkgc2FmZXR5IGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHJlZ2lzdGVyIGNodW5rIGxvb3AgY2FsY3VsYXRpb25zIGluIGdlbmVyaWNfb2NwX3JlYWQoKSBhbmQgZ2VuZXJpY19vY3Bfd3JpdGUoKSB3aXRoaW4gdGhlIFJlYWx0ZWsgUlRMODE1Mi9SVEw4MTUzIFVTQiBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gYW5kIFVTQiByYXcgZ2FkZ2V0IGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjM4LjI4MTEyMDUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkzODk3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZWQ5MDg5YjhjZTBhM2FlNjMwMmI1NGViMmRlZmI1NDIxMGJmZTc1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDE6MTA6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xcbmluZGV4IGY2MTY4NjQzMzAzMWMuLmFmM2Q3ZGNiMmYxNDEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xcbkBAIC0xNDMyLDI0ICsxNDMyLDE1IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXG4gXFx0d2hpbGUgKHNpemUpIHtcXG4tXFx0XFx0aWYgKHNpemUgXFx1MDAzZSBsaW1pdCkge1xcbi1cXHRcXHRcXHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xcbi1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHRcXHRpbmRleCArPSBsaW1pdDtcXG4tXFx0XFx0XFx0ZGF0YSArPSBsaW1pdDtcXG4tXFx0XFx0XFx0c2l6ZSAtPSBsaW1pdDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xcbi1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHUxNiBuID0gbWluKHNpemUsIGxpbWl0KTtcXG4gXFxuLVxcdFxcdFxcdGluZGV4ICs9IHNpemU7XFxuLVxcdFxcdFxcdGRhdGEgKz0gc2l6ZTtcXG4tXFx0XFx0XFx0c2l6ZSA9IDA7XFxuK1xcdFxcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuK1xcbitcXHRcXHRpbmRleCArPSBuO1xcbitcXHRcXHRkYXRhICs9IG47XFxuK1xcdFxcdHNpemUgLT0gbjtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHJldCA9PSAtRU5PREVWKVxcbkBAIC0xNDk5LDI4ICsxNDkwLDE2IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLFxcbiBcXHRcXHRcXHRzaXplIC09IDQ7XFxuIFxcbiBcXHRcXHR3aGlsZSAoc2l6ZSkge1xcbi1cXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGxpbWl0KSB7XFxuLVxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBsaW1pdCwgZGF0YSk7XFxuLVxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRcXHRnb3RvIGVycm9yMTtcXG4tXFxuLVxcdFxcdFxcdFxcdGluZGV4ICs9IGxpbWl0O1xcbi1cXHRcXHRcXHRcXHRkYXRhICs9IGxpbWl0O1xcbi1cXHRcXHRcXHRcXHRzaXplIC09IGxpbWl0O1xcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZSwgZGF0YSk7XFxuLVxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRcXHRnb3RvIGVycm9yMTtcXG4tXFxuLVxcdFxcdFxcdFxcdGluZGV4ICs9IHNpemU7XFxuLVxcdFxcdFxcdFxcdGRhdGEgKz0gc2l6ZTtcXG4tXFx0XFx0XFx0XFx0c2l6ZSA9IDA7XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHUxNiBuID0gbWluKHNpemUsIGxpbWl0KTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG4sIGRhdGEpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJvcjE7XFxuK1xcbitcXHRcXHRcXHRpbmRleCArPSBuO1xcbitcXHRcXHRcXHRkYXRhICs9IG47XFxuK1xcdFxcdFxcdHNpemUgLT0gbjtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogU2V0IHRoZSBsYXN0IERXT1JEICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjM4Ljg5MTI1MTI5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjgyMDAwNTc1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1JUTDgxNTJcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX29jcF9yZWFkXCIsXG4gICAgXCJnZW5lcmljX29jcF93cml0ZVwiLFxuICAgIFwicGxhX29jcF9yZWFkXCIsXG4gICAgXCJwbGFfb2NwX3dyaXRlXCIsXG4gICAgXCJ1c2Jfb2NwX3dyaXRlXCIsXG4gICAgXCJydGw4MTUyX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWdpc3RlciBjaHVuayBsb29wIGNhbGN1bGF0aW9ucyBpbiBnZW5lcmljX29jcF9yZWFkKCkgYW5kIGdlbmVyaWNfb2NwX3dyaXRlKCkgd2l0aGluIHRoZSBSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBVU0IgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC91c2IvcjgxNTIuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIGFuZCBVU0IgcmF3IGdhZGdldCBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNlZDkwODliOGNlMGEzYWU2MzAyYjU0ZWIyZGVmYjU0MjEwYmZlNzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAxOjEwOjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuaW5kZXggZjYxNjg2NDMzMDMxYy4uYWYzZDdkY2IyZjE0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuQEAgLTE0MzIsMjQgKzE0MzIsMTUgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4gXHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRpbmRleCArPSBsaW1pdDtcbi1cdFx0XHRkYXRhICs9IGxpbWl0O1xuLVx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbitcdFx0dTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpO1xuIFxuLVx0XHRcdGluZGV4ICs9IHNpemU7XG4tXHRcdFx0ZGF0YSArPSBzaXplO1xuLVx0XHRcdHNpemUgPSAwO1xuK1x0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbiwgZGF0YSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcbitcdFx0aW5kZXggKz0gbjtcbitcdFx0ZGF0YSArPSBuO1xuK1x0XHRzaXplIC09IG47XG4gXHR9XG4gXG4gXHRpZiAocmV0ID09IC1FTk9ERVYpXG5AQCAtMTQ5OSwyOCArMTQ5MCwxNiBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbixcbiBcdFx0XHRzaXplIC09IDQ7XG4gXG4gXHRcdHdoaWxlIChzaXplKSB7XG4tXHRcdFx0aWYgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIGxpbWl0LCBkYXRhKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuLVxuLVx0XHRcdFx0aW5kZXggKz0gbGltaXQ7XG4tXHRcdFx0XHRkYXRhICs9IGxpbWl0O1xuLVx0XHRcdFx0c2l6ZSAtPSBsaW1pdDtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsXG4tXHRcdFx0XHRcdFx0ICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuLVx0XHRcdFx0XHRcdCAgICBzaXplLCBkYXRhKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuLVxuLVx0XHRcdFx0aW5kZXggKz0gc2l6ZTtcbi1cdFx0XHRcdGRhdGEgKz0gc2l6ZTtcbi1cdFx0XHRcdHNpemUgPSAwO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuK1x0XHRcdHUxNiBuID0gbWluKHNpemUsIGxpbWl0KTtcbitcbitcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4rXHRcdFx0XHRcdCAgICBuLCBkYXRhKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJvcjE7XG4rXG4rXHRcdFx0aW5kZXggKz0gbjtcbitcdFx0XHRkYXRhICs9IG47XG4rXHRcdFx0c2l6ZSAtPSBuO1xuIFx0XHR9XG4gXG4gXHRcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MTA6MzguODkxMjUyNTg2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIyNjY5NTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgdGhlIHI4MTUyLmMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIHJlbGV2YW50IHRvIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSBmdW5jdGlvbnMgY2hhbmdlZCwgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBhcmUgdGhlIGZvY3VzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLCB3aGljaCB3b3VsZCBiZSByZWxldmFudCBzaW5jZSB3ZSBoYXZlIHN5emthbGxlcidzIFVTQiBSYXcgR2FkZ2V0IGNhcGFiaWxpdGllcyBhbmQgZ2VuZXJhbCBVU0IgbmV0d29ya2luZyBmdXp6aW5nIHRvIGNvbnNpZGVyLlxuXG5UbyBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGByODE1Mi5jYCwgSSdsbCBkaXZlIGludG8gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBhbmQgaG93IGl0J3MgY2FsbGVkLiBUaGlzIG1lYW5zIGNoZWNraW5nIGl0cyBLY29uZmlnIGVudHJpZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZHJpdmVyIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSB0YXJnZXRlZCBieSBvdXIgY3VycmVudCBmdXp6aW5nIHNldHVwLiBJJ2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZWZmaWNpZW50bHkgZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24uIE15IGdvYWwgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhpcyBtb2RpZmljYXRpb24gaW50cm9kdWNlcyBhbnkgbmV3IFVTQiBpbnRlcmZhY2VzIG9yIGJlaGF2aW91cnMgdGhhdCBjb3VsZCBiZSBleHBvc2VkIGFuZCBmdXp6ZWQgZWZmZWN0aXZlbHkgd2l0aGluIG91ciBjdXJyZW50IGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjQ0LjExNzk1MjI4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDA4MTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1JUTDgxNTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTg4PWNvbmZpZyBVU0JfUlRMODE1MFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctOTgtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6OTk6Y29uZmlnIFVTQl9SVEw4MTUyXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTAwLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBCYXNlZCBVU0IgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjQ0LjIwMjA0NDUxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjc4NDcwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIFVTQiBOZXR3b3JraW5nIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIFVTQiBuZXR3b3JraW5nIGRyaXZlciBjb25maWd1cmF0aW9uLiBMZXQncyBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTkuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCBhIHdob2xlIGJ1bmNoIG9mIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvbywgZGV0YWlsaW5nIHdoaWNoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoaXMgVVNCIG5ldHdvcmtpbmcgc3VwcG9ydCBiZWNvbWVzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIHNlZSBpZiBpdCBkZXBlbmRzIG9uIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGRyaXZlcnMsIG5ldHdvcmtpbmcgc3RhY2sgZmVhdHVyZXMsIG9yIHBlcmhhcHMgZXZlbiBvdGhlciBVU0ItcmVsYXRlZCBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgd2hlcmUgSSBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBJIG5lZWQgdG8gY2hlY2sgd2hlbiBJJ20gZGVidWdnaW5nIGEgY29uZmlndXJhdGlvbiBpc3N1ZS4gVGhpcyBsaW5lIGlzIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk2NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjQ2LjQyOTg5NTk2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICA5NzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGw4MTUwLlxcbiAgOTg6XFx0XFxuICA5OTpcXHRjb25maWcgVVNCX1JUTDgxNTJcXG4gMTAwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBCYXNlZCBVU0IgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuIDEwMTpcXHRcXHRzZWxlY3QgTUlJXFxuIDEwMjpcXHRcXHRzZWxlY3QgUEhZTElCXFxuIDEwMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTA0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAxMDU6XFx0XFx0aGVscFxcbiAxMDY6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODE1MiBiYXNlZCBVU0IgMi4wXFxuIDEwNzpcXHRcXHQgIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVycyBhbmQgUlRMODE1MyBiYXNlZCBVU0IgMy4wIDEwLzEwMC8xMDAwXFxuIDEwODpcXHRcXHQgIEV0aGVybmV0IGFkYXB0ZXJzLlxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxMTE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcjgxNTIuXFxuIDExMjpcXHRcXG4gMTEzOlxcdGNvbmZpZyBVU0JfTEFONzhYWFxcbiAxMTQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBMQU43OFhYIEJhc2VkIFVTQiBFdGhlcm5ldCBBZGFwdGVyc1xcXCJcXG4gMTE1OlxcdFxcdHNlbGVjdCBNSUlcXG4gMTE2OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuIDExNzpcXHRcXHRzZWxlY3QgTUlDUk9DSElQX1BIWVxcbiAxMTg6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDExOTpcXHRcXHRpbXBseSBORVRfU0VMRlRFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjQ2LjQzMDAwNjQwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NjQzNjU3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVTQiBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIFNwYWNlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBVU0JfUlRMODE1MmAgZHJpdmVyIGxpdmVzIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBzY2FuIHRoYXQgS2NvbmZpZyBmb3IgdGhlIHN1cnJvdW5kaW5nIG1lbnUgZW50cmllcy4gSSdtIHRoaW5raW5nLCBpbiB0ZXJtcyBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdHJlZSwgaXQncyBwcm9iYWJseSBncm91cGVkIHVuZGVyIHNvbWV0aGluZyBsaWtlIGBVU0JfTkVUX0RSSVZFUlNgIG9yIGEgc2ltaWxhciBicm9hZGVyIGNhdGVnb3J5IGZvciBVU0IgbmV0d29yayBhZGFwdGVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIHNwZWNpZmljIGRyaXZlciB0byB0aGUgcmVzdCBvZiB0aGUgVVNCIG5ldHdvcmsgc3Vic3lzdGVtLCBvciBvdGhlciBzaW1pbGFyIGRyaXZlcnMuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBub3Qgb3JwaGFuZWQuIFRoZSAqS2NvbmZpZyogZmlsZSBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMDo0OS44OTQzNzQ0MjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbW1lbnQgXFxcIkhvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gIVVTQiBcXHUwMDI2XFx1MDAyNiBORVRcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgTmV0d29yayBBZGFwdGVyc1xcXCJcXG4gIDEwOlxcdFxcdGRlZmF1bHQgVVNCIGlmIFVTQlxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIFVTQl9ORVRfRFJJVkVSU1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgVVNCX0NBVENcXG4gIDE2OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XFxuICAyMDpcXHRcXHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XFxuICAyMTpcXHRcXHQgIEJlbGtpbiBGNVUwMTFcXG4gIDIyOlxcdFxcdCAgQmVsa2luIEY1VTExMVxcbiAgMjM6XFx0XFx0ICBDQVRDIE5ldE1hdGVcXG4gIDI0OlxcdFxcdCAgQ0FUQyBOZXRNYXRlIElJXFxuICAyNTpcXHRcXHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsXFxuICAyODpcXHRcXHQgIHR5cGljYWxseSBvbiBldGgwLCBpZiBpdCBpcyB0aGUgb25seSBldGhlcm5ldCBkZXZpY2UsIG9yIHBlcmhhcHMgb25cXG4gIDI5OlxcdFxcdCAgZXRoMSwgaWYgeW91IGhhdmUgYSBQQ0kgb3IgSVNBIGV0aGVybmV0IGNhcmQgaW5zdGFsbGVkLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2F0Yy5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Y29uZmlnIFVTQl9LQVdFVEhcXG4gIDM1OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAzNjpcXHRcXHRoZWxwXFxuICAzNzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBvbmx5XFxuICAzODpcXHRcXHQgIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiB0aGUgS0xTSSBLTDVLVVNCMTAxQiBjaGlwc2V0OlxcbiAgMzk6XFx0XFx0ICAzQ29tIDNDMTkyNTBcXG4gIDQwOlxcdFxcdCAgQURTIFVTQi0xMEJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjQ5Ljg5NDQ1NDkwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NDk4Njg4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgUjgxNTIgRHJpdmVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgMTQwMCB0byAxNTUwLiBUaGF0IHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHNldCBvZiBpbnRlcmFjdGlvbnMsIGFuZCBnaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSB3b3JraW5nIG9uLCBJIHN1c3BlY3QgdGhlIGlzc3VlIG1pZ2h0IGJlIGNvbmNlbnRyYXRlZCB0aGVyZS4gSSdsbCBzdGFydCBieSByZXZpZXdpbmcgdGhvc2UgbGluZXMgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBvcnRpb24gb2YgdGhlIGRyaXZlciBvcGVyYXRlcy4gSG9wZWZ1bGx5LCB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nIGlzIGV2aWRlbnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjUzLjc0NDMyODQ3N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjIzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MjA6XFx0e1xcbjE0MjE6XFx0XFx0dTE2IGxpbWl0ID0gNjQ7XFxuMTQyMjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xNDIzOlxcdFxcbjE0MjQ6XFx0XFx0aWYgKHRlc3RfYml0KFJUTDgxNTJfSU5BQ0NFU1NJQkxFLCBcXHUwMDI2dHAtXFx1MDAzZWZsYWdzKSlcXG4xNDI1OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xcbjE0Mjg6XFx0XFx0aWYgKChzaXplIFxcdTAwMjYgMykgfHwgIXNpemUgfHwgKGluZGV4IFxcdTAwMjYgMykgfHwgIWRhdGEpXFxuMTQyOTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjE0MzA6XFx0XFxuMTQzMTpcXHRcXHRpZiAoKHUzMilpbmRleCArICh1MzIpc2l6ZSBcXHUwMDNlIDB4ZmZmZilcXG4xNDMyOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQzMzpcXHRcXG4xNDM0OlxcdFxcdHdoaWxlIChzaXplKSB7XFxuMTQzNTpcXHRcXHRcXHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XFxuMTQzNjpcXHRcXG4xNDM3OlxcdFxcdFxcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcXG4xNDM4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0Mzk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdFxcdGluZGV4ICs9IG47XFxuMTQ0MjpcXHRcXHRcXHRkYXRhICs9IG47XFxuMTQ0MzpcXHRcXHRcXHRzaXplIC09IG47XFxuMTQ0NDpcXHRcXHR9XFxuMTQ0NTpcXHRcXG4xNDQ2OlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4xNDQ3OlxcdFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4xNDQ4OlxcdFxcbjE0NDk6XFx0XFx0cmV0dXJuIHJldDtcXG4xNDUwOlxcdH1cXG4xNDUxOlxcdFxcbjE0NTI6XFx0c3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXFxuMTQ1MzpcXHRcXHRcXHRcXHQgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCB1MTYgdHlwZSlcXG4xNDU0OlxcdHtcXG4xNDU1OlxcdFxcdGludCByZXQ7XFxuMTQ1NjpcXHRcXHR1MTYgYnl0ZWVuX3N0YXJ0LCBieXRlZW5fZW5kLCBieWVuO1xcbjE0NTc6XFx0XFx0dTE2IGxpbWl0ID0gNTEyO1xcbjE0NTg6XFx0XFxuMTQ1OTpcXHRcXHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFxcdTAwMjZ0cC1cXHUwMDNlZmxhZ3MpKVxcbjE0NjA6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTQ2MTpcXHRcXG4xNDYyOlxcdFxcdC8qIGJvdGggc2l6ZSBhbmQgaW5kaXggbXVzdCBiZSA0IGJ5dGVzIGFsaWduICovXFxuMTQ2MzpcXHRcXHRpZiAoKHNpemUgXFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXFx1MDAyNiAzKSB8fCAhZGF0YSlcXG4xNDY0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdGlmICgodTMyKWluZGV4ICsgKHUzMilzaXplIFxcdTAwM2UgMHhmZmZmKVxcbjE0Njc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xNDY4OlxcdFxcbjE0Njk6XFx0XFx0Ynl0ZWVuX3N0YXJ0ID0gYnl0ZWVuIFxcdTAwMjYgQllURV9FTl9TVEFSVF9NQVNLO1xcbjE0NzA6XFx0XFx0Ynl0ZWVuX2VuZCA9IGJ5dGVlbiBcXHUwMDI2IEJZVEVfRU5fRU5EX01BU0s7XFxuMTQ3MTpcXHRcXG4xNDcyOlxcdFxcdGJ5ZW4gPSBieXRlZW5fc3RhcnQgfCAoYnl0ZWVuX3N0YXJ0IFxcdTAwM2NcXHUwMDNjIDQpO1xcbjE0NzM6XFx0XFxuMTQ3NDpcXHRcXHQvKiBTcGxpdCB0aGUgZmlyc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cXG4xNDc1OlxcdFxcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpIHtcXG4xNDc2OlxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XFxuMTQ3NzpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDc4OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3IxO1xcbjE0Nzk6XFx0XFxuMTQ4MDpcXHRcXHRcXHRpbmRleCArPSA0O1xcbjE0ODE6XFx0XFx0XFx0ZGF0YSArPSA0O1xcbjE0ODI6XFx0XFx0XFx0c2l6ZSAtPSA0O1xcbjE0ODM6XFx0XFx0fVxcbjE0ODQ6XFx0XFxuMTQ4NTpcXHRcXHRpZiAoc2l6ZSkge1xcbjE0ODY6XFx0XFx0XFx0YnllbiA9IGJ5dGVlbl9lbmQgfCAoYnl0ZWVuX2VuZCBcXHUwMDNlXFx1MDAzZSA0KTtcXG4xNDg3OlxcdFxcbjE0ODg6XFx0XFx0XFx0LyogU3BsaXQgdGhlIGxhc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cXG4xNDg5OlxcdFxcdFxcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXFxuMTQ5MDpcXHRcXHRcXHRcXHRzaXplIC09IDQ7XFxuMTQ5MTpcXHRcXG4xNDkyOlxcdFxcdFxcdHdoaWxlIChzaXplKSB7XFxuMTQ5MzpcXHRcXHRcXHRcXHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XFxuMTQ5NDpcXHRcXG4xNDk1OlxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCxcXG4xNDk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBuLCBkYXRhKTtcXG4xNDk3OlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0OTg6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcjE7XFxuMTQ5OTpcXHRcXG4xNTAwOlxcdFxcdFxcdFxcdGluZGV4ICs9IG47XFxuMTUwMTpcXHRcXHRcXHRcXHRkYXRhICs9IG47XFxuMTUwMjpcXHRcXHRcXHRcXHRzaXplIC09IG47XFxuMTUwMzpcXHRcXHRcXHR9XFxuMTUwNDpcXHRcXG4xNTA1OlxcdFxcdFxcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xcbjE1MDY6XFx0XFx0XFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcXG4xNTA3OlxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XFxuMTUwODpcXHRcXHR9XFxuMTUwOTpcXHRcXG4xNTEwOlxcdGVycm9yMTpcXG4xNTExOlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4xNTEyOlxcdFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4xNTEzOlxcdFxcbjE1MTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4xNTE1OlxcdH1cXG4xNTE2OlxcdFxcbjE1MTc6XFx0c3RhdGljIGlubGluZVxcbjE1MTg6XFx0aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbjE1MTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMDo1My43NDQ3NTY3ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYwODg5NTU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgYW5nbGUuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgaXQncyBhIHJlZmFjdG9yaW5nIG9mIHRoZSBsb29wIGxvZ2ljIHVzaW5nIGBtaW4oKWAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYGlmL2Vsc2VgIGJyYW5jaGluZy4gVGhlIG9sZCBjb2RlIHdhczpcblxuYGBgY1xud2hpbGUgKHNpemUpIHtcbiAgICBpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbiAgICAgICAgcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTtcbiAgICAgICAgaWYgKHJldCBcdTAwM2MgMClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBpbmRleCArPSBsaW1pdDtcbiAgICAgICAgZGF0YSArPSBsaW1pdDtcbiAgICAgICAgc2l6ZSAtPSBsaW1pdDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7XG4gICAgICAgIGlmIChyZXQgXHUwMDNjIDApXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgaW5kZXggKz0gc2l6ZTtcbiAgICAgICAgZGF0YSArPSBzaXplO1xuICAgICAgICBzaXplID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxufVxuYGBgXG5cbk5vdyBpdCdzOlxuXG5gYGBjXG53aGlsZSAoc2l6ZSkge1xuICAgIHUxNiBuID0gbWluKHNpemUsIGxpbWl0KTtcbiAgICByZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbiwgZGF0YSk7XG4gICAgaWYgKHJldCBcdTAwM2MgMClcbiAgICAgICAgYnJlYWs7XG4gICAgaW5kZXggKz0gbjtcbiAgICBkYXRhICs9IG47XG4gICAgc2l6ZSAtPSBuO1xufVxuYGBgXG5cblRoZSBzYW1lIHJlZmFjdG9yaW5nIGlzIHByZXNlbnQgZm9yIHRoZSBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9uLCByZXBsYWNpbmcgYHNldF9yZWdpc3RlcnNgIGFuZCBgZ290byBlcnJvcjFgLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBmdXp6aW5nIHNjZW5hcmlvLiBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBgVVNCX1JUTDgxNTJgIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIHRhcmdldCBmb3IgZnV6emluZy4gVVNCIGRyaXZlcnMsIGluIGdlbmVyYWwsIGFyZSBpbmNyZWRpYmx5IHZ1bG5lcmFibGUgdG8gZnV6emluZyBhcyB0aGV5IGFyZSByZWFjaGFibGUgd2l0aCBzeXprYWxsZXIncyBVU0IgUmF3IEdhZGdldCwgVVNCIGVtdWxhdGlvbiwgb3IgZHVtbXlfaGNkLiBUaGlzIGRyaXZlciBpcyBzdGFuZGFyZCwgcmVhY2hhYmxlLCBhbmQga25vd24gdG8gYmUgZnV6emVkLlxuXG5UaGlzIHJlZmFjdG9yaW5nIHRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgZHJpdmVyLiBTbywgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB2dWxuZXJhYmlsaXR5IGFuYWx5c2lzLCB0aGlzIG11c3QgYmUgZnV6emVkLiBSZWdhcmRsZXNzIG9mIHRoZSBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgXCJyZWZhY3RvcmluZ1wiIGNsYWltcywgYW55IG1vZGlmaWNhdGlvbiB0byByZWFjaGFibGUgY29kZSB3YXJyYW50cyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24uIFdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmb3IgYFVTQl9SVEw4MTUyYC4gV2Uga25vdyBgVVNCX1JUTDgxNTJgIGRlcGVuZHMgb24gYFVTQl9ORVRfRFJJVkVSU2AsIGFuZCBgVVNCX05FVF9EUklWRVJTYCBkZXBlbmRzIG9uIGBVU0IgXHUwMDI2XHUwMDI2IE5FVGAuIFRoZXJlZm9yZSwgdGhlIG1pbmltYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgd291bGQgaW5jbHVkZSBgVVNCX1JUTDgxNTJgLCBgVVNCX05FVF9EUklWRVJTYCwgYW5kIGBVU0JgLlxuXG5GaW5hbGx5LCB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgY2FsbCBwYXRocyB0byBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgdXNlcyBvZiB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIGByODE1Mi5jYCB0byBpZGVudGlmeSBlbnRyeSBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMDo1OS4zNTM2NTUwMThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTA5Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmVyaWNfb2NwX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDEyPXN0YXRpYyB2b2lkIHJ0bF9zZXRfdW5wbHVnKHN0cnVjdCByODE1MiAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDE3LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0MTg6c3RhdGljIGludCBnZW5lcmljX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQxOS1cXHRcXHRcXHQgICAgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDUxLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0NTI6c3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQ1My1cXHRcXHRcXHQgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCB1MTYgdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1MTg9aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MTkte1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjA6XFx0cmV0dXJuIGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9QTEEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MjEtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUyND1pbnQgcGxhX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MjUte1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjY6XFx0cmV0dXJuIGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnl0ZWVuLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9QTEEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MjctfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUzMD1pbnQgdXNiX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MzEte1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MzI6XFx0cmV0dXJuIGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnl0ZWVuLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9VU0IpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MzMtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUzNT1zdGF0aWMgdTMyIG9jcF9yZWFkX2R3b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTM4LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1Mzk6XFx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZihkYXRhKSwgXFx1MDAyNmRhdGEsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NDAtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTQ0PXN0YXRpYyB2b2lkIG9jcF93cml0ZV9kd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NDctXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU0ODpcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIEJZVEVfRU5fRFdPUkQsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTQ5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NTE9c3RhdGljIHUxNiBvY3BfcmVhZF93b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTYwLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1NjE6XFx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlIHwgYnllbik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU2Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NzA9c3RhdGljIHZvaWQgb2NwX3dyaXRlX3dvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTg3LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1ODg6XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgXFx1MDAyNnRtcCwgdHlwZSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU4OS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTkxPXN0YXRpYyB1OCBvY3BfcmVhZF9ieXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTk4LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1OTk6XFx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNjAwLVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTYwOD1zdGF0aWMgdm9pZCBvY3Bfd3JpdGVfYnl0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MjUtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTYyNjpcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIGJ5ZW4sIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNjI3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTQ1MDU9c3RhdGljIHZvaWQgcnRsX2NsZWFyX2JwKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNDU0My1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo0NTQ0OlxcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBQTEFfQlBfMCwgQllURV9FTl9EV09SRCwgYnBfbnVtIFxcdTAwM2NcXHUwMDNjIDEsIGJwLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy00NTQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NTI5OD1zdGF0aWMgdm9pZCBydGxfcmFtX2NvZGVfc3BlZWRfdXAoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X3BoeV9zcGVlZF91cCAqcGh5LCBib29sIHdhaXQpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01MzI4LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjUzMjk6XFx0XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUocGh5LVxcdTAwM2Vmd19yZWcpLCAweGZmLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9VU0IpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTUzMzAtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01NDc5PXN0YXRpYyB2b2lkIHJ0bDgxNTJfZndfbWFjX2FwcGx5KHN0cnVjdCByODE1MiAqdHAsIHN0cnVjdCBmd19tYWMgKm1hYylcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MTgtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTUxOTpcXHRpZiAoZ2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUobWFjLVxcdTAwM2Vmd19yZWcpLCAweGZmLCBsZW5ndGgsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUyMC1cXHRcXHRcXHQgICAgICBkYXRhLCB0eXBlKSBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MjgtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTUyOTpcXHRpZiAoZ2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUobWFjLVxcdTAwM2VicF9zdGFydCksIEJZVEVfRU5fRFdPUkQsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUzMC1cXHRcXHRcXHQgICAgICBBTElHTihfX2xlMTZfdG9fY3B1KG1hYy1cXHUwMDNlYnBfbnVtKSBcXHUwMDNjXFx1MDAzYyAxLCA0KSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTkwNzI9c3RhdGljIHZvaWQgcnRsODE1Ml9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTA4MC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo5MDgxOlxcdGdlbmVyaWNfb2NwX3JlYWQodHAsIFBMQV9UQUxMWUNOVCwgc2l6ZW9mKHRhbGx5KSwgXFx1MDAyNnRhbGx5LCBNQ1VfVFlQRV9QTEEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTkwODItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjU5LjQxNTE3MDQyN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTQ0OTMyODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyByODE1MiBEcml2ZXIgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBGb2N1c1N5bWJvbHNgIHNpdHVhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhvc2UgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9ucy4gSSBrbm93IHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIHJlc2lkaW5nIGluIGBkcml2ZXJzL25ldC91c2IvcjgxNTIuY2AuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXksIG9yIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbSwgZ29vZCBjYW5kaWRhdGVzIGZvciBmb2N1cyBzeW1ib2xzPyBJIHNob3VsZCBleHBhbmQgbXkgc2NvcGUgZnJvbSB0aG9zZSB0d28gYW5kIGluY2x1ZGUgYHBsYV9vY3BfcmVhZGAsIGBwbGFfb2NwX3dyaXRlYCwgYW5kIGB1c2Jfb2NwX3dyaXRlYCwgc2luY2UgdGhleSBsaWtlbHkgcmVsYXRlIHNvbWVob3cuXG5cbkJleW9uZCB0aG9zZSwgSSBuZWVkIHRvIGxvb2sgZm9yIHR5cGljYWwgZHJpdmVyIGZ1bmN0aW9ucyB3aXRoaW4gYHI4MTUyLmNgLCBzdWNoIGFzIHRob3NlIHJlbGF0ZWQgdG8gcHJvYmluZywgcmVjZWl2ZSwgb3IgdHJhbnNtaXQgb3BlcmF0aW9ucy4gU3RhbmRhcmQgZHJpdmVyIGZ1bmN0aW9ucyBhcmUgYSBnb29kIGJldC4gU28sIGxldCdzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgcHJvYmUgZnVuY3Rpb24gaW4gYHI4MTUyLmNgLiBUaGF0J3MgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBkcml2ZXIgaW5pdGlhbGl6ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjExOjAxLjk2MDEwNjE4OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwNTIzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRsODE1Ml9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xMDA4Mj1zdGF0aWMgYm9vbCBydGw4MTUyX3N1cHBvcnRzX2xlbm92b19tYWNwYXNzdGhydShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMTA3LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwMTA4OnN0YXRpYyBpbnQgcnRsODE1Ml9wcm9iZV9vbmNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMTA5LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwgdTggdmVyc2lvbilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMzI0LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwMzI1OnN0YXRpYyBpbnQgcnRsODE1Ml9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDMyNi1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAzNDItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJUTDgxNTJfUFJPQkVfVFJJRVM7IGkrKykge1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwMzQzOlxcdFxcdHJldCA9IHJ0bDgxNTJfcHJvYmVfb25jZShpbnRmLCBpZCwgdmVyc2lvbik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAzNDQtXFx0XFx0aWYgKHJldCAhPSAtRUFHQUlOKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTA0MjE9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHJ0bDgxNTJfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTA0MjMtXFx0LmlkX3RhYmxlID1cXHRydGw4MTUyX3RhYmxlLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwNDI0OlxcdC5wcm9iZSA9XFx0cnRsODE1Ml9wcm9iZSxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDQyNS1cXHQuZGlzY29ubmVjdCA9XFx0cnRsODE1Ml9kaXNjb25uZWN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMTowMi4wMTUxNjQ0MzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxNjgzNzM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciByODE1Mi5jKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBzZWUgdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gYHI4MTUyLmNgIGFyZSBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAsIGFsb25nc2lkZSB0aGVpciBjYWxsZXJzL2VudHJ5IHBvaW50czogYHJ0bDgxNTJfcHJvYmVgLCBgcGxhX29jcF9yZWFkYCwgYHBsYV9vY3Bfd3JpdGVgLCBhbmQgYHVzYl9vY3Bfd3JpdGVgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBhcmUgc3RhdGljIG9yIHBvdGVudGlhbGx5IGlubGluZWQuIEdpdmVuIHRoZWlyIGxlbmd0aHMgKDMwIGFuZCA2MCBsaW5lcyByZXNwZWN0aXZlbHkpIGFuZCBtdWx0aXBsZSBjYWxscyB3aXRoaW4gdGhlIGRyaXZlciwgaXQncyBoaWdobHkgbGlrZWx5IHRoZXkgYXJlIG5vdCBzdGF0aWMgb3IgaW5saW5lZC4gVGhpcyBtYWtlcyB0aGVtIGlkZWFsIGZvY3VzIHN5bWJvbHMuIEFkZGluZyB0aGUgb3RoZXJzIHByb3ZpZGVzIGdvb2QgY292ZXJhZ2UuXG5cbk5leHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFdlIGhhdmUgYFVTQl9SVEw4MTUyYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBhbmQgYE5FVGAuIE1ha2VzIHNlbnNlLCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBVU0IgZXRoZXJuZXQgYWRhcHRlci5cblxuTm93LCBsZXQncyBjb25maXJtIGV2ZXJ5dGhpbmcuIEZpcnN0LCAqaXMgaXQgd29ydGggZnV6emluZz8qIFllcywgYWJzb2x1dGVseS4gVGhlIHBhdGNoIGFsdGVycyByZWdpc3RlciByZWFkL3dyaXRlIGxvZ2ljLCB3aGljaCBpcyBhIGNsYXNzaWMgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gKHJhdyBnYWRnZXQgb3Igc3l6a2FsbGVyKSBtYWtlcyBpdCB2ZXJ5IHByb21pc2luZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgXCJXb3J0aEZ1enppbmcgPSB0cnVlXCIgc2NlbmFyaW8uXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4xLiAgKipXb3J0aEZ1enppbmc6IFllcy4qKiBSZWdpc3RlciByZWFkL3dyaXRlIG1vZGlmaWNhdGlvbiBpbiBgcjgxNTIuY2AsIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbi5cbjIuICAqKkZvY3VzU3ltYm9sczoqKiBgZ2VuZXJpY19vY3BfcmVhZGAsIGBnZW5lcmljX29jcF93cml0ZWAsIGBwbGFfb2NwX3JlYWRgLCBgcGxhX29jcF93cml0ZWAsIGB1c2Jfb2NwX3dyaXRlYCwgYW5kIGBydGw4MTUyX3Byb2JlYC5cbjMuICAqKkVuYWJsZUNvbmZpZ3M6KiogYFVTQl9SVEw4MTUyYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBgTkVUYC5cbjQuICAqKlJlYXNvbmluZzoqKiBUaGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgcmVnaXN0ZXIgYWNjZXNzIHdpdGhpbiBhIFVTQiBldGhlcm5ldCBkcml2ZXIuIFRoaXMgaXMgYSBnb29kIGZ1enppbmcgdGFyZ2V0IGJlY2F1c2Ugb2YgdGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGluZyByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIHRoYXQgZG8gbm90IG1lZXQgc2FuaXRpemF0aW9uIGNyaXRlcmlhLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2UgaGF2ZSBvdXIgcGxhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzksIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjExOjA2LjkzMjAwNDg1NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTMwMDgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1JUTDgxNTJcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX29jcF9yZWFkXCIsXG4gICAgXCJnZW5lcmljX29jcF93cml0ZVwiLFxuICAgIFwicGxhX29jcF9yZWFkXCIsXG4gICAgXCJwbGFfb2NwX3dyaXRlXCIsXG4gICAgXCJ1c2Jfb2NwX3dyaXRlXCIsXG4gICAgXCJydGw4MTUyX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWdpc3RlciBjaHVuayBsb29wIGNhbGN1bGF0aW9ucyBpbiBnZW5lcmljX29jcF9yZWFkKCkgYW5kIGdlbmVyaWNfb2NwX3dyaXRlKCkgd2l0aGluIHRoZSBSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBVU0IgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC91c2IvcjgxNTIuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIGFuZCBVU0IgcmF3IGdhZGdldCBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9SVEw4MTUyXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19vY3BfcmVhZFwiLFxuICAgIFwiZ2VuZXJpY19vY3Bfd3JpdGVcIixcbiAgICBcInBsYV9vY3BfcmVhZFwiLFxuICAgIFwicGxhX29jcF93cml0ZVwiLFxuICAgIFwidXNiX29jcF93cml0ZVwiLFxuICAgIFwicnRsODE1Ml9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVnaXN0ZXIgY2h1bmsgbG9vcCBjYWxjdWxhdGlvbnMgaW4gZ2VuZXJpY19vY3BfcmVhZCgpIGFuZCBnZW5lcmljX29jcF93cml0ZSgpIHdpdGhpbiB0aGUgUmVhbHRlayBSVEw4MTUyL1JUTDgxNTMgVVNCIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMpLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiBhbmQgVVNCIHJhdyBnYWRnZXQgaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MTE6MDcuMDkxMzEyMTcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU1NTkyMDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjExOjA3LjA5MTg3ODQxMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyNTU1MzQ4OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nIG9mIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgKGBkcml2ZXJzL25ldC91c2IvcjgxNTIuY2ApLCByZXBsYWNpbmcgcmVkdW5kYW50IGBpZiAoc2l6ZSBcXHUwMDNlIGxpbWl0KWAgYnJhbmNoaW5nIHdpdGggYG1pbihzaXplLCBsaW1pdClgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBhbHRlciB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBsZW5ndGhzIG9yIGNvcHkgYm91bmRhcmllcywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBjcmVhdGUgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBidWZmZXIvbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2VkOTA4OWI4Y2UwYTNhZTYzMDJiNTRlYjJkZWZiNTQyMTBiZmU3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDE6MTA6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5pbmRleCBmNjE2ODY0MzMwMzFjLi5hZjNkN2RjYjJmMTQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5AQCAtMTQzMiwyNCArMTQzMiwxNSBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbiBcdHdoaWxlIChzaXplKSB7XG4tXHRcdGlmIChzaXplIFx1MDAzZSBsaW1pdCkge1xuLVx0XHRcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBsaW1pdCwgZGF0YSk7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdGluZGV4ICs9IGxpbWl0O1xuLVx0XHRcdGRhdGEgKz0gbGltaXQ7XG4tXHRcdFx0c2l6ZSAtPSBsaW1pdDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XG4gXG4tXHRcdFx0aW5kZXggKz0gc2l6ZTtcbi1cdFx0XHRkYXRhICs9IHNpemU7XG4tXHRcdFx0c2l6ZSA9IDA7XG4rXHRcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuK1xuK1x0XHRpbmRleCArPSBuO1xuK1x0XHRkYXRhICs9IG47XG4rXHRcdHNpemUgLT0gbjtcbiBcdH1cbiBcbiBcdGlmIChyZXQgPT0gLUVOT0RFVilcbkBAIC0xNDk5LDI4ICsxNDkwLDE2IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLFxuIFx0XHRcdHNpemUgLT0gNDtcbiBcbiBcdFx0d2hpbGUgKHNpemUpIHtcbi1cdFx0XHRpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbi1cdFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LFxuLVx0XHRcdFx0XHRcdCAgICB0eXBlIHwgQllURV9FTl9EV09SRCxcbi1cdFx0XHRcdFx0XHQgICAgbGltaXQsIGRhdGEpO1xuLVx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdFx0Z290byBlcnJvcjE7XG4tXG4tXHRcdFx0XHRpbmRleCArPSBsaW1pdDtcbi1cdFx0XHRcdGRhdGEgKz0gbGltaXQ7XG4tXHRcdFx0XHRzaXplIC09IGxpbWl0O1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIHNpemUsIGRhdGEpO1xuLVx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdFx0Z290byBlcnJvcjE7XG4tXG4tXHRcdFx0XHRpbmRleCArPSBzaXplO1xuLVx0XHRcdFx0ZGF0YSArPSBzaXplO1xuLVx0XHRcdFx0c2l6ZSA9IDA7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4rXHRcdFx0dTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpO1xuK1xuK1x0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCxcbitcdFx0XHRcdFx0ICAgIG4sIGRhdGEpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycm9yMTtcbitcbitcdFx0XHRpbmRleCArPSBuO1xuK1x0XHRcdGRhdGEgKz0gbjtcbitcdFx0XHRzaXplIC09IG47XG4gXHRcdH1cbiBcbiBcdFx0LyogU2V0IHRoZSBsYXN0IERXT1JEICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMTowNy4wOTE4Nzk2MDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUwMDMyMzY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKlJlZmFjdG9yaW5nIHRoZSBSODE1MiBPQ1AgQWNjZXNzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBjbGVhbmluZyB1cCB0aGUgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9ucyBpbiB0aGUgYHI4MTUyLmNgIGRyaXZlci4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCDigJMgcmVkdWNpbmcgY29tcGxleGl0eSBpcyBhbHdheXMgd2VsY29tZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mICpob3cqIGl0J3Mgc2ltcGxpZmllZC4gTGV0J3Mgc2VlLi4uIEknbGwgbmVlZCB0byBsb29rIGF0IGBkcml2ZXJzL25ldC91c2IvcjgxNTIuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTQzMiBhbmQgMTQ5OS4gSSdsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aG9zZSBzZWN0aW9ucywgb3IgbWF5YmUgYGdyZXBwZXJgIGlmIEkgd2FudCB0byBxdWlja2x5IHNlZSB0aGUgY29udGV4dCBhcm91bmQgdGhvc2UgbGluZXMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gR290dGEgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBiZWVuIHN0cmVhbWxpbmVkLiBXaGF0IHdhcyBpbmVmZmljaWVudCBvciByZWR1bmRhbnQgYmVmb3JlPyBIb3BlZnVsbHksIHRoZSBwYXRjaCBub3RlcyBwcm92aWRlIHNvbWUgaW5zaWdodHMgdG9vLiBCdXQgSSBuZWVkIHRvIHZlcmlmeSBldmVyeXRoaW5nIHdpdGggbXkgb3duIGV5ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjExOjEyLjU5MjIwNTY1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MjA6XFx0e1xcbjE0MjE6XFx0XFx0dTE2IGxpbWl0ID0gNjQ7XFxuMTQyMjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xNDIzOlxcdFxcbjE0MjQ6XFx0XFx0aWYgKHRlc3RfYml0KFJUTDgxNTJfSU5BQ0NFU1NJQkxFLCBcXHUwMDI2dHAtXFx1MDAzZWZsYWdzKSlcXG4xNDI1OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xcbjE0Mjg6XFx0XFx0aWYgKChzaXplIFxcdTAwMjYgMykgfHwgIXNpemUgfHwgKGluZGV4IFxcdTAwMjYgMykgfHwgIWRhdGEpXFxuMTQyOTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjE0MzA6XFx0XFxuMTQzMTpcXHRcXHRpZiAoKHUzMilpbmRleCArICh1MzIpc2l6ZSBcXHUwMDNlIDB4ZmZmZilcXG4xNDMyOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQzMzpcXHRcXG4xNDM0OlxcdFxcdHdoaWxlIChzaXplKSB7XFxuMTQzNTpcXHRcXHRcXHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XFxuMTQzNjpcXHRcXG4xNDM3OlxcdFxcdFxcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcXG4xNDM4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0Mzk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdFxcdGluZGV4ICs9IG47XFxuMTQ0MjpcXHRcXHRcXHRkYXRhICs9IG47XFxuMTQ0MzpcXHRcXHRcXHRzaXplIC09IG47XFxuMTQ0NDpcXHRcXHR9XFxuMTQ0NTpcXHRcXG4xNDQ2OlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4xNDQ3OlxcdFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4xNDQ4OlxcdFxcbjE0NDk6XFx0XFx0cmV0dXJuIHJldDtcXG4xNDUwOlxcdH1cXG4xNDUxOlxcdFxcbjE0NTI6XFx0c3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXFxuMTQ1MzpcXHRcXHRcXHRcXHQgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCB1MTYgdHlwZSlcXG4xNDU0OlxcdHtcXG4xNDU1OlxcdFxcdGludCByZXQ7XFxuMTQ1NjpcXHRcXHR1MTYgYnl0ZWVuX3N0YXJ0LCBieXRlZW5fZW5kLCBieWVuO1xcbjE0NTc6XFx0XFx0dTE2IGxpbWl0ID0gNTEyO1xcbjE0NTg6XFx0XFxuMTQ1OTpcXHRcXHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFxcdTAwMjZ0cC1cXHUwMDNlZmxhZ3MpKVxcbjE0NjA6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTQ2MTpcXHRcXG4xNDYyOlxcdFxcdC8qIGJvdGggc2l6ZSBhbmQgaW5kaXggbXVzdCBiZSA0IGJ5dGVzIGFsaWduICovXFxuMTQ2MzpcXHRcXHRpZiAoKHNpemUgXFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXFx1MDAyNiAzKSB8fCAhZGF0YSlcXG4xNDY0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdGlmICgodTMyKWluZGV4ICsgKHUzMilzaXplIFxcdTAwM2UgMHhmZmZmKVxcbjE0Njc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xNDY4OlxcdFxcbjE0Njk6XFx0XFx0Ynl0ZWVuX3N0YXJ0ID0gYnl0ZWVuIFxcdTAwMjYgQllURV9FTl9TVEFSVF9NQVNLO1xcbjE0NzA6XFx0XFx0Ynl0ZWVuX2VuZCA9IGJ5dGVlbiBcXHUwMDI2IEJZVEVfRU5fRU5EX01BU0s7XFxuMTQ3MTpcXHRcXG4xNDcyOlxcdFxcdGJ5ZW4gPSBieXRlZW5fc3RhcnQgfCAoYnl0ZWVuX3N0YXJ0IFxcdTAwM2NcXHUwMDNjIDQpO1xcbjE0NzM6XFx0XFxuMTQ3NDpcXHRcXHQvKiBTcGxpdCB0aGUgZmlyc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cXG4xNDc1OlxcdFxcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpIHtcXG4xNDc2OlxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XFxuMTQ3NzpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDc4OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3IxO1xcbjE0Nzk6XFx0XFxuMTQ4MDpcXHRcXHRcXHRpbmRleCArPSA0O1xcbjE0ODE6XFx0XFx0XFx0ZGF0YSArPSA0O1xcbjE0ODI6XFx0XFx0XFx0c2l6ZSAtPSA0O1xcbjE0ODM6XFx0XFx0fVxcbjE0ODQ6XFx0XFxuMTQ4NTpcXHRcXHRpZiAoc2l6ZSkge1xcbjE0ODY6XFx0XFx0XFx0YnllbiA9IGJ5dGVlbl9lbmQgfCAoYnl0ZWVuX2VuZCBcXHUwMDNlXFx1MDAzZSA0KTtcXG4xNDg3OlxcdFxcbjE0ODg6XFx0XFx0XFx0LyogU3BsaXQgdGhlIGxhc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cXG4xNDg5OlxcdFxcdFxcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXFxuMTQ5MDpcXHRcXHRcXHRcXHRzaXplIC09IDQ7XFxuMTQ5MTpcXHRcXG4xNDkyOlxcdFxcdFxcdHdoaWxlIChzaXplKSB7XFxuMTQ5MzpcXHRcXHRcXHRcXHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XFxuMTQ5NDpcXHRcXG4xNDk1OlxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCxcXG4xNDk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBuLCBkYXRhKTtcXG4xNDk3OlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0OTg6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcjE7XFxuMTQ5OTpcXHRcXG4xNTAwOlxcdFxcdFxcdFxcdGluZGV4ICs9IG47XFxuMTUwMTpcXHRcXHRcXHRcXHRkYXRhICs9IG47XFxuMTUwMjpcXHRcXHRcXHRcXHRzaXplIC09IG47XFxuMTUwMzpcXHRcXHRcXHR9XFxuMTUwNDpcXHRcXG4xNTA1OlxcdFxcdFxcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xcbjE1MDY6XFx0XFx0XFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcXG4xNTA3OlxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XFxuMTUwODpcXHRcXHR9XFxuMTUwOTpcXHRcXG4xNTEwOlxcdGVycm9yMTpcXG4xNTExOlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4xNTEyOlxcdFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4xNTEzOlxcdFxcbjE1MTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4xNTE1OlxcdH1cXG4xNTE2OlxcdFxcbjE1MTc6XFx0c3RhdGljIGlubGluZVxcbjE1MTg6XFx0aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbjE1MTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMToxMi41OTI2ODQ1ODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA1NDUxNjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIFJlZmFjdG9yaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLiBUaGUgY29kZSdzIGNoYW5nZWQgdG8gcmVwbGFjZSB0aGUgcmVkdW5kYW50IGBpZi9lbHNlYCBsb2dpYyB3aXRoIGEgbW9yZSBlbGVnYW50IHVzZSBvZiBgbWluKHNpemUsIGxpbWl0KWAuIFRoaXMgaXMgYSBjbGFzc2ljIHNpbXBsaWZpY2F0aW9uIHN0cmF0ZWd5LiBCeSB1c2luZyBgdTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpO2Agd2UgZXNzZW50aWFsbHkgc3RyZWFtbGluZSB0aGUgY2h1bmtpbmcgbG9naWMgaW4gYm90aCBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAuIElmIGBzaXplYCBpcyBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gYGxpbWl0YCwgYG1pbmAgZWZmZWN0aXZlbHkgcmV0dXJucyBgc2l6ZWAgc28gdGhhdCB0aGUgb3JpZ2luYWwgYmVoYXZpb3IgaXMgcHJlc2VydmVkLiBUaGUgc3Vic2VxdWVudCBjYWxscyB0byBgZ2V0X3JlZ2lzdGVyc2AvYHNldF9yZWdpc3RlcnNgIGNvcnJlY3RseSB1c2UgYG5gIChlZmZlY3RpdmVseSBgc2l6ZWAgaW4gdGhpcyBjYXNlKSwgYW5kIHRoZSBhZGp1c3RtZW50cyB0byBgaW5kZXhgLCBgZGF0YWAsIGFuZCBgc2l6ZWAgYXJlIGNsZWFuLiBXaGVuIGBzaXplIFx1MDAzYz0gbGltaXRgLCBhZnRlciB0aGUgcmVnaXN0ZXIgYWNjZXNzLCB0aGUgbG9vcCB3aWxsIHRlcm1pbmF0ZS5cblxuQ3J1Y2lhbGx5LCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcmVmYWN0b3JpbmcgaXMgKmZ1bmN0aW9uYWxseSBlcXVpdmFsZW50KiBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLiBJJ20gZm9jdXNpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCB1c2FnZSBvZiBtZW1vcnkuIERvZXMgaXQgYWx0ZXIgaG93IG1lbW9yeSBpcyAqaW5pdGlhbGl6ZWQqPyBObywgdGhlIGV4aXN0aW5nIGJ1ZmZlcnMgYXJlIHVuY2hhbmdlZCwgdGhlIGFtb3VudCBvZiBkYXRhIHJlYWQvd3JpdHRlbiBpcyB0aGUgc2FtZSwgYW5kIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIGhvdyBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZC4gTm8gaW1wYWN0IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgZmllbGRzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLiBOb3RoaW5nIHRoZXJlLlxuXG5MZXQncyBydW4gdGhyb3VnaCBhIHF1aWNrIGNoZWNrbGlzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6XG4qICAgVW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IE5vcGUuXG4qICAgS01TQU4tc3BlY2lmaWMgaXNzdWVzPyBOb25lIGFwcGFyZW50LlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBmYWxzZS4gVGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yIHRoYXQncyBwdXJlbHkgYWJvdXQgb3B0aW1pemluZyB0aGUgZXhpc3RpbmcgbG9naWMgYW5kIGVsaW1pbmF0aW5nIHJlZHVuZGFudCBjb2RlIHBhdGhzLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGUgcmVmYWN0b3JpbmcgdXNlcyBgbWluYCB0byBzaW1wbGlmeSBsb29wIGxvZ2ljIHdpdGhpbiBgcjgxNTIuY2AncyBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgZnVuY3Rpb25zLiBUaGUgcmVmYWN0b3JpbmcgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlLCB0b3VjaCwgb3IgYWx0ZXIgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrIHZhcmlhYmxlcywgc3RydWN0IGluaXRpYWxpemF0aW9uLCBvciBtZW1vcnkgY29waWVzIHRvIHVzZXIgc3BhY2UuIEZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzUwLCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjExOjE5LjY0NzIwNDUyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBjbGVhbiByZWZhY3RvcmluZyBvZiB0aGUgY2h1bmtpbmcgbG9vcHMgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIChgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgKSwgcmVwbGFjaW5nIHJlZHVuZGFudCBgaWYgKHNpemUgXFx1MDAzZSBsaW1pdClgIGJyYW5jaGluZyB3aXRoIGBtaW4oc2l6ZSwgbGltaXQpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgYWx0ZXIgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgbGVuZ3RocyBvciBjb3B5IGJvdW5kYXJpZXMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBhbmQgZG9lcyBub3QgY3JlYXRlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgYnVmZmVyL21lbW9yeSBzYWZldHkgaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgY2xlYW4gcmVmYWN0b3Jpbmcgb2YgdGhlIGNodW5raW5nIGxvb3BzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCAoYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCksIHJlcGxhY2luZyByZWR1bmRhbnQgYGlmIChzaXplIFxcdTAwM2UgbGltaXQpYCBicmFuY2hpbmcgd2l0aCBgbWluKHNpemUsIGxpbWl0KWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIGFsdGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGxlbmd0aHMgb3IgY29weSBib3VuZGFyaWVzLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgYW5kIGRvZXMgbm90IGNyZWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1ZmZlci9tZW1vcnkgc2FmZXR5IGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2pmbf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 00:39:16 +0000 UTC FinishedAt: 2026-09-08 01:11:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_RTL8152", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_RTL8152", "USB_NET_DRIVERS", "USB", "NET" ], "series_id": "cb82df5a-5b45-4608-b201-419a7333b5ff" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "generic_ocp_read", "generic_ocp_write", "pla_ocp_read", "pla_ocp_write", "usb_ocp_write", "rtl8152_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9SVEw4MTUyJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19vY3BfcmVhZCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX29jcF93cml0ZSYjMzQ7LAogICAgJiMzNDtwbGFfb2NwX3JlYWQmIzM0OywKICAgICYjMzQ7cGxhX29jcF93cml0ZSYjMzQ7LAogICAgJiMzNDt1c2Jfb2NwX3dyaXRlJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nIG9mIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgKGBkcml2ZXJzL25ldC91c2IvcjgxNTIuY2ApLCByZXBsYWNpbmcgcmVkdW5kYW50IGBpZiAoc2l6ZSBcdTAwM2UgbGltaXQpYCBicmFuY2hpbmcgd2l0aCBgbWluKHNpemUsIGxpbWl0KWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIGFsdGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGxlbmd0aHMgb3IgY29weSBib3VuZGFyaWVzLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgYW5kIGRvZXMgbm90IGNyZWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1ZmZlci9tZW1vcnkgc2FmZXR5IGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWdpc3RlciBjaHVuayBsb29wIGNhbGN1bGF0aW9ucyBpbiBnZW5lcmljX29jcF9yZWFkKCkgYW5kIGdlbmVyaWNfb2NwX3dyaXRlKCkgd2l0aGluIHRoZSBSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBVU0IgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC91c2IvcjgxNTIuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIGFuZCBVU0IgcmF3IGdhZGdldCBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2VkOTA4OWI4Y2UwYTNhZTYzMDJiNTRlYjJkZWZiNTQyMTBiZmU3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDE6MTA6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuaW5kZXggZjYxNjg2NDMzMDMxYy4uYWYzZDdkY2IyZjE0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuQEAgLTE0MzIsMjQgJiM0MzsxNDMyLDE1IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuIFx0d2hpbGUgKHNpemUpIHtcbi1cdFx0aWYgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4tXHRcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0YnJlYWs7XG4tXG4tXHRcdFx0aW5kZXggJiM0Mzs9IGxpbWl0O1xuLVx0XHRcdGRhdGEgJiM0Mzs9IGxpbWl0O1xuLVx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdHUxNiBuID0gbWluKHNpemUsIGxpbWl0KTtcbiBcbi1cdFx0XHRpbmRleCAmIzQzOz0gc2l6ZTtcbi1cdFx0XHRkYXRhICYjNDM7PSBzaXplO1xuLVx0XHRcdHNpemUgPSAwO1xuJiM0MztcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIG4sIGRhdGEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuJiM0MztcbiYjNDM7XHRcdGluZGV4ICYjNDM7PSBuO1xuJiM0MztcdFx0ZGF0YSAmIzQzOz0gbjtcbiYjNDM7XHRcdHNpemUgLT0gbjtcbiBcdH1cbiBcbiBcdGlmIChyZXQgPT0gLUVOT0RFVilcbkBAIC0xNDk5LDI4ICYjNDM7MTQ5MCwxNiBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbixcbiBcdFx0XHRzaXplIC09IDQ7XG4gXG4gXHRcdHdoaWxlIChzaXplKSB7XG4tXHRcdFx0aWYgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIGxpbWl0LCBkYXRhKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuLVxuLVx0XHRcdFx0aW5kZXggJiM0Mzs9IGxpbWl0O1xuLVx0XHRcdFx0ZGF0YSAmIzQzOz0gbGltaXQ7XG4tXHRcdFx0XHRzaXplIC09IGxpbWl0O1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIHNpemUsIGRhdGEpO1xuLVx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdFx0Z290byBlcnJvcjE7XG4tXG4tXHRcdFx0XHRpbmRleCAmIzQzOz0gc2l6ZTtcbi1cdFx0XHRcdGRhdGEgJiM0Mzs9IHNpemU7XG4tXHRcdFx0XHRzaXplID0gMDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbiYjNDM7XHRcdFx0dTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuJiM0MztcdFx0XHRcdFx0ICAgIG4sIGRhdGEpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyb3IxO1xuJiM0MztcbiYjNDM7XHRcdFx0aW5kZXggJiM0Mzs9IG47XG4mIzQzO1x0XHRcdGRhdGEgJiM0Mzs9IG47XG4mIzQzO1x0XHRcdHNpemUgLT0gbjtcbiBcdFx0fVxuIFxuIFx0XHQvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfUlRMODE1MiYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX0RSSVZFUlMmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmVyaWNfb2NwX3JlYWQmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19vY3Bfd3JpdGUmIzM0OywKICAgICYjMzQ7cGxhX29jcF9yZWFkJiMzNDssCiAgICAmIzM0O3BsYV9vY3Bfd3JpdGUmIzM0OywKICAgICYjMzQ7dXNiX29jcF93cml0ZSYjMzQ7LAogICAgJiMzNDtydGw4MTUyX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVnaXN0ZXIgY2h1bmsgbG9vcCBjYWxjdWxhdGlvbnMgaW4gZ2VuZXJpY19vY3BfcmVhZCgpIGFuZCBnZW5lcmljX29jcF93cml0ZSgpIHdpdGhpbiB0aGUgUmVhbHRlayBSVEw4MTUyL1JUTDgxNTMgVVNCIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMpLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiBhbmQgVVNCIHJhdyBnYWRnZXQgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNlZDkwODliOGNlMGEzYWU2MzAyYjU0ZWIyZGVmYjU0MjEwYmZlNzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAxOjEwOjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwppbmRleCBmNjE2ODY0MzMwMzFjLi5hZjNkN2RjYjJmMTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwpAQCAtMTQzMiwyNCAmIzQzOzE0MzIsMTUgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsCiAJCXJldHVybiAtRVBFUk07CiAKIAl3aGlsZSAoc2l6ZSkgewotCQlpZiAoc2l6ZSAmZ3Q7IGxpbWl0KSB7Ci0JCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpOwotCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJYnJlYWs7Ci0KLQkJCWluZGV4ICYjNDM7PSBsaW1pdDsKLQkJCWRhdGEgJiM0Mzs9IGxpbWl0OwotCQkJc2l6ZSAtPSBsaW1pdDsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBzaXplLCBkYXRhKTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCWJyZWFrOwomIzQzOwkJdTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpOwogCi0JCQlpbmRleCAmIzQzOz0gc2l6ZTsKLQkJCWRhdGEgJiM0Mzs9IHNpemU7Ci0JCQlzaXplID0gMDsKJiM0MzsJCXJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQogCQkJYnJlYWs7Ci0JCX0KJiM0MzsKJiM0MzsJCWluZGV4ICYjNDM7PSBuOwomIzQzOwkJZGF0YSAmIzQzOz0gbjsKJiM0MzsJCXNpemUgLT0gbjsKIAl9CiAKIAlpZiAocmV0ID09IC1FTk9ERVYpCkBAIC0xNDk5LDI4ICYjNDM7MTQ5MCwxNiBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwKIAkJCXNpemUgLT0gNDsKIAogCQl3aGlsZSAoc2l6ZSkgewotCQkJaWYgKHNpemUgJmd0OyBsaW1pdCkgewotCQkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LAotCQkJCQkJICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELAotCQkJCQkJICAgIGxpbWl0LCBkYXRhKTsKLQkJCQlpZiAocmV0ICZsdDsgMCkKLQkJCQkJZ290byBlcnJvcjE7Ci0KLQkJCQlpbmRleCAmIzQzOz0gbGltaXQ7Ci0JCQkJZGF0YSAmIzQzOz0gbGltaXQ7Ci0JCQkJc2l6ZSAtPSBsaW1pdDsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsCi0JCQkJCQkgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsCi0JCQkJCQkgICAgc2l6ZSwgZGF0YSk7Ci0JCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJCWdvdG8gZXJyb3IxOwotCi0JCQkJaW5kZXggJiM0Mzs9IHNpemU7Ci0JCQkJZGF0YSAmIzQzOz0gc2l6ZTsKLQkJCQlzaXplID0gMDsKLQkJCQlicmVhazsKLQkJCX0KJiM0MzsJCQl1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7CiYjNDM7CiYjNDM7CQkJcmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELAomIzQzOwkJCQkJICAgIG4sIGRhdGEpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycm9yMTsKJiM0MzsKJiM0MzsJCQlpbmRleCAmIzQzOz0gbjsKJiM0MzsJCQlkYXRhICYjNDM7PSBuOwomIzQzOwkJCXNpemUgLT0gbjsKIAkJfQogCiAJCS8qIFNldCB0aGUgbGFzdCBEV09SRCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJldmlld2luZyB0aGUgcjgxNTIuYyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIHJlbGV2YW50IHRvIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSBmdW5jdGlvbnMgY2hhbmdlZCwgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBhcmUgdGhlIGZvY3VzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLCB3aGljaCB3b3VsZCBiZSByZWxldmFudCBzaW5jZSB3ZSBoYXZlIHN5emthbGxlciYjMzk7cyBVU0IgUmF3IEdhZGdldCBjYXBhYmlsaXRpZXMgYW5kIGdlbmVyYWwgVVNCIG5ldHdvcmtpbmcgZnV6emluZyB0byBjb25zaWRlci4KClRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgYHI4MTUyLmNgLCBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBhbmQgaG93IGl0JiMzOTtzIGNhbGxlZC4gVGhpcyBtZWFucyBjaGVja2luZyBpdHMgS2NvbmZpZyBlbnRyaWVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGRyaXZlciBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdGFyZ2V0ZWQgYnkgb3VyIGN1cnJlbnQgZnV6emluZyBzZXR1cC4gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBlZmZpY2llbnRseSBnYXRoZXIgdGhpcyBpbmZvcm1hdGlvbi4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIG1vZGlmaWNhdGlvbiBpbnRyb2R1Y2VzIGFueSBuZXcgVVNCIGludGVyZmFjZXMgb3IgYmVoYXZpb3VycyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgYW5kIGZ1enplZCBlZmZlY3RpdmVseSB3aXRoaW4gb3VyIGN1cnJlbnQgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfUlRMODE1MiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz04OD1jb25maWcgVVNCX1JUTDgxNTBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy05OC1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjk5OmNvbmZpZyBVU0JfUlRMODE1MlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTAwLVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw4MTUyL1JUTDgxNTMgQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIFVTQiBOZXR3b3JraW5nIERyaXZlciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBVU0IgbmV0d29ya2luZyBkcml2ZXIgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5OS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCBhIHdob2xlIGJ1bmNoIG9mIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvbywgZGV0YWlsaW5nIHdoaWNoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoaXMgVVNCIG5ldHdvcmtpbmcgc3VwcG9ydCBiZWNvbWVzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIHNlZSBpZiBpdCBkZXBlbmRzIG9uIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGRyaXZlcnMsIG5ldHdvcmtpbmcgc3RhY2sgZmVhdHVyZXMsIG9yIHBlcmhhcHMgZXZlbiBvdGhlciBVU0ItcmVsYXRlZCBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgd2hlcmUgSSBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBJIG5lZWQgdG8gY2hlY2sgd2hlbiBJJiMzOTttIGRlYnVnZ2luZyBhIGNvbmZpZ3VyYXRpb24gaXNzdWUuIFRoaXMgbGluZSBpcyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcbiAgOTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDk3Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGw4MTUwLlxuICA5ODpcdFxuICA5OTpcdGNvbmZpZyBVU0JfUlRMODE1MlxuIDEwMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw4MTUyL1JUTDgxNTMgQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4gMTAxOlx0XHRzZWxlY3QgTUlJXG4gMTAyOlx0XHRzZWxlY3QgUEhZTElCXG4gMTAzOlx0XHRzZWxlY3QgQ1JDMzJcbiAxMDQ6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuIDEwNTpcdFx0aGVscFxuIDEwNjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODE1MiBiYXNlZCBVU0IgMi4wXG4gMTA3Olx0XHQgIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVycyBhbmQgUlRMODE1MyBiYXNlZCBVU0IgMy4wIDEwLzEwMC8xMDAwXG4gMTA4Olx0XHQgIEV0aGVybmV0IGFkYXB0ZXJzLlxuIDEwOTpcdFxuIDExMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxMTE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHI4MTUyLlxuIDExMjpcdFxuIDExMzpcdGNvbmZpZyBVU0JfTEFONzhYWFxuIDExNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWljcm9jaGlwIExBTjc4WFggQmFzZWQgVVNCIEV0aGVybmV0IEFkYXB0ZXJzXCYjMzQ7XG4gMTE1Olx0XHRzZWxlY3QgTUlJXG4gMTE2Olx0XHRzZWxlY3QgUEhZTElOS1xuIDExNzpcdFx0c2VsZWN0IE1JQ1JPQ0hJUF9QSFlcbiAxMTg6XHRcdHNlbGVjdCBDUkMzMlxuIDExOTpcdFx0aW1wbHkgTkVUX1NFTEZURVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBTcGFjZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYFVTQl9SVEw4MTUyYCBkcml2ZXIgbGl2ZXMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoYXQgS2NvbmZpZyBmb3IgdGhlIHN1cnJvdW5kaW5nIG1lbnUgZW50cmllcy4gSSYjMzk7bSB0aGlua2luZywgaW4gdGVybXMgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRyZWUsIGl0JiMzOTtzIHByb2JhYmx5IGdyb3VwZWQgdW5kZXIgc29tZXRoaW5nIGxpa2UgYFVTQl9ORVRfRFJJVkVSU2Agb3IgYSBzaW1pbGFyIGJyb2FkZXIgY2F0ZWdvcnkgZm9yIFVTQiBuZXR3b3JrIGFkYXB0ZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoaXMgc3BlY2lmaWMgZHJpdmVyIHRvIHRoZSByZXN0IG9mIHRoZSBVU0IgbmV0d29yayBzdWJzeXN0ZW0sIG9yIG90aGVyIHNpbWlsYXIgZHJpdmVycy4gSSBuZWVkIHRvIGVuc3VyZSBpdCYjMzk7cyBub3Qgb3JwaGFuZWQuIFRoZSAqS2NvbmZpZyogZmlsZSBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb21tZW50IFwmIzM0O0hvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuICAgNjpcdFx0ZGVwZW5kcyBvbiAhVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xuICAgOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIE5ldHdvcmsgQWRhcHRlcnNcJiMzNDtcbiAgMTA6XHRcdGRlZmF1bHQgVVNCIGlmIFVTQlxuICAxMTpcdFx0ZGVwZW5kcyBvbiBVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAxMjpcdFxuICAxMzpcdGlmIFVTQl9ORVRfRFJJVkVSU1xuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBVU0JfQ0FUQ1xuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IENSQzMyXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XG4gIDIwOlx0XHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XG4gIDIxOlx0XHQgIEJlbGtpbiBGNVUwMTFcbiAgMjI6XHRcdCAgQmVsa2luIEY1VTExMVxuICAyMzpcdFx0ICBDQVRDIE5ldE1hdGVcbiAgMjQ6XHRcdCAgQ0FUQyBOZXRNYXRlIElJXG4gIDI1Olx0XHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xuICAyNjpcdFxuICAyNzpcdFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxuICAyODpcdFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXG4gIDI5Olx0XHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDMyOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjYXRjLlxuICAzMzpcdFxuICAzNDpcdGNvbmZpZyBVU0JfS0FXRVRIXG4gIDM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMzY6XHRcdGhlbHBcbiAgMzc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIG9ubHlcbiAgMzg6XHRcdCAgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBLTFNJIEtMNUtVU0IxMDFCIGNoaXBzZXQ6XG4gIDM5Olx0XHQgIDNDb20gM0MxOTI1MFxuICA0MDpcdFx0ICBBRFMgVVNCLTEwQlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDAyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBSODE1MiBEcml2ZXIqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDE0MDAgdG8gMTU1MC4gVGhhdCBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBzZXQgb2YgaW50ZXJhY3Rpb25zLCBhbmQgZ2l2ZW4gdGhlIGNvbnRleHQgb2Ygd2hhdCBJJiMzOTttIHdvcmtpbmcgb24sIEkgc3VzcGVjdCB0aGUgaXNzdWUgbWlnaHQgYmUgY29uY2VudHJhdGVkIHRoZXJlLiBJJiMzOTtsbCBzdGFydCBieSByZXZpZXdpbmcgdGhvc2UgbGluZXMgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBvcnRpb24gb2YgdGhlIGRyaXZlciBvcGVyYXRlcy4gSG9wZWZ1bGx5LCB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBpcyBldmlkZW50IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQyMDpcdHtcbjE0MjE6XHRcdHUxNiBsaW1pdCA9IDY0O1xuMTQyMjpcdFx0aW50IHJldCA9IDA7XG4xNDIzOlx0XG4xNDI0Olx0XHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFx1MDAyNnRwLVx1MDAzZWZsYWdzKSlcbjE0MjU6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xNDI2Olx0XG4xNDI3Olx0XHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xuMTQyODpcdFx0aWYgKChzaXplIFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXHUwMDI2IDMpIHx8ICFkYXRhKVxuMTQyOTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQzMDpcdFxuMTQzMTpcdFx0aWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4xNDMyOlx0XHRcdHJldHVybiAtRVBFUk07XG4xNDMzOlx0XG4xNDM0Olx0XHR3aGlsZSAoc2l6ZSkge1xuMTQzNTpcdFx0XHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XG4xNDM2Olx0XG4xNDM3Olx0XHRcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcbjE0Mzg6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Mzk6XHRcdFx0XHRicmVhaztcbjE0NDA6XHRcbjE0NDE6XHRcdFx0aW5kZXggJiM0Mzs9IG47XG4xNDQyOlx0XHRcdGRhdGEgJiM0Mzs9IG47XG4xNDQzOlx0XHRcdHNpemUgLT0gbjtcbjE0NDQ6XHRcdH1cbjE0NDU6XHRcbjE0NDY6XHRcdGlmIChyZXQgPT0gLUVOT0RFVilcbjE0NDc6XHRcdFx0cnRsX3NldF91bnBsdWcodHApO1xuMTQ0ODpcdFxuMTQ0OTpcdFx0cmV0dXJuIHJldDtcbjE0NTA6XHR9XG4xNDUxOlx0XG4xNDUyOlx0c3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXG4xNDUzOlx0XHRcdFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXG4xNDU0Olx0e1xuMTQ1NTpcdFx0aW50IHJldDtcbjE0NTY6XHRcdHUxNiBieXRlZW5fc3RhcnQsIGJ5dGVlbl9lbmQsIGJ5ZW47XG4xNDU3Olx0XHR1MTYgbGltaXQgPSA1MTI7XG4xNDU4Olx0XG4xNDU5Olx0XHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFx1MDAyNnRwLVx1MDAzZWZsYWdzKSlcbjE0NjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xNDYxOlx0XG4xNDYyOlx0XHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xuMTQ2MzpcdFx0aWYgKChzaXplIFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXHUwMDI2IDMpIHx8ICFkYXRhKVxuMTQ2NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ2NTpcdFxuMTQ2NjpcdFx0aWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4xNDY3Olx0XHRcdHJldHVybiAtRVBFUk07XG4xNDY4Olx0XG4xNDY5Olx0XHRieXRlZW5fc3RhcnQgPSBieXRlZW4gXHUwMDI2IEJZVEVfRU5fU1RBUlRfTUFTSztcbjE0NzA6XHRcdGJ5dGVlbl9lbmQgPSBieXRlZW4gXHUwMDI2IEJZVEVfRU5fRU5EX01BU0s7XG4xNDcxOlx0XG4xNDcyOlx0XHRieWVuID0gYnl0ZWVuX3N0YXJ0IHwgKGJ5dGVlbl9zdGFydCBcdTAwM2NcdTAwM2MgNCk7XG4xNDczOlx0XG4xNDc0Olx0XHQvKiBTcGxpdCB0aGUgZmlyc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cbjE0NzU6XHRcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpIHtcbjE0NzY6XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBieWVuLCA0LCBkYXRhKTtcbjE0Nzc6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Nzg6XHRcdFx0XHRnb3RvIGVycm9yMTtcbjE0Nzk6XHRcbjE0ODA6XHRcdFx0aW5kZXggJiM0Mzs9IDQ7XG4xNDgxOlx0XHRcdGRhdGEgJiM0Mzs9IDQ7XG4xNDgyOlx0XHRcdHNpemUgLT0gNDtcbjE0ODM6XHRcdH1cbjE0ODQ6XHRcbjE0ODU6XHRcdGlmIChzaXplKSB7XG4xNDg2Olx0XHRcdGJ5ZW4gPSBieXRlZW5fZW5kIHwgKGJ5dGVlbl9lbmQgXHUwMDNlXHUwMDNlIDQpO1xuMTQ4NzpcdFxuMTQ4ODpcdFx0XHQvKiBTcGxpdCB0aGUgbGFzdCBEV09SRCBpZiB0aGUgYnl0ZV9lbiBpcyBub3QgMHhmZiAqL1xuMTQ4OTpcdFx0XHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxuMTQ5MDpcdFx0XHRcdHNpemUgLT0gNDtcbjE0OTE6XHRcbjE0OTI6XHRcdFx0d2hpbGUgKHNpemUpIHtcbjE0OTM6XHRcdFx0XHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XG4xNDk0Olx0XG4xNDk1Olx0XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuMTQ5NjpcdFx0XHRcdFx0XHQgICAgbiwgZGF0YSk7XG4xNDk3Olx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0OTg6XHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuMTQ5OTpcdFxuMTUwMDpcdFx0XHRcdGluZGV4ICYjNDM7PSBuO1xuMTUwMTpcdFx0XHRcdGRhdGEgJiM0Mzs9IG47XG4xNTAyOlx0XHRcdFx0c2l6ZSAtPSBuO1xuMTUwMzpcdFx0XHR9XG4xNTA0Olx0XG4xNTA1Olx0XHRcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xuMTUwNjpcdFx0XHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxuMTUwNzpcdFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XG4xNTA4Olx0XHR9XG4xNTA5Olx0XG4xNTEwOlx0ZXJyb3IxOlxuMTUxMTpcdFx0aWYgKHJldCA9PSAtRU5PREVWKVxuMTUxMjpcdFx0XHRydGxfc2V0X3VucGx1Zyh0cCk7XG4xNTEzOlx0XG4xNTE0Olx0XHRyZXR1cm4gcmV0O1xuMTUxNTpcdH1cbjE1MTY6XHRcbjE1MTc6XHRzdGF0aWMgaW5saW5lXG4xNTE4Olx0aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuMTUxOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAzMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDkxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgZnV6emluZyBhbmdsZS4gVGhlIHBhdGNoIGZvY3VzZXMgb24gb3B0aW1pemluZyB0aGUgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIHJlZmFjdG9yaW5nIG9mIHRoZSBsb29wIGxvZ2ljIHVzaW5nIGBtaW4oKWAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYGlmL2Vsc2VgIGJyYW5jaGluZy4gVGhlIG9sZCBjb2RlIHdhczoKCmBgYGMKd2hpbGUgKHNpemUpIHsKICAgIGlmIChzaXplICZndDsgbGltaXQpIHsKICAgICAgICByZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpOwogICAgICAgIGlmIChyZXQgJmx0OyAwKQogICAgICAgICAgICBicmVhazsKICAgICAgICBpbmRleCAmIzQzOz0gbGltaXQ7CiAgICAgICAgZGF0YSAmIzQzOz0gbGltaXQ7CiAgICAgICAgc2l6ZSAtPSBsaW1pdDsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpOwogICAgICAgIGlmIChyZXQgJmx0OyAwKQogICAgICAgICAgICBicmVhazsKICAgICAgICBpbmRleCAmIzQzOz0gc2l6ZTsKICAgICAgICBkYXRhICYjNDM7PSBzaXplOwogICAgICAgIHNpemUgPSAwOwogICAgICAgIGJyZWFrOwogICAgfQp9CmBgYAoKTm93IGl0JiMzOTtzOgoKYGBgYwp3aGlsZSAoc2l6ZSkgewogICAgdTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpOwogICAgcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIG4sIGRhdGEpOwogICAgaWYgKHJldCAmbHQ7IDApCiAgICAgICAgYnJlYWs7CiAgICBpbmRleCAmIzQzOz0gbjsKICAgIGRhdGEgJiM0Mzs9IG47CiAgICBzaXplIC09IG47Cn0KYGBgCgpUaGUgc2FtZSByZWZhY3RvcmluZyBpcyBwcmVzZW50IGZvciB0aGUgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbiwgcmVwbGFjaW5nIGBzZXRfcmVnaXN0ZXJzYCBhbmQgYGdvdG8gZXJyb3IxYC4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIGZ1enppbmcgc2NlbmFyaW8uIFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgVVNCX1JUTDgxNTJgIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIHRhcmdldCBmb3IgZnV6emluZy4gVVNCIGRyaXZlcnMsIGluIGdlbmVyYWwsIGFyZSBpbmNyZWRpYmx5IHZ1bG5lcmFibGUgdG8gZnV6emluZyBhcyB0aGV5IGFyZSByZWFjaGFibGUgd2l0aCBzeXprYWxsZXImIzM5O3MgVVNCIFJhdyBHYWRnZXQsIFVTQiBlbXVsYXRpb24sIG9yIGR1bW15X2hjZC4gVGhpcyBkcml2ZXIgaXMgc3RhbmRhcmQsIHJlYWNoYWJsZSwgYW5kIGtub3duIHRvIGJlIGZ1enplZC4KClRoaXMgcmVmYWN0b3JpbmcgdG91Y2hlcyBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBkcml2ZXIuIFNvLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHZ1bG5lcmFiaWxpdHkgYW5hbHlzaXMsIHRoaXMgbXVzdCBiZSBmdXp6ZWQuIFJlZ2FyZGxlc3Mgb2YgdGhlICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBvciAmIzM0O3JlZmFjdG9yaW5nJiMzNDsgY2xhaW1zLCBhbnkgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSBjb2RlIHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIHRoZSBjb25maWd1cmF0aW9uLiBXZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIGBVU0JfUlRMODE1MmAuIFdlIGtub3cgYFVTQl9SVEw4MTUyYCBkZXBlbmRzIG9uIGBVU0JfTkVUX0RSSVZFUlNgLCBhbmQgYFVTQl9ORVRfRFJJVkVSU2AgZGVwZW5kcyBvbiBgVVNCICZhbXA7JmFtcDsgTkVUYC4gVGhlcmVmb3JlLCB0aGUgbWluaW1hbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyB3b3VsZCBpbmNsdWRlIGBVU0JfUlRMODE1MmAsIGBVU0JfTkVUX0RSSVZFUlNgLCBhbmQgYFVTQmAuCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgY2FsbCBwYXRocyB0byBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHVzZXMgb2YgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiBgcjgxNTIuY2AgdG8gaWRlbnRpZnkgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX29jcF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDEyPXN0YXRpYyB2b2lkIHJ0bF9zZXRfdW5wbHVnKHN0cnVjdCByODE1MiAqdHApXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQxNy1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0MTg6c3RhdGljIGludCBnZW5lcmljX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDE5LVx0XHRcdCAgICB2b2lkICpkYXRhLCB1MTYgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDUxLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTQ1MjpzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE0NTMtXHRcdFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUxOD1pbnQgcGxhX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTE5LXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjA6XHRyZXR1cm4gZ2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTIxLX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTI0PWludCBwbGFfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTI1LXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjY6XHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1BMQSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTI3LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTMwPWludCB1c2Jfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbiwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTMxLXtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MzI6XHRyZXR1cm4gZ2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieXRlZW4sIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTMzLX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTM1PXN0YXRpYyB1MzIgb2NwX3JlYWRfZHdvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTM4LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTUzOTpcdGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplb2YoZGF0YSksIFx1MDAyNmRhdGEsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU0MC1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTQ0PXN0YXRpYyB2b2lkIG9jcF93cml0ZV9kd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTQ3LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU0ODpcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgQllURV9FTl9EV09SRCwgc2l6ZW9mKHRtcCksIFx1MDAyNnRtcCwgdHlwZSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTQ5LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTUxPXN0YXRpYyB1MTYgb2NwX3JlYWRfd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NjAtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxNTYxOlx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUgfCBieWVuKTtcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NjItXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTU3MD1zdGF0aWMgdm9pZCBvY3Bfd3JpdGVfd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTg3LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU4ODpcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnllbiwgc2l6ZW9mKHRtcCksIFx1MDAyNnRtcCwgdHlwZSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTg5LX1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTkxPXN0YXRpYyB1OCBvY3BfcmVhZF9ieXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU5OC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1OTk6XHRnZW5lcmljX29jcF9yZWFkKHRwLCBpbmRleCwgc2l6ZW9mKHRtcCksIFx1MDAyNnRtcCwgdHlwZSk7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNjAwLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE2MDg9c3RhdGljIHZvaWQgb2NwX3dyaXRlX2J5dGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYyNS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE2MjY6XHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIGJ5ZW4sIHNpemVvZih0bXApLCBcdTAwMjZ0bXAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTYyNy19XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NDUwNT1zdGF0aWMgdm9pZCBydGxfY2xlYXJfYnAoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNDU0My1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjQ1NDQ6XHRnZW5lcmljX29jcF93cml0ZSh0cCwgUExBX0JQXzAsIEJZVEVfRU5fRFdPUkQsIGJwX251bSBcdTAwM2NcdTAwM2MgMSwgYnAsIHR5cGUpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNDU0NS1cbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01Mjk4PXN0YXRpYyB2b2lkIHJ0bF9yYW1fY29kZV9zcGVlZF91cChzdHJ1Y3QgcjgxNTIgKnRwLCBzdHJ1Y3QgZndfcGh5X3NwZWVkX3VwICpwaHksIGJvb2wgd2FpdClcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01MzI4LVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTMyOTpcdFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUocGh5LVx1MDAzZWZ3X3JlZyksIDB4ZmYsIHNpemUsIGRhdGEsIE1DVV9UWVBFX1VTQik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01MzMwLVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTU0Nzk9c3RhdGljIHZvaWQgcnRsODE1Ml9md19tYWNfYXBwbHkoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X21hYyAqbWFjKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MTgtXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo1NTE5Olx0aWYgKGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBfX2xlMTZfdG9fY3B1KG1hYy1cdTAwM2Vmd19yZWcpLCAweGZmLCBsZW5ndGgsXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01NTIwLVx0XHRcdCAgICAgIGRhdGEsIHR5cGUpIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUyOC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjU1Mjk6XHRpZiAoZ2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUobWFjLVx1MDAzZWJwX3N0YXJ0KSwgQllURV9FTl9EV09SRCxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MzAtXHRcdFx0ICAgICAgQUxJR04oX19sZTE2X3RvX2NwdShtYWMtXHUwMDNlYnBfbnVtKSBcdTAwM2NcdTAwM2MgMSwgNCksXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9OTA3Mj1zdGF0aWMgdm9pZCBydGw4MTUyX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTA4MC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjkwODE6XHRnZW5lcmljX29jcF9yZWFkKHRwLCBQTEFfVEFMTFlDTlQsIHNpemVvZih0YWxseSksIFx1MDAyNnRhbGx5LCBNQ1VfVFlQRV9QTEEpO1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTA4Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHI4MTUyIERyaXZlciBGb2N1cyBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgRm9jdXNTeW1ib2xzYCBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRob3NlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMuIEkga25vdyB0aG9zZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyByZXNpZGluZyBpbiBgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGV5LCBvciBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoZW0sIGdvb2QgY2FuZGlkYXRlcyBmb3IgZm9jdXMgc3ltYm9scz8gSSBzaG91bGQgZXhwYW5kIG15IHNjb3BlIGZyb20gdGhvc2UgdHdvIGFuZCBpbmNsdWRlIGBwbGFfb2NwX3JlYWRgLCBgcGxhX29jcF93cml0ZWAsIGFuZCBgdXNiX29jcF93cml0ZWAsIHNpbmNlIHRoZXkgbGlrZWx5IHJlbGF0ZSBzb21laG93LgoKQmV5b25kIHRob3NlLCBJIG5lZWQgdG8gbG9vayBmb3IgdHlwaWNhbCBkcml2ZXIgZnVuY3Rpb25zIHdpdGhpbiBgcjgxNTIuY2AsIHN1Y2ggYXMgdGhvc2UgcmVsYXRlZCB0byBwcm9iaW5nLCByZWNlaXZlLCBvciB0cmFuc21pdCBvcGVyYXRpb25zLiBTdGFuZGFyZCBkcml2ZXIgZnVuY3Rpb25zIGFyZSBhIGdvb2QgYmV0LiBTbywgbGV0JiMzOTtzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgcHJvYmUgZnVuY3Rpb24gaW4gYHI4MTUyLmNgLiBUaGF0JiMzOTtzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgZHJpdmVyIGluaXRpYWxpemVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTUyX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTAwODI9c3RhdGljIGJvb2wgcnRsODE1Ml9zdXBwb3J0c19sZW5vdm9fbWFjcGFzc3RocnUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAxMDctXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzoxMDEwODpzdGF0aWMgaW50IHJ0bDgxNTJfcHJvYmVfb25jZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMTA5LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwgdTggdmVyc2lvbilcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDMyNC1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwMzI1OnN0YXRpYyBpbnQgcnRsODE1Ml9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMzI2LVx0XHRcdCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAzNDItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEw4MTUyX1BST0JFX1RSSUVTOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTAzNDM6XHRcdHJldCA9IHJ0bDgxNTJfcHJvYmVfb25jZShpbnRmLCBpZCwgdmVyc2lvbik7XG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDM0NC1cdFx0aWYgKHJldCAhPSAtRUFHQUlOKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTEwNDIxPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBydGw4MTUyX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDQyMy1cdC5pZF90YWJsZSA9XHRydGw4MTUyX3RhYmxlLFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTA0MjQ6XHQucHJvYmUgPVx0cnRsODE1Ml9wcm9iZSxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwNDI1LVx0LmRpc2Nvbm5lY3QgPVx0cnRsODE1Ml9kaXNjb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3OQoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiA0NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgcjgxNTIuYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBzZWUgdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gYHI4MTUyLmNgIGFyZSBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAsIGFsb25nc2lkZSB0aGVpciBjYWxsZXJzL2VudHJ5IHBvaW50czogYHJ0bDgxNTJfcHJvYmVgLCBgcGxhX29jcF9yZWFkYCwgYHBsYV9vY3Bfd3JpdGVgLCBhbmQgYHVzYl9vY3Bfd3JpdGVgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBhcmUgc3RhdGljIG9yIHBvdGVudGlhbGx5IGlubGluZWQuIEdpdmVuIHRoZWlyIGxlbmd0aHMgKDMwIGFuZCA2MCBsaW5lcyByZXNwZWN0aXZlbHkpIGFuZCBtdWx0aXBsZSBjYWxscyB3aXRoaW4gdGhlIGRyaXZlciwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGV5IGFyZSBub3Qgc3RhdGljIG9yIGlubGluZWQuIFRoaXMgbWFrZXMgdGhlbSBpZGVhbCBmb2N1cyBzeW1ib2xzLiBBZGRpbmcgdGhlIG90aGVycyBwcm92aWRlcyBnb29kIGNvdmVyYWdlLgoKTmV4dCwgdGhlIGBFbmFibGVDb25maWdzYC4gV2UgaGF2ZSBgVVNCX1JUTDgxNTJgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGFuZCBgTkVUYC4gTWFrZXMgc2Vuc2UsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBVU0IgZXRoZXJuZXQgYWRhcHRlci4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gZXZlcnl0aGluZy4gRmlyc3QsICppcyBpdCB3b3J0aCBmdXp6aW5nPyogWWVzLCBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggYWx0ZXJzIHJlZ2lzdGVyIHJlYWQvd3JpdGUgbG9naWMsIHdoaWNoIGlzIGEgY2xhc3NpYyB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgdGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZGV2aWNlIGVtdWxhdGlvbiAocmF3IGdhZGdldCBvciBzeXprYWxsZXIpIG1ha2VzIGl0IHZlcnkgcHJvbWlzaW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgYSAmIzM0O1dvcnRoRnV6emluZyA9IHRydWUmIzM0OyBzY2VuYXJpby4KClNvLCBpbiBzdW1tYXJ5OgoKMS4gICoqV29ydGhGdXp6aW5nOiBZZXMuKiogUmVnaXN0ZXIgcmVhZC93cml0ZSBtb2RpZmljYXRpb24gaW4gYHI4MTUyLmNgLCByZWFjaGFibGUgdmlhIFVTQiBlbXVsYXRpb24uCjIuICAqKkZvY3VzU3ltYm9sczoqKiBgZ2VuZXJpY19vY3BfcmVhZGAsIGBnZW5lcmljX29jcF93cml0ZWAsIGBwbGFfb2NwX3JlYWRgLCBgcGxhX29jcF93cml0ZWAsIGB1c2Jfb2NwX3dyaXRlYCwgYW5kIGBydGw4MTUyX3Byb2JlYC4KMy4gICoqRW5hYmxlQ29uZmlnczoqKiBgVVNCX1JUTDgxNTJgLCBgVVNCX05FVF9EUklWRVJTYCwgYFVTQmAsIGBORVRgLgo0LiAgKipSZWFzb25pbmc6KiogVGhlIG1vZGlmaWNhdGlvbiB0YXJnZXRzIHJlZ2lzdGVyIGFjY2VzcyB3aXRoaW4gYSBVU0IgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGlzIGEgZ29vZCBmdXp6aW5nIHRhcmdldCBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWwgZm9yIGV4cGxvaXRpbmcgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyB0aGF0IGRvIG5vdCBtZWV0IHNhbml0aXphdGlvbiBjcml0ZXJpYS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBXZSBoYXZlIG91ciBwbGFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1JUTDgxNTImIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX29jcF9yZWFkJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfb2NwX3dyaXRlJiMzNDssCiAgICAmIzM0O3BsYV9vY3BfcmVhZCYjMzQ7LAogICAgJiMzNDtwbGFfb2NwX3dyaXRlJiMzNDssCiAgICAmIzM0O3VzYl9vY3Bfd3JpdGUmIzM0OywKICAgICYjMzQ7cnRsODE1Ml9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHJlZ2lzdGVyIGNodW5rIGxvb3AgY2FsY3VsYXRpb25zIGluIGdlbmVyaWNfb2NwX3JlYWQoKSBhbmQgZ2VuZXJpY19vY3Bfd3JpdGUoKSB3aXRoaW4gdGhlIFJlYWx0ZWsgUlRMODE1Mi9SVEw4MTUzIFVTQiBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gYW5kIFVTQiByYXcgZ2FkZ2V0IGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9SVEw4MTUyJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19vY3BfcmVhZCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX29jcF93cml0ZSYjMzQ7LAogICAgJiMzNDtwbGFfb2NwX3JlYWQmIzM0OywKICAgICYjMzQ7cGxhX29jcF93cml0ZSYjMzQ7LAogICAgJiMzNDt1c2Jfb2NwX3dyaXRlJiMzNDssCiAgICAmIzM0O3J0bDgxNTJfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWdpc3RlciBjaHVuayBsb29wIGNhbGN1bGF0aW9ucyBpbiBnZW5lcmljX29jcF9yZWFkKCkgYW5kIGdlbmVyaWNfb2NwX3dyaXRlKCkgd2l0aGluIHRoZSBSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBVU0IgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC91c2IvcjgxNTIuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIGFuZCBVU0IgcmF3IGdhZGdldCBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBjbGVhbiByZWZhY3RvcmluZyBvZiB0aGUgY2h1bmtpbmcgbG9vcHMgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIChgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgKSwgcmVwbGFjaW5nIHJlZHVuZGFudCBgaWYgKHNpemUgXHUwMDNlIGxpbWl0KWAgYnJhbmNoaW5nIHdpdGggYG1pbihzaXplLCBsaW1pdClgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBhbHRlciB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBsZW5ndGhzIG9yIGNvcHkgYm91bmRhcmllcywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBjcmVhdGUgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBidWZmZXIvbWVtb3J5IHNhZmV0eSBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZWQ5MDg5YjhjZTBhM2FlNjMwMmI1NGViMmRlZmI1NDIxMGJmZTc1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwMToxMDozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jIGIvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMKaW5kZXggZjYxNjg2NDMzMDMxYy4uYWYzZDdkY2IyZjE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMKQEAgLTE0MzIsMjQgJiM0MzsxNDMyLDE1IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLAogCQlyZXR1cm4gLUVQRVJNOwogCiAJd2hpbGUgKHNpemUpIHsKLQkJaWYgKHNpemUgJmd0OyBsaW1pdCkgewotCQkJcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTsKLQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCWJyZWFrOwotCi0JCQlpbmRleCAmIzQzOz0gbGltaXQ7Ci0JCQlkYXRhICYjNDM7PSBsaW1pdDsKLQkJCXNpemUgLT0gbGltaXQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7Ci0JCQlpZiAocmV0ICZsdDsgMCkKLQkJCQlicmVhazsKJiM0MzsJCXUxNiBuID0gbWluKHNpemUsIGxpbWl0KTsKIAotCQkJaW5kZXggJiM0Mzs9IHNpemU7Ci0JCQlkYXRhICYjNDM7PSBzaXplOwotCQkJc2l6ZSA9IDA7CiYjNDM7CQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbiwgZGF0YSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKIAkJCWJyZWFrOwotCQl9CiYjNDM7CiYjNDM7CQlpbmRleCAmIzQzOz0gbjsKJiM0MzsJCWRhdGEgJiM0Mzs9IG47CiYjNDM7CQlzaXplIC09IG47CiAJfQogCiAJaWYgKHJldCA9PSAtRU5PREVWKQpAQCAtMTQ5OSwyOCAmIzQzOzE0OTAsMTYgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sCiAJCQlzaXplIC09IDQ7CiAKIAkJd2hpbGUgKHNpemUpIHsKLQkJCWlmIChzaXplICZndDsgbGltaXQpIHsKLQkJCQlyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwKLQkJCQkJCSAgICB0eXBlIHwgQllURV9FTl9EV09SRCwKLQkJCQkJCSAgICBsaW1pdCwgZGF0YSk7Ci0JCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJCWdvdG8gZXJyb3IxOwotCi0JCQkJaW5kZXggJiM0Mzs9IGxpbWl0OwotCQkJCWRhdGEgJiM0Mzs9IGxpbWl0OwotCQkJCXNpemUgLT0gbGltaXQ7Ci0JCQl9IGVsc2UgewotCQkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LAotCQkJCQkJICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELAotCQkJCQkJICAgIHNpemUsIGRhdGEpOwotCQkJCWlmIChyZXQgJmx0OyAwKQotCQkJCQlnb3RvIGVycm9yMTsKLQotCQkJCWluZGV4ICYjNDM7PSBzaXplOwotCQkJCWRhdGEgJiM0Mzs9IHNpemU7Ci0JCQkJc2l6ZSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9CiYjNDM7CQkJdTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpOwomIzQzOwomIzQzOwkJCXJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCwKJiM0MzsJCQkJCSAgICBuLCBkYXRhKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJvcjE7CiYjNDM7CiYjNDM7CQkJaW5kZXggJiM0Mzs9IG47CiYjNDM7CQkJZGF0YSAmIzQzOz0gbjsKJiM0MzsJCQlzaXplIC09IG47CiAJCX0KIAogCQkvKiBTZXQgdGhlIGxhc3QgRFdPUkQgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKlJlZmFjdG9yaW5nIHRoZSBSODE1MiBPQ1AgQWNjZXNzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgY2xlYW5pbmcgdXAgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMgaW4gdGhlIGByODE1Mi5jYCBkcml2ZXIuIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyByZWR1Y2luZyBjb21wbGV4aXR5IGlzIGFsd2F5cyB3ZWxjb21lLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgKmhvdyogaXQmIzM5O3Mgc2ltcGxpZmllZC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAxNDMyIGFuZCAxNDk5LiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aG9zZSBzZWN0aW9ucywgb3IgbWF5YmUgYGdyZXBwZXJgIGlmIEkgd2FudCB0byBxdWlja2x5IHNlZSB0aGUgY29udGV4dCBhcm91bmQgdGhvc2UgbGluZXMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gR290dGEgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVlbiBzdHJlYW1saW5lZC4gV2hhdCB3YXMgaW5lZmZpY2llbnQgb3IgcmVkdW5kYW50IGJlZm9yZT8gSG9wZWZ1bGx5LCB0aGUgcGF0Y2ggbm90ZXMgcHJvdmlkZSBzb21lIGluc2lnaHRzIHRvby4gQnV0IEkgbmVlZCB0byB2ZXJpZnkgZXZlcnl0aGluZyB3aXRoIG15IG93biBleWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQyMDpcdHtcbjE0MjE6XHRcdHUxNiBsaW1pdCA9IDY0O1xuMTQyMjpcdFx0aW50IHJldCA9IDA7XG4xNDIzOlx0XG4xNDI0Olx0XHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFx1MDAyNnRwLVx1MDAzZWZsYWdzKSlcbjE0MjU6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xNDI2Olx0XG4xNDI3Olx0XHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xuMTQyODpcdFx0aWYgKChzaXplIFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXHUwMDI2IDMpIHx8ICFkYXRhKVxuMTQyOTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQzMDpcdFxuMTQzMTpcdFx0aWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4xNDMyOlx0XHRcdHJldHVybiAtRVBFUk07XG4xNDMzOlx0XG4xNDM0Olx0XHR3aGlsZSAoc2l6ZSkge1xuMTQzNTpcdFx0XHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XG4xNDM2Olx0XG4xNDM3Olx0XHRcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcbjE0Mzg6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Mzk6XHRcdFx0XHRicmVhaztcbjE0NDA6XHRcbjE0NDE6XHRcdFx0aW5kZXggJiM0Mzs9IG47XG4xNDQyOlx0XHRcdGRhdGEgJiM0Mzs9IG47XG4xNDQzOlx0XHRcdHNpemUgLT0gbjtcbjE0NDQ6XHRcdH1cbjE0NDU6XHRcbjE0NDY6XHRcdGlmIChyZXQgPT0gLUVOT0RFVilcbjE0NDc6XHRcdFx0cnRsX3NldF91bnBsdWcodHApO1xuMTQ0ODpcdFxuMTQ0OTpcdFx0cmV0dXJuIHJldDtcbjE0NTA6XHR9XG4xNDUxOlx0XG4xNDUyOlx0c3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXG4xNDUzOlx0XHRcdFx0ICAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXG4xNDU0Olx0e1xuMTQ1NTpcdFx0aW50IHJldDtcbjE0NTY6XHRcdHUxNiBieXRlZW5fc3RhcnQsIGJ5dGVlbl9lbmQsIGJ5ZW47XG4xNDU3Olx0XHR1MTYgbGltaXQgPSA1MTI7XG4xNDU4Olx0XG4xNDU5Olx0XHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFx1MDAyNnRwLVx1MDAzZWZsYWdzKSlcbjE0NjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xNDYxOlx0XG4xNDYyOlx0XHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xuMTQ2MzpcdFx0aWYgKChzaXplIFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXHUwMDI2IDMpIHx8ICFkYXRhKVxuMTQ2NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ2NTpcdFxuMTQ2NjpcdFx0aWYgKCh1MzIpaW5kZXggJiM0MzsgKHUzMilzaXplIFx1MDAzZSAweGZmZmYpXG4xNDY3Olx0XHRcdHJldHVybiAtRVBFUk07XG4xNDY4Olx0XG4xNDY5Olx0XHRieXRlZW5fc3RhcnQgPSBieXRlZW4gXHUwMDI2IEJZVEVfRU5fU1RBUlRfTUFTSztcbjE0NzA6XHRcdGJ5dGVlbl9lbmQgPSBieXRlZW4gXHUwMDI2IEJZVEVfRU5fRU5EX01BU0s7XG4xNDcxOlx0XG4xNDcyOlx0XHRieWVuID0gYnl0ZWVuX3N0YXJ0IHwgKGJ5dGVlbl9zdGFydCBcdTAwM2NcdTAwM2MgNCk7XG4xNDczOlx0XG4xNDc0Olx0XHQvKiBTcGxpdCB0aGUgZmlyc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cbjE0NzU6XHRcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpIHtcbjE0NzY6XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBieWVuLCA0LCBkYXRhKTtcbjE0Nzc6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0Nzg6XHRcdFx0XHRnb3RvIGVycm9yMTtcbjE0Nzk6XHRcbjE0ODA6XHRcdFx0aW5kZXggJiM0Mzs9IDQ7XG4xNDgxOlx0XHRcdGRhdGEgJiM0Mzs9IDQ7XG4xNDgyOlx0XHRcdHNpemUgLT0gNDtcbjE0ODM6XHRcdH1cbjE0ODQ6XHRcbjE0ODU6XHRcdGlmIChzaXplKSB7XG4xNDg2Olx0XHRcdGJ5ZW4gPSBieXRlZW5fZW5kIHwgKGJ5dGVlbl9lbmQgXHUwMDNlXHUwMDNlIDQpO1xuMTQ4NzpcdFxuMTQ4ODpcdFx0XHQvKiBTcGxpdCB0aGUgbGFzdCBEV09SRCBpZiB0aGUgYnl0ZV9lbiBpcyBub3QgMHhmZiAqL1xuMTQ4OTpcdFx0XHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxuMTQ5MDpcdFx0XHRcdHNpemUgLT0gNDtcbjE0OTE6XHRcbjE0OTI6XHRcdFx0d2hpbGUgKHNpemUpIHtcbjE0OTM6XHRcdFx0XHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XG4xNDk0Olx0XG4xNDk1Olx0XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuMTQ5NjpcdFx0XHRcdFx0XHQgICAgbiwgZGF0YSk7XG4xNDk3Olx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE0OTg6XHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuMTQ5OTpcdFxuMTUwMDpcdFx0XHRcdGluZGV4ICYjNDM7PSBuO1xuMTUwMTpcdFx0XHRcdGRhdGEgJiM0Mzs9IG47XG4xNTAyOlx0XHRcdFx0c2l6ZSAtPSBuO1xuMTUwMzpcdFx0XHR9XG4xNTA0Olx0XG4xNTA1Olx0XHRcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xuMTUwNjpcdFx0XHRpZiAoYnllbiAhPSBCWVRFX0VOX0RXT1JEKVxuMTUwNzpcdFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XG4xNTA4Olx0XHR9XG4xNTA5Olx0XG4xNTEwOlx0ZXJyb3IxOlxuMTUxMTpcdFx0aWYgKHJldCA9PSAtRU5PREVWKVxuMTUxMjpcdFx0XHRydGxfc2V0X3VucGx1Zyh0cCk7XG4xNTEzOlx0XG4xNTE0Olx0XHRyZXR1cm4gcmV0O1xuMTUxNTpcdH1cbjE1MTY6XHRcbjE1MTc6XHRzdGF0aWMgaW5saW5lXG4xNTE4Olx0aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxuMTUxOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1MAoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiA0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBSZWZhY3RvcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZy4gVGhlIGNvZGUmIzM5O3MgY2hhbmdlZCB0byByZXBsYWNlIHRoZSByZWR1bmRhbnQgYGlmL2Vsc2VgIGxvZ2ljIHdpdGggYSBtb3JlIGVsZWdhbnQgdXNlIG9mIGBtaW4oc2l6ZSwgbGltaXQpYC4gVGhpcyBpcyBhIGNsYXNzaWMgc2ltcGxpZmljYXRpb24gc3RyYXRlZ3kuIEJ5IHVzaW5nIGB1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7YCB3ZSBlc3NlbnRpYWxseSBzdHJlYW1saW5lIHRoZSBjaHVua2luZyBsb2dpYyBpbiBib3RoIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYC4gSWYgYHNpemVgIGlzIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byBgbGltaXRgLCBgbWluYCBlZmZlY3RpdmVseSByZXR1cm5zIGBzaXplYCBzbyB0aGF0IHRoZSBvcmlnaW5hbCBiZWhhdmlvciBpcyBwcmVzZXJ2ZWQuIFRoZSBzdWJzZXF1ZW50IGNhbGxzIHRvIGBnZXRfcmVnaXN0ZXJzYC9gc2V0X3JlZ2lzdGVyc2AgY29ycmVjdGx5IHVzZSBgbmAgKGVmZmVjdGl2ZWx5IGBzaXplYCBpbiB0aGlzIGNhc2UpLCBhbmQgdGhlIGFkanVzdG1lbnRzIHRvIGBpbmRleGAsIGBkYXRhYCwgYW5kIGBzaXplYCBhcmUgY2xlYW4uIFdoZW4gYHNpemUgJmx0Oz0gbGltaXRgLCBhZnRlciB0aGUgcmVnaXN0ZXIgYWNjZXNzLCB0aGUgbG9vcCB3aWxsIHRlcm1pbmF0ZS4KCkNydWNpYWxseSwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHJlZmFjdG9yaW5nIGlzICpmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCogYW5kLCBtb3N0IGltcG9ydGFudGx5LCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnktcmVsYXRlZCBpc3N1ZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCB1c2FnZSBvZiBtZW1vcnkuIERvZXMgaXQgYWx0ZXIgaG93IG1lbW9yeSBpcyAqaW5pdGlhbGl6ZWQqPyBObywgdGhlIGV4aXN0aW5nIGJ1ZmZlcnMgYXJlIHVuY2hhbmdlZCwgdGhlIGFtb3VudCBvZiBkYXRhIHJlYWQvd3JpdHRlbiBpcyB0aGUgc2FtZSwgYW5kIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIGhvdyBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZC4gTm8gaW1wYWN0IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgZmllbGRzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLiBOb3RoaW5nIHRoZXJlLgoKTGV0JiMzOTtzIHJ1biB0aHJvdWdoIGEgcXVpY2sgY2hlY2tsaXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZToKKiAgIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlPyBOb3BlLgoqICAgS01TQU4tc3BlY2lmaWMgaXNzdWVzPyBOb25lIGFwcGFyZW50LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgZmFsc2UuIFRoaXMgaXMgYSBjbGVhbiByZWZhY3RvciB0aGF0JiMzOTtzIHB1cmVseSBhYm91dCBvcHRpbWl6aW5nIHRoZSBleGlzdGluZyBsb2dpYyBhbmQgZWxpbWluYXRpbmcgcmVkdW5kYW50IGNvZGUgcGF0aHMuIFRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSByZWZhY3RvcmluZyB1c2VzIGBtaW5gIHRvIHNpbXBsaWZ5IGxvb3AgbG9naWMgd2l0aGluIGByODE1Mi5jYCYjMzk7cyBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgZnVuY3Rpb25zLiBUaGUgcmVmYWN0b3JpbmcgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSwgdG91Y2gsIG9yIGFsdGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjayB2YXJpYWJsZXMsIHN0cnVjdCBpbml0aWFsaXphdGlvbiwgb3IgbWVtb3J5IGNvcGllcyB0byB1c2VyIHNwYWNlLiBGdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBjbGVhbiByZWZhY3RvcmluZyBvZiB0aGUgY2h1bmtpbmcgbG9vcHMgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIChgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgKSwgcmVwbGFjaW5nIHJlZHVuZGFudCBgaWYgKHNpemUgXHUwMDNlIGxpbWl0KWAgYnJhbmNoaW5nIHdpdGggYG1pbihzaXplLCBsaW1pdClgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBhbHRlciB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBsZW5ndGhzIG9yIGNvcHkgYm91bmRhcmllcywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBjcmVhdGUgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBidWZmZXIvbWVtb3J5IHNhZmV0eSBpc3N1ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nIG9mIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgKGBkcml2ZXJzL25ldC91c2IvcjgxNTIuY2ApLCByZXBsYWNpbmcgcmVkdW5kYW50IGBpZiAoc2l6ZSBcdTAwM2UgbGltaXQpYCBicmFuY2hpbmcgd2l0aCBgbWluKHNpemUsIGxpbWl0KWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIGFsdGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGxlbmd0aHMgb3IgY29weSBib3VuZGFyaWVzLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgYW5kIGRvZXMgbm90IGNyZWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1ZmZlci9tZW1vcnkgc2FmZXR5IGlzc3Vlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MTA6MzguMjgxMTE1MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM2NjEzMTgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfUlRMODE1MlwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmVyaWNfb2NwX3JlYWRcIixcbiAgICBcImdlbmVyaWNfb2NwX3dyaXRlXCIsXG4gICAgXCJwbGFfb2NwX3JlYWRcIixcbiAgICBcInBsYV9vY3Bfd3JpdGVcIixcbiAgICBcInVzYl9vY3Bfd3JpdGVcIixcbiAgICBcInJ0bDgxNTJfcHJvYmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgY2xlYW4gcmVmYWN0b3Jpbmcgb2YgdGhlIGNodW5raW5nIGxvb3BzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCAoYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCksIHJlcGxhY2luZyByZWR1bmRhbnQgYGlmIChzaXplIFxcdTAwM2UgbGltaXQpYCBicmFuY2hpbmcgd2l0aCBgbWluKHNpemUsIGxpbWl0KWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIGFsdGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGxlbmd0aHMgb3IgY29weSBib3VuZGFyaWVzLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgYW5kIGRvZXMgbm90IGNyZWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1ZmZlci9tZW1vcnkgc2FmZXR5IGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHJlZ2lzdGVyIGNodW5rIGxvb3AgY2FsY3VsYXRpb25zIGluIGdlbmVyaWNfb2NwX3JlYWQoKSBhbmQgZ2VuZXJpY19vY3Bfd3JpdGUoKSB3aXRoaW4gdGhlIFJlYWx0ZWsgUlRMODE1Mi9SVEw4MTUzIFVTQiBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jKS4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gYW5kIFVTQiByYXcgZ2FkZ2V0IGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjM4LjI4MTEyMDUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkzODk3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZWQ5MDg5YjhjZTBhM2FlNjMwMmI1NGViMmRlZmI1NDIxMGJmZTc1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDE6MTA6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xcbmluZGV4IGY2MTY4NjQzMzAzMWMuLmFmM2Q3ZGNiMmYxNDEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xcbkBAIC0xNDMyLDI0ICsxNDMyLDE1IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLFxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXG4gXFx0d2hpbGUgKHNpemUpIHtcXG4tXFx0XFx0aWYgKHNpemUgXFx1MDAzZSBsaW1pdCkge1xcbi1cXHRcXHRcXHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xcbi1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHRcXHRpbmRleCArPSBsaW1pdDtcXG4tXFx0XFx0XFx0ZGF0YSArPSBsaW1pdDtcXG4tXFx0XFx0XFx0c2l6ZSAtPSBsaW1pdDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xcbi1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHUxNiBuID0gbWluKHNpemUsIGxpbWl0KTtcXG4gXFxuLVxcdFxcdFxcdGluZGV4ICs9IHNpemU7XFxuLVxcdFxcdFxcdGRhdGEgKz0gc2l6ZTtcXG4tXFx0XFx0XFx0c2l6ZSA9IDA7XFxuK1xcdFxcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuK1xcbitcXHRcXHRpbmRleCArPSBuO1xcbitcXHRcXHRkYXRhICs9IG47XFxuK1xcdFxcdHNpemUgLT0gbjtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHJldCA9PSAtRU5PREVWKVxcbkBAIC0xNDk5LDI4ICsxNDkwLDE2IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLFxcbiBcXHRcXHRcXHRzaXplIC09IDQ7XFxuIFxcbiBcXHRcXHR3aGlsZSAoc2l6ZSkge1xcbi1cXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGxpbWl0KSB7XFxuLVxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBsaW1pdCwgZGF0YSk7XFxuLVxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRcXHRnb3RvIGVycm9yMTtcXG4tXFxuLVxcdFxcdFxcdFxcdGluZGV4ICs9IGxpbWl0O1xcbi1cXHRcXHRcXHRcXHRkYXRhICs9IGxpbWl0O1xcbi1cXHRcXHRcXHRcXHRzaXplIC09IGxpbWl0O1xcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZSwgZGF0YSk7XFxuLVxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRcXHRnb3RvIGVycm9yMTtcXG4tXFxuLVxcdFxcdFxcdFxcdGluZGV4ICs9IHNpemU7XFxuLVxcdFxcdFxcdFxcdGRhdGEgKz0gc2l6ZTtcXG4tXFx0XFx0XFx0XFx0c2l6ZSA9IDA7XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHUxNiBuID0gbWluKHNpemUsIGxpbWl0KTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG4sIGRhdGEpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJvcjE7XFxuK1xcbitcXHRcXHRcXHRpbmRleCArPSBuO1xcbitcXHRcXHRcXHRkYXRhICs9IG47XFxuK1xcdFxcdFxcdHNpemUgLT0gbjtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogU2V0IHRoZSBsYXN0IERXT1JEICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjM4Ljg5MTI1MTI5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjgyMDAwNTc1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1JUTDgxNTJcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX29jcF9yZWFkXCIsXG4gICAgXCJnZW5lcmljX29jcF93cml0ZVwiLFxuICAgIFwicGxhX29jcF9yZWFkXCIsXG4gICAgXCJwbGFfb2NwX3dyaXRlXCIsXG4gICAgXCJ1c2Jfb2NwX3dyaXRlXCIsXG4gICAgXCJydGw4MTUyX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWdpc3RlciBjaHVuayBsb29wIGNhbGN1bGF0aW9ucyBpbiBnZW5lcmljX29jcF9yZWFkKCkgYW5kIGdlbmVyaWNfb2NwX3dyaXRlKCkgd2l0aGluIHRoZSBSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBVU0IgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC91c2IvcjgxNTIuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIGFuZCBVU0IgcmF3IGdhZGdldCBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNlZDkwODliOGNlMGEzYWU2MzAyYjU0ZWIyZGVmYjU0MjEwYmZlNzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAxOjEwOjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuaW5kZXggZjYxNjg2NDMzMDMxYy4uYWYzZDdkY2IyZjE0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuY1xuQEAgLTE0MzIsMjQgKzE0MzIsMTUgQEAgc3RhdGljIGludCBnZW5lcmljX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4gXHR3aGlsZSAoc2l6ZSkge1xuLVx0XHRpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbGltaXQsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRpbmRleCArPSBsaW1pdDtcbi1cdFx0XHRkYXRhICs9IGxpbWl0O1xuLVx0XHRcdHNpemUgLT0gbGltaXQ7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIHNpemUsIGRhdGEpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRicmVhaztcbitcdFx0dTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpO1xuIFxuLVx0XHRcdGluZGV4ICs9IHNpemU7XG4tXHRcdFx0ZGF0YSArPSBzaXplO1xuLVx0XHRcdHNpemUgPSAwO1xuK1x0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbiwgZGF0YSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcbitcdFx0aW5kZXggKz0gbjtcbitcdFx0ZGF0YSArPSBuO1xuK1x0XHRzaXplIC09IG47XG4gXHR9XG4gXG4gXHRpZiAocmV0ID09IC1FTk9ERVYpXG5AQCAtMTQ5OSwyOCArMTQ5MCwxNiBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3dyaXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IGJ5dGVlbixcbiBcdFx0XHRzaXplIC09IDQ7XG4gXG4gXHRcdHdoaWxlIChzaXplKSB7XG4tXHRcdFx0aWYgKHNpemUgXHUwMDNlIGxpbWl0KSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIGxpbWl0LCBkYXRhKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuLVxuLVx0XHRcdFx0aW5kZXggKz0gbGltaXQ7XG4tXHRcdFx0XHRkYXRhICs9IGxpbWl0O1xuLVx0XHRcdFx0c2l6ZSAtPSBsaW1pdDtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cmV0ID0gc2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsXG4tXHRcdFx0XHRcdFx0ICAgIHR5cGUgfCBCWVRFX0VOX0RXT1JELFxuLVx0XHRcdFx0XHRcdCAgICBzaXplLCBkYXRhKTtcbi1cdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRcdGdvdG8gZXJyb3IxO1xuLVxuLVx0XHRcdFx0aW5kZXggKz0gc2l6ZTtcbi1cdFx0XHRcdGRhdGEgKz0gc2l6ZTtcbi1cdFx0XHRcdHNpemUgPSAwO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuK1x0XHRcdHUxNiBuID0gbWluKHNpemUsIGxpbWl0KTtcbitcbitcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4rXHRcdFx0XHRcdCAgICBuLCBkYXRhKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJvcjE7XG4rXG4rXHRcdFx0aW5kZXggKz0gbjtcbitcdFx0XHRkYXRhICs9IG47XG4rXHRcdFx0c2l6ZSAtPSBuO1xuIFx0XHR9XG4gXG4gXHRcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MTA6MzguODkxMjUyNTg2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIyNjY5NTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgdGhlIHI4MTUyLmMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBoYXZlIGEgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIHJlbGV2YW50IHRvIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFRoZSBmdW5jdGlvbnMgY2hhbmdlZCwgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgLCBhcmUgdGhlIGZvY3VzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgVVNCIG5ldHdvcmsgZHJpdmVyLCB3aGljaCB3b3VsZCBiZSByZWxldmFudCBzaW5jZSB3ZSBoYXZlIHN5emthbGxlcidzIFVTQiBSYXcgR2FkZ2V0IGNhcGFiaWxpdGllcyBhbmQgZ2VuZXJhbCBVU0IgbmV0d29ya2luZyBmdXp6aW5nIHRvIGNvbnNpZGVyLlxuXG5UbyBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGByODE1Mi5jYCwgSSdsbCBkaXZlIGludG8gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBhbmQgaG93IGl0J3MgY2FsbGVkLiBUaGlzIG1lYW5zIGNoZWNraW5nIGl0cyBLY29uZmlnIGVudHJpZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZHJpdmVyIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSB0YXJnZXRlZCBieSBvdXIgY3VycmVudCBmdXp6aW5nIHNldHVwLiBJJ2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZWZmaWNpZW50bHkgZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24uIE15IGdvYWwgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhpcyBtb2RpZmljYXRpb24gaW50cm9kdWNlcyBhbnkgbmV3IFVTQiBpbnRlcmZhY2VzIG9yIGJlaGF2aW91cnMgdGhhdCBjb3VsZCBiZSBleHBvc2VkIGFuZCBmdXp6ZWQgZWZmZWN0aXZlbHkgd2l0aGluIG91ciBjdXJyZW50IGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjQ0LjExNzk1MjI4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDA4MTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1JUTDgxNTJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTg4PWNvbmZpZyBVU0JfUlRMODE1MFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctOTgtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6OTk6Y29uZmlnIFVTQl9SVEw4MTUyXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTAwLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBCYXNlZCBVU0IgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjQ0LjIwMjA0NDUxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMjc4NDcwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIFVTQiBOZXR3b3JraW5nIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIFVTQiBuZXR3b3JraW5nIGRyaXZlciBjb25maWd1cmF0aW9uLiBMZXQncyBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTkuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCBhIHdob2xlIGJ1bmNoIG9mIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBtYXliZSBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvbywgZGV0YWlsaW5nIHdoaWNoIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoaXMgVVNCIG5ldHdvcmtpbmcgc3VwcG9ydCBiZWNvbWVzIGF2YWlsYWJsZS4gSSBuZWVkIHRvIHNlZSBpZiBpdCBkZXBlbmRzIG9uIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGRyaXZlcnMsIG5ldHdvcmtpbmcgc3RhY2sgZmVhdHVyZXMsIG9yIHBlcmhhcHMgZXZlbiBvdGhlciBVU0ItcmVsYXRlZCBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgd2hlcmUgSSBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBJIG5lZWQgdG8gY2hlY2sgd2hlbiBJJ20gZGVidWdnaW5nIGEgY29uZmlndXJhdGlvbiBpc3N1ZS4gVGhpcyBsaW5lIGlzIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk2NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjQ2LjQyOTg5NTk2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICA5NzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGw4MTUwLlxcbiAgOTg6XFx0XFxuICA5OTpcXHRjb25maWcgVVNCX1JUTDgxNTJcXG4gMTAwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBCYXNlZCBVU0IgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuIDEwMTpcXHRcXHRzZWxlY3QgTUlJXFxuIDEwMjpcXHRcXHRzZWxlY3QgUEhZTElCXFxuIDEwMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTA0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAxMDU6XFx0XFx0aGVscFxcbiAxMDY6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIFJlYWx0ZWsgUlRMODE1MiBiYXNlZCBVU0IgMi4wXFxuIDEwNzpcXHRcXHQgIDEwLzEwMCBFdGhlcm5ldCBhZGFwdGVycyBhbmQgUlRMODE1MyBiYXNlZCBVU0IgMy4wIDEwLzEwMC8xMDAwXFxuIDEwODpcXHRcXHQgIEV0aGVybmV0IGFkYXB0ZXJzLlxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxMTE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcjgxNTIuXFxuIDExMjpcXHRcXG4gMTEzOlxcdGNvbmZpZyBVU0JfTEFONzhYWFxcbiAxMTQ6XFx0XFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBMQU43OFhYIEJhc2VkIFVTQiBFdGhlcm5ldCBBZGFwdGVyc1xcXCJcXG4gMTE1OlxcdFxcdHNlbGVjdCBNSUlcXG4gMTE2OlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuIDExNzpcXHRcXHRzZWxlY3QgTUlDUk9DSElQX1BIWVxcbiAxMTg6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDExOTpcXHRcXHRpbXBseSBORVRfU0VMRlRFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjQ2LjQzMDAwNjQwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NjQzNjU3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVTQiBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIFNwYWNlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBVU0JfUlRMODE1MmAgZHJpdmVyIGxpdmVzIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byBzY2FuIHRoYXQgS2NvbmZpZyBmb3IgdGhlIHN1cnJvdW5kaW5nIG1lbnUgZW50cmllcy4gSSdtIHRoaW5raW5nLCBpbiB0ZXJtcyBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdHJlZSwgaXQncyBwcm9iYWJseSBncm91cGVkIHVuZGVyIHNvbWV0aGluZyBsaWtlIGBVU0JfTkVUX0RSSVZFUlNgIG9yIGEgc2ltaWxhciBicm9hZGVyIGNhdGVnb3J5IGZvciBVU0IgbmV0d29yayBhZGFwdGVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIHNwZWNpZmljIGRyaXZlciB0byB0aGUgcmVzdCBvZiB0aGUgVVNCIG5ldHdvcmsgc3Vic3lzdGVtLCBvciBvdGhlciBzaW1pbGFyIGRyaXZlcnMuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBub3Qgb3JwaGFuZWQuIFRoZSAqS2NvbmZpZyogZmlsZSBzaG91bGQgc2hvdyBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTkwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMDo0OS44OTQzNzQ0MjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbW1lbnQgXFxcIkhvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gIVVTQiBcXHUwMDI2XFx1MDAyNiBORVRcXG4gICA3OlxcdFxcbiAgIDg6XFx0bWVudWNvbmZpZyBVU0JfTkVUX0RSSVZFUlNcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgTmV0d29yayBBZGFwdGVyc1xcXCJcXG4gIDEwOlxcdFxcdGRlZmF1bHQgVVNCIGlmIFVTQlxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBVU0IgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIFVTQl9ORVRfRFJJVkVSU1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgVVNCX0NBVENcXG4gIDE2OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgQ0FUQyBOZXRNYXRlLWJhc2VkIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XFxuICAyMDpcXHRcXHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XFxuICAyMTpcXHRcXHQgIEJlbGtpbiBGNVUwMTFcXG4gIDIyOlxcdFxcdCAgQmVsa2luIEY1VTExMVxcbiAgMjM6XFx0XFx0ICBDQVRDIE5ldE1hdGVcXG4gIDI0OlxcdFxcdCAgQ0FUQyBOZXRNYXRlIElJXFxuICAyNTpcXHRcXHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsXFxuICAyODpcXHRcXHQgIHR5cGljYWxseSBvbiBldGgwLCBpZiBpdCBpcyB0aGUgb25seSBldGhlcm5ldCBkZXZpY2UsIG9yIHBlcmhhcHMgb25cXG4gIDI5OlxcdFxcdCAgZXRoMSwgaWYgeW91IGhhdmUgYSBQQ0kgb3IgSVNBIGV0aGVybmV0IGNhcmQgaW5zdGFsbGVkLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2F0Yy5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Y29uZmlnIFVTQl9LQVdFVEhcXG4gIDM1OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAzNjpcXHRcXHRoZWxwXFxuICAzNzpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBvbmx5XFxuICAzODpcXHRcXHQgIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiB0aGUgS0xTSSBLTDVLVVNCMTAxQiBjaGlwc2V0OlxcbiAgMzk6XFx0XFx0ICAzQ29tIDNDMTkyNTBcXG4gIDQwOlxcdFxcdCAgQURTIFVTQi0xMEJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjQ5Ljg5NDQ1NDkwNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NDk4Njg4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgUjgxNTIgRHJpdmVyKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgMTQwMCB0byAxNTUwLiBUaGF0IHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHNldCBvZiBpbnRlcmFjdGlvbnMsIGFuZCBnaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSB3b3JraW5nIG9uLCBJIHN1c3BlY3QgdGhlIGlzc3VlIG1pZ2h0IGJlIGNvbmNlbnRyYXRlZCB0aGVyZS4gSSdsbCBzdGFydCBieSByZXZpZXdpbmcgdGhvc2UgbGluZXMgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBvcnRpb24gb2YgdGhlIGRyaXZlciBvcGVyYXRlcy4gSG9wZWZ1bGx5LCB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nIGlzIGV2aWRlbnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjUzLjc0NDMyODQ3N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjIzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MjA6XFx0e1xcbjE0MjE6XFx0XFx0dTE2IGxpbWl0ID0gNjQ7XFxuMTQyMjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xNDIzOlxcdFxcbjE0MjQ6XFx0XFx0aWYgKHRlc3RfYml0KFJUTDgxNTJfSU5BQ0NFU1NJQkxFLCBcXHUwMDI2dHAtXFx1MDAzZWZsYWdzKSlcXG4xNDI1OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xcbjE0Mjg6XFx0XFx0aWYgKChzaXplIFxcdTAwMjYgMykgfHwgIXNpemUgfHwgKGluZGV4IFxcdTAwMjYgMykgfHwgIWRhdGEpXFxuMTQyOTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjE0MzA6XFx0XFxuMTQzMTpcXHRcXHRpZiAoKHUzMilpbmRleCArICh1MzIpc2l6ZSBcXHUwMDNlIDB4ZmZmZilcXG4xNDMyOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQzMzpcXHRcXG4xNDM0OlxcdFxcdHdoaWxlIChzaXplKSB7XFxuMTQzNTpcXHRcXHRcXHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XFxuMTQzNjpcXHRcXG4xNDM3OlxcdFxcdFxcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcXG4xNDM4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0Mzk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdFxcdGluZGV4ICs9IG47XFxuMTQ0MjpcXHRcXHRcXHRkYXRhICs9IG47XFxuMTQ0MzpcXHRcXHRcXHRzaXplIC09IG47XFxuMTQ0NDpcXHRcXHR9XFxuMTQ0NTpcXHRcXG4xNDQ2OlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4xNDQ3OlxcdFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4xNDQ4OlxcdFxcbjE0NDk6XFx0XFx0cmV0dXJuIHJldDtcXG4xNDUwOlxcdH1cXG4xNDUxOlxcdFxcbjE0NTI6XFx0c3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXFxuMTQ1MzpcXHRcXHRcXHRcXHQgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCB1MTYgdHlwZSlcXG4xNDU0OlxcdHtcXG4xNDU1OlxcdFxcdGludCByZXQ7XFxuMTQ1NjpcXHRcXHR1MTYgYnl0ZWVuX3N0YXJ0LCBieXRlZW5fZW5kLCBieWVuO1xcbjE0NTc6XFx0XFx0dTE2IGxpbWl0ID0gNTEyO1xcbjE0NTg6XFx0XFxuMTQ1OTpcXHRcXHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFxcdTAwMjZ0cC1cXHUwMDNlZmxhZ3MpKVxcbjE0NjA6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTQ2MTpcXHRcXG4xNDYyOlxcdFxcdC8qIGJvdGggc2l6ZSBhbmQgaW5kaXggbXVzdCBiZSA0IGJ5dGVzIGFsaWduICovXFxuMTQ2MzpcXHRcXHRpZiAoKHNpemUgXFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXFx1MDAyNiAzKSB8fCAhZGF0YSlcXG4xNDY0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdGlmICgodTMyKWluZGV4ICsgKHUzMilzaXplIFxcdTAwM2UgMHhmZmZmKVxcbjE0Njc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xNDY4OlxcdFxcbjE0Njk6XFx0XFx0Ynl0ZWVuX3N0YXJ0ID0gYnl0ZWVuIFxcdTAwMjYgQllURV9FTl9TVEFSVF9NQVNLO1xcbjE0NzA6XFx0XFx0Ynl0ZWVuX2VuZCA9IGJ5dGVlbiBcXHUwMDI2IEJZVEVfRU5fRU5EX01BU0s7XFxuMTQ3MTpcXHRcXG4xNDcyOlxcdFxcdGJ5ZW4gPSBieXRlZW5fc3RhcnQgfCAoYnl0ZWVuX3N0YXJ0IFxcdTAwM2NcXHUwMDNjIDQpO1xcbjE0NzM6XFx0XFxuMTQ3NDpcXHRcXHQvKiBTcGxpdCB0aGUgZmlyc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cXG4xNDc1OlxcdFxcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpIHtcXG4xNDc2OlxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XFxuMTQ3NzpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDc4OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3IxO1xcbjE0Nzk6XFx0XFxuMTQ4MDpcXHRcXHRcXHRpbmRleCArPSA0O1xcbjE0ODE6XFx0XFx0XFx0ZGF0YSArPSA0O1xcbjE0ODI6XFx0XFx0XFx0c2l6ZSAtPSA0O1xcbjE0ODM6XFx0XFx0fVxcbjE0ODQ6XFx0XFxuMTQ4NTpcXHRcXHRpZiAoc2l6ZSkge1xcbjE0ODY6XFx0XFx0XFx0YnllbiA9IGJ5dGVlbl9lbmQgfCAoYnl0ZWVuX2VuZCBcXHUwMDNlXFx1MDAzZSA0KTtcXG4xNDg3OlxcdFxcbjE0ODg6XFx0XFx0XFx0LyogU3BsaXQgdGhlIGxhc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cXG4xNDg5OlxcdFxcdFxcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXFxuMTQ5MDpcXHRcXHRcXHRcXHRzaXplIC09IDQ7XFxuMTQ5MTpcXHRcXG4xNDkyOlxcdFxcdFxcdHdoaWxlIChzaXplKSB7XFxuMTQ5MzpcXHRcXHRcXHRcXHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XFxuMTQ5NDpcXHRcXG4xNDk1OlxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCxcXG4xNDk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBuLCBkYXRhKTtcXG4xNDk3OlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0OTg6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcjE7XFxuMTQ5OTpcXHRcXG4xNTAwOlxcdFxcdFxcdFxcdGluZGV4ICs9IG47XFxuMTUwMTpcXHRcXHRcXHRcXHRkYXRhICs9IG47XFxuMTUwMjpcXHRcXHRcXHRcXHRzaXplIC09IG47XFxuMTUwMzpcXHRcXHRcXHR9XFxuMTUwNDpcXHRcXG4xNTA1OlxcdFxcdFxcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xcbjE1MDY6XFx0XFx0XFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcXG4xNTA3OlxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XFxuMTUwODpcXHRcXHR9XFxuMTUwOTpcXHRcXG4xNTEwOlxcdGVycm9yMTpcXG4xNTExOlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4xNTEyOlxcdFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4xNTEzOlxcdFxcbjE1MTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4xNTE1OlxcdH1cXG4xNTE2OlxcdFxcbjE1MTc6XFx0c3RhdGljIGlubGluZVxcbjE1MTg6XFx0aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbjE1MTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMDo1My43NDQ3NTY3ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYwODg5NTU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgYW5nbGUuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgdGhlIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgaXQncyBhIHJlZmFjdG9yaW5nIG9mIHRoZSBsb29wIGxvZ2ljIHVzaW5nIGBtaW4oKWAgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYGlmL2Vsc2VgIGJyYW5jaGluZy4gVGhlIG9sZCBjb2RlIHdhczpcblxuYGBgY1xud2hpbGUgKHNpemUpIHtcbiAgICBpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbiAgICAgICAgcmV0ID0gZ2V0X3JlZ2lzdGVycyh0cCwgaW5kZXgsIHR5cGUsIGxpbWl0LCBkYXRhKTtcbiAgICAgICAgaWYgKHJldCBcdTAwM2MgMClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBpbmRleCArPSBsaW1pdDtcbiAgICAgICAgZGF0YSArPSBsaW1pdDtcbiAgICAgICAgc2l6ZSAtPSBsaW1pdDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7XG4gICAgICAgIGlmIChyZXQgXHUwMDNjIDApXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgaW5kZXggKz0gc2l6ZTtcbiAgICAgICAgZGF0YSArPSBzaXplO1xuICAgICAgICBzaXplID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxufVxuYGBgXG5cbk5vdyBpdCdzOlxuXG5gYGBjXG53aGlsZSAoc2l6ZSkge1xuICAgIHUxNiBuID0gbWluKHNpemUsIGxpbWl0KTtcbiAgICByZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgbiwgZGF0YSk7XG4gICAgaWYgKHJldCBcdTAwM2MgMClcbiAgICAgICAgYnJlYWs7XG4gICAgaW5kZXggKz0gbjtcbiAgICBkYXRhICs9IG47XG4gICAgc2l6ZSAtPSBuO1xufVxuYGBgXG5cblRoZSBzYW1lIHJlZmFjdG9yaW5nIGlzIHByZXNlbnQgZm9yIHRoZSBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9uLCByZXBsYWNpbmcgYHNldF9yZWdpc3RlcnNgIGFuZCBgZ290byBlcnJvcjFgLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBmdXp6aW5nIHNjZW5hcmlvLiBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBgVVNCX1JUTDgxNTJgIFVTQiBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIHRhcmdldCBmb3IgZnV6emluZy4gVVNCIGRyaXZlcnMsIGluIGdlbmVyYWwsIGFyZSBpbmNyZWRpYmx5IHZ1bG5lcmFibGUgdG8gZnV6emluZyBhcyB0aGV5IGFyZSByZWFjaGFibGUgd2l0aCBzeXprYWxsZXIncyBVU0IgUmF3IEdhZGdldCwgVVNCIGVtdWxhdGlvbiwgb3IgZHVtbXlfaGNkLiBUaGlzIGRyaXZlciBpcyBzdGFuZGFyZCwgcmVhY2hhYmxlLCBhbmQga25vd24gdG8gYmUgZnV6emVkLlxuXG5UaGlzIHJlZmFjdG9yaW5nIHRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgZHJpdmVyLiBTbywgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB2dWxuZXJhYmlsaXR5IGFuYWx5c2lzLCB0aGlzIG11c3QgYmUgZnV6emVkLiBSZWdhcmRsZXNzIG9mIHRoZSBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgXCJyZWZhY3RvcmluZ1wiIGNsYWltcywgYW55IG1vZGlmaWNhdGlvbiB0byByZWFjaGFibGUgY29kZSB3YXJyYW50cyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24uIFdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmb3IgYFVTQl9SVEw4MTUyYC4gV2Uga25vdyBgVVNCX1JUTDgxNTJgIGRlcGVuZHMgb24gYFVTQl9ORVRfRFJJVkVSU2AsIGFuZCBgVVNCX05FVF9EUklWRVJTYCBkZXBlbmRzIG9uIGBVU0IgXHUwMDI2XHUwMDI2IE5FVGAuIFRoZXJlZm9yZSwgdGhlIG1pbmltYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgd291bGQgaW5jbHVkZSBgVVNCX1JUTDgxNTJgLCBgVVNCX05FVF9EUklWRVJTYCwgYW5kIGBVU0JgLlxuXG5GaW5hbGx5LCB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgY2FsbCBwYXRocyB0byBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgdXNlcyBvZiB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIGByODE1Mi5jYCB0byBpZGVudGlmeSBlbnRyeSBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMDo1OS4zNTM2NTUwMThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTA5Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdlbmVyaWNfb2NwX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNDEyPXN0YXRpYyB2b2lkIHJ0bF9zZXRfdW5wbHVnKHN0cnVjdCByODE1MiAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDE3LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0MTg6c3RhdGljIGludCBnZW5lcmljX29jcF9yZWFkKHN0cnVjdCByODE1MiAqdHAsIHUxNiBpbmRleCwgdTE2IHNpemUsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQxOS1cXHRcXHRcXHQgICAgdm9pZCAqZGF0YSwgdTE2IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNDUxLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE0NTI6c3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTQ1My1cXHRcXHRcXHQgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCB1MTYgdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1MTg9aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MTkte1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjA6XFx0cmV0dXJuIGdlbmVyaWNfb2NwX3JlYWQodHAsIGluZGV4LCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9QTEEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MjEtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUyND1pbnQgcGxhX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MjUte1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MjY6XFx0cmV0dXJuIGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnl0ZWVuLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9QTEEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MjctfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUzMD1pbnQgdXNiX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MzEte1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1MzI6XFx0cmV0dXJuIGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBpbmRleCwgYnl0ZWVuLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9VU0IpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1MzMtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTUzNT1zdGF0aWMgdTMyIG9jcF9yZWFkX2R3b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTM4LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1Mzk6XFx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZihkYXRhKSwgXFx1MDAyNmRhdGEsIHR5cGUpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NDAtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTQ0PXN0YXRpYyB2b2lkIG9jcF93cml0ZV9kd29yZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE1NDctXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTU0ODpcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIEJZVEVfRU5fRFdPUkQsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTQ5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NTE9c3RhdGljIHUxNiBvY3BfcmVhZF93b3JkKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTYwLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1NjE6XFx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlIHwgYnllbik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU2Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTE1NzA9c3RhdGljIHZvaWQgb2NwX3dyaXRlX3dvcmQoc3RydWN0IHI4MTUyICp0cCwgdTE2IHR5cGUsIHUxNiBpbmRleCwgdTMyIGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTg3LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1ODg6XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIGluZGV4LCBieWVuLCBzaXplb2YodG1wKSwgXFx1MDAyNnRtcCwgdHlwZSk7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTU4OS19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xNTkxPXN0YXRpYyB1OCBvY3BfcmVhZF9ieXRlKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlLCB1MTYgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNTk4LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjE1OTk6XFx0Z2VuZXJpY19vY3BfcmVhZCh0cCwgaW5kZXgsIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNjAwLVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTYwOD1zdGF0aWMgdm9pZCBvY3Bfd3JpdGVfYnl0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgdHlwZSwgdTE2IGluZGV4LCB1MzIgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTE2MjUtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6MTYyNjpcXHRnZW5lcmljX29jcF93cml0ZSh0cCwgaW5kZXgsIGJ5ZW4sIHNpemVvZih0bXApLCBcXHUwMDI2dG1wLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xNjI3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTQ1MDU9c3RhdGljIHZvaWQgcnRsX2NsZWFyX2JwKHN0cnVjdCByODE1MiAqdHAsIHUxNiB0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNDU0My1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo0NTQ0OlxcdGdlbmVyaWNfb2NwX3dyaXRlKHRwLCBQTEFfQlBfMCwgQllURV9FTl9EV09SRCwgYnBfbnVtIFxcdTAwM2NcXHUwMDNjIDEsIGJwLCB0eXBlKTtcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy00NTQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9NTI5OD1zdGF0aWMgdm9pZCBydGxfcmFtX2NvZGVfc3BlZWRfdXAoc3RydWN0IHI4MTUyICp0cCwgc3RydWN0IGZ3X3BoeV9zcGVlZF91cCAqcGh5LCBib29sIHdhaXQpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy01MzI4LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjUzMjk6XFx0XFx0Z2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUocGh5LVxcdTAwM2Vmd19yZWcpLCAweGZmLCBzaXplLCBkYXRhLCBNQ1VfVFlQRV9VU0IpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTUzMzAtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYz01NDc5PXN0YXRpYyB2b2lkIHJ0bDgxNTJfZndfbWFjX2FwcGx5KHN0cnVjdCByODE1MiAqdHAsIHN0cnVjdCBmd19tYWMgKm1hYylcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MTgtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTUxOTpcXHRpZiAoZ2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUobWFjLVxcdTAwM2Vmd19yZWcpLCAweGZmLCBsZW5ndGgsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUyMC1cXHRcXHRcXHQgICAgICBkYXRhLCB0eXBlKSBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTU1MjgtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM6NTUyOTpcXHRpZiAoZ2VuZXJpY19vY3Bfd3JpdGUodHAsIF9fbGUxNl90b19jcHUobWFjLVxcdTAwM2VicF9zdGFydCksIEJZVEVfRU5fRFdPUkQsXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtNTUzMC1cXHRcXHRcXHQgICAgICBBTElHTihfX2xlMTZfdG9fY3B1KG1hYy1cXHUwMDNlYnBfbnVtKSBcXHUwMDNjXFx1MDAzYyAxLCA0KSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jPTkwNzI9c3RhdGljIHZvaWQgcnRsODE1Ml9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtOTA4MC1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYzo5MDgxOlxcdGdlbmVyaWNfb2NwX3JlYWQodHAsIFBMQV9UQUxMWUNOVCwgc2l6ZW9mKHRhbGx5KSwgXFx1MDAyNnRhbGx5LCBNQ1VfVFlQRV9QTEEpO1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTkwODItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjEwOjU5LjQxNTE3MDQyN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTQ0OTMyODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyByODE1MiBEcml2ZXIgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBGb2N1c1N5bWJvbHNgIHNpdHVhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhvc2UgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9ucy4gSSBrbm93IHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIHJlc2lkaW5nIGluIGBkcml2ZXJzL25ldC91c2IvcjgxNTIuY2AuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXksIG9yIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbSwgZ29vZCBjYW5kaWRhdGVzIGZvciBmb2N1cyBzeW1ib2xzPyBJIHNob3VsZCBleHBhbmQgbXkgc2NvcGUgZnJvbSB0aG9zZSB0d28gYW5kIGluY2x1ZGUgYHBsYV9vY3BfcmVhZGAsIGBwbGFfb2NwX3dyaXRlYCwgYW5kIGB1c2Jfb2NwX3dyaXRlYCwgc2luY2UgdGhleSBsaWtlbHkgcmVsYXRlIHNvbWVob3cuXG5cbkJleW9uZCB0aG9zZSwgSSBuZWVkIHRvIGxvb2sgZm9yIHR5cGljYWwgZHJpdmVyIGZ1bmN0aW9ucyB3aXRoaW4gYHI4MTUyLmNgLCBzdWNoIGFzIHRob3NlIHJlbGF0ZWQgdG8gcHJvYmluZywgcmVjZWl2ZSwgb3IgdHJhbnNtaXQgb3BlcmF0aW9ucy4gU3RhbmRhcmQgZHJpdmVyIGZ1bmN0aW9ucyBhcmUgYSBnb29kIGJldC4gU28sIGxldCdzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgcHJvYmUgZnVuY3Rpb24gaW4gYHI4MTUyLmNgLiBUaGF0J3MgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBkcml2ZXIgaW5pdGlhbGl6ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjExOjAxLjk2MDEwNjE4OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwNTIzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRsODE1Ml9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvcjgxNTIuYz0xMDA4Mj1zdGF0aWMgYm9vbCBydGw4MTUyX3N1cHBvcnRzX2xlbm92b19tYWNwYXNzdGhydShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMTA3LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwMTA4OnN0YXRpYyBpbnQgcnRsODE1Ml9wcm9iZV9vbmNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMTA5LVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwgdTggdmVyc2lvbilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jLTEwMzI0LVxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwMzI1OnN0YXRpYyBpbnQgcnRsODE1Ml9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDMyNi1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAzNDItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJUTDgxNTJfUFJPQkVfVFJJRVM7IGkrKykge1xcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwMzQzOlxcdFxcdHJldCA9IHJ0bDgxNTJfcHJvYmVfb25jZShpbnRmLCBpZCwgdmVyc2lvbik7XFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTAzNDQtXFx0XFx0aWYgKHJldCAhPSAtRUFHQUlOKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmM9MTA0MjE9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHJ0bDgxNTJfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMtMTA0MjMtXFx0LmlkX3RhYmxlID1cXHRydGw4MTUyX3RhYmxlLFxcbmRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jOjEwNDI0OlxcdC5wcm9iZSA9XFx0cnRsODE1Ml9wcm9iZSxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTIuYy0xMDQyNS1cXHQuZGlzY29ubmVjdCA9XFx0cnRsODE1Ml9kaXNjb25uZWN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMTowMi4wMTUxNjQ0MzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDkxNjgzNzM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciByODE1Mi5jKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgRm9jdXNTeW1ib2xzYC4gSSBzZWUgdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgaW4gYHI4MTUyLmNgIGFyZSBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAsIGFsb25nc2lkZSB0aGVpciBjYWxsZXJzL2VudHJ5IHBvaW50czogYHJ0bDgxNTJfcHJvYmVgLCBgcGxhX29jcF9yZWFkYCwgYHBsYV9vY3Bfd3JpdGVgLCBhbmQgYHVzYl9vY3Bfd3JpdGVgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCBhcmUgc3RhdGljIG9yIHBvdGVudGlhbGx5IGlubGluZWQuIEdpdmVuIHRoZWlyIGxlbmd0aHMgKDMwIGFuZCA2MCBsaW5lcyByZXNwZWN0aXZlbHkpIGFuZCBtdWx0aXBsZSBjYWxscyB3aXRoaW4gdGhlIGRyaXZlciwgaXQncyBoaWdobHkgbGlrZWx5IHRoZXkgYXJlIG5vdCBzdGF0aWMgb3IgaW5saW5lZC4gVGhpcyBtYWtlcyB0aGVtIGlkZWFsIGZvY3VzIHN5bWJvbHMuIEFkZGluZyB0aGUgb3RoZXJzIHByb3ZpZGVzIGdvb2QgY292ZXJhZ2UuXG5cbk5leHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFdlIGhhdmUgYFVTQl9SVEw4MTUyYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBhbmQgYE5FVGAuIE1ha2VzIHNlbnNlLCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBVU0IgZXRoZXJuZXQgYWRhcHRlci5cblxuTm93LCBsZXQncyBjb25maXJtIGV2ZXJ5dGhpbmcuIEZpcnN0LCAqaXMgaXQgd29ydGggZnV6emluZz8qIFllcywgYWJzb2x1dGVseS4gVGhlIHBhdGNoIGFsdGVycyByZWdpc3RlciByZWFkL3dyaXRlIGxvZ2ljLCB3aGljaCBpcyBhIGNsYXNzaWMgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGRldmljZSBlbXVsYXRpb24gKHJhdyBnYWRnZXQgb3Igc3l6a2FsbGVyKSBtYWtlcyBpdCB2ZXJ5IHByb21pc2luZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgXCJXb3J0aEZ1enppbmcgPSB0cnVlXCIgc2NlbmFyaW8uXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4xLiAgKipXb3J0aEZ1enppbmc6IFllcy4qKiBSZWdpc3RlciByZWFkL3dyaXRlIG1vZGlmaWNhdGlvbiBpbiBgcjgxNTIuY2AsIHJlYWNoYWJsZSB2aWEgVVNCIGVtdWxhdGlvbi5cbjIuICAqKkZvY3VzU3ltYm9sczoqKiBgZ2VuZXJpY19vY3BfcmVhZGAsIGBnZW5lcmljX29jcF93cml0ZWAsIGBwbGFfb2NwX3JlYWRgLCBgcGxhX29jcF93cml0ZWAsIGB1c2Jfb2NwX3dyaXRlYCwgYW5kIGBydGw4MTUyX3Byb2JlYC5cbjMuICAqKkVuYWJsZUNvbmZpZ3M6KiogYFVTQl9SVEw4MTUyYCwgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JgLCBgTkVUYC5cbjQuICAqKlJlYXNvbmluZzoqKiBUaGUgbW9kaWZpY2F0aW9uIHRhcmdldHMgcmVnaXN0ZXIgYWNjZXNzIHdpdGhpbiBhIFVTQiBldGhlcm5ldCBkcml2ZXIuIFRoaXMgaXMgYSBnb29kIGZ1enppbmcgdGFyZ2V0IGJlY2F1c2Ugb2YgdGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGluZyByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIHRoYXQgZG8gbm90IG1lZXQgc2FuaXRpemF0aW9uIGNyaXRlcmlhLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2UgaGF2ZSBvdXIgcGxhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzksIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjExOjA2LjkzMjAwNDg1NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTMwMDgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1JUTDgxNTJcIixcbiAgICBcIlVTQl9ORVRfRFJJVkVSU1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX29jcF9yZWFkXCIsXG4gICAgXCJnZW5lcmljX29jcF93cml0ZVwiLFxuICAgIFwicGxhX29jcF9yZWFkXCIsXG4gICAgXCJwbGFfb2NwX3dyaXRlXCIsXG4gICAgXCJ1c2Jfb2NwX3dyaXRlXCIsXG4gICAgXCJydGw4MTUyX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSByZWdpc3RlciBjaHVuayBsb29wIGNhbGN1bGF0aW9ucyBpbiBnZW5lcmljX29jcF9yZWFkKCkgYW5kIGdlbmVyaWNfb2NwX3dyaXRlKCkgd2l0aGluIHRoZSBSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBVU0IgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC91c2IvcjgxNTIuYykuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIGFuZCBVU0IgcmF3IGdhZGdldCBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9SVEw4MTUyXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIixcbiAgICBcIlVTQlwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19vY3BfcmVhZFwiLFxuICAgIFwiZ2VuZXJpY19vY3Bfd3JpdGVcIixcbiAgICBcInBsYV9vY3BfcmVhZFwiLFxuICAgIFwicGxhX29jcF93cml0ZVwiLFxuICAgIFwidXNiX29jcF93cml0ZVwiLFxuICAgIFwicnRsODE1Ml9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgcmVnaXN0ZXIgY2h1bmsgbG9vcCBjYWxjdWxhdGlvbnMgaW4gZ2VuZXJpY19vY3BfcmVhZCgpIGFuZCBnZW5lcmljX29jcF93cml0ZSgpIHdpdGhpbiB0aGUgUmVhbHRlayBSVEw4MTUyL1JUTDgxNTMgVVNCIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMpLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiBhbmQgVVNCIHJhdyBnYWRnZXQgaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MTE6MDcuMDkxMzEyMTcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU1NTkyMDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjExOjA3LjA5MTg3ODQxMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyNTU1MzQ4OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nIG9mIHRoZSBjaHVua2luZyBsb29wcyBpbiBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgKGBkcml2ZXJzL25ldC91c2IvcjgxNTIuY2ApLCByZXBsYWNpbmcgcmVkdW5kYW50IGBpZiAoc2l6ZSBcXHUwMDNlIGxpbWl0KWAgYnJhbmNoaW5nIHdpdGggYG1pbihzaXplLCBsaW1pdClgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBhbHRlciB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGJ1ZmZlciBsZW5ndGhzIG9yIGNvcHkgYm91bmRhcmllcywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBjcmVhdGUgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBidWlsZHMgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IGFueSBidWZmZXIvbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2VkOTA4OWI4Y2UwYTNhZTYzMDJiNTRlYjJkZWZiNTQyMTBiZmU3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDE6MTA6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcjgxNTIuYyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5pbmRleCBmNjE2ODY0MzMwMzFjLi5hZjNkN2RjYjJmMTQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9yODE1Mi5jXG5AQCAtMTQzMiwyNCArMTQzMiwxNSBAQCBzdGF0aWMgaW50IGdlbmVyaWNfb2NwX3JlYWQoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgc2l6ZSxcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbiBcdHdoaWxlIChzaXplKSB7XG4tXHRcdGlmIChzaXplIFx1MDAzZSBsaW1pdCkge1xuLVx0XHRcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBsaW1pdCwgZGF0YSk7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdGluZGV4ICs9IGxpbWl0O1xuLVx0XHRcdGRhdGEgKz0gbGltaXQ7XG4tXHRcdFx0c2l6ZSAtPSBsaW1pdDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXQgPSBnZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCwgdHlwZSwgc2l6ZSwgZGF0YSk7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdGJyZWFrO1xuK1x0XHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XG4gXG4tXHRcdFx0aW5kZXggKz0gc2l6ZTtcbi1cdFx0XHRkYXRhICs9IHNpemU7XG4tXHRcdFx0c2l6ZSA9IDA7XG4rXHRcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRicmVhaztcbi1cdFx0fVxuK1xuK1x0XHRpbmRleCArPSBuO1xuK1x0XHRkYXRhICs9IG47XG4rXHRcdHNpemUgLT0gbjtcbiBcdH1cbiBcbiBcdGlmIChyZXQgPT0gLUVOT0RFVilcbkBAIC0xNDk5LDI4ICsxNDkwLDE2IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY19vY3Bfd3JpdGUoc3RydWN0IHI4MTUyICp0cCwgdTE2IGluZGV4LCB1MTYgYnl0ZWVuLFxuIFx0XHRcdHNpemUgLT0gNDtcbiBcbiBcdFx0d2hpbGUgKHNpemUpIHtcbi1cdFx0XHRpZiAoc2l6ZSBcdTAwM2UgbGltaXQpIHtcbi1cdFx0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LFxuLVx0XHRcdFx0XHRcdCAgICB0eXBlIHwgQllURV9FTl9EV09SRCxcbi1cdFx0XHRcdFx0XHQgICAgbGltaXQsIGRhdGEpO1xuLVx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdFx0Z290byBlcnJvcjE7XG4tXG4tXHRcdFx0XHRpbmRleCArPSBsaW1pdDtcbi1cdFx0XHRcdGRhdGEgKz0gbGltaXQ7XG4tXHRcdFx0XHRzaXplIC09IGxpbWl0O1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRyZXQgPSBzZXRfcmVnaXN0ZXJzKHRwLCBpbmRleCxcbi1cdFx0XHRcdFx0XHQgICAgdHlwZSB8IEJZVEVfRU5fRFdPUkQsXG4tXHRcdFx0XHRcdFx0ICAgIHNpemUsIGRhdGEpO1xuLVx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdFx0Z290byBlcnJvcjE7XG4tXG4tXHRcdFx0XHRpbmRleCArPSBzaXplO1xuLVx0XHRcdFx0ZGF0YSArPSBzaXplO1xuLVx0XHRcdFx0c2l6ZSA9IDA7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4rXHRcdFx0dTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpO1xuK1xuK1x0XHRcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCxcbitcdFx0XHRcdFx0ICAgIG4sIGRhdGEpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycm9yMTtcbitcbitcdFx0XHRpbmRleCArPSBuO1xuK1x0XHRcdGRhdGEgKz0gbjtcbitcdFx0XHRzaXplIC09IG47XG4gXHRcdH1cbiBcbiBcdFx0LyogU2V0IHRoZSBsYXN0IERXT1JEICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMTowNy4wOTE4Nzk2MDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUwMDMyMzY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKlJlZmFjdG9yaW5nIHRoZSBSODE1MiBPQ1AgQWNjZXNzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBjbGVhbmluZyB1cCB0aGUgYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIGZ1bmN0aW9ucyBpbiB0aGUgYHI4MTUyLmNgIGRyaXZlci4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCDigJMgcmVkdWNpbmcgY29tcGxleGl0eSBpcyBhbHdheXMgd2VsY29tZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mICpob3cqIGl0J3Mgc2ltcGxpZmllZC4gTGV0J3Mgc2VlLi4uIEknbGwgbmVlZCB0byBsb29rIGF0IGBkcml2ZXJzL25ldC91c2IvcjgxNTIuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMTQzMiBhbmQgMTQ5OS4gSSdsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aG9zZSBzZWN0aW9ucywgb3IgbWF5YmUgYGdyZXBwZXJgIGlmIEkgd2FudCB0byBxdWlja2x5IHNlZSB0aGUgY29udGV4dCBhcm91bmQgdGhvc2UgbGluZXMgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gR290dGEgZGlnIGludG8gdGhlIGRldGFpbHMgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBiZWVuIHN0cmVhbWxpbmVkLiBXaGF0IHdhcyBpbmVmZmljaWVudCBvciByZWR1bmRhbnQgYmVmb3JlPyBIb3BlZnVsbHksIHRoZSBwYXRjaCBub3RlcyBwcm92aWRlIHNvbWUgaW5zaWdodHMgdG9vLiBCdXQgSSBuZWVkIHRvIHZlcmlmeSBldmVyeXRoaW5nIHdpdGggbXkgb3duIGV5ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjExOjEyLjU5MjIwNTY1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MjA6XFx0e1xcbjE0MjE6XFx0XFx0dTE2IGxpbWl0ID0gNjQ7XFxuMTQyMjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xNDIzOlxcdFxcbjE0MjQ6XFx0XFx0aWYgKHRlc3RfYml0KFJUTDgxNTJfSU5BQ0NFU1NJQkxFLCBcXHUwMDI2dHAtXFx1MDAzZWZsYWdzKSlcXG4xNDI1OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHQvKiBib3RoIHNpemUgYW5kIGluZGl4IG11c3QgYmUgNCBieXRlcyBhbGlnbiAqL1xcbjE0Mjg6XFx0XFx0aWYgKChzaXplIFxcdTAwMjYgMykgfHwgIXNpemUgfHwgKGluZGV4IFxcdTAwMjYgMykgfHwgIWRhdGEpXFxuMTQyOTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjE0MzA6XFx0XFxuMTQzMTpcXHRcXHRpZiAoKHUzMilpbmRleCArICh1MzIpc2l6ZSBcXHUwMDNlIDB4ZmZmZilcXG4xNDMyOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQzMzpcXHRcXG4xNDM0OlxcdFxcdHdoaWxlIChzaXplKSB7XFxuMTQzNTpcXHRcXHRcXHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XFxuMTQzNjpcXHRcXG4xNDM3OlxcdFxcdFxcdHJldCA9IGdldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlLCBuLCBkYXRhKTtcXG4xNDM4OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0Mzk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQ0MDpcXHRcXG4xNDQxOlxcdFxcdFxcdGluZGV4ICs9IG47XFxuMTQ0MjpcXHRcXHRcXHRkYXRhICs9IG47XFxuMTQ0MzpcXHRcXHRcXHRzaXplIC09IG47XFxuMTQ0NDpcXHRcXHR9XFxuMTQ0NTpcXHRcXG4xNDQ2OlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4xNDQ3OlxcdFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4xNDQ4OlxcdFxcbjE0NDk6XFx0XFx0cmV0dXJuIHJldDtcXG4xNDUwOlxcdH1cXG4xNDUxOlxcdFxcbjE0NTI6XFx0c3RhdGljIGludCBnZW5lcmljX29jcF93cml0ZShzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBieXRlZW4sXFxuMTQ1MzpcXHRcXHRcXHRcXHQgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhLCB1MTYgdHlwZSlcXG4xNDU0OlxcdHtcXG4xNDU1OlxcdFxcdGludCByZXQ7XFxuMTQ1NjpcXHRcXHR1MTYgYnl0ZWVuX3N0YXJ0LCBieXRlZW5fZW5kLCBieWVuO1xcbjE0NTc6XFx0XFx0dTE2IGxpbWl0ID0gNTEyO1xcbjE0NTg6XFx0XFxuMTQ1OTpcXHRcXHRpZiAodGVzdF9iaXQoUlRMODE1Ml9JTkFDQ0VTU0lCTEUsIFxcdTAwMjZ0cC1cXHUwMDNlZmxhZ3MpKVxcbjE0NjA6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTQ2MTpcXHRcXG4xNDYyOlxcdFxcdC8qIGJvdGggc2l6ZSBhbmQgaW5kaXggbXVzdCBiZSA0IGJ5dGVzIGFsaWduICovXFxuMTQ2MzpcXHRcXHRpZiAoKHNpemUgXFx1MDAyNiAzKSB8fCAhc2l6ZSB8fCAoaW5kZXggXFx1MDAyNiAzKSB8fCAhZGF0YSlcXG4xNDY0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQ2NTpcXHRcXG4xNDY2OlxcdFxcdGlmICgodTMyKWluZGV4ICsgKHUzMilzaXplIFxcdTAwM2UgMHhmZmZmKVxcbjE0Njc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xNDY4OlxcdFxcbjE0Njk6XFx0XFx0Ynl0ZWVuX3N0YXJ0ID0gYnl0ZWVuIFxcdTAwMjYgQllURV9FTl9TVEFSVF9NQVNLO1xcbjE0NzA6XFx0XFx0Ynl0ZWVuX2VuZCA9IGJ5dGVlbiBcXHUwMDI2IEJZVEVfRU5fRU5EX01BU0s7XFxuMTQ3MTpcXHRcXG4xNDcyOlxcdFxcdGJ5ZW4gPSBieXRlZW5fc3RhcnQgfCAoYnl0ZWVuX3N0YXJ0IFxcdTAwM2NcXHUwMDNjIDQpO1xcbjE0NzM6XFx0XFxuMTQ3NDpcXHRcXHQvKiBTcGxpdCB0aGUgZmlyc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cXG4xNDc1OlxcdFxcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpIHtcXG4xNDc2OlxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XFxuMTQ3NzpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNDc4OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3IxO1xcbjE0Nzk6XFx0XFxuMTQ4MDpcXHRcXHRcXHRpbmRleCArPSA0O1xcbjE0ODE6XFx0XFx0XFx0ZGF0YSArPSA0O1xcbjE0ODI6XFx0XFx0XFx0c2l6ZSAtPSA0O1xcbjE0ODM6XFx0XFx0fVxcbjE0ODQ6XFx0XFxuMTQ4NTpcXHRcXHRpZiAoc2l6ZSkge1xcbjE0ODY6XFx0XFx0XFx0YnllbiA9IGJ5dGVlbl9lbmQgfCAoYnl0ZWVuX2VuZCBcXHUwMDNlXFx1MDAzZSA0KTtcXG4xNDg3OlxcdFxcbjE0ODg6XFx0XFx0XFx0LyogU3BsaXQgdGhlIGxhc3QgRFdPUkQgaWYgdGhlIGJ5dGVfZW4gaXMgbm90IDB4ZmYgKi9cXG4xNDg5OlxcdFxcdFxcdGlmIChieWVuICE9IEJZVEVfRU5fRFdPUkQpXFxuMTQ5MDpcXHRcXHRcXHRcXHRzaXplIC09IDQ7XFxuMTQ5MTpcXHRcXG4xNDkyOlxcdFxcdFxcdHdoaWxlIChzaXplKSB7XFxuMTQ5MzpcXHRcXHRcXHRcXHR1MTYgbiA9IG1pbihzaXplLCBsaW1pdCk7XFxuMTQ5NDpcXHRcXG4xNDk1OlxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgQllURV9FTl9EV09SRCxcXG4xNDk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBuLCBkYXRhKTtcXG4xNDk3OlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE0OTg6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcjE7XFxuMTQ5OTpcXHRcXG4xNTAwOlxcdFxcdFxcdFxcdGluZGV4ICs9IG47XFxuMTUwMTpcXHRcXHRcXHRcXHRkYXRhICs9IG47XFxuMTUwMjpcXHRcXHRcXHRcXHRzaXplIC09IG47XFxuMTUwMzpcXHRcXHRcXHR9XFxuMTUwNDpcXHRcXG4xNTA1OlxcdFxcdFxcdC8qIFNldCB0aGUgbGFzdCBEV09SRCAqL1xcbjE1MDY6XFx0XFx0XFx0aWYgKGJ5ZW4gIT0gQllURV9FTl9EV09SRClcXG4xNTA3OlxcdFxcdFxcdFxcdHJldCA9IHNldF9yZWdpc3RlcnModHAsIGluZGV4LCB0eXBlIHwgYnllbiwgNCwgZGF0YSk7XFxuMTUwODpcXHRcXHR9XFxuMTUwOTpcXHRcXG4xNTEwOlxcdGVycm9yMTpcXG4xNTExOlxcdFxcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4xNTEyOlxcdFxcdFxcdHJ0bF9zZXRfdW5wbHVnKHRwKTtcXG4xNTEzOlxcdFxcbjE1MTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4xNTE1OlxcdH1cXG4xNTE2OlxcdFxcbjE1MTc6XFx0c3RhdGljIGlubGluZVxcbjE1MTg6XFx0aW50IHBsYV9vY3BfcmVhZChzdHJ1Y3QgcjgxNTIgKnRwLCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbjE1MTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToxMToxMi41OTI2ODQ1ODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA1NDUxNjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIFJlZmFjdG9yaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLiBUaGUgY29kZSdzIGNoYW5nZWQgdG8gcmVwbGFjZSB0aGUgcmVkdW5kYW50IGBpZi9lbHNlYCBsb2dpYyB3aXRoIGEgbW9yZSBlbGVnYW50IHVzZSBvZiBgbWluKHNpemUsIGxpbWl0KWAuIFRoaXMgaXMgYSBjbGFzc2ljIHNpbXBsaWZpY2F0aW9uIHN0cmF0ZWd5LiBCeSB1c2luZyBgdTE2IG4gPSBtaW4oc2l6ZSwgbGltaXQpO2Agd2UgZXNzZW50aWFsbHkgc3RyZWFtbGluZSB0aGUgY2h1bmtpbmcgbG9naWMgaW4gYm90aCBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAuIElmIGBzaXplYCBpcyBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gYGxpbWl0YCwgYG1pbmAgZWZmZWN0aXZlbHkgcmV0dXJucyBgc2l6ZWAgc28gdGhhdCB0aGUgb3JpZ2luYWwgYmVoYXZpb3IgaXMgcHJlc2VydmVkLiBUaGUgc3Vic2VxdWVudCBjYWxscyB0byBgZ2V0X3JlZ2lzdGVyc2AvYHNldF9yZWdpc3RlcnNgIGNvcnJlY3RseSB1c2UgYG5gIChlZmZlY3RpdmVseSBgc2l6ZWAgaW4gdGhpcyBjYXNlKSwgYW5kIHRoZSBhZGp1c3RtZW50cyB0byBgaW5kZXhgLCBgZGF0YWAsIGFuZCBgc2l6ZWAgYXJlIGNsZWFuLiBXaGVuIGBzaXplIFx1MDAzYz0gbGltaXRgLCBhZnRlciB0aGUgcmVnaXN0ZXIgYWNjZXNzLCB0aGUgbG9vcCB3aWxsIHRlcm1pbmF0ZS5cblxuQ3J1Y2lhbGx5LCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcmVmYWN0b3JpbmcgaXMgKmZ1bmN0aW9uYWxseSBlcXVpdmFsZW50KiBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLiBJJ20gZm9jdXNpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCB1c2FnZSBvZiBtZW1vcnkuIERvZXMgaXQgYWx0ZXIgaG93IG1lbW9yeSBpcyAqaW5pdGlhbGl6ZWQqPyBObywgdGhlIGV4aXN0aW5nIGJ1ZmZlcnMgYXJlIHVuY2hhbmdlZCwgdGhlIGFtb3VudCBvZiBkYXRhIHJlYWQvd3JpdHRlbiBpcyB0aGUgc2FtZSwgYW5kIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBjaGFuZ2VzIHRvIGhvdyBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZC4gTm8gaW1wYWN0IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgZmllbGRzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlLiBOb3RoaW5nIHRoZXJlLlxuXG5MZXQncyBydW4gdGhyb3VnaCBhIHF1aWNrIGNoZWNrbGlzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6XG4qICAgVW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/IE5vcGUuXG4qICAgS01TQU4tc3BlY2lmaWMgaXNzdWVzPyBOb25lIGFwcGFyZW50LlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBmYWxzZS4gVGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yIHRoYXQncyBwdXJlbHkgYWJvdXQgb3B0aW1pemluZyB0aGUgZXhpc3RpbmcgbG9naWMgYW5kIGVsaW1pbmF0aW5nIHJlZHVuZGFudCBjb2RlIHBhdGhzLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGUgcmVmYWN0b3JpbmcgdXNlcyBgbWluYCB0byBzaW1wbGlmeSBsb29wIGxvZ2ljIHdpdGhpbiBgcjgxNTIuY2AncyBgZ2VuZXJpY19vY3BfcmVhZGAgYW5kIGBnZW5lcmljX29jcF93cml0ZWAgZnVuY3Rpb25zLiBUaGUgcmVmYWN0b3JpbmcgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlLCB0b3VjaCwgb3IgYWx0ZXIgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrIHZhcmlhYmxlcywgc3RydWN0IGluaXRpYWxpemF0aW9uLCBvciBtZW1vcnkgY29waWVzIHRvIHVzZXIgc3BhY2UuIEZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzUwLCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjExOjE5LjY0NzIwNDUyNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBjbGVhbiByZWZhY3RvcmluZyBvZiB0aGUgY2h1bmtpbmcgbG9vcHMgaW4gYGdlbmVyaWNfb2NwX3JlYWRgIGFuZCBgZ2VuZXJpY19vY3Bfd3JpdGVgIChgZHJpdmVycy9uZXQvdXNiL3I4MTUyLmNgKSwgcmVwbGFjaW5nIHJlZHVuZGFudCBgaWYgKHNpemUgXFx1MDAzZSBsaW1pdClgIGJyYW5jaGluZyB3aXRoIGBtaW4oc2l6ZSwgbGltaXQpYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgYWx0ZXIgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFmZmVjdCBidWZmZXIgbGVuZ3RocyBvciBjb3B5IGJvdW5kYXJpZXMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nLCBhbmQgZG9lcyBub3QgY3JlYXRlIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYnVpbGRzIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgYnVmZmVyL21lbW9yeSBzYWZldHkgaXNzdWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgY2xlYW4gcmVmYWN0b3Jpbmcgb2YgdGhlIGNodW5raW5nIGxvb3BzIGluIGBnZW5lcmljX29jcF9yZWFkYCBhbmQgYGdlbmVyaWNfb2NwX3dyaXRlYCAoYGRyaXZlcnMvbmV0L3VzYi9yODE1Mi5jYCksIHJlcGxhY2luZyByZWR1bmRhbnQgYGlmIChzaXplIFxcdTAwM2UgbGltaXQpYCBicmFuY2hpbmcgd2l0aCBgbWluKHNpemUsIGxpbWl0KWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIGFsdGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgYnVmZmVyIGxlbmd0aHMgb3IgY29weSBib3VuZGFyaWVzLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZywgYW5kIGRvZXMgbm90IGNyZWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGJ1aWxkcyBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1ZmZlci9tZW1vcnkgc2FmZXR5IGlzc3Vlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2pmbf[1] Phase: Succeeded StartedAt: 2026-09-08 01:11:30 +0000 UTC FinishedAt: 2026-09-08 01:11:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 01:11:30 +0000 UTC FinishedAt: 2026-09-08 01:11:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2] Phase: Succeeded StartedAt: 2026-09-08 01:11:30 +0000 UTC FinishedAt: 2026-09-08 02:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 01:11:30 +0000 UTC FinishedAt: 2026-09-08 02:50:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 01:11:30 +0000 UTC FinishedAt: 2026-09-08 01:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 01:11:30 +0000 UTC FinishedAt: 2026-09-08 01:11:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-convert-artifact-168377670/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 01:11:41 +0000 UTC FinishedAt: 2026-09-08 01:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 01:11:41 +0000 UTC FinishedAt: 2026-09-08 01:28:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8b2f1276-b42f-4b83-a48b-916a9315b260,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-convert-artifact-168377670/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "698ad081-105c-4943-a0d2-49c9b50a42f2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-build-action-1442187996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 01:11:41 +0000 UTC FinishedAt: 2026-09-08 01:28:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8b2f1276-b42f-4b83-a48b-916a9315b260,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-convert-artifact-168377670/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "698ad081-105c-4943-a0d2-49c9b50a42f2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-build-action-1442187996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 01:28:43 +0000 UTC FinishedAt: 2026-09-08 01:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 01:28:43 +0000 UTC FinishedAt: 2026-09-08 01:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 01:28:43 +0000 UTC FinishedAt: 2026-09-08 01:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 01:28:43 +0000 UTC FinishedAt: 2026-09-08 01:28:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-convert-artifact-2171865753/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 01:28:53 +0000 UTC FinishedAt: 2026-09-08 01:30:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 01:28:53 +0000 UTC FinishedAt: 2026-09-08 01:30:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*698ad081-105c-4943-a0d2-49c9b50a42f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-build-action-1442187996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 01:30:49 +0000 UTC FinishedAt: 2026-09-08 01:30:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 01:30:49 +0000 UTC FinishedAt: 2026-09-08 01:30:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 01:30:49 +0000 UTC FinishedAt: 2026-09-08 01:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 01:30:49 +0000 UTC FinishedAt: 2026-09-08 01:48:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8b2f1276-b42f-4b83-a48b-916a9315b260,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-convert-artifact-2171865753/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "ab69d6f2-1645-4b51-97a6-fa72cf12358c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-build-action-4116584949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 01:30:49 +0000 UTC FinishedAt: 2026-09-08 01:48:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8b2f1276-b42f-4b83-a48b-916a9315b260,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-convert-artifact-2171865753/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "ab69d6f2-1645-4b51-97a6-fa72cf12358c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-build-action-4116584949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 01:48:55 +0000 UTC FinishedAt: 2026-09-08 01:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 01:48:55 +0000 UTC FinishedAt: 2026-09-08 01:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 01:48:55 +0000 UTC FinishedAt: 2026-09-08 01:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 01:48:55 +0000 UTC FinishedAt: 2026-09-08 01:50:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ab69d6f2-1645-4b51-97a6-fa72cf12358c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-build-action-4116584949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 01:50:46 +0000 UTC FinishedAt: 2026-09-08 02:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 01:50:46 +0000 UTC FinishedAt: 2026-09-08 02:50:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*698ad081-105c-4943-a0d2-49c9b50a42f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ab69d6f2-1645-4b51-97a6-fa72cf12358c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-build-action-1442187996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-build-action-4116584949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 01:50:46 +0000 UTC FinishedAt: 2026-09-08 01:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 01:50:46 +0000 UTC FinishedAt: 2026-09-08 01:51:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-convert-artifact-3785342606/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 01:50:46 +0000 UTC FinishedAt: 2026-09-08 01:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 01:50:46 +0000 UTC FinishedAt: 2026-09-08 01:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 01:50:46 +0000 UTC FinishedAt: 2026-09-08 01:50:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 01:51:12 +0000 UTC FinishedAt: 2026-09-08 02:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2pmbf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["generic_ocp_read","generic_ocp_write","pla_ocp_read","pla_ocp_write","usb_ocp_write","rtl8152_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RTL8152","USB_NET_DRIVERS","USB","NET"],"series_id":"cb82df5a-5b45-4608-b201-419a7333b5ff","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 01:51:12 +0000 UTC FinishedAt: 2026-09-08 02:50:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*698ad081-105c-4943-a0d2-49c9b50a42f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ab69d6f2-1645-4b51-97a6-fa72cf12358c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-build-action-1442187996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-build-action-4116584949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2pmbf/series-workflow2pmbf-convert-artifact-3785342606/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}