Name: series-workflow5dbkn Phase: Succeeded StartedAt: 2026-09-11 14:05:39 +0000 UTC FinishedAt: 2026-09-11 18:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[0] Phase: Succeeded StartedAt: 2026-09-11 14:05:39 +0000 UTC FinishedAt: 2026-09-11 14:30:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 14:05:39 +0000 UTC FinishedAt: 2026-09-11 14:30:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "13e51269b6656768dc595ed6025e4974f2026543", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211_HWSIM", "MAC80211", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "13e51269b6656768dc595ed6025e4974f2026543", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211_HWSIM", "MAC80211", "CFG80211" ], "series_id": "7db2c614-ddb6-4093-8a6f-7f58a93db682" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "hwsim_cloned_frame_received_nl", "hwsim_tx_info_frame_received_nl", "mac80211_hwsim_tx_frame_nl", "mac80211_hwsim_monitor_rx", "mac80211_hwsim_monitor_ack", "mac80211_hwsim_tx" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sJiMzNDssCiAgICAmIzM0O2h3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeCYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV90eCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtYWM4MDIxMV9od3NpbWAgdG8gYWRkIHRoZSBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCBuZXRsaW5rIGZsYWcgYXR0cmlidXRlIGZvciBza2lwcGluZyBtb25pdG9yIHJlcG9ydHMsIHByZXNlcnZlcyB0aGUgdHJhbnNtaXNzaW9uIGNoYW5uZWwgZnJlcXVlbmN5IGluIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYW5kIHVwZGF0ZXMgdGhlIHBlbmRpbmcgdHJhbnNtaXR0ZWQgc2tiIGluIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIHdoZW4gbWF0Y2hpbmcgY29va2llIGFuZCB0cmFuc21pdHRlciBhdHRyaWJ1dGVzIGFyZSBwcm92aWRlZC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZyZXFgLCBgbm9fbW9uaXRvcmAsIGBjb29raWVgLCBldGMuKSBhbmQgc3RydWN0dXJlIG1lbWJlcnMgKGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYGhkci1cdTAwM2VydF9jaGFubmVsYCkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiB0aGlzIHBhdGNoIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzLiBTS0IgbW9kaWZpY2F0aW9ucyB1c2UgYHNrYl9wdXRfZGF0YWAgd2l0aCB2ZXJpZmllZCBwYXlsb2FkIGxlbmd0aHMgZnJvbSB2YWxpZGF0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmdzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHJlbGF0aW5nIHRvIFNLQiBtYW5pcHVsYXRpb24sIHF1ZXVlIGxvY2tpbmcsIG9yIHJlZmVyZW5jZSBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1hYzgwMjExX2h3c2ltLCBhIHNvZnR3YXJlLWVtdWxhdGVkIDgwMi4xMSByYWRpbyB0ZXN0aW5nIHRvb2wgZnVsbHkgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgZ2VuZXJpYyBuZXRsaW5rLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgaGFuZGxpbmcgZm9yIEhXU0lNX0FUVFJfTk9fTU9OSVRPUiwgbW9kaWZ5IGNlbnRlciBmcmVxdWVuY3kgdHJhY2tpbmcgYWNyb3NzIFRYIG1vbml0b3IgcmVwb3J0aW5nLCBhbmQgYWRkIGxvZ2ljIGluIGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCB0byBzZWFyY2ggdGhlIHBlbmRpbmcgdHJhbnNtaXNzaW9uIHF1ZXVlIGJ5IGNvb2tpZSBhbmQgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IgZGF0YSAodmlhIHBza2JfZXhwYW5kX2hlYWQsIHNrYl90cmltLCBhbmQgc2tiX3B1dF9kYXRhKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcyBpbiB0aGUgc2ltdWxhdGVkIHJhZGlvIFRYL1JYIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWI3NWFmNTEzYWUxYWY4Nzc5MmEyMGI1YWJhNDE0MTYzNTNmOTk5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE0OjI2OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaFxuaW5kZXggYTAyMmNkNWMwZjFjNy4uMWQyZmQwNmM1ODVhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oXG5AQCAtMyw3ICYjNDM7Myw3IEBAXG4gICogbWFjODAyMTFfaHdzaW0gLSBzb2Z0d2FyZSBzaW11bGF0b3Igb2YgODAyLjExIHJhZGlvKHMpIGZvciBtYWM4MDIxMVxuICAqIENvcHlyaWdodCAoYykgMjAwOCwgSm91bmkgTWFsaW5lbiBcdTAwM2NqQHcxLmZpXHUwMDNlXG4gICogQ29weXJpZ2h0IChjKSAyMDExLCBKYXZpZXIgTG9wZXogXHUwMDNjamxvcGV4QGdtYWlsLmNvbVx1MDAzZVxuLSAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMi0yMDI1IEludGVsIENvcnBvcmF0aW9uXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMi0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX0hcbkBAIC0xNjIsNiAmIzQzOzE2Miw4IEBAIGVudW0gaHdzaW1fY29tbWFuZHMge1xuICAqXHRlYWNoIHJhZGlvIGluc3RlYWQgb2YgZm9yIHRoZSB3aXBoeS5cbiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0U6IHN1cHBvcnQgTkFOIERldmljZSB2aXJ0dWFsIGludGVyZmFjZSAoZmxhZylcbiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX0JBQ0tHUk9VTkRfUkFEQVI6IGJhY2tncm91bmQgcmFkYXIvQ0FDIHN1cHBvcnQgKGZsYWcpXG4mIzQzOyAqIEBIV1NJTV9BVFRSX05PX01PTklUT1I6IHNraXAgbW9uaXRvciByZXBvcnQgZm9yIHRoaXMgVFggc3RhdHVzLCBlLmcuIGluIGNhc2VcbiYjNDM7ICpcdHRoZSBmcmFtZSB3YXMgbmV2ZXIgcmVwb3J0ZWQgdG8gYW55IHJlY2VpdmVyIChmbGFnKVxuICAqIEBfX0hXU0lNX0FUVFJfTUFYOiBlbnVtIGxpbWl0XG4gICovXG4gZW51bSBod3NpbV9hdHRycyB7XG5AQCAtMTk3LDYgJiM0MzsxOTksNyBAQCBlbnVtIGh3c2ltX2F0dHJzIHtcbiBcdEhXU0lNX0FUVFJfTVVMVElfUkFESU8sXG4gXHRIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRSxcbiBcdEhXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSLFxuJiM0MztcdEhXU0lNX0FUVFJfTk9fTU9OSVRPUixcbiBcdF9fSFdTSU1fQVRUUl9NQVgsXG4gfTtcbiAjZGVmaW5lIEhXU0lNX0FUVFJfTUFYIChfX0hXU0lNX0FUVFJfTUFYIC0gMSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5mY2E0YmY4MjNlZjRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5AQCAtODk1LDYgJiM0Mzs4OTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHdzaW1fZ2VubF9wb2xpY3lbSFdTSU1fQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4gXHRbSFdTSU1fQVRUUl9NVUxUSV9SQURJT10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiBcdFtIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiBcdFtIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiYjNDM7XHRbSFdTSU1fQVRUUl9OT19NT05JVE9SXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIH07XG4gXG4gI2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKVxuQEAgLTEzMzcsNyAmIzQzOzEzMzgsNyBAQCBtYWM4MDIxMV9od3NpbV9nZXRfdHhfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcbiBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnR4X3NrYixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbilcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgZnJlcSlcbiB7XG4gXHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTEzNjksNyAmIzQzOzEzNzAsNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aGRyLVx1MDAzZXJ0X3RzZnQgPSBfX21hYzgwMjExX2h3c2ltX2dldF90c2YoZGF0YSk7XG4gXHRoZHItXHUwMDNlcnRfZmxhZ3MgPSAwO1xuIFx0aGRyLVx1MDAzZXJ0X3JhdGUgPSBiaXRyYXRlIC8gNTtcbi1cdGhkci1cdTAwM2VydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSk7XG4mIzQzO1x0aGRyLVx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihmcmVxKTtcbiBcdGZsYWdzID0gSUVFRTgwMjExX0NIQU5fMkdIWjtcbiBcdGlmICh0eHJhdGUgXHUwMDI2XHUwMDI2IHR4cmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1JBVEVfRVJQX0cpXG4gXHRcdGZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE07XG5AQCAtMTM4Nyw4ICYjNDM7MTM4OCw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gfVxuIFxuIFxuLXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbixcbi1cdFx0XHRcdCAgICAgICBjb25zdCB1OCAqYWRkcilcbiYjNDM7c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2sodTMyIGZyZXEsIGNvbnN0IHU4ICphZGRyKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgaHdzaW1fcmFkaW90YXBfYWNrX2hkciAqaGRyO1xuQEAgLTE0MTAsNyAmIzQzOzE0MTAsNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sXG4gXHRcdFx0XHRcdCAgKDEgXHUwMDNjXHUwMDNjIElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSk7XG4gXHRoZHItXHUwMDNlcnRfZmxhZ3MgPSAwO1xuIFx0aGRyLVx1MDAzZXBhZCA9IDA7XG4tXHRoZHItXHUwMDNlcnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tXHUwMDNlY2VudGVyX2ZyZXEpO1xuJiM0MztcdGhkci1cdTAwM2VydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7XG4gXHRmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7XG4gXHRoZHItXHUwMDNlcnRfY2hiaXRtYXNrID0gY3B1X3RvX2xlMTYoZmxhZ3MpO1xuIFxuQEAgLTE3MzUsNiAmIzQzOzE3MzUsOSBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEhXU0lNX0FUVFJfQ09PS0lFLCBjb29raWUsIEhXU0lNX0FUVFJfUEFEKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4mIzQzO1x0LyogdHJhY2sgdGhlIGZyZXF1ZW5jeSAqL1xuJiM0MztcdGluZm8tXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXSA9ICh2b2lkICopKHVpbnRwdHJfdCljaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxO1xuJiM0MztcbiBcdGdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWQpO1xuIFxuIFx0aWYgKGh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XG5AQCAtMTkxMiw3ICYjNDM7MTkxNSw3IEBAIHN0YXRpYyBib29sIG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25vX25sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFxuIFx0bWFjODAyMTFfaHdzaW1fd3JpdGVfdHNmKGRhdGEsIHNrYiwgc2ltX3RzZik7XG4gXG4tXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGh3LCBza2IsIGNoYW4pO1xuJiM0MztcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoaHcsIHNrYiwgY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2cnhfc3RhdHVzLCAwLCBzaXplb2Yocnhfc3RhdHVzKSk7XG4gXHRyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQ7XG5AQCAtMjI3Niw3ICYjNDM7MjI3OSw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0YWNrID0gbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbm9fbmwoaHcsIHNrYiwgY2hhbm5lbCk7XG4gXG4gXHRpZiAoYWNrIFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlbGVuIFx1MDAzZT0gMTYpXG4tXHRcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGNoYW5uZWwsIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1x0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhjaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxLCBoZHItXHUwMDNlYWRkcjIpO1xuIFxuIFx0aWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7XG4gXG5AQCAtNjM5MSw2ICYjNDM7NjM5NCw4IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCBub19tb25pdG9yO1xuJiM0MztcdHUzMiBmcmVxO1xuIFxuIFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0gfHxcbiBcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSB8fFxuQEAgLTY0MDIsNiAmIzQzOzY0MDcsNyBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0c3JjID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pO1xuIFx0aHdzaW1fZmxhZ3MgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTtcbiBcdHJldF9za2JfY29va2llID0gbmxhX2dldF91NjQoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xuJiM0MztcdG5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX05PX01PTklUT1JdKTtcbiBcbiBcdGRhdGEyID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcihzcmMpO1xuIFx0aWYgKCFkYXRhMilcbkBAIC02NDM2LDcgJiM0Mzs2NDQyLDExIEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRpZiAoIWZvdW5kKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXHUwMDNlaHcsIHNrYiwgZGF0YTItXHUwMDNlY2hhbm5lbCk7XG4mIzQzO1x0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuJiM0MztcdGZyZXEgPSAodWludHB0cl90KXR4aS1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vX21vbml0b3IpXG4mIzQzO1x0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGRhdGEyLVx1MDAzZWh3LCBza2IsIGZyZXEpO1xuIFxuIFx0LyogVHggaW5mbyByZWNlaXZlZCBiZWNhdXNlIHRoZSBmcmFtZSB3YXMgYnJvYWRjYXN0ZWQgb24gdXNlciBzcGFjZSxcbiBcdCBzbyB3ZSBnZXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbzogdHggYXR0ZW1wdHMgYW5kIHNrYiBjb250cm9sIGJ1ZmYgKi9cbkBAIC02NDQ1LDggJiM0Mzs2NDU1LDYgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbiBcdFx0ICAgICAgIGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XG4gXG4gXHQvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqL1xuLVx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuLVxuIFx0aWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpJiM0MzsmIzQzOykge1xuQEAgLTY0NjYsOCAmIzQzOzY0NzQsNyBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0aWYgKCEoaHdzaW1fZmxhZ3MgXHUwMDI2IEhXU0lNX1RYX0NUTF9OT19BQ0spIFx1MDAyNlx1MDAyNlxuIFx0ICAgKGh3c2ltX2ZsYWdzIFx1MDAyNiBIV1NJTV9UWF9TVEFUX0FDSykpIHtcbiBcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSAxNilcbi1cdFx0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhkYXRhMi1cdTAwM2VjaGFubmVsLFxuLVx0XHRcdFx0XHRcdCAgIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1x0XHRcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGZyZXEsIGhkci1cdTAwM2VhZGRyMik7XG4gXHRcdHR4aS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7XG4gXHR9XG4gXG5AQCAtNjUzNSw2ICYjNDM7NjU0Miw1MSBAQCBzdGF0aWMgaW50IGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogbG9vayBmb3IgdGhlIHNrYiBtYXRjaGluZyB0aGUgY29va2llIHBhc3NlZCBiYWNrIGZyb20gdXNlciAqL1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKSB7XG4mIzQzO1x0XHR1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xuJiM0MztcdFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xuJiM0MztcdFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKnR4ZGF0YTtcbiYjNDM7XHRcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpO1xuJiM0MztcdFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0XHR0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG4mIzQzO1x0XHR0eGRhdGEgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKHRyYW5zbWl0dGVyKTtcbiYjNDM7XHRcdGlmICghdHhkYXRhIHx8IHR4ZGF0YS1cdTAwM2VuZXRncm91cCAhPSBkYXRhMi1cdTAwM2VuZXRncm91cClcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcsIG9yaWdfc2tiKSB7XG4mIzQzO1x0XHRcdHVpbnRwdHJfdCBza2JfY29va2llO1xuJiM0MztcbiYjNDM7XHRcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihvcmlnX3NrYik7XG4mIzQzO1x0XHRcdHNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzBdO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHNrYl9jb29raWUgPT0gY29va2llKSB7XG4mIzQzO1x0XHRcdFx0Zm91bmQgPSBvcmlnX3NrYjtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIHRoYXQmIzM5O3Mgd2VpcmQgKi9cbiYjNDM7XHRcdGlmICghZm91bmQpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChmcmFtZV9kYXRhX2xlbiBcdTAwM2UgZm91bmQtXHUwMDNlbGVuIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoZm91bmQsIDAsIGZyYW1lX2RhdGFfbGVuIC0gZm91bmQtXHUwMDNlbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgR0ZQX0FUT01JQykpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2tiX3RyaW0oZm91bmQsIDApO1xuJiM0MztcdFx0c2tiX3B1dF9kYXRhKGZvdW5kLCBmcmFtZV9kYXRhLCBmcmFtZV9kYXRhX2xlbik7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogY2hlY2sgaWYgcmFkaW8gaXMgY29uZmlndXJlZCBwcm9wZXJseSAqL1xuIFxuIFx0aWYgKChkYXRhMi1cdTAwM2VpZGxlIFx1MDAyNlx1MDAyNiAhZGF0YTItXHUwMDNldG1wX2NoYW4pIHx8ICFkYXRhMi1cdTAwM2VzdGFydGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sJiMzNDssCiAgICAmIzM0O2h3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeCYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV90eCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtYWM4MDIxMV9od3NpbSwgYSBzb2Z0d2FyZS1lbXVsYXRlZCA4MDIuMTEgcmFkaW8gdGVzdGluZyB0b29sIGZ1bGx5IGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIGdlbmVyaWMgbmV0bGluay4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIGhhbmRsaW5nIGZvciBIV1NJTV9BVFRSX05PX01PTklUT1IsIG1vZGlmeSBjZW50ZXIgZnJlcXVlbmN5IHRyYWNraW5nIGFjcm9zcyBUWCBtb25pdG9yIHJlcG9ydGluZywgYW5kIGFkZCBsb2dpYyBpbiBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwgdG8gc2VhcmNoIHRoZSBwZW5kaW5nIHRyYW5zbWlzc2lvbiBxdWV1ZSBieSBjb29raWUgYW5kIG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiIGRhdGEgKHZpYSBwc2tiX2V4cGFuZF9oZWFkLCBza2JfdHJpbSwgYW5kIHNrYl9wdXRfZGF0YSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBidWZmZXIgbWFuaXB1bGF0aW9uIGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIHNpbXVsYXRlZCByYWRpbyBUWC9SWCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViNzVhZjUxM2FlMWFmODc3OTJhMjBiNWFiYTQxNDE2MzUzZjk5OTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxNDoyNjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaAppbmRleCBhMDIyY2Q1YzBmMWM3Li4xZDJmZDA2YzU4NWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oCkBAIC0zLDcgJiM0MzszLDcgQEAKICAqIG1hYzgwMjExX2h3c2ltIC0gc29mdHdhcmUgc2ltdWxhdG9yIG9mIDgwMi4xMSByYWRpbyhzKSBmb3IgbWFjODAyMTEKICAqIENvcHlyaWdodCAoYykgMjAwOCwgSm91bmkgTWFsaW5lbiAmbHQ7akB3MS5maSZndDsKICAqIENvcHlyaWdodCAoYykgMjAxMSwgSmF2aWVyIExvcGV6ICZsdDtqbG9wZXhAZ21haWwuY29tJmd0OwotICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIyLTIwMjUgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbgogICovCiAKICNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9ICkBAIC0xNjIsNiAmIzQzOzE2Miw4IEBAIGVudW0gaHdzaW1fY29tbWFuZHMgewogICoJZWFjaCByYWRpbyBpbnN0ZWFkIG9mIGZvciB0aGUgd2lwaHkuCiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0U6IHN1cHBvcnQgTkFOIERldmljZSB2aXJ0dWFsIGludGVyZmFjZSAoZmxhZykKICAqIEBIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUjogYmFja2dyb3VuZCByYWRhci9DQUMgc3VwcG9ydCAoZmxhZykKJiM0MzsgKiBASFdTSU1fQVRUUl9OT19NT05JVE9SOiBza2lwIG1vbml0b3IgcmVwb3J0IGZvciB0aGlzIFRYIHN0YXR1cywgZS5nLiBpbiBjYXNlCiYjNDM7ICoJdGhlIGZyYW1lIHdhcyBuZXZlciByZXBvcnRlZCB0byBhbnkgcmVjZWl2ZXIgKGZsYWcpCiAgKiBAX19IV1NJTV9BVFRSX01BWDogZW51bSBsaW1pdAogICovCiBlbnVtIGh3c2ltX2F0dHJzIHsKQEAgLTE5Nyw2ICYjNDM7MTk5LDcgQEAgZW51bSBod3NpbV9hdHRycyB7CiAJSFdTSU1fQVRUUl9NVUxUSV9SQURJTywKIAlIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRSwKIAlIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUiwKJiM0MzsJSFdTSU1fQVRUUl9OT19NT05JVE9SLAogCV9fSFdTSU1fQVRUUl9NQVgsCiB9OwogI2RlZmluZSBIV1NJTV9BVFRSX01BWCAoX19IV1NJTV9BVFRSX01BWCAtIDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCmluZGV4IDAyYjZkODFjY2NkMTEuLmZjYTRiZjgyM2VmNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCkBAIC04OTUsNiAmIzQzOzg5NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBod3NpbV9nZW5sX3BvbGljeVtIV1NJTV9BVFRSX01BWCAmIzQzOyAxXSA9IHsKIAlbSFdTSU1fQVRUUl9NVUxUSV9SQURJT10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIAlbSFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0VdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiAJW0hXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAomIzQzOwlbSFdTSU1fQVRUUl9OT19NT05JVE9SXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogfTsKIAogI2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKQpAQCAtMTMzNyw3ICYjNDM7MTMzOCw3IEBAIG1hYzgwMjExX2h3c2ltX2dldF90eF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCiBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICp0eF9za2IsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKQomIzQzOwkJCQkgICAgICB1MzIgZnJlcSkKIHsKIAlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LSZndDtwcml2OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMzY5LDcgJiM0MzsxMzcwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAloZHItJmd0O3J0X3RzZnQgPSBfX21hYzgwMjExX2h3c2ltX2dldF90c2YoZGF0YSk7CiAJaGRyLSZndDtydF9mbGFncyA9IDA7CiAJaGRyLSZndDtydF9yYXRlID0gYml0cmF0ZSAvIDU7Ci0JaGRyLSZndDtydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbi0mZ3Q7Y2VudGVyX2ZyZXEpOwomIzQzOwloZHItJmd0O3J0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihmcmVxKTsKIAlmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7CiAJaWYgKHR4cmF0ZSAmYW1wOyZhbXA7IHR4cmF0ZS0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1JBVEVfRVJQX0cpCiAJCWZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE07CkBAIC0xMzg3LDggJiM0MzsxMzg4LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIH0KIAogCi1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgICAgIGNvbnN0IHU4ICphZGRyKQomIzQzO3N0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHUzMiBmcmVxLCBjb25zdCB1OCAqYWRkcikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBod3NpbV9yYWRpb3RhcF9hY2tfaGRyICpoZHI7CkBAIC0xNDEwLDcgJiM0MzsxNDEwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAogCQkJCQkgICgxICZsdDsmbHQ7IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSk7CiAJaGRyLSZndDtydF9mbGFncyA9IDA7CiAJaGRyLSZndDtwYWQgPSAwOwotCWhkci0mZ3Q7cnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tJmd0O2NlbnRlcl9mcmVxKTsKJiM0MzsJaGRyLSZndDtydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7CiAJZmxhZ3MgPSBJRUVFODAyMTFfQ0hBTl8yR0haOwogCWhkci0mZ3Q7cnRfY2hiaXRtYXNrID0gY3B1X3RvX2xlMTYoZmxhZ3MpOwogCkBAIC0xNzM1LDYgJiM0MzsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJaWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAomIzQzOwkvKiB0cmFjayB0aGUgZnJlcXVlbmN5ICovCiYjNDM7CWluZm8tJmd0O3JhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC0mZ3Q7Y2VudGVyX2ZyZXE7CiYjNDM7CiAJZ2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7CiAKIAlpZiAoaHdzaW1fdmlydGlvX2VuYWJsZWQpIHsKQEAgLTE5MTIsNyAmIzQzOzE5MTUsNyBAQCBzdGF0aWMgYm9vbCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAogCW1hYzgwMjExX2h3c2ltX3dyaXRlX3RzZihkYXRhLCBza2IsIHNpbV90c2YpOwogCi0JbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuKTsKJiM0MzsJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuLSZndDtjZW50ZXJfZnJlcSk7CiAKIAltZW1zZXQoJmFtcDtyeF9zdGF0dXMsIDAsIHNpemVvZihyeF9zdGF0dXMpKTsKIAlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQ7CkBAIC0yMjc2LDcgJiM0MzsyMjc5LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJYWNrID0gbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbm9fbmwoaHcsIHNrYiwgY2hhbm5lbCk7CiAKIAlpZiAoYWNrICZhbXA7JmFtcDsgc2tiLSZndDtsZW4gJmd0Oz0gMTYpCi0JCW1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGNoYW5uZWwsIGhkci0mZ3Q7YWRkcjIpOwomIzQzOwkJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soY2hhbm5lbC0mZ3Q7Y2VudGVyX2ZyZXEsIGhkci0mZ3Q7YWRkcjIpOwogCiAJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7CiAKQEAgLTYzOTEsNiAmIzQzOzYzOTQsOCBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlib29sIG5vX21vbml0b3I7CiYjNDM7CXUzMiBmcmVxOwogCiAJaWYgKCFpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdIHx8CiAJICAgICFpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSB8fApAQCAtNjQwMiw2ICYjNDM7NjQwNyw3IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsCiAJc3JjID0gKHZvaWQgKilubGFfZGF0YShpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTsKIAlod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTsKIAlyZXRfc2tiX2Nvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSk7CiYjNDM7CW5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7CiAKIAlkYXRhMiA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoc3JjKTsKIAlpZiAoIWRhdGEyKQpAQCAtNjQzNiw3ICYjNDM7NjQ0MiwxMSBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCWlmICghZm91bmQpCiAJCWdvdG8gb3V0OwogCi0JbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi0mZ3Q7aHcsIHNrYiwgZGF0YTItJmd0O2NoYW5uZWwpOwomIzQzOwl0eGkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiYjNDM7CWZyZXEgPSAodWludHB0cl90KXR4aS0mZ3Q7cmF0ZV9kcml2ZXJfZGF0YVsxXTsKJiM0MzsKJiM0MzsJaWYgKCFub19tb25pdG9yKQomIzQzOwkJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi0mZ3Q7aHcsIHNrYiwgZnJlcSk7CiAKIAkvKiBUeCBpbmZvIHJlY2VpdmVkIGJlY2F1c2UgdGhlIGZyYW1lIHdhcyBicm9hZGNhc3RlZCBvbiB1c2VyIHNwYWNlLAogCSBzbyB3ZSBnZXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbzogdHggYXR0ZW1wdHMgYW5kIHNrYiBjb250cm9sIGJ1ZmYgKi8KQEAgLTY0NDUsOCAmIzQzOzY0NTUsNiBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCQkgICAgICAgaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7CiAKIAkvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqLwotCXR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQogCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGkpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkmIzQzOyYjNDM7KSB7CkBAIC02NDY2LDggJiM0Mzs2NDc0LDcgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMiwKIAlpZiAoIShod3NpbV9mbGFncyAmYW1wOyBIV1NJTV9UWF9DVExfTk9fQUNLKSAmYW1wOyZhbXA7CiAJICAgKGh3c2ltX2ZsYWdzICZhbXA7IEhXU0lNX1RYX1NUQVRfQUNLKSkgewogCQlpZiAoc2tiLSZndDtsZW4gJmd0Oz0gMTYpCi0JCQltYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhkYXRhMi0mZ3Q7Y2hhbm5lbCwKLQkJCQkJCSAgIGhkci0mZ3Q7YWRkcjIpOwomIzQzOwkJCW1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGZyZXEsIGhkci0mZ3Q7YWRkcjIpOwogCQl0eGktJmd0O2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAl9CiAKQEAgLTY1MzUsNiAmIzQzOzY1NDIsNTEgQEAgc3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCQkJZ290byBvdXQ7CiAJfQogCiYjNDM7CS8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi8KJiM0MzsJaWYgKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKSB7CiYjNDM7CQl1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTsKJiM0MzsJCXN0cnVjdCBza19idWZmICpvcmlnX3NrYiwgKmZvdW5kID0gTlVMTDsKJiM0MzsJCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICp0eGRhdGE7CiYjNDM7CQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTsKJiM0MzsJCWNvbnN0IHU4ICp0cmFuc21pdHRlcjsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CQl0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pOwomIzQzOwkJdHhkYXRhID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcih0cmFuc21pdHRlcik7CiYjNDM7CQlpZiAoIXR4ZGF0YSB8fCB0eGRhdGEtJmd0O25ldGdyb3VwICE9IGRhdGEyLSZndDtuZXRncm91cCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHhkYXRhLSZndDtwZW5kaW5nLmxvY2ssIGZsYWdzKTsKJiM0MzsJCXNrYl9xdWV1ZV93YWxrKCZhbXA7dHhkYXRhLSZndDtwZW5kaW5nLCBvcmlnX3NrYikgewomIzQzOwkJCXVpbnRwdHJfdCBza2JfY29va2llOwomIzQzOwomIzQzOwkJCXR4aSA9IElFRUU4MDIxMV9TS0JfQ0Iob3JpZ19za2IpOwomIzQzOwkJCXNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS0mZ3Q7cmF0ZV9kcml2ZXJfZGF0YVswXTsKJiM0MzsKJiM0MzsJCQlpZiAoc2tiX2Nvb2tpZSA9PSBjb29raWUpIHsKJiM0MzsJCQkJZm91bmQgPSBvcmlnX3NrYjsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogdGhhdCYjMzk7cyB3ZWlyZCAqLwomIzQzOwkJaWYgKCFmb3VuZCkgewomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eGRhdGEtJmd0O3BlbmRpbmcubG9jaywgZmxhZ3MpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGZyYW1lX2RhdGFfbGVuICZndDsgZm91bmQtJmd0O2xlbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcHNrYl9leHBhbmRfaGVhZChmb3VuZCwgMCwgZnJhbWVfZGF0YV9sZW4gLSBmb3VuZC0mZ3Q7bGVuLAomIzQzOwkJCQkgICAgIEdGUF9BVE9NSUMpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3R4ZGF0YS0mZ3Q7cGVuZGluZy5sb2NrLCBmbGFncyk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlza2JfdHJpbShmb3VuZCwgMCk7CiYjNDM7CQlza2JfcHV0X2RhdGEoZm91bmQsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eGRhdGEtJmd0O3BlbmRpbmcubG9jaywgZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiAJLyogY2hlY2sgaWYgcmFkaW8gaXMgY29uZmlndXJlZCBwcm9wZXJseSAqLwogCiAJaWYgKChkYXRhMi0mZ3Q7aWRsZSAmYW1wOyZhbXA7ICFkYXRhMi0mZ3Q7dG1wX2NoYW4pIHx8ICFkYXRhMi0mZ3Q7c3RhcnRlZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIxNgoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyB0aGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyBmdXp6LXdvcnRoeSwgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gaXQgbWlnaHQgbmVlZCwgYW5kIHdoYXQgc3ltYm9scyB3ZSBzaG91bGQgYmUgZm9jdXNpbmcgb24uIEZpcnN0LCB0aGUgZGlmZi4uLiBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0b3VjaGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oYCBhbmQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gUmlnaHQsIGBtYWM4MDIxMV9od3NpbWAgaXMgdGhhdCBoYW5keSBzb2Z0d2FyZSBzaW11bGF0b3IgZm9yIDgwMi4xMSByYWRpb3Mgd2l0aGluIG1hYzgwMjExLiBHb29kLiBJdCYjMzk7cyBhIHZpcnR1YWwgbmV0ZGV2L3dpcmVsZXNzIGRyaXZlciwgYWNjZXNzaWJsZSB0aHJvdWdoIGdlbmVyaWMgbmV0bGluaywgc3BlY2lmaWNhbGx5IHRoZSBubDgwMjExL2h3c2ltIGdlbmwgaW50ZXJmYWNlLiBLbm93aW5nIFN5emthbGxlciBhbHJlYWR5IGV4ZXJjaXNlcyBpdCB2aWEgdGhpcyB2ZXJ5IGludGVyZmFjZSBpcyBhIHBsdXMg4oCTIG1lYW5zIHdlIGhhdmUgYSBrbm93biBhdHRhY2sgc3VyZmFjZS4KCk5vdywgdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4uLmxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqICAgV2UmIzM5O3ZlIGdvdCBhIG5ldyBlbnVtIGBod3NpbV9hdHRyc2AgZW50cnk6IGBIV1NJTV9BVFRSX05PX01PTklUT1JgLiBUaGlzIGlzIGludGVyZXN0aW5nLgoqICAgVGhlIGBod3NpbV9nZW5sX3BvbGljeWAgaXMgdXBkYXRlZCB0byBpbmNsdWRlIHRoYXQgbmV3IGF0dHJpYnV0ZSBhcyBhIGZsYWcuIE9rYXkuCiogICBGdW5jdGlvbnMgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tgIGhhdmUgaGFkIHRoZWlyIGNoYW5uZWwgcG9pbnRlciBhcmd1bWVudHMgcmVwbGFjZWQgd2l0aCBhIGB1MzIgZnJlcWAg4oCTIHVzaW5nIGBpbmZvLSZndDtyYXRlX2RyaXZlcl9kYXRhWzFdYCB0byBzdG9yZSB0aGUgY2VudGVyIGZyZXF1ZW5jeS4gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcgaW5wdXQgdmFsdWVzLgoqICAgSW4gYG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25sYCwgd2UmIzM5O3JlIHNldHRpbmcgYGluZm8tJmd0O3JhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC0mZ3Q7Y2VudGVyX2ZyZXE7YC4KKiAgIFRoZW4gaW4gYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgLCB3ZSBhcmUgaGFuZGxpbmcgYEhXU0lNX0FUVFJfTk9fTU9OSVRPUmAgYW5kIHVzaW5nIHRoYXQgZnJlcXVlbmN5IGZyb20gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLgoqICAgQW5kIGZpbmFsbHksIGluIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLi4uIHRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gV2UmIzM5O3ZlIGdvdCBhIG5ldyBjb2RlIGJsb2NrLiBJZiBjZXJ0YWluIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQgKGBIV1NJTV9BVFRSX0NPT0tJRWAgYW5kIGBIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJgKSwgaXQgbG9va3MgdXAgdGhlIHRyYW5zbWl0dGVyIGh3c2ltXF9kYXRhLCBjaGVja3MgdGhlIHBlbmRpbmcgcXVldWUgZm9yIGEgbWF0Y2hpbmcgY29va2llLCBleHBhbmRzIHRoZSBoZWFkIGlmIG5lY2Vzc2FyeSAoYHBza2JfZXhwYW5kX2hlYWRgKSwgdHJpbXMsIGFuZCByZXBsYWNlcyB0aGUgc2tiIGRhdGEgd2l0aCBgZnJhbWVfZGF0YWAgdXNpbmcgYHNrYl9wdXRfZGF0YWAuIFRoYXQgYHBza2JfZXhwYW5kX2hlYWRgIGNhbGwgaXMgb2Z0ZW4gYSBnb29kIHBsYWNlIHRvIGxvb2suCgpUaGUgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gY2xvbmVkIGZyYW1lcywgdHJhbnNtaXR0ZXIgZGF0YSwgYW5kIHRoZSBtYW5pcHVsYXRpb24gb2Ygc2ticy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgYW5kIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBhIGJpdCBiZXR0ZXIuIFRoaXMgbG9va3MgcmlwZSBmb3Igc29tZSBkaXJlY3RlZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTYzODI9c3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02NDkwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NjQ5MTpzdGF0aWMgaW50IGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02NDkyLVx0XHRcdFx0XHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzE1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGh3c2ltX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNjYtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNjc6XHRcdC5kb2l0ID0gaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE2OC1cdH0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzM0OD1zdGF0aWMgaW50IGh3c2ltX3ZpcnRpb19oYW5kbGVfY21kKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzM3Mi1cdGNhc2UgSFdTSU1fQ01EX0ZSQU1FOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzM3MzpcdFx0aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHNrYiwgXHUwMDI2aW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03Mzc0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBtYWM4MDIxMV9od3NpbV9tYWluLmMgYW5kIG1hYzgwMjExX2h3c2ltKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmVmb3JlIEkgc3RhcnQgcG9raW5nIGFyb3VuZCB3aXRoIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgIGFuZCBgbWFjODAyMTFfaHdzaW1gLCBJICpuZWVkKiB0byB2ZXJpZnkgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBObyBwb2ludCB3YXN0aW5nIHRpbWUgaWYgYSBuZWNlc3Nhcnkgb3B0aW9uIGlzbiYjMzk7dCBlbmFibGVkLCBvciBpZiBzb21ldGhpbmcgZWxzZSBpcyBjb25mbGljdGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQmIzM5O3MgZ3VhcmRpbmcgdGhvc2Ugc3BlY2lmaWMgZmlsZXMgYW5kIHRoZSBjb3JlIGBtYWM4MDIxMV9od3NpbWAgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBrbm93OiBhcmUgd2UgZGVwZW5kZW50IG9uIHNwZWNpZmljIG5ldHdvcmtpbmcgZmVhdHVyZXMsIGRlYnVnIG9wdGlvbnMsIG9yIHBlcmhhcHMgZXZlbiBhIHBhcnRpY3VsYXIgd2lyZWxlc3Mgc3RhbmRhcmQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjb25mbGljdHMsIGxpa2UgcG90ZW50aWFsbHkgYSBkZXBlbmRlbmN5IG9uIGEgcGxhdGZvcm0gdGhhdCBkb2VzbiYjMzk7dCBmdWxseSBzdXBwb3J0IGFsbCB0aGUgdGVzdCBmZWF0dXJlcyBpbiB0aG9zZSBmaWxlcz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgaW1tZWRpYXRlIGZpbGUsIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGVudHJ5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcHJlY29uZGl0aW9ucy4gVGhlbiBJJiMzOTtsbCBleHBhbmQgb3V0d2FyZHMgdG8gYW55dGhpbmcgdGhhdCBkZXBlbmRzIG9uIGBtYWM4MDIxMV9od3NpbWAuIEkmIzM5O20gYWxzbyB0aGlua2luZyB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBtb2R1bGVzIHRoZW1zZWx2ZXMgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGZyb20gYSBkZXBlbmRlbmN5IHBvaW50IG9mIHZpZXcuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjE6b2JqLSQoQ09ORklHX01BQzgwMjExX0hXU0lNKVx0JiM0Mzs9IG1hYzgwMjExX2h3c2ltLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvTWFrZWZpbGUtMi1tYWM4MDIxMV9od3NpbS1vYmpzXHRcdCYjNDM7PSBtYWM4MDIxMV9od3NpbV9tYWluLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDo5OiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MTA6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0xMS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjIwPXN0cnVjdCBod3NpbV90eF9yYXRlIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjMzLSAqXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM0OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfUlRTX0NUUzogVXNlIFJUUy9DVFMgZXhjaGFuZ2UgZm9yIHRoaXMgcmF0ZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzU6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9DVFNfUFJPVEVDVDogQ1RTLXRvLXNlbGYgcHJvdGVjdGlvbiBpcyByZXF1aXJlZC5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yMzYtICpcdFRoaXMgaXMgc2V0IGlmIHRoZSBjdXJyZW50IEJTUyByZXF1aXJlcyBFUlAgcHJvdGVjdGlvbi5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzc6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTogVXNlIHNob3J0IHByZWFtYmxlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzODogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTOiBIVCByYXRlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzOTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUzogVkhUIE1DUyByYXRlLCBpbiB0aGlzIGNhc2UgdGhlIGlkeCBmaWVsZCBpc1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0MC0gKlx0c3BsaXQgaW50byBhIGhpZ2hlciA0IGJpdHMgKE5zcykgYW5kIGxvd2VyIDQgYml0cyAoTUNTIG51bWJlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDE6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX0dSRUVOX0ZJRUxEOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJhdGUgc2hvdWxkIGJlIHVzZWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNDItICpcdGluIEdyZWVuZmllbGQgbW9kZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDM6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDXzQwX01IWl9XSURUSDogSW5kaWNhdGVzIGlmIHRoZSBDaGFubmVsIFdpZHRoIHNob3VsZCBiZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0NC0gKlx0NDAgTUh6LlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0NTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfODBfTUhaX1dJRFRIOiBJbmRpY2F0ZXMgODAgTUh6IHRyYW5zbWlzc2lvblxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0NjogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSDogSW5kaWNhdGVzIDE2MCBNSHogdHJhbnNtaXNzaW9uXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQ3LSAqXHQoODAmIzQzOzgwIGlzbiYjMzk7dCBzdXBwb3J0ZWQgeWV0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0ODogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE6IFRoZSBmcmFtZSBzaG91bGQgYmUgdHJhbnNtaXR0ZWQgb24gYm90aCBvZlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0OS0gKlx0dGhlIGFkamFjZW50IDIwIE1IeiBjaGFubmVscywgaWYgdGhlIGN1cnJlbnQgY2hhbm5lbCB0eXBlIGlzXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjUwLSAqXHROTDgwMjExX0NIQU5fSFQ0ME1JTlVTIG9yIE5MODAyMTFfQ0hBTl9IVDQwUExVUy5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNTE6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJOiBTaG9ydCBHdWFyZCBpbnRlcnZhbCBzaG91bGQgYmUgdXNlZCBmb3IgdGhpc1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI1Mi0gKlx0cmF0ZS5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjU0PWVudW0gaHdzaW1fdHhfcmF0ZV9mbGFncyB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU1Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX1JUU19DVFNcdFx0PSBCSVQoMCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU2Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX0NUU19QUk9URUNUXHRcdD0gQklUKDEpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI1NzpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRVx0PSBCSVQoMiksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjU4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI1OS1cdC8qIHJhdGUgaW5kZXggaXMgYW4gSFQvVkhUIE1DUyBpbnN0ZWFkIG9mIGFuIGluZGV4ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjYwOlx0TUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTXHRcdFx0PSBCSVQoMyksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjYxOlx0TUFDODAyMTFfSFdTSU1fVFhfUkNfR1JFRU5fRklFTERcdFx0PSBCSVQoNCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjYyOlx0TUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIXHRcdD0gQklUKDUpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MzpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX0RVUF9EQVRBXHRcdD0gQklUKDYpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2NDpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJXHRcdD0gQklUKDcpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2NTpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1ZIVF9NQ1NcdFx0XHQ9IEJJVCg4KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjY6XHRNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEhcdFx0PSBCSVQoOSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjY3Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSFx0XHQ9IEJJVCgxMCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjY4LX07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oPTMzMT1lbnVtIGh3c2ltX3JhdGVfaW5mb19hdHRyaWJ1dGVzIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMzUwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjM1MTojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9IICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9pLmgtOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjEwOiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9JX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjExOiNkZWZpbmUgX19NQUM4MDIxMV9IV1NJTV9JX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTEyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oPTE2NT12b2lkIGllZWU4MDIxMV9od3NpbV93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTE2Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjE2ODojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9JX0ggKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTI9c3RhdGljIHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGNvbnN0IHU4ICphZGRyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNzovKiBNQUM4MDIxMV9IV1NJTSBuZXRsaW5rIGZhbWlseSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4LXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgaHdzaW1fZ2VubF9mYW1pbHk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgaHdzaW1fbWNncnBzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzI4Oi8qIE1BQzgwMjExX0hXU0lNIG5ldGxpbmsgcG9saWN5ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MjktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9ODY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBod3NpbV9nZW5sX3BvbGljeVtIV1NJTV9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy05MDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo5MDM6LyogTUFDODAyMTFfSFdTSU0gdmlydGlvIHF1ZXVlcyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtOTA0LXN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpod3NpbV92cXNbSFdTSU1fTlVNX1ZRU107XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MTU3NT1zdGF0aWMgaW5saW5lIHUxNiB0cmFuc190eF9yYXRlX2ZsYWdzX2llZWUyaHdzaW0oc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1NzktXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4MDpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9SVFNfQ1RTO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4MS1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4MjpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9DVFNfUFJPVEVDVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODMtXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODQ6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg1LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19NQ1MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg2Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4Ny1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg4Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfR1JFRU5fRklFTEQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg5LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTkwOlx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5MS1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTkyOlx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTkzLVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTQ6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19TSE9SVF9HSTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTUtXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1ZIVF9NQ1MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTk2Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTctXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzgwX01IWl9XSURUSClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTg6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEg7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTk5LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ18xNjBfTUhaX1dJRFRIKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTYwMDpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDXzE2MF9NSFpfV0lEVEg7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNjAxLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM0ODc9c3RhdGljIGNvbnN0IGNoYXIgbWFjODAyMTFfaHdzaW1fZ3N0cmluZ3Nfc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM0OTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNDk4OiNkZWZpbmUgTUFDODAyMTFfSFdTSU1fU1NUQVRTX0xFTiBBUlJBWV9TSVpFKG1hYzgwMjExX2h3c2ltX2dzdHJpbmdzX3N0YXRzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzQ5OS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0zNTA5PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fZ2V0X2V0X3NzZXRfY291bnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUxMi1cdGlmIChzc2V0ID09IEVUSF9TU19TVEFUUylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM1MTM6XHRcdHJldHVybiBNQUM4MDIxMV9IV1NJTV9TU1RBVFNfTEVOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUxNC1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM1MTc9c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZ2V0X2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM1MzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNTMzOlx0V0FSTl9PTihpICE9IE1BQzgwMjExX0hXU0lNX1NTVEFUU19MRU4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUzNC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NTY1MD1zdGF0aWMgY29uc3QgdTggaWZ0eXBlc19leHRfY2FwYV9hcFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjU5OiNkZWZpbmUgTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTXHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTY2MC1cdEZJRUxEX1BSRVBfQ09OU1QoSUVFRTgwMjExX01MRF9DQVBfT1BfVElEX1RPX0xJTktfTUFQX05FR19TVVBQLCBcXFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NjU9c3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01NjcyLVx0XHRcdFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjczOlx0XHQubWxkX2NhcGFfYW5kX29wcyA9IE1BQzgwMjExX0hXU0lNX01MRF9DQVBBX09QUyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NzQtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxOTk9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBod3NpbV9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MjAwOlx0Lm5hbWUgPSBcJiMzNDtNQUM4MDIxMV9IV1NJTVwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcyMDEtXHQudmVyc2lvbiA9IDEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzUxOT1zdGF0aWMgdm9pZCBod3NpbV92aXJ0aW9fcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc1MjctXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NTI4Oi8qIE1BQzgwMjExX0hXU0lNIHZpcnRpbyBkZXZpY2UgaWQgdGFibGUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc1Mjktc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NTMwOlx0eyBWSVJUSU9fSURfTUFDODAyMTFfSFdTSU0sIFZJUlRJT19ERVZfQU5ZX0lEIH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03NTMxLVx0eyAwIH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTc4PXN0YXRpYyB1NjQgaHdzaW1fbmFuX2dldF9tYXN0ZXJfcmFuayhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo4MzpcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVApIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODQtXHRcdG1hc3Rlcl9wcmVmID0gZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz0yMTY9dm9pZCBtYWM4MDIxMV9od3NpbV9uYW5fcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy0yNzMtXHRpZiAoKHNsb3QgIT0gU0xPVF8yNEdIWl9EVyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6Mjc0Olx0ICAgICBkYXRhLVx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikgfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMjc1LVx0ICAgIHJ4X3N0YXR1cy5mcmVxICE9IDI0MzcpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00MzYtXHRcdCAgICAoY2cgPT0gb3duX2NnIFx1MDAyNlx1MDAyNiBmcmFtZV9hbXIgXHUwMDNlIGN1cnJfYW1yKSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo0Mzc6XHRcdCAgICBkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00MzgtXHRcdFx0LyogQXZvaWQgYSBzdGF0ZSB0cmFuc2l0aW9uICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00NjgtXHRcdFx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjQ2OTpcdFx0XHRkYXRhLVx1MDAzZW5hbi5waGFzZSA9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDcwLVx0XHRcdGRhdGEtXHUwMDNlbmFuLnJhbmRvbV9mYWN0b3JfdmFsaWRfZHdzdCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz02MTI9bWFjODAyMTFfaHdzaW1fbmFuX2V4ZWNfc3RhdGVfdHJhbnNpdGlvbnMoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MjUtXHRpZiAoZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3RyYW5zaXRpb25fc2NvcmUgXHUwMDNjIDMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYyNjpcdFx0ZGF0YS1cdTAwM2VuYW4ucm9sZSA9IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjI3Olx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYyOC1cdFx0IGRhdGEtXHUwMDNlbmFuLm1hc3Rlcl90cmFuc2l0aW9uX3Njb3JlIFx1MDAzZT0gMylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjI5Olx0XHRkYXRhLVx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfU1lOQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMwOlx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzEtXHRcdCBkYXRhLVx1MDAzZW5hbi5zeW5jX3RyYW5zaXRpb25fc2NvcmUgXHUwMDNlPSAzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzI6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMzOlx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjM0LVx0XHQgZGF0YS1cdTAwM2VuYW4uc3luY190cmFuc2l0aW9uX3Njb3JlIFx1MDAzYyAzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzU6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzYtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NDEtXHQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjQyOlx0aWYgKGRhdGEtXHUwMDNlbmFuLnJvbGUgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTUFTVEVSIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NDMtXHQgICAgIWhydGltZXJfYWN0aXZlKFx1MDAyNmRhdGEtXHUwMDNlbmFuLmRpc2NvdmVyeV9iZWFjb25fdGltZXIpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjUzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NTQ6XHRcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NTU6XHRcdFx0ZGF0YS1cdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NTYtXHRcdFx0ZGF0YS1cdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gTkFOX1dBUk1VUF9EV1NUO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjU5LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NjA6XHRcdFx0ZGF0YS1cdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY2MS1cdFx0XHRkYXRhLVx1MDAzZW5hbi5yYW5kb21fZmFjdG9yX3ZhbGlkX2R3c3QgPVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9Njk1PW1hYzgwMjExX2h3c2ltX25hbl90eF9iZWFjb24oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy03NTAtXHRuYW5fYXR0ci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YobWFzdGVyX2luZGljYXRpb24pKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NzUxOlx0aWYgKGRhdGEtXHUwMDNlbmFuLnBoYXNlID09IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy03NTItXHRcdG1hc3Rlcl9pbmRpY2F0aW9uLm1hc3Rlcl9wcmVmID0gZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz03NzQ9bWFjODAyMTFfaHdzaW1fbmFuX3Nsb3RfdGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODA3LVx0XHR0eF9zeW5jX2JlYWNvbiA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjgwODpcdFx0XHRkYXRhLVx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODA5Olx0XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgIT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTk9OX1NZTkM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgxMC1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTg2Nz1tYWM4MDIxMV9od3NpbV9uYW5fZGlzY292ZXJ5X2JlYWNvbl90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04NzktXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFx1MDAyNmRhdGEtXHUwMDNlbmFuLnN0YXRlX2xvY2spIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgwOlx0XHRpZiAoZGF0YS1cdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4gfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgxOlx0XHQgICAgZGF0YS1cdTAwM2VuYW4ucm9sZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTg4Mi1cdFx0XHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz05MDk9aW50IG1hYzgwMjExX2h3c2ltX25hbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyNi1cdFx0LyogU3RhcnQgaW4gdGhlIFwmIzM0O3NjYW5cJiMzNDsgcGhhc2UgYW5kIHN0YXkgdGhlcmUgZm9yIGEgbGl0dGxlIGJpdCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo5Mjc6XHRcdGRhdGEtXHUwMDNlbmFuLnBoYXNlID0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU47XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyOC1cdFx0ZGF0YS1cdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gMTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkzMC1cdFx0ZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWYgPSBjb25mLVx1MDAzZW1hc3Rlcl9wcmVmO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo5MzE6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkzMi1cdFx0bWVtc2V0KFx1MDAyNmRhdGEtXHUwMDNlbmFuLmN1cnJlbnRfYW1pLCAwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9MTIyNj1ib29sIG1hYzgwMjExX2h3c2ltX25hbl9yZWNlaXZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMTIzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6MTIzNjpcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMTIzNy1cdFx0cmV0dXJuIGNoYW5uZWwtXHUwMDNlY2VudGVyX2ZyZXEgPT0gMjQzNztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjc6I2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX05BTl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjg6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX05BTl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oPTEwPWVudW0gbWFjODAyMTFfaHdzaW1fbmFuX3BoYXNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTE6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTI6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMzpcdE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmgtMTQtfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oPTE2PWVudW0gbWFjODAyMTFfaHdzaW1fbmFuX3JvbGUge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxNzpcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTg6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxOTpcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX05PTl9TWU5DLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC0yMC19O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg9OTk9dm9pZCBtYWM4MDIxMV9od3NpbV9uYW5fbG9jYWxfc2NoZWRfY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTEwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTAyOiNlbmRpZiAvKiBfX01BQzgwMjExX0hXU0lNX05BTl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBWaXJ0dWFsIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGRyaXZlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBqdWljeSBkZXRhaWxzIGFib3V0IGZlYXR1cmUgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGtlcHQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHdpcmVsZXNzIGxhbmRzY2FwZSBhbmQgd2hhdCYjMzk7cyBjb25maWd1cmFibGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTA0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqSW52ZXN0aWdhdGluZyBNQUM4MDIxMSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE1BQzgwMjExYCBhbmQgc3BlY2lmaWNhbGx5IGBNQUM4MDIxMV9IV1NJTWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIOKAkyBuYW1lbHksIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGFzIGl0IHNob3VsZCBkZWZpbmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBmcm9tIHRoZXJlLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBNQUM4MDIxMV9IV1NJTWAgaGFzIHNwZWNpZmljIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgbWV0IGJlZm9yZSBpdCBjYW4gZXZlbiBiZSBjb25zaWRlcmVkLCBvciBpZiBpdCBpcyBqdXN0IGEgc3Vib3B0aW9uIG9mIHRoZSBnZW5lcmFsIGBNQUM4MDIxMWAgY29uZmlndXJhdGlvbi4gSSBtaWdodCBhbHNvIG5lZWQgdG8gbG9vayBhdCBwYXJlbnQgS2NvbmZpZyBmaWxlcyBvciBkZXBlbmRlbmNpZXMsIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgaXMgZGVmaW5lZCBvciBjb25kaXRpb25lZCBoaWdoZXIgdXAgaW4gdGhlIGhpZXJhcmNoeS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgdXN1YWxseSBoYXBwZW5zLiBJIHNob3VsZCBxdWlja2x5IGJlIGFibGUgdG8gc2VlIHRoZSByZWxldmFudCAmIzM5O2RlcGVuZHMgb24mIzM5OyBjbGF1c2VzIGFuZCBhbnkgcG90ZW50aWFsbHkgY29uZmxpY3Rpbmcgb3B0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb25maWd1cmF0aW9uIGNvbnRleHQgaXMgdGhlIGtleSB0byBzb2x2aW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzMxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgbGluZSBvZiB0aG91Z2h0LCByZWZsZWN0aW5nIGFzIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgRmlsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMi4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgY29uZmlndXJhdGlvbiBmaWxlLCBteSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgcmVnaW9uIGxpa2VseSBkZWZpbmVzIHNvbWUgY29yZSwgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byB0aGUgbWFjODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBLbm93aW5nIHRoYXQgbWFjODAyMTEgaXMgdGhlIGhlYXJ0IG9mIHRoZSBMaW51eCB3aXJlbGVzcyBzdGFjaywgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBnZW5lcmFsIG1vZHVsZSBvciBhIHRvcC1sZXZlbCBtYWNyby4gSSYjMzk7bSBnb2luZyBpbiB3aXRoIHRoZSBleHBlY3RhdGlvbiBvZiBnZXR0aW5nIGEgZm91bmRhdGlvbmFsIG92ZXJ2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1BQzgwMjExXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAgNTpcdFx0c2VsZWN0IENSWVBUT1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ19NQUNTXG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTFcbiAgMTQ6XHRcdCAgbmV0d29ya2luZyBzdGFjay5cbiAgMTU6XHRcbiAgMTY6XHRjb21tZW50IFwmIzM0O0NGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExPW5cbiAgMTg6XHRcbiAgMTk6XHRpZiBNQUM4MDIxMSAhPSBuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODM3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGNvZGUgY2hhbmdlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgZnVsbHksIHNvIEkmIzM5O2xsIHZlcmlmeSB0aGVpciByZWFjaCwgcHVycG9zZSwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGVkZ2UgY2FzZXMuCgoqKkNvZGUgUmV2aWV3IC0gQW5hbHl6aW5nIFJlY2VudCBDaGFuZ2VzIGluIG1hYzgwMjExX2h3c2ltKioKCkZpcnN0LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubGAsIGBtYWM4MDIxMV9od3NpbV90eGAsIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgYW5kIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLiBUaGV5JiMzOTtyZSB0aGUgY29yZSBvZiB0aGUgcmVjZW50IHdvcmsuIEkgd2lsbCBhcHByb2FjaCB0aGlzIHN5c3RlbWF0aWNhbGx5LgoKVG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBjb2RlIGJsb2NrIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNjQ5MCB0byA2NTkwLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IGZvciB0aGVzZSBmdW5jdGlvbnMuIEkgd2lsbCBzdGFydCBieSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGxpbmUgYnkgbGluZSBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NDkwOlx0XG42NDkxOlx0c3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuNjQ5MjpcdFx0XHRcdFx0XHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG42NDkzOlx0e1xuNjQ5NDpcdFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEyO1xuNjQ5NTpcdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzO1xuNjQ5NjpcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbjY0OTc6XHRcdGNvbnN0IHU4ICpkc3Q7XG42NDk4Olx0XHRpbnQgZnJhbWVfZGF0YV9sZW47XG42NDk5Olx0XHR2b2lkICpmcmFtZV9kYXRhO1xuNjUwMDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG42NTAxOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBOVUxMO1xuNjUwMjpcdFxuNjUwMzpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0gfHxcbjY1MDQ6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSB8fFxuNjUwNTpcdFx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfUlhfUkFURV0gfHxcbjY1MDY6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1NJR05BTF0pXG42NTA3Olx0XHRcdGdvdG8gb3V0O1xuNjUwODpcdFxuNjUwOTpcdFx0ZHN0ID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0pO1xuNjUxMDpcdFx0ZnJhbWVfZGF0YV9sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GUkFNRV0pO1xuNjUxMTpcdFx0ZnJhbWVfZGF0YSA9ICh2b2lkICopbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSk7XG42NTEyOlx0XG42NTEzOlx0XHRpZiAoZnJhbWVfZGF0YV9sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgfHxcbjY1MTQ6XHRcdCAgICBmcmFtZV9kYXRhX2xlbiBcdTAwM2UgSUVFRTgwMjExX01BWF9EQVRBX0xFTilcbjY1MTU6XHRcdFx0Z290byBlcnI7XG42NTE2Olx0XG42NTE3Olx0XHQvKiBBbGxvY2F0ZSBuZXcgc2tiIGhlcmUgKi9cbjY1MTg6XHRcdHNrYiA9IGFsbG9jX3NrYihmcmFtZV9kYXRhX2xlbiwgR0ZQX0tFUk5FTCk7XG42NTE5Olx0XHRpZiAoc2tiID09IE5VTEwpXG42NTIwOlx0XHRcdGdvdG8gZXJyO1xuNjUyMTpcdFxuNjUyMjpcdFx0LyogQ29weSB0aGUgZGF0YSAqL1xuNjUyMzpcdFx0c2tiX3B1dF9kYXRhKHNrYiwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pO1xuNjUyNDpcdFxuNjUyNTpcdFx0ZGF0YTIgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGRzdCk7XG42NTI2Olx0XHRpZiAoIWRhdGEyKVxuNjUyNzpcdFx0XHRnb3RvIG91dDtcbjY1Mjg6XHRcbjY1Mjk6XHRcdGlmIChkYXRhMi1cdTAwM2V1c2VfY2hhbmN0eCkge1xuNjUzMDpcdFx0XHRpZiAoZGF0YTItXHUwMDNldG1wX2NoYW4pXG42NTMxOlx0XHRcdFx0Y2hhbm5lbCA9IGRhdGEyLVx1MDAzZXRtcF9jaGFuO1xuNjUzMjpcdFx0fSBlbHNlIHtcbjY1MzM6XHRcdFx0Y2hhbm5lbCA9IGRhdGEyLVx1MDAzZWNoYW5uZWw7XG42NTM0Olx0XHR9XG42NTM1Olx0XG42NTM2Olx0XHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XG42NTM3Olx0XHRcdGlmIChod3NpbV9uZXRfZ2V0X25ldGdyb3VwKGdlbmxfaW5mb19uZXQoaW5mbykpICE9XG42NTM4Olx0XHRcdCAgICBkYXRhMi1cdTAwM2VuZXRncm91cClcbjY1Mzk6XHRcdFx0XHRnb3RvIG91dDtcbjY1NDA6XHRcbjY1NDE6XHRcdFx0aWYgKGluZm8tXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cdTAwM2V3bWVkaXVtZClcbjY1NDI6XHRcdFx0XHRnb3RvIG91dDtcbjY1NDM6XHRcdH1cbjY1NDQ6XHRcbjY1NDU6XHRcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cbjY1NDY6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcdTAwMjZcdTAwMjZcbjY1NDc6XHRcdCAgICBpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pIHtcbjY1NDg6XHRcdFx0dTY0IGNvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcbjY1NDk6XHRcdFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xuNjU1MDpcdFx0XHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqdHhkYXRhO1xuNjU1MTpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTtcbjY1NTI6XHRcdFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xuNjU1MzpcdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNjU1NDpcdFxuNjU1NTpcdFx0XHR0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG42NTU2Olx0XHRcdHR4ZGF0YSA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIodHJhbnNtaXR0ZXIpO1xuNjU1NzpcdFx0XHRpZiAoIXR4ZGF0YSB8fCB0eGRhdGEtXHUwMDNlbmV0Z3JvdXAgIT0gZGF0YTItXHUwMDNlbmV0Z3JvdXApXG42NTU4Olx0XHRcdFx0Z290byBvdXQ7XG42NTU5Olx0XG42NTYwOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbjY1NjE6XHRcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcsIG9yaWdfc2tiKSB7XG42NTYyOlx0XHRcdFx0dWludHB0cl90IHNrYl9jb29raWU7XG42NTYzOlx0XG42NTY0Olx0XHRcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihvcmlnX3NrYik7XG42NTY1Olx0XHRcdFx0c2tiX2Nvb2tpZSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF07XG42NTY2Olx0XG42NTY3Olx0XHRcdFx0aWYgKHNrYl9jb29raWUgPT0gY29va2llKSB7XG42NTY4Olx0XHRcdFx0XHRmb3VuZCA9IG9yaWdfc2tiO1xuNjU2OTpcdFx0XHRcdFx0YnJlYWs7XG42NTcwOlx0XHRcdFx0fVxuNjU3MTpcdFx0XHR9XG42NTcyOlx0XG42NTczOlx0XHRcdC8qIHRoYXQmIzM5O3Mgd2VpcmQgKi9cbjY1NzQ6XHRcdFx0aWYgKCFmb3VuZCkge1xuNjU3NTpcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuNjU3NjpcdFx0XHRcdGdvdG8gb3V0O1xuNjU3NzpcdFx0XHR9XG42NTc4Olx0XG42NTc5Olx0XHRcdGlmIChmcmFtZV9kYXRhX2xlbiBcdTAwM2UgZm91bmQtXHUwMDNlbGVuIFx1MDAyNlx1MDAyNlxuNjU4MDpcdFx0XHQgICAgcHNrYl9leHBhbmRfaGVhZChmb3VuZCwgMCwgZnJhbWVfZGF0YV9sZW4gLSBmb3VuZC1cdTAwM2VsZW4sXG42NTgxOlx0XHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpKSB7XG42NTgyOlx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG42NTgzOlx0XHRcdFx0Z290byBvdXQ7XG42NTg0Olx0XHRcdH1cbjY1ODU6XHRcdFx0c2tiX3RyaW0oZm91bmQsIDApO1xuNjU4NjpcdFx0XHRza2JfcHV0X2RhdGEoZm91bmQsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTtcbjY1ODc6XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG42NTg4Olx0XHR9XG42NTg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDA5CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgSGFyZHdhcmUgU2ltdWxhdGlvbiBmb3IgRnJhbWUgVHJhbnNtaXNzaW9uKioKCk9rYXksIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBhc3BlY3RzIG9mIHRoaXMgZnJhbWUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgYSBiaXQgZGVlcGVyLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0d28gc3BlY2lmaWMgYXJlYXMgaW4gdGhlIGNvZGUuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgZnJvbSB0aGUgcG9pbnQgdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gcmVjZWl2ZXMgc29tZSBUWCBpbmZvcm1hdGlvbjsgSSYjMzk7bGwgZm9jdXMgb24gYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgIChsaW5lcyA2MzkwLTY0OTApLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzaW11bGF0aW9uIHByb2Nlc3NlcyB0aGF0IGlucHV0LiBUaGVuLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBhY3R1YWxseSAqc2VuZHMqIHRoZSBmcmFtZSwgc28gSSYjMzk7bGwgYWxzbyBiZSBleGFtaW5pbmcgYG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25sYCAobGluZXMgMTcyMC0xNzYwKS4gQnkgZXhhbWluaW5nIHRoZXNlIHR3byBmdW5jdGlvbnMsIEkmIzM5O2xsIGJ1aWxkIGEgbXVjaCBiZXR0ZXIgcGljdHVyZSBvZiBob3cgdGhlIHNpbXVsYXRpb24gaGFuZGxlcyBUWCBmcmFtZSBkYXRhIGVuZC10by1lbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYzOTA6XHRcdHU2NCByZXRfc2tiX2Nvb2tpZTtcbjYzOTE6XHRcdHN0cnVjdCBza19idWZmICpza2IsICp0bXA7XG42MzkyOlx0XHRjb25zdCB1OCAqc3JjO1xuNjM5MzpcdFx0dW5zaWduZWQgaW50IGh3c2ltX2ZsYWdzO1xuNjM5NDpcdFx0aW50IGk7XG42Mzk1Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNjM5NjpcdFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuNjM5NzpcdFx0Ym9vbCBub19tb25pdG9yO1xuNjM5ODpcdFx0dTMyIGZyZXE7XG42Mzk5Olx0XG42NDAwOlx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSB8fFxuNjQwMTpcdFx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdIHx8XG42NDAyOlx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdIHx8XG42NDAzOlx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9TSUdOQUxdIHx8XG42NDA0Olx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSlcbjY0MDU6XHRcdFx0Z290byBvdXQ7XG42NDA2Olx0XG42NDA3Olx0XHRzcmMgPSAodm9pZCAqKW5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG42NDA4Olx0XHRod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10pO1xuNjQwOTpcdFx0cmV0X3NrYl9jb29raWUgPSBubGFfZ2V0X3U2NChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSk7XG42NDEwOlx0XHRub19tb25pdG9yID0gbmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7XG42NDExOlx0XG42NDEyOlx0XHRkYXRhMiA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoc3JjKTtcbjY0MTM6XHRcdGlmICghZGF0YTIpXG42NDE0Olx0XHRcdGdvdG8gb3V0O1xuNjQxNTpcdFxuNjQxNjpcdFx0aWYgKCFod3NpbV92aXJ0aW9fZW5hYmxlZCkge1xuNjQxNzpcdFx0XHRpZiAoaHdzaW1fbmV0X2dldF9uZXRncm91cChnZW5sX2luZm9fbmV0KGluZm8pKSAhPVxuNjQxODpcdFx0XHQgICAgZGF0YTItXHUwMDNlbmV0Z3JvdXApXG42NDE5Olx0XHRcdFx0Z290byBvdXQ7XG42NDIwOlx0XG42NDIxOlx0XHRcdGlmIChpbmZvLVx1MDAzZXNuZF9wb3J0aWQgIT0gZGF0YTItXHUwMDNld21lZGl1bWQpXG42NDIyOlx0XHRcdFx0Z290byBvdXQ7XG42NDIzOlx0XHR9XG42NDI0Olx0XG42NDI1Olx0XHQvKiBsb29rIGZvciB0aGUgc2tiIG1hdGNoaW5nIHRoZSBjb29raWUgcGFzc2VkIGJhY2sgZnJvbSB1c2VyICovXG42NDI2Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkYXRhMi1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbjY0Mjc6XHRcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2ZGF0YTItXHUwMDNlcGVuZGluZywgc2tiLCB0bXApIHtcbjY0Mjg6XHRcdFx0dWludHB0cl90IHNrYl9jb29raWU7XG42NDI5Olx0XG42NDMwOlx0XHRcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbjY0MzE6XHRcdFx0c2tiX2Nvb2tpZSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF07XG42NDMyOlx0XG42NDMzOlx0XHRcdGlmIChza2JfY29va2llID09IHJldF9za2JfY29va2llKSB7XG42NDM0Olx0XHRcdFx0X19za2JfdW5saW5rKHNrYiwgXHUwMDI2ZGF0YTItXHUwMDNlcGVuZGluZyk7XG42NDM1Olx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuNjQzNjpcdFx0XHRcdGJyZWFrO1xuNjQzNzpcdFx0XHR9XG42NDM4Olx0XHR9XG42NDM5Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRhdGEyLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuNjQ0MDpcdFxuNjQ0MTpcdFx0Lyogbm90IGZvdW5kICovXG42NDQyOlx0XHRpZiAoIWZvdW5kKVxuNjQ0MzpcdFx0XHRnb3RvIG91dDtcbjY0NDQ6XHRcbjY0NDU6XHRcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbjY0NDY6XHRcdGZyZXEgPSAodWludHB0cl90KXR4aS1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdO1xuNjQ0NzpcdFxuNjQ0ODpcdFx0aWYgKCFub19tb25pdG9yKVxuNjQ0OTpcdFx0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGRhdGEyLVx1MDAzZWh3LCBza2IsIGZyZXEpO1xuNjQ1MDpcdFxuNjQ1MTpcdFx0LyogVHggaW5mbyByZWNlaXZlZCBiZWNhdXNlIHRoZSBmcmFtZSB3YXMgYnJvYWRjYXN0ZWQgb24gdXNlciBzcGFjZSxcbjY0NTI6XHRcdCBzbyB3ZSBnZXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbzogdHggYXR0ZW1wdHMgYW5kIHNrYiBjb250cm9sIGJ1ZmYgKi9cbjY0NTM6XHRcbjY0NTQ6XHRcdHR4X2F0dGVtcHRzID0gKHN0cnVjdCBod3NpbV90eF9yYXRlICopbmxhX2RhdGEoXG42NDU1Olx0XHRcdCAgICAgICBpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfVFhfSU5GT10pO1xuNjQ1NjpcdFxuNjQ1NzpcdFx0Lyogbm93IHNlbmQgYmFjayBUWCBzdGF0dXMgKi9cbjY0NTg6XHRcdGllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGkpO1xuNjQ1OTpcdFxuNjQ2MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSYjNDM7JiM0MzspIHtcbjY0NjE6XHRcdFx0dHhpLVx1MDAzZXN0YXR1cy5yYXRlc1tpXS5pZHggPSB0eF9hdHRlbXB0c1tpXS5pZHg7XG42NDYyOlx0XHRcdHR4aS1cdTAwM2VzdGF0dXMucmF0ZXNbaV0uY291bnQgPSB0eF9hdHRlbXB0c1tpXS5jb3VudDtcbjY0NjM6XHRcdH1cbjY0NjQ6XHRcbjY0NjU6XHRcdHR4aS1cdTAwM2VzdGF0dXMuYWNrX3NpZ25hbCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9TSUdOQUxdKTtcbjY0NjY6XHRcbjY0Njc6XHRcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuNjQ2ODpcdFx0aSA9IG1hYzgwMjExX2h3c2ltX2dldF9saW5rX2lkKHR4aS1cdTAwM2Vjb250cm9sLnZpZiwgaGRyKTtcbjY0Njk6XHRcdGlmIChpIFx1MDAzZT0gMCkge1xuNjQ3MDpcdFx0XHR0eGktXHUwMDNlc3RhdHVzLmxpbmtfdmFsaWQgPSAxO1xuNjQ3MTpcdFx0XHR0eGktXHUwMDNlc3RhdHVzLmxpbmtfaWQgPSBpO1xuNjQ3MjpcdFx0fVxuNjQ3MzpcdFxuNjQ3NDpcdFx0aWYgKCEoaHdzaW1fZmxhZ3MgXHUwMDI2IEhXU0lNX1RYX0NUTF9OT19BQ0spIFx1MDAyNlx1MDAyNlxuNjQ3NTpcdFx0ICAgKGh3c2ltX2ZsYWdzIFx1MDAyNiBIV1NJTV9UWF9TVEFUX0FDSykpIHtcbjY0NzY6XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSAxNilcbjY0Nzc6XHRcdFx0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhmcmVxLCBoZHItXHUwMDNlYWRkcjIpO1xuNjQ3ODpcdFx0XHR0eGktXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLO1xuNjQ3OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg5MQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkV4YW1pbmluZyB0aGUgYG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25sYCBGdW5jdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lcyAxNzIwIHRocm91Z2ggMTc2MC4gSSBpbW1lZGlhdGVseSBrbm93IHRoZSBjb250ZXh0IGhlcmU7IHRoaXMgbGlrZWx5IGRlYWxzIHdpdGggdGhlIG5ldHdvcmsgbGF5ZXIgaW50ZXJhY3Rpb24gaW4gdGhlIGBtYWM4MDIxMV9od3NpbWAgbW9kdWxlLCBzcGVjaWZpY2FsbHkgdGhlIHRyYW5zbWlzc2lvbiBzaWRlIG9mIHRoaW5ncyBnaXZlbiB0aGUgJiMzNDt0eCYjMzQ7IGluIHRoZSBmdW5jdGlvbiBuYW1lLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIG5ldHdvcmsgZnJhbWVzIGFyZSBwcm9jZXNzZWQsIGZvcm1hdHRlZCwgYW5kIHVsdGltYXRlbHkgaGFuZGVkIG9mZiAob3Igc2ltdWxhdGVkIGFzIGhhbmRlZCBvZmYpIHRvIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgdHJhbnNtaXNzaW9uIOKAkyBvciwgaW4gdGhpcyBzaW11bGF0ZWQgY2FzZSwgaGFuZGxlZCB3aXRoaW4gdGhlIGh3c2ltIGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIG5ldGxpbmsgYXR0cmlidXRlcyBhcmUgcGFyc2VkIHRvIGtub3cgZXhhY3RseSBob3cgdGhlIGZyYW1lIGNoYXJhY3RlcmlzdGljcyBhcmUgYmVpbmcgcHJlc2VudGVkLCBhbmQgdGhlbiBob3cgdGhlIHNpbXVsYXRpb24gaGFuZGxlcyB0aGF0IHRvIHByb2NlZWQuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgYml0cyBvbiBmcmFtZSBzZXJpYWxpemF0aW9uIG9yIHNpbXVsYXRpb24gb2YgdHJhbnNtaXNzaW9uIGVycm9ycyBpbiB0aGlzIHNlY3Rpb24sIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIEkmIzM5O2xsIGJlIHN1cmUgdG8gbG9vayBmb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRoZSByYXRlIGNvbnRyb2wgcGFyYW1ldGVycywgdGhlIHF1ZXVlaW5nIGRpc2NpcGxpbmUsIGFuZCBhbnkgcG90ZW50aWFsIGhhcmR3YXJlLXNwZWNpZmljIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgaW4gdGhpcyBzaW11bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzIwOlx0XHR9XG4xNzIxOlx0XG4xNzIyOlx0XHRpZiAobmxhX3B1dChza2IsIEhXU0lNX0FUVFJfVFhfSU5GTyxcbjE3MjM6XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgaHdzaW1fdHhfcmF0ZSkqSUVFRTgwMjExX1RYX01BWF9SQVRFUyxcbjE3MjQ6XHRcdFx0ICAgIHR4X2F0dGVtcHRzKSlcbjE3MjU6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzI2Olx0XG4xNzI3Olx0XHRpZiAobmxhX3B1dChza2IsIEhXU0lNX0FUVFJfVFhfSU5GT19GTEFHUyxcbjE3Mjg6XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgaHdzaW1fdHhfcmF0ZV9mbGFnKSAqIElFRUU4MDIxMV9UWF9NQVhfUkFURVMsXG4xNzI5Olx0XHRcdCAgICB0eF9hdHRlbXB0c19mbGFncykpXG4xNzMwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMTczMTpcdFxuMTczMjpcdFx0LyogV2UgY3JlYXRlIGEgY29va2llIHRvIGlkZW50aWZ5IHRoaXMgc2tiICovXG4xNzMzOlx0XHRjb29raWUgPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZkYXRhLVx1MDAzZXBlbmRpbmdfY29va2llKTtcbjE3MzQ6XHRcdGluZm8tXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXSA9ICh2b2lkICopY29va2llO1xuMTczNTpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKVxuMTczNjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE3Mzc6XHRcbjE3Mzg6XHRcdC8qIHRyYWNrIHRoZSBmcmVxdWVuY3kgKi9cbjE3Mzk6XHRcdGluZm8tXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXSA9ICh2b2lkICopKHVpbnRwdHJfdCljaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxO1xuMTc0MDpcdFxuMTc0MTpcdFx0Z2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7XG4xNzQyOlx0XG4xNzQzOlx0XHRpZiAoaHdzaW1fdmlydGlvX2VuYWJsZWQpIHtcbjE3NDQ6XHRcdFx0aWYgKGh3c2ltX3R4X3ZpcnRpbyhkYXRhLCBza2IpKVxuMTc0NTpcdFx0XHRcdGdvdG8gZXJyX2ZyZWVfdHhza2I7XG4xNzQ2Olx0XHR9IGVsc2Uge1xuMTc0NzpcdFx0XHRpZiAoaHdzaW1fdW5pY2FzdF9uZXRncm91cChkYXRhLCBza2IsIGRzdF9wb3J0aWQpKVxuMTc0ODpcdFx0XHRcdGdvdG8gZXJyX2ZyZWVfdHhza2I7XG4xNzQ5Olx0XHR9XG4xNzUwOlx0XG4xNzUxOlx0XHQvKiBFbnF1ZXVlIHRoZSBwYWNrZXQgKi9cbjE3NTI6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRhdGEtXHUwMDNlcGVuZGluZywgbXlfc2tiKTtcbjE3NTM6XHRcdGRhdGEtXHUwMDNldHhfcGt0cyYjNDM7JiM0Mzs7XG4xNzU0Olx0XHRkYXRhLVx1MDAzZXR4X2J5dGVzICYjNDM7PSBteV9za2ItXHUwMDNlbGVuO1xuMTc1NTpcdFx0cmV0dXJuO1xuMTc1NjpcdFxuMTc1NzpcdG5sYV9wdXRfZmFpbHVyZTpcbjE3NTg6XHRcdG5sbXNnX2ZyZWUoc2tiKTtcbjE3NTk6XHRlcnJfZnJlZV90eHNrYjpcbjE3NjA6XHRcdHByX2RlYnVnKFwmIzM0O21hYzgwMjExX2h3c2ltOiBlcnJvciBvY2N1cnJlZCBpbiAlc1xcblwmIzM0OywgX19mdW5jX18pO1xuMTc2MTpcdFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoaHcsIG15X3NrYik7XG4xNzYyOlx0XHRkYXRhLVx1MDAzZXR4X2ZhaWxlZCYjNDM7JiM0Mzs7XG4xNzYzOlx0fVxuMTc2NDpcdFxuMTc2NTpcdHN0YXRpYyBib29sIGh3c2ltX2NoYW5zX2NvbXBhdChzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmMxLFxuMTc2NjpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmMyKVxuMTc2NzpcdHtcbjE3Njg6XHRcdGlmICghYzEgfHwgIWMyKVxuMTc2OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTA3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzIGluIHRoZSBtYWM4MDIxMV9od3NpbSBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgYW5kIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBmdW5jdGlvbnMuIEl0IGFwcGVhcnMgdGhlIGZsb3cgaW52b2x2ZXMgYSB1c2VyLXNwYWNlIHByb2Nlc3Mgc2VuZGluZyBhIGZyYW1lIGJhY2sgdGhyb3VnaCBHZW5lcmljIE5ldGxpbmsgdXNpbmcgYEhXU0lNX0NNRF9GUkFNRWAuIElmIGBIV1NJTV9BVFRSX0NPT0tJRWAgYW5kIGBIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJgIGFyZSBwcmVzZW50LCB0aGUgY29kZSByZXRyaWV2ZXMgdGhlIG9yaWdpbmFsIHNvY2tldCBidWZmZXIgKGBza2JgKSBmcm9tIHRoZSB0cmFuc21pdHRlciYjMzk7cyAmIzM0O3BlbmRpbmcmIzM0OyBxdWV1ZS4gVGhpcyBjYXVnaHQgbXkgYXR0ZW50aW9uOiBpdCBmaW5kcyB0aGUgb3JpZ2luYWwgYHNrYmAsIG1vZGlmaWVzIGl0ICppbiBwbGFjZSogdXNpbmcgYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX3RyaW1gLCBhbmQgYHNrYl9wdXRfZGF0YWAsIGJ1dCwgaW1wb3J0YW50bHksIHRoZSBtb2RpZmllZCBgc2tiYCAqcmVtYWlucyogaW4gdGhlIHBlbmRpbmcgcXVldWUuIFRoZW4sIGxhdGVyLCBgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubGAgaGFuZGxlcyBgSFdTSU1fQ01EX1RYX0lORk9fRlJBTUVgLCBkZXF1ZXVlcyAqdGhhdCBzYW1lKiBgc2tiYCBmcm9tIHRoZSAmIzM0O3BlbmRpbmcmIzM0OyBxdWV1ZSwgYW5kIHByb2Nlc3NlcyBpdC4gVGhpcyByYWlzZXMgYSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgZG91YmxlIGZyZWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGlmIHRoZSBtb2RpZmljYXRpb24gaXMgZG9uZSBpbiBhIHdheSB0aGF0IGlzIG5vdCBzeW5jaHJvbml6ZWQsIG9yIHByb3Blcmx5IGFjY291bnRlZCBmb3IgbGF0ZXIgb24uCgpGdXJ0aGVybW9yZSwgaW4gYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgLCBJIHNlZSB0aGUgdXNlIG9mIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIHRvIG9wdGlvbmFsbHkgc2tpcCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGEgdHlwaWNhbCB0YXJnZXQgZm9yIGZ1enppbmcuIEFsc28gSSBub3RpY2UgdGhlIHVzZSBvZiBgZnJlcSA9ICh1aW50cHRyX3QpdHhpLSZndDtyYXRlX2RyaXZlcl9kYXRhWzFdYCBpbnN0ZWFkIG9mIGBkYXRhMi0mZ3Q7Y2hhbm5lbGAgd2hpY2ggbWF5IGxlYWQgdG8gaW5jb25zaXN0ZW5jaWVzIG9yIGFzc3VtcHRpb25zLgoKR2l2ZW4gdGhhdCBgbWFjODAyMTFfaHdzaW1gIGlzIGEgcHVyZSBzb2Z0d2FyZSBzaW11bGF0ZWQgODAyLjExIGRyaXZlciwgY29tbXVuaWNhdGluZyB2aWEgR2VuZXJpYyBOZXRsaW5rLCBhbmQgY29uc2lkZXJpbmcgdGhhdCBzeXprYWxsZXIgYWN0aXZlbHkgdGFyZ2V0cyBubDgwMjExIGFuZCBod3NpbSBuZXRsaW5rIGludGVyZmFjZXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlc2UgY29kZSBwYXRocyBhcmUgaW5kZWVkIHJlYWNoYWJsZSB3aXRoaW4gUUVNVSBvciBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBncmVhdCBkZWFsLgoKVG8gZXhwYW5kIHRoZSBzY29wZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGBuZXQvbWFjODAyMTFgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbGAsIHNwZWNpZmljYWxseSB0aGUgYE1BQzgwMjExX0hXU0lNYCwgYE1BQzgwMjExYCwgYENGRzgwMjExYCwgYE5FVGAsIGFuZCBgSU5FVGAgY29uZmlnIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gRnVydGhlcm1vcmUsIEkmIzM5O2xsIGBncmVwYCBmb3IgYENPTkZJR19gIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AgYW5kIG90aGVyIGZpbGVzIHdpdGhpbiB0aGUgYHZpcnR1YWxgIGRpcmVjdG9yeSB0byBpZGVudGlmeSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgZXNwZWNpYWxseSBob3cgYHNrYmAmIzM5O3Mgc3RhdGUgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgYWNyb3NzIGRpZmZlcmVudCBOZXRsaW5rIGNvbW1hbmRzLCB0byBnZXQgYSBjbGVhciBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvTWFrZWZpbGU6MTpvYmotJChDT05GSUdfTUFDODAyMTFfSFdTSU0pXHQmIzQzOz0gbWFjODAyMTFfaHdzaW0ub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZS0yLW1hYzgwMjExX2h3c2ltLW9ianNcdFx0JiM0Mzs9IG1hYzgwMjExX2h3c2ltX21haW4ub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZT0zPW1hYzgwMjExX2h3c2ltLW9ianNcdFx0JiM0Mzs9IG1hYzgwMjExX2h3c2ltX25hbi5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZJUlRfV0lGSSlcdCYjNDM7PSB2aXJ0X3dpZmkub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTg2NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHdzaW1fZ2VubF9wb2xpY3lbSFdTSU1fQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtOTAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6OTAxOiNpZiBJU19SRUFDSEFCTEUoQ09ORklHX1ZJUlRJTylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTkwMi1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0yMzQ1PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0yMzY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MjM2NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTIzNjYtc3RhdGljIHZvaWRcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0yOTk3PW1hYzgwMjExX2h3c2ltX2Nhbl9uZWdfdHRsbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zMDEzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MzAxNDojaWZkZWYgQ09ORklHX05MODAyMTFfVEVTVE1PREVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTMwMTUtLypcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00Mjc3PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fc2V0X3JhZGFyX2JhY2tncm91bmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDI5NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQyOTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00Mjk2LSNkZWZpbmUgSFdTSU1fREVCVUdGU19PUFNcdFx0XHRcdFx0XFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00NTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3NiYW5kX2lmdHlwZV9kYXRhIHNiYW5kX2NhcGFfMmdoeltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ3NTQtXHR9LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDc1NTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ3NTYtXHR7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NDc5OD1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zYmFuZF9pZnR5cGVfZGF0YSBzYmFuZF9jYXBhXzVnaHpbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01MDY0LVx0fSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjUwNjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01MDY2LVx0e1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTUxMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc2JhbmRfaWZ0eXBlX2RhdGEgc2JhbmRfY2FwYV82Z2h6W10gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTQxOS1cdH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NDIwOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTQyMS1cdHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01NjExPXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3NiYW5kX2NhcGFiKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2MjctXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjI4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTYyOS0jZGVmaW5lIEhXU0lNX01FU0hfQklUIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTczMjc9c3RhdGljIHZvaWQgaHdzaW1fZXhpdF9uZXRsaW5rKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzMzNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjczMzU6I2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzMzNi1zdGF0aWMgdm9pZCBod3NpbV92aXJ0aW9fdHhfZG9uZShzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwMjgKCQkJCQkJCW91dHB1dDogMzAyCgkJCQkJCQl0aG91Z2h0czogNjg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE1vZGlmaWVkIG1hYzgwMjExX2h3c2ltIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRhc2tlZCB3aXRoIGV2YWx1YXRpbmcgc29tZSBjaGFuZ2VzIHRvIHRoZSBgbWFjODAyMTFfaHdzaW1gIGRyaXZlci4gTXkgaW5pdGlhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJJiMzOTt2ZSBnb3QgYSBsaXN0OiBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubGAsIGBtYWM4MDIxMV9od3NpbV90eGAsIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgYW5kIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBhY2Nlc3NpYmxlLCBvciBpZiBzdGF0aWMsIHdoYXQgdGhlaXIgc3ltYm9sIHZpc2liaWxpdHkgaXMgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYW55IG9mIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBleHBvc2VkIGFzIHN5bWJvbHMgb3IgY2FsbGVkIGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCAqc3BlY2lmaWNhbGx5KiBjaGFuZ2VkIGluIGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zLiBJJiMzOTttIHNlZWluZyBzaWduaWZpY2FudCBhbHRlcmF0aW9ucyB0byBob3cgY2xvbmVkIGZyYW1lcyBhcmUgaGFuZGxlZCAoYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGApLCBpbmNsdWRpbmcgbWFuaXB1bGF0aW9uIG9mIHRoZSBwZW5kaW5nIHF1ZXVlIGFuZCB0aGUgdXNlIG9mIGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl90cmltYCwgYW5kIGBza2JfcHV0X2RhdGFgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCBpbmRpY2F0ZXMgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGF0YSBoYW5kbGluZyBkdXJpbmcgZnJhbWUgY2xvbmluZy4gVGhlbiwgdGhlcmUmIzM5O3MgYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgLCB3aGljaCBub3cgZGVhbHMgd2l0aCBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCBhbmQga2VlcHMgdHJhY2sgb2YgdGhlIGNlbnRlciBmcmVxdWVuY3kuIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAgaXMgc3RvcmluZyBjaGFubmVsIGZyZXF1ZW5jeSBkYXRhIGFzIHdlbGwsIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGFuZCBgbWFjODAyMTFfaHdzaW1fdHhgIGhhdmUgc2lnbmF0dXJlIGFuZCB1c2FnZSB1cGRhdGVzLiBUaGlzIHN1Z2dlc3RzIGVuaGFuY2VtZW50cyBvciBtb2RpZmljYXRpb25zIHRvIG1vbml0b3IgY2FwYWJpbGl0aWVzLCBsaWtlbHkgdGllZCB0byB0aGUgbmV0d29yayBwcm90b2NvbCYjMzk7cyBsb3dlciBsZXZlbHMuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIFRoZSBkZXBlbmRlbmNpZXMgc2VlbSB0byBiZSBgTUFDODAyMTFfSFdTSU1gLCBgTUFDODAyMTFgLCBhbmQgYENGRzgwMjExYC4gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0OyBpdCBtYWtlcyBzZW5zZSB0aGF0IHRoZSB2aXJ0dWFsIGhhcmR3YXJlIHNpbXVsYXRpb24sIHRoZSBtYWM4MDIxMSBzdGFjaywgYW5kIHRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZSBhcmUgYWxsIHJlcXVpcmVkLgoKRmluYWxseSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIG92ZXJhbGwgY3JpdGVyaWEgZm9yIHRoZSBhc3Nlc3NtZW50IGFyZSBtZXQuIEZpcnN0LCB0aGUgZHJpdmVyIGl0c2VsZiBtdXN0IGJlIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2l0aG91dCByZXF1aXJpbmcgYW55IHBoeXNpY2FsIGhhcmR3YXJlOyBpdCBzb3VuZHMgbGlrZSB0aGF0JiMzOTtzIHRoZSBjYXNlLiBTZWNvbmQsIHRoZSBtb2RpZmllZCBsb2dpYyBtdXN0IGJlIHN1YnN0YW50aWFsLCB3aGljaCBpdCBhcHBlYXJzIHRvIGJlOiBmcmFtZSBjbG9uaW5nLCBwZW5kaW5nIGBza2JgIHJlcGxhY2VtZW50LCBtb25pdG9yIGNvbnRyb2wgYXJlIGFsbCBtb2RpZmllZC4gVGhpcmQsIHdlIGFyZSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zIEkgZW51bWVyYXRlZCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNgLiBGb3VydGgsIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIEFsbCBjcml0ZXJpYSBhcmUgbWV0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sJiMzNDssCiAgICAmIzM0O2h3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeCYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV90eCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtYWM4MDIxMV9od3NpbSwgYSBzb2Z0d2FyZS1lbXVsYXRlZCA4MDIuMTEgcmFkaW8gdGVzdGluZyB0b29sIGZ1bGx5IGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIGdlbmVyaWMgbmV0bGluay4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIGhhbmRsaW5nIGZvciBIV1NJTV9BVFRSX05PX01PTklUT1IsIG1vZGlmeSBjZW50ZXIgZnJlcXVlbmN5IHRyYWNraW5nIGFjcm9zcyBUWCBtb25pdG9yIHJlcG9ydGluZywgYW5kIGFkZCBsb2dpYyBpbiBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwgdG8gc2VhcmNoIHRoZSBwZW5kaW5nIHRyYW5zbWlzc2lvbiBxdWV1ZSBieSBjb29raWUgYW5kIG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiIGRhdGEgKHZpYSBwc2tiX2V4cGFuZF9oZWFkLCBza2JfdHJpbSwgYW5kIHNrYl9wdXRfZGF0YSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBidWZmZXIgbWFuaXB1bGF0aW9uIGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIHNpbXVsYXRlZCByYWRpbyBUWC9SWCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwmIzM0OywKICAgICYjMzQ7aHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubCYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubCYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4JiMzNDssCiAgICAmIzM0O21hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrJiMzNDssCiAgICAmIzM0O21hYzgwMjExX2h3c2ltX3R4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1hYzgwMjExX2h3c2ltLCBhIHNvZnR3YXJlLWVtdWxhdGVkIDgwMi4xMSByYWRpbyB0ZXN0aW5nIHRvb2wgZnVsbHkgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgZ2VuZXJpYyBuZXRsaW5rLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgaGFuZGxpbmcgZm9yIEhXU0lNX0FUVFJfTk9fTU9OSVRPUiwgbW9kaWZ5IGNlbnRlciBmcmVxdWVuY3kgdHJhY2tpbmcgYWNyb3NzIFRYIG1vbml0b3IgcmVwb3J0aW5nLCBhbmQgYWRkIGxvZ2ljIGluIGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCB0byBzZWFyY2ggdGhlIHBlbmRpbmcgdHJhbnNtaXNzaW9uIHF1ZXVlIGJ5IGNvb2tpZSBhbmQgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IgZGF0YSAodmlhIHBza2JfZXhwYW5kX2hlYWQsIHNrYl90cmltLCBhbmQgc2tiX3B1dF9kYXRhKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcyBpbiB0aGUgc2ltdWxhdGVkIHJhZGlvIFRYL1JYIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZGQgdGhlIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIG5ldGxpbmsgZmxhZyBhdHRyaWJ1dGUgZm9yIHNraXBwaW5nIG1vbml0b3IgcmVwb3J0cywgcHJlc2VydmVzIHRoZSB0cmFuc21pc3Npb24gY2hhbm5lbCBmcmVxdWVuY3kgaW4gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBhbmQgdXBkYXRlcyB0aGUgcGVuZGluZyB0cmFuc21pdHRlZCBza2IgaW4gYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgd2hlbiBtYXRjaGluZyBjb29raWUgYW5kIHRyYW5zbWl0dGVyIGF0dHJpYnV0ZXMgYXJlIHByb3ZpZGVkLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIChgZnJlcWAsIGBub19tb25pdG9yYCwgYGNvb2tpZWAsIGV0Yy4pIGFuZCBzdHJ1Y3R1cmUgbWVtYmVycyAoYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBgaGRyLVx1MDAzZXJ0X2NoYW5uZWxgKSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIFNLQiBtb2RpZmljYXRpb25zIHVzZSBgc2tiX3B1dF9kYXRhYCB3aXRoIHZlcmlmaWVkIHBheWxvYWQgbGVuZ3RocyBmcm9tIHZhbGlkYXRlZCBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZ3MsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgcmlza3MgcmVsYXRpbmcgdG8gU0tCIG1hbmlwdWxhdGlvbiwgcXVldWUgbG9ja2luZywgb3IgcmVmZXJlbmNlIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGRldGVjdG9ycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViNzVhZjUxM2FlMWFmODc3OTJhMjBiNWFiYTQxNDE2MzUzZjk5OTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxNDoyNjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaAppbmRleCBhMDIyY2Q1YzBmMWM3Li4xZDJmZDA2YzU4NWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oCkBAIC0zLDcgJiM0MzszLDcgQEAKICAqIG1hYzgwMjExX2h3c2ltIC0gc29mdHdhcmUgc2ltdWxhdG9yIG9mIDgwMi4xMSByYWRpbyhzKSBmb3IgbWFjODAyMTEKICAqIENvcHlyaWdodCAoYykgMjAwOCwgSm91bmkgTWFsaW5lbiAmbHQ7akB3MS5maSZndDsKICAqIENvcHlyaWdodCAoYykgMjAxMSwgSmF2aWVyIExvcGV6ICZsdDtqbG9wZXhAZ21haWwuY29tJmd0OwotICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIyLTIwMjUgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbgogICovCiAKICNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9ICkBAIC0xNjIsNiAmIzQzOzE2Miw4IEBAIGVudW0gaHdzaW1fY29tbWFuZHMgewogICoJZWFjaCByYWRpbyBpbnN0ZWFkIG9mIGZvciB0aGUgd2lwaHkuCiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0U6IHN1cHBvcnQgTkFOIERldmljZSB2aXJ0dWFsIGludGVyZmFjZSAoZmxhZykKICAqIEBIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUjogYmFja2dyb3VuZCByYWRhci9DQUMgc3VwcG9ydCAoZmxhZykKJiM0MzsgKiBASFdTSU1fQVRUUl9OT19NT05JVE9SOiBza2lwIG1vbml0b3IgcmVwb3J0IGZvciB0aGlzIFRYIHN0YXR1cywgZS5nLiBpbiBjYXNlCiYjNDM7ICoJdGhlIGZyYW1lIHdhcyBuZXZlciByZXBvcnRlZCB0byBhbnkgcmVjZWl2ZXIgKGZsYWcpCiAgKiBAX19IV1NJTV9BVFRSX01BWDogZW51bSBsaW1pdAogICovCiBlbnVtIGh3c2ltX2F0dHJzIHsKQEAgLTE5Nyw2ICYjNDM7MTk5LDcgQEAgZW51bSBod3NpbV9hdHRycyB7CiAJSFdTSU1fQVRUUl9NVUxUSV9SQURJTywKIAlIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRSwKIAlIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUiwKJiM0MzsJSFdTSU1fQVRUUl9OT19NT05JVE9SLAogCV9fSFdTSU1fQVRUUl9NQVgsCiB9OwogI2RlZmluZSBIV1NJTV9BVFRSX01BWCAoX19IV1NJTV9BVFRSX01BWCAtIDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCmluZGV4IDAyYjZkODFjY2NkMTEuLmZjYTRiZjgyM2VmNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCkBAIC04OTUsNiAmIzQzOzg5NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBod3NpbV9nZW5sX3BvbGljeVtIV1NJTV9BVFRSX01BWCAmIzQzOyAxXSA9IHsKIAlbSFdTSU1fQVRUUl9NVUxUSV9SQURJT10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIAlbSFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0VdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiAJW0hXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAomIzQzOwlbSFdTSU1fQVRUUl9OT19NT05JVE9SXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogfTsKIAogI2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKQpAQCAtMTMzNyw3ICYjNDM7MTMzOCw3IEBAIG1hYzgwMjExX2h3c2ltX2dldF90eF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCiBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICp0eF9za2IsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKQomIzQzOwkJCQkgICAgICB1MzIgZnJlcSkKIHsKIAlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LSZndDtwcml2OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMzY5LDcgJiM0MzsxMzcwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAloZHItJmd0O3J0X3RzZnQgPSBfX21hYzgwMjExX2h3c2ltX2dldF90c2YoZGF0YSk7CiAJaGRyLSZndDtydF9mbGFncyA9IDA7CiAJaGRyLSZndDtydF9yYXRlID0gYml0cmF0ZSAvIDU7Ci0JaGRyLSZndDtydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbi0mZ3Q7Y2VudGVyX2ZyZXEpOwomIzQzOwloZHItJmd0O3J0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihmcmVxKTsKIAlmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7CiAJaWYgKHR4cmF0ZSAmYW1wOyZhbXA7IHR4cmF0ZS0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1JBVEVfRVJQX0cpCiAJCWZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE07CkBAIC0xMzg3LDggJiM0MzsxMzg4LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIH0KIAogCi1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgICAgIGNvbnN0IHU4ICphZGRyKQomIzQzO3N0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHUzMiBmcmVxLCBjb25zdCB1OCAqYWRkcikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBod3NpbV9yYWRpb3RhcF9hY2tfaGRyICpoZHI7CkBAIC0xNDEwLDcgJiM0MzsxNDEwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAogCQkJCQkgICgxICZsdDsmbHQ7IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSk7CiAJaGRyLSZndDtydF9mbGFncyA9IDA7CiAJaGRyLSZndDtwYWQgPSAwOwotCWhkci0mZ3Q7cnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tJmd0O2NlbnRlcl9mcmVxKTsKJiM0MzsJaGRyLSZndDtydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7CiAJZmxhZ3MgPSBJRUVFODAyMTFfQ0hBTl8yR0haOwogCWhkci0mZ3Q7cnRfY2hiaXRtYXNrID0gY3B1X3RvX2xlMTYoZmxhZ3MpOwogCkBAIC0xNzM1LDYgJiM0MzsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJaWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAomIzQzOwkvKiB0cmFjayB0aGUgZnJlcXVlbmN5ICovCiYjNDM7CWluZm8tJmd0O3JhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC0mZ3Q7Y2VudGVyX2ZyZXE7CiYjNDM7CiAJZ2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7CiAKIAlpZiAoaHdzaW1fdmlydGlvX2VuYWJsZWQpIHsKQEAgLTE5MTIsNyAmIzQzOzE5MTUsNyBAQCBzdGF0aWMgYm9vbCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAogCW1hYzgwMjExX2h3c2ltX3dyaXRlX3RzZihkYXRhLCBza2IsIHNpbV90c2YpOwogCi0JbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuKTsKJiM0MzsJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuLSZndDtjZW50ZXJfZnJlcSk7CiAKIAltZW1zZXQoJmFtcDtyeF9zdGF0dXMsIDAsIHNpemVvZihyeF9zdGF0dXMpKTsKIAlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQ7CkBAIC0yMjc2LDcgJiM0MzsyMjc5LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJYWNrID0gbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbm9fbmwoaHcsIHNrYiwgY2hhbm5lbCk7CiAKIAlpZiAoYWNrICZhbXA7JmFtcDsgc2tiLSZndDtsZW4gJmd0Oz0gMTYpCi0JCW1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGNoYW5uZWwsIGhkci0mZ3Q7YWRkcjIpOwomIzQzOwkJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soY2hhbm5lbC0mZ3Q7Y2VudGVyX2ZyZXEsIGhkci0mZ3Q7YWRkcjIpOwogCiAJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7CiAKQEAgLTYzOTEsNiAmIzQzOzYzOTQsOCBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlib29sIG5vX21vbml0b3I7CiYjNDM7CXUzMiBmcmVxOwogCiAJaWYgKCFpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdIHx8CiAJICAgICFpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSB8fApAQCAtNjQwMiw2ICYjNDM7NjQwNyw3IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsCiAJc3JjID0gKHZvaWQgKilubGFfZGF0YShpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTsKIAlod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTsKIAlyZXRfc2tiX2Nvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSk7CiYjNDM7CW5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7CiAKIAlkYXRhMiA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoc3JjKTsKIAlpZiAoIWRhdGEyKQpAQCAtNjQzNiw3ICYjNDM7NjQ0MiwxMSBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCWlmICghZm91bmQpCiAJCWdvdG8gb3V0OwogCi0JbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi0mZ3Q7aHcsIHNrYiwgZGF0YTItJmd0O2NoYW5uZWwpOwomIzQzOwl0eGkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiYjNDM7CWZyZXEgPSAodWludHB0cl90KXR4aS0mZ3Q7cmF0ZV9kcml2ZXJfZGF0YVsxXTsKJiM0MzsKJiM0MzsJaWYgKCFub19tb25pdG9yKQomIzQzOwkJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi0mZ3Q7aHcsIHNrYiwgZnJlcSk7CiAKIAkvKiBUeCBpbmZvIHJlY2VpdmVkIGJlY2F1c2UgdGhlIGZyYW1lIHdhcyBicm9hZGNhc3RlZCBvbiB1c2VyIHNwYWNlLAogCSBzbyB3ZSBnZXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbzogdHggYXR0ZW1wdHMgYW5kIHNrYiBjb250cm9sIGJ1ZmYgKi8KQEAgLTY0NDUsOCAmIzQzOzY0NTUsNiBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCQkgICAgICAgaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7CiAKIAkvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqLwotCXR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQogCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGkpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkmIzQzOyYjNDM7KSB7CkBAIC02NDY2LDggJiM0Mzs2NDc0LDcgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMiwKIAlpZiAoIShod3NpbV9mbGFncyAmYW1wOyBIV1NJTV9UWF9DVExfTk9fQUNLKSAmYW1wOyZhbXA7CiAJICAgKGh3c2ltX2ZsYWdzICZhbXA7IEhXU0lNX1RYX1NUQVRfQUNLKSkgewogCQlpZiAoc2tiLSZndDtsZW4gJmd0Oz0gMTYpCi0JCQltYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhkYXRhMi0mZ3Q7Y2hhbm5lbCwKLQkJCQkJCSAgIGhkci0mZ3Q7YWRkcjIpOwomIzQzOwkJCW1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGZyZXEsIGhkci0mZ3Q7YWRkcjIpOwogCQl0eGktJmd0O2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAl9CiAKQEAgLTY1MzUsNiAmIzQzOzY1NDIsNTEgQEAgc3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCQkJZ290byBvdXQ7CiAJfQogCiYjNDM7CS8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi8KJiM0MzsJaWYgKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKSB7CiYjNDM7CQl1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTsKJiM0MzsJCXN0cnVjdCBza19idWZmICpvcmlnX3NrYiwgKmZvdW5kID0gTlVMTDsKJiM0MzsJCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICp0eGRhdGE7CiYjNDM7CQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTsKJiM0MzsJCWNvbnN0IHU4ICp0cmFuc21pdHRlcjsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CQl0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pOwomIzQzOwkJdHhkYXRhID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcih0cmFuc21pdHRlcik7CiYjNDM7CQlpZiAoIXR4ZGF0YSB8fCB0eGRhdGEtJmd0O25ldGdyb3VwICE9IGRhdGEyLSZndDtuZXRncm91cCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHhkYXRhLSZndDtwZW5kaW5nLmxvY2ssIGZsYWdzKTsKJiM0MzsJCXNrYl9xdWV1ZV93YWxrKCZhbXA7dHhkYXRhLSZndDtwZW5kaW5nLCBvcmlnX3NrYikgewomIzQzOwkJCXVpbnRwdHJfdCBza2JfY29va2llOwomIzQzOwomIzQzOwkJCXR4aSA9IElFRUU4MDIxMV9TS0JfQ0Iob3JpZ19za2IpOwomIzQzOwkJCXNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS0mZ3Q7cmF0ZV9kcml2ZXJfZGF0YVswXTsKJiM0MzsKJiM0MzsJCQlpZiAoc2tiX2Nvb2tpZSA9PSBjb29raWUpIHsKJiM0MzsJCQkJZm91bmQgPSBvcmlnX3NrYjsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogdGhhdCYjMzk7cyB3ZWlyZCAqLwomIzQzOwkJaWYgKCFmb3VuZCkgewomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eGRhdGEtJmd0O3BlbmRpbmcubG9jaywgZmxhZ3MpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGZyYW1lX2RhdGFfbGVuICZndDsgZm91bmQtJmd0O2xlbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcHNrYl9leHBhbmRfaGVhZChmb3VuZCwgMCwgZnJhbWVfZGF0YV9sZW4gLSBmb3VuZC0mZ3Q7bGVuLAomIzQzOwkJCQkgICAgIEdGUF9BVE9NSUMpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3R4ZGF0YS0mZ3Q7cGVuZGluZy5sb2NrLCBmbGFncyk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlza2JfdHJpbShmb3VuZCwgMCk7CiYjNDM7CQlza2JfcHV0X2RhdGEoZm91bmQsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eGRhdGEtJmd0O3BlbmRpbmcubG9jaywgZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiAJLyogY2hlY2sgaWYgcmFkaW8gaXMgY29uZmlndXJlZCBwcm9wZXJseSAqLwogCiAJaWYgKChkYXRhMi0mZ3Q7aWRsZSAmYW1wOyZhbXA7ICFkYXRhMi0mZ3Q7dG1wX2NoYW4pIHx8ICFkYXRhMi0mZ3Q7c3RhcnRlZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjgKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA2NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxMV9od3NpbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gaXMgYSBjb25jZXJuIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSB0b3VjaGVkIGZpbGVzOiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oYCBhbmQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIG1hYzgwMjExX2h3c2ltIHZpcnR1YWwgd2lyZWxlc3MgZHJpdmVyLCB3aGljaCBpcyB1c3VhbGx5IGEgZ29vZCB0aGluZyB0byBwYXkgYXR0ZW50aW9uIHRvLgoKRmlyc3QsIGBtYWM4MDIxMV9od3NpbS5oYCBhZGRzIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIHRvIHRoZSBgaHdzaW1fYXR0cnNgIGVudW0uIEEgZmxhZy4uLmludGVyZXN0aW5nLiAgVGhlbiwgYG1hYzgwMjExX2h3c2ltX21haW4uY2AgaXMgd2hlcmUgdGhpbmdzIGdldCBtb3JlIGludGVyZXN0aW5nLiAgV2UmIzM5O3JlIHNlZWluZyBgW0hXU0lNX0FUVFJfTk9fTU9OSVRPUl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfWAgYWRkZWQgdG8gdGhlIGBod3NpbV9nZW5sX3BvbGljeWAuIFNvLCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgbmV3IGF0dHJpYnV0ZSBleHBvc2VkIHZpYSBOZXRsaW5rLgoKVGhlIGNvZGUgbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tgIHRvIHVzZSBhIGB1MzIgZnJlcWAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5gLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgY2hhbmdlIGluIGhvdyBmcmVxdWVuY3kgaW5mb3JtYXRpb24gaXMgaGFuZGxlZC4gIFdlJiMzOTtyZSBhbHNvIHNlZWluZyB0aGUgYGNoYW5uZWwtJmd0O2NlbnRlcl9mcmVxYCBiZWluZyBzYXZlZCBpbnRvIGBpbmZvLSZndDtyYXRlX2RyaXZlcl9kYXRhWzFdYCBpbiBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgIGFuZCBwYXNzZWQgZGlyZWN0bHkgaW4gb3RoZXIgZnVuY3Rpb25zLgoKTm93LCB0aGluZ3MgZ2V0IGEgYml0IG1vcmUgaW52b2x2ZWQuIEluIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgdGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYG5vX21vbml0b3JgIGJhc2VkIG9uIHRoZSBuZXcgZmxhZy4gSWYgbm90IHNldCwgaXQgY2FsbHMgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tgIHdpdGggdGhlIGZyZXF1ZW5jeS4gVGhhdCBtYWtlcyBzZW5zZSwgd2Ugd2FudCB0byBjb250cm9sIHRoZSBtb25pdG9yIGZ1bmN0aW9uLgoKSGVyZSYjMzk7cyB0aGUgYml0IHRoYXQgcmVhbGx5IHJlcXVpcmVzIGNhcmVmdWwgYW5hbHlzaXM6IGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLiBJdCBhcHBlYXJzIHRvIGJlIGhhbmRsaW5nIGNsb25lZCBTS0JzIHdpdGhpbiBhIHBlbmRpbmcgVFggcXVldWUuICBUaGUgY29kZSBsb29rcyBmb3IgYW4gb3JpZ2luYWwgU0tCIGJhc2VkIG9uIGEgY29va2llLiBJZiBmb3VuZCwgaXQgY2hlY2tzIGlmIGBmcmFtZV9kYXRhX2xlbmAgaXMgZ3JlYXRlciB0aGFuIGBmb3VuZC0mZ3Q7bGVuYCwgYW5kIGV4cGFuZHMgdGhlIGhlYWRlciBpZiBuZWNlc3NhcnkuIFRoZW4sIGl0IGNhbGxzIGBza2JfdHJpbShmb3VuZCwgMClgIGFuZCBzdWJzZXF1ZW50bHkgY29waWVzIGRhdGEgdXNpbmcgYHNrYl9wdXRfZGF0YShmb3VuZCwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgY29weS4gSXMgdGhpcyBjb3B5aW5nIGludG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGFsd2F5cyByYWlzZXMgbXkgaGFja2xlcywgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBgZnJhbWVfZGF0YWAgYW5kIGBmcmFtZV9kYXRhX2xlbmAgYXJlIGluaXRpYWxpemVkIHRvIGtub3cgaWYgd2UgY2FuIGhhdmUgYSBLTVNBTiBwcm9ibGVtIGhlcmUuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbnMgZm9yIHRob3NlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZXNlIGFyZSBzYWZlIHRvIHVzZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02MzgyPXN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjQ5MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjY0OTE6c3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjQ5Mi1cdFx0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBod3NpbV9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MTY2LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MTY3Olx0XHQuZG9pdCA9IGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNjgtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTczNDg9c3RhdGljIGludCBod3NpbV92aXJ0aW9faGFuZGxlX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTczNzItXHRjYXNlIEhXU0lNX0NNRF9GUkFNRTpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjczNzM6XHRcdGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubChza2IsIFx1MDAyNmluZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzM3NC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjIKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYCBhbmQgaXRzIENvbnRleHQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIGZ1bmN0aW9uIGFuZCBpdHMgc3Vycm91bmRpbmcgY29kZSBpbiB0aGUgaGFyZHdhcmUgc2ltdWxhdG9yLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBoZXJlIOKAkyBob3cgY2xvbmVkIGZyYW1lcyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgTmV0bGluayBwYXRoLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIGVudmlyb25tZW50LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCwgd2hhdCBkYXRhIGl0IHJlY2VpdmVzIGFzIGlucHV0LCBhbmQgaG93IHRoYXQgZGF0YSBpcyBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IHBhc3NlZCB1cCB0aGUgc3RhY2suCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWFsaW5nIHdpdGggc2hhcmVkIHJlc291cmNlcyBvciBzdGF0ZSByZWxhdGVkIHRvIHNpbXVsYXRlZCBoYXJkd2FyZS4gQXJlIHRoZXJlIGFueSBsb2NrcyBpbnZvbHZlZCwgYW5kIGlmIHNvLCB3aGF0JiMzOTtzIHRoZWlyIHNjb3BlIGFuZCBob3cgYXJlIHRoZXkgYWNxdWlyZWQgYW5kIHJlbGVhc2VkPyBJIGFsc28gZXhwZWN0IHRvIHNlZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjaywgYW5kIEkmIzM5O20ga2VlbiB0byBzcG90IGlmIGFueSBjdXN0b20gTmV0bGluayBhdHRyaWJ1dGVzIG9yIGNvbW1hbmRzIGFyZSBiZWluZyB1c2VkIGZvciB0aGlzIHNpbXVsYXRlZCBoYXJkd2FyZS4gSSYjMzk7bSBob3BpbmcgdG8gdW5jb3ZlciBhbnkgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NDkwOlx0XG42NDkxOlx0c3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuNjQ5MjpcdFx0XHRcdFx0XHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG42NDkzOlx0e1xuNjQ5NDpcdFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEyO1xuNjQ5NTpcdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzO1xuNjQ5NjpcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbjY0OTc6XHRcdGNvbnN0IHU4ICpkc3Q7XG42NDk4Olx0XHRpbnQgZnJhbWVfZGF0YV9sZW47XG42NDk5Olx0XHR2b2lkICpmcmFtZV9kYXRhO1xuNjUwMDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG42NTAxOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBOVUxMO1xuNjUwMjpcdFxuNjUwMzpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0gfHxcbjY1MDQ6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSB8fFxuNjUwNTpcdFx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfUlhfUkFURV0gfHxcbjY1MDY6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1NJR05BTF0pXG42NTA3Olx0XHRcdGdvdG8gb3V0O1xuNjUwODpcdFxuNjUwOTpcdFx0ZHN0ID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0pO1xuNjUxMDpcdFx0ZnJhbWVfZGF0YV9sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GUkFNRV0pO1xuNjUxMTpcdFx0ZnJhbWVfZGF0YSA9ICh2b2lkICopbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSk7XG42NTEyOlx0XG42NTEzOlx0XHRpZiAoZnJhbWVfZGF0YV9sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgfHxcbjY1MTQ6XHRcdCAgICBmcmFtZV9kYXRhX2xlbiBcdTAwM2UgSUVFRTgwMjExX01BWF9EQVRBX0xFTilcbjY1MTU6XHRcdFx0Z290byBlcnI7XG42NTE2Olx0XG42NTE3Olx0XHQvKiBBbGxvY2F0ZSBuZXcgc2tiIGhlcmUgKi9cbjY1MTg6XHRcdHNrYiA9IGFsbG9jX3NrYihmcmFtZV9kYXRhX2xlbiwgR0ZQX0tFUk5FTCk7XG42NTE5Olx0XHRpZiAoc2tiID09IE5VTEwpXG42NTIwOlx0XHRcdGdvdG8gZXJyO1xuNjUyMTpcdFxuNjUyMjpcdFx0LyogQ29weSB0aGUgZGF0YSAqL1xuNjUyMzpcdFx0c2tiX3B1dF9kYXRhKHNrYiwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pO1xuNjUyNDpcdFxuNjUyNTpcdFx0ZGF0YTIgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGRzdCk7XG42NTI2Olx0XHRpZiAoIWRhdGEyKVxuNjUyNzpcdFx0XHRnb3RvIG91dDtcbjY1Mjg6XHRcbjY1Mjk6XHRcdGlmIChkYXRhMi1cdTAwM2V1c2VfY2hhbmN0eCkge1xuNjUzMDpcdFx0XHRpZiAoZGF0YTItXHUwMDNldG1wX2NoYW4pXG42NTMxOlx0XHRcdFx0Y2hhbm5lbCA9IGRhdGEyLVx1MDAzZXRtcF9jaGFuO1xuNjUzMjpcdFx0fSBlbHNlIHtcbjY1MzM6XHRcdFx0Y2hhbm5lbCA9IGRhdGEyLVx1MDAzZWNoYW5uZWw7XG42NTM0Olx0XHR9XG42NTM1Olx0XG42NTM2Olx0XHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XG42NTM3Olx0XHRcdGlmIChod3NpbV9uZXRfZ2V0X25ldGdyb3VwKGdlbmxfaW5mb19uZXQoaW5mbykpICE9XG42NTM4Olx0XHRcdCAgICBkYXRhMi1cdTAwM2VuZXRncm91cClcbjY1Mzk6XHRcdFx0XHRnb3RvIG91dDtcbjY1NDA6XHRcbjY1NDE6XHRcdFx0aWYgKGluZm8tXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cdTAwM2V3bWVkaXVtZClcbjY1NDI6XHRcdFx0XHRnb3RvIG91dDtcbjY1NDM6XHRcdH1cbjY1NDQ6XHRcbjY1NDU6XHRcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cbjY1NDY6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcdTAwMjZcdTAwMjZcbjY1NDc6XHRcdCAgICBpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pIHtcbjY1NDg6XHRcdFx0dTY0IGNvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcbjY1NDk6XHRcdFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xuNjU1MDpcdFx0XHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqdHhkYXRhO1xuNjU1MTpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTtcbjY1NTI6XHRcdFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xuNjU1MzpcdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNjU1NDpcdFxuNjU1NTpcdFx0XHR0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG42NTU2Olx0XHRcdHR4ZGF0YSA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIodHJhbnNtaXR0ZXIpO1xuNjU1NzpcdFx0XHRpZiAoIXR4ZGF0YSB8fCB0eGRhdGEtXHUwMDNlbmV0Z3JvdXAgIT0gZGF0YTItXHUwMDNlbmV0Z3JvdXApXG42NTU4Olx0XHRcdFx0Z290byBvdXQ7XG42NTU5Olx0XG42NTYwOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbjY1NjE6XHRcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcsIG9yaWdfc2tiKSB7XG42NTYyOlx0XHRcdFx0dWludHB0cl90IHNrYl9jb29raWU7XG42NTYzOlx0XG42NTY0Olx0XHRcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihvcmlnX3NrYik7XG42NTY1Olx0XHRcdFx0c2tiX2Nvb2tpZSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF07XG42NTY2Olx0XG42NTY3Olx0XHRcdFx0aWYgKHNrYl9jb29raWUgPT0gY29va2llKSB7XG42NTY4Olx0XHRcdFx0XHRmb3VuZCA9IG9yaWdfc2tiO1xuNjU2OTpcdFx0XHRcdFx0YnJlYWs7XG42NTcwOlx0XHRcdFx0fVxuNjU3MTpcdFx0XHR9XG42NTcyOlx0XG42NTczOlx0XHRcdC8qIHRoYXQmIzM5O3Mgd2VpcmQgKi9cbjY1NzQ6XHRcdFx0aWYgKCFmb3VuZCkge1xuNjU3NTpcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuNjU3NjpcdFx0XHRcdGdvdG8gb3V0O1xuNjU3NzpcdFx0XHR9XG42NTc4Olx0XG42NTc5Olx0XHRcdGlmIChmcmFtZV9kYXRhX2xlbiBcdTAwM2UgZm91bmQtXHUwMDNlbGVuIFx1MDAyNlx1MDAyNlxuNjU4MDpcdFx0XHQgICAgcHNrYl9leHBhbmRfaGVhZChmb3VuZCwgMCwgZnJhbWVfZGF0YV9sZW4gLSBmb3VuZC1cdTAwM2VsZW4sXG42NTgxOlx0XHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpKSB7XG42NTgyOlx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG42NTgzOlx0XHRcdFx0Z290byBvdXQ7XG42NTg0Olx0XHRcdH1cbjY1ODU6XHRcdFx0c2tiX3RyaW0oZm91bmQsIDApO1xuNjU4NjpcdFx0XHRza2JfcHV0X2RhdGEoZm91bmQsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTtcbjY1ODc6XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG42NTg4Olx0XHR9XG42NTg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMjYKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBMb3NzIGluIFNpbXVsYXRlZCA4MDIuMTEgVHJhbnNtaXNzaW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgc2ltdWxhdGVkIDgwMi4xMSBlbnZpcm9ubWVudCBhZ2Fpbi4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgZmxvdyBhcm91bmQgdHJhbnNtaXNzaW9uLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB2ZXJpZnlpbmcgdGhlcmUgYXJlIG5vIGRhdGEtbG9zcyBpc3N1ZXMgaGFwcGVuaW5nIGluc2lkZSB0aGUga2VybmVsIGl0c2VsZi4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbiBwb2ludHMgYmV0d2VlbiB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBhbmQgdGhlIG1hYzgwMjExIHN0YWNrLiBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgIHNlZW1zIGxpa2UgYSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGZyYW1lcyBkZXN0aW5lZCBmb3IgdGhlIHNpbXVsYXRlZCBoYXJkd2FyZSwgc28gbGV0JiMzOTtzIGNoZWNrIHRoYXQuIFRoZW4sIHNpbmNlIHRoaXMgaXMgYWxsIGludGVybmFsLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbmZvcm1hdGlvbiBvbiB3aGF0IGhhcHBlbmVkIHRvIHRoZSBmcmFtZSBpcyBwcm9wZXJseSBwcm9wYWdhdGVkIGJhY2sgdXAuIFRoZXJlZm9yZSBJIG5lZWQgdG8gY2hlY2sgYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgIHdoaWNoIEkgYmVsaWV2ZSBpcyB3aGVyZSB0aGF0IGluZm9ybWF0aW9uIGdldHMgc2VudC4gSSBuZWVkIHRvIHJldmlldyB0aGVzZSBmdW5jdGlvbnMgY2FyZWZ1bGx5LiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgbm90aWZpY2F0aW9ucywgb3IgZGF0YSBjb3JydXB0aW9uIGR1cmluZyB0aGlzIHByb2Nlc3MuIEEgYml0IG9mIHN0YXRpYyBhbmFseXNpcyBpcyBwcm9iYWJseSB0aGUgYmVzdCBmaXJzdCBzdGVwLiBHb3R0YSBlbnN1cmUgdGhhdCBldmVyeXRoaW5nIGlzIHBsYXlpbmcgbmljZWx5IGluIHRoaXMgc2ltdWxhdGVkIGVudmlyb25tZW50IHRvIHByZXZlbnQgdW5leHBlY3RlZCBkcm9wcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcyNTpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE3MjY6XHRcbjE3Mjc6XHRcdGlmIChubGFfcHV0KHNrYiwgSFdTSU1fQVRUUl9UWF9JTkZPX0ZMQUdTLFxuMTcyODpcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBod3NpbV90eF9yYXRlX2ZsYWcpICogSUVFRTgwMjExX1RYX01BWF9SQVRFUyxcbjE3Mjk6XHRcdFx0ICAgIHR4X2F0dGVtcHRzX2ZsYWdzKSlcbjE3MzA6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzMxOlx0XG4xNzMyOlx0XHQvKiBXZSBjcmVhdGUgYSBjb29raWUgdG8gaWRlbnRpZnkgdGhpcyBza2IgKi9cbjE3MzM6XHRcdGNvb2tpZSA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRhdGEtXHUwMDNlcGVuZGluZ19jb29raWUpO1xuMTczNDpcdFx0aW5mby1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzBdID0gKHZvaWQgKiljb29raWU7XG4xNzM1Olx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBIV1NJTV9BVFRSX0NPT0tJRSwgY29va2llLCBIV1NJTV9BVFRSX1BBRCkpXG4xNzM2Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMTczNzpcdFxuMTczODpcdFx0LyogdHJhY2sgdGhlIGZyZXF1ZW5jeSAqL1xuMTczOTpcdFx0aW5mby1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdID0gKHZvaWQgKikodWludHB0cl90KWNoYW5uZWwtXHUwMDNlY2VudGVyX2ZyZXE7XG4xNzQwOlx0XG4xNzQxOlx0XHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcbjE3NDI6XHRcbjE3NDM6XHRcdGlmIChod3NpbV92aXJ0aW9fZW5hYmxlZCkge1xuMTc0NDpcdFx0XHRpZiAoaHdzaW1fdHhfdmlydGlvKGRhdGEsIHNrYikpXG4xNzQ1Olx0XHRcdFx0Z290byBlcnJfZnJlZV90eHNrYjtcbjE3NDY6XHRcdH0gZWxzZSB7XG4xNzQ3Olx0XHRcdGlmIChod3NpbV91bmljYXN0X25ldGdyb3VwKGRhdGEsIHNrYiwgZHN0X3BvcnRpZCkpXG4xNzQ4Olx0XHRcdFx0Z290byBlcnJfZnJlZV90eHNrYjtcbjE3NDk6XHRcdH1cbjE3NTA6XHRcbjE3NTE6XHRcdC8qIEVucXVldWUgdGhlIHBhY2tldCAqL1xuMTc1MjpcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2ZGF0YS1cdTAwM2VwZW5kaW5nLCBteV9za2IpO1xuMTc1MzpcdFx0ZGF0YS1cdTAwM2V0eF9wa3RzJiM0MzsmIzQzOztcbjE3NTQ6XHRcdGRhdGEtXHUwMDNldHhfYnl0ZXMgJiM0Mzs9IG15X3NrYi1cdTAwM2VsZW47XG4xNzU1Olx0XHRyZXR1cm47XG4xNzU2Olx0XG4xNzU3Olx0bmxhX3B1dF9mYWlsdXJlOlxuMTc1ODpcdFx0bmxtc2dfZnJlZShza2IpO1xuMTc1OTpcdGVycl9mcmVlX3R4c2tiOlxuMTc2MDpcdFx0cHJfZGVidWcoXCYjMzQ7bWFjODAyMTFfaHdzaW06IGVycm9yIG9jY3VycmVkIGluICVzXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4xNzYxOlx0XHRpZWVlODAyMTFfZnJlZV90eHNrYihodywgbXlfc2tiKTtcbjE3NjI6XHRcdGRhdGEtXHUwMDNldHhfZmFpbGVkJiM0MzsmIzQzOztcbjE3NjM6XHR9XG4xNzY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY5CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBSZWNlaXZlciBQYXRoKioKCkFscmlnaHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgcmVjZWl2ZSBwYXRoLiBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBzdGFuZGFyZCBmbG93LCBidXQgYSBnb29kIGVuZ2luZWVyIGtub3dzIHRvIGRvdWJsZS1jaGVjayBlZGdlIGNhc2VzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gcnVuIGEgZGlhZ25vc3RpY3MgY2hlY2sgb24gYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgIG5vdy4gSXQmIzM5O3MgcG9zc2libGUgdGhlcmUgYXJlIHNvbWUgaXNzdWVzIHdpdGggdGhlIFRYIEluZm8gRnJhbWUgaGFuZGxpbmcsIGFuZCB0aGlzIGNvdWxkIGJlIHN1YnRseSBpbXBhY3RpbmcgdGhlIFJYIHNpZGUgb3IgaGlkaW5nIHNvbWUgb3RoZXIgaXNzdWVzLiBJdCYjMzk7cyBhIGtleSBzcG90IHRoYXQgY2FuIGdpdmUgdXMgaGludHMgZm9yIGRlZXBlciBkZWJ1Z2dpbmcgaWYgb3RoZXIgZGlhZ25vc3RpY3MgY29tZSB1cCBlbXB0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjM4MjpcdHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG42MzgzOlx0XHRcdFx0XHRcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG42Mzg0Olx0e1xuNjM4NTpcdFxuNjM4NjpcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbjYzODc6XHRcdHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhMjtcbjYzODg6XHRcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpO1xuNjM4OTpcdFx0c3RydWN0IGh3c2ltX3R4X3JhdGUgKnR4X2F0dGVtcHRzO1xuNjM5MDpcdFx0dTY0IHJldF9za2JfY29va2llO1xuNjM5MTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDtcbjYzOTI6XHRcdGNvbnN0IHU4ICpzcmM7XG42MzkzOlx0XHR1bnNpZ25lZCBpbnQgaHdzaW1fZmxhZ3M7XG42Mzk0Olx0XHRpbnQgaTtcbjYzOTU6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG42Mzk2Olx0XHRib29sIGZvdW5kID0gZmFsc2U7XG42Mzk3Olx0XHRib29sIG5vX21vbml0b3I7XG42Mzk4Olx0XHR1MzIgZnJlcTtcbjYzOTk6XHRcbjY0MDA6XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdIHx8XG42NDAxOlx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10gfHxcbjY0MDI6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0gfHxcbjY0MDM6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1NJR05BTF0gfHxcbjY0MDQ6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1RYX0lORk9dKVxuNjQwNTpcdFx0XHRnb3RvIG91dDtcbjY0MDY6XHRcbjY0MDc6XHRcdHNyYyA9ICh2b2lkICopbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTtcbjY0MDg6XHRcdGh3c2ltX2ZsYWdzID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSk7XG42NDA5Olx0XHRyZXRfc2tiX2Nvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcbjY0MTA6XHRcdG5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX05PX01PTklUT1JdKTtcbjY0MTE6XHRcbjY0MTI6XHRcdGRhdGEyID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcihzcmMpO1xuNjQxMzpcdFx0aWYgKCFkYXRhMilcbjY0MTQ6XHRcdFx0Z290byBvdXQ7XG42NDE1Olx0XG42NDE2Olx0XHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XG42NDE3Olx0XHRcdGlmIChod3NpbV9uZXRfZ2V0X25ldGdyb3VwKGdlbmxfaW5mb19uZXQoaW5mbykpICE9XG42NDE4Olx0XHRcdCAgICBkYXRhMi1cdTAwM2VuZXRncm91cClcbjY0MTk6XHRcdFx0XHRnb3RvIG91dDtcbjY0MjA6XHRcbjY0MjE6XHRcdFx0aWYgKGluZm8tXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cdTAwM2V3bWVkaXVtZClcbjY0MjI6XHRcdFx0XHRnb3RvIG91dDtcbjY0MjM6XHRcdH1cbjY0MjQ6XHRcbjY0MjU6XHRcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cbjY0MjY6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRhdGEyLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuNjQyNzpcdFx0c2tiX3F1ZXVlX3dhbGtfc2FmZShcdTAwMjZkYXRhMi1cdTAwM2VwZW5kaW5nLCBza2IsIHRtcCkge1xuNjQyODpcdFx0XHR1aW50cHRyX3Qgc2tiX2Nvb2tpZTtcbjY0Mjk6XHRcbjY0MzA6XHRcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuNjQzMTpcdFx0XHRza2JfY29va2llID0gKHVpbnRwdHJfdCl0eGktXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXTtcbjY0MzI6XHRcbjY0MzM6XHRcdFx0aWYgKHNrYl9jb29raWUgPT0gcmV0X3NrYl9jb29raWUpIHtcbjY0MzQ6XHRcdFx0XHRfX3NrYl91bmxpbmsoc2tiLCBcdTAwMjZkYXRhMi1cdTAwM2VwZW5kaW5nKTtcbjY0MzU6XHRcdFx0XHRmb3VuZCA9IHRydWU7XG42NDM2Olx0XHRcdFx0YnJlYWs7XG42NDM3Olx0XHRcdH1cbjY0Mzg6XHRcdH1cbjY0Mzk6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGF0YTItXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG42NDQwOlx0XG42NDQxOlx0XHQvKiBub3QgZm91bmQgKi9cbjY0NDI6XHRcdGlmICghZm91bmQpXG42NDQzOlx0XHRcdGdvdG8gb3V0O1xuNjQ0NDpcdFxuNjQ0NTpcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuNjQ0NjpcdFx0ZnJlcSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV07XG42NDQ3Olx0XG42NDQ4Olx0XHRpZiAoIW5vX21vbml0b3IpXG42NDQ5Olx0XHRcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXHUwMDNlaHcsIHNrYiwgZnJlcSk7XG42NDUwOlx0XG42NDUxOlx0XHQvKiBUeCBpbmZvIHJlY2VpdmVkIGJlY2F1c2UgdGhlIGZyYW1lIHdhcyBicm9hZGNhc3RlZCBvbiB1c2VyIHNwYWNlLFxuNjQ1MjpcdFx0IHNvIHdlIGdldCBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvOiB0eCBhdHRlbXB0cyBhbmQgc2tiIGNvbnRyb2wgYnVmZiAqL1xuNjQ1MzpcdFxuNjQ1NDpcdFx0dHhfYXR0ZW1wdHMgPSAoc3RydWN0IGh3c2ltX3R4X3JhdGUgKilubGFfZGF0YShcbjY0NTU6XHRcdFx0ICAgICAgIGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XG42NDU2Olx0XG42NDU3Olx0XHQvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqL1xuNjQ1ODpcdFx0aWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7XG42NDU5Olx0XG42NDYwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpJiM0MzsmIzQzOykge1xuNjQ2MTpcdFx0XHR0eGktXHUwMDNlc3RhdHVzLnJhdGVzW2ldLmlkeCA9IHR4X2F0dGVtcHRzW2ldLmlkeDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTUKCQkJCQkJCW91dHB1dDogMjQxCgkJCQkJCQl0aG91Z2h0czogMTAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBLTVNBTiBOZWVkZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgdGhlIGNvcmUgY2hhbmdlcyBhcmU6IGEgbmV3IGBIV1NJTV9BVFRSX05PX01PTklUT1JgIGF0dHJpYnV0ZSBmb3Igc2VsZWN0aXZlbHkgZGlzYWJsaW5nIG1vbml0b3IgZnJhbWVzLCBzdG9yYWdlIGFuZCByZXRyaWV2YWwgb2YgdGhlIHRyYW5zbWlzc2lvbiBmcmVxdWVuY3kgdmlhIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYW5kIHRoZSBhYmlsaXR5IHRvIHVwZGF0ZSBhIHBlbmRpbmcgZnJhbWUmIzM5O3MgZGF0YSBmcm9tIGEgbmV0bGluayBtZXNzYWdlLgoKTXkgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFNvLCBJIHdlbnQgdGhyb3VnaCBpdCB3aXRoIGEgZmluZS10b290aGVkIGNvbWIuIFRoZSBmcmVxdWVuY3ksIG5vdyBzdG9yZWQgaW4gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgZnJhbWUgZGF0YSBjb3BpZWQgaW50byB0aGUgc2tiIGluIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIG5ldGxpbmsgbWVzc2FnZSwgYW5kIGxlbmd0aCBjaGVja3MgYXJlIGluIHBsYWNlLCBzbyB0aGUgZGF0YSBpcyBib3VuZGVkLCBhbmQgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBtb25pdG9yIGZ1bmN0aW9ucyBhbHNvIHJlY2VpdmUgdGhlIGZyZXF1ZW5jeSBhcyBhIGB1MzJgIGFuZCB3cml0ZSBpdCB0byBhIGhlYWRlciBmaWVsZC4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcywgbm90aGluZyBpcyBnZXR0aW5nIGNvcGllZCB0byB1c2Vyc3BhY2UgdW5pbml0aWFsaXplZCwgbm8gY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gaW5mb3JtYXRpb24gbGVha3MuCgpHaXZlbiB0aGF0IEkga25vdyB0aGUgS01TQU4gZ3VpZGVsaW5lcyB3ZWxsLCBJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGUgcnVsZXMuIFRoZSBwYXRjaCBjaGFuZ2VzIGFuZCBhZGRpdGlvbnM6IGBIV1NJTV9BVFRSX05PX01PTklUT1JgLCBgZnJlcWAsIGBza2JfY29va2llYCwgYW5kIGByYXRlX2RyaXZlcl9kYXRhWzFdYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGZyYW1lIGRhdGEgY29tZXMgZnJvbSBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGggbGVuZ3RoIHZlcmlmaWNhdGlvbi4KClJlZ2FyZGluZyB0aGUgJiMzNDtkbyB3ZSBuZWVkIEtNU0FOJiMzNDsgcXVlc3Rpb24gLSBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncywgc3VjaCBhcyBjb25jdXJyZW5jeSwgYnVmZmVyIG92ZXJydW5zLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgc2tiLCBhcmUgYWxyZWFkeSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjcmVhdGUgYm91bmRzIGNoZWNrcyB0aGF0IGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXI6IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucy4gSXQmIzM5O3Mgc2FmZSwgYW5kIE5lZWRzS01TQU4gPSBmYWxzZS4gVGhlIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuIEkgd2lsbCBub3cgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZGQgdGhlIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIG5ldGxpbmsgZmxhZyBhdHRyaWJ1dGUgZm9yIHNraXBwaW5nIG1vbml0b3IgcmVwb3J0cywgcHJlc2VydmVzIHRoZSB0cmFuc21pc3Npb24gY2hhbm5lbCBmcmVxdWVuY3kgaW4gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBhbmQgdXBkYXRlcyB0aGUgcGVuZGluZyB0cmFuc21pdHRlZCBza2IgaW4gYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgd2hlbiBtYXRjaGluZyBjb29raWUgYW5kIHRyYW5zbWl0dGVyIGF0dHJpYnV0ZXMgYXJlIHByb3ZpZGVkLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIChgZnJlcWAsIGBub19tb25pdG9yYCwgYGNvb2tpZWAsIGV0Yy4pIGFuZCBzdHJ1Y3R1cmUgbWVtYmVycyAoYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBgaGRyLVx1MDAzZXJ0X2NoYW5uZWxgKSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIFNLQiBtb2RpZmljYXRpb25zIHVzZSBgc2tiX3B1dF9kYXRhYCB3aXRoIHZlcmlmaWVkIHBheWxvYWQgbGVuZ3RocyBmcm9tIHZhbGlkYXRlZCBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZ3MsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgcmlza3MgcmVsYXRpbmcgdG8gU0tCIG1hbmlwdWxhdGlvbiwgcXVldWUgbG9ja2luZywgb3IgcmVmZXJlbmNlIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGRldGVjdG9ycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtYWM4MDIxMV9od3NpbWAgdG8gYWRkIHRoZSBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCBuZXRsaW5rIGZsYWcgYXR0cmlidXRlIGZvciBza2lwcGluZyBtb25pdG9yIHJlcG9ydHMsIHByZXNlcnZlcyB0aGUgdHJhbnNtaXNzaW9uIGNoYW5uZWwgZnJlcXVlbmN5IGluIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYW5kIHVwZGF0ZXMgdGhlIHBlbmRpbmcgdHJhbnNtaXR0ZWQgc2tiIGluIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIHdoZW4gbWF0Y2hpbmcgY29va2llIGFuZCB0cmFuc21pdHRlciBhdHRyaWJ1dGVzIGFyZSBwcm92aWRlZC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZyZXFgLCBgbm9fbW9uaXRvcmAsIGBjb29raWVgLCBldGMuKSBhbmQgc3RydWN0dXJlIG1lbWJlcnMgKGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYGhkci1cdTAwM2VydF9jaGFubmVsYCkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiB0aGlzIHBhdGNoIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzLiBTS0IgbW9kaWZpY2F0aW9ucyB1c2UgYHNrYl9wdXRfZGF0YWAgd2l0aCB2ZXJpZmllZCBwYXlsb2FkIGxlbmd0aHMgZnJvbSB2YWxpZGF0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmdzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHJlbGF0aW5nIHRvIFNLQiBtYW5pcHVsYXRpb24sIHF1ZXVlIGxvY2tpbmcsIG9yIHJlZmVyZW5jZSBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI2OjQ2Ljk3MTUzMzE0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mzg2MjU1NTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sXCIsXG4gICAgXCJod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX3R4XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkZCB0aGUgYEhXU0lNX0FUVFJfTk9fTU9OSVRPUmAgbmV0bGluayBmbGFnIGF0dHJpYnV0ZSBmb3Igc2tpcHBpbmcgbW9uaXRvciByZXBvcnRzLCBwcmVzZXJ2ZXMgdGhlIHRyYW5zbWlzc2lvbiBjaGFubmVsIGZyZXF1ZW5jeSBpbiBgcmF0ZV9kcml2ZXJfZGF0YVsxXWAsIGFuZCB1cGRhdGVzIHRoZSBwZW5kaW5nIHRyYW5zbWl0dGVkIHNrYiBpbiBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYCB3aGVuIG1hdGNoaW5nIGNvb2tpZSBhbmQgdHJhbnNtaXR0ZXIgYXR0cmlidXRlcyBhcmUgcHJvdmlkZWQuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZyZXFgLCBgbm9fbW9uaXRvcmAsIGBjb29raWVgLCBldGMuKSBhbmQgc3RydWN0dXJlIG1lbWJlcnMgKGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYGhkci1cXHUwMDNlcnRfY2hhbm5lbGApIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBhcmUgZXhwbGljaXRseSBhc3NpZ25lZCBhbmQgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzcy4gU0tCIG1vZGlmaWNhdGlvbnMgdXNlIGBza2JfcHV0X2RhdGFgIHdpdGggdmVyaWZpZWQgcGF5bG9hZCBsZW5ndGhzIGZyb20gdmFsaWRhdGVkIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5ncywgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCByaXNrcyByZWxhdGluZyB0byBTS0IgbWFuaXB1bGF0aW9uLCBxdWV1ZSBsb2NraW5nLCBvciByZWZlcmVuY2UgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZGV0ZWN0b3JzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1hYzgwMjExX2h3c2ltLCBhIHNvZnR3YXJlLWVtdWxhdGVkIDgwMi4xMSByYWRpbyB0ZXN0aW5nIHRvb2wgZnVsbHkgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgZ2VuZXJpYyBuZXRsaW5rLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgaGFuZGxpbmcgZm9yIEhXU0lNX0FUVFJfTk9fTU9OSVRPUiwgbW9kaWZ5IGNlbnRlciBmcmVxdWVuY3kgdHJhY2tpbmcgYWNyb3NzIFRYIG1vbml0b3IgcmVwb3J0aW5nLCBhbmQgYWRkIGxvZ2ljIGluIGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCB0byBzZWFyY2ggdGhlIHBlbmRpbmcgdHJhbnNtaXNzaW9uIHF1ZXVlIGJ5IGNvb2tpZSBhbmQgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IgZGF0YSAodmlhIHBza2JfZXhwYW5kX2hlYWQsIHNrYl90cmltLCBhbmQgc2tiX3B1dF9kYXRhKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcyBpbiB0aGUgc2ltdWxhdGVkIHJhZGlvIFRYL1JYIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyNjo0Ni45NzE1Mzc4MzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Mzg2MzAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViNzVhZjUxM2FlMWFmODc3OTJhMjBiNWFiYTQxNDE2MzUzZjk5OThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTQ6MjY6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oXFxuaW5kZXggYTAyMmNkNWMwZjFjNy4uMWQyZmQwNmM1ODVhOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmhcXG5AQCAtMyw3ICszLDcgQEBcXG4gICogbWFjODAyMTFfaHdzaW0gLSBzb2Z0d2FyZSBzaW11bGF0b3Igb2YgODAyLjExIHJhZGlvKHMpIGZvciBtYWM4MDIxMVxcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEpvdW5pIE1hbGluZW4gXFx1MDAzY2pAdzEuZmlcXHUwMDNlXFxuICAqIENvcHlyaWdodCAoYykgMjAxMSwgSmF2aWVyIExvcGV6IFxcdTAwM2NqbG9wZXhAZ21haWwuY29tXFx1MDAzZVxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxcbiAgKi9cXG4gXFxuICNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9IXFxuQEAgLTE2Miw2ICsxNjIsOCBAQCBlbnVtIGh3c2ltX2NvbW1hbmRzIHtcXG4gICpcXHRlYWNoIHJhZGlvIGluc3RlYWQgb2YgZm9yIHRoZSB3aXBoeS5cXG4gICogQEhXU0lNX0FUVFJfU1VQUE9SVF9OQU5fREVWSUNFOiBzdXBwb3J0IE5BTiBEZXZpY2UgdmlydHVhbCBpbnRlcmZhY2UgKGZsYWcpXFxuICAqIEBIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUjogYmFja2dyb3VuZCByYWRhci9DQUMgc3VwcG9ydCAoZmxhZylcXG4rICogQEhXU0lNX0FUVFJfTk9fTU9OSVRPUjogc2tpcCBtb25pdG9yIHJlcG9ydCBmb3IgdGhpcyBUWCBzdGF0dXMsIGUuZy4gaW4gY2FzZVxcbisgKlxcdHRoZSBmcmFtZSB3YXMgbmV2ZXIgcmVwb3J0ZWQgdG8gYW55IHJlY2VpdmVyIChmbGFnKVxcbiAgKiBAX19IV1NJTV9BVFRSX01BWDogZW51bSBsaW1pdFxcbiAgKi9cXG4gZW51bSBod3NpbV9hdHRycyB7XFxuQEAgLTE5Nyw2ICsxOTksNyBAQCBlbnVtIGh3c2ltX2F0dHJzIHtcXG4gXFx0SFdTSU1fQVRUUl9NVUxUSV9SQURJTyxcXG4gXFx0SFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0UsXFxuIFxcdEhXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSLFxcbitcXHRIV1NJTV9BVFRSX05PX01PTklUT1IsXFxuIFxcdF9fSFdTSU1fQVRUUl9NQVgsXFxuIH07XFxuICNkZWZpbmUgSFdTSU1fQVRUUl9NQVggKF9fSFdTSU1fQVRUUl9NQVggLSAxKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuaW5kZXggMDJiNmQ4MWNjY2QxMS4uZmNhNGJmODIzZWY0ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuQEAgLTg5NSw2ICs4OTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHdzaW1fZ2VubF9wb2xpY3lbSFdTSU1fQVRUUl9NQVggKyAxXSA9IHtcXG4gXFx0W0hXU0lNX0FUVFJfTVVMVElfUkFESU9dID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuIFxcdFtIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4gXFx0W0hXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbitcXHRbSFdTSU1fQVRUUl9OT19NT05JVE9SXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbiB9O1xcbiBcXG4gI2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKVxcbkBAIC0xMzM3LDcgKzEzMzgsNyBAQCBtYWM4MDIxMV9od3NpbV9nZXRfdHhfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFxuIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICp0eF9za2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbilcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZyZXEpXFxuIHtcXG4gXFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEgPSBody1cXHUwMDNlcHJpdjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5AQCAtMTM2OSw3ICsxMzcwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0aGRyLVxcdTAwM2VydF90c2Z0ID0gX19tYWM4MDIxMV9od3NpbV9nZXRfdHNmKGRhdGEpO1xcbiBcXHRoZHItXFx1MDAzZXJ0X2ZsYWdzID0gMDtcXG4gXFx0aGRyLVxcdTAwM2VydF9yYXRlID0gYml0cmF0ZSAvIDU7XFxuLVxcdGhkci1cXHUwMDNlcnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxKTtcXG4rXFx0aGRyLVxcdTAwM2VydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7XFxuIFxcdGZsYWdzID0gSUVFRTgwMjExX0NIQU5fMkdIWjtcXG4gXFx0aWYgKHR4cmF0ZSBcXHUwMDI2XFx1MDAyNiB0eHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1JBVEVfRVJQX0cpXFxuIFxcdFxcdGZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE07XFxuQEAgLTEzODcsOCArMTM4OCw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIH1cXG4gXFxuIFxcbi1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1OCAqYWRkcilcXG4rc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2sodTMyIGZyZXEsIGNvbnN0IHU4ICphZGRyKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHN0cnVjdCBod3NpbV9yYWRpb3RhcF9hY2tfaGRyICpoZHI7XFxuQEAgLTE0MTAsNyArMTQxMCw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAoMSBcXHUwMDNjXFx1MDAzYyBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCkpO1xcbiBcXHRoZHItXFx1MDAzZXJ0X2ZsYWdzID0gMDtcXG4gXFx0aGRyLVxcdTAwM2VwYWQgPSAwO1xcbi1cXHRoZHItXFx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihjaGFuLVxcdTAwM2VjZW50ZXJfZnJlcSk7XFxuK1xcdGhkci1cXHUwMDNlcnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGZyZXEpO1xcbiBcXHRmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7XFxuIFxcdGhkci1cXHUwMDNlcnRfY2hiaXRtYXNrID0gY3B1X3RvX2xlMTYoZmxhZ3MpO1xcbiBcXG5AQCAtMTczNSw2ICsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEhXU0lNX0FUVFJfQ09PS0lFLCBjb29raWUsIEhXU0lNX0FUVFJfUEFEKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbitcXHQvKiB0cmFjayB0aGUgZnJlcXVlbmN5ICovXFxuK1xcdGluZm8tXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC1cXHUwMDNlY2VudGVyX2ZyZXE7XFxuK1xcbiBcXHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcXG4gXFxuIFxcdGlmIChod3NpbV92aXJ0aW9fZW5hYmxlZCkge1xcbkBAIC0xOTEyLDcgKzE5MTUsNyBAQCBzdGF0aWMgYm9vbCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFxuIFxcdG1hYzgwMjExX2h3c2ltX3dyaXRlX3RzZihkYXRhLCBza2IsIHNpbV90c2YpO1xcbiBcXG4tXFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuKTtcXG4rXFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuLVxcdTAwM2VjZW50ZXJfZnJlcSk7XFxuIFxcbiBcXHRtZW1zZXQoXFx1MDAyNnJ4X3N0YXR1cywgMCwgc2l6ZW9mKHJ4X3N0YXR1cykpO1xcbiBcXHRyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQ7XFxuQEAgLTIyNzYsNyArMjI3OSw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRhY2sgPSBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChodywgc2tiLCBjaGFubmVsKTtcXG4gXFxuIFxcdGlmIChhY2sgXFx1MDAyNlxcdTAwMjYgc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gMTYpXFxuLVxcdFxcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGNoYW5uZWwsIGhkci1cXHUwMDNlYWRkcjIpO1xcbitcXHRcXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhjaGFubmVsLVxcdTAwM2VjZW50ZXJfZnJlcSwgaGRyLVxcdTAwM2VhZGRyMik7XFxuIFxcbiBcXHRpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhpKTtcXG4gXFxuQEAgLTYzOTEsNiArNjM5NCw4IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXFxuIFxcdGludCBpO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdGJvb2wgbm9fbW9uaXRvcjtcXG4rXFx0dTMyIGZyZXE7XFxuIFxcbiBcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0gfHxcXG4gXFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSB8fFxcbkBAIC02NDAyLDYgKzY0MDcsNyBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbiBcXHRzcmMgPSAodm9pZCAqKW5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pO1xcbiBcXHRod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTtcXG4gXFx0cmV0X3NrYl9jb29raWUgPSBubGFfZ2V0X3U2NChpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xcbitcXHRub19tb25pdG9yID0gbmxhX2dldF9mbGFnKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfTk9fTU9OSVRPUl0pO1xcbiBcXG4gXFx0ZGF0YTIgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKHNyYyk7XFxuIFxcdGlmICghZGF0YTIpXFxuQEAgLTY0MzYsNyArNjQ0MiwxMSBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbiBcXHRpZiAoIWZvdW5kKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXFx1MDAzZWh3LCBza2IsIGRhdGEyLVxcdTAwM2VjaGFubmVsKTtcXG4rXFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xcbitcXHRmcmVxID0gKHVpbnRwdHJfdCl0eGktXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV07XFxuK1xcbitcXHRpZiAoIW5vX21vbml0b3IpXFxuK1xcdFxcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXFx1MDAzZWh3LCBza2IsIGZyZXEpO1xcbiBcXG4gXFx0LyogVHggaW5mbyByZWNlaXZlZCBiZWNhdXNlIHRoZSBmcmFtZSB3YXMgYnJvYWRjYXN0ZWQgb24gdXNlciBzcGFjZSxcXG4gXFx0IHNvIHdlIGdldCBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvOiB0eCBhdHRlbXB0cyBhbmQgc2tiIGNvbnRyb2wgYnVmZiAqL1xcbkBAIC02NDQ1LDggKzY0NTUsNiBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbiBcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XFxuIFxcbiBcXHQvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqL1xcbi1cXHR0eGkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XFxuLVxcbiBcXHRpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhpKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspIHtcXG5AQCAtNjQ2Niw4ICs2NDc0LDcgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcXG4gXFx0aWYgKCEoaHdzaW1fZmxhZ3MgXFx1MDAyNiBIV1NJTV9UWF9DVExfTk9fQUNLKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAoaHdzaW1fZmxhZ3MgXFx1MDAyNiBIV1NJTV9UWF9TVEFUX0FDSykpIHtcXG4gXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2U9IDE2KVxcbi1cXHRcXHRcXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhkYXRhMi1cXHUwMDNlY2hhbm5lbCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgaGRyLVxcdTAwM2VhZGRyMik7XFxuK1xcdFxcdFxcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGZyZXEsIGhkci1cXHUwMDNlYWRkcjIpO1xcbiBcXHRcXHR0eGktXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSztcXG4gXFx0fVxcbiBcXG5AQCAtNjUzNSw2ICs2NTQyLDUxIEBAIHN0YXRpYyBpbnQgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cXG4rXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSkge1xcbitcXHRcXHR1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcXG4rXFx0XFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xcbitcXHRcXHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqdHhkYXRhO1xcbitcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTtcXG4rXFx0XFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0XFx0dHJhbnNtaXR0ZXIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTtcXG4rXFx0XFx0dHhkYXRhID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcih0cmFuc21pdHRlcik7XFxuK1xcdFxcdGlmICghdHhkYXRhIHx8IHR4ZGF0YS1cXHUwMDNlbmV0Z3JvdXAgIT0gZGF0YTItXFx1MDAzZW5ldGdyb3VwKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbitcXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2dHhkYXRhLVxcdTAwM2VwZW5kaW5nLCBvcmlnX3NrYikge1xcbitcXHRcXHRcXHR1aW50cHRyX3Qgc2tiX2Nvb2tpZTtcXG4rXFxuK1xcdFxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Iob3JpZ19za2IpO1xcbitcXHRcXHRcXHRza2JfY29va2llID0gKHVpbnRwdHJfdCl0eGktXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF07XFxuK1xcbitcXHRcXHRcXHRpZiAoc2tiX2Nvb2tpZSA9PSBjb29raWUpIHtcXG4rXFx0XFx0XFx0XFx0Zm91bmQgPSBvcmlnX3NrYjtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogdGhhdCdzIHdlaXJkICovXFxuK1xcdFxcdGlmICghZm91bmQpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHhkYXRhLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChmcmFtZV9kYXRhX2xlbiBcXHUwMDNlIGZvdW5kLVxcdTAwM2VsZW4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoZm91bmQsIDAsIGZyYW1lX2RhdGFfbGVuIC0gZm91bmQtXFx1MDAzZWxlbixcXG4rXFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKSkge1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRza2JfdHJpbShmb3VuZCwgMCk7XFxuK1xcdFxcdHNrYl9wdXRfZGF0YShmb3VuZCwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBjaGVjayBpZiByYWRpbyBpcyBjb25maWd1cmVkIHByb3Blcmx5ICovXFxuIFxcbiBcXHRpZiAoKGRhdGEyLVxcdTAwM2VpZGxlIFxcdTAwMjZcXHUwMDI2ICFkYXRhMi1cXHUwMDNldG1wX2NoYW4pIHx8ICFkYXRhMi1cXHUwMDNlc3RhcnRlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjY6NDcuNTY1OTYzMjg4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTk1NDIyMTQ0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubFwiLFxuICAgIFwiaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV90eFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1hYzgwMjExX2h3c2ltLCBhIHNvZnR3YXJlLWVtdWxhdGVkIDgwMi4xMSByYWRpbyB0ZXN0aW5nIHRvb2wgZnVsbHkgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgZ2VuZXJpYyBuZXRsaW5rLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgaGFuZGxpbmcgZm9yIEhXU0lNX0FUVFJfTk9fTU9OSVRPUiwgbW9kaWZ5IGNlbnRlciBmcmVxdWVuY3kgdHJhY2tpbmcgYWNyb3NzIFRYIG1vbml0b3IgcmVwb3J0aW5nLCBhbmQgYWRkIGxvZ2ljIGluIGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCB0byBzZWFyY2ggdGhlIHBlbmRpbmcgdHJhbnNtaXNzaW9uIHF1ZXVlIGJ5IGNvb2tpZSBhbmQgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IgZGF0YSAodmlhIHBza2JfZXhwYW5kX2hlYWQsIHNrYl90cmltLCBhbmQgc2tiX3B1dF9kYXRhKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcyBpbiB0aGUgc2ltdWxhdGVkIHJhZGlvIFRYL1JYIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViNzVhZjUxM2FlMWFmODc3OTJhMjBiNWFiYTQxNDE2MzUzZjk5OThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNDoyNjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaFxuaW5kZXggYTAyMmNkNWMwZjFjNy4uMWQyZmQwNmM1ODVhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oXG5AQCAtMyw3ICszLDcgQEBcbiAgKiBtYWM4MDIxMV9od3NpbSAtIHNvZnR3YXJlIHNpbXVsYXRvciBvZiA4MDIuMTEgcmFkaW8ocykgZm9yIG1hYzgwMjExXG4gICogQ29weXJpZ2h0IChjKSAyMDA4LCBKb3VuaSBNYWxpbmVuIFx1MDAzY2pAdzEuZmlcdTAwM2VcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEphdmllciBMb3BleiBcdTAwM2NqbG9wZXhAZ21haWwuY29tXHUwMDNlXG4tICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIyLTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqL1xuIFxuICNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9IXG5AQCAtMTYyLDYgKzE2Miw4IEBAIGVudW0gaHdzaW1fY29tbWFuZHMge1xuICAqXHRlYWNoIHJhZGlvIGluc3RlYWQgb2YgZm9yIHRoZSB3aXBoeS5cbiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0U6IHN1cHBvcnQgTkFOIERldmljZSB2aXJ0dWFsIGludGVyZmFjZSAoZmxhZylcbiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX0JBQ0tHUk9VTkRfUkFEQVI6IGJhY2tncm91bmQgcmFkYXIvQ0FDIHN1cHBvcnQgKGZsYWcpXG4rICogQEhXU0lNX0FUVFJfTk9fTU9OSVRPUjogc2tpcCBtb25pdG9yIHJlcG9ydCBmb3IgdGhpcyBUWCBzdGF0dXMsIGUuZy4gaW4gY2FzZVxuKyAqXHR0aGUgZnJhbWUgd2FzIG5ldmVyIHJlcG9ydGVkIHRvIGFueSByZWNlaXZlciAoZmxhZylcbiAgKiBAX19IV1NJTV9BVFRSX01BWDogZW51bSBsaW1pdFxuICAqL1xuIGVudW0gaHdzaW1fYXR0cnMge1xuQEAgLTE5Nyw2ICsxOTksNyBAQCBlbnVtIGh3c2ltX2F0dHJzIHtcbiBcdEhXU0lNX0FUVFJfTVVMVElfUkFESU8sXG4gXHRIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRSxcbiBcdEhXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSLFxuK1x0SFdTSU1fQVRUUl9OT19NT05JVE9SLFxuIFx0X19IV1NJTV9BVFRSX01BWCxcbiB9O1xuICNkZWZpbmUgSFdTSU1fQVRUUl9NQVggKF9fSFdTSU1fQVRUUl9NQVggLSAxKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbmluZGV4IDAyYjZkODFjY2NkMTEuLmZjYTRiZjgyM2VmNGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbkBAIC04OTUsNiArODk1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGh3c2ltX2dlbmxfcG9saWN5W0hXU0lNX0FUVFJfTUFYICsgMV0gPSB7XG4gXHRbSFdTSU1fQVRUUl9NVUxUSV9SQURJT10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiBcdFtIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiBcdFtIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbitcdFtIV1NJTV9BVFRSX05PX01PTklUT1JdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4gfTtcbiBcbiAjaWYgSVNfUkVBQ0hBQkxFKENPTkZJR19WSVJUSU8pXG5AQCAtMTMzNyw3ICsxMzM4LDcgQEAgbWFjODAyMTFfaHdzaW1fZ2V0X3R4X3JhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXG4gc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICp0eF9za2IsXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4pXG4rXHRcdFx0XHQgICAgICB1MzIgZnJlcSlcbiB7XG4gXHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTEzNjksNyArMTM3MCw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRoZHItXHUwMDNlcnRfdHNmdCA9IF9fbWFjODAyMTFfaHdzaW1fZ2V0X3RzZihkYXRhKTtcbiBcdGhkci1cdTAwM2VydF9mbGFncyA9IDA7XG4gXHRoZHItXHUwMDNlcnRfcmF0ZSA9IGJpdHJhdGUgLyA1O1xuLVx0aGRyLVx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihjaGFuLVx1MDAzZWNlbnRlcl9mcmVxKTtcbitcdGhkci1cdTAwM2VydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7XG4gXHRmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7XG4gXHRpZiAodHhyYXRlIFx1MDAyNlx1MDAyNiB0eHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9SQVRFX0VSUF9HKVxuIFx0XHRmbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9PRkRNO1xuQEAgLTEzODcsOCArMTM4OCw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gfVxuIFxuIFxuLXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbixcbi1cdFx0XHRcdCAgICAgICBjb25zdCB1OCAqYWRkcilcbitzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fjayh1MzIgZnJlcSwgY29uc3QgdTggKmFkZHIpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHN0cnVjdCBod3NpbV9yYWRpb3RhcF9hY2tfaGRyICpoZHI7XG5AQCAtMTQxMCw3ICsxNDEwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLFxuIFx0XHRcdFx0XHQgICgxIFx1MDAzY1x1MDAzYyBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCkpO1xuIFx0aGRyLVx1MDAzZXJ0X2ZsYWdzID0gMDtcbiBcdGhkci1cdTAwM2VwYWQgPSAwO1xuLVx0aGRyLVx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihjaGFuLVx1MDAzZWNlbnRlcl9mcmVxKTtcbitcdGhkci1cdTAwM2VydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7XG4gXHRmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7XG4gXHRoZHItXHUwMDNlcnRfY2hiaXRtYXNrID0gY3B1X3RvX2xlMTYoZmxhZ3MpO1xuIFxuQEAgLTE3MzUsNiArMTczNSw5IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbitcdC8qIHRyYWNrIHRoZSBmcmVxdWVuY3kgKi9cbitcdGluZm8tXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXSA9ICh2b2lkICopKHVpbnRwdHJfdCljaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxO1xuK1xuIFx0Z2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7XG4gXG4gXHRpZiAoaHdzaW1fdmlydGlvX2VuYWJsZWQpIHtcbkBAIC0xOTEyLDcgKzE5MTUsNyBAQCBzdGF0aWMgYm9vbCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcbiBcdG1hYzgwMjExX2h3c2ltX3dyaXRlX3RzZihkYXRhLCBza2IsIHNpbV90c2YpO1xuIFxuLVx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuKTtcbitcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoaHcsIHNrYiwgY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2cnhfc3RhdHVzLCAwLCBzaXplb2Yocnhfc3RhdHVzKSk7XG4gXHRyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQ7XG5AQCAtMjI3Niw3ICsyMjc5LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRhY2sgPSBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChodywgc2tiLCBjaGFubmVsKTtcbiBcbiBcdGlmIChhY2sgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VsZW4gXHUwMDNlPSAxNilcbi1cdFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soY2hhbm5lbCwgaGRyLVx1MDAzZWFkZHIyKTtcbitcdFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soY2hhbm5lbC1cdTAwM2VjZW50ZXJfZnJlcSwgaGRyLVx1MDAzZWFkZHIyKTtcbiBcbiBcdGllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGkpO1xuIFxuQEAgLTYzOTEsNiArNjM5NCw4IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRib29sIGZvdW5kID0gZmFsc2U7XG4rXHRib29sIG5vX21vbml0b3I7XG4rXHR1MzIgZnJlcTtcbiBcbiBcdGlmICghaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdIHx8XG4gXHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10gfHxcbkBAIC02NDAyLDYgKzY0MDcsNyBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0c3JjID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pO1xuIFx0aHdzaW1fZmxhZ3MgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTtcbiBcdHJldF9za2JfY29va2llID0gbmxhX2dldF91NjQoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xuK1x0bm9fbW9uaXRvciA9IG5sYV9nZXRfZmxhZyhpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfTk9fTU9OSVRPUl0pO1xuIFxuIFx0ZGF0YTIgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKHNyYyk7XG4gXHRpZiAoIWRhdGEyKVxuQEAgLTY0MzYsNyArNjQ0MiwxMSBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0aWYgKCFmb3VuZClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGRhdGEyLVx1MDAzZWh3LCBza2IsIGRhdGEyLVx1MDAzZWNoYW5uZWwpO1xuK1x0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuK1x0ZnJlcSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV07XG4rXG4rXHRpZiAoIW5vX21vbml0b3IpXG4rXHRcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXHUwMDNlaHcsIHNrYiwgZnJlcSk7XG4gXG4gXHQvKiBUeCBpbmZvIHJlY2VpdmVkIGJlY2F1c2UgdGhlIGZyYW1lIHdhcyBicm9hZGNhc3RlZCBvbiB1c2VyIHNwYWNlLFxuIFx0IHNvIHdlIGdldCBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvOiB0eCBhdHRlbXB0cyBhbmQgc2tiIGNvbnRyb2wgYnVmZiAqL1xuQEAgLTY0NDUsOCArNjQ1NSw2IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRcdCAgICAgICBpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfVFhfSU5GT10pO1xuIFxuIFx0Lyogbm93IHNlbmQgYmFjayBUWCBzdGF0dXMgKi9cbi1cdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbi1cbiBcdGllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKSB7XG5AQCAtNjQ2Niw4ICs2NDc0LDcgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbiBcdGlmICghKGh3c2ltX2ZsYWdzIFx1MDAyNiBIV1NJTV9UWF9DVExfTk9fQUNLKSBcdTAwMjZcdTAwMjZcbiBcdCAgIChod3NpbV9mbGFncyBcdTAwMjYgSFdTSU1fVFhfU1RBVF9BQ0spKSB7XG4gXHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZT0gMTYpXG4tXHRcdFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soZGF0YTItXHUwMDNlY2hhbm5lbCxcbi1cdFx0XHRcdFx0XHQgICBoZHItXHUwMDNlYWRkcjIpO1xuK1x0XHRcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGZyZXEsIGhkci1cdTAwM2VhZGRyMik7XG4gXHRcdHR4aS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7XG4gXHR9XG4gXG5AQCAtNjUzNSw2ICs2NTQyLDUxIEBAIHN0YXRpYyBpbnQgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cbitcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcdTAwMjZcdTAwMjZcbitcdCAgICBpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pIHtcbitcdFx0dTY0IGNvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xuK1x0XHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqdHhkYXRhO1xuK1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTtcbitcdFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xuK1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0XHR0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG4rXHRcdHR4ZGF0YSA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIodHJhbnNtaXR0ZXIpO1xuK1x0XHRpZiAoIXR4ZGF0YSB8fCB0eGRhdGEtXHUwMDNlbmV0Z3JvdXAgIT0gZGF0YTItXHUwMDNlbmV0Z3JvdXApXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbitcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcsIG9yaWdfc2tiKSB7XG4rXHRcdFx0dWludHB0cl90IHNrYl9jb29raWU7XG4rXG4rXHRcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihvcmlnX3NrYik7XG4rXHRcdFx0c2tiX2Nvb2tpZSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF07XG4rXG4rXHRcdFx0aWYgKHNrYl9jb29raWUgPT0gY29va2llKSB7XG4rXHRcdFx0XHRmb3VuZCA9IG9yaWdfc2tiO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdC8qIHRoYXQncyB3ZWlyZCAqL1xuK1x0XHRpZiAoIWZvdW5kKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKGZyYW1lX2RhdGFfbGVuIFx1MDAzZSBmb3VuZC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBwc2tiX2V4cGFuZF9oZWFkKGZvdW5kLCAwLCBmcmFtZV9kYXRhX2xlbiAtIGZvdW5kLVx1MDAzZWxlbixcbitcdFx0XHRcdCAgICAgR0ZQX0FUT01JQykpIHtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRza2JfdHJpbShmb3VuZCwgMCk7XG4rXHRcdHNrYl9wdXRfZGF0YShmb3VuZCwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbitcdH1cbitcbiBcdC8qIGNoZWNrIGlmIHJhZGlvIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHkgKi9cbiBcbiBcdGlmICgoZGF0YTItXHUwMDNlaWRsZSBcdTAwMjZcdTAwMjYgIWRhdGEyLVx1MDAzZXRtcF9jaGFuKSB8fCAhZGF0YTItXHUwMDNlc3RhcnRlZClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI2OjQ3LjU2NTk2NDk2OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxODE2NzMyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCdzIGZ1enotd29ydGh5LCB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBpdCBtaWdodCBuZWVkLCBhbmQgd2hhdCBzeW1ib2xzIHdlIHNob3VsZCBiZSBmb2N1c2luZyBvbi4gRmlyc3QsIHRoZSBkaWZmLi4uIGl0IGxvb2tzIGxpa2Ugd2UncmUgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaGAgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AuIFJpZ2h0LCBgbWFjODAyMTFfaHdzaW1gIGlzIHRoYXQgaGFuZHkgc29mdHdhcmUgc2ltdWxhdG9yIGZvciA4MDIuMTEgcmFkaW9zIHdpdGhpbiBtYWM4MDIxMS4gR29vZC4gSXQncyBhIHZpcnR1YWwgbmV0ZGV2L3dpcmVsZXNzIGRyaXZlciwgYWNjZXNzaWJsZSB0aHJvdWdoIGdlbmVyaWMgbmV0bGluaywgc3BlY2lmaWNhbGx5IHRoZSBubDgwMjExL2h3c2ltIGdlbmwgaW50ZXJmYWNlLiBLbm93aW5nIFN5emthbGxlciBhbHJlYWR5IGV4ZXJjaXNlcyBpdCB2aWEgdGhpcyB2ZXJ5IGludGVyZmFjZSBpcyBhIHBsdXMg4oCTIG1lYW5zIHdlIGhhdmUgYSBrbm93biBhdHRhY2sgc3VyZmFjZS5cblxuTm93LCB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLi4ubGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKiAgIFdlJ3ZlIGdvdCBhIG5ldyBlbnVtIGBod3NpbV9hdHRyc2AgZW50cnk6IGBIV1NJTV9BVFRSX05PX01PTklUT1JgLiBUaGlzIGlzIGludGVyZXN0aW5nLlxuKiAgIFRoZSBgaHdzaW1fZ2VubF9wb2xpY3lgIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGF0IG5ldyBhdHRyaWJ1dGUgYXMgYSBmbGFnLiBPa2F5LlxuKiAgIEZ1bmN0aW9ucyBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAgYW5kIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AgaGF2ZSBoYWQgdGhlaXIgY2hhbm5lbCBwb2ludGVyIGFyZ3VtZW50cyByZXBsYWNlZCB3aXRoIGEgYHUzMiBmcmVxYCDigJMgdXNpbmcgYGluZm8tXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXWAgdG8gc3RvcmUgdGhlIGNlbnRlciBmcmVxdWVuY3kuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBhcmVhIGZvciBmdXp6aW5nIGlucHV0IHZhbHVlcy5cbiogICBJbiBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgLCB3ZSdyZSBzZXR0aW5nIGBpbmZvLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC1cdTAwM2VjZW50ZXJfZnJlcTtgLlxuKiAgIFRoZW4gaW4gYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgLCB3ZSBhcmUgaGFuZGxpbmcgYEhXU0lNX0FUVFJfTk9fTU9OSVRPUmAgYW5kIHVzaW5nIHRoYXQgZnJlcXVlbmN5IGZyb20gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLlxuKiAgIEFuZCBmaW5hbGx5LCBpbiBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYC4uLiB0aGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlJ3ZlIGdvdCBhIG5ldyBjb2RlIGJsb2NrLiBJZiBjZXJ0YWluIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQgKGBIV1NJTV9BVFRSX0NPT0tJRWAgYW5kIGBIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJgKSwgaXQgbG9va3MgdXAgdGhlIHRyYW5zbWl0dGVyIGh3c2ltXFxfZGF0YSwgY2hlY2tzIHRoZSBwZW5kaW5nIHF1ZXVlIGZvciBhIG1hdGNoaW5nIGNvb2tpZSwgZXhwYW5kcyB0aGUgaGVhZCBpZiBuZWNlc3NhcnkgKGBwc2tiX2V4cGFuZF9oZWFkYCksIHRyaW1zLCBhbmQgcmVwbGFjZXMgdGhlIHNrYiBkYXRhIHdpdGggYGZyYW1lX2RhdGFgIHVzaW5nIGBza2JfcHV0X2RhdGFgLiBUaGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBjYWxsIGlzIG9mdGVuIGEgZ29vZCBwbGFjZSB0byBsb29rLlxuXG5UaGUgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gY2xvbmVkIGZyYW1lcywgdHJhbnNtaXR0ZXIgZGF0YSwgYW5kIHRoZSBtYW5pcHVsYXRpb24gb2Ygc2ticy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgYW5kIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBhIGJpdCBiZXR0ZXIuIFRoaXMgbG9va3MgcmlwZSBmb3Igc29tZSBkaXJlY3RlZCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjE2LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjc6NTkuMzgyNzAwNzU1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODQ5MTI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjM4Mj1zdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjQ5MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2NDkxOnN0YXRpYyBpbnQgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02NDkyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBod3NpbV9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNjYtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNjc6XFx0XFx0LmRvaXQgPSBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE2OC1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzM0OD1zdGF0aWMgaW50IGh3c2ltX3ZpcnRpb19oYW5kbGVfY21kKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MzcyLVxcdGNhc2UgSFdTSU1fQ01EX0ZSQU1FOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjczNzM6XFx0XFx0aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHNrYiwgXFx1MDAyNmluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTczNzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI3OjU5Ljk2MTE5NzY3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NjY1NzkxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBLY29uZmlnIERlcGVuZGVuY2llcyBmb3IgbWFjODAyMTFfaHdzaW1fbWFpbi5jIGFuZCBtYWM4MDIxMV9od3NpbSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgSSBzdGFydCBwb2tpbmcgYXJvdW5kIHdpdGggYG1hYzgwMjExX2h3c2ltX21haW4uY2AgYW5kIGBtYWM4MDIxMV9od3NpbWAsIEkgKm5lZWQqIHRvIHZlcmlmeSB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIE5vIHBvaW50IHdhc3RpbmcgdGltZSBpZiBhIG5lY2Vzc2FyeSBvcHRpb24gaXNuJ3QgZW5hYmxlZCwgb3IgaWYgc29tZXRoaW5nIGVsc2UgaXMgY29uZmxpY3RpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQncyBndWFyZGluZyB0aG9zZSBzcGVjaWZpYyBmaWxlcyBhbmQgdGhlIGNvcmUgYG1hYzgwMjExX2h3c2ltYCBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8ga25vdzogYXJlIHdlIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBuZXR3b3JraW5nIGZlYXR1cmVzLCBkZWJ1ZyBvcHRpb25zLCBvciBwZXJoYXBzIGV2ZW4gYSBwYXJ0aWN1bGFyIHdpcmVsZXNzIHN0YW5kYXJkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzLCBsaWtlIHBvdGVudGlhbGx5IGEgZGVwZW5kZW5jeSBvbiBhIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBmdWxseSBzdXBwb3J0IGFsbCB0aGUgdGVzdCBmZWF0dXJlcyBpbiB0aG9zZSBmaWxlcz8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBpbW1lZGlhdGUgZmlsZSwgYG1hYzgwMjExX2h3c2ltX21haW4uY2AgYW5kIHRoZSBhc3NvY2lhdGVkIEtjb25maWcgZW50cnkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBwcmVjb25kaXRpb25zLiBUaGVuIEknbGwgZXhwYW5kIG91dHdhcmRzIHRvIGFueXRoaW5nIHRoYXQgZGVwZW5kcyBvbiBgbWFjODAyMTFfaHdzaW1gLiBJJ20gYWxzbyB0aGlua2luZyB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBtb2R1bGVzIHRoZW1zZWx2ZXMgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGZyb20gYSBkZXBlbmRlbmN5IHBvaW50IG9mIHZpZXcuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODowMy42Mjc3ODA2OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzA0MDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQUM4MDIxMV9IV1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjE6b2JqLSQoQ09ORklHX01BQzgwMjExX0hXU0lNKVxcdCs9IG1hYzgwMjExX2h3c2ltLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlLTItbWFjODAyMTFfaHdzaW0tb2Jqc1xcdFxcdCs9IG1hYzgwMjExX2h3c2ltX21haW4ub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjk6I2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MTA6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMTEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjIwPXN0cnVjdCBod3NpbV90eF9yYXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yMzMtICpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM0OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfUlRTX0NUUzogVXNlIFJUUy9DVFMgZXhjaGFuZ2UgZm9yIHRoaXMgcmF0ZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM1OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1Q6IENUUy10by1zZWxmIHByb3RlY3Rpb24gaXMgcmVxdWlyZWQuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTIzNi0gKlxcdFRoaXMgaXMgc2V0IGlmIHRoZSBjdXJyZW50IEJTUyByZXF1aXJlcyBFUlAgcHJvdGVjdGlvbi5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM3OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEU6IFVzZSBzaG9ydCBwcmVhbWJsZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM4OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19NQ1M6IEhUIHJhdGUuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzOTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUzogVkhUIE1DUyByYXRlLCBpbiB0aGlzIGNhc2UgdGhlIGlkeCBmaWVsZCBpc1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNDAtICpcXHRzcGxpdCBpbnRvIGEgaGlnaGVyIDQgYml0cyAoTnNzKSBhbmQgbG93ZXIgNCBiaXRzIChNQ1MgbnVtYmVyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDE6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX0dSRUVOX0ZJRUxEOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJhdGUgc2hvdWxkIGJlIHVzZWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQyLSAqXFx0aW4gR3JlZW5maWVsZCBtb2RlLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDM6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDXzQwX01IWl9XSURUSDogSW5kaWNhdGVzIGlmIHRoZSBDaGFubmVsIFdpZHRoIHNob3VsZCBiZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNDQtICpcXHQ0MCBNSHouXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0NTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfODBfTUhaX1dJRFRIOiBJbmRpY2F0ZXMgODAgTUh6IHRyYW5zbWlzc2lvblxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDY6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDXzE2MF9NSFpfV0lEVEg6IEluZGljYXRlcyAxNjAgTUh6IHRyYW5zbWlzc2lvblxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNDctICpcXHQoODArODAgaXNuJ3Qgc3VwcG9ydGVkIHlldClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjQ4OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19EVVBfREFUQTogVGhlIGZyYW1lIHNob3VsZCBiZSB0cmFuc21pdHRlZCBvbiBib3RoIG9mXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0OS0gKlxcdHRoZSBhZGphY2VudCAyMCBNSHogY2hhbm5lbHMsIGlmIHRoZSBjdXJyZW50IGNoYW5uZWwgdHlwZSBpc1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNTAtICpcXHROTDgwMjExX0NIQU5fSFQ0ME1JTlVTIG9yIE5MODAyMTFfQ0hBTl9IVDQwUExVUy5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjUxOiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19TSE9SVF9HSTogU2hvcnQgR3VhcmQgaW50ZXJ2YWwgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjUyLSAqXFx0cmF0ZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaD0yNTQ9ZW51bSBod3NpbV90eF9yYXRlX2ZsYWdzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU1OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9SVFNfQ1RTXFx0XFx0PSBCSVQoMCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI1NjpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1RcXHRcXHQ9IEJJVCgxKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU3OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRVxcdD0gQklUKDIpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI1OS1cXHQvKiByYXRlIGluZGV4IGlzIGFuIEhUL1ZIVCBNQ1MgaW5zdGVhZCBvZiBhbiBpbmRleCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjA6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTXFx0XFx0XFx0PSBCSVQoMyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MTpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19HUkVFTl9GSUVMRFxcdFxcdD0gQklUKDQpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjI6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIXFx0XFx0PSBCSVQoNSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MzpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19EVVBfREFUQVxcdFxcdD0gQklUKDYpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjQ6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfU0hPUlRfR0lcXHRcXHQ9IEJJVCg3KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjY1OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1ZIVF9NQ1NcXHRcXHRcXHQ9IEJJVCg4KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjY2OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDXzgwX01IWl9XSURUSFxcdFxcdD0gQklUKDkpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjc6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSFxcdFxcdD0gQklUKDEwKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjY4LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MzMxPWVudW0gaHdzaW1fcmF0ZV9pbmZvX2F0dHJpYnV0ZXMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTM1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MzUxOiNlbmRpZiAvKiBfX01BQzgwMjExX0hXU0lNX0ggKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9pLmg6MTA6I2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX0lfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjExOiNkZWZpbmUgX19NQUM4MDIxMV9IV1NJTV9JX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX2kuaC0xMi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oPTE2NT12b2lkIGllZWU4MDIxMV9od3NpbV93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9pLmgtMTY3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjE2ODojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9JX0ggKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxMj1zdGF0aWMgc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoY29uc3QgdTggKmFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzE3Oi8qIE1BQzgwMjExX0hXU0lNIG5ldGxpbmsgZmFtaWx5ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4LXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgaHdzaW1fZ2VubF9mYW1pbHk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBod3NpbV9tY2dycHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcyNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3Mjg6LyogTUFDODAyMTFfSFdTSU0gbmV0bGluayBwb2xpY3kgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MjktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz04NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGh3c2ltX2dlbmxfcG9saWN5W0hXU0lNX0FUVFJfTUFYICsgMV0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy05MDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6OTAzOi8qIE1BQzgwMjExX0hXU0lNIHZpcnRpbyBxdWV1ZXMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy05MDQtc3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKmh3c2ltX3Zxc1tIV1NJTV9OVU1fVlFTXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTE1NzU9c3RhdGljIGlubGluZSB1MTYgdHJhbnNfdHhfcmF0ZV9mbGFnc19pZWVlMmh3c2ltKHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1NzktXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODA6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9SVFNfQ1RTO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODEtXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTgyOlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4My1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODQ6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg1LVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19NQ1MpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4NjpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODctXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODg6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX0dSRUVOX0ZJRUxEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODktXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTkwOlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ180MF9NSFpfV0lEVEg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5MS1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU5MjpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5My1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU5NDpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfU0hPUlRfR0k7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5NS1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVkhUX01DUylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTk2OlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19WSFRfTUNTO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTctXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzgwX01IWl9XSURUSClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTk4OlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5OS1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfMTYwX01IWl9XSURUSClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNjAwOlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ18xNjBfTUhaX1dJRFRIO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE2MDEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0zNDg3PXN0YXRpYyBjb25zdCBjaGFyIG1hYzgwMjExX2h3c2ltX2dzdHJpbmdzX3N0YXRzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM0OTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MzQ5ODojZGVmaW5lIE1BQzgwMjExX0hXU0lNX1NTVEFUU19MRU4gQVJSQVlfU0laRShtYWM4MDIxMV9od3NpbV9nc3RyaW5nc19zdGF0cylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNDk5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MzUwOT1zdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX2dldF9ldF9zc2V0X2NvdW50KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUxMi1cXHRpZiAoc3NldCA9PSBFVEhfU1NfU1RBVFMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MzUxMzpcXHRcXHRyZXR1cm4gTUFDODAyMTFfSFdTSU1fU1NUQVRTX0xFTjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNTE0LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MzUxNz1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9nZXRfZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNTMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM1MzM6XFx0V0FSTl9PTihpICE9IE1BQzgwMjExX0hXU0lNX1NTVEFUU19MRU4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM1MzQtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NTY1MD1zdGF0aWMgY29uc3QgdTggaWZ0eXBlc19leHRfY2FwYV9hcFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTY1OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjU5OiNkZWZpbmUgTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTXFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NjAtXFx0RklFTERfUFJFUF9DT05TVChJRUVFODAyMTFfTUxEX0NBUF9PUF9USURfVE9fTElOS19NQVBfTkVHX1NVUFAsIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NjU9c3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NzItXFx0XFx0XFx0XFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTY3MzpcXHRcXHQubWxkX2NhcGFfYW5kX29wcyA9IE1BQzgwMjExX0hXU0lNX01MRF9DQVBBX09QUyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01Njc0LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTk5PXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgaHdzaW1fZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcyMDA6XFx0Lm5hbWUgPSBcXFwiTUFDODAyMTFfSFdTSU1cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcyMDEtXFx0LnZlcnNpb24gPSAxLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzUxOT1zdGF0aWMgdm9pZCBod3NpbV92aXJ0aW9fcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzUyNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NTI4Oi8qIE1BQzgwMjExX0hXU0lNIHZpcnRpbyBkZXZpY2UgaWQgdGFibGUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03NTI5LXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjc1MzA6XFx0eyBWSVJUSU9fSURfTUFDODAyMTFfSFdTSU0sIFZJUlRJT19ERVZfQU5ZX0lEIH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzUzMS1cXHR7IDAgfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz03OD1zdGF0aWMgdTY0IGh3c2ltX25hbl9nZXRfbWFzdGVyX3Jhbmsoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODM6XFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVApIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTg0LVxcdFxcdG1hc3Rlcl9wcmVmID0gZGF0YS1cXHUwMDNlbmFuLm1hc3Rlcl9wcmVmO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz0yMTY9dm9pZCBtYWM4MDIxMV9od3NpbV9uYW5fcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTI3My1cXHRpZiAoKHNsb3QgIT0gU0xPVF8yNEdIWl9EVyBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6Mjc0OlxcdCAgICAgZGF0YS1cXHUwMDNlbmFuLnBoYXNlICE9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9TQ0FOKSB8fFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMjc1LVxcdCAgICByeF9zdGF0dXMuZnJlcSAhPSAyNDM3KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00MzYtXFx0XFx0ICAgIChjZyA9PSBvd25fY2cgXFx1MDAyNlxcdTAwMjYgZnJhbWVfYW1yIFxcdTAwM2UgY3Vycl9hbXIpIHx8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo0Mzc6XFx0XFx0ICAgIGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDM4LVxcdFxcdFxcdC8qIEF2b2lkIGEgc3RhdGUgdHJhbnNpdGlvbiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00NjgtXFx0XFx0XFx0ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo0Njk6XFx0XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnBoYXNlID0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1VQO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDcwLVxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yYW5kb21fZmFjdG9yX3ZhbGlkX2R3c3QgPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz02MTI9bWFjODAyMTFfaHdzaW1fbmFuX2V4ZWNfc3RhdGVfdHJhbnNpdGlvbnMoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYyNS1cXHRpZiAoZGF0YS1cXHUwMDNlbmFuLm1hc3Rlcl90cmFuc2l0aW9uX3Njb3JlIFxcdTAwM2MgMylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYyNjpcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucm9sZSA9IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYyNzpcXHRlbHNlIGlmIChkYXRhLVxcdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYyOC1cXHRcXHQgZGF0YS1cXHUwMDNlbmFuLm1hc3Rlcl90cmFuc2l0aW9uX3Njb3JlIFxcdTAwM2U9IDMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2Mjk6XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMwOlxcdGVsc2UgaWYgKGRhdGEtXFx1MDAzZW5hbi5yb2xlID09IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX1NZTkMgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYzMS1cXHRcXHQgZGF0YS1cXHUwMDNlbmFuLnN5bmNfdHJhbnNpdGlvbl9zY29yZSBcXHUwMDNlPSAzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMyOlxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTk9OX1NZTkM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzM6XFx0ZWxzZSBpZiAoZGF0YS1cXHUwMDNlbmFuLnJvbGUgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTk9OX1NZTkMgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYzNC1cXHRcXHQgZGF0YS1cXHUwMDNlbmFuLnN5bmNfdHJhbnNpdGlvbl9zY29yZSBcXHUwMDNjIDMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzU6XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjM2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NDEtXFx0ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NDI6XFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5yb2xlID09IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUiBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjQzLVxcdCAgICAhaHJ0aW1lcl9hY3RpdmUoXFx1MDAyNmRhdGEtXFx1MDAzZW5hbi5kaXNjb3ZlcnlfYmVhY29uX3RpbWVyKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjUzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjU0OlxcdFxcdGlmIChkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjY1NTpcXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjU2LVxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yYW5kb21fZmFjdG9yX3ZhbGlkX2R3c3QgPSBOQU5fV0FSTVVQX0RXU1Q7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY1OS1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjYwOlxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY2MS1cXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9Njk1PW1hYzgwMjExX2h3c2ltX25hbl90eF9iZWFjb24oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTc1MC1cXHRuYW5fYXR0ci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YobWFzdGVyX2luZGljYXRpb24pKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjc1MTpcXHRpZiAoZGF0YS1cXHUwMDNlbmFuLnBoYXNlID09IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNzUyLVxcdFxcdG1hc3Rlcl9pbmRpY2F0aW9uLm1hc3Rlcl9wcmVmID0gZGF0YS1cXHUwMDNlbmFuLm1hc3Rlcl9wcmVmO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz03NzQ9bWFjODAyMTFfaHdzaW1fbmFuX3Nsb3RfdGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04MDctXFx0XFx0dHhfc3luY19iZWFjb24gPVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODA4OlxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTiBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODA5OlxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yb2xlICE9IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX05PTl9TWU5DO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODEwLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9ODY3PW1hYzgwMjExX2h3c2ltX25hbl9kaXNjb3ZlcnlfYmVhY29uX3RpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODc5LVxcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXFx1MDAyNmRhdGEtXFx1MDAzZW5hbi5zdGF0ZV9sb2NrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo4ODA6XFx0XFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTiB8fFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgxOlxcdFxcdCAgICBkYXRhLVxcdTAwM2VuYW4ucm9sZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04ODItXFx0XFx0XFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz05MDk9aW50IG1hYzgwMjExX2h3c2ltX25hbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtOTI2LVxcdFxcdC8qIFN0YXJ0IGluIHRoZSBcXFwic2NhblxcXCIgcGhhc2UgYW5kIHN0YXkgdGhlcmUgZm9yIGEgbGl0dGxlIGJpdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6OTI3OlxcdFxcdGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9TQ0FOO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtOTI4LVxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yYW5kb21fZmFjdG9yX3ZhbGlkX2R3c3QgPSAxO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy05MzAtXFx0XFx0ZGF0YS1cXHUwMDNlbmFuLm1hc3Rlcl9wcmVmID0gY29uZi1cXHUwMDNlbWFzdGVyX3ByZWY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo5MzE6XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy05MzItXFx0XFx0bWVtc2V0KFxcdTAwMjZkYXRhLVxcdTAwM2VuYW4uY3VycmVudF9hbWksIDAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTEyMjY9Ym9vbCBtYWM4MDIxMV9od3NpbV9uYW5fcmVjZWl2ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMTIzNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjEyMzY6XFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTEyMzctXFx0XFx0cmV0dXJuIGNoYW5uZWwtXFx1MDAzZWNlbnRlcl9mcmVxID09IDI0Mzc7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDo3OiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9OQU5fSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6ODojZGVmaW5lIF9fTUFDODAyMTFfSFdTSU1fTkFOX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaD0xMD1lbnVtIG1hYzgwMjExX2h3c2ltX25hbl9waGFzZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMTpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjEyOlxcdE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9XQVJNVVAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMzpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC0xNC19O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaD0xNj1lbnVtIG1hYzgwMjExX2h3c2ltX25hbl9yb2xlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjE3OlxcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjE4OlxcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX1NZTkMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxOTpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTIwLX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oPTk5PXZvaWQgbWFjODAyMTFfaHdzaW1fbmFuX2xvY2FsX3NjaGVkX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTEwMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjEwMjojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9OQU5fSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODowMy42ODQ4MjUwOTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODkzMTg1MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBWaXJ0dWFsIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSB2aXJ0dWFsIHdpcmVsZXNzIG5ldHdvcmsgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgZHJpdmVyLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUganVpY3kgZGV0YWlscyBhYm91dCBmZWF0dXJlIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGFyZSBrZXB0LiBUaGF0J3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHdpcmVsZXNzIGxhbmRzY2FwZSBhbmQgd2hhdCdzIGNvbmZpZ3VyYWJsZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzc2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjg6MDkuNTc4MDEzMTk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcXG4gICA2OlxcdFxcdCAgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XFxuICAgNzpcXHRcXHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdpcmVsZXNzIExBTiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy4gU2VlXFxuICAgODpcXHRcXHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3dcXG4gICA5OlxcdFxcdCAgdG8gdXNlIHRoaXMgdG9vbC5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gIDEyOlxcdFxcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFZJUlRfV0lGSVxcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIldpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxcbiAgMTk6XFx0XFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI4OjA5LjU3ODA5MTM2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTk0OTQwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTUFDODAyMTEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE1BQzgwMjExYCBhbmQgc3BlY2lmaWNhbGx5IGBNQUM4MDIxMV9IV1NJTWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIOKAkyBuYW1lbHksIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgYXMgaXQgc2hvdWxkIGRlZmluZSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGZyb20gdGhlcmUuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYE1BQzgwMjExX0hXU0lNYCBoYXMgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBtZXQgYmVmb3JlIGl0IGNhbiBldmVuIGJlIGNvbnNpZGVyZWQsIG9yIGlmIGl0IGlzIGp1c3QgYSBzdWJvcHRpb24gb2YgdGhlIGdlbmVyYWwgYE1BQzgwMjExYCBjb25maWd1cmF0aW9uLiBJIG1pZ2h0IGFsc28gbmVlZCB0byBsb29rIGF0IHBhcmVudCBLY29uZmlnIGZpbGVzIG9yIGRlcGVuZGVuY2llcywganVzdCBpbiBjYXNlIHNvbWV0aGluZyBpcyBkZWZpbmVkIG9yIGNvbmRpdGlvbmVkIGhpZ2hlciB1cCBpbiB0aGUgaGllcmFyY2h5LiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyB1c3VhbGx5IGhhcHBlbnMuIEkgc2hvdWxkIHF1aWNrbHkgYmUgYWJsZSB0byBzZWUgdGhlIHJlbGV2YW50ICdkZXBlbmRzIG9uJyBjbGF1c2VzIGFuZCBhbnkgcG90ZW50aWFsbHkgY29uZmxpY3Rpbmcgb3B0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb25maWd1cmF0aW9uIGNvbnRleHQgaXMgdGhlIGtleSB0byBzb2x2aW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTA0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODoxMi40Mzc1ODgyODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzAyMDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjg6MTIuNDkxMjk4MzAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzAzMzcyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBsaW5lIG9mIHRob3VnaHQsIHJlZmxlY3RpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIEZpbGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBjb25maWd1cmF0aW9uIGZpbGUsIG15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyByZWdpb24gbGlrZWx5IGRlZmluZXMgc29tZSBjb3JlLCBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEtub3dpbmcgdGhhdCBtYWM4MDIxMSBpcyB0aGUgaGVhcnQgb2YgdGhlIExpbnV4IHdpcmVsZXNzIHN0YWNrLCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgZ2VuZXJhbCBtb2R1bGUgb3IgYSB0b3AtbGV2ZWwgbWFjcm8uIEknbSBnb2luZyBpbiB3aXRoIHRoZSBleHBlY3RhdGlvbiBvZiBnZXR0aW5nIGEgZm91bmRhdGlvbmFsIG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI4OjE0LjUyMTYzOTQyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBNQUM4MDIxMVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgIDU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ19NQUNTXFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FFU1xcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19DQ01cXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTFcXG4gIDE0OlxcdFxcdCAgbmV0d29ya2luZyBzdGFjay5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29tbWVudCBcXFwiQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExPW5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0aWYgTUFDODAyMTEgIT0gblxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI4OjE0LjUyMTc3ODQ5MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzc4NTM5ODAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIGNvZGUgY2hhbmdlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgZnVsbHksIHNvIEknbGwgdmVyaWZ5IHRoZWlyIHJlYWNoLCBwdXJwb3NlLCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgZWRnZSBjYXNlcy5cblxuKipDb2RlIFJldmlldyAtIEFuYWx5emluZyBSZWNlbnQgQ2hhbmdlcyBpbiBtYWM4MDIxMV9od3NpbSoqXG5cbkZpcnN0LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubGAsIGBtYWM4MDIxMV9od3NpbV90eGAsIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgYW5kIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLiBUaGV5J3JlIHRoZSBjb3JlIG9mIHRoZSByZWNlbnQgd29yay4gSSB3aWxsIGFwcHJvYWNoIHRoaXMgc3lzdGVtYXRpY2FsbHkuXG5cblRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZywgSSdsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBjb2RlIGJsb2NrIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNjQ5MCB0byA2NTkwLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IGZvciB0aGVzZSBmdW5jdGlvbnMuIEkgd2lsbCBzdGFydCBieSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGxpbmUgYnkgbGluZSBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MzcsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODoyOC4zMDcxODAzNjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ4NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NDkwOlxcdFxcbjY0OTE6XFx0c3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbjY0OTI6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjY0OTM6XFx0e1xcbjY0OTQ6XFx0XFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEyO1xcbjY0OTU6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzO1xcbjY0OTY6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcXG42NDk3OlxcdFxcdGNvbnN0IHU4ICpkc3Q7XFxuNjQ5ODpcXHRcXHRpbnQgZnJhbWVfZGF0YV9sZW47XFxuNjQ5OTpcXHRcXHR2b2lkICpmcmFtZV9kYXRhO1xcbjY1MDA6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuNjUwMTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBOVUxMO1xcbjY1MDI6XFx0XFxuNjUwMzpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0gfHxcXG42NTA0OlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GUkFNRV0gfHxcXG42NTA1OlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9SWF9SQVRFXSB8fFxcbjY1MDY6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1NJR05BTF0pXFxuNjUwNzpcXHRcXHRcXHRnb3RvIG91dDtcXG42NTA4OlxcdFxcbjY1MDk6XFx0XFx0ZHN0ID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfUkVDRUlWRVJdKTtcXG42NTEwOlxcdFxcdGZyYW1lX2RhdGFfbGVuID0gbmxhX2xlbihpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSk7XFxuNjUxMTpcXHRcXHRmcmFtZV9kYXRhID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSk7XFxuNjUxMjpcXHRcXG42NTEzOlxcdFxcdGlmIChmcmFtZV9kYXRhX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgfHxcXG42NTE0OlxcdFxcdCAgICBmcmFtZV9kYXRhX2xlbiBcXHUwMDNlIElFRUU4MDIxMV9NQVhfREFUQV9MRU4pXFxuNjUxNTpcXHRcXHRcXHRnb3RvIGVycjtcXG42NTE2OlxcdFxcbjY1MTc6XFx0XFx0LyogQWxsb2NhdGUgbmV3IHNrYiBoZXJlICovXFxuNjUxODpcXHRcXHRza2IgPSBhbGxvY19za2IoZnJhbWVfZGF0YV9sZW4sIEdGUF9LRVJORUwpO1xcbjY1MTk6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbjY1MjA6XFx0XFx0XFx0Z290byBlcnI7XFxuNjUyMTpcXHRcXG42NTIyOlxcdFxcdC8qIENvcHkgdGhlIGRhdGEgKi9cXG42NTIzOlxcdFxcdHNrYl9wdXRfZGF0YShza2IsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTtcXG42NTI0OlxcdFxcbjY1MjU6XFx0XFx0ZGF0YTIgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGRzdCk7XFxuNjUyNjpcXHRcXHRpZiAoIWRhdGEyKVxcbjY1Mjc6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjUyODpcXHRcXG42NTI5OlxcdFxcdGlmIChkYXRhMi1cXHUwMDNldXNlX2NoYW5jdHgpIHtcXG42NTMwOlxcdFxcdFxcdGlmIChkYXRhMi1cXHUwMDNldG1wX2NoYW4pXFxuNjUzMTpcXHRcXHRcXHRcXHRjaGFubmVsID0gZGF0YTItXFx1MDAzZXRtcF9jaGFuO1xcbjY1MzI6XFx0XFx0fSBlbHNlIHtcXG42NTMzOlxcdFxcdFxcdGNoYW5uZWwgPSBkYXRhMi1cXHUwMDNlY2hhbm5lbDtcXG42NTM0OlxcdFxcdH1cXG42NTM1OlxcdFxcbjY1MzY6XFx0XFx0aWYgKCFod3NpbV92aXJ0aW9fZW5hYmxlZCkge1xcbjY1Mzc6XFx0XFx0XFx0aWYgKGh3c2ltX25ldF9nZXRfbmV0Z3JvdXAoZ2VubF9pbmZvX25ldChpbmZvKSkgIT1cXG42NTM4OlxcdFxcdFxcdCAgICBkYXRhMi1cXHUwMDNlbmV0Z3JvdXApXFxuNjUzOTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG42NTQwOlxcdFxcbjY1NDE6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZXNuZF9wb3J0aWQgIT0gZGF0YTItXFx1MDAzZXdtZWRpdW1kKVxcbjY1NDI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNjU0MzpcXHRcXHR9XFxuNjU0NDpcXHRcXG42NTQ1OlxcdFxcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cXG42NTQ2OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0gXFx1MDAyNlxcdTAwMjZcXG42NTQ3OlxcdFxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKSB7XFxuNjU0ODpcXHRcXHRcXHR1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcXG42NTQ5OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpvcmlnX3NrYiwgKmZvdW5kID0gTlVMTDtcXG42NTUwOlxcdFxcdFxcdHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICp0eGRhdGE7XFxuNjU1MTpcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTtcXG42NTUyOlxcdFxcdFxcdGNvbnN0IHU4ICp0cmFuc21pdHRlcjtcXG42NTUzOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuNjU1NDpcXHRcXG42NTU1OlxcdFxcdFxcdHRyYW5zbWl0dGVyID0gbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XFxuNjU1NjpcXHRcXHRcXHR0eGRhdGEgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKHRyYW5zbWl0dGVyKTtcXG42NTU3OlxcdFxcdFxcdGlmICghdHhkYXRhIHx8IHR4ZGF0YS1cXHUwMDNlbmV0Z3JvdXAgIT0gZGF0YTItXFx1MDAzZW5ldGdyb3VwKVxcbjY1NTg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNjU1OTpcXHRcXG42NTYwOlxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbjY1NjE6XFx0XFx0XFx0c2tiX3F1ZXVlX3dhbGsoXFx1MDAyNnR4ZGF0YS1cXHUwMDNlcGVuZGluZywgb3JpZ19za2IpIHtcXG42NTYyOlxcdFxcdFxcdFxcdHVpbnRwdHJfdCBza2JfY29va2llO1xcbjY1NjM6XFx0XFxuNjU2NDpcXHRcXHRcXHRcXHR0eGkgPSBJRUVFODAyMTFfU0tCX0NCKG9yaWdfc2tiKTtcXG42NTY1OlxcdFxcdFxcdFxcdHNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXTtcXG42NTY2OlxcdFxcbjY1Njc6XFx0XFx0XFx0XFx0aWYgKHNrYl9jb29raWUgPT0gY29va2llKSB7XFxuNjU2ODpcXHRcXHRcXHRcXHRcXHRmb3VuZCA9IG9yaWdfc2tiO1xcbjY1Njk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNjU3MDpcXHRcXHRcXHRcXHR9XFxuNjU3MTpcXHRcXHRcXHR9XFxuNjU3MjpcXHRcXG42NTczOlxcdFxcdFxcdC8qIHRoYXQncyB3ZWlyZCAqL1xcbjY1NzQ6XFx0XFx0XFx0aWYgKCFmb3VuZCkge1xcbjY1NzU6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHhkYXRhLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NTc2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjY1Nzc6XFx0XFx0XFx0fVxcbjY1Nzg6XFx0XFxuNjU3OTpcXHRcXHRcXHRpZiAoZnJhbWVfZGF0YV9sZW4gXFx1MDAzZSBmb3VuZC1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2XFxuNjU4MDpcXHRcXHRcXHQgICAgcHNrYl9leHBhbmRfaGVhZChmb3VuZCwgMCwgZnJhbWVfZGF0YV9sZW4gLSBmb3VuZC1cXHUwMDNlbGVuLFxcbjY1ODE6XFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKSkge1xcbjY1ODI6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHhkYXRhLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NTgzOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjY1ODQ6XFx0XFx0XFx0fVxcbjY1ODU6XFx0XFx0XFx0c2tiX3RyaW0oZm91bmQsIDApO1xcbjY1ODY6XFx0XFx0XFx0c2tiX3B1dF9kYXRhKGZvdW5kLCBmcmFtZV9kYXRhLCBmcmFtZV9kYXRhX2xlbik7XFxuNjU4NzpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbjY1ODg6XFx0XFx0fVxcbjY1ODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI4OjI4LjMwNzUzMTg2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzM4MDU2NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBIYXJkd2FyZSBTaW11bGF0aW9uIGZvciBGcmFtZSBUcmFuc21pc3Npb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gYXNwZWN0cyBvZiB0aGlzIGZyYW1lIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGEgYml0IGRlZXBlci4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdHdvIHNwZWNpZmljIGFyZWFzIGluIHRoZSBjb2RlLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgZnJvbSB0aGUgcG9pbnQgdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gcmVjZWl2ZXMgc29tZSBUWCBpbmZvcm1hdGlvbjsgSSdsbCBmb2N1cyBvbiBgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubGAgKGxpbmVzIDYzOTAtNjQ5MCkuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2ltdWxhdGlvbiBwcm9jZXNzZXMgdGhhdCBpbnB1dC4gVGhlbiwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gYWN0dWFsbHkgKnNlbmRzKiB0aGUgZnJhbWUsIHNvIEknbGwgYWxzbyBiZSBleGFtaW5pbmcgYG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25sYCAobGluZXMgMTcyMC0xNzYwKS4gQnkgZXhhbWluaW5nIHRoZXNlIHR3byBmdW5jdGlvbnMsIEknbGwgYnVpbGQgYSBtdWNoIGJldHRlciBwaWN0dXJlIG9mIGhvdyB0aGUgc2ltdWxhdGlvbiBoYW5kbGVzIFRYIGZyYW1lIGRhdGEgZW5kLXRvLWVuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMDksIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI4OjMwLjY0NTU5MTI1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTIyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjM5MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjM5MDpcXHRcXHR1NjQgcmV0X3NrYl9jb29raWU7XFxuNjM5MTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wO1xcbjYzOTI6XFx0XFx0Y29uc3QgdTggKnNyYztcXG42MzkzOlxcdFxcdHVuc2lnbmVkIGludCBod3NpbV9mbGFncztcXG42Mzk0OlxcdFxcdGludCBpO1xcbjYzOTU6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG42Mzk2OlxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG42Mzk3OlxcdFxcdGJvb2wgbm9fbW9uaXRvcjtcXG42Mzk4OlxcdFxcdHUzMiBmcmVxO1xcbjYzOTk6XFx0XFxuNjQwMDpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0gfHxcXG42NDAxOlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10gfHxcXG42NDAyOlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdIHx8XFxuNjQwMzpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfU0lHTkFMXSB8fFxcbjY0MDQ6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1RYX0lORk9dKVxcbjY0MDU6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjQwNjpcXHRcXG42NDA3OlxcdFxcdHNyYyA9ICh2b2lkICopbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XFxuNjQwODpcXHRcXHRod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTtcXG42NDA5OlxcdFxcdHJldF9za2JfY29va2llID0gbmxhX2dldF91NjQoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcXG42NDEwOlxcdFxcdG5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7XFxuNjQxMTpcXHRcXG42NDEyOlxcdFxcdGRhdGEyID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcihzcmMpO1xcbjY0MTM6XFx0XFx0aWYgKCFkYXRhMilcXG42NDE0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjY0MTU6XFx0XFxuNjQxNjpcXHRcXHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XFxuNjQxNzpcXHRcXHRcXHRpZiAoaHdzaW1fbmV0X2dldF9uZXRncm91cChnZW5sX2luZm9fbmV0KGluZm8pKSAhPVxcbjY0MTg6XFx0XFx0XFx0ICAgIGRhdGEyLVxcdTAwM2VuZXRncm91cClcXG42NDE5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjY0MjA6XFx0XFxuNjQyMTpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cXHUwMDNld21lZGl1bWQpXFxuNjQyMjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG42NDIzOlxcdFxcdH1cXG42NDI0OlxcdFxcbjY0MjU6XFx0XFx0LyogbG9vayBmb3IgdGhlIHNrYiBtYXRjaGluZyB0aGUgY29va2llIHBhc3NlZCBiYWNrIGZyb20gdXNlciAqL1xcbjY0MjY6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NDI3OlxcdFxcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLCBza2IsIHRtcCkge1xcbjY0Mjg6XFx0XFx0XFx0dWludHB0cl90IHNrYl9jb29raWU7XFxuNjQyOTpcXHRcXG42NDMwOlxcdFxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG42NDMxOlxcdFxcdFxcdHNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXTtcXG42NDMyOlxcdFxcbjY0MzM6XFx0XFx0XFx0aWYgKHNrYl9jb29raWUgPT0gcmV0X3NrYl9jb29raWUpIHtcXG42NDM0OlxcdFxcdFxcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZkYXRhMi1cXHUwMDNlcGVuZGluZyk7XFxuNjQzNTpcXHRcXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuNjQzNjpcXHRcXHRcXHRcXHRicmVhaztcXG42NDM3OlxcdFxcdFxcdH1cXG42NDM4OlxcdFxcdH1cXG42NDM5OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NDQwOlxcdFxcbjY0NDE6XFx0XFx0Lyogbm90IGZvdW5kICovXFxuNjQ0MjpcXHRcXHRpZiAoIWZvdW5kKVxcbjY0NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjQ0NDpcXHRcXG42NDQ1OlxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG42NDQ2OlxcdFxcdGZyZXEgPSAodWludHB0cl90KXR4aS1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXTtcXG42NDQ3OlxcdFxcbjY0NDg6XFx0XFx0aWYgKCFub19tb25pdG9yKVxcbjY0NDk6XFx0XFx0XFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi1cXHUwMDNlaHcsIHNrYiwgZnJlcSk7XFxuNjQ1MDpcXHRcXG42NDUxOlxcdFxcdC8qIFR4IGluZm8gcmVjZWl2ZWQgYmVjYXVzZSB0aGUgZnJhbWUgd2FzIGJyb2FkY2FzdGVkIG9uIHVzZXIgc3BhY2UsXFxuNjQ1MjpcXHRcXHQgc28gd2UgZ2V0IGFsbCB0aGUgbmVjZXNzYXJ5IGluZm86IHR4IGF0dGVtcHRzIGFuZCBza2IgY29udHJvbCBidWZmICovXFxuNjQ1MzpcXHRcXG42NDU0OlxcdFxcdHR4X2F0dGVtcHRzID0gKHN0cnVjdCBod3NpbV90eF9yYXRlICopbmxhX2RhdGEoXFxuNjQ1NTpcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XFxuNjQ1NjpcXHRcXG42NDU3OlxcdFxcdC8qIG5vdyBzZW5kIGJhY2sgVFggc3RhdHVzICovXFxuNjQ1ODpcXHRcXHRpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhpKTtcXG42NDU5OlxcdFxcbjY0NjA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykge1xcbjY0NjE6XFx0XFx0XFx0dHhpLVxcdTAwM2VzdGF0dXMucmF0ZXNbaV0uaWR4ID0gdHhfYXR0ZW1wdHNbaV0uaWR4O1xcbjY0NjI6XFx0XFx0XFx0dHhpLVxcdTAwM2VzdGF0dXMucmF0ZXNbaV0uY291bnQgPSB0eF9hdHRlbXB0c1tpXS5jb3VudDtcXG42NDYzOlxcdFxcdH1cXG42NDY0OlxcdFxcbjY0NjU6XFx0XFx0dHhpLVxcdTAwM2VzdGF0dXMuYWNrX3NpZ25hbCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfU0lHTkFMXSk7XFxuNjQ2NjpcXHRcXG42NDY3OlxcdFxcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG42NDY4OlxcdFxcdGkgPSBtYWM4MDIxMV9od3NpbV9nZXRfbGlua19pZCh0eGktXFx1MDAzZWNvbnRyb2wudmlmLCBoZHIpO1xcbjY0Njk6XFx0XFx0aWYgKGkgXFx1MDAzZT0gMCkge1xcbjY0NzA6XFx0XFx0XFx0dHhpLVxcdTAwM2VzdGF0dXMubGlua192YWxpZCA9IDE7XFxuNjQ3MTpcXHRcXHRcXHR0eGktXFx1MDAzZXN0YXR1cy5saW5rX2lkID0gaTtcXG42NDcyOlxcdFxcdH1cXG42NDczOlxcdFxcbjY0NzQ6XFx0XFx0aWYgKCEoaHdzaW1fZmxhZ3MgXFx1MDAyNiBIV1NJTV9UWF9DVExfTk9fQUNLKSBcXHUwMDI2XFx1MDAyNlxcbjY0NzU6XFx0XFx0ICAgKGh3c2ltX2ZsYWdzIFxcdTAwMjYgSFdTSU1fVFhfU1RBVF9BQ0spKSB7XFxuNjQ3NjpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gMTYpXFxuNjQ3NzpcXHRcXHRcXHRcXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhmcmVxLCBoZHItXFx1MDAzZWFkZHIyKTtcXG42NDc4OlxcdFxcdFxcdHR4aS1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLO1xcbjY0Nzk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODozMC42NDU5NDYxNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzc3MjU4NDU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqRXhhbWluaW5nIHRoZSBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBleGFtaW5lIHRoZSBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgMTcyMCB0aHJvdWdoIDE3NjAuIEkgaW1tZWRpYXRlbHkga25vdyB0aGUgY29udGV4dCBoZXJlOyB0aGlzIGxpa2VseSBkZWFscyB3aXRoIHRoZSBuZXR3b3JrIGxheWVyIGludGVyYWN0aW9uIGluIHRoZSBgbWFjODAyMTFfaHdzaW1gIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSB0cmFuc21pc3Npb24gc2lkZSBvZiB0aGluZ3MgZ2l2ZW4gdGhlIFwidHhcIiBpbiB0aGUgZnVuY3Rpb24gbmFtZS4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIG5ldHdvcmsgZnJhbWVzIGFyZSBwcm9jZXNzZWQsIGZvcm1hdHRlZCwgYW5kIHVsdGltYXRlbHkgaGFuZGVkIG9mZiAob3Igc2ltdWxhdGVkIGFzIGhhbmRlZCBvZmYpIHRvIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgdHJhbnNtaXNzaW9uIOKAkyBvciwgaW4gdGhpcyBzaW11bGF0ZWQgY2FzZSwgaGFuZGxlZCB3aXRoaW4gdGhlIGh3c2ltIGVudmlyb25tZW50LiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgdG8ga25vdyBleGFjdGx5IGhvdyB0aGUgZnJhbWUgY2hhcmFjdGVyaXN0aWNzIGFyZSBiZWluZyBwcmVzZW50ZWQsIGFuZCB0aGVuIGhvdyB0aGUgc2ltdWxhdGlvbiBoYW5kbGVzIHRoYXQgdG8gcHJvY2VlZC4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBiaXRzIG9uIGZyYW1lIHNlcmlhbGl6YXRpb24gb3Igc2ltdWxhdGlvbiBvZiB0cmFuc21pc3Npb24gZXJyb3JzIGluIHRoaXMgc2VjdGlvbiwgc28gdGhhdCdzIHNvbWV0aGluZyBJJ2xsIGJlIHN1cmUgdG8gbG9vayBmb3IuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGhpbmdzIGxpa2UgdGhlIHJhdGUgY29udHJvbCBwYXJhbWV0ZXJzLCB0aGUgcXVldWVpbmcgZGlzY2lwbGluZSwgYW5kIGFueSBwb3RlbnRpYWwgaGFyZHdhcmUtc3BlY2lmaWMgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBiZSByZWxldmFudCBpbiB0aGlzIHNpbXVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODkxLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODozOC40MTg1MzQzNjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3MjA6XFx0XFx0fVxcbjE3MjE6XFx0XFxuMTcyMjpcXHRcXHRpZiAobmxhX3B1dChza2IsIEhXU0lNX0FUVFJfVFhfSU5GTyxcXG4xNzIzOlxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IGh3c2ltX3R4X3JhdGUpKklFRUU4MDIxMV9UWF9NQVhfUkFURVMsXFxuMTcyNDpcXHRcXHRcXHQgICAgdHhfYXR0ZW1wdHMpKVxcbjE3MjU6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTcyNjpcXHRcXG4xNzI3OlxcdFxcdGlmIChubGFfcHV0KHNrYiwgSFdTSU1fQVRUUl9UWF9JTkZPX0ZMQUdTLFxcbjE3Mjg6XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgaHdzaW1fdHhfcmF0ZV9mbGFnKSAqIElFRUU4MDIxMV9UWF9NQVhfUkFURVMsXFxuMTcyOTpcXHRcXHRcXHQgICAgdHhfYXR0ZW1wdHNfZmxhZ3MpKVxcbjE3MzA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTczMTpcXHRcXG4xNzMyOlxcdFxcdC8qIFdlIGNyZWF0ZSBhIGNvb2tpZSB0byBpZGVudGlmeSB0aGlzIHNrYiAqL1xcbjE3MzM6XFx0XFx0Y29va2llID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmRhdGEtXFx1MDAzZXBlbmRpbmdfY29va2llKTtcXG4xNzM0OlxcdFxcdGluZm8tXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF0gPSAodm9pZCAqKWNvb2tpZTtcXG4xNzM1OlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEhXU0lNX0FUVFJfQ09PS0lFLCBjb29raWUsIEhXU0lNX0FUVFJfUEFEKSlcXG4xNzM2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE3Mzc6XFx0XFxuMTczODpcXHRcXHQvKiB0cmFjayB0aGUgZnJlcXVlbmN5ICovXFxuMTczOTpcXHRcXHRpbmZvLVxcdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdID0gKHZvaWQgKikodWludHB0cl90KWNoYW5uZWwtXFx1MDAzZWNlbnRlcl9mcmVxO1xcbjE3NDA6XFx0XFxuMTc0MTpcXHRcXHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcXG4xNzQyOlxcdFxcbjE3NDM6XFx0XFx0aWYgKGh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XFxuMTc0NDpcXHRcXHRcXHRpZiAoaHdzaW1fdHhfdmlydGlvKGRhdGEsIHNrYikpXFxuMTc0NTpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3R4c2tiO1xcbjE3NDY6XFx0XFx0fSBlbHNlIHtcXG4xNzQ3OlxcdFxcdFxcdGlmIChod3NpbV91bmljYXN0X25ldGdyb3VwKGRhdGEsIHNrYiwgZHN0X3BvcnRpZCkpXFxuMTc0ODpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3R4c2tiO1xcbjE3NDk6XFx0XFx0fVxcbjE3NTA6XFx0XFxuMTc1MTpcXHRcXHQvKiBFbnF1ZXVlIHRoZSBwYWNrZXQgKi9cXG4xNzUyOlxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZkYXRhLVxcdTAwM2VwZW5kaW5nLCBteV9za2IpO1xcbjE3NTM6XFx0XFx0ZGF0YS1cXHUwMDNldHhfcGt0cysrO1xcbjE3NTQ6XFx0XFx0ZGF0YS1cXHUwMDNldHhfYnl0ZXMgKz0gbXlfc2tiLVxcdTAwM2VsZW47XFxuMTc1NTpcXHRcXHRyZXR1cm47XFxuMTc1NjpcXHRcXG4xNzU3OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4xNzU4OlxcdFxcdG5sbXNnX2ZyZWUoc2tiKTtcXG4xNzU5OlxcdGVycl9mcmVlX3R4c2tiOlxcbjE3NjA6XFx0XFx0cHJfZGVidWcoXFxcIm1hYzgwMjExX2h3c2ltOiBlcnJvciBvY2N1cnJlZCBpbiAlc1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbjE3NjE6XFx0XFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoaHcsIG15X3NrYik7XFxuMTc2MjpcXHRcXHRkYXRhLVxcdTAwM2V0eF9mYWlsZWQrKztcXG4xNzYzOlxcdH1cXG4xNzY0OlxcdFxcbjE3NjU6XFx0c3RhdGljIGJvb2wgaHdzaW1fY2hhbnNfY29tcGF0KHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYzEsXFxuMTc2NjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjMilcXG4xNzY3OlxcdHtcXG4xNzY4OlxcdFxcdGlmICghYzEgfHwgIWMyKVxcbjE3Njk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODozOC40MTkzNDU1NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIzNTY3ODQwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMgaW4gdGhlIG1hYzgwMjExX2h3c2ltIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgYW5kIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBmdW5jdGlvbnMuIEl0IGFwcGVhcnMgdGhlIGZsb3cgaW52b2x2ZXMgYSB1c2VyLXNwYWNlIHByb2Nlc3Mgc2VuZGluZyBhIGZyYW1lIGJhY2sgdGhyb3VnaCBHZW5lcmljIE5ldGxpbmsgdXNpbmcgYEhXU0lNX0NNRF9GUkFNRWAuIElmIGBIV1NJTV9BVFRSX0NPT0tJRWAgYW5kIGBIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJgIGFyZSBwcmVzZW50LCB0aGUgY29kZSByZXRyaWV2ZXMgdGhlIG9yaWdpbmFsIHNvY2tldCBidWZmZXIgKGBza2JgKSBmcm9tIHRoZSB0cmFuc21pdHRlcidzIFwicGVuZGluZ1wiIHF1ZXVlLiBUaGlzIGNhdWdodCBteSBhdHRlbnRpb246IGl0IGZpbmRzIHRoZSBvcmlnaW5hbCBgc2tiYCwgbW9kaWZpZXMgaXQgKmluIHBsYWNlKiB1c2luZyBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfdHJpbWAsIGFuZCBgc2tiX3B1dF9kYXRhYCwgYnV0LCBpbXBvcnRhbnRseSwgdGhlIG1vZGlmaWVkIGBza2JgICpyZW1haW5zKiBpbiB0aGUgcGVuZGluZyBxdWV1ZS4gVGhlbiwgbGF0ZXIsIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBoYW5kbGVzIGBIV1NJTV9DTURfVFhfSU5GT19GUkFNRWAsIGRlcXVldWVzICp0aGF0IHNhbWUqIGBza2JgIGZyb20gdGhlIFwicGVuZGluZ1wiIHF1ZXVlLCBhbmQgcHJvY2Vzc2VzIGl0LiBUaGlzIHJhaXNlcyBhIHJlZCBmbGFnIGluIHRlcm1zIG9mIHBvdGVudGlhbCBkb3VibGUgZnJlZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaWYgdGhlIG1vZGlmaWNhdGlvbiBpcyBkb25lIGluIGEgd2F5IHRoYXQgaXMgbm90IHN5bmNocm9uaXplZCwgb3IgcHJvcGVybHkgYWNjb3VudGVkIGZvciBsYXRlciBvbi5cblxuRnVydGhlcm1vcmUsIGluIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgSSBzZWUgdGhlIHVzZSBvZiBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCB0byBvcHRpb25hbGx5IHNraXAgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgLCBhIHR5cGljYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBBbHNvIEkgbm90aWNlIHRoZSB1c2Ugb2YgYGZyZXEgPSAodWludHB0cl90KXR4aS1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdYCBpbnN0ZWFkIG9mIGBkYXRhMi1cdTAwM2VjaGFubmVsYCB3aGljaCBtYXkgbGVhZCB0byBpbmNvbnNpc3RlbmNpZXMgb3IgYXNzdW1wdGlvbnMuXG5cbkdpdmVuIHRoYXQgYG1hYzgwMjExX2h3c2ltYCBpcyBhIHB1cmUgc29mdHdhcmUgc2ltdWxhdGVkIDgwMi4xMSBkcml2ZXIsIGNvbW11bmljYXRpbmcgdmlhIEdlbmVyaWMgTmV0bGluaywgYW5kIGNvbnNpZGVyaW5nIHRoYXQgc3l6a2FsbGVyIGFjdGl2ZWx5IHRhcmdldHMgbmw4MDIxMSBhbmQgaHdzaW0gbmV0bGluayBpbnRlcmZhY2VzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlc2UgY29kZSBwYXRocyBhcmUgaW5kZWVkIHJlYWNoYWJsZSB3aXRoaW4gUUVNVSBvciBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBncmVhdCBkZWFsLlxuXG5UbyBleHBhbmQgdGhlIHNjb3BlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEknbGwgbmVlZCB0byBsb29rIGF0IGBuZXQvbWFjODAyMTFgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbGAsIHNwZWNpZmljYWxseSB0aGUgYE1BQzgwMjExX0hXU0lNYCwgYE1BQzgwMjExYCwgYENGRzgwMjExYCwgYE5FVGAsIGFuZCBgSU5FVGAgY29uZmlnIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gRnVydGhlcm1vcmUsIEknbGwgYGdyZXBgIGZvciBgQ09ORklHX2AgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYCBhbmQgb3RoZXIgZmlsZXMgd2l0aGluIHRoZSBgdmlydHVhbGAgZGlyZWN0b3J5IHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBlc3BlY2lhbGx5IGhvdyBgc2tiYCdzIHN0YXRlIGlzIGJlaW5nIG1hbmlwdWxhdGVkIGFjcm9zcyBkaWZmZXJlbnQgTmV0bGluayBjb21tYW5kcywgdG8gZ2V0IGEgY2xlYXIgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTA3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6MDAuNzc2MTMxMjk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQzMDc1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjE6b2JqLSQoQ09ORklHX01BQzgwMjExX0hXU0lNKVxcdCs9IG1hYzgwMjExX2h3c2ltLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlLTItbWFjODAyMTFfaHdzaW0tb2Jqc1xcdFxcdCs9IG1hYzgwMjExX2h3c2ltX21haW4ub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvTWFrZWZpbGU9Mz1tYWM4MDIxMV9od3NpbS1vYmpzXFx0XFx0Kz0gbWFjODAyMTFfaHdzaW1fbmFuLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WSVJUX1dJRkkpXFx0Kz0gdmlydF93aWZpLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTg2NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHdzaW1fZ2VubF9wb2xpY3lbSFdTSU1fQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTkwMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo5MDE6I2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTkwMi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTIzNDU9c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMjM2NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoyMzY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTIzNjYtc3RhdGljIHZvaWRcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTI5OTc9bWFjODAyMTFfaHdzaW1fY2FuX25lZ190dGxtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzAxMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozMDE0OiNpZmRlZiBDT05GSUdfTkw4MDIxMV9URVNUTU9ERVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTMwMTUtLypcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQyNzc9c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9zZXRfcmFkYXJfYmFja2dyb3VuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQyOTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDI5NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00Mjk2LSNkZWZpbmUgSFdTSU1fREVCVUdGU19PUFNcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00NTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3NiYW5kX2lmdHlwZV9kYXRhIHNiYW5kX2NhcGFfMmdoeltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDc1NC1cXHR9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQ3NTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDc1Ni1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00Nzk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3NiYW5kX2lmdHlwZV9kYXRhIHNiYW5kX2NhcGFfNWdoeltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTA2NC1cXHR9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjUwNjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTA2Ni1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3NiYW5kX2lmdHlwZV9kYXRhIHNiYW5kX2NhcGFfNmdoeltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTQxOS1cXHR9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjU0MjA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTQyMS1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01NjExPXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3NiYW5kX2NhcGFiKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTYyNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjI4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2MjktI2RlZmluZSBIV1NJTV9NRVNIX0JJVCBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTczMjc9c3RhdGljIHZvaWQgaHdzaW1fZXhpdF9uZXRsaW5rKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MzM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjczMzU6I2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTczMzYtc3RhdGljIHZvaWQgaHdzaW1fdmlydGlvX3R4X2RvbmUoc3RydWN0IHZpcnRxdWV1ZSAqdnEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI5OjAxLjM4MDQ0NDc1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjAzNjAxNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1vZGlmaWVkIG1hYzgwMjExX2h3c2ltIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0YXNrZWQgd2l0aCBldmFsdWF0aW5nIHNvbWUgY2hhbmdlcyB0byB0aGUgYG1hYzgwMjExX2h3c2ltYCBkcml2ZXIuIE15IGluaXRpYWwgc3RlcCBpcyB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSd2ZSBnb3QgYSBsaXN0OiBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubGAsIGBtYWM4MDIxMV9od3NpbV90eGAsIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgYW5kIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBhY2Nlc3NpYmxlLCBvciBpZiBzdGF0aWMsIHdoYXQgdGhlaXIgc3ltYm9sIHZpc2liaWxpdHkgaXMgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byBjaGVjayBpZiBhbnkgb2YgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgYXMgc3ltYm9scyBvciBjYWxsZWQgaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdC5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCAqc3BlY2lmaWNhbGx5KiBjaGFuZ2VkIGluIGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zLiBJJ20gc2VlaW5nIHNpZ25pZmljYW50IGFsdGVyYXRpb25zIHRvIGhvdyBjbG9uZWQgZnJhbWVzIGFyZSBoYW5kbGVkIChgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYCksIGluY2x1ZGluZyBtYW5pcHVsYXRpb24gb2YgdGhlIHBlbmRpbmcgcXVldWUgYW5kIHRoZSB1c2Ugb2YgYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX3RyaW1gLCBhbmQgYHNrYl9wdXRfZGF0YWAuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgaW5kaWNhdGVzIGNoYW5nZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgaGFuZGxpbmcgZHVyaW5nIGZyYW1lIGNsb25pbmcuIFRoZW4sIHRoZXJlJ3MgYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgLCB3aGljaCBub3cgZGVhbHMgd2l0aCBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCBhbmQga2VlcHMgdHJhY2sgb2YgdGhlIGNlbnRlciBmcmVxdWVuY3kuIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAgaXMgc3RvcmluZyBjaGFubmVsIGZyZXF1ZW5jeSBkYXRhIGFzIHdlbGwsIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGFuZCBgbWFjODAyMTFfaHdzaW1fdHhgIGhhdmUgc2lnbmF0dXJlIGFuZCB1c2FnZSB1cGRhdGVzLiBUaGlzIHN1Z2dlc3RzIGVuaGFuY2VtZW50cyBvciBtb2RpZmljYXRpb25zIHRvIG1vbml0b3IgY2FwYWJpbGl0aWVzLCBsaWtlbHkgdGllZCB0byB0aGUgbmV0d29yayBwcm90b2NvbCdzIGxvd2VyIGxldmVscy5cblxuTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlLiBUaGUgZGVwZW5kZW5jaWVzIHNlZW0gdG8gYmUgYE1BQzgwMjExX0hXU0lNYCwgYE1BQzgwMjExYCwgYW5kIGBDRkc4MDIxMWAuIFRoYXQncyB3aGF0IEknZCBleHBlY3Q7IGl0IG1ha2VzIHNlbnNlIHRoYXQgdGhlIHZpcnR1YWwgaGFyZHdhcmUgc2ltdWxhdGlvbiwgdGhlIG1hYzgwMjExIHN0YWNrLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGFyZSBhbGwgcmVxdWlyZWQuXG5cbkZpbmFsbHksIGxldCdzIGNvbmZpcm0gdGhlIG92ZXJhbGwgY3JpdGVyaWEgZm9yIHRoZSBhc3Nlc3NtZW50IGFyZSBtZXQuIEZpcnN0LCB0aGUgZHJpdmVyIGl0c2VsZiBtdXN0IGJlIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2l0aG91dCByZXF1aXJpbmcgYW55IHBoeXNpY2FsIGhhcmR3YXJlOyBpdCBzb3VuZHMgbGlrZSB0aGF0J3MgdGhlIGNhc2UuIFNlY29uZCwgdGhlIG1vZGlmaWVkIGxvZ2ljIG11c3QgYmUgc3Vic3RhbnRpYWwsIHdoaWNoIGl0IGFwcGVhcnMgdG8gYmU6IGZyYW1lIGNsb25pbmcsIHBlbmRpbmcgYHNrYmAgcmVwbGFjZW1lbnQsIG1vbml0b3IgY29udHJvbCBhcmUgYWxsIG1vZGlmaWVkLiBUaGlyZCwgd2UgYXJlIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgSSBlbnVtZXJhdGVkIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AuIEZvdXJ0aCwgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gQWxsIGNyaXRlcmlhIGFyZSBtZXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzAyOCwiT3V0cHV0VG9rZW5zIjozMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6MjYuOTg0MDQ4Nzk2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MTI0MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sXCIsXG4gICAgXCJod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX3R4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTFfaHdzaW0sIGEgc29mdHdhcmUtZW11bGF0ZWQgODAyLjExIHJhZGlvIHRlc3RpbmcgdG9vbCBmdWxseSBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBnZW5lcmljIG5ldGxpbmsuIFRoZSBjaGFuZ2VzIGludHJvZHVjZSBoYW5kbGluZyBmb3IgSFdTSU1fQVRUUl9OT19NT05JVE9SLCBtb2RpZnkgY2VudGVyIGZyZXF1ZW5jeSB0cmFja2luZyBhY3Jvc3MgVFggbW9uaXRvciByZXBvcnRpbmcsIGFuZCBhZGQgbG9naWMgaW4gaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sIHRvIHNlYXJjaCB0aGUgcGVuZGluZyB0cmFuc21pc3Npb24gcXVldWUgYnkgY29va2llIGFuZCBtb2RpZnkgdGhlIG9yaWdpbmFsIHNrYiBkYXRhICh2aWEgcHNrYl9leHBhbmRfaGVhZCwgc2tiX3RyaW0sIGFuZCBza2JfcHV0X2RhdGEpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgYnVmZmVyIG1hbmlwdWxhdGlvbiBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzIGluIHRoZSBzaW11bGF0ZWQgcmFkaW8gVFgvUlggcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubFwiLFxuICAgIFwiaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV90eFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1hYzgwMjExX2h3c2ltLCBhIHNvZnR3YXJlLWVtdWxhdGVkIDgwMi4xMSByYWRpbyB0ZXN0aW5nIHRvb2wgZnVsbHkgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgZ2VuZXJpYyBuZXRsaW5rLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgaGFuZGxpbmcgZm9yIEhXU0lNX0FUVFJfTk9fTU9OSVRPUiwgbW9kaWZ5IGNlbnRlciBmcmVxdWVuY3kgdHJhY2tpbmcgYWNyb3NzIFRYIG1vbml0b3IgcmVwb3J0aW5nLCBhbmQgYWRkIGxvZ2ljIGluIGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCB0byBzZWFyY2ggdGhlIHBlbmRpbmcgdHJhbnNtaXNzaW9uIHF1ZXVlIGJ5IGNvb2tpZSBhbmQgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IgZGF0YSAodmlhIHBza2JfZXhwYW5kX2hlYWQsIHNrYl90cmltLCBhbmQgc2tiX3B1dF9kYXRhKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcyBpbiB0aGUgc2ltdWxhdGVkIHJhZGlvIFRYL1JYIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyOToyNy4xMDgxODM1MTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzI1ODkyMjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6MjcuMTA4OTI0Mjk0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM3MjUxNDYyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtYWM4MDIxMV9od3NpbWAgdG8gYWRkIHRoZSBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCBuZXRsaW5rIGZsYWcgYXR0cmlidXRlIGZvciBza2lwcGluZyBtb25pdG9yIHJlcG9ydHMsIHByZXNlcnZlcyB0aGUgdHJhbnNtaXNzaW9uIGNoYW5uZWwgZnJlcXVlbmN5IGluIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYW5kIHVwZGF0ZXMgdGhlIHBlbmRpbmcgdHJhbnNtaXR0ZWQgc2tiIGluIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIHdoZW4gbWF0Y2hpbmcgY29va2llIGFuZCB0cmFuc21pdHRlciBhdHRyaWJ1dGVzIGFyZSBwcm92aWRlZC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIChgZnJlcWAsIGBub19tb25pdG9yYCwgYGNvb2tpZWAsIGV0Yy4pIGFuZCBzdHJ1Y3R1cmUgbWVtYmVycyAoYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBgaGRyLVxcdTAwM2VydF9jaGFubmVsYCkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiB0aGlzIHBhdGNoIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzLiBTS0IgbW9kaWZpY2F0aW9ucyB1c2UgYHNrYl9wdXRfZGF0YWAgd2l0aCB2ZXJpZmllZCBwYXlsb2FkIGxlbmd0aHMgZnJvbSB2YWxpZGF0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmdzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHJlbGF0aW5nIHRvIFNLQiBtYW5pcHVsYXRpb24sIHF1ZXVlIGxvY2tpbmcsIG9yIHJlZmVyZW5jZSBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWI3NWFmNTEzYWUxYWY4Nzc5MmEyMGI1YWJhNDE0MTYzNTNmOTk5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE0OjI2OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oXG5pbmRleCBhMDIyY2Q1YzBmMWM3Li4xZDJmZDA2YzU4NWE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmhcbkBAIC0zLDcgKzMsNyBAQFxuICAqIG1hYzgwMjExX2h3c2ltIC0gc29mdHdhcmUgc2ltdWxhdG9yIG9mIDgwMi4xMSByYWRpbyhzKSBmb3IgbWFjODAyMTFcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEpvdW5pIE1hbGluZW4gXHUwMDNjakB3MS5maVx1MDAzZVxuICAqIENvcHlyaWdodCAoYykgMjAxMSwgSmF2aWVyIExvcGV6IFx1MDAzY2psb3BleEBnbWFpbC5jb21cdTAwM2Vcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxuKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMi0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX0hcbkBAIC0xNjIsNiArMTYyLDggQEAgZW51bSBod3NpbV9jb21tYW5kcyB7XG4gICpcdGVhY2ggcmFkaW8gaW5zdGVhZCBvZiBmb3IgdGhlIHdpcGh5LlxuICAqIEBIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRTogc3VwcG9ydCBOQU4gRGV2aWNlIHZpcnR1YWwgaW50ZXJmYWNlIChmbGFnKVxuICAqIEBIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUjogYmFja2dyb3VuZCByYWRhci9DQUMgc3VwcG9ydCAoZmxhZylcbisgKiBASFdTSU1fQVRUUl9OT19NT05JVE9SOiBza2lwIG1vbml0b3IgcmVwb3J0IGZvciB0aGlzIFRYIHN0YXR1cywgZS5nLiBpbiBjYXNlXG4rICpcdHRoZSBmcmFtZSB3YXMgbmV2ZXIgcmVwb3J0ZWQgdG8gYW55IHJlY2VpdmVyIChmbGFnKVxuICAqIEBfX0hXU0lNX0FUVFJfTUFYOiBlbnVtIGxpbWl0XG4gICovXG4gZW51bSBod3NpbV9hdHRycyB7XG5AQCAtMTk3LDYgKzE5OSw3IEBAIGVudW0gaHdzaW1fYXR0cnMge1xuIFx0SFdTSU1fQVRUUl9NVUxUSV9SQURJTyxcbiBcdEhXU0lNX0FUVFJfU1VQUE9SVF9OQU5fREVWSUNFLFxuIFx0SFdTSU1fQVRUUl9TVVBQT1JUX0JBQ0tHUk9VTkRfUkFEQVIsXG4rXHRIV1NJTV9BVFRSX05PX01PTklUT1IsXG4gXHRfX0hXU0lNX0FUVFJfTUFYLFxuIH07XG4gI2RlZmluZSBIV1NJTV9BVFRSX01BWCAoX19IV1NJTV9BVFRSX01BWCAtIDEpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuaW5kZXggMDJiNmQ4MWNjY2QxMS4uZmNhNGJmODIzZWY0ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuQEAgLTg5NSw2ICs4OTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHdzaW1fZ2VubF9wb2xpY3lbSFdTSU1fQVRUUl9NQVggKyAxXSA9IHtcbiBcdFtIV1NJTV9BVFRSX01VTFRJX1JBRElPXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIFx0W0hXU0lNX0FUVFJfU1VQUE9SVF9OQU5fREVWSUNFXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIFx0W0hXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuK1x0W0hXU0lNX0FUVFJfTk9fTU9OSVRPUl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiB9O1xuIFxuICNpZiBJU19SRUFDSEFCTEUoQ09ORklHX1ZJUlRJTylcbkBAIC0xMzM3LDcgKzEzMzgsNyBAQCBtYWM4MDIxMV9od3NpbV9nZXRfdHhfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcbiBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnR4X3NrYixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbilcbitcdFx0XHRcdCAgICAgIHUzMiBmcmVxKVxuIHtcbiBcdHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhID0gaHctXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG5AQCAtMTM2OSw3ICsxMzcwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGhkci1cdTAwM2VydF90c2Z0ID0gX19tYWM4MDIxMV9od3NpbV9nZXRfdHNmKGRhdGEpO1xuIFx0aGRyLVx1MDAzZXJ0X2ZsYWdzID0gMDtcbiBcdGhkci1cdTAwM2VydF9yYXRlID0gYml0cmF0ZSAvIDU7XG4tXHRoZHItXHUwMDNlcnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tXHUwMDNlY2VudGVyX2ZyZXEpO1xuK1x0aGRyLVx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihmcmVxKTtcbiBcdGZsYWdzID0gSUVFRTgwMjExX0NIQU5fMkdIWjtcbiBcdGlmICh0eHJhdGUgXHUwMDI2XHUwMDI2IHR4cmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1JBVEVfRVJQX0cpXG4gXHRcdGZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE07XG5AQCAtMTM4Nyw4ICsxMzg4LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiB9XG4gXG4gXG4tc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLFxuLVx0XHRcdFx0ICAgICAgIGNvbnN0IHU4ICphZGRyKVxuK3N0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHUzMiBmcmVxLCBjb25zdCB1OCAqYWRkcilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IGh3c2ltX3JhZGlvdGFwX2Fja19oZHIgKmhkcjtcbkBAIC0xNDEwLDcgKzE0MTAsNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sXG4gXHRcdFx0XHRcdCAgKDEgXHUwMDNjXHUwMDNjIElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSk7XG4gXHRoZHItXHUwMDNlcnRfZmxhZ3MgPSAwO1xuIFx0aGRyLVx1MDAzZXBhZCA9IDA7XG4tXHRoZHItXHUwMDNlcnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tXHUwMDNlY2VudGVyX2ZyZXEpO1xuK1x0aGRyLVx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihmcmVxKTtcbiBcdGZsYWdzID0gSUVFRTgwMjExX0NIQU5fMkdIWjtcbiBcdGhkci1cdTAwM2VydF9jaGJpdG1hc2sgPSBjcHVfdG9fbGUxNihmbGFncyk7XG4gXG5AQCAtMTczNSw2ICsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBIV1NJTV9BVFRSX0NPT0tJRSwgY29va2llLCBIV1NJTV9BVFRSX1BBRCkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuK1x0LyogdHJhY2sgdGhlIGZyZXF1ZW5jeSAqL1xuK1x0aW5mby1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdID0gKHZvaWQgKikodWludHB0cl90KWNoYW5uZWwtXHUwMDNlY2VudGVyX2ZyZXE7XG4rXG4gXHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcbiBcbiBcdGlmIChod3NpbV92aXJ0aW9fZW5hYmxlZCkge1xuQEAgLTE5MTIsNyArMTkxNSw3IEBAIHN0YXRpYyBib29sIG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25vX25sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFxuIFx0bWFjODAyMTFfaHdzaW1fd3JpdGVfdHNmKGRhdGEsIHNrYiwgc2ltX3RzZik7XG4gXG4tXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGh3LCBza2IsIGNoYW4pO1xuK1x0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuLVx1MDAzZWNlbnRlcl9mcmVxKTtcbiBcbiBcdG1lbXNldChcdTAwMjZyeF9zdGF0dXMsIDAsIHNpemVvZihyeF9zdGF0dXMpKTtcbiBcdHJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfTUFDVElNRV9TVEFSVDtcbkBAIC0yMjc2LDcgKzIyNzksNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGFjayA9IG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25vX25sKGh3LCBza2IsIGNoYW5uZWwpO1xuIFxuIFx0aWYgKGFjayBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWxlbiBcdTAwM2U9IDE2KVxuLVx0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhjaGFubmVsLCBoZHItXHUwMDNlYWRkcjIpO1xuK1x0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhjaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxLCBoZHItXHUwMDNlYWRkcjIpO1xuIFxuIFx0aWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7XG4gXG5AQCAtNjM5MSw2ICs2Mzk0LDggQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbiBcdGludCBpO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcdGJvb2wgbm9fbW9uaXRvcjtcbitcdHUzMiBmcmVxO1xuIFxuIFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0gfHxcbiBcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSB8fFxuQEAgLTY0MDIsNiArNjQwNyw3IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRzcmMgPSAodm9pZCAqKW5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG4gXHRod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10pO1xuIFx0cmV0X3NrYl9jb29raWUgPSBubGFfZ2V0X3U2NChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSk7XG4rXHRub19tb25pdG9yID0gbmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7XG4gXG4gXHRkYXRhMiA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoc3JjKTtcbiBcdGlmICghZGF0YTIpXG5AQCAtNjQzNiw3ICs2NDQyLDExIEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRpZiAoIWZvdW5kKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXHUwMDNlaHcsIHNrYiwgZGF0YTItXHUwMDNlY2hhbm5lbCk7XG4rXHR0eGkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4rXHRmcmVxID0gKHVpbnRwdHJfdCl0eGktXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXTtcbitcbitcdGlmICghbm9fbW9uaXRvcilcbitcdFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi1cdTAwM2Vodywgc2tiLCBmcmVxKTtcbiBcbiBcdC8qIFR4IGluZm8gcmVjZWl2ZWQgYmVjYXVzZSB0aGUgZnJhbWUgd2FzIGJyb2FkY2FzdGVkIG9uIHVzZXIgc3BhY2UsXG4gXHQgc28gd2UgZ2V0IGFsbCB0aGUgbmVjZXNzYXJ5IGluZm86IHR4IGF0dGVtcHRzIGFuZCBza2IgY29udHJvbCBidWZmICovXG5AQCAtNjQ0NSw4ICs2NDU1LDYgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbiBcdFx0ICAgICAgIGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XG4gXG4gXHQvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqL1xuLVx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuLVxuIFx0aWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspIHtcbkBAIC02NDY2LDggKzY0NzQsNyBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0aWYgKCEoaHdzaW1fZmxhZ3MgXHUwMDI2IEhXU0lNX1RYX0NUTF9OT19BQ0spIFx1MDAyNlx1MDAyNlxuIFx0ICAgKGh3c2ltX2ZsYWdzIFx1MDAyNiBIV1NJTV9UWF9TVEFUX0FDSykpIHtcbiBcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSAxNilcbi1cdFx0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhkYXRhMi1cdTAwM2VjaGFubmVsLFxuLVx0XHRcdFx0XHRcdCAgIGhkci1cdTAwM2VhZGRyMik7XG4rXHRcdFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soZnJlcSwgaGRyLVx1MDAzZWFkZHIyKTtcbiBcdFx0dHhpLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSztcbiBcdH1cbiBcbkBAIC02NTM1LDYgKzY1NDIsNTEgQEAgc3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0LyogbG9vayBmb3IgdGhlIHNrYiBtYXRjaGluZyB0aGUgY29va2llIHBhc3NlZCBiYWNrIGZyb20gdXNlciAqL1xuK1x0aWYgKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSkge1xuK1x0XHR1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsICpmb3VuZCA9IE5VTEw7XG4rXHRcdHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICp0eGRhdGE7XG4rXHRcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpO1xuK1x0XHRjb25zdCB1OCAqdHJhbnNtaXR0ZXI7XG4rXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRcdHRyYW5zbWl0dGVyID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTtcbitcdFx0dHhkYXRhID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcih0cmFuc21pdHRlcik7XG4rXHRcdGlmICghdHhkYXRhIHx8IHR4ZGF0YS1cdTAwM2VuZXRncm91cCAhPSBkYXRhMi1cdTAwM2VuZXRncm91cClcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuK1x0XHRza2JfcXVldWVfd2FsayhcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZywgb3JpZ19za2IpIHtcbitcdFx0XHR1aW50cHRyX3Qgc2tiX2Nvb2tpZTtcbitcbitcdFx0XHR0eGkgPSBJRUVFODAyMTFfU0tCX0NCKG9yaWdfc2tiKTtcbitcdFx0XHRza2JfY29va2llID0gKHVpbnRwdHJfdCl0eGktXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXTtcbitcbitcdFx0XHRpZiAoc2tiX2Nvb2tpZSA9PSBjb29raWUpIHtcbitcdFx0XHRcdGZvdW5kID0gb3JpZ19za2I7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0LyogdGhhdCdzIHdlaXJkICovXG4rXHRcdGlmICghZm91bmQpIHtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoZnJhbWVfZGF0YV9sZW4gXHUwMDNlIGZvdW5kLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoZm91bmQsIDAsIGZyYW1lX2RhdGFfbGVuIC0gZm91bmQtXHUwMDNlbGVuLFxuK1x0XHRcdFx0ICAgICBHRlBfQVRPTUlDKSkge1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdHNrYl90cmltKGZvdW5kLCAwKTtcbitcdFx0c2tiX3B1dF9kYXRhKGZvdW5kLCBmcmFtZV9kYXRhLCBmcmFtZV9kYXRhX2xlbik7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuK1x0fVxuK1xuIFx0LyogY2hlY2sgaWYgcmFkaW8gaXMgY29uZmlndXJlZCBwcm9wZXJseSAqL1xuIFxuIFx0aWYgKChkYXRhMi1cdTAwM2VpZGxlIFx1MDAyNlx1MDAyNiAhZGF0YTItXHUwMDNldG1wX2NoYW4pIHx8ICFkYXRhMi1cdTAwM2VzdGFydGVkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6MjcuMTA4OTI1OTg0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDc5ODExOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbWFjODAyMTFfaHdzaW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBLTVNBTiBpcyBhIGNvbmNlcm4gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIHRvdWNoZWQgZmlsZXM6IGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmhgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNgLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBtYWM4MDIxMV9od3NpbSB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggaXMgdXN1YWxseSBhIGdvb2QgdGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by5cblxuRmlyc3QsIGBtYWM4MDIxMV9od3NpbS5oYCBhZGRzIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIHRvIHRoZSBgaHdzaW1fYXR0cnNgIGVudW0uIEEgZmxhZy4uLmludGVyZXN0aW5nLiAgVGhlbiwgYG1hYzgwMjExX2h3c2ltX21haW4uY2AgaXMgd2hlcmUgdGhpbmdzIGdldCBtb3JlIGludGVyZXN0aW5nLiAgV2UncmUgc2VlaW5nIGBbSFdTSU1fQVRUUl9OT19NT05JVE9SXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9YCBhZGRlZCB0byB0aGUgYGh3c2ltX2dlbmxfcG9saWN5YC4gU28sIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIG5ldyBhdHRyaWJ1dGUgZXhwb3NlZCB2aWEgTmV0bGluay5cblxuVGhlIGNvZGUgbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tgIHRvIHVzZSBhIGB1MzIgZnJlcWAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5gLiBUaGF0J3MgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gaG93IGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkLiAgV2UncmUgYWxzbyBzZWVpbmcgdGhlIGBjaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxYCBiZWluZyBzYXZlZCBpbnRvIGBpbmZvLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV1gIGluIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAgYW5kIHBhc3NlZCBkaXJlY3RseSBpbiBvdGhlciBmdW5jdGlvbnMuXG5cbk5vdywgdGhpbmdzIGdldCBhIGJpdCBtb3JlIGludm9sdmVkLiBJbiBgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubGAsIHRoZXJlJ3MgYSBjaGVjayBmb3IgYG5vX21vbml0b3JgIGJhc2VkIG9uIHRoZSBuZXcgZmxhZy4gSWYgbm90IHNldCwgaXQgY2FsbHMgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tgIHdpdGggdGhlIGZyZXF1ZW5jeS4gVGhhdCBtYWtlcyBzZW5zZSwgd2Ugd2FudCB0byBjb250cm9sIHRoZSBtb25pdG9yIGZ1bmN0aW9uLlxuXG5IZXJlJ3MgdGhlIGJpdCB0aGF0IHJlYWxseSByZXF1aXJlcyBjYXJlZnVsIGFuYWx5c2lzOiBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYC4gSXQgYXBwZWFycyB0byBiZSBoYW5kbGluZyBjbG9uZWQgU0tCcyB3aXRoaW4gYSBwZW5kaW5nIFRYIHF1ZXVlLiAgVGhlIGNvZGUgbG9va3MgZm9yIGFuIG9yaWdpbmFsIFNLQiBiYXNlZCBvbiBhIGNvb2tpZS4gSWYgZm91bmQsIGl0IGNoZWNrcyBpZiBgZnJhbWVfZGF0YV9sZW5gIGlzIGdyZWF0ZXIgdGhhbiBgZm91bmQtXHUwMDNlbGVuYCwgYW5kIGV4cGFuZHMgdGhlIGhlYWRlciBpZiBuZWNlc3NhcnkuIFRoZW4sIGl0IGNhbGxzIGBza2JfdHJpbShmb3VuZCwgMClgIGFuZCBzdWJzZXF1ZW50bHkgY29waWVzIGRhdGEgdXNpbmcgYHNrYl9wdXRfZGF0YShmb3VuZCwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgY29weS4gSXMgdGhpcyBjb3B5aW5nIGludG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGFsd2F5cyByYWlzZXMgbXkgaGFja2xlcywgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBgZnJhbWVfZGF0YWAgYW5kIGBmcmFtZV9kYXRhX2xlbmAgYXJlIGluaXRpYWxpemVkIHRvIGtub3cgaWYgd2UgY2FuIGhhdmUgYSBLTVNBTiBwcm9ibGVtIGhlcmUuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbnMgZm9yIHRob3NlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZXNlIGFyZSBzYWZlIHRvIHVzZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDI4LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6NDQuMTg4NzQwODAyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzE1NzY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjM4Mj1zdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjQ5MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2NDkxOnN0YXRpYyBpbnQgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02NDkyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBod3NpbV9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNjYtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNjc6XFx0XFx0LmRvaXQgPSBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE2OC1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzM0OD1zdGF0aWMgaW50IGh3c2ltX3ZpcnRpb19oYW5kbGVfY21kKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MzcyLVxcdGNhc2UgSFdTSU1fQ01EX0ZSQU1FOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjczNzM6XFx0XFx0aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHNrYiwgXFx1MDAyNmluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTczNzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI5OjQ0LjI3MTkwMzA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MTcyNjcxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIGFuZCBpdHMgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIGZ1bmN0aW9uIGFuZCBpdHMgc3Vycm91bmRpbmcgY29kZSBpbiB0aGUgaGFyZHdhcmUgc2ltdWxhdG9yLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBoZXJlIOKAkyBob3cgY2xvbmVkIGZyYW1lcyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgTmV0bGluayBwYXRoLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIGVudmlyb25tZW50LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCwgd2hhdCBkYXRhIGl0IHJlY2VpdmVzIGFzIGlucHV0LCBhbmQgaG93IHRoYXQgZGF0YSBpcyBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IHBhc3NlZCB1cCB0aGUgc3RhY2suXG5cbkknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVhbGluZyB3aXRoIHNoYXJlZCByZXNvdXJjZXMgb3Igc3RhdGUgcmVsYXRlZCB0byBzaW11bGF0ZWQgaGFyZHdhcmUuIEFyZSB0aGVyZSBhbnkgbG9ja3MgaW52b2x2ZWQsIGFuZCBpZiBzbywgd2hhdCdzIHRoZWlyIHNjb3BlIGFuZCBob3cgYXJlIHRoZXkgYWNxdWlyZWQgYW5kIHJlbGVhc2VkPyBJIGFsc28gZXhwZWN0IHRvIHNlZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBhbmQgSSdtIGtlZW4gdG8gc3BvdCBpZiBhbnkgY3VzdG9tIE5ldGxpbmsgYXR0cmlidXRlcyBvciBjb21tYW5kcyBhcmUgYmVpbmcgdXNlZCBmb3IgdGhpcyBzaW11bGF0ZWQgaGFyZHdhcmUuIEknbSBob3BpbmcgdG8gdW5jb3ZlciBhbnkgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjIsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyOTo0OC4xODkxNzMyMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0OTA6XFx0XFxuNjQ5MTpcXHRzdGF0aWMgaW50IGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXFxuNjQ5MjpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuNjQ5MzpcXHR7XFxuNjQ5NDpcXHRcXHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YTI7XFxuNjQ5NTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXM7XFxuNjQ5NjpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbjY0OTc6XFx0XFx0Y29uc3QgdTggKmRzdDtcXG42NDk4OlxcdFxcdGludCBmcmFtZV9kYXRhX2xlbjtcXG42NDk5OlxcdFxcdHZvaWQgKmZyYW1lX2RhdGE7XFxuNjUwMDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG42NTAxOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IE5VTEw7XFxuNjUwMjpcXHRcXG42NTAzOlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1JFQ0VJVkVSXSB8fFxcbjY1MDQ6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSB8fFxcbjY1MDU6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1JYX1JBVEVdIHx8XFxuNjUwNjpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfU0lHTkFMXSlcXG42NTA3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjY1MDg6XFx0XFxuNjUwOTpcXHRcXHRkc3QgPSAodm9pZCAqKW5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0pO1xcbjY1MTA6XFx0XFx0ZnJhbWVfZGF0YV9sZW4gPSBubGFfbGVuKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRlJBTUVdKTtcXG42NTExOlxcdFxcdGZyYW1lX2RhdGEgPSAodm9pZCAqKW5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRlJBTUVdKTtcXG42NTEyOlxcdFxcbjY1MTM6XFx0XFx0aWYgKGZyYW1lX2RhdGFfbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSB8fFxcbjY1MTQ6XFx0XFx0ICAgIGZyYW1lX2RhdGFfbGVuIFxcdTAwM2UgSUVFRTgwMjExX01BWF9EQVRBX0xFTilcXG42NTE1OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjY1MTY6XFx0XFxuNjUxNzpcXHRcXHQvKiBBbGxvY2F0ZSBuZXcgc2tiIGhlcmUgKi9cXG42NTE4OlxcdFxcdHNrYiA9IGFsbG9jX3NrYihmcmFtZV9kYXRhX2xlbiwgR0ZQX0tFUk5FTCk7XFxuNjUxOTpcXHRcXHRpZiAoc2tiID09IE5VTEwpXFxuNjUyMDpcXHRcXHRcXHRnb3RvIGVycjtcXG42NTIxOlxcdFxcbjY1MjI6XFx0XFx0LyogQ29weSB0aGUgZGF0YSAqL1xcbjY1MjM6XFx0XFx0c2tiX3B1dF9kYXRhKHNrYiwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pO1xcbjY1MjQ6XFx0XFxuNjUyNTpcXHRcXHRkYXRhMiA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoZHN0KTtcXG42NTI2OlxcdFxcdGlmICghZGF0YTIpXFxuNjUyNzpcXHRcXHRcXHRnb3RvIG91dDtcXG42NTI4OlxcdFxcbjY1Mjk6XFx0XFx0aWYgKGRhdGEyLVxcdTAwM2V1c2VfY2hhbmN0eCkge1xcbjY1MzA6XFx0XFx0XFx0aWYgKGRhdGEyLVxcdTAwM2V0bXBfY2hhbilcXG42NTMxOlxcdFxcdFxcdFxcdGNoYW5uZWwgPSBkYXRhMi1cXHUwMDNldG1wX2NoYW47XFxuNjUzMjpcXHRcXHR9IGVsc2Uge1xcbjY1MzM6XFx0XFx0XFx0Y2hhbm5lbCA9IGRhdGEyLVxcdTAwM2VjaGFubmVsO1xcbjY1MzQ6XFx0XFx0fVxcbjY1MzU6XFx0XFxuNjUzNjpcXHRcXHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XFxuNjUzNzpcXHRcXHRcXHRpZiAoaHdzaW1fbmV0X2dldF9uZXRncm91cChnZW5sX2luZm9fbmV0KGluZm8pKSAhPVxcbjY1Mzg6XFx0XFx0XFx0ICAgIGRhdGEyLVxcdTAwM2VuZXRncm91cClcXG42NTM5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjY1NDA6XFx0XFxuNjU0MTpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cXHUwMDNld21lZGl1bWQpXFxuNjU0MjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG42NTQzOlxcdFxcdH1cXG42NTQ0OlxcdFxcbjY1NDU6XFx0XFx0LyogbG9vayBmb3IgdGhlIHNrYiBtYXRjaGluZyB0aGUgY29va2llIHBhc3NlZCBiYWNrIGZyb20gdXNlciAqL1xcbjY1NDY6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcXHUwMDI2XFx1MDAyNlxcbjY1NDc6XFx0XFx0ICAgIGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pIHtcXG42NTQ4OlxcdFxcdFxcdHU2NCBjb29raWUgPSBubGFfZ2V0X3U2NChpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xcbjY1NDk6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xcbjY1NTA6XFx0XFx0XFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKnR4ZGF0YTtcXG42NTUxOlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpO1xcbjY1NTI6XFx0XFx0XFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xcbjY1NTM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG42NTU0OlxcdFxcbjY1NTU6XFx0XFx0XFx0dHJhbnNtaXR0ZXIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTtcXG42NTU2OlxcdFxcdFxcdHR4ZGF0YSA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIodHJhbnNtaXR0ZXIpO1xcbjY1NTc6XFx0XFx0XFx0aWYgKCF0eGRhdGEgfHwgdHhkYXRhLVxcdTAwM2VuZXRncm91cCAhPSBkYXRhMi1cXHUwMDNlbmV0Z3JvdXApXFxuNjU1ODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG42NTU5OlxcdFxcbjY1NjA6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnR4ZGF0YS1cXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XFxuNjU2MTpcXHRcXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2dHhkYXRhLVxcdTAwM2VwZW5kaW5nLCBvcmlnX3NrYikge1xcbjY1NjI6XFx0XFx0XFx0XFx0dWludHB0cl90IHNrYl9jb29raWU7XFxuNjU2MzpcXHRcXG42NTY0OlxcdFxcdFxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Iob3JpZ19za2IpO1xcbjY1NjU6XFx0XFx0XFx0XFx0c2tiX2Nvb2tpZSA9ICh1aW50cHRyX3QpdHhpLVxcdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzBdO1xcbjY1NjY6XFx0XFxuNjU2NzpcXHRcXHRcXHRcXHRpZiAoc2tiX2Nvb2tpZSA9PSBjb29raWUpIHtcXG42NTY4OlxcdFxcdFxcdFxcdFxcdGZvdW5kID0gb3JpZ19za2I7XFxuNjU2OTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG42NTcwOlxcdFxcdFxcdFxcdH1cXG42NTcxOlxcdFxcdFxcdH1cXG42NTcyOlxcdFxcbjY1NzM6XFx0XFx0XFx0LyogdGhhdCdzIHdlaXJkICovXFxuNjU3NDpcXHRcXHRcXHRpZiAoIWZvdW5kKSB7XFxuNjU3NTpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbjY1NzY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNjU3NzpcXHRcXHRcXHR9XFxuNjU3ODpcXHRcXG42NTc5OlxcdFxcdFxcdGlmIChmcmFtZV9kYXRhX2xlbiBcXHUwMDNlIGZvdW5kLVxcdTAwM2VsZW4gXFx1MDAyNlxcdTAwMjZcXG42NTgwOlxcdFxcdFxcdCAgICBwc2tiX2V4cGFuZF9oZWFkKGZvdW5kLCAwLCBmcmFtZV9kYXRhX2xlbiAtIGZvdW5kLVxcdTAwM2VsZW4sXFxuNjU4MTpcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9BVE9NSUMpKSB7XFxuNjU4MjpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbjY1ODM6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNjU4NDpcXHRcXHRcXHR9XFxuNjU4NTpcXHRcXHRcXHRza2JfdHJpbShmb3VuZCwgMCk7XFxuNjU4NjpcXHRcXHRcXHRza2JfcHV0X2RhdGEoZm91bmQsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTtcXG42NTg3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnR4ZGF0YS1cXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XFxuNjU4ODpcXHRcXHR9XFxuNjU4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6NDguMTg5Njg4ODRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ2Mjc4ODQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBMb3NzIGluIFNpbXVsYXRlZCA4MDIuMTEgVHJhbnNtaXNzaW9ucyoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIHNpbXVsYXRlZCA4MDIuMTEgZW52aXJvbm1lbnQgYWdhaW4uIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYXJvdW5kIHRyYW5zbWlzc2lvbi4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdmVyaWZ5aW5nIHRoZXJlIGFyZSBubyBkYXRhLWxvc3MgaXNzdWVzIGhhcHBlbmluZyBpbnNpZGUgdGhlIGtlcm5lbCBpdHNlbGYuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbiBwb2ludHMgYmV0d2VlbiB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBhbmQgdGhlIG1hYzgwMjExIHN0YWNrLiBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgIHNlZW1zIGxpa2UgYSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGZyYW1lcyBkZXN0aW5lZCBmb3IgdGhlIHNpbXVsYXRlZCBoYXJkd2FyZSwgc28gbGV0J3MgY2hlY2sgdGhhdC4gVGhlbiwgc2luY2UgdGhpcyBpcyBhbGwgaW50ZXJuYWwsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGluZm9ybWF0aW9uIG9uIHdoYXQgaGFwcGVuZWQgdG8gdGhlIGZyYW1lIGlzIHByb3Blcmx5IHByb3BhZ2F0ZWQgYmFjayB1cC4gVGhlcmVmb3JlIEkgbmVlZCB0byBjaGVjayBgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubGAgd2hpY2ggSSBiZWxpZXZlIGlzIHdoZXJlIHRoYXQgaW5mb3JtYXRpb24gZ2V0cyBzZW50LiBJIG5lZWQgdG8gcmV2aWV3IHRoZXNlIGZ1bmN0aW9ucyBjYXJlZnVsbHkuIEknbSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbWlzc2VkIG5vdGlmaWNhdGlvbnMsIG9yIGRhdGEgY29ycnVwdGlvbiBkdXJpbmcgdGhpcyBwcm9jZXNzLiBBIGJpdCBvZiBzdGF0aWMgYW5hbHlzaXMgaXMgcHJvYmFibHkgdGhlIGJlc3QgZmlyc3Qgc3RlcC4gR290dGEgZW5zdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBwbGF5aW5nIG5pY2VseSBpbiB0aGlzIHNpbXVsYXRlZCBlbnZpcm9ubWVudCB0byBwcmV2ZW50IHVuZXhwZWN0ZWQgZHJvcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI5OjUxLjY1MjQ4MDE5N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcyNTpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xNzI2OlxcdFxcbjE3Mjc6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBIV1NJTV9BVFRSX1RYX0lORk9fRkxBR1MsXFxuMTcyODpcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBod3NpbV90eF9yYXRlX2ZsYWcpICogSUVFRTgwMjExX1RYX01BWF9SQVRFUyxcXG4xNzI5OlxcdFxcdFxcdCAgICB0eF9hdHRlbXB0c19mbGFncykpXFxuMTczMDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xNzMxOlxcdFxcbjE3MzI6XFx0XFx0LyogV2UgY3JlYXRlIGEgY29va2llIHRvIGlkZW50aWZ5IHRoaXMgc2tiICovXFxuMTczMzpcXHRcXHRjb29raWUgPSBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2ZGF0YS1cXHUwMDNlcGVuZGluZ19jb29raWUpO1xcbjE3MzQ6XFx0XFx0aW5mby1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXSA9ICh2b2lkICopY29va2llO1xcbjE3MzU6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKVxcbjE3MzY6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTczNzpcXHRcXG4xNzM4OlxcdFxcdC8qIHRyYWNrIHRoZSBmcmVxdWVuY3kgKi9cXG4xNzM5OlxcdFxcdGluZm8tXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC1cXHUwMDNlY2VudGVyX2ZyZXE7XFxuMTc0MDpcXHRcXG4xNzQxOlxcdFxcdGdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWQpO1xcbjE3NDI6XFx0XFxuMTc0MzpcXHRcXHRpZiAoaHdzaW1fdmlydGlvX2VuYWJsZWQpIHtcXG4xNzQ0OlxcdFxcdFxcdGlmIChod3NpbV90eF92aXJ0aW8oZGF0YSwgc2tiKSlcXG4xNzQ1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfdHhza2I7XFxuMTc0NjpcXHRcXHR9IGVsc2Uge1xcbjE3NDc6XFx0XFx0XFx0aWYgKGh3c2ltX3VuaWNhc3RfbmV0Z3JvdXAoZGF0YSwgc2tiLCBkc3RfcG9ydGlkKSlcXG4xNzQ4OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfdHhza2I7XFxuMTc0OTpcXHRcXHR9XFxuMTc1MDpcXHRcXG4xNzUxOlxcdFxcdC8qIEVucXVldWUgdGhlIHBhY2tldCAqL1xcbjE3NTI6XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmRhdGEtXFx1MDAzZXBlbmRpbmcsIG15X3NrYik7XFxuMTc1MzpcXHRcXHRkYXRhLVxcdTAwM2V0eF9wa3RzKys7XFxuMTc1NDpcXHRcXHRkYXRhLVxcdTAwM2V0eF9ieXRlcyArPSBteV9za2ItXFx1MDAzZWxlbjtcXG4xNzU1OlxcdFxcdHJldHVybjtcXG4xNzU2OlxcdFxcbjE3NTc6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbjE3NTg6XFx0XFx0bmxtc2dfZnJlZShza2IpO1xcbjE3NTk6XFx0ZXJyX2ZyZWVfdHhza2I6XFxuMTc2MDpcXHRcXHRwcl9kZWJ1ZyhcXFwibWFjODAyMTFfaHdzaW06IGVycm9yIG9jY3VycmVkIGluICVzXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTc2MTpcXHRcXHRpZWVlODAyMTFfZnJlZV90eHNrYihodywgbXlfc2tiKTtcXG4xNzYyOlxcdFxcdGRhdGEtXFx1MDAzZXR4X2ZhaWxlZCsrO1xcbjE3NjM6XFx0fVxcbjE3NjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI5OjUxLjY1MzEwMzE5N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE0MDc2MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIFJlY2VpdmVyIFBhdGgqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgcmVjZWl2ZSBwYXRoLiBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIHN0YW5kYXJkIGZsb3csIGJ1dCBhIGdvb2QgZW5naW5lZXIga25vd3MgdG8gZG91YmxlLWNoZWNrIGVkZ2UgY2FzZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHJ1biBhIGRpYWdub3N0aWNzIGNoZWNrIG9uIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBub3cuIEl0J3MgcG9zc2libGUgdGhlcmUgYXJlIHNvbWUgaXNzdWVzIHdpdGggdGhlIFRYIEluZm8gRnJhbWUgaGFuZGxpbmcsIGFuZCB0aGlzIGNvdWxkIGJlIHN1YnRseSBpbXBhY3RpbmcgdGhlIFJYIHNpZGUgb3IgaGlkaW5nIHNvbWUgb3RoZXIgaXNzdWVzLiBJdCdzIGEga2V5IHNwb3QgdGhhdCBjYW4gZ2l2ZSB1cyBoaW50cyBmb3IgZGVlcGVyIGRlYnVnZ2luZyBpZiBvdGhlciBkaWFnbm9zdGljcyBjb21lIHVwIGVtcHR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2OSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6NTMuODY3MTgxMzgzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzgyLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MzgyOlxcdHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXFxuNjM4MzpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjYzODQ6XFx0e1xcbjYzODU6XFx0XFxuNjM4NjpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbjYzODc6XFx0XFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEyO1xcbjYzODg6XFx0XFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGk7XFxuNjM4OTpcXHRcXHRzdHJ1Y3QgaHdzaW1fdHhfcmF0ZSAqdHhfYXR0ZW1wdHM7XFxuNjM5MDpcXHRcXHR1NjQgcmV0X3NrYl9jb29raWU7XFxuNjM5MTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wO1xcbjYzOTI6XFx0XFx0Y29uc3QgdTggKnNyYztcXG42MzkzOlxcdFxcdHVuc2lnbmVkIGludCBod3NpbV9mbGFncztcXG42Mzk0OlxcdFxcdGludCBpO1xcbjYzOTU6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG42Mzk2OlxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG42Mzk3OlxcdFxcdGJvb2wgbm9fbW9uaXRvcjtcXG42Mzk4OlxcdFxcdHUzMiBmcmVxO1xcbjYzOTk6XFx0XFxuNjQwMDpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0gfHxcXG42NDAxOlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10gfHxcXG42NDAyOlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdIHx8XFxuNjQwMzpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfU0lHTkFMXSB8fFxcbjY0MDQ6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1RYX0lORk9dKVxcbjY0MDU6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjQwNjpcXHRcXG42NDA3OlxcdFxcdHNyYyA9ICh2b2lkICopbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XFxuNjQwODpcXHRcXHRod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTtcXG42NDA5OlxcdFxcdHJldF9za2JfY29va2llID0gbmxhX2dldF91NjQoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcXG42NDEwOlxcdFxcdG5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7XFxuNjQxMTpcXHRcXG42NDEyOlxcdFxcdGRhdGEyID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcihzcmMpO1xcbjY0MTM6XFx0XFx0aWYgKCFkYXRhMilcXG42NDE0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjY0MTU6XFx0XFxuNjQxNjpcXHRcXHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XFxuNjQxNzpcXHRcXHRcXHRpZiAoaHdzaW1fbmV0X2dldF9uZXRncm91cChnZW5sX2luZm9fbmV0KGluZm8pKSAhPVxcbjY0MTg6XFx0XFx0XFx0ICAgIGRhdGEyLVxcdTAwM2VuZXRncm91cClcXG42NDE5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjY0MjA6XFx0XFxuNjQyMTpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cXHUwMDNld21lZGl1bWQpXFxuNjQyMjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG42NDIzOlxcdFxcdH1cXG42NDI0OlxcdFxcbjY0MjU6XFx0XFx0LyogbG9vayBmb3IgdGhlIHNrYiBtYXRjaGluZyB0aGUgY29va2llIHBhc3NlZCBiYWNrIGZyb20gdXNlciAqL1xcbjY0MjY6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NDI3OlxcdFxcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLCBza2IsIHRtcCkge1xcbjY0Mjg6XFx0XFx0XFx0dWludHB0cl90IHNrYl9jb29raWU7XFxuNjQyOTpcXHRcXG42NDMwOlxcdFxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG42NDMxOlxcdFxcdFxcdHNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXTtcXG42NDMyOlxcdFxcbjY0MzM6XFx0XFx0XFx0aWYgKHNrYl9jb29raWUgPT0gcmV0X3NrYl9jb29raWUpIHtcXG42NDM0OlxcdFxcdFxcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZkYXRhMi1cXHUwMDNlcGVuZGluZyk7XFxuNjQzNTpcXHRcXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuNjQzNjpcXHRcXHRcXHRcXHRicmVhaztcXG42NDM3OlxcdFxcdFxcdH1cXG42NDM4OlxcdFxcdH1cXG42NDM5OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NDQwOlxcdFxcbjY0NDE6XFx0XFx0Lyogbm90IGZvdW5kICovXFxuNjQ0MjpcXHRcXHRpZiAoIWZvdW5kKVxcbjY0NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjQ0NDpcXHRcXG42NDQ1OlxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG42NDQ2OlxcdFxcdGZyZXEgPSAodWludHB0cl90KXR4aS1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXTtcXG42NDQ3OlxcdFxcbjY0NDg6XFx0XFx0aWYgKCFub19tb25pdG9yKVxcbjY0NDk6XFx0XFx0XFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi1cXHUwMDNlaHcsIHNrYiwgZnJlcSk7XFxuNjQ1MDpcXHRcXG42NDUxOlxcdFxcdC8qIFR4IGluZm8gcmVjZWl2ZWQgYmVjYXVzZSB0aGUgZnJhbWUgd2FzIGJyb2FkY2FzdGVkIG9uIHVzZXIgc3BhY2UsXFxuNjQ1MjpcXHRcXHQgc28gd2UgZ2V0IGFsbCB0aGUgbmVjZXNzYXJ5IGluZm86IHR4IGF0dGVtcHRzIGFuZCBza2IgY29udHJvbCBidWZmICovXFxuNjQ1MzpcXHRcXG42NDU0OlxcdFxcdHR4X2F0dGVtcHRzID0gKHN0cnVjdCBod3NpbV90eF9yYXRlICopbmxhX2RhdGEoXFxuNjQ1NTpcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XFxuNjQ1NjpcXHRcXG42NDU3OlxcdFxcdC8qIG5vdyBzZW5kIGJhY2sgVFggc3RhdHVzICovXFxuNjQ1ODpcXHRcXHRpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhpKTtcXG42NDU5OlxcdFxcbjY0NjA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykge1xcbjY0NjE6XFx0XFx0XFx0dHhpLVxcdTAwM2VzdGF0dXMucmF0ZXNbaV0uaWR4ID0gdHhfYXR0ZW1wdHNbaV0uaWR4O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyOTo1My44Njc1Nzc4NTJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk2NjQzNTAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBLTVNBTiBOZWVkZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgdGhlIGNvcmUgY2hhbmdlcyBhcmU6IGEgbmV3IGBIV1NJTV9BVFRSX05PX01PTklUT1JgIGF0dHJpYnV0ZSBmb3Igc2VsZWN0aXZlbHkgZGlzYWJsaW5nIG1vbml0b3IgZnJhbWVzLCBzdG9yYWdlIGFuZCByZXRyaWV2YWwgb2YgdGhlIHRyYW5zbWlzc2lvbiBmcmVxdWVuY3kgdmlhIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYW5kIHRoZSBhYmlsaXR5IHRvIHVwZGF0ZSBhIHBlbmRpbmcgZnJhbWUncyBkYXRhIGZyb20gYSBuZXRsaW5rIG1lc3NhZ2UuXG5cbk15IGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTbywgSSB3ZW50IHRocm91Z2ggaXQgd2l0aCBhIGZpbmUtdG9vdGhlZCBjb21iLiBUaGUgZnJlcXVlbmN5LCBub3cgc3RvcmVkIGluIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIGZyYW1lIGRhdGEgY29waWVkIGludG8gdGhlIHNrYiBpbiBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYCBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIGFuZCBsZW5ndGggY2hlY2tzIGFyZSBpbiBwbGFjZSwgc28gdGhlIGRhdGEgaXMgYm91bmRlZCwgYW5kIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBtb25pdG9yIGZ1bmN0aW9ucyBhbHNvIHJlY2VpdmUgdGhlIGZyZXF1ZW5jeSBhcyBhIGB1MzJgIGFuZCB3cml0ZSBpdCB0byBhIGhlYWRlciBmaWVsZC4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcywgbm90aGluZyBpcyBnZXR0aW5nIGNvcGllZCB0byB1c2Vyc3BhY2UgdW5pbml0aWFsaXplZCwgbm8gY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gaW5mb3JtYXRpb24gbGVha3MuXG5cbkdpdmVuIHRoYXQgSSBrbm93IHRoZSBLTVNBTiBndWlkZWxpbmVzIHdlbGwsIEkndmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgdGhlIHJ1bGVzLiBUaGUgcGF0Y2ggY2hhbmdlcyBhbmQgYWRkaXRpb25zOiBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCwgYGZyZXFgLCBgc2tiX2Nvb2tpZWAsIGFuZCBgcmF0ZV9kcml2ZXJfZGF0YVsxXWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBmcmFtZSBkYXRhIGNvbWVzIGZyb20gYSBuZXRsaW5rIGF0dHJpYnV0ZSB3aXRoIGxlbmd0aCB2ZXJpZmljYXRpb24uXG5cblJlZ2FyZGluZyB0aGUgXCJkbyB3ZSBuZWVkIEtNU0FOXCIgcXVlc3Rpb24gLSBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncywgc3VjaCBhcyBjb25jdXJyZW5jeSwgYnVmZmVyIG92ZXJydW5zLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgc2tiLCBhcmUgYWxyZWFkeSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjcmVhdGUgYm91bmRzIGNoZWNrcyB0aGF0IGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgS01TQU4gY29uY2VybnMuIEl0J3Mgc2FmZSwgYW5kIE5lZWRzS01TQU4gPSBmYWxzZS4gVGhlIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuIEkgd2lsbCBub3cgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NTUsIk91dHB1dFRva2VucyI6MjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjMwOjAwLjgzNDAxNTY1NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZGQgdGhlIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIG5ldGxpbmsgZmxhZyBhdHRyaWJ1dGUgZm9yIHNraXBwaW5nIG1vbml0b3IgcmVwb3J0cywgcHJlc2VydmVzIHRoZSB0cmFuc21pc3Npb24gY2hhbm5lbCBmcmVxdWVuY3kgaW4gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBhbmQgdXBkYXRlcyB0aGUgcGVuZGluZyB0cmFuc21pdHRlZCBza2IgaW4gYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgd2hlbiBtYXRjaGluZyBjb29raWUgYW5kIHRyYW5zbWl0dGVyIGF0dHJpYnV0ZXMgYXJlIHByb3ZpZGVkLlxcblxcbkFsbCBsb2NhbCB2YXJpYWJsZXMgKGBmcmVxYCwgYG5vX21vbml0b3JgLCBgY29va2llYCwgZXRjLikgYW5kIHN0cnVjdHVyZSBtZW1iZXJzIChgcmF0ZV9kcml2ZXJfZGF0YVsxXWAsIGBoZHItXFx1MDAzZXJ0X2NoYW5uZWxgKSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIFNLQiBtb2RpZmljYXRpb25zIHVzZSBgc2tiX3B1dF9kYXRhYCB3aXRoIHZlcmlmaWVkIHBheWxvYWQgbGVuZ3RocyBmcm9tIHZhbGlkYXRlZCBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZ3MsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgcmlza3MgcmVsYXRpbmcgdG8gU0tCIG1hbmlwdWxhdGlvbiwgcXVldWUgbG9ja2luZywgb3IgcmVmZXJlbmNlIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGRldGVjdG9ycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkZCB0aGUgYEhXU0lNX0FUVFJfTk9fTU9OSVRPUmAgbmV0bGluayBmbGFnIGF0dHJpYnV0ZSBmb3Igc2tpcHBpbmcgbW9uaXRvciByZXBvcnRzLCBwcmVzZXJ2ZXMgdGhlIHRyYW5zbWlzc2lvbiBjaGFubmVsIGZyZXF1ZW5jeSBpbiBgcmF0ZV9kcml2ZXJfZGF0YVsxXWAsIGFuZCB1cGRhdGVzIHRoZSBwZW5kaW5nIHRyYW5zbWl0dGVkIHNrYiBpbiBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYCB3aGVuIG1hdGNoaW5nIGNvb2tpZSBhbmQgdHJhbnNtaXR0ZXIgYXR0cmlidXRlcyBhcmUgcHJvdmlkZWQuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZyZXFgLCBgbm9fbW9uaXRvcmAsIGBjb29raWVgLCBldGMuKSBhbmQgc3RydWN0dXJlIG1lbWJlcnMgKGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYGhkci1cXHUwMDNlcnRfY2hhbm5lbGApIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBhcmUgZXhwbGljaXRseSBhc3NpZ25lZCBhbmQgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzcy4gU0tCIG1vZGlmaWNhdGlvbnMgdXNlIGBza2JfcHV0X2RhdGFgIHdpdGggdmVyaWZpZWQgcGF5bG9hZCBsZW5ndGhzIGZyb20gdmFsaWRhdGVkIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5ncywgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCByaXNrcyByZWxhdGluZyB0byBTS0IgbWFuaXB1bGF0aW9uLCBxdWV1ZSBsb2NraW5nLCBvciByZWZlcmVuY2UgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZGV0ZWN0b3JzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow5dbkn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 14:05:39 +0000 UTC FinishedAt: 2026-09-11 14:30:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "13e51269b6656768dc595ed6025e4974f2026543", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211_HWSIM", "MAC80211", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "13e51269b6656768dc595ed6025e4974f2026543", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211_HWSIM", "MAC80211", "CFG80211" ], "series_id": "7db2c614-ddb6-4093-8a6f-7f58a93db682" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "hwsim_cloned_frame_received_nl", "hwsim_tx_info_frame_received_nl", "mac80211_hwsim_tx_frame_nl", "mac80211_hwsim_monitor_rx", "mac80211_hwsim_monitor_ack", "mac80211_hwsim_tx" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sJiMzNDssCiAgICAmIzM0O2h3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeCYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV90eCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtYWM4MDIxMV9od3NpbWAgdG8gYWRkIHRoZSBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCBuZXRsaW5rIGZsYWcgYXR0cmlidXRlIGZvciBza2lwcGluZyBtb25pdG9yIHJlcG9ydHMsIHByZXNlcnZlcyB0aGUgdHJhbnNtaXNzaW9uIGNoYW5uZWwgZnJlcXVlbmN5IGluIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYW5kIHVwZGF0ZXMgdGhlIHBlbmRpbmcgdHJhbnNtaXR0ZWQgc2tiIGluIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIHdoZW4gbWF0Y2hpbmcgY29va2llIGFuZCB0cmFuc21pdHRlciBhdHRyaWJ1dGVzIGFyZSBwcm92aWRlZC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZyZXFgLCBgbm9fbW9uaXRvcmAsIGBjb29raWVgLCBldGMuKSBhbmQgc3RydWN0dXJlIG1lbWJlcnMgKGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYGhkci1cdTAwM2VydF9jaGFubmVsYCkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiB0aGlzIHBhdGNoIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzLiBTS0IgbW9kaWZpY2F0aW9ucyB1c2UgYHNrYl9wdXRfZGF0YWAgd2l0aCB2ZXJpZmllZCBwYXlsb2FkIGxlbmd0aHMgZnJvbSB2YWxpZGF0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmdzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHJlbGF0aW5nIHRvIFNLQiBtYW5pcHVsYXRpb24sIHF1ZXVlIGxvY2tpbmcsIG9yIHJlZmVyZW5jZSBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1hYzgwMjExX2h3c2ltLCBhIHNvZnR3YXJlLWVtdWxhdGVkIDgwMi4xMSByYWRpbyB0ZXN0aW5nIHRvb2wgZnVsbHkgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgZ2VuZXJpYyBuZXRsaW5rLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgaGFuZGxpbmcgZm9yIEhXU0lNX0FUVFJfTk9fTU9OSVRPUiwgbW9kaWZ5IGNlbnRlciBmcmVxdWVuY3kgdHJhY2tpbmcgYWNyb3NzIFRYIG1vbml0b3IgcmVwb3J0aW5nLCBhbmQgYWRkIGxvZ2ljIGluIGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCB0byBzZWFyY2ggdGhlIHBlbmRpbmcgdHJhbnNtaXNzaW9uIHF1ZXVlIGJ5IGNvb2tpZSBhbmQgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IgZGF0YSAodmlhIHBza2JfZXhwYW5kX2hlYWQsIHNrYl90cmltLCBhbmQgc2tiX3B1dF9kYXRhKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcyBpbiB0aGUgc2ltdWxhdGVkIHJhZGlvIFRYL1JYIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWI3NWFmNTEzYWUxYWY4Nzc5MmEyMGI1YWJhNDE0MTYzNTNmOTk5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE0OjI2OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaFxuaW5kZXggYTAyMmNkNWMwZjFjNy4uMWQyZmQwNmM1ODVhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oXG5AQCAtMyw3ICYjNDM7Myw3IEBAXG4gICogbWFjODAyMTFfaHdzaW0gLSBzb2Z0d2FyZSBzaW11bGF0b3Igb2YgODAyLjExIHJhZGlvKHMpIGZvciBtYWM4MDIxMVxuICAqIENvcHlyaWdodCAoYykgMjAwOCwgSm91bmkgTWFsaW5lbiBcdTAwM2NqQHcxLmZpXHUwMDNlXG4gICogQ29weXJpZ2h0IChjKSAyMDExLCBKYXZpZXIgTG9wZXogXHUwMDNjamxvcGV4QGdtYWlsLmNvbVx1MDAzZVxuLSAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMi0yMDI1IEludGVsIENvcnBvcmF0aW9uXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMi0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX0hcbkBAIC0xNjIsNiAmIzQzOzE2Miw4IEBAIGVudW0gaHdzaW1fY29tbWFuZHMge1xuICAqXHRlYWNoIHJhZGlvIGluc3RlYWQgb2YgZm9yIHRoZSB3aXBoeS5cbiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0U6IHN1cHBvcnQgTkFOIERldmljZSB2aXJ0dWFsIGludGVyZmFjZSAoZmxhZylcbiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX0JBQ0tHUk9VTkRfUkFEQVI6IGJhY2tncm91bmQgcmFkYXIvQ0FDIHN1cHBvcnQgKGZsYWcpXG4mIzQzOyAqIEBIV1NJTV9BVFRSX05PX01PTklUT1I6IHNraXAgbW9uaXRvciByZXBvcnQgZm9yIHRoaXMgVFggc3RhdHVzLCBlLmcuIGluIGNhc2VcbiYjNDM7ICpcdHRoZSBmcmFtZSB3YXMgbmV2ZXIgcmVwb3J0ZWQgdG8gYW55IHJlY2VpdmVyIChmbGFnKVxuICAqIEBfX0hXU0lNX0FUVFJfTUFYOiBlbnVtIGxpbWl0XG4gICovXG4gZW51bSBod3NpbV9hdHRycyB7XG5AQCAtMTk3LDYgJiM0MzsxOTksNyBAQCBlbnVtIGh3c2ltX2F0dHJzIHtcbiBcdEhXU0lNX0FUVFJfTVVMVElfUkFESU8sXG4gXHRIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRSxcbiBcdEhXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSLFxuJiM0MztcdEhXU0lNX0FUVFJfTk9fTU9OSVRPUixcbiBcdF9fSFdTSU1fQVRUUl9NQVgsXG4gfTtcbiAjZGVmaW5lIEhXU0lNX0FUVFJfTUFYIChfX0hXU0lNX0FUVFJfTUFYIC0gMSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5mY2E0YmY4MjNlZjRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5AQCAtODk1LDYgJiM0Mzs4OTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHdzaW1fZ2VubF9wb2xpY3lbSFdTSU1fQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4gXHRbSFdTSU1fQVRUUl9NVUxUSV9SQURJT10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiBcdFtIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiBcdFtIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiYjNDM7XHRbSFdTSU1fQVRUUl9OT19NT05JVE9SXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIH07XG4gXG4gI2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKVxuQEAgLTEzMzcsNyAmIzQzOzEzMzgsNyBAQCBtYWM4MDIxMV9od3NpbV9nZXRfdHhfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcbiBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnR4X3NrYixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbilcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgZnJlcSlcbiB7XG4gXHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTEzNjksNyAmIzQzOzEzNzAsNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aGRyLVx1MDAzZXJ0X3RzZnQgPSBfX21hYzgwMjExX2h3c2ltX2dldF90c2YoZGF0YSk7XG4gXHRoZHItXHUwMDNlcnRfZmxhZ3MgPSAwO1xuIFx0aGRyLVx1MDAzZXJ0X3JhdGUgPSBiaXRyYXRlIC8gNTtcbi1cdGhkci1cdTAwM2VydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSk7XG4mIzQzO1x0aGRyLVx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihmcmVxKTtcbiBcdGZsYWdzID0gSUVFRTgwMjExX0NIQU5fMkdIWjtcbiBcdGlmICh0eHJhdGUgXHUwMDI2XHUwMDI2IHR4cmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1JBVEVfRVJQX0cpXG4gXHRcdGZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE07XG5AQCAtMTM4Nyw4ICYjNDM7MTM4OCw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gfVxuIFxuIFxuLXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbixcbi1cdFx0XHRcdCAgICAgICBjb25zdCB1OCAqYWRkcilcbiYjNDM7c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2sodTMyIGZyZXEsIGNvbnN0IHU4ICphZGRyKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgaHdzaW1fcmFkaW90YXBfYWNrX2hkciAqaGRyO1xuQEAgLTE0MTAsNyAmIzQzOzE0MTAsNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sXG4gXHRcdFx0XHRcdCAgKDEgXHUwMDNjXHUwMDNjIElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSk7XG4gXHRoZHItXHUwMDNlcnRfZmxhZ3MgPSAwO1xuIFx0aGRyLVx1MDAzZXBhZCA9IDA7XG4tXHRoZHItXHUwMDNlcnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tXHUwMDNlY2VudGVyX2ZyZXEpO1xuJiM0MztcdGhkci1cdTAwM2VydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7XG4gXHRmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7XG4gXHRoZHItXHUwMDNlcnRfY2hiaXRtYXNrID0gY3B1X3RvX2xlMTYoZmxhZ3MpO1xuIFxuQEAgLTE3MzUsNiAmIzQzOzE3MzUsOSBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEhXU0lNX0FUVFJfQ09PS0lFLCBjb29raWUsIEhXU0lNX0FUVFJfUEFEKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4mIzQzO1x0LyogdHJhY2sgdGhlIGZyZXF1ZW5jeSAqL1xuJiM0MztcdGluZm8tXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXSA9ICh2b2lkICopKHVpbnRwdHJfdCljaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxO1xuJiM0MztcbiBcdGdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWQpO1xuIFxuIFx0aWYgKGh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XG5AQCAtMTkxMiw3ICYjNDM7MTkxNSw3IEBAIHN0YXRpYyBib29sIG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25vX25sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFxuIFx0bWFjODAyMTFfaHdzaW1fd3JpdGVfdHNmKGRhdGEsIHNrYiwgc2ltX3RzZik7XG4gXG4tXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGh3LCBza2IsIGNoYW4pO1xuJiM0MztcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoaHcsIHNrYiwgY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2cnhfc3RhdHVzLCAwLCBzaXplb2Yocnhfc3RhdHVzKSk7XG4gXHRyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQ7XG5AQCAtMjI3Niw3ICYjNDM7MjI3OSw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0YWNrID0gbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbm9fbmwoaHcsIHNrYiwgY2hhbm5lbCk7XG4gXG4gXHRpZiAoYWNrIFx1MDAyNlx1MDAyNiBza2ItXHUwMDNlbGVuIFx1MDAzZT0gMTYpXG4tXHRcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGNoYW5uZWwsIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1x0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhjaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxLCBoZHItXHUwMDNlYWRkcjIpO1xuIFxuIFx0aWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7XG4gXG5AQCAtNjM5MSw2ICYjNDM7NjM5NCw4IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCBub19tb25pdG9yO1xuJiM0MztcdHUzMiBmcmVxO1xuIFxuIFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0gfHxcbiBcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSB8fFxuQEAgLTY0MDIsNiAmIzQzOzY0MDcsNyBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0c3JjID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pO1xuIFx0aHdzaW1fZmxhZ3MgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTtcbiBcdHJldF9za2JfY29va2llID0gbmxhX2dldF91NjQoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xuJiM0MztcdG5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX05PX01PTklUT1JdKTtcbiBcbiBcdGRhdGEyID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcihzcmMpO1xuIFx0aWYgKCFkYXRhMilcbkBAIC02NDM2LDcgJiM0Mzs2NDQyLDExIEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRpZiAoIWZvdW5kKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXHUwMDNlaHcsIHNrYiwgZGF0YTItXHUwMDNlY2hhbm5lbCk7XG4mIzQzO1x0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuJiM0MztcdGZyZXEgPSAodWludHB0cl90KXR4aS1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5vX21vbml0b3IpXG4mIzQzO1x0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGRhdGEyLVx1MDAzZWh3LCBza2IsIGZyZXEpO1xuIFxuIFx0LyogVHggaW5mbyByZWNlaXZlZCBiZWNhdXNlIHRoZSBmcmFtZSB3YXMgYnJvYWRjYXN0ZWQgb24gdXNlciBzcGFjZSxcbiBcdCBzbyB3ZSBnZXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbzogdHggYXR0ZW1wdHMgYW5kIHNrYiBjb250cm9sIGJ1ZmYgKi9cbkBAIC02NDQ1LDggJiM0Mzs2NDU1LDYgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbiBcdFx0ICAgICAgIGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XG4gXG4gXHQvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqL1xuLVx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuLVxuIFx0aWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpJiM0MzsmIzQzOykge1xuQEAgLTY0NjYsOCAmIzQzOzY0NzQsNyBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0aWYgKCEoaHdzaW1fZmxhZ3MgXHUwMDI2IEhXU0lNX1RYX0NUTF9OT19BQ0spIFx1MDAyNlx1MDAyNlxuIFx0ICAgKGh3c2ltX2ZsYWdzIFx1MDAyNiBIV1NJTV9UWF9TVEFUX0FDSykpIHtcbiBcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSAxNilcbi1cdFx0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhkYXRhMi1cdTAwM2VjaGFubmVsLFxuLVx0XHRcdFx0XHRcdCAgIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1x0XHRcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGZyZXEsIGhkci1cdTAwM2VhZGRyMik7XG4gXHRcdHR4aS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7XG4gXHR9XG4gXG5AQCAtNjUzNSw2ICYjNDM7NjU0Miw1MSBAQCBzdGF0aWMgaW50IGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogbG9vayBmb3IgdGhlIHNrYiBtYXRjaGluZyB0aGUgY29va2llIHBhc3NlZCBiYWNrIGZyb20gdXNlciAqL1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKSB7XG4mIzQzO1x0XHR1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xuJiM0MztcdFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xuJiM0MztcdFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKnR4ZGF0YTtcbiYjNDM7XHRcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpO1xuJiM0MztcdFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0XHR0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG4mIzQzO1x0XHR0eGRhdGEgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKHRyYW5zbWl0dGVyKTtcbiYjNDM7XHRcdGlmICghdHhkYXRhIHx8IHR4ZGF0YS1cdTAwM2VuZXRncm91cCAhPSBkYXRhMi1cdTAwM2VuZXRncm91cClcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcsIG9yaWdfc2tiKSB7XG4mIzQzO1x0XHRcdHVpbnRwdHJfdCBza2JfY29va2llO1xuJiM0MztcbiYjNDM7XHRcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihvcmlnX3NrYik7XG4mIzQzO1x0XHRcdHNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzBdO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHNrYl9jb29raWUgPT0gY29va2llKSB7XG4mIzQzO1x0XHRcdFx0Zm91bmQgPSBvcmlnX3NrYjtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIHRoYXQmIzM5O3Mgd2VpcmQgKi9cbiYjNDM7XHRcdGlmICghZm91bmQpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChmcmFtZV9kYXRhX2xlbiBcdTAwM2UgZm91bmQtXHUwMDNlbGVuIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoZm91bmQsIDAsIGZyYW1lX2RhdGFfbGVuIC0gZm91bmQtXHUwMDNlbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgR0ZQX0FUT01JQykpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2tiX3RyaW0oZm91bmQsIDApO1xuJiM0MztcdFx0c2tiX3B1dF9kYXRhKGZvdW5kLCBmcmFtZV9kYXRhLCBmcmFtZV9kYXRhX2xlbik7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogY2hlY2sgaWYgcmFkaW8gaXMgY29uZmlndXJlZCBwcm9wZXJseSAqL1xuIFxuIFx0aWYgKChkYXRhMi1cdTAwM2VpZGxlIFx1MDAyNlx1MDAyNiAhZGF0YTItXHUwMDNldG1wX2NoYW4pIHx8ICFkYXRhMi1cdTAwM2VzdGFydGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sJiMzNDssCiAgICAmIzM0O2h3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeCYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV90eCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtYWM4MDIxMV9od3NpbSwgYSBzb2Z0d2FyZS1lbXVsYXRlZCA4MDIuMTEgcmFkaW8gdGVzdGluZyB0b29sIGZ1bGx5IGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIGdlbmVyaWMgbmV0bGluay4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIGhhbmRsaW5nIGZvciBIV1NJTV9BVFRSX05PX01PTklUT1IsIG1vZGlmeSBjZW50ZXIgZnJlcXVlbmN5IHRyYWNraW5nIGFjcm9zcyBUWCBtb25pdG9yIHJlcG9ydGluZywgYW5kIGFkZCBsb2dpYyBpbiBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwgdG8gc2VhcmNoIHRoZSBwZW5kaW5nIHRyYW5zbWlzc2lvbiBxdWV1ZSBieSBjb29raWUgYW5kIG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiIGRhdGEgKHZpYSBwc2tiX2V4cGFuZF9oZWFkLCBza2JfdHJpbSwgYW5kIHNrYl9wdXRfZGF0YSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBidWZmZXIgbWFuaXB1bGF0aW9uIGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIHNpbXVsYXRlZCByYWRpbyBUWC9SWCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViNzVhZjUxM2FlMWFmODc3OTJhMjBiNWFiYTQxNDE2MzUzZjk5OTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxNDoyNjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaAppbmRleCBhMDIyY2Q1YzBmMWM3Li4xZDJmZDA2YzU4NWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oCkBAIC0zLDcgJiM0MzszLDcgQEAKICAqIG1hYzgwMjExX2h3c2ltIC0gc29mdHdhcmUgc2ltdWxhdG9yIG9mIDgwMi4xMSByYWRpbyhzKSBmb3IgbWFjODAyMTEKICAqIENvcHlyaWdodCAoYykgMjAwOCwgSm91bmkgTWFsaW5lbiAmbHQ7akB3MS5maSZndDsKICAqIENvcHlyaWdodCAoYykgMjAxMSwgSmF2aWVyIExvcGV6ICZsdDtqbG9wZXhAZ21haWwuY29tJmd0OwotICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIyLTIwMjUgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbgogICovCiAKICNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9ICkBAIC0xNjIsNiAmIzQzOzE2Miw4IEBAIGVudW0gaHdzaW1fY29tbWFuZHMgewogICoJZWFjaCByYWRpbyBpbnN0ZWFkIG9mIGZvciB0aGUgd2lwaHkuCiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0U6IHN1cHBvcnQgTkFOIERldmljZSB2aXJ0dWFsIGludGVyZmFjZSAoZmxhZykKICAqIEBIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUjogYmFja2dyb3VuZCByYWRhci9DQUMgc3VwcG9ydCAoZmxhZykKJiM0MzsgKiBASFdTSU1fQVRUUl9OT19NT05JVE9SOiBza2lwIG1vbml0b3IgcmVwb3J0IGZvciB0aGlzIFRYIHN0YXR1cywgZS5nLiBpbiBjYXNlCiYjNDM7ICoJdGhlIGZyYW1lIHdhcyBuZXZlciByZXBvcnRlZCB0byBhbnkgcmVjZWl2ZXIgKGZsYWcpCiAgKiBAX19IV1NJTV9BVFRSX01BWDogZW51bSBsaW1pdAogICovCiBlbnVtIGh3c2ltX2F0dHJzIHsKQEAgLTE5Nyw2ICYjNDM7MTk5LDcgQEAgZW51bSBod3NpbV9hdHRycyB7CiAJSFdTSU1fQVRUUl9NVUxUSV9SQURJTywKIAlIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRSwKIAlIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUiwKJiM0MzsJSFdTSU1fQVRUUl9OT19NT05JVE9SLAogCV9fSFdTSU1fQVRUUl9NQVgsCiB9OwogI2RlZmluZSBIV1NJTV9BVFRSX01BWCAoX19IV1NJTV9BVFRSX01BWCAtIDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCmluZGV4IDAyYjZkODFjY2NkMTEuLmZjYTRiZjgyM2VmNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCkBAIC04OTUsNiAmIzQzOzg5NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBod3NpbV9nZW5sX3BvbGljeVtIV1NJTV9BVFRSX01BWCAmIzQzOyAxXSA9IHsKIAlbSFdTSU1fQVRUUl9NVUxUSV9SQURJT10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIAlbSFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0VdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiAJW0hXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAomIzQzOwlbSFdTSU1fQVRUUl9OT19NT05JVE9SXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogfTsKIAogI2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKQpAQCAtMTMzNyw3ICYjNDM7MTMzOCw3IEBAIG1hYzgwMjExX2h3c2ltX2dldF90eF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCiBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICp0eF9za2IsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKQomIzQzOwkJCQkgICAgICB1MzIgZnJlcSkKIHsKIAlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LSZndDtwcml2OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMzY5LDcgJiM0MzsxMzcwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAloZHItJmd0O3J0X3RzZnQgPSBfX21hYzgwMjExX2h3c2ltX2dldF90c2YoZGF0YSk7CiAJaGRyLSZndDtydF9mbGFncyA9IDA7CiAJaGRyLSZndDtydF9yYXRlID0gYml0cmF0ZSAvIDU7Ci0JaGRyLSZndDtydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbi0mZ3Q7Y2VudGVyX2ZyZXEpOwomIzQzOwloZHItJmd0O3J0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihmcmVxKTsKIAlmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7CiAJaWYgKHR4cmF0ZSAmYW1wOyZhbXA7IHR4cmF0ZS0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1JBVEVfRVJQX0cpCiAJCWZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE07CkBAIC0xMzg3LDggJiM0MzsxMzg4LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIH0KIAogCi1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgICAgIGNvbnN0IHU4ICphZGRyKQomIzQzO3N0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHUzMiBmcmVxLCBjb25zdCB1OCAqYWRkcikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBod3NpbV9yYWRpb3RhcF9hY2tfaGRyICpoZHI7CkBAIC0xNDEwLDcgJiM0MzsxNDEwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAogCQkJCQkgICgxICZsdDsmbHQ7IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSk7CiAJaGRyLSZndDtydF9mbGFncyA9IDA7CiAJaGRyLSZndDtwYWQgPSAwOwotCWhkci0mZ3Q7cnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tJmd0O2NlbnRlcl9mcmVxKTsKJiM0MzsJaGRyLSZndDtydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7CiAJZmxhZ3MgPSBJRUVFODAyMTFfQ0hBTl8yR0haOwogCWhkci0mZ3Q7cnRfY2hiaXRtYXNrID0gY3B1X3RvX2xlMTYoZmxhZ3MpOwogCkBAIC0xNzM1LDYgJiM0MzsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJaWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAomIzQzOwkvKiB0cmFjayB0aGUgZnJlcXVlbmN5ICovCiYjNDM7CWluZm8tJmd0O3JhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC0mZ3Q7Y2VudGVyX2ZyZXE7CiYjNDM7CiAJZ2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7CiAKIAlpZiAoaHdzaW1fdmlydGlvX2VuYWJsZWQpIHsKQEAgLTE5MTIsNyAmIzQzOzE5MTUsNyBAQCBzdGF0aWMgYm9vbCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAogCW1hYzgwMjExX2h3c2ltX3dyaXRlX3RzZihkYXRhLCBza2IsIHNpbV90c2YpOwogCi0JbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuKTsKJiM0MzsJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuLSZndDtjZW50ZXJfZnJlcSk7CiAKIAltZW1zZXQoJmFtcDtyeF9zdGF0dXMsIDAsIHNpemVvZihyeF9zdGF0dXMpKTsKIAlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQ7CkBAIC0yMjc2LDcgJiM0MzsyMjc5LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJYWNrID0gbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbm9fbmwoaHcsIHNrYiwgY2hhbm5lbCk7CiAKIAlpZiAoYWNrICZhbXA7JmFtcDsgc2tiLSZndDtsZW4gJmd0Oz0gMTYpCi0JCW1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGNoYW5uZWwsIGhkci0mZ3Q7YWRkcjIpOwomIzQzOwkJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soY2hhbm5lbC0mZ3Q7Y2VudGVyX2ZyZXEsIGhkci0mZ3Q7YWRkcjIpOwogCiAJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7CiAKQEAgLTYzOTEsNiAmIzQzOzYzOTQsOCBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlib29sIG5vX21vbml0b3I7CiYjNDM7CXUzMiBmcmVxOwogCiAJaWYgKCFpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdIHx8CiAJICAgICFpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSB8fApAQCAtNjQwMiw2ICYjNDM7NjQwNyw3IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsCiAJc3JjID0gKHZvaWQgKilubGFfZGF0YShpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTsKIAlod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTsKIAlyZXRfc2tiX2Nvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSk7CiYjNDM7CW5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7CiAKIAlkYXRhMiA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoc3JjKTsKIAlpZiAoIWRhdGEyKQpAQCAtNjQzNiw3ICYjNDM7NjQ0MiwxMSBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCWlmICghZm91bmQpCiAJCWdvdG8gb3V0OwogCi0JbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi0mZ3Q7aHcsIHNrYiwgZGF0YTItJmd0O2NoYW5uZWwpOwomIzQzOwl0eGkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiYjNDM7CWZyZXEgPSAodWludHB0cl90KXR4aS0mZ3Q7cmF0ZV9kcml2ZXJfZGF0YVsxXTsKJiM0MzsKJiM0MzsJaWYgKCFub19tb25pdG9yKQomIzQzOwkJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi0mZ3Q7aHcsIHNrYiwgZnJlcSk7CiAKIAkvKiBUeCBpbmZvIHJlY2VpdmVkIGJlY2F1c2UgdGhlIGZyYW1lIHdhcyBicm9hZGNhc3RlZCBvbiB1c2VyIHNwYWNlLAogCSBzbyB3ZSBnZXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbzogdHggYXR0ZW1wdHMgYW5kIHNrYiBjb250cm9sIGJ1ZmYgKi8KQEAgLTY0NDUsOCAmIzQzOzY0NTUsNiBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCQkgICAgICAgaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7CiAKIAkvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqLwotCXR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQogCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGkpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkmIzQzOyYjNDM7KSB7CkBAIC02NDY2LDggJiM0Mzs2NDc0LDcgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMiwKIAlpZiAoIShod3NpbV9mbGFncyAmYW1wOyBIV1NJTV9UWF9DVExfTk9fQUNLKSAmYW1wOyZhbXA7CiAJICAgKGh3c2ltX2ZsYWdzICZhbXA7IEhXU0lNX1RYX1NUQVRfQUNLKSkgewogCQlpZiAoc2tiLSZndDtsZW4gJmd0Oz0gMTYpCi0JCQltYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhkYXRhMi0mZ3Q7Y2hhbm5lbCwKLQkJCQkJCSAgIGhkci0mZ3Q7YWRkcjIpOwomIzQzOwkJCW1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGZyZXEsIGhkci0mZ3Q7YWRkcjIpOwogCQl0eGktJmd0O2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAl9CiAKQEAgLTY1MzUsNiAmIzQzOzY1NDIsNTEgQEAgc3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCQkJZ290byBvdXQ7CiAJfQogCiYjNDM7CS8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi8KJiM0MzsJaWYgKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKSB7CiYjNDM7CQl1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTsKJiM0MzsJCXN0cnVjdCBza19idWZmICpvcmlnX3NrYiwgKmZvdW5kID0gTlVMTDsKJiM0MzsJCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICp0eGRhdGE7CiYjNDM7CQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTsKJiM0MzsJCWNvbnN0IHU4ICp0cmFuc21pdHRlcjsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CQl0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pOwomIzQzOwkJdHhkYXRhID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcih0cmFuc21pdHRlcik7CiYjNDM7CQlpZiAoIXR4ZGF0YSB8fCB0eGRhdGEtJmd0O25ldGdyb3VwICE9IGRhdGEyLSZndDtuZXRncm91cCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHhkYXRhLSZndDtwZW5kaW5nLmxvY2ssIGZsYWdzKTsKJiM0MzsJCXNrYl9xdWV1ZV93YWxrKCZhbXA7dHhkYXRhLSZndDtwZW5kaW5nLCBvcmlnX3NrYikgewomIzQzOwkJCXVpbnRwdHJfdCBza2JfY29va2llOwomIzQzOwomIzQzOwkJCXR4aSA9IElFRUU4MDIxMV9TS0JfQ0Iob3JpZ19za2IpOwomIzQzOwkJCXNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS0mZ3Q7cmF0ZV9kcml2ZXJfZGF0YVswXTsKJiM0MzsKJiM0MzsJCQlpZiAoc2tiX2Nvb2tpZSA9PSBjb29raWUpIHsKJiM0MzsJCQkJZm91bmQgPSBvcmlnX3NrYjsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogdGhhdCYjMzk7cyB3ZWlyZCAqLwomIzQzOwkJaWYgKCFmb3VuZCkgewomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eGRhdGEtJmd0O3BlbmRpbmcubG9jaywgZmxhZ3MpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGZyYW1lX2RhdGFfbGVuICZndDsgZm91bmQtJmd0O2xlbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcHNrYl9leHBhbmRfaGVhZChmb3VuZCwgMCwgZnJhbWVfZGF0YV9sZW4gLSBmb3VuZC0mZ3Q7bGVuLAomIzQzOwkJCQkgICAgIEdGUF9BVE9NSUMpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3R4ZGF0YS0mZ3Q7cGVuZGluZy5sb2NrLCBmbGFncyk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlza2JfdHJpbShmb3VuZCwgMCk7CiYjNDM7CQlza2JfcHV0X2RhdGEoZm91bmQsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eGRhdGEtJmd0O3BlbmRpbmcubG9jaywgZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiAJLyogY2hlY2sgaWYgcmFkaW8gaXMgY29uZmlndXJlZCBwcm9wZXJseSAqLwogCiAJaWYgKChkYXRhMi0mZ3Q7aWRsZSAmYW1wOyZhbXA7ICFkYXRhMi0mZ3Q7dG1wX2NoYW4pIHx8ICFkYXRhMi0mZ3Q7c3RhcnRlZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIxNgoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyB0aGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyBmdXp6LXdvcnRoeSwgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gaXQgbWlnaHQgbmVlZCwgYW5kIHdoYXQgc3ltYm9scyB3ZSBzaG91bGQgYmUgZm9jdXNpbmcgb24uIEZpcnN0LCB0aGUgZGlmZi4uLiBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB0b3VjaGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oYCBhbmQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gUmlnaHQsIGBtYWM4MDIxMV9od3NpbWAgaXMgdGhhdCBoYW5keSBzb2Z0d2FyZSBzaW11bGF0b3IgZm9yIDgwMi4xMSByYWRpb3Mgd2l0aGluIG1hYzgwMjExLiBHb29kLiBJdCYjMzk7cyBhIHZpcnR1YWwgbmV0ZGV2L3dpcmVsZXNzIGRyaXZlciwgYWNjZXNzaWJsZSB0aHJvdWdoIGdlbmVyaWMgbmV0bGluaywgc3BlY2lmaWNhbGx5IHRoZSBubDgwMjExL2h3c2ltIGdlbmwgaW50ZXJmYWNlLiBLbm93aW5nIFN5emthbGxlciBhbHJlYWR5IGV4ZXJjaXNlcyBpdCB2aWEgdGhpcyB2ZXJ5IGludGVyZmFjZSBpcyBhIHBsdXMg4oCTIG1lYW5zIHdlIGhhdmUgYSBrbm93biBhdHRhY2sgc3VyZmFjZS4KCk5vdywgdGhlIGNoYW5nZXMgdGhlbXNlbHZlcy4uLmxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqICAgV2UmIzM5O3ZlIGdvdCBhIG5ldyBlbnVtIGBod3NpbV9hdHRyc2AgZW50cnk6IGBIV1NJTV9BVFRSX05PX01PTklUT1JgLiBUaGlzIGlzIGludGVyZXN0aW5nLgoqICAgVGhlIGBod3NpbV9nZW5sX3BvbGljeWAgaXMgdXBkYXRlZCB0byBpbmNsdWRlIHRoYXQgbmV3IGF0dHJpYnV0ZSBhcyBhIGZsYWcuIE9rYXkuCiogICBGdW5jdGlvbnMgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tgIGhhdmUgaGFkIHRoZWlyIGNoYW5uZWwgcG9pbnRlciBhcmd1bWVudHMgcmVwbGFjZWQgd2l0aCBhIGB1MzIgZnJlcWAg4oCTIHVzaW5nIGBpbmZvLSZndDtyYXRlX2RyaXZlcl9kYXRhWzFdYCB0byBzdG9yZSB0aGUgY2VudGVyIGZyZXF1ZW5jeS4gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcgaW5wdXQgdmFsdWVzLgoqICAgSW4gYG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25sYCwgd2UmIzM5O3JlIHNldHRpbmcgYGluZm8tJmd0O3JhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC0mZ3Q7Y2VudGVyX2ZyZXE7YC4KKiAgIFRoZW4gaW4gYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgLCB3ZSBhcmUgaGFuZGxpbmcgYEhXU0lNX0FUVFJfTk9fTU9OSVRPUmAgYW5kIHVzaW5nIHRoYXQgZnJlcXVlbmN5IGZyb20gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLgoqICAgQW5kIGZpbmFsbHksIGluIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLi4uIHRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gV2UmIzM5O3ZlIGdvdCBhIG5ldyBjb2RlIGJsb2NrLiBJZiBjZXJ0YWluIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQgKGBIV1NJTV9BVFRSX0NPT0tJRWAgYW5kIGBIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJgKSwgaXQgbG9va3MgdXAgdGhlIHRyYW5zbWl0dGVyIGh3c2ltXF9kYXRhLCBjaGVja3MgdGhlIHBlbmRpbmcgcXVldWUgZm9yIGEgbWF0Y2hpbmcgY29va2llLCBleHBhbmRzIHRoZSBoZWFkIGlmIG5lY2Vzc2FyeSAoYHBza2JfZXhwYW5kX2hlYWRgKSwgdHJpbXMsIGFuZCByZXBsYWNlcyB0aGUgc2tiIGRhdGEgd2l0aCBgZnJhbWVfZGF0YWAgdXNpbmcgYHNrYl9wdXRfZGF0YWAuIFRoYXQgYHBza2JfZXhwYW5kX2hlYWRgIGNhbGwgaXMgb2Z0ZW4gYSBnb29kIHBsYWNlIHRvIGxvb2suCgpUaGUgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gY2xvbmVkIGZyYW1lcywgdHJhbnNtaXR0ZXIgZGF0YSwgYW5kIHRoZSBtYW5pcHVsYXRpb24gb2Ygc2ticy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgYW5kIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBhIGJpdCBiZXR0ZXIuIFRoaXMgbG9va3MgcmlwZSBmb3Igc29tZSBkaXJlY3RlZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTYzODI9c3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02NDkwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NjQ5MTpzdGF0aWMgaW50IGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02NDkyLVx0XHRcdFx0XHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzE1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGh3c2ltX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNjYtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNjc6XHRcdC5kb2l0ID0gaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE2OC1cdH0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzM0OD1zdGF0aWMgaW50IGh3c2ltX3ZpcnRpb19oYW5kbGVfY21kKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzM3Mi1cdGNhc2UgSFdTSU1fQ01EX0ZSQU1FOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzM3MzpcdFx0aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHNrYiwgXHUwMDI2aW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03Mzc0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDI0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBtYWM4MDIxMV9od3NpbV9tYWluLmMgYW5kIG1hYzgwMjExX2h3c2ltKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmVmb3JlIEkgc3RhcnQgcG9raW5nIGFyb3VuZCB3aXRoIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgIGFuZCBgbWFjODAyMTFfaHdzaW1gLCBJICpuZWVkKiB0byB2ZXJpZnkgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBObyBwb2ludCB3YXN0aW5nIHRpbWUgaWYgYSBuZWNlc3Nhcnkgb3B0aW9uIGlzbiYjMzk7dCBlbmFibGVkLCBvciBpZiBzb21ldGhpbmcgZWxzZSBpcyBjb25mbGljdGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQmIzM5O3MgZ3VhcmRpbmcgdGhvc2Ugc3BlY2lmaWMgZmlsZXMgYW5kIHRoZSBjb3JlIGBtYWM4MDIxMV9od3NpbWAgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBrbm93OiBhcmUgd2UgZGVwZW5kZW50IG9uIHNwZWNpZmljIG5ldHdvcmtpbmcgZmVhdHVyZXMsIGRlYnVnIG9wdGlvbnMsIG9yIHBlcmhhcHMgZXZlbiBhIHBhcnRpY3VsYXIgd2lyZWxlc3Mgc3RhbmRhcmQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjb25mbGljdHMsIGxpa2UgcG90ZW50aWFsbHkgYSBkZXBlbmRlbmN5IG9uIGEgcGxhdGZvcm0gdGhhdCBkb2VzbiYjMzk7dCBmdWxseSBzdXBwb3J0IGFsbCB0aGUgdGVzdCBmZWF0dXJlcyBpbiB0aG9zZSBmaWxlcz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgaW1tZWRpYXRlIGZpbGUsIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgIGFuZCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGVudHJ5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcHJlY29uZGl0aW9ucy4gVGhlbiBJJiMzOTtsbCBleHBhbmQgb3V0d2FyZHMgdG8gYW55dGhpbmcgdGhhdCBkZXBlbmRzIG9uIGBtYWM4MDIxMV9od3NpbWAuIEkmIzM5O20gYWxzbyB0aGlua2luZyB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBtb2R1bGVzIHRoZW1zZWx2ZXMgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGZyb20gYSBkZXBlbmRlbmN5IHBvaW50IG9mIHZpZXcuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjE6b2JqLSQoQ09ORklHX01BQzgwMjExX0hXU0lNKVx0JiM0Mzs9IG1hYzgwMjExX2h3c2ltLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvTWFrZWZpbGUtMi1tYWM4MDIxMV9od3NpbS1vYmpzXHRcdCYjNDM7PSBtYWM4MDIxMV9od3NpbV9tYWluLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDo5OiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MTA6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0xMS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjIwPXN0cnVjdCBod3NpbV90eF9yYXRlIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjMzLSAqXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM0OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfUlRTX0NUUzogVXNlIFJUUy9DVFMgZXhjaGFuZ2UgZm9yIHRoaXMgcmF0ZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzU6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9DVFNfUFJPVEVDVDogQ1RTLXRvLXNlbGYgcHJvdGVjdGlvbiBpcyByZXF1aXJlZC5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yMzYtICpcdFRoaXMgaXMgc2V0IGlmIHRoZSBjdXJyZW50IEJTUyByZXF1aXJlcyBFUlAgcHJvdGVjdGlvbi5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyMzc6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTogVXNlIHNob3J0IHByZWFtYmxlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzODogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTOiBIVCByYXRlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzOTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUzogVkhUIE1DUyByYXRlLCBpbiB0aGlzIGNhc2UgdGhlIGlkeCBmaWVsZCBpc1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0MC0gKlx0c3BsaXQgaW50byBhIGhpZ2hlciA0IGJpdHMgKE5zcykgYW5kIGxvd2VyIDQgYml0cyAoTUNTIG51bWJlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDE6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX0dSRUVOX0ZJRUxEOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJhdGUgc2hvdWxkIGJlIHVzZWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNDItICpcdGluIEdyZWVuZmllbGQgbW9kZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDM6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDXzQwX01IWl9XSURUSDogSW5kaWNhdGVzIGlmIHRoZSBDaGFubmVsIFdpZHRoIHNob3VsZCBiZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0NC0gKlx0NDAgTUh6LlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0NTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfODBfTUhaX1dJRFRIOiBJbmRpY2F0ZXMgODAgTUh6IHRyYW5zbWlzc2lvblxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0NjogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSDogSW5kaWNhdGVzIDE2MCBNSHogdHJhbnNtaXNzaW9uXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQ3LSAqXHQoODAmIzQzOzgwIGlzbiYjMzk7dCBzdXBwb3J0ZWQgeWV0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0ODogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE6IFRoZSBmcmFtZSBzaG91bGQgYmUgdHJhbnNtaXR0ZWQgb24gYm90aCBvZlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0OS0gKlx0dGhlIGFkamFjZW50IDIwIE1IeiBjaGFubmVscywgaWYgdGhlIGN1cnJlbnQgY2hhbm5lbCB0eXBlIGlzXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjUwLSAqXHROTDgwMjExX0NIQU5fSFQ0ME1JTlVTIG9yIE5MODAyMTFfQ0hBTl9IVDQwUExVUy5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNTE6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJOiBTaG9ydCBHdWFyZCBpbnRlcnZhbCBzaG91bGQgYmUgdXNlZCBmb3IgdGhpc1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI1Mi0gKlx0cmF0ZS5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjU0PWVudW0gaHdzaW1fdHhfcmF0ZV9mbGFncyB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU1Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX1JUU19DVFNcdFx0PSBCSVQoMCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU2Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfVVNFX0NUU19QUk9URUNUXHRcdD0gQklUKDEpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI1NzpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRVx0PSBCSVQoMiksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjU4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI1OS1cdC8qIHJhdGUgaW5kZXggaXMgYW4gSFQvVkhUIE1DUyBpbnN0ZWFkIG9mIGFuIGluZGV4ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjYwOlx0TUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTXHRcdFx0PSBCSVQoMyksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjYxOlx0TUFDODAyMTFfSFdTSU1fVFhfUkNfR1JFRU5fRklFTERcdFx0PSBCSVQoNCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjYyOlx0TUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIXHRcdD0gQklUKDUpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MzpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX0RVUF9EQVRBXHRcdD0gQklUKDYpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2NDpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1NIT1JUX0dJXHRcdD0gQklUKDcpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2NTpcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1ZIVF9NQ1NcdFx0XHQ9IEJJVCg4KSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjY6XHRNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEhcdFx0PSBCSVQoOSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjY3Olx0TUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSFx0XHQ9IEJJVCgxMCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjY4LX07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oPTMzMT1lbnVtIGh3c2ltX3JhdGVfaW5mb19hdHRyaWJ1dGVzIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMzUwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjM1MTojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9IICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9pLmgtOS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjEwOiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9JX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjExOiNkZWZpbmUgX19NQUM4MDIxMV9IV1NJTV9JX0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTEyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oPTE2NT12b2lkIGllZWU4MDIxMV9od3NpbV93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTE2Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjE2ODojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9JX0ggKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTI9c3RhdGljIHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGNvbnN0IHU4ICphZGRyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNzovKiBNQUM4MDIxMV9IV1NJTSBuZXRsaW5rIGZhbWlseSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4LXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgaHdzaW1fZ2VubF9mYW1pbHk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgaHdzaW1fbWNncnBzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzI4Oi8qIE1BQzgwMjExX0hXU0lNIG5ldGxpbmsgcG9saWN5ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MjktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9ODY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBod3NpbV9nZW5sX3BvbGljeVtIV1NJTV9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy05MDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo5MDM6LyogTUFDODAyMTFfSFdTSU0gdmlydGlvIHF1ZXVlcyAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtOTA0LXN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICpod3NpbV92cXNbSFdTSU1fTlVNX1ZRU107XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MTU3NT1zdGF0aWMgaW5saW5lIHUxNiB0cmFuc190eF9yYXRlX2ZsYWdzX2llZWUyaHdzaW0oc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1NzktXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4MDpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9SVFNfQ1RTO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4MS1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4MjpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9DVFNfUFJPVEVDVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODMtXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODQ6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg1LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19NQ1MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg2Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4Ny1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTg4Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfR1JFRU5fRklFTEQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg5LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTkwOlx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5MS1cdGlmIChyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTkyOlx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTkzLVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTQ6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19TSE9SVF9HSTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTUtXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1ZIVF9NQ1MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTk2Olx0XHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTctXHRpZiAocmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzgwX01IWl9XSURUSClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1OTg6XHRcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEg7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTk5LVx0aWYgKHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9UWF9SQ18xNjBfTUhaX1dJRFRIKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTYwMDpcdFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDXzE2MF9NSFpfV0lEVEg7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNjAxLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM0ODc9c3RhdGljIGNvbnN0IGNoYXIgbWFjODAyMTFfaHdzaW1fZ3N0cmluZ3Nfc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM0OTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNDk4OiNkZWZpbmUgTUFDODAyMTFfSFdTSU1fU1NUQVRTX0xFTiBBUlJBWV9TSVpFKG1hYzgwMjExX2h3c2ltX2dzdHJpbmdzX3N0YXRzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzQ5OS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0zNTA5PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fZ2V0X2V0X3NzZXRfY291bnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUxMi1cdGlmIChzc2V0ID09IEVUSF9TU19TVEFUUylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM1MTM6XHRcdHJldHVybiBNQUM4MDIxMV9IV1NJTV9TU1RBVFNfTEVOO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUxNC1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTM1MTc9c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fZ2V0X2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM1MzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNTMzOlx0V0FSTl9PTihpICE9IE1BQzgwMjExX0hXU0lNX1NTVEFUU19MRU4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUzNC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NTY1MD1zdGF0aWMgY29uc3QgdTggaWZ0eXBlc19leHRfY2FwYV9hcFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjU5OiNkZWZpbmUgTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTXHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTY2MC1cdEZJRUxEX1BSRVBfQ09OU1QoSUVFRTgwMjExX01MRF9DQVBfT1BfVElEX1RPX0xJTktfTUFQX05FR19TVVBQLCBcXFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NjU9c3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01NjcyLVx0XHRcdFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjczOlx0XHQubWxkX2NhcGFfYW5kX29wcyA9IE1BQzgwMjExX0hXU0lNX01MRF9DQVBBX09QUyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NzQtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxOTk9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBod3NpbV9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MjAwOlx0Lm5hbWUgPSBcJiMzNDtNQUM4MDIxMV9IV1NJTVwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcyMDEtXHQudmVyc2lvbiA9IDEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzUxOT1zdGF0aWMgdm9pZCBod3NpbV92aXJ0aW9fcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc1MjctXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NTI4Oi8qIE1BQzgwMjExX0hXU0lNIHZpcnRpbyBkZXZpY2UgaWQgdGFibGUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTc1Mjktc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NTMwOlx0eyBWSVJUSU9fSURfTUFDODAyMTFfSFdTSU0sIFZJUlRJT19ERVZfQU5ZX0lEIH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03NTMxLVx0eyAwIH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTc4PXN0YXRpYyB1NjQgaHdzaW1fbmFuX2dldF9tYXN0ZXJfcmFuayhzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo4MzpcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVApIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODQtXHRcdG1hc3Rlcl9wcmVmID0gZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz0yMTY9dm9pZCBtYWM4MDIxMV9od3NpbV9uYW5fcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy0yNzMtXHRpZiAoKHNsb3QgIT0gU0xPVF8yNEdIWl9EVyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6Mjc0Olx0ICAgICBkYXRhLVx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikgfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMjc1LVx0ICAgIHJ4X3N0YXR1cy5mcmVxICE9IDI0MzcpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00MzYtXHRcdCAgICAoY2cgPT0gb3duX2NnIFx1MDAyNlx1MDAyNiBmcmFtZV9hbXIgXHUwMDNlIGN1cnJfYW1yKSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo0Mzc6XHRcdCAgICBkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00MzgtXHRcdFx0LyogQXZvaWQgYSBzdGF0ZSB0cmFuc2l0aW9uICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00NjgtXHRcdFx0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjQ2OTpcdFx0XHRkYXRhLVx1MDAzZW5hbi5waGFzZSA9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDcwLVx0XHRcdGRhdGEtXHUwMDNlbmFuLnJhbmRvbV9mYWN0b3JfdmFsaWRfZHdzdCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz02MTI9bWFjODAyMTFfaHdzaW1fbmFuX2V4ZWNfc3RhdGVfdHJhbnNpdGlvbnMoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MjUtXHRpZiAoZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3RyYW5zaXRpb25fc2NvcmUgXHUwMDNjIDMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYyNjpcdFx0ZGF0YS1cdTAwM2VuYW4ucm9sZSA9IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjI3Olx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYyOC1cdFx0IGRhdGEtXHUwMDNlbmFuLm1hc3Rlcl90cmFuc2l0aW9uX3Njb3JlIFx1MDAzZT0gMylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjI5Olx0XHRkYXRhLVx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfU1lOQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMwOlx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzEtXHRcdCBkYXRhLVx1MDAzZW5hbi5zeW5jX3RyYW5zaXRpb25fc2NvcmUgXHUwMDNlPSAzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzI6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMzOlx0ZWxzZSBpZiAoZGF0YS1cdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjM0LVx0XHQgZGF0YS1cdTAwM2VuYW4uc3luY190cmFuc2l0aW9uX3Njb3JlIFx1MDAzYyAzKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzU6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02MzYtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NDEtXHQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjQyOlx0aWYgKGRhdGEtXHUwMDNlbmFuLnJvbGUgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTUFTVEVSIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NDMtXHQgICAgIWhydGltZXJfYWN0aXZlKFx1MDAyNmRhdGEtXHUwMDNlbmFuLmRpc2NvdmVyeV9iZWFjb25fdGltZXIpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjUzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NTQ6XHRcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NTU6XHRcdFx0ZGF0YS1cdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NTYtXHRcdFx0ZGF0YS1cdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gTkFOX1dBUk1VUF9EV1NUO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjU5LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NjA6XHRcdFx0ZGF0YS1cdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY2MS1cdFx0XHRkYXRhLVx1MDAzZW5hbi5yYW5kb21fZmFjdG9yX3ZhbGlkX2R3c3QgPVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9Njk1PW1hYzgwMjExX2h3c2ltX25hbl90eF9iZWFjb24oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy03NTAtXHRuYW5fYXR0ci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YobWFzdGVyX2luZGljYXRpb24pKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NzUxOlx0aWYgKGRhdGEtXHUwMDNlbmFuLnBoYXNlID09IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy03NTItXHRcdG1hc3Rlcl9pbmRpY2F0aW9uLm1hc3Rlcl9wcmVmID0gZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWY7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz03NzQ9bWFjODAyMTFfaHdzaW1fbmFuX3Nsb3RfdGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODA3LVx0XHR0eF9zeW5jX2JlYWNvbiA9XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjgwODpcdFx0XHRkYXRhLVx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODA5Olx0XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgIT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTk9OX1NZTkM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgxMC1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTg2Nz1tYWM4MDIxMV9od3NpbV9uYW5fZGlzY292ZXJ5X2JlYWNvbl90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04NzktXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2ssIFx1MDAyNmRhdGEtXHUwMDNlbmFuLnN0YXRlX2xvY2spIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgwOlx0XHRpZiAoZGF0YS1cdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4gfHxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgxOlx0XHQgICAgZGF0YS1cdTAwM2VuYW4ucm9sZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTg4Mi1cdFx0XHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz05MDk9aW50IG1hYzgwMjExX2h3c2ltX25hbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyNi1cdFx0LyogU3RhcnQgaW4gdGhlIFwmIzM0O3NjYW5cJiMzNDsgcGhhc2UgYW5kIHN0YXkgdGhlcmUgZm9yIGEgbGl0dGxlIGJpdCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo5Mjc6XHRcdGRhdGEtXHUwMDNlbmFuLnBoYXNlID0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU47XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkyOC1cdFx0ZGF0YS1cdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID0gMTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkzMC1cdFx0ZGF0YS1cdTAwM2VuYW4ubWFzdGVyX3ByZWYgPSBjb25mLVx1MDAzZW1hc3Rlcl9wcmVmO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo5MzE6XHRcdGRhdGEtXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTkzMi1cdFx0bWVtc2V0KFx1MDAyNmRhdGEtXHUwMDNlbmFuLmN1cnJlbnRfYW1pLCAwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9MTIyNj1ib29sIG1hYzgwMjExX2h3c2ltX25hbl9yZWNlaXZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMTIzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6MTIzNjpcdGlmIChkYXRhLVx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMTIzNy1cdFx0cmV0dXJuIGNoYW5uZWwtXHUwMDNlY2VudGVyX2ZyZXEgPT0gMjQzNztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjc6I2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX05BTl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjg6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX05BTl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oPTEwPWVudW0gbWFjODAyMTFfaHdzaW1fbmFuX3BoYXNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTE6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTI6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMzpcdE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmgtMTQtfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oPTE2PWVudW0gbWFjODAyMTFfaHdzaW1fbmFuX3JvbGUge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxNzpcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTg6XHRNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxOTpcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX05PTl9TWU5DLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC0yMC19O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg9OTk9dm9pZCBtYWM4MDIxMV9od3NpbV9uYW5fbG9jYWxfc2NoZWRfY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTEwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6MTAyOiNlbmRpZiAvKiBfX01BQzgwMjExX0hXU0lNX05BTl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBWaXJ0dWFsIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgdmlydHVhbCB3aXJlbGVzcyBuZXR3b3JrIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IGRyaXZlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBqdWljeSBkZXRhaWxzIGFib3V0IGZlYXR1cmUgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGtlcHQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHdpcmVsZXNzIGxhbmRzY2FwZSBhbmQgd2hhdCYjMzk7cyBjb25maWd1cmFibGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTA0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZToKCioqSW52ZXN0aWdhdGluZyBNQUM4MDIxMSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE1BQzgwMjExYCBhbmQgc3BlY2lmaWNhbGx5IGBNQUM4MDIxMV9IV1NJTWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIOKAkyBuYW1lbHksIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQsIGFzIGl0IHNob3VsZCBkZWZpbmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBmcm9tIHRoZXJlLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBNQUM4MDIxMV9IV1NJTWAgaGFzIHNwZWNpZmljIGRlcGVuZGVuY2llcyB0aGF0IG5lZWQgdG8gYmUgbWV0IGJlZm9yZSBpdCBjYW4gZXZlbiBiZSBjb25zaWRlcmVkLCBvciBpZiBpdCBpcyBqdXN0IGEgc3Vib3B0aW9uIG9mIHRoZSBnZW5lcmFsIGBNQUM4MDIxMWAgY29uZmlndXJhdGlvbi4gSSBtaWdodCBhbHNvIG5lZWQgdG8gbG9vayBhdCBwYXJlbnQgS2NvbmZpZyBmaWxlcyBvciBkZXBlbmRlbmNpZXMsIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgaXMgZGVmaW5lZCBvciBjb25kaXRpb25lZCBoaWdoZXIgdXAgaW4gdGhlIGhpZXJhcmNoeS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgdXN1YWxseSBoYXBwZW5zLiBJIHNob3VsZCBxdWlja2x5IGJlIGFibGUgdG8gc2VlIHRoZSByZWxldmFudCAmIzM5O2RlcGVuZHMgb24mIzM5OyBjbGF1c2VzIGFuZCBhbnkgcG90ZW50aWFsbHkgY29uZmxpY3Rpbmcgb3B0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb25maWd1cmF0aW9uIGNvbnRleHQgaXMgdGhlIGtleSB0byBzb2x2aW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzMxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgbGluZSBvZiB0aG91Z2h0LCByZWZsZWN0aW5nIGFzIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgRmlsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMi4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgY29uZmlndXJhdGlvbiBmaWxlLCBteSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgcmVnaW9uIGxpa2VseSBkZWZpbmVzIHNvbWUgY29yZSwgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byB0aGUgbWFjODAyMTEgd2lyZWxlc3Mgc3Vic3lzdGVtLiBLbm93aW5nIHRoYXQgbWFjODAyMTEgaXMgdGhlIGhlYXJ0IG9mIHRoZSBMaW51eCB3aXJlbGVzcyBzdGFjaywgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgYSBnZW5lcmFsIG1vZHVsZSBvciBhIHRvcC1sZXZlbCBtYWNyby4gSSYjMzk7bSBnb2luZyBpbiB3aXRoIHRoZSBleHBlY3RhdGlvbiBvZiBnZXR0aW5nIGEgZm91bmRhdGlvbmFsIG92ZXJ2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1BQzgwMjExXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAgNTpcdFx0c2VsZWN0IENSWVBUT1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ19NQUNTXG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTFcbiAgMTQ6XHRcdCAgbmV0d29ya2luZyBzdGFjay5cbiAgMTU6XHRcbiAgMTY6XHRjb21tZW50IFwmIzM0O0NGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExPW5cbiAgMTg6XHRcbiAgMTk6XHRpZiBNQUM4MDIxMSAhPSBuXG4gIDIwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODM3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGNvZGUgY2hhbmdlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgZnVsbHksIHNvIEkmIzM5O2xsIHZlcmlmeSB0aGVpciByZWFjaCwgcHVycG9zZSwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGVkZ2UgY2FzZXMuCgoqKkNvZGUgUmV2aWV3IC0gQW5hbHl6aW5nIFJlY2VudCBDaGFuZ2VzIGluIG1hYzgwMjExX2h3c2ltKioKCkZpcnN0LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubGAsIGBtYWM4MDIxMV9od3NpbV90eGAsIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgYW5kIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLiBUaGV5JiMzOTtyZSB0aGUgY29yZSBvZiB0aGUgcmVjZW50IHdvcmsuIEkgd2lsbCBhcHByb2FjaCB0aGlzIHN5c3RlbWF0aWNhbGx5LgoKVG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nLCBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBjb2RlIGJsb2NrIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNjQ5MCB0byA2NTkwLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IGZvciB0aGVzZSBmdW5jdGlvbnMuIEkgd2lsbCBzdGFydCBieSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGxpbmUgYnkgbGluZSBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NDkwOlx0XG42NDkxOlx0c3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuNjQ5MjpcdFx0XHRcdFx0XHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG42NDkzOlx0e1xuNjQ5NDpcdFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEyO1xuNjQ5NTpcdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzO1xuNjQ5NjpcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbjY0OTc6XHRcdGNvbnN0IHU4ICpkc3Q7XG42NDk4Olx0XHRpbnQgZnJhbWVfZGF0YV9sZW47XG42NDk5Olx0XHR2b2lkICpmcmFtZV9kYXRhO1xuNjUwMDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG42NTAxOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBOVUxMO1xuNjUwMjpcdFxuNjUwMzpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0gfHxcbjY1MDQ6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSB8fFxuNjUwNTpcdFx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfUlhfUkFURV0gfHxcbjY1MDY6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1NJR05BTF0pXG42NTA3Olx0XHRcdGdvdG8gb3V0O1xuNjUwODpcdFxuNjUwOTpcdFx0ZHN0ID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0pO1xuNjUxMDpcdFx0ZnJhbWVfZGF0YV9sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GUkFNRV0pO1xuNjUxMTpcdFx0ZnJhbWVfZGF0YSA9ICh2b2lkICopbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSk7XG42NTEyOlx0XG42NTEzOlx0XHRpZiAoZnJhbWVfZGF0YV9sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgfHxcbjY1MTQ6XHRcdCAgICBmcmFtZV9kYXRhX2xlbiBcdTAwM2UgSUVFRTgwMjExX01BWF9EQVRBX0xFTilcbjY1MTU6XHRcdFx0Z290byBlcnI7XG42NTE2Olx0XG42NTE3Olx0XHQvKiBBbGxvY2F0ZSBuZXcgc2tiIGhlcmUgKi9cbjY1MTg6XHRcdHNrYiA9IGFsbG9jX3NrYihmcmFtZV9kYXRhX2xlbiwgR0ZQX0tFUk5FTCk7XG42NTE5Olx0XHRpZiAoc2tiID09IE5VTEwpXG42NTIwOlx0XHRcdGdvdG8gZXJyO1xuNjUyMTpcdFxuNjUyMjpcdFx0LyogQ29weSB0aGUgZGF0YSAqL1xuNjUyMzpcdFx0c2tiX3B1dF9kYXRhKHNrYiwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pO1xuNjUyNDpcdFxuNjUyNTpcdFx0ZGF0YTIgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGRzdCk7XG42NTI2Olx0XHRpZiAoIWRhdGEyKVxuNjUyNzpcdFx0XHRnb3RvIG91dDtcbjY1Mjg6XHRcbjY1Mjk6XHRcdGlmIChkYXRhMi1cdTAwM2V1c2VfY2hhbmN0eCkge1xuNjUzMDpcdFx0XHRpZiAoZGF0YTItXHUwMDNldG1wX2NoYW4pXG42NTMxOlx0XHRcdFx0Y2hhbm5lbCA9IGRhdGEyLVx1MDAzZXRtcF9jaGFuO1xuNjUzMjpcdFx0fSBlbHNlIHtcbjY1MzM6XHRcdFx0Y2hhbm5lbCA9IGRhdGEyLVx1MDAzZWNoYW5uZWw7XG42NTM0Olx0XHR9XG42NTM1Olx0XG42NTM2Olx0XHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XG42NTM3Olx0XHRcdGlmIChod3NpbV9uZXRfZ2V0X25ldGdyb3VwKGdlbmxfaW5mb19uZXQoaW5mbykpICE9XG42NTM4Olx0XHRcdCAgICBkYXRhMi1cdTAwM2VuZXRncm91cClcbjY1Mzk6XHRcdFx0XHRnb3RvIG91dDtcbjY1NDA6XHRcbjY1NDE6XHRcdFx0aWYgKGluZm8tXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cdTAwM2V3bWVkaXVtZClcbjY1NDI6XHRcdFx0XHRnb3RvIG91dDtcbjY1NDM6XHRcdH1cbjY1NDQ6XHRcbjY1NDU6XHRcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cbjY1NDY6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcdTAwMjZcdTAwMjZcbjY1NDc6XHRcdCAgICBpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pIHtcbjY1NDg6XHRcdFx0dTY0IGNvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcbjY1NDk6XHRcdFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xuNjU1MDpcdFx0XHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqdHhkYXRhO1xuNjU1MTpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTtcbjY1NTI6XHRcdFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xuNjU1MzpcdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNjU1NDpcdFxuNjU1NTpcdFx0XHR0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG42NTU2Olx0XHRcdHR4ZGF0YSA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIodHJhbnNtaXR0ZXIpO1xuNjU1NzpcdFx0XHRpZiAoIXR4ZGF0YSB8fCB0eGRhdGEtXHUwMDNlbmV0Z3JvdXAgIT0gZGF0YTItXHUwMDNlbmV0Z3JvdXApXG42NTU4Olx0XHRcdFx0Z290byBvdXQ7XG42NTU5Olx0XG42NTYwOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbjY1NjE6XHRcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcsIG9yaWdfc2tiKSB7XG42NTYyOlx0XHRcdFx0dWludHB0cl90IHNrYl9jb29raWU7XG42NTYzOlx0XG42NTY0Olx0XHRcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihvcmlnX3NrYik7XG42NTY1Olx0XHRcdFx0c2tiX2Nvb2tpZSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF07XG42NTY2Olx0XG42NTY3Olx0XHRcdFx0aWYgKHNrYl9jb29raWUgPT0gY29va2llKSB7XG42NTY4Olx0XHRcdFx0XHRmb3VuZCA9IG9yaWdfc2tiO1xuNjU2OTpcdFx0XHRcdFx0YnJlYWs7XG42NTcwOlx0XHRcdFx0fVxuNjU3MTpcdFx0XHR9XG42NTcyOlx0XG42NTczOlx0XHRcdC8qIHRoYXQmIzM5O3Mgd2VpcmQgKi9cbjY1NzQ6XHRcdFx0aWYgKCFmb3VuZCkge1xuNjU3NTpcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuNjU3NjpcdFx0XHRcdGdvdG8gb3V0O1xuNjU3NzpcdFx0XHR9XG42NTc4Olx0XG42NTc5Olx0XHRcdGlmIChmcmFtZV9kYXRhX2xlbiBcdTAwM2UgZm91bmQtXHUwMDNlbGVuIFx1MDAyNlx1MDAyNlxuNjU4MDpcdFx0XHQgICAgcHNrYl9leHBhbmRfaGVhZChmb3VuZCwgMCwgZnJhbWVfZGF0YV9sZW4gLSBmb3VuZC1cdTAwM2VsZW4sXG42NTgxOlx0XHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpKSB7XG42NTgyOlx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG42NTgzOlx0XHRcdFx0Z290byBvdXQ7XG42NTg0Olx0XHRcdH1cbjY1ODU6XHRcdFx0c2tiX3RyaW0oZm91bmQsIDApO1xuNjU4NjpcdFx0XHRza2JfcHV0X2RhdGEoZm91bmQsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTtcbjY1ODc6XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG42NTg4Olx0XHR9XG42NTg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDA5CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgSGFyZHdhcmUgU2ltdWxhdGlvbiBmb3IgRnJhbWUgVHJhbnNtaXNzaW9uKioKCk9rYXksIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBhc3BlY3RzIG9mIHRoaXMgZnJhbWUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgYSBiaXQgZGVlcGVyLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0d28gc3BlY2lmaWMgYXJlYXMgaW4gdGhlIGNvZGUuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgZnJvbSB0aGUgcG9pbnQgdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gcmVjZWl2ZXMgc29tZSBUWCBpbmZvcm1hdGlvbjsgSSYjMzk7bGwgZm9jdXMgb24gYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgIChsaW5lcyA2MzkwLTY0OTApLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzaW11bGF0aW9uIHByb2Nlc3NlcyB0aGF0IGlucHV0LiBUaGVuLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBhY3R1YWxseSAqc2VuZHMqIHRoZSBmcmFtZSwgc28gSSYjMzk7bGwgYWxzbyBiZSBleGFtaW5pbmcgYG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25sYCAobGluZXMgMTcyMC0xNzYwKS4gQnkgZXhhbWluaW5nIHRoZXNlIHR3byBmdW5jdGlvbnMsIEkmIzM5O2xsIGJ1aWxkIGEgbXVjaCBiZXR0ZXIgcGljdHVyZSBvZiBob3cgdGhlIHNpbXVsYXRpb24gaGFuZGxlcyBUWCBmcmFtZSBkYXRhIGVuZC10by1lbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYzOTA6XHRcdHU2NCByZXRfc2tiX2Nvb2tpZTtcbjYzOTE6XHRcdHN0cnVjdCBza19idWZmICpza2IsICp0bXA7XG42MzkyOlx0XHRjb25zdCB1OCAqc3JjO1xuNjM5MzpcdFx0dW5zaWduZWQgaW50IGh3c2ltX2ZsYWdzO1xuNjM5NDpcdFx0aW50IGk7XG42Mzk1Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNjM5NjpcdFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuNjM5NzpcdFx0Ym9vbCBub19tb25pdG9yO1xuNjM5ODpcdFx0dTMyIGZyZXE7XG42Mzk5Olx0XG42NDAwOlx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSB8fFxuNjQwMTpcdFx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdIHx8XG42NDAyOlx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdIHx8XG42NDAzOlx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9TSUdOQUxdIHx8XG42NDA0Olx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSlcbjY0MDU6XHRcdFx0Z290byBvdXQ7XG42NDA2Olx0XG42NDA3Olx0XHRzcmMgPSAodm9pZCAqKW5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG42NDA4Olx0XHRod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10pO1xuNjQwOTpcdFx0cmV0X3NrYl9jb29raWUgPSBubGFfZ2V0X3U2NChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSk7XG42NDEwOlx0XHRub19tb25pdG9yID0gbmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7XG42NDExOlx0XG42NDEyOlx0XHRkYXRhMiA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoc3JjKTtcbjY0MTM6XHRcdGlmICghZGF0YTIpXG42NDE0Olx0XHRcdGdvdG8gb3V0O1xuNjQxNTpcdFxuNjQxNjpcdFx0aWYgKCFod3NpbV92aXJ0aW9fZW5hYmxlZCkge1xuNjQxNzpcdFx0XHRpZiAoaHdzaW1fbmV0X2dldF9uZXRncm91cChnZW5sX2luZm9fbmV0KGluZm8pKSAhPVxuNjQxODpcdFx0XHQgICAgZGF0YTItXHUwMDNlbmV0Z3JvdXApXG42NDE5Olx0XHRcdFx0Z290byBvdXQ7XG42NDIwOlx0XG42NDIxOlx0XHRcdGlmIChpbmZvLVx1MDAzZXNuZF9wb3J0aWQgIT0gZGF0YTItXHUwMDNld21lZGl1bWQpXG42NDIyOlx0XHRcdFx0Z290byBvdXQ7XG42NDIzOlx0XHR9XG42NDI0Olx0XG42NDI1Olx0XHQvKiBsb29rIGZvciB0aGUgc2tiIG1hdGNoaW5nIHRoZSBjb29raWUgcGFzc2VkIGJhY2sgZnJvbSB1c2VyICovXG42NDI2Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkYXRhMi1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbjY0Mjc6XHRcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXHUwMDI2ZGF0YTItXHUwMDNlcGVuZGluZywgc2tiLCB0bXApIHtcbjY0Mjg6XHRcdFx0dWludHB0cl90IHNrYl9jb29raWU7XG42NDI5Olx0XG42NDMwOlx0XHRcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbjY0MzE6XHRcdFx0c2tiX2Nvb2tpZSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF07XG42NDMyOlx0XG42NDMzOlx0XHRcdGlmIChza2JfY29va2llID09IHJldF9za2JfY29va2llKSB7XG42NDM0Olx0XHRcdFx0X19za2JfdW5saW5rKHNrYiwgXHUwMDI2ZGF0YTItXHUwMDNlcGVuZGluZyk7XG42NDM1Olx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuNjQzNjpcdFx0XHRcdGJyZWFrO1xuNjQzNzpcdFx0XHR9XG42NDM4Olx0XHR9XG42NDM5Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRhdGEyLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuNjQ0MDpcdFxuNjQ0MTpcdFx0Lyogbm90IGZvdW5kICovXG42NDQyOlx0XHRpZiAoIWZvdW5kKVxuNjQ0MzpcdFx0XHRnb3RvIG91dDtcbjY0NDQ6XHRcbjY0NDU6XHRcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbjY0NDY6XHRcdGZyZXEgPSAodWludHB0cl90KXR4aS1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdO1xuNjQ0NzpcdFxuNjQ0ODpcdFx0aWYgKCFub19tb25pdG9yKVxuNjQ0OTpcdFx0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGRhdGEyLVx1MDAzZWh3LCBza2IsIGZyZXEpO1xuNjQ1MDpcdFxuNjQ1MTpcdFx0LyogVHggaW5mbyByZWNlaXZlZCBiZWNhdXNlIHRoZSBmcmFtZSB3YXMgYnJvYWRjYXN0ZWQgb24gdXNlciBzcGFjZSxcbjY0NTI6XHRcdCBzbyB3ZSBnZXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbzogdHggYXR0ZW1wdHMgYW5kIHNrYiBjb250cm9sIGJ1ZmYgKi9cbjY0NTM6XHRcbjY0NTQ6XHRcdHR4X2F0dGVtcHRzID0gKHN0cnVjdCBod3NpbV90eF9yYXRlICopbmxhX2RhdGEoXG42NDU1Olx0XHRcdCAgICAgICBpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfVFhfSU5GT10pO1xuNjQ1NjpcdFxuNjQ1NzpcdFx0Lyogbm93IHNlbmQgYmFjayBUWCBzdGF0dXMgKi9cbjY0NTg6XHRcdGllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGkpO1xuNjQ1OTpcdFxuNjQ2MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSYjNDM7JiM0MzspIHtcbjY0NjE6XHRcdFx0dHhpLVx1MDAzZXN0YXR1cy5yYXRlc1tpXS5pZHggPSB0eF9hdHRlbXB0c1tpXS5pZHg7XG42NDYyOlx0XHRcdHR4aS1cdTAwM2VzdGF0dXMucmF0ZXNbaV0uY291bnQgPSB0eF9hdHRlbXB0c1tpXS5jb3VudDtcbjY0NjM6XHRcdH1cbjY0NjQ6XHRcbjY0NjU6XHRcdHR4aS1cdTAwM2VzdGF0dXMuYWNrX3NpZ25hbCA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9TSUdOQUxdKTtcbjY0NjY6XHRcbjY0Njc6XHRcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuNjQ2ODpcdFx0aSA9IG1hYzgwMjExX2h3c2ltX2dldF9saW5rX2lkKHR4aS1cdTAwM2Vjb250cm9sLnZpZiwgaGRyKTtcbjY0Njk6XHRcdGlmIChpIFx1MDAzZT0gMCkge1xuNjQ3MDpcdFx0XHR0eGktXHUwMDNlc3RhdHVzLmxpbmtfdmFsaWQgPSAxO1xuNjQ3MTpcdFx0XHR0eGktXHUwMDNlc3RhdHVzLmxpbmtfaWQgPSBpO1xuNjQ3MjpcdFx0fVxuNjQ3MzpcdFxuNjQ3NDpcdFx0aWYgKCEoaHdzaW1fZmxhZ3MgXHUwMDI2IEhXU0lNX1RYX0NUTF9OT19BQ0spIFx1MDAyNlx1MDAyNlxuNjQ3NTpcdFx0ICAgKGh3c2ltX2ZsYWdzIFx1MDAyNiBIV1NJTV9UWF9TVEFUX0FDSykpIHtcbjY0NzY6XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSAxNilcbjY0Nzc6XHRcdFx0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhmcmVxLCBoZHItXHUwMDNlYWRkcjIpO1xuNjQ3ODpcdFx0XHR0eGktXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLO1xuNjQ3OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg5MQoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkV4YW1pbmluZyB0aGUgYG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25sYCBGdW5jdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lcyAxNzIwIHRocm91Z2ggMTc2MC4gSSBpbW1lZGlhdGVseSBrbm93IHRoZSBjb250ZXh0IGhlcmU7IHRoaXMgbGlrZWx5IGRlYWxzIHdpdGggdGhlIG5ldHdvcmsgbGF5ZXIgaW50ZXJhY3Rpb24gaW4gdGhlIGBtYWM4MDIxMV9od3NpbWAgbW9kdWxlLCBzcGVjaWZpY2FsbHkgdGhlIHRyYW5zbWlzc2lvbiBzaWRlIG9mIHRoaW5ncyBnaXZlbiB0aGUgJiMzNDt0eCYjMzQ7IGluIHRoZSBmdW5jdGlvbiBuYW1lLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIG5ldHdvcmsgZnJhbWVzIGFyZSBwcm9jZXNzZWQsIGZvcm1hdHRlZCwgYW5kIHVsdGltYXRlbHkgaGFuZGVkIG9mZiAob3Igc2ltdWxhdGVkIGFzIGhhbmRlZCBvZmYpIHRvIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgdHJhbnNtaXNzaW9uIOKAkyBvciwgaW4gdGhpcyBzaW11bGF0ZWQgY2FzZSwgaGFuZGxlZCB3aXRoaW4gdGhlIGh3c2ltIGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIG5ldGxpbmsgYXR0cmlidXRlcyBhcmUgcGFyc2VkIHRvIGtub3cgZXhhY3RseSBob3cgdGhlIGZyYW1lIGNoYXJhY3RlcmlzdGljcyBhcmUgYmVpbmcgcHJlc2VudGVkLCBhbmQgdGhlbiBob3cgdGhlIHNpbXVsYXRpb24gaGFuZGxlcyB0aGF0IHRvIHByb2NlZWQuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgYml0cyBvbiBmcmFtZSBzZXJpYWxpemF0aW9uIG9yIHNpbXVsYXRpb24gb2YgdHJhbnNtaXNzaW9uIGVycm9ycyBpbiB0aGlzIHNlY3Rpb24sIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIEkmIzM5O2xsIGJlIHN1cmUgdG8gbG9vayBmb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRoZSByYXRlIGNvbnRyb2wgcGFyYW1ldGVycywgdGhlIHF1ZXVlaW5nIGRpc2NpcGxpbmUsIGFuZCBhbnkgcG90ZW50aWFsIGhhcmR3YXJlLXNwZWNpZmljIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgaW4gdGhpcyBzaW11bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzIwOlx0XHR9XG4xNzIxOlx0XG4xNzIyOlx0XHRpZiAobmxhX3B1dChza2IsIEhXU0lNX0FUVFJfVFhfSU5GTyxcbjE3MjM6XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgaHdzaW1fdHhfcmF0ZSkqSUVFRTgwMjExX1RYX01BWF9SQVRFUyxcbjE3MjQ6XHRcdFx0ICAgIHR4X2F0dGVtcHRzKSlcbjE3MjU6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzI2Olx0XG4xNzI3Olx0XHRpZiAobmxhX3B1dChza2IsIEhXU0lNX0FUVFJfVFhfSU5GT19GTEFHUyxcbjE3Mjg6XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgaHdzaW1fdHhfcmF0ZV9mbGFnKSAqIElFRUU4MDIxMV9UWF9NQVhfUkFURVMsXG4xNzI5Olx0XHRcdCAgICB0eF9hdHRlbXB0c19mbGFncykpXG4xNzMwOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMTczMTpcdFxuMTczMjpcdFx0LyogV2UgY3JlYXRlIGEgY29va2llIHRvIGlkZW50aWZ5IHRoaXMgc2tiICovXG4xNzMzOlx0XHRjb29raWUgPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZkYXRhLVx1MDAzZXBlbmRpbmdfY29va2llKTtcbjE3MzQ6XHRcdGluZm8tXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXSA9ICh2b2lkICopY29va2llO1xuMTczNTpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKVxuMTczNjpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE3Mzc6XHRcbjE3Mzg6XHRcdC8qIHRyYWNrIHRoZSBmcmVxdWVuY3kgKi9cbjE3Mzk6XHRcdGluZm8tXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXSA9ICh2b2lkICopKHVpbnRwdHJfdCljaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxO1xuMTc0MDpcdFxuMTc0MTpcdFx0Z2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7XG4xNzQyOlx0XG4xNzQzOlx0XHRpZiAoaHdzaW1fdmlydGlvX2VuYWJsZWQpIHtcbjE3NDQ6XHRcdFx0aWYgKGh3c2ltX3R4X3ZpcnRpbyhkYXRhLCBza2IpKVxuMTc0NTpcdFx0XHRcdGdvdG8gZXJyX2ZyZWVfdHhza2I7XG4xNzQ2Olx0XHR9IGVsc2Uge1xuMTc0NzpcdFx0XHRpZiAoaHdzaW1fdW5pY2FzdF9uZXRncm91cChkYXRhLCBza2IsIGRzdF9wb3J0aWQpKVxuMTc0ODpcdFx0XHRcdGdvdG8gZXJyX2ZyZWVfdHhza2I7XG4xNzQ5Olx0XHR9XG4xNzUwOlx0XG4xNzUxOlx0XHQvKiBFbnF1ZXVlIHRoZSBwYWNrZXQgKi9cbjE3NTI6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRhdGEtXHUwMDNlcGVuZGluZywgbXlfc2tiKTtcbjE3NTM6XHRcdGRhdGEtXHUwMDNldHhfcGt0cyYjNDM7JiM0Mzs7XG4xNzU0Olx0XHRkYXRhLVx1MDAzZXR4X2J5dGVzICYjNDM7PSBteV9za2ItXHUwMDNlbGVuO1xuMTc1NTpcdFx0cmV0dXJuO1xuMTc1NjpcdFxuMTc1NzpcdG5sYV9wdXRfZmFpbHVyZTpcbjE3NTg6XHRcdG5sbXNnX2ZyZWUoc2tiKTtcbjE3NTk6XHRlcnJfZnJlZV90eHNrYjpcbjE3NjA6XHRcdHByX2RlYnVnKFwmIzM0O21hYzgwMjExX2h3c2ltOiBlcnJvciBvY2N1cnJlZCBpbiAlc1xcblwmIzM0OywgX19mdW5jX18pO1xuMTc2MTpcdFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoaHcsIG15X3NrYik7XG4xNzYyOlx0XHRkYXRhLVx1MDAzZXR4X2ZhaWxlZCYjNDM7JiM0Mzs7XG4xNzYzOlx0fVxuMTc2NDpcdFxuMTc2NTpcdHN0YXRpYyBib29sIGh3c2ltX2NoYW5zX2NvbXBhdChzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmMxLFxuMTc2NjpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmMyKVxuMTc2NzpcdHtcbjE3Njg6XHRcdGlmICghYzEgfHwgIWMyKVxuMTc2OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTA3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzIGluIHRoZSBtYWM4MDIxMV9od3NpbSBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgYW5kIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBmdW5jdGlvbnMuIEl0IGFwcGVhcnMgdGhlIGZsb3cgaW52b2x2ZXMgYSB1c2VyLXNwYWNlIHByb2Nlc3Mgc2VuZGluZyBhIGZyYW1lIGJhY2sgdGhyb3VnaCBHZW5lcmljIE5ldGxpbmsgdXNpbmcgYEhXU0lNX0NNRF9GUkFNRWAuIElmIGBIV1NJTV9BVFRSX0NPT0tJRWAgYW5kIGBIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJgIGFyZSBwcmVzZW50LCB0aGUgY29kZSByZXRyaWV2ZXMgdGhlIG9yaWdpbmFsIHNvY2tldCBidWZmZXIgKGBza2JgKSBmcm9tIHRoZSB0cmFuc21pdHRlciYjMzk7cyAmIzM0O3BlbmRpbmcmIzM0OyBxdWV1ZS4gVGhpcyBjYXVnaHQgbXkgYXR0ZW50aW9uOiBpdCBmaW5kcyB0aGUgb3JpZ2luYWwgYHNrYmAsIG1vZGlmaWVzIGl0ICppbiBwbGFjZSogdXNpbmcgYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX3RyaW1gLCBhbmQgYHNrYl9wdXRfZGF0YWAsIGJ1dCwgaW1wb3J0YW50bHksIHRoZSBtb2RpZmllZCBgc2tiYCAqcmVtYWlucyogaW4gdGhlIHBlbmRpbmcgcXVldWUuIFRoZW4sIGxhdGVyLCBgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubGAgaGFuZGxlcyBgSFdTSU1fQ01EX1RYX0lORk9fRlJBTUVgLCBkZXF1ZXVlcyAqdGhhdCBzYW1lKiBgc2tiYCBmcm9tIHRoZSAmIzM0O3BlbmRpbmcmIzM0OyBxdWV1ZSwgYW5kIHByb2Nlc3NlcyBpdC4gVGhpcyByYWlzZXMgYSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgZG91YmxlIGZyZWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGlmIHRoZSBtb2RpZmljYXRpb24gaXMgZG9uZSBpbiBhIHdheSB0aGF0IGlzIG5vdCBzeW5jaHJvbml6ZWQsIG9yIHByb3Blcmx5IGFjY291bnRlZCBmb3IgbGF0ZXIgb24uCgpGdXJ0aGVybW9yZSwgaW4gYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgLCBJIHNlZSB0aGUgdXNlIG9mIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIHRvIG9wdGlvbmFsbHkgc2tpcCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGEgdHlwaWNhbCB0YXJnZXQgZm9yIGZ1enppbmcuIEFsc28gSSBub3RpY2UgdGhlIHVzZSBvZiBgZnJlcSA9ICh1aW50cHRyX3QpdHhpLSZndDtyYXRlX2RyaXZlcl9kYXRhWzFdYCBpbnN0ZWFkIG9mIGBkYXRhMi0mZ3Q7Y2hhbm5lbGAgd2hpY2ggbWF5IGxlYWQgdG8gaW5jb25zaXN0ZW5jaWVzIG9yIGFzc3VtcHRpb25zLgoKR2l2ZW4gdGhhdCBgbWFjODAyMTFfaHdzaW1gIGlzIGEgcHVyZSBzb2Z0d2FyZSBzaW11bGF0ZWQgODAyLjExIGRyaXZlciwgY29tbXVuaWNhdGluZyB2aWEgR2VuZXJpYyBOZXRsaW5rLCBhbmQgY29uc2lkZXJpbmcgdGhhdCBzeXprYWxsZXIgYWN0aXZlbHkgdGFyZ2V0cyBubDgwMjExIGFuZCBod3NpbSBuZXRsaW5rIGludGVyZmFjZXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlc2UgY29kZSBwYXRocyBhcmUgaW5kZWVkIHJlYWNoYWJsZSB3aXRoaW4gUUVNVSBvciBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBncmVhdCBkZWFsLgoKVG8gZXhwYW5kIHRoZSBzY29wZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGBuZXQvbWFjODAyMTFgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbGAsIHNwZWNpZmljYWxseSB0aGUgYE1BQzgwMjExX0hXU0lNYCwgYE1BQzgwMjExYCwgYENGRzgwMjExYCwgYE5FVGAsIGFuZCBgSU5FVGAgY29uZmlnIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gRnVydGhlcm1vcmUsIEkmIzM5O2xsIGBncmVwYCBmb3IgYENPTkZJR19gIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AgYW5kIG90aGVyIGZpbGVzIHdpdGhpbiB0aGUgYHZpcnR1YWxgIGRpcmVjdG9yeSB0byBpZGVudGlmeSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgZXNwZWNpYWxseSBob3cgYHNrYmAmIzM5O3Mgc3RhdGUgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgYWNyb3NzIGRpZmZlcmVudCBOZXRsaW5rIGNvbW1hbmRzLCB0byBnZXQgYSBjbGVhciBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvTWFrZWZpbGU6MTpvYmotJChDT05GSUdfTUFDODAyMTFfSFdTSU0pXHQmIzQzOz0gbWFjODAyMTFfaHdzaW0ub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZS0yLW1hYzgwMjExX2h3c2ltLW9ianNcdFx0JiM0Mzs9IG1hYzgwMjExX2h3c2ltX21haW4ub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZT0zPW1hYzgwMjExX2h3c2ltLW9ianNcdFx0JiM0Mzs9IG1hYzgwMjExX2h3c2ltX25hbi5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZJUlRfV0lGSSlcdCYjNDM7PSB2aXJ0X3dpZmkub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTg2NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHdzaW1fZ2VubF9wb2xpY3lbSFdTSU1fQVRUUl9NQVggJiM0MzsgMV0gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtOTAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6OTAxOiNpZiBJU19SRUFDSEFCTEUoQ09ORklHX1ZJUlRJTylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTkwMi1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0yMzQ1PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0yMzY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MjM2NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTIzNjYtc3RhdGljIHZvaWRcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0yOTk3PW1hYzgwMjExX2h3c2ltX2Nhbl9uZWdfdHRsbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zMDEzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MzAxNDojaWZkZWYgQ09ORklHX05MODAyMTFfVEVTVE1PREVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTMwMTUtLypcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00Mjc3PXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fc2V0X3JhZGFyX2JhY2tncm91bmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDI5NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQyOTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00Mjk2LSNkZWZpbmUgSFdTSU1fREVCVUdGU19PUFNcdFx0XHRcdFx0XFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00NTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3NiYW5kX2lmdHlwZV9kYXRhIHNiYW5kX2NhcGFfMmdoeltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ3NTQtXHR9LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDc1NTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQ3NTYtXHR7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NDc5OD1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zYmFuZF9pZnR5cGVfZGF0YSBzYmFuZF9jYXBhXzVnaHpbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01MDY0LVx0fSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjUwNjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01MDY2LVx0e1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTUxMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc2JhbmRfaWZ0eXBlX2RhdGEgc2JhbmRfY2FwYV82Z2h6W10gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTQxOS1cdH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NDIwOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTQyMS1cdHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01NjExPXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3NiYW5kX2NhcGFiKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2MjctXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjI4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTYyOS0jZGVmaW5lIEhXU0lNX01FU0hfQklUIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTczMjc9c3RhdGljIHZvaWQgaHdzaW1fZXhpdF9uZXRsaW5rKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzMzNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjczMzU6I2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzMzNi1zdGF0aWMgdm9pZCBod3NpbV92aXJ0aW9fdHhfZG9uZShzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwMjgKCQkJCQkJCW91dHB1dDogMzAyCgkJCQkJCQl0aG91Z2h0czogNjg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE1vZGlmaWVkIG1hYzgwMjExX2h3c2ltIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRhc2tlZCB3aXRoIGV2YWx1YXRpbmcgc29tZSBjaGFuZ2VzIHRvIHRoZSBgbWFjODAyMTFfaHdzaW1gIGRyaXZlci4gTXkgaW5pdGlhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBJJiMzOTt2ZSBnb3QgYSBsaXN0OiBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubGAsIGBtYWM4MDIxMV9od3NpbV90eGAsIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgYW5kIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBhY2Nlc3NpYmxlLCBvciBpZiBzdGF0aWMsIHdoYXQgdGhlaXIgc3ltYm9sIHZpc2liaWxpdHkgaXMgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYW55IG9mIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBleHBvc2VkIGFzIHN5bWJvbHMgb3IgY2FsbGVkIGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCAqc3BlY2lmaWNhbGx5KiBjaGFuZ2VkIGluIGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zLiBJJiMzOTttIHNlZWluZyBzaWduaWZpY2FudCBhbHRlcmF0aW9ucyB0byBob3cgY2xvbmVkIGZyYW1lcyBhcmUgaGFuZGxlZCAoYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGApLCBpbmNsdWRpbmcgbWFuaXB1bGF0aW9uIG9mIHRoZSBwZW5kaW5nIHF1ZXVlIGFuZCB0aGUgdXNlIG9mIGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl90cmltYCwgYW5kIGBza2JfcHV0X2RhdGFgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBpdCBpbmRpY2F0ZXMgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGF0YSBoYW5kbGluZyBkdXJpbmcgZnJhbWUgY2xvbmluZy4gVGhlbiwgdGhlcmUmIzM5O3MgYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgLCB3aGljaCBub3cgZGVhbHMgd2l0aCBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCBhbmQga2VlcHMgdHJhY2sgb2YgdGhlIGNlbnRlciBmcmVxdWVuY3kuIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAgaXMgc3RvcmluZyBjaGFubmVsIGZyZXF1ZW5jeSBkYXRhIGFzIHdlbGwsIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGFuZCBgbWFjODAyMTFfaHdzaW1fdHhgIGhhdmUgc2lnbmF0dXJlIGFuZCB1c2FnZSB1cGRhdGVzLiBUaGlzIHN1Z2dlc3RzIGVuaGFuY2VtZW50cyBvciBtb2RpZmljYXRpb25zIHRvIG1vbml0b3IgY2FwYWJpbGl0aWVzLCBsaWtlbHkgdGllZCB0byB0aGUgbmV0d29yayBwcm90b2NvbCYjMzk7cyBsb3dlciBsZXZlbHMuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIFRoZSBkZXBlbmRlbmNpZXMgc2VlbSB0byBiZSBgTUFDODAyMTFfSFdTSU1gLCBgTUFDODAyMTFgLCBhbmQgYENGRzgwMjExYC4gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0OyBpdCBtYWtlcyBzZW5zZSB0aGF0IHRoZSB2aXJ0dWFsIGhhcmR3YXJlIHNpbXVsYXRpb24sIHRoZSBtYWM4MDIxMSBzdGFjaywgYW5kIHRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZSBhcmUgYWxsIHJlcXVpcmVkLgoKRmluYWxseSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIG92ZXJhbGwgY3JpdGVyaWEgZm9yIHRoZSBhc3Nlc3NtZW50IGFyZSBtZXQuIEZpcnN0LCB0aGUgZHJpdmVyIGl0c2VsZiBtdXN0IGJlIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2l0aG91dCByZXF1aXJpbmcgYW55IHBoeXNpY2FsIGhhcmR3YXJlOyBpdCBzb3VuZHMgbGlrZSB0aGF0JiMzOTtzIHRoZSBjYXNlLiBTZWNvbmQsIHRoZSBtb2RpZmllZCBsb2dpYyBtdXN0IGJlIHN1YnN0YW50aWFsLCB3aGljaCBpdCBhcHBlYXJzIHRvIGJlOiBmcmFtZSBjbG9uaW5nLCBwZW5kaW5nIGBza2JgIHJlcGxhY2VtZW50LCBtb25pdG9yIGNvbnRyb2wgYXJlIGFsbCBtb2RpZmllZC4gVGhpcmQsIHdlIGFyZSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zIEkgZW51bWVyYXRlZCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNgLiBGb3VydGgsIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIEFsbCBjcml0ZXJpYSBhcmUgbWV0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sJiMzNDssCiAgICAmIzM0O2h3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwmIzM0OywKICAgICYjMzQ7bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeCYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV90eCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtYWM4MDIxMV9od3NpbSwgYSBzb2Z0d2FyZS1lbXVsYXRlZCA4MDIuMTEgcmFkaW8gdGVzdGluZyB0b29sIGZ1bGx5IGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIGdlbmVyaWMgbmV0bGluay4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIGhhbmRsaW5nIGZvciBIV1NJTV9BVFRSX05PX01PTklUT1IsIG1vZGlmeSBjZW50ZXIgZnJlcXVlbmN5IHRyYWNraW5nIGFjcm9zcyBUWCBtb25pdG9yIHJlcG9ydGluZywgYW5kIGFkZCBsb2dpYyBpbiBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwgdG8gc2VhcmNoIHRoZSBwZW5kaW5nIHRyYW5zbWlzc2lvbiBxdWV1ZSBieSBjb29raWUgYW5kIG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiIGRhdGEgKHZpYSBwc2tiX2V4cGFuZF9oZWFkLCBza2JfdHJpbSwgYW5kIHNrYl9wdXRfZGF0YSkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBidWZmZXIgbWFuaXB1bGF0aW9uIGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIHNpbXVsYXRlZCByYWRpbyBUWC9SWCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwmIzM0OywKICAgICYjMzQ7aHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubCYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubCYjMzQ7LAogICAgJiMzNDttYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4JiMzNDssCiAgICAmIzM0O21hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrJiMzNDssCiAgICAmIzM0O21hYzgwMjExX2h3c2ltX3R4JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1hYzgwMjExX2h3c2ltLCBhIHNvZnR3YXJlLWVtdWxhdGVkIDgwMi4xMSByYWRpbyB0ZXN0aW5nIHRvb2wgZnVsbHkgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgZ2VuZXJpYyBuZXRsaW5rLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgaGFuZGxpbmcgZm9yIEhXU0lNX0FUVFJfTk9fTU9OSVRPUiwgbW9kaWZ5IGNlbnRlciBmcmVxdWVuY3kgdHJhY2tpbmcgYWNyb3NzIFRYIG1vbml0b3IgcmVwb3J0aW5nLCBhbmQgYWRkIGxvZ2ljIGluIGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCB0byBzZWFyY2ggdGhlIHBlbmRpbmcgdHJhbnNtaXNzaW9uIHF1ZXVlIGJ5IGNvb2tpZSBhbmQgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IgZGF0YSAodmlhIHBza2JfZXhwYW5kX2hlYWQsIHNrYl90cmltLCBhbmQgc2tiX3B1dF9kYXRhKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcyBpbiB0aGUgc2ltdWxhdGVkIHJhZGlvIFRYL1JYIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZGQgdGhlIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIG5ldGxpbmsgZmxhZyBhdHRyaWJ1dGUgZm9yIHNraXBwaW5nIG1vbml0b3IgcmVwb3J0cywgcHJlc2VydmVzIHRoZSB0cmFuc21pc3Npb24gY2hhbm5lbCBmcmVxdWVuY3kgaW4gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBhbmQgdXBkYXRlcyB0aGUgcGVuZGluZyB0cmFuc21pdHRlZCBza2IgaW4gYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgd2hlbiBtYXRjaGluZyBjb29raWUgYW5kIHRyYW5zbWl0dGVyIGF0dHJpYnV0ZXMgYXJlIHByb3ZpZGVkLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIChgZnJlcWAsIGBub19tb25pdG9yYCwgYGNvb2tpZWAsIGV0Yy4pIGFuZCBzdHJ1Y3R1cmUgbWVtYmVycyAoYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBgaGRyLVx1MDAzZXJ0X2NoYW5uZWxgKSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIFNLQiBtb2RpZmljYXRpb25zIHVzZSBgc2tiX3B1dF9kYXRhYCB3aXRoIHZlcmlmaWVkIHBheWxvYWQgbGVuZ3RocyBmcm9tIHZhbGlkYXRlZCBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZ3MsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgcmlza3MgcmVsYXRpbmcgdG8gU0tCIG1hbmlwdWxhdGlvbiwgcXVldWUgbG9ja2luZywgb3IgcmVmZXJlbmNlIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGRldGVjdG9ycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDViNzVhZjUxM2FlMWFmODc3OTJhMjBiNWFiYTQxNDE2MzUzZjk5OTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxNDoyNjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaAppbmRleCBhMDIyY2Q1YzBmMWM3Li4xZDJmZDA2YzU4NWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oCkBAIC0zLDcgJiM0MzszLDcgQEAKICAqIG1hYzgwMjExX2h3c2ltIC0gc29mdHdhcmUgc2ltdWxhdG9yIG9mIDgwMi4xMSByYWRpbyhzKSBmb3IgbWFjODAyMTEKICAqIENvcHlyaWdodCAoYykgMjAwOCwgSm91bmkgTWFsaW5lbiAmbHQ7akB3MS5maSZndDsKICAqIENvcHlyaWdodCAoYykgMjAxMSwgSmF2aWVyIExvcGV6ICZsdDtqbG9wZXhAZ21haWwuY29tJmd0OwotICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIyLTIwMjUgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbgogICovCiAKICNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9ICkBAIC0xNjIsNiAmIzQzOzE2Miw4IEBAIGVudW0gaHdzaW1fY29tbWFuZHMgewogICoJZWFjaCByYWRpbyBpbnN0ZWFkIG9mIGZvciB0aGUgd2lwaHkuCiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0U6IHN1cHBvcnQgTkFOIERldmljZSB2aXJ0dWFsIGludGVyZmFjZSAoZmxhZykKICAqIEBIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUjogYmFja2dyb3VuZCByYWRhci9DQUMgc3VwcG9ydCAoZmxhZykKJiM0MzsgKiBASFdTSU1fQVRUUl9OT19NT05JVE9SOiBza2lwIG1vbml0b3IgcmVwb3J0IGZvciB0aGlzIFRYIHN0YXR1cywgZS5nLiBpbiBjYXNlCiYjNDM7ICoJdGhlIGZyYW1lIHdhcyBuZXZlciByZXBvcnRlZCB0byBhbnkgcmVjZWl2ZXIgKGZsYWcpCiAgKiBAX19IV1NJTV9BVFRSX01BWDogZW51bSBsaW1pdAogICovCiBlbnVtIGh3c2ltX2F0dHJzIHsKQEAgLTE5Nyw2ICYjNDM7MTk5LDcgQEAgZW51bSBod3NpbV9hdHRycyB7CiAJSFdTSU1fQVRUUl9NVUxUSV9SQURJTywKIAlIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRSwKIAlIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUiwKJiM0MzsJSFdTSU1fQVRUUl9OT19NT05JVE9SLAogCV9fSFdTSU1fQVRUUl9NQVgsCiB9OwogI2RlZmluZSBIV1NJTV9BVFRSX01BWCAoX19IV1NJTV9BVFRSX01BWCAtIDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCmluZGV4IDAyYjZkODFjY2NkMTEuLmZjYTRiZjgyM2VmNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCkBAIC04OTUsNiAmIzQzOzg5NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBod3NpbV9nZW5sX3BvbGljeVtIV1NJTV9BVFRSX01BWCAmIzQzOyAxXSA9IHsKIAlbSFdTSU1fQVRUUl9NVUxUSV9SQURJT10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIAlbSFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0VdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiAJW0hXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAomIzQzOwlbSFdTSU1fQVRUUl9OT19NT05JVE9SXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogfTsKIAogI2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKQpAQCAtMTMzNyw3ICYjNDM7MTMzOCw3IEBAIG1hYzgwMjExX2h3c2ltX2dldF90eF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCiBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICp0eF9za2IsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKQomIzQzOwkJCQkgICAgICB1MzIgZnJlcSkKIHsKIAlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LSZndDtwcml2OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMzY5LDcgJiM0MzsxMzcwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAloZHItJmd0O3J0X3RzZnQgPSBfX21hYzgwMjExX2h3c2ltX2dldF90c2YoZGF0YSk7CiAJaGRyLSZndDtydF9mbGFncyA9IDA7CiAJaGRyLSZndDtydF9yYXRlID0gYml0cmF0ZSAvIDU7Ci0JaGRyLSZndDtydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hhbi0mZ3Q7Y2VudGVyX2ZyZXEpOwomIzQzOwloZHItJmd0O3J0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihmcmVxKTsKIAlmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7CiAJaWYgKHR4cmF0ZSAmYW1wOyZhbXA7IHR4cmF0ZS0mZ3Q7ZmxhZ3MgJmFtcDsgSUVFRTgwMjExX1JBVEVfRVJQX0cpCiAJCWZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE07CkBAIC0xMzg3LDggJiM0MzsxMzg4LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIH0KIAogCi1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgICAgIGNvbnN0IHU4ICphZGRyKQomIzQzO3N0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHUzMiBmcmVxLCBjb25zdCB1OCAqYWRkcikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBod3NpbV9yYWRpb3RhcF9hY2tfaGRyICpoZHI7CkBAIC0xNDEwLDcgJiM0MzsxNDEwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAogCQkJCQkgICgxICZsdDsmbHQ7IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSk7CiAJaGRyLSZndDtydF9mbGFncyA9IDA7CiAJaGRyLSZndDtwYWQgPSAwOwotCWhkci0mZ3Q7cnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tJmd0O2NlbnRlcl9mcmVxKTsKJiM0MzsJaGRyLSZndDtydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7CiAJZmxhZ3MgPSBJRUVFODAyMTFfQ0hBTl8yR0haOwogCWhkci0mZ3Q7cnRfY2hiaXRtYXNrID0gY3B1X3RvX2xlMTYoZmxhZ3MpOwogCkBAIC0xNzM1LDYgJiM0MzsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJaWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAomIzQzOwkvKiB0cmFjayB0aGUgZnJlcXVlbmN5ICovCiYjNDM7CWluZm8tJmd0O3JhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC0mZ3Q7Y2VudGVyX2ZyZXE7CiYjNDM7CiAJZ2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7CiAKIAlpZiAoaHdzaW1fdmlydGlvX2VuYWJsZWQpIHsKQEAgLTE5MTIsNyAmIzQzOzE5MTUsNyBAQCBzdGF0aWMgYm9vbCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAogCW1hYzgwMjExX2h3c2ltX3dyaXRlX3RzZihkYXRhLCBza2IsIHNpbV90c2YpOwogCi0JbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuKTsKJiM0MzsJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuLSZndDtjZW50ZXJfZnJlcSk7CiAKIAltZW1zZXQoJmFtcDtyeF9zdGF0dXMsIDAsIHNpemVvZihyeF9zdGF0dXMpKTsKIAlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQ7CkBAIC0yMjc2LDcgJiM0MzsyMjc5LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJYWNrID0gbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbm9fbmwoaHcsIHNrYiwgY2hhbm5lbCk7CiAKIAlpZiAoYWNrICZhbXA7JmFtcDsgc2tiLSZndDtsZW4gJmd0Oz0gMTYpCi0JCW1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGNoYW5uZWwsIGhkci0mZ3Q7YWRkcjIpOwomIzQzOwkJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soY2hhbm5lbC0mZ3Q7Y2VudGVyX2ZyZXEsIGhkci0mZ3Q7YWRkcjIpOwogCiAJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7CiAKQEAgLTYzOTEsNiAmIzQzOzYzOTQsOCBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlib29sIG5vX21vbml0b3I7CiYjNDM7CXUzMiBmcmVxOwogCiAJaWYgKCFpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdIHx8CiAJICAgICFpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSB8fApAQCAtNjQwMiw2ICYjNDM7NjQwNyw3IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsCiAJc3JjID0gKHZvaWQgKilubGFfZGF0YShpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTsKIAlod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTsKIAlyZXRfc2tiX2Nvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSk7CiYjNDM7CW5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7CiAKIAlkYXRhMiA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoc3JjKTsKIAlpZiAoIWRhdGEyKQpAQCAtNjQzNiw3ICYjNDM7NjQ0MiwxMSBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCWlmICghZm91bmQpCiAJCWdvdG8gb3V0OwogCi0JbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi0mZ3Q7aHcsIHNrYiwgZGF0YTItJmd0O2NoYW5uZWwpOwomIzQzOwl0eGkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiYjNDM7CWZyZXEgPSAodWludHB0cl90KXR4aS0mZ3Q7cmF0ZV9kcml2ZXJfZGF0YVsxXTsKJiM0MzsKJiM0MzsJaWYgKCFub19tb25pdG9yKQomIzQzOwkJbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi0mZ3Q7aHcsIHNrYiwgZnJlcSk7CiAKIAkvKiBUeCBpbmZvIHJlY2VpdmVkIGJlY2F1c2UgdGhlIGZyYW1lIHdhcyBicm9hZGNhc3RlZCBvbiB1c2VyIHNwYWNlLAogCSBzbyB3ZSBnZXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mbzogdHggYXR0ZW1wdHMgYW5kIHNrYiBjb250cm9sIGJ1ZmYgKi8KQEAgLTY0NDUsOCAmIzQzOzY0NTUsNiBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCQkgICAgICAgaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7CiAKIAkvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqLwotCXR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQogCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGkpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkmIzQzOyYjNDM7KSB7CkBAIC02NDY2LDggJiM0Mzs2NDc0LDcgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMiwKIAlpZiAoIShod3NpbV9mbGFncyAmYW1wOyBIV1NJTV9UWF9DVExfTk9fQUNLKSAmYW1wOyZhbXA7CiAJICAgKGh3c2ltX2ZsYWdzICZhbXA7IEhXU0lNX1RYX1NUQVRfQUNLKSkgewogCQlpZiAoc2tiLSZndDtsZW4gJmd0Oz0gMTYpCi0JCQltYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhkYXRhMi0mZ3Q7Y2hhbm5lbCwKLQkJCQkJCSAgIGhkci0mZ3Q7YWRkcjIpOwomIzQzOwkJCW1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGZyZXEsIGhkci0mZ3Q7YWRkcjIpOwogCQl0eGktJmd0O2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAl9CiAKQEAgLTY1MzUsNiAmIzQzOzY1NDIsNTEgQEAgc3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLAogCQkJZ290byBvdXQ7CiAJfQogCiYjNDM7CS8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi8KJiM0MzsJaWYgKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpbmZvLSZndDthdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKSB7CiYjNDM7CQl1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby0mZ3Q7YXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTsKJiM0MzsJCXN0cnVjdCBza19idWZmICpvcmlnX3NrYiwgKmZvdW5kID0gTlVMTDsKJiM0MzsJCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICp0eGRhdGE7CiYjNDM7CQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTsKJiM0MzsJCWNvbnN0IHU4ICp0cmFuc21pdHRlcjsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CQl0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tJmd0O2F0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pOwomIzQzOwkJdHhkYXRhID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcih0cmFuc21pdHRlcik7CiYjNDM7CQlpZiAoIXR4ZGF0YSB8fCB0eGRhdGEtJmd0O25ldGdyb3VwICE9IGRhdGEyLSZndDtuZXRncm91cCkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHhkYXRhLSZndDtwZW5kaW5nLmxvY2ssIGZsYWdzKTsKJiM0MzsJCXNrYl9xdWV1ZV93YWxrKCZhbXA7dHhkYXRhLSZndDtwZW5kaW5nLCBvcmlnX3NrYikgewomIzQzOwkJCXVpbnRwdHJfdCBza2JfY29va2llOwomIzQzOwomIzQzOwkJCXR4aSA9IElFRUU4MDIxMV9TS0JfQ0Iob3JpZ19za2IpOwomIzQzOwkJCXNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS0mZ3Q7cmF0ZV9kcml2ZXJfZGF0YVswXTsKJiM0MzsKJiM0MzsJCQlpZiAoc2tiX2Nvb2tpZSA9PSBjb29raWUpIHsKJiM0MzsJCQkJZm91bmQgPSBvcmlnX3NrYjsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogdGhhdCYjMzk7cyB3ZWlyZCAqLwomIzQzOwkJaWYgKCFmb3VuZCkgewomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eGRhdGEtJmd0O3BlbmRpbmcubG9jaywgZmxhZ3MpOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGZyYW1lX2RhdGFfbGVuICZndDsgZm91bmQtJmd0O2xlbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcHNrYl9leHBhbmRfaGVhZChmb3VuZCwgMCwgZnJhbWVfZGF0YV9sZW4gLSBmb3VuZC0mZ3Q7bGVuLAomIzQzOwkJCQkgICAgIEdGUF9BVE9NSUMpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3R4ZGF0YS0mZ3Q7cGVuZGluZy5sb2NrLCBmbGFncyk7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CQlza2JfdHJpbShmb3VuZCwgMCk7CiYjNDM7CQlza2JfcHV0X2RhdGEoZm91bmQsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eGRhdGEtJmd0O3BlbmRpbmcubG9jaywgZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiAJLyogY2hlY2sgaWYgcmFkaW8gaXMgY29uZmlndXJlZCBwcm9wZXJseSAqLwogCiAJaWYgKChkYXRhMi0mZ3Q7aWRsZSAmYW1wOyZhbXA7ICFkYXRhMi0mZ3Q7dG1wX2NoYW4pIHx8ICFkYXRhMi0mZ3Q7c3RhcnRlZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MjgKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA2NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtYWM4MDIxMV9od3NpbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgS01TQU4gaXMgYSBjb25jZXJuIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSB0b3VjaGVkIGZpbGVzOiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oYCBhbmQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYC4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIG1hYzgwMjExX2h3c2ltIHZpcnR1YWwgd2lyZWxlc3MgZHJpdmVyLCB3aGljaCBpcyB1c3VhbGx5IGEgZ29vZCB0aGluZyB0byBwYXkgYXR0ZW50aW9uIHRvLgoKRmlyc3QsIGBtYWM4MDIxMV9od3NpbS5oYCBhZGRzIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIHRvIHRoZSBgaHdzaW1fYXR0cnNgIGVudW0uIEEgZmxhZy4uLmludGVyZXN0aW5nLiAgVGhlbiwgYG1hYzgwMjExX2h3c2ltX21haW4uY2AgaXMgd2hlcmUgdGhpbmdzIGdldCBtb3JlIGludGVyZXN0aW5nLiAgV2UmIzM5O3JlIHNlZWluZyBgW0hXU0lNX0FUVFJfTk9fTU9OSVRPUl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfWAgYWRkZWQgdG8gdGhlIGBod3NpbV9nZW5sX3BvbGljeWAuIFNvLCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgbmV3IGF0dHJpYnV0ZSBleHBvc2VkIHZpYSBOZXRsaW5rLgoKVGhlIGNvZGUgbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tgIHRvIHVzZSBhIGB1MzIgZnJlcWAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5gLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgY2hhbmdlIGluIGhvdyBmcmVxdWVuY3kgaW5mb3JtYXRpb24gaXMgaGFuZGxlZC4gIFdlJiMzOTtyZSBhbHNvIHNlZWluZyB0aGUgYGNoYW5uZWwtJmd0O2NlbnRlcl9mcmVxYCBiZWluZyBzYXZlZCBpbnRvIGBpbmZvLSZndDtyYXRlX2RyaXZlcl9kYXRhWzFdYCBpbiBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgIGFuZCBwYXNzZWQgZGlyZWN0bHkgaW4gb3RoZXIgZnVuY3Rpb25zLgoKTm93LCB0aGluZ3MgZ2V0IGEgYml0IG1vcmUgaW52b2x2ZWQuIEluIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgdGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYG5vX21vbml0b3JgIGJhc2VkIG9uIHRoZSBuZXcgZmxhZy4gSWYgbm90IHNldCwgaXQgY2FsbHMgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tgIHdpdGggdGhlIGZyZXF1ZW5jeS4gVGhhdCBtYWtlcyBzZW5zZSwgd2Ugd2FudCB0byBjb250cm9sIHRoZSBtb25pdG9yIGZ1bmN0aW9uLgoKSGVyZSYjMzk7cyB0aGUgYml0IHRoYXQgcmVhbGx5IHJlcXVpcmVzIGNhcmVmdWwgYW5hbHlzaXM6IGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLiBJdCBhcHBlYXJzIHRvIGJlIGhhbmRsaW5nIGNsb25lZCBTS0JzIHdpdGhpbiBhIHBlbmRpbmcgVFggcXVldWUuICBUaGUgY29kZSBsb29rcyBmb3IgYW4gb3JpZ2luYWwgU0tCIGJhc2VkIG9uIGEgY29va2llLiBJZiBmb3VuZCwgaXQgY2hlY2tzIGlmIGBmcmFtZV9kYXRhX2xlbmAgaXMgZ3JlYXRlciB0aGFuIGBmb3VuZC0mZ3Q7bGVuYCwgYW5kIGV4cGFuZHMgdGhlIGhlYWRlciBpZiBuZWNlc3NhcnkuIFRoZW4sIGl0IGNhbGxzIGBza2JfdHJpbShmb3VuZCwgMClgIGFuZCBzdWJzZXF1ZW50bHkgY29waWVzIGRhdGEgdXNpbmcgYHNrYl9wdXRfZGF0YShmb3VuZCwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgY29weS4gSXMgdGhpcyBjb3B5aW5nIGludG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGFsd2F5cyByYWlzZXMgbXkgaGFja2xlcywgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBgZnJhbWVfZGF0YWAgYW5kIGBmcmFtZV9kYXRhX2xlbmAgYXJlIGluaXRpYWxpemVkIHRvIGtub3cgaWYgd2UgY2FuIGhhdmUgYSBLTVNBTiBwcm9ibGVtIGhlcmUuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbnMgZm9yIHRob3NlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZXNlIGFyZSBzYWZlIHRvIHVzZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxNDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz02MzgyPXN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjQ5MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjY0OTE6c3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjQ5Mi1cdFx0XHRcdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBod3NpbV9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MTY2LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3MTY3Olx0XHQuZG9pdCA9IGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNjgtXHR9LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTczNDg9c3RhdGljIGludCBod3NpbV92aXJ0aW9faGFuZGxlX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTczNzItXHRjYXNlIEhXU0lNX0NNRF9GUkFNRTpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjczNzM6XHRcdGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubChza2IsIFx1MDAyNmluZm8pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzM3NC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjIKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYCBhbmQgaXRzIENvbnRleHQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIGZ1bmN0aW9uIGFuZCBpdHMgc3Vycm91bmRpbmcgY29kZSBpbiB0aGUgaGFyZHdhcmUgc2ltdWxhdG9yLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBoZXJlIOKAkyBob3cgY2xvbmVkIGZyYW1lcyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgTmV0bGluayBwYXRoLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIGVudmlyb25tZW50LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCwgd2hhdCBkYXRhIGl0IHJlY2VpdmVzIGFzIGlucHV0LCBhbmQgaG93IHRoYXQgZGF0YSBpcyBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IHBhc3NlZCB1cCB0aGUgc3RhY2suCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWFsaW5nIHdpdGggc2hhcmVkIHJlc291cmNlcyBvciBzdGF0ZSByZWxhdGVkIHRvIHNpbXVsYXRlZCBoYXJkd2FyZS4gQXJlIHRoZXJlIGFueSBsb2NrcyBpbnZvbHZlZCwgYW5kIGlmIHNvLCB3aGF0JiMzOTtzIHRoZWlyIHNjb3BlIGFuZCBob3cgYXJlIHRoZXkgYWNxdWlyZWQgYW5kIHJlbGVhc2VkPyBJIGFsc28gZXhwZWN0IHRvIHNlZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjaywgYW5kIEkmIzM5O20ga2VlbiB0byBzcG90IGlmIGFueSBjdXN0b20gTmV0bGluayBhdHRyaWJ1dGVzIG9yIGNvbW1hbmRzIGFyZSBiZWluZyB1c2VkIGZvciB0aGlzIHNpbXVsYXRlZCBoYXJkd2FyZS4gSSYjMzk7bSBob3BpbmcgdG8gdW5jb3ZlciBhbnkgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NDkwOlx0XG42NDkxOlx0c3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuNjQ5MjpcdFx0XHRcdFx0XHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG42NDkzOlx0e1xuNjQ5NDpcdFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEyO1xuNjQ5NTpcdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzO1xuNjQ5NjpcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbjY0OTc6XHRcdGNvbnN0IHU4ICpkc3Q7XG42NDk4Olx0XHRpbnQgZnJhbWVfZGF0YV9sZW47XG42NDk5Olx0XHR2b2lkICpmcmFtZV9kYXRhO1xuNjUwMDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG42NTAxOlx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBOVUxMO1xuNjUwMjpcdFxuNjUwMzpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0gfHxcbjY1MDQ6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSB8fFxuNjUwNTpcdFx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfUlhfUkFURV0gfHxcbjY1MDY6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1NJR05BTF0pXG42NTA3Olx0XHRcdGdvdG8gb3V0O1xuNjUwODpcdFxuNjUwOTpcdFx0ZHN0ID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0pO1xuNjUxMDpcdFx0ZnJhbWVfZGF0YV9sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GUkFNRV0pO1xuNjUxMTpcdFx0ZnJhbWVfZGF0YSA9ICh2b2lkICopbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSk7XG42NTEyOlx0XG42NTEzOlx0XHRpZiAoZnJhbWVfZGF0YV9sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgfHxcbjY1MTQ6XHRcdCAgICBmcmFtZV9kYXRhX2xlbiBcdTAwM2UgSUVFRTgwMjExX01BWF9EQVRBX0xFTilcbjY1MTU6XHRcdFx0Z290byBlcnI7XG42NTE2Olx0XG42NTE3Olx0XHQvKiBBbGxvY2F0ZSBuZXcgc2tiIGhlcmUgKi9cbjY1MTg6XHRcdHNrYiA9IGFsbG9jX3NrYihmcmFtZV9kYXRhX2xlbiwgR0ZQX0tFUk5FTCk7XG42NTE5Olx0XHRpZiAoc2tiID09IE5VTEwpXG42NTIwOlx0XHRcdGdvdG8gZXJyO1xuNjUyMTpcdFxuNjUyMjpcdFx0LyogQ29weSB0aGUgZGF0YSAqL1xuNjUyMzpcdFx0c2tiX3B1dF9kYXRhKHNrYiwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pO1xuNjUyNDpcdFxuNjUyNTpcdFx0ZGF0YTIgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGRzdCk7XG42NTI2Olx0XHRpZiAoIWRhdGEyKVxuNjUyNzpcdFx0XHRnb3RvIG91dDtcbjY1Mjg6XHRcbjY1Mjk6XHRcdGlmIChkYXRhMi1cdTAwM2V1c2VfY2hhbmN0eCkge1xuNjUzMDpcdFx0XHRpZiAoZGF0YTItXHUwMDNldG1wX2NoYW4pXG42NTMxOlx0XHRcdFx0Y2hhbm5lbCA9IGRhdGEyLVx1MDAzZXRtcF9jaGFuO1xuNjUzMjpcdFx0fSBlbHNlIHtcbjY1MzM6XHRcdFx0Y2hhbm5lbCA9IGRhdGEyLVx1MDAzZWNoYW5uZWw7XG42NTM0Olx0XHR9XG42NTM1Olx0XG42NTM2Olx0XHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XG42NTM3Olx0XHRcdGlmIChod3NpbV9uZXRfZ2V0X25ldGdyb3VwKGdlbmxfaW5mb19uZXQoaW5mbykpICE9XG42NTM4Olx0XHRcdCAgICBkYXRhMi1cdTAwM2VuZXRncm91cClcbjY1Mzk6XHRcdFx0XHRnb3RvIG91dDtcbjY1NDA6XHRcbjY1NDE6XHRcdFx0aWYgKGluZm8tXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cdTAwM2V3bWVkaXVtZClcbjY1NDI6XHRcdFx0XHRnb3RvIG91dDtcbjY1NDM6XHRcdH1cbjY1NDQ6XHRcbjY1NDU6XHRcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cbjY1NDY6XHRcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcdTAwMjZcdTAwMjZcbjY1NDc6XHRcdCAgICBpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pIHtcbjY1NDg6XHRcdFx0dTY0IGNvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcbjY1NDk6XHRcdFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xuNjU1MDpcdFx0XHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqdHhkYXRhO1xuNjU1MTpcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTtcbjY1NTI6XHRcdFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xuNjU1MzpcdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNjU1NDpcdFxuNjU1NTpcdFx0XHR0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG42NTU2Olx0XHRcdHR4ZGF0YSA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIodHJhbnNtaXR0ZXIpO1xuNjU1NzpcdFx0XHRpZiAoIXR4ZGF0YSB8fCB0eGRhdGEtXHUwMDNlbmV0Z3JvdXAgIT0gZGF0YTItXHUwMDNlbmV0Z3JvdXApXG42NTU4Olx0XHRcdFx0Z290byBvdXQ7XG42NTU5Olx0XG42NTYwOlx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbjY1NjE6XHRcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcsIG9yaWdfc2tiKSB7XG42NTYyOlx0XHRcdFx0dWludHB0cl90IHNrYl9jb29raWU7XG42NTYzOlx0XG42NTY0Olx0XHRcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihvcmlnX3NrYik7XG42NTY1Olx0XHRcdFx0c2tiX2Nvb2tpZSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF07XG42NTY2Olx0XG42NTY3Olx0XHRcdFx0aWYgKHNrYl9jb29raWUgPT0gY29va2llKSB7XG42NTY4Olx0XHRcdFx0XHRmb3VuZCA9IG9yaWdfc2tiO1xuNjU2OTpcdFx0XHRcdFx0YnJlYWs7XG42NTcwOlx0XHRcdFx0fVxuNjU3MTpcdFx0XHR9XG42NTcyOlx0XG42NTczOlx0XHRcdC8qIHRoYXQmIzM5O3Mgd2VpcmQgKi9cbjY1NzQ6XHRcdFx0aWYgKCFmb3VuZCkge1xuNjU3NTpcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuNjU3NjpcdFx0XHRcdGdvdG8gb3V0O1xuNjU3NzpcdFx0XHR9XG42NTc4Olx0XG42NTc5Olx0XHRcdGlmIChmcmFtZV9kYXRhX2xlbiBcdTAwM2UgZm91bmQtXHUwMDNlbGVuIFx1MDAyNlx1MDAyNlxuNjU4MDpcdFx0XHQgICAgcHNrYl9leHBhbmRfaGVhZChmb3VuZCwgMCwgZnJhbWVfZGF0YV9sZW4gLSBmb3VuZC1cdTAwM2VsZW4sXG42NTgxOlx0XHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpKSB7XG42NTgyOlx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG42NTgzOlx0XHRcdFx0Z290byBvdXQ7XG42NTg0Olx0XHRcdH1cbjY1ODU6XHRcdFx0c2tiX3RyaW0oZm91bmQsIDApO1xuNjU4NjpcdFx0XHRza2JfcHV0X2RhdGEoZm91bmQsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTtcbjY1ODc6XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG42NTg4Olx0XHR9XG42NTg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMjYKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBMb3NzIGluIFNpbXVsYXRlZCA4MDIuMTEgVHJhbnNtaXNzaW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgc2ltdWxhdGVkIDgwMi4xMSBlbnZpcm9ubWVudCBhZ2Fpbi4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgZmxvdyBhcm91bmQgdHJhbnNtaXNzaW9uLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB2ZXJpZnlpbmcgdGhlcmUgYXJlIG5vIGRhdGEtbG9zcyBpc3N1ZXMgaGFwcGVuaW5nIGluc2lkZSB0aGUga2VybmVsIGl0c2VsZi4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbiBwb2ludHMgYmV0d2VlbiB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBhbmQgdGhlIG1hYzgwMjExIHN0YWNrLiBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgIHNlZW1zIGxpa2UgYSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGZyYW1lcyBkZXN0aW5lZCBmb3IgdGhlIHNpbXVsYXRlZCBoYXJkd2FyZSwgc28gbGV0JiMzOTtzIGNoZWNrIHRoYXQuIFRoZW4sIHNpbmNlIHRoaXMgaXMgYWxsIGludGVybmFsLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbmZvcm1hdGlvbiBvbiB3aGF0IGhhcHBlbmVkIHRvIHRoZSBmcmFtZSBpcyBwcm9wZXJseSBwcm9wYWdhdGVkIGJhY2sgdXAuIFRoZXJlZm9yZSBJIG5lZWQgdG8gY2hlY2sgYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgIHdoaWNoIEkgYmVsaWV2ZSBpcyB3aGVyZSB0aGF0IGluZm9ybWF0aW9uIGdldHMgc2VudC4gSSBuZWVkIHRvIHJldmlldyB0aGVzZSBmdW5jdGlvbnMgY2FyZWZ1bGx5LiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgbm90aWZpY2F0aW9ucywgb3IgZGF0YSBjb3JydXB0aW9uIGR1cmluZyB0aGlzIHByb2Nlc3MuIEEgYml0IG9mIHN0YXRpYyBhbmFseXNpcyBpcyBwcm9iYWJseSB0aGUgYmVzdCBmaXJzdCBzdGVwLiBHb3R0YSBlbnN1cmUgdGhhdCBldmVyeXRoaW5nIGlzIHBsYXlpbmcgbmljZWx5IGluIHRoaXMgc2ltdWxhdGVkIGVudmlyb25tZW50IHRvIHByZXZlbnQgdW5leHBlY3RlZCBkcm9wcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcyNTpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE3MjY6XHRcbjE3Mjc6XHRcdGlmIChubGFfcHV0KHNrYiwgSFdTSU1fQVRUUl9UWF9JTkZPX0ZMQUdTLFxuMTcyODpcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBod3NpbV90eF9yYXRlX2ZsYWcpICogSUVFRTgwMjExX1RYX01BWF9SQVRFUyxcbjE3Mjk6XHRcdFx0ICAgIHR4X2F0dGVtcHRzX2ZsYWdzKSlcbjE3MzA6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzMxOlx0XG4xNzMyOlx0XHQvKiBXZSBjcmVhdGUgYSBjb29raWUgdG8gaWRlbnRpZnkgdGhpcyBza2IgKi9cbjE3MzM6XHRcdGNvb2tpZSA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRhdGEtXHUwMDNlcGVuZGluZ19jb29raWUpO1xuMTczNDpcdFx0aW5mby1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzBdID0gKHZvaWQgKiljb29raWU7XG4xNzM1Olx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBIV1NJTV9BVFRSX0NPT0tJRSwgY29va2llLCBIV1NJTV9BVFRSX1BBRCkpXG4xNzM2Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuMTczNzpcdFxuMTczODpcdFx0LyogdHJhY2sgdGhlIGZyZXF1ZW5jeSAqL1xuMTczOTpcdFx0aW5mby1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdID0gKHZvaWQgKikodWludHB0cl90KWNoYW5uZWwtXHUwMDNlY2VudGVyX2ZyZXE7XG4xNzQwOlx0XG4xNzQxOlx0XHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcbjE3NDI6XHRcbjE3NDM6XHRcdGlmIChod3NpbV92aXJ0aW9fZW5hYmxlZCkge1xuMTc0NDpcdFx0XHRpZiAoaHdzaW1fdHhfdmlydGlvKGRhdGEsIHNrYikpXG4xNzQ1Olx0XHRcdFx0Z290byBlcnJfZnJlZV90eHNrYjtcbjE3NDY6XHRcdH0gZWxzZSB7XG4xNzQ3Olx0XHRcdGlmIChod3NpbV91bmljYXN0X25ldGdyb3VwKGRhdGEsIHNrYiwgZHN0X3BvcnRpZCkpXG4xNzQ4Olx0XHRcdFx0Z290byBlcnJfZnJlZV90eHNrYjtcbjE3NDk6XHRcdH1cbjE3NTA6XHRcbjE3NTE6XHRcdC8qIEVucXVldWUgdGhlIHBhY2tldCAqL1xuMTc1MjpcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2ZGF0YS1cdTAwM2VwZW5kaW5nLCBteV9za2IpO1xuMTc1MzpcdFx0ZGF0YS1cdTAwM2V0eF9wa3RzJiM0MzsmIzQzOztcbjE3NTQ6XHRcdGRhdGEtXHUwMDNldHhfYnl0ZXMgJiM0Mzs9IG15X3NrYi1cdTAwM2VsZW47XG4xNzU1Olx0XHRyZXR1cm47XG4xNzU2Olx0XG4xNzU3Olx0bmxhX3B1dF9mYWlsdXJlOlxuMTc1ODpcdFx0bmxtc2dfZnJlZShza2IpO1xuMTc1OTpcdGVycl9mcmVlX3R4c2tiOlxuMTc2MDpcdFx0cHJfZGVidWcoXCYjMzQ7bWFjODAyMTFfaHdzaW06IGVycm9yIG9jY3VycmVkIGluICVzXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4xNzYxOlx0XHRpZWVlODAyMTFfZnJlZV90eHNrYihodywgbXlfc2tiKTtcbjE3NjI6XHRcdGRhdGEtXHUwMDNldHhfZmFpbGVkJiM0MzsmIzQzOztcbjE3NjM6XHR9XG4xNzY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzY5CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBSZWNlaXZlciBQYXRoKioKCkFscmlnaHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgcmVjZWl2ZSBwYXRoLiBJJiMzOTt2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBzdGFuZGFyZCBmbG93LCBidXQgYSBnb29kIGVuZ2luZWVyIGtub3dzIHRvIGRvdWJsZS1jaGVjayBlZGdlIGNhc2VzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gcnVuIGEgZGlhZ25vc3RpY3MgY2hlY2sgb24gYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgIG5vdy4gSXQmIzM5O3MgcG9zc2libGUgdGhlcmUgYXJlIHNvbWUgaXNzdWVzIHdpdGggdGhlIFRYIEluZm8gRnJhbWUgaGFuZGxpbmcsIGFuZCB0aGlzIGNvdWxkIGJlIHN1YnRseSBpbXBhY3RpbmcgdGhlIFJYIHNpZGUgb3IgaGlkaW5nIHNvbWUgb3RoZXIgaXNzdWVzLiBJdCYjMzk7cyBhIGtleSBzcG90IHRoYXQgY2FuIGdpdmUgdXMgaGludHMgZm9yIGRlZXBlciBkZWJ1Z2dpbmcgaWYgb3RoZXIgZGlhZ25vc3RpY3MgY29tZSB1cCBlbXB0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjM4MjpcdHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG42MzgzOlx0XHRcdFx0XHRcdCAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG42Mzg0Olx0e1xuNjM4NTpcdFxuNjM4NjpcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbjYzODc6XHRcdHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhMjtcbjYzODg6XHRcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpO1xuNjM4OTpcdFx0c3RydWN0IGh3c2ltX3R4X3JhdGUgKnR4X2F0dGVtcHRzO1xuNjM5MDpcdFx0dTY0IHJldF9za2JfY29va2llO1xuNjM5MTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDtcbjYzOTI6XHRcdGNvbnN0IHU4ICpzcmM7XG42MzkzOlx0XHR1bnNpZ25lZCBpbnQgaHdzaW1fZmxhZ3M7XG42Mzk0Olx0XHRpbnQgaTtcbjYzOTU6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG42Mzk2Olx0XHRib29sIGZvdW5kID0gZmFsc2U7XG42Mzk3Olx0XHRib29sIG5vX21vbml0b3I7XG42Mzk4Olx0XHR1MzIgZnJlcTtcbjYzOTk6XHRcbjY0MDA6XHRcdGlmICghaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdIHx8XG42NDAxOlx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10gfHxcbjY0MDI6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0gfHxcbjY0MDM6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1NJR05BTF0gfHxcbjY0MDQ6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1RYX0lORk9dKVxuNjQwNTpcdFx0XHRnb3RvIG91dDtcbjY0MDY6XHRcbjY0MDc6XHRcdHNyYyA9ICh2b2lkICopbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTtcbjY0MDg6XHRcdGh3c2ltX2ZsYWdzID0gbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSk7XG42NDA5Olx0XHRyZXRfc2tiX2Nvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcbjY0MTA6XHRcdG5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX05PX01PTklUT1JdKTtcbjY0MTE6XHRcbjY0MTI6XHRcdGRhdGEyID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcihzcmMpO1xuNjQxMzpcdFx0aWYgKCFkYXRhMilcbjY0MTQ6XHRcdFx0Z290byBvdXQ7XG42NDE1Olx0XG42NDE2Olx0XHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XG42NDE3Olx0XHRcdGlmIChod3NpbV9uZXRfZ2V0X25ldGdyb3VwKGdlbmxfaW5mb19uZXQoaW5mbykpICE9XG42NDE4Olx0XHRcdCAgICBkYXRhMi1cdTAwM2VuZXRncm91cClcbjY0MTk6XHRcdFx0XHRnb3RvIG91dDtcbjY0MjA6XHRcbjY0MjE6XHRcdFx0aWYgKGluZm8tXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cdTAwM2V3bWVkaXVtZClcbjY0MjI6XHRcdFx0XHRnb3RvIG91dDtcbjY0MjM6XHRcdH1cbjY0MjQ6XHRcbjY0MjU6XHRcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cbjY0MjY6XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRhdGEyLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuNjQyNzpcdFx0c2tiX3F1ZXVlX3dhbGtfc2FmZShcdTAwMjZkYXRhMi1cdTAwM2VwZW5kaW5nLCBza2IsIHRtcCkge1xuNjQyODpcdFx0XHR1aW50cHRyX3Qgc2tiX2Nvb2tpZTtcbjY0Mjk6XHRcbjY0MzA6XHRcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuNjQzMTpcdFx0XHRza2JfY29va2llID0gKHVpbnRwdHJfdCl0eGktXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXTtcbjY0MzI6XHRcbjY0MzM6XHRcdFx0aWYgKHNrYl9jb29raWUgPT0gcmV0X3NrYl9jb29raWUpIHtcbjY0MzQ6XHRcdFx0XHRfX3NrYl91bmxpbmsoc2tiLCBcdTAwMjZkYXRhMi1cdTAwM2VwZW5kaW5nKTtcbjY0MzU6XHRcdFx0XHRmb3VuZCA9IHRydWU7XG42NDM2Olx0XHRcdFx0YnJlYWs7XG42NDM3Olx0XHRcdH1cbjY0Mzg6XHRcdH1cbjY0Mzk6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGF0YTItXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG42NDQwOlx0XG42NDQxOlx0XHQvKiBub3QgZm91bmQgKi9cbjY0NDI6XHRcdGlmICghZm91bmQpXG42NDQzOlx0XHRcdGdvdG8gb3V0O1xuNjQ0NDpcdFxuNjQ0NTpcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuNjQ0NjpcdFx0ZnJlcSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV07XG42NDQ3Olx0XG42NDQ4Olx0XHRpZiAoIW5vX21vbml0b3IpXG42NDQ5Olx0XHRcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXHUwMDNlaHcsIHNrYiwgZnJlcSk7XG42NDUwOlx0XG42NDUxOlx0XHQvKiBUeCBpbmZvIHJlY2VpdmVkIGJlY2F1c2UgdGhlIGZyYW1lIHdhcyBicm9hZGNhc3RlZCBvbiB1c2VyIHNwYWNlLFxuNjQ1MjpcdFx0IHNvIHdlIGdldCBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvOiB0eCBhdHRlbXB0cyBhbmQgc2tiIGNvbnRyb2wgYnVmZiAqL1xuNjQ1MzpcdFxuNjQ1NDpcdFx0dHhfYXR0ZW1wdHMgPSAoc3RydWN0IGh3c2ltX3R4X3JhdGUgKilubGFfZGF0YShcbjY0NTU6XHRcdFx0ICAgICAgIGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XG42NDU2Olx0XG42NDU3Olx0XHQvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqL1xuNjQ1ODpcdFx0aWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7XG42NDU5Olx0XG42NDYwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpJiM0MzsmIzQzOykge1xuNjQ2MTpcdFx0XHR0eGktXHUwMDNlc3RhdHVzLnJhdGVzW2ldLmlkeCA9IHR4X2F0dGVtcHRzW2ldLmlkeDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTUKCQkJCQkJCW91dHB1dDogMjQxCgkJCQkJCQl0aG91Z2h0czogMTAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBLTVNBTiBOZWVkZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgdGhlIGNvcmUgY2hhbmdlcyBhcmU6IGEgbmV3IGBIV1NJTV9BVFRSX05PX01PTklUT1JgIGF0dHJpYnV0ZSBmb3Igc2VsZWN0aXZlbHkgZGlzYWJsaW5nIG1vbml0b3IgZnJhbWVzLCBzdG9yYWdlIGFuZCByZXRyaWV2YWwgb2YgdGhlIHRyYW5zbWlzc2lvbiBmcmVxdWVuY3kgdmlhIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYW5kIHRoZSBhYmlsaXR5IHRvIHVwZGF0ZSBhIHBlbmRpbmcgZnJhbWUmIzM5O3MgZGF0YSBmcm9tIGEgbmV0bGluayBtZXNzYWdlLgoKTXkgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFNvLCBJIHdlbnQgdGhyb3VnaCBpdCB3aXRoIGEgZmluZS10b290aGVkIGNvbWIuIFRoZSBmcmVxdWVuY3ksIG5vdyBzdG9yZWQgaW4gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgZnJhbWUgZGF0YSBjb3BpZWQgaW50byB0aGUgc2tiIGluIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIG5ldGxpbmsgbWVzc2FnZSwgYW5kIGxlbmd0aCBjaGVja3MgYXJlIGluIHBsYWNlLCBzbyB0aGUgZGF0YSBpcyBib3VuZGVkLCBhbmQgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBtb25pdG9yIGZ1bmN0aW9ucyBhbHNvIHJlY2VpdmUgdGhlIGZyZXF1ZW5jeSBhcyBhIGB1MzJgIGFuZCB3cml0ZSBpdCB0byBhIGhlYWRlciBmaWVsZC4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcywgbm90aGluZyBpcyBnZXR0aW5nIGNvcGllZCB0byB1c2Vyc3BhY2UgdW5pbml0aWFsaXplZCwgbm8gY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gaW5mb3JtYXRpb24gbGVha3MuCgpHaXZlbiB0aGF0IEkga25vdyB0aGUgS01TQU4gZ3VpZGVsaW5lcyB3ZWxsLCBJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGUgcnVsZXMuIFRoZSBwYXRjaCBjaGFuZ2VzIGFuZCBhZGRpdGlvbnM6IGBIV1NJTV9BVFRSX05PX01PTklUT1JgLCBgZnJlcWAsIGBza2JfY29va2llYCwgYW5kIGByYXRlX2RyaXZlcl9kYXRhWzFdYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGZyYW1lIGRhdGEgY29tZXMgZnJvbSBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGggbGVuZ3RoIHZlcmlmaWNhdGlvbi4KClJlZ2FyZGluZyB0aGUgJiMzNDtkbyB3ZSBuZWVkIEtNU0FOJiMzNDsgcXVlc3Rpb24gLSBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncywgc3VjaCBhcyBjb25jdXJyZW5jeSwgYnVmZmVyIG92ZXJydW5zLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgc2tiLCBhcmUgYWxyZWFkeSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjcmVhdGUgYm91bmRzIGNoZWNrcyB0aGF0IGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXI6IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucy4gSXQmIzM5O3Mgc2FmZSwgYW5kIE5lZWRzS01TQU4gPSBmYWxzZS4gVGhlIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuIEkgd2lsbCBub3cgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZGQgdGhlIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIG5ldGxpbmsgZmxhZyBhdHRyaWJ1dGUgZm9yIHNraXBwaW5nIG1vbml0b3IgcmVwb3J0cywgcHJlc2VydmVzIHRoZSB0cmFuc21pc3Npb24gY2hhbm5lbCBmcmVxdWVuY3kgaW4gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBhbmQgdXBkYXRlcyB0aGUgcGVuZGluZyB0cmFuc21pdHRlZCBza2IgaW4gYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgd2hlbiBtYXRjaGluZyBjb29raWUgYW5kIHRyYW5zbWl0dGVyIGF0dHJpYnV0ZXMgYXJlIHByb3ZpZGVkLlxuXG5BbGwgbG9jYWwgdmFyaWFibGVzIChgZnJlcWAsIGBub19tb25pdG9yYCwgYGNvb2tpZWAsIGV0Yy4pIGFuZCBzdHJ1Y3R1cmUgbWVtYmVycyAoYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBgaGRyLVx1MDAzZXJ0X2NoYW5uZWxgKSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIFNLQiBtb2RpZmljYXRpb25zIHVzZSBgc2tiX3B1dF9kYXRhYCB3aXRoIHZlcmlmaWVkIHBheWxvYWQgbGVuZ3RocyBmcm9tIHZhbGlkYXRlZCBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZ3MsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgcmlza3MgcmVsYXRpbmcgdG8gU0tCIG1hbmlwdWxhdGlvbiwgcXVldWUgbG9ja2luZywgb3IgcmVmZXJlbmNlIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGRldGVjdG9ycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtYWM4MDIxMV9od3NpbWAgdG8gYWRkIHRoZSBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCBuZXRsaW5rIGZsYWcgYXR0cmlidXRlIGZvciBza2lwcGluZyBtb25pdG9yIHJlcG9ydHMsIHByZXNlcnZlcyB0aGUgdHJhbnNtaXNzaW9uIGNoYW5uZWwgZnJlcXVlbmN5IGluIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYW5kIHVwZGF0ZXMgdGhlIHBlbmRpbmcgdHJhbnNtaXR0ZWQgc2tiIGluIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIHdoZW4gbWF0Y2hpbmcgY29va2llIGFuZCB0cmFuc21pdHRlciBhdHRyaWJ1dGVzIGFyZSBwcm92aWRlZC5cblxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZyZXFgLCBgbm9fbW9uaXRvcmAsIGBjb29raWVgLCBldGMuKSBhbmQgc3RydWN0dXJlIG1lbWJlcnMgKGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYGhkci1cdTAwM2VydF9jaGFubmVsYCkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiB0aGlzIHBhdGNoIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzLiBTS0IgbW9kaWZpY2F0aW9ucyB1c2UgYHNrYl9wdXRfZGF0YWAgd2l0aCB2ZXJpZmllZCBwYXlsb2FkIGxlbmd0aHMgZnJvbSB2YWxpZGF0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmdzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHJlbGF0aW5nIHRvIFNLQiBtYW5pcHVsYXRpb24sIHF1ZXVlIGxvY2tpbmcsIG9yIHJlZmVyZW5jZSBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI2OjQ2Ljk3MTUzMzE0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mzg2MjU1NTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sXCIsXG4gICAgXCJod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX3R4XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkZCB0aGUgYEhXU0lNX0FUVFJfTk9fTU9OSVRPUmAgbmV0bGluayBmbGFnIGF0dHJpYnV0ZSBmb3Igc2tpcHBpbmcgbW9uaXRvciByZXBvcnRzLCBwcmVzZXJ2ZXMgdGhlIHRyYW5zbWlzc2lvbiBjaGFubmVsIGZyZXF1ZW5jeSBpbiBgcmF0ZV9kcml2ZXJfZGF0YVsxXWAsIGFuZCB1cGRhdGVzIHRoZSBwZW5kaW5nIHRyYW5zbWl0dGVkIHNrYiBpbiBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYCB3aGVuIG1hdGNoaW5nIGNvb2tpZSBhbmQgdHJhbnNtaXR0ZXIgYXR0cmlidXRlcyBhcmUgcHJvdmlkZWQuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZyZXFgLCBgbm9fbW9uaXRvcmAsIGBjb29raWVgLCBldGMuKSBhbmQgc3RydWN0dXJlIG1lbWJlcnMgKGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYGhkci1cXHUwMDNlcnRfY2hhbm5lbGApIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBhcmUgZXhwbGljaXRseSBhc3NpZ25lZCBhbmQgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzcy4gU0tCIG1vZGlmaWNhdGlvbnMgdXNlIGBza2JfcHV0X2RhdGFgIHdpdGggdmVyaWZpZWQgcGF5bG9hZCBsZW5ndGhzIGZyb20gdmFsaWRhdGVkIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5ncywgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCByaXNrcyByZWxhdGluZyB0byBTS0IgbWFuaXB1bGF0aW9uLCBxdWV1ZSBsb2NraW5nLCBvciByZWZlcmVuY2UgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZGV0ZWN0b3JzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1hYzgwMjExX2h3c2ltLCBhIHNvZnR3YXJlLWVtdWxhdGVkIDgwMi4xMSByYWRpbyB0ZXN0aW5nIHRvb2wgZnVsbHkgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgZ2VuZXJpYyBuZXRsaW5rLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgaGFuZGxpbmcgZm9yIEhXU0lNX0FUVFJfTk9fTU9OSVRPUiwgbW9kaWZ5IGNlbnRlciBmcmVxdWVuY3kgdHJhY2tpbmcgYWNyb3NzIFRYIG1vbml0b3IgcmVwb3J0aW5nLCBhbmQgYWRkIGxvZ2ljIGluIGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCB0byBzZWFyY2ggdGhlIHBlbmRpbmcgdHJhbnNtaXNzaW9uIHF1ZXVlIGJ5IGNvb2tpZSBhbmQgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IgZGF0YSAodmlhIHBza2JfZXhwYW5kX2hlYWQsIHNrYl90cmltLCBhbmQgc2tiX3B1dF9kYXRhKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcyBpbiB0aGUgc2ltdWxhdGVkIHJhZGlvIFRYL1JYIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyNjo0Ni45NzE1Mzc4MzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Mzg2MzAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViNzVhZjUxM2FlMWFmODc3OTJhMjBiNWFiYTQxNDE2MzUzZjk5OThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTQ6MjY6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oXFxuaW5kZXggYTAyMmNkNWMwZjFjNy4uMWQyZmQwNmM1ODVhOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmhcXG5AQCAtMyw3ICszLDcgQEBcXG4gICogbWFjODAyMTFfaHdzaW0gLSBzb2Z0d2FyZSBzaW11bGF0b3Igb2YgODAyLjExIHJhZGlvKHMpIGZvciBtYWM4MDIxMVxcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEpvdW5pIE1hbGluZW4gXFx1MDAzY2pAdzEuZmlcXHUwMDNlXFxuICAqIENvcHlyaWdodCAoYykgMjAxMSwgSmF2aWVyIExvcGV6IFxcdTAwM2NqbG9wZXhAZ21haWwuY29tXFx1MDAzZVxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxcbiAgKi9cXG4gXFxuICNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9IXFxuQEAgLTE2Miw2ICsxNjIsOCBAQCBlbnVtIGh3c2ltX2NvbW1hbmRzIHtcXG4gICpcXHRlYWNoIHJhZGlvIGluc3RlYWQgb2YgZm9yIHRoZSB3aXBoeS5cXG4gICogQEhXU0lNX0FUVFJfU1VQUE9SVF9OQU5fREVWSUNFOiBzdXBwb3J0IE5BTiBEZXZpY2UgdmlydHVhbCBpbnRlcmZhY2UgKGZsYWcpXFxuICAqIEBIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUjogYmFja2dyb3VuZCByYWRhci9DQUMgc3VwcG9ydCAoZmxhZylcXG4rICogQEhXU0lNX0FUVFJfTk9fTU9OSVRPUjogc2tpcCBtb25pdG9yIHJlcG9ydCBmb3IgdGhpcyBUWCBzdGF0dXMsIGUuZy4gaW4gY2FzZVxcbisgKlxcdHRoZSBmcmFtZSB3YXMgbmV2ZXIgcmVwb3J0ZWQgdG8gYW55IHJlY2VpdmVyIChmbGFnKVxcbiAgKiBAX19IV1NJTV9BVFRSX01BWDogZW51bSBsaW1pdFxcbiAgKi9cXG4gZW51bSBod3NpbV9hdHRycyB7XFxuQEAgLTE5Nyw2ICsxOTksNyBAQCBlbnVtIGh3c2ltX2F0dHJzIHtcXG4gXFx0SFdTSU1fQVRUUl9NVUxUSV9SQURJTyxcXG4gXFx0SFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0UsXFxuIFxcdEhXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSLFxcbitcXHRIV1NJTV9BVFRSX05PX01PTklUT1IsXFxuIFxcdF9fSFdTSU1fQVRUUl9NQVgsXFxuIH07XFxuICNkZWZpbmUgSFdTSU1fQVRUUl9NQVggKF9fSFdTSU1fQVRUUl9NQVggLSAxKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuaW5kZXggMDJiNmQ4MWNjY2QxMS4uZmNhNGJmODIzZWY0ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuQEAgLTg5NSw2ICs4OTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHdzaW1fZ2VubF9wb2xpY3lbSFdTSU1fQVRUUl9NQVggKyAxXSA9IHtcXG4gXFx0W0hXU0lNX0FUVFJfTVVMVElfUkFESU9dID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuIFxcdFtIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4gXFx0W0hXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbitcXHRbSFdTSU1fQVRUUl9OT19NT05JVE9SXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbiB9O1xcbiBcXG4gI2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKVxcbkBAIC0xMzM3LDcgKzEzMzgsNyBAQCBtYWM4MDIxMV9od3NpbV9nZXRfdHhfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFxuIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICp0eF9za2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbilcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZyZXEpXFxuIHtcXG4gXFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEgPSBody1cXHUwMDNlcHJpdjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5AQCAtMTM2OSw3ICsxMzcwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0aGRyLVxcdTAwM2VydF90c2Z0ID0gX19tYWM4MDIxMV9od3NpbV9nZXRfdHNmKGRhdGEpO1xcbiBcXHRoZHItXFx1MDAzZXJ0X2ZsYWdzID0gMDtcXG4gXFx0aGRyLVxcdTAwM2VydF9yYXRlID0gYml0cmF0ZSAvIDU7XFxuLVxcdGhkci1cXHUwMDNlcnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxKTtcXG4rXFx0aGRyLVxcdTAwM2VydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7XFxuIFxcdGZsYWdzID0gSUVFRTgwMjExX0NIQU5fMkdIWjtcXG4gXFx0aWYgKHR4cmF0ZSBcXHUwMDI2XFx1MDAyNiB0eHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1JBVEVfRVJQX0cpXFxuIFxcdFxcdGZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE07XFxuQEAgLTEzODcsOCArMTM4OCw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIH1cXG4gXFxuIFxcbi1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1OCAqYWRkcilcXG4rc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2sodTMyIGZyZXEsIGNvbnN0IHU4ICphZGRyKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHN0cnVjdCBod3NpbV9yYWRpb3RhcF9hY2tfaGRyICpoZHI7XFxuQEAgLTE0MTAsNyArMTQxMCw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAoMSBcXHUwMDNjXFx1MDAzYyBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCkpO1xcbiBcXHRoZHItXFx1MDAzZXJ0X2ZsYWdzID0gMDtcXG4gXFx0aGRyLVxcdTAwM2VwYWQgPSAwO1xcbi1cXHRoZHItXFx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihjaGFuLVxcdTAwM2VjZW50ZXJfZnJlcSk7XFxuK1xcdGhkci1cXHUwMDNlcnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGZyZXEpO1xcbiBcXHRmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7XFxuIFxcdGhkci1cXHUwMDNlcnRfY2hiaXRtYXNrID0gY3B1X3RvX2xlMTYoZmxhZ3MpO1xcbiBcXG5AQCAtMTczNSw2ICsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEhXU0lNX0FUVFJfQ09PS0lFLCBjb29raWUsIEhXU0lNX0FUVFJfUEFEKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbitcXHQvKiB0cmFjayB0aGUgZnJlcXVlbmN5ICovXFxuK1xcdGluZm8tXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC1cXHUwMDNlY2VudGVyX2ZyZXE7XFxuK1xcbiBcXHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcXG4gXFxuIFxcdGlmIChod3NpbV92aXJ0aW9fZW5hYmxlZCkge1xcbkBAIC0xOTEyLDcgKzE5MTUsNyBAQCBzdGF0aWMgYm9vbCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFxuIFxcdG1hYzgwMjExX2h3c2ltX3dyaXRlX3RzZihkYXRhLCBza2IsIHNpbV90c2YpO1xcbiBcXG4tXFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuKTtcXG4rXFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuLVxcdTAwM2VjZW50ZXJfZnJlcSk7XFxuIFxcbiBcXHRtZW1zZXQoXFx1MDAyNnJ4X3N0YXR1cywgMCwgc2l6ZW9mKHJ4X3N0YXR1cykpO1xcbiBcXHRyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQ7XFxuQEAgLTIyNzYsNyArMjI3OSw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRhY2sgPSBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChodywgc2tiLCBjaGFubmVsKTtcXG4gXFxuIFxcdGlmIChhY2sgXFx1MDAyNlxcdTAwMjYgc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gMTYpXFxuLVxcdFxcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGNoYW5uZWwsIGhkci1cXHUwMDNlYWRkcjIpO1xcbitcXHRcXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhjaGFubmVsLVxcdTAwM2VjZW50ZXJfZnJlcSwgaGRyLVxcdTAwM2VhZGRyMik7XFxuIFxcbiBcXHRpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhpKTtcXG4gXFxuQEAgLTYzOTEsNiArNjM5NCw4IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXFxuIFxcdGludCBpO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdGJvb2wgbm9fbW9uaXRvcjtcXG4rXFx0dTMyIGZyZXE7XFxuIFxcbiBcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0gfHxcXG4gXFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSB8fFxcbkBAIC02NDAyLDYgKzY0MDcsNyBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbiBcXHRzcmMgPSAodm9pZCAqKW5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pO1xcbiBcXHRod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTtcXG4gXFx0cmV0X3NrYl9jb29raWUgPSBubGFfZ2V0X3U2NChpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xcbitcXHRub19tb25pdG9yID0gbmxhX2dldF9mbGFnKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfTk9fTU9OSVRPUl0pO1xcbiBcXG4gXFx0ZGF0YTIgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKHNyYyk7XFxuIFxcdGlmICghZGF0YTIpXFxuQEAgLTY0MzYsNyArNjQ0MiwxMSBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbiBcXHRpZiAoIWZvdW5kKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXFx1MDAzZWh3LCBza2IsIGRhdGEyLVxcdTAwM2VjaGFubmVsKTtcXG4rXFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xcbitcXHRmcmVxID0gKHVpbnRwdHJfdCl0eGktXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV07XFxuK1xcbitcXHRpZiAoIW5vX21vbml0b3IpXFxuK1xcdFxcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXFx1MDAzZWh3LCBza2IsIGZyZXEpO1xcbiBcXG4gXFx0LyogVHggaW5mbyByZWNlaXZlZCBiZWNhdXNlIHRoZSBmcmFtZSB3YXMgYnJvYWRjYXN0ZWQgb24gdXNlciBzcGFjZSxcXG4gXFx0IHNvIHdlIGdldCBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvOiB0eCBhdHRlbXB0cyBhbmQgc2tiIGNvbnRyb2wgYnVmZiAqL1xcbkBAIC02NDQ1LDggKzY0NTUsNiBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbiBcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XFxuIFxcbiBcXHQvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqL1xcbi1cXHR0eGkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XFxuLVxcbiBcXHRpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhpKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspIHtcXG5AQCAtNjQ2Niw4ICs2NDc0LDcgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcXG4gXFx0aWYgKCEoaHdzaW1fZmxhZ3MgXFx1MDAyNiBIV1NJTV9UWF9DVExfTk9fQUNLKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAoaHdzaW1fZmxhZ3MgXFx1MDAyNiBIV1NJTV9UWF9TVEFUX0FDSykpIHtcXG4gXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2U9IDE2KVxcbi1cXHRcXHRcXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhkYXRhMi1cXHUwMDNlY2hhbm5lbCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgaGRyLVxcdTAwM2VhZGRyMik7XFxuK1xcdFxcdFxcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGZyZXEsIGhkci1cXHUwMDNlYWRkcjIpO1xcbiBcXHRcXHR0eGktXFx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSztcXG4gXFx0fVxcbiBcXG5AQCAtNjUzNSw2ICs2NTQyLDUxIEBAIHN0YXRpYyBpbnQgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cXG4rXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSkge1xcbitcXHRcXHR1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcXG4rXFx0XFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xcbitcXHRcXHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqdHhkYXRhO1xcbitcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTtcXG4rXFx0XFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0XFx0dHJhbnNtaXR0ZXIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTtcXG4rXFx0XFx0dHhkYXRhID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcih0cmFuc21pdHRlcik7XFxuK1xcdFxcdGlmICghdHhkYXRhIHx8IHR4ZGF0YS1cXHUwMDNlbmV0Z3JvdXAgIT0gZGF0YTItXFx1MDAzZW5ldGdyb3VwKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbitcXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2dHhkYXRhLVxcdTAwM2VwZW5kaW5nLCBvcmlnX3NrYikge1xcbitcXHRcXHRcXHR1aW50cHRyX3Qgc2tiX2Nvb2tpZTtcXG4rXFxuK1xcdFxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Iob3JpZ19za2IpO1xcbitcXHRcXHRcXHRza2JfY29va2llID0gKHVpbnRwdHJfdCl0eGktXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF07XFxuK1xcbitcXHRcXHRcXHRpZiAoc2tiX2Nvb2tpZSA9PSBjb29raWUpIHtcXG4rXFx0XFx0XFx0XFx0Zm91bmQgPSBvcmlnX3NrYjtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogdGhhdCdzIHdlaXJkICovXFxuK1xcdFxcdGlmICghZm91bmQpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHhkYXRhLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChmcmFtZV9kYXRhX2xlbiBcXHUwMDNlIGZvdW5kLVxcdTAwM2VsZW4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoZm91bmQsIDAsIGZyYW1lX2RhdGFfbGVuIC0gZm91bmQtXFx1MDAzZWxlbixcXG4rXFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKSkge1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0fVxcbitcXHRcXHRza2JfdHJpbShmb3VuZCwgMCk7XFxuK1xcdFxcdHNrYl9wdXRfZGF0YShmb3VuZCwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBjaGVjayBpZiByYWRpbyBpcyBjb25maWd1cmVkIHByb3Blcmx5ICovXFxuIFxcbiBcXHRpZiAoKGRhdGEyLVxcdTAwM2VpZGxlIFxcdTAwMjZcXHUwMDI2ICFkYXRhMi1cXHUwMDNldG1wX2NoYW4pIHx8ICFkYXRhMi1cXHUwMDNlc3RhcnRlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6MjY6NDcuNTY1OTYzMjg4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNTk1NDIyMTQ0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubFwiLFxuICAgIFwiaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV90eFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1hYzgwMjExX2h3c2ltLCBhIHNvZnR3YXJlLWVtdWxhdGVkIDgwMi4xMSByYWRpbyB0ZXN0aW5nIHRvb2wgZnVsbHkgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgZ2VuZXJpYyBuZXRsaW5rLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgaGFuZGxpbmcgZm9yIEhXU0lNX0FUVFJfTk9fTU9OSVRPUiwgbW9kaWZ5IGNlbnRlciBmcmVxdWVuY3kgdHJhY2tpbmcgYWNyb3NzIFRYIG1vbml0b3IgcmVwb3J0aW5nLCBhbmQgYWRkIGxvZ2ljIGluIGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCB0byBzZWFyY2ggdGhlIHBlbmRpbmcgdHJhbnNtaXNzaW9uIHF1ZXVlIGJ5IGNvb2tpZSBhbmQgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IgZGF0YSAodmlhIHBza2JfZXhwYW5kX2hlYWQsIHNrYl90cmltLCBhbmQgc2tiX3B1dF9kYXRhKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcyBpbiB0aGUgc2ltdWxhdGVkIHJhZGlvIFRYL1JYIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDViNzVhZjUxM2FlMWFmODc3OTJhMjBiNWFiYTQxNDE2MzUzZjk5OThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxNDoyNjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaFxuaW5kZXggYTAyMmNkNWMwZjFjNy4uMWQyZmQwNmM1ODVhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oXG5AQCAtMyw3ICszLDcgQEBcbiAgKiBtYWM4MDIxMV9od3NpbSAtIHNvZnR3YXJlIHNpbXVsYXRvciBvZiA4MDIuMTEgcmFkaW8ocykgZm9yIG1hYzgwMjExXG4gICogQ29weXJpZ2h0IChjKSAyMDA4LCBKb3VuaSBNYWxpbmVuIFx1MDAzY2pAdzEuZmlcdTAwM2VcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEphdmllciBMb3BleiBcdTAwM2NqbG9wZXhAZ21haWwuY29tXHUwMDNlXG4tICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIyLTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqL1xuIFxuICNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9IXG5AQCAtMTYyLDYgKzE2Miw4IEBAIGVudW0gaHdzaW1fY29tbWFuZHMge1xuICAqXHRlYWNoIHJhZGlvIGluc3RlYWQgb2YgZm9yIHRoZSB3aXBoeS5cbiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX05BTl9ERVZJQ0U6IHN1cHBvcnQgTkFOIERldmljZSB2aXJ0dWFsIGludGVyZmFjZSAoZmxhZylcbiAgKiBASFdTSU1fQVRUUl9TVVBQT1JUX0JBQ0tHUk9VTkRfUkFEQVI6IGJhY2tncm91bmQgcmFkYXIvQ0FDIHN1cHBvcnQgKGZsYWcpXG4rICogQEhXU0lNX0FUVFJfTk9fTU9OSVRPUjogc2tpcCBtb25pdG9yIHJlcG9ydCBmb3IgdGhpcyBUWCBzdGF0dXMsIGUuZy4gaW4gY2FzZVxuKyAqXHR0aGUgZnJhbWUgd2FzIG5ldmVyIHJlcG9ydGVkIHRvIGFueSByZWNlaXZlciAoZmxhZylcbiAgKiBAX19IV1NJTV9BVFRSX01BWDogZW51bSBsaW1pdFxuICAqL1xuIGVudW0gaHdzaW1fYXR0cnMge1xuQEAgLTE5Nyw2ICsxOTksNyBAQCBlbnVtIGh3c2ltX2F0dHJzIHtcbiBcdEhXU0lNX0FUVFJfTVVMVElfUkFESU8sXG4gXHRIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRSxcbiBcdEhXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSLFxuK1x0SFdTSU1fQVRUUl9OT19NT05JVE9SLFxuIFx0X19IV1NJTV9BVFRSX01BWCxcbiB9O1xuICNkZWZpbmUgSFdTSU1fQVRUUl9NQVggKF9fSFdTSU1fQVRUUl9NQVggLSAxKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbmluZGV4IDAyYjZkODFjY2NkMTEuLmZjYTRiZjgyM2VmNGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbkBAIC04OTUsNiArODk1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGh3c2ltX2dlbmxfcG9saWN5W0hXU0lNX0FUVFJfTUFYICsgMV0gPSB7XG4gXHRbSFdTSU1fQVRUUl9NVUxUSV9SQURJT10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiBcdFtIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiBcdFtIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbitcdFtIV1NJTV9BVFRSX05PX01PTklUT1JdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4gfTtcbiBcbiAjaWYgSVNfUkVBQ0hBQkxFKENPTkZJR19WSVJUSU8pXG5AQCAtMTMzNyw3ICsxMzM4LDcgQEAgbWFjODAyMTFfaHdzaW1fZ2V0X3R4X3JhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXG4gc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICp0eF9za2IsXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4pXG4rXHRcdFx0XHQgICAgICB1MzIgZnJlcSlcbiB7XG4gXHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGh3LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTEzNjksNyArMTM3MCw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRoZHItXHUwMDNlcnRfdHNmdCA9IF9fbWFjODAyMTFfaHdzaW1fZ2V0X3RzZihkYXRhKTtcbiBcdGhkci1cdTAwM2VydF9mbGFncyA9IDA7XG4gXHRoZHItXHUwMDNlcnRfcmF0ZSA9IGJpdHJhdGUgLyA1O1xuLVx0aGRyLVx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihjaGFuLVx1MDAzZWNlbnRlcl9mcmVxKTtcbitcdGhkci1cdTAwM2VydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7XG4gXHRmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7XG4gXHRpZiAodHhyYXRlIFx1MDAyNlx1MDAyNiB0eHJhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IElFRUU4MDIxMV9SQVRFX0VSUF9HKVxuIFx0XHRmbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9PRkRNO1xuQEAgLTEzODcsOCArMTM4OCw3IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gfVxuIFxuIFxuLXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbixcbi1cdFx0XHRcdCAgICAgICBjb25zdCB1OCAqYWRkcilcbitzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fjayh1MzIgZnJlcSwgY29uc3QgdTggKmFkZHIpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHN0cnVjdCBod3NpbV9yYWRpb3RhcF9hY2tfaGRyICpoZHI7XG5AQCAtMTQxMCw3ICsxNDEwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLFxuIFx0XHRcdFx0XHQgICgxIFx1MDAzY1x1MDAzYyBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCkpO1xuIFx0aGRyLVx1MDAzZXJ0X2ZsYWdzID0gMDtcbiBcdGhkci1cdTAwM2VwYWQgPSAwO1xuLVx0aGRyLVx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihjaGFuLVx1MDAzZWNlbnRlcl9mcmVxKTtcbitcdGhkci1cdTAwM2VydF9jaGFubmVsID0gY3B1X3RvX2xlMTYoZnJlcSk7XG4gXHRmbGFncyA9IElFRUU4MDIxMV9DSEFOXzJHSFo7XG4gXHRoZHItXHUwMDNlcnRfY2hiaXRtYXNrID0gY3B1X3RvX2xlMTYoZmxhZ3MpO1xuIFxuQEAgLTE3MzUsNiArMTczNSw5IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbitcdC8qIHRyYWNrIHRoZSBmcmVxdWVuY3kgKi9cbitcdGluZm8tXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXSA9ICh2b2lkICopKHVpbnRwdHJfdCljaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxO1xuK1xuIFx0Z2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7XG4gXG4gXHRpZiAoaHdzaW1fdmlydGlvX2VuYWJsZWQpIHtcbkBAIC0xOTEyLDcgKzE5MTUsNyBAQCBzdGF0aWMgYm9vbCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcbiBcdG1hYzgwMjExX2h3c2ltX3dyaXRlX3RzZihkYXRhLCBza2IsIHNpbV90c2YpO1xuIFxuLVx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuKTtcbitcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoaHcsIHNrYiwgY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2cnhfc3RhdHVzLCAwLCBzaXplb2Yocnhfc3RhdHVzKSk7XG4gXHRyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01BQ1RJTUVfU1RBUlQ7XG5AQCAtMjI3Niw3ICsyMjc5LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRhY2sgPSBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubChodywgc2tiLCBjaGFubmVsKTtcbiBcbiBcdGlmIChhY2sgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2VsZW4gXHUwMDNlPSAxNilcbi1cdFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soY2hhbm5lbCwgaGRyLVx1MDAzZWFkZHIyKTtcbitcdFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soY2hhbm5lbC1cdTAwM2VjZW50ZXJfZnJlcSwgaGRyLVx1MDAzZWFkZHIyKTtcbiBcbiBcdGllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGkpO1xuIFxuQEAgLTYzOTEsNiArNjM5NCw4IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRib29sIGZvdW5kID0gZmFsc2U7XG4rXHRib29sIG5vX21vbml0b3I7XG4rXHR1MzIgZnJlcTtcbiBcbiBcdGlmICghaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdIHx8XG4gXHQgICAgIWluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10gfHxcbkBAIC02NDAyLDYgKzY0MDcsNyBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0c3JjID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pO1xuIFx0aHdzaW1fZmxhZ3MgPSBubGFfZ2V0X3UzMihpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTtcbiBcdHJldF9za2JfY29va2llID0gbmxhX2dldF91NjQoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xuK1x0bm9fbW9uaXRvciA9IG5sYV9nZXRfZmxhZyhpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfTk9fTU9OSVRPUl0pO1xuIFxuIFx0ZGF0YTIgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKHNyYyk7XG4gXHRpZiAoIWRhdGEyKVxuQEAgLTY0MzYsNyArNjQ0MiwxMSBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0aWYgKCFmb3VuZClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGRhdGEyLVx1MDAzZWh3LCBza2IsIGRhdGEyLVx1MDAzZWNoYW5uZWwpO1xuK1x0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuK1x0ZnJlcSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV07XG4rXG4rXHRpZiAoIW5vX21vbml0b3IpXG4rXHRcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXHUwMDNlaHcsIHNrYiwgZnJlcSk7XG4gXG4gXHQvKiBUeCBpbmZvIHJlY2VpdmVkIGJlY2F1c2UgdGhlIGZyYW1lIHdhcyBicm9hZGNhc3RlZCBvbiB1c2VyIHNwYWNlLFxuIFx0IHNvIHdlIGdldCBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvOiB0eCBhdHRlbXB0cyBhbmQgc2tiIGNvbnRyb2wgYnVmZiAqL1xuQEAgLTY0NDUsOCArNjQ1NSw2IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRcdCAgICAgICBpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfVFhfSU5GT10pO1xuIFxuIFx0Lyogbm93IHNlbmQgYmFjayBUWCBzdGF0dXMgKi9cbi1cdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcbi1cbiBcdGllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKSB7XG5AQCAtNjQ2Niw4ICs2NDc0LDcgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbiBcdGlmICghKGh3c2ltX2ZsYWdzIFx1MDAyNiBIV1NJTV9UWF9DVExfTk9fQUNLKSBcdTAwMjZcdTAwMjZcbiBcdCAgIChod3NpbV9mbGFncyBcdTAwMjYgSFdTSU1fVFhfU1RBVF9BQ0spKSB7XG4gXHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZT0gMTYpXG4tXHRcdFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soZGF0YTItXHUwMDNlY2hhbm5lbCxcbi1cdFx0XHRcdFx0XHQgICBoZHItXHUwMDNlYWRkcjIpO1xuK1x0XHRcdG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKGZyZXEsIGhkci1cdTAwM2VhZGRyMik7XG4gXHRcdHR4aS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7XG4gXHR9XG4gXG5AQCAtNjUzNSw2ICs2NTQyLDUxIEBAIHN0YXRpYyBpbnQgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cbitcdGlmIChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcdTAwMjZcdTAwMjZcbitcdCAgICBpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pIHtcbitcdFx0dTY0IGNvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xuK1x0XHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqdHhkYXRhO1xuK1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTtcbitcdFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xuK1x0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0XHR0cmFuc21pdHRlciA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG4rXHRcdHR4ZGF0YSA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIodHJhbnNtaXR0ZXIpO1xuK1x0XHRpZiAoIXR4ZGF0YSB8fCB0eGRhdGEtXHUwMDNlbmV0Z3JvdXAgIT0gZGF0YTItXHUwMDNlbmV0Z3JvdXApXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbitcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcsIG9yaWdfc2tiKSB7XG4rXHRcdFx0dWludHB0cl90IHNrYl9jb29raWU7XG4rXG4rXHRcdFx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihvcmlnX3NrYik7XG4rXHRcdFx0c2tiX2Nvb2tpZSA9ICh1aW50cHRyX3QpdHhpLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF07XG4rXG4rXHRcdFx0aWYgKHNrYl9jb29raWUgPT0gY29va2llKSB7XG4rXHRcdFx0XHRmb3VuZCA9IG9yaWdfc2tiO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdC8qIHRoYXQncyB3ZWlyZCAqL1xuK1x0XHRpZiAoIWZvdW5kKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKGZyYW1lX2RhdGFfbGVuIFx1MDAzZSBmb3VuZC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBwc2tiX2V4cGFuZF9oZWFkKGZvdW5kLCAwLCBmcmFtZV9kYXRhX2xlbiAtIGZvdW5kLVx1MDAzZWxlbixcbitcdFx0XHRcdCAgICAgR0ZQX0FUT01JQykpIHtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRza2JfdHJpbShmb3VuZCwgMCk7XG4rXHRcdHNrYl9wdXRfZGF0YShmb3VuZCwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbitcdH1cbitcbiBcdC8qIGNoZWNrIGlmIHJhZGlvIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHkgKi9cbiBcbiBcdGlmICgoZGF0YTItXHUwMDNlaWRsZSBcdTAwMjZcdTAwMjYgIWRhdGEyLVx1MDAzZXRtcF9jaGFuKSB8fCAhZGF0YTItXHUwMDNlc3RhcnRlZClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI2OjQ3LjU2NTk2NDk2OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxODE2NzMyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCdzIGZ1enotd29ydGh5LCB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBpdCBtaWdodCBuZWVkLCBhbmQgd2hhdCBzeW1ib2xzIHdlIHNob3VsZCBiZSBmb2N1c2luZyBvbi4gRmlyc3QsIHRoZSBkaWZmLi4uIGl0IGxvb2tzIGxpa2Ugd2UncmUgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaGAgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AuIFJpZ2h0LCBgbWFjODAyMTFfaHdzaW1gIGlzIHRoYXQgaGFuZHkgc29mdHdhcmUgc2ltdWxhdG9yIGZvciA4MDIuMTEgcmFkaW9zIHdpdGhpbiBtYWM4MDIxMS4gR29vZC4gSXQncyBhIHZpcnR1YWwgbmV0ZGV2L3dpcmVsZXNzIGRyaXZlciwgYWNjZXNzaWJsZSB0aHJvdWdoIGdlbmVyaWMgbmV0bGluaywgc3BlY2lmaWNhbGx5IHRoZSBubDgwMjExL2h3c2ltIGdlbmwgaW50ZXJmYWNlLiBLbm93aW5nIFN5emthbGxlciBhbHJlYWR5IGV4ZXJjaXNlcyBpdCB2aWEgdGhpcyB2ZXJ5IGludGVyZmFjZSBpcyBhIHBsdXMg4oCTIG1lYW5zIHdlIGhhdmUgYSBrbm93biBhdHRhY2sgc3VyZmFjZS5cblxuTm93LCB0aGUgY2hhbmdlcyB0aGVtc2VsdmVzLi4ubGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKiAgIFdlJ3ZlIGdvdCBhIG5ldyBlbnVtIGBod3NpbV9hdHRyc2AgZW50cnk6IGBIV1NJTV9BVFRSX05PX01PTklUT1JgLiBUaGlzIGlzIGludGVyZXN0aW5nLlxuKiAgIFRoZSBgaHdzaW1fZ2VubF9wb2xpY3lgIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGF0IG5ldyBhdHRyaWJ1dGUgYXMgYSBmbGFnLiBPa2F5LlxuKiAgIEZ1bmN0aW9ucyBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAgYW5kIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AgaGF2ZSBoYWQgdGhlaXIgY2hhbm5lbCBwb2ludGVyIGFyZ3VtZW50cyByZXBsYWNlZCB3aXRoIGEgYHUzMiBmcmVxYCDigJMgdXNpbmcgYGluZm8tXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXWAgdG8gc3RvcmUgdGhlIGNlbnRlciBmcmVxdWVuY3kuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBhcmVhIGZvciBmdXp6aW5nIGlucHV0IHZhbHVlcy5cbiogICBJbiBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgLCB3ZSdyZSBzZXR0aW5nIGBpbmZvLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC1cdTAwM2VjZW50ZXJfZnJlcTtgLlxuKiAgIFRoZW4gaW4gYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgLCB3ZSBhcmUgaGFuZGxpbmcgYEhXU0lNX0FUVFJfTk9fTU9OSVRPUmAgYW5kIHVzaW5nIHRoYXQgZnJlcXVlbmN5IGZyb20gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLlxuKiAgIEFuZCBmaW5hbGx5LCBpbiBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYC4uLiB0aGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlJ3ZlIGdvdCBhIG5ldyBjb2RlIGJsb2NrLiBJZiBjZXJ0YWluIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQgKGBIV1NJTV9BVFRSX0NPT0tJRWAgYW5kIGBIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJgKSwgaXQgbG9va3MgdXAgdGhlIHRyYW5zbWl0dGVyIGh3c2ltXFxfZGF0YSwgY2hlY2tzIHRoZSBwZW5kaW5nIHF1ZXVlIGZvciBhIG1hdGNoaW5nIGNvb2tpZSwgZXhwYW5kcyB0aGUgaGVhZCBpZiBuZWNlc3NhcnkgKGBwc2tiX2V4cGFuZF9oZWFkYCksIHRyaW1zLCBhbmQgcmVwbGFjZXMgdGhlIHNrYiBkYXRhIHdpdGggYGZyYW1lX2RhdGFgIHVzaW5nIGBza2JfcHV0X2RhdGFgLiBUaGF0IGBwc2tiX2V4cGFuZF9oZWFkYCBjYWxsIGlzIG9mdGVuIGEgZ29vZCBwbGFjZSB0byBsb29rLlxuXG5UaGUgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gY2xvbmVkIGZyYW1lcywgdHJhbnNtaXR0ZXIgZGF0YSwgYW5kIHRoZSBtYW5pcHVsYXRpb24gb2Ygc2ticy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgYW5kIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBhIGJpdCBiZXR0ZXIuIFRoaXMgbG9va3MgcmlwZSBmb3Igc29tZSBkaXJlY3RlZCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjE2LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjc6NTkuMzgyNzAwNzU1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODQ5MTI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjM4Mj1zdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjQ5MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2NDkxOnN0YXRpYyBpbnQgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02NDkyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBod3NpbV9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNjYtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNjc6XFx0XFx0LmRvaXQgPSBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE2OC1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzM0OD1zdGF0aWMgaW50IGh3c2ltX3ZpcnRpb19oYW5kbGVfY21kKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MzcyLVxcdGNhc2UgSFdTSU1fQ01EX0ZSQU1FOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjczNzM6XFx0XFx0aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHNrYiwgXFx1MDAyNmluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTczNzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI3OjU5Ljk2MTE5NzY3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NjY1NzkxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBLY29uZmlnIERlcGVuZGVuY2llcyBmb3IgbWFjODAyMTFfaHdzaW1fbWFpbi5jIGFuZCBtYWM4MDIxMV9od3NpbSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgSSBzdGFydCBwb2tpbmcgYXJvdW5kIHdpdGggYG1hYzgwMjExX2h3c2ltX21haW4uY2AgYW5kIGBtYWM4MDIxMV9od3NpbWAsIEkgKm5lZWQqIHRvIHZlcmlmeSB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIE5vIHBvaW50IHdhc3RpbmcgdGltZSBpZiBhIG5lY2Vzc2FyeSBvcHRpb24gaXNuJ3QgZW5hYmxlZCwgb3IgaWYgc29tZXRoaW5nIGVsc2UgaXMgY29uZmxpY3RpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQncyBndWFyZGluZyB0aG9zZSBzcGVjaWZpYyBmaWxlcyBhbmQgdGhlIGNvcmUgYG1hYzgwMjExX2h3c2ltYCBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8ga25vdzogYXJlIHdlIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBuZXR3b3JraW5nIGZlYXR1cmVzLCBkZWJ1ZyBvcHRpb25zLCBvciBwZXJoYXBzIGV2ZW4gYSBwYXJ0aWN1bGFyIHdpcmVsZXNzIHN0YW5kYXJkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzLCBsaWtlIHBvdGVudGlhbGx5IGEgZGVwZW5kZW5jeSBvbiBhIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBmdWxseSBzdXBwb3J0IGFsbCB0aGUgdGVzdCBmZWF0dXJlcyBpbiB0aG9zZSBmaWxlcz8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBpbW1lZGlhdGUgZmlsZSwgYG1hYzgwMjExX2h3c2ltX21haW4uY2AgYW5kIHRoZSBhc3NvY2lhdGVkIEtjb25maWcgZW50cnkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBwcmVjb25kaXRpb25zLiBUaGVuIEknbGwgZXhwYW5kIG91dHdhcmRzIHRvIGFueXRoaW5nIHRoYXQgZGVwZW5kcyBvbiBgbWFjODAyMTFfaHdzaW1gLiBJJ20gYWxzbyB0aGlua2luZyB0aGlzIGlzIHByb2JhYmx5IGEgZ29vZCB0aW1lIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBtb2R1bGVzIHRoZW1zZWx2ZXMgYXJlIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGZyb20gYSBkZXBlbmRlbmN5IHBvaW50IG9mIHZpZXcuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODowMy42Mjc3ODA2OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzA0MDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQUM4MDIxMV9IV1NJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjE6b2JqLSQoQ09ORklHX01BQzgwMjExX0hXU0lNKVxcdCs9IG1hYzgwMjExX2h3c2ltLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlLTItbWFjODAyMTFfaHdzaW0tb2Jqc1xcdFxcdCs9IG1hYzgwMjExX2h3c2ltX21haW4ub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjk6I2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MTA6I2RlZmluZSBfX01BQzgwMjExX0hXU0lNX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMTEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MjIwPXN0cnVjdCBod3NpbV90eF9yYXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yMzMtICpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM0OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfUlRTX0NUUzogVXNlIFJUUy9DVFMgZXhjaGFuZ2UgZm9yIHRoaXMgcmF0ZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM1OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1Q6IENUUy10by1zZWxmIHByb3RlY3Rpb24gaXMgcmVxdWlyZWQuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTIzNi0gKlxcdFRoaXMgaXMgc2V0IGlmIHRoZSBjdXJyZW50IEJTUyByZXF1aXJlcyBFUlAgcHJvdGVjdGlvbi5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM3OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEU6IFVzZSBzaG9ydCBwcmVhbWJsZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjM4OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19NQ1M6IEhUIHJhdGUuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjIzOTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfVkhUX01DUzogVkhUIE1DUyByYXRlLCBpbiB0aGlzIGNhc2UgdGhlIGlkeCBmaWVsZCBpc1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNDAtICpcXHRzcGxpdCBpbnRvIGEgaGlnaGVyIDQgYml0cyAoTnNzKSBhbmQgbG93ZXIgNCBiaXRzIChNQ1MgbnVtYmVyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDE6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDX0dSRUVOX0ZJRUxEOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHJhdGUgc2hvdWxkIGJlIHVzZWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjQyLSAqXFx0aW4gR3JlZW5maWVsZCBtb2RlLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDM6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDXzQwX01IWl9XSURUSDogSW5kaWNhdGVzIGlmIHRoZSBDaGFubmVsIFdpZHRoIHNob3VsZCBiZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNDQtICpcXHQ0MCBNSHouXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI0NTogKiBATUFDODAyMTFfSFdTSU1fVFhfUkNfODBfTUhaX1dJRFRIOiBJbmRpY2F0ZXMgODAgTUh6IHRyYW5zbWlzc2lvblxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNDY6ICogQE1BQzgwMjExX0hXU0lNX1RYX1JDXzE2MF9NSFpfV0lEVEg6IEluZGljYXRlcyAxNjAgTUh6IHRyYW5zbWlzc2lvblxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNDctICpcXHQoODArODAgaXNuJ3Qgc3VwcG9ydGVkIHlldClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjQ4OiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19EVVBfREFUQTogVGhlIGZyYW1lIHNob3VsZCBiZSB0cmFuc21pdHRlZCBvbiBib3RoIG9mXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI0OS0gKlxcdHRoZSBhZGphY2VudCAyMCBNSHogY2hhbm5lbHMsIGlmIHRoZSBjdXJyZW50IGNoYW5uZWwgdHlwZSBpc1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNTAtICpcXHROTDgwMjExX0NIQU5fSFQ0ME1JTlVTIG9yIE5MODAyMTFfQ0hBTl9IVDQwUExVUy5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjUxOiAqIEBNQUM4MDIxMV9IV1NJTV9UWF9SQ19TSE9SVF9HSTogU2hvcnQgR3VhcmQgaW50ZXJ2YWwgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjUyLSAqXFx0cmF0ZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaD0yNTQ9ZW51bSBod3NpbV90eF9yYXRlX2ZsYWdzIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU1OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9SVFNfQ1RTXFx0XFx0PSBCSVQoMCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI1NjpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1RcXHRcXHQ9IEJJVCgxKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjU3OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRVxcdD0gQklUKDIpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaC0yNTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTI1OS1cXHQvKiByYXRlIGluZGV4IGlzIGFuIEhUL1ZIVCBNQ1MgaW5zdGVhZCBvZiBhbiBpbmRleCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjA6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTXFx0XFx0XFx0PSBCSVQoMyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MTpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19HUkVFTl9GSUVMRFxcdFxcdD0gQklUKDQpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjI6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfNDBfTUhaX1dJRFRIXFx0XFx0PSBCSVQoNSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oOjI2MzpcXHRNQUM4MDIxMV9IV1NJTV9UWF9SQ19EVVBfREFUQVxcdFxcdD0gQklUKDYpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjQ6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfU0hPUlRfR0lcXHRcXHQ9IEJJVCg3KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjY1OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDX1ZIVF9NQ1NcXHRcXHRcXHQ9IEJJVCg4KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MjY2OlxcdE1BQzgwMjExX0hXU0lNX1RYX1JDXzgwX01IWl9XSURUSFxcdFxcdD0gQklUKDkpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW0uaDoyNjc6XFx0TUFDODAyMTFfSFdTSU1fVFhfUkNfMTYwX01IWl9XSURUSFxcdFxcdD0gQklUKDEwKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmgtMjY4LX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg9MzMxPWVudW0gaHdzaW1fcmF0ZV9pbmZvX2F0dHJpYnV0ZXMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oLTM1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmg6MzUxOiNlbmRpZiAvKiBfX01BQzgwMjExX0hXU0lNX0ggKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oLTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9pLmg6MTA6I2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX0lfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjExOiNkZWZpbmUgX19NQUM4MDIxMV9IV1NJTV9JX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX2kuaC0xMi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oPTE2NT12b2lkIGllZWU4MDIxMV9od3NpbV93YWtlX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9pLmgtMTY3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1faS5oOjE2ODojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9JX0ggKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxMj1zdGF0aWMgc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoY29uc3QgdTggKmFkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NzE3Oi8qIE1BQzgwMjExX0hXU0lNIG5ldGxpbmsgZmFtaWx5ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE4LXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgaHdzaW1fZ2VubF9mYW1pbHk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBod3NpbV9tY2dycHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcyNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3Mjg6LyogTUFDODAyMTFfSFdTSU0gbmV0bGluayBwb2xpY3kgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MjktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz04NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGh3c2ltX2dlbmxfcG9saWN5W0hXU0lNX0FUVFJfTUFYICsgMV0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy05MDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6OTAzOi8qIE1BQzgwMjExX0hXU0lNIHZpcnRpbyBxdWV1ZXMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy05MDQtc3RhdGljIHN0cnVjdCB2aXJ0cXVldWUgKmh3c2ltX3Zxc1tIV1NJTV9OVU1fVlFTXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTE1NzU9c3RhdGljIGlubGluZSB1MTYgdHJhbnNfdHhfcmF0ZV9mbGFnc19pZWVlMmh3c2ltKHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1NzktXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODA6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9SVFNfQ1RTO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODEtXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTgyOlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU4My1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODQ6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNTg1LVxcdGlmIChyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9UWF9SQ19NQ1MpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU4NjpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfTUNTO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODctXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjE1ODg6XFx0XFx0cmVzdWx0IHw9IE1BQzgwMjExX0hXU0lNX1RYX1JDX0dSRUVOX0ZJRUxEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1ODktXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTkwOlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ180MF9NSFpfV0lEVEg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5MS1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU5MjpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfRFVQX0RBVEE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5My1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTU5NDpcXHRcXHRyZXN1bHQgfD0gTUFDODAyMTFfSFdTSU1fVFhfUkNfU0hPUlRfR0k7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5NS1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfVkhUX01DUylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTk2OlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ19WSFRfTUNTO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE1OTctXFx0aWYgKHJhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX1RYX1JDXzgwX01IWl9XSURUSClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNTk4OlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ184MF9NSFpfV0lEVEg7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTU5OS1cXHRpZiAocmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRUVFODAyMTFfVFhfUkNfMTYwX01IWl9XSURUSClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNjAwOlxcdFxcdHJlc3VsdCB8PSBNQUM4MDIxMV9IV1NJTV9UWF9SQ18xNjBfTUhaX1dJRFRIO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE2MDEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0zNDg3PXN0YXRpYyBjb25zdCBjaGFyIG1hYzgwMjExX2h3c2ltX2dzdHJpbmdzX3N0YXRzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM0OTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MzQ5ODojZGVmaW5lIE1BQzgwMjExX0hXU0lNX1NTVEFUU19MRU4gQVJSQVlfU0laRShtYWM4MDIxMV9od3NpbV9nc3RyaW5nc19zdGF0cylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNDk5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MzUwOT1zdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX2dldF9ldF9zc2V0X2NvdW50KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzUxMi1cXHRpZiAoc3NldCA9PSBFVEhfU1NfU1RBVFMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MzUxMzpcXHRcXHRyZXR1cm4gTUFDODAyMTFfSFdTSU1fU1NUQVRTX0xFTjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNTE0LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MzUxNz1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9nZXRfZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNTMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM1MzM6XFx0V0FSTl9PTihpICE9IE1BQzgwMjExX0hXU0lNX1NTVEFUU19MRU4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM1MzQtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NTY1MD1zdGF0aWMgY29uc3QgdTggaWZ0eXBlc19leHRfY2FwYV9hcFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTY1OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjU5OiNkZWZpbmUgTUFDODAyMTFfSFdTSU1fTUxEX0NBUEFfT1BTXFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NjAtXFx0RklFTERfUFJFUF9DT05TVChJRUVFODAyMTFfTUxEX0NBUF9PUF9USURfVE9fTElOS19NQVBfTkVHX1NVUFAsIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NjU9c3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV9pZnR5cGVfZXh0X2NhcGFiIG1hYzgwMjExX2h3c2ltX2lmdHlwZXNfZXh0X2NhcGFbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2NzItXFx0XFx0XFx0XFx0ICAgIElFRUU4MDIxMV9FTUxfQ0FQX0VNTE1SX1NVUFBPUlQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTY3MzpcXHRcXHQubWxkX2NhcGFfYW5kX29wcyA9IE1BQzgwMjExX0hXU0lNX01MRF9DQVBBX09QUyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01Njc0LVxcdH0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz03MTk5PXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgaHdzaW1fZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcyMDA6XFx0Lm5hbWUgPSBcXFwiTUFDODAyMTFfSFdTSU1cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcyMDEtXFx0LnZlcnNpb24gPSAxLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzUxOT1zdGF0aWMgdm9pZCBod3NpbV92aXJ0aW9fcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzUyNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo3NTI4Oi8qIE1BQzgwMjExX0hXU0lNIHZpcnRpbyBkZXZpY2UgaWQgdGFibGUgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03NTI5LXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjc1MzA6XFx0eyBWSVJUSU9fSURfTUFDODAyMTFfSFdTSU0sIFZJUlRJT19ERVZfQU5ZX0lEIH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzUzMS1cXHR7IDAgfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz03OD1zdGF0aWMgdTY0IGh3c2ltX25hbl9nZXRfbWFzdGVyX3Jhbmsoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTgyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODM6XFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVApIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTg0LVxcdFxcdG1hc3Rlcl9wcmVmID0gZGF0YS1cXHUwMDNlbmFuLm1hc3Rlcl9wcmVmO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz0yMTY9dm9pZCBtYWM4MDIxMV9od3NpbV9uYW5fcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTI3My1cXHRpZiAoKHNsb3QgIT0gU0xPVF8yNEdIWl9EVyBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6Mjc0OlxcdCAgICAgZGF0YS1cXHUwMDNlbmFuLnBoYXNlICE9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9TQ0FOKSB8fFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMjc1LVxcdCAgICByeF9zdGF0dXMuZnJlcSAhPSAyNDM3KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00MzYtXFx0XFx0ICAgIChjZyA9PSBvd25fY2cgXFx1MDAyNlxcdTAwMjYgZnJhbWVfYW1yIFxcdTAwM2UgY3Vycl9hbXIpIHx8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo0Mzc6XFx0XFx0ICAgIGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTikge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDM4LVxcdFxcdFxcdC8qIEF2b2lkIGEgc3RhdGUgdHJhbnNpdGlvbiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy00NjgtXFx0XFx0XFx0ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo0Njk6XFx0XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnBoYXNlID0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1VQO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNDcwLVxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yYW5kb21fZmFjdG9yX3ZhbGlkX2R3c3QgPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz02MTI9bWFjODAyMTFfaHdzaW1fbmFuX2V4ZWNfc3RhdGVfdHJhbnNpdGlvbnMoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYyNS1cXHRpZiAoZGF0YS1cXHUwMDNlbmFuLm1hc3Rlcl90cmFuc2l0aW9uX3Njb3JlIFxcdTAwM2MgMylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYyNjpcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucm9sZSA9IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjYyNzpcXHRlbHNlIGlmIChkYXRhLVxcdTAwM2VuYW4ucm9sZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYyOC1cXHRcXHQgZGF0YS1cXHUwMDNlbmFuLm1hc3Rlcl90cmFuc2l0aW9uX3Njb3JlIFxcdTAwM2U9IDMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2Mjk6XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMwOlxcdGVsc2UgaWYgKGRhdGEtXFx1MDAzZW5hbi5yb2xlID09IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX1NZTkMgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYzMS1cXHRcXHQgZGF0YS1cXHUwMDNlbmFuLnN5bmNfdHJhbnNpdGlvbl9zY29yZSBcXHUwMDNlPSAzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjMyOlxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yb2xlID0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTk9OX1NZTkM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzM6XFx0ZWxzZSBpZiAoZGF0YS1cXHUwMDNlbmFuLnJvbGUgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1JPTEVfTk9OX1NZTkMgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTYzNC1cXHRcXHQgZGF0YS1cXHUwMDNlbmFuLnN5bmNfdHJhbnNpdGlvbl9zY29yZSBcXHUwMDNjIDMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2MzU6XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9TWU5DO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjM2LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy02NDEtXFx0ICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo2NDI6XFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5yb2xlID09IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUiBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjQzLVxcdCAgICAhaHJ0aW1lcl9hY3RpdmUoXFx1MDAyNmRhdGEtXFx1MDAzZW5hbi5kaXNjb3ZlcnlfYmVhY29uX3RpbWVyKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjUzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjU0OlxcdFxcdGlmIChkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPT0gTUFDODAyMTFfSFdTSU1fTkFOX1BIQVNFX1NDQU4pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjY1NTpcXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucGhhc2UgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfV0FSTVVQO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNjU2LVxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yYW5kb21fZmFjdG9yX3ZhbGlkX2R3c3QgPSBOQU5fV0FSTVVQX0RXU1Q7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY1OS1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6NjYwOlxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTY2MS1cXHRcXHRcXHRkYXRhLVxcdTAwM2VuYW4ucmFuZG9tX2ZhY3Rvcl92YWxpZF9kd3N0ID1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9Njk1PW1hYzgwMjExX2h3c2ltX25hbl90eF9iZWFjb24oc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTc1MC1cXHRuYW5fYXR0ci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YobWFzdGVyX2luZGljYXRpb24pKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjc1MTpcXHRpZiAoZGF0YS1cXHUwMDNlbmFuLnBoYXNlID09IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9VUCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtNzUyLVxcdFxcdG1hc3Rlcl9pbmRpY2F0aW9uLm1hc3Rlcl9wcmVmID0gZGF0YS1cXHUwMDNlbmFuLm1hc3Rlcl9wcmVmO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz03NzQ9bWFjODAyMTFfaHdzaW1fbmFuX3Nsb3RfdGltZXIoc3RydWN0IGhydGltZXIgKnRpbWVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04MDctXFx0XFx0dHhfc3luY19iZWFjb24gPVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODA4OlxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5waGFzZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTiBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODA5OlxcdFxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yb2xlICE9IE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX05PTl9TWU5DO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODEwLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM9ODY3PW1hYzgwMjExX2h3c2ltX25hbl9kaXNjb3ZlcnlfYmVhY29uX3RpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtODc5LVxcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXFx1MDAyNmRhdGEtXFx1MDAzZW5hbi5zdGF0ZV9sb2NrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo4ODA6XFx0XFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTiB8fFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6ODgxOlxcdFxcdCAgICBkYXRhLVxcdTAwM2VuYW4ucm9sZSAhPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy04ODItXFx0XFx0XFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYz05MDk9aW50IG1hYzgwMjExX2h3c2ltX25hbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtOTI2LVxcdFxcdC8qIFN0YXJ0IGluIHRoZSBcXFwic2NhblxcXCIgcGhhc2UgYW5kIHN0YXkgdGhlcmUgZm9yIGEgbGl0dGxlIGJpdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmM6OTI3OlxcdFxcdGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9IE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9TQ0FOO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtOTI4LVxcdFxcdGRhdGEtXFx1MDAzZW5hbi5yYW5kb21fZmFjdG9yX3ZhbGlkX2R3c3QgPSAxO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy05MzAtXFx0XFx0ZGF0YS1cXHUwMDNlbmFuLm1hc3Rlcl9wcmVmID0gY29uZi1cXHUwMDNlbWFzdGVyX3ByZWY7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYzo5MzE6XFx0XFx0ZGF0YS1cXHUwMDNlbmFuLnJvbGUgPSBNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9NQVNURVI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uYy05MzItXFx0XFx0bWVtc2V0KFxcdTAwMjZkYXRhLVxcdTAwM2VuYW4uY3VycmVudF9hbWksIDAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jPTEyMjY9Ym9vbCBtYWM4MDIxMV9od3NpbV9uYW5fcmVjZWl2ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmMtMTIzNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jOjEyMzY6XFx0aWYgKGRhdGEtXFx1MDAzZW5hbi5waGFzZSA9PSBNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5jLTEyMzctXFx0XFx0cmV0dXJuIGNoYW5uZWwtXFx1MDAzZWNlbnRlcl9mcmVxID09IDI0Mzc7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDo3OiNpZm5kZWYgX19NQUM4MDIxMV9IV1NJTV9OQU5fSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbmFuLmg6ODojZGVmaW5lIF9fTUFDODAyMTFfSFdTSU1fTkFOX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaD0xMD1lbnVtIG1hYzgwMjExX2h3c2ltX25hbl9waGFzZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMTpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfU0NBTixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjEyOlxcdE1BQzgwMjExX0hXU0lNX05BTl9QSEFTRV9XQVJNVVAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxMzpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUEhBU0VfVVAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaC0xNC19O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaD0xNj1lbnVtIG1hYzgwMjExX2h3c2ltX25hbl9yb2xlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjE3OlxcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX01BU1RFUixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjE4OlxcdE1BQzgwMjExX0hXU0lNX05BTl9ST0xFX1NZTkMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9uYW4uaDoxOTpcXHRNQUM4MDIxMV9IV1NJTV9OQU5fUk9MRV9OT05fU1lOQyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTIwLX07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oPTk5PXZvaWQgbWFjODAyMTFfaHdzaW1fbmFuX2xvY2FsX3NjaGVkX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oLTEwMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX25hbi5oOjEwMjojZW5kaWYgLyogX19NQUM4MDIxMV9IV1NJTV9OQU5fSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODowMy42ODQ4MjUwOTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODkzMTg1MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBWaXJ0dWFsIFdpcmVsZXNzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSB2aXJ0dWFsIHdpcmVsZXNzIG5ldHdvcmsgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgZHJpdmVyLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUganVpY3kgZGV0YWlscyBhYm91dCBmZWF0dXJlIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIGFyZSBrZXB0LiBUaGF0J3MgdGhlIGZpcnN0IHN0b3AgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgZml0cyBpbnRvIHRoZSBicm9hZGVyIHdpcmVsZXNzIGxhbmRzY2FwZSBhbmQgd2hhdCdzIGNvbmZpZ3VyYWJsZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzc2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjg6MDkuNTc4MDEzMTk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3RcXG4gICA2OlxcdFxcdCAgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayAobWFjODAyMTEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaXMgbm90XFxuICAgNzpcXHRcXHQgIG5lZWRlZCBmb3Igbm9ybWFsIHdpcmVsZXNzIExBTiB1c2FnZSBhbmQgaXMgb25seSBmb3IgdGVzdGluZy4gU2VlXFxuICAgODpcXHRcXHQgIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9tYWM4MDIxMV9od3NpbSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3dcXG4gICA5OlxcdFxcdCAgdG8gdXNlIHRoaXMgdG9vbC5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gIDEyOlxcdFxcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFZJUlRfV0lGSVxcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIldpZmkgd3JhcHBlciBmb3IgZXRoZXJuZXQgZHJpdmVyc1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxcbiAgMTk6XFx0XFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI4OjA5LjU3ODA5MTM2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTk0OTQwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTUFDODAyMTEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE1BQzgwMjExYCBhbmQgc3BlY2lmaWNhbGx5IGBNQUM4MDIxMV9IV1NJTWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIOKAkyBuYW1lbHksIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgYXMgaXQgc2hvdWxkIGRlZmluZSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGZyb20gdGhlcmUuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYE1BQzgwMjExX0hXU0lNYCBoYXMgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBtZXQgYmVmb3JlIGl0IGNhbiBldmVuIGJlIGNvbnNpZGVyZWQsIG9yIGlmIGl0IGlzIGp1c3QgYSBzdWJvcHRpb24gb2YgdGhlIGdlbmVyYWwgYE1BQzgwMjExYCBjb25maWd1cmF0aW9uLiBJIG1pZ2h0IGFsc28gbmVlZCB0byBsb29rIGF0IHBhcmVudCBLY29uZmlnIGZpbGVzIG9yIGRlcGVuZGVuY2llcywganVzdCBpbiBjYXNlIHNvbWV0aGluZyBpcyBkZWZpbmVkIG9yIGNvbmRpdGlvbmVkIGhpZ2hlciB1cCBpbiB0aGUgaGllcmFyY2h5LiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyB1c3VhbGx5IGhhcHBlbnMuIEkgc2hvdWxkIHF1aWNrbHkgYmUgYWJsZSB0byBzZWUgdGhlIHJlbGV2YW50ICdkZXBlbmRzIG9uJyBjbGF1c2VzIGFuZCBhbnkgcG90ZW50aWFsbHkgY29uZmxpY3Rpbmcgb3B0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZnVsbCBjb25maWd1cmF0aW9uIGNvbnRleHQgaXMgdGhlIGtleSB0byBzb2x2aW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTA0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODoxMi40Mzc1ODgyODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzAyMDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUM4MDIxMVxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjg6MTIuNDkxMjk4MzAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzAzMzcyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBsaW5lIG9mIHRob3VnaHQsIHJlZmxlY3RpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIEZpbGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L21hYzgwMjExL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBjb25maWd1cmF0aW9uIGZpbGUsIG15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyByZWdpb24gbGlrZWx5IGRlZmluZXMgc29tZSBjb3JlLCBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEtub3dpbmcgdGhhdCBtYWM4MDIxMSBpcyB0aGUgaGVhcnQgb2YgdGhlIExpbnV4IHdpcmVsZXNzIHN0YWNrLCBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgZ2VuZXJhbCBtb2R1bGUgb3IgYSB0b3AtbGV2ZWwgbWFjcm8uIEknbSBnb2luZyBpbiB3aXRoIHRoZSBleHBlY3RhdGlvbiBvZiBnZXR0aW5nIGEgZm91bmRhdGlvbmFsIG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI4OjE0LjUyMTYzOTQyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBNQUM4MDIxMVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxcbiAgIDU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ19NQUNTXFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FFU1xcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19DQ01cXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTFcXG4gIDE0OlxcdFxcdCAgbmV0d29ya2luZyBzdGFjay5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29tbWVudCBcXFwiQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTFcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExPW5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0aWYgTUFDODAyMTEgIT0gblxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI4OjE0LjUyMTc3ODQ5MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzc4NTM5ODAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIGNvZGUgY2hhbmdlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMgZnVsbHksIHNvIEknbGwgdmVyaWZ5IHRoZWlyIHJlYWNoLCBwdXJwb3NlLCBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgZWRnZSBjYXNlcy5cblxuKipDb2RlIFJldmlldyAtIEFuYWx5emluZyBSZWNlbnQgQ2hhbmdlcyBpbiBtYWM4MDIxMV9od3NpbSoqXG5cbkZpcnN0LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubGAsIGBtYWM4MDIxMV9od3NpbV90eGAsIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgYW5kIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLiBUaGV5J3JlIHRoZSBjb3JlIG9mIHRoZSByZWNlbnQgd29yay4gSSB3aWxsIGFwcHJvYWNoIHRoaXMgc3lzdGVtYXRpY2FsbHkuXG5cblRvIGdldCBhIGdvb2QgdW5kZXJzdGFuZGluZywgSSdsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBjb2RlIGJsb2NrIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNjQ5MCB0byA2NTkwLiBUaGlzIHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IGZvciB0aGVzZSBmdW5jdGlvbnMuIEkgd2lsbCBzdGFydCBieSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGxpbmUgYnkgbGluZSBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4MzcsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODoyOC4zMDcxODAzNjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ4NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NDkwOlxcdFxcbjY0OTE6XFx0c3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbjY0OTI6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjY0OTM6XFx0e1xcbjY0OTQ6XFx0XFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEyO1xcbjY0OTU6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzO1xcbjY0OTY6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcXG42NDk3OlxcdFxcdGNvbnN0IHU4ICpkc3Q7XFxuNjQ5ODpcXHRcXHRpbnQgZnJhbWVfZGF0YV9sZW47XFxuNjQ5OTpcXHRcXHR2b2lkICpmcmFtZV9kYXRhO1xcbjY1MDA6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuNjUwMTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBOVUxMO1xcbjY1MDI6XFx0XFxuNjUwMzpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0gfHxcXG42NTA0OlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GUkFNRV0gfHxcXG42NTA1OlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9SWF9SQVRFXSB8fFxcbjY1MDY6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1NJR05BTF0pXFxuNjUwNzpcXHRcXHRcXHRnb3RvIG91dDtcXG42NTA4OlxcdFxcbjY1MDk6XFx0XFx0ZHN0ID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfUkVDRUlWRVJdKTtcXG42NTEwOlxcdFxcdGZyYW1lX2RhdGFfbGVuID0gbmxhX2xlbihpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSk7XFxuNjUxMTpcXHRcXHRmcmFtZV9kYXRhID0gKHZvaWQgKilubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSk7XFxuNjUxMjpcXHRcXG42NTEzOlxcdFxcdGlmIChmcmFtZV9kYXRhX2xlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgfHxcXG42NTE0OlxcdFxcdCAgICBmcmFtZV9kYXRhX2xlbiBcXHUwMDNlIElFRUU4MDIxMV9NQVhfREFUQV9MRU4pXFxuNjUxNTpcXHRcXHRcXHRnb3RvIGVycjtcXG42NTE2OlxcdFxcbjY1MTc6XFx0XFx0LyogQWxsb2NhdGUgbmV3IHNrYiBoZXJlICovXFxuNjUxODpcXHRcXHRza2IgPSBhbGxvY19za2IoZnJhbWVfZGF0YV9sZW4sIEdGUF9LRVJORUwpO1xcbjY1MTk6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbjY1MjA6XFx0XFx0XFx0Z290byBlcnI7XFxuNjUyMTpcXHRcXG42NTIyOlxcdFxcdC8qIENvcHkgdGhlIGRhdGEgKi9cXG42NTIzOlxcdFxcdHNrYl9wdXRfZGF0YShza2IsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTtcXG42NTI0OlxcdFxcbjY1MjU6XFx0XFx0ZGF0YTIgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKGRzdCk7XFxuNjUyNjpcXHRcXHRpZiAoIWRhdGEyKVxcbjY1Mjc6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjUyODpcXHRcXG42NTI5OlxcdFxcdGlmIChkYXRhMi1cXHUwMDNldXNlX2NoYW5jdHgpIHtcXG42NTMwOlxcdFxcdFxcdGlmIChkYXRhMi1cXHUwMDNldG1wX2NoYW4pXFxuNjUzMTpcXHRcXHRcXHRcXHRjaGFubmVsID0gZGF0YTItXFx1MDAzZXRtcF9jaGFuO1xcbjY1MzI6XFx0XFx0fSBlbHNlIHtcXG42NTMzOlxcdFxcdFxcdGNoYW5uZWwgPSBkYXRhMi1cXHUwMDNlY2hhbm5lbDtcXG42NTM0OlxcdFxcdH1cXG42NTM1OlxcdFxcbjY1MzY6XFx0XFx0aWYgKCFod3NpbV92aXJ0aW9fZW5hYmxlZCkge1xcbjY1Mzc6XFx0XFx0XFx0aWYgKGh3c2ltX25ldF9nZXRfbmV0Z3JvdXAoZ2VubF9pbmZvX25ldChpbmZvKSkgIT1cXG42NTM4OlxcdFxcdFxcdCAgICBkYXRhMi1cXHUwMDNlbmV0Z3JvdXApXFxuNjUzOTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG42NTQwOlxcdFxcbjY1NDE6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZXNuZF9wb3J0aWQgIT0gZGF0YTItXFx1MDAzZXdtZWRpdW1kKVxcbjY1NDI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNjU0MzpcXHRcXHR9XFxuNjU0NDpcXHRcXG42NTQ1OlxcdFxcdC8qIGxvb2sgZm9yIHRoZSBza2IgbWF0Y2hpbmcgdGhlIGNvb2tpZSBwYXNzZWQgYmFjayBmcm9tIHVzZXIgKi9cXG42NTQ2OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0gXFx1MDAyNlxcdTAwMjZcXG42NTQ3OlxcdFxcdCAgICBpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKSB7XFxuNjU0ODpcXHRcXHRcXHR1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcXG42NTQ5OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpvcmlnX3NrYiwgKmZvdW5kID0gTlVMTDtcXG42NTUwOlxcdFxcdFxcdHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICp0eGRhdGE7XFxuNjU1MTpcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aTtcXG42NTUyOlxcdFxcdFxcdGNvbnN0IHU4ICp0cmFuc21pdHRlcjtcXG42NTUzOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuNjU1NDpcXHRcXG42NTU1OlxcdFxcdFxcdHRyYW5zbWl0dGVyID0gbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XFxuNjU1NjpcXHRcXHRcXHR0eGRhdGEgPSBnZXRfaHdzaW1fZGF0YV9yZWZfZnJvbV9hZGRyKHRyYW5zbWl0dGVyKTtcXG42NTU3OlxcdFxcdFxcdGlmICghdHhkYXRhIHx8IHR4ZGF0YS1cXHUwMDNlbmV0Z3JvdXAgIT0gZGF0YTItXFx1MDAzZW5ldGdyb3VwKVxcbjY1NTg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNjU1OTpcXHRcXG42NTYwOlxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbjY1NjE6XFx0XFx0XFx0c2tiX3F1ZXVlX3dhbGsoXFx1MDAyNnR4ZGF0YS1cXHUwMDNlcGVuZGluZywgb3JpZ19za2IpIHtcXG42NTYyOlxcdFxcdFxcdFxcdHVpbnRwdHJfdCBza2JfY29va2llO1xcbjY1NjM6XFx0XFxuNjU2NDpcXHRcXHRcXHRcXHR0eGkgPSBJRUVFODAyMTFfU0tCX0NCKG9yaWdfc2tiKTtcXG42NTY1OlxcdFxcdFxcdFxcdHNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXTtcXG42NTY2OlxcdFxcbjY1Njc6XFx0XFx0XFx0XFx0aWYgKHNrYl9jb29raWUgPT0gY29va2llKSB7XFxuNjU2ODpcXHRcXHRcXHRcXHRcXHRmb3VuZCA9IG9yaWdfc2tiO1xcbjY1Njk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNjU3MDpcXHRcXHRcXHRcXHR9XFxuNjU3MTpcXHRcXHRcXHR9XFxuNjU3MjpcXHRcXG42NTczOlxcdFxcdFxcdC8qIHRoYXQncyB3ZWlyZCAqL1xcbjY1NzQ6XFx0XFx0XFx0aWYgKCFmb3VuZCkge1xcbjY1NzU6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHhkYXRhLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NTc2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjY1Nzc6XFx0XFx0XFx0fVxcbjY1Nzg6XFx0XFxuNjU3OTpcXHRcXHRcXHRpZiAoZnJhbWVfZGF0YV9sZW4gXFx1MDAzZSBmb3VuZC1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2XFxuNjU4MDpcXHRcXHRcXHQgICAgcHNrYl9leHBhbmRfaGVhZChmb3VuZCwgMCwgZnJhbWVfZGF0YV9sZW4gLSBmb3VuZC1cXHUwMDNlbGVuLFxcbjY1ODE6XFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfQVRPTUlDKSkge1xcbjY1ODI6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHhkYXRhLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NTgzOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjY1ODQ6XFx0XFx0XFx0fVxcbjY1ODU6XFx0XFx0XFx0c2tiX3RyaW0oZm91bmQsIDApO1xcbjY1ODY6XFx0XFx0XFx0c2tiX3B1dF9kYXRhKGZvdW5kLCBmcmFtZV9kYXRhLCBmcmFtZV9kYXRhX2xlbik7XFxuNjU4NzpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbjY1ODg6XFx0XFx0fVxcbjY1ODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI4OjI4LjMwNzUzMTg2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzM4MDU2NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBIYXJkd2FyZSBTaW11bGF0aW9uIGZvciBGcmFtZSBUcmFuc21pc3Npb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gYXNwZWN0cyBvZiB0aGlzIGZyYW1lIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGEgYml0IGRlZXBlci4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdHdvIHNwZWNpZmljIGFyZWFzIGluIHRoZSBjb2RlLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgZnJvbSB0aGUgcG9pbnQgdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gcmVjZWl2ZXMgc29tZSBUWCBpbmZvcm1hdGlvbjsgSSdsbCBmb2N1cyBvbiBgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubGAgKGxpbmVzIDYzOTAtNjQ5MCkuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2ltdWxhdGlvbiBwcm9jZXNzZXMgdGhhdCBpbnB1dC4gVGhlbiwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gYWN0dWFsbHkgKnNlbmRzKiB0aGUgZnJhbWUsIHNvIEknbGwgYWxzbyBiZSBleGFtaW5pbmcgYG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25sYCAobGluZXMgMTcyMC0xNzYwKS4gQnkgZXhhbWluaW5nIHRoZXNlIHR3byBmdW5jdGlvbnMsIEknbGwgYnVpbGQgYSBtdWNoIGJldHRlciBwaWN0dXJlIG9mIGhvdyB0aGUgc2ltdWxhdGlvbiBoYW5kbGVzIFRYIGZyYW1lIGRhdGEgZW5kLXRvLWVuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMDksIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI4OjMwLjY0NTU5MTI1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTIyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjM5MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjM5MDpcXHRcXHR1NjQgcmV0X3NrYl9jb29raWU7XFxuNjM5MTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wO1xcbjYzOTI6XFx0XFx0Y29uc3QgdTggKnNyYztcXG42MzkzOlxcdFxcdHVuc2lnbmVkIGludCBod3NpbV9mbGFncztcXG42Mzk0OlxcdFxcdGludCBpO1xcbjYzOTU6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG42Mzk2OlxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG42Mzk3OlxcdFxcdGJvb2wgbm9fbW9uaXRvcjtcXG42Mzk4OlxcdFxcdHUzMiBmcmVxO1xcbjYzOTk6XFx0XFxuNjQwMDpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0gfHxcXG42NDAxOlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10gfHxcXG42NDAyOlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdIHx8XFxuNjQwMzpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfU0lHTkFMXSB8fFxcbjY0MDQ6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1RYX0lORk9dKVxcbjY0MDU6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjQwNjpcXHRcXG42NDA3OlxcdFxcdHNyYyA9ICh2b2lkICopbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XFxuNjQwODpcXHRcXHRod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTtcXG42NDA5OlxcdFxcdHJldF9za2JfY29va2llID0gbmxhX2dldF91NjQoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcXG42NDEwOlxcdFxcdG5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7XFxuNjQxMTpcXHRcXG42NDEyOlxcdFxcdGRhdGEyID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcihzcmMpO1xcbjY0MTM6XFx0XFx0aWYgKCFkYXRhMilcXG42NDE0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjY0MTU6XFx0XFxuNjQxNjpcXHRcXHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XFxuNjQxNzpcXHRcXHRcXHRpZiAoaHdzaW1fbmV0X2dldF9uZXRncm91cChnZW5sX2luZm9fbmV0KGluZm8pKSAhPVxcbjY0MTg6XFx0XFx0XFx0ICAgIGRhdGEyLVxcdTAwM2VuZXRncm91cClcXG42NDE5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjY0MjA6XFx0XFxuNjQyMTpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cXHUwMDNld21lZGl1bWQpXFxuNjQyMjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG42NDIzOlxcdFxcdH1cXG42NDI0OlxcdFxcbjY0MjU6XFx0XFx0LyogbG9vayBmb3IgdGhlIHNrYiBtYXRjaGluZyB0aGUgY29va2llIHBhc3NlZCBiYWNrIGZyb20gdXNlciAqL1xcbjY0MjY6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NDI3OlxcdFxcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLCBza2IsIHRtcCkge1xcbjY0Mjg6XFx0XFx0XFx0dWludHB0cl90IHNrYl9jb29raWU7XFxuNjQyOTpcXHRcXG42NDMwOlxcdFxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG42NDMxOlxcdFxcdFxcdHNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXTtcXG42NDMyOlxcdFxcbjY0MzM6XFx0XFx0XFx0aWYgKHNrYl9jb29raWUgPT0gcmV0X3NrYl9jb29raWUpIHtcXG42NDM0OlxcdFxcdFxcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZkYXRhMi1cXHUwMDNlcGVuZGluZyk7XFxuNjQzNTpcXHRcXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuNjQzNjpcXHRcXHRcXHRcXHRicmVhaztcXG42NDM3OlxcdFxcdFxcdH1cXG42NDM4OlxcdFxcdH1cXG42NDM5OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NDQwOlxcdFxcbjY0NDE6XFx0XFx0Lyogbm90IGZvdW5kICovXFxuNjQ0MjpcXHRcXHRpZiAoIWZvdW5kKVxcbjY0NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjQ0NDpcXHRcXG42NDQ1OlxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG42NDQ2OlxcdFxcdGZyZXEgPSAodWludHB0cl90KXR4aS1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXTtcXG42NDQ3OlxcdFxcbjY0NDg6XFx0XFx0aWYgKCFub19tb25pdG9yKVxcbjY0NDk6XFx0XFx0XFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi1cXHUwMDNlaHcsIHNrYiwgZnJlcSk7XFxuNjQ1MDpcXHRcXG42NDUxOlxcdFxcdC8qIFR4IGluZm8gcmVjZWl2ZWQgYmVjYXVzZSB0aGUgZnJhbWUgd2FzIGJyb2FkY2FzdGVkIG9uIHVzZXIgc3BhY2UsXFxuNjQ1MjpcXHRcXHQgc28gd2UgZ2V0IGFsbCB0aGUgbmVjZXNzYXJ5IGluZm86IHR4IGF0dGVtcHRzIGFuZCBza2IgY29udHJvbCBidWZmICovXFxuNjQ1MzpcXHRcXG42NDU0OlxcdFxcdHR4X2F0dGVtcHRzID0gKHN0cnVjdCBod3NpbV90eF9yYXRlICopbmxhX2RhdGEoXFxuNjQ1NTpcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XFxuNjQ1NjpcXHRcXG42NDU3OlxcdFxcdC8qIG5vdyBzZW5kIGJhY2sgVFggc3RhdHVzICovXFxuNjQ1ODpcXHRcXHRpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhpKTtcXG42NDU5OlxcdFxcbjY0NjA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykge1xcbjY0NjE6XFx0XFx0XFx0dHhpLVxcdTAwM2VzdGF0dXMucmF0ZXNbaV0uaWR4ID0gdHhfYXR0ZW1wdHNbaV0uaWR4O1xcbjY0NjI6XFx0XFx0XFx0dHhpLVxcdTAwM2VzdGF0dXMucmF0ZXNbaV0uY291bnQgPSB0eF9hdHRlbXB0c1tpXS5jb3VudDtcXG42NDYzOlxcdFxcdH1cXG42NDY0OlxcdFxcbjY0NjU6XFx0XFx0dHhpLVxcdTAwM2VzdGF0dXMuYWNrX3NpZ25hbCA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfU0lHTkFMXSk7XFxuNjQ2NjpcXHRcXG42NDY3OlxcdFxcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG42NDY4OlxcdFxcdGkgPSBtYWM4MDIxMV9od3NpbV9nZXRfbGlua19pZCh0eGktXFx1MDAzZWNvbnRyb2wudmlmLCBoZHIpO1xcbjY0Njk6XFx0XFx0aWYgKGkgXFx1MDAzZT0gMCkge1xcbjY0NzA6XFx0XFx0XFx0dHhpLVxcdTAwM2VzdGF0dXMubGlua192YWxpZCA9IDE7XFxuNjQ3MTpcXHRcXHRcXHR0eGktXFx1MDAzZXN0YXR1cy5saW5rX2lkID0gaTtcXG42NDcyOlxcdFxcdH1cXG42NDczOlxcdFxcbjY0NzQ6XFx0XFx0aWYgKCEoaHdzaW1fZmxhZ3MgXFx1MDAyNiBIV1NJTV9UWF9DVExfTk9fQUNLKSBcXHUwMDI2XFx1MDAyNlxcbjY0NzU6XFx0XFx0ICAgKGh3c2ltX2ZsYWdzIFxcdTAwMjYgSFdTSU1fVFhfU1RBVF9BQ0spKSB7XFxuNjQ3NjpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gMTYpXFxuNjQ3NzpcXHRcXHRcXHRcXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhmcmVxLCBoZHItXFx1MDAzZWFkZHIyKTtcXG42NDc4OlxcdFxcdFxcdHR4aS1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLO1xcbjY0Nzk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODozMC42NDU5NDYxNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzc3MjU4NDU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqRXhhbWluaW5nIHRoZSBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgIEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBleGFtaW5lIHRoZSBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgMTcyMCB0aHJvdWdoIDE3NjAuIEkgaW1tZWRpYXRlbHkga25vdyB0aGUgY29udGV4dCBoZXJlOyB0aGlzIGxpa2VseSBkZWFscyB3aXRoIHRoZSBuZXR3b3JrIGxheWVyIGludGVyYWN0aW9uIGluIHRoZSBgbWFjODAyMTFfaHdzaW1gIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSB0cmFuc21pc3Npb24gc2lkZSBvZiB0aGluZ3MgZ2l2ZW4gdGhlIFwidHhcIiBpbiB0aGUgZnVuY3Rpb24gbmFtZS4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIG5ldHdvcmsgZnJhbWVzIGFyZSBwcm9jZXNzZWQsIGZvcm1hdHRlZCwgYW5kIHVsdGltYXRlbHkgaGFuZGVkIG9mZiAob3Igc2ltdWxhdGVkIGFzIGhhbmRlZCBvZmYpIHRvIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciBmb3IgdHJhbnNtaXNzaW9uIOKAkyBvciwgaW4gdGhpcyBzaW11bGF0ZWQgY2FzZSwgaGFuZGxlZCB3aXRoaW4gdGhlIGh3c2ltIGVudmlyb25tZW50LiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbmV0bGluayBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgdG8ga25vdyBleGFjdGx5IGhvdyB0aGUgZnJhbWUgY2hhcmFjdGVyaXN0aWNzIGFyZSBiZWluZyBwcmVzZW50ZWQsIGFuZCB0aGVuIGhvdyB0aGUgc2ltdWxhdGlvbiBoYW5kbGVzIHRoYXQgdG8gcHJvY2VlZC4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBiaXRzIG9uIGZyYW1lIHNlcmlhbGl6YXRpb24gb3Igc2ltdWxhdGlvbiBvZiB0cmFuc21pc3Npb24gZXJyb3JzIGluIHRoaXMgc2VjdGlvbiwgc28gdGhhdCdzIHNvbWV0aGluZyBJJ2xsIGJlIHN1cmUgdG8gbG9vayBmb3IuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGhpbmdzIGxpa2UgdGhlIHJhdGUgY29udHJvbCBwYXJhbWV0ZXJzLCB0aGUgcXVldWVpbmcgZGlzY2lwbGluZSwgYW5kIGFueSBwb3RlbnRpYWwgaGFyZHdhcmUtc3BlY2lmaWMgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBiZSByZWxldmFudCBpbiB0aGlzIHNpbXVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODkxLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODozOC40MTg1MzQzNjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3MjA6XFx0XFx0fVxcbjE3MjE6XFx0XFxuMTcyMjpcXHRcXHRpZiAobmxhX3B1dChza2IsIEhXU0lNX0FUVFJfVFhfSU5GTyxcXG4xNzIzOlxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IGh3c2ltX3R4X3JhdGUpKklFRUU4MDIxMV9UWF9NQVhfUkFURVMsXFxuMTcyNDpcXHRcXHRcXHQgICAgdHhfYXR0ZW1wdHMpKVxcbjE3MjU6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTcyNjpcXHRcXG4xNzI3OlxcdFxcdGlmIChubGFfcHV0KHNrYiwgSFdTSU1fQVRUUl9UWF9JTkZPX0ZMQUdTLFxcbjE3Mjg6XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgaHdzaW1fdHhfcmF0ZV9mbGFnKSAqIElFRUU4MDIxMV9UWF9NQVhfUkFURVMsXFxuMTcyOTpcXHRcXHRcXHQgICAgdHhfYXR0ZW1wdHNfZmxhZ3MpKVxcbjE3MzA6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTczMTpcXHRcXG4xNzMyOlxcdFxcdC8qIFdlIGNyZWF0ZSBhIGNvb2tpZSB0byBpZGVudGlmeSB0aGlzIHNrYiAqL1xcbjE3MzM6XFx0XFx0Y29va2llID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNmRhdGEtXFx1MDAzZXBlbmRpbmdfY29va2llKTtcXG4xNzM0OlxcdFxcdGluZm8tXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF0gPSAodm9pZCAqKWNvb2tpZTtcXG4xNzM1OlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEhXU0lNX0FUVFJfQ09PS0lFLCBjb29raWUsIEhXU0lNX0FUVFJfUEFEKSlcXG4xNzM2OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE3Mzc6XFx0XFxuMTczODpcXHRcXHQvKiB0cmFjayB0aGUgZnJlcXVlbmN5ICovXFxuMTczOTpcXHRcXHRpbmZvLVxcdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdID0gKHZvaWQgKikodWludHB0cl90KWNoYW5uZWwtXFx1MDAzZWNlbnRlcl9mcmVxO1xcbjE3NDA6XFx0XFxuMTc0MTpcXHRcXHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcXG4xNzQyOlxcdFxcbjE3NDM6XFx0XFx0aWYgKGh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XFxuMTc0NDpcXHRcXHRcXHRpZiAoaHdzaW1fdHhfdmlydGlvKGRhdGEsIHNrYikpXFxuMTc0NTpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3R4c2tiO1xcbjE3NDY6XFx0XFx0fSBlbHNlIHtcXG4xNzQ3OlxcdFxcdFxcdGlmIChod3NpbV91bmljYXN0X25ldGdyb3VwKGRhdGEsIHNrYiwgZHN0X3BvcnRpZCkpXFxuMTc0ODpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3R4c2tiO1xcbjE3NDk6XFx0XFx0fVxcbjE3NTA6XFx0XFxuMTc1MTpcXHRcXHQvKiBFbnF1ZXVlIHRoZSBwYWNrZXQgKi9cXG4xNzUyOlxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZkYXRhLVxcdTAwM2VwZW5kaW5nLCBteV9za2IpO1xcbjE3NTM6XFx0XFx0ZGF0YS1cXHUwMDNldHhfcGt0cysrO1xcbjE3NTQ6XFx0XFx0ZGF0YS1cXHUwMDNldHhfYnl0ZXMgKz0gbXlfc2tiLVxcdTAwM2VsZW47XFxuMTc1NTpcXHRcXHRyZXR1cm47XFxuMTc1NjpcXHRcXG4xNzU3OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4xNzU4OlxcdFxcdG5sbXNnX2ZyZWUoc2tiKTtcXG4xNzU5OlxcdGVycl9mcmVlX3R4c2tiOlxcbjE3NjA6XFx0XFx0cHJfZGVidWcoXFxcIm1hYzgwMjExX2h3c2ltOiBlcnJvciBvY2N1cnJlZCBpbiAlc1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbjE3NjE6XFx0XFx0aWVlZTgwMjExX2ZyZWVfdHhza2IoaHcsIG15X3NrYik7XFxuMTc2MjpcXHRcXHRkYXRhLVxcdTAwM2V0eF9mYWlsZWQrKztcXG4xNzYzOlxcdH1cXG4xNzY0OlxcdFxcbjE3NjU6XFx0c3RhdGljIGJvb2wgaHdzaW1fY2hhbnNfY29tcGF0KHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYzEsXFxuMTc2NjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjMilcXG4xNzY3OlxcdHtcXG4xNzY4OlxcdFxcdGlmICghYzEgfHwgIWMyKVxcbjE3Njk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyODozOC40MTkzNDU1NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIzNTY3ODQwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMgaW4gdGhlIG1hYzgwMjExX2h3c2ltIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgYW5kIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBmdW5jdGlvbnMuIEl0IGFwcGVhcnMgdGhlIGZsb3cgaW52b2x2ZXMgYSB1c2VyLXNwYWNlIHByb2Nlc3Mgc2VuZGluZyBhIGZyYW1lIGJhY2sgdGhyb3VnaCBHZW5lcmljIE5ldGxpbmsgdXNpbmcgYEhXU0lNX0NNRF9GUkFNRWAuIElmIGBIV1NJTV9BVFRSX0NPT0tJRWAgYW5kIGBIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJgIGFyZSBwcmVzZW50LCB0aGUgY29kZSByZXRyaWV2ZXMgdGhlIG9yaWdpbmFsIHNvY2tldCBidWZmZXIgKGBza2JgKSBmcm9tIHRoZSB0cmFuc21pdHRlcidzIFwicGVuZGluZ1wiIHF1ZXVlLiBUaGlzIGNhdWdodCBteSBhdHRlbnRpb246IGl0IGZpbmRzIHRoZSBvcmlnaW5hbCBgc2tiYCwgbW9kaWZpZXMgaXQgKmluIHBsYWNlKiB1c2luZyBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfdHJpbWAsIGFuZCBgc2tiX3B1dF9kYXRhYCwgYnV0LCBpbXBvcnRhbnRseSwgdGhlIG1vZGlmaWVkIGBza2JgICpyZW1haW5zKiBpbiB0aGUgcGVuZGluZyBxdWV1ZS4gVGhlbiwgbGF0ZXIsIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBoYW5kbGVzIGBIV1NJTV9DTURfVFhfSU5GT19GUkFNRWAsIGRlcXVldWVzICp0aGF0IHNhbWUqIGBza2JgIGZyb20gdGhlIFwicGVuZGluZ1wiIHF1ZXVlLCBhbmQgcHJvY2Vzc2VzIGl0LiBUaGlzIHJhaXNlcyBhIHJlZCBmbGFnIGluIHRlcm1zIG9mIHBvdGVudGlhbCBkb3VibGUgZnJlZXMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaWYgdGhlIG1vZGlmaWNhdGlvbiBpcyBkb25lIGluIGEgd2F5IHRoYXQgaXMgbm90IHN5bmNocm9uaXplZCwgb3IgcHJvcGVybHkgYWNjb3VudGVkIGZvciBsYXRlciBvbi5cblxuRnVydGhlcm1vcmUsIGluIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgSSBzZWUgdGhlIHVzZSBvZiBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCB0byBvcHRpb25hbGx5IHNraXAgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgLCBhIHR5cGljYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBBbHNvIEkgbm90aWNlIHRoZSB1c2Ugb2YgYGZyZXEgPSAodWludHB0cl90KXR4aS1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdYCBpbnN0ZWFkIG9mIGBkYXRhMi1cdTAwM2VjaGFubmVsYCB3aGljaCBtYXkgbGVhZCB0byBpbmNvbnNpc3RlbmNpZXMgb3IgYXNzdW1wdGlvbnMuXG5cbkdpdmVuIHRoYXQgYG1hYzgwMjExX2h3c2ltYCBpcyBhIHB1cmUgc29mdHdhcmUgc2ltdWxhdGVkIDgwMi4xMSBkcml2ZXIsIGNvbW11bmljYXRpbmcgdmlhIEdlbmVyaWMgTmV0bGluaywgYW5kIGNvbnNpZGVyaW5nIHRoYXQgc3l6a2FsbGVyIGFjdGl2ZWx5IHRhcmdldHMgbmw4MDIxMSBhbmQgaHdzaW0gbmV0bGluayBpbnRlcmZhY2VzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlc2UgY29kZSBwYXRocyBhcmUgaW5kZWVkIHJlYWNoYWJsZSB3aXRoaW4gUUVNVSBvciBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBncmVhdCBkZWFsLlxuXG5UbyBleHBhbmQgdGhlIHNjb3BlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEknbGwgbmVlZCB0byBsb29rIGF0IGBuZXQvbWFjODAyMTFgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbGAsIHNwZWNpZmljYWxseSB0aGUgYE1BQzgwMjExX0hXU0lNYCwgYE1BQzgwMjExYCwgYENGRzgwMjExYCwgYE5FVGAsIGFuZCBgSU5FVGAgY29uZmlnIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gRnVydGhlcm1vcmUsIEknbGwgYGdyZXBgIGZvciBgQ09ORklHX2AgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jYCBhbmQgb3RoZXIgZmlsZXMgd2l0aGluIHRoZSBgdmlydHVhbGAgZGlyZWN0b3J5IHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBlc3BlY2lhbGx5IGhvdyBgc2tiYCdzIHN0YXRlIGlzIGJlaW5nIG1hbmlwdWxhdGVkIGFjcm9zcyBkaWZmZXJlbnQgTmV0bGluayBjb21tYW5kcywgdG8gZ2V0IGEgY2xlYXIgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTA3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6MDAuNzc2MTMxMjk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQzMDc1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjE6b2JqLSQoQ09ORklHX01BQzgwMjExX0hXU0lNKVxcdCs9IG1hYzgwMjExX2h3c2ltLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlLTItbWFjODAyMTFfaHdzaW0tb2Jqc1xcdFxcdCs9IG1hYzgwMjExX2h3c2ltX21haW4ub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvTWFrZWZpbGU9Mz1tYWM4MDIxMV9od3NpbS1vYmpzXFx0XFx0Kz0gbWFjODAyMTFfaHdzaW1fbmFuLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WSVJUX1dJRkkpXFx0Kz0gdmlydF93aWZpLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTg2NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHdzaW1fZ2VubF9wb2xpY3lbSFdTSU1fQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTkwMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo5MDE6I2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTkwMi1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTIzNDU9c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMjM2NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoyMzY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTIzNjYtc3RhdGljIHZvaWRcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTI5OTc9bWFjODAyMTFfaHdzaW1fY2FuX25lZ190dGxtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzAxMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozMDE0OiNpZmRlZiBDT05GSUdfTkw4MDIxMV9URVNUTU9ERVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTMwMTUtLypcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTQyNzc9c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9zZXRfcmFkYXJfYmFja2dyb3VuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTQyOTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NDI5NTojaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy00Mjk2LSNkZWZpbmUgSFdTSU1fREVCVUdGU19PUFNcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00NTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3NiYW5kX2lmdHlwZV9kYXRhIHNiYW5kX2NhcGFfMmdoeltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDc1NC1cXHR9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjQ3NTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNDc1Ni1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz00Nzk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3NiYW5kX2lmdHlwZV9kYXRhIHNiYW5kX2NhcGFfNWdoeltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTA2NC1cXHR9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjUwNjU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTA2Ni1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3NiYW5kX2lmdHlwZV9kYXRhIHNiYW5kX2NhcGFfNmdoeltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTQxOS1cXHR9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjU0MjA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTQyMS1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01NjExPXN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3NiYW5kX2NhcGFiKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTYyNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo1NjI4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTU2MjktI2RlZmluZSBIV1NJTV9NRVNIX0JJVCBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTczMjc9c3RhdGljIHZvaWQgaHdzaW1fZXhpdF9uZXRsaW5rKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MzM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjczMzU6I2lmIElTX1JFQUNIQUJMRShDT05GSUdfVklSVElPKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTczMzYtc3RhdGljIHZvaWQgaHdzaW1fdmlydGlvX3R4X2RvbmUoc3RydWN0IHZpcnRxdWV1ZSAqdnEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI5OjAxLjM4MDQ0NDc1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjAzNjAxNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1vZGlmaWVkIG1hYzgwMjExX2h3c2ltIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0YXNrZWQgd2l0aCBldmFsdWF0aW5nIHNvbWUgY2hhbmdlcyB0byB0aGUgYG1hYzgwMjExX2h3c2ltYCBkcml2ZXIuIE15IGluaXRpYWwgc3RlcCBpcyB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSd2ZSBnb3QgYSBsaXN0OiBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAsIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ub19ubGAsIGBtYWM4MDIxMV9od3NpbV90eGAsIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCwgYW5kIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBhY2Nlc3NpYmxlLCBvciBpZiBzdGF0aWMsIHdoYXQgdGhlaXIgc3ltYm9sIHZpc2liaWxpdHkgaXMgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byBjaGVjayBpZiBhbnkgb2YgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgYXMgc3ltYm9scyBvciBjYWxsZWQgaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdC5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCAqc3BlY2lmaWNhbGx5KiBjaGFuZ2VkIGluIGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zLiBJJ20gc2VlaW5nIHNpZ25pZmljYW50IGFsdGVyYXRpb25zIHRvIGhvdyBjbG9uZWQgZnJhbWVzIGFyZSBoYW5kbGVkIChgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYCksIGluY2x1ZGluZyBtYW5pcHVsYXRpb24gb2YgdGhlIHBlbmRpbmcgcXVldWUgYW5kIHRoZSB1c2Ugb2YgYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX3RyaW1gLCBhbmQgYHNrYl9wdXRfZGF0YWAuIFRoYXQncyBpbnRlcmVzdGluZzsgaXQgaW5kaWNhdGVzIGNoYW5nZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgaGFuZGxpbmcgZHVyaW5nIGZyYW1lIGNsb25pbmcuIFRoZW4sIHRoZXJlJ3MgYGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmxgLCB3aGljaCBub3cgZGVhbHMgd2l0aCBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCBhbmQga2VlcHMgdHJhY2sgb2YgdGhlIGNlbnRlciBmcmVxdWVuY3kuIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAgaXMgc3RvcmluZyBjaGFubmVsIGZyZXF1ZW5jeSBkYXRhIGFzIHdlbGwsIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeGAsIGBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2Fja2AsIGFuZCBgbWFjODAyMTFfaHdzaW1fdHhgIGhhdmUgc2lnbmF0dXJlIGFuZCB1c2FnZSB1cGRhdGVzLiBUaGlzIHN1Z2dlc3RzIGVuaGFuY2VtZW50cyBvciBtb2RpZmljYXRpb25zIHRvIG1vbml0b3IgY2FwYWJpbGl0aWVzLCBsaWtlbHkgdGllZCB0byB0aGUgbmV0d29yayBwcm90b2NvbCdzIGxvd2VyIGxldmVscy5cblxuTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgYXJlIGluIHBsYWNlLiBUaGUgZGVwZW5kZW5jaWVzIHNlZW0gdG8gYmUgYE1BQzgwMjExX0hXU0lNYCwgYE1BQzgwMjExYCwgYW5kIGBDRkc4MDIxMWAuIFRoYXQncyB3aGF0IEknZCBleHBlY3Q7IGl0IG1ha2VzIHNlbnNlIHRoYXQgdGhlIHZpcnR1YWwgaGFyZHdhcmUgc2ltdWxhdGlvbiwgdGhlIG1hYzgwMjExIHN0YWNrLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGFyZSBhbGwgcmVxdWlyZWQuXG5cbkZpbmFsbHksIGxldCdzIGNvbmZpcm0gdGhlIG92ZXJhbGwgY3JpdGVyaWEgZm9yIHRoZSBhc3Nlc3NtZW50IGFyZSBtZXQuIEZpcnN0LCB0aGUgZHJpdmVyIGl0c2VsZiBtdXN0IGJlIHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2l0aG91dCByZXF1aXJpbmcgYW55IHBoeXNpY2FsIGhhcmR3YXJlOyBpdCBzb3VuZHMgbGlrZSB0aGF0J3MgdGhlIGNhc2UuIFNlY29uZCwgdGhlIG1vZGlmaWVkIGxvZ2ljIG11c3QgYmUgc3Vic3RhbnRpYWwsIHdoaWNoIGl0IGFwcGVhcnMgdG8gYmU6IGZyYW1lIGNsb25pbmcsIHBlbmRpbmcgYHNrYmAgcmVwbGFjZW1lbnQsIG1vbml0b3IgY29udHJvbCBhcmUgYWxsIG1vZGlmaWVkLiBUaGlyZCwgd2UgYXJlIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgSSBlbnVtZXJhdGVkIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY2AuIEZvdXJ0aCwgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gQWxsIGNyaXRlcmlhIGFyZSBtZXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzAyOCwiT3V0cHV0VG9rZW5zIjozMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6MjYuOTg0MDQ4Nzk2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MTI0MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sXCIsXG4gICAgXCJod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX3R4XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWFjODAyMTFfaHdzaW0sIGEgc29mdHdhcmUtZW11bGF0ZWQgODAyLjExIHJhZGlvIHRlc3RpbmcgdG9vbCBmdWxseSBhY2Nlc3NpYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBnZW5lcmljIG5ldGxpbmsuIFRoZSBjaGFuZ2VzIGludHJvZHVjZSBoYW5kbGluZyBmb3IgSFdTSU1fQVRUUl9OT19NT05JVE9SLCBtb2RpZnkgY2VudGVyIGZyZXF1ZW5jeSB0cmFja2luZyBhY3Jvc3MgVFggbW9uaXRvciByZXBvcnRpbmcsIGFuZCBhZGQgbG9naWMgaW4gaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sIHRvIHNlYXJjaCB0aGUgcGVuZGluZyB0cmFuc21pc3Npb24gcXVldWUgYnkgY29va2llIGFuZCBtb2RpZnkgdGhlIG9yaWdpbmFsIHNrYiBkYXRhICh2aWEgcHNrYl9leHBhbmRfaGVhZCwgc2tiX3RyaW0sIGFuZCBza2JfcHV0X2RhdGEpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciBwb3RlbnRpYWwgYnVmZmVyIG1hbmlwdWxhdGlvbiBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzIGluIHRoZSBzaW11bGF0ZWQgcmFkaW8gVFgvUlggcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubFwiLFxuICAgIFwiaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubFwiLFxuICAgIFwibWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhcIixcbiAgICBcIm1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrXCIsXG4gICAgXCJtYWM4MDIxMV9od3NpbV90eFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1hYzgwMjExX2h3c2ltLCBhIHNvZnR3YXJlLWVtdWxhdGVkIDgwMi4xMSByYWRpbyB0ZXN0aW5nIHRvb2wgZnVsbHkgYWNjZXNzaWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgZ2VuZXJpYyBuZXRsaW5rLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgaGFuZGxpbmcgZm9yIEhXU0lNX0FUVFJfTk9fTU9OSVRPUiwgbW9kaWZ5IGNlbnRlciBmcmVxdWVuY3kgdHJhY2tpbmcgYWNyb3NzIFRYIG1vbml0b3IgcmVwb3J0aW5nLCBhbmQgYWRkIGxvZ2ljIGluIGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubCB0byBzZWFyY2ggdGhlIHBlbmRpbmcgdHJhbnNtaXNzaW9uIHF1ZXVlIGJ5IGNvb2tpZSBhbmQgbW9kaWZ5IHRoZSBvcmlnaW5hbCBza2IgZGF0YSAodmlhIHBza2JfZXhwYW5kX2hlYWQsIHNrYl90cmltLCBhbmQgc2tiX3B1dF9kYXRhKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcG90ZW50aWFsIGJ1ZmZlciBtYW5pcHVsYXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcyBpbiB0aGUgc2ltdWxhdGVkIHJhZGlvIFRYL1JYIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyOToyNy4xMDgxODM1MTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzI1ODkyMjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6MjcuMTA4OTI0Mjk0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM3MjUxNDYyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtYWM4MDIxMV9od3NpbWAgdG8gYWRkIHRoZSBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCBuZXRsaW5rIGZsYWcgYXR0cmlidXRlIGZvciBza2lwcGluZyBtb25pdG9yIHJlcG9ydHMsIHByZXNlcnZlcyB0aGUgdHJhbnNtaXNzaW9uIGNoYW5uZWwgZnJlcXVlbmN5IGluIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYW5kIHVwZGF0ZXMgdGhlIHBlbmRpbmcgdHJhbnNtaXR0ZWQgc2tiIGluIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIHdoZW4gbWF0Y2hpbmcgY29va2llIGFuZCB0cmFuc21pdHRlciBhdHRyaWJ1dGVzIGFyZSBwcm92aWRlZC5cXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIChgZnJlcWAsIGBub19tb25pdG9yYCwgYGNvb2tpZWAsIGV0Yy4pIGFuZCBzdHJ1Y3R1cmUgbWVtYmVycyAoYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBgaGRyLVxcdTAwM2VydF9jaGFubmVsYCkgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiB0aGlzIHBhdGNoIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzLiBTS0IgbW9kaWZpY2F0aW9ucyB1c2UgYHNrYl9wdXRfZGF0YWAgd2l0aCB2ZXJpZmllZCBwYXlsb2FkIGxlbmd0aHMgZnJvbSB2YWxpZGF0ZWQgbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmdzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHJlbGF0aW5nIHRvIFNLQiBtYW5pcHVsYXRpb24sIHF1ZXVlIGxvY2tpbmcsIG9yIHJlZmVyZW5jZSBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBkZXRlY3RvcnMuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWI3NWFmNTEzYWUxYWY4Nzc5MmEyMGI1YWJhNDE0MTYzNTNmOTk5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDE0OjI2OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oXG5pbmRleCBhMDIyY2Q1YzBmMWM3Li4xZDJmZDA2YzU4NWE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmhcbkBAIC0zLDcgKzMsNyBAQFxuICAqIG1hYzgwMjExX2h3c2ltIC0gc29mdHdhcmUgc2ltdWxhdG9yIG9mIDgwMi4xMSByYWRpbyhzKSBmb3IgbWFjODAyMTFcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEpvdW5pIE1hbGluZW4gXHUwMDNjakB3MS5maVx1MDAzZVxuICAqIENvcHlyaWdodCAoYykgMjAxMSwgSmF2aWVyIExvcGV6IFx1MDAzY2psb3BleEBnbWFpbC5jb21cdTAwM2Vcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjItMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxuKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMi0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2lmbmRlZiBfX01BQzgwMjExX0hXU0lNX0hcbkBAIC0xNjIsNiArMTYyLDggQEAgZW51bSBod3NpbV9jb21tYW5kcyB7XG4gICpcdGVhY2ggcmFkaW8gaW5zdGVhZCBvZiBmb3IgdGhlIHdpcGh5LlxuICAqIEBIV1NJTV9BVFRSX1NVUFBPUlRfTkFOX0RFVklDRTogc3VwcG9ydCBOQU4gRGV2aWNlIHZpcnR1YWwgaW50ZXJmYWNlIChmbGFnKVxuICAqIEBIV1NJTV9BVFRSX1NVUFBPUlRfQkFDS0dST1VORF9SQURBUjogYmFja2dyb3VuZCByYWRhci9DQUMgc3VwcG9ydCAoZmxhZylcbisgKiBASFdTSU1fQVRUUl9OT19NT05JVE9SOiBza2lwIG1vbml0b3IgcmVwb3J0IGZvciB0aGlzIFRYIHN0YXR1cywgZS5nLiBpbiBjYXNlXG4rICpcdHRoZSBmcmFtZSB3YXMgbmV2ZXIgcmVwb3J0ZWQgdG8gYW55IHJlY2VpdmVyIChmbGFnKVxuICAqIEBfX0hXU0lNX0FUVFJfTUFYOiBlbnVtIGxpbWl0XG4gICovXG4gZW51bSBod3NpbV9hdHRycyB7XG5AQCAtMTk3LDYgKzE5OSw3IEBAIGVudW0gaHdzaW1fYXR0cnMge1xuIFx0SFdTSU1fQVRUUl9NVUxUSV9SQURJTyxcbiBcdEhXU0lNX0FUVFJfU1VQUE9SVF9OQU5fREVWSUNFLFxuIFx0SFdTSU1fQVRUUl9TVVBQT1JUX0JBQ0tHUk9VTkRfUkFEQVIsXG4rXHRIV1NJTV9BVFRSX05PX01PTklUT1IsXG4gXHRfX0hXU0lNX0FUVFJfTUFYLFxuIH07XG4gI2RlZmluZSBIV1NJTV9BVFRSX01BWCAoX19IV1NJTV9BVFRSX01BWCAtIDEpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuaW5kZXggMDJiNmQ4MWNjY2QxMS4uZmNhNGJmODIzZWY0ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuQEAgLTg5NSw2ICs4OTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaHdzaW1fZ2VubF9wb2xpY3lbSFdTSU1fQVRUUl9NQVggKyAxXSA9IHtcbiBcdFtIV1NJTV9BVFRSX01VTFRJX1JBRElPXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIFx0W0hXU0lNX0FUVFJfU1VQUE9SVF9OQU5fREVWSUNFXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIFx0W0hXU0lNX0FUVFJfU1VQUE9SVF9CQUNLR1JPVU5EX1JBREFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuK1x0W0hXU0lNX0FUVFJfTk9fTU9OSVRPUl0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiB9O1xuIFxuICNpZiBJU19SRUFDSEFCTEUoQ09ORklHX1ZJUlRJTylcbkBAIC0xMzM3LDcgKzEzMzgsNyBAQCBtYWM4MDIxMV9od3NpbV9nZXRfdHhfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcbiBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnR4X3NrYixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbilcbitcdFx0XHRcdCAgICAgIHUzMiBmcmVxKVxuIHtcbiBcdHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhID0gaHctXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG5AQCAtMTM2OSw3ICsxMzcwLDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGhkci1cdTAwM2VydF90c2Z0ID0gX19tYWM4MDIxMV9od3NpbV9nZXRfdHNmKGRhdGEpO1xuIFx0aGRyLVx1MDAzZXJ0X2ZsYWdzID0gMDtcbiBcdGhkci1cdTAwM2VydF9yYXRlID0gYml0cmF0ZSAvIDU7XG4tXHRoZHItXHUwMDNlcnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tXHUwMDNlY2VudGVyX2ZyZXEpO1xuK1x0aGRyLVx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihmcmVxKTtcbiBcdGZsYWdzID0gSUVFRTgwMjExX0NIQU5fMkdIWjtcbiBcdGlmICh0eHJhdGUgXHUwMDI2XHUwMDI2IHR4cmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX1JBVEVfRVJQX0cpXG4gXHRcdGZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX09GRE07XG5AQCAtMTM4Nyw4ICsxMzg4LDcgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiB9XG4gXG4gXG4tc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLFxuLVx0XHRcdFx0ICAgICAgIGNvbnN0IHU4ICphZGRyKVxuK3N0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX21vbml0b3JfYWNrKHUzMiBmcmVxLCBjb25zdCB1OCAqYWRkcilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IGh3c2ltX3JhZGlvdGFwX2Fja19oZHIgKmhkcjtcbkBAIC0xNDEwLDcgKzE0MTAsNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sXG4gXHRcdFx0XHRcdCAgKDEgXHUwMDNjXHUwMDNjIElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSk7XG4gXHRoZHItXHUwMDNlcnRfZmxhZ3MgPSAwO1xuIFx0aGRyLVx1MDAzZXBhZCA9IDA7XG4tXHRoZHItXHUwMDNlcnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW4tXHUwMDNlY2VudGVyX2ZyZXEpO1xuK1x0aGRyLVx1MDAzZXJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihmcmVxKTtcbiBcdGZsYWdzID0gSUVFRTgwMjExX0NIQU5fMkdIWjtcbiBcdGhkci1cdTAwM2VydF9jaGJpdG1hc2sgPSBjcHVfdG9fbGUxNihmbGFncyk7XG4gXG5AQCAtMTczNSw2ICsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBIV1NJTV9BVFRSX0NPT0tJRSwgY29va2llLCBIV1NJTV9BVFRSX1BBRCkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuK1x0LyogdHJhY2sgdGhlIGZyZXF1ZW5jeSAqL1xuK1x0aW5mby1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzFdID0gKHZvaWQgKikodWludHB0cl90KWNoYW5uZWwtXHUwMDNlY2VudGVyX2ZyZXE7XG4rXG4gXHRnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTtcbiBcbiBcdGlmIChod3NpbV92aXJ0aW9fZW5hYmxlZCkge1xuQEAgLTE5MTIsNyArMTkxNSw3IEBAIHN0YXRpYyBib29sIG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25vX25sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFxuIFx0bWFjODAyMTFfaHdzaW1fd3JpdGVfdHNmKGRhdGEsIHNrYiwgc2ltX3RzZik7XG4gXG4tXHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX3J4KGh3LCBza2IsIGNoYW4pO1xuK1x0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChodywgc2tiLCBjaGFuLVx1MDAzZWNlbnRlcl9mcmVxKTtcbiBcbiBcdG1lbXNldChcdTAwMjZyeF9zdGF0dXMsIDAsIHNpemVvZihyeF9zdGF0dXMpKTtcbiBcdHJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfTUFDVElNRV9TVEFSVDtcbkBAIC0yMjc2LDcgKzIyNzksNyBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGFjayA9IG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25vX25sKGh3LCBza2IsIGNoYW5uZWwpO1xuIFxuIFx0aWYgKGFjayBcdTAwMjZcdTAwMjYgc2tiLVx1MDAzZWxlbiBcdTAwM2U9IDE2KVxuLVx0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhjaGFubmVsLCBoZHItXHUwMDNlYWRkcjIpO1xuK1x0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhjaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxLCBoZHItXHUwMDNlYWRkcjIpO1xuIFxuIFx0aWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7XG4gXG5AQCAtNjM5MSw2ICs2Mzk0LDggQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbiBcdGludCBpO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcdGJvb2wgbm9fbW9uaXRvcjtcbitcdHUzMiBmcmVxO1xuIFxuIFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0gfHxcbiBcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZMQUdTXSB8fFxuQEAgLTY0MDIsNiArNjQwNyw3IEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRzcmMgPSAodm9pZCAqKW5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XG4gXHRod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10pO1xuIFx0cmV0X3NrYl9jb29raWUgPSBubGFfZ2V0X3U2NChpbmZvLVx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSk7XG4rXHRub19tb25pdG9yID0gbmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7XG4gXG4gXHRkYXRhMiA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoc3JjKTtcbiBcdGlmICghZGF0YTIpXG5AQCAtNjQzNiw3ICs2NDQyLDExIEBAIHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXG4gXHRpZiAoIWZvdW5kKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdG1hYzgwMjExX2h3c2ltX21vbml0b3JfcngoZGF0YTItXHUwMDNlaHcsIHNrYiwgZGF0YTItXHUwMDNlY2hhbm5lbCk7XG4rXHR0eGkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7XG4rXHRmcmVxID0gKHVpbnRwdHJfdCl0eGktXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXTtcbitcbitcdGlmICghbm9fbW9uaXRvcilcbitcdFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi1cdTAwM2Vodywgc2tiLCBmcmVxKTtcbiBcbiBcdC8qIFR4IGluZm8gcmVjZWl2ZWQgYmVjYXVzZSB0aGUgZnJhbWUgd2FzIGJyb2FkY2FzdGVkIG9uIHVzZXIgc3BhY2UsXG4gXHQgc28gd2UgZ2V0IGFsbCB0aGUgbmVjZXNzYXJ5IGluZm86IHR4IGF0dGVtcHRzIGFuZCBza2IgY29udHJvbCBidWZmICovXG5AQCAtNjQ0NSw4ICs2NDU1LDYgQEAgc3RhdGljIGludCBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcbiBcdFx0ICAgICAgIGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XG4gXG4gXHQvKiBub3cgc2VuZCBiYWNrIFRYIHN0YXR1cyAqL1xuLVx0dHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpO1xuLVxuIFx0aWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspIHtcbkBAIC02NDY2LDggKzY0NzQsNyBAQCBzdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0aWYgKCEoaHdzaW1fZmxhZ3MgXHUwMDI2IEhXU0lNX1RYX0NUTF9OT19BQ0spIFx1MDAyNlx1MDAyNlxuIFx0ICAgKGh3c2ltX2ZsYWdzIFx1MDAyNiBIV1NJTV9UWF9TVEFUX0FDSykpIHtcbiBcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSAxNilcbi1cdFx0XHRtYWM4MDIxMV9od3NpbV9tb25pdG9yX2FjayhkYXRhMi1cdTAwM2VjaGFubmVsLFxuLVx0XHRcdFx0XHRcdCAgIGhkci1cdTAwM2VhZGRyMik7XG4rXHRcdFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2soZnJlcSwgaGRyLVx1MDAzZWFkZHIyKTtcbiBcdFx0dHhpLVx1MDAzZWZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSztcbiBcdH1cbiBcbkBAIC02NTM1LDYgKzY1NDIsNTEgQEAgc3RhdGljIGludCBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0LyogbG9vayBmb3IgdGhlIHNrYiBtYXRjaGluZyB0aGUgY29va2llIHBhc3NlZCBiYWNrIGZyb20gdXNlciAqL1xuK1x0aWYgKGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGluZm8tXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSkge1xuK1x0XHR1NjQgY29va2llID0gbmxhX2dldF91NjQoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsICpmb3VuZCA9IE5VTEw7XG4rXHRcdHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICp0eGRhdGE7XG4rXHRcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpO1xuK1x0XHRjb25zdCB1OCAqdHJhbnNtaXR0ZXI7XG4rXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRcdHRyYW5zbWl0dGVyID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTtcbitcdFx0dHhkYXRhID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcih0cmFuc21pdHRlcik7XG4rXHRcdGlmICghdHhkYXRhIHx8IHR4ZGF0YS1cdTAwM2VuZXRncm91cCAhPSBkYXRhMi1cdTAwM2VuZXRncm91cClcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuK1x0XHRza2JfcXVldWVfd2FsayhcdTAwMjZ0eGRhdGEtXHUwMDNlcGVuZGluZywgb3JpZ19za2IpIHtcbitcdFx0XHR1aW50cHRyX3Qgc2tiX2Nvb2tpZTtcbitcbitcdFx0XHR0eGkgPSBJRUVFODAyMTFfU0tCX0NCKG9yaWdfc2tiKTtcbitcdFx0XHRza2JfY29va2llID0gKHVpbnRwdHJfdCl0eGktXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXTtcbitcbitcdFx0XHRpZiAoc2tiX2Nvb2tpZSA9PSBjb29raWUpIHtcbitcdFx0XHRcdGZvdW5kID0gb3JpZ19za2I7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0LyogdGhhdCdzIHdlaXJkICovXG4rXHRcdGlmICghZm91bmQpIHtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4ZGF0YS1cdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoZnJhbWVfZGF0YV9sZW4gXHUwMDNlIGZvdW5kLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoZm91bmQsIDAsIGZyYW1lX2RhdGFfbGVuIC0gZm91bmQtXHUwMDNlbGVuLFxuK1x0XHRcdFx0ICAgICBHRlBfQVRPTUlDKSkge1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRcdHNrYl90cmltKGZvdW5kLCAwKTtcbitcdFx0c2tiX3B1dF9kYXRhKGZvdW5kLCBmcmFtZV9kYXRhLCBmcmFtZV9kYXRhX2xlbik7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhkYXRhLVx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xuK1x0fVxuK1xuIFx0LyogY2hlY2sgaWYgcmFkaW8gaXMgY29uZmlndXJlZCBwcm9wZXJseSAqL1xuIFxuIFx0aWYgKChkYXRhMi1cdTAwM2VpZGxlIFx1MDAyNlx1MDAyNiAhZGF0YTItXHUwMDNldG1wX2NoYW4pIHx8ICFkYXRhMi1cdTAwM2VzdGFydGVkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6MjcuMTA4OTI1OTg0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDc5ODExOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbWFjODAyMTFfaHdzaW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBLTVNBTiBpcyBhIGNvbmNlcm4gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIHRvdWNoZWQgZmlsZXM6IGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltLmhgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNgLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBtYWM4MDIxMV9od3NpbSB2aXJ0dWFsIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggaXMgdXN1YWxseSBhIGdvb2QgdGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by5cblxuRmlyc3QsIGBtYWM4MDIxMV9od3NpbS5oYCBhZGRzIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIHRvIHRoZSBgaHdzaW1fYXR0cnNgIGVudW0uIEEgZmxhZy4uLmludGVyZXN0aW5nLiAgVGhlbiwgYG1hYzgwMjExX2h3c2ltX21haW4uY2AgaXMgd2hlcmUgdGhpbmdzIGdldCBtb3JlIGludGVyZXN0aW5nLiAgV2UncmUgc2VlaW5nIGBbSFdTSU1fQVRUUl9OT19NT05JVE9SXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9YCBhZGRlZCB0byB0aGUgYGh3c2ltX2dlbmxfcG9saWN5YC4gU28sIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIG5ldyBhdHRyaWJ1dGUgZXhwb3NlZCB2aWEgTmV0bGluay5cblxuVGhlIGNvZGUgbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tgIHRvIHVzZSBhIGB1MzIgZnJlcWAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5gLiBUaGF0J3MgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gaG93IGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkLiAgV2UncmUgYWxzbyBzZWVpbmcgdGhlIGBjaGFubmVsLVx1MDAzZWNlbnRlcl9mcmVxYCBiZWluZyBzYXZlZCBpbnRvIGBpbmZvLVx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV1gIGluIGBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubGAgYW5kIHBhc3NlZCBkaXJlY3RseSBpbiBvdGhlciBmdW5jdGlvbnMuXG5cbk5vdywgdGhpbmdzIGdldCBhIGJpdCBtb3JlIGludm9sdmVkLiBJbiBgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubGAsIHRoZXJlJ3MgYSBjaGVjayBmb3IgYG5vX21vbml0b3JgIGJhc2VkIG9uIHRoZSBuZXcgZmxhZy4gSWYgbm90IHNldCwgaXQgY2FsbHMgYG1hYzgwMjExX2h3c2ltX21vbml0b3JfcnhgIGFuZCBgbWFjODAyMTFfaHdzaW1fbW9uaXRvcl9hY2tgIHdpdGggdGhlIGZyZXF1ZW5jeS4gVGhhdCBtYWtlcyBzZW5zZSwgd2Ugd2FudCB0byBjb250cm9sIHRoZSBtb25pdG9yIGZ1bmN0aW9uLlxuXG5IZXJlJ3MgdGhlIGJpdCB0aGF0IHJlYWxseSByZXF1aXJlcyBjYXJlZnVsIGFuYWx5c2lzOiBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYC4gSXQgYXBwZWFycyB0byBiZSBoYW5kbGluZyBjbG9uZWQgU0tCcyB3aXRoaW4gYSBwZW5kaW5nIFRYIHF1ZXVlLiAgVGhlIGNvZGUgbG9va3MgZm9yIGFuIG9yaWdpbmFsIFNLQiBiYXNlZCBvbiBhIGNvb2tpZS4gSWYgZm91bmQsIGl0IGNoZWNrcyBpZiBgZnJhbWVfZGF0YV9sZW5gIGlzIGdyZWF0ZXIgdGhhbiBgZm91bmQtXHUwMDNlbGVuYCwgYW5kIGV4cGFuZHMgdGhlIGhlYWRlciBpZiBuZWNlc3NhcnkuIFRoZW4sIGl0IGNhbGxzIGBza2JfdHJpbShmb3VuZCwgMClgIGFuZCBzdWJzZXF1ZW50bHkgY29waWVzIGRhdGEgdXNpbmcgYHNrYl9wdXRfZGF0YShmb3VuZCwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2l0aCB0aGUgY29weS4gSXMgdGhpcyBjb3B5aW5nIGludG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGFsd2F5cyByYWlzZXMgbXkgaGFja2xlcywgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBgZnJhbWVfZGF0YWAgYW5kIGBmcmFtZV9kYXRhX2xlbmAgYXJlIGluaXRpYWxpemVkIHRvIGtub3cgaWYgd2UgY2FuIGhhdmUgYSBLTVNBTiBwcm9ibGVtIGhlcmUuIExldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbnMgZm9yIHRob3NlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZXNlIGFyZSBzYWZlIHRvIHVzZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDI4LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6NDQuMTg4NzQwODAyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzE1NzY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NjM4Mj1zdGF0aWMgaW50IGh3c2ltX3R4X2luZm9fZnJhbWVfcmVjZWl2ZWRfbmwoc3RydWN0IHNrX2J1ZmYgKnNrYl8yLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNjQ5MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzo2NDkxOnN0YXRpYyBpbnQgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHN0cnVjdCBza19idWZmICpza2JfMixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy02NDkyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTcxNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBod3NpbV9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTcxNjYtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjcxNjc6XFx0XFx0LmRvaXQgPSBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNzE2OC1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9NzM0OD1zdGF0aWMgaW50IGh3c2ltX3ZpcnRpb19oYW5kbGVfY21kKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy03MzcyLVxcdGNhc2UgSFdTSU1fQ01EX0ZSQU1FOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjczNzM6XFx0XFx0aHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sKHNrYiwgXFx1MDAyNmluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTczNzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI5OjQ0LjI3MTkwMzA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MTcyNjcxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIGFuZCBpdHMgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBod3NpbV9jbG9uZWRfZnJhbWVfcmVjZWl2ZWRfbmxgIGZ1bmN0aW9uIGFuZCBpdHMgc3Vycm91bmRpbmcgY29kZSBpbiB0aGUgaGFyZHdhcmUgc2ltdWxhdG9yLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBoZXJlIOKAkyBob3cgY2xvbmVkIGZyYW1lcyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgTmV0bGluayBwYXRoLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIGVudmlyb25tZW50LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCwgd2hhdCBkYXRhIGl0IHJlY2VpdmVzIGFzIGlucHV0LCBhbmQgaG93IHRoYXQgZGF0YSBpcyBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IHBhc3NlZCB1cCB0aGUgc3RhY2suXG5cbkknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVhbGluZyB3aXRoIHNoYXJlZCByZXNvdXJjZXMgb3Igc3RhdGUgcmVsYXRlZCB0byBzaW11bGF0ZWQgaGFyZHdhcmUuIEFyZSB0aGVyZSBhbnkgbG9ja3MgaW52b2x2ZWQsIGFuZCBpZiBzbywgd2hhdCdzIHRoZWlyIHNjb3BlIGFuZCBob3cgYXJlIHRoZXkgYWNxdWlyZWQgYW5kIHJlbGVhc2VkPyBJIGFsc28gZXhwZWN0IHRvIHNlZSBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLCBhbmQgSSdtIGtlZW4gdG8gc3BvdCBpZiBhbnkgY3VzdG9tIE5ldGxpbmsgYXR0cmlidXRlcyBvciBjb21tYW5kcyBhcmUgYmVpbmcgdXNlZCBmb3IgdGhpcyBzaW11bGF0ZWQgaGFyZHdhcmUuIEknbSBob3BpbmcgdG8gdW5jb3ZlciBhbnkgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjIsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyOTo0OC4xODkxNzMyMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjQ5MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0OTA6XFx0XFxuNjQ5MTpcXHRzdGF0aWMgaW50IGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXFxuNjQ5MjpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuNjQ5MzpcXHR7XFxuNjQ5NDpcXHRcXHRzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YTI7XFxuNjQ5NTpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXM7XFxuNjQ5NjpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbjY0OTc6XFx0XFx0Y29uc3QgdTggKmRzdDtcXG42NDk4OlxcdFxcdGludCBmcmFtZV9kYXRhX2xlbjtcXG42NDk5OlxcdFxcdHZvaWQgKmZyYW1lX2RhdGE7XFxuNjUwMDpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG42NTAxOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IE5VTEw7XFxuNjUwMjpcXHRcXG42NTAzOlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1JFQ0VJVkVSXSB8fFxcbjY1MDQ6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0ZSQU1FXSB8fFxcbjY1MDU6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1JYX1JBVEVdIHx8XFxuNjUwNjpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfU0lHTkFMXSlcXG42NTA3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjY1MDg6XFx0XFxuNjUwOTpcXHRcXHRkc3QgPSAodm9pZCAqKW5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9SRUNFSVZFUl0pO1xcbjY1MTA6XFx0XFx0ZnJhbWVfZGF0YV9sZW4gPSBubGFfbGVuKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRlJBTUVdKTtcXG42NTExOlxcdFxcdGZyYW1lX2RhdGEgPSAodm9pZCAqKW5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRlJBTUVdKTtcXG42NTEyOlxcdFxcbjY1MTM6XFx0XFx0aWYgKGZyYW1lX2RhdGFfbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSB8fFxcbjY1MTQ6XFx0XFx0ICAgIGZyYW1lX2RhdGFfbGVuIFxcdTAwM2UgSUVFRTgwMjExX01BWF9EQVRBX0xFTilcXG42NTE1OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjY1MTY6XFx0XFxuNjUxNzpcXHRcXHQvKiBBbGxvY2F0ZSBuZXcgc2tiIGhlcmUgKi9cXG42NTE4OlxcdFxcdHNrYiA9IGFsbG9jX3NrYihmcmFtZV9kYXRhX2xlbiwgR0ZQX0tFUk5FTCk7XFxuNjUxOTpcXHRcXHRpZiAoc2tiID09IE5VTEwpXFxuNjUyMDpcXHRcXHRcXHRnb3RvIGVycjtcXG42NTIxOlxcdFxcbjY1MjI6XFx0XFx0LyogQ29weSB0aGUgZGF0YSAqL1xcbjY1MjM6XFx0XFx0c2tiX3B1dF9kYXRhKHNrYiwgZnJhbWVfZGF0YSwgZnJhbWVfZGF0YV9sZW4pO1xcbjY1MjQ6XFx0XFxuNjUyNTpcXHRcXHRkYXRhMiA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIoZHN0KTtcXG42NTI2OlxcdFxcdGlmICghZGF0YTIpXFxuNjUyNzpcXHRcXHRcXHRnb3RvIG91dDtcXG42NTI4OlxcdFxcbjY1Mjk6XFx0XFx0aWYgKGRhdGEyLVxcdTAwM2V1c2VfY2hhbmN0eCkge1xcbjY1MzA6XFx0XFx0XFx0aWYgKGRhdGEyLVxcdTAwM2V0bXBfY2hhbilcXG42NTMxOlxcdFxcdFxcdFxcdGNoYW5uZWwgPSBkYXRhMi1cXHUwMDNldG1wX2NoYW47XFxuNjUzMjpcXHRcXHR9IGVsc2Uge1xcbjY1MzM6XFx0XFx0XFx0Y2hhbm5lbCA9IGRhdGEyLVxcdTAwM2VjaGFubmVsO1xcbjY1MzQ6XFx0XFx0fVxcbjY1MzU6XFx0XFxuNjUzNjpcXHRcXHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XFxuNjUzNzpcXHRcXHRcXHRpZiAoaHdzaW1fbmV0X2dldF9uZXRncm91cChnZW5sX2luZm9fbmV0KGluZm8pKSAhPVxcbjY1Mzg6XFx0XFx0XFx0ICAgIGRhdGEyLVxcdTAwM2VuZXRncm91cClcXG42NTM5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjY1NDA6XFx0XFxuNjU0MTpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cXHUwMDNld21lZGl1bWQpXFxuNjU0MjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG42NTQzOlxcdFxcdH1cXG42NTQ0OlxcdFxcbjY1NDU6XFx0XFx0LyogbG9vayBmb3IgdGhlIHNrYiBtYXRjaGluZyB0aGUgY29va2llIHBhc3NlZCBiYWNrIGZyb20gdXNlciAqL1xcbjY1NDY6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQ09PS0lFXSBcXHUwMDI2XFx1MDAyNlxcbjY1NDc6XFx0XFx0ICAgIGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0pIHtcXG42NTQ4OlxcdFxcdFxcdHU2NCBjb29raWUgPSBubGFfZ2V0X3U2NChpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0NPT0tJRV0pO1xcbjY1NDk6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCAqZm91bmQgPSBOVUxMO1xcbjY1NTA6XFx0XFx0XFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKnR4ZGF0YTtcXG42NTUxOlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpO1xcbjY1NTI6XFx0XFx0XFx0Y29uc3QgdTggKnRyYW5zbWl0dGVyO1xcbjY1NTM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG42NTU0OlxcdFxcbjY1NTU6XFx0XFx0XFx0dHJhbnNtaXR0ZXIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX0FERFJfVFJBTlNNSVRURVJdKTtcXG42NTU2OlxcdFxcdFxcdHR4ZGF0YSA9IGdldF9od3NpbV9kYXRhX3JlZl9mcm9tX2FkZHIodHJhbnNtaXR0ZXIpO1xcbjY1NTc6XFx0XFx0XFx0aWYgKCF0eGRhdGEgfHwgdHhkYXRhLVxcdTAwM2VuZXRncm91cCAhPSBkYXRhMi1cXHUwMDNlbmV0Z3JvdXApXFxuNjU1ODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG42NTU5OlxcdFxcbjY1NjA6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnR4ZGF0YS1cXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XFxuNjU2MTpcXHRcXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2dHhkYXRhLVxcdTAwM2VwZW5kaW5nLCBvcmlnX3NrYikge1xcbjY1NjI6XFx0XFx0XFx0XFx0dWludHB0cl90IHNrYl9jb29raWU7XFxuNjU2MzpcXHRcXG42NTY0OlxcdFxcdFxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Iob3JpZ19za2IpO1xcbjY1NjU6XFx0XFx0XFx0XFx0c2tiX2Nvb2tpZSA9ICh1aW50cHRyX3QpdHhpLVxcdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzBdO1xcbjY1NjY6XFx0XFxuNjU2NzpcXHRcXHRcXHRcXHRpZiAoc2tiX2Nvb2tpZSA9PSBjb29raWUpIHtcXG42NTY4OlxcdFxcdFxcdFxcdFxcdGZvdW5kID0gb3JpZ19za2I7XFxuNjU2OTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG42NTcwOlxcdFxcdFxcdFxcdH1cXG42NTcxOlxcdFxcdFxcdH1cXG42NTcyOlxcdFxcbjY1NzM6XFx0XFx0XFx0LyogdGhhdCdzIHdlaXJkICovXFxuNjU3NDpcXHRcXHRcXHRpZiAoIWZvdW5kKSB7XFxuNjU3NTpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbjY1NzY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNjU3NzpcXHRcXHRcXHR9XFxuNjU3ODpcXHRcXG42NTc5OlxcdFxcdFxcdGlmIChmcmFtZV9kYXRhX2xlbiBcXHUwMDNlIGZvdW5kLVxcdTAwM2VsZW4gXFx1MDAyNlxcdTAwMjZcXG42NTgwOlxcdFxcdFxcdCAgICBwc2tiX2V4cGFuZF9oZWFkKGZvdW5kLCAwLCBmcmFtZV9kYXRhX2xlbiAtIGZvdW5kLVxcdTAwM2VsZW4sXFxuNjU4MTpcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9BVE9NSUMpKSB7XFxuNjU4MjpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eGRhdGEtXFx1MDAzZXBlbmRpbmcubG9jaywgZmxhZ3MpO1xcbjY1ODM6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuNjU4NDpcXHRcXHRcXHR9XFxuNjU4NTpcXHRcXHRcXHRza2JfdHJpbShmb3VuZCwgMCk7XFxuNjU4NjpcXHRcXHRcXHRza2JfcHV0X2RhdGEoZm91bmQsIGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfbGVuKTtcXG42NTg3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnR4ZGF0YS1cXHUwMDNlcGVuZGluZy5sb2NrLCBmbGFncyk7XFxuNjU4ODpcXHRcXHR9XFxuNjU4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6NDguMTg5Njg4ODRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ2Mjc4ODQzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBMb3NzIGluIFNpbXVsYXRlZCA4MDIuMTEgVHJhbnNtaXNzaW9ucyoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIHNpbXVsYXRlZCA4MDIuMTEgZW52aXJvbm1lbnQgYWdhaW4uIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYXJvdW5kIHRyYW5zbWlzc2lvbi4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdmVyaWZ5aW5nIHRoZXJlIGFyZSBubyBkYXRhLWxvc3MgaXNzdWVzIGhhcHBlbmluZyBpbnNpZGUgdGhlIGtlcm5lbCBpdHNlbGYuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbiBwb2ludHMgYmV0d2VlbiB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBhbmQgdGhlIG1hYzgwMjExIHN0YWNrLiBgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmxgIHNlZW1zIGxpa2UgYSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGZyYW1lcyBkZXN0aW5lZCBmb3IgdGhlIHNpbXVsYXRlZCBoYXJkd2FyZSwgc28gbGV0J3MgY2hlY2sgdGhhdC4gVGhlbiwgc2luY2UgdGhpcyBpcyBhbGwgaW50ZXJuYWwsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGluZm9ybWF0aW9uIG9uIHdoYXQgaGFwcGVuZWQgdG8gdGhlIGZyYW1lIGlzIHByb3Blcmx5IHByb3BhZ2F0ZWQgYmFjayB1cC4gVGhlcmVmb3JlIEkgbmVlZCB0byBjaGVjayBgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubGAgd2hpY2ggSSBiZWxpZXZlIGlzIHdoZXJlIHRoYXQgaW5mb3JtYXRpb24gZ2V0cyBzZW50LiBJIG5lZWQgdG8gcmV2aWV3IHRoZXNlIGZ1bmN0aW9ucyBjYXJlZnVsbHkuIEknbSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbWlzc2VkIG5vdGlmaWNhdGlvbnMsIG9yIGRhdGEgY29ycnVwdGlvbiBkdXJpbmcgdGhpcyBwcm9jZXNzLiBBIGJpdCBvZiBzdGF0aWMgYW5hbHlzaXMgaXMgcHJvYmFibHkgdGhlIGJlc3QgZmlyc3Qgc3RlcC4gR290dGEgZW5zdXJlIHRoYXQgZXZlcnl0aGluZyBpcyBwbGF5aW5nIG5pY2VseSBpbiB0aGlzIHNpbXVsYXRlZCBlbnZpcm9ubWVudCB0byBwcmV2ZW50IHVuZXhwZWN0ZWQgZHJvcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI5OjUxLjY1MjQ4MDE5N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcyNTpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xNzI2OlxcdFxcbjE3Mjc6XFx0XFx0aWYgKG5sYV9wdXQoc2tiLCBIV1NJTV9BVFRSX1RYX0lORk9fRkxBR1MsXFxuMTcyODpcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBod3NpbV90eF9yYXRlX2ZsYWcpICogSUVFRTgwMjExX1RYX01BWF9SQVRFUyxcXG4xNzI5OlxcdFxcdFxcdCAgICB0eF9hdHRlbXB0c19mbGFncykpXFxuMTczMDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xNzMxOlxcdFxcbjE3MzI6XFx0XFx0LyogV2UgY3JlYXRlIGEgY29va2llIHRvIGlkZW50aWZ5IHRoaXMgc2tiICovXFxuMTczMzpcXHRcXHRjb29raWUgPSBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2ZGF0YS1cXHUwMDNlcGVuZGluZ19jb29raWUpO1xcbjE3MzQ6XFx0XFx0aW5mby1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXSA9ICh2b2lkICopY29va2llO1xcbjE3MzU6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKVxcbjE3MzY6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTczNzpcXHRcXG4xNzM4OlxcdFxcdC8qIHRyYWNrIHRoZSBmcmVxdWVuY3kgKi9cXG4xNzM5OlxcdFxcdGluZm8tXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMV0gPSAodm9pZCAqKSh1aW50cHRyX3QpY2hhbm5lbC1cXHUwMDNlY2VudGVyX2ZyZXE7XFxuMTc0MDpcXHRcXG4xNzQxOlxcdFxcdGdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWQpO1xcbjE3NDI6XFx0XFxuMTc0MzpcXHRcXHRpZiAoaHdzaW1fdmlydGlvX2VuYWJsZWQpIHtcXG4xNzQ0OlxcdFxcdFxcdGlmIChod3NpbV90eF92aXJ0aW8oZGF0YSwgc2tiKSlcXG4xNzQ1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfdHhza2I7XFxuMTc0NjpcXHRcXHR9IGVsc2Uge1xcbjE3NDc6XFx0XFx0XFx0aWYgKGh3c2ltX3VuaWNhc3RfbmV0Z3JvdXAoZGF0YSwgc2tiLCBkc3RfcG9ydGlkKSlcXG4xNzQ4OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfdHhza2I7XFxuMTc0OTpcXHRcXHR9XFxuMTc1MDpcXHRcXG4xNzUxOlxcdFxcdC8qIEVucXVldWUgdGhlIHBhY2tldCAqL1xcbjE3NTI6XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmRhdGEtXFx1MDAzZXBlbmRpbmcsIG15X3NrYik7XFxuMTc1MzpcXHRcXHRkYXRhLVxcdTAwM2V0eF9wa3RzKys7XFxuMTc1NDpcXHRcXHRkYXRhLVxcdTAwM2V0eF9ieXRlcyArPSBteV9za2ItXFx1MDAzZWxlbjtcXG4xNzU1OlxcdFxcdHJldHVybjtcXG4xNzU2OlxcdFxcbjE3NTc6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbjE3NTg6XFx0XFx0bmxtc2dfZnJlZShza2IpO1xcbjE3NTk6XFx0ZXJyX2ZyZWVfdHhza2I6XFxuMTc2MDpcXHRcXHRwcl9kZWJ1ZyhcXFwibWFjODAyMTFfaHdzaW06IGVycm9yIG9jY3VycmVkIGluICVzXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuMTc2MTpcXHRcXHRpZWVlODAyMTFfZnJlZV90eHNrYihodywgbXlfc2tiKTtcXG4xNzYyOlxcdFxcdGRhdGEtXFx1MDAzZXR4X2ZhaWxlZCsrO1xcbjE3NjM6XFx0fVxcbjE3NjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjI5OjUxLjY1MzEwMzE5N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE0MDc2MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIFJlY2VpdmVyIFBhdGgqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgcmVjZWl2ZSBwYXRoLiBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIHN0YW5kYXJkIGZsb3csIGJ1dCBhIGdvb2QgZW5naW5lZXIga25vd3MgdG8gZG91YmxlLWNoZWNrIGVkZ2UgY2FzZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHJ1biBhIGRpYWdub3N0aWNzIGNoZWNrIG9uIGBod3NpbV90eF9pbmZvX2ZyYW1lX3JlY2VpdmVkX25sYCBub3cuIEl0J3MgcG9zc2libGUgdGhlcmUgYXJlIHNvbWUgaXNzdWVzIHdpdGggdGhlIFRYIEluZm8gRnJhbWUgaGFuZGxpbmcsIGFuZCB0aGlzIGNvdWxkIGJlIHN1YnRseSBpbXBhY3RpbmcgdGhlIFJYIHNpZGUgb3IgaGlkaW5nIHNvbWUgb3RoZXIgaXNzdWVzLiBJdCdzIGEga2V5IHNwb3QgdGhhdCBjYW4gZ2l2ZSB1cyBoaW50cyBmb3IgZGVlcGVyIGRlYnVnZ2luZyBpZiBvdGhlciBkaWFnbm9zdGljcyBjb21lIHVwIGVtcHR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2OSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTQ6Mjk6NTMuODY3MTgxMzgzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzgyLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MzgyOlxcdHN0YXRpYyBpbnQgaHdzaW1fdHhfaW5mb19mcmFtZV9yZWNlaXZlZF9ubChzdHJ1Y3Qgc2tfYnVmZiAqc2tiXzIsXFxuNjM4MzpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjYzODQ6XFx0e1xcbjYzODU6XFx0XFxuNjM4NjpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbjYzODc6XFx0XFx0c3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEyO1xcbjYzODg6XFx0XFx0c3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGk7XFxuNjM4OTpcXHRcXHRzdHJ1Y3QgaHdzaW1fdHhfcmF0ZSAqdHhfYXR0ZW1wdHM7XFxuNjM5MDpcXHRcXHR1NjQgcmV0X3NrYl9jb29raWU7XFxuNjM5MTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wO1xcbjYzOTI6XFx0XFx0Y29uc3QgdTggKnNyYztcXG42MzkzOlxcdFxcdHVuc2lnbmVkIGludCBod3NpbV9mbGFncztcXG42Mzk0OlxcdFxcdGludCBpO1xcbjYzOTU6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG42Mzk2OlxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG42Mzk3OlxcdFxcdGJvb2wgbm9fbW9uaXRvcjtcXG42Mzk4OlxcdFxcdHUzMiBmcmVxO1xcbjYzOTk6XFx0XFxuNjQwMDpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfQUREUl9UUkFOU01JVFRFUl0gfHxcXG42NDAxOlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9GTEFHU10gfHxcXG42NDAyOlxcdFxcdCAgICAhaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdIHx8XFxuNjQwMzpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfU0lHTkFMXSB8fFxcbjY0MDQ6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tIV1NJTV9BVFRSX1RYX0lORk9dKVxcbjY0MDU6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjQwNjpcXHRcXG42NDA3OlxcdFxcdHNyYyA9ICh2b2lkICopbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9BRERSX1RSQU5TTUlUVEVSXSk7XFxuNjQwODpcXHRcXHRod3NpbV9mbGFncyA9IG5sYV9nZXRfdTMyKGluZm8tXFx1MDAzZWF0dHJzW0hXU0lNX0FUVFJfRkxBR1NdKTtcXG42NDA5OlxcdFxcdHJldF9za2JfY29va2llID0gbmxhX2dldF91NjQoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9DT09LSUVdKTtcXG42NDEwOlxcdFxcdG5vX21vbml0b3IgPSBubGFfZ2V0X2ZsYWcoaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9OT19NT05JVE9SXSk7XFxuNjQxMTpcXHRcXG42NDEyOlxcdFxcdGRhdGEyID0gZ2V0X2h3c2ltX2RhdGFfcmVmX2Zyb21fYWRkcihzcmMpO1xcbjY0MTM6XFx0XFx0aWYgKCFkYXRhMilcXG42NDE0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjY0MTU6XFx0XFxuNjQxNjpcXHRcXHRpZiAoIWh3c2ltX3ZpcnRpb19lbmFibGVkKSB7XFxuNjQxNzpcXHRcXHRcXHRpZiAoaHdzaW1fbmV0X2dldF9uZXRncm91cChnZW5sX2luZm9fbmV0KGluZm8pKSAhPVxcbjY0MTg6XFx0XFx0XFx0ICAgIGRhdGEyLVxcdTAwM2VuZXRncm91cClcXG42NDE5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjY0MjA6XFx0XFxuNjQyMTpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlc25kX3BvcnRpZCAhPSBkYXRhMi1cXHUwMDNld21lZGl1bWQpXFxuNjQyMjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG42NDIzOlxcdFxcdH1cXG42NDI0OlxcdFxcbjY0MjU6XFx0XFx0LyogbG9vayBmb3IgdGhlIHNrYiBtYXRjaGluZyB0aGUgY29va2llIHBhc3NlZCBiYWNrIGZyb20gdXNlciAqL1xcbjY0MjY6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NDI3OlxcdFxcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLCBza2IsIHRtcCkge1xcbjY0Mjg6XFx0XFx0XFx0dWludHB0cl90IHNrYl9jb29raWU7XFxuNjQyOTpcXHRcXG42NDMwOlxcdFxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG42NDMxOlxcdFxcdFxcdHNrYl9jb29raWUgPSAodWludHB0cl90KXR4aS1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVswXTtcXG42NDMyOlxcdFxcbjY0MzM6XFx0XFx0XFx0aWYgKHNrYl9jb29raWUgPT0gcmV0X3NrYl9jb29raWUpIHtcXG42NDM0OlxcdFxcdFxcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZkYXRhMi1cXHUwMDNlcGVuZGluZyk7XFxuNjQzNTpcXHRcXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuNjQzNjpcXHRcXHRcXHRcXHRicmVhaztcXG42NDM3OlxcdFxcdFxcdH1cXG42NDM4OlxcdFxcdH1cXG42NDM5OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRhdGEyLVxcdTAwM2VwZW5kaW5nLmxvY2ssIGZsYWdzKTtcXG42NDQwOlxcdFxcbjY0NDE6XFx0XFx0Lyogbm90IGZvdW5kICovXFxuNjQ0MjpcXHRcXHRpZiAoIWZvdW5kKVxcbjY0NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuNjQ0NDpcXHRcXG42NDQ1OlxcdFxcdHR4aSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTtcXG42NDQ2OlxcdFxcdGZyZXEgPSAodWludHB0cl90KXR4aS1cXHUwMDNlcmF0ZV9kcml2ZXJfZGF0YVsxXTtcXG42NDQ3OlxcdFxcbjY0NDg6XFx0XFx0aWYgKCFub19tb25pdG9yKVxcbjY0NDk6XFx0XFx0XFx0bWFjODAyMTFfaHdzaW1fbW9uaXRvcl9yeChkYXRhMi1cXHUwMDNlaHcsIHNrYiwgZnJlcSk7XFxuNjQ1MDpcXHRcXG42NDUxOlxcdFxcdC8qIFR4IGluZm8gcmVjZWl2ZWQgYmVjYXVzZSB0aGUgZnJhbWUgd2FzIGJyb2FkY2FzdGVkIG9uIHVzZXIgc3BhY2UsXFxuNjQ1MjpcXHRcXHQgc28gd2UgZ2V0IGFsbCB0aGUgbmVjZXNzYXJ5IGluZm86IHR4IGF0dGVtcHRzIGFuZCBza2IgY29udHJvbCBidWZmICovXFxuNjQ1MzpcXHRcXG42NDU0OlxcdFxcdHR4X2F0dGVtcHRzID0gKHN0cnVjdCBod3NpbV90eF9yYXRlICopbmxhX2RhdGEoXFxuNjQ1NTpcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlYXR0cnNbSFdTSU1fQVRUUl9UWF9JTkZPXSk7XFxuNjQ1NjpcXHRcXG42NDU3OlxcdFxcdC8qIG5vdyBzZW5kIGJhY2sgVFggc3RhdHVzICovXFxuNjQ1ODpcXHRcXHRpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhpKTtcXG42NDU5OlxcdFxcbjY0NjA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykge1xcbjY0NjE6XFx0XFx0XFx0dHhpLVxcdTAwM2VzdGF0dXMucmF0ZXNbaV0uaWR4ID0gdHhfYXR0ZW1wdHNbaV0uaWR4O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxNDoyOTo1My44Njc1Nzc4NTJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk2NjQzNTAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBLTVNBTiBOZWVkZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ3ZlIHJldmlld2VkIHRoZSBwYXRjaCBhbmQgdGhlIGNvcmUgY2hhbmdlcyBhcmU6IGEgbmV3IGBIV1NJTV9BVFRSX05PX01PTklUT1JgIGF0dHJpYnV0ZSBmb3Igc2VsZWN0aXZlbHkgZGlzYWJsaW5nIG1vbml0b3IgZnJhbWVzLCBzdG9yYWdlIGFuZCByZXRyaWV2YWwgb2YgdGhlIHRyYW5zbWlzc2lvbiBmcmVxdWVuY3kgdmlhIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYW5kIHRoZSBhYmlsaXR5IHRvIHVwZGF0ZSBhIHBlbmRpbmcgZnJhbWUncyBkYXRhIGZyb20gYSBuZXRsaW5rIG1lc3NhZ2UuXG5cbk15IGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTbywgSSB3ZW50IHRocm91Z2ggaXQgd2l0aCBhIGZpbmUtdG9vdGhlZCBjb21iLiBUaGUgZnJlcXVlbmN5LCBub3cgc3RvcmVkIGluIGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIGZyYW1lIGRhdGEgY29waWVkIGludG8gdGhlIHNrYiBpbiBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYCBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSBuZXRsaW5rIG1lc3NhZ2UsIGFuZCBsZW5ndGggY2hlY2tzIGFyZSBpbiBwbGFjZSwgc28gdGhlIGRhdGEgaXMgYm91bmRlZCwgYW5kIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBtb25pdG9yIGZ1bmN0aW9ucyBhbHNvIHJlY2VpdmUgdGhlIGZyZXF1ZW5jeSBhcyBhIGB1MzJgIGFuZCB3cml0ZSBpdCB0byBhIGhlYWRlciBmaWVsZC4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcywgbm90aGluZyBpcyBnZXR0aW5nIGNvcGllZCB0byB1c2Vyc3BhY2UgdW5pbml0aWFsaXplZCwgbm8gY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gaW5mb3JtYXRpb24gbGVha3MuXG5cbkdpdmVuIHRoYXQgSSBrbm93IHRoZSBLTVNBTiBndWlkZWxpbmVzIHdlbGwsIEkndmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgdGhlIHJ1bGVzLiBUaGUgcGF0Y2ggY2hhbmdlcyBhbmQgYWRkaXRpb25zOiBgSFdTSU1fQVRUUl9OT19NT05JVE9SYCwgYGZyZXFgLCBgc2tiX2Nvb2tpZWAsIGFuZCBgcmF0ZV9kcml2ZXJfZGF0YVsxXWAgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBmcmFtZSBkYXRhIGNvbWVzIGZyb20gYSBuZXRsaW5rIGF0dHJpYnV0ZSB3aXRoIGxlbmd0aCB2ZXJpZmljYXRpb24uXG5cblJlZ2FyZGluZyB0aGUgXCJkbyB3ZSBuZWVkIEtNU0FOXCIgcXVlc3Rpb24gLSBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgYnVncywgc3VjaCBhcyBjb25jdXJyZW5jeSwgYnVmZmVyIG92ZXJydW5zLCBvciB1c2UtYWZ0ZXItZnJlZSBvbiB0aGUgc2tiLCBhcmUgYWxyZWFkeSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjcmVhdGUgYm91bmRzIGNoZWNrcyB0aGF0IGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgS01TQU4gY29uY2VybnMuIEl0J3Mgc2FmZSwgYW5kIE5lZWRzS01TQU4gPSBmYWxzZS4gVGhlIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuIEkgd2lsbCBub3cgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NTUsIk91dHB1dFRva2VucyI6MjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE0OjMwOjAwLjgzNDAxNTY1NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltYCB0byBhZGQgdGhlIGBIV1NJTV9BVFRSX05PX01PTklUT1JgIG5ldGxpbmsgZmxhZyBhdHRyaWJ1dGUgZm9yIHNraXBwaW5nIG1vbml0b3IgcmVwb3J0cywgcHJlc2VydmVzIHRoZSB0cmFuc21pc3Npb24gY2hhbm5lbCBmcmVxdWVuY3kgaW4gYHJhdGVfZHJpdmVyX2RhdGFbMV1gLCBhbmQgdXBkYXRlcyB0aGUgcGVuZGluZyB0cmFuc21pdHRlZCBza2IgaW4gYGh3c2ltX2Nsb25lZF9mcmFtZV9yZWNlaXZlZF9ubGAgd2hlbiBtYXRjaGluZyBjb29raWUgYW5kIHRyYW5zbWl0dGVyIGF0dHJpYnV0ZXMgYXJlIHByb3ZpZGVkLlxcblxcbkFsbCBsb2NhbCB2YXJpYWJsZXMgKGBmcmVxYCwgYG5vX21vbml0b3JgLCBgY29va2llYCwgZXRjLikgYW5kIHN0cnVjdHVyZSBtZW1iZXJzIChgcmF0ZV9kcml2ZXJfZGF0YVsxXWAsIGBoZHItXFx1MDAzZXJ0X2NoYW5uZWxgKSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2ggYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3MuIFNLQiBtb2RpZmljYXRpb25zIHVzZSBgc2tiX3B1dF9kYXRhYCB3aXRoIHZlcmlmaWVkIHBheWxvYWQgbGVuZ3RocyBmcm9tIHZhbGlkYXRlZCBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZ3MsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgcmlza3MgcmVsYXRpbmcgdG8gU0tCIG1hbmlwdWxhdGlvbiwgcXVldWUgbG9ja2luZywgb3IgcmVmZXJlbmNlIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGRldGVjdG9ycy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWFjODAyMTFfaHdzaW1gIHRvIGFkZCB0aGUgYEhXU0lNX0FUVFJfTk9fTU9OSVRPUmAgbmV0bGluayBmbGFnIGF0dHJpYnV0ZSBmb3Igc2tpcHBpbmcgbW9uaXRvciByZXBvcnRzLCBwcmVzZXJ2ZXMgdGhlIHRyYW5zbWlzc2lvbiBjaGFubmVsIGZyZXF1ZW5jeSBpbiBgcmF0ZV9kcml2ZXJfZGF0YVsxXWAsIGFuZCB1cGRhdGVzIHRoZSBwZW5kaW5nIHRyYW5zbWl0dGVkIHNrYiBpbiBgaHdzaW1fY2xvbmVkX2ZyYW1lX3JlY2VpdmVkX25sYCB3aGVuIG1hdGNoaW5nIGNvb2tpZSBhbmQgdHJhbnNtaXR0ZXIgYXR0cmlidXRlcyBhcmUgcHJvdmlkZWQuXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGZyZXFgLCBgbm9fbW9uaXRvcmAsIGBjb29raWVgLCBldGMuKSBhbmQgc3RydWN0dXJlIG1lbWJlcnMgKGByYXRlX2RyaXZlcl9kYXRhWzFdYCwgYGhkci1cXHUwMDNlcnRfY2hhbm5lbGApIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gdGhpcyBwYXRjaCBhcmUgZXhwbGljaXRseSBhc3NpZ25lZCBhbmQgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzcy4gU0tCIG1vZGlmaWNhdGlvbnMgdXNlIGBza2JfcHV0X2RhdGFgIHdpdGggdmVyaWZpZWQgcGF5bG9hZCBsZW5ndGhzIGZyb20gdmFsaWRhdGVkIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5ncywgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCByaXNrcyByZWxhdGluZyB0byBTS0IgbWFuaXB1bGF0aW9uLCBxdWV1ZSBsb2NraW5nLCBvciByZWZlcmVuY2UgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgZGV0ZWN0b3JzLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow5dbkn[1] Phase: Succeeded StartedAt: 2026-09-11 14:30:12 +0000 UTC FinishedAt: 2026-09-11 14:30:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 14:30:12 +0000 UTC FinishedAt: 2026-09-11 14:30:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2] Phase: Succeeded StartedAt: 2026-09-11 14:30:12 +0000 UTC FinishedAt: 2026-09-11 18:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 14:30:12 +0000 UTC FinishedAt: 2026-09-11 18:14:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 14:30:12 +0000 UTC FinishedAt: 2026-09-11 14:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 14:30:12 +0000 UTC FinishedAt: 2026-09-11 14:30:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dbkn/series-workflow5dbkn-convert-artifact-3691383392/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 14:30:23 +0000 UTC FinishedAt: 2026-09-11 14:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 14:30:23 +0000 UTC FinishedAt: 2026-09-11 14:49:05 +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:*17d7aa00-3c9d-4112-933c-8bb7799ab3de,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-workflow5dbkn/series-workflow5dbkn-convert-artifact-3691383392/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": "c8ac44e8-3f59-4633-9979-281842c89469", "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-workflow5dbkn/series-workflow5dbkn-build-action-3756947750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 14:30:23 +0000 UTC FinishedAt: 2026-09-11 14:48:55 +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:*17d7aa00-3c9d-4112-933c-8bb7799ab3de,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-workflow5dbkn/series-workflow5dbkn-convert-artifact-3691383392/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": "c8ac44e8-3f59-4633-9979-281842c89469", "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-workflow5dbkn/series-workflow5dbkn-build-action-3756947750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 14:49:05 +0000 UTC FinishedAt: 2026-09-11 14:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 14:49:05 +0000 UTC FinishedAt: 2026-09-11 14:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 14:49:05 +0000 UTC FinishedAt: 2026-09-11 14:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 14:49:05 +0000 UTC FinishedAt: 2026-09-11 14:49:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dbkn/series-workflow5dbkn-convert-artifact-906456711/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 14:49:15 +0000 UTC FinishedAt: 2026-09-11 14:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 14:49:15 +0000 UTC FinishedAt: 2026-09-11 14:51:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c8ac44e8-3f59-4633-9979-281842c89469,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-workflow5dbkn/series-workflow5dbkn-build-action-3756947750/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-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 14:51:17 +0000 UTC FinishedAt: 2026-09-11 14:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 14:51:17 +0000 UTC FinishedAt: 2026-09-11 14:51:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 14:51:17 +0000 UTC FinishedAt: 2026-09-11 15:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 14:51:17 +0000 UTC FinishedAt: 2026-09-11 15:09:51 +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:*17d7aa00-3c9d-4112-933c-8bb7799ab3de,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-workflow5dbkn/series-workflow5dbkn-convert-artifact-906456711/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": "d2e0b155-1325-4c64-8654-b8f028ee6116", "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-workflow5dbkn/series-workflow5dbkn-build-action-3298910219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 14:51:17 +0000 UTC FinishedAt: 2026-09-11 15:09:41 +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:*17d7aa00-3c9d-4112-933c-8bb7799ab3de,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-workflow5dbkn/series-workflow5dbkn-convert-artifact-906456711/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": "d2e0b155-1325-4c64-8654-b8f028ee6116", "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-workflow5dbkn/series-workflow5dbkn-build-action-3298910219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 15:09:51 +0000 UTC FinishedAt: 2026-09-11 15:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 15:09:51 +0000 UTC FinishedAt: 2026-09-11 15:09:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 15:09:51 +0000 UTC FinishedAt: 2026-09-11 15:11:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 15:09:51 +0000 UTC FinishedAt: 2026-09-11 15:11:42 +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:*d2e0b155-1325-4c64-8654-b8f028ee6116,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-workflow5dbkn/series-workflow5dbkn-build-action-3298910219/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-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 15:11:52 +0000 UTC FinishedAt: 2026-09-11 18:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 15:11:52 +0000 UTC FinishedAt: 2026-09-11 18:14:42 +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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*c8ac44e8-3f59-4633-9979-281842c89469,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2e0b155-1325-4c64-8654-b8f028ee6116,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-workflow5dbkn/series-workflow5dbkn-build-action-3756947750/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-workflow5dbkn/series-workflow5dbkn-build-action-3298910219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 15:11:52 +0000 UTC FinishedAt: 2026-09-11 15:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 15:11:52 +0000 UTC FinishedAt: 2026-09-11 15:11:57 +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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dbkn/series-workflow5dbkn-convert-artifact-2134032736/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 15:11:52 +0000 UTC FinishedAt: 2026-09-11 15:11:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 15:11:52 +0000 UTC FinishedAt: 2026-09-11 15:11:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 15:11:52 +0000 UTC FinishedAt: 2026-09-11 15:11:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 15:12:03 +0000 UTC FinishedAt: 2026-09-11 18:14:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dbkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["hwsim_cloned_frame_received_nl","hwsim_tx_info_frame_received_nl","mac80211_hwsim_tx_frame_nl","mac80211_hwsim_monitor_rx","mac80211_hwsim_monitor_ack","mac80211_hwsim_tx"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211_HWSIM","MAC80211","CFG80211"],"series_id":"7db2c614-ddb6-4093-8a6f-7f58a93db682","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 15:12:03 +0000 UTC FinishedAt: 2026-09-11 18:14:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c8ac44e8-3f59-4633-9979-281842c89469,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2e0b155-1325-4c64-8654-b8f028ee6116,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-workflow5dbkn/series-workflow5dbkn-build-action-3756947750/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-workflow5dbkn/series-workflow5dbkn-build-action-3298910219/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-workflow5dbkn/series-workflow5dbkn-convert-artifact-2134032736/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,}