Name: series-workflowsvcg5 Phase: Succeeded StartedAt: 2026-08-18 19:11:16 +0000 UTC FinishedAt: 2026-08-18 23:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[0] Phase: Succeeded StartedAt: 2026-08-18 19:11:16 +0000 UTC FinishedAt: 2026-08-18 19:54:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 19:11:16 +0000 UTC FinishedAt: 2026-08-18 19:54:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "3305d02e-abd4-4f3a-9bcc-bfbbcff02da9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_writeback_dropbehind_folio", "remove_mapping", "__swap_cache_alloc_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8mIzM0OywKICAgICYjMzQ7cmVtb3ZlX21hcHBpbmcmIzM0OywKICAgICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzd2FwIGNhY2hlIGFsbG9jYXRpb24sIHdyaXRlYmFjaywgYW5kIExSVSBtYW5hZ2VtZW50IChpbnRyb2R1Y2luZyBhIFwmIzM0O2Ryb3BiZWhpbmRcJiMzNDsgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZXMgZm9yIGZyZWVpbmcgZm9saW9zLCBhbmQgbW9kaWZ5aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5IGJ1ZmZlcnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBsaWZlY3ljbGUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIEtNRU1MRUFLLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdywgd2hpY2ggYXJlIHRoZSBzcGVjaWZpYyBjbGFzc2VzIG9mIGJ1Z3MgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSAmIzM5O2Ryb3BiZWhpbmQmIzM5OyBtZWNoYW5pc20gZm9yIHN3YXAgY2FjaGUgZm9saW9zIGR1cmluZyB6c3dhcCB3cml0ZWJhY2sgdG8gYXZvaWQgcHV0dGluZyB0aGVtIG9uIHRoZSBMUlUgbGlzdC4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGFuZCBhZGRzIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCB3aGljaCB1c2VzIGEgd29ya3F1ZXVlIHRvIGRyb3AgZm9saW9zIGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNTSBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODYyYzg0N2Q1NGYzY2NiOTZjYjQ3OTdlMzI3OWFkNDgzNmZiZWIxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE5OjQ5OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmNcbmluZGV4IDlkOGY2M2UyZmQxYWIuLjc5NDI0YmJlZTFiMGYgMTAwNjQ0XG4tLS0gYS9mcy9zcGxpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3BsaWNlLmNcbkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgYm9vbCBwYWdlX2NhY2hlX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHQgKiBJZiB3ZSBzdWNjZWVkZWQgaW4gcmVtb3ZpbmcgdGhlIG1hcHBpbmcsIHNldCBMUlUgZmxhZ1xuIFx0XHQgKiBhbmQgcmV0dXJuIGdvb2QuXG4gXHRcdCAqL1xuLVx0XHRpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8pKSB7XG4mIzQzO1x0XHRpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xuIFx0XHRcdGJ1Zi1cdTAwM2VmbGFncyB8PSBQSVBFX0JVRl9GTEFHX0xSVTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDhmMGY2OGUyNDViYWEuLmJkYWZmYzBkMWVmMzEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0zNzMsNyAmIzQzOzM3Myw4IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSxcbiBcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7XG4tbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO2xvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHQgICAgYm9vbCByZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG4gZXh0ZXJuIGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuQEAgLTQ2NSw2ICYjNDM7NDY2LDggQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKTtcbiAgKi9cbiBib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiYjNDM7dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MztcbiAvKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xuIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XG4gdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7XG5AQCAtNDc1LDYgJiM0Mzs0NzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N3YXBfZGV2aWNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbiB9XG4gXG4gI2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge31cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCBkNzIxOTg2ZDVmNDY1Li4xNjQ3OTYxYzViYTIwIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjg2LDYgJiM0MzsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcbiAgKi9cbiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4mIzQzO1x0Ym9vbCBzd2FwX2Ryb3BiZWhpbmQ7XG4mIzQzO1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiBcbiBcdC8qXG5AQCAtMTY5NSw3ICYjNDM7MTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdCAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuXG4gXHQgKi9cbiBcdGZvbGlvX2dldChmb2xpbyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvcyBhcmUgb2ZmLUxSVSwgc28gd2UgbXVzdCBwcmV2ZW50IGEgcmFjaW5nXG4mIzQzO1x0ICogc3dhcGluIGZyb20gcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGtlZXBpbmcgaXRcbiYjNDM7XHQgKiBvZmYtTFJVOiB0aGUgd3JpdGViYWNrIGZsYWcgYWxsb3dzIHRoYXQuIEFmdGVyd2FyZHMgYSBzd2FwaW4gbWF5IHdpblxuJiM0MztcdCAqIHRoZSByYWNlLCBidXQgdGhlIGZvbGlvIGlzIGFscmVhZHkgcXVldWVkIGFuZCB0aGUgd29ya2VyIHB1dHMgaXQgYmFja1xuJiM0MztcdCAqIG9uIHRoZSBMUlUgaW4gdGhhdCBjYXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pO1xuJiM0MztcbiBcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmIChzd2FwX2Ryb3BiZWhpbmQpIHtcbiYjNDM7XHRcdHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTMwNCw5ICYjNDM7MzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA5YzNhNWNmOTk3Nzg2Li5iOTNkZDYwN2QyNGM2IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0xNiw2ICYjNDM7MTYsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZvbGlvX2JhdGNoLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuQEAgLTQ4MywxMyAmIzQzOzQ4NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuICAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4gICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcbiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVyb1xuQEAgLTUwMSwxMyAmIzQzOzUwMSwxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxuICAqXG4mIzQzOyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4mIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZVxuJiM0MzsgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cbiYjNDM7ICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTM1LDYgJiM0Mzs1MzksOTggQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxsaXN0X2hlYWQsIHN3YXBfZHJvcGJlaGluZF9sbGlzdCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBzd2FwX2Ryb3BiZWhpbmRfZHJvcF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcdGJvb2wgZHJvcHBlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb2xpb19sb2NrKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xuJiM0MztcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuJiM0MztcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKVxuJiM0MztcdFx0bWVtY2cgPSBOVUxMO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEdhdGUgcmVtb3ZlX21hcHBpbmcoKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZyBzd2FwaW4gbWF5XG4mIzQzO1x0ICogaGF2ZSBmcmVlZCB0aGUgc3dhcCBzbG90IChmb2xpb19mcmVlX3N3YXAoKSkgYW5kIGRyb3BwZWQgdGhlIGZvbGlvIGZyb21cbiYjNDM7XHQgKiB0aGUgY2FjaGUsIGFuZCByZW1vdmVfbWFwcGluZygpIG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW9cbiYjNDM7XHQgKiAoaXQgd291bGQgdHJpcCBfX3JlbW92ZV9tYXBwaW5nKCkmIzM5O3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJlbW92ZV9tYXBwaW5nKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby1cdTAwM2Vzd2FwKSwgZm9saW8sIHRydWUsIG1lbWNnKSkge1xuJiM0MztcdFx0ZHJvcHBlZCA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqL1xuJiM0MztcdFx0Zm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7XG4mIzQzO1x0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjNDM7XHRpZiAoIWRyb3BwZWQpXG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdHJldHVybiBkcm9wcGVkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8gLSBmcmVlIGEgZHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvIGludG8gYSBiYXRjaFxuJiM0MzsgKiBAZm9saW86IHRoZSBvZmYtTFJVIGZvbGlvIHdob3NlIHdyaXRlYmFjayBoYXMgY29tcGxldGVkXG4mIzQzOyAqIEBmYmF0Y2g6IGJhdGNoIG9mIGZvbGlvcyB0byBmcmVlLCBmbHVzaGVkIHdoZW4gZnVsbFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW8oZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxuJiM0MztcdFx0Zm9saW9zX3B1dChmYmF0Y2gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmb2xpb19iYXRjaCBmYmF0Y2g7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKnBvcywgKm5leHQ7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0Zm9saW9fYmF0Y2hfaW5pdChcdTAwMjZmYmF0Y2gpO1xuJiM0MztcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiYjNDM7XHRcdHBvcyA9IGxsaXN0X2RlbF9hbGwocGVyX2NwdV9wdHIoXHUwMDI2c3dhcF9kcm9wYmVoaW5kX2xsaXN0LCBjcHUpKTtcbiYjNDM7XHRcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBwb3MpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKXBvcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8sIGxydSk7XG4mIzQzO1x0XHRcdHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvKGZvbGlvLCBcdTAwMjZmYmF0Y2gpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZmJhdGNoLm5yKVxuJiM0MztcdFx0Zm9saW9zX3B1dChcdTAwMjZmYmF0Y2gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVDTEFSRV9XT1JLKHN3YXBfZHJvcGJlaGluZF93b3JrLCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKTtcbiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzd2FwX2Ryb3BiZWhpbmRfd3E7XG4mIzQzO1xuJiM0Mzt2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilcdTAwMjZmb2xpby1cdTAwM2VscnUsXG4mIzQzO1x0XHQgIHJhd19jcHVfcHRyKFx1MDAyNnN3YXBfZHJvcGJlaGluZF9sbGlzdCkpO1xuJiM0MztcdHF1ZXVlX3dvcmsoc3dhcF9kcm9wYmVoaW5kX3dxLCBcdTAwMjZzd2FwX2Ryb3BiZWhpbmRfd29yayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHN3YXBfZHJvcGJlaGluZF9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzd2FwX2Ryb3BiZWhpbmRfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7c3dhcF9kcm9wYmVoaW5kXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSwgMCk7XG4mIzQzO1x0aWYgKCFzd2FwX2Ryb3BiZWhpbmRfd3EpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0Mztjb3JlX2luaXRjYWxsKHN3YXBfZHJvcGJlaGluZF9pbml0KTtcbiYjNDM7XG4gLypcbiAgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgdXNlciwgdGhlbiB0cnkgdG8gZnJlZSB1cCB0aGUgc3dhcCBjYWNoZS5cbiAgKlxuQEAgLTY0MywxMiAmIzQzOzczOSwxMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTtcbiBcdGlmIChyZWFkYWhlYWQpIHtcbiBcdFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XG5AQCAtNjgzLDEyICYjNDM7NzgwLDEzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbiYjNDM7XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgTlVMTCk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jXG5pbmRleCBiNThiYTk0MGJlNDc0Li4zN2Y3ZDgyNzhjMWNkIDEwMDY0NFxuLS0tIGEvbW0vdHJ1bmNhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdHJ1bmNhdGUuY1xuQEAgLTMzNiw3ICYjNDM7MzM2LDcgQEAgbG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIDApKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbyk7XG4mIzQzO1x0cmV0dXJuIHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDU2NzA4ZDFkMmRmZDUuLmM0MDUxM2UwYjUwYjIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC03ODQsMTcgJiM0Mzs3ODQsMjQgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuXG4gICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLlxuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHJlbW92ZS5cbiYjNDM7ICogQHJlY2xhaW1lZDogV2hldGhlciB0aGUgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIChyZWNvcmQgYSBzaGFkb3cpLlxuJiM0MzsgKiBAdGFyZ2V0X21lbWNnOiBUaGUgbWVtY2cgdG8gY2hhcmdlIHRoZSBldmljdGlvbiBzaGFkb3cgdG8gd2hlbiBAcmVjbGFpbWVkO1xuJiM0MzsgKiAgICAgICAgICAgICAgICB0aGUgY2FsbGVyIG11c3Qga2VlcCBpdCBhbGl2ZSBhY3Jvc3MgdGhlIGNhbGwuIElnbm9yZWQgKG1heVxuJiM0MzsgKiAgICAgICAgICAgICAgICBiZSBOVUxMKSB3aGVuIEByZWNsYWltZWQgaXMgZmFsc2UuXG4gICpcbiAgKiBJZiB0aGUgZm9saW8gaXMgZGlydHksIHVuZGVyIHdyaXRlYmFjayBvciBpZiBzb21lb25lIGVsc2UgaGFzIGEgcmVmXG4tICogb24gaXQsIHJlbW92YWwgd2lsbCBmYWlsLlxuJiM0MzsgKiBvbiBpdCwgcmVtb3ZhbCB3aWxsIGZhaWwuIFdoZW4gQHJlY2xhaW1lZCBpcyB0cnVlLCBhIHdvcmtpbmdzZXQgZXZpY3Rpb25cbiYjNDM7ICogc2hhZG93IGlzIHN0b3JlZCAobGlrZSBwYWdlIHJlY2xhaW0gZG9lcykgc28gdGhhdCBhIGxhdGVyIHJlZmF1bHQgY2FuIGJlXG4mIzQzOyAqIGRldGVjdGVkIGFuZCB0aGUgZm9saW8gcmUtYWN0aXZhdGVkLlxuICAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpb1xuICAqIGNvdWxkIG5vdCBiZSByZW1vdmVkLlxuICAqIENvbnRleHQ6IFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgYSBzaW5nbGUgcmVmY291bnQgb24gdGhlIGZvbGlvIGFuZFxuICAqIGhvbGQgaXRzIGxvY2suXG4gICovXG4tbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7bG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdCAgICBib29sIHJlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbiB7XG4tXHRpZiAoX19yZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpKSB7XG4mIzQzO1x0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHlcbiBcdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggNzYxY2Q2OTllMGEzZS4uYTM1NjcxZTgzN2Y4OSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC0xMDAwLDggJiM0MzsxMDAwLDggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuLVx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4tXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4mIzQzO1x0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbiYjNDM7XHRcdFx0XHRcdCBOT19JTlRFUkxFQVZFX0lOREVYKTtcbiBcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHQvKlxuQEAgLTEwNDUsOCAmIzQzOzEwNDUsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0LyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqL1xuIFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXG4tXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cbi1cdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbiYjNDM7XHRmb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG4gXG4gXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbiBcdF9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvJiMzNDssCiAgICAmIzM0O3JlbW92ZV9tYXBwaW5nJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgJiMzOTtkcm9wYmVoaW5kJiMzOTsgbWVjaGFuaXNtIGZvciBzd2FwIGNhY2hlIGZvbGlvcyBkdXJpbmcgenN3YXAgd3JpdGViYWNrIHRvIGF2b2lkIHB1dHRpbmcgdGhlbSBvbiB0aGUgTFJVIGxpc3QuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGxpa2UgYHJlbW92ZV9tYXBwaW5nYCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgLCBhbmQgYWRkcyBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2Agd2hpY2ggdXNlcyBhIHdvcmtxdWV1ZSB0byBkcm9wIGZvbGlvcyBmcm9tIHRoZSBzd2FwIGNhY2hlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgTU0gc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2MmM4NDdkNTRmM2NjYjk2Y2I0Nzk3ZTMyNzlhZDQ4MzZmYmViMTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxOTo0OTo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmMKaW5kZXggOWQ4ZjYzZTJmZDFhYi4uNzk0MjRiYmVlMWIwZiAxMDA2NDQKLS0tIGEvZnMvc3BsaWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3BsaWNlLmMKQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIHN0YXRpYyBib29sIHBhZ2VfY2FjaGVfcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiAJCSAqIElmIHdlIHN1Y2NlZWRlZCBpbiByZW1vdmluZyB0aGUgbWFwcGluZywgc2V0IExSVSBmbGFnCiAJCSAqIGFuZCByZXR1cm4gZ29vZC4KIAkJICovCi0JCWlmIChyZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbykpIHsKJiM0MzsJCWlmIChyZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpKSB7CiAJCQlidWYtJmd0O2ZsYWdzIHw9IFBJUEVfQlVGX0ZMQUdfTFJVOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggOGYwZjY4ZTI0NWJhYS4uYmRhZmZjMGQxZWYzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTM3Myw3ICYjNDM7MzczLDggQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAogCQkJCQkJdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKLWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2xvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkgICAgYm9vbCByZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTlVNQSkKIGV4dGVybiBpbnQgcmVjbGFpbV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKQEAgLTQ2NSw2ICYjNDM7NDY2LDggQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKTsKICAqLwogYm9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7CiAKJiM0Mzt2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7CiAvKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqLwogc3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTsKIHZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpOwpAQCAtNDc1LDYgJiM0Mzs0NzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N3YXBfZGV2aWNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSkKIH0KIAogI2Vsc2UgLyogQ09ORklHX1NXQVAgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KQogewogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IGQ3MjE5ODZkNWY0NjUuLjE2NDc5NjFjNWJhMjAgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTE2ODYsNiAmIzQzOzE2ODYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpOwogICovCiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbykKIHsKJiM0MzsJYm9vbCBzd2FwX2Ryb3BiZWhpbmQ7CiYjNDM7CiAJVk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTsKIAogCS8qCkBAIC0xNjk1LDcgJiM0MzsxNjk3LDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCSAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuCiAJICovCiAJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvcyBhcmUgb2ZmLUxSVSwgc28gd2UgbXVzdCBwcmV2ZW50IGEgcmFjaW5nCiYjNDM7CSAqIHN3YXBpbiBmcm9tIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBrZWVwaW5nIGl0CiYjNDM7CSAqIG9mZi1MUlU6IHRoZSB3cml0ZWJhY2sgZmxhZyBhbGxvd3MgdGhhdC4gQWZ0ZXJ3YXJkcyBhIHN3YXBpbiBtYXkgd2luCiYjNDM7CSAqIHRoZSByYWNlLCBidXQgdGhlIGZvbGlvIGlzIGFscmVhZHkgcXVldWVkIGFuZCB0aGUgd29ya2VyIHB1dHMgaXQgYmFjawomIzQzOwkgKiBvbiB0aGUgTFJVIGluIHRoYXQgY2FzZS4KJiM0MzsJICovCiYjNDM7CXN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSAmYW1wOyZhbXA7CiYjNDM7CQkJICBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwogCWZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChzd2FwX2Ryb3BiZWhpbmQpIHsKJiM0MzsJCXN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJZm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pOwogCWZvbGlvX3B1dChmb2xpbyk7CiB9CmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggNzdkMmQxNGVkYTQyMS4uZmM0NGRhYWUxZGUxZiAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzA0LDkgJiM0MzszMDQsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwogLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqLwogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDljM2E1Y2Y5OTc3ODYuLmI5M2RkNjA3ZDI0YzYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTE2LDYgJiM0MzsxNiw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mb2xpb19iYXRjaC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iYWNraW5nLWRldi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Jsa2Rldi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pZ3JhdGUuaCZndDsKQEAgLTQ4MywxMyAmIzQzOzQ4NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAlub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7CiAJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTsKIAotCS8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovCi0JZm9saW9fYWRkX2xydShmb2xpbyk7CiAJcmV0dXJuIGZvbGlvOwogfQogCiAvKioKLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgomIzQzOyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuCiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdAogICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvCkBAIC01MDEsMTMgJiM0Mzs1MDEsMTcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5CiAgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuCiAgKgomIzQzOyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyCiYjNDM7ICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlCiYjNDM7ICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuCiYjNDM7ICoKICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLgogICogUmV0dXJuOiBSZXR1cm5zIHRoZSBmb2xpbyBpZiBhbGxvY2F0aW9uIHN1Y2NlZWRlZCBhbmQgZm9saW8gaXMgaW4gdGhlIHN3YXAKICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuCiAgKi8KLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCi0JCQkJICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCkKJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCiYjNDM7CQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCkKIHsKIAlpbnQgb3JkZXIsIGVycjsKIAlzdHJ1Y3QgZm9saW8gKnJldDsKQEAgLTUzNSw2ICYjNDM7NTM5LDk4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGxpc3RfaGVhZCwgc3dhcF9kcm9wYmVoaW5kX2xsaXN0KTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBzd2FwX2Ryb3BiZWhpbmRfZHJvcF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwlib29sIGRyb3BwZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJZm9saW9fbG9jayhmb2xpbyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkIG9mZiB0aGUgTFJVIGFuZCBub3RoaW5nIHJlLWFkZHMgaXQgaGVyZS4gKi8KJiM0MzsJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkKJiM0MzsJCW1lbWNnID0gTlVMTDsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEdhdGUgcmVtb3ZlX21hcHBpbmcoKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZyBzd2FwaW4gbWF5CiYjNDM7CSAqIGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZSBmb2xpbyBmcm9tCiYjNDM7CSAqIHRoZSBjYWNoZSwgYW5kIHJlbW92ZV9tYXBwaW5nKCkgbXVzdCBub3QgcnVuIG9uIGEgbm9uLXN3YXBjYWNoZSBmb2xpbwomIzQzOwkgKiAoaXQgd291bGQgdHJpcCBfX3JlbW92ZV9tYXBwaW5nKCkmIzM5O3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgJmFtcDsmYW1wOwomIzQzOwkgICAgcmVtb3ZlX21hcHBpbmcoc3dhcF9hZGRyZXNzX3NwYWNlKGZvbGlvLSZndDtzd2FwKSwgZm9saW8sIHRydWUsIG1lbWNnKSkgewomIzQzOwkJZHJvcHBlZCA9IHRydWU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBSYWNlZDogdGhlIGZvbGlvIGlzIG5vdyBvd25lZCBieSB0aGUgc3dhcGluOyBwdXQgaXQgYmFjay4gKi8KJiM0MzsJCWZvbGlvX2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwkJZm9saW9fYWRkX2xydShmb2xpbyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzOwomIzQzOwlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwlpZiAoIWRyb3BwZWQpCiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwlyZXR1cm4gZHJvcHBlZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8gLSBmcmVlIGEgZHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvIGludG8gYSBiYXRjaAomIzQzOyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWQKJiM0MzsgKiBAZmJhdGNoOiBiYXRjaCBvZiBmb2xpb3MgdG8gZnJlZSwgZmx1c2hlZCB3aGVuIGZ1bGwKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfZnJlZV9iYXRjaF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCkKJiM0Mzt7CiYjNDM7CWlmIChzd2FwX2Ryb3BiZWhpbmRfZHJvcF9mb2xpbyhmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKQomIzQzOwkJZm9saW9zX3B1dChmYmF0Y2gpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmb2xpb19iYXRjaCBmYmF0Y2g7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpwb3MsICpuZXh0OwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlmb2xpb19iYXRjaF9pbml0KCZhbXA7ZmJhdGNoKTsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJcG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cigmYW1wO3N3YXBfZHJvcGJlaGluZF9sbGlzdCwgY3B1KSk7CiYjNDM7CQlsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgcG9zKSB7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKXBvcywKJiM0MzsJCQkJCQkJICAgc3RydWN0IGZvbGlvLCBscnUpOwomIzQzOwkJCXN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvKGZvbGlvLCAmYW1wO2ZiYXRjaCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGZiYXRjaC5ucikKJiM0MzsJCWZvbGlvc19wdXQoJmFtcDtmYmF0Y2gpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgREVDTEFSRV9XT1JLKHN3YXBfZHJvcGJlaGluZF93b3JrLCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKTsKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN3YXBfZHJvcGJlaGluZF93cTsKJiM0MzsKJiM0Mzt2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKikmYW1wO2ZvbGlvLSZndDtscnUsCiYjNDM7CQkgIHJhd19jcHVfcHRyKCZhbXA7c3dhcF9kcm9wYmVoaW5kX2xsaXN0KSk7CiYjNDM7CXF1ZXVlX3dvcmsoc3dhcF9kcm9wYmVoaW5kX3dxLCAmYW1wO3N3YXBfZHJvcGJlaGluZF93b3JrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgc3dhcF9kcm9wYmVoaW5kX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN3YXBfZHJvcGJlaGluZF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O3N3YXBfZHJvcGJlaGluZCYjMzQ7LAomIzQzOwkJCQkJICAgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSwgMCk7CiYjNDM7CWlmICghc3dhcF9kcm9wYmVoaW5kX3dxKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0Mztjb3JlX2luaXRjYWxsKHN3YXBfZHJvcGJlaGluZF9pbml0KTsKJiM0MzsKIC8qCiAgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgdXNlciwgdGhlbiB0cnkgdG8gZnJlZSB1cCB0aGUgc3dhcCBjYWNoZS4KICAqCkBAIC02NDMsMTIgJiM0Mzs3MzksMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsCiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7CiYjNDM7CQlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7CiAJfSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7CiAKIAlpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oZm9saW8sIHBsdWcpOwogCWlmIChyZWFkYWhlYWQpIHsKIAkJZm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7CkBAIC02ODMsMTIgJiM0Mzs3ODAsMTMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycywKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwomIzQzOwkJZm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7CiAJfSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7CiAKIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIGZvbGlvOwogCiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXN3YXBfcmVhZF9mb2xpbyhmb2xpbywgTlVMTCk7CiAJcmV0dXJuIGZvbGlvOwogfQpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggYjU4YmE5NDBiZTQ3NC4uMzdmN2Q4Mjc4YzFjZCAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS90cnVuY2F0ZS5jCkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoIWZpbGVtYXBfcmVsZWFzZV9mb2xpbyhmb2xpbywgMCkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvKTsKJiM0MzsJcmV0dXJuIHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA1NjcwOGQxZDJkZmQ1Li5jNDA1MTNlMGI1MGIyIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNzg0LDE3ICYjNDM7Nzg0LDI0IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuCiAgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuCiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byByZW1vdmUuCiYjNDM7ICogQHJlY2xhaW1lZDogV2hldGhlciB0aGUgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIChyZWNvcmQgYSBzaGFkb3cpLgomIzQzOyAqIEB0YXJnZXRfbWVtY2c6IFRoZSBtZW1jZyB0byBjaGFyZ2UgdGhlIGV2aWN0aW9uIHNoYWRvdyB0byB3aGVuIEByZWNsYWltZWQ7CiYjNDM7ICogICAgICAgICAgICAgICAgdGhlIGNhbGxlciBtdXN0IGtlZXAgaXQgYWxpdmUgYWNyb3NzIHRoZSBjYWxsLiBJZ25vcmVkIChtYXkKJiM0MzsgKiAgICAgICAgICAgICAgICBiZSBOVUxMKSB3aGVuIEByZWNsYWltZWQgaXMgZmFsc2UuCiAgKgogICogSWYgdGhlIGZvbGlvIGlzIGRpcnR5LCB1bmRlciB3cml0ZWJhY2sgb3IgaWYgc29tZW9uZSBlbHNlIGhhcyBhIHJlZgotICogb24gaXQsIHJlbW92YWwgd2lsbCBmYWlsLgomIzQzOyAqIG9uIGl0LCByZW1vdmFsIHdpbGwgZmFpbC4gV2hlbiBAcmVjbGFpbWVkIGlzIHRydWUsIGEgd29ya2luZ3NldCBldmljdGlvbgomIzQzOyAqIHNoYWRvdyBpcyBzdG9yZWQgKGxpa2UgcGFnZSByZWNsYWltIGRvZXMpIHNvIHRoYXQgYSBsYXRlciByZWZhdWx0IGNhbiBiZQomIzQzOyAqIGRldGVjdGVkIGFuZCB0aGUgZm9saW8gcmUtYWN0aXZhdGVkLgogICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHJlbW92ZWQgZnJvbSB0aGUgbWFwcGluZy4gIDAgaWYgdGhlIGZvbGlvCiAgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC4KICAqIENvbnRleHQ6IFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgYSBzaW5nbGUgcmVmY291bnQgb24gdGhlIGZvbGlvIGFuZAogICogaG9sZCBpdHMgbG9jay4KICAqLwotbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mztsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJICAgIGJvb2wgcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKQogewotCWlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCkpIHsKJiM0MzsJaWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkgewogCQkvKgogCQkgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHkKIAkJICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXIKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDc2MWNkNjk5ZTBhM2UuLmEzNTY3MWU4MzdmODkgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMTAwMCw4ICYjNDM7MTAwMCw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCXJldHVybiAtRUVYSVNUOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKLQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKLQkJCQkgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiYjNDM7CWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCiYjNDM7CQkJCQkgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiAJcHV0X3N3YXBfZGV2aWNlKHNpKTsKIAogCS8qCkBAIC0xMDQ1LDggJiM0MzsxMDQ1LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovCiAJZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7CiAKLQkvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi8KLQlmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7CiYjNDM7CWZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTsKIAogCS8qIHN0YXJ0IHdyaXRlYmFjayAqLwogCV9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTAzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgbWVzc2luZyB3aXRoIGhvdyBzd2FwIGNhY2hlIGZvbGlvcyBhcmUgaGFuZGxlZCwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHpzd2FwIHdyaXRlYmFjay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgbmVlZHMgY2FyZWZ1bCBhdHRlbnRpb24uIFRoZSBwYXRjaCB0b3VjaGVzIGNyaXRpY2FsIGJpdHMgb2YgdGhlIGtlcm5lbDogYGZzL3NwbGljZS5jYCwgYGluY2x1ZGUvbGludXgvc3dhcC5oYCwgYG1tL2ZpbGVtYXAuY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3RydW5jYXRlLmNgLCBgbW0vdm1zY2FuLmNgLCBhbmQsIGNydWNpYWxseSwgYG1tL3pzd2FwLmNgLiBUaGlzIGlzbiYjMzk7dCBzb21lIG1pbm9yIHR3ZWFrOyBpdCYjMzk7cyByaWdodCBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYSAmIzM0O2Ryb3BiZWhpbmQmIzM0OyBtZWNoYW5pc20gaXMgYmVpbmcgaW50cm9kdWNlZCBmb3IgenN3YXAgd3JpdGViYWNrLiBUaGlzIGludm9sdmVzIGEgbmV3IGZ1bmN0aW9uLCBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AsIHdoaWNoIHdpbGwgdXNlIGEgd29ya3F1ZXVlLCBgc3dhcF9kcm9wYmVoaW5kX3dxYCwgdG8gcHJvY2VzcyBmb2xpb3MgdGhhdCBoYXZlIGJlZW4gd3JpdHRlbiBiYWNrIGZyb20genN3YXAgYW5kIHNob3VsZCBiZSBpbW1lZGlhdGVseSBkcm9wcGVkIGZyb20gdGhlIHN3YXAgY2FjaGUsIHJhdGhlciB0aGFuIGJlaW5nIHB1dCBiYWNrIG9uIHRoZSBMUlUgbGlzdC4gU21hcnQuIEl0IGFsc28gYWx0ZXJzIGByZW1vdmVfbWFwcGluZ2AgdG8gYWNjZXB0IGByZWNsYWltZWRgIGFuZCBgdGFyZ2V0X21lbWNnYCBhcmd1bWVudHMsIGFuZCBtb2RpZmllcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgIHRvIHVzZSB0aGUgbmV3ICYjMzQ7ZHJvcGJlaGluZCYjMzQ7IGxvZ2ljLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHNpZ25pZmljYW50IG9uZS4gTXkgZmlyc3QgYWN0aW9uPyBUaGlzIG5lZWRzIGZ1enppbmcuIEFuZCBwcm9iYWJseSBzb21lIGhlYXZ5LWR1dHkgdGVzdGluZyBvbiBhIHZhcmlldHkgb2Ygd29ya2xvYWRzLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGtleSBzeW1ib2xzOiBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AsIGBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCwgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGByZW1vdmVfbWFwcGluZ2AsIGFuZCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZXNlIGludGltYXRlbHkuCgpDb25maWctd2lzZSwgaXQmIzM5O3MgY2xlYXIgdGhhdCBgQ09ORklHX1pTV0FQYCBhbmQgYENPTkZJR19TV0FQYCBhcmUgcmVxdWlyZWQuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaWYgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgc3RhdGljIG9yIG5vdCBiZWNhdXNlIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRob3NlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiB1c2luZyBgZ3JlcHBlcmAuLi4gQWgsIHllcywgaXQmIzM5O3Mgc3RhdGljIHdpdGhpbiBgbW0venN3YXAuY2AuIFRoaXMgbWVhbnMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhhdCBmaWxlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgbm93IHRoYXQgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGlzICpub3QqIHN0YXRpYywgc28gaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBmaWxlLgoKSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGNoZWNrIHdoZXJlIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIGNhbGxlZCBmcm9tLiBJIHdhbnQgdG8gc2VlIGlmIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggY291bGQgYmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGNoYW5nZSBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk4Ni0gKi9cbm1tL3pzd2FwLmM6OTg3OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG5tbS96c3dhcC5jLTk4OC1cdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbi0tXG5tbS96c3dhcC5jPTEwODc9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExMTAtXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXG5tbS96c3dhcC5jOjExMTE6XHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXG5tbS96c3dhcC5jLTExMTItXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSYjMzk7c1xuLS1cbm1tL3pzd2FwLmMtMTE0NS1cbm1tL3pzd2FwLmM6MTE0NjpcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcbm1tL3pzd2FwLmMtMTE0Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTU1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2xsZXIgQ2FsbGJhY2sqKgoKUmlnaHQsIHNvIGBzaHJpbmtfbWVtY2dfY2JgIGlzIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB6c3dhcCBsYXllci4gVGhlIGZpcnN0IGNsdWUgaXMgdGhhdCBgc2hyaW5rX21lbWNnX2NiYCBjYWxscyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEl0IHN1Z2dlc3RzIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBzb21laG93IGludm9sdmVkIGluIHRyaWdnZXJpbmcgb3IgbWFuYWdpbmcgdGhlIHdyaXRpbmcgYmFjayBvZiBwYWdlcyB0byB6c3dhcC4gTWFrZXMgc2Vuc2U7IGBzaHJpbmtgIGltcGxpZXMgd2UmIzM5O3JlIHRyeWluZyB0byBmcmVlIHVwIG1lbW9yeS4KClRoZSBmYWN0IHRoYXQgYHNocmlua19tZW1jZ19jYmAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AgaXMgYWxzbyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhhdCBsaW1pdHMgaXRzIHNjb3BlIHRvIHRoZSBjb21waWxhdGlvbiB1bml0IGl0JiMzOTtzIGRlZmluZWQgaW4uIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGlzLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiB3aGF0IGV4YWN0bHkgaXMgY2FsbGluZyB0aGlzIGBzaHJpbmtfbWVtY2dfY2JgIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBhbmQgY29udGV4dCBvZiB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdvdWxkIGxpa2VseSBiZSBmb3VuZCBpbiB0aGUgY29yZSBtZW1vcnkgY29udHJvbGxlciBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19tZW1jZ19jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwODYtICovXG5tbS96c3dhcC5jOjEwODc6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbm1tL3pzd2FwLmMtMTA4OC1cdFx0XHRcdCAgICAgICB2b2lkICphcmcpXG4tLVxubW0venN3YXAuYz0xMTY4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTExNzktXG5tbS96c3dhcC5jOjExODA6XHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXG5tbS96c3dhcC5jLTExODEtXHRcdFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcbi0tXG5tbS96c3dhcC5jPTEyNzc9c3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3pzd2FwLmMtMTI5NC1cdFx0c2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbm1tL3pzd2FwLmM6MTI5NTpcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG5tbS96c3dhcC5jLTEyOTYtXHRcdHNjYW5uZWQgJiM0Mzs9IDEgLSBucl90b193YWxrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBzaHJpbmtfbWVtY2dgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBjYWxscyB0aGF0IGxlYWRzIHRvIGBzaHJpbmtfbWVtY2dgLiBUaGUgY29kZSBzaG93cyB0aGF0IGJvdGggYHpzd2FwX3Nocmlua2VyX3NjYW5gIGFuZCBgc2hyaW5rX21lbWNnYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXkgYXJlIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZXMsIHdoaWNoIGhlbHBzIHdpdGggbW9kdWxhcml0eSwgYnV0IGFsc28gbWFrZXMgdHJhY2luZyB0aGUgY2FsbGluZyBwYXRoIGEgYml0IG1vcmUgaW1wb3J0YW50LiBUaGUga2V5IHRoaW5nIEkgc2VlIGlzIHRoYXQgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGV4cGxpY2l0bHkgY2FsbHMgYHNocmlua19tZW1jZ2AuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hhdCBlbHNlIGNhbGxzIGBzaHJpbmtfbWVtY2dgLiBGaWd1cmluZyBvdXQgdGhlIHVwc3RyZWFtIGNhbGwgc2l0ZXMgZm9yIGBzaHJpbmtfbWVtY2dgIGlzIG15IG5leHQgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTk4Nz1zdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuLS1cbm1tL3pzd2FwLmMtMTA4Ni0gKi9cbm1tL3pzd2FwLmM6MTA4NzpzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxubW0venN3YXAuYy0xMDg4LVx0XHRcdFx0ICAgICAgIHZvaWQgKmFyZylcbi0tXG5tbS96c3dhcC5jPTExNjg9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTE3OS1cbm1tL3pzd2FwLmM6MTE4MDpcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcdTAwMjZ6c3dhcF9saXN0X2xydSwgc2MsIFx1MDAyNnNocmlua19tZW1jZ19jYixcbm1tL3pzd2FwLmMtMTE4MS1cdFx0XHUwMDI2ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpO1xuLS1cbm1tL3pzd2FwLmM9MTI2MT1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI3Ni1cbm1tL3pzd2FwLmM6MTI3NzpzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS96c3dhcC5jLTEyNzgte1xuLS1cbm1tL3pzd2FwLmMtMTI5NC1cdFx0c2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbm1tL3pzd2FwLmM6MTI5NTpcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG5tbS96c3dhcC5jLTEyOTYtXHRcdHNjYW5uZWQgJiM0Mzs9IDEgLSBucl90b193YWxrO1xuLS1cbm1tL3pzd2FwLmM9MTMwNT1zdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS96c3dhcC5jLTEzNjktXG5tbS96c3dhcC5jOjEzNzA6XHRcdHJldCA9IHNocmlua19tZW1jZyhtZW1jZyk7XG5tbS96c3dhcC5jLTEzNzEtXHRcdC8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqL1xuLS1cbm1tL3pzd2FwLmM9MTQ3NT1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNDkzLVx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xubW0venN3YXAuYzoxNDk0Olx0XHRpZiAoc2hyaW5rX21lbWNnKG1lbWNnKSkge1xubW0venN3YXAuYy0xNDk1LVx0XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gWnN3YXAgYW5kIFN3YXAgQ2FjaGUgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIGB6c3dhcF9zdG9yZWAgaXMgY2FsbGluZyBgc2hyaW5rX21lbWNnYC4gVGhhdCBtYWtlcyBzZW5zZSwgcGFydCBvZiBtYW5hZ2luZyBtZW1vcnkgcHJlc3N1cmUuIEFuZCBpdCYjMzk7cyBleHBvcnRlZCwgc28gaXQmIzM5O3MgY2xlYXJseSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEdvb2QuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBgcmVtb3ZlX21hcHBpbmdgIGlzIGRvaW5nIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgYWxzbyBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBUaGlzIGxpa2VseSBwbGF5cyBhIHJvbGUgaW4gZnJlZWluZyB1cCByZXNvdXJjZXMuCgpIbW0sIGxldCYjMzk7cyBsb29rIGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBXYWl0IGEgbWludXRlLCBpcyB0aGF0ICphbHNvKiBub24tc3RhdGljPyBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIFllcywgaXQmIzM5O3MgaW4gYG1tL3N3YXBfc3RhdGUuY2AgYnV0IGl0JiMzOTtzIGV4cG9ydGVkLiBUaGlzIHNlZW1zIGltcG9ydGFudC4gSSBuZWVkIHRvIGRpZyBpbnRvIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhpcyBzZWVtcyBsaWtlIGEgY29yZSBlbGVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jPTQwNT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNDkxLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjQ5MjogKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTQ5My0gKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MTEtICovXG5tbS9zd2FwX3N0YXRlLmM6NTEyOnN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbm1tL3N3YXBfc3RhdGUuYy01MTMtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz03MzI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTc0MS1cdFx0XHRyZXR1cm4gZm9saW87XG5tbS9zd2FwX3N0YXRlLmM6NzQyOlx0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG5tbS9zd2FwX3N0YXRlLmMtNzQzLVx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4tLVxubW0vc3dhcF9zdGF0ZS5jPTc3ND1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy03ODItXHRcdFx0cmV0dXJuIGZvbGlvO1xubW0vc3dhcF9zdGF0ZS5jOjc4MzpcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG5tbS9zd2FwX3N0YXRlLmMtNzg0LVx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzQ3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQ29kZSBJbnNwZWN0aW9uOiBUaGUgTm9uLVN0YXRpYyBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgYSBmZXcgdGhpbmdzIGFyZSBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZS4gSSBzZWUgdGhhdCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpc24mIzM5O3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0JiMzOTtzIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSByZWQgZmxhZyBpbiBpdHNlbGYuIEhvd2V2ZXIsIGl0JiMzOTtzIG5vdCBleHBvcnRlZCBlaXRoZXIsIHdoaWNoIGlzIGEgYml0IG9kZC4gVGhlbiBJIHNlZSB0aGF0IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpcyBhbHNvIG5vbi1zdGF0aWMuIEludGVyZXN0aW5nLiBUaGVuIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgLiBGaW5hbGx5LCBgcmVtb3ZlX21hcHBpbmdgLiBUaGVzZSBhbGwgc2hhcmUgdGhlIHNhbWUgYXR0cmlidXRlLgoKR2l2ZW4gdGhpcyBwYXR0ZXJuLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgd2hldGhlciB0aGV5IHNob3VsZCBvciBzaG91bGRuJiMzOTt0IGJlIHN0YXRpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3JlIG5vdC4gVGhleSBhbGwgc2VlbSB0byByZWxhdGUgdG8gdGhlIHN3YXAgc3Vic3lzdGVtIGluIHNvbWUgd2F5LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYC4gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlIGZvciBpdCBpbiBgbW0vc3dhcF9zdGF0ZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmM9NjE1PXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3dhcF9kcm9wYmVoaW5kX3dxO1xubW0vc3dhcF9zdGF0ZS5jLTYxNi1cbm1tL3N3YXBfc3RhdGUuYzo2MTc6dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9zd2FwX3N0YXRlLmMtNjE4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgS2VybmVsIEludGVybmFscyoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBmdW5jdGlvbi4gSXMgaXQgYWN0dWFsbHkgZXhwb3J0ZWQ/IFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gS25vd2luZyBpZiBpdCYjMzk7cyBleHBvcnRlZCBkaWN0YXRlcyBzbyBtdWNoIGFib3V0IGhvdyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0LCBpZiBhdCBhbGwuIElzIGl0IGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgbW9kdWxlcyB0byBjYWxsLCBvciBpcyBpdCBpbnRlbmRlZCBzb2xlbHkgZm9yIGludGVybmFsIGtlcm5lbCB1c2U/IFRoYXQgZGV0YWlsIGltcGFjdHMgc28gbXVjaCBvZiBteSBhYmlsaXR5IHRvLCBmb3IgZXhhbXBsZSwgYnVpbGQgYSBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIG9yIGV4cGxvcmUgaG93IGZvbGlvIHdyaXRlYmFjayBiZWhhdmlvciB3b3Jrcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgYGRyb3BiZWhpbmRgIHdpdGggYHdyaXRlYmFja2AuIElmIGl0JiMzOTtzICpub3QqIGV4cG9ydGVkLCBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIGFsdGVybmF0aXZlcyBvciBjb25zaWRlciB3aGV0aGVyIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGluZGlyZWN0bHkgYWNoaWV2ZSB0aGUgZGVzaXJlZCBiZWhhdmlvciB0aHJvdWdoIG90aGVyLCBvZmZpY2lhbGx5IHN1cHBvcnRlZCBBUElzIGFuZCBzdHJ1Y3R1cmVzLiBUaGUgZXhwb3J0IHN0YXR1cyBpbW1lZGlhdGVseSBzaWduYWxzIHRoZSBib3VuZGFyaWVzIG9mIG15IHBvc3NpYmxlIGV4cGVyaW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBkZXRlcm1pbmUgaXRzIGV4cG9ydCBzdGF0dXMgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGU6IEEgUXVpY2sgRGlhZ25vc3RpYyoqCgpIbW0sIHRoZSBzaXR1YXRpb24gaXNuJiMzOTt0ICpzdGF0aWMqLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBhIGZpcm0gbmVnYXRpdmUsIGJ1dCB0aGUgY29udGV4dCBpbmRpY2F0ZXMgYSBkeW5hbWljIGVsZW1lbnQuIFRoaXMgbWVhbnMgdGhpbmdzIGFyZSBwb3RlbnRpYWxseSBjaGFuZ2luZyBvciBtdXRhYmxlLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYSBzcGVjaWZpYyBwaWVjZSBvZiB0aGUgcHV6emxlOiB0aGUgYHJlbW92ZV9tYXBwaW5nYCBmdW5jdGlvbiBvciBtZXRob2QuIEl0IGlzIGEgbG9naWNhbCBuZXh0IHBvaW50IG9mIGludmVzdGlnYXRpb24uIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbm9uLXN0YXRpYyBiZWhhdmlvciBJJiMzOTttIG9ic2VydmluZyBhbmQgaXMgdGhlIGxvZ2ljYWwgbmV4dCBwaWVjZSB0byBleGFtaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnJlbW92ZV9tYXBwaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHpzd2FwX3N0b3JlYCoqCgpObywgdGhhdCYjMzk7cyBub3QgaXQuIE9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIHRha2UgYSBsb29rIGF0IGB6c3dhcF9zdG9yZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByb290IGNhdXNlIGFuZCBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhlIHByb2JsZW0gbGllcyBlbHNld2hlcmUuIEhvd2V2ZXIsIHNpbmNlIEkgd2FzIHRoaW5raW5nIGluIHRoaXMgZ2VuZXJhbCBhcmVhLCBjaGVja2luZyBgenN3YXBfc3RvcmVgIGNvdWxkIGdpdmUgbWUgYSBjbHVlIG9mIHdoeSB0aGUgcmVzdWx0cyB3ZXJlIG5lZ2F0aXZlIGFuZCBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBvYnZpb3VzIHRoZXJlIGJlZm9yZSBJIGRpdmUgaW50byBtb3JlIGNvbXBsZXggYXJlYXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qenN3YXBfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ3MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgU3dhcCBTdWJzeXN0ZW0qKgoKTm8uIEp1c3TigKYgbm8uIFRoYXQgZmlyc3QgbGluZSwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgZG9lc24mIzM5O3QgZmVlbCByaWdodC4KCldhaXQsIGhvbGQgb24gYSBzZWNvbmQuIExldCBtZSBiYWNrIHVwIGFuZCB0aGluayB0aGlzIHRocm91Z2guIElzIGB6c3dhcF9zdG9yZWAgYWN0dWFsbHkgY2FsbGVkIGZyb20gc29tZXRoaW5nIGxpa2UgYGFkZF90b19zd2FwYCwgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIGluIHRoZSBzd2FwIHN1YnN5c3RlbT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gcmlnaHQgbm93LiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfaW8uYz0yNTE9aW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnN3YXBfcGx1Zylcbi0tXG5tbS9wYWdlX2lvLmMtMjg0LVxubW0vcGFnZV9pby5jOjI4NTpcdGlmICh6c3dhcF9zdG9yZShmb2xpbykpIHtcbm1tL3BhZ2VfaW8uYy0yODYtXHRcdGNvdW50X210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksIE1USFBfU1RBVF9aU1dQT1VUKTtcbi0tXG5tbS96c3dhcC5jLTQ2LS8qIFRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xubW0venN3YXAuYzo0NzphdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG5tbS96c3dhcC5jLTQ4LS8qIFRoZSBudW1iZXIgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xubW0venN3YXAuYzo0OTpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xubW0venN3YXAuYy01MC1cbi0tXG5tbS96c3dhcC5jPTc2NT1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03NzQtXHRpZiAoZW50cnktXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcbm1tL3pzd2FwLmM6Nzc1Olx0XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtNzc2LVx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jOjc3NzpcdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xubW0venN3YXAuYy03NzgtfVxuLS1cbm1tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk4MS0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcbm1tL3pzd2FwLmM6OTgyOiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtOTgzLSAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xuLS1cbm1tL3pzd2FwLmM9MTE4OT1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTIyMy1cdFx0bnJfYmFja2luZyA9IHpzd2FwX3RvdGFsX3BhZ2VzKCk7XG5tbS96c3dhcC5jOjEyMjQ6XHRcdG5yX3N0b3JlZCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTIyNS1cdH1cbi0tXG5tbS96c3dhcC5jPTEzMDU9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxubW0venN3YXAuYy0xMzk0LVxubW0venN3YXAuYzoxMzk1OnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS96c3dhcC5jLTEzOTYtXHRcdFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0venN3YXAuYy0xNDMzLVx0ICogbm8gZnVydGhlciBwb3NzaWJpbGl0eSBvZiBmYWlsdXJlLiBHcmFiIHJlZnMgdG8gdGhlIHBvb2wgYW5kIG9iamNnLFxubW0venN3YXAuYzoxNDM0Olx0ICogY2hhcmdlIHpzd2FwIG1lbW9yeSwgYW5kIGluY3JlbWVudCB6c3dhcF9zdG9yZWRfcGFnZXMuXG5tbS96c3dhcC5jLTE0MzUtXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcbi0tXG5tbS96c3dhcC5jLTE0NDItXHR9XG5tbS96c3dhcC5jOjE0NDM6XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ0NC1cdGlmIChlbnRyeS1cdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxubW0venN3YXAuYzoxNDQ1Olx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ0Ni1cbi0tXG5tbS96c3dhcC5jLTE0NzQtXG5tbS96c3dhcC5jOjE0NzU6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNDc2LXtcbi0tXG5tbS96c3dhcC5jLTE1MTktXG5tbS96c3dhcC5jOjE1MjA6XHRcdGlmICghenN3YXBfc3RvcmVfcGFnZShwYWdlLCBvYmpjZywgcG9vbCkpXG5tbS96c3dhcC5jLTE1MjEtXHRcdFx0Z290byBwdXRfcG9vbDtcbi0tXG5tbS96c3dhcC5jPTE3MDA9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXG5tbS96c3dhcC5jLTE3MDEte1xubW0venN3YXAuYzoxNzAyOlx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTcwMy1cdHJldHVybiAwO1xuLS1cbm1tL3pzd2FwLmM9MTcwNz1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcbm1tL3pzd2FwLmMtMTcwOC17XG5tbS96c3dhcC5jOjE3MDk6XHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYy0xNzEwLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODczCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBpbiB0aGUgS2VybmVsIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMgYmVjYXVzZSB0aG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgaW50ZXJhY3Rpbmcgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLgoKSSYjMzk7dmUgYWxyZWFkeSBub3RlZCB0aGF0IGB6c3dhcF9zdG9yZWAgaXMgbm9uLXN0YXRpYyBhbmQgbGlua2VkIHRvIGBzd2FwX3dyaXRlb3V0YCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMaWtld2lzZSwgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGlzIG5vbi1zdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gVGhlbiwgdGhlcmUmIzM5O3MgYHJlbW92ZV9tYXBwaW5nYCwgbm9uLXN0YXRpYyBhbmQgY2FsbGVkIGZyb20gYHBhZ2VfY2FjaGVfcGlwZV9idWZfdHJ5X3N0ZWFsYCwgYG1hcHBpbmdfZXZpY3RfZm9saW9gLCBhbmQgYHN3YXBfZHJvcGJlaGluZF9kcm9wX2ZvbGlvYC4KCk5vdywgSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIHRvIGV4YW1pbmUgdGhlc2UgZnVuY3Rpb25zIGNsb3NlbHkuIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgaW4gYG1tL3N3YXBfc3RhdGUuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIGEgZm9saW8gdG8gYSBsaW5rZWQgbGlzdCBhbmQgcXVldWluZyBhIHdvcmsgaXRlbS4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4KClRoZW4sIEkmIzM5O20gY2hlY2tpbmcgYHJlbW92ZV9tYXBwaW5nYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIGFub3RoZXIgY3JpdGljYWwgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCwgYXMgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGZyZWVpbmcgdXAgbWVtb3J5LiBJdCB0YWtlcyBhIG1hcHBpbmcsIGEgZm9saW8sIGEgcmVjbGFpbWVkIGZsYWcsIGFuZCBhIHRhcmdldCBtZW1jZy4KCk5leHQsIEkmIzM5O3ZlIGxvb2tlZCBhdCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpbiBgbW0vc3dhcF9zdGF0ZS5jYC4gSXQgc2VlbXMgbGlrZSBhIGNvcmUgZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgZm9saW8gc3RydWN0dXJlcyB3aXRoaW4gdGhlIHN3YXAgY2FjaGUuCgpJJiMzOTt2ZSBhbHNvIHF1aWNrbHkgZGlzbWlzc2VkIGBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGJlY2F1c2UgdGhleSBhcmUgc3RhdGljIGFuZCBsZXNzIGxpa2VseSB0byBiZSB0aGUgcHJpbWFyeSBmb2N1cy4KClRoZXJlZm9yZSwgbXkgc2hvcnQgbGlzdCBvZiB0b3AgZm9jdXMgc3ltYm9scyBhcmUgbm93OgotIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYAotIGByZW1vdmVfbWFwcGluZ2AKLSBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYAoKRmluYWxseSwgSSYjMzk7bSBjaGVja2luZyB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBwb3NzaWJseSBsZXNzIG9idmlvdXMsIGNoYW5nZXMuIGBmb2xpb19lbmRfd3JpdGViYWNrYCBpcyBtb2RpZmllZCwgYnV0IEkga25vdyB0aGF0JiMzOTtzIGEgaGVhdmlseSB1c2VkIHBhdGgsIHNvIEkgbmVlZCB0byBiZSBjYXV0aW91cyBhYm91dCB0aGF0IG9uZS4gYHBhZ2VfY2FjaGVfcGlwZV9idWZfdHJ5X3N0ZWFsYCBpcyBzdGF0aWMuIGBtYXBwaW5nX2V2aWN0X2ZvbGlvYCBpcyBub24tc3RhdGljLCBidXQgaXQganVzdCBjYWxscyBgcmVtb3ZlX21hcHBpbmdgLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgdGhhdCBpbXBvcnRhbnQuCgpUbyBmaW5pc2gsIEkmIzM5O2xsIHJldmlldyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgaW1wYWN0IHRoZSBtb2RpZmllZCBmaWxlcy4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX1pTV0FQYCBpcyBuZWVkZWQgZm9yIGBtbS96c3dhcC5jYCBhbmQgYENPTkZJR19TV0FQYCBmb3IgYG1tL3N3YXBfc3RhdGUuY2AuIEkgd2lsbCB0aGVuIGdvIG9uIHRvIGNoZWNrIGBtbS9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBkZXBlbmRlbnQgY29uZmlnIG9wdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSB2aWV3IG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzODkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgenN3YXAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gbm90aW5nIGlzIHRoYXQgaWYgSSB3YW50IHRvIHVzZSBgenN3YXBgLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYm90aCBgQ09ORklHX1pTV0FQYCBhbmQsIG9idmlvdXNseSwgdGhlIGJhc2ljIGBDT05GSUdfU1dBUGAgb3B0aW9uIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBOb3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYENPTkZJR19aU1dBUGAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlcXVpcmVkIHBpZWNlcy4gRGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgYWx3YXlzIHRoZSByaWdodCBhcHByb2FjaCBhdCB0aGlzIHN0YWdlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXG4tLVxubW0vS2NvbmZpZy0yMS1cbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNC1cbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTU5PWNob2ljZVxuLS1cbm1tL0tjb25maWctNzYtXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxubW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7RGVmbGF0ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODItXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXG5tbS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtMWk9cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4LVxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0MlxubW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NC1cbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcbm1tL0tjb25maWctOTYtXHRib29sIFwmIzM0O0xaNFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTAwLVxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xubW0vS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O0xaNEhDXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDYtXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcbm1tL0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTExMy1cbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFpTV0FQYDoKCioqRGVsdmluZyBpbnRvIFpTV0FQJiMzOTtzIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBaU1dBUGAgaW5zaWRlIGFuZCBvdXQsIHdoaWNoIG1lYW5zIGEgZGVlcCBkaXZlIGludG8gaXRzIGRlcGVuZGVuY2llcyBpcyB0aGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7d2hhdCBleHRlcm5hbCBsaWJyYXJpZXMsIHNlcnZpY2VzLCBvciBrZXJuZWwgbW9kdWxlcyBpcyB0aGlzIHRoaW5nIGxlYW5pbmcgb24/JiMzNDsgQXJlIHdlIHRhbGtpbmcgY29yZSBsaWJyYXJpZXMsIHBvdGVudGlhbGx5IGFub3RoZXIgcHJvamVjdCBvZiBlcXVhbCBzdGF0dXJlIHdpdGhpbiB0aGUgc3lzdGVtLCBvciBqdXN0IHNvbWV0aGluZyBzbWFsbCB0byBoYW5kbGUgYSBzcGVjaWZpYyBwcm9jZXNzPwoKS25vd2luZyB0aGUgYW5zd2VyIHRvIHRoYXQgd2lsbCBkZXRlcm1pbmUgc28gbXVjaC4gRG9lcyBpdCByZXF1aXJlIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgTGludXgga2VybmVsPyBEb2VzIGl0IHB1bGwgaW4gc29tZXRoaW5nIGZyb20gYW5vdGhlciBsaWJyYXJ5IHRoYXQgY291bGQgYnJlYWsgaXQgd2l0aCBhbiB1cGRhdGU/IElzIHRoZXJlIGEgaGlkZGVuIGRlcGVuZGVuY3kgb24gYSBwaWVjZSBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmU/IFRob3NlIGFyZSB0aGUgY3J1Y2lhbCBxdWVzdGlvbnMgSSYjMzk7bSBhc2tpbmcgbXlzZWxmLiBHb3R0YSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHdlYWsgcG9pbnRzIGluIHRoZSBhcmNoaXRlY3R1cmFsIGZvdW5kYXRpb24gb2YgYFpTV0FQYCByaWdodCBub3cgYW5kIGdldCB0aG9zZSBwb3RlbnRpYWwgY29uZmxpY3RzIHNxdWFyZWQgYXdheS4gVGhpcyBpcyBhYm91dCBzb2xpZGlmeWluZyBteSB1bmRlcnN0YW5kaW5nLCBtYXBwaW5nIG91dCBwb3RlbnRpYWwgcmlza3MsIGFuZCBwcmVwYXJpbmcgdG8gdHJvdWJsZXNob290LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMjpcdGNvbmZpZyBaU1dBUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFNXQVBcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9cbiAgMjY6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xuICAyOTpcdFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cbiAgMzA6XHRcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cbiAgMzE6XHRcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqWlNXQVAsIFNXQVAsIGFuZCBEZWZhdWx0IEFjdGl2YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBaU1dBUCB0aGluZywgYW5kIGl0JiMzOTtzIGNsZWFyOiBpdCYjMzk7cyBidWlsdCBvbiB0aGUgZm91bmRhdGlvbiBvZiByZWd1bGFyIFNXQVAuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5IEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIFdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGJvdGguIE15IGluc3RpbmN0LCBiYXNlZCBvbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJlbmVmaXRzLCBpcyB0byBlbmFibGUgKmJvdGgqIFpTV0FQIGFuZCB0aGUgdW5kZXJseWluZyBTV0FQIGZ1bmN0aW9uYWxpdHkuIFNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgYXBwcm9hY2ggdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGNvbXByZXNzaW9uLgoKQW5kIHRoYXQgbGVhZHMgbWUgdG8gYW5vdGhlciB0aG91Z2h0LCB0aGUgYFpTV0FQX0RFRkFVTFRfT05gIG9wdGlvbi4gSXQgbWlnaHQgYmUgcHJ1ZGVudCB0byBleHBsb3JlIHRoYXQgZnVydGhlci4gSWYgd2Ugd2FudCB0aGlzIHRvIGJlIHVzZWQgZWZmZWN0aXZlbHksIHdlIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGFjdHVhbGx5ICpydW5uaW5nKiBhbmQgYmVpbmcgbGV2ZXJhZ2VkIHdpdGhvdXQgcmVxdWlyaW5nIG1hbnVhbCBpbnRlcnZlbnRpb24gZnJvbSB0aGUgZW5kLXVzZXIuIEVuc3VyaW5nIGl0JiMzOTtzIG9uIGJ5IGRlZmF1bHQgY291bGQgYmUgdGhlIGtleSB0byB3aWRlc3ByZWFkIGFkb3B0aW9uIGFuZCBtYXhpbWl6aW5nIHRoZSBhZHZhbnRhZ2VzIG9mIFpTV0FQLiBOZWVkcyBhIGxpdHRsZSBtb3JlIHJlc2VhcmNoLCBidXQgaXQmIzM5O3MgY2VydGFpbmx5IHNvbWV0aGluZyB0byBzdHJvbmdseSBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNTpcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG4gIDM2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcbiAgNDA6XHRcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcbiAgNDM6XHRcdCAgY29tbWFuZCBsaW5lICYjMzk7enN3YXAuZW5hYmxlZD0mIzM5OyBvcHRpb24uXG4gIDQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDMwCgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDU4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBac3dhcCBXcml0ZWJhY2sgRHJvcGJlaGluZCBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoaXMgbmV3ICYjMzQ7ZHJvcGJlaGluZCYjMzQ7IG1lY2hhbmlzbSBmb3Igc3dhcCBjYWNoZSBmb2xpb3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgc3RpY2tpbmcgdGhlc2UgZm9saW9zIGJhY2sgb24gdGhlIExSVSBsaXN0LCB3aGljaCBjb3VsZCBjYXVzZSB1bm5lY2Vzc2FyeSB0aHJhc2hpbmcuIFRoaXMgc291bmRzIGxpa2UgYSBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGJ1dCBhbHNvIGEgZGVmaW5pdGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBlbmFibGluZyBgWlNXQVBgLCBgU1dBUGAsIGFuZCBgWlNXQVBfREVGQVVMVF9PTmAgYXJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbi4KCkZ1bmN0aW9uYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBrZXkgYXJlYXM6IGBtbS92bXNjYW4uY2AsIGBtbS90cnVuY2F0ZS5jYCwgYGZzL3NwbGljZS5jYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBgbW0venN3YXAuY2AsIGluZGljYXRpbmcgdGhpcyBpcyBub3QgYSB0cml2aWFsIGNoYW5nZS4KCkkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCBzb21lIG9mIHRoZSBtb2RpZmllZCBhbmQgbmV3IGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBgcmVtb3ZlX21hcHBpbmdgIGluIGBtbS92bXNjYW4uY2AgKGFuZCBpdHMgdXNlcyBpbiBgbW0vdHJ1bmNhdGUuY2AsIGBmcy9zcGxpY2UuY2AsIGFuZCBgbW0vc3dhcF9zdGF0ZS5jYCkgaXMgZGVmaW5pdGVseSBtb2RpZmllZCBhcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLiBUaGVuLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgYG1tL3pzd2FwLmNgIGlzIGFsc28gY2hhbmdlZC4gQW5kIGxhc3RseSwgYSBicmFuZC1uZXcgZnVuY3Rpb24sIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgd2hpY2ggaXMgaW50cm9kdWNlZCBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBidXQgY2FsbGVkIGZyb20gYG1tL2ZpbGVtYXAuY2AuIFRoYXQgZnVuY3Rpb24gc2VlbXMgY2VudHJhbCB0byB0aGUgY29yZSAmIzM0O2Ryb3BiZWhpbmQmIzM0OyBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gY29yZSBNTSBiZWhhdmlvciwgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIGFzIGZvY3VzIHN5bWJvbHMgdG8gdGFyZ2V0IHdpdGggdGhlIGZ1enplcjogYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgcmVtb3ZlX21hcHBpbmdgLCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEkmIzM5O3ZlIGNoZWNrZWQgYW5kIHRoZXNlIGZ1bmN0aW9ucywgd2hpbGUgbm90IGV4cG9ydGVkLCBhcmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgcGVyZmVjdCBmb3IgZnV6emluZy4KClRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWFwcGluZyYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhICYjMzk7ZHJvcGJlaGluZCYjMzk7IG1lY2hhbmlzbSBmb3Igc3dhcCBjYWNoZSBmb2xpb3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjayB0byBhdm9pZCBwdXR0aW5nIHRoZW0gb24gdGhlIExSVSBsaXN0LiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBsaWtlIGByZW1vdmVfbWFwcGluZ2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGFkZHMgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIHdoaWNoIHVzZXMgYSB3b3JrcXVldWUgdG8gZHJvcCBmb2xpb3MgZnJvbSB0aGUgc3dhcCBjYWNoZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1NIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8mIzM0OywKICAgICYjMzQ7cmVtb3ZlX21hcHBpbmcmIzM0OywKICAgICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSAmIzM5O2Ryb3BiZWhpbmQmIzM5OyBtZWNoYW5pc20gZm9yIHN3YXAgY2FjaGUgZm9saW9zIGR1cmluZyB6c3dhcCB3cml0ZWJhY2sgdG8gYXZvaWQgcHV0dGluZyB0aGVtIG9uIHRoZSBMUlUgbGlzdC4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGFuZCBhZGRzIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCB3aGljaCB1c2VzIGEgd29ya3F1ZXVlIHRvIGRyb3AgZm9saW9zIGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNTSBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCB3cml0ZWJhY2ssIGFuZCBMUlUgbWFuYWdlbWVudCAoaW50cm9kdWNpbmcgYSBcJiMzNDtkcm9wYmVoaW5kXCYjMzQ7IG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCB3b3JrcXVldWVzIGZvciBmcmVlaW5nIGZvbGlvcywgYW5kIG1vZGlmeWluZyBmdW5jdGlvbiBzaWduYXR1cmVzIGxpa2UgYHJlbW92ZV9tYXBwaW5nYCBhbmQgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIG9mIG1lbW9yeSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZWN5Y2xlIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBLTUVNTEVBSywgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHdoaWNoIGFyZSB0aGUgc3BlY2lmaWMgY2xhc3NlcyBvZiBidWdzIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjJjODQ3ZDU0ZjNjY2I5NmNiNDc5N2UzMjc5YWQ0ODM2ZmJlYjE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTk6NDk6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jCmluZGV4IDlkOGY2M2UyZmQxYWIuLjc5NDI0YmJlZTFiMGYgMTAwNjQ0Ci0tLSBhL2ZzL3NwbGljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NwbGljZS5jCkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgYm9vbCBwYWdlX2NhY2hlX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAogCQkgKiBJZiB3ZSBzdWNjZWVkZWQgaW4gcmVtb3ZpbmcgdGhlIG1hcHBpbmcsIHNldCBMUlUgZmxhZwogCQkgKiBhbmQgcmV0dXJuIGdvb2QuCiAJCSAqLwotCQlpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8pKSB7CiYjNDM7CQlpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkgewogCQkJYnVmLSZndDtmbGFncyB8PSBQSVBFX0JVRl9GTEFHX0xSVTsKIAkJCXJldHVybiB0cnVlOwogCQl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDhmMGY2OGUyNDViYWEuLmJkYWZmYzBkMWVmMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0zNzMsNyAmIzQzOzM3Myw4IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQkJCXVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7Ci1sb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mztsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJICAgIGJvb2wgcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX05VTUEpCiBleHRlcm4gaW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CkBAIC00NjUsNiAmIzQzOzQ2Niw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7CiAgKi8KIGJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiYjNDM7dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzOwogLyogQWxsb2NhdGUgLyBmcmVlIChoaWJlcm5hdGlvbikgZXhjbHVzaXZlIGVudHJpZXMgKi8KIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7CiB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTsKQEAgLTQ3NSw2ICYjNDM7NDc4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpCiB9CiAKICNlbHNlIC8qIENPTkZJR19TV0FQICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge30KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSkKIHsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCBkNzIxOTg2ZDVmNDY1Li4xNjQ3OTYxYzViYTIwIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0xNjg2LDYgJiM0MzsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTsKICAqLwogdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiYjNDM7CWJvb2wgc3dhcF9kcm9wYmVoaW5kOwomIzQzOwogCVZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7CiAKIAkvKgpAQCAtMTY5NSw3ICYjNDM7MTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbykKIAkgKiByZXVzZWQgYmVmb3JlIHRoZSBmb2xpb193YWtlX2JpdCgpLgogCSAqLwogCWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpb3MgYXJlIG9mZi1MUlUsIHNvIHdlIG11c3QgcHJldmVudCBhIHJhY2luZwomIzQzOwkgKiBzd2FwaW4gZnJvbSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQga2VlcGluZyBpdAomIzQzOwkgKiBvZmYtTFJVOiB0aGUgd3JpdGViYWNrIGZsYWcgYWxsb3dzIHRoYXQuIEFmdGVyd2FyZHMgYSBzd2FwaW4gbWF5IHdpbgomIzQzOwkgKiB0aGUgcmFjZSwgYnV0IHRoZSBmb2xpbyBpcyBhbHJlYWR5IHF1ZXVlZCBhbmQgdGhlIHdvcmtlciBwdXRzIGl0IGJhY2sKJiM0MzsJICogb24gdGhlIExSVSBpbiB0aGF0IGNhc2UuCiYjNDM7CSAqLwomIzQzOwlzd2FwX2Ryb3BiZWhpbmQgPSBmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgJmFtcDsmYW1wOwomIzQzOwkJCSAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsKIAlmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwomIzQzOwlpZiAoc3dhcF9kcm9wYmVoaW5kKSB7CiYjNDM7CQlzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTsKIAlmb2xpb19wdXQoZm9saW8pOwogfQpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmgKQEAgLTMwNCw5ICYjNDM7MzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7CiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7CiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwotc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCi0JCQkJICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7CiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi8KIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA5YzNhNWNmOTk3Nzg2Li5iOTNkZDYwN2QyNGM2IDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0xNiw2ICYjNDM7MTYsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZm9saW9fYmF0Y2guaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFja2luZy1kZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ibGtkZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9taWdyYXRlLmgmZ3Q7CkBAIC00ODMsMTMgJiM0Mzs0ODUsMTEgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CiAKLQkvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqLwotCWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXJldHVybiBmb2xpbzsKIH0KIAogLyoqCi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgogICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3QKICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVybwpAQCAtNTAxLDEzICYjNDM7NTAxLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieQogICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLgogICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlcgomIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZQomIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy4KICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwCiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLgogICovCi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC01MzUsNiAmIzQzOzUzOSw5OCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxsaXN0X2hlYWQsIHN3YXBfZHJvcGJlaGluZF9sbGlzdCk7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsJYm9vbCBkcm9wcGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CWZvbGlvX2xvY2soZm9saW8pOwomIzQzOwomIzQzOwkvKiBUaGUgZm9saW8gd2FzIGFsbG9jYXRlZCBvZmYgdGhlIExSVSBhbmQgbm90aGluZyByZS1hZGRzIGl0IGhlcmUuICovCiYjNDM7CVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpCiYjNDM7CQltZW1jZyA9IE5VTEw7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBHYXRlIHJlbW92ZV9tYXBwaW5nKCkgb24gZm9saW9fdGVzdF9zd2FwY2FjaGUoKTogYSByYWNpbmcgc3dhcGluIG1heQomIzQzOwkgKiBoYXZlIGZyZWVkIHRoZSBzd2FwIHNsb3QgKGZvbGlvX2ZyZWVfc3dhcCgpKSBhbmQgZHJvcHBlZCB0aGUgZm9saW8gZnJvbQomIzQzOwkgKiB0aGUgY2FjaGUsIGFuZCByZW1vdmVfbWFwcGluZygpIG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW8KJiM0MzsJICogKGl0IHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJiMzOTtzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS4KJiM0MzsJICovCiYjNDM7CWlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pICZhbXA7JmFtcDsKJiM0MzsJICAgIHJlbW92ZV9tYXBwaW5nKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby0mZ3Q7c3dhcCksIGZvbGlvLCB0cnVlLCBtZW1jZykpIHsKJiM0MzsJCWRyb3BwZWQgPSB0cnVlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogUmFjZWQ6IHRoZSBmb2xpbyBpcyBub3cgb3duZWQgYnkgdGhlIHN3YXBpbjsgcHV0IGl0IGJhY2suICovCiYjNDM7CQlmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsJCWZvbGlvX2FkZF9scnUoZm9saW8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsKJiM0MzsJZm9saW9fdW5sb2NrKGZvbGlvKTsKJiM0MzsJaWYgKCFkcm9wcGVkKQomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJcmV0dXJuIGRyb3BwZWQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvIC0gZnJlZSBhIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpbyBpbnRvIGEgYmF0Y2gKJiM0MzsgKiBAZm9saW86IHRoZSBvZmYtTFJVIGZvbGlvIHdob3NlIHdyaXRlYmFjayBoYXMgY29tcGxldGVkCiYjNDM7ICogQGZiYXRjaDogYmF0Y2ggb2YgZm9saW9zIHRvIGZyZWUsIGZsdXNoZWQgd2hlbiBmdWxsCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJCSAgICAgc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpCiYjNDM7ewomIzQzOwlpZiAoc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW8oZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSkKJiM0MzsJCWZvbGlvc19wdXQoZmJhdGNoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3dhcF9kcm9wYmVoaW5kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZm9saW9fYmF0Y2ggZmJhdGNoOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJZm9saW9fYmF0Y2hfaW5pdCgmYW1wO2ZiYXRjaCk7CiYjNDM7CWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKJiM0MzsJCXBvcyA9IGxsaXN0X2RlbF9hbGwocGVyX2NwdV9wdHIoJmFtcDtzd2FwX2Ryb3BiZWhpbmRfbGxpc3QsIGNwdSkpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIHBvcykgewomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilwb3MsCiYjNDM7CQkJCQkJCSAgIHN0cnVjdCBmb2xpbywgbHJ1KTsKJiM0MzsJCQlzd2FwX2Ryb3BiZWhpbmRfZnJlZV9iYXRjaF9mb2xpbyhmb2xpbywgJmFtcDtmYmF0Y2gpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChmYmF0Y2gubnIpCiYjNDM7CQlmb2xpb3NfcHV0KCZhbXA7ZmJhdGNoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFQ0xBUkVfV09SSyhzd2FwX2Ryb3BiZWhpbmRfd29yaywgc3dhcF9kcm9wYmVoaW5kX3dvcmtmbik7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzd2FwX2Ryb3BiZWhpbmRfd3E7CiYjNDM7CiYjNDM7dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopJmFtcDtmb2xpby0mZ3Q7bHJ1LAomIzQzOwkJICByYXdfY3B1X3B0cigmYW1wO3N3YXBfZHJvcGJlaGluZF9sbGlzdCkpOwomIzQzOwlxdWV1ZV93b3JrKHN3YXBfZHJvcGJlaGluZF93cSwgJmFtcDtzd2FwX2Ryb3BiZWhpbmRfd29yayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IHN3YXBfZHJvcGJlaGluZF9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlzd2FwX2Ryb3BiZWhpbmRfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtzd2FwX2Ryb3BiZWhpbmQmIzM0OywKJiM0MzsJCQkJCSAgICAgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDApOwomIzQzOwlpZiAoIXN3YXBfZHJvcGJlaGluZF93cSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7Y29yZV9pbml0Y2FsbChzd2FwX2Ryb3BiZWhpbmRfaW5pdCk7CiYjNDM7CiAvKgogICogSWYgd2UgYXJlIHRoZSBvbmx5IHVzZXIsIHRoZW4gdHJ5IHRvIGZyZWUgdXAgdGhlIHN3YXAgY2FjaGUuCiAgKgpAQCAtNjQzLDEyICYjNDM7NzM5LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLAogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwotCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpOwomIzQzOwkJZm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAJc3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTsKIAlpZiAocmVhZGFoZWFkKSB7CiAJCWZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pOwpAQCAtNjgzLDEyICYjNDM7NzgwLDEzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsCiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpOwogCXJldHVybiBmb2xpbzsKIH0KZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IGI1OGJhOTQwYmU0NzQuLjM3ZjdkODI3OGMxY2QgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdHJ1bmNhdGUuYwpAQCAtMzM2LDcgJiM0MzszMzYsNyBAQCBsb25nIG1hcHBpbmdfZXZpY3RfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJaWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIDApKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbyk7CiYjNDM7CXJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNTY3MDhkMWQyZGZkNS4uYzQwNTEzZTBiNTBiMiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc4NCwxNyAmIzQzOzc4NCwyNCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAgKiByZW1vdmVfbWFwcGluZygpIC0gQXR0ZW1wdCB0byByZW1vdmUgYSBmb2xpbyBmcm9tIGl0cyBtYXBwaW5nLgogICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLgogICogQGZvbGlvOiBUaGUgZm9saW8gdG8gcmVtb3ZlLgomIzQzOyAqIEByZWNsYWltZWQ6IFdoZXRoZXIgdGhlIGZvbGlvIGlzIGJlaW5nIHJlY2xhaW1lZCAocmVjb3JkIGEgc2hhZG93KS4KJiM0MzsgKiBAdGFyZ2V0X21lbWNnOiBUaGUgbWVtY2cgdG8gY2hhcmdlIHRoZSBldmljdGlvbiBzaGFkb3cgdG8gd2hlbiBAcmVjbGFpbWVkOwomIzQzOyAqICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIgbXVzdCBrZWVwIGl0IGFsaXZlIGFjcm9zcyB0aGUgY2FsbC4gSWdub3JlZCAobWF5CiYjNDM7ICogICAgICAgICAgICAgICAgYmUgTlVMTCkgd2hlbiBAcmVjbGFpbWVkIGlzIGZhbHNlLgogICoKICAqIElmIHRoZSBmb2xpbyBpcyBkaXJ0eSwgdW5kZXIgd3JpdGViYWNrIG9yIGlmIHNvbWVvbmUgZWxzZSBoYXMgYSByZWYKLSAqIG9uIGl0LCByZW1vdmFsIHdpbGwgZmFpbC4KJiM0MzsgKiBvbiBpdCwgcmVtb3ZhbCB3aWxsIGZhaWwuIFdoZW4gQHJlY2xhaW1lZCBpcyB0cnVlLCBhIHdvcmtpbmdzZXQgZXZpY3Rpb24KJiM0MzsgKiBzaGFkb3cgaXMgc3RvcmVkIChsaWtlIHBhZ2UgcmVjbGFpbSBkb2VzKSBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmUKJiM0MzsgKiBkZXRlY3RlZCBhbmQgdGhlIGZvbGlvIHJlLWFjdGl2YXRlZC4KICAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpbwogICogY291bGQgbm90IGJlIHJlbW92ZWQuCiAgKiBDb250ZXh0OiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50IG9uIHRoZSBmb2xpbyBhbmQKICAqIGhvbGQgaXRzIGxvY2suCiAgKi8KLWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7bG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCSAgICBib29sIHJlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZykKIHsKLQlpZiAoX19yZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpKSB7CiYjNDM7CWlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCByZWNsYWltZWQsIHRhcmdldF9tZW1jZykpIHsKIAkJLyoKIAkJICogVW5mcmVlemluZyB0aGUgcmVmY291bnQgd2l0aCAxIGVmZmVjdGl2ZWx5CiAJCSAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCA3NjFjZDY5OWUwYTNlLi5hMzU2NzFlODM3Zjg5IDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTEwMDAsOCAmIzQzOzEwMDAsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlyZXR1cm4gLUVFWElTVDsKIAogCW1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0JZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCi0JCQkJICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwomIzQzOwlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAomIzQzOwkJCQkJIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwogCXB1dF9zd2FwX2RldmljZShzaSk7CiAKIAkvKgpAQCAtMTA0NSw4ICYjNDM7MTA0NSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJLyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqLwogCWZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pOwogCi0JLyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovCi0JZm9saW9fc2V0X3JlY2xhaW0oZm9saW8pOwomIzQzOwlmb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7CiAKIAkvKiBzdGFydCB3cml0ZWJhY2sgKi8KIAlfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MDAKCQkJCQkJCW91dHB1dDogMjMwCgkJCQkJCQl0aG91Z2h0czogNTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgU2FmZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hlcmUgaXQmIzM5O3MgZm9jdXNpbmc6IHRoZSBzd2FwIGNhY2hlLCB3cml0ZWJhY2sgbWVjaGFuaXNtcywgYW5kIExSVSBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgbGlrZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgJiMzNDtkcm9wYmVoaW5kJiMzNDsgbWVjaGFuaXNtIGZvciBzd2FwIGNhY2hlIGZvbGlvcywgbW9kaWZpY2F0aW9ucyB0byBgcmVtb3ZlX21hcHBpbmdgLCBhIG5hbWUgY2hhbmdlIChgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgdG8gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApLCBhbmQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYSBjaGFuZ2UgdG8genN3YXAmIzM5O3MgZm9saW8gc2V0dGluZy4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGFsbCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbC4gSXQmIzM5O3MgaGFuZGxpbmcgcGFnZSBsaWZlY3ljbGVzLCBMUlUgbGlzdCBtYWludGVuYW5jZSwgYW5kIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzd2FwIGNhY2hlLiBOb3RoaW5nIGhlcmUgaXMgdG91Y2hpbmcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHRoZW4gc2VudCB0byB1c2VyIHNwYWNlIG9yIGltcGxlbWVudGluZyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHdoaWNoLCBvYnZpb3VzbHksIEtNU0FOIGxvdmVzIHRvIGRpZyB1cC4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCBhbmQgcGFzc2VkIHVwIHRvIHVzZXIgc3BhY2UgZWl0aGVyLgoKVGhlIHBvdGVudGlhbCBpc3N1ZXMgSSBjYW4gZW52aXNpb24gaGVyZSBhcmUgYWxsIHByZXR0eSB0ZXh0Ym9vayBtZW1vcnkgbWFuYWdlbWVudCBidWdzOiB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1heWJlIG1lbW9yeSBsZWFrcy4gVGhpbmdzIGxpa2UgdGhpcyBhcmUgYnJlYWQgYW5kIGJ1dHRlciBmb3IgS0FTQU4sIEtNRU1MRUFLLCBhbmQgZ2VuZXJhbGx5IGdvb2Qga2VybmVsIHRlc3RpbmcuIFRoZXNlIGFyZSBwcmV0dHkgY29tbW9uIGFuZCB3ZWxsLXVuZGVyc3Rvb2QgY2xhc3NlcyBvZiBlcnJvcnMuIEtNU0FOIHJlYWxseSBzaGluZXMgd2hlbiB5b3UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpbml0aWFsaXphdGlvbiBpc3N1ZXMgYW5kIGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY29udHJvbCBmbG93IHRoYXQgY291bGQgYmUgY29ycnVwdGVkIGJ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0IGp1c3QgaXNuJiMzOTt0IGhlcmUuCgpJIHdlbnQgdGhyb3VnaCB0aGUgY29kZSBhbmQgc3BlY2lmaWNhbGx5IGNoZWNrZWQgYGZvbGlvX3NldF9kcm9wYmVoaW5kYCBhbmQgYHN3YXBfZHJvcGJlaGluZF93b3JrZm5gIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIGJ1dCB0aGV5JiMzOTtyZSBqdXN0IG1hbmFnaW5nIHRoZSBmb2xpbyYjMzk7cyBwb3NpdGlvbiBpbiB0aGUgc3dhcCBjYWNoZSBhbmQgTFJVLCBhbmQgdGhlIGZvbGlvIGFsbG9jYXRpb24gaXRzZWxmIGlzIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdGlvbi4gTm8gcHJvYmxlbXMgdGhlcmUuCgpUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6ICoqTmVlZHNLTVNBTiBpcyBmYWxzZS4qKiBUaGlzIHBhdGNoIGlzIHNhZmUgZnJvbSB0aGUgcGFydGljdWxhciB2dWxuZXJhYmlsaXRpZXMgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scyB3aWxsIGJlIHN1ZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCB3cml0ZWJhY2ssIGFuZCBMUlUgbWFuYWdlbWVudCAoaW50cm9kdWNpbmcgYSBcJiMzNDtkcm9wYmVoaW5kXCYjMzQ7IG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCB3b3JrcXVldWVzIGZvciBmcmVlaW5nIGZvbGlvcywgYW5kIG1vZGlmeWluZyBmdW5jdGlvbiBzaWduYXR1cmVzIGxpa2UgYHJlbW92ZV9tYXBwaW5nYCBhbmQgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIG9mIG1lbW9yeSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZWN5Y2xlIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBLTUVNTEVBSywgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHdoaWNoIGFyZSB0aGUgc3BlY2lmaWMgY2xhc3NlcyBvZiBidWdzIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzd2FwIGNhY2hlIGFsbG9jYXRpb24sIHdyaXRlYmFjaywgYW5kIExSVSBtYW5hZ2VtZW50IChpbnRyb2R1Y2luZyBhIFwmIzM0O2Ryb3BiZWhpbmRcJiMzNDsgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZXMgZm9yIGZyZWVpbmcgZm9saW9zLCBhbmQgbW9kaWZ5aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5IGJ1ZmZlcnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBsaWZlY3ljbGUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIEtNRU1MRUFLLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdywgd2hpY2ggYXJlIHRoZSBzcGVjaWZpYyBjbGFzc2VzIG9mIGJ1Z3MgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjQ5OjUxLjk0MjMwOTE2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTA2MTAwOTQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9cIixcbiAgICBcInJlbW92ZV9tYXBwaW5nXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCB3cml0ZWJhY2ssIGFuZCBMUlUgbWFuYWdlbWVudCAoaW50cm9kdWNpbmcgYSBcXFwiZHJvcGJlaGluZFxcXCIgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZXMgZm9yIGZyZWVpbmcgZm9saW9zLCBhbmQgbW9kaWZ5aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBvZiBtZW1vcnkgYnVmZmVycy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGxpZmVjeWNsZSBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiwgS01FTUxFQUssIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LCB3aGljaCBhcmUgdGhlIHNwZWNpZmljIGNsYXNzZXMgb2YgYnVncyBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgJ2Ryb3BiZWhpbmQnIG1lY2hhbmlzbSBmb3Igc3dhcCBjYWNoZSBmb2xpb3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjayB0byBhdm9pZCBwdXR0aW5nIHRoZW0gb24gdGhlIExSVSBsaXN0LiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBsaWtlIGByZW1vdmVfbWFwcGluZ2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGFkZHMgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIHdoaWNoIHVzZXMgYSB3b3JrcXVldWUgdG8gZHJvcCBmb2xpb3MgZnJvbSB0aGUgc3dhcCBjYWNoZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1NIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjQ5OjUxLjk0MjMxNjAzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzY0OTk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2MmM4NDdkNTRmM2NjYjk2Y2I0Nzk3ZTMyNzlhZDQ4MzZmYmViMTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTk6NDk6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuY1xcbmluZGV4IDlkOGY2M2UyZmQxYWIuLjc5NDI0YmJlZTFiMGYgMTAwNjQ0XFxuLS0tIGEvZnMvc3BsaWNlLmNcXG4rKysgYi9mcy9zcGxpY2UuY1xcbkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyBib29sIHBhZ2VfY2FjaGVfcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuIFxcdFxcdCAqIElmIHdlIHN1Y2NlZWRlZCBpbiByZW1vdmluZyB0aGUgbWFwcGluZywgc2V0IExSVSBmbGFnXFxuIFxcdFxcdCAqIGFuZCByZXR1cm4gZ29vZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChyZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbykpIHtcXG4rXFx0XFx0aWYgKHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCkpIHtcXG4gXFx0XFx0XFx0YnVmLVxcdTAwM2VmbGFncyB8PSBQSVBFX0JVRl9GTEFHX0xSVTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbmluZGV4IDhmMGY2OGUyNDViYWEuLmJkYWZmYzBkMWVmMzEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbkBAIC0zNzMsNyArMzczLDggQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcXG4tbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2xvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdCAgICBib29sIHJlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXFxuIGV4dGVybiBpbnQgcmVjbGFpbV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcXG5AQCAtNDY1LDYgKzQ2Niw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XFxuICAqL1xcbiBib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rXFxuIC8qIEFsbG9jYXRlIC8gZnJlZSAoaGliZXJuYXRpb24pIGV4Y2x1c2l2ZSBlbnRyaWVzICovXFxuIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XFxuIHZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xcbkBAIC00NzUsNiArNDc4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXFxuIH1cXG4gXFxuICNlbHNlIC8qIENPTkZJR19TV0FQICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9XFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggZDcyMTk4NmQ1ZjQ2NS4uMTY0Nzk2MWM1YmEyMCAxMDA2NDRcXG4tLS0gYS9tbS9maWxlbWFwLmNcXG4rKysgYi9tbS9maWxlbWFwLmNcXG5AQCAtMTY4Niw2ICsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcXG4gICovXFxuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuK1xcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xcbitcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTE2OTUsNyArMTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cXG4gXFx0ICovXFxuIFxcdGZvbGlvX2dldChmb2xpbyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW9zIGFyZSBvZmYtTFJVLCBzbyB3ZSBtdXN0IHByZXZlbnQgYSByYWNpbmdcXG4rXFx0ICogc3dhcGluIGZyb20gcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGtlZXBpbmcgaXRcXG4rXFx0ICogb2ZmLUxSVTogdGhlIHdyaXRlYmFjayBmbGFnIGFsbG93cyB0aGF0LiBBZnRlcndhcmRzIGEgc3dhcGluIG1heSB3aW5cXG4rXFx0ICogdGhlIHJhY2UsIGJ1dCB0aGUgZm9saW8gaXMgYWxyZWFkeSBxdWV1ZWQgYW5kIHRoZSB3b3JrZXIgcHV0cyBpdCBiYWNrXFxuK1xcdCAqIG9uIHRoZSBMUlUgaW4gdGhhdCBjYXNlLlxcbitcXHQgKi9cXG4rXFx0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcXG4rXFxuIFxcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XFxuK1xcbitcXHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XFxuK1xcdFxcdHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG4gXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcXG5pbmRleCA3N2QyZDE0ZWRhNDIxLi5mYzQ0ZGFhZTFkZTFmIDEwMDY0NFxcbi0tLSBhL21tL3N3YXAuaFxcbisrKyBiL21tL3N3YXAuaFxcbkBAIC0zMDQsOSArMzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xcbiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovXFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCA5YzNhNWNmOTk3Nzg2Li5iOTNkZDYwN2QyNGM2IDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC0xNiw2ICsxNiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jsa2Rldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlncmF0ZS5oXFx1MDAzZVxcbkBAIC00ODMsMTMgKzQ4NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xcbiBcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xcbiBcXG4tXFx0LyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi9cXG4tXFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuIFxcdHJldHVybiBmb2xpbztcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxcbisgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxcbiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xcbiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVyb1xcbkBAIC01MDEsMTMgKzUwMSwxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxcbiAgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuXFxuICAqXFxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXFxuKyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZVxcbisgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cXG4rICpcXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuXFxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXFxuICAqL1xcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4rc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuIHtcXG4gXFx0aW50IG9yZGVyLCBlcnI7XFxuIFxcdHN0cnVjdCBmb2xpbyAqcmV0O1xcbkBAIC01MzUsNiArNTM5LDk4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGxpc3RfaGVhZCwgc3dhcF9kcm9wYmVoaW5kX2xsaXN0KTtcXG4rXFxuK3N0YXRpYyBib29sIHN3YXBfZHJvcGJlaGluZF9kcm9wX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXHRib29sIGRyb3BwZWQgPSBmYWxzZTtcXG4rXFxuK1xcdGZvbGlvX2xvY2soZm9saW8pO1xcbitcXG4rXFx0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xcbitcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xcbitcXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSlcXG4rXFx0XFx0bWVtY2cgPSBOVUxMO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEdhdGUgcmVtb3ZlX21hcHBpbmcoKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZyBzd2FwaW4gbWF5XFxuK1xcdCAqIGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZSBmb2xpbyBmcm9tXFxuK1xcdCAqIHRoZSBjYWNoZSwgYW5kIHJlbW92ZV9tYXBwaW5nKCkgbXVzdCBub3QgcnVuIG9uIGEgbm9uLXN3YXBjYWNoZSBmb2xpb1xcbitcXHQgKiAoaXQgd291bGQgdHJpcCBfX3JlbW92ZV9tYXBwaW5nKCkncyBtYXBwaW5nID09IGZvbGlvX21hcHBpbmcoKSBjaGVjaykuXFxuK1xcdCAqL1xcbitcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJlbW92ZV9tYXBwaW5nKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby1cXHUwMDNlc3dhcCksIGZvbGlvLCB0cnVlLCBtZW1jZykpIHtcXG4rXFx0XFx0ZHJvcHBlZCA9IHRydWU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqL1xcbitcXHRcXHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rXFxuK1xcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdGlmICghZHJvcHBlZClcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0cmV0dXJuIGRyb3BwZWQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBzd2FwX2Ryb3BiZWhpbmRfZnJlZV9iYXRjaF9mb2xpbyAtIGZyZWUgYSBkcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW8gaW50byBhIGJhdGNoXFxuKyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWRcXG4rICogQGZiYXRjaDogYmF0Y2ggb2YgZm9saW9zIHRvIGZyZWUsIGZsdXNoZWQgd2hlbiBmdWxsXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfZnJlZV9iYXRjaF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxcbit7XFxuK1xcdGlmIChzd2FwX2Ryb3BiZWhpbmRfZHJvcF9mb2xpbyhmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSlcXG4rXFx0XFx0Zm9saW9zX3B1dChmYmF0Y2gpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgZm9saW9fYmF0Y2ggZmJhdGNoO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGZvbGlvX2JhdGNoX2luaXQoXFx1MDAyNmZiYXRjaCk7XFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0cG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cihcXHUwMDI2c3dhcF9kcm9wYmVoaW5kX2xsaXN0LCBjcHUpKTtcXG4rXFx0XFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIHBvcykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKChzdHJ1Y3QgbGlzdF9oZWFkICopcG9zLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZm9saW8sIGxydSk7XFxuK1xcdFxcdFxcdHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvKGZvbGlvLCBcXHUwMDI2ZmJhdGNoKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmIChmYmF0Y2gubnIpXFxuK1xcdFxcdGZvbGlvc19wdXQoXFx1MDAyNmZiYXRjaCk7XFxuK31cXG4rXFxuK3N0YXRpYyBERUNMQVJFX1dPUksoc3dhcF9kcm9wYmVoaW5kX3dvcmssIHN3YXBfZHJvcGJlaGluZF93b3JrZm4pO1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN3YXBfZHJvcGJlaGluZF93cTtcXG4rXFxuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSxcXG4rXFx0XFx0ICByYXdfY3B1X3B0cihcXHUwMDI2c3dhcF9kcm9wYmVoaW5kX2xsaXN0KSk7XFxuK1xcdHF1ZXVlX3dvcmsoc3dhcF9kcm9wYmVoaW5kX3dxLCBcXHUwMDI2c3dhcF9kcm9wYmVoaW5kX3dvcmspO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBzd2FwX2Ryb3BiZWhpbmRfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN3YXBfZHJvcGJlaGluZF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwic3dhcF9kcm9wYmVoaW5kXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSwgMCk7XFxuK1xcdGlmICghc3dhcF9kcm9wYmVoaW5kX3dxKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rY29yZV9pbml0Y2FsbChzd2FwX2Ryb3BiZWhpbmRfaW5pdCk7XFxuK1xcbiAvKlxcbiAgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgdXNlciwgdGhlbiB0cnkgdG8gZnJlZSB1cCB0aGUgc3dhcCBjYWNoZS5cXG4gICpcXG5AQCAtNjQzLDEyICs3MzksMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbiBcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4tXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcXG4rXFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbiBcXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4gXFxuIFxcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4rXFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuIFxcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgcGx1Zyk7XFxuIFxcdGlmIChyZWFkYWhlYWQpIHtcXG4gXFx0XFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XFxuQEAgLTY4MywxMiArNzgwLDEzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbiBcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4tXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbitcXHRcXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcXG4gXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZvbGlvO1xcbiBcXG4rXFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuIFxcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgTlVMTCk7XFxuIFxcdHJldHVybiBmb2xpbztcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS90cnVuY2F0ZS5jIGIvbW0vdHJ1bmNhdGUuY1xcbmluZGV4IGI1OGJhOTQwYmU0NzQuLjM3ZjdkODI3OGMxY2QgMTAwNjQ0XFxuLS0tIGEvbW0vdHJ1bmNhdGUuY1xcbisrKyBiL21tL3RydW5jYXRlLmNcXG5AQCAtMzM2LDcgKzMzNiw3IEBAIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIDApKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbyk7XFxuK1xcdHJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDU2NzA4ZDFkMmRmZDUuLmM0MDUxM2UwYjUwYjIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC03ODQsMTcgKzc4NCwyNCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuXFxuICAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS5cXG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gcmVtb3ZlLlxcbisgKiBAcmVjbGFpbWVkOiBXaGV0aGVyIHRoZSBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgKHJlY29yZCBhIHNoYWRvdykuXFxuKyAqIEB0YXJnZXRfbWVtY2c6IFRoZSBtZW1jZyB0byBjaGFyZ2UgdGhlIGV2aWN0aW9uIHNoYWRvdyB0byB3aGVuIEByZWNsYWltZWQ7XFxuKyAqICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIgbXVzdCBrZWVwIGl0IGFsaXZlIGFjcm9zcyB0aGUgY2FsbC4gSWdub3JlZCAobWF5XFxuKyAqICAgICAgICAgICAgICAgIGJlIE5VTEwpIHdoZW4gQHJlY2xhaW1lZCBpcyBmYWxzZS5cXG4gICpcXG4gICogSWYgdGhlIGZvbGlvIGlzIGRpcnR5LCB1bmRlciB3cml0ZWJhY2sgb3IgaWYgc29tZW9uZSBlbHNlIGhhcyBhIHJlZlxcbi0gKiBvbiBpdCwgcmVtb3ZhbCB3aWxsIGZhaWwuXFxuKyAqIG9uIGl0LCByZW1vdmFsIHdpbGwgZmFpbC4gV2hlbiBAcmVjbGFpbWVkIGlzIHRydWUsIGEgd29ya2luZ3NldCBldmljdGlvblxcbisgKiBzaGFkb3cgaXMgc3RvcmVkIChsaWtlIHBhZ2UgcmVjbGFpbSBkb2VzKSBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmVcXG4rICogZGV0ZWN0ZWQgYW5kIHRoZSBmb2xpbyByZS1hY3RpdmF0ZWQuXFxuICAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpb1xcbiAgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC5cXG4gICogQ29udGV4dDogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBhIHNpbmdsZSByZWZjb3VudCBvbiB0aGUgZm9saW8gYW5kXFxuICAqIGhvbGQgaXRzIGxvY2suXFxuICAqL1xcbi1sb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHQgICAgYm9vbCByZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXFxuIHtcXG4tXFx0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xcbitcXHRpZiAoX19yZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgcmVjbGFpbWVkLCB0YXJnZXRfbWVtY2cpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFVuZnJlZXppbmcgdGhlIHJlZmNvdW50IHdpdGggMSBlZmZlY3RpdmVseVxcbiBcXHRcXHQgKiBkcm9wcyB0aGUgcGFnZWNhY2hlIHJlZiBmb3IgdXMgd2l0aG91dCByZXF1aXJpbmcgYW5vdGhlclxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IDc2MWNkNjk5ZTBhM2UuLmEzNTY3MWU4MzdmODkgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMTAwMCw4ICsxMDAwLDggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcbiBcXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbi1cXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcbitcXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxcbitcXHRcXHRcXHRcXHRcXHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XFxuIFxcdHB1dF9zd2FwX2RldmljZShzaSk7XFxuIFxcbiBcXHQvKlxcbkBAIC0xMDQ1LDggKzEwNDUsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHQvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovXFxuIFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbiBcXG4tXFx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXFxuLVxcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcXG4rXFx0Zm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xcbiBcXG4gXFx0Lyogc3RhcnQgd3JpdGViYWNrICovXFxuIFxcdF9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo0OTo1My40MDY2ODA4MDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNTgxOTMyNDE4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gICAgXCJyZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhICdkcm9wYmVoaW5kJyBtZWNoYW5pc20gZm9yIHN3YXAgY2FjaGUgZm9saW9zIGR1cmluZyB6c3dhcCB3cml0ZWJhY2sgdG8gYXZvaWQgcHV0dGluZyB0aGVtIG9uIHRoZSBMUlUgbGlzdC4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGFuZCBhZGRzIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCB3aGljaCB1c2VzIGEgd29ya3F1ZXVlIHRvIGRyb3AgZm9saW9zIGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNTSBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NjJjODQ3ZDU0ZjNjY2I5NmNiNDc5N2UzMjc5YWQ0ODM2ZmJlYjE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTk6NDk6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jXG5pbmRleCA5ZDhmNjNlMmZkMWFiLi43OTQyNGJiZWUxYjBmIDEwMDY0NFxuLS0tIGEvZnMvc3BsaWNlLmNcbisrKyBiL2ZzL3NwbGljZS5jXG5AQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgYm9vbCBwYWdlX2NhY2hlX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHQgKiBJZiB3ZSBzdWNjZWVkZWQgaW4gcmVtb3ZpbmcgdGhlIG1hcHBpbmcsIHNldCBMUlUgZmxhZ1xuIFx0XHQgKiBhbmQgcmV0dXJuIGdvb2QuXG4gXHRcdCAqL1xuLVx0XHRpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8pKSB7XG4rXHRcdGlmIChyZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpKSB7XG4gXHRcdFx0YnVmLVx1MDAzZWZsYWdzIHw9IFBJUEVfQlVGX0ZMQUdfTFJVO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggOGYwZjY4ZTI0NWJhYS4uYmRhZmZjMGQxZWYzMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTM3Myw3ICszNzMsOCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCk7XG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xuLWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK2xvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdCAgICBib29sIHJlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbiBleHRlcm4gaW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG5AQCAtNDY1LDYgKzQ2Niw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XG4gICovXG4gYm9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4rdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK1xuIC8qIEFsbG9jYXRlIC8gZnJlZSAoaGliZXJuYXRpb24pIGV4Y2x1c2l2ZSBlbnRyaWVzICovXG4gc3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTtcbiB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcbkBAIC00NzUsNiArNDc4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4gfVxuIFxuICNlbHNlIC8qIENPTkZJR19TV0FQICovXG4rc3RhdGljIGlubGluZSB2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge31cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCBkNzIxOTg2ZDVmNDY1Li4xNjQ3OTYxYzViYTIwIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjg2LDYgKzE2ODYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpO1xuICAqL1xuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbitcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xuK1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiBcbiBcdC8qXG5AQCAtMTY5NSw3ICsxNjk3LDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cbiBcdCAqL1xuIFx0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbitcdC8qXG4rXHQgKiBEcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW9zIGFyZSBvZmYtTFJVLCBzbyB3ZSBtdXN0IHByZXZlbnQgYSByYWNpbmdcbitcdCAqIHN3YXBpbiBmcm9tIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBrZWVwaW5nIGl0XG4rXHQgKiBvZmYtTFJVOiB0aGUgd3JpdGViYWNrIGZsYWcgYWxsb3dzIHRoYXQuIEFmdGVyd2FyZHMgYSBzd2FwaW4gbWF5IHdpblxuK1x0ICogdGhlIHJhY2UsIGJ1dCB0aGUgZm9saW8gaXMgYWxyZWFkeSBxdWV1ZWQgYW5kIHRoZSB3b3JrZXIgcHV0cyBpdCBiYWNrXG4rXHQgKiBvbiB0aGUgTFJVIGluIHRoYXQgY2FzZS5cbitcdCAqL1xuK1x0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcbitcbiBcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG4rXG4rXHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XG4rXHRcdHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMwNCw5ICszMDQsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDljM2E1Y2Y5OTc3ODYuLmI5M2RkNjA3ZDI0YzYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTE2LDYgKzE2LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWlncmF0ZS5oXHUwMDNlXG5AQCAtNDgzLDEzICs0ODUsMTEgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIFxuLVx0LyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi9cbi1cdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbiBcbiAvKipcbi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbisgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuICAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4gICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcbiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVyb1xuQEAgLTUwMSwxMyArNTAxLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuICAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnlcbiAgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuXG4gICpcbisgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlclxuKyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZVxuKyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLlxuKyAqXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuXG4gICogUmV0dXJuOiBSZXR1cm5zIHRoZSBmb2xpbyBpZiBhbGxvY2F0aW9uIHN1Y2NlZWRlZCBhbmQgZm9saW8gaXMgaW4gdGhlIHN3YXBcbiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLlxuICAqL1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4rc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuK1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiB7XG4gXHRpbnQgb3JkZXIsIGVycjtcbiBcdHN0cnVjdCBmb2xpbyAqcmV0O1xuQEAgLTUzNSw2ICs1MzksOTggQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGxpc3RfaGVhZCwgc3dhcF9kcm9wYmVoaW5kX2xsaXN0KTtcbitcbitzdGF0aWMgYm9vbCBzd2FwX2Ryb3BiZWhpbmRfZHJvcF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGJvb2wgZHJvcHBlZCA9IGZhbHNlO1xuK1xuK1x0Zm9saW9fbG9jayhmb2xpbyk7XG4rXG4rXHQvKiBUaGUgZm9saW8gd2FzIGFsbG9jYXRlZCBvZmYgdGhlIExSVSBhbmQgbm90aGluZyByZS1hZGRzIGl0IGhlcmUuICovXG4rXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbitcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKVxuK1x0XHRtZW1jZyA9IE5VTEw7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdC8qXG4rXHQgKiBHYXRlIHJlbW92ZV9tYXBwaW5nKCkgb24gZm9saW9fdGVzdF9zd2FwY2FjaGUoKTogYSByYWNpbmcgc3dhcGluIG1heVxuK1x0ICogaGF2ZSBmcmVlZCB0aGUgc3dhcCBzbG90IChmb2xpb19mcmVlX3N3YXAoKSkgYW5kIGRyb3BwZWQgdGhlIGZvbGlvIGZyb21cbitcdCAqIHRoZSBjYWNoZSwgYW5kIHJlbW92ZV9tYXBwaW5nKCkgbXVzdCBub3QgcnVuIG9uIGEgbm9uLXN3YXBjYWNoZSBmb2xpb1xuK1x0ICogKGl0IHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJ3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLlxuK1x0ICovXG4rXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHJlbW92ZV9tYXBwaW5nKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby1cdTAwM2Vzd2FwKSwgZm9saW8sIHRydWUsIG1lbWNnKSkge1xuK1x0XHRkcm9wcGVkID0gdHJ1ZTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqL1xuK1x0XHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcbitcdFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4rXHR9XG4rXG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rXG4rXHRmb2xpb191bmxvY2soZm9saW8pO1xuK1x0aWYgKCFkcm9wcGVkKVxuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0cmV0dXJuIGRyb3BwZWQ7XG4rfVxuK1xuKy8qKlxuKyAqIHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvIC0gZnJlZSBhIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpbyBpbnRvIGEgYmF0Y2hcbisgKiBAZm9saW86IHRoZSBvZmYtTFJVIGZvbGlvIHdob3NlIHdyaXRlYmFjayBoYXMgY29tcGxldGVkXG4rICogQGZiYXRjaDogYmF0Y2ggb2YgZm9saW9zIHRvIGZyZWUsIGZsdXNoZWQgd2hlbiBmdWxsXG4rICovXG4rc3RhdGljIHZvaWQgc3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaClcbit7XG4rXHRpZiAoc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW8oZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxuK1x0XHRmb2xpb3NfcHV0KGZiYXRjaCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHN3YXBfZHJvcGJlaGluZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBmb2xpb19iYXRjaCBmYmF0Y2g7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcbitcdGludCBjcHU7XG4rXG4rXHRmb2xpb19iYXRjaF9pbml0KFx1MDAyNmZiYXRjaCk7XG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4rXHRcdHBvcyA9IGxsaXN0X2RlbF9hbGwocGVyX2NwdV9wdHIoXHUwMDI2c3dhcF9kcm9wYmVoaW5kX2xsaXN0LCBjcHUpKTtcbitcdFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIHBvcykge1xuK1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilwb3MsXG4rXHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdFx0c3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8oZm9saW8sIFx1MDAyNmZiYXRjaCk7XG4rXHRcdH1cbitcdH1cbitcdGlmIChmYmF0Y2gubnIpXG4rXHRcdGZvbGlvc19wdXQoXHUwMDI2ZmJhdGNoKTtcbit9XG4rXG4rc3RhdGljIERFQ0xBUkVfV09SSyhzd2FwX2Ryb3BiZWhpbmRfd29yaywgc3dhcF9kcm9wYmVoaW5kX3dvcmtmbik7XG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzd2FwX2Ryb3BiZWhpbmRfd3E7XG4rXG4rdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0bGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKVx1MDAyNmZvbGlvLVx1MDAzZWxydSxcbitcdFx0ICByYXdfY3B1X3B0cihcdTAwMjZzd2FwX2Ryb3BiZWhpbmRfbGxpc3QpKTtcbitcdHF1ZXVlX3dvcmsoc3dhcF9kcm9wYmVoaW5kX3dxLCBcdTAwMjZzd2FwX2Ryb3BiZWhpbmRfd29yayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IHN3YXBfZHJvcGJlaGluZF9pbml0KHZvaWQpXG4re1xuK1x0c3dhcF9kcm9wYmVoaW5kX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwic3dhcF9kcm9wYmVoaW5kXCIsXG4rXHRcdFx0XHRcdCAgICAgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDApO1xuK1x0aWYgKCFzd2FwX2Ryb3BiZWhpbmRfd3EpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0cmV0dXJuIDA7XG4rfVxuK2NvcmVfaW5pdGNhbGwoc3dhcF9kcm9wYmVoaW5kX2luaXQpO1xuK1xuIC8qXG4gICogSWYgd2UgYXJlIHRoZSBvbmx5IHVzZXIsIHRoZW4gdHJ5IHRvIGZyZWUgdXAgdGhlIHN3YXAgY2FjaGUuXG4gICpcbkBAIC02NDMsMTIgKzczOSwxMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgcGx1Zyk7XG4gXHRpZiAocmVhZGFoZWFkKSB7XG4gXHRcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xuQEAgLTY4MywxMiArNzgwLDEzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZvbGlvO1xuIFxuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbmRpZmYgLS1naXQgYS9tbS90cnVuY2F0ZS5jIGIvbW0vdHJ1bmNhdGUuY1xuaW5kZXggYjU4YmE5NDBiZTQ3NC4uMzdmN2Q4Mjc4YzFjZCAxMDA2NDRcbi0tLSBhL21tL3RydW5jYXRlLmNcbisrKyBiL21tL3RydW5jYXRlLmNcbkBAIC0zMzYsNyArMzM2LDcgQEAgbG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIDApKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbyk7XG4rXHRyZXR1cm4gcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTY3MDhkMWQyZGZkNS4uYzQwNTEzZTBiNTBiMiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTc4NCwxNyArNzg0LDI0IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAgKiByZW1vdmVfbWFwcGluZygpIC0gQXR0ZW1wdCB0byByZW1vdmUgYSBmb2xpbyBmcm9tIGl0cyBtYXBwaW5nLlxuICAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS5cbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byByZW1vdmUuXG4rICogQHJlY2xhaW1lZDogV2hldGhlciB0aGUgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIChyZWNvcmQgYSBzaGFkb3cpLlxuKyAqIEB0YXJnZXRfbWVtY2c6IFRoZSBtZW1jZyB0byBjaGFyZ2UgdGhlIGV2aWN0aW9uIHNoYWRvdyB0byB3aGVuIEByZWNsYWltZWQ7XG4rICogICAgICAgICAgICAgICAgdGhlIGNhbGxlciBtdXN0IGtlZXAgaXQgYWxpdmUgYWNyb3NzIHRoZSBjYWxsLiBJZ25vcmVkIChtYXlcbisgKiAgICAgICAgICAgICAgICBiZSBOVUxMKSB3aGVuIEByZWNsYWltZWQgaXMgZmFsc2UuXG4gICpcbiAgKiBJZiB0aGUgZm9saW8gaXMgZGlydHksIHVuZGVyIHdyaXRlYmFjayBvciBpZiBzb21lb25lIGVsc2UgaGFzIGEgcmVmXG4tICogb24gaXQsIHJlbW92YWwgd2lsbCBmYWlsLlxuKyAqIG9uIGl0LCByZW1vdmFsIHdpbGwgZmFpbC4gV2hlbiBAcmVjbGFpbWVkIGlzIHRydWUsIGEgd29ya2luZ3NldCBldmljdGlvblxuKyAqIHNoYWRvdyBpcyBzdG9yZWQgKGxpa2UgcGFnZSByZWNsYWltIGRvZXMpIHNvIHRoYXQgYSBsYXRlciByZWZhdWx0IGNhbiBiZVxuKyAqIGRldGVjdGVkIGFuZCB0aGUgZm9saW8gcmUtYWN0aXZhdGVkLlxuICAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpb1xuICAqIGNvdWxkIG5vdCBiZSByZW1vdmVkLlxuICAqIENvbnRleHQ6IFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgYSBzaW5nbGUgcmVmY291bnQgb24gdGhlIGZvbGlvIGFuZFxuICAqIGhvbGQgaXRzIGxvY2suXG4gICovXG4tbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbitsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHQgICAgYm9vbCByZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXG4ge1xuLVx0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xuK1x0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHlcbiBcdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggNzYxY2Q2OTllMGEzZS4uYTM1NjcxZTgzN2Y4OSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0xMDAwLDggKzEwMDAsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4tXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbi1cdFx0XHRcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcbitcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4rXHRcdFx0XHRcdCBOT19JTlRFUkxFQVZFX0lOREVYKTtcbiBcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHQvKlxuQEAgLTEwNDUsOCArMTA0NSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHQvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovXG4gXHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbiBcbi1cdC8qIG1vdmUgaXQgdG8gdGhlIHRhaWwgb2YgdGhlIGluYWN0aXZlIGxpc3QgYWZ0ZXIgZW5kX3dyaXRlYmFjayAqL1xuLVx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xuK1x0Zm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4gXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjQ5OjUzLjQwNjY4MjUwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NDYwMTg1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQncyBtZXNzaW5nIHdpdGggaG93IHN3YXAgY2FjaGUgZm9saW9zIGFyZSBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgenN3YXAgd3JpdGViYWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyBjYXJlZnVsIGF0dGVudGlvbi4gVGhlIHBhdGNoIHRvdWNoZXMgY3JpdGljYWwgYml0cyBvZiB0aGUga2VybmVsOiBgZnMvc3BsaWNlLmNgLCBgaW5jbHVkZS9saW51eC9zd2FwLmhgLCBgbW0vZmlsZW1hcC5jYCwgYG1tL3N3YXAuaGAsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vdHJ1bmNhdGUuY2AsIGBtbS92bXNjYW4uY2AsIGFuZCwgY3J1Y2lhbGx5LCBgbW0venN3YXAuY2AuIFRoaXMgaXNuJ3Qgc29tZSBtaW5vciB0d2VhazsgaXQncyByaWdodCBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBhIFwiZHJvcGJlaGluZFwiIG1lY2hhbmlzbSBpcyBiZWluZyBpbnRyb2R1Y2VkIGZvciB6c3dhcCB3cml0ZWJhY2suIFRoaXMgaW52b2x2ZXMgYSBuZXcgZnVuY3Rpb24sIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgd2hpY2ggd2lsbCB1c2UgYSB3b3JrcXVldWUsIGBzd2FwX2Ryb3BiZWhpbmRfd3FgLCB0byBwcm9jZXNzIGZvbGlvcyB0aGF0IGhhdmUgYmVlbiB3cml0dGVuIGJhY2sgZnJvbSB6c3dhcCBhbmQgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGRyb3BwZWQgZnJvbSB0aGUgc3dhcCBjYWNoZSwgcmF0aGVyIHRoYW4gYmVpbmcgcHV0IGJhY2sgb24gdGhlIExSVSBsaXN0LiBTbWFydC4gSXQgYWxzbyBhbHRlcnMgYHJlbW92ZV9tYXBwaW5nYCB0byBhY2NlcHQgYHJlY2xhaW1lZGAgYW5kIGB0YXJnZXRfbWVtY2dgIGFyZ3VtZW50cywgYW5kIG1vZGlmaWVzIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AgdG8gdXNlIHRoZSBuZXcgXCJkcm9wYmVoaW5kXCIgbG9naWMuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzaWduaWZpY2FudCBvbmUuIE15IGZpcnN0IGFjdGlvbj8gVGhpcyBuZWVkcyBmdXp6aW5nLiBBbmQgcHJvYmFibHkgc29tZSBoZWF2eS1kdXR5IHRlc3Rpbmcgb24gYSB2YXJpZXR5IG9mIHdvcmtsb2Fkcy5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IHN5bWJvbHM6IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgYHN3YXBfZHJvcGJlaGluZF93b3JrZm5gLCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYHJlbW92ZV9tYXBwaW5nYCwgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGVzZSBpbnRpbWF0ZWx5LlxuXG5Db25maWctd2lzZSwgaXQncyBjbGVhciB0aGF0IGBDT05GSUdfWlNXQVBgIGFuZCBgQ09ORklHX1NXQVBgIGFyZSByZXF1aXJlZC5cblxuTm93LCBJJ20gZ29pbmcgdG8gY2hlY2sgaWYgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgc3RhdGljIG9yIG5vdCBiZWNhdXNlIGl0J3MgYWx3YXlzIGdvb2QgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhvc2UgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gdXNpbmcgYGdyZXBwZXJgLi4uIEFoLCB5ZXMsIGl0J3Mgc3RhdGljIHdpdGhpbiBgbW0venN3YXAuY2AuIFRoaXMgbWVhbnMgaXQncyBpbnRlcm5hbCB0byB0aGF0IGZpbGUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBub3cgdGhhdCBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgaXMgKm5vdCogc3RhdGljLCBzbyBpdCdzIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgZmlsZS5cblxuSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgd2hlcmUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgY2FsbGVkIGZyb20uIEkgd2FudCB0byBzZWUgaWYgaXQncyBjYWxsZWQgZnJvbSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGNvdWxkIGJlIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBjaGFuZ2UgaW50ZWdyYXRlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDowMi4zNTI3MDMyMDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MzI0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05ODYtICovXFxubW0venN3YXAuYzo5ODc6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTk4OC1cXHRcXHRcXHRcXHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jPTEwODc9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTExMC1cXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXFxubW0venN3YXAuYzoxMTExOlxcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcXG5tbS96c3dhcC5jLTExMTItXFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnknc1xcbi0tXFxubW0venN3YXAuYy0xMTQ1LVxcbm1tL3pzd2FwLmM6MTE0NjpcXHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XFxubW0venN3YXAuYy0xMTQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDowMi40MDE0NDE3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODg5MzAyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ29udHJvbGxlciBDYWxsYmFjayoqXG5cblJpZ2h0LCBzbyBgc2hyaW5rX21lbWNnX2NiYCBpcyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgenN3YXAgbGF5ZXIuIFRoZSBmaXJzdCBjbHVlIGlzIHRoYXQgYHNocmlua19tZW1jZ19jYmAgY2FsbHMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoYXQncyBpbXBvcnRhbnQuIEl0IHN1Z2dlc3RzIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBzb21laG93IGludm9sdmVkIGluIHRyaWdnZXJpbmcgb3IgbWFuYWdpbmcgdGhlIHdyaXRpbmcgYmFjayBvZiBwYWdlcyB0byB6c3dhcC4gTWFrZXMgc2Vuc2U7IGBzaHJpbmtgIGltcGxpZXMgd2UncmUgdHJ5aW5nIHRvIGZyZWUgdXAgbWVtb3J5LlxuXG5UaGUgZmFjdCB0aGF0IGBzaHJpbmtfbWVtY2dfY2JgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGlzIGFsc28gYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoYXQgbGltaXRzIGl0cyBzY29wZSB0byB0aGUgY29tcGlsYXRpb24gdW5pdCBpdCdzIGRlZmluZWQgaW4uIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGlzLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiB3aGF0IGV4YWN0bHkgaXMgY2FsbGluZyB0aGlzIGBzaHJpbmtfbWVtY2dfY2JgIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBhbmQgY29udGV4dCBvZiB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIFRoaXMgd291bGQgbGlrZWx5IGJlIGZvdW5kIGluIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDowNi4xOTAzNzQxODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NTI2NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX21lbWNnX2NiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtMTA4Ni0gKi9cXG5tbS96c3dhcC5jOjEwODc6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG5tbS96c3dhcC5jLTEwODgtXFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmFyZylcXG4tLVxcbm1tL3pzd2FwLmM9MTE2OD1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS96c3dhcC5jLTExNzktXFxubW0venN3YXAuYzoxMTgwOlxcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcXHUwMDI2c2hyaW5rX21lbWNnX2NiLFxcbm1tL3pzd2FwLmMtMTE4MS1cXHRcXHRcXHUwMDI2ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpO1xcbi0tXFxubW0venN3YXAuYz0xMjc3PXN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3pzd2FwLmMtMTI5NC1cXHRcXHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLFxcbm1tL3pzd2FwLmM6MTI5NTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXFx1MDAyNm5yX3RvX3dhbGspO1xcbm1tL3pzd2FwLmMtMTI5Ni1cXHRcXHRzY2FubmVkICs9IDEgLSBucl90b193YWxrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDowNi4yMzkzMzMzMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkwODc3NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYHNocmlua19tZW1jZ2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIGNhbGxzIHRoYXQgbGVhZHMgdG8gYHNocmlua19tZW1jZ2AuIFRoZSBjb2RlIHNob3dzIHRoYXQgYm90aCBgenN3YXBfc2hyaW5rZXJfc2NhbmAgYW5kIGBzaHJpbmtfbWVtY2dgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhleSBhcmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIHNvdXJjZSBmaWxlcywgd2hpY2ggaGVscHMgd2l0aCBtb2R1bGFyaXR5LCBidXQgYWxzbyBtYWtlcyB0cmFjaW5nIHRoZSBjYWxsaW5nIHBhdGggYSBiaXQgbW9yZSBpbXBvcnRhbnQuIFRoZSBrZXkgdGhpbmcgSSBzZWUgaXMgdGhhdCBgenN3YXBfc2hyaW5rZXJfc2NhbmAgZXhwbGljaXRseSBjYWxscyBgc2hyaW5rX21lbWNnYC4gTm93LCBJIG5lZWQgdG8ga25vdyB3aGF0IGVsc2UgY2FsbHMgYHNocmlua19tZW1jZ2AuIEZpZ3VyaW5nIG91dCB0aGUgdXBzdHJlYW0gY2FsbCBzaXRlcyBmb3IgYHNocmlua19tZW1jZ2AgaXMgbXkgbmV4dCBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYyNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjUwOjA5LjkzMDIxMzg5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTcyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19tZW1jZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9OTg3PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwODYtICovXFxubW0venN3YXAuYzoxMDg3OnN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0venN3YXAuYy0xMDg4LVxcdFxcdFxcdFxcdCAgICAgICB2b2lkICphcmcpXFxuLS1cXG5tbS96c3dhcC5jPTExNjg9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMTc5LVxcbm1tL3pzd2FwLmM6MTE4MDpcXHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBzYywgXFx1MDAyNnNocmlua19tZW1jZ19jYixcXG5tbS96c3dhcC5jLTExODEtXFx0XFx0XFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTI2MT1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xMjc2LVxcbm1tL3pzd2FwLmM6MTI3NzpzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0venN3YXAuYy0xMjc4LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTI5NC1cXHRcXHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLFxcbm1tL3pzd2FwLmM6MTI5NTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXFx1MDAyNm5yX3RvX3dhbGspO1xcbm1tL3pzd2FwLmMtMTI5Ni1cXHRcXHRzY2FubmVkICs9IDEgLSBucl90b193YWxrO1xcbi0tXFxubW0venN3YXAuYz0xMzA1PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xMzY5LVxcbm1tL3pzd2FwLmM6MTM3MDpcXHRcXHRyZXQgPSBzaHJpbmtfbWVtY2cobWVtY2cpO1xcbm1tL3pzd2FwLmMtMTM3MS1cXHRcXHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cXG4tLVxcbm1tL3pzd2FwLmM9MTQ3NT1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE0OTMtXFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG5tbS96c3dhcC5jOjE0OTQ6XFx0XFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcXG5tbS96c3dhcC5jLTE0OTUtXFx0XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDowOS45NzgzOTA5NDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU5NzM5OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gWnN3YXAgYW5kIFN3YXAgQ2FjaGUgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gYHpzd2FwX3N0b3JlYCBpcyBjYWxsaW5nIGBzaHJpbmtfbWVtY2dgLiBUaGF0IG1ha2VzIHNlbnNlLCBwYXJ0IG9mIG1hbmFnaW5nIG1lbW9yeSBwcmVzc3VyZS4gQW5kIGl0J3MgZXhwb3J0ZWQsIHNvIGl0J3MgY2xlYXJseSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEdvb2QuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgYHJlbW92ZV9tYXBwaW5nYCBpcyBkb2luZyBpbiB0aGlzIGNvbnRleHQuIEl0J3MgYWxzbyBub24tc3RhdGljLCBzbyBpdCdzIGFjY2Vzc2libGUuIFRoaXMgbGlrZWx5IHBsYXlzIGEgcm9sZSBpbiBmcmVlaW5nIHVwIHJlc291cmNlcy5cblxuSG1tLCBsZXQncyBsb29rIGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBXYWl0IGEgbWludXRlLCBpcyB0aGF0ICphbHNvKiBub24tc3RhdGljPyBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIFllcywgaXQncyBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBidXQgaXQncyBleHBvcnRlZC4gVGhpcyBzZWVtcyBpbXBvcnRhbnQuIEkgbmVlZCB0byBkaWcgaW50byBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgZWxlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDoxNC44MzgxMzM5NzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTk2MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcF9zdGF0ZS5jPTQwNT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy00OTEtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjQ5MjogKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy00OTMtICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MTEtICovXFxubW0vc3dhcF9zdGF0ZS5jOjUxMjpzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxubW0vc3dhcF9zdGF0ZS5jLTUxMy1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTczMj1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy03NDEtXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbm1tL3N3YXBfc3RhdGUuYzo3NDI6XFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy03NDMtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9Nzc0PXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNzgyLVxcdFxcdFxcdHJldHVybiBmb2xpbztcXG5tbS9zd2FwX3N0YXRlLmM6NzgzOlxcdFxcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy03ODQtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjUwOjE0Ljg4NjMzNTIyOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ2NDk1NDE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIENvZGUgSW5zcGVjdGlvbjogVGhlIE5vbi1TdGF0aWMgQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBhIGZldyB0aGluZ3MgYXJlIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lLiBJIHNlZSB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzbid0IGRlY2xhcmVkIHN0YXRpYy4gVGhhdCdzIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSByZWQgZmxhZyBpbiBpdHNlbGYuIEhvd2V2ZXIsIGl0J3Mgbm90IGV4cG9ydGVkIGVpdGhlciwgd2hpY2ggaXMgYSBiaXQgb2RkLiBUaGVuIEkgc2VlIHRoYXQgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGlzIGFsc28gbm9uLXN0YXRpYy4gSW50ZXJlc3RpbmcuIFRoZW4gYHN3YXBpbl9zeW5jYCwgYW5kIGB6c3dhcF9zdG9yZWAuIEZpbmFsbHksIGByZW1vdmVfbWFwcGluZ2AuIFRoZXNlIGFsbCBzaGFyZSB0aGUgc2FtZSBhdHRyaWJ1dGUuXG5cbkdpdmVuIHRoaXMgcGF0dGVybiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHdoZXRoZXIgdGhleSBzaG91bGQgb3Igc2hvdWxkbid0IGJlIHN0YXRpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkncmUgbm90LiBUaGV5IGFsbCBzZWVtIHRvIHJlbGF0ZSB0byB0aGUgc3dhcCBzdWJzeXN0ZW0gaW4gc29tZSB3YXkuIExldCdzIHNlZS4uLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYC4gTGV0J3MgY2hlY2sgdGhlIGNvZGUgZm9yIGl0IGluIGBtbS9zd2FwX3N0YXRlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM0NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDo0NS4zNTEyOTIxMzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Mzc1Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcF9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYz02MTU9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzd2FwX2Ryb3BiZWhpbmRfd3E7XFxubW0vc3dhcF9zdGF0ZS5jLTYxNi1cXG5tbS9zd2FwX3N0YXRlLmM6NjE3OnZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBfc3RhdGUuYy02MTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDo0NS40MDg2NzQyNjZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5MjI1MDAyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEtlcm5lbCBJbnRlcm5hbHMqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGZ1bmN0aW9uLiBJcyBpdCBhY3R1YWxseSBleHBvcnRlZD8gVGhhdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEtub3dpbmcgaWYgaXQncyBleHBvcnRlZCBkaWN0YXRlcyBzbyBtdWNoIGFib3V0IGhvdyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0LCBpZiBhdCBhbGwuIElzIGl0IGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgbW9kdWxlcyB0byBjYWxsLCBvciBpcyBpdCBpbnRlbmRlZCBzb2xlbHkgZm9yIGludGVybmFsIGtlcm5lbCB1c2U/IFRoYXQgZGV0YWlsIGltcGFjdHMgc28gbXVjaCBvZiBteSBhYmlsaXR5IHRvLCBmb3IgZXhhbXBsZSwgYnVpbGQgYSBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIG9yIGV4cGxvcmUgaG93IGZvbGlvIHdyaXRlYmFjayBiZWhhdmlvciB3b3Jrcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiBgZHJvcGJlaGluZGAgd2l0aCBgd3JpdGViYWNrYC4gSWYgaXQncyAqbm90KiBleHBvcnRlZCwgSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIGFsdGVybmF0aXZlcyBvciBjb25zaWRlciB3aGV0aGVyIGl0J3MgcG9zc2libGUgdG8gaW5kaXJlY3RseSBhY2hpZXZlIHRoZSBkZXNpcmVkIGJlaGF2aW9yIHRocm91Z2ggb3RoZXIsIG9mZmljaWFsbHkgc3VwcG9ydGVkIEFQSXMgYW5kIHN0cnVjdHVyZXMuIFRoZSBleHBvcnQgc3RhdHVzIGltbWVkaWF0ZWx5IHNpZ25hbHMgdGhlIGJvdW5kYXJpZXMgb2YgbXkgcG9zc2libGUgZXhwZXJpbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gZGV0ZXJtaW5lIGl0cyBleHBvcnQgc3RhdHVzIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTE6MTMuMzMxMTc3NDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTg4NTk1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTE6MTMuMzg2Mzc4NzE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODk0NTY4NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGU6IEEgUXVpY2sgRGlhZ25vc3RpYyoqXG5cbkhtbSwgdGhlIHNpdHVhdGlvbiBpc24ndCAqc3RhdGljKiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgYSBmaXJtIG5lZ2F0aXZlLCBidXQgdGhlIGNvbnRleHQgaW5kaWNhdGVzIGEgZHluYW1pYyBlbGVtZW50LiBUaGlzIG1lYW5zIHRoaW5ncyBhcmUgcG90ZW50aWFsbHkgY2hhbmdpbmcgb3IgbXV0YWJsZS4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGEgc3BlY2lmaWMgcGllY2Ugb2YgdGhlIHB1enpsZTogdGhlIGByZW1vdmVfbWFwcGluZ2AgZnVuY3Rpb24gb3IgbWV0aG9kLiBJdCBpcyBhIGxvZ2ljYWwgbmV4dCBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5vbi1zdGF0aWMgYmVoYXZpb3IgSSdtIG9ic2VydmluZyBhbmQgaXMgdGhlIGxvZ2ljYWwgbmV4dCBwaWVjZSB0byBleGFtaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjUxOjUwLjI4MDk1MDU3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzMTEwOTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnJlbW92ZV9tYXBwaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTE6NTAuMzU0MjcxOTQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDgwMTgzOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHpzd2FwX3N0b3JlYCoqXG5cbk5vLCB0aGF0J3Mgbm90IGl0LiBPa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIHRha2UgYSBsb29rIGF0IGB6c3dhcF9zdG9yZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByb290IGNhdXNlIGFuZCBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGUgcHJvYmxlbSBsaWVzIGVsc2V3aGVyZS4gSG93ZXZlciwgc2luY2UgSSB3YXMgdGhpbmtpbmcgaW4gdGhpcyBnZW5lcmFsIGFyZWEsIGNoZWNraW5nIGB6c3dhcF9zdG9yZWAgY291bGQgZ2l2ZSBtZSBhIGNsdWUgb2Ygd2h5IHRoZSByZXN1bHRzIHdlcmUgbmVnYXRpdmUgYW5kIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEl0J3MgYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBvYnZpb3VzIHRoZXJlIGJlZm9yZSBJIGRpdmUgaW50byBtb3JlIGNvbXBsZXggYXJlYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjgwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTI6NTEuNDM0NDYwMDI0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY3NDY0NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qenN3YXBfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1Mjo1MS40ODkxNDU0NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzExMTkyODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBTd2FwIFN1YnN5c3RlbSoqXG5cbk5vLiBKdXN04oCmIG5vLiBUaGF0IGZpcnN0IGxpbmUsIHRoYXQncyB3aGF0IEknbSB0aGlua2luZy4gVGhpcyBkb2Vzbid0IGZlZWwgcmlnaHQuXG5cbldhaXQsIGhvbGQgb24gYSBzZWNvbmQuIExldCBtZSBiYWNrIHVwIGFuZCB0aGluayB0aGlzIHRocm91Z2guIElzIGB6c3dhcF9zdG9yZWAgYWN0dWFsbHkgY2FsbGVkIGZyb20gc29tZXRoaW5nIGxpa2UgYGFkZF90b19zd2FwYCwgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIGluIHRoZSBzd2FwIHN1YnN5c3RlbT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbiByaWdodCBub3cuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MzowOC42MDEwNzc0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwNDcwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfaW8uYz0yNTE9aW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnN3YXBfcGx1ZylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0yODQtXFxubW0vcGFnZV9pby5jOjI4NTpcXHRpZiAoenN3YXBfc3RvcmUoZm9saW8pKSB7XFxubW0vcGFnZV9pby5jLTI4Ni1cXHRcXHRjb3VudF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLCBNVEhQX1NUQVRfWlNXUE9VVCk7XFxuLS1cXG5tbS96c3dhcC5jLTQ2LS8qIFRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xcbm1tL3pzd2FwLmM6NDc6YXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNDgtLyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXFxubW0venN3YXAuYzo0OTpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNTAtXFxuLS1cXG5tbS96c3dhcC5jPTc2NT1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc3NC1cXHRpZiAoZW50cnktXFx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXFxubW0venN3YXAuYzo3NzU6XFx0XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtNzc2LVxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmM6Nzc3OlxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTc3OC19XFxuLS1cXG5tbS96c3dhcC5jPTkyND1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTk4MS0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcXG5tbS96c3dhcC5jOjk4MjogKiB3cml0ZWJhY2sgcGF0aCB0aGF0IHdhcyBpbnRlcmNlcHRlZCB3aXRoIHRoZSB6c3dhcF9zdG9yZSgpXFxubW0venN3YXAuYy05ODMtICogaW4gdGhlIGZpcnN0IHBsYWNlLiAgQWZ0ZXIgdGhlIGZvbGlvIGhhcyBiZWVuIGRlY29tcHJlc3NlZCBpbnRvXFxuLS1cXG5tbS96c3dhcC5jPTExODk9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3pzd2FwLmMtMTIyMy1cXHRcXHRucl9iYWNraW5nID0genN3YXBfdG90YWxfcGFnZXMoKTtcXG5tbS96c3dhcC5jOjEyMjQ6XFx0XFx0bnJfc3RvcmVkID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTEyMjUtXFx0fVxcbi0tXFxubW0venN3YXAuYz0xMzA1PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xMzk0LVxcbm1tL3pzd2FwLmM6MTM5NTpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3pzd2FwLmMtMTM5Ni1cXHRcXHRcXHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL3pzd2FwLmMtMTQzMy1cXHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXFxubW0venN3YXAuYzoxNDM0OlxcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxcbm1tL3pzd2FwLmMtMTQzNS1cXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcXG4tLVxcbm1tL3pzd2FwLmMtMTQ0Mi1cXHR9XFxubW0venN3YXAuYzoxNDQzOlxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE0NDQtXFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbm1tL3pzd2FwLmM6MTQ0NTpcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNDQ2LVxcbi0tXFxubW0venN3YXAuYy0xNDc0LVxcbm1tL3pzd2FwLmM6MTQ3NTpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNDc2LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTUxOS1cXG5tbS96c3dhcC5jOjE1MjA6XFx0XFx0aWYgKCF6c3dhcF9zdG9yZV9wYWdlKHBhZ2UsIG9iamNnLCBwb29sKSlcXG5tbS96c3dhcC5jLTE1MjEtXFx0XFx0XFx0Z290byBwdXRfcG9vbDtcXG4tLVxcbm1tL3pzd2FwLmM9MTcwMD1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG5tbS96c3dhcC5jLTE3MDEte1xcbm1tL3pzd2FwLmM6MTcwMjpcXHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE3MDMtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS96c3dhcC5jPTE3MDc9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxubW0venN3YXAuYy0xNzA4LXtcXG5tbS96c3dhcC5jOjE3MDk6XFx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNzEwLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MzowOC42NTYxMzIxODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg5NTc4MzI0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGluIHRoZSBLZXJuZWwgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBmb2N1c2luZyBvbiBub24tc3RhdGljIGZ1bmN0aW9ucyBiZWNhdXNlIHRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBpbnRlcmFjdGluZyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cbkkndmUgYWxyZWFkeSBub3RlZCB0aGF0IGB6c3dhcF9zdG9yZWAgaXMgbm9uLXN0YXRpYyBhbmQgbGlua2VkIHRvIGBzd2FwX3dyaXRlb3V0YCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMaWtld2lzZSwgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGlzIG5vbi1zdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gVGhlbiwgdGhlcmUncyBgcmVtb3ZlX21hcHBpbmdgLCBub24tc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgcGFnZV9jYWNoZV9waXBlX2J1Zl90cnlfc3RlYWxgLCBgbWFwcGluZ19ldmljdF9mb2xpb2AsIGFuZCBgc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW9gLlxuXG5Ob3csIEknbSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIHRvIGV4YW1pbmUgdGhlc2UgZnVuY3Rpb25zIGNsb3NlbHkuIEkndmUgdGFrZW4gYSBsb29rIGF0IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpbiBgbW0vc3dhcF9zdGF0ZS5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBhIGZvbGlvIHRvIGEgbGlua2VkIGxpc3QgYW5kIHF1ZXVpbmcgYSB3b3JrIGl0ZW0uIFRoYXQncyBkZWZpbml0ZWx5IGludGVyZXN0aW5nOyBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5UaGVuLCBJJ20gY2hlY2tpbmcgYHJlbW92ZV9tYXBwaW5nYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaXMgYW5vdGhlciBjcml0aWNhbCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kLCBhcyBpdCdzIGRlYWxpbmcgd2l0aCBmcmVlaW5nIHVwIG1lbW9yeS4gSXQgdGFrZXMgYSBtYXBwaW5nLCBhIGZvbGlvLCBhIHJlY2xhaW1lZCBmbGFnLCBhbmQgYSB0YXJnZXQgbWVtY2cuXG5cbk5leHQsIEkndmUgbG9va2VkIGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGluIGBtbS9zd2FwX3N0YXRlLmNgLiBJdCBzZWVtcyBsaWtlIGEgY29yZSBmdW5jdGlvbiBmb3IgYWxsb2NhdGluZyBmb2xpbyBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgc3dhcCBjYWNoZS5cblxuSSd2ZSBhbHNvIHF1aWNrbHkgZGlzbWlzc2VkIGBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGJlY2F1c2UgdGhleSBhcmUgc3RhdGljIGFuZCBsZXNzIGxpa2VseSB0byBiZSB0aGUgcHJpbWFyeSBmb2N1cy5cblxuVGhlcmVmb3JlLCBteSBzaG9ydCBsaXN0IG9mIHRvcCBmb2N1cyBzeW1ib2xzIGFyZSBub3c6XG4tIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYFxuLSBgcmVtb3ZlX21hcHBpbmdgXG4tIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gXG5cbkZpbmFsbHksIEknbSBjaGVja2luZyB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBwb3NzaWJseSBsZXNzIG9idmlvdXMsIGNoYW5nZXMuIGBmb2xpb19lbmRfd3JpdGViYWNrYCBpcyBtb2RpZmllZCwgYnV0IEkga25vdyB0aGF0J3MgYSBoZWF2aWx5IHVzZWQgcGF0aCwgc28gSSBuZWVkIHRvIGJlIGNhdXRpb3VzIGFib3V0IHRoYXQgb25lLiBgcGFnZV9jYWNoZV9waXBlX2J1Zl90cnlfc3RlYWxgIGlzIHN0YXRpYy4gYG1hcHBpbmdfZXZpY3RfZm9saW9gIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBqdXN0IGNhbGxzIGByZW1vdmVfbWFwcGluZ2AsIHNvIGl0J3MgcHJvYmFibHkgbm90IHRoYXQgaW1wb3J0YW50LlxuXG5UbyBmaW5pc2gsIEknbGwgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbXBhY3QgdGhlIG1vZGlmaWVkIGZpbGVzLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfWlNXQVBgIGlzIG5lZWRlZCBmb3IgYG1tL3pzd2FwLmNgIGFuZCBgQ09ORklHX1NXQVBgIGZvciBgbW0vc3dhcF9zdGF0ZS5jYC4gSSB3aWxsIHRoZW4gZ28gb24gdG8gY2hlY2sgYG1tL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVudCBjb25maWcgb3B0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHZpZXcgb2Ygd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg3MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MzoyNy42MTM5Njc4MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTU2NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Nzg9b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcXHQrPSBkbWFwb29sLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTM6MjcuNjYyOTMwMTg0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mzk1NjM2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciB6c3dhcCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gbm90aW5nIGlzIHRoYXQgaWYgSSB3YW50IHRvIHVzZSBgenN3YXBgLCBJJ20gZ29pbmcgdG8gbmVlZCBib3RoIGBDT05GSUdfWlNXQVBgIGFuZCwgb2J2aW91c2x5LCB0aGUgYmFzaWMgYENPTkZJR19TV0FQYCBvcHRpb24gZW5hYmxlZCBpbiB0aGUga2VybmVsLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB0aGF0J3Mgd2hhdCBJJ2QgZXhwZWN0LiBOb3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYENPTkZJR19aU1dBUGAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVxdWlyZWQgcGllY2VzLiBEaWdnaW5nIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBhbHdheXMgdGhlIHJpZ2h0IGFwcHJvYWNoIGF0IHRoaXMgc3RhZ2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzg5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTM6MzEuNTAyNDk3MDQ1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQ5MDkxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MzozMS41NTU5OTE2NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY4NjM0ODUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgWlNXQVBgOlxuXG4qKkRlbHZpbmcgaW50byBaU1dBUCdzIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgWlNXQVBgIGluc2lkZSBhbmQgb3V0LCB3aGljaCBtZWFucyBhIGRlZXAgZGl2ZSBpbnRvIGl0cyBkZXBlbmRlbmNpZXMgaXMgdGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzLiBJJ20gdGhpbmtpbmcsIFwid2hhdCBleHRlcm5hbCBsaWJyYXJpZXMsIHNlcnZpY2VzLCBvciBrZXJuZWwgbW9kdWxlcyBpcyB0aGlzIHRoaW5nIGxlYW5pbmcgb24/XCIgQXJlIHdlIHRhbGtpbmcgY29yZSBsaWJyYXJpZXMsIHBvdGVudGlhbGx5IGFub3RoZXIgcHJvamVjdCBvZiBlcXVhbCBzdGF0dXJlIHdpdGhpbiB0aGUgc3lzdGVtLCBvciBqdXN0IHNvbWV0aGluZyBzbWFsbCB0byBoYW5kbGUgYSBzcGVjaWZpYyBwcm9jZXNzP1xuXG5Lbm93aW5nIHRoZSBhbnN3ZXIgdG8gdGhhdCB3aWxsIGRldGVybWluZSBzbyBtdWNoLiBEb2VzIGl0IHJlcXVpcmUgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWw/IERvZXMgaXQgcHVsbCBpbiBzb21ldGhpbmcgZnJvbSBhbm90aGVyIGxpYnJhcnkgdGhhdCBjb3VsZCBicmVhayBpdCB3aXRoIGFuIHVwZGF0ZT8gSXMgdGhlcmUgYSBoaWRkZW4gZGVwZW5kZW5jeSBvbiBhIHBpZWNlIG9mIHRoZSBpbmZyYXN0cnVjdHVyZT8gVGhvc2UgYXJlIHRoZSBjcnVjaWFsIHF1ZXN0aW9ucyBJJ20gYXNraW5nIG15c2VsZi4gR290dGEgaWRlbnRpZnkgYW55IHBvdGVudGlhbCB3ZWFrIHBvaW50cyBpbiB0aGUgYXJjaGl0ZWN0dXJhbCBmb3VuZGF0aW9uIG9mIGBaU1dBUGAgcmlnaHQgbm93IGFuZCBnZXQgdGhvc2UgcG90ZW50aWFsIGNvbmZsaWN0cyBzcXVhcmVkIGF3YXkuIFRoaXMgaXMgYWJvdXQgc29saWRpZnlpbmcgbXkgdW5kZXJzdGFuZGluZywgbWFwcGluZyBvdXQgcG90ZW50aWFsIHJpc2tzLCBhbmQgcHJlcGFyaW5nIHRvIHRyb3VibGVzaG9vdC4gTGV0J3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1Mzo0Mi4yNDIzNDM3ODJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1Mzo0Mi4yNDI1MDI0MjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwMzczNjY1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKlpTV0FQLCBTV0FQLCBhbmQgRGVmYXVsdCBBY3RpdmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIFpTV0FQIHRoaW5nLCBhbmQgaXQncyBjbGVhcjogaXQncyBidWlsdCBvbiB0aGUgZm91bmRhdGlvbiBvZiByZWd1bGFyIFNXQVAuIFRoYXQncyBhIGZ1bmRhbWVudGFsIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gV2UncmUgZ29pbmcgdG8gbmVlZCBib3RoLiBNeSBpbnN0aW5jdCwgYmFzZWQgb24gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBiZW5lZml0cywgaXMgdG8gZW5hYmxlICpib3RoKiBaU1dBUCBhbmQgdGhlIHVuZGVybHlpbmcgU1dBUCBmdW5jdGlvbmFsaXR5LiBTZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGFwcHJvYWNoIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBjb21wcmVzc2lvbi5cblxuQW5kIHRoYXQgbGVhZHMgbWUgdG8gYW5vdGhlciB0aG91Z2h0LCB0aGUgYFpTV0FQX0RFRkFVTFRfT05gIG9wdGlvbi4gSXQgbWlnaHQgYmUgcHJ1ZGVudCB0byBleHBsb3JlIHRoYXQgZnVydGhlci4gSWYgd2Ugd2FudCB0aGlzIHRvIGJlIHVzZWQgZWZmZWN0aXZlbHksIHdlIG5lZWQgdG8gZW5zdXJlIGl0J3MgYWN0dWFsbHkgKnJ1bm5pbmcqIGFuZCBiZWluZyBsZXZlcmFnZWQgd2l0aG91dCByZXF1aXJpbmcgbWFudWFsIGludGVydmVudGlvbiBmcm9tIHRoZSBlbmQtdXNlci4gRW5zdXJpbmcgaXQncyBvbiBieSBkZWZhdWx0IGNvdWxkIGJlIHRoZSBrZXkgdG8gd2lkZXNwcmVhZCBhZG9wdGlvbiBhbmQgbWF4aW1pemluZyB0aGUgYWR2YW50YWdlcyBvZiBaU1dBUC4gTmVlZHMgYSBsaXR0bGUgbW9yZSByZXNlYXJjaCwgYnV0IGl0J3MgY2VydGFpbmx5IHNvbWV0aGluZyB0byBzdHJvbmdseSBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjUzOjU0LjI3OTg3MjQ1OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxcbiAgNDM6XFx0XFx0ICBjb21tYW5kIGxpbmUgJ3pzd2FwLmVuYWJsZWQ9JyBvcHRpb24uXFxuICA0NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTM6NTQuMjc5OTg0MDI4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MjMzMzE3MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFpzd2FwIFdyaXRlYmFjayBEcm9wYmVoaW5kIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoaXMgbmV3IFwiZHJvcGJlaGluZFwiIG1lY2hhbmlzbSBmb3Igc3dhcCBjYWNoZSBmb2xpb3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgc3RpY2tpbmcgdGhlc2UgZm9saW9zIGJhY2sgb24gdGhlIExSVSBsaXN0LCB3aGljaCBjb3VsZCBjYXVzZSB1bm5lY2Vzc2FyeSB0aHJhc2hpbmcuIFRoaXMgc291bmRzIGxpa2UgYSBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGJ1dCBhbHNvIGEgZGVmaW5pdGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGVuYWJsaW5nIGBaU1dBUGAsIGBTV0FQYCwgYW5kIGBaU1dBUF9ERUZBVUxUX09OYCBhcmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uLlxuXG5GdW5jdGlvbmFsbHksIEkgc2VlIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwga2V5IGFyZWFzOiBgbW0vdm1zY2FuLmNgLCBgbW0vdHJ1bmNhdGUuY2AsIGBmcy9zcGxpY2UuY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYG1tL3pzd2FwLmNgLCBpbmRpY2F0aW5nIHRoaXMgaXMgbm90IGEgdHJpdmlhbCBjaGFuZ2UuXG5cbkkndmUgdGFrZW4gYSBsb29rIGF0IHNvbWUgb2YgdGhlIG1vZGlmaWVkIGFuZCBuZXcgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGByZW1vdmVfbWFwcGluZ2AgaW4gYG1tL3Ztc2Nhbi5jYCAoYW5kIGl0cyB1c2VzIGluIGBtbS90cnVuY2F0ZS5jYCwgYGZzL3NwbGljZS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgKSBpcyBkZWZpbml0ZWx5IG1vZGlmaWVkIGFzIHBhcnQgb2YgdGhpcyBjaGFuZ2UuIFRoZW4sIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBgbW0venN3YXAuY2AgaXMgYWxzbyBjaGFuZ2VkLiBBbmQgbGFzdGx5LCBhIGJyYW5kLW5ldyBmdW5jdGlvbiwgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCB3aGljaCBpcyBpbnRyb2R1Y2VkIGluIGBtbS9zd2FwX3N0YXRlLmNgIGJ1dCBjYWxsZWQgZnJvbSBgbW0vZmlsZW1hcC5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyBjZW50cmFsIHRvIHRoZSBjb3JlIFwiZHJvcGJlaGluZFwiIGZ1bmN0aW9uYWxpdHkuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIGNvcmUgTU0gYmVoYXZpb3IsIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIGFzIGZvY3VzIHN5bWJvbHMgdG8gdGFyZ2V0IHdpdGggdGhlIGZ1enplcjogYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgcmVtb3ZlX21hcHBpbmdgLCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEkndmUgY2hlY2tlZCBhbmQgdGhlc2UgZnVuY3Rpb25zLCB3aGlsZSBub3QgZXhwb3J0ZWQsIGFyZSBub24tc3RhdGljLCB3aGljaCBpcyBwZXJmZWN0IGZvciBmdXp6aW5nLlxuXG5UaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAzMCwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1NDoxMS41MTMzMDQ3N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NjE1NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9cIixcbiAgICBcInJlbW92ZV9tYXBwaW5nXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgJ2Ryb3BiZWhpbmQnIG1lY2hhbmlzbSBmb3Igc3dhcCBjYWNoZSBmb2xpb3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjayB0byBhdm9pZCBwdXR0aW5nIHRoZW0gb24gdGhlIExSVSBsaXN0LiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBsaWtlIGByZW1vdmVfbWFwcGluZ2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGFkZHMgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIHdoaWNoIHVzZXMgYSB3b3JrcXVldWUgdG8gZHJvcCBmb2xpb3MgZnJvbSB0aGUgc3dhcCBjYWNoZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1NIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gICAgXCJyZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhICdkcm9wYmVoaW5kJyBtZWNoYW5pc20gZm9yIHN3YXAgY2FjaGUgZm9saW9zIGR1cmluZyB6c3dhcCB3cml0ZWJhY2sgdG8gYXZvaWQgcHV0dGluZyB0aGVtIG9uIHRoZSBMUlUgbGlzdC4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGFuZCBhZGRzIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCB3aGljaCB1c2VzIGEgd29ya3F1ZXVlIHRvIGRyb3AgZm9saW9zIGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNTSBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1NDoxMS41OTk5MjY4ODlaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDAzMzc1NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTQ6MTEuNjAwNTMwMTM4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNDAyNzY2NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiwgd3JpdGViYWNrLCBhbmQgTFJVIG1hbmFnZW1lbnQgKGludHJvZHVjaW5nIGEgXFxcImRyb3BiZWhpbmRcXFwiIG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCB3b3JrcXVldWVzIGZvciBmcmVlaW5nIGZvbGlvcywgYW5kIG1vZGlmeWluZyBmdW5jdGlvbiBzaWduYXR1cmVzIGxpa2UgYHJlbW92ZV9tYXBwaW5nYCBhbmQgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5IGJ1ZmZlcnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBsaWZlY3ljbGUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIEtNRU1MRUFLLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdywgd2hpY2ggYXJlIHRoZSBzcGVjaWZpYyBjbGFzc2VzIG9mIGJ1Z3MgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODYyYzg0N2Q1NGYzY2NiOTZjYjQ3OTdlMzI3OWFkNDgzNmZiZWIxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE5OjQ5OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuY1xuaW5kZXggOWQ4ZjYzZTJmZDFhYi4uNzk0MjRiYmVlMWIwZiAxMDA2NDRcbi0tLSBhL2ZzL3NwbGljZS5jXG4rKysgYi9mcy9zcGxpY2UuY1xuQEAgLTkwLDcgKzkwLDcgQEAgc3RhdGljIGJvb2wgcGFnZV9jYWNoZV9waXBlX2J1Zl90cnlfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbiBcdFx0ICogSWYgd2Ugc3VjY2VlZGVkIGluIHJlbW92aW5nIHRoZSBtYXBwaW5nLCBzZXQgTFJVIGZsYWdcbiBcdFx0ICogYW5kIHJldHVybiBnb29kLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvKSkge1xuK1x0XHRpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xuIFx0XHRcdGJ1Zi1cdTAwM2VmbGFncyB8PSBQSVBFX0JVRl9GTEFHX0xSVTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDhmMGY2OGUyNDViYWEuLmJkYWZmYzBkMWVmMzEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0zNzMsNyArMzczLDggQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxuIFx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbi1sb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHQgICAgYm9vbCByZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG4gZXh0ZXJuIGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuQEAgLTQ2NSw2ICs0NjYsOCBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpO1xuICAqL1xuIGJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitcbiAvKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xuIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XG4gdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7XG5AQCAtNDc1LDYgKzQ3OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF9kZXZpY2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxuIH1cbiBcbiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIHtcbiBcdHJldHVybiBOVUxMO1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggZDcyMTk4NmQ1ZjQ2NS4uMTY0Nzk2MWM1YmEyMCAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMTY4Niw2ICsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcbiAgKi9cbiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRib29sIHN3YXBfZHJvcGJlaGluZDtcbitcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4gXHQvKlxuQEAgLTE2OTUsNyArMTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdCAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuXG4gXHQgKi9cbiBcdGZvbGlvX2dldChmb2xpbyk7XG4rXG4rXHQvKlxuK1x0ICogRHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvcyBhcmUgb2ZmLUxSVSwgc28gd2UgbXVzdCBwcmV2ZW50IGEgcmFjaW5nXG4rXHQgKiBzd2FwaW4gZnJvbSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQga2VlcGluZyBpdFxuK1x0ICogb2ZmLUxSVTogdGhlIHdyaXRlYmFjayBmbGFnIGFsbG93cyB0aGF0LiBBZnRlcndhcmRzIGEgc3dhcGluIG1heSB3aW5cbitcdCAqIHRoZSByYWNlLCBidXQgdGhlIGZvbGlvIGlzIGFscmVhZHkgcXVldWVkIGFuZCB0aGUgd29ya2VyIHB1dHMgaXQgYmFja1xuK1x0ICogb24gdGhlIExSVSBpbiB0aGF0IGNhc2UuXG4rXHQgKi9cbitcdHN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbyk7XG4rXG4gXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xuK1xuK1x0aWYgKHN3YXBfZHJvcGJlaGluZCkge1xuK1x0XHRzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA3N2QyZDE0ZWRhNDIxLi5mYzQ0ZGFhZTFkZTFmIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0zMDQsOSArMzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuK1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA5YzNhNWNmOTk3Nzg2Li5iOTNkZDYwN2QyNGM2IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZm9saW9fYmF0Y2guaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuQEAgLTQ4MywxMyArNDg1LDExIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcbiBcbi1cdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXG4tXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4gLyoqXG4tICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4rICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cbkBAIC01MDEsMTMgKzUwMSwxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxuICAqXG4rICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXJcbisgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWVcbisgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cbisgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLlxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXG4gICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4ge1xuIFx0aW50IG9yZGVyLCBlcnI7XG4gXHRzdHJ1Y3QgZm9saW8gKnJldDtcbkBAIC01MzUsNiArNTM5LDk4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxsaXN0X2hlYWQsIHN3YXBfZHJvcGJlaGluZF9sbGlzdCk7XG4rXG4rc3RhdGljIGJvb2wgc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXHRib29sIGRyb3BwZWQgPSBmYWxzZTtcbitcbitcdGZvbGlvX2xvY2soZm9saW8pO1xuK1xuK1x0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4rXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSlcbitcdFx0bWVtY2cgPSBOVUxMO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHQvKlxuK1x0ICogR2F0ZSByZW1vdmVfbWFwcGluZygpIG9uIGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKCk6IGEgcmFjaW5nIHN3YXBpbiBtYXlcbitcdCAqIGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZSBmb2xpbyBmcm9tXG4rXHQgKiB0aGUgY2FjaGUsIGFuZCByZW1vdmVfbWFwcGluZygpIG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW9cbitcdCAqIChpdCB3b3VsZCB0cmlwIF9fcmVtb3ZlX21hcHBpbmcoKSdzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS5cbitcdCAqL1xuK1x0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdCAgICByZW1vdmVfbWFwcGluZyhzd2FwX2FkZHJlc3Nfc3BhY2UoZm9saW8tXHUwMDNlc3dhcCksIGZvbGlvLCB0cnVlLCBtZW1jZykpIHtcbitcdFx0ZHJvcHBlZCA9IHRydWU7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBSYWNlZDogdGhlIGZvbGlvIGlzIG5vdyBvd25lZCBieSB0aGUgc3dhcGluOyBwdXQgaXQgYmFjay4gKi9cbitcdFx0Zm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7XG4rXHRcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuK1x0fVxuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK1xuK1x0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdGlmICghZHJvcHBlZClcbitcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdHJldHVybiBkcm9wcGVkO1xuK31cbitcbisvKipcbisgKiBzd2FwX2Ryb3BiZWhpbmRfZnJlZV9iYXRjaF9mb2xpbyAtIGZyZWUgYSBkcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW8gaW50byBhIGJhdGNoXG4rICogQGZvbGlvOiB0aGUgb2ZmLUxSVSBmb2xpbyB3aG9zZSB3cml0ZWJhY2sgaGFzIGNvbXBsZXRlZFxuKyAqIEBmYmF0Y2g6IGJhdGNoIG9mIGZvbGlvcyB0byBmcmVlLCBmbHVzaGVkIHdoZW4gZnVsbFxuKyAqL1xuK3N0YXRpYyB2b2lkIHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4re1xuK1x0aWYgKHN3YXBfZHJvcGJlaGluZF9kcm9wX2ZvbGlvKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSlcbitcdFx0Zm9saW9zX3B1dChmYmF0Y2gpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgZm9saW9fYmF0Y2ggZmJhdGNoO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKnBvcywgKm5leHQ7XG4rXHRpbnQgY3B1O1xuK1xuK1x0Zm9saW9fYmF0Y2hfaW5pdChcdTAwMjZmYmF0Y2gpO1xuK1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuK1x0XHRwb3MgPSBsbGlzdF9kZWxfYWxsKHBlcl9jcHVfcHRyKFx1MDAyNnN3YXBfZHJvcGJlaGluZF9sbGlzdCwgY3B1KSk7XG4rXHRcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBwb3MpIHtcbitcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKChzdHJ1Y3QgbGlzdF9oZWFkICopcG9zLFxuK1x0XHRcdFx0XHRcdFx0ICAgc3RydWN0IGZvbGlvLCBscnUpO1xuK1x0XHRcdHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvKGZvbGlvLCBcdTAwMjZmYmF0Y2gpO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoZmJhdGNoLm5yKVxuK1x0XHRmb2xpb3NfcHV0KFx1MDAyNmZiYXRjaCk7XG4rfVxuK1xuK3N0YXRpYyBERUNMQVJFX1dPUksoc3dhcF9kcm9wYmVoaW5kX3dvcmssIHN3YXBfZHJvcGJlaGluZF93b3JrZm4pO1xuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3dhcF9kcm9wYmVoaW5kX3dxO1xuK1xuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilcdTAwMjZmb2xpby1cdTAwM2VscnUsXG4rXHRcdCAgcmF3X2NwdV9wdHIoXHUwMDI2c3dhcF9kcm9wYmVoaW5kX2xsaXN0KSk7XG4rXHRxdWV1ZV93b3JrKHN3YXBfZHJvcGJlaGluZF93cSwgXHUwMDI2c3dhcF9kcm9wYmVoaW5kX3dvcmspO1xuK31cbitcbitzdGF0aWMgaW50IF9faW5pdCBzd2FwX2Ryb3BiZWhpbmRfaW5pdCh2b2lkKVxuK3tcbitcdHN3YXBfZHJvcGJlaGluZF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInN3YXBfZHJvcGJlaGluZFwiLFxuK1x0XHRcdFx0XHQgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLCAwKTtcbitcdGlmICghc3dhcF9kcm9wYmVoaW5kX3dxKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJldHVybiAwO1xuK31cbitjb3JlX2luaXRjYWxsKHN3YXBfZHJvcGJlaGluZF9pbml0KTtcbitcbiAvKlxuICAqIElmIHdlIGFyZSB0aGUgb25seSB1c2VyLCB0aGVuIHRyeSB0byBmcmVlIHVwIHRoZSBzd2FwIGNhY2hlLlxuICAqXG5AQCAtNjQzLDEyICs3MzksMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuK1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIHBsdWcpO1xuIFx0aWYgKHJlYWRhaGVhZCkge1xuIFx0XHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcbkBAIC02ODMsMTIgKzc4MCwxMyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuK1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbitcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmNcbmluZGV4IGI1OGJhOTQwYmU0NzQuLjM3ZjdkODI3OGMxY2QgMTAwNjQ0XG4tLS0gYS9tbS90cnVuY2F0ZS5jXG4rKysgYi9tbS90cnVuY2F0ZS5jXG5AQCAtMzM2LDcgKzMzNiw3IEBAIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmICghZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKGZvbGlvLCAwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8pO1xuK1x0cmV0dXJuIHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDU2NzA4ZDFkMmRmZDUuLmM0MDUxM2UwYjUwYjIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC03ODQsMTcgKzc4NCwyNCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICogcmVtb3ZlX21hcHBpbmcoKSAtIEF0dGVtcHQgdG8gcmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZy5cbiAgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gcmVtb3ZlLlxuKyAqIEByZWNsYWltZWQ6IFdoZXRoZXIgdGhlIGZvbGlvIGlzIGJlaW5nIHJlY2xhaW1lZCAocmVjb3JkIGEgc2hhZG93KS5cbisgKiBAdGFyZ2V0X21lbWNnOiBUaGUgbWVtY2cgdG8gY2hhcmdlIHRoZSBldmljdGlvbiBzaGFkb3cgdG8gd2hlbiBAcmVjbGFpbWVkO1xuKyAqICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIgbXVzdCBrZWVwIGl0IGFsaXZlIGFjcm9zcyB0aGUgY2FsbC4gSWdub3JlZCAobWF5XG4rICogICAgICAgICAgICAgICAgYmUgTlVMTCkgd2hlbiBAcmVjbGFpbWVkIGlzIGZhbHNlLlxuICAqXG4gICogSWYgdGhlIGZvbGlvIGlzIGRpcnR5LCB1bmRlciB3cml0ZWJhY2sgb3IgaWYgc29tZW9uZSBlbHNlIGhhcyBhIHJlZlxuLSAqIG9uIGl0LCByZW1vdmFsIHdpbGwgZmFpbC5cbisgKiBvbiBpdCwgcmVtb3ZhbCB3aWxsIGZhaWwuIFdoZW4gQHJlY2xhaW1lZCBpcyB0cnVlLCBhIHdvcmtpbmdzZXQgZXZpY3Rpb25cbisgKiBzaGFkb3cgaXMgc3RvcmVkIChsaWtlIHBhZ2UgcmVjbGFpbSBkb2VzKSBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmVcbisgKiBkZXRlY3RlZCBhbmQgdGhlIGZvbGlvIHJlLWFjdGl2YXRlZC5cbiAgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgcGFnZXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXBwaW5nLiAgMCBpZiB0aGUgZm9saW9cbiAgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC5cbiAgKiBDb250ZXh0OiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50IG9uIHRoZSBmb2xpbyBhbmRcbiAgKiBob2xkIGl0cyBsb2NrLlxuICAqL1xuLWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0ICAgIGJvb2wgcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxuIHtcbi1cdGlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCkpIHtcbitcdGlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCByZWNsYWltZWQsIHRhcmdldF9tZW1jZykpIHtcbiBcdFx0LypcbiBcdFx0ICogVW5mcmVlemluZyB0aGUgcmVmY291bnQgd2l0aCAxIGVmZmVjdGl2ZWx5XG4gXHRcdCAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2UuLmEzNTY3MWU4MzdmODkgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMTAwMCw4ICsxMDAwLDggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuLVx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4tXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4rXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuK1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDQ1LDggKzEwNDUsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0LyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqL1xuIFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXG4tXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cbi1cdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbitcdGZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcbiBcbiBcdC8qIHN0YXJ0IHdyaXRlYmFjayAqL1xuIFx0X19zd2FwX3dyaXRlcGFnZShmb2xpbywgTlVMTCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1NDoxMS42MDA1MzIxMThaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0MDI3Mjk5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIHByZXR0eSBjbGVhciB3aGVyZSBpdCdzIGZvY3VzaW5nOiB0aGUgc3dhcCBjYWNoZSwgd3JpdGViYWNrIG1lY2hhbmlzbXMsIGFuZCBMUlUgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgd2UncmUgc2VlaW5nIGNoYW5nZXMgbGlrZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgXCJkcm9wYmVoaW5kXCIgbWVjaGFuaXNtIGZvciBzd2FwIGNhY2hlIGZvbGlvcywgbW9kaWZpY2F0aW9ucyB0byBgcmVtb3ZlX21hcHBpbmdgLCBhIG5hbWUgY2hhbmdlIChgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgdG8gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApLCBhbmQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYSBjaGFuZ2UgdG8genN3YXAncyBmb2xpbyBzZXR0aW5nLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhbGwgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIEl0J3MgaGFuZGxpbmcgcGFnZSBsaWZlY3ljbGVzLCBMUlUgbGlzdCBtYWludGVuYW5jZSwgYW5kIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzd2FwIGNhY2hlLiBOb3RoaW5nIGhlcmUgaXMgdG91Y2hpbmcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHRoZW4gc2VudCB0byB1c2VyIHNwYWNlIG9yIGltcGxlbWVudGluZyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHdoaWNoLCBvYnZpb3VzbHksIEtNU0FOIGxvdmVzIHRvIGRpZyB1cC4gVGhlcmUgYXJlbid0IGFueSBjb21wbGV4IG5ldyBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBwYXNzZWQgdXAgdG8gdXNlciBzcGFjZSBlaXRoZXIuXG5cblRoZSBwb3RlbnRpYWwgaXNzdWVzIEkgY2FuIGVudmlzaW9uIGhlcmUgYXJlIGFsbCBwcmV0dHkgdGV4dGJvb2sgbWVtb3J5IG1hbmFnZW1lbnQgYnVnczogdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtYXliZSBtZW1vcnkgbGVha3MuIFRoaW5ncyBsaWtlIHRoaXMgYXJlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIEtBU0FOLCBLTUVNTEVBSywgYW5kIGdlbmVyYWxseSBnb29kIGtlcm5lbCB0ZXN0aW5nLiBUaGVzZSBhcmUgcHJldHR5IGNvbW1vbiBhbmQgd2VsbC11bmRlcnN0b29kIGNsYXNzZXMgb2YgZXJyb3JzLiBLTVNBTiByZWFsbHkgc2hpbmVzIHdoZW4geW91J3JlIGRlYWxpbmcgd2l0aCBpbml0aWFsaXphdGlvbiBpc3N1ZXMgYW5kIGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY29udHJvbCBmbG93IHRoYXQgY291bGQgYmUgY29ycnVwdGVkIGJ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0IGp1c3QgaXNuJ3QgaGVyZS5cblxuSSB3ZW50IHRocm91Z2ggdGhlIGNvZGUgYW5kIHNwZWNpZmljYWxseSBjaGVja2VkIGBmb2xpb19zZXRfZHJvcGJlaGluZGAgYW5kIGBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLCBidXQgdGhleSdyZSBqdXN0IG1hbmFnaW5nIHRoZSBmb2xpbydzIHBvc2l0aW9uIGluIHRoZSBzd2FwIGNhY2hlIGFuZCBMUlUsIGFuZCB0aGUgZm9saW8gYWxsb2NhdGlvbiBpdHNlbGYgaXMgc3RhbmRhcmQgcGFnZSBhbGxvY2F0aW9uLiBObyBwcm9ibGVtcyB0aGVyZS5cblxuVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiAqKk5lZWRzS01TQU4gaXMgZmFsc2UuKiogVGhpcyBwYXRjaCBpcyBzYWZlIGZyb20gdGhlIHBhcnRpY3VsYXIgdnVsbmVyYWJpbGl0aWVzIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgdG9vbHMgd2lsbCBiZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTAwLCJPdXRwdXRUb2tlbnMiOjIzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjU0OjIzLjAwMzI2NzI3MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzd2FwIGNhY2hlIGFsbG9jYXRpb24sIHdyaXRlYmFjaywgYW5kIExSVSBtYW5hZ2VtZW50IChpbnRyb2R1Y2luZyBhIFxcXCJkcm9wYmVoaW5kXFxcIiBtZWNoYW5pc20gZm9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsaWZlY3ljbGUgbWFuYWdlbWVudCwgd29ya3F1ZXVlcyBmb3IgZnJlZWluZyBmb2xpb3MsIGFuZCBtb2RpZnlpbmcgZnVuY3Rpb24gc2lnbmF0dXJlcyBsaWtlIGByZW1vdmVfbWFwcGluZ2AgYW5kIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC5cXG5cXG5UaGVzZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIG9mIG1lbW9yeSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZWN5Y2xlIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBLTUVNTEVBSywgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHdoaWNoIGFyZSB0aGUgc3BlY2lmaWMgY2xhc3NlcyBvZiBidWdzIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCB3cml0ZWJhY2ssIGFuZCBMUlUgbWFuYWdlbWVudCAoaW50cm9kdWNpbmcgYSBcXFwiZHJvcGJlaGluZFxcXCIgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZXMgZm9yIGZyZWVpbmcgZm9saW9zLCBhbmQgbW9kaWZ5aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBvZiBtZW1vcnkgYnVmZmVycy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGxpZmVjeWNsZSBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiwgS01FTUxFQUssIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LCB3aGljaCBhcmUgdGhlIHNwZWNpZmljIGNsYXNzZXMgb2YgYnVncyBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsvcg5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 19:11:16 +0000 UTC FinishedAt: 2026-08-18 19:54:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "3305d02e-abd4-4f3a-9bcc-bfbbcff02da9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_writeback_dropbehind_folio", "remove_mapping", "__swap_cache_alloc_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8mIzM0OywKICAgICYjMzQ7cmVtb3ZlX21hcHBpbmcmIzM0OywKICAgICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzd2FwIGNhY2hlIGFsbG9jYXRpb24sIHdyaXRlYmFjaywgYW5kIExSVSBtYW5hZ2VtZW50IChpbnRyb2R1Y2luZyBhIFwmIzM0O2Ryb3BiZWhpbmRcJiMzNDsgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZXMgZm9yIGZyZWVpbmcgZm9saW9zLCBhbmQgbW9kaWZ5aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5IGJ1ZmZlcnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBsaWZlY3ljbGUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIEtNRU1MRUFLLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdywgd2hpY2ggYXJlIHRoZSBzcGVjaWZpYyBjbGFzc2VzIG9mIGJ1Z3MgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSAmIzM5O2Ryb3BiZWhpbmQmIzM5OyBtZWNoYW5pc20gZm9yIHN3YXAgY2FjaGUgZm9saW9zIGR1cmluZyB6c3dhcCB3cml0ZWJhY2sgdG8gYXZvaWQgcHV0dGluZyB0aGVtIG9uIHRoZSBMUlUgbGlzdC4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGFuZCBhZGRzIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCB3aGljaCB1c2VzIGEgd29ya3F1ZXVlIHRvIGRyb3AgZm9saW9zIGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNTSBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODYyYzg0N2Q1NGYzY2NiOTZjYjQ3OTdlMzI3OWFkNDgzNmZiZWIxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE5OjQ5OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmNcbmluZGV4IDlkOGY2M2UyZmQxYWIuLjc5NDI0YmJlZTFiMGYgMTAwNjQ0XG4tLS0gYS9mcy9zcGxpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3BsaWNlLmNcbkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgYm9vbCBwYWdlX2NhY2hlX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHQgKiBJZiB3ZSBzdWNjZWVkZWQgaW4gcmVtb3ZpbmcgdGhlIG1hcHBpbmcsIHNldCBMUlUgZmxhZ1xuIFx0XHQgKiBhbmQgcmV0dXJuIGdvb2QuXG4gXHRcdCAqL1xuLVx0XHRpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8pKSB7XG4mIzQzO1x0XHRpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xuIFx0XHRcdGJ1Zi1cdTAwM2VmbGFncyB8PSBQSVBFX0JVRl9GTEFHX0xSVTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDhmMGY2OGUyNDViYWEuLmJkYWZmYzBkMWVmMzEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0zNzMsNyAmIzQzOzM3Myw4IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSxcbiBcdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7XG4tbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO2xvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHQgICAgYm9vbCByZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG4gZXh0ZXJuIGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuQEAgLTQ2NSw2ICYjNDM7NDY2LDggQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKTtcbiAgKi9cbiBib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiYjNDM7dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MztcbiAvKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xuIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XG4gdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7XG5AQCAtNDc1LDYgJiM0Mzs0NzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N3YXBfZGV2aWNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbiB9XG4gXG4gI2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge31cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCBkNzIxOTg2ZDVmNDY1Li4xNjQ3OTYxYzViYTIwIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjg2LDYgJiM0MzsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcbiAgKi9cbiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4mIzQzO1x0Ym9vbCBzd2FwX2Ryb3BiZWhpbmQ7XG4mIzQzO1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiBcbiBcdC8qXG5AQCAtMTY5NSw3ICYjNDM7MTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdCAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuXG4gXHQgKi9cbiBcdGZvbGlvX2dldChmb2xpbyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvcyBhcmUgb2ZmLUxSVSwgc28gd2UgbXVzdCBwcmV2ZW50IGEgcmFjaW5nXG4mIzQzO1x0ICogc3dhcGluIGZyb20gcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGtlZXBpbmcgaXRcbiYjNDM7XHQgKiBvZmYtTFJVOiB0aGUgd3JpdGViYWNrIGZsYWcgYWxsb3dzIHRoYXQuIEFmdGVyd2FyZHMgYSBzd2FwaW4gbWF5IHdpblxuJiM0MztcdCAqIHRoZSByYWNlLCBidXQgdGhlIGZvbGlvIGlzIGFscmVhZHkgcXVldWVkIGFuZCB0aGUgd29ya2VyIHB1dHMgaXQgYmFja1xuJiM0MztcdCAqIG9uIHRoZSBMUlUgaW4gdGhhdCBjYXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pO1xuJiM0MztcbiBcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmIChzd2FwX2Ryb3BiZWhpbmQpIHtcbiYjNDM7XHRcdHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTMwNCw5ICYjNDM7MzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA5YzNhNWNmOTk3Nzg2Li5iOTNkZDYwN2QyNGM2IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0xNiw2ICYjNDM7MTYsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZvbGlvX2JhdGNoLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuQEAgLTQ4MywxMyAmIzQzOzQ4NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuICAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4gICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcbiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVyb1xuQEAgLTUwMSwxMyAmIzQzOzUwMSwxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxuICAqXG4mIzQzOyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4mIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZVxuJiM0MzsgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cbiYjNDM7ICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTM1LDYgJiM0Mzs1MzksOTggQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxsaXN0X2hlYWQsIHN3YXBfZHJvcGJlaGluZF9sbGlzdCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBzd2FwX2Ryb3BiZWhpbmRfZHJvcF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcdGJvb2wgZHJvcHBlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb2xpb19sb2NrKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xuJiM0MztcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuJiM0MztcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKVxuJiM0MztcdFx0bWVtY2cgPSBOVUxMO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEdhdGUgcmVtb3ZlX21hcHBpbmcoKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZyBzd2FwaW4gbWF5XG4mIzQzO1x0ICogaGF2ZSBmcmVlZCB0aGUgc3dhcCBzbG90IChmb2xpb19mcmVlX3N3YXAoKSkgYW5kIGRyb3BwZWQgdGhlIGZvbGlvIGZyb21cbiYjNDM7XHQgKiB0aGUgY2FjaGUsIGFuZCByZW1vdmVfbWFwcGluZygpIG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW9cbiYjNDM7XHQgKiAoaXQgd291bGQgdHJpcCBfX3JlbW92ZV9tYXBwaW5nKCkmIzM5O3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHJlbW92ZV9tYXBwaW5nKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby1cdTAwM2Vzd2FwKSwgZm9saW8sIHRydWUsIG1lbWNnKSkge1xuJiM0MztcdFx0ZHJvcHBlZCA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqL1xuJiM0MztcdFx0Zm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7XG4mIzQzO1x0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjNDM7XHRpZiAoIWRyb3BwZWQpXG4mIzQzO1x0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdHJldHVybiBkcm9wcGVkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8gLSBmcmVlIGEgZHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvIGludG8gYSBiYXRjaFxuJiM0MzsgKiBAZm9saW86IHRoZSBvZmYtTFJVIGZvbGlvIHdob3NlIHdyaXRlYmFjayBoYXMgY29tcGxldGVkXG4mIzQzOyAqIEBmYmF0Y2g6IGJhdGNoIG9mIGZvbGlvcyB0byBmcmVlLCBmbHVzaGVkIHdoZW4gZnVsbFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW8oZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxuJiM0MztcdFx0Zm9saW9zX3B1dChmYmF0Y2gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmb2xpb19iYXRjaCBmYmF0Y2g7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKnBvcywgKm5leHQ7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0Zm9saW9fYmF0Y2hfaW5pdChcdTAwMjZmYmF0Y2gpO1xuJiM0MztcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiYjNDM7XHRcdHBvcyA9IGxsaXN0X2RlbF9hbGwocGVyX2NwdV9wdHIoXHUwMDI2c3dhcF9kcm9wYmVoaW5kX2xsaXN0LCBjcHUpKTtcbiYjNDM7XHRcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBwb3MpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKXBvcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8sIGxydSk7XG4mIzQzO1x0XHRcdHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvKGZvbGlvLCBcdTAwMjZmYmF0Y2gpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZmJhdGNoLm5yKVxuJiM0MztcdFx0Zm9saW9zX3B1dChcdTAwMjZmYmF0Y2gpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVDTEFSRV9XT1JLKHN3YXBfZHJvcGJlaGluZF93b3JrLCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKTtcbiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzd2FwX2Ryb3BiZWhpbmRfd3E7XG4mIzQzO1xuJiM0Mzt2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilcdTAwMjZmb2xpby1cdTAwM2VscnUsXG4mIzQzO1x0XHQgIHJhd19jcHVfcHRyKFx1MDAyNnN3YXBfZHJvcGJlaGluZF9sbGlzdCkpO1xuJiM0MztcdHF1ZXVlX3dvcmsoc3dhcF9kcm9wYmVoaW5kX3dxLCBcdTAwMjZzd2FwX2Ryb3BiZWhpbmRfd29yayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHN3YXBfZHJvcGJlaGluZF9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzd2FwX2Ryb3BiZWhpbmRfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7c3dhcF9kcm9wYmVoaW5kXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSwgMCk7XG4mIzQzO1x0aWYgKCFzd2FwX2Ryb3BiZWhpbmRfd3EpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0Mztjb3JlX2luaXRjYWxsKHN3YXBfZHJvcGJlaGluZF9pbml0KTtcbiYjNDM7XG4gLypcbiAgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgdXNlciwgdGhlbiB0cnkgdG8gZnJlZSB1cCB0aGUgc3dhcCBjYWNoZS5cbiAgKlxuQEAgLTY0MywxMiAmIzQzOzczOSwxMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTtcbiBcdGlmIChyZWFkYWhlYWQpIHtcbiBcdFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XG5AQCAtNjgzLDEyICYjNDM7NzgwLDEzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbiYjNDM7XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgTlVMTCk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jXG5pbmRleCBiNThiYTk0MGJlNDc0Li4zN2Y3ZDgyNzhjMWNkIDEwMDY0NFxuLS0tIGEvbW0vdHJ1bmNhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdHJ1bmNhdGUuY1xuQEAgLTMzNiw3ICYjNDM7MzM2LDcgQEAgbG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIDApKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbyk7XG4mIzQzO1x0cmV0dXJuIHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDU2NzA4ZDFkMmRmZDUuLmM0MDUxM2UwYjUwYjIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC03ODQsMTcgJiM0Mzs3ODQsMjQgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuXG4gICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLlxuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHJlbW92ZS5cbiYjNDM7ICogQHJlY2xhaW1lZDogV2hldGhlciB0aGUgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIChyZWNvcmQgYSBzaGFkb3cpLlxuJiM0MzsgKiBAdGFyZ2V0X21lbWNnOiBUaGUgbWVtY2cgdG8gY2hhcmdlIHRoZSBldmljdGlvbiBzaGFkb3cgdG8gd2hlbiBAcmVjbGFpbWVkO1xuJiM0MzsgKiAgICAgICAgICAgICAgICB0aGUgY2FsbGVyIG11c3Qga2VlcCBpdCBhbGl2ZSBhY3Jvc3MgdGhlIGNhbGwuIElnbm9yZWQgKG1heVxuJiM0MzsgKiAgICAgICAgICAgICAgICBiZSBOVUxMKSB3aGVuIEByZWNsYWltZWQgaXMgZmFsc2UuXG4gICpcbiAgKiBJZiB0aGUgZm9saW8gaXMgZGlydHksIHVuZGVyIHdyaXRlYmFjayBvciBpZiBzb21lb25lIGVsc2UgaGFzIGEgcmVmXG4tICogb24gaXQsIHJlbW92YWwgd2lsbCBmYWlsLlxuJiM0MzsgKiBvbiBpdCwgcmVtb3ZhbCB3aWxsIGZhaWwuIFdoZW4gQHJlY2xhaW1lZCBpcyB0cnVlLCBhIHdvcmtpbmdzZXQgZXZpY3Rpb25cbiYjNDM7ICogc2hhZG93IGlzIHN0b3JlZCAobGlrZSBwYWdlIHJlY2xhaW0gZG9lcykgc28gdGhhdCBhIGxhdGVyIHJlZmF1bHQgY2FuIGJlXG4mIzQzOyAqIGRldGVjdGVkIGFuZCB0aGUgZm9saW8gcmUtYWN0aXZhdGVkLlxuICAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpb1xuICAqIGNvdWxkIG5vdCBiZSByZW1vdmVkLlxuICAqIENvbnRleHQ6IFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgYSBzaW5nbGUgcmVmY291bnQgb24gdGhlIGZvbGlvIGFuZFxuICAqIGhvbGQgaXRzIGxvY2suXG4gICovXG4tbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7bG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdCAgICBib29sIHJlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbiB7XG4tXHRpZiAoX19yZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpKSB7XG4mIzQzO1x0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHlcbiBcdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggNzYxY2Q2OTllMGEzZS4uYTM1NjcxZTgzN2Y4OSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC0xMDAwLDggJiM0MzsxMDAwLDggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuLVx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4tXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4mIzQzO1x0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbiYjNDM7XHRcdFx0XHRcdCBOT19JTlRFUkxFQVZFX0lOREVYKTtcbiBcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHQvKlxuQEAgLTEwNDUsOCAmIzQzOzEwNDUsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0LyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqL1xuIFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXG4tXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cbi1cdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbiYjNDM7XHRmb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG4gXG4gXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbiBcdF9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvJiMzNDssCiAgICAmIzM0O3JlbW92ZV9tYXBwaW5nJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgJiMzOTtkcm9wYmVoaW5kJiMzOTsgbWVjaGFuaXNtIGZvciBzd2FwIGNhY2hlIGZvbGlvcyBkdXJpbmcgenN3YXAgd3JpdGViYWNrIHRvIGF2b2lkIHB1dHRpbmcgdGhlbSBvbiB0aGUgTFJVIGxpc3QuIEl0IG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGxpa2UgYHJlbW92ZV9tYXBwaW5nYCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgLCBhbmQgYWRkcyBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2Agd2hpY2ggdXNlcyBhIHdvcmtxdWV1ZSB0byBkcm9wIGZvbGlvcyBmcm9tIHRoZSBzd2FwIGNhY2hlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgTU0gc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2MmM4NDdkNTRmM2NjYjk2Y2I0Nzk3ZTMyNzlhZDQ4MzZmYmViMTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxOTo0OTo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmMKaW5kZXggOWQ4ZjYzZTJmZDFhYi4uNzk0MjRiYmVlMWIwZiAxMDA2NDQKLS0tIGEvZnMvc3BsaWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3BsaWNlLmMKQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIHN0YXRpYyBib29sIHBhZ2VfY2FjaGVfcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiAJCSAqIElmIHdlIHN1Y2NlZWRlZCBpbiByZW1vdmluZyB0aGUgbWFwcGluZywgc2V0IExSVSBmbGFnCiAJCSAqIGFuZCByZXR1cm4gZ29vZC4KIAkJICovCi0JCWlmIChyZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbykpIHsKJiM0MzsJCWlmIChyZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpKSB7CiAJCQlidWYtJmd0O2ZsYWdzIHw9IFBJUEVfQlVGX0ZMQUdfTFJVOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggOGYwZjY4ZTI0NWJhYS4uYmRhZmZjMGQxZWYzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTM3Myw3ICYjNDM7MzczLDggQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAogCQkJCQkJdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKLWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2xvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkgICAgYm9vbCByZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTlVNQSkKIGV4dGVybiBpbnQgcmVjbGFpbV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKQEAgLTQ2NSw2ICYjNDM7NDY2LDggQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKTsKICAqLwogYm9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7CiAKJiM0Mzt2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7CiAvKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqLwogc3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTsKIHZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpOwpAQCAtNDc1LDYgJiM0Mzs0NzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3N3YXBfZGV2aWNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSkKIH0KIAogI2Vsc2UgLyogQ09ORklHX1NXQVAgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KQogewogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IGQ3MjE5ODZkNWY0NjUuLjE2NDc5NjFjNWJhMjAgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTE2ODYsNiAmIzQzOzE2ODYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpOwogICovCiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbykKIHsKJiM0MzsJYm9vbCBzd2FwX2Ryb3BiZWhpbmQ7CiYjNDM7CiAJVk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTsKIAogCS8qCkBAIC0xNjk1LDcgJiM0MzsxNjk3LDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCSAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuCiAJICovCiAJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvcyBhcmUgb2ZmLUxSVSwgc28gd2UgbXVzdCBwcmV2ZW50IGEgcmFjaW5nCiYjNDM7CSAqIHN3YXBpbiBmcm9tIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBrZWVwaW5nIGl0CiYjNDM7CSAqIG9mZi1MUlU6IHRoZSB3cml0ZWJhY2sgZmxhZyBhbGxvd3MgdGhhdC4gQWZ0ZXJ3YXJkcyBhIHN3YXBpbiBtYXkgd2luCiYjNDM7CSAqIHRoZSByYWNlLCBidXQgdGhlIGZvbGlvIGlzIGFscmVhZHkgcXVldWVkIGFuZCB0aGUgd29ya2VyIHB1dHMgaXQgYmFjawomIzQzOwkgKiBvbiB0aGUgTFJVIGluIHRoYXQgY2FzZS4KJiM0MzsJICovCiYjNDM7CXN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSAmYW1wOyZhbXA7CiYjNDM7CQkJICBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwogCWZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChzd2FwX2Ryb3BiZWhpbmQpIHsKJiM0MzsJCXN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJZm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pOwogCWZvbGlvX3B1dChmb2xpbyk7CiB9CmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggNzdkMmQxNGVkYTQyMS4uZmM0NGRhYWUxZGUxZiAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzA0LDkgJiM0MzszMDQsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwogLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqLwogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDljM2E1Y2Y5OTc3ODYuLmI5M2RkNjA3ZDI0YzYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTE2LDYgJiM0MzsxNiw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mb2xpb19iYXRjaC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9iYWNraW5nLWRldi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Jsa2Rldi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21pZ3JhdGUuaCZndDsKQEAgLTQ4MywxMyAmIzQzOzQ4NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAlub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7CiAJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTsKIAotCS8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovCi0JZm9saW9fYWRkX2xydShmb2xpbyk7CiAJcmV0dXJuIGZvbGlvOwogfQogCiAvKioKLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgomIzQzOyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuCiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdAogICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvCkBAIC01MDEsMTMgJiM0Mzs1MDEsMTcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5CiAgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuCiAgKgomIzQzOyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyCiYjNDM7ICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlCiYjNDM7ICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuCiYjNDM7ICoKICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLgogICogUmV0dXJuOiBSZXR1cm5zIHRoZSBmb2xpbyBpZiBhbGxvY2F0aW9uIHN1Y2NlZWRlZCBhbmQgZm9saW8gaXMgaW4gdGhlIHN3YXAKICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuCiAgKi8KLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCi0JCQkJICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCkKJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCiYjNDM7CQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCkKIHsKIAlpbnQgb3JkZXIsIGVycjsKIAlzdHJ1Y3QgZm9saW8gKnJldDsKQEAgLTUzNSw2ICYjNDM7NTM5LDk4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGxpc3RfaGVhZCwgc3dhcF9kcm9wYmVoaW5kX2xsaXN0KTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBzd2FwX2Ryb3BiZWhpbmRfZHJvcF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwlib29sIGRyb3BwZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJZm9saW9fbG9jayhmb2xpbyk7CiYjNDM7CiYjNDM7CS8qIFRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkIG9mZiB0aGUgTFJVIGFuZCBub3RoaW5nIHJlLWFkZHMgaXQgaGVyZS4gKi8KJiM0MzsJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSkKJiM0MzsJCW1lbWNnID0gTlVMTDsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEdhdGUgcmVtb3ZlX21hcHBpbmcoKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZyBzd2FwaW4gbWF5CiYjNDM7CSAqIGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZSBmb2xpbyBmcm9tCiYjNDM7CSAqIHRoZSBjYWNoZSwgYW5kIHJlbW92ZV9tYXBwaW5nKCkgbXVzdCBub3QgcnVuIG9uIGEgbm9uLXN3YXBjYWNoZSBmb2xpbwomIzQzOwkgKiAoaXQgd291bGQgdHJpcCBfX3JlbW92ZV9tYXBwaW5nKCkmIzM5O3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgJmFtcDsmYW1wOwomIzQzOwkgICAgcmVtb3ZlX21hcHBpbmcoc3dhcF9hZGRyZXNzX3NwYWNlKGZvbGlvLSZndDtzd2FwKSwgZm9saW8sIHRydWUsIG1lbWNnKSkgewomIzQzOwkJZHJvcHBlZCA9IHRydWU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBSYWNlZDogdGhlIGZvbGlvIGlzIG5vdyBvd25lZCBieSB0aGUgc3dhcGluOyBwdXQgaXQgYmFjay4gKi8KJiM0MzsJCWZvbGlvX2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwkJZm9saW9fYWRkX2xydShmb2xpbyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzOwomIzQzOwlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwlpZiAoIWRyb3BwZWQpCiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwlyZXR1cm4gZHJvcHBlZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8gLSBmcmVlIGEgZHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvIGludG8gYSBiYXRjaAomIzQzOyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWQKJiM0MzsgKiBAZmJhdGNoOiBiYXRjaCBvZiBmb2xpb3MgdG8gZnJlZSwgZmx1c2hlZCB3aGVuIGZ1bGwKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfZnJlZV9iYXRjaF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCkKJiM0Mzt7CiYjNDM7CWlmIChzd2FwX2Ryb3BiZWhpbmRfZHJvcF9mb2xpbyhmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKQomIzQzOwkJZm9saW9zX3B1dChmYmF0Y2gpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmb2xpb19iYXRjaCBmYmF0Y2g7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpwb3MsICpuZXh0OwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlmb2xpb19iYXRjaF9pbml0KCZhbXA7ZmJhdGNoKTsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJcG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cigmYW1wO3N3YXBfZHJvcGJlaGluZF9sbGlzdCwgY3B1KSk7CiYjNDM7CQlsbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgcG9zKSB7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKXBvcywKJiM0MzsJCQkJCQkJICAgc3RydWN0IGZvbGlvLCBscnUpOwomIzQzOwkJCXN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvKGZvbGlvLCAmYW1wO2ZiYXRjaCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGZiYXRjaC5ucikKJiM0MzsJCWZvbGlvc19wdXQoJmFtcDtmYmF0Y2gpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgREVDTEFSRV9XT1JLKHN3YXBfZHJvcGJlaGluZF93b3JrLCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKTsKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN3YXBfZHJvcGJlaGluZF93cTsKJiM0MzsKJiM0Mzt2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKikmYW1wO2ZvbGlvLSZndDtscnUsCiYjNDM7CQkgIHJhd19jcHVfcHRyKCZhbXA7c3dhcF9kcm9wYmVoaW5kX2xsaXN0KSk7CiYjNDM7CXF1ZXVlX3dvcmsoc3dhcF9kcm9wYmVoaW5kX3dxLCAmYW1wO3N3YXBfZHJvcGJlaGluZF93b3JrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgc3dhcF9kcm9wYmVoaW5kX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN3YXBfZHJvcGJlaGluZF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O3N3YXBfZHJvcGJlaGluZCYjMzQ7LAomIzQzOwkJCQkJICAgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSwgMCk7CiYjNDM7CWlmICghc3dhcF9kcm9wYmVoaW5kX3dxKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0Mztjb3JlX2luaXRjYWxsKHN3YXBfZHJvcGJlaGluZF9pbml0KTsKJiM0MzsKIC8qCiAgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgdXNlciwgdGhlbiB0cnkgdG8gZnJlZSB1cCB0aGUgc3dhcCBjYWNoZS4KICAqCkBAIC02NDMsMTIgJiM0Mzs3MzksMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsCiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7CiYjNDM7CQlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7CiAJfSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7CiAKIAlpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oZm9saW8sIHBsdWcpOwogCWlmIChyZWFkYWhlYWQpIHsKIAkJZm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7CkBAIC02ODMsMTIgJiM0Mzs3ODAsMTMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycywKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwomIzQzOwkJZm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7CiAJfSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7CiAKIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIGZvbGlvOwogCiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXN3YXBfcmVhZF9mb2xpbyhmb2xpbywgTlVMTCk7CiAJcmV0dXJuIGZvbGlvOwogfQpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggYjU4YmE5NDBiZTQ3NC4uMzdmN2Q4Mjc4YzFjZCAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS90cnVuY2F0ZS5jCkBAIC0zMzYsNyAmIzQzOzMzNiw3IEBAIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoIWZpbGVtYXBfcmVsZWFzZV9mb2xpbyhmb2xpbywgMCkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvKTsKJiM0MzsJcmV0dXJuIHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA1NjcwOGQxZDJkZmQ1Li5jNDA1MTNlMGI1MGIyIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNzg0LDE3ICYjNDM7Nzg0LDI0IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuCiAgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuCiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byByZW1vdmUuCiYjNDM7ICogQHJlY2xhaW1lZDogV2hldGhlciB0aGUgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIChyZWNvcmQgYSBzaGFkb3cpLgomIzQzOyAqIEB0YXJnZXRfbWVtY2c6IFRoZSBtZW1jZyB0byBjaGFyZ2UgdGhlIGV2aWN0aW9uIHNoYWRvdyB0byB3aGVuIEByZWNsYWltZWQ7CiYjNDM7ICogICAgICAgICAgICAgICAgdGhlIGNhbGxlciBtdXN0IGtlZXAgaXQgYWxpdmUgYWNyb3NzIHRoZSBjYWxsLiBJZ25vcmVkIChtYXkKJiM0MzsgKiAgICAgICAgICAgICAgICBiZSBOVUxMKSB3aGVuIEByZWNsYWltZWQgaXMgZmFsc2UuCiAgKgogICogSWYgdGhlIGZvbGlvIGlzIGRpcnR5LCB1bmRlciB3cml0ZWJhY2sgb3IgaWYgc29tZW9uZSBlbHNlIGhhcyBhIHJlZgotICogb24gaXQsIHJlbW92YWwgd2lsbCBmYWlsLgomIzQzOyAqIG9uIGl0LCByZW1vdmFsIHdpbGwgZmFpbC4gV2hlbiBAcmVjbGFpbWVkIGlzIHRydWUsIGEgd29ya2luZ3NldCBldmljdGlvbgomIzQzOyAqIHNoYWRvdyBpcyBzdG9yZWQgKGxpa2UgcGFnZSByZWNsYWltIGRvZXMpIHNvIHRoYXQgYSBsYXRlciByZWZhdWx0IGNhbiBiZQomIzQzOyAqIGRldGVjdGVkIGFuZCB0aGUgZm9saW8gcmUtYWN0aXZhdGVkLgogICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHJlbW92ZWQgZnJvbSB0aGUgbWFwcGluZy4gIDAgaWYgdGhlIGZvbGlvCiAgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC4KICAqIENvbnRleHQ6IFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgYSBzaW5nbGUgcmVmY291bnQgb24gdGhlIGZvbGlvIGFuZAogICogaG9sZCBpdHMgbG9jay4KICAqLwotbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mztsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJICAgIGJvb2wgcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKQogewotCWlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCkpIHsKJiM0MzsJaWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkgewogCQkvKgogCQkgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHkKIAkJICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXIKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDc2MWNkNjk5ZTBhM2UuLmEzNTY3MWU4MzdmODkgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMTAwMCw4ICYjNDM7MTAwMCw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCXJldHVybiAtRUVYSVNUOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKLQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKLQkJCQkgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiYjNDM7CWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCiYjNDM7CQkJCQkgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiAJcHV0X3N3YXBfZGV2aWNlKHNpKTsKIAogCS8qCkBAIC0xMDQ1LDggJiM0MzsxMDQ1LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovCiAJZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7CiAKLQkvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi8KLQlmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7CiYjNDM7CWZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTsKIAogCS8qIHN0YXJ0IHdyaXRlYmFjayAqLwogCV9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTAzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgbWVzc2luZyB3aXRoIGhvdyBzd2FwIGNhY2hlIGZvbGlvcyBhcmUgaGFuZGxlZCwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHpzd2FwIHdyaXRlYmFjay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgbmVlZHMgY2FyZWZ1bCBhdHRlbnRpb24uIFRoZSBwYXRjaCB0b3VjaGVzIGNyaXRpY2FsIGJpdHMgb2YgdGhlIGtlcm5lbDogYGZzL3NwbGljZS5jYCwgYGluY2x1ZGUvbGludXgvc3dhcC5oYCwgYG1tL2ZpbGVtYXAuY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3RydW5jYXRlLmNgLCBgbW0vdm1zY2FuLmNgLCBhbmQsIGNydWNpYWxseSwgYG1tL3pzd2FwLmNgLiBUaGlzIGlzbiYjMzk7dCBzb21lIG1pbm9yIHR3ZWFrOyBpdCYjMzk7cyByaWdodCBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYSAmIzM0O2Ryb3BiZWhpbmQmIzM0OyBtZWNoYW5pc20gaXMgYmVpbmcgaW50cm9kdWNlZCBmb3IgenN3YXAgd3JpdGViYWNrLiBUaGlzIGludm9sdmVzIGEgbmV3IGZ1bmN0aW9uLCBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AsIHdoaWNoIHdpbGwgdXNlIGEgd29ya3F1ZXVlLCBgc3dhcF9kcm9wYmVoaW5kX3dxYCwgdG8gcHJvY2VzcyBmb2xpb3MgdGhhdCBoYXZlIGJlZW4gd3JpdHRlbiBiYWNrIGZyb20genN3YXAgYW5kIHNob3VsZCBiZSBpbW1lZGlhdGVseSBkcm9wcGVkIGZyb20gdGhlIHN3YXAgY2FjaGUsIHJhdGhlciB0aGFuIGJlaW5nIHB1dCBiYWNrIG9uIHRoZSBMUlUgbGlzdC4gU21hcnQuIEl0IGFsc28gYWx0ZXJzIGByZW1vdmVfbWFwcGluZ2AgdG8gYWNjZXB0IGByZWNsYWltZWRgIGFuZCBgdGFyZ2V0X21lbWNnYCBhcmd1bWVudHMsIGFuZCBtb2RpZmllcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgIHRvIHVzZSB0aGUgbmV3ICYjMzQ7ZHJvcGJlaGluZCYjMzQ7IGxvZ2ljLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHNpZ25pZmljYW50IG9uZS4gTXkgZmlyc3QgYWN0aW9uPyBUaGlzIG5lZWRzIGZ1enppbmcuIEFuZCBwcm9iYWJseSBzb21lIGhlYXZ5LWR1dHkgdGVzdGluZyBvbiBhIHZhcmlldHkgb2Ygd29ya2xvYWRzLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGtleSBzeW1ib2xzOiBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AsIGBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCwgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGByZW1vdmVfbWFwcGluZ2AsIGFuZCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZXNlIGludGltYXRlbHkuCgpDb25maWctd2lzZSwgaXQmIzM5O3MgY2xlYXIgdGhhdCBgQ09ORklHX1pTV0FQYCBhbmQgYENPTkZJR19TV0FQYCBhcmUgcmVxdWlyZWQuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgaWYgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgc3RhdGljIG9yIG5vdCBiZWNhdXNlIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRob3NlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiB1c2luZyBgZ3JlcHBlcmAuLi4gQWgsIHllcywgaXQmIzM5O3Mgc3RhdGljIHdpdGhpbiBgbW0venN3YXAuY2AuIFRoaXMgbWVhbnMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhhdCBmaWxlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgbm93IHRoYXQgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGlzICpub3QqIHN0YXRpYywgc28gaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBmaWxlLgoKSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGNoZWNrIHdoZXJlIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIGNhbGxlZCBmcm9tLiBJIHdhbnQgdG8gc2VlIGlmIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggY291bGQgYmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGNoYW5nZSBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk4Ni0gKi9cbm1tL3pzd2FwLmM6OTg3OnN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG5tbS96c3dhcC5jLTk4OC1cdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbi0tXG5tbS96c3dhcC5jPTEwODc9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExMTAtXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXG5tbS96c3dhcC5jOjExMTE6XHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXG5tbS96c3dhcC5jLTExMTItXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSYjMzk7c1xuLS1cbm1tL3pzd2FwLmMtMTE0NS1cbm1tL3pzd2FwLmM6MTE0NjpcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcbm1tL3pzd2FwLmMtMTE0Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTU1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2xsZXIgQ2FsbGJhY2sqKgoKUmlnaHQsIHNvIGBzaHJpbmtfbWVtY2dfY2JgIGlzIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB6c3dhcCBsYXllci4gVGhlIGZpcnN0IGNsdWUgaXMgdGhhdCBgc2hyaW5rX21lbWNnX2NiYCBjYWxscyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEl0IHN1Z2dlc3RzIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBzb21laG93IGludm9sdmVkIGluIHRyaWdnZXJpbmcgb3IgbWFuYWdpbmcgdGhlIHdyaXRpbmcgYmFjayBvZiBwYWdlcyB0byB6c3dhcC4gTWFrZXMgc2Vuc2U7IGBzaHJpbmtgIGltcGxpZXMgd2UmIzM5O3JlIHRyeWluZyB0byBmcmVlIHVwIG1lbW9yeS4KClRoZSBmYWN0IHRoYXQgYHNocmlua19tZW1jZ19jYmAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AgaXMgYWxzbyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhhdCBsaW1pdHMgaXRzIHNjb3BlIHRvIHRoZSBjb21waWxhdGlvbiB1bml0IGl0JiMzOTtzIGRlZmluZWQgaW4uIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGlzLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiB3aGF0IGV4YWN0bHkgaXMgY2FsbGluZyB0aGlzIGBzaHJpbmtfbWVtY2dfY2JgIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBhbmQgY29udGV4dCBvZiB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBUaGlzIHdvdWxkIGxpa2VseSBiZSBmb3VuZCBpbiB0aGUgY29yZSBtZW1vcnkgY29udHJvbGxlciBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19tZW1jZ19jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwODYtICovXG5tbS96c3dhcC5jOjEwODc6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbm1tL3pzd2FwLmMtMTA4OC1cdFx0XHRcdCAgICAgICB2b2lkICphcmcpXG4tLVxubW0venN3YXAuYz0xMTY4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTExNzktXG5tbS96c3dhcC5jOjExODA6XHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXG5tbS96c3dhcC5jLTExODEtXHRcdFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcbi0tXG5tbS96c3dhcC5jPTEyNzc9c3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3pzd2FwLmMtMTI5NC1cdFx0c2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbm1tL3pzd2FwLmM6MTI5NTpcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG5tbS96c3dhcC5jLTEyOTYtXHRcdHNjYW5uZWQgJiM0Mzs9IDEgLSBucl90b193YWxrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2MjYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBzaHJpbmtfbWVtY2dgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBjYWxscyB0aGF0IGxlYWRzIHRvIGBzaHJpbmtfbWVtY2dgLiBUaGUgY29kZSBzaG93cyB0aGF0IGJvdGggYHpzd2FwX3Nocmlua2VyX3NjYW5gIGFuZCBgc2hyaW5rX21lbWNnYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXkgYXJlIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZXMsIHdoaWNoIGhlbHBzIHdpdGggbW9kdWxhcml0eSwgYnV0IGFsc28gbWFrZXMgdHJhY2luZyB0aGUgY2FsbGluZyBwYXRoIGEgYml0IG1vcmUgaW1wb3J0YW50LiBUaGUga2V5IHRoaW5nIEkgc2VlIGlzIHRoYXQgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGV4cGxpY2l0bHkgY2FsbHMgYHNocmlua19tZW1jZ2AuIE5vdywgSSBuZWVkIHRvIGtub3cgd2hhdCBlbHNlIGNhbGxzIGBzaHJpbmtfbWVtY2dgLiBGaWd1cmluZyBvdXQgdGhlIHVwc3RyZWFtIGNhbGwgc2l0ZXMgZm9yIGBzaHJpbmtfbWVtY2dgIGlzIG15IG5leHQgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTk4Nz1zdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuLS1cbm1tL3pzd2FwLmMtMTA4Ni0gKi9cbm1tL3pzd2FwLmM6MTA4NzpzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxubW0venN3YXAuYy0xMDg4LVx0XHRcdFx0ICAgICAgIHZvaWQgKmFyZylcbi0tXG5tbS96c3dhcC5jPTExNjg9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTE3OS1cbm1tL3pzd2FwLmM6MTE4MDpcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcdTAwMjZ6c3dhcF9saXN0X2xydSwgc2MsIFx1MDAyNnNocmlua19tZW1jZ19jYixcbm1tL3pzd2FwLmMtMTE4MS1cdFx0XHUwMDI2ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpO1xuLS1cbm1tL3pzd2FwLmM9MTI2MT1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxuLS1cbm1tL3pzd2FwLmMtMTI3Ni1cbm1tL3pzd2FwLmM6MTI3NzpzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS96c3dhcC5jLTEyNzgte1xuLS1cbm1tL3pzd2FwLmMtMTI5NC1cdFx0c2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbm1tL3pzd2FwLmM6MTI5NTpcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG5tbS96c3dhcC5jLTEyOTYtXHRcdHNjYW5uZWQgJiM0Mzs9IDEgLSBucl90b193YWxrO1xuLS1cbm1tL3pzd2FwLmM9MTMwNT1zdGF0aWMgdm9pZCBzaHJpbmtfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5tbS96c3dhcC5jLTEzNjktXG5tbS96c3dhcC5jOjEzNzA6XHRcdHJldCA9IHNocmlua19tZW1jZyhtZW1jZyk7XG5tbS96c3dhcC5jLTEzNzEtXHRcdC8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSAqL1xuLS1cbm1tL3pzd2FwLmM9MTQ3NT1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xNDkzLVx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2cob2JqY2cpO1xubW0venN3YXAuYzoxNDk0Olx0XHRpZiAoc2hyaW5rX21lbWNnKG1lbWNnKSkge1xubW0venN3YXAuYy0xNDk1LVx0XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTA5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gWnN3YXAgYW5kIFN3YXAgQ2FjaGUgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIGB6c3dhcF9zdG9yZWAgaXMgY2FsbGluZyBgc2hyaW5rX21lbWNnYC4gVGhhdCBtYWtlcyBzZW5zZSwgcGFydCBvZiBtYW5hZ2luZyBtZW1vcnkgcHJlc3N1cmUuIEFuZCBpdCYjMzk7cyBleHBvcnRlZCwgc28gaXQmIzM5O3MgY2xlYXJseSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEdvb2QuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hhdCBgcmVtb3ZlX21hcHBpbmdgIGlzIGRvaW5nIGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgYWxzbyBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBUaGlzIGxpa2VseSBwbGF5cyBhIHJvbGUgaW4gZnJlZWluZyB1cCByZXNvdXJjZXMuCgpIbW0sIGxldCYjMzk7cyBsb29rIGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBXYWl0IGEgbWludXRlLCBpcyB0aGF0ICphbHNvKiBub24tc3RhdGljPyBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIFllcywgaXQmIzM5O3MgaW4gYG1tL3N3YXBfc3RhdGUuY2AgYnV0IGl0JiMzOTtzIGV4cG9ydGVkLiBUaGlzIHNlZW1zIGltcG9ydGFudC4gSSBuZWVkIHRvIGRpZyBpbnRvIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhpcyBzZWVtcyBsaWtlIGEgY29yZSBlbGVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jPTQwNT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNDkxLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjQ5MjogKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTQ5My0gKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MTEtICovXG5tbS9zd2FwX3N0YXRlLmM6NTEyOnN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbm1tL3N3YXBfc3RhdGUuYy01MTMtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz03MzI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTc0MS1cdFx0XHRyZXR1cm4gZm9saW87XG5tbS9zd2FwX3N0YXRlLmM6NzQyOlx0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG5tbS9zd2FwX3N0YXRlLmMtNzQzLVx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4tLVxubW0vc3dhcF9zdGF0ZS5jPTc3ND1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy03ODItXHRcdFx0cmV0dXJuIGZvbGlvO1xubW0vc3dhcF9zdGF0ZS5jOjc4MzpcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG5tbS9zd2FwX3N0YXRlLmMtNzg0LVx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzQ3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQ29kZSBJbnNwZWN0aW9uOiBUaGUgTm9uLVN0YXRpYyBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgYSBmZXcgdGhpbmdzIGFyZSBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZS4gSSBzZWUgdGhhdCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpc24mIzM5O3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0JiMzOTtzIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSByZWQgZmxhZyBpbiBpdHNlbGYuIEhvd2V2ZXIsIGl0JiMzOTtzIG5vdCBleHBvcnRlZCBlaXRoZXIsIHdoaWNoIGlzIGEgYml0IG9kZC4gVGhlbiBJIHNlZSB0aGF0IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpcyBhbHNvIG5vbi1zdGF0aWMuIEludGVyZXN0aW5nLiBUaGVuIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgLiBGaW5hbGx5LCBgcmVtb3ZlX21hcHBpbmdgLiBUaGVzZSBhbGwgc2hhcmUgdGhlIHNhbWUgYXR0cmlidXRlLgoKR2l2ZW4gdGhpcyBwYXR0ZXJuLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgd2hldGhlciB0aGV5IHNob3VsZCBvciBzaG91bGRuJiMzOTt0IGJlIHN0YXRpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3JlIG5vdC4gVGhleSBhbGwgc2VlbSB0byByZWxhdGUgdG8gdGhlIHN3YXAgc3Vic3lzdGVtIGluIHNvbWUgd2F5LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYC4gTGV0JiMzOTtzIGNoZWNrIHRoZSBjb2RlIGZvciBpdCBpbiBgbW0vc3dhcF9zdGF0ZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmM9NjE1PXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3dhcF9kcm9wYmVoaW5kX3dxO1xubW0vc3dhcF9zdGF0ZS5jLTYxNi1cbm1tL3N3YXBfc3RhdGUuYzo2MTc6dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9zd2FwX3N0YXRlLmMtNjE4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgS2VybmVsIEludGVybmFscyoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBmdW5jdGlvbi4gSXMgaXQgYWN0dWFsbHkgZXhwb3J0ZWQ/IFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gS25vd2luZyBpZiBpdCYjMzk7cyBleHBvcnRlZCBkaWN0YXRlcyBzbyBtdWNoIGFib3V0IGhvdyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0LCBpZiBhdCBhbGwuIElzIGl0IGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgbW9kdWxlcyB0byBjYWxsLCBvciBpcyBpdCBpbnRlbmRlZCBzb2xlbHkgZm9yIGludGVybmFsIGtlcm5lbCB1c2U/IFRoYXQgZGV0YWlsIGltcGFjdHMgc28gbXVjaCBvZiBteSBhYmlsaXR5IHRvLCBmb3IgZXhhbXBsZSwgYnVpbGQgYSBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIG9yIGV4cGxvcmUgaG93IGZvbGlvIHdyaXRlYmFjayBiZWhhdmlvciB3b3Jrcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgYGRyb3BiZWhpbmRgIHdpdGggYHdyaXRlYmFja2AuIElmIGl0JiMzOTtzICpub3QqIGV4cG9ydGVkLCBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIGFsdGVybmF0aXZlcyBvciBjb25zaWRlciB3aGV0aGVyIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGluZGlyZWN0bHkgYWNoaWV2ZSB0aGUgZGVzaXJlZCBiZWhhdmlvciB0aHJvdWdoIG90aGVyLCBvZmZpY2lhbGx5IHN1cHBvcnRlZCBBUElzIGFuZCBzdHJ1Y3R1cmVzLiBUaGUgZXhwb3J0IHN0YXR1cyBpbW1lZGlhdGVseSBzaWduYWxzIHRoZSBib3VuZGFyaWVzIG9mIG15IHBvc3NpYmxlIGV4cGVyaW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBkZXRlcm1pbmUgaXRzIGV4cG9ydCBzdGF0dXMgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGU6IEEgUXVpY2sgRGlhZ25vc3RpYyoqCgpIbW0sIHRoZSBzaXR1YXRpb24gaXNuJiMzOTt0ICpzdGF0aWMqLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBhIGZpcm0gbmVnYXRpdmUsIGJ1dCB0aGUgY29udGV4dCBpbmRpY2F0ZXMgYSBkeW5hbWljIGVsZW1lbnQuIFRoaXMgbWVhbnMgdGhpbmdzIGFyZSBwb3RlbnRpYWxseSBjaGFuZ2luZyBvciBtdXRhYmxlLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYSBzcGVjaWZpYyBwaWVjZSBvZiB0aGUgcHV6emxlOiB0aGUgYHJlbW92ZV9tYXBwaW5nYCBmdW5jdGlvbiBvciBtZXRob2QuIEl0IGlzIGEgbG9naWNhbCBuZXh0IHBvaW50IG9mIGludmVzdGlnYXRpb24uIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbm9uLXN0YXRpYyBiZWhhdmlvciBJJiMzOTttIG9ic2VydmluZyBhbmQgaXMgdGhlIGxvZ2ljYWwgbmV4dCBwaWVjZSB0byBleGFtaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnJlbW92ZV9tYXBwaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHpzd2FwX3N0b3JlYCoqCgpObywgdGhhdCYjMzk7cyBub3QgaXQuIE9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIHRha2UgYSBsb29rIGF0IGB6c3dhcF9zdG9yZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByb290IGNhdXNlIGFuZCBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgdGhlIHByb2JsZW0gbGllcyBlbHNld2hlcmUuIEhvd2V2ZXIsIHNpbmNlIEkgd2FzIHRoaW5raW5nIGluIHRoaXMgZ2VuZXJhbCBhcmVhLCBjaGVja2luZyBgenN3YXBfc3RvcmVgIGNvdWxkIGdpdmUgbWUgYSBjbHVlIG9mIHdoeSB0aGUgcmVzdWx0cyB3ZXJlIG5lZ2F0aXZlIGFuZCBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBvYnZpb3VzIHRoZXJlIGJlZm9yZSBJIGRpdmUgaW50byBtb3JlIGNvbXBsZXggYXJlYXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qenN3YXBfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ3MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgU3dhcCBTdWJzeXN0ZW0qKgoKTm8uIEp1c3TigKYgbm8uIFRoYXQgZmlyc3QgbGluZSwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgZG9lc24mIzM5O3QgZmVlbCByaWdodC4KCldhaXQsIGhvbGQgb24gYSBzZWNvbmQuIExldCBtZSBiYWNrIHVwIGFuZCB0aGluayB0aGlzIHRocm91Z2guIElzIGB6c3dhcF9zdG9yZWAgYWN0dWFsbHkgY2FsbGVkIGZyb20gc29tZXRoaW5nIGxpa2UgYGFkZF90b19zd2FwYCwgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIGluIHRoZSBzd2FwIHN1YnN5c3RlbT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gcmlnaHQgbm93LiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfaW8uYz0yNTE9aW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnN3YXBfcGx1Zylcbi0tXG5tbS9wYWdlX2lvLmMtMjg0LVxubW0vcGFnZV9pby5jOjI4NTpcdGlmICh6c3dhcF9zdG9yZShmb2xpbykpIHtcbm1tL3BhZ2VfaW8uYy0yODYtXHRcdGNvdW50X210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksIE1USFBfU1RBVF9aU1dQT1VUKTtcbi0tXG5tbS96c3dhcC5jLTQ2LS8qIFRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xubW0venN3YXAuYzo0NzphdG9taWNfbG9uZ190IHpzd2FwX3N0b3JlZF9wYWdlcyA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG5tbS96c3dhcC5jLTQ4LS8qIFRoZSBudW1iZXIgb2YgaW5jb21wcmVzc2libGUgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xubW0venN3YXAuYzo0OTpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xubW0venN3YXAuYy01MC1cbi0tXG5tbS96c3dhcC5jPTc2NT1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXG4tLVxubW0venN3YXAuYy03NzQtXHRpZiAoZW50cnktXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcbm1tL3pzd2FwLmM6Nzc1Olx0XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtNzc2LVx0enN3YXBfZW50cnlfY2FjaGVfZnJlZShlbnRyeSk7XG5tbS96c3dhcC5jOjc3NzpcdGF0b21pY19sb25nX2RlYyhcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpO1xubW0venN3YXAuYy03NzgtfVxuLS1cbm1tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTk4MS0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcbm1tL3pzd2FwLmM6OTgyOiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtOTgzLSAqIGluIHRoZSBmaXJzdCBwbGFjZS4gIEFmdGVyIHRoZSBmb2xpbyBoYXMgYmVlbiBkZWNvbXByZXNzZWQgaW50b1xuLS1cbm1tL3pzd2FwLmM9MTE4OT1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuLS1cbm1tL3pzd2FwLmMtMTIyMy1cdFx0bnJfYmFja2luZyA9IHpzd2FwX3RvdGFsX3BhZ2VzKCk7XG5tbS96c3dhcC5jOjEyMjQ6XHRcdG5yX3N0b3JlZCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTIyNS1cdH1cbi0tXG5tbS96c3dhcC5jPTEzMDU9c3RhdGljIHZvaWQgc2hyaW5rX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxubW0venN3YXAuYy0xMzk0LVxubW0venN3YXAuYzoxMzk1OnN0YXRpYyBib29sIHpzd2FwX3N0b3JlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsXG5tbS96c3dhcC5jLTEzOTYtXHRcdFx0ICAgICBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0venN3YXAuYy0xNDMzLVx0ICogbm8gZnVydGhlciBwb3NzaWJpbGl0eSBvZiBmYWlsdXJlLiBHcmFiIHJlZnMgdG8gdGhlIHBvb2wgYW5kIG9iamNnLFxubW0venN3YXAuYzoxNDM0Olx0ICogY2hhcmdlIHpzd2FwIG1lbW9yeSwgYW5kIGluY3JlbWVudCB6c3dhcF9zdG9yZWRfcGFnZXMuXG5tbS96c3dhcC5jLTE0MzUtXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcbi0tXG5tbS96c3dhcC5jLTE0NDItXHR9XG5tbS96c3dhcC5jOjE0NDM6XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ0NC1cdGlmIChlbnRyeS1cdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxubW0venN3YXAuYzoxNDQ1Olx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTQ0Ni1cbi0tXG5tbS96c3dhcC5jLTE0NzQtXG5tbS96c3dhcC5jOjE0NzU6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNDc2LXtcbi0tXG5tbS96c3dhcC5jLTE1MTktXG5tbS96c3dhcC5jOjE1MjA6XHRcdGlmICghenN3YXBfc3RvcmVfcGFnZShwYWdlLCBvYmpjZywgcG9vbCkpXG5tbS96c3dhcC5jLTE1MjEtXHRcdFx0Z290byBwdXRfcG9vbDtcbi0tXG5tbS96c3dhcC5jPTE3MDA9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXG5tbS96c3dhcC5jLTE3MDEte1xubW0venN3YXAuYzoxNzAyOlx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTcwMy1cdHJldHVybiAwO1xuLS1cbm1tL3pzd2FwLmM9MTcwNz1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcbm1tL3pzd2FwLmMtMTcwOC17XG5tbS96c3dhcC5jOjE3MDk6XHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xubW0venN3YXAuYy0xNzEwLVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODczCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRm9jdXMgU3ltYm9scyBpbiB0aGUgS2VybmVsIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O20gZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMgYmVjYXVzZSB0aG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgaW50ZXJhY3Rpbmcgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLgoKSSYjMzk7dmUgYWxyZWFkeSBub3RlZCB0aGF0IGB6c3dhcF9zdG9yZWAgaXMgbm9uLXN0YXRpYyBhbmQgbGlua2VkIHRvIGBzd2FwX3dyaXRlb3V0YCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMaWtld2lzZSwgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGlzIG5vbi1zdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gVGhlbiwgdGhlcmUmIzM5O3MgYHJlbW92ZV9tYXBwaW5nYCwgbm9uLXN0YXRpYyBhbmQgY2FsbGVkIGZyb20gYHBhZ2VfY2FjaGVfcGlwZV9idWZfdHJ5X3N0ZWFsYCwgYG1hcHBpbmdfZXZpY3RfZm9saW9gLCBhbmQgYHN3YXBfZHJvcGJlaGluZF9kcm9wX2ZvbGlvYC4KCk5vdywgSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIHRvIGV4YW1pbmUgdGhlc2UgZnVuY3Rpb25zIGNsb3NlbHkuIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgaW4gYG1tL3N3YXBfc3RhdGUuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIGEgZm9saW8gdG8gYSBsaW5rZWQgbGlzdCBhbmQgcXVldWluZyBhIHdvcmsgaXRlbS4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4KClRoZW4sIEkmIzM5O20gY2hlY2tpbmcgYHJlbW92ZV9tYXBwaW5nYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIGFub3RoZXIgY3JpdGljYWwgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCwgYXMgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGZyZWVpbmcgdXAgbWVtb3J5LiBJdCB0YWtlcyBhIG1hcHBpbmcsIGEgZm9saW8sIGEgcmVjbGFpbWVkIGZsYWcsIGFuZCBhIHRhcmdldCBtZW1jZy4KCk5leHQsIEkmIzM5O3ZlIGxvb2tlZCBhdCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpbiBgbW0vc3dhcF9zdGF0ZS5jYC4gSXQgc2VlbXMgbGlrZSBhIGNvcmUgZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgZm9saW8gc3RydWN0dXJlcyB3aXRoaW4gdGhlIHN3YXAgY2FjaGUuCgpJJiMzOTt2ZSBhbHNvIHF1aWNrbHkgZGlzbWlzc2VkIGBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGJlY2F1c2UgdGhleSBhcmUgc3RhdGljIGFuZCBsZXNzIGxpa2VseSB0byBiZSB0aGUgcHJpbWFyeSBmb2N1cy4KClRoZXJlZm9yZSwgbXkgc2hvcnQgbGlzdCBvZiB0b3AgZm9jdXMgc3ltYm9scyBhcmUgbm93OgotIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYAotIGByZW1vdmVfbWFwcGluZ2AKLSBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYAoKRmluYWxseSwgSSYjMzk7bSBjaGVja2luZyB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBwb3NzaWJseSBsZXNzIG9idmlvdXMsIGNoYW5nZXMuIGBmb2xpb19lbmRfd3JpdGViYWNrYCBpcyBtb2RpZmllZCwgYnV0IEkga25vdyB0aGF0JiMzOTtzIGEgaGVhdmlseSB1c2VkIHBhdGgsIHNvIEkgbmVlZCB0byBiZSBjYXV0aW91cyBhYm91dCB0aGF0IG9uZS4gYHBhZ2VfY2FjaGVfcGlwZV9idWZfdHJ5X3N0ZWFsYCBpcyBzdGF0aWMuIGBtYXBwaW5nX2V2aWN0X2ZvbGlvYCBpcyBub24tc3RhdGljLCBidXQgaXQganVzdCBjYWxscyBgcmVtb3ZlX21hcHBpbmdgLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgdGhhdCBpbXBvcnRhbnQuCgpUbyBmaW5pc2gsIEkmIzM5O2xsIHJldmlldyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgaW1wYWN0IHRoZSBtb2RpZmllZCBmaWxlcy4gSSBhbHJlYWR5IGtub3cgdGhhdCBgQ09ORklHX1pTV0FQYCBpcyBuZWVkZWQgZm9yIGBtbS96c3dhcC5jYCBhbmQgYENPTkZJR19TV0FQYCBmb3IgYG1tL3N3YXBfc3RhdGUuY2AuIEkgd2lsbCB0aGVuIGdvIG9uIHRvIGNoZWNrIGBtbS9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBkZXBlbmRlbnQgY29uZmlnIG9wdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSB2aWV3IG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzODkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgenN3YXAqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gbm90aW5nIGlzIHRoYXQgaWYgSSB3YW50IHRvIHVzZSBgenN3YXBgLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYm90aCBgQ09ORklHX1pTV0FQYCBhbmQsIG9idmlvdXNseSwgdGhlIGJhc2ljIGBDT05GSUdfU1dBUGAgb3B0aW9uIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBOb3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYENPTkZJR19aU1dBUGAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlcXVpcmVkIHBpZWNlcy4gRGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgYWx3YXlzIHRoZSByaWdodCBhcHByb2FjaCBhdCB0aGlzIHN0YWdlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXG4tLVxubW0vS2NvbmZpZy0yMS1cbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNC1cbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTU5PWNob2ljZVxuLS1cbm1tL0tjb25maWctNzYtXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxubW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7RGVmbGF0ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODItXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXG5tbS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtMWk9cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4LVxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0MlxubW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NC1cbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcbm1tL0tjb25maWctOTYtXHRib29sIFwmIzM0O0xaNFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTAwLVxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xubW0vS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O0xaNEhDXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDYtXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcbm1tL0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTExMy1cbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFpTV0FQYDoKCioqRGVsdmluZyBpbnRvIFpTV0FQJiMzOTtzIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBaU1dBUGAgaW5zaWRlIGFuZCBvdXQsIHdoaWNoIG1lYW5zIGEgZGVlcCBkaXZlIGludG8gaXRzIGRlcGVuZGVuY2llcyBpcyB0aGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7d2hhdCBleHRlcm5hbCBsaWJyYXJpZXMsIHNlcnZpY2VzLCBvciBrZXJuZWwgbW9kdWxlcyBpcyB0aGlzIHRoaW5nIGxlYW5pbmcgb24/JiMzNDsgQXJlIHdlIHRhbGtpbmcgY29yZSBsaWJyYXJpZXMsIHBvdGVudGlhbGx5IGFub3RoZXIgcHJvamVjdCBvZiBlcXVhbCBzdGF0dXJlIHdpdGhpbiB0aGUgc3lzdGVtLCBvciBqdXN0IHNvbWV0aGluZyBzbWFsbCB0byBoYW5kbGUgYSBzcGVjaWZpYyBwcm9jZXNzPwoKS25vd2luZyB0aGUgYW5zd2VyIHRvIHRoYXQgd2lsbCBkZXRlcm1pbmUgc28gbXVjaC4gRG9lcyBpdCByZXF1aXJlIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgTGludXgga2VybmVsPyBEb2VzIGl0IHB1bGwgaW4gc29tZXRoaW5nIGZyb20gYW5vdGhlciBsaWJyYXJ5IHRoYXQgY291bGQgYnJlYWsgaXQgd2l0aCBhbiB1cGRhdGU/IElzIHRoZXJlIGEgaGlkZGVuIGRlcGVuZGVuY3kgb24gYSBwaWVjZSBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmU/IFRob3NlIGFyZSB0aGUgY3J1Y2lhbCBxdWVzdGlvbnMgSSYjMzk7bSBhc2tpbmcgbXlzZWxmLiBHb3R0YSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHdlYWsgcG9pbnRzIGluIHRoZSBhcmNoaXRlY3R1cmFsIGZvdW5kYXRpb24gb2YgYFpTV0FQYCByaWdodCBub3cgYW5kIGdldCB0aG9zZSBwb3RlbnRpYWwgY29uZmxpY3RzIHNxdWFyZWQgYXdheS4gVGhpcyBpcyBhYm91dCBzb2xpZGlmeWluZyBteSB1bmRlcnN0YW5kaW5nLCBtYXBwaW5nIG91dCBwb3RlbnRpYWwgcmlza3MsIGFuZCBwcmVwYXJpbmcgdG8gdHJvdWJsZXNob290LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMjpcdGNvbmZpZyBaU1dBUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFNXQVBcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9cbiAgMjY6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xuICAyOTpcdFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cbiAgMzA6XHRcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cbiAgMzE6XHRcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqWlNXQVAsIFNXQVAsIGFuZCBEZWZhdWx0IEFjdGl2YXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBaU1dBUCB0aGluZywgYW5kIGl0JiMzOTtzIGNsZWFyOiBpdCYjMzk7cyBidWlsdCBvbiB0aGUgZm91bmRhdGlvbiBvZiByZWd1bGFyIFNXQVAuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5IEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIFdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGJvdGguIE15IGluc3RpbmN0LCBiYXNlZCBvbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJlbmVmaXRzLCBpcyB0byBlbmFibGUgKmJvdGgqIFpTV0FQIGFuZCB0aGUgdW5kZXJseWluZyBTV0FQIGZ1bmN0aW9uYWxpdHkuIFNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgYXBwcm9hY2ggdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGNvbXByZXNzaW9uLgoKQW5kIHRoYXQgbGVhZHMgbWUgdG8gYW5vdGhlciB0aG91Z2h0LCB0aGUgYFpTV0FQX0RFRkFVTFRfT05gIG9wdGlvbi4gSXQgbWlnaHQgYmUgcHJ1ZGVudCB0byBleHBsb3JlIHRoYXQgZnVydGhlci4gSWYgd2Ugd2FudCB0aGlzIHRvIGJlIHVzZWQgZWZmZWN0aXZlbHksIHdlIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGFjdHVhbGx5ICpydW5uaW5nKiBhbmQgYmVpbmcgbGV2ZXJhZ2VkIHdpdGhvdXQgcmVxdWlyaW5nIG1hbnVhbCBpbnRlcnZlbnRpb24gZnJvbSB0aGUgZW5kLXVzZXIuIEVuc3VyaW5nIGl0JiMzOTtzIG9uIGJ5IGRlZmF1bHQgY291bGQgYmUgdGhlIGtleSB0byB3aWRlc3ByZWFkIGFkb3B0aW9uIGFuZCBtYXhpbWl6aW5nIHRoZSBhZHZhbnRhZ2VzIG9mIFpTV0FQLiBOZWVkcyBhIGxpdHRsZSBtb3JlIHJlc2VhcmNoLCBidXQgaXQmIzM5O3MgY2VydGFpbmx5IHNvbWV0aGluZyB0byBzdHJvbmdseSBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzNTpcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG4gIDM2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcbiAgNDA6XHRcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcbiAgNDM6XHRcdCAgY29tbWFuZCBsaW5lICYjMzk7enN3YXAuZW5hYmxlZD0mIzM5OyBvcHRpb24uXG4gIDQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDMwCgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDU4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBac3dhcCBXcml0ZWJhY2sgRHJvcGJlaGluZCBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoaXMgbmV3ICYjMzQ7ZHJvcGJlaGluZCYjMzQ7IG1lY2hhbmlzbSBmb3Igc3dhcCBjYWNoZSBmb2xpb3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgc3RpY2tpbmcgdGhlc2UgZm9saW9zIGJhY2sgb24gdGhlIExSVSBsaXN0LCB3aGljaCBjb3VsZCBjYXVzZSB1bm5lY2Vzc2FyeSB0aHJhc2hpbmcuIFRoaXMgc291bmRzIGxpa2UgYSBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGJ1dCBhbHNvIGEgZGVmaW5pdGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBlbmFibGluZyBgWlNXQVBgLCBgU1dBUGAsIGFuZCBgWlNXQVBfREVGQVVMVF9PTmAgYXJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbi4KCkZ1bmN0aW9uYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBrZXkgYXJlYXM6IGBtbS92bXNjYW4uY2AsIGBtbS90cnVuY2F0ZS5jYCwgYGZzL3NwbGljZS5jYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBgbW0venN3YXAuY2AsIGluZGljYXRpbmcgdGhpcyBpcyBub3QgYSB0cml2aWFsIGNoYW5nZS4KCkkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCBzb21lIG9mIHRoZSBtb2RpZmllZCBhbmQgbmV3IGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBgcmVtb3ZlX21hcHBpbmdgIGluIGBtbS92bXNjYW4uY2AgKGFuZCBpdHMgdXNlcyBpbiBgbW0vdHJ1bmNhdGUuY2AsIGBmcy9zcGxpY2UuY2AsIGFuZCBgbW0vc3dhcF9zdGF0ZS5jYCkgaXMgZGVmaW5pdGVseSBtb2RpZmllZCBhcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLiBUaGVuLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgYG1tL3pzd2FwLmNgIGlzIGFsc28gY2hhbmdlZC4gQW5kIGxhc3RseSwgYSBicmFuZC1uZXcgZnVuY3Rpb24sIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgd2hpY2ggaXMgaW50cm9kdWNlZCBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBidXQgY2FsbGVkIGZyb20gYG1tL2ZpbGVtYXAuY2AuIFRoYXQgZnVuY3Rpb24gc2VlbXMgY2VudHJhbCB0byB0aGUgY29yZSAmIzM0O2Ryb3BiZWhpbmQmIzM0OyBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gY29yZSBNTSBiZWhhdmlvciwgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIGFzIGZvY3VzIHN5bWJvbHMgdG8gdGFyZ2V0IHdpdGggdGhlIGZ1enplcjogYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgcmVtb3ZlX21hcHBpbmdgLCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEkmIzM5O3ZlIGNoZWNrZWQgYW5kIHRoZXNlIGZ1bmN0aW9ucywgd2hpbGUgbm90IGV4cG9ydGVkLCBhcmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgcGVyZmVjdCBmb3IgZnV6emluZy4KClRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWFwcGluZyYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhICYjMzk7ZHJvcGJlaGluZCYjMzk7IG1lY2hhbmlzbSBmb3Igc3dhcCBjYWNoZSBmb2xpb3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjayB0byBhdm9pZCBwdXR0aW5nIHRoZW0gb24gdGhlIExSVSBsaXN0LiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBsaWtlIGByZW1vdmVfbWFwcGluZ2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGFkZHMgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIHdoaWNoIHVzZXMgYSB3b3JrcXVldWUgdG8gZHJvcCBmb2xpb3MgZnJvbSB0aGUgc3dhcCBjYWNoZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1NIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8mIzM0OywKICAgICYjMzQ7cmVtb3ZlX21hcHBpbmcmIzM0OywKICAgICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSAmIzM5O2Ryb3BiZWhpbmQmIzM5OyBtZWNoYW5pc20gZm9yIHN3YXAgY2FjaGUgZm9saW9zIGR1cmluZyB6c3dhcCB3cml0ZWJhY2sgdG8gYXZvaWQgcHV0dGluZyB0aGVtIG9uIHRoZSBMUlUgbGlzdC4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGFuZCBhZGRzIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCB3aGljaCB1c2VzIGEgd29ya3F1ZXVlIHRvIGRyb3AgZm9saW9zIGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNTSBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxOTo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCB3cml0ZWJhY2ssIGFuZCBMUlUgbWFuYWdlbWVudCAoaW50cm9kdWNpbmcgYSBcJiMzNDtkcm9wYmVoaW5kXCYjMzQ7IG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCB3b3JrcXVldWVzIGZvciBmcmVlaW5nIGZvbGlvcywgYW5kIG1vZGlmeWluZyBmdW5jdGlvbiBzaWduYXR1cmVzIGxpa2UgYHJlbW92ZV9tYXBwaW5nYCBhbmQgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIG9mIG1lbW9yeSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZWN5Y2xlIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBLTUVNTEVBSywgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHdoaWNoIGFyZSB0aGUgc3BlY2lmaWMgY2xhc3NlcyBvZiBidWdzIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjJjODQ3ZDU0ZjNjY2I5NmNiNDc5N2UzMjc5YWQ0ODM2ZmJlYjE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTk6NDk6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jCmluZGV4IDlkOGY2M2UyZmQxYWIuLjc5NDI0YmJlZTFiMGYgMTAwNjQ0Ci0tLSBhL2ZzL3NwbGljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NwbGljZS5jCkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgYm9vbCBwYWdlX2NhY2hlX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAogCQkgKiBJZiB3ZSBzdWNjZWVkZWQgaW4gcmVtb3ZpbmcgdGhlIG1hcHBpbmcsIHNldCBMUlUgZmxhZwogCQkgKiBhbmQgcmV0dXJuIGdvb2QuCiAJCSAqLwotCQlpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8pKSB7CiYjNDM7CQlpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkgewogCQkJYnVmLSZndDtmbGFncyB8PSBQSVBFX0JVRl9GTEFHX0xSVTsKIAkJCXJldHVybiB0cnVlOwogCQl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDhmMGY2OGUyNDViYWEuLmJkYWZmYzBkMWVmMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0zNzMsNyAmIzQzOzM3Myw4IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQkJCXVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7Ci1sb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mztsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJICAgIGJvb2wgcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX05VTUEpCiBleHRlcm4gaW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CkBAIC00NjUsNiAmIzQzOzQ2Niw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7CiAgKi8KIGJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiYjNDM7dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzOwogLyogQWxsb2NhdGUgLyBmcmVlIChoaWJlcm5hdGlvbikgZXhjbHVzaXZlIGVudHJpZXMgKi8KIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7CiB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTsKQEAgLTQ3NSw2ICYjNDM7NDc4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpCiB9CiAKICNlbHNlIC8qIENPTkZJR19TV0FQICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge30KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSkKIHsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCBkNzIxOTg2ZDVmNDY1Li4xNjQ3OTYxYzViYTIwIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0xNjg2LDYgJiM0MzsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTsKICAqLwogdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiYjNDM7CWJvb2wgc3dhcF9kcm9wYmVoaW5kOwomIzQzOwogCVZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7CiAKIAkvKgpAQCAtMTY5NSw3ICYjNDM7MTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbykKIAkgKiByZXVzZWQgYmVmb3JlIHRoZSBmb2xpb193YWtlX2JpdCgpLgogCSAqLwogCWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpb3MgYXJlIG9mZi1MUlUsIHNvIHdlIG11c3QgcHJldmVudCBhIHJhY2luZwomIzQzOwkgKiBzd2FwaW4gZnJvbSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQga2VlcGluZyBpdAomIzQzOwkgKiBvZmYtTFJVOiB0aGUgd3JpdGViYWNrIGZsYWcgYWxsb3dzIHRoYXQuIEFmdGVyd2FyZHMgYSBzd2FwaW4gbWF5IHdpbgomIzQzOwkgKiB0aGUgcmFjZSwgYnV0IHRoZSBmb2xpbyBpcyBhbHJlYWR5IHF1ZXVlZCBhbmQgdGhlIHdvcmtlciBwdXRzIGl0IGJhY2sKJiM0MzsJICogb24gdGhlIExSVSBpbiB0aGF0IGNhc2UuCiYjNDM7CSAqLwomIzQzOwlzd2FwX2Ryb3BiZWhpbmQgPSBmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgJmFtcDsmYW1wOwomIzQzOwkJCSAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsKIAlmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwomIzQzOwlpZiAoc3dhcF9kcm9wYmVoaW5kKSB7CiYjNDM7CQlzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTsKIAlmb2xpb19wdXQoZm9saW8pOwogfQpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmgKQEAgLTMwNCw5ICYjNDM7MzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7CiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7CiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwotc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCi0JCQkJICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7CiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi8KIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA5YzNhNWNmOTk3Nzg2Li5iOTNkZDYwN2QyNGM2IDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0xNiw2ICYjNDM7MTYsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZm9saW9fYmF0Y2guaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmFja2luZy1kZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ibGtkZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9taWdyYXRlLmgmZ3Q7CkBAIC00ODMsMTMgJiM0Mzs0ODUsMTEgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CiAKLQkvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqLwotCWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXJldHVybiBmb2xpbzsKIH0KIAogLyoqCi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgogICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3QKICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVybwpAQCAtNTAxLDEzICYjNDM7NTAxLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieQogICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLgogICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlcgomIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZQomIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy4KICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwCiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLgogICovCi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC01MzUsNiAmIzQzOzUzOSw5OCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxsaXN0X2hlYWQsIHN3YXBfZHJvcGJlaGluZF9sbGlzdCk7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsJYm9vbCBkcm9wcGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CWZvbGlvX2xvY2soZm9saW8pOwomIzQzOwomIzQzOwkvKiBUaGUgZm9saW8gd2FzIGFsbG9jYXRlZCBvZmYgdGhlIExSVSBhbmQgbm90aGluZyByZS1hZGRzIGl0IGhlcmUuICovCiYjNDM7CVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpCiYjNDM7CQltZW1jZyA9IE5VTEw7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBHYXRlIHJlbW92ZV9tYXBwaW5nKCkgb24gZm9saW9fdGVzdF9zd2FwY2FjaGUoKTogYSByYWNpbmcgc3dhcGluIG1heQomIzQzOwkgKiBoYXZlIGZyZWVkIHRoZSBzd2FwIHNsb3QgKGZvbGlvX2ZyZWVfc3dhcCgpKSBhbmQgZHJvcHBlZCB0aGUgZm9saW8gZnJvbQomIzQzOwkgKiB0aGUgY2FjaGUsIGFuZCByZW1vdmVfbWFwcGluZygpIG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW8KJiM0MzsJICogKGl0IHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJiMzOTtzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS4KJiM0MzsJICovCiYjNDM7CWlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pICZhbXA7JmFtcDsKJiM0MzsJICAgIHJlbW92ZV9tYXBwaW5nKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby0mZ3Q7c3dhcCksIGZvbGlvLCB0cnVlLCBtZW1jZykpIHsKJiM0MzsJCWRyb3BwZWQgPSB0cnVlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogUmFjZWQ6IHRoZSBmb2xpbyBpcyBub3cgb3duZWQgYnkgdGhlIHN3YXBpbjsgcHV0IGl0IGJhY2suICovCiYjNDM7CQlmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsJCWZvbGlvX2FkZF9scnUoZm9saW8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsKJiM0MzsJZm9saW9fdW5sb2NrKGZvbGlvKTsKJiM0MzsJaWYgKCFkcm9wcGVkKQomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJcmV0dXJuIGRyb3BwZWQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvIC0gZnJlZSBhIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpbyBpbnRvIGEgYmF0Y2gKJiM0MzsgKiBAZm9saW86IHRoZSBvZmYtTFJVIGZvbGlvIHdob3NlIHdyaXRlYmFjayBoYXMgY29tcGxldGVkCiYjNDM7ICogQGZiYXRjaDogYmF0Y2ggb2YgZm9saW9zIHRvIGZyZWUsIGZsdXNoZWQgd2hlbiBmdWxsCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJCSAgICAgc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpCiYjNDM7ewomIzQzOwlpZiAoc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW8oZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSkKJiM0MzsJCWZvbGlvc19wdXQoZmJhdGNoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc3dhcF9kcm9wYmVoaW5kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZm9saW9fYmF0Y2ggZmJhdGNoOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJZm9saW9fYmF0Y2hfaW5pdCgmYW1wO2ZiYXRjaCk7CiYjNDM7CWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKJiM0MzsJCXBvcyA9IGxsaXN0X2RlbF9hbGwocGVyX2NwdV9wdHIoJmFtcDtzd2FwX2Ryb3BiZWhpbmRfbGxpc3QsIGNwdSkpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIHBvcykgewomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilwb3MsCiYjNDM7CQkJCQkJCSAgIHN0cnVjdCBmb2xpbywgbHJ1KTsKJiM0MzsJCQlzd2FwX2Ryb3BiZWhpbmRfZnJlZV9iYXRjaF9mb2xpbyhmb2xpbywgJmFtcDtmYmF0Y2gpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChmYmF0Y2gubnIpCiYjNDM7CQlmb2xpb3NfcHV0KCZhbXA7ZmJhdGNoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFQ0xBUkVfV09SSyhzd2FwX2Ryb3BiZWhpbmRfd29yaywgc3dhcF9kcm9wYmVoaW5kX3dvcmtmbik7CiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzd2FwX2Ryb3BiZWhpbmRfd3E7CiYjNDM7CiYjNDM7dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopJmFtcDtmb2xpby0mZ3Q7bHJ1LAomIzQzOwkJICByYXdfY3B1X3B0cigmYW1wO3N3YXBfZHJvcGJlaGluZF9sbGlzdCkpOwomIzQzOwlxdWV1ZV93b3JrKHN3YXBfZHJvcGJlaGluZF93cSwgJmFtcDtzd2FwX2Ryb3BiZWhpbmRfd29yayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IHN3YXBfZHJvcGJlaGluZF9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlzd2FwX2Ryb3BiZWhpbmRfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtzd2FwX2Ryb3BiZWhpbmQmIzM0OywKJiM0MzsJCQkJCSAgICAgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDApOwomIzQzOwlpZiAoIXN3YXBfZHJvcGJlaGluZF93cSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7Y29yZV9pbml0Y2FsbChzd2FwX2Ryb3BiZWhpbmRfaW5pdCk7CiYjNDM7CiAvKgogICogSWYgd2UgYXJlIHRoZSBvbmx5IHVzZXIsIHRoZW4gdHJ5IHRvIGZyZWUgdXAgdGhlIHN3YXAgY2FjaGUuCiAgKgpAQCAtNjQzLDEyICYjNDM7NzM5LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLAogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwotCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpOwomIzQzOwkJZm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAJc3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTsKIAlpZiAocmVhZGFoZWFkKSB7CiAJCWZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pOwpAQCAtNjgzLDEyICYjNDM7NzgwLDEzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsCiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpOwogCXJldHVybiBmb2xpbzsKIH0KZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IGI1OGJhOTQwYmU0NzQuLjM3ZjdkODI3OGMxY2QgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdHJ1bmNhdGUuYwpAQCAtMzM2LDcgJiM0MzszMzYsNyBAQCBsb25nIG1hcHBpbmdfZXZpY3RfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJaWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIDApKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbyk7CiYjNDM7CXJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNTY3MDhkMWQyZGZkNS4uYzQwNTEzZTBiNTBiMiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc4NCwxNyAmIzQzOzc4NCwyNCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAgKiByZW1vdmVfbWFwcGluZygpIC0gQXR0ZW1wdCB0byByZW1vdmUgYSBmb2xpbyBmcm9tIGl0cyBtYXBwaW5nLgogICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLgogICogQGZvbGlvOiBUaGUgZm9saW8gdG8gcmVtb3ZlLgomIzQzOyAqIEByZWNsYWltZWQ6IFdoZXRoZXIgdGhlIGZvbGlvIGlzIGJlaW5nIHJlY2xhaW1lZCAocmVjb3JkIGEgc2hhZG93KS4KJiM0MzsgKiBAdGFyZ2V0X21lbWNnOiBUaGUgbWVtY2cgdG8gY2hhcmdlIHRoZSBldmljdGlvbiBzaGFkb3cgdG8gd2hlbiBAcmVjbGFpbWVkOwomIzQzOyAqICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIgbXVzdCBrZWVwIGl0IGFsaXZlIGFjcm9zcyB0aGUgY2FsbC4gSWdub3JlZCAobWF5CiYjNDM7ICogICAgICAgICAgICAgICAgYmUgTlVMTCkgd2hlbiBAcmVjbGFpbWVkIGlzIGZhbHNlLgogICoKICAqIElmIHRoZSBmb2xpbyBpcyBkaXJ0eSwgdW5kZXIgd3JpdGViYWNrIG9yIGlmIHNvbWVvbmUgZWxzZSBoYXMgYSByZWYKLSAqIG9uIGl0LCByZW1vdmFsIHdpbGwgZmFpbC4KJiM0MzsgKiBvbiBpdCwgcmVtb3ZhbCB3aWxsIGZhaWwuIFdoZW4gQHJlY2xhaW1lZCBpcyB0cnVlLCBhIHdvcmtpbmdzZXQgZXZpY3Rpb24KJiM0MzsgKiBzaGFkb3cgaXMgc3RvcmVkIChsaWtlIHBhZ2UgcmVjbGFpbSBkb2VzKSBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmUKJiM0MzsgKiBkZXRlY3RlZCBhbmQgdGhlIGZvbGlvIHJlLWFjdGl2YXRlZC4KICAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpbwogICogY291bGQgbm90IGJlIHJlbW92ZWQuCiAgKiBDb250ZXh0OiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50IG9uIHRoZSBmb2xpbyBhbmQKICAqIGhvbGQgaXRzIGxvY2suCiAgKi8KLWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7bG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCSAgICBib29sIHJlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZykKIHsKLQlpZiAoX19yZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpKSB7CiYjNDM7CWlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCByZWNsYWltZWQsIHRhcmdldF9tZW1jZykpIHsKIAkJLyoKIAkJICogVW5mcmVlemluZyB0aGUgcmVmY291bnQgd2l0aCAxIGVmZmVjdGl2ZWx5CiAJCSAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCA3NjFjZDY5OWUwYTNlLi5hMzU2NzFlODM3Zjg5IDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTEwMDAsOCAmIzQzOzEwMDAsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlyZXR1cm4gLUVFWElTVDsKIAogCW1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0JZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCi0JCQkJICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwomIzQzOwlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAomIzQzOwkJCQkJIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwogCXB1dF9zd2FwX2RldmljZShzaSk7CiAKIAkvKgpAQCAtMTA0NSw4ICYjNDM7MTA0NSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJLyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqLwogCWZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pOwogCi0JLyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovCi0JZm9saW9fc2V0X3JlY2xhaW0oZm9saW8pOwomIzQzOwlmb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7CiAKIAkvKiBzdGFydCB3cml0ZWJhY2sgKi8KIAlfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MDAKCQkJCQkJCW91dHB1dDogMjMwCgkJCQkJCQl0aG91Z2h0czogNTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgU2FmZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hlcmUgaXQmIzM5O3MgZm9jdXNpbmc6IHRoZSBzd2FwIGNhY2hlLCB3cml0ZWJhY2sgbWVjaGFuaXNtcywgYW5kIExSVSBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgc2VlaW5nIGNoYW5nZXMgbGlrZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgJiMzNDtkcm9wYmVoaW5kJiMzNDsgbWVjaGFuaXNtIGZvciBzd2FwIGNhY2hlIGZvbGlvcywgbW9kaWZpY2F0aW9ucyB0byBgcmVtb3ZlX21hcHBpbmdgLCBhIG5hbWUgY2hhbmdlIChgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgdG8gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApLCBhbmQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYSBjaGFuZ2UgdG8genN3YXAmIzM5O3MgZm9saW8gc2V0dGluZy4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGFsbCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGtlcm5lbC4gSXQmIzM5O3MgaGFuZGxpbmcgcGFnZSBsaWZlY3ljbGVzLCBMUlUgbGlzdCBtYWludGVuYW5jZSwgYW5kIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzd2FwIGNhY2hlLiBOb3RoaW5nIGhlcmUgaXMgdG91Y2hpbmcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHRoZW4gc2VudCB0byB1c2VyIHNwYWNlIG9yIGltcGxlbWVudGluZyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHdoaWNoLCBvYnZpb3VzbHksIEtNU0FOIGxvdmVzIHRvIGRpZyB1cC4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCBhbmQgcGFzc2VkIHVwIHRvIHVzZXIgc3BhY2UgZWl0aGVyLgoKVGhlIHBvdGVudGlhbCBpc3N1ZXMgSSBjYW4gZW52aXNpb24gaGVyZSBhcmUgYWxsIHByZXR0eSB0ZXh0Ym9vayBtZW1vcnkgbWFuYWdlbWVudCBidWdzOiB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1heWJlIG1lbW9yeSBsZWFrcy4gVGhpbmdzIGxpa2UgdGhpcyBhcmUgYnJlYWQgYW5kIGJ1dHRlciBmb3IgS0FTQU4sIEtNRU1MRUFLLCBhbmQgZ2VuZXJhbGx5IGdvb2Qga2VybmVsIHRlc3RpbmcuIFRoZXNlIGFyZSBwcmV0dHkgY29tbW9uIGFuZCB3ZWxsLXVuZGVyc3Rvb2QgY2xhc3NlcyBvZiBlcnJvcnMuIEtNU0FOIHJlYWxseSBzaGluZXMgd2hlbiB5b3UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpbml0aWFsaXphdGlvbiBpc3N1ZXMgYW5kIGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY29udHJvbCBmbG93IHRoYXQgY291bGQgYmUgY29ycnVwdGVkIGJ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0IGp1c3QgaXNuJiMzOTt0IGhlcmUuCgpJIHdlbnQgdGhyb3VnaCB0aGUgY29kZSBhbmQgc3BlY2lmaWNhbGx5IGNoZWNrZWQgYGZvbGlvX3NldF9kcm9wYmVoaW5kYCBhbmQgYHN3YXBfZHJvcGJlaGluZF93b3JrZm5gIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIGJ1dCB0aGV5JiMzOTtyZSBqdXN0IG1hbmFnaW5nIHRoZSBmb2xpbyYjMzk7cyBwb3NpdGlvbiBpbiB0aGUgc3dhcCBjYWNoZSBhbmQgTFJVLCBhbmQgdGhlIGZvbGlvIGFsbG9jYXRpb24gaXRzZWxmIGlzIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdGlvbi4gTm8gcHJvYmxlbXMgdGhlcmUuCgpUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6ICoqTmVlZHNLTVNBTiBpcyBmYWxzZS4qKiBUaGlzIHBhdGNoIGlzIHNhZmUgZnJvbSB0aGUgcGFydGljdWxhciB2dWxuZXJhYmlsaXRpZXMgS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0LiBUaGUgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scyB3aWxsIGJlIHN1ZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCB3cml0ZWJhY2ssIGFuZCBMUlUgbWFuYWdlbWVudCAoaW50cm9kdWNpbmcgYSBcJiMzNDtkcm9wYmVoaW5kXCYjMzQ7IG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCB3b3JrcXVldWVzIGZvciBmcmVlaW5nIGZvbGlvcywgYW5kIG1vZGlmeWluZyBmdW5jdGlvbiBzaWduYXR1cmVzIGxpa2UgYHJlbW92ZV9tYXBwaW5nYCBhbmQgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIG9mIG1lbW9yeSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZWN5Y2xlIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBLTUVNTEVBSywgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHdoaWNoIGFyZSB0aGUgc3BlY2lmaWMgY2xhc3NlcyBvZiBidWdzIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzd2FwIGNhY2hlIGFsbG9jYXRpb24sIHdyaXRlYmFjaywgYW5kIExSVSBtYW5hZ2VtZW50IChpbnRyb2R1Y2luZyBhIFwmIzM0O2Ryb3BiZWhpbmRcJiMzNDsgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZXMgZm9yIGZyZWVpbmcgZm9saW9zLCBhbmQgbW9kaWZ5aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5IGJ1ZmZlcnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBsaWZlY3ljbGUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIEtNRU1MRUFLLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdywgd2hpY2ggYXJlIHRoZSBzcGVjaWZpYyBjbGFzc2VzIG9mIGJ1Z3MgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjQ5OjUxLjk0MjMwOTE2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTA2MTAwOTQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9cIixcbiAgICBcInJlbW92ZV9tYXBwaW5nXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCB3cml0ZWJhY2ssIGFuZCBMUlUgbWFuYWdlbWVudCAoaW50cm9kdWNpbmcgYSBcXFwiZHJvcGJlaGluZFxcXCIgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZXMgZm9yIGZyZWVpbmcgZm9saW9zLCBhbmQgbW9kaWZ5aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBvZiBtZW1vcnkgYnVmZmVycy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGxpZmVjeWNsZSBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiwgS01FTUxFQUssIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LCB3aGljaCBhcmUgdGhlIHNwZWNpZmljIGNsYXNzZXMgb2YgYnVncyBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgJ2Ryb3BiZWhpbmQnIG1lY2hhbmlzbSBmb3Igc3dhcCBjYWNoZSBmb2xpb3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjayB0byBhdm9pZCBwdXR0aW5nIHRoZW0gb24gdGhlIExSVSBsaXN0LiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBsaWtlIGByZW1vdmVfbWFwcGluZ2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGFkZHMgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIHdoaWNoIHVzZXMgYSB3b3JrcXVldWUgdG8gZHJvcCBmb2xpb3MgZnJvbSB0aGUgc3dhcCBjYWNoZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1NIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjQ5OjUxLjk0MjMxNjAzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzY0OTk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2MmM4NDdkNTRmM2NjYjk2Y2I0Nzk3ZTMyNzlhZDQ4MzZmYmViMTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTk6NDk6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuY1xcbmluZGV4IDlkOGY2M2UyZmQxYWIuLjc5NDI0YmJlZTFiMGYgMTAwNjQ0XFxuLS0tIGEvZnMvc3BsaWNlLmNcXG4rKysgYi9mcy9zcGxpY2UuY1xcbkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyBib29sIHBhZ2VfY2FjaGVfcGlwZV9idWZfdHJ5X3N0ZWFsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuIFxcdFxcdCAqIElmIHdlIHN1Y2NlZWRlZCBpbiByZW1vdmluZyB0aGUgbWFwcGluZywgc2V0IExSVSBmbGFnXFxuIFxcdFxcdCAqIGFuZCByZXR1cm4gZ29vZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChyZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbykpIHtcXG4rXFx0XFx0aWYgKHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCkpIHtcXG4gXFx0XFx0XFx0YnVmLVxcdTAwM2VmbGFncyB8PSBQSVBFX0JVRl9GTEFHX0xSVTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbmluZGV4IDhmMGY2OGUyNDViYWEuLmJkYWZmYzBkMWVmMzEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbkBAIC0zNzMsNyArMzczLDggQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcXG4tbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2xvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdCAgICBib29sIHJlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXFxuIGV4dGVybiBpbnQgcmVjbGFpbV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcXG5AQCAtNDY1LDYgKzQ2Niw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XFxuICAqL1xcbiBib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rXFxuIC8qIEFsbG9jYXRlIC8gZnJlZSAoaGliZXJuYXRpb24pIGV4Y2x1c2l2ZSBlbnRyaWVzICovXFxuIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XFxuIHZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xcbkBAIC00NzUsNiArNDc4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXFxuIH1cXG4gXFxuICNlbHNlIC8qIENPTkZJR19TV0FQICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9XFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggZDcyMTk4NmQ1ZjQ2NS4uMTY0Nzk2MWM1YmEyMCAxMDA2NDRcXG4tLS0gYS9tbS9maWxlbWFwLmNcXG4rKysgYi9tbS9maWxlbWFwLmNcXG5AQCAtMTY4Niw2ICsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcXG4gICovXFxuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuK1xcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xcbitcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTE2OTUsNyArMTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cXG4gXFx0ICovXFxuIFxcdGZvbGlvX2dldChmb2xpbyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW9zIGFyZSBvZmYtTFJVLCBzbyB3ZSBtdXN0IHByZXZlbnQgYSByYWNpbmdcXG4rXFx0ICogc3dhcGluIGZyb20gcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGtlZXBpbmcgaXRcXG4rXFx0ICogb2ZmLUxSVTogdGhlIHdyaXRlYmFjayBmbGFnIGFsbG93cyB0aGF0LiBBZnRlcndhcmRzIGEgc3dhcGluIG1heSB3aW5cXG4rXFx0ICogdGhlIHJhY2UsIGJ1dCB0aGUgZm9saW8gaXMgYWxyZWFkeSBxdWV1ZWQgYW5kIHRoZSB3b3JrZXIgcHV0cyBpdCBiYWNrXFxuK1xcdCAqIG9uIHRoZSBMUlUgaW4gdGhhdCBjYXNlLlxcbitcXHQgKi9cXG4rXFx0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcXG4rXFxuIFxcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XFxuK1xcbitcXHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XFxuK1xcdFxcdHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG4gXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcXG5pbmRleCA3N2QyZDE0ZWRhNDIxLi5mYzQ0ZGFhZTFkZTFmIDEwMDY0NFxcbi0tLSBhL21tL3N3YXAuaFxcbisrKyBiL21tL3N3YXAuaFxcbkBAIC0zMDQsOSArMzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpO1xcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xcbiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovXFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCA5YzNhNWNmOTk3Nzg2Li5iOTNkZDYwN2QyNGM2IDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC0xNiw2ICsxNiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jsa2Rldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlncmF0ZS5oXFx1MDAzZVxcbkBAIC00ODMsMTMgKzQ4NSwxMSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xcbiBcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xcbiBcXG4tXFx0LyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi9cXG4tXFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuIFxcdHJldHVybiBmb2xpbztcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxcbisgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxcbiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xcbiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVyb1xcbkBAIC01MDEsMTMgKzUwMSwxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxcbiAgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuXFxuICAqXFxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXFxuKyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZVxcbisgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cXG4rICpcXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuXFxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXFxuICAqL1xcbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4rc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuIHtcXG4gXFx0aW50IG9yZGVyLCBlcnI7XFxuIFxcdHN0cnVjdCBmb2xpbyAqcmV0O1xcbkBAIC01MzUsNiArNTM5LDk4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGxpc3RfaGVhZCwgc3dhcF9kcm9wYmVoaW5kX2xsaXN0KTtcXG4rXFxuK3N0YXRpYyBib29sIHN3YXBfZHJvcGJlaGluZF9kcm9wX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXHRib29sIGRyb3BwZWQgPSBmYWxzZTtcXG4rXFxuK1xcdGZvbGlvX2xvY2soZm9saW8pO1xcbitcXG4rXFx0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xcbitcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xcbitcXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSlcXG4rXFx0XFx0bWVtY2cgPSBOVUxMO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEdhdGUgcmVtb3ZlX21hcHBpbmcoKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZyBzd2FwaW4gbWF5XFxuK1xcdCAqIGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZSBmb2xpbyBmcm9tXFxuK1xcdCAqIHRoZSBjYWNoZSwgYW5kIHJlbW92ZV9tYXBwaW5nKCkgbXVzdCBub3QgcnVuIG9uIGEgbm9uLXN3YXBjYWNoZSBmb2xpb1xcbitcXHQgKiAoaXQgd291bGQgdHJpcCBfX3JlbW92ZV9tYXBwaW5nKCkncyBtYXBwaW5nID09IGZvbGlvX21hcHBpbmcoKSBjaGVjaykuXFxuK1xcdCAqL1xcbitcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJlbW92ZV9tYXBwaW5nKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby1cXHUwMDNlc3dhcCksIGZvbGlvLCB0cnVlLCBtZW1jZykpIHtcXG4rXFx0XFx0ZHJvcHBlZCA9IHRydWU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqL1xcbitcXHRcXHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rXFxuK1xcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdGlmICghZHJvcHBlZClcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0cmV0dXJuIGRyb3BwZWQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBzd2FwX2Ryb3BiZWhpbmRfZnJlZV9iYXRjaF9mb2xpbyAtIGZyZWUgYSBkcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW8gaW50byBhIGJhdGNoXFxuKyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWRcXG4rICogQGZiYXRjaDogYmF0Y2ggb2YgZm9saW9zIHRvIGZyZWUsIGZsdXNoZWQgd2hlbiBmdWxsXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfZnJlZV9iYXRjaF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxcbit7XFxuK1xcdGlmIChzd2FwX2Ryb3BiZWhpbmRfZHJvcF9mb2xpbyhmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSlcXG4rXFx0XFx0Zm9saW9zX3B1dChmYmF0Y2gpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgZm9saW9fYmF0Y2ggZmJhdGNoO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGZvbGlvX2JhdGNoX2luaXQoXFx1MDAyNmZiYXRjaCk7XFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0cG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cihcXHUwMDI2c3dhcF9kcm9wYmVoaW5kX2xsaXN0LCBjcHUpKTtcXG4rXFx0XFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIHBvcykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKChzdHJ1Y3QgbGlzdF9oZWFkICopcG9zLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZm9saW8sIGxydSk7XFxuK1xcdFxcdFxcdHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvKGZvbGlvLCBcXHUwMDI2ZmJhdGNoKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmIChmYmF0Y2gubnIpXFxuK1xcdFxcdGZvbGlvc19wdXQoXFx1MDAyNmZiYXRjaCk7XFxuK31cXG4rXFxuK3N0YXRpYyBERUNMQVJFX1dPUksoc3dhcF9kcm9wYmVoaW5kX3dvcmssIHN3YXBfZHJvcGJlaGluZF93b3JrZm4pO1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN3YXBfZHJvcGJlaGluZF93cTtcXG4rXFxuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSxcXG4rXFx0XFx0ICByYXdfY3B1X3B0cihcXHUwMDI2c3dhcF9kcm9wYmVoaW5kX2xsaXN0KSk7XFxuK1xcdHF1ZXVlX3dvcmsoc3dhcF9kcm9wYmVoaW5kX3dxLCBcXHUwMDI2c3dhcF9kcm9wYmVoaW5kX3dvcmspO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBzd2FwX2Ryb3BiZWhpbmRfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN3YXBfZHJvcGJlaGluZF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcXFwic3dhcF9kcm9wYmVoaW5kXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSwgMCk7XFxuK1xcdGlmICghc3dhcF9kcm9wYmVoaW5kX3dxKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rY29yZV9pbml0Y2FsbChzd2FwX2Ryb3BiZWhpbmRfaW5pdCk7XFxuK1xcbiAvKlxcbiAgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgdXNlciwgdGhlbiB0cnkgdG8gZnJlZSB1cCB0aGUgc3dhcCBjYWNoZS5cXG4gICpcXG5AQCAtNjQzLDEyICs3MzksMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbiBcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4tXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcXG4rXFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbiBcXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4gXFxuIFxcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4rXFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuIFxcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgcGx1Zyk7XFxuIFxcdGlmIChyZWFkYWhlYWQpIHtcXG4gXFx0XFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XFxuQEAgLTY4MywxMiArNzgwLDEzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbiBcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4tXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbitcXHRcXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcXG4gXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZvbGlvO1xcbiBcXG4rXFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuIFxcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgTlVMTCk7XFxuIFxcdHJldHVybiBmb2xpbztcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS90cnVuY2F0ZS5jIGIvbW0vdHJ1bmNhdGUuY1xcbmluZGV4IGI1OGJhOTQwYmU0NzQuLjM3ZjdkODI3OGMxY2QgMTAwNjQ0XFxuLS0tIGEvbW0vdHJ1bmNhdGUuY1xcbisrKyBiL21tL3RydW5jYXRlLmNcXG5AQCAtMzM2LDcgKzMzNiw3IEBAIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIDApKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbyk7XFxuK1xcdHJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDU2NzA4ZDFkMmRmZDUuLmM0MDUxM2UwYjUwYjIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC03ODQsMTcgKzc4NCwyNCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuXFxuICAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS5cXG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gcmVtb3ZlLlxcbisgKiBAcmVjbGFpbWVkOiBXaGV0aGVyIHRoZSBmb2xpbyBpcyBiZWluZyByZWNsYWltZWQgKHJlY29yZCBhIHNoYWRvdykuXFxuKyAqIEB0YXJnZXRfbWVtY2c6IFRoZSBtZW1jZyB0byBjaGFyZ2UgdGhlIGV2aWN0aW9uIHNoYWRvdyB0byB3aGVuIEByZWNsYWltZWQ7XFxuKyAqICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIgbXVzdCBrZWVwIGl0IGFsaXZlIGFjcm9zcyB0aGUgY2FsbC4gSWdub3JlZCAobWF5XFxuKyAqICAgICAgICAgICAgICAgIGJlIE5VTEwpIHdoZW4gQHJlY2xhaW1lZCBpcyBmYWxzZS5cXG4gICpcXG4gICogSWYgdGhlIGZvbGlvIGlzIGRpcnR5LCB1bmRlciB3cml0ZWJhY2sgb3IgaWYgc29tZW9uZSBlbHNlIGhhcyBhIHJlZlxcbi0gKiBvbiBpdCwgcmVtb3ZhbCB3aWxsIGZhaWwuXFxuKyAqIG9uIGl0LCByZW1vdmFsIHdpbGwgZmFpbC4gV2hlbiBAcmVjbGFpbWVkIGlzIHRydWUsIGEgd29ya2luZ3NldCBldmljdGlvblxcbisgKiBzaGFkb3cgaXMgc3RvcmVkIChsaWtlIHBhZ2UgcmVjbGFpbSBkb2VzKSBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmVcXG4rICogZGV0ZWN0ZWQgYW5kIHRoZSBmb2xpbyByZS1hY3RpdmF0ZWQuXFxuICAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpb1xcbiAgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC5cXG4gICogQ29udGV4dDogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBhIHNpbmdsZSByZWZjb3VudCBvbiB0aGUgZm9saW8gYW5kXFxuICAqIGhvbGQgaXRzIGxvY2suXFxuICAqL1xcbi1sb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHQgICAgYm9vbCByZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXFxuIHtcXG4tXFx0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xcbitcXHRpZiAoX19yZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgcmVjbGFpbWVkLCB0YXJnZXRfbWVtY2cpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFVuZnJlZXppbmcgdGhlIHJlZmNvdW50IHdpdGggMSBlZmZlY3RpdmVseVxcbiBcXHRcXHQgKiBkcm9wcyB0aGUgcGFnZWNhY2hlIHJlZiBmb3IgdXMgd2l0aG91dCByZXF1aXJpbmcgYW5vdGhlclxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IDc2MWNkNjk5ZTBhM2UuLmEzNTY3MWU4MzdmODkgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMTAwMCw4ICsxMDAwLDggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcbiBcXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbi1cXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcbitcXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxcbitcXHRcXHRcXHRcXHRcXHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XFxuIFxcdHB1dF9zd2FwX2RldmljZShzaSk7XFxuIFxcbiBcXHQvKlxcbkBAIC0xMDQ1LDggKzEwNDUsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHQvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovXFxuIFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbiBcXG4tXFx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXFxuLVxcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcXG4rXFx0Zm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xcbiBcXG4gXFx0Lyogc3RhcnQgd3JpdGViYWNrICovXFxuIFxcdF9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo0OTo1My40MDY2ODA4MDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNTgxOTMyNDE4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gICAgXCJyZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhICdkcm9wYmVoaW5kJyBtZWNoYW5pc20gZm9yIHN3YXAgY2FjaGUgZm9saW9zIGR1cmluZyB6c3dhcCB3cml0ZWJhY2sgdG8gYXZvaWQgcHV0dGluZyB0aGVtIG9uIHRoZSBMUlUgbGlzdC4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGFuZCBhZGRzIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCB3aGljaCB1c2VzIGEgd29ya3F1ZXVlIHRvIGRyb3AgZm9saW9zIGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNTSBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NjJjODQ3ZDU0ZjNjY2I5NmNiNDc5N2UzMjc5YWQ0ODM2ZmJlYjE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTk6NDk6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jXG5pbmRleCA5ZDhmNjNlMmZkMWFiLi43OTQyNGJiZWUxYjBmIDEwMDY0NFxuLS0tIGEvZnMvc3BsaWNlLmNcbisrKyBiL2ZzL3NwbGljZS5jXG5AQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgYm9vbCBwYWdlX2NhY2hlX3BpcGVfYnVmX3RyeV9zdGVhbChzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHQgKiBJZiB3ZSBzdWNjZWVkZWQgaW4gcmVtb3ZpbmcgdGhlIG1hcHBpbmcsIHNldCBMUlUgZmxhZ1xuIFx0XHQgKiBhbmQgcmV0dXJuIGdvb2QuXG4gXHRcdCAqL1xuLVx0XHRpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8pKSB7XG4rXHRcdGlmIChyZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpKSB7XG4gXHRcdFx0YnVmLVx1MDAzZWZsYWdzIHw9IFBJUEVfQlVGX0ZMQUdfTFJVO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggOGYwZjY4ZTI0NWJhYS4uYmRhZmZjMGQxZWYzMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTM3Myw3ICszNzMsOCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCk7XG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xuLWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK2xvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdCAgICBib29sIHJlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbiBleHRlcm4gaW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG5AQCAtNDY1LDYgKzQ2Niw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XG4gICovXG4gYm9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4rdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK1xuIC8qIEFsbG9jYXRlIC8gZnJlZSAoaGliZXJuYXRpb24pIGV4Y2x1c2l2ZSBlbnRyaWVzICovXG4gc3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTtcbiB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcbkBAIC00NzUsNiArNDc4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4gfVxuIFxuICNlbHNlIC8qIENPTkZJR19TV0FQICovXG4rc3RhdGljIGlubGluZSB2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge31cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCBkNzIxOTg2ZDVmNDY1Li4xNjQ3OTYxYzViYTIwIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjg2LDYgKzE2ODYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpO1xuICAqL1xuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbitcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xuK1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiBcbiBcdC8qXG5AQCAtMTY5NSw3ICsxNjk3LDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cbiBcdCAqL1xuIFx0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbitcdC8qXG4rXHQgKiBEcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW9zIGFyZSBvZmYtTFJVLCBzbyB3ZSBtdXN0IHByZXZlbnQgYSByYWNpbmdcbitcdCAqIHN3YXBpbiBmcm9tIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBrZWVwaW5nIGl0XG4rXHQgKiBvZmYtTFJVOiB0aGUgd3JpdGViYWNrIGZsYWcgYWxsb3dzIHRoYXQuIEFmdGVyd2FyZHMgYSBzd2FwaW4gbWF5IHdpblxuK1x0ICogdGhlIHJhY2UsIGJ1dCB0aGUgZm9saW8gaXMgYWxyZWFkeSBxdWV1ZWQgYW5kIHRoZSB3b3JrZXIgcHV0cyBpdCBiYWNrXG4rXHQgKiBvbiB0aGUgTFJVIGluIHRoYXQgY2FzZS5cbitcdCAqL1xuK1x0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcbitcbiBcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG4rXG4rXHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XG4rXHRcdHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMwNCw5ICszMDQsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDljM2E1Y2Y5OTc3ODYuLmI5M2RkNjA3ZDI0YzYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTE2LDYgKzE2LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWlncmF0ZS5oXHUwMDNlXG5AQCAtNDgzLDEzICs0ODUsMTEgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIFxuLVx0LyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi9cbi1cdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbiBcbiAvKipcbi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbisgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuICAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4gICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcbiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVyb1xuQEAgLTUwMSwxMyArNTAxLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuICAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnlcbiAgKiBAdGFyZ19lbnRyeSBtdXN0IGhhdmUgYSBub24temVybyBzd2FwIGNvdW50IChzd2FwcGVkIG91dCkuXG4gICpcbisgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlclxuKyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZVxuKyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLlxuKyAqXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuXG4gICogUmV0dXJuOiBSZXR1cm5zIHRoZSBmb2xpbyBpZiBhbGxvY2F0aW9uIHN1Y2NlZWRlZCBhbmQgZm9saW8gaXMgaW4gdGhlIHN3YXBcbiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLlxuICAqL1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4rc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuK1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiB7XG4gXHRpbnQgb3JkZXIsIGVycjtcbiBcdHN0cnVjdCBmb2xpbyAqcmV0O1xuQEAgLTUzNSw2ICs1MzksOTggQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGxpc3RfaGVhZCwgc3dhcF9kcm9wYmVoaW5kX2xsaXN0KTtcbitcbitzdGF0aWMgYm9vbCBzd2FwX2Ryb3BiZWhpbmRfZHJvcF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGJvb2wgZHJvcHBlZCA9IGZhbHNlO1xuK1xuK1x0Zm9saW9fbG9jayhmb2xpbyk7XG4rXG4rXHQvKiBUaGUgZm9saW8gd2FzIGFsbG9jYXRlZCBvZmYgdGhlIExSVSBhbmQgbm90aGluZyByZS1hZGRzIGl0IGhlcmUuICovXG4rXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbitcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKVxuK1x0XHRtZW1jZyA9IE5VTEw7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdC8qXG4rXHQgKiBHYXRlIHJlbW92ZV9tYXBwaW5nKCkgb24gZm9saW9fdGVzdF9zd2FwY2FjaGUoKTogYSByYWNpbmcgc3dhcGluIG1heVxuK1x0ICogaGF2ZSBmcmVlZCB0aGUgc3dhcCBzbG90IChmb2xpb19mcmVlX3N3YXAoKSkgYW5kIGRyb3BwZWQgdGhlIGZvbGlvIGZyb21cbitcdCAqIHRoZSBjYWNoZSwgYW5kIHJlbW92ZV9tYXBwaW5nKCkgbXVzdCBub3QgcnVuIG9uIGEgbm9uLXN3YXBjYWNoZSBmb2xpb1xuK1x0ICogKGl0IHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJ3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLlxuK1x0ICovXG4rXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHJlbW92ZV9tYXBwaW5nKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby1cdTAwM2Vzd2FwKSwgZm9saW8sIHRydWUsIG1lbWNnKSkge1xuK1x0XHRkcm9wcGVkID0gdHJ1ZTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqL1xuK1x0XHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcbitcdFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4rXHR9XG4rXG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rXG4rXHRmb2xpb191bmxvY2soZm9saW8pO1xuK1x0aWYgKCFkcm9wcGVkKVxuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0cmV0dXJuIGRyb3BwZWQ7XG4rfVxuK1xuKy8qKlxuKyAqIHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvIC0gZnJlZSBhIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpbyBpbnRvIGEgYmF0Y2hcbisgKiBAZm9saW86IHRoZSBvZmYtTFJVIGZvbGlvIHdob3NlIHdyaXRlYmFjayBoYXMgY29tcGxldGVkXG4rICogQGZiYXRjaDogYmF0Y2ggb2YgZm9saW9zIHRvIGZyZWUsIGZsdXNoZWQgd2hlbiBmdWxsXG4rICovXG4rc3RhdGljIHZvaWQgc3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaClcbit7XG4rXHRpZiAoc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW8oZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fYmF0Y2hfYWRkKGZiYXRjaCwgZm9saW8pKVxuK1x0XHRmb2xpb3NfcHV0KGZiYXRjaCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHN3YXBfZHJvcGJlaGluZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBmb2xpb19iYXRjaCBmYmF0Y2g7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcbitcdGludCBjcHU7XG4rXG4rXHRmb2xpb19iYXRjaF9pbml0KFx1MDAyNmZiYXRjaCk7XG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4rXHRcdHBvcyA9IGxsaXN0X2RlbF9hbGwocGVyX2NwdV9wdHIoXHUwMDI2c3dhcF9kcm9wYmVoaW5kX2xsaXN0LCBjcHUpKTtcbitcdFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIHBvcykge1xuK1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilwb3MsXG4rXHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdFx0c3dhcF9kcm9wYmVoaW5kX2ZyZWVfYmF0Y2hfZm9saW8oZm9saW8sIFx1MDAyNmZiYXRjaCk7XG4rXHRcdH1cbitcdH1cbitcdGlmIChmYmF0Y2gubnIpXG4rXHRcdGZvbGlvc19wdXQoXHUwMDI2ZmJhdGNoKTtcbit9XG4rXG4rc3RhdGljIERFQ0xBUkVfV09SSyhzd2FwX2Ryb3BiZWhpbmRfd29yaywgc3dhcF9kcm9wYmVoaW5kX3dvcmtmbik7XG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzd2FwX2Ryb3BiZWhpbmRfd3E7XG4rXG4rdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0bGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKVx1MDAyNmZvbGlvLVx1MDAzZWxydSxcbitcdFx0ICByYXdfY3B1X3B0cihcdTAwMjZzd2FwX2Ryb3BiZWhpbmRfbGxpc3QpKTtcbitcdHF1ZXVlX3dvcmsoc3dhcF9kcm9wYmVoaW5kX3dxLCBcdTAwMjZzd2FwX2Ryb3BiZWhpbmRfd29yayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IHN3YXBfZHJvcGJlaGluZF9pbml0KHZvaWQpXG4re1xuK1x0c3dhcF9kcm9wYmVoaW5kX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwic3dhcF9kcm9wYmVoaW5kXCIsXG4rXHRcdFx0XHRcdCAgICAgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDApO1xuK1x0aWYgKCFzd2FwX2Ryb3BiZWhpbmRfd3EpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0cmV0dXJuIDA7XG4rfVxuK2NvcmVfaW5pdGNhbGwoc3dhcF9kcm9wYmVoaW5kX2luaXQpO1xuK1xuIC8qXG4gICogSWYgd2UgYXJlIHRoZSBvbmx5IHVzZXIsIHRoZW4gdHJ5IHRvIGZyZWUgdXAgdGhlIHN3YXAgY2FjaGUuXG4gICpcbkBAIC02NDMsMTIgKzczOSwxMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgcGx1Zyk7XG4gXHRpZiAocmVhZGFoZWFkKSB7XG4gXHRcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xuQEAgLTY4MywxMiArNzgwLDEzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZvbGlvO1xuIFxuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbmRpZmYgLS1naXQgYS9tbS90cnVuY2F0ZS5jIGIvbW0vdHJ1bmNhdGUuY1xuaW5kZXggYjU4YmE5NDBiZTQ3NC4uMzdmN2Q4Mjc4YzFjZCAxMDA2NDRcbi0tLSBhL21tL3RydW5jYXRlLmNcbisrKyBiL21tL3RydW5jYXRlLmNcbkBAIC0zMzYsNyArMzM2LDcgQEAgbG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKCFmaWxlbWFwX3JlbGVhc2VfZm9saW8oZm9saW8sIDApKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiByZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbyk7XG4rXHRyZXR1cm4gcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTY3MDhkMWQyZGZkNS4uYzQwNTEzZTBiNTBiMiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTc4NCwxNyArNzg0LDI0IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAgKiByZW1vdmVfbWFwcGluZygpIC0gQXR0ZW1wdCB0byByZW1vdmUgYSBmb2xpbyBmcm9tIGl0cyBtYXBwaW5nLlxuICAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS5cbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byByZW1vdmUuXG4rICogQHJlY2xhaW1lZDogV2hldGhlciB0aGUgZm9saW8gaXMgYmVpbmcgcmVjbGFpbWVkIChyZWNvcmQgYSBzaGFkb3cpLlxuKyAqIEB0YXJnZXRfbWVtY2c6IFRoZSBtZW1jZyB0byBjaGFyZ2UgdGhlIGV2aWN0aW9uIHNoYWRvdyB0byB3aGVuIEByZWNsYWltZWQ7XG4rICogICAgICAgICAgICAgICAgdGhlIGNhbGxlciBtdXN0IGtlZXAgaXQgYWxpdmUgYWNyb3NzIHRoZSBjYWxsLiBJZ25vcmVkIChtYXlcbisgKiAgICAgICAgICAgICAgICBiZSBOVUxMKSB3aGVuIEByZWNsYWltZWQgaXMgZmFsc2UuXG4gICpcbiAgKiBJZiB0aGUgZm9saW8gaXMgZGlydHksIHVuZGVyIHdyaXRlYmFjayBvciBpZiBzb21lb25lIGVsc2UgaGFzIGEgcmVmXG4tICogb24gaXQsIHJlbW92YWwgd2lsbCBmYWlsLlxuKyAqIG9uIGl0LCByZW1vdmFsIHdpbGwgZmFpbC4gV2hlbiBAcmVjbGFpbWVkIGlzIHRydWUsIGEgd29ya2luZ3NldCBldmljdGlvblxuKyAqIHNoYWRvdyBpcyBzdG9yZWQgKGxpa2UgcGFnZSByZWNsYWltIGRvZXMpIHNvIHRoYXQgYSBsYXRlciByZWZhdWx0IGNhbiBiZVxuKyAqIGRldGVjdGVkIGFuZCB0aGUgZm9saW8gcmUtYWN0aXZhdGVkLlxuICAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpb1xuICAqIGNvdWxkIG5vdCBiZSByZW1vdmVkLlxuICAqIENvbnRleHQ6IFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgYSBzaW5nbGUgcmVmY291bnQgb24gdGhlIGZvbGlvIGFuZFxuICAqIGhvbGQgaXRzIGxvY2suXG4gICovXG4tbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbitsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHQgICAgYm9vbCByZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXG4ge1xuLVx0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xuK1x0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHlcbiBcdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggNzYxY2Q2OTllMGEzZS4uYTM1NjcxZTgzN2Y4OSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0xMDAwLDggKzEwMDAsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4tXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbi1cdFx0XHRcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcbitcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4rXHRcdFx0XHRcdCBOT19JTlRFUkxFQVZFX0lOREVYKTtcbiBcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHQvKlxuQEAgLTEwNDUsOCArMTA0NSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHQvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovXG4gXHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbiBcbi1cdC8qIG1vdmUgaXQgdG8gdGhlIHRhaWwgb2YgdGhlIGluYWN0aXZlIGxpc3QgYWZ0ZXIgZW5kX3dyaXRlYmFjayAqL1xuLVx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xuK1x0Zm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4gXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjQ5OjUzLjQwNjY4MjUwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NDYwMTg1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQncyBtZXNzaW5nIHdpdGggaG93IHN3YXAgY2FjaGUgZm9saW9zIGFyZSBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgenN3YXAgd3JpdGViYWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyBjYXJlZnVsIGF0dGVudGlvbi4gVGhlIHBhdGNoIHRvdWNoZXMgY3JpdGljYWwgYml0cyBvZiB0aGUga2VybmVsOiBgZnMvc3BsaWNlLmNgLCBgaW5jbHVkZS9saW51eC9zd2FwLmhgLCBgbW0vZmlsZW1hcC5jYCwgYG1tL3N3YXAuaGAsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vdHJ1bmNhdGUuY2AsIGBtbS92bXNjYW4uY2AsIGFuZCwgY3J1Y2lhbGx5LCBgbW0venN3YXAuY2AuIFRoaXMgaXNuJ3Qgc29tZSBtaW5vciB0d2VhazsgaXQncyByaWdodCBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBhIFwiZHJvcGJlaGluZFwiIG1lY2hhbmlzbSBpcyBiZWluZyBpbnRyb2R1Y2VkIGZvciB6c3dhcCB3cml0ZWJhY2suIFRoaXMgaW52b2x2ZXMgYSBuZXcgZnVuY3Rpb24sIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgd2hpY2ggd2lsbCB1c2UgYSB3b3JrcXVldWUsIGBzd2FwX2Ryb3BiZWhpbmRfd3FgLCB0byBwcm9jZXNzIGZvbGlvcyB0aGF0IGhhdmUgYmVlbiB3cml0dGVuIGJhY2sgZnJvbSB6c3dhcCBhbmQgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGRyb3BwZWQgZnJvbSB0aGUgc3dhcCBjYWNoZSwgcmF0aGVyIHRoYW4gYmVpbmcgcHV0IGJhY2sgb24gdGhlIExSVSBsaXN0LiBTbWFydC4gSXQgYWxzbyBhbHRlcnMgYHJlbW92ZV9tYXBwaW5nYCB0byBhY2NlcHQgYHJlY2xhaW1lZGAgYW5kIGB0YXJnZXRfbWVtY2dgIGFyZ3VtZW50cywgYW5kIG1vZGlmaWVzIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AgdG8gdXNlIHRoZSBuZXcgXCJkcm9wYmVoaW5kXCIgbG9naWMuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzaWduaWZpY2FudCBvbmUuIE15IGZpcnN0IGFjdGlvbj8gVGhpcyBuZWVkcyBmdXp6aW5nLiBBbmQgcHJvYmFibHkgc29tZSBoZWF2eS1kdXR5IHRlc3Rpbmcgb24gYSB2YXJpZXR5IG9mIHdvcmtsb2Fkcy5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IHN5bWJvbHM6IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgYHN3YXBfZHJvcGJlaGluZF93b3JrZm5gLCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYHJlbW92ZV9tYXBwaW5nYCwgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGVzZSBpbnRpbWF0ZWx5LlxuXG5Db25maWctd2lzZSwgaXQncyBjbGVhciB0aGF0IGBDT05GSUdfWlNXQVBgIGFuZCBgQ09ORklHX1NXQVBgIGFyZSByZXF1aXJlZC5cblxuTm93LCBJJ20gZ29pbmcgdG8gY2hlY2sgaWYgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgc3RhdGljIG9yIG5vdCBiZWNhdXNlIGl0J3MgYWx3YXlzIGdvb2QgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhvc2UgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gdXNpbmcgYGdyZXBwZXJgLi4uIEFoLCB5ZXMsIGl0J3Mgc3RhdGljIHdpdGhpbiBgbW0venN3YXAuY2AuIFRoaXMgbWVhbnMgaXQncyBpbnRlcm5hbCB0byB0aGF0IGZpbGUsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBub3cgdGhhdCBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgaXMgKm5vdCogc3RhdGljLCBzbyBpdCdzIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgZmlsZS5cblxuSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgd2hlcmUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgY2FsbGVkIGZyb20uIEkgd2FudCB0byBzZWUgaWYgaXQncyBjYWxsZWQgZnJvbSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGNvdWxkIGJlIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBjaGFuZ2UgaW50ZWdyYXRlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDowMi4zNTI3MDMyMDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MzI0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05ODYtICovXFxubW0venN3YXAuYzo5ODc6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTk4OC1cXHRcXHRcXHRcXHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jPTEwODc9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTExMC1cXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXFxubW0venN3YXAuYzoxMTExOlxcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcXG5tbS96c3dhcC5jLTExMTItXFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnknc1xcbi0tXFxubW0venN3YXAuYy0xMTQ1LVxcbm1tL3pzd2FwLmM6MTE0NjpcXHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XFxubW0venN3YXAuYy0xMTQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDowMi40MDE0NDE3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODg5MzAyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ29udHJvbGxlciBDYWxsYmFjayoqXG5cblJpZ2h0LCBzbyBgc2hyaW5rX21lbWNnX2NiYCBpcyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgenN3YXAgbGF5ZXIuIFRoZSBmaXJzdCBjbHVlIGlzIHRoYXQgYHNocmlua19tZW1jZ19jYmAgY2FsbHMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoYXQncyBpbXBvcnRhbnQuIEl0IHN1Z2dlc3RzIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBzb21laG93IGludm9sdmVkIGluIHRyaWdnZXJpbmcgb3IgbWFuYWdpbmcgdGhlIHdyaXRpbmcgYmFjayBvZiBwYWdlcyB0byB6c3dhcC4gTWFrZXMgc2Vuc2U7IGBzaHJpbmtgIGltcGxpZXMgd2UncmUgdHJ5aW5nIHRvIGZyZWUgdXAgbWVtb3J5LlxuXG5UaGUgZmFjdCB0aGF0IGBzaHJpbmtfbWVtY2dfY2JgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGlzIGFsc28gYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoYXQgbGltaXRzIGl0cyBzY29wZSB0byB0aGUgY29tcGlsYXRpb24gdW5pdCBpdCdzIGRlZmluZWQgaW4uIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGlzLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiB3aGF0IGV4YWN0bHkgaXMgY2FsbGluZyB0aGlzIGBzaHJpbmtfbWVtY2dfY2JgIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsZXJzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgcHVycG9zZSBhbmQgY29udGV4dCBvZiB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIFRoaXMgd291bGQgbGlrZWx5IGJlIGZvdW5kIGluIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDowNi4xOTAzNzQxODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NTI2NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX21lbWNnX2NiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtMTA4Ni0gKi9cXG5tbS96c3dhcC5jOjEwODc6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG5tbS96c3dhcC5jLTEwODgtXFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmFyZylcXG4tLVxcbm1tL3pzd2FwLmM9MTE2OD1zdGF0aWMgdW5zaWduZWQgbG9uZyB6c3dhcF9zaHJpbmtlcl9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuLS1cXG5tbS96c3dhcC5jLTExNzktXFxubW0venN3YXAuYzoxMTgwOlxcdHNocmlua19yZXQgPSBsaXN0X2xydV9zaHJpbmtfd2FsayhcXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcXHUwMDI2c2hyaW5rX21lbWNnX2NiLFxcbm1tL3pzd2FwLmMtMTE4MS1cXHRcXHRcXHUwMDI2ZW5jb3VudGVyZWRfcGFnZV9pbl9zd2FwY2FjaGUpO1xcbi0tXFxubW0venN3YXAuYz0xMjc3PXN0YXRpYyBpbnQgc2hyaW5rX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3pzd2FwLmMtMTI5NC1cXHRcXHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLFxcbm1tL3pzd2FwLmM6MTI5NTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXFx1MDAyNm5yX3RvX3dhbGspO1xcbm1tL3pzd2FwLmMtMTI5Ni1cXHRcXHRzY2FubmVkICs9IDEgLSBucl90b193YWxrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDowNi4yMzkzMzMzMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkwODc3NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYHNocmlua19tZW1jZ2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIGNhbGxzIHRoYXQgbGVhZHMgdG8gYHNocmlua19tZW1jZ2AuIFRoZSBjb2RlIHNob3dzIHRoYXQgYm90aCBgenN3YXBfc2hyaW5rZXJfc2NhbmAgYW5kIGBzaHJpbmtfbWVtY2dgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhleSBhcmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIHNvdXJjZSBmaWxlcywgd2hpY2ggaGVscHMgd2l0aCBtb2R1bGFyaXR5LCBidXQgYWxzbyBtYWtlcyB0cmFjaW5nIHRoZSBjYWxsaW5nIHBhdGggYSBiaXQgbW9yZSBpbXBvcnRhbnQuIFRoZSBrZXkgdGhpbmcgSSBzZWUgaXMgdGhhdCBgenN3YXBfc2hyaW5rZXJfc2NhbmAgZXhwbGljaXRseSBjYWxscyBgc2hyaW5rX21lbWNnYC4gTm93LCBJIG5lZWQgdG8ga25vdyB3aGF0IGVsc2UgY2FsbHMgYHNocmlua19tZW1jZ2AuIEZpZ3VyaW5nIG91dCB0aGUgdXBzdHJlYW0gY2FsbCBzaXRlcyBmb3IgYHNocmlua19tZW1jZ2AgaXMgbXkgbmV4dCBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYyNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjUwOjA5LjkzMDIxMzg5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTcyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19tZW1jZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9OTg3PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwODYtICovXFxubW0venN3YXAuYzoxMDg3OnN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxubW0venN3YXAuYy0xMDg4LVxcdFxcdFxcdFxcdCAgICAgICB2b2lkICphcmcpXFxuLS1cXG5tbS96c3dhcC5jPTExNjg9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbi0tXFxubW0venN3YXAuYy0xMTc5LVxcbm1tL3pzd2FwLmM6MTE4MDpcXHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBzYywgXFx1MDAyNnNocmlua19tZW1jZ19jYixcXG5tbS96c3dhcC5jLTExODEtXFx0XFx0XFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTI2MT1zdGF0aWMgc3RydWN0IHNocmlua2VyICp6c3dhcF9hbGxvY19zaHJpbmtlcih2b2lkKVxcbi0tXFxubW0venN3YXAuYy0xMjc2LVxcbm1tL3pzd2FwLmM6MTI3NzpzdGF0aWMgaW50IHNocmlua19tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0venN3YXAuYy0xMjc4LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTI5NC1cXHRcXHRzaHJ1bmsgKz0gbGlzdF9scnVfd2Fsa19vbmUoXFx1MDAyNnpzd2FwX2xpc3RfbHJ1LCBuaWQsIG1lbWNnLFxcbm1tL3pzd2FwLmM6MTI5NTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXFx1MDAyNm5yX3RvX3dhbGspO1xcbm1tL3pzd2FwLmMtMTI5Ni1cXHRcXHRzY2FubmVkICs9IDEgLSBucl90b193YWxrO1xcbi0tXFxubW0venN3YXAuYz0xMzA1PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xMzY5LVxcbm1tL3pzd2FwLmM6MTM3MDpcXHRcXHRyZXQgPSBzaHJpbmtfbWVtY2cobWVtY2cpO1xcbm1tL3pzd2FwLmMtMTM3MS1cXHRcXHQvKiBkcm9wIHRoZSBleHRyYSByZWZlcmVuY2UgKi9cXG4tLVxcbm1tL3pzd2FwLmM9MTQ3NT1ib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTE0OTMtXFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKG9iamNnKTtcXG5tbS96c3dhcC5jOjE0OTQ6XFx0XFx0aWYgKHNocmlua19tZW1jZyhtZW1jZykpIHtcXG5tbS96c3dhcC5jLTE0OTUtXFx0XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDowOS45NzgzOTA5NDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU5NzM5OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gWnN3YXAgYW5kIFN3YXAgQ2FjaGUgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gYHpzd2FwX3N0b3JlYCBpcyBjYWxsaW5nIGBzaHJpbmtfbWVtY2dgLiBUaGF0IG1ha2VzIHNlbnNlLCBwYXJ0IG9mIG1hbmFnaW5nIG1lbW9yeSBwcmVzc3VyZS4gQW5kIGl0J3MgZXhwb3J0ZWQsIHNvIGl0J3MgY2xlYXJseSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEdvb2QuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgYHJlbW92ZV9tYXBwaW5nYCBpcyBkb2luZyBpbiB0aGlzIGNvbnRleHQuIEl0J3MgYWxzbyBub24tc3RhdGljLCBzbyBpdCdzIGFjY2Vzc2libGUuIFRoaXMgbGlrZWx5IHBsYXlzIGEgcm9sZSBpbiBmcmVlaW5nIHVwIHJlc291cmNlcy5cblxuSG1tLCBsZXQncyBsb29rIGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBXYWl0IGEgbWludXRlLCBpcyB0aGF0ICphbHNvKiBub24tc3RhdGljPyBMZXQgbWUgZG91YmxlLWNoZWNrLi4uIFllcywgaXQncyBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBidXQgaXQncyBleHBvcnRlZC4gVGhpcyBzZWVtcyBpbXBvcnRhbnQuIEkgbmVlZCB0byBkaWcgaW50byBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgZWxlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDoxNC44MzgxMzM5NzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTk2MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcF9zdGF0ZS5jPTQwNT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy00OTEtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjQ5MjogKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy00OTMtICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MTEtICovXFxubW0vc3dhcF9zdGF0ZS5jOjUxMjpzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxubW0vc3dhcF9zdGF0ZS5jLTUxMy1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTczMj1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy03NDEtXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbm1tL3N3YXBfc3RhdGUuYzo3NDI6XFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy03NDMtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9Nzc0PXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNzgyLVxcdFxcdFxcdHJldHVybiBmb2xpbztcXG5tbS9zd2FwX3N0YXRlLmM6NzgzOlxcdFxcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy03ODQtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjUwOjE0Ljg4NjMzNTIyOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ2NDk1NDE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIENvZGUgSW5zcGVjdGlvbjogVGhlIE5vbi1TdGF0aWMgQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBhIGZldyB0aGluZ3MgYXJlIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lLiBJIHNlZSB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzbid0IGRlY2xhcmVkIHN0YXRpYy4gVGhhdCdzIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSByZWQgZmxhZyBpbiBpdHNlbGYuIEhvd2V2ZXIsIGl0J3Mgbm90IGV4cG9ydGVkIGVpdGhlciwgd2hpY2ggaXMgYSBiaXQgb2RkLiBUaGVuIEkgc2VlIHRoYXQgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGlzIGFsc28gbm9uLXN0YXRpYy4gSW50ZXJlc3RpbmcuIFRoZW4gYHN3YXBpbl9zeW5jYCwgYW5kIGB6c3dhcF9zdG9yZWAuIEZpbmFsbHksIGByZW1vdmVfbWFwcGluZ2AuIFRoZXNlIGFsbCBzaGFyZSB0aGUgc2FtZSBhdHRyaWJ1dGUuXG5cbkdpdmVuIHRoaXMgcGF0dGVybiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHdoZXRoZXIgdGhleSBzaG91bGQgb3Igc2hvdWxkbid0IGJlIHN0YXRpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkncmUgbm90LiBUaGV5IGFsbCBzZWVtIHRvIHJlbGF0ZSB0byB0aGUgc3dhcCBzdWJzeXN0ZW0gaW4gc29tZSB3YXkuIExldCdzIHNlZS4uLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlciBsb29rIGF0IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYC4gTGV0J3MgY2hlY2sgdGhlIGNvZGUgZm9yIGl0IGluIGBtbS9zd2FwX3N0YXRlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM0NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDo0NS4zNTEyOTIxMzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Mzc1Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcF9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYz02MTU9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzd2FwX2Ryb3BiZWhpbmRfd3E7XFxubW0vc3dhcF9zdGF0ZS5jLTYxNi1cXG5tbS9zd2FwX3N0YXRlLmM6NjE3OnZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBfc3RhdGUuYy02MTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MDo0NS40MDg2NzQyNjZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5MjI1MDAyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEtlcm5lbCBJbnRlcm5hbHMqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGZ1bmN0aW9uLiBJcyBpdCBhY3R1YWxseSBleHBvcnRlZD8gVGhhdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEtub3dpbmcgaWYgaXQncyBleHBvcnRlZCBkaWN0YXRlcyBzbyBtdWNoIGFib3V0IGhvdyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0LCBpZiBhdCBhbGwuIElzIGl0IGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgbW9kdWxlcyB0byBjYWxsLCBvciBpcyBpdCBpbnRlbmRlZCBzb2xlbHkgZm9yIGludGVybmFsIGtlcm5lbCB1c2U/IFRoYXQgZGV0YWlsIGltcGFjdHMgc28gbXVjaCBvZiBteSBhYmlsaXR5IHRvLCBmb3IgZXhhbXBsZSwgYnVpbGQgYSBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIG9yIGV4cGxvcmUgaG93IGZvbGlvIHdyaXRlYmFjayBiZWhhdmlvciB3b3Jrcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiBgZHJvcGJlaGluZGAgd2l0aCBgd3JpdGViYWNrYC4gSWYgaXQncyAqbm90KiBleHBvcnRlZCwgSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIGFsdGVybmF0aXZlcyBvciBjb25zaWRlciB3aGV0aGVyIGl0J3MgcG9zc2libGUgdG8gaW5kaXJlY3RseSBhY2hpZXZlIHRoZSBkZXNpcmVkIGJlaGF2aW9yIHRocm91Z2ggb3RoZXIsIG9mZmljaWFsbHkgc3VwcG9ydGVkIEFQSXMgYW5kIHN0cnVjdHVyZXMuIFRoZSBleHBvcnQgc3RhdHVzIGltbWVkaWF0ZWx5IHNpZ25hbHMgdGhlIGJvdW5kYXJpZXMgb2YgbXkgcG9zc2libGUgZXhwZXJpbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gZGV0ZXJtaW5lIGl0cyBleHBvcnQgc3RhdHVzIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTE6MTMuMzMxMTc3NDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTg4NTk1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTE6MTMuMzg2Mzc4NzE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODk0NTY4NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGU6IEEgUXVpY2sgRGlhZ25vc3RpYyoqXG5cbkhtbSwgdGhlIHNpdHVhdGlvbiBpc24ndCAqc3RhdGljKiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgYSBmaXJtIG5lZ2F0aXZlLCBidXQgdGhlIGNvbnRleHQgaW5kaWNhdGVzIGEgZHluYW1pYyBlbGVtZW50LiBUaGlzIG1lYW5zIHRoaW5ncyBhcmUgcG90ZW50aWFsbHkgY2hhbmdpbmcgb3IgbXV0YWJsZS4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGEgc3BlY2lmaWMgcGllY2Ugb2YgdGhlIHB1enpsZTogdGhlIGByZW1vdmVfbWFwcGluZ2AgZnVuY3Rpb24gb3IgbWV0aG9kLiBJdCBpcyBhIGxvZ2ljYWwgbmV4dCBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG5vbi1zdGF0aWMgYmVoYXZpb3IgSSdtIG9ic2VydmluZyBhbmQgaXMgdGhlIGxvZ2ljYWwgbmV4dCBwaWVjZSB0byBleGFtaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjUxOjUwLjI4MDk1MDU3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzMTEwOTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnJlbW92ZV9tYXBwaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTE6NTAuMzU0MjcxOTQ2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDgwMTgzOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYHpzd2FwX3N0b3JlYCoqXG5cbk5vLCB0aGF0J3Mgbm90IGl0LiBPa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIHRha2UgYSBsb29rIGF0IGB6c3dhcF9zdG9yZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByb290IGNhdXNlIGFuZCBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGUgcHJvYmxlbSBsaWVzIGVsc2V3aGVyZS4gSG93ZXZlciwgc2luY2UgSSB3YXMgdGhpbmtpbmcgaW4gdGhpcyBnZW5lcmFsIGFyZWEsIGNoZWNraW5nIGB6c3dhcF9zdG9yZWAgY291bGQgZ2l2ZSBtZSBhIGNsdWUgb2Ygd2h5IHRoZSByZXN1bHRzIHdlcmUgbmVnYXRpdmUgYW5kIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEl0J3MgYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBvYnZpb3VzIHRoZXJlIGJlZm9yZSBJIGRpdmUgaW50byBtb3JlIGNvbXBsZXggYXJlYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjgwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTI6NTEuNDM0NDYwMDI0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY3NDY0NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qenN3YXBfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1Mjo1MS40ODkxNDU0NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzExMTkyODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBTd2FwIFN1YnN5c3RlbSoqXG5cbk5vLiBKdXN04oCmIG5vLiBUaGF0IGZpcnN0IGxpbmUsIHRoYXQncyB3aGF0IEknbSB0aGlua2luZy4gVGhpcyBkb2Vzbid0IGZlZWwgcmlnaHQuXG5cbldhaXQsIGhvbGQgb24gYSBzZWNvbmQuIExldCBtZSBiYWNrIHVwIGFuZCB0aGluayB0aGlzIHRocm91Z2guIElzIGB6c3dhcF9zdG9yZWAgYWN0dWFsbHkgY2FsbGVkIGZyb20gc29tZXRoaW5nIGxpa2UgYGFkZF90b19zd2FwYCwgb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIGluIHRoZSBzd2FwIHN1YnN5c3RlbT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbiByaWdodCBub3cuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MzowOC42MDEwNzc0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwNDcwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfaW8uYz0yNTE9aW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnN3YXBfcGx1ZylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0yODQtXFxubW0vcGFnZV9pby5jOjI4NTpcXHRpZiAoenN3YXBfc3RvcmUoZm9saW8pKSB7XFxubW0vcGFnZV9pby5jLTI4Ni1cXHRcXHRjb3VudF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLCBNVEhQX1NUQVRfWlNXUE9VVCk7XFxuLS1cXG5tbS96c3dhcC5jLTQ2LS8qIFRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xcbm1tL3pzd2FwLmM6NDc6YXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNDgtLyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXFxubW0venN3YXAuYzo0OTpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNTAtXFxuLS1cXG5tbS96c3dhcC5jPTc2NT1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc3NC1cXHRpZiAoZW50cnktXFx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXFxubW0venN3YXAuYzo3NzU6XFx0XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtNzc2LVxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmM6Nzc3OlxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTc3OC19XFxuLS1cXG5tbS96c3dhcC5jPTkyND1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTk4MS0gKiB0byB0aGUgc3dhcCBkZXZpY2UuICBXZSBhcmUgYmFzaWNhbGx5IHJlc3VtaW5nIHRoZSBzYW1lIHN3YXBcXG5tbS96c3dhcC5jOjk4MjogKiB3cml0ZWJhY2sgcGF0aCB0aGF0IHdhcyBpbnRlcmNlcHRlZCB3aXRoIHRoZSB6c3dhcF9zdG9yZSgpXFxubW0venN3YXAuYy05ODMtICogaW4gdGhlIGZpcnN0IHBsYWNlLiAgQWZ0ZXIgdGhlIGZvbGlvIGhhcyBiZWVuIGRlY29tcHJlc3NlZCBpbnRvXFxuLS1cXG5tbS96c3dhcC5jPTExODk9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3pzd2FwLmMtMTIyMy1cXHRcXHRucl9iYWNraW5nID0genN3YXBfdG90YWxfcGFnZXMoKTtcXG5tbS96c3dhcC5jOjEyMjQ6XFx0XFx0bnJfc3RvcmVkID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTEyMjUtXFx0fVxcbi0tXFxubW0venN3YXAuYz0xMzA1PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xMzk0LVxcbm1tL3pzd2FwLmM6MTM5NTpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3pzd2FwLmMtMTM5Ni1cXHRcXHRcXHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL3pzd2FwLmMtMTQzMy1cXHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXFxubW0venN3YXAuYzoxNDM0OlxcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxcbm1tL3pzd2FwLmMtMTQzNS1cXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcXG4tLVxcbm1tL3pzd2FwLmMtMTQ0Mi1cXHR9XFxubW0venN3YXAuYzoxNDQzOlxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE0NDQtXFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbm1tL3pzd2FwLmM6MTQ0NTpcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNDQ2LVxcbi0tXFxubW0venN3YXAuYy0xNDc0LVxcbm1tL3pzd2FwLmM6MTQ3NTpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNDc2LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTUxOS1cXG5tbS96c3dhcC5jOjE1MjA6XFx0XFx0aWYgKCF6c3dhcF9zdG9yZV9wYWdlKHBhZ2UsIG9iamNnLCBwb29sKSlcXG5tbS96c3dhcC5jLTE1MjEtXFx0XFx0XFx0Z290byBwdXRfcG9vbDtcXG4tLVxcbm1tL3pzd2FwLmM9MTcwMD1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG5tbS96c3dhcC5jLTE3MDEte1xcbm1tL3pzd2FwLmM6MTcwMjpcXHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE3MDMtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS96c3dhcC5jPTE3MDc9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxubW0venN3YXAuYy0xNzA4LXtcXG5tbS96c3dhcC5jOjE3MDk6XFx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNzEwLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MzowOC42NTYxMzIxODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg5NTc4MzI0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGluIHRoZSBLZXJuZWwgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBmb2N1c2luZyBvbiBub24tc3RhdGljIGZ1bmN0aW9ucyBiZWNhdXNlIHRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBpbnRlcmFjdGluZyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cbkkndmUgYWxyZWFkeSBub3RlZCB0aGF0IGB6c3dhcF9zdG9yZWAgaXMgbm9uLXN0YXRpYyBhbmQgbGlua2VkIHRvIGBzd2FwX3dyaXRlb3V0YCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMaWtld2lzZSwgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGlzIG5vbi1zdGF0aWMgYW5kIGNhbGxlZCBmcm9tIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gVGhlbiwgdGhlcmUncyBgcmVtb3ZlX21hcHBpbmdgLCBub24tc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgcGFnZV9jYWNoZV9waXBlX2J1Zl90cnlfc3RlYWxgLCBgbWFwcGluZ19ldmljdF9mb2xpb2AsIGFuZCBgc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW9gLlxuXG5Ob3csIEknbSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIHRvIGV4YW1pbmUgdGhlc2UgZnVuY3Rpb25zIGNsb3NlbHkuIEkndmUgdGFrZW4gYSBsb29rIGF0IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpbiBgbW0vc3dhcF9zdGF0ZS5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBhIGZvbGlvIHRvIGEgbGlua2VkIGxpc3QgYW5kIHF1ZXVpbmcgYSB3b3JrIGl0ZW0uIFRoYXQncyBkZWZpbml0ZWx5IGludGVyZXN0aW5nOyBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5UaGVuLCBJJ20gY2hlY2tpbmcgYHJlbW92ZV9tYXBwaW5nYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaXMgYW5vdGhlciBjcml0aWNhbCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kLCBhcyBpdCdzIGRlYWxpbmcgd2l0aCBmcmVlaW5nIHVwIG1lbW9yeS4gSXQgdGFrZXMgYSBtYXBwaW5nLCBhIGZvbGlvLCBhIHJlY2xhaW1lZCBmbGFnLCBhbmQgYSB0YXJnZXQgbWVtY2cuXG5cbk5leHQsIEkndmUgbG9va2VkIGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGluIGBtbS9zd2FwX3N0YXRlLmNgLiBJdCBzZWVtcyBsaWtlIGEgY29yZSBmdW5jdGlvbiBmb3IgYWxsb2NhdGluZyBmb2xpbyBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgc3dhcCBjYWNoZS5cblxuSSd2ZSBhbHNvIHF1aWNrbHkgZGlzbWlzc2VkIGBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGJlY2F1c2UgdGhleSBhcmUgc3RhdGljIGFuZCBsZXNzIGxpa2VseSB0byBiZSB0aGUgcHJpbWFyeSBmb2N1cy5cblxuVGhlcmVmb3JlLCBteSBzaG9ydCBsaXN0IG9mIHRvcCBmb2N1cyBzeW1ib2xzIGFyZSBub3c6XG4tIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYFxuLSBgcmVtb3ZlX21hcHBpbmdgXG4tIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gXG5cbkZpbmFsbHksIEknbSBjaGVja2luZyB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBwb3NzaWJseSBsZXNzIG9idmlvdXMsIGNoYW5nZXMuIGBmb2xpb19lbmRfd3JpdGViYWNrYCBpcyBtb2RpZmllZCwgYnV0IEkga25vdyB0aGF0J3MgYSBoZWF2aWx5IHVzZWQgcGF0aCwgc28gSSBuZWVkIHRvIGJlIGNhdXRpb3VzIGFib3V0IHRoYXQgb25lLiBgcGFnZV9jYWNoZV9waXBlX2J1Zl90cnlfc3RlYWxgIGlzIHN0YXRpYy4gYG1hcHBpbmdfZXZpY3RfZm9saW9gIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBqdXN0IGNhbGxzIGByZW1vdmVfbWFwcGluZ2AsIHNvIGl0J3MgcHJvYmFibHkgbm90IHRoYXQgaW1wb3J0YW50LlxuXG5UbyBmaW5pc2gsIEknbGwgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbXBhY3QgdGhlIG1vZGlmaWVkIGZpbGVzLiBJIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfWlNXQVBgIGlzIG5lZWRlZCBmb3IgYG1tL3pzd2FwLmNgIGFuZCBgQ09ORklHX1NXQVBgIGZvciBgbW0vc3dhcF9zdGF0ZS5jYC4gSSB3aWxsIHRoZW4gZ28gb24gdG8gY2hlY2sgYG1tL01ha2VmaWxlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVudCBjb25maWcgb3B0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHZpZXcgb2Ygd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg3MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MzoyNy42MTM5Njc4MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTU2NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Nzg9b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcXHQrPSBkbWFwb29sLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTM6MjcuNjYyOTMwMTg0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mzk1NjM2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciB6c3dhcCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gbm90aW5nIGlzIHRoYXQgaWYgSSB3YW50IHRvIHVzZSBgenN3YXBgLCBJJ20gZ29pbmcgdG8gbmVlZCBib3RoIGBDT05GSUdfWlNXQVBgIGFuZCwgb2J2aW91c2x5LCB0aGUgYmFzaWMgYENPTkZJR19TV0FQYCBvcHRpb24gZW5hYmxlZCBpbiB0aGUga2VybmVsLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB0aGF0J3Mgd2hhdCBJJ2QgZXhwZWN0LiBOb3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYENPTkZJR19aU1dBUGAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVxdWlyZWQgcGllY2VzLiBEaWdnaW5nIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBhbHdheXMgdGhlIHJpZ2h0IGFwcHJvYWNoIGF0IHRoaXMgc3RhZ2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mzg5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTM6MzEuNTAyNDk3MDQ1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQ5MDkxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1MzozMS41NTU5OTE2NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY4NjM0ODUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgWlNXQVBgOlxuXG4qKkRlbHZpbmcgaW50byBaU1dBUCdzIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgWlNXQVBgIGluc2lkZSBhbmQgb3V0LCB3aGljaCBtZWFucyBhIGRlZXAgZGl2ZSBpbnRvIGl0cyBkZXBlbmRlbmNpZXMgaXMgdGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzLiBJJ20gdGhpbmtpbmcsIFwid2hhdCBleHRlcm5hbCBsaWJyYXJpZXMsIHNlcnZpY2VzLCBvciBrZXJuZWwgbW9kdWxlcyBpcyB0aGlzIHRoaW5nIGxlYW5pbmcgb24/XCIgQXJlIHdlIHRhbGtpbmcgY29yZSBsaWJyYXJpZXMsIHBvdGVudGlhbGx5IGFub3RoZXIgcHJvamVjdCBvZiBlcXVhbCBzdGF0dXJlIHdpdGhpbiB0aGUgc3lzdGVtLCBvciBqdXN0IHNvbWV0aGluZyBzbWFsbCB0byBoYW5kbGUgYSBzcGVjaWZpYyBwcm9jZXNzP1xuXG5Lbm93aW5nIHRoZSBhbnN3ZXIgdG8gdGhhdCB3aWxsIGRldGVybWluZSBzbyBtdWNoLiBEb2VzIGl0IHJlcXVpcmUgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWw/IERvZXMgaXQgcHVsbCBpbiBzb21ldGhpbmcgZnJvbSBhbm90aGVyIGxpYnJhcnkgdGhhdCBjb3VsZCBicmVhayBpdCB3aXRoIGFuIHVwZGF0ZT8gSXMgdGhlcmUgYSBoaWRkZW4gZGVwZW5kZW5jeSBvbiBhIHBpZWNlIG9mIHRoZSBpbmZyYXN0cnVjdHVyZT8gVGhvc2UgYXJlIHRoZSBjcnVjaWFsIHF1ZXN0aW9ucyBJJ20gYXNraW5nIG15c2VsZi4gR290dGEgaWRlbnRpZnkgYW55IHBvdGVudGlhbCB3ZWFrIHBvaW50cyBpbiB0aGUgYXJjaGl0ZWN0dXJhbCBmb3VuZGF0aW9uIG9mIGBaU1dBUGAgcmlnaHQgbm93IGFuZCBnZXQgdGhvc2UgcG90ZW50aWFsIGNvbmZsaWN0cyBzcXVhcmVkIGF3YXkuIFRoaXMgaXMgYWJvdXQgc29saWRpZnlpbmcgbXkgdW5kZXJzdGFuZGluZywgbWFwcGluZyBvdXQgcG90ZW50aWFsIHJpc2tzLCBhbmQgcHJlcGFyaW5nIHRvIHRyb3VibGVzaG9vdC4gTGV0J3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1Mzo0Mi4yNDIzNDM3ODJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1Mzo0Mi4yNDI1MDI0MjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwMzczNjY1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKlpTV0FQLCBTV0FQLCBhbmQgRGVmYXVsdCBBY3RpdmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIFpTV0FQIHRoaW5nLCBhbmQgaXQncyBjbGVhcjogaXQncyBidWlsdCBvbiB0aGUgZm91bmRhdGlvbiBvZiByZWd1bGFyIFNXQVAuIFRoYXQncyBhIGZ1bmRhbWVudGFsIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gV2UncmUgZ29pbmcgdG8gbmVlZCBib3RoLiBNeSBpbnN0aW5jdCwgYmFzZWQgb24gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBiZW5lZml0cywgaXMgdG8gZW5hYmxlICpib3RoKiBaU1dBUCBhbmQgdGhlIHVuZGVybHlpbmcgU1dBUCBmdW5jdGlvbmFsaXR5LiBTZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGFwcHJvYWNoIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBjb21wcmVzc2lvbi5cblxuQW5kIHRoYXQgbGVhZHMgbWUgdG8gYW5vdGhlciB0aG91Z2h0LCB0aGUgYFpTV0FQX0RFRkFVTFRfT05gIG9wdGlvbi4gSXQgbWlnaHQgYmUgcHJ1ZGVudCB0byBleHBsb3JlIHRoYXQgZnVydGhlci4gSWYgd2Ugd2FudCB0aGlzIHRvIGJlIHVzZWQgZWZmZWN0aXZlbHksIHdlIG5lZWQgdG8gZW5zdXJlIGl0J3MgYWN0dWFsbHkgKnJ1bm5pbmcqIGFuZCBiZWluZyBsZXZlcmFnZWQgd2l0aG91dCByZXF1aXJpbmcgbWFudWFsIGludGVydmVudGlvbiBmcm9tIHRoZSBlbmQtdXNlci4gRW5zdXJpbmcgaXQncyBvbiBieSBkZWZhdWx0IGNvdWxkIGJlIHRoZSBrZXkgdG8gd2lkZXNwcmVhZCBhZG9wdGlvbiBhbmQgbWF4aW1pemluZyB0aGUgYWR2YW50YWdlcyBvZiBaU1dBUC4gTmVlZHMgYSBsaXR0bGUgbW9yZSByZXNlYXJjaCwgYnV0IGl0J3MgY2VydGFpbmx5IHNvbWV0aGluZyB0byBzdHJvbmdseSBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjUzOjU0LjI3OTg3MjQ1OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxcbiAgNDM6XFx0XFx0ICBjb21tYW5kIGxpbmUgJ3pzd2FwLmVuYWJsZWQ9JyBvcHRpb24uXFxuICA0NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTM6NTQuMjc5OTg0MDI4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MjMzMzE3MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFpzd2FwIFdyaXRlYmFjayBEcm9wYmVoaW5kIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoaXMgbmV3IFwiZHJvcGJlaGluZFwiIG1lY2hhbmlzbSBmb3Igc3dhcCBjYWNoZSBmb2xpb3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgc3RpY2tpbmcgdGhlc2UgZm9saW9zIGJhY2sgb24gdGhlIExSVSBsaXN0LCB3aGljaCBjb3VsZCBjYXVzZSB1bm5lY2Vzc2FyeSB0aHJhc2hpbmcuIFRoaXMgc291bmRzIGxpa2UgYSBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGJ1dCBhbHNvIGEgZGVmaW5pdGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGVuYWJsaW5nIGBaU1dBUGAsIGBTV0FQYCwgYW5kIGBaU1dBUF9ERUZBVUxUX09OYCBhcmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uLlxuXG5GdW5jdGlvbmFsbHksIEkgc2VlIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHNldmVyYWwga2V5IGFyZWFzOiBgbW0vdm1zY2FuLmNgLCBgbW0vdHJ1bmNhdGUuY2AsIGBmcy9zcGxpY2UuY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgYG1tL3pzd2FwLmNgLCBpbmRpY2F0aW5nIHRoaXMgaXMgbm90IGEgdHJpdmlhbCBjaGFuZ2UuXG5cbkkndmUgdGFrZW4gYSBsb29rIGF0IHNvbWUgb2YgdGhlIG1vZGlmaWVkIGFuZCBuZXcgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGByZW1vdmVfbWFwcGluZ2AgaW4gYG1tL3Ztc2Nhbi5jYCAoYW5kIGl0cyB1c2VzIGluIGBtbS90cnVuY2F0ZS5jYCwgYGZzL3NwbGljZS5jYCwgYW5kIGBtbS9zd2FwX3N0YXRlLmNgKSBpcyBkZWZpbml0ZWx5IG1vZGlmaWVkIGFzIHBhcnQgb2YgdGhpcyBjaGFuZ2UuIFRoZW4sIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBgbW0venN3YXAuY2AgaXMgYWxzbyBjaGFuZ2VkLiBBbmQgbGFzdGx5LCBhIGJyYW5kLW5ldyBmdW5jdGlvbiwgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCB3aGljaCBpcyBpbnRyb2R1Y2VkIGluIGBtbS9zd2FwX3N0YXRlLmNgIGJ1dCBjYWxsZWQgZnJvbSBgbW0vZmlsZW1hcC5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyBjZW50cmFsIHRvIHRoZSBjb3JlIFwiZHJvcGJlaGluZFwiIGZ1bmN0aW9uYWxpdHkuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIGNvcmUgTU0gYmVoYXZpb3IsIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIGFzIGZvY3VzIHN5bWJvbHMgdG8gdGFyZ2V0IHdpdGggdGhlIGZ1enplcjogYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgcmVtb3ZlX21hcHBpbmdgLCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEkndmUgY2hlY2tlZCBhbmQgdGhlc2UgZnVuY3Rpb25zLCB3aGlsZSBub3QgZXhwb3J0ZWQsIGFyZSBub24tc3RhdGljLCB3aGljaCBpcyBwZXJmZWN0IGZvciBmdXp6aW5nLlxuXG5UaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAzMCwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1NDoxMS41MTMzMDQ3N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NjE1NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9cIixcbiAgICBcInJlbW92ZV9tYXBwaW5nXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgJ2Ryb3BiZWhpbmQnIG1lY2hhbmlzbSBmb3Igc3dhcCBjYWNoZSBmb2xpb3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjayB0byBhdm9pZCBwdXR0aW5nIHRoZW0gb24gdGhlIExSVSBsaXN0LiBJdCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBsaWtlIGByZW1vdmVfbWFwcGluZ2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGFkZHMgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIHdoaWNoIHVzZXMgYSB3b3JrcXVldWUgdG8gZHJvcCBmb2xpb3MgZnJvbSB0aGUgc3dhcCBjYWNoZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1NIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gICAgXCJyZW1vdmVfbWFwcGluZ1wiLFxuICAgIFwiX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhICdkcm9wYmVoaW5kJyBtZWNoYW5pc20gZm9yIHN3YXAgY2FjaGUgZm9saW9zIGR1cmluZyB6c3dhcCB3cml0ZWJhY2sgdG8gYXZvaWQgcHV0dGluZyB0aGVtIG9uIHRoZSBMUlUgbGlzdC4gSXQgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGFuZCBhZGRzIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCB3aGljaCB1c2VzIGEgd29ya3F1ZXVlIHRvIGRyb3AgZm9saW9zIGZyb20gdGhlIHN3YXAgY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNTSBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1NDoxMS41OTk5MjY4ODlaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDAzMzc1NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTk6NTQ6MTEuNjAwNTMwMTM4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNDAyNzY2NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiwgd3JpdGViYWNrLCBhbmQgTFJVIG1hbmFnZW1lbnQgKGludHJvZHVjaW5nIGEgXFxcImRyb3BiZWhpbmRcXFwiIG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCB3b3JrcXVldWVzIGZvciBmcmVlaW5nIGZvbGlvcywgYW5kIG1vZGlmeWluZyBmdW5jdGlvbiBzaWduYXR1cmVzIGxpa2UgYHJlbW92ZV9tYXBwaW5nYCBhbmQgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5IGJ1ZmZlcnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBsaWZlY3ljbGUgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4sIEtNRU1MRUFLLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdywgd2hpY2ggYXJlIHRoZSBzcGVjaWZpYyBjbGFzc2VzIG9mIGJ1Z3MgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODYyYzg0N2Q1NGYzY2NiOTZjYjQ3OTdlMzI3OWFkNDgzNmZiZWIxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE5OjQ5OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuY1xuaW5kZXggOWQ4ZjYzZTJmZDFhYi4uNzk0MjRiYmVlMWIwZiAxMDA2NDRcbi0tLSBhL2ZzL3NwbGljZS5jXG4rKysgYi9mcy9zcGxpY2UuY1xuQEAgLTkwLDcgKzkwLDcgQEAgc3RhdGljIGJvb2wgcGFnZV9jYWNoZV9waXBlX2J1Zl90cnlfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbiBcdFx0ICogSWYgd2Ugc3VjY2VlZGVkIGluIHJlbW92aW5nIHRoZSBtYXBwaW5nLCBzZXQgTFJVIGZsYWdcbiBcdFx0ICogYW5kIHJldHVybiBnb29kLlxuIFx0XHQgKi9cbi1cdFx0aWYgKHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvKSkge1xuK1x0XHRpZiAocmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xuIFx0XHRcdGJ1Zi1cdTAwM2VmbGFncyB8PSBQSVBFX0JVRl9GTEFHX0xSVTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDhmMGY2OGUyNDViYWEuLmJkYWZmYzBkMWVmMzEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0zNzMsNyArMzczLDggQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxuIFx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbi1sb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHQgICAgYm9vbCByZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG4gZXh0ZXJuIGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuQEAgLTQ2NSw2ICs0NjYsOCBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpO1xuICAqL1xuIGJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitcbiAvKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xuIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XG4gdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7XG5AQCAtNDc1LDYgKzQ3OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF9kZXZpY2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxuIH1cbiBcbiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIHtcbiBcdHJldHVybiBOVUxMO1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggZDcyMTk4NmQ1ZjQ2NS4uMTY0Nzk2MWM1YmEyMCAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMTY4Niw2ICsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcbiAgKi9cbiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRib29sIHN3YXBfZHJvcGJlaGluZDtcbitcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4gXHQvKlxuQEAgLTE2OTUsNyArMTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdCAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuXG4gXHQgKi9cbiBcdGZvbGlvX2dldChmb2xpbyk7XG4rXG4rXHQvKlxuK1x0ICogRHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvcyBhcmUgb2ZmLUxSVSwgc28gd2UgbXVzdCBwcmV2ZW50IGEgcmFjaW5nXG4rXHQgKiBzd2FwaW4gZnJvbSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQga2VlcGluZyBpdFxuK1x0ICogb2ZmLUxSVTogdGhlIHdyaXRlYmFjayBmbGFnIGFsbG93cyB0aGF0LiBBZnRlcndhcmRzIGEgc3dhcGluIG1heSB3aW5cbitcdCAqIHRoZSByYWNlLCBidXQgdGhlIGZvbGlvIGlzIGFscmVhZHkgcXVldWVkIGFuZCB0aGUgd29ya2VyIHB1dHMgaXQgYmFja1xuK1x0ICogb24gdGhlIExSVSBpbiB0aGF0IGNhc2UuXG4rXHQgKi9cbitcdHN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbyk7XG4rXG4gXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xuK1xuK1x0aWYgKHN3YXBfZHJvcGJlaGluZCkge1xuK1x0XHRzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA3N2QyZDE0ZWRhNDIxLi5mYzQ0ZGFhZTFkZTFmIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0zMDQsOSArMzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuK1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA5YzNhNWNmOTk3Nzg2Li5iOTNkZDYwN2QyNGM2IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZm9saW9fYmF0Y2guaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuQEAgLTQ4MywxMyArNDg1LDExIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcbiBcbi1cdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXG4tXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4gLyoqXG4tICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4rICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cbkBAIC01MDEsMTMgKzUwMSwxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxuICAqXG4rICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXJcbisgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWVcbisgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cbisgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLlxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXG4gICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4ge1xuIFx0aW50IG9yZGVyLCBlcnI7XG4gXHRzdHJ1Y3QgZm9saW8gKnJldDtcbkBAIC01MzUsNiArNTM5LDk4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxsaXN0X2hlYWQsIHN3YXBfZHJvcGJlaGluZF9sbGlzdCk7XG4rXG4rc3RhdGljIGJvb2wgc3dhcF9kcm9wYmVoaW5kX2Ryb3BfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXHRib29sIGRyb3BwZWQgPSBmYWxzZTtcbitcbitcdGZvbGlvX2xvY2soZm9saW8pO1xuK1xuK1x0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4rXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSlcbitcdFx0bWVtY2cgPSBOVUxMO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHQvKlxuK1x0ICogR2F0ZSByZW1vdmVfbWFwcGluZygpIG9uIGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKCk6IGEgcmFjaW5nIHN3YXBpbiBtYXlcbitcdCAqIGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZSBmb2xpbyBmcm9tXG4rXHQgKiB0aGUgY2FjaGUsIGFuZCByZW1vdmVfbWFwcGluZygpIG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW9cbitcdCAqIChpdCB3b3VsZCB0cmlwIF9fcmVtb3ZlX21hcHBpbmcoKSdzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS5cbitcdCAqL1xuK1x0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdCAgICByZW1vdmVfbWFwcGluZyhzd2FwX2FkZHJlc3Nfc3BhY2UoZm9saW8tXHUwMDNlc3dhcCksIGZvbGlvLCB0cnVlLCBtZW1jZykpIHtcbitcdFx0ZHJvcHBlZCA9IHRydWU7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBSYWNlZDogdGhlIGZvbGlvIGlzIG5vdyBvd25lZCBieSB0aGUgc3dhcGluOyBwdXQgaXQgYmFjay4gKi9cbitcdFx0Zm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7XG4rXHRcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuK1x0fVxuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK1xuK1x0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdGlmICghZHJvcHBlZClcbitcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdHJldHVybiBkcm9wcGVkO1xuK31cbitcbisvKipcbisgKiBzd2FwX2Ryb3BiZWhpbmRfZnJlZV9iYXRjaF9mb2xpbyAtIGZyZWUgYSBkcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW8gaW50byBhIGJhdGNoXG4rICogQGZvbGlvOiB0aGUgb2ZmLUxSVSBmb2xpbyB3aG9zZSB3cml0ZWJhY2sgaGFzIGNvbXBsZXRlZFxuKyAqIEBmYmF0Y2g6IGJhdGNoIG9mIGZvbGlvcyB0byBmcmVlLCBmbHVzaGVkIHdoZW4gZnVsbFxuKyAqL1xuK3N0YXRpYyB2b2lkIHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4re1xuK1x0aWYgKHN3YXBfZHJvcGJlaGluZF9kcm9wX2ZvbGlvKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSlcbitcdFx0Zm9saW9zX3B1dChmYmF0Y2gpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgZm9saW9fYmF0Y2ggZmJhdGNoO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKnBvcywgKm5leHQ7XG4rXHRpbnQgY3B1O1xuK1xuK1x0Zm9saW9fYmF0Y2hfaW5pdChcdTAwMjZmYmF0Y2gpO1xuK1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuK1x0XHRwb3MgPSBsbGlzdF9kZWxfYWxsKHBlcl9jcHVfcHRyKFx1MDAyNnN3YXBfZHJvcGJlaGluZF9sbGlzdCwgY3B1KSk7XG4rXHRcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBwb3MpIHtcbitcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKChzdHJ1Y3QgbGlzdF9oZWFkICopcG9zLFxuK1x0XHRcdFx0XHRcdFx0ICAgc3RydWN0IGZvbGlvLCBscnUpO1xuK1x0XHRcdHN3YXBfZHJvcGJlaGluZF9mcmVlX2JhdGNoX2ZvbGlvKGZvbGlvLCBcdTAwMjZmYmF0Y2gpO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoZmJhdGNoLm5yKVxuK1x0XHRmb2xpb3NfcHV0KFx1MDAyNmZiYXRjaCk7XG4rfVxuK1xuK3N0YXRpYyBERUNMQVJFX1dPUksoc3dhcF9kcm9wYmVoaW5kX3dvcmssIHN3YXBfZHJvcGJlaGluZF93b3JrZm4pO1xuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3dhcF9kcm9wYmVoaW5kX3dxO1xuK1xuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilcdTAwMjZmb2xpby1cdTAwM2VscnUsXG4rXHRcdCAgcmF3X2NwdV9wdHIoXHUwMDI2c3dhcF9kcm9wYmVoaW5kX2xsaXN0KSk7XG4rXHRxdWV1ZV93b3JrKHN3YXBfZHJvcGJlaGluZF93cSwgXHUwMDI2c3dhcF9kcm9wYmVoaW5kX3dvcmspO1xuK31cbitcbitzdGF0aWMgaW50IF9faW5pdCBzd2FwX2Ryb3BiZWhpbmRfaW5pdCh2b2lkKVxuK3tcbitcdHN3YXBfZHJvcGJlaGluZF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInN3YXBfZHJvcGJlaGluZFwiLFxuK1x0XHRcdFx0XHQgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLCAwKTtcbitcdGlmICghc3dhcF9kcm9wYmVoaW5kX3dxKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJldHVybiAwO1xuK31cbitjb3JlX2luaXRjYWxsKHN3YXBfZHJvcGJlaGluZF9pbml0KTtcbitcbiAvKlxuICAqIElmIHdlIGFyZSB0aGUgb25seSB1c2VyLCB0aGVuIHRyeSB0byBmcmVlIHVwIHRoZSBzd2FwIGNhY2hlLlxuICAqXG5AQCAtNjQzLDEyICs3MzksMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuK1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIHBsdWcpO1xuIFx0aWYgKHJlYWRhaGVhZCkge1xuIFx0XHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcbkBAIC02ODMsMTIgKzc4MCwxMyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuK1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbitcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmNcbmluZGV4IGI1OGJhOTQwYmU0NzQuLjM3ZjdkODI3OGMxY2QgMTAwNjQ0XG4tLS0gYS9tbS90cnVuY2F0ZS5jXG4rKysgYi9tbS90cnVuY2F0ZS5jXG5AQCAtMzM2LDcgKzMzNiw3IEBAIGxvbmcgbWFwcGluZ19ldmljdF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmICghZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKGZvbGlvLCAwKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8pO1xuK1x0cmV0dXJuIHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDU2NzA4ZDFkMmRmZDUuLmM0MDUxM2UwYjUwYjIgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC03ODQsMTcgKzc4NCwyNCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gICogcmVtb3ZlX21hcHBpbmcoKSAtIEF0dGVtcHQgdG8gcmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZy5cbiAgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gcmVtb3ZlLlxuKyAqIEByZWNsYWltZWQ6IFdoZXRoZXIgdGhlIGZvbGlvIGlzIGJlaW5nIHJlY2xhaW1lZCAocmVjb3JkIGEgc2hhZG93KS5cbisgKiBAdGFyZ2V0X21lbWNnOiBUaGUgbWVtY2cgdG8gY2hhcmdlIHRoZSBldmljdGlvbiBzaGFkb3cgdG8gd2hlbiBAcmVjbGFpbWVkO1xuKyAqICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIgbXVzdCBrZWVwIGl0IGFsaXZlIGFjcm9zcyB0aGUgY2FsbC4gSWdub3JlZCAobWF5XG4rICogICAgICAgICAgICAgICAgYmUgTlVMTCkgd2hlbiBAcmVjbGFpbWVkIGlzIGZhbHNlLlxuICAqXG4gICogSWYgdGhlIGZvbGlvIGlzIGRpcnR5LCB1bmRlciB3cml0ZWJhY2sgb3IgaWYgc29tZW9uZSBlbHNlIGhhcyBhIHJlZlxuLSAqIG9uIGl0LCByZW1vdmFsIHdpbGwgZmFpbC5cbisgKiBvbiBpdCwgcmVtb3ZhbCB3aWxsIGZhaWwuIFdoZW4gQHJlY2xhaW1lZCBpcyB0cnVlLCBhIHdvcmtpbmdzZXQgZXZpY3Rpb25cbisgKiBzaGFkb3cgaXMgc3RvcmVkIChsaWtlIHBhZ2UgcmVjbGFpbSBkb2VzKSBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmVcbisgKiBkZXRlY3RlZCBhbmQgdGhlIGZvbGlvIHJlLWFjdGl2YXRlZC5cbiAgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgcGFnZXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXBwaW5nLiAgMCBpZiB0aGUgZm9saW9cbiAgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC5cbiAgKiBDb250ZXh0OiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50IG9uIHRoZSBmb2xpbyBhbmRcbiAgKiBob2xkIGl0cyBsb2NrLlxuICAqL1xuLWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0ICAgIGJvb2wgcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxuIHtcbi1cdGlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCkpIHtcbitcdGlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCByZWNsYWltZWQsIHRhcmdldF9tZW1jZykpIHtcbiBcdFx0LypcbiBcdFx0ICogVW5mcmVlemluZyB0aGUgcmVmY291bnQgd2l0aCAxIGVmZmVjdGl2ZWx5XG4gXHRcdCAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2UuLmEzNTY3MWU4MzdmODkgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMTAwMCw4ICsxMDAwLDggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuLVx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4tXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4rXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuK1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDQ1LDggKzEwNDUsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0LyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqL1xuIFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXG4tXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cbi1cdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbitcdGZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcbiBcbiBcdC8qIHN0YXJ0IHdyaXRlYmFjayAqL1xuIFx0X19zd2FwX3dyaXRlcGFnZShmb2xpbywgTlVMTCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxOTo1NDoxMS42MDA1MzIxMThaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0MDI3Mjk5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIHByZXR0eSBjbGVhciB3aGVyZSBpdCdzIGZvY3VzaW5nOiB0aGUgc3dhcCBjYWNoZSwgd3JpdGViYWNrIG1lY2hhbmlzbXMsIGFuZCBMUlUgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgd2UncmUgc2VlaW5nIGNoYW5nZXMgbGlrZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgXCJkcm9wYmVoaW5kXCIgbWVjaGFuaXNtIGZvciBzd2FwIGNhY2hlIGZvbGlvcywgbW9kaWZpY2F0aW9ucyB0byBgcmVtb3ZlX21hcHBpbmdgLCBhIG5hbWUgY2hhbmdlIChgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgdG8gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApLCBhbmQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYSBjaGFuZ2UgdG8genN3YXAncyBmb2xpbyBzZXR0aW5nLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhbGwgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIEl0J3MgaGFuZGxpbmcgcGFnZSBsaWZlY3ljbGVzLCBMUlUgbGlzdCBtYWludGVuYW5jZSwgYW5kIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzd2FwIGNhY2hlLiBOb3RoaW5nIGhlcmUgaXMgdG91Y2hpbmcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHRoZW4gc2VudCB0byB1c2VyIHNwYWNlIG9yIGltcGxlbWVudGluZyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHdoaWNoLCBvYnZpb3VzbHksIEtNU0FOIGxvdmVzIHRvIGRpZyB1cC4gVGhlcmUgYXJlbid0IGFueSBjb21wbGV4IG5ldyBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIGFuZCBwYXNzZWQgdXAgdG8gdXNlciBzcGFjZSBlaXRoZXIuXG5cblRoZSBwb3RlbnRpYWwgaXNzdWVzIEkgY2FuIGVudmlzaW9uIGhlcmUgYXJlIGFsbCBwcmV0dHkgdGV4dGJvb2sgbWVtb3J5IG1hbmFnZW1lbnQgYnVnczogdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtYXliZSBtZW1vcnkgbGVha3MuIFRoaW5ncyBsaWtlIHRoaXMgYXJlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIEtBU0FOLCBLTUVNTEVBSywgYW5kIGdlbmVyYWxseSBnb29kIGtlcm5lbCB0ZXN0aW5nLiBUaGVzZSBhcmUgcHJldHR5IGNvbW1vbiBhbmQgd2VsbC11bmRlcnN0b29kIGNsYXNzZXMgb2YgZXJyb3JzLiBLTVNBTiByZWFsbHkgc2hpbmVzIHdoZW4geW91J3JlIGRlYWxpbmcgd2l0aCBpbml0aWFsaXphdGlvbiBpc3N1ZXMgYW5kIGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY29udHJvbCBmbG93IHRoYXQgY291bGQgYmUgY29ycnVwdGVkIGJ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0IGp1c3QgaXNuJ3QgaGVyZS5cblxuSSB3ZW50IHRocm91Z2ggdGhlIGNvZGUgYW5kIHNwZWNpZmljYWxseSBjaGVja2VkIGBmb2xpb19zZXRfZHJvcGJlaGluZGAgYW5kIGBzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLCBidXQgdGhleSdyZSBqdXN0IG1hbmFnaW5nIHRoZSBmb2xpbydzIHBvc2l0aW9uIGluIHRoZSBzd2FwIGNhY2hlIGFuZCBMUlUsIGFuZCB0aGUgZm9saW8gYWxsb2NhdGlvbiBpdHNlbGYgaXMgc3RhbmRhcmQgcGFnZSBhbGxvY2F0aW9uLiBObyBwcm9ibGVtcyB0aGVyZS5cblxuVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiAqKk5lZWRzS01TQU4gaXMgZmFsc2UuKiogVGhpcyBwYXRjaCBpcyBzYWZlIGZyb20gdGhlIHBhcnRpY3VsYXIgdnVsbmVyYWJpbGl0aWVzIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gVGhlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgdG9vbHMgd2lsbCBiZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTAwLCJPdXRwdXRUb2tlbnMiOjIzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE5OjU0OjIzLjAwMzI2NzI3MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzd2FwIGNhY2hlIGFsbG9jYXRpb24sIHdyaXRlYmFjaywgYW5kIExSVSBtYW5hZ2VtZW50IChpbnRyb2R1Y2luZyBhIFxcXCJkcm9wYmVoaW5kXFxcIiBtZWNoYW5pc20gZm9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBjaGFuZ2VzIGludm9sdmUgcGFnZSBsaWZlY3ljbGUgbWFuYWdlbWVudCwgd29ya3F1ZXVlcyBmb3IgZnJlZWluZyBmb2xpb3MsIGFuZCBtb2RpZnlpbmcgZnVuY3Rpb24gc2lnbmF0dXJlcyBsaWtlIGByZW1vdmVfbWFwcGluZ2AgYW5kIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC5cXG5cXG5UaGVzZSBtb2RpZmljYXRpb25zIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIG9mIG1lbW9yeSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgbGlmZWN5Y2xlIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBLTUVNTEVBSywgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHdoaWNoIGFyZSB0aGUgc3BlY2lmaWMgY2xhc3NlcyBvZiBidWdzIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gc3dhcCBjYWNoZSBhbGxvY2F0aW9uLCB3cml0ZWJhY2ssIGFuZCBMUlUgbWFuYWdlbWVudCAoaW50cm9kdWNpbmcgYSBcXFwiZHJvcGJlaGluZFxcXCIgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBhZ2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHdvcmtxdWV1ZXMgZm9yIGZyZWVpbmcgZm9saW9zLCBhbmQgbW9kaWZ5aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgbGlrZSBgcmVtb3ZlX21hcHBpbmdgIGFuZCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuXFxuXFxuVGhlc2UgbW9kaWZpY2F0aW9ucyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBvZiBtZW1vcnkgYnVmZmVycy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGxpZmVjeWNsZSBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiwgS01FTUxFQUssIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LCB3aGljaCBhcmUgdGhlIHNwZWNpZmljIGNsYXNzZXMgb2YgYnVncyBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsvcg5[1] Phase: Succeeded StartedAt: 2026-08-18 19:54:34 +0000 UTC FinishedAt: 2026-08-18 19:54:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 19:54:34 +0000 UTC FinishedAt: 2026-08-18 19:54:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2] Phase: Succeeded StartedAt: 2026-08-18 19:54:34 +0000 UTC FinishedAt: 2026-08-18 23:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 19:54:34 +0000 UTC FinishedAt: 2026-08-18 23:40:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 19:54:34 +0000 UTC FinishedAt: 2026-08-18 19:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 19:54:34 +0000 UTC FinishedAt: 2026-08-18 19:54:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowsvcg5/series-workflowsvcg5-convert-artifact-1805779921/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 19:54:44 +0000 UTC FinishedAt: 2026-08-18 20:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 19:54:44 +0000 UTC FinishedAt: 2026-08-18 20:15:06 +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:*35279fda-fb87-463d-bd94-0e8dc28dbd13,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-workflowsvcg5/series-workflowsvcg5-convert-artifact-1805779921/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": "327c713a-88ad-4583-bed9-510df3ffe850", "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-workflowsvcg5/series-workflowsvcg5-build-action-379755903/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 19:54:44 +0000 UTC FinishedAt: 2026-08-18 20:14:56 +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:*35279fda-fb87-463d-bd94-0e8dc28dbd13,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-workflowsvcg5/series-workflowsvcg5-convert-artifact-1805779921/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": "327c713a-88ad-4583-bed9-510df3ffe850", "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-workflowsvcg5/series-workflowsvcg5-build-action-379755903/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 20:15:06 +0000 UTC FinishedAt: 2026-08-18 20:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 20:15:06 +0000 UTC FinishedAt: 2026-08-18 20:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 20:15:06 +0000 UTC FinishedAt: 2026-08-18 20:15:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 20:15:06 +0000 UTC FinishedAt: 2026-08-18 20:15:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowsvcg5/series-workflowsvcg5-convert-artifact-2835571364/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 20:15:16 +0000 UTC FinishedAt: 2026-08-18 20:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 20:15:16 +0000 UTC FinishedAt: 2026-08-18 20:16:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*327c713a-88ad-4583-bed9-510df3ffe850,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-workflowsvcg5/series-workflowsvcg5-build-action-379755903/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-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 20:17:09 +0000 UTC FinishedAt: 2026-08-18 20:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 20:17:09 +0000 UTC FinishedAt: 2026-08-18 20:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 20:17:09 +0000 UTC FinishedAt: 2026-08-18 20:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 20:17:09 +0000 UTC FinishedAt: 2026-08-18 20:37:05 +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:*35279fda-fb87-463d-bd94-0e8dc28dbd13,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-workflowsvcg5/series-workflowsvcg5-convert-artifact-2835571364/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": "ead6fcea-6f6d-4988-a10f-f1aba7bc64e9", "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-workflowsvcg5/series-workflowsvcg5-build-action-4282505520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 20:17:09 +0000 UTC FinishedAt: 2026-08-18 20:36: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:*35279fda-fb87-463d-bd94-0e8dc28dbd13,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-workflowsvcg5/series-workflowsvcg5-convert-artifact-2835571364/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": "ead6fcea-6f6d-4988-a10f-f1aba7bc64e9", "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-workflowsvcg5/series-workflowsvcg5-build-action-4282505520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 20:37:05 +0000 UTC FinishedAt: 2026-08-18 20:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 20:37:05 +0000 UTC FinishedAt: 2026-08-18 20:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 20:37:05 +0000 UTC FinishedAt: 2026-08-18 20:39:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 20:37:05 +0000 UTC FinishedAt: 2026-08-18 20:38:52 +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:*ead6fcea-6f6d-4988-a10f-f1aba7bc64e9,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-workflowsvcg5/series-workflowsvcg5-build-action-4282505520/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-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 20:39:02 +0000 UTC FinishedAt: 2026-08-18 23:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 20:39:02 +0000 UTC FinishedAt: 2026-08-18 23:40:32 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},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:*327c713a-88ad-4583-bed9-510df3ffe850,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ead6fcea-6f6d-4988-a10f-f1aba7bc64e9,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-workflowsvcg5/series-workflowsvcg5-build-action-379755903/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-workflowsvcg5/series-workflowsvcg5-build-action-4282505520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 20:39:02 +0000 UTC FinishedAt: 2026-08-18 20:39:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 20:39:02 +0000 UTC FinishedAt: 2026-08-18 20:39:08 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},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-workflowsvcg5/series-workflowsvcg5-convert-artifact-1815047981/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 20:39:02 +0000 UTC FinishedAt: 2026-08-18 20:39:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 20:39:02 +0000 UTC FinishedAt: 2026-08-18 20:39:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 20:39:03 +0000 UTC FinishedAt: 2026-08-18 20:39:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 20:39:13 +0000 UTC FinishedAt: 2026-08-18 23:40:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsvcg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON"],"series_id":"3305d02e-abd4-4f3a-9bcc-bfbbcff02da9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 20:39:13 +0000 UTC FinishedAt: 2026-08-18 23:40:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*327c713a-88ad-4583-bed9-510df3ffe850,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ead6fcea-6f6d-4988-a10f-f1aba7bc64e9,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-workflowsvcg5/series-workflowsvcg5-build-action-379755903/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-workflowsvcg5/series-workflowsvcg5-build-action-4282505520/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-workflowsvcg5/series-workflowsvcg5-convert-artifact-1815047981/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,}