Name: series-workflow86fwm Phase: Succeeded StartedAt: 2026-08-25 16:40:38 +0000 UTC FinishedAt: 2026-08-25 20:46:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[0] Phase: Succeeded StartedAt: 2026-08-25 16:40:38 +0000 UTC FinishedAt: 2026-08-25 17:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 16:40:38 +0000 UTC FinishedAt: 2026-08-25 17:03:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "NETFILTER", "NETFILTER_ADVANCED", "BRIDGE_NETFILTER", "CAN", "MCTP", "I2C", "I2C_SLAVE", "MCTP_TRANSPORT_I2C", "INET", "MPTCP", "INET_PSP", "NET_CLS_ACT", "NET_TC_SKB_EXT", "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "NETFILTER", "NETFILTER_ADVANCED", "BRIDGE_NETFILTER", "CAN", "MCTP", "I2C", "I2C_SLAVE", "MCTP_TRANSPORT_I2C", "INET", "MPTCP", "INET_PSP", "NET_CLS_ACT", "NET_TC_SKB_EXT", "XFRM_USER" ], "series_id": "403a2d64-e3c0-4842-ab73-8887a16ad19c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_ext_add", "__skb_ext_set", "__skb_ext_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7STJDJiMzNDssCiAgICAmIzM0O0kyQ19TTEFWRSYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9JMkMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtJTkVUX1BTUCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfVENfU0tCX0VYVCYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtfX3NrYl9leHRfc2V0JiMzNDssCiAgICAmIzM0O19fc2tiX2V4dF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbGF5b3V0IG9mIGBza2JfZXh0YCAoc2tfYnVmZiBleHRlbnNpb25zKSBmcm9tIGEgdmFyaWFibGUtc2l6ZWQsIGR5bmFtaWNhbGx5IGFwcGVuZGVkIGxheW91dCB0byBhIGZpeGVkLXNpemVkIGxheW91dCAoYHN0cnVjdCBza2JfZXh0X2xheW91dGApIHdpdGggc3RhdGljIG9mZnNldHMgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGUuXG5cbjEuIFRoZSBuZXcgYHNrYl9leHRfbGF5b3V0YCBpcyBhbGxvY2F0ZWQgZnJvbSBhIHNsYWIgY2FjaGUsIGFuZCBsaWtlIHRoZSBvbGQgY29kZSwgb25seSB0aGUgaGVhZGVyIChgcmVmY250YCBhbmQgYHByZXNlbnRfZXh0ZW5zaW9uc2ApIGlzIGluaXRpYWxpemVkLiBUaGUgZXh0ZW5zaW9uIGRhdGEgc2xvdHMgcmVtYWluIHVuaW5pdGlhbGl6ZWQgdW50aWwgZXhwbGljaXRseSByZXF1ZXN0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIuXG4yLiBUaGUgdW5pbml0aWFsaXplZCBzbG90cyBhcmUgc3RyaWN0bHkgZ3VhcmRlZCBieSB0aGUgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0bWFwLiBUaGV5IGNhbm5vdCBiZSBhY2Nlc3NlZCB1bmxlc3MgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGlzIHNldCwgd2hpY2ggb25seSBoYXBwZW5zIHdoZW4gYW4gZXh0ZW5zaW9uIGlzIHByb3Blcmx5IGFkZGVkIGFuZCBpbml0aWFsaXplZC5cbjMuIFdoZW4gY29weWluZyBhbiBleHRlbnNpb24gKGBza2JfZXh0X21heWJlX2Nvd2ApLCB0aGUgY29kZSBjb3BpZXMgdGhlIGhlYWRlciBhbmQgb25seSB0aGUgcHJlc2VudCBleHRlbnNpb25zLCBsZWF2aW5nIHRoZSB1bnVzZWQgc2xvdHMgdW5pbml0aWFsaXplZC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byB0aGUgb2xkIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuNC4gYHNrYl9leHRgIGFuZCBpdHMgZXh0ZW5zaW9ucyBhcmUgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgdXNlZCBmb3IgbWV0YWRhdGEgKGUuZy4sIElQc2VjLCBUQywgYnJpZGdlIG5ldGZpbHRlcikgYW5kIGFyZSBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmssIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgaW5mby1sZWFrcy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykuIEl0IHJlcGxhY2VzIGR5bmFtaWMgb2Zmc2V0cyB3aXRoIGNvbXBpbGUtdGltZSBmaXhlZCBvZmZzZXRzIGFuZCB1c2VzIGEgYml0bWFwIHRvIHRyYWNrIHByZXNlbnQgZXh0ZW5zaW9ucy4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBleHRlbnNpb25zIGxpa2UgSVBzZWMsIEJyaWRnZSBOZXRmaWx0ZXIsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOIGFyZSBhdHRhY2hlZCB0byBzb2NrZXQgYnVmZmVycy4gSXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgbWVtb3J5IGxheW91dCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkOGM2YzQwM2Y4NmYxYWJhMDZjM2I0OTEyYjMwOWFjMzVmMzNjZWVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTY6NTc6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDk1MTg0MTgzMTgwZjYuLjVhNTE0M2U0N2IzMDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtNTAxMSw0NSAmIzQzOzUwMTEsODEgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfbmZjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBsb25nIG5mY3QpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlNcbi1lbnVtIHNrYl9leHRfaWQge1xuJiM0MztcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbi1cdFNLQl9FWFRfQlJJREdFX05GLFxuJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9CUklER0VfTkZcdFgoU0tCX0VYVF9CUklER0VfTkYsIHN0cnVjdCBuZl9icmlkZ2VfaW5mbylcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQlJJREdFX05GXG4gI2VuZGlmXG4tI2lmZGVmIENPTkZJR19YRlJNXG4tXHRTS0JfRVhUX1NFQ19QQVRILFxuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1hGUk0pXG4mIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1NFQ19QQVRIXHRYKFNLQl9FWFRfU0VDX1BBVEgsIHN0cnVjdCBzZWNfcGF0aClcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfU0VDX1BBVEhcbiAjZW5kaWZcbiYjNDM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKVxuLVx0VENfU0tCX0VYVCxcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfVENcdFx0WChUQ19TS0JfRVhULCBzdHJ1Y3QgdGNfc2tiX2V4dClcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfVENcbiAjZW5kaWZcbiYjNDM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuLVx0U0tCX0VYVF9NUFRDUCxcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfTVBUQ1BcdFx0WChTS0JfRVhUX01QVENQLCBzdHJ1Y3QgbXB0Y3BfZXh0KVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9NUFRDUFxuICNlbmRpZlxuJiM0MztcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUylcbi1cdFNLQl9FWFRfTUNUUCxcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfTUNUUFx0XHRYKFNLQl9FWFRfTUNUUCwgc3RydWN0IG1jdHBfZmxvdylcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfTUNUUFxuICNlbmRpZlxuJiM0MztcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG4tXHRTS0JfRVhUX1BTUCxcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfUFNQXHRcdFgoU0tCX0VYVF9QU1AsIHN0cnVjdCBwc3Bfc2tiX2V4dClcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfUFNQXG4gI2VuZGlmXG4mIzQzO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19DQU4pXG4tXHRTS0JfRVhUX0NBTixcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQ0FOXHRcdFgoU0tCX0VYVF9DQU4sIHN0cnVjdCBjYW5fc2tiX2V4dClcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQ0FOXG4gI2VuZGlmXG4tXHRTS0JfRVhUX05VTSwgLyogbXVzdCBiZSBsYXN0ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFNLQl9FWFRfRk9SRUFDSChYKVx0XFxcbiYjNDM7XHRTS0JfRVhUX1hfQlJJREdFX05GXHRcXFxuJiM0MztcdFNLQl9FWFRfWF9TRUNfUEFUSFx0XFxcbiYjNDM7XHRTS0JfRVhUX1hfVENcdFx0XFxcbiYjNDM7XHRTS0JfRVhUX1hfTVBUQ1BcdFx0XFxcbiYjNDM7XHRTS0JfRVhUX1hfTUNUUFx0XHRcXFxuJiM0MztcdFNLQl9FWFRfWF9QU1BcdFx0XFxcbiYjNDM7XHRTS0JfRVhUX1hfQ0FOXG4mIzQzO1xuJiM0MztlbnVtIHNrYl9leHRfaWQge1xuJiM0MzsjZGVmaW5lIFgoaWQsIHR5cGUpXHRpZCxcbiYjNDM7XHRTS0JfRVhUX0ZPUkVBQ0goWClcbiYjNDM7I3VuZGVmIFhcbiYjNDM7XHRTS0JfRVhUX05VTSxcbiB9O1xuIFxuJiM0MztleHRlcm4gY29uc3QgdTggc2tiX2V4dF9vZmZzZXRbU0tCX0VYVF9OVU1dO1xuJiM0MztcbiAvKipcbiAgKlx0c3RydWN0IHNrYl9leHQgLSBza19idWZmIGV4dGVuc2lvbnNcbiAgKlx0QHJlZmNudDogMSBvbiBhbGxvY2F0aW9uLCBkZWFsbG9jYXRlZCBvbiAwXG4tICpcdEBvZmZzZXQ6IG9mZnNldCB0byBhZGQgdG8gQGRhdGEgdG8gb2J0YWluIGV4dGVuc2lvbiBhZGRyZXNzXG4tICpcdEBjaHVua3M6IHNpemUgY3VycmVudGx5IGFsbG9jYXRlZCwgc3RvcmVkIGluIFNLQl9FWFRfQUxJR05fU0hJRlQgdW5pdHNcbiYjNDM7ICpcdEBwcmVzZW50X2V4dGVuc2lvbnM6IGJpdG1hcCBvZiBleHRlbnNpb25zIHN0b3JlZCBpbiBAZGF0YVxuICAqXHRAZGF0YTogc3RhcnQgb2YgZXh0ZW5zaW9uIGRhdGEsIHZhcmlhYmxlIHNpemVkXG4gICpcbi0gKlx0Tm90ZTogb2Zmc2V0cy9sZW5ndGhzIGFyZSBzdG9yZWQgaW4gY2h1bmtzIG9mIDggYnl0ZXMsIHRoaXMgYWxsb3dzXG4tICpcdHRvIHVzZSAmIzM5O3U4JiMzOTsgdHlwZXMgd2hpbGUgYWxsb3dpbmcgdXAgdG8gMmtiIHdvcnRoIG9mIGV4dGVuc2lvbiBkYXRhLlxuJiM0MzsgKlx0RWFjaCBleHRlbnNpb24gaWQgb2NjdXBpZXMgYSBmaXhlZCBzbG90IHdpdGhpbiBAZGF0YSwgbG9jYXRlZCBhdFxuJiM0MzsgKlx0c2tiX2V4dF9vZmZzZXRbaWRdIGNodW5rcyBvZiA4IGJ5dGVzLiBTdG9yaW5nIG9mZnNldHMvbGVuZ3Roc1xuJiM0MzsgKlx0aW4gOC1ieXRlIGNodW5rcyBhbGxvd3MgJiMzOTt1OCYjMzk7IHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aFxuJiM0MzsgKlx0b2YgZXh0ZW5zaW9uIGRhdGEuXG4gICovXG4gc3RydWN0IHNrYl9leHQge1xuIFx0cmVmY291bnRfdCByZWZjbnQ7XG4tXHR1OCBvZmZzZXRbU0tCX0VYVF9OVU1dOyAvKiBpbiBjaHVua3Mgb2YgOCBieXRlcyAqL1xuLVx0dTggY2h1bmtzO1x0XHQvKiBzYW1lICovXG4mIzQzO1x0dTggcHJlc2VudF9leHRlbnNpb25zO1xuIFx0Y2hhciBkYXRhW10gX19hbGlnbmVkKDgpO1xuIH07XG4gXG5AQCAtNTA4Nyw3ICYjNDM7NTEyMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYylcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19za2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza2JfZXh0ICpleHQsIGVudW0gc2tiX2V4dF9pZCBpKVxuIHtcbi1cdHJldHVybiAhIWV4dC1cdTAwM2VvZmZzZXRbaV07XG4mIzQzO1x0cmV0dXJuIGV4dC1cdTAwM2VwcmVzZW50X2V4dGVuc2lvbnMgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIHNrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuQEAgLTUxMDYsNyAmIzQzOzUxNDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9leHRfZmluZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4gXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSkge1xuIFx0XHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVx1MDAzZWV4dGVuc2lvbnM7XG4gXG4tXHRcdHJldHVybiAodm9pZCAqKWV4dCAmIzQzOyAoZXh0LVx1MDAzZW9mZnNldFtpZF0gXHUwMDNjXHUwMDNjIDMpO1xuJiM0MztcdFx0cmV0dXJuICh2b2lkICopZXh0ICYjNDM7IChza2JfZXh0X29mZnNldFtpZF0gXHUwMDNjXHUwMDNjIDMpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYzgyYTE0NzJhNWVhOC4uOGU1ZGI1Nzk3MjVkMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTUxMzQsNDcgJiM0Mzs1MTM0LDMyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50KTtcbiAjZGVmaW5lIFNLQl9FWFRfQ0hVTktTSVpFT0YoeClcdChBTElHTigoc2l6ZW9mKHgpKSwgU0tCX0VYVF9BTElHTl9WQUxVRSkgLyBTS0JfRVhUX0FMSUdOX1ZBTFVFKVxuIFxuIHN0YXRpYyBjb25zdCB1OCBza2JfZXh0X3R5cGVfbGVuW10gPSB7XG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG4tXHRbU0tCX0VYVF9CUklER0VfTkZdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pLFxuLSNlbmRpZlxuLSNpZmRlZiBDT05GSUdfWEZSTVxuLVx0W1NLQl9FWFRfU0VDX1BBVEhdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3Qgc2VjX3BhdGgpLFxuLSNlbmRpZlxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVClcbi1cdFtUQ19TS0JfRVhUXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHRjX3NrYl9leHQpLFxuLSNlbmRpZlxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUClcbi1cdFtTS0JfRVhUX01QVENQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG1wdGNwX2V4dCksXG4tI2VuZGlmXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpXG4tXHRbU0tCX0VYVF9NQ1RQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG1jdHBfZmxvdyksXG4tI2VuZGlmXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuLVx0W1NLQl9FWFRfUFNQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHBzcF9za2JfZXh0KSxcbi0jZW5kaWZcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfQ0FOKVxuLVx0W1NLQl9FWFRfQ0FOXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IGNhbl9za2JfZXh0KSxcbi0jZW5kaWZcbiYjNDM7I2RlZmluZSBYKGlkLCB0eXBlKVx0W2lkXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0YodHlwZSksXG4mIzQzO1x0U0tCX0VYVF9GT1JFQUNIKFgpXG4mIzQzOyN1bmRlZiBYXG4gfTtcbiBcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbm9fcHJvZmlsZSB1bnNpZ25lZCBpbnQgc2tiX2V4dF90b3RhbF9sZW5ndGgodm9pZClcbi17XG4tXHR1bnNpZ25lZCBpbnQgbCA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHNrYl9leHQpO1xuLVx0aW50IGk7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNrYl9leHRfdHlwZV9sZW4pOyBpJiM0MzsmIzQzOylcbi1cdFx0bCAmIzQzOz0gc2tiX2V4dF90eXBlX2xlbltpXTtcbiYjNDM7c3RydWN0IHNrYl9leHRfbGF5b3V0IHtcbiYjNDM7XHR1OFx0aGVhZGVyW3NpemVvZihzdHJ1Y3Qgc2tiX2V4dCldIF9fYWxpZ25lZChTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbiYjNDM7I2RlZmluZSBYKGlkLCB0eXBlKVx0dHlwZSBmXyMjaWQgX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuJiM0MztcdFNLQl9FWFRfRk9SRUFDSChYKVxuJiM0MzsjdW5kZWYgWFxuJiM0Mzt9O1xuIFxuLVx0cmV0dXJuIGw7XG4tfVxuJiM0Mztjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV0gPSB7XG4mIzQzOyNkZWZpbmUgWChpZCwgdHlwZSlcdFtpZF0gPSBvZmZzZXRvZihzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQsIGZfIyNpZCkgLyBTS0JfRVhUX0FMSUdOX1ZBTFVFLFxuJiM0MztcdFNLQl9FWFRfRk9SRUFDSChYKVxuJiM0MzsjdW5kZWYgWFxuJiM0Mzt9O1xuJiM0MztFWFBPUlRfU1lNQk9MKHNrYl9leHRfb2Zmc2V0KTtcbiBcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgX19ub19wcm9maWxlIHNrYl9leHRlbnNpb25zX2luaXQodm9pZClcbiB7XG4gXHRCVUlMRF9CVUdfT04oU0tCX0VYVF9OVU0gXHUwMDNlIDgpO1xuLVx0QlVJTERfQlVHX09OKHNrYl9leHRfdG90YWxfbGVuZ3RoKCkgXHUwMDNlIDI1NSk7XG4mIzQzO1x0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQpIFx1MDAzZSAyNTUgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbiBcbiBcdHNrYnVmZl9leHRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShcJiMzNDtza2J1ZmZfZXh0X2NhY2hlXCYjMzQ7LFxuLVx0XHRcdFx0XHQgICAgIFNLQl9FWFRfQUxJR05fVkFMVUUgKiBza2JfZXh0X3RvdGFsX2xlbmd0aCgpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0KSxcbiBcdFx0XHRcdFx0ICAgICAwLFxuIFx0XHRcdFx0XHQgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLFxuIFx0XHRcdFx0XHQgICAgIE5VTEwpO1xuQEAgLTcwODMsNyAmIzQzOzcwNjgsNyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9jb25kZW5zZSk7XG4gI2lmZGVmIENPTkZJR19TS0JfRVhURU5TSU9OU1xuIHN0YXRpYyB2b2lkICpza2JfZXh0X2dldF9wdHIoc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGlkKVxuIHtcbi1cdHJldHVybiAodm9pZCAqKWV4dCAmIzQzOyAoZXh0LVx1MDAzZW9mZnNldFtpZF0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbiYjNDM7XHRyZXR1cm4gKHZvaWQgKilleHQgJiM0MzsgKHNrYl9leHRfb2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuIH1cbiBcbiAvKipcbkBAIC03MTAwLDcgJiM0Mzs3MDg1LDcgQEAgc3RydWN0IHNrYl9leHQgKl9fc2tiX2V4dF9hbGxvYyhnZnBfdCBmbGFncylcbiBcdHN0cnVjdCBza2JfZXh0ICpuZXcgPSBrbWVtX2NhY2hlX2FsbG9jKHNrYnVmZl9leHRfY2FjaGUsIGZsYWdzKTtcbiBcbiBcdGlmIChuZXcpIHtcbi1cdFx0bWVtc2V0KG5ldy1cdTAwM2VvZmZzZXQsIDAsIHNpemVvZihuZXctXHUwMDNlb2Zmc2V0KSk7XG4mIzQzO1x0XHRuZXctXHUwMDNlcHJlc2VudF9leHRlbnNpb25zID0gMDtcbiBcdFx0cmVmY291bnRfc2V0KFx1MDAyNm5ldy1cdTAwM2VyZWZjbnQsIDEpO1xuIFx0fVxuIFxuQEAgLTcxMTEsNiAmIzQzOzcwOTYsNyBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgb2xkX2FjdGl2ZSlcbiB7XG4gXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3O1xuJiM0MztcdGludCBpO1xuIFxuIFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2b2xkLVx1MDAzZXJlZmNudCkgPT0gMSlcbiBcdFx0cmV0dXJuIG9sZDtcbkBAIC03MTE5LDcgJiM0Mzs3MTA1LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdG1lbWNweShuZXcsIG9sZCwgb2xkLVx1MDAzZWNodW5rcyAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuJiM0MztcdG1lbWNweShuZXcsIG9sZCwgU0tCX0VYVF9DSFVOS1NJWkVPRigqb2xkKSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNLQl9FWFRfTlVNOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG9sZC1cdTAwM2VwcmVzZW50X2V4dGVuc2lvbnMgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBpKSlcbiYjNDM7XHRcdFx0bWVtY3B5KHNrYl9leHRfZ2V0X3B0cihuZXcsIGkpLCBza2JfZXh0X2dldF9wdHIob2xkLCBpKSxcbiYjNDM7XHRcdFx0ICAgICAgIHNrYl9leHRfdHlwZV9sZW5baV0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbiYjNDM7XHR9XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2bmV3LVx1MDAzZXJlZmNudCwgMSk7XG4gXG4gI2lmZGVmIENPTkZJR19YRlJNXG5AQCAtNzE1NiwxMiAmIzQzOzcxNDcsOCBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4gdm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXG4gXHRcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBuZXdsZW4sIG5ld29mZiA9IFNLQl9FWFRfQ0hVTktTSVpFT0YoKmV4dCk7XG4tXG4gXHRza2JfZXh0X3B1dChza2IpO1xuLVx0bmV3bGVuID0gbmV3b2ZmICYjNDM7IHNrYl9leHRfdHlwZV9sZW5baWRdO1xuLVx0ZXh0LVx1MDAzZWNodW5rcyA9IG5ld2xlbjtcbi1cdGV4dC1cdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xuJiM0MztcdGV4dC1cdTAwM2VwcmVzZW50X2V4dGVuc2lvbnMgPSAxIFx1MDAzY1x1MDAzYyBpZDtcbiBcdHNrYi1cdTAwM2VleHRlbnNpb25zID0gZXh0O1xuIFx0c2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zID0gMSBcdTAwM2NcdTAwM2MgaWQ7XG4gXHRyZXR1cm4gc2tiX2V4dF9nZXRfcHRyKGV4dCwgaWQpO1xuQEAgLTcxODQsMzEgJiM0Mzs3MTcxLDIzIEBAIEVYUE9SVF9TWU1CT0xfTlNfR1BMKF9fc2tiX2V4dF9zZXQsIFwmIzM0O05FVERFVl9JTlRFUk5BTFwmIzM0Oyk7XG4gICovXG4gdm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuIHtcbi1cdHN0cnVjdCBza2JfZXh0ICpuZXcsICpvbGQgPSBOVUxMO1xuLVx0dW5zaWduZWQgaW50IG5ld2xlbiwgbmV3b2ZmO1xuJiM0MztcdHN0cnVjdCBza2JfZXh0ICpuZXc7XG4gXG4gXHRpZiAoc2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKSB7XG4tXHRcdG9sZCA9IHNrYi1cdTAwM2VleHRlbnNpb25zO1xuLVxuLVx0XHRuZXcgPSBza2JfZXh0X21heWJlX2NvdyhvbGQsIHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyk7XG4mIzQzO1x0XHRuZXcgPSBza2JfZXh0X21heWJlX2Nvdyhza2ItXHUwMDNlZXh0ZW5zaW9ucyxcbiYjNDM7XHRcdFx0XHRcdHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyk7XG4gXHRcdGlmICghbmV3KVxuIFx0XHRcdHJldHVybiBOVUxMO1xuIFxuIFx0XHRpZiAoX19za2JfZXh0X2V4aXN0KG5ldywgaWQpKVxuIFx0XHRcdGdvdG8gc2V0X2FjdGl2ZTtcbi1cbi1cdFx0bmV3b2ZmID0gbmV3LVx1MDAzZWNodW5rcztcbiBcdH0gZWxzZSB7XG4tXHRcdG5ld29mZiA9IFNLQl9FWFRfQ0hVTktTSVpFT0YoKm5ldyk7XG4tXG4gXHRcdG5ldyA9IF9fc2tiX2V4dF9hbGxvYyhHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFuZXcpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRuZXdsZW4gPSBuZXdvZmYgJiM0Mzsgc2tiX2V4dF90eXBlX2xlbltpZF07XG4tXHRuZXctXHUwMDNlY2h1bmtzID0gbmV3bGVuO1xuLVx0bmV3LVx1MDAzZW9mZnNldFtpZF0gPSBuZXdvZmY7XG4mIzQzO1x0bmV3LVx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyB8PSAxIFx1MDAzY1x1MDAzYyBpZDtcbiBzZXRfYWN0aXZlOlxuIFx0c2tiLVx1MDAzZXNsb3dfZ3JvID0gMTtcbiBcdHNrYi1cdTAwM2VleHRlbnNpb25zID0gbmV3O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtCUklER0VfTkVURklMVEVSJiMzNDssCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtNQ1RQJiMzNDssCiAgICAmIzM0O0kyQyYjMzQ7LAogICAgJiMzNDtJMkNfU0xBVkUmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfSTJDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7SU5FVF9QU1AmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX1RDX1NLQl9FWFQmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX2V4dF9hZGQmIzM0OywKICAgICYjMzQ7X19za2JfZXh0X3NldCYjMzQ7LAogICAgJiMzNDtfX3NrYl9leHRfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgYHNrYl9leHRgIChza19idWZmIGV4dGVuc2lvbnMpLiBJdCByZXBsYWNlcyBkeW5hbWljIG9mZnNldHMgd2l0aCBjb21waWxlLXRpbWUgZml4ZWQgb2Zmc2V0cyBhbmQgdXNlcyBhIGJpdG1hcCB0byB0cmFjayBwcmVzZW50IGV4dGVuc2lvbnMuIFRoaXMgaXMgYSBjb3JlIG5ldHdvcmtpbmcgY2hhbmdlIGFmZmVjdGluZyBob3cgZXh0ZW5zaW9ucyBsaWtlIElQc2VjLCBCcmlkZ2UgTmV0ZmlsdGVyLCBUQywgTVBUQ1AsIE1DVFAsIFBTUCwgYW5kIENBTiBhcmUgYXR0YWNoZWQgdG8gc29ja2V0IGJ1ZmZlcnMuIEl0IGlzIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIG1lbW9yeSBsYXlvdXQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDhjNmM0MDNmODZmMWFiYTA2YzNiNDkxMmIzMDlhYzM1ZjMzY2VlYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDE2OjU3OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggOTUxODQxODMxODBmNi4uNWE1MTQzZTQ3YjMwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC01MDExLDQ1ICYjNDM7NTAxMSw4MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9uZmN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGxvbmcgbmZjdCkKIH0KIAogI2lmZGVmIENPTkZJR19TS0JfRVhURU5TSU9OUwotZW51bSBza2JfZXh0X2lkIHsKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKQotCVNLQl9FWFRfQlJJREdFX05GLAomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX0JSSURHRV9ORglYKFNLQl9FWFRfQlJJREdFX05GLCBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9CUklER0VfTkYKICNlbmRpZgotI2lmZGVmIENPTkZJR19YRlJNCi0JU0tCX0VYVF9TRUNfUEFUSCwKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfWEZSTSkKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9TRUNfUEFUSAlYKFNLQl9FWFRfU0VDX1BBVEgsIHN0cnVjdCBzZWNfcGF0aCkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1NFQ19QQVRICiAjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVCkKLQlUQ19TS0JfRVhULAomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1RDCQlYKFRDX1NLQl9FWFQsIHN0cnVjdCB0Y19za2JfZXh0KQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfVEMKICNlbmRpZgomIzQzOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKQotCVNLQl9FWFRfTVBUQ1AsCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfTVBUQ1AJCVgoU0tCX0VYVF9NUFRDUCwgc3RydWN0IG1wdGNwX2V4dCkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX01QVENQCiAjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX0ZMT1dTKQotCVNLQl9FWFRfTUNUUCwKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9NQ1RQCQlYKFNLQl9FWFRfTUNUUCwgc3RydWN0IG1jdHBfZmxvdykKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX01DVFAKICNlbmRpZgomIzQzOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKQotCVNLQl9FWFRfUFNQLAomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1BTUAkJWChTS0JfRVhUX1BTUCwgc3RydWN0IHBzcF9za2JfZXh0KQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfUFNQCiAjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19DQU4pCi0JU0tCX0VYVF9DQU4sCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQ0FOCQlYKFNLQl9FWFRfQ0FOLCBzdHJ1Y3QgY2FuX3NrYl9leHQpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9DQU4KICNlbmRpZgotCVNLQl9FWFRfTlVNLCAvKiBtdXN0IGJlIGxhc3QgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFNLQl9FWFRfRk9SRUFDSChYKQlcCiYjNDM7CVNLQl9FWFRfWF9CUklER0VfTkYJXAomIzQzOwlTS0JfRVhUX1hfU0VDX1BBVEgJXAomIzQzOwlTS0JfRVhUX1hfVEMJCVwKJiM0MzsJU0tCX0VYVF9YX01QVENQCQlcCiYjNDM7CVNLQl9FWFRfWF9NQ1RQCQlcCiYjNDM7CVNLQl9FWFRfWF9QU1AJCVwKJiM0MzsJU0tCX0VYVF9YX0NBTgomIzQzOwomIzQzO2VudW0gc2tiX2V4dF9pZCB7CiYjNDM7I2RlZmluZSBYKGlkLCB0eXBlKQlpZCwKJiM0MzsJU0tCX0VYVF9GT1JFQUNIKFgpCiYjNDM7I3VuZGVmIFgKJiM0MzsJU0tCX0VYVF9OVU0sCiB9OwogCiYjNDM7ZXh0ZXJuIGNvbnN0IHU4IHNrYl9leHRfb2Zmc2V0W1NLQl9FWFRfTlVNXTsKJiM0MzsKIC8qKgogICoJc3RydWN0IHNrYl9leHQgLSBza19idWZmIGV4dGVuc2lvbnMKICAqCUByZWZjbnQ6IDEgb24gYWxsb2NhdGlvbiwgZGVhbGxvY2F0ZWQgb24gMAotICoJQG9mZnNldDogb2Zmc2V0IHRvIGFkZCB0byBAZGF0YSB0byBvYnRhaW4gZXh0ZW5zaW9uIGFkZHJlc3MKLSAqCUBjaHVua3M6IHNpemUgY3VycmVudGx5IGFsbG9jYXRlZCwgc3RvcmVkIGluIFNLQl9FWFRfQUxJR05fU0hJRlQgdW5pdHMKJiM0MzsgKglAcHJlc2VudF9leHRlbnNpb25zOiBiaXRtYXAgb2YgZXh0ZW5zaW9ucyBzdG9yZWQgaW4gQGRhdGEKICAqCUBkYXRhOiBzdGFydCBvZiBleHRlbnNpb24gZGF0YSwgdmFyaWFibGUgc2l6ZWQKICAqCi0gKglOb3RlOiBvZmZzZXRzL2xlbmd0aHMgYXJlIHN0b3JlZCBpbiBjaHVua3Mgb2YgOCBieXRlcywgdGhpcyBhbGxvd3MKLSAqCXRvIHVzZSAmIzM5O3U4JiMzOTsgdHlwZXMgd2hpbGUgYWxsb3dpbmcgdXAgdG8gMmtiIHdvcnRoIG9mIGV4dGVuc2lvbiBkYXRhLgomIzQzOyAqCUVhY2ggZXh0ZW5zaW9uIGlkIG9jY3VwaWVzIGEgZml4ZWQgc2xvdCB3aXRoaW4gQGRhdGEsIGxvY2F0ZWQgYXQKJiM0MzsgKglza2JfZXh0X29mZnNldFtpZF0gY2h1bmtzIG9mIDggYnl0ZXMuIFN0b3Jpbmcgb2Zmc2V0cy9sZW5ndGhzCiYjNDM7ICoJaW4gOC1ieXRlIGNodW5rcyBhbGxvd3MgJiMzOTt1OCYjMzk7IHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aAomIzQzOyAqCW9mIGV4dGVuc2lvbiBkYXRhLgogICovCiBzdHJ1Y3Qgc2tiX2V4dCB7CiAJcmVmY291bnRfdCByZWZjbnQ7Ci0JdTggb2Zmc2V0W1NLQl9FWFRfTlVNXTsgLyogaW4gY2h1bmtzIG9mIDggYnl0ZXMgKi8KLQl1OCBjaHVua3M7CQkvKiBzYW1lICovCiYjNDM7CXU4IHByZXNlbnRfZXh0ZW5zaW9uczsKIAljaGFyIGRhdGFbXSBfX2FsaWduZWQoOCk7CiB9OwogCkBAIC01MDg3LDcgJiM0Mzs1MTIzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgX19za2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza2JfZXh0ICpleHQsIGVudW0gc2tiX2V4dF9pZCBpKQogewotCXJldHVybiAhIWV4dC0mZ3Q7b2Zmc2V0W2ldOwomIzQzOwlyZXR1cm4gZXh0LSZndDtwcmVzZW50X2V4dGVuc2lvbnMgJmFtcDsgKDEgJmx0OyZsdDsgaSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCkKQEAgLTUxMDYsNyAmIzQzOzUxNDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9leHRfZmluZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpCiAJaWYgKHNrYl9leHRfZXhpc3Qoc2tiLCBpZCkpIHsKIAkJc3RydWN0IHNrYl9leHQgKmV4dCA9IHNrYi0mZ3Q7ZXh0ZW5zaW9uczsKIAotCQlyZXR1cm4gKHZvaWQgKilleHQgJiM0MzsgKGV4dC0mZ3Q7b2Zmc2V0W2lkXSAmbHQ7Jmx0OyAzKTsKJiM0MzsJCXJldHVybiAodm9pZCAqKWV4dCAmIzQzOyAoc2tiX2V4dF9vZmZzZXRbaWRdICZsdDsmbHQ7IDMpOwogCX0KIAogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBjODJhMTQ3MmE1ZWE4Li44ZTVkYjU3OTcyNWQwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNTEzNCw0NyAmIzQzOzUxMzQsMzIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnQpOwogI2RlZmluZSBTS0JfRVhUX0NIVU5LU0laRU9GKHgpCShBTElHTigoc2l6ZW9mKHgpKSwgU0tCX0VYVF9BTElHTl9WQUxVRSkgLyBTS0JfRVhUX0FMSUdOX1ZBTFVFKQogCiBzdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0gewotI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpCi0JW1NLQl9FWFRfQlJJREdFX05GXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG5mX2JyaWRnZV9pbmZvKSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YRlJNCi0JW1NLQl9FWFRfU0VDX1BBVEhdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3Qgc2VjX3BhdGgpLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpCi0JW1RDX1NLQl9FWFRdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgdGNfc2tiX2V4dCksCi0jZW5kaWYKLSNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUCkKLQlbU0tCX0VYVF9NUFRDUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtcHRjcF9leHQpLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUykKLQlbU0tCX0VYVF9NQ1RQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG1jdHBfZmxvdyksCi0jZW5kaWYKLSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUCkKLQlbU0tCX0VYVF9QU1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgcHNwX3NrYl9leHQpLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfQ0FOKQotCVtTS0JfRVhUX0NBTl0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBjYW5fc2tiX2V4dCksCi0jZW5kaWYKJiM0MzsjZGVmaW5lIFgoaWQsIHR5cGUpCVtpZF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHR5cGUpLAomIzQzOwlTS0JfRVhUX0ZPUkVBQ0goWCkKJiM0MzsjdW5kZWYgWAogfTsKIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX25vX3Byb2ZpbGUgdW5zaWduZWQgaW50IHNrYl9leHRfdG90YWxfbGVuZ3RoKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGwgPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBza2JfZXh0KTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHNrYl9leHRfdHlwZV9sZW4pOyBpJiM0MzsmIzQzOykKLQkJbCAmIzQzOz0gc2tiX2V4dF90eXBlX2xlbltpXTsKJiM0MztzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQgewomIzQzOwl1OAloZWFkZXJbc2l6ZW9mKHN0cnVjdCBza2JfZXh0KV0gX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpOwomIzQzOyNkZWZpbmUgWChpZCwgdHlwZSkJdHlwZSBmXyMjaWQgX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpOwomIzQzOwlTS0JfRVhUX0ZPUkVBQ0goWCkKJiM0MzsjdW5kZWYgWAomIzQzO307CiAKLQlyZXR1cm4gbDsKLX0KJiM0Mztjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV0gPSB7CiYjNDM7I2RlZmluZSBYKGlkLCB0eXBlKQlbaWRdID0gb2Zmc2V0b2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0LCBmXyMjaWQpIC8gU0tCX0VYVF9BTElHTl9WQUxVRSwKJiM0MzsJU0tCX0VYVF9GT1JFQUNIKFgpCiYjNDM7I3VuZGVmIFgKJiM0Mzt9OwomIzQzO0VYUE9SVF9TWU1CT0woc2tiX2V4dF9vZmZzZXQpOwogCiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgX19ub19wcm9maWxlIHNrYl9leHRlbnNpb25zX2luaXQodm9pZCkKIHsKIAlCVUlMRF9CVUdfT04oU0tCX0VYVF9OVU0gJmd0OyA4KTsKLQlCVUlMRF9CVUdfT04oc2tiX2V4dF90b3RhbF9sZW5ndGgoKSAmZ3Q7IDI1NSk7CiYjNDM7CUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0KSAmZ3Q7IDI1NSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpOwogCiAJc2tidWZmX2V4dF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCYjMzQ7c2tidWZmX2V4dF9jYWNoZSYjMzQ7LAotCQkJCQkgICAgIFNLQl9FWFRfQUxJR05fVkFMVUUgKiBza2JfZXh0X3RvdGFsX2xlbmd0aCgpLAomIzQzOwkJCQkJICAgICBzaXplb2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0KSwKIAkJCQkJICAgICAwLAogCQkJCQkgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLAogCQkJCQkgICAgIE5VTEwpOwpAQCAtNzA4Myw3ICYjNDM7NzA2OCw3IEBAIEVYUE9SVF9TWU1CT0woc2tiX2NvbmRlbnNlKTsKICNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlMKIHN0YXRpYyB2b2lkICpza2JfZXh0X2dldF9wdHIoc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGlkKQogewotCXJldHVybiAodm9pZCAqKWV4dCAmIzQzOyAoZXh0LSZndDtvZmZzZXRbaWRdICogU0tCX0VYVF9BTElHTl9WQUxVRSk7CiYjNDM7CXJldHVybiAodm9pZCAqKWV4dCAmIzQzOyAoc2tiX2V4dF9vZmZzZXRbaWRdICogU0tCX0VYVF9BTElHTl9WQUxVRSk7CiB9CiAKIC8qKgpAQCAtNzEwMCw3ICYjNDM7NzA4NSw3IEBAIHN0cnVjdCBza2JfZXh0ICpfX3NrYl9leHRfYWxsb2MoZ2ZwX3QgZmxhZ3MpCiAJc3RydWN0IHNrYl9leHQgKm5ldyA9IGttZW1fY2FjaGVfYWxsb2Moc2tidWZmX2V4dF9jYWNoZSwgZmxhZ3MpOwogCiAJaWYgKG5ldykgewotCQltZW1zZXQobmV3LSZndDtvZmZzZXQsIDAsIHNpemVvZihuZXctJmd0O29mZnNldCkpOwomIzQzOwkJbmV3LSZndDtwcmVzZW50X2V4dGVuc2lvbnMgPSAwOwogCQlyZWZjb3VudF9zZXQoJmFtcDtuZXctJmd0O3JlZmNudCwgMSk7CiAJfQogCkBAIC03MTExLDYgJiM0Mzs3MDk2LDcgQEAgc3RhdGljIHN0cnVjdCBza2JfZXh0ICpza2JfZXh0X21heWJlX2NvdyhzdHJ1Y3Qgc2tiX2V4dCAqb2xkLAogCQkJCQkgdW5zaWduZWQgaW50IG9sZF9hY3RpdmUpCiB7CiAJc3RydWN0IHNrYl9leHQgKm5ldzsKJiM0MzsJaW50IGk7CiAKIAlpZiAocmVmY291bnRfcmVhZCgmYW1wO29sZC0mZ3Q7cmVmY250KSA9PSAxKQogCQlyZXR1cm4gb2xkOwpAQCAtNzExOSw3ICYjNDM7NzEwNSwxMiBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsCiAJaWYgKCFuZXcpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtY3B5KG5ldywgb2xkLCBvbGQtJmd0O2NodW5rcyAqIFNLQl9FWFRfQUxJR05fVkFMVUUpOwomIzQzOwltZW1jcHkobmV3LCBvbGQsIFNLQl9FWFRfQ0hVTktTSVpFT0YoKm9sZCkgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFNLQl9FWFRfTlVNOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG9sZC0mZ3Q7cHJlc2VudF9leHRlbnNpb25zICZhbXA7ICgxICZsdDsmbHQ7IGkpKQomIzQzOwkJCW1lbWNweShza2JfZXh0X2dldF9wdHIobmV3LCBpKSwgc2tiX2V4dF9nZXRfcHRyKG9sZCwgaSksCiYjNDM7CQkJICAgICAgIHNrYl9leHRfdHlwZV9sZW5baV0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKJiM0MzsJfQogCXJlZmNvdW50X3NldCgmYW1wO25ldy0mZ3Q7cmVmY250LCAxKTsKIAogI2lmZGVmIENPTkZJR19YRlJNCkBAIC03MTU2LDEyICYjNDM7NzE0Nyw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCwKIHZvaWQgKl9fc2tiX2V4dF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkLAogCQkgICAgc3RydWN0IHNrYl9leHQgKmV4dCkKIHsKLQl1bnNpZ25lZCBpbnQgbmV3bGVuLCBuZXdvZmYgPSBTS0JfRVhUX0NIVU5LU0laRU9GKCpleHQpOwotCiAJc2tiX2V4dF9wdXQoc2tiKTsKLQluZXdsZW4gPSBuZXdvZmYgJiM0Mzsgc2tiX2V4dF90eXBlX2xlbltpZF07Ci0JZXh0LSZndDtjaHVua3MgPSBuZXdsZW47Ci0JZXh0LSZndDtvZmZzZXRbaWRdID0gbmV3b2ZmOwomIzQzOwlleHQtJmd0O3ByZXNlbnRfZXh0ZW5zaW9ucyA9IDEgJmx0OyZsdDsgaWQ7CiAJc2tiLSZndDtleHRlbnNpb25zID0gZXh0OwogCXNrYi0mZ3Q7YWN0aXZlX2V4dGVuc2lvbnMgPSAxICZsdDsmbHQ7IGlkOwogCXJldHVybiBza2JfZXh0X2dldF9wdHIoZXh0LCBpZCk7CkBAIC03MTg0LDMxICYjNDM7NzE3MSwyMyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChfX3NrYl9leHRfc2V0LCAmIzM0O05FVERFVl9JTlRFUk5BTCYjMzQ7KTsKICAqLwogdm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKQogewotCXN0cnVjdCBza2JfZXh0ICpuZXcsICpvbGQgPSBOVUxMOwotCXVuc2lnbmVkIGludCBuZXdsZW4sIG5ld29mZjsKJiM0MzsJc3RydWN0IHNrYl9leHQgKm5ldzsKIAogCWlmIChza2ItJmd0O2FjdGl2ZV9leHRlbnNpb25zKSB7Ci0JCW9sZCA9IHNrYi0mZ3Q7ZXh0ZW5zaW9uczsKLQotCQluZXcgPSBza2JfZXh0X21heWJlX2NvdyhvbGQsIHNrYi0mZ3Q7YWN0aXZlX2V4dGVuc2lvbnMpOwomIzQzOwkJbmV3ID0gc2tiX2V4dF9tYXliZV9jb3coc2tiLSZndDtleHRlbnNpb25zLAomIzQzOwkJCQkJc2tiLSZndDthY3RpdmVfZXh0ZW5zaW9ucyk7CiAJCWlmICghbmV3KQogCQkJcmV0dXJuIE5VTEw7CiAKIAkJaWYgKF9fc2tiX2V4dF9leGlzdChuZXcsIGlkKSkKIAkJCWdvdG8gc2V0X2FjdGl2ZTsKLQotCQluZXdvZmYgPSBuZXctJmd0O2NodW5rczsKIAl9IGVsc2UgewotCQluZXdvZmYgPSBTS0JfRVhUX0NIVU5LU0laRU9GKCpuZXcpOwotCiAJCW5ldyA9IF9fc2tiX2V4dF9hbGxvYyhHRlBfQVRPTUlDKTsKIAkJaWYgKCFuZXcpCiAJCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQluZXdsZW4gPSBuZXdvZmYgJiM0Mzsgc2tiX2V4dF90eXBlX2xlbltpZF07Ci0JbmV3LSZndDtjaHVua3MgPSBuZXdsZW47Ci0JbmV3LSZndDtvZmZzZXRbaWRdID0gbmV3b2ZmOwomIzQzOwluZXctJmd0O3ByZXNlbnRfZXh0ZW5zaW9ucyB8PSAxICZsdDsmbHQ7IGlkOwogc2V0X2FjdGl2ZToKIAlza2ItJmd0O3Nsb3dfZ3JvID0gMTsKIAlza2ItJmd0O2V4dGVuc2lvbnMgPSBuZXc7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFNLQiBFeHRlbnNpb24gTGF5b3V0IENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gbG9vayBhdCBjbG9zZWx5LiBUaGUgY2hhbmdlcyB0byBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgYW5kIGBuZXQvY29yZS9za2J1ZmYuY2AgYXJlIHNpZ25pZmljYW50LiBJdCBsb29rcyBsaWtlIHRoZSB3YXkgYHNrYl9leHRgICh0aGUgc2tfYnVmZiBleHRlbnNpb25zKSBhcmUgaGFuZGxlZCBoYXMgYmVlbiBmdW5kYW1lbnRhbGx5IGFsdGVyZWQuIFByZXZpb3VzbHksIHRoZSBleHRlbnNpb25zIHdlcmUgYWxsb2NhdGVkIGFuZCBhcnJhbmdlZCBkeW5hbWljYWxseSwgd2l0aCBvZmZzZXRzIHN0b3JlZCBpbiBgZXh0LSZndDtvZmZzZXRbaWRdYC4gTm93LCB3ZSYjMzk7cmUgc2VlaW5nIGEgZml4ZWQgbGF5b3V0IGRlZmluZWQgYnkgYHN0cnVjdCBza2JfZXh0X2xheW91dGAgYXQgY29tcGlsZSB0aW1lLCBhbmQgc3RhdGljIG9mZnNldHMgKGBza2JfZXh0X29mZnNldFtpZF1gKS4gUmVwbGFjaW5nIHRoZSBgb2Zmc2V0YCBhcnJheSB3aXRoIGEgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0bWFwIGlzIGFsc28gYSBwcmV0dHkgbWFqb3Igc2hpZnQuCgpUaGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGNoYW5nZSwgbm8gcXVlc3Rpb24uIFRoZSBmYWN0IHRoYXQgaXQgYWZmZWN0cyBmdW5jdGlvbnMgbGlrZSBgc2tiX2V4dF9hZGRgLCBgX19za2JfZXh0X3NldGAsIGFuZCBgc2tiX2V4dF9tYXliZV9jb3dgIHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgdGhlIG1lbW9yeSBsYXlvdXQgb2YgaG93IHRoZXNlIGV4dGVuc2lvbnMgYXJlIGFjY2Vzc2VkIGFuZCBtYW5pcHVsYXRlZC4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlPyBJdCBsb29rcyBsaWtlIGl0IGlzLCBgc2tiX2V4dF9hZGRgIGlzIHVzZWQgaW4gYSB3aG9sZSBidW5jaCBvZiBwbGFjZXMgd2hlbiB3ZSBhZGQgZXh0ZW5zaW9ucyBsaWtlIFNFQ19QQVRILCBCUklER0VfTkYsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOLiBFeGNlbGxlbnQhIFRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gT2J2aW91c2x5LCBgc2tiX2V4dF9hZGRgIGlzIGNyaXRpY2FsLiBBbHNvLCBgX19za2JfZXh0X3NldGAgZGVmaW5pdGVseS4gYHNrYl9leHRfbWF5YmVfY293YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBzbyB3ZSBtaWdodCBub3QgYmUgYWJsZSB0byBmdXp6IGl0IGRpcmVjdGx5LCBidXQgYHNrYl9leHRfYWRkYCBjYWxscyBpdCBzbyB3ZSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciB0aGF0LiBQZXJoYXBzIGBfX3NrYl9leHRfYWxsb2NgIHRvbywgYW5kIHRoZSBpbmxpbmUgYHNrYl9leHRfY29weWAuCgpUaW1lIHRvIGRpZyBpbnRvIGBuZXQvY29yZS9za2J1ZmYuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBgc2tiX2V4dF9hZGRgIGFuZCBgX19za2JfZXh0X3NldGAuIEkmIzM5O2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWUgd2hlcmUgYHNrYl9leHRfYWRkYCBpcyBhY3R1YWxseSB1c2VkLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9leHRfYWRkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MjE1PXN0cnVjdCBza19idWZmICphbGxvY19jYW5fc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fZnJhbWUgKipjZilcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTIyMy1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MjI0Olx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTIyNS1cdGlmICghY3N4KSB7XG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYz0yNDU9c3RydWN0IHNrX2J1ZmYgKmFsbG9jX2NhbmZkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjU0LVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoyNTU6XHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjU2LVx0aWYgKCFjc3gpIHtcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jPTI3OT1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FueGxfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTItXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI5MzpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTQtXHRpZiAoIWNzeCkge1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MzM0PXN0YXRpYyBib29sIGNhbl9za2JfaW5pdF92YWxpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzQxLVx0XHRpZiAoIWNzeCkge1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzozNDI6XHRcdFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTM0My1cdFx0XHRpZiAoIWNzeClcbi0tXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYz0zOT1zdGF0aWMgbmV0ZGV2X3R4X3QgdnhjYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqb3NrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy02OS1cdC8qIHRoZSBjbG9uZWQgc2tiIHBvaW50cyB0byB0aGUgc2tiIGV4dGVuc2lvbiBvZiB0aGUgYWxyZWFkeSBjbG9uZWRcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjcwOlx0ICogb3NrYiB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4gc2tiX2V4dF9hZGQoKSBjcmVhdGVzIGEgY29weSB0b1xuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNzEtXHQgKiBzZXBhcmF0ZSB0aGUgc2tiIGV4dGVuc2lvbiBkYXRhIHdoaWNoIGlzIG5lZWRlZCB0byBzdGFydCB3aXRoIGFcbi0tXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy03My1cdCAqL1xuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmM6NzQ6XHRjc3ggPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQ0FOKTtcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTc1LVx0aWYgKCFjc3gpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaD0zOT1ib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNDAtXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo0MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBjYW5fc2tiX2V4dCAqY2FuX3NrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00Mi17XG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo0MzpcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0NBTik7XG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00NC1cbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oOjQ1Olx0Lyogc2tiX2V4dF9hZGQoKSByZXR1cm5zIHVuaW5pdGlhbGl6ZWQgc3BhY2UgKi9cbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oLTQ2LVx0aWYgKGNzeClcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwOTM9dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTQtXHRcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5NTp2b2lkICpza2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDk2LXZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaD05PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2VfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtMTEtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg6MTI6XHRzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKmIgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC0xMy1cbi0tXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9Nzg3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHRjX3NrYl9leHQgKnRjX3NrYl9leHRfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC03ODgte1xuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjc4OTpcdHN0cnVjdCB0Y19za2JfZXh0ICp0Y19za2JfZXh0ID0gc2tiX2V4dF9hZGQoc2tiLCBUQ19TS0JfRVhUKTtcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC03OTAtXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xNjg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZV91bnNoYXJlKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE2OS17XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE3MDpcdHJldHVybiBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTcxLX1cbi0tXG5uZXQvY2FuL2JjbS5jPTMyMT1zdGF0aWMgdm9pZCBiY21fY2FuX3R4KHN0cnVjdCBiY21fb3AgKm9wLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmKVxuLS1cbm5ldC9jYW4vYmNtLmMtMzUzLVxubmV0L2Nhbi9iY20uYzozNTQ6XHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbm5ldC9jYW4vYmNtLmMtMzU1LVx0aWYgKCFjc3gpIHtcbi0tXG5uZXQvY2FuL2JjbS5jPTE2MDI9c3RhdGljIGludCBiY21fdHhfc2VuZChzdHJ1Y3QgbXNnaGRyICptc2csIGludCBpZmluZGV4LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2Nhbi9iY20uYy0xNjE3LVxubmV0L2Nhbi9iY20uYzoxNjE4Olx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5uZXQvY2FuL2JjbS5jLTE2MTktXHRpZiAoIWNzeCkge1xuLS1cbm5ldC9jYW4vZ3cuYz00NTg9c3RhdGljIHZvaWQgY2FuX2Nhbl9nd19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvY2FuL2d3LmMtNTE2LVx0LyogdGhlIGNsb25lZC9jb3BpZWQgbnNrYiBwb2ludHMgdG8gdGhlIHNrYiBleHRlbnNpb24gb2YgdGhlIG9yaWdpbmFsXG5uZXQvY2FuL2d3LmM6NTE3Olx0ICogc2tiIHdpdGggYW4gaW5jcmVhc2VkIHJlZmNvdW50LiBza2JfZXh0X2FkZCgpIGNyZWF0ZXMgYSBjb3B5IHRvXG5uZXQvY2FuL2d3LmMtNTE4LVx0ICogc2VwYXJhdGUgdGhlIHNrYiBleHRlbnNpb24gZGF0YSB0byBtb2RpZnkgdGhlIGNhbl9nd19ob3BzLlxubmV0L2Nhbi9ndy5jLTUxOS1cdCAqL1xubmV0L2Nhbi9ndy5jOjUyMDpcdG5jc3ggPSBza2JfZXh0X2FkZChuc2tiLCBTS0JfRVhUX0NBTik7XG5uZXQvY2FuL2d3LmMtNTIxLVx0aWYgKCFuY3N4KSB7XG4tLVxubmV0L2Nhbi9pc290cC5jPTI4Nj1zdGF0aWMgaW50IGlzb3RwX3NlbmRfZmMoc3RydWN0IHNvY2sgKnNrLCBpbnQgYWUsIHU4IGZsb3dzdGF0dXMpXG4tLVxubmV0L2Nhbi9pc290cC5jLTI5OC1cbm5ldC9jYW4vaXNvdHAuYzoyOTk6XHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQobnNrYik7XG5uZXQvY2FuL2lzb3RwLmMtMzAwLVx0aWYgKCFjc3gpIHtcbi0tXG5uZXQvY2FuL2lzb3RwLmM9ODYzPXN0YXRpYyB2b2lkIGlzb3RwX3NlbmRfY2ZyYW1lKHN0cnVjdCBpc290cF9zb2NrICpzbylcbi0tXG5uZXQvY2FuL2lzb3RwLmMtODgzLVxubmV0L2Nhbi9pc290cC5jOjg4NDpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xubmV0L2Nhbi9pc290cC5jLTg4NS1cdGlmICghY3N4KSB7XG4tLVxubmV0L2Nhbi9pc290cC5jPTExMDQ9c3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2Nhbi9pc290cC5jLTEyMTMtXG5uZXQvY2FuL2lzb3RwLmM6MTIxNDpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xubmV0L2Nhbi9pc290cC5jLTEyMTUtXHRpZiAoIWNzeCkge1xuLS1cbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM9ODgxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqajE5Mzlfc2tfYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbm5ldC9jYW4vajE5Mzkvc29ja2V0LmMtODk5LVxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYzo5MDA6XHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbm5ldC9jYW4vajE5Mzkvc29ja2V0LmMtOTAxLVx0aWYgKCFjc3gpIHtcbi0tXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jPTYwMT1za19idWZmICpqMTkzOV90cF90eF9kYXRfbmV3KHN0cnVjdCBqMTkzOV9wcml2ICpwcml2LFxuLS1cbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtNjEzLVxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYzo2MTQ6XHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtNjE1LVx0aWYgKCFjc3gpIHtcbi0tXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jPTEwNTY9c3RhdGljIGludCBqMTkzOV9zaW1wbGVfdHhuZXh0KHN0cnVjdCBqMTkzOV9zZXNzaW9uICpzZXNzaW9uKVxuLS1cbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtMTA3Mi1cdC8qIHRoZSBjbG9uZWQgc2tiIHBvaW50cyB0byB0aGUgc2tiIGV4dGVuc2lvbiBvZiB0aGUgb3JpZ2luYWwgc2Vfc2tiXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jOjEwNzM6XHQgKiB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4gc2tiX2V4dF9hZGQoKSBjcmVhdGVzIGEgY29weSB0b1xubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYy0xMDc0LVx0ICogc2VwYXJhdGUgdGhlIHNrYiBleHRlbnNpb24gZGF0YSB3aGljaCBpcyBuZWVkZWQgdG8gbW9kaWZ5IHRoZVxuLS1cbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtMTA3Ni1cdCAqL1xubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYzoxMDc3Olx0aWYgKCFza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQ0FOKSkge1xubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYy0xMDc4LVx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jPTE1NTM9ajE5Mzlfc2Vzc2lvbiAqajE5Mzlfc2Vzc2lvbl9mcmVzaF9uZXcoc3RydWN0IGoxOTM5X3ByaXYgKnByaXYsXG4tLVxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYy0xNTY1LVxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYzoxNTY2Olx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTE1NjctXHRpZiAoIWNzeCkge1xuLS1cbm5ldC9jYW4vcmF3LmM9OTE4PXN0YXRpYyBpbnQgcmF3X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvY2FuL3Jhdy5jLTk2Mi1cbm5ldC9jYW4vcmF3LmM6OTYzOlx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5uZXQvY2FuL3Jhdy5jLTk2NC1cdGlmICghY3N4KSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NzE1Nj1FWFBPUlRfU1lNQk9MX05TX0dQTChfX3NrYl9leHRfc2V0LCBcJiMzNDtORVRERVZfSU5URVJOQUxcJiMzNDspO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcxNTgtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzo3MTU5OiAqIHNrYl9leHRfYWRkIC0gYWxsb2NhdGUgc3BhY2UgZm9yIGdpdmVuIGV4dGVuc2lvbiwgQ09XIGlmIG5lZWRlZFxubmV0L2NvcmUvc2tidWZmLmMtNzE2MC0gKiBAc2tiOiBidWZmZXJcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTcxLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzE3Mjp2b2lkICpza2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG5uZXQvY29yZS9za2J1ZmYuYy03MTczLXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTk2LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjcxOTc6RVhQT1JUX1NZTUJPTChza2JfZXh0X2FkZCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MTk4LVxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jPTI2NT1zdGF0aWMgaW50IGVzcF94bWl0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMzU0LVx0aWYgKGh3X29mZmxvYWQpIHtcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjM1NTpcdFx0aWYgKCFza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfU0VDX1BBVEgpKVxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMzU2LVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jPTMwMz1zdGF0aWMgaW50IGVzcDZfeG1pdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM3NS1cdGlmIChod19vZmZsb2FkKSB7XG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzozNzY6XHRcdGlmICghc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX1NFQ19QQVRIKSlcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM3Ny1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvbWN0cC9yb3V0ZS5jPTM0Nj1zdGF0aWMgdm9pZCBtY3RwX3NrYl9zZXRfZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWN0cF9za19rZXkgKmtleSlcbi0tXG5uZXQvbWN0cC9yb3V0ZS5jLTM0OS1cbm5ldC9tY3RwL3JvdXRlLmM6MzUwOlx0ZmxvdyA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9NQ1RQKTtcbm5ldC9tY3RwL3JvdXRlLmMtMzUxLVx0aWYgKCFmbG93KVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTIyMj1ib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTMyMi1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTMyMzpcdG1wZXh0ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX01QVENQKTtcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTMyNC1cdGlmICghbXBleHQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xMjY9c3RhdGljIHZvaWQgc3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIHU4IHJlYXNvbilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTI3LXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTI4Olx0c3RydWN0IG1wdGNwX2V4dCAqbXBleHQgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfTVBUQ1ApO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xMjktXG4tLVxubmV0L3BzcC9wc3BfbWFpbi5jPTI5OT1pbnQgcHNwX2Rldl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGRldl9pZCwgdTggZ2VuZXJhdGlvbiwgYm9vbCBzdHJpcF9pY3YpXG4tLVxubmV0L3BzcC9wc3BfbWFpbi5jLTM2NC1cbm5ldC9wc3AvcHNwX21haW4uYzozNjU6XHRwc2UgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfUFNQKTtcbm5ldC9wc3AvcHNwX21haW4uYy0zNjYtXHRpZiAoIXBzZSlcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmM9MTIzPXN0cnVjdCBzZWNfcGF0aCAqc2VjcGF0aF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtMTI2LVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjEyNzpcdHNwID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX1NFQ19QQVRIKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy0xMjgtXHRpZiAoIXNwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDgyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6CgoqKkFuYWx5emluZyBgc2tiX2V4dF9hZGRgIGFuZCBgX19za2JfZXh0X3NldGAgRnVuY3Rpb24gVXNhZ2UqKgoKQWxyaWdodCwgc28gdGhlIHNoZWVyIG51bWJlciBvZiBjYWxscyB0byBgc2tiX2V4dF9hZGRgIGlzIGEgZ29vZCBpbmRpY2F0b3IsIGFuZCBJIHN1c3BlY3QgYF9fc2tiX2V4dF9zZXRgIGlzIGEga2V5IGNvbXBvbmVudCBoZXJlIHRvby4gVGhpcyBsaWtlbHkgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWNrZXQgZXh0ZW5zaW9ucywgYW5kIGl0JiMzOTtzIHByYWN0aWNhbGx5IGd1YXJhbnRlZWQgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsIHRvIG1hbmFnaW5nIGFuZCBtYW5pcHVsYXRpbmcgdGhvc2UgZXh0ZW5zaW9ucyBpbiB0aGUga2VybmVsLiBHaXZlbiB0aGVpciBuYW1lcywgSSYjMzk7ZCBzYXkgYHNrYl9leHRfYWRkYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBvciBhdHRhY2hpbmcgdGhlc2UgZXh0ZW5zaW9ucyB0byB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZXMsIGFuZCBgX19za2JfZXh0X3NldGAgaXMgcHJvYmFibHkgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgZGF0YS4gSXQmIzM5O3MgdGltZSB0byBkZWx2ZSBkZWVwZXIsIGFuZCBleGFtaW5lIGBfX3NrYl9leHRfc2V0YCBhcyB3ZWxsLCB0byBjb25maXJtIHRoZXNlIGFzc3VtcHRpb25zIGFuZCBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGVpciBhcHBsaWNhdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NrYl9leHRfc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xMT12b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTEzLVx0aWYgKHBzcF9leHQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTQ6XHRcdF9fc2tiX2V4dF9zZXQoc2tiLCBTS0JfRVhUX1BTUCwgcHNwX2V4dCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA5Mj1zdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5Mzp2b2lkICpfX3NrYl9leHRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5NC1cdFx0ICAgIHN0cnVjdCBza2JfZXh0ICpleHQpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTcwNjk9c3RhdGljIHZvaWQgKnNrYl9leHRfZ2V0X3B0cihzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaWQpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA3OS0gKiBSZXR1cm5zIHRoZSBuZXdseSBhbGxvY2F0ZWQgcG9pbnRlci4gVGhlIHBvaW50ZXIgY2FuIGxhdGVyIGF0dGFjaGVkIHRvIGFcbm5ldC9jb3JlL3NrYnVmZi5jOjcwODA6ICogc2tiIHZpYSBfX3NrYl9leHRfc2V0KCkuXG5uZXQvY29yZS9za2J1ZmYuYy03MDgxLSAqIE5vdGU6IGNhbGxlciBtdXN0IGhhbmRsZSB0aGUgc2tiX2V4dCBhcyBhbiBvcGFxdWUgZGF0YS5cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MDk1PXN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTM3LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6NzEzODogKiBfX3NrYl9leHRfc2V0IC0gYXR0YWNoIHRoZSBzcGVjaWZpZWQgZXh0ZW5zaW9uIHN0b3JhZ2UgdG8gdGhpcyBza2Jcbm5ldC9jb3JlL3NrYnVmZi5jLTcxMzktICogQHNrYjogYnVmZmVyXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzE0Ni0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjcxNDc6dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXG5uZXQvY29yZS9za2J1ZmYuYy03MTQ4LVx0XHQgICAgc3RydWN0IHNrYl9leHQgKmV4dClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTU1LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjcxNTY6RVhQT1JUX1NZTUJPTF9OU19HUEwoX19za2JfZXh0X3NldCwgXCYjMzQ7TkVUREVWX0lOVEVSTkFMXCYjMzQ7KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNTctXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTMwOT1zdGF0aWMgYm9vbCBfX21wdGNwX2FkZF9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzMTQtXHRcdHJldHVybiBmYWxzZTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzMTU6XHRfX3NrYl9leHRfc2V0KHNrYiwgU0tCX0VYVF9NUFRDUCwgbXBleHQpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTMxNi1cdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTMzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUaGlzIGBza2JfZXh0YCBNZW1vcnkgUGF0Y2gqKgoKT2theSwgdGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGFsbG9jYXRpb24gcmVsYXRlZCB0byBgc2tiX2V4dGAuIFRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUuIE1lbW9yeSBhbGxvY2F0aW9uIGNoYW5nZXMgYXJlIGFsd2F5cyBwcmltZSBjYW5kaWRhdGVzIGZvciBmaW5kaW5nIG9mZi1ieS1vbmUgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGRlZGljYXRpbmcgc29tZSB0aW1lIHRvLgoKSSYjMzk7ZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBza2JfZXh0X2FkZGAsIGBfX3NrYl9leHRfc2V0YCwgYW5kIGVzcGVjaWFsbHkgYF9fc2tiX2V4dF9hbGxvY2AuIFRoZSBhbGxvY2F0b3IgaXMgYWx3YXlzIHRoZSBoZWFydCBvZiB0aGVzZSBraW5kcyBvZiBpc3N1ZXMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYF9fc2tiX2V4dF9hbGxvY2AgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc2tiX2V4dF9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwODY9c3RydWN0IHNrYl9leHQge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5MS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5MjpzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5My12b2lkICpfX3NrYl9leHRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MDY5PXN0YXRpYyB2b2lkICpza2JfZXh0X2dldF9wdHIoc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGlkKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwNzQtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzo3MDc1OiAqIF9fc2tiX2V4dF9hbGxvYyAtIGFsbG9jYXRlIGEgbmV3IHNrYiBleHRlbnNpb25zIHN0b3JhZ2Vcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNzYtICpcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDgyLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzA4MzpzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKVxubmV0L2NvcmUvc2tidWZmLmMtNzA4NC17XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NzA5NT1zdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzE0MC0gKiBAaWQ6IGV4dGVuc2lvbiBpZFxubmV0L2NvcmUvc2tidWZmLmM6NzE0MTogKiBAZXh0OiBleHRlbnNpb24gc3RvcmFnZSBwcmV2aW91c2x5IGFsbG9jYXRlZCB2aWEgX19za2JfZXh0X2FsbG9jKClcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNDItICpcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MTcyPXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTg0LVx0fSBlbHNlIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjcxODU6XHRcdG5ldyA9IF9fc2tiX2V4dF9hbGxvYyhHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcxODYtXHRcdGlmICghbmV3KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEzMDk9c3RhdGljIGJvb2wgX19tcHRjcF9hZGRfZXh0KHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcClcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzMTAte1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTMxMTpcdHN0cnVjdCBza2JfZXh0ICptcGV4dCA9IF9fc2tiX2V4dF9hbGxvYyhnZnApO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTMxMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipEZWNvbnN0cnVjdGluZyBTS0IgRXh0ZW5zaW9uIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGVzZSBgc2tiYCBleHRlbnNpb24gZnVuY3Rpb25zLiBUaGUgY29yZSBvbmVzIEkmIzM5O20gc2VlaW5nIGFzIGltcG9ydGFudCBhcmUgYHNrYl9leHRfYWRkYCwgYF9fc2tiX2V4dF9zZXRgLCBhbmQgYF9fc2tiX2V4dF9hbGxvY2AuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZXh0ZW5zaW9ucyBpbiB0aGUgU0tCLiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgYW5kIGluY2x1ZGUgYHNrYl9leHRfZGVsYCBpbiBteSBhbmFseXNpcy4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBleHRlbnNpb25zIGFyZSByZW1vdmVkIGFzIHdlbGwgYXMgYWRkZWQsIHNldCwgYW5kIGFsbG9jYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX2V4dF9kZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDk1PXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTY6dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTctdm9pZCBfX3NrYl9leHRfcHV0KHN0cnVjdCBza2JfZXh0ICpleHQpO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTEyOT1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2V4dF9leGlzdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTMzLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTM0OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzUte1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTM2LVx0aWYgKHNrYl9leHRfZXhpc3Qoc2tiLCBpZCkpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMzc6XHRcdF9fc2tiX2V4dF9kZWwoc2tiLCBpZCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzgtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTE2Nj1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7fVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTY3OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdW51c2VkKSB7fVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTY4LXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnMpIHt9XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTExOTc9c2VjcGF0aF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaC0xMTk5LSNpZmRlZiBDT05GSUdfWEZSTVxuaW5jbHVkZS9uZXQveGZybS5oOjEyMDA6XHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfU0VDX1BBVEgpO1xuaW5jbHVkZS9uZXQveGZybS5oLTEyMDEtI2VuZGlmXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xNTU9c3RhdGljIHZvaWQgbmZfYnJpZGdlX2luZm9fZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNTYte1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNTc6XHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTU4LX1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MjEwPXN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X21jdHAoc3RydWN0IG1jdHBfZmxvdyAqZmxvdylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MjE2LVxubmV0L2NvcmUvc2tidWZmLmM6NzIxNzp2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxubmV0L2NvcmUvc2tidWZmLmMtNzIxOC17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzIzNC19XG5uZXQvY29yZS9za2J1ZmYuYzo3MjM1OkVYUE9SVF9TWU1CT0woX19za2JfZXh0X2RlbCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MjM2LVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTExMz1zdGF0aWMgZW51bSBtYXBwaW5nX3N0YXR1cyBnZXRfbWFwcGluZ19zdGF0dXMoc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTExNzQtXHRcdFx0XHQgKi9cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTE3NTpcdFx0XHRcdHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9NUFRDUCk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTExNzYtXHRcdFx0XHRyZXR1cm4gTUFQUElOR19PSztcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyMDktXHRcdCAgICBzdWJmbG93LVx1MDAzZW1hcF9jc3VtX3JlcWQgPT0gbXBleHQtXHUwMDNlY3N1bV9yZXFkKSB7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEyMTA6XHRcdFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX01QVENQKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTIxMS1cdFx0XHRnb3RvIHZhbGlkYXRlX2NzdW07XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xMjUzLVxubmV0L21wdGNwL3N1YmZsb3cuYzoxMjU0Olx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX01QVENQKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTI1NS1cbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTE4MjA9aW50IHRjZl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMTg2Ny1cdFx0XHQvKiBDb25zdW1lLCBzbyBjbG9uZWQvcmVkaXJlY3Qgc2ticyB3b24mIzM5O3QgaW5oZXJpdCBleHQgKi9cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MTg2ODpcdFx0XHRza2JfZXh0X2RlbChza2IsIFRDX1NLQl9FWFQpO1xubmV0L3NjaGVkL2Nsc19hcGkuYy0xODY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlIGNoYW5nZToKCioqQW5hbHl6aW5nIHRoZSBTS0IgRXh0ZW5zaW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJiMzOTt0ICpkaXJlY3RseSogdG91Y2hpbmcgYF9fc2tiX2V4dF9kZWxgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gaXMgZm9jdXNlZCBvbiBgc2tiX2V4dF9tYXliZV9jb3dgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIHdpdGhpbiBgc2tiX2V4dF9hZGRgLiBIbW0sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29ubmVjdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29kZSBhcm91bmQgYF9fc2tiX2V4dF9kZWxgLiBJIGtub3cgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLCBzbyBsZXQgbWUganVtcCBvdmVyIHRoZXJlIGFuZCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGl0cyBleGFjdCBiZWhhdmlvciB3aXRoaW4gdGhlIFNLQiBsaWZlY3ljbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGBza2JfZXh0X21heWJlX2Nvd2AgY2hhbmdlIGFmZmVjdHMgZXh0ZW5zaW9uIGRlYWxsb2NhdGlvbiwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIENvcHktT24tV3JpdGUgc2NlbmFyaW9zLiBHb3QgaXQuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoaXMgc29ydGVkIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc2tiX2V4dF9kZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDk1PXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTY6dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTctdm9pZCBfX3NrYl9leHRfcHV0KHN0cnVjdCBza2JfZXh0ICpleHQpO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTEzND1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzNi1cdGlmIChza2JfZXh0X2V4aXN0KHNrYiwgaWQpKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTM3Olx0XHRfX3NrYl9leHRfZGVsKHNrYiwgaWQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTM4LX1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MjEwPXN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X21jdHAoc3RydWN0IG1jdHBfZmxvdyAqZmxvdylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MjE2LVxubmV0L2NvcmUvc2tidWZmLmM6NzIxNzp2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxubmV0L2NvcmUvc2tidWZmLmMtNzIxOC17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzIzNC19XG5uZXQvY29yZS9za2J1ZmYuYzo3MjM1OkVYUE9SVF9TWU1CT0woX19za2JfZXh0X2RlbCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MjM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYxMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIHNrYl9leHRfZGVsIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fc2tiX2V4dF9kZWxgLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IHdvcmtzLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGZ1bmN0aW9uIHRvIHNlZSB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcy4gSG93IGRvZXMgaXQgbWFuYWdlIHRoZSByZWZlcmVuY2UgY291bnRpbmcgb2YgdGhlIHNoYXJlZCBleHRlbnNpb24gZGF0YT8gRG9lcyBpdCBoYW5kbGUgYW55IHNwZWNpYWwgY2FzZXMgaW52b2x2aW5nIGZyYWdtZW50ZWQgc2ticyBvciBvdGhlciBza2Igc3BlY2lmaWMgYmVoYXZpb3JzPyBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaWRlIG9mIHRoaW5ncywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgZXh0ZW5zaW9uIGRhdGEgaXMgZnJlZWQsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgU0tCIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBkZXBlbmQgb24sIG9yIG1vZGlmeSwgdGhvc2UgZXh0ZXJuYWwgZGF0YSBjaHVua3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcyMTc6XHR2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuNzIxODpcdHtcbjcyMTk6XHRcdHN0cnVjdCBza2JfZXh0ICpleHQgPSBza2ItXHUwMDNlZXh0ZW5zaW9ucztcbjcyMjA6XHRcbjcyMjE6XHRcdHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyBcdTAwMjY9IH4oMSBcdTAwM2NcdTAwM2MgaWQpO1xuNzIyMjpcdFx0aWYgKHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyA9PSAwKSB7XG43MjIzOlx0XHRcdHNrYi1cdTAwM2VleHRlbnNpb25zID0gTlVMTDtcbjcyMjQ6XHRcdFx0X19za2JfZXh0X3B1dChleHQpO1xuNzIyNTpcdCNpZmRlZiBDT05GSUdfWEZSTVxuNzIyNjpcdFx0fSBlbHNlIGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIIFx1MDAyNlx1MDAyNlxuNzIyNzpcdFx0XHQgICByZWZjb3VudF9yZWFkKFx1MDAyNmV4dC1cdTAwM2VyZWZjbnQpID09IDEpIHtcbjcyMjg6XHRcdFx0c3RydWN0IHNlY19wYXRoICpzcCA9IHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpO1xuNzIyOTpcdFxuNzIzMDpcdFx0XHRza2JfZXh0X3B1dF9zcChzcCk7XG43MjMxOlx0XHRcdHNwLVx1MDAzZWxlbiA9IDA7XG43MjMyOlx0I2VuZGlmXG43MjMzOlx0XHR9XG43MjM0Olx0fVxuNzIzNTpcdEVYUE9SVF9TWU1CT0woX19za2JfZXh0X2RlbCk7XG43MjM2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTczCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIFNLQiBFeHRlbnNpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBTS0IgZXh0ZW5zaW9ucyBjb2RlLCBhbmQgaXQgc2VlbXMgbGlrZSBgX19za2JfZXh0X2RlbGAgaXNuJiMzOTt0IGEgbWFqb3IgcGxheWVyIGhlcmUuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gYHNrYl9leHRfYWRkYCwgYF9fc2tiX2V4dF9zZXRgLCBhbmQgYF9fc2tiX2V4dF9hbGxvY2Ag4oCTIHRob3NlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIGFjdHVhbGx5IG1hbmFnaW5nIHRoZXNlIGV4dGVuc2lvbnMuIEkgd2FzIGluaXRpYWxseSBjdXJpb3VzIGFib3V0IGBza2JfZXh0X21heWJlX2Nvd2AsIGJ1dCBzaW5jZSBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYCwgYW5kIG5vdCBpbmxpbmVkLCBpdCB3b24mIzM5O3QgYmUgYXMgaW1wb3J0YW50IGZvciB0aGUgbWFpbiBmbG93LgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfU0tCX0VYVEVOU0lPTlNgIGlzIGNydWNpYWwsIHRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGV4dGVuc2lvbnMgYXJlIHVzZWQsIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBmZWF0dXJlcyB0cmlnZ2VyIHRoZW0uIFNvLCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4sIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBgQlJJREdFX05FVEZJTFRFUmAsIGBYRlJNYCwgYE5FVF9UQ19TS0JfRVhUYCwgYE1QVENQYCwgYE1DVFBfRkxPV1NgLCBgSU5FVF9QU1BgLCBhbmQgYENBTmAuIEkmIzM5O2xsIHdhbnQgdG8gZGlnIGludG8gYEtjb25maWdgIGZvciBgQ09ORklHX1NLQl9FWFRFTlNJT05TYCBhbmQgY29uZmlybSB3aGF0IGRlcGVuZGVuY2llcyBhcmUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTS0JfRVhURU5TSU9OUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz02Mz1jb25maWcgU0tCX0RFQ1JZUFRFRFxuLS1cbm5ldC9LY29uZmlnLTY1LVxubmV0L0tjb25maWc6NjY6Y29uZmlnIFNLQl9FWFRFTlNJT05TXG5uZXQvS2NvbmZpZy02Ny1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3OTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSGlkZGVuIEJvb2wgUmVmbGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHByb2Nlc3NpbmcgdGhpcyAmIzM0O2hpZGRlbiBib29sLiYjMzQ7IFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIGV4cGxpY2l0bHkgc2V0IGJ5IGEgdXNlciBkaXJlY3RseSwgb3Igc29tZXRoaW5nIHN1cmZhY2VkIGluIGFuIG9idmlvdXMgVUkgZWxlbWVudC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAmIzM0O2hpZGRlbiYjMzQ7IGlzIGtleS4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBhIGNvbmZpZ3VyYXRpb24gZmxhZywgdXNlZCB1bmRlciB0aGUgaG9vZCwgYSBzZXR0aW5nIHRoYXQmIzM5O3MgZGVyaXZlZCBmcm9tLCBvciBpbmRpcmVjdGx5IGluZmx1ZW5jZWQgYnksIHRoZSBzZXR0aW5ncyBvZiAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zLgoKTXkgaW1tZWRpYXRlIGZvbGxvdyB1cCBxdWVzdGlvbnMgd291bGQgYmUsIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBpbmZsdWVuY2luZyB0aGlzIGhpZGRlbiBib29sPyBXaGF0IGxvZ2ljIGlzIGRldGVybWluaW5nIGl0cyBzdGF0ZT8gSXMgaXQgc2V0IGF0IGNvbXBpbGUgdGltZT8gUnVudGltZT8gSXMgaXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU/IEEgZmVhdHVyZSBmbGFnIG1hbmFnZWQgYnkgYSB0aGlyZCBwYXJ0eSBzeXN0ZW0/IFRoZSBpbnRlcnBsYXkgaGVyZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlbmRlZCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGRlcGVuZGVuY2llcy4gV2hhdCB1cHN0cmVhbSBzZXR0aW5ncyBhcmUgdGhlIHRyaWdnZXJzIGZvciB0aGlzICYjMzQ7aGlkZGVuIGJvb2wmIzM0OyB0byBiZSBzZXQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBTS0JfRVhURU5TSU9OUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbi0tXG5uZXQvS2NvbmZpZy0yMzYtXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0Vcbm5ldC9LY29uZmlnOjIzNzpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L0tjb25maWctMjM4LVx0aGVscFxuLS1cbm5ldC9jYW4vS2NvbmZpZz02PW1lbnVjb25maWcgQ0FOXG5uZXQvY2FuL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0NBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbm5ldC9jYW4vS2NvbmZpZzo4Olx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG5uZXQvY2FuL0tjb25maWctOS1cdGhlbHBcbi0tXG5uZXQvbWN0cC9LY29uZmlnPTIxPWNvbmZpZyBNQ1RQX0ZMT1dTXG4tLVxubmV0L21jdHAvS2NvbmZpZy0yMy1cdGRlcGVuZHMgb24gTUNUUFxubmV0L21jdHAvS2NvbmZpZzoyNDpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTI9Y29uZmlnIE1QVENQXG4tLVxubmV0L21wdGNwL0tjb25maWctNC1cdGRlcGVuZHMgb24gSU5FVFxubmV0L21wdGNwL0tjb25maWc6NTpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L21wdGNwL0tjb25maWctNi1cdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuLS1cbm5ldC9wc3AvS2NvbmZpZz01PWNvbmZpZyBJTkVUX1BTUFxuLS1cbm5ldC9wc3AvS2NvbmZpZy04LVx0c2VsZWN0IFNLQl9ERUNSWVBURURcbm5ldC9wc3AvS2NvbmZpZzo5Olx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG5uZXQvcHNwL0tjb25maWctMTAtXHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG4tLVxubmV0L3NjaGVkL0tjb25maWc9OTU0PWNvbmZpZyBORVRfVENfU0tCX0VYVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTk1Ni1cdGRlcGVuZHMgb24gTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnOjk1NzpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L3NjaGVkL0tjb25maWctOTU4LVxuLS1cbm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctOC1cdHNlbGVjdCBHUk9fQ0VMTFNcbm5ldC94ZnJtL0tjb25maWc6OTpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L3hmcm0vS2NvbmZpZy0xMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gQmFzZWQgb24gdGhlIHJlcXVpcmVtZW50cywgSSBuZWVkIHRvIGVuYWJsZSBhIHN1aXRlIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uczogYEJSSURHRV9ORVRGSUxURVJgLCBgQ0FOYCwgYE1DVFBfRkxPV1NgLCBgTVBUQ1BgLCBgSU5FVF9QU1BgLCBgTkVUX1RDX1NLQl9FWFRgLCBhbmQgYFhGUk1gLiBCZWZvcmUgSSBzaW1wbHkgZmxpcCB0aG9zZSBzd2l0Y2hlcywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4gTGV0JiMzOTtzIHNlZS4uLgoKYEJSSURHRV9ORVRGSUxURVJgIGhhcyB0aGUgdXN1YWwgZGVwZW5kZW5jaWVzLCBgQlJJREdFYCBhbmQgYE5FVEZJTFRFUmAsIHdoaWNoIGFyZSBvYnZpb3VzLiBgQ0FOYCBpcyBhIHN1YnN5c3RlbSwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIGBNQ1RQX0ZMT1dTYCBuZWVkcyBgTUNUUGAuIGBNUFRDUGAgYW5kIGBJTkVUX1BTUGAgYm90aCByZXF1aXJlIGBJTkVUYC4gYE5FVF9UQ19TS0JfRVhUYCByZWxpZXMgb24gYE5FVF9DTFNfQUNUYCwgYW5kIGBYRlJNYCBpcyBhIGNvcmUgY29uZmlndXJhdGlvbiBpdGVtLiBOb3RoaW5nIHRvbyB1bnVzdWFsIGhlcmUuCgpPa2F5LCB3aXRoIGFsbCB0aGF0IGluIG1pbmQsIG15IGZpbmFsIGxpc3Qgb2YgY29uZmlncyB0byBlbmFibGUgaXM6CgoqICAgYEJSSURHRV9ORVRGSUxURVJgCiogICBgQ0FOYAoqICAgYE1DVFBfRkxPV1NgCiogICBgTVBUQ1BgCiogICBgSU5FVF9QU1BgCiogICBgTkVUX1RDX1NLQl9FWFRgCiogICBgWEZSTWAKKiAgIGBCUklER0VgCiogICBgTkVURklMVEVSYAoqICAgYE1DVFBgCiogICBgSU5FVGAKKiAgIGBORVRfQ0xTX0FDVGAKCkJlZm9yZSBJIG1hcmsgdGhpcyBhcyBjb21wbGV0ZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgYElORVRfUFNQYCYjMzk7cyBkZWZpbml0aW9uIGluIGBuZXQvcHNwL0tjb25maWdgIHRvIGJlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIHRoZXJlIHRoYXQgbWlnaHQgYWZmZWN0IG15IGRlY2lzaW9uLiBBbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcHNwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQU1AgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgSU5FVF9QU1BcbiAgIDY6XHRcdGJvb2wgXCYjMzQ7UFNQIFNlY3VyaXR5IFByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IFNLQl9ERUNSWVBURURcbiAgIDk6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAxMDpcdFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgUFNQIFNlY3VyaXR5IFByb3RvY29sIChQU1ApLlxuICAxMzpcdFx0Rm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOlxuICAxNDpcdFx0ICBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZ29vZ2xlL3BzcC9tYWluL2RvYy9QU1BfQXJjaF9TcGVjLnBkZlxuICAxNTpcdFxuICAxNjpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqVmVyaWZ5aW5nIHRoZSBNQ1RQIEZsb3cgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGNvbmZpcm0gdGhlIGBNQ1RQX0ZMT1dTYCBjb25maWd1cmF0aW9uIHNldHRpbmcgd2l0aGluIHRoZSBgbmV0L21jdHAvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIHNldHRpbmcgaXMgcHJlc2VudCBhbmQgY29uZmlndXJlZCBjb3JyZWN0bHkuIFdoYXQgYXJlIHRoZSBleHBlY3RlZCB2YWx1ZXMgb3IgZGVwZW5kZW5jaWVzIGZvciB0aGlzPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBhZ2FpbnN0IHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIGV4aXN0aW5nIGd1aWRlbGluZXMgdG8gbWFrZSBjZXJ0YWluIGV2ZXJ5dGhpbmcgaXMgY29tcGxpYW50IGFuZCB0aGF0IG5vIHBvdGVudGlhbCByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRpZXMgaW50byB0aGUgd2lkZXIgTUNUUCBpbXBsZW1lbnRhdGlvbiBpcyBhbHNvIHZpdGFsLiBTbywgSSB3aWxsIHByb2NlZWQgYnkgb3BlbmluZyB0aGUgS2NvbmZpZyBmaWxlIGFuZCBxdWlja2x5IHJ1biBhIHNlYXJjaCB0byBjb25maXJtIHRoZSBzZXR0aW5nIGFuZCBpdHMgY29ycmVzcG9uZGluZyBzZXR0aW5ncy4gSXQmIzM5O3MgYSBxdWljayBhdWRpdCwgYnV0IGNyaXRpY2FsIGZvciB0aGUgaW50ZWdyaXR5IG9mIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21jdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdG1lbnVjb25maWcgTUNUUFxuICAgMzpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7TUNUUCBjb3JlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgTWFuYWdlbWVudCBDb21wb25lbnQgVHJhbnNwb3J0IFByb3RvY29sIChNQ1RQKSBpcyBhbiBpbi1zeXN0ZW1cbiAgIDc6XHRcdCAgcHJvdG9jb2wgZm9yIGNvbW11bmljYXRpbmcgYmV0d2VlbiBtYW5hZ2VtZW50IGNvbnRyb2xsZXJzIGFuZFxuICAgODpcdFx0ICB0aGVpciBtYW5hZ2VkIGRldmljZXMgKHBlcmlwaGVyYWxzLCBob3N0IHByb2Nlc3NvcnMsIGV0Yy4pLiBUaGVcbiAgIDk6XHRcdCAgcHJvdG9jb2wgaXMgZGVmaW5lZCBieSBETVRGIHNwZWNpZmljYXRpb24gRFNQMDIzNi5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBjb3JlIE1DVFAgc3VwcG9ydC4gRm9yIGNvbW11bmljYXRpbmcgd2l0aCBvdGhlclxuICAxMjpcdFx0ICBkZXZpY2VzLCB5b3UmIzM5O2xsIHdhbnQgdG8gZW5hYmxlIGEgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlXG4gIDEzOlx0XHQgIGNoYW5uZWwuXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIE1DVFBfVEVTVFxuICAxNjpcdCAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIGNvcmUgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAxNzpcdCAgICAgICAgc2VsZWN0IE1DVFBfRkxPV1NcbiAgMTg6XHQgICAgICAgIGRlcGVuZHMgb24gTUNUUD15IFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDE5Olx0ICAgICAgICBkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBNQ1RQX0ZMT1dTXG4gIDIyOlx0XHRib29sXG4gIDIzOlx0XHRkZXBlbmRzIG9uIE1DVFBcbiAgMjQ6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byBgTUNUUF9GTE9XU2AgYW5kIGl0cyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGBNQ1RQX0ZMT1dTYCB2YXJpYWJsZS4gSSByZW1lbWJlciBpdCYjMzk7cyBhIGhpZGRlbiBib29sZWFuLCBtZWFuaW5nIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkIGluIHRoZSBub3JtYWwgY29uZmlndXJhdGlvbiBtZW51cy4gVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGF0IGNvbnRyb2xzIGl0PyBBaCwgcmlnaHQsIEkgc2VlIHRoYXQgYE1DVFBfVEVTVGAgaXMgdGhlIGtleS4gVGhhdCBpbXBsaWVzIGl0JiMzOTtzIGludGVuZGVkIGZvciBpbnRlcm5hbCB0ZXN0aW5nLCBwcm9iYWJseSB0byBlbmFibGUgc29tZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIE1DVFAgZmxvdyBtYW5hZ2VtZW50LiBJcyB0aGF0IHRoZSBvbmx5IHRoaW5nIHRoYXQgdG9nZ2xlcyBpdCwgb3IgYXJlIHRoZXJlIG90aGVyIGRlcGVuZGVuY2llcyBsdXJraW5nPyBJdCYjMzk7cyBjcnVjaWFsIHRvIGtub3cgdGhpcywgb3RoZXJ3aXNlIGEgbWlzY29uZmlndXJhdGlvbiBzb21ld2hlcmUgZWxzZSBjb3VsZCBsZWFkIHRvIHByb2JsZW1zLiBJIG5lZWQgdG8gYmUgc3VyZS4gQW55IG90aGVyIGRlcGVuZGVuY2llcz8gTGV0IG1lIGRpZyBhIGxpdHRsZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBNQ1RQX0ZMT1dTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz0yOT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTJDXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTM0LVx0ZGVwZW5kcyBvbiBJMkNfU0xBVkVcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNTpcdHNlbGVjdCBNQ1RQX0ZMT1dTXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzYtXHRoZWxwXG4tLVxubmV0L21jdHAvS2NvbmZpZz0xNT1jb25maWcgTUNUUF9URVNUXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIGNvcmUgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubmV0L21jdHAvS2NvbmZpZzoxNzogICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXG5uZXQvbWN0cC9LY29uZmlnLTE4LSAgICAgICAgZGVwZW5kcyBvbiBNQ1RQPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBNQ1RQL0kyQyBUcmFuc3BvcnQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gaWYgSSBlbmFibGUgYE1DVFBfVFJBTlNQT1JUX0kyQ2AsIHRoYXQgaW5oZXJlbnRseSBwdWxscyBpbiB0aGUgYE1DVFBfRkxPV1NgIGNvbmZpZ3VyYXRpb24sIGFzIGV4cGVjdGVkLiBHb29kLCB0aGF0JiMzOTtzIGxvZ2ljYWwuIEl0JiMzOTtzIGEgc3RhbmRhcmQgZGVwZW5kZW5jeS4gTm93LCBJJiMzOTttIHRoaW5raW5nLCBva2F5LCBsZXQmIzM5O3Mgc2F5IEkgd2FudCB0byB1c2UgYE1DVFBfVFJBTlNQT1JUX0kyQ2Ag4oCTIEkmIzM5O2xsIGFsc28gbGlrZWx5IG5lZWQgYEkyQ19TTEFWRWAgZW5hYmxlZCwgc2luY2UgdGhlIEkyQyB0cmFuc3BvcnQgbmVlZHMgdG8gYmUgc2V0IHVwIGFzIGEgc2xhdmUgb24gdGhlIGJ1cy4gVGhhdCBjb21iaW5hdGlvbiBtYWtlcyBzZW5zZSBmb3IgYSB0eXBpY2FsIGltcGxlbWVudGF0aW9uLiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgaW4gdGhlIG5ldHdvcmsgc3RhY2sgaW50ZXJhY3Rpb24sIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiBgTkVUX1RDX1NLQl9FWFRgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBvZiB0aG9zZSBzZXR0aW5ncyBtaWdodCBhZmZlY3QgaG93IEkgaGFuZGxlIHRoZSBNQ1RQIGZyYW1lcyBvdmVyIEkyQywgZXNwZWNpYWxseSB3aXRoIGhvdyB0aGUgU0tCIGlzIGJ1aWx0LiBHb3R0YSBtYWtlIHN1cmUgdGhlIEkyQyB0cmFuc3BvcnQgcGxheXMgbmljZWx5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTU0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTQ6XHRjb25maWcgTkVUX1RDX1NLQl9FWFRcbiA5NTU6XHRcdGJvb2wgXCYjMzQ7VEMgcmVjaXJjdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gOTU2Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gOTU3Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiA5NTg6XHRcbiA5NTk6XHRcdGhlbHBcbiA5NjA6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyB0YyBjaGFpbiBtaXNzZXMgdG8gY29udGludWUgaW4gT3ZTIGRhdGFwYXRoIGluXG4gOTYxOlx0XHQgIHRoZSBjb3JyZWN0IHJlY2lyY19pZCwgYW5kIGhhcmR3YXJlIGNoYWluIG1pc3NlcyB0byBjb250aW51ZSBpblxuIDk2MjpcdFx0ICB0aGUgY29ycmVjdCBjaGFpbiBpbiB0YyBzb2Z0d2FyZSBkYXRhcGF0aC5cbiA5NjM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4OTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgTkVUX1RDX1NLQl9FWFRgIGlzIGRlZmluaXRlbHkgZW5hYmxlZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIE5vdywgZ2l2ZW4gdGhhdCwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBzY3J1dGluaXplIGBCUklER0VfTkVURklMVEVSYC4gVGhlIGltcGxpY2F0aW9ucyBvZiBvbmUgd2l0aG91dCB0aGUgb3RoZXIgYXJlIGltcG9ydGFudCwgYW5kIHRoZXkmIzM5O2xsIGhlYXZpbHkgaW5mbHVlbmNlIGhvdyB0aGlzIHN0YWNrIGlzIGdvaW5nIHRvIGJlaGF2ZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgcmVwcmVzZW50cyBhIHN0YW5kYWxvbmUgY29uZmlndXJhdGlvbiwgb3IgaWYgb3RoZXIsIHJlbGF0ZWQgb3B0aW9ucyBhcmUgZW5hYmxlZC4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjZW50cmFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHRyYWZmaWMgY29udHJvbCBjYXBhYmlsaXRpZXMgYW5kIHRoZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSBpbiB0aGlzIGVudmlyb25tZW50LCBhbmQgbXkgYW5hbHlzaXMgcmVhbGx5IGRlcGVuZHMgb24gdW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMxOlx0Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbiAyMzI6XHRcdHRyaXN0YXRlIFwmIzM0O0JyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXCYjMzQ7XG4gMjMzOlx0XHRkZXBlbmRzIG9uIEJSSURHRVxuIDIzNDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVIgXHUwMDI2XHUwMDI2IElORVRcbiAyMzU6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMjM2Olx0XHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAyMzc6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuIDIzODpcdFx0aGVscFxuIDIzOTpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGxldCBhcnB0YWJsZXMgcmVzcC4gaXB0YWJsZXMgc2VlIGJyaWRnZWRcbiAyNDA6XHRcdCAgQVJQIHJlc3AuIElQIHRyYWZmaWMuIElmIHlvdSB3YW50IGEgYnJpZGdpbmcgZmlyZXdhbGwsIHlvdSBwcm9iYWJseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI1OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY2llcyBhbmQgYSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEJSSURHRV9ORVRGSUxURVJgIHJpZ2h0IG5vdy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0JiMzOTtzIHJlbGlhbnQgb24gYSBmZXcgb3RoZXIgY29uZmlndXJhdGlvbnMgdG8gZnVuY3Rpb24gcHJvcGVybHk6IHNwZWNpZmljYWxseSwgYEJSSURHRWAsIGBORVRGSUxURVJgLCBgSU5FVGAsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYC4gVGhhdCBtYWtlcyBzZW5zZTsgYnJpZGdpbmcgb2Z0ZW4gaW52b2x2ZXMgZmlsdGVyaW5nIGFuZCwgb2YgY291cnNlLCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBOb3csIGp1c3QgYXMgYSBxdWljayBjaGVjaywgSSB3YW50IHRvIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgQ0FOYC4gTm8gcGFydGljdWxhciByZWFzb24sIGp1c3QgbWFraW5nIHN1cmUgSSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nIG9idmlvdXMgaW4gdGhlIGJyb2FkZXIgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgNjpcdG1lbnVjb25maWcgQ0FOXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKENBTikgaXMgYSBzbG93ICh1cCB0byAxTWJpdC9zKSBzZXJpYWxcbiAgMTE6XHRcdCAgY29tbXVuaWNhdGlvbnMgcHJvdG9jb2wuIERldmVsb3BtZW50IG9mIHRoZSBDQU4gYnVzIHN0YXJ0ZWQgaW5cbiAgMTI6XHRcdCAgMTk4MyBhdCBSb2JlcnQgQm9zY2ggR21iSCwgYW5kIHRoZSBwcm90b2NvbCB3YXMgb2ZmaWNpYWxseVxuICAxMzpcdFx0ICByZWxlYXNlZCBpbiAxOTg2LiBUaGUgQ0FOIGJ1cyB3YXMgb3JpZ2luYWxseSBtYWlubHkgZm9yIGF1dG9tb3RpdmUsXG4gIDE0Olx0XHQgIGJ1dCBpcyBub3cgd2lkZWx5IHVzZWQgaW4gbWFyaW5lIChOTUVBMjAwMCksIGluZHVzdHJpYWwsIGFuZCBtZWRpY2FsXG4gIDE1Olx0XHQgIGFwcGxpY2F0aW9ucy4gTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQ0FOIG5ldHdvcmsgcHJvdG9jb2wgZmFtaWx5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjI4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE5ldHdvcmsgVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJIHNlZSBgQ0FOYCBpbiB0aGUgbWl4IOKAkyB0aGF0JiMzOTtzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBOb3csIGdpdmVuIHRoYXQgb2JzZXJ2YXRpb24sIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBDQU5gIGJlaW5nIHZpc2libGUgaW4gdGhpcyBjb250ZXh0LiBJdCBzdWdnZXN0cyBhIHBhcnRpY3VsYXIgbmV0d29yayBjb25maWd1cmF0aW9uIG9yIHBvdGVudGlhbCBhcmVhIG9mIGludmVzdGlnYXRpb24uIEl0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgbGF5ZXIgb3IgdGhlIGRhdGFsaW5rIGxheWVyLgoKTGV0JiMzOTtzIHNoaWZ0IGZvY3VzIGFuZCBzZWUgaG93IGBNUFRDUGAgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBDb25zaWRlcmluZyBgQ0FOYCBpcyB2aXNpYmxlLCBhcmUgd2UgbGlrZWx5IHRvIHNlZSBgTVBUQ1BgIHJ1bm5pbmcgYXMgd2VsbD8gQXJlIHRoZXNlIHRlY2hub2xvZ2llcyBpbnRlcmFjdGluZz8gQXJlIHdlIGxvb2tpbmcgYXQgYSBzeXN0ZW0gd2l0aCBkdWFsLXN0YWNrIGNhcGFiaWxpdGllcz8gVGhlIGBNUFRDUGAgY2hlY2sgd2lsbCBnaXZlIG1lIG1vcmUgY29udGV4dC4gVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRcbiAgIDI6XHRjb25maWcgTVBUQ1BcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBjb25uZWN0aW9ucyBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb3ZlciBtdWx0aXBsZVxuICAxMDpcdFx0ICBzdWJmbG93cyBpbiBvcmRlciB0byB1dGlsaXplIG11bHRpcGxlIG5ldHdvcmsgcGF0aHMuIEVhY2ggc3ViZmxvd1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk5NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgTmV0d29yayBNdWx0aXBhdGhpbmcqKgoKT2theSwgc28gSSBzZWUgYE1QVENQYCBpcyBzaG93aW5nIHVwIOKAkyB0aGF0JiMzOTtzIGdvb2QsIGEgZGVmaW5pdGUgaW5kaWNhdGlvbiB0aGF0IHRoZSBtdWx0aXBhdGggVENQIGZ1bmN0aW9uYWxpdHkgaXMgYWN0aXZlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwbHkgaW50byB0aGUgc3BlY2lmaWMgTVBUQ1AgaW1wbGVtZW50YXRpb24sIGlzIHRvIGNoZWNrIHRoZSBgWEZSTWAgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IHRyYW5zZm9ybXMgYW5kIHBvbGljaWVzIGFyZSBjb3JyZWN0bHkgY29uZmlndXJlZCBhbmQgYmVpbmcgYXBwbGllZC4gYFhGUk1gIGlzIGNyaXRpY2FsIGZvciBzZWN1cmUgbXVsdGlwYXRoaW5nLCBhbmQgYW55IGlzc3VlcyB0aGVyZSBjYW4gY3JpcHBsZSBvciwgYXQgYmVzdCwgc2VyaW91c2x5IGRlZ3JhZGUgcGVyZm9ybWFuY2UuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgSSBsb29rIGF0IGFueXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFhGUk0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgWEZSTVxuICAgNjpcdFx0Ym9vbFxuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gICA5Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgMTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyOTIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBYRlJNIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgYFhGUk1gIGlzIHRoaXMgdW5kZXJseWluZyBib29sZWFuLCBhIHNvcnQgb2YgbWFzdGVyIHN3aXRjaCwgYnV0IGl0JiMzOTtzICpoaWRkZW4qLiBJIHNlZSB0aGF0IGl0JiMzOTtzIHRvZ2dsZWQgb24gb3Igb2ZmIGJ5IGEgYnVuY2ggb2Ygb3RoZXIgb3B0aW9ucywgdGhpbmdzIGxpa2UgYFhGUk1fVVNFUmAsIGFuZCB0aGUgdmFyaW91cyBJUHNlYy1yZWxhdGVkIHByb3RvY29sczogYElORVRfQUhgLCBgSU5FVF9FU1BgLCBgSU5FVF9JUENPTVBgLCBhbmQgdGhlaXIgSVB2NiBjb3VudGVycGFydHMuCgpHaXZlbiB0aGF0IEkgd2FudCB0byBoYXZlIGNvbnRyb2wgYW5kIGZsZXhpYmlsaXR5IG92ZXIgdGhlIFhGUk0gc3Vic3lzdGVtLCBpdCBtYWtlcyBzZW5zZSBmb3IgbWUgdG8gZW5hYmxlIGBYRlJNX1VTRVJgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBob29rcyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MTk0PWNvbmZpZyBJWEdCRV9JUFNFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTk4LVx0ZGVmYXVsdCB5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjE5OTpcdHNlbGVjdCBYRlJNX0FMR09cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjAwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjIwPWNvbmZpZyBJWEdCRVZGX0lQU0VDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMjQtXHRkZWZhdWx0IHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjI1Olx0c2VsZWN0IFhGUk1fQUxHT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMjYtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxuLS1cbm5ldC9pcHY0L0tjb25maWctMzA3LVx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWc6MzA4Olx0c2VsZWN0IFhGUk1cbm5ldC9pcHY0L0tjb25maWctMzA5LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozNDE6XHRzZWxlY3QgWEZSTV9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDItXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb25cJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MzU2Olx0c2VsZWN0IFhGUk1fRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1Ny1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzcxLVx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cdGRlZmF1bHQgblxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODYtXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcdHNlbGVjdCBYRlJNX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM5ND1jb25maWcgSU5FVF9JUENPTVBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM5Ni1cdHNlbGVjdCBJTkVUX1hGUk1fVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcdHNlbGVjdCBYRlJNX0lQQ09NUFxubmV0L2lwdjQvS2NvbmZpZy0zOTgtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz00Nz1jb25maWcgSU5FVDZfQUhcbm5ldC9pcHY2L0tjb25maWctNDgtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzo0OTpcdHNlbGVjdCBYRlJNX0FIXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzo2NDpcdHNlbGVjdCBYRlJNX0VTUFxubmV0L2lwdjYvS2NvbmZpZy02NS1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzktXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY2L0tjb25maWctODEtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWctOTQtXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnOjk1Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTYtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTA0LVx0c2VsZWN0IElORVQ2X1hGUk1fVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnOjEwNTpcdHNlbGVjdCBYRlJNX0lQQ09NUFxubmV0L2lwdjYvS2NvbmZpZy0xMDYtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMTI9Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNTMtXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xNTUtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xND1jb25maWcgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTE1LVx0dHJpc3RhdGVcbm5ldC94ZnJtL0tjb25maWc6MTY6XHRzZWxlY3QgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy0xNy1cdHNlbGVjdCBDUllQVE9cbi0tXG5uZXQveGZybS9LY29uZmlnPTIzPWNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG5uZXQveGZybS9LY29uZmlnOjI1Olx0c2VsZWN0IFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0yNi1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTg0PWNvbmZpZyBYRlJNX0FIXG5uZXQveGZybS9LY29uZmlnLTg1LVx0dHJpc3RhdGVcbm5ldC94ZnJtL0tjb25maWc6ODY6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTg3LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9OTM9Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbm5ldC94ZnJtL0tjb25maWc6OTU6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTk2LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MTA2PWNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzoxMDg6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTEwOS1cdHNlbGVjdCBDUllQVE9cbi0tXG5uZXQveGZybS9LY29uZmlnPTExMj1jb25maWcgTkVUX0tFWVxubmV0L3hmcm0vS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtQRl9LRVkgc29ja2V0cyAoZGVwcmVjYXRlZClcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MTE0Olx0c2VsZWN0IFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTI3LVx0ZGVwZW5kcyBvbiBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnOjEyODpcdHNlbGVjdCBYRlJNX01JR1JBVEVcbm5ldC94ZnJtL0tjb25maWctMTI5LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI3OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlc2UgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZW5hYmxlIGBYRlJNX1VTRVJgLCBhcyBpdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHBvaW50IG9mIGNvbnRyb2wuIEkgdW5kZXJzdGFuZCB0aGF0IGBYRlJNX1VTRVJgIGlzIHRoZSBvbmUgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBgWEZSTV9BTEdPYCwgd2hpY2ggaW4gdHVybiBzZWxlY3RzIHRoZSBvdmVyYXJjaGluZyBgWEZSTWAgZnJhbWV3b3JrLiBUaGF0IHNpbXBsaWZpZXMgdGhlIGluaXRpYWwgZGVjaXNpb24sIHNvIGxldCYjMzk7cyBnbyB3aXRoIHRoYXQuCgpOb3csIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gdGhlIG90aGVyIGNvbmZpZ3MgYXQgcGxheS4gSSBzZWUgdGhhdCB3ZSBoYXZlOgoKKiAgIGBCUklER0VfTkVURklMVEVSYAoqICAgYENBTmAKKiAgIGBNQ1RQX0ZMT1dTYCAodGhhdCBpcyBnb2luZyB0byBiZSB2aWEgYE1DVFBfVEVTVGAgb3IgYE1DVFBfVFJBTlNQT1JUX0kyQ2ApCiogICBgTVBUQ1BgCiogICBgSU5FVF9QU1BgCiogICBgTkVUX1RDX1NLQl9FWFRgCiogICBgWEZSTV9VU0VSYAoKV2FpdCBhIG1pbnV0ZSwgYE1DVFBfRkxPV1NgIGlzIGEgaGlkZGVuIEJvb2xlYW4sIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYSBkZXBlbmRlbnQgY29uZmlndXJhdGlvbiBmb3IgdGhpcy4gVGhlIGNob2ljZXMgYXJlIGBNQ1RQX1RFU1RgIGFuZCBgTUNUUF9UUkFOU1BPUlRfSTJDYC4KCkkmIzM5O2xsIGxlYW4gdG93YXJkcyBlbmFibGluZyBgTUNUUF9URVNUYCBpbml0aWFsbHkuIFNvLCB0byBlbnN1cmUgYE1DVFBfRkxPV1NgIGlzIGFjdGl2ZSwgbGV0JiMzOTtzIGVuYWJsZSBgTUNUUF9URVNUYCwgYE1DVFBgLCBhbmQgYEtVTklUYC4KCkp1c3QgdG8gZG91YmxlLWNoZWNrLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdHVzIG9mIGBNQ1RQX1RFU1RgIHRvIGVuc3VyZSBpdCYjMzk7cyBzdGlsbCBlbmFibGVkIGFuZCBoYXNuJiMzOTt0IGhhZCBzb21lIHNpZGUgZWZmZWN0IG9uIG15IGN1cnJlbnQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWN0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdGNvbmZpZyBNQ1RQX1RFU1RcbiAgMTY6XHQgICAgICAgIGJvb2wgXCYjMzQ7TUNUUCBjb3JlIHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMTc6XHQgICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXG4gIDE4Olx0ICAgICAgICBkZXBlbmRzIG9uIE1DVFA9eSBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAxOTpcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTUNUUF9GTE9XU1xuICAyMjpcdFx0Ym9vbFxuICAyMzpcdFx0ZGVwZW5kcyBvbiBNQ1RQXG4gIDI0Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBXYWxrdGhyb3VnaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IGNoYWluLiAgYE1DVFBfVEVTVGAgcmVsaWVzIG9uIGJvdGggYE1DVFBgIGJlaW5nIHNldCB0byAmIzM5O3kmIzM5OyBhbmQgYEtVTklUYCBhbHNvIGJlaW5nIHNldCB0byAmIzM5O3kmIzM5Oy4gIFNpbXBsZSBlbm91Z2guICBUaGVyZWZvcmUsIHRvIGdldCBgTUNUUF9URVNUYCBlbmFibGVkLCBJIG5lZWQgdG8gZW5zdXJlIGJvdGggYE1DVFBgIGFuZCBgS1VOSVRgIGFyZSBlbmFibGVkLiAgU28sIEkgd2lsbCBlbmFibGUgYE1DVFBgLCBlbmFibGUgYEtVTklUYCwgYW5kIHRoZW4gZXhwbGljaXRseSBlbmFibGUgYE1DVFBfVEVTVGAgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgaG9va2VkIHVwIGNvcnJlY3RseS4KCk5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gdGhlIG5leHQgc2VjdGlvbi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGBORVRfVENfU0tCX0VYVGAuIFRoaXMgb25lIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTkVUX0NMU19BQ1RgIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgYmVmb3JlIEkgY2FuIHdvcnJ5IGFib3V0IGBORVRfVENfU0tCX0VYVGAuIEkmIzM5O2xsIGdvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciBgTkVUX0NMU19BQ1RgIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgdmFsaWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ0xTX0FDVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXG4tLVxubmV0L3NjaGVkL0tjb25maWctNzAxLVxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxubmV0L3NjaGVkL0tjb25maWctNzAzLVx0Ym9vbCBcJiMzNDtBY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDYzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhpcyBkZWVwbHkuCgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCkFscmlnaHQsIGBORVRfQ0xTX0FDVGAgaXMgc2hvd2luZyB1cCwgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgZGlnIGRlZXBlciwgYXMgSSBhbHdheXMgZG8uIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYElORVRfUFNQYCwgZ2l2ZW4gaXRzIHJlbGF0aW9uc2hpcCB0byBgSU5FVGAuIE9rYXksIGl0IGhpbmdlcyBvbiBgSU5FVGAgYXMgZXhwZWN0ZWQuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHdoYXQgSSB3YXMgYW50aWNpcGF0aW5nLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBCUklER0VfTkVURklMVEVSYC4gVGhpcyBvbmUmIzM5O3MgYWx3YXlzIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBkZXBlbmRzIG9uIGBCUklER0VgLCBgTkVURklMVEVSYCwgYElORVRgLCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRoYXQmIzM5O3MgYSBtb3JlIGludm9sdmVkIHNldCBvZiBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBzdGFuZGFyZCwgbm90aGluZyBqdW1wcyBvdXQuCgpBbmQsIG9mIGNvdXJzZSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGdpdmVuIGl0cyByb2xlLiBUaGF0JiMzOTtzIGEga2V5IGNvbXBvbmVudCBpbiBhIGNvbmZpZ3VyYXRpb24gbGlrZSB0aGlzLiBVbmRlcnN0YW5kaW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gZXZlcnl0aGluZyBlbHNlIGlzIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTIxOD1pZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTIxOS1cbm5ldC9LY29uZmlnOjIyMDpjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0FkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODQwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgc2VlIGBORVRGSUxURVJfQURWQU5DRURgIOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gTGV0JiMzOTtzIHNlZSBhYm91dCBlbmFibGluZyBNdWx0aVBhdGggVENQLCBvciBgTVBUQ1BgLiBJdCYjMzk7cyBkZXBlbmRlbnQgb24gYElORVRgLCBzbyB0aGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQuIE5vdywgbG9va2luZyBhdCBDb250cm9sbGVyIEFyZWEgTmV0d29yaywgb3IgYENBTmAsIHRoYXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhdmFpbGFibGUuCgpTbywgaGVyZSYjMzk7cyBteSBpbml0aWFsIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgZm9yIHRoaXMgYnVpbGQ6IGBCUklER0VfTkVURklMVEVSYCwgYEJSSURHRWAsIGBORVRGSUxURVJgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYElORVRgLCBgQ0FOYCwgYE1DVFBgLCBgS1VOSVRgLCBgTUNUUF9URVNUYCwgYE1QVENQYCwgYElORVRfUFNQYCwgYE5FVF9DTFNfQUNUYCwgYE5FVF9UQ19TS0JfRVhUYCwgYW5kIGBYRlJNX1VTRVJgLgoKSG9sZCBvbi4uLiBJIGp1c3QgcmVtZW1iZXJlZCBgTUNUUF9URVNUYCBpcyBhIGJvb2xlYW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGFub3RoZXIgd2F5IHRvIGVuYWJsZSBgTUNUUF9GTE9XU2AuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiEgTm93LCBsb29raW5nIGF0IGBNQ1RQX1RSQU5TUE9SVF9JMkNgLCBJIHNlZSB0aGF0IGl0IGRlcGVuZHMgb24gYEkyQ19TTEFWRWAuIExldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgSTJDX1NMQVZFYCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgc2V0IHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEkyQ19TTEFWRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2kyYy9LY29uZmlnPTEwMj1jb25maWcgSTJDX1NUVUJcbi0tXG5kcml2ZXJzL2kyYy9LY29uZmlnLTExMy1cbmRyaXZlcnMvaTJjL0tjb25maWc6MTE0OmNvbmZpZyBJMkNfU0xBVkVcbmRyaXZlcnMvaTJjL0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtJMkMgc2xhdmUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaTJjL0tjb25maWc9MTIxPWlmIEkyQ19TTEFWRVxuZHJpdmVycy9pMmMvS2NvbmZpZy0xMjItXG5kcml2ZXJzL2kyYy9LY29uZmlnOjEyMzpjb25maWcgSTJDX1NMQVZFX0VFUFJPTVxuZHJpdmVycy9pMmMvS2NvbmZpZy0xMjQtXHR0cmlzdGF0ZSBcJiMzNDtJMkMgZWVwcm9tIHNsYXZlIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvaTJjL0tjb25maWctMTI4LVxuZHJpdmVycy9pMmMvS2NvbmZpZzoxMjk6Y29uZmlnIEkyQ19TTEFWRV9URVNUVU5JVFxuZHJpdmVycy9pMmMvS2NvbmZpZy0xMzAtXHR0cmlzdGF0ZSBcJiMzNDtJMkMgdGVzdHVuaXQgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBBZGp1c3RtZW50cyoqCgpPa2F5LCBzbyBJIGNhbiBzZWUgdGhlIGBJMkNfU0xBVkVgIG9wdGlvbiBub3csIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzd2l0Y2ggdGhpbmdzIHVwIGEgYml0IGZyb20gdGhlIHRlc3QgY29uZmlndXJhdGlvbi4gSW5zdGVhZCBvZiB0aGUgY3VycmVudCBzZXR1cCwgd2hpY2ggbGlrZWx5IGluY2x1ZGVzIGBNQ1RQX1RFU1RgIGFuZCBgS1VOSVRgIChhbmQga25vd2luZyBgS1VOSVRgIGNhbiBvZnRlbiBkcmFnIGluIGEgd2hvbGUgbG9hZCBvZiB1bm5lY2Vzc2FyeSB0ZXN0cywgZXZlbiB0aG91Z2ggaXQmIzM5O3MgdXNlZnVsIGZvciBzb21lIGRlYnVnZ2luZyksIEkmIzM5O20gZ29pbmcgdG8gZW5hYmxlIGBNQ1RQX1RSQU5TUE9SVF9JMkNgIGFsb25nIHdpdGggYEkyQ19TTEFWRWAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBtb3JlIGZvY3VzZWQgZW52aXJvbm1lbnQgZm9yIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gYWNoaWV2ZS4gQmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCB0aG91Z2gsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1DVFBfVFJBTlNQT1JUX0kyQ2AganVzdCB0byBiZSBjZXJ0YWluIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGNvbmZsaWN0cyBvciBwcmVyZXF1aXNpdGVzLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggYW5kIGF2b2lkIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjk6XHRjb25maWcgTUNUUF9UUkFOU1BPUlRfSTJDXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFNNQnVzL0kyQyB0cmFuc3BvcnRcJiMzNDtcbiAgMzE6XHRcdCMgaTJjLW11eCBpcyBvcHRpb25hbCwgYnV0IHdlIG11c3QgYnVpbGQgYXMgYSBtb2R1bGUgaWYgaTJjLW11eCBpcyBhIG1vZHVsZVxuICAzMjpcdFx0ZGVwZW5kcyBvbiBJMkNfTVVYIHx8ICFJMkNfTVVYXG4gIDMzOlx0XHRkZXBlbmRzIG9uIEkyQ1xuICAzNDpcdFx0ZGVwZW5kcyBvbiBJMkNfU0xBVkVcbiAgMzU6XHRcdHNlbGVjdCBNQ1RQX0ZMT1dTXG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBTTUJ1cy9JMkMgdHJhbnNwb3J0LFxuICAzODpcdFx0ICBmcm9tIERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjM3LiBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwOTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gSSYjMzk7bSBzZXR0aW5nIHVwIHRoaXMgc3lzdGVtLCBhbmQgaXQgbG9va3MgbGlrZSBgTUNUUF9UUkFOU1BPUlRfSTJDYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGJvdGggYEkyQ2AgYW5kIGBJMkNfU0xBVkVgLiBNYWtlcyBzZW5zZS4gU28sIGxldCYjMzk7cyBlbmFibGUgdGhvc2UgaW4gYWRkaXRpb24gdG8gdGhlIG1haW4gbW9kdWxlLCBgTUNUUGAsIGFuZCBgTUNUUF9UUkFOU1BPUlRfSTJDYCBpdHNlbGYuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgbGluZWQgdXAgY29ycmVjdGx5LgoKTm93LCBsZXQgbWUgcnVuIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgSSYjMzk7dmUgYWxyZWFkeSBzZXQuIEkmIzM5O3ZlIGdvdCBgQlJJREdFYCwgYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBhbmQgYEJSSURHRV9ORVRGSUxURVJgIGVuYWJsZWQsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4gQWxzbywgYENBTmAsIGBNQ1RQYCwgYEkyQ2AsIGBJMkNfU0xBVkVgLCBgTUNUUF9UUkFOU1BPUlRfSTJDYCwgYElORVRgLCBgTVBUQ1BgLCBgSU5FVF9QU1BgLCBgTkVUX0NMU19BQ1RgLCBgTkVUX1RDX1NLQl9FWFRgLCBhbmQgYFhGUk1fVVNFUmAuIEkgbmVlZCB0byBlbnN1cmUgSSBhbSB1cCB0byBkYXRlIHdpdGggbXkgcmVxdWlyZWQgY2hhbmdlcy4KCkZpbmFsbHksIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYElORVRfUFNQYCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGNoYW5nZXMgb3IgY29uZmxpY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wc3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFBTUCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbmZpZyBJTkVUX1BTUFxuICAgNjpcdFx0Ym9vbCBcJiMzNDtQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxuICAgOTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gIDEwOlx0XHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjkyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBWYWxpZGF0aW9uIENoZWNrKioKCkFscmlnaHQsIHRoYXQgaW5pdGlhbCBnbGFuY2Ugc2VlbXMgcHJvbWlzaW5nLiBWaXN1YWxseSwgZXZlcnl0aGluZyBhcHBlYXJzIHRvIGJlIGluIG9yZGVyLiBIb3dldmVyLCBhcyB3aXRoIGFueSB0ZWNobmljYWwgYXNzZXNzbWVudCwgSSBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc3VyZmFjZS4gTXkgbWluZCBpbW1lZGlhdGVseSBmbGFncyB0aGUgbmVlZCBmb3IgYSBkZWVwZXIgZGl2ZS4gVGhhdCBpbml0aWFsIGltcHJlc3Npb24gaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gTXkgZm9jdXMgc2hpZnRzIHRvIGEgY3JpdGljYWwgY29tcG9uZW50LCBhbmQgYSBwb3RlbnRpYWwgYXJlYSBmb3IgY29tcGxleGl0eTogYE1QVENQYC4gSXQgd2FycmFudHMgYSByaWdvcm91cyBleGFtaW5hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIG9uIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRcbiAgIDI6XHRjb25maWcgTVBUQ1BcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBjb25uZWN0aW9ucyBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb3ZlciBtdWx0aXBsZVxuICAxMDpcdFx0ICBzdWJmbG93cyBpbiBvcmRlciB0byB1dGlsaXplIG11bHRpcGxlIG5ldHdvcmsgcGF0aHMuIEVhY2ggc3ViZmxvd1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjAwMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBpbml0aWFsIGltcHJlc3Npb246IHRoaW5ncyBhcmUgbG9va2luZyBnb29kLCBnZW5lcmFsbHkuIEJ1dCBhcyB3aXRoIGFueSBjcml0aWNhbCBjb2RlIHJldmlldywgZXNwZWNpYWxseSBpbiB0aGUgbmV0d29ya2luZyBrZXJuZWwgc3BhY2UsICYjMzQ7Z29vZCYjMzQ7IGlzbiYjMzk7dCBnb29kIGVub3VnaC4gSXQmIzM5O3MgdGltZSB0byBkcmlsbCBkb3duLiBUaGUgaW1tZWRpYXRlIGFyZWEgb2YgY29uY2VybiBpcyB0aGUgYE5FVF9UQ19TS0JfRVhUYCBleHRlbnNpb24uIEkgd2FudCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBpbXBsaWNhdGlvbnMgYW5kIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byB0aGlzIGV4dGVuc2lvbiBhcmUgY29ycmVjdC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIG51YW5jZXMsIGNvcm5lciBjYXNlcywgYW5kIHBvdGVudGlhbCBmb3IgdW5hbnRpY2lwYXRlZCBzaWRlLWVmZmVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFydGljdWxhciBzdHJ1Y3R1cmUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIFdlIGtub3cgdGhpcyBhcmVhIGlzIHByb25lIHRvIHN1YnRsZSBidWdzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl04oCZcyBpcm9uY2xhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTU0Olx0Y29uZmlnIE5FVF9UQ19TS0JfRVhUXG4gOTU1Olx0XHRib29sIFwmIzM0O1RDIHJlY2lyY3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuIDk1NjpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDk1NzpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gOTU4Olx0XG4gOTU5Olx0XHRoZWxwXG4gOTYwOlx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgdGMgY2hhaW4gbWlzc2VzIHRvIGNvbnRpbnVlIGluIE92UyBkYXRhcGF0aCBpblxuIDk2MTpcdFx0ICB0aGUgY29ycmVjdCByZWNpcmNfaWQsIGFuZCBoYXJkd2FyZSBjaGFpbiBtaXNzZXMgdG8gY29udGludWUgaW5cbiA5NjI6XHRcdCAgdGhlIGNvcnJlY3QgY2hhaW4gaW4gdGMgc29mdHdhcmUgZGF0YXBhdGguXG4gOTYzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBpbml0aWFsIGltcHJlc3Npb24gaXMgcG9zaXRpdmUuIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgYWxpZ25pbmcuIEJ1dCwgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIEkgYWx3YXlzIGVtcGhhc2l6ZSBkdWUgZGlsaWdlbmNlLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBwcm9jZWVkaW5nLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIHN0YXR1cyBvZiB0aGUgYEJSSURHRV9ORVRGSUxURVJgIHNldHRpbmcuIEl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50LCBhbmQgYSBxdWljayBkb3VibGUtY2hlY2sgaGVyZSBjb3VsZCBzYXZlIGEgbG90IG9mIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIGlmIGNvbmZpZ3VyZWQgd3JvbmcsIHRoZSB3aG9sZSBzeXN0ZW0gY29sbGFwc2VzLiBCZXN0IHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBwZXJmZWN0LCBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMxOlx0Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbiAyMzI6XHRcdHRyaXN0YXRlIFwmIzM0O0JyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXCYjMzQ7XG4gMjMzOlx0XHRkZXBlbmRzIG9uIEJSSURHRVxuIDIzNDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVIgXHUwMDI2XHUwMDI2IElORVRcbiAyMzU6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMjM2Olx0XHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAyMzc6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuIDIzODpcdFx0aGVscFxuIDIzOTpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGxldCBhcnB0YWJsZXMgcmVzcC4gaXB0YWJsZXMgc2VlIGJyaWRnZWRcbiAyNDA6XHRcdCAgQVJQIHJlc3AuIElQIHRyYWZmaWMuIElmIHlvdSB3YW50IGEgYnJpZGdpbmcgZmlyZXdhbGwsIHlvdSBwcm9iYWJseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgVmVyaWZpY2F0aW9uIFN0ZXAqKgoKQWxyaWdodCwgaW5pdGlhbCBpbXByZXNzaW9ucyBhcmUgcG9zaXRpdmU7IHRoZSBwcm9wb3NlZCBzb2x1dGlvbiBhcHBlYXJzIHNvdW5kIG9uIHRoZSBzdXJmYWNlLiBCdXQsIGFzIGFsd2F5cywgd2UgY2FuJiMzOTt0IGJlIGNvbXBsYWNlbnQuIE15IHByaW1hcnkgY29uY2VybiBhdCB0aGlzIHBvaW50IGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuZm9yZXNlZW4gaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIHVzZXJsYW5kIFhGUk0gaW50ZXJmYWNlLiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byBhIGNsb3NlciBleGFtaW5hdGlvbiBvZiB0aGUgYFhGUk1fVVNFUmAgY29tcG9uZW50LiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCYjMzk7cyB3aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIG9yIGltcGxlbWVudGF0aW9uIG51YW5jZXMgYXJlIG1vc3QgbGlrZWx5IHRvIGx1cmsuIFRoaXMgaXMgdGhlIGNydWNpYWwgc3RhZ2U7IGFzc3VtaW5nIGV2ZXJ5dGhpbmcgaXMgcmlnaHQgYXQgdGhpcyBwb2ludCBpcyBleHRyZW1lbHkgZGFuZ2Vyb3VzLiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIzOlx0Y29uZmlnIFhGUk1fVVNFUlxuICAyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuICAyNTpcdFx0c2VsZWN0IFhGUk1fQUxHT1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4gIDI4Olx0XHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFZlcmlmaWNhdGlvbiBQcm90b2NvbCoqCgpSaWdodCwgaW5pdGlhbCBhc3Nlc3NtZW50IHNlZW1zIHBvc2l0aXZlLCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIHByZXNlbnRhdGlvbiBhcmUgc291bmQuIEJ1dCwgeW91IGtub3cgaG93IGl0IGlzLiBXZSBjYW4mIzM5O3QgYmUgY29tcGxhY2VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbm90IHJlbHkgb24gYXNzdW1wdGlvbnMuIFdlIG5lZWQgdG8gcmlnb3JvdXNseSBleGFtaW5lIGFuZCB2YWxpZGF0ZSBldmVyeSBrZXkgYXNzdW1wdGlvbi4gSSYjMzk7bSBtb3ZpbmcgYmV5b25kIGEgY2FzdWFsIHJldmlldywgYW5kIGhlYWRpbmcgc3RyYWlnaHQgdG8gdGhlIGNvcmUuIFNvIEkmIzM5O20gbm93IGRyaWxsaW5nIGRvd24gYW5kIGNyb3NzLXJlZmVyZW5jaW5nIGFnYWluc3QgdGhlIGVzdGFibGlzaGVkIHByb3RvY29scy4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBDQU5gIChDcml0aWNhbCBBc3N1bXB0aW9uIE5ldHdvcmspIOKAkyB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIHN0ZXAuIE1ha2Ugc3VyZSB3ZSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nLiBJJiMzOTttIGxvb2tpbmcgZm9yIGhpZGRlbiBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbCBwb2ludHMgb2YgZmFpbHVyZS4uLiBiYXNpY2FsbHksIGV2ZXJ5dGhpbmcgdGhhdCBjb3VsZCBiZSBhICYjMzk7Z290Y2hhJiMzOTsgbGF0ZXIgb24uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICA2Olx0bWVudWNvbmZpZyBDQU5cbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0NBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBDb250cm9sbGVyIEFyZWEgTmV0d29yayAoQ0FOKSBpcyBhIHNsb3cgKHVwIHRvIDFNYml0L3MpIHNlcmlhbFxuICAxMTpcdFx0ICBjb21tdW5pY2F0aW9ucyBwcm90b2NvbC4gRGV2ZWxvcG1lbnQgb2YgdGhlIENBTiBidXMgc3RhcnRlZCBpblxuICAxMjpcdFx0ICAxOTgzIGF0IFJvYmVydCBCb3NjaCBHbWJILCBhbmQgdGhlIHByb3RvY29sIHdhcyBvZmZpY2lhbGx5XG4gIDEzOlx0XHQgIHJlbGVhc2VkIGluIDE5ODYuIFRoZSBDQU4gYnVzIHdhcyBvcmlnaW5hbGx5IG1haW5seSBmb3IgYXV0b21vdGl2ZSxcbiAgMTQ6XHRcdCAgYnV0IGlzIG5vdyB3aWRlbHkgdXNlZCBpbiBtYXJpbmUgKE5NRUEyMDAwKSwgaW5kdXN0cmlhbCwgYW5kIG1lZGljYWxcbiAgMTU6XHRcdCAgYXBwbGljYXRpb25zLiBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBDQU4gbmV0d29yayBwcm90b2NvbCBmYW1pbHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NTQKCQkJCQkJCW91dHB1dDogMjU3CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqCgpPa2F5LCB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBjaGFuZ2VzIHRvIGhvdyBgc2tiX2V4dGAg4oCTIHRob3NlIGV4dGVuc2lvbnMgdG8gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUg4oCTIGFyZSBoYW5kbGVkLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIHRvIHRoZSBmb2xsb3dpbmcgY3J1Y2lhbCBzeW1ib2xzLCB0aGUgb25lcyBJIG5lZWQgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmc6IGBza2JfZXh0X2FkZGAsIGBfX3NrYl9leHRfc2V0YCwgYW5kIGBfX3NrYl9leHRfYWxsb2NgLgoKVGhlIGdpc3Qgb2YgaXQgaXMgdGhpczogdGhleSYjMzk7cmUgZGl0Y2hpbmcgdGhlIG9sZCBkeW5hbWljIG9mZnNldHMgaW4gZmF2b3Igb2YgZml4ZWQsIGNvbXBpbGUtdGltZSBvZmZzZXRzIGFuZCBhIGJpdG1hcC1iYXNlZCBzeXN0ZW0gdG8gdHJhY2sgd2hpY2ggZXh0ZW5zaW9ucyBhcmUgcHJlc2VudC4gVGhpcyBpcyBhIGJpZyBkZWFsISBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgbWVtb3J5IGlzIG1hbmFnZWQgYW5kIGhvdyB0aGVzZSBleHRlbnNpb25zIOKAkyB0aGluZ3MgbGlrZSBJUHNlYywgQnJpZGdlIE5ldGZpbHRlciwgVEMsIE1QVENQLCBNQ1RQLCBQU1AsIGFuZCBDQU4g4oCTIGhvb2sgaW50byBzb2NrZXQgYnVmZmVycy4gQW55IG1vZGlmaWNhdGlvbiBpbiB0aGlzIGFyZWEgY2FuIGhhdmUgd2lkZXNwcmVhZCBlZmZlY3RzLiBHaXZlbiB0aGUgcmVhY2hhYmlsaXR5IGFuZCB0aGUgZnVuY3Rpb25hbCBhbHRlcmF0aW9ucyB0byBib3RoIGV4ZWN1dGlvbiBmbG93IGFuZCBtZW1vcnkgbGF5b3V0LCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGRpc2NvdmVyaW5nIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcyBvciBvdGhlciBoYXJkLXRvLWZpbmQgYnVncy4KCkkmIzM5O20gZ29pbmcgdG8gc2V0IHVwIGEgdGVzdGluZyBzY2VuYXJpbyB0byBkZXRlcm1pbmUgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7STJDJiMzNDssCiAgICAmIzM0O0kyQ19TTEFWRSYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9JMkMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtJTkVUX1BTUCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfVENfU0tCX0VYVCYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtfX3NrYl9leHRfc2V0JiMzNDssCiAgICAmIzM0O19fc2tiX2V4dF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykuIEl0IHJlcGxhY2VzIGR5bmFtaWMgb2Zmc2V0cyB3aXRoIGNvbXBpbGUtdGltZSBmaXhlZCBvZmZzZXRzIGFuZCB1c2VzIGEgYml0bWFwIHRvIHRyYWNrIHByZXNlbnQgZXh0ZW5zaW9ucy4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBleHRlbnNpb25zIGxpa2UgSVBzZWMsIEJyaWRnZSBOZXRmaWx0ZXIsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOIGFyZSBhdHRhY2hlZCB0byBzb2NrZXQgYnVmZmVycy4gSXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgbWVtb3J5IGxheW91dCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7STJDJiMzNDssCiAgICAmIzM0O0kyQ19TTEFWRSYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9JMkMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtJTkVUX1BTUCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfVENfU0tCX0VYVCYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtfX3NrYl9leHRfc2V0JiMzNDssCiAgICAmIzM0O19fc2tiX2V4dF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykuIEl0IHJlcGxhY2VzIGR5bmFtaWMgb2Zmc2V0cyB3aXRoIGNvbXBpbGUtdGltZSBmaXhlZCBvZmZzZXRzIGFuZCB1c2VzIGEgYml0bWFwIHRvIHRyYWNrIHByZXNlbnQgZXh0ZW5zaW9ucy4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBleHRlbnNpb25zIGxpa2UgSVBzZWMsIEJyaWRnZSBOZXRmaWx0ZXIsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOIGFyZSBhdHRhY2hlZCB0byBzb2NrZXQgYnVmZmVycy4gSXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgbWVtb3J5IGxheW91dCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBhbGxvY2F0aW9uIGFuZCBsYXlvdXQgb2YgYHNrYl9leHRgIChza19idWZmIGV4dGVuc2lvbnMpIGZyb20gYSB2YXJpYWJsZS1zaXplZCwgZHluYW1pY2FsbHkgYXBwZW5kZWQgbGF5b3V0IHRvIGEgZml4ZWQtc2l6ZWQgbGF5b3V0IChgc3RydWN0IHNrYl9leHRfbGF5b3V0YCkgd2l0aCBzdGF0aWMgb2Zmc2V0cyBmb3IgZWFjaCBleHRlbnNpb24gdHlwZS5cblxuMS4gVGhlIG5ldyBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGEgc2xhYiBjYWNoZSwgYW5kIGxpa2UgdGhlIG9sZCBjb2RlLCBvbmx5IHRoZSBoZWFkZXIgKGByZWZjbnRgIGFuZCBgcHJlc2VudF9leHRlbnNpb25zYCkgaXMgaW5pdGlhbGl6ZWQuIFRoZSBleHRlbnNpb24gZGF0YSBzbG90cyByZW1haW4gdW5pbml0aWFsaXplZCB1bnRpbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci5cbjIuIFRoZSB1bmluaXRpYWxpemVkIHNsb3RzIGFyZSBzdHJpY3RseSBndWFyZGVkIGJ5IHRoZSBgcHJlc2VudF9leHRlbnNpb25zYCBiaXRtYXAuIFRoZXkgY2Fubm90IGJlIGFjY2Vzc2VkIHVubGVzcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0LCB3aGljaCBvbmx5IGhhcHBlbnMgd2hlbiBhbiBleHRlbnNpb24gaXMgcHJvcGVybHkgYWRkZWQgYW5kIGluaXRpYWxpemVkLlxuMy4gV2hlbiBjb3B5aW5nIGFuIGV4dGVuc2lvbiAoYHNrYl9leHRfbWF5YmVfY293YCksIHRoZSBjb2RlIGNvcGllcyB0aGUgaGVhZGVyIGFuZCBvbmx5IHRoZSBwcmVzZW50IGV4dGVuc2lvbnMsIGxlYXZpbmcgdGhlIHVudXNlZCBzbG90cyB1bmluaXRpYWxpemVkLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgYmVoYXZpb3IgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG40LiBgc2tiX2V4dGAgYW5kIGl0cyBleHRlbnNpb25zIGFyZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyB1c2VkIGZvciBtZXRhZGF0YSAoZS5nLiwgSVBzZWMsIFRDLCBicmlkZ2UgbmV0ZmlsdGVyKSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIGluY29ycmVjdCBvZmZzZXQgY2FsY3VsYXRpb25zIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ4YzZjNDAzZjg2ZjFhYmEwNmMzYjQ5MTJiMzA5YWMzNWYzM2NlZWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxNjo1NzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IDk1MTg0MTgzMTgwZjYuLjVhNTE0M2U0N2IzMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtNTAxMSw0NSAmIzQzOzUwMTEsODEgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfbmZjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBsb25nIG5mY3QpCiB9CiAKICNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlMKLWVudW0gc2tiX2V4dF9pZCB7CiYjNDM7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUikKLQlTS0JfRVhUX0JSSURHRV9ORiwKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9CUklER0VfTkYJWChTS0JfRVhUX0JSSURHRV9ORiwgc3RydWN0IG5mX2JyaWRnZV9pbmZvKQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQlJJREdFX05GCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfWEZSTQotCVNLQl9FWFRfU0VDX1BBVEgsCiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1hGUk0pCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfU0VDX1BBVEgJWChTS0JfRVhUX1NFQ19QQVRILCBzdHJ1Y3Qgc2VjX3BhdGgpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9TRUNfUEFUSAogI2VuZGlmCiYjNDM7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpCi0JVENfU0tCX0VYVCwKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9UQwkJWChUQ19TS0JfRVhULCBzdHJ1Y3QgdGNfc2tiX2V4dCkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1RDCiAjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUCkKLQlTS0JfRVhUX01QVENQLAomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX01QVENQCQlYKFNLQl9FWFRfTVBUQ1AsIHN0cnVjdCBtcHRjcF9leHQpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9NUFRDUAogI2VuZGlmCiYjNDM7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUykKLQlTS0JfRVhUX01DVFAsCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfTUNUUAkJWChTS0JfRVhUX01DVFAsIHN0cnVjdCBtY3RwX2Zsb3cpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9NQ1RQCiAjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUCkKLQlTS0JfRVhUX1BTUCwKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9QU1AJCVgoU0tCX0VYVF9QU1AsIHN0cnVjdCBwc3Bfc2tiX2V4dCkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1BTUAogI2VuZGlmCiYjNDM7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQ0FOKQotCVNLQl9FWFRfQ0FOLAomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX0NBTgkJWChTS0JfRVhUX0NBTiwgc3RydWN0IGNhbl9za2JfZXh0KQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQ0FOCiAjZW5kaWYKLQlTS0JfRVhUX05VTSwgLyogbXVzdCBiZSBsYXN0ICovCiYjNDM7CiYjNDM7I2RlZmluZSBTS0JfRVhUX0ZPUkVBQ0goWCkJXAomIzQzOwlTS0JfRVhUX1hfQlJJREdFX05GCVwKJiM0MzsJU0tCX0VYVF9YX1NFQ19QQVRICVwKJiM0MzsJU0tCX0VYVF9YX1RDCQlcCiYjNDM7CVNLQl9FWFRfWF9NUFRDUAkJXAomIzQzOwlTS0JfRVhUX1hfTUNUUAkJXAomIzQzOwlTS0JfRVhUX1hfUFNQCQlcCiYjNDM7CVNLQl9FWFRfWF9DQU4KJiM0MzsKJiM0MztlbnVtIHNrYl9leHRfaWQgewomIzQzOyNkZWZpbmUgWChpZCwgdHlwZSkJaWQsCiYjNDM7CVNLQl9FWFRfRk9SRUFDSChYKQomIzQzOyN1bmRlZiBYCiYjNDM7CVNLQl9FWFRfTlVNLAogfTsKIAomIzQzO2V4dGVybiBjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV07CiYjNDM7CiAvKioKICAqCXN0cnVjdCBza2JfZXh0IC0gc2tfYnVmZiBleHRlbnNpb25zCiAgKglAcmVmY250OiAxIG9uIGFsbG9jYXRpb24sIGRlYWxsb2NhdGVkIG9uIDAKLSAqCUBvZmZzZXQ6IG9mZnNldCB0byBhZGQgdG8gQGRhdGEgdG8gb2J0YWluIGV4dGVuc2lvbiBhZGRyZXNzCi0gKglAY2h1bmtzOiBzaXplIGN1cnJlbnRseSBhbGxvY2F0ZWQsIHN0b3JlZCBpbiBTS0JfRVhUX0FMSUdOX1NISUZUIHVuaXRzCiYjNDM7ICoJQHByZXNlbnRfZXh0ZW5zaW9uczogYml0bWFwIG9mIGV4dGVuc2lvbnMgc3RvcmVkIGluIEBkYXRhCiAgKglAZGF0YTogc3RhcnQgb2YgZXh0ZW5zaW9uIGRhdGEsIHZhcmlhYmxlIHNpemVkCiAgKgotICoJTm90ZTogb2Zmc2V0cy9sZW5ndGhzIGFyZSBzdG9yZWQgaW4gY2h1bmtzIG9mIDggYnl0ZXMsIHRoaXMgYWxsb3dzCi0gKgl0byB1c2UgJiMzOTt1OCYjMzk7IHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aCBvZiBleHRlbnNpb24gZGF0YS4KJiM0MzsgKglFYWNoIGV4dGVuc2lvbiBpZCBvY2N1cGllcyBhIGZpeGVkIHNsb3Qgd2l0aGluIEBkYXRhLCBsb2NhdGVkIGF0CiYjNDM7ICoJc2tiX2V4dF9vZmZzZXRbaWRdIGNodW5rcyBvZiA4IGJ5dGVzLiBTdG9yaW5nIG9mZnNldHMvbGVuZ3RocwomIzQzOyAqCWluIDgtYnl0ZSBjaHVua3MgYWxsb3dzICYjMzk7dTgmIzM5OyB0eXBlcyB3aGlsZSBhbGxvd2luZyB1cCB0byAya2Igd29ydGgKJiM0MzsgKglvZiBleHRlbnNpb24gZGF0YS4KICAqLwogc3RydWN0IHNrYl9leHQgewogCXJlZmNvdW50X3QgcmVmY250OwotCXU4IG9mZnNldFtTS0JfRVhUX05VTV07IC8qIGluIGNodW5rcyBvZiA4IGJ5dGVzICovCi0JdTggY2h1bmtzOwkJLyogc2FtZSAqLwomIzQzOwl1OCBwcmVzZW50X2V4dGVuc2lvbnM7CiAJY2hhciBkYXRhW10gX19hbGlnbmVkKDgpOwogfTsKIApAQCAtNTA4Nyw3ICYjNDM7NTEyMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYykKIAogc3RhdGljIGlubGluZSBib29sIF9fc2tiX2V4dF9leGlzdChjb25zdCBzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaSkKIHsKLQlyZXR1cm4gISFleHQtJmd0O29mZnNldFtpXTsKJiM0MzsJcmV0dXJuIGV4dC0mZ3Q7cHJlc2VudF9leHRlbnNpb25zICZhbXA7ICgxICZsdDsmbHQ7IGkpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2V4dF9leGlzdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpCkBAIC01MTA2LDcgJiM0Mzs1MTQyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpza2JfZXh0X2ZpbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKQogCWlmIChza2JfZXh0X2V4aXN0KHNrYiwgaWQpKSB7CiAJCXN0cnVjdCBza2JfZXh0ICpleHQgPSBza2ItJmd0O2V4dGVuc2lvbnM7CiAKLQkJcmV0dXJuICh2b2lkICopZXh0ICYjNDM7IChleHQtJmd0O29mZnNldFtpZF0gJmx0OyZsdDsgMyk7CiYjNDM7CQlyZXR1cm4gKHZvaWQgKilleHQgJiM0MzsgKHNrYl9leHRfb2Zmc2V0W2lkXSAmbHQ7Jmx0OyAzKTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYzgyYTE0NzJhNWVhOC4uOGU1ZGI1Nzk3MjVkMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTUxMzQsNDcgJiM0Mzs1MTM0LDMyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50KTsKICNkZWZpbmUgU0tCX0VYVF9DSFVOS1NJWkVPRih4KQkoQUxJR04oKHNpemVvZih4KSksIFNLQl9FWFRfQUxJR05fVkFMVUUpIC8gU0tCX0VYVF9BTElHTl9WQUxVRSkKIAogc3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHsKLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKQotCVtTS0JfRVhUX0JSSURHRV9ORl0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBuZl9icmlkZ2VfaW5mbyksCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWEZSTQotCVtTS0JfRVhUX1NFQ19QQVRIXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHNlY19wYXRoKSwKLSNlbmRpZgotI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKQotCVtUQ19TS0JfRVhUXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHRjX3NrYl9leHQpLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApCi0JW1NLQl9FWFRfTVBUQ1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbXB0Y3BfZXh0KSwKLSNlbmRpZgotI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpCi0JW1NLQl9FWFRfTUNUUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtY3RwX2Zsb3cpLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApCi0JW1NLQl9FWFRfUFNQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHBzcF9za2JfZXh0KSwKLSNlbmRpZgotI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTikKLQlbU0tCX0VYVF9DQU5dID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgY2FuX3NrYl9leHQpLAotI2VuZGlmCiYjNDM7I2RlZmluZSBYKGlkLCB0eXBlKQlbaWRdID0gU0tCX0VYVF9DSFVOS1NJWkVPRih0eXBlKSwKJiM0MzsJU0tCX0VYVF9GT1JFQUNIKFgpCiYjNDM7I3VuZGVmIFgKIH07CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19ub19wcm9maWxlIHVuc2lnbmVkIGludCBza2JfZXh0X3RvdGFsX2xlbmd0aCh2b2lkKQotewotCXVuc2lnbmVkIGludCBsID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3Qgc2tiX2V4dCk7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShza2JfZXh0X3R5cGVfbGVuKTsgaSYjNDM7JiM0MzspCi0JCWwgJiM0Mzs9IHNrYl9leHRfdHlwZV9sZW5baV07CiYjNDM7c3RydWN0IHNrYl9leHRfbGF5b3V0IHsKJiM0MzsJdTgJaGVhZGVyW3NpemVvZihzdHJ1Y3Qgc2tiX2V4dCldIF9fYWxpZ25lZChTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKJiM0MzsjZGVmaW5lIFgoaWQsIHR5cGUpCXR5cGUgZl8jI2lkIF9fYWxpZ25lZChTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKJiM0MzsJU0tCX0VYVF9GT1JFQUNIKFgpCiYjNDM7I3VuZGVmIFgKJiM0Mzt9OwogCi0JcmV0dXJuIGw7Ci19CiYjNDM7Y29uc3QgdTggc2tiX2V4dF9vZmZzZXRbU0tCX0VYVF9OVU1dID0gewomIzQzOyNkZWZpbmUgWChpZCwgdHlwZSkJW2lkXSA9IG9mZnNldG9mKHN0cnVjdCBza2JfZXh0X2xheW91dCwgZl8jI2lkKSAvIFNLQl9FWFRfQUxJR05fVkFMVUUsCiYjNDM7CVNLQl9FWFRfRk9SRUFDSChYKQomIzQzOyN1bmRlZiBYCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MKHNrYl9leHRfb2Zmc2V0KTsKIAogc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IF9fbm9fcHJvZmlsZSBza2JfZXh0ZW5zaW9uc19pbml0KHZvaWQpCiB7CiAJQlVJTERfQlVHX09OKFNLQl9FWFRfTlVNICZndDsgOCk7Ci0JQlVJTERfQlVHX09OKHNrYl9leHRfdG90YWxfbGVuZ3RoKCkgJmd0OyAyNTUpOwomIzQzOwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBza2JfZXh0X2xheW91dCkgJmd0OyAyNTUgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKIAogCXNrYnVmZl9leHRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgmIzM0O3NrYnVmZl9leHRfY2FjaGUmIzM0OywKLQkJCQkJICAgICBTS0JfRVhUX0FMSUdOX1ZBTFVFICogc2tiX2V4dF90b3RhbF9sZW5ndGgoKSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBza2JfZXh0X2xheW91dCksCiAJCQkJCSAgICAgMCwKIAkJCQkJICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQywKIAkJCQkJICAgICBOVUxMKTsKQEAgLTcwODMsNyAmIzQzOzcwNjgsNyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9jb25kZW5zZSk7CiAjaWZkZWYgQ09ORklHX1NLQl9FWFRFTlNJT05TCiBzdGF0aWMgdm9pZCAqc2tiX2V4dF9nZXRfcHRyKHN0cnVjdCBza2JfZXh0ICpleHQsIGVudW0gc2tiX2V4dF9pZCBpZCkKIHsKLQlyZXR1cm4gKHZvaWQgKilleHQgJiM0MzsgKGV4dC0mZ3Q7b2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpOwomIzQzOwlyZXR1cm4gKHZvaWQgKilleHQgJiM0MzsgKHNrYl9leHRfb2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpOwogfQogCiAvKioKQEAgLTcxMDAsNyAmIzQzOzcwODUsNyBAQCBzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKQogCXN0cnVjdCBza2JfZXh0ICpuZXcgPSBrbWVtX2NhY2hlX2FsbG9jKHNrYnVmZl9leHRfY2FjaGUsIGZsYWdzKTsKIAogCWlmIChuZXcpIHsKLQkJbWVtc2V0KG5ldy0mZ3Q7b2Zmc2V0LCAwLCBzaXplb2YobmV3LSZndDtvZmZzZXQpKTsKJiM0MzsJCW5ldy0mZ3Q7cHJlc2VudF9leHRlbnNpb25zID0gMDsKIAkJcmVmY291bnRfc2V0KCZhbXA7bmV3LSZndDtyZWZjbnQsIDEpOwogCX0KIApAQCAtNzExMSw2ICYjNDM7NzA5Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCwKIAkJCQkJIHVuc2lnbmVkIGludCBvbGRfYWN0aXZlKQogewogCXN0cnVjdCBza2JfZXh0ICpuZXc7CiYjNDM7CWludCBpOwogCiAJaWYgKHJlZmNvdW50X3JlYWQoJmFtcDtvbGQtJmd0O3JlZmNudCkgPT0gMSkKIAkJcmV0dXJuIG9sZDsKQEAgLTcxMTksNyAmIzQzOzcxMDUsMTIgQEAgc3RhdGljIHN0cnVjdCBza2JfZXh0ICpza2JfZXh0X21heWJlX2NvdyhzdHJ1Y3Qgc2tiX2V4dCAqb2xkLAogCWlmICghbmV3KQogCQlyZXR1cm4gTlVMTDsKIAotCW1lbWNweShuZXcsIG9sZCwgb2xkLSZndDtjaHVua3MgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKJiM0MzsJbWVtY3B5KG5ldywgb2xkLCBTS0JfRVhUX0NIVU5LU0laRU9GKCpvbGQpICogU0tCX0VYVF9BTElHTl9WQUxVRSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBTS0JfRVhUX05VTTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChvbGQtJmd0O3ByZXNlbnRfZXh0ZW5zaW9ucyAmYW1wOyAoMSAmbHQ7Jmx0OyBpKSkKJiM0MzsJCQltZW1jcHkoc2tiX2V4dF9nZXRfcHRyKG5ldywgaSksIHNrYl9leHRfZ2V0X3B0cihvbGQsIGkpLAomIzQzOwkJCSAgICAgICBza2JfZXh0X3R5cGVfbGVuW2ldICogU0tCX0VYVF9BTElHTl9WQUxVRSk7CiYjNDM7CX0KIAlyZWZjb3VudF9zZXQoJmFtcDtuZXctJmd0O3JlZmNudCwgMSk7CiAKICNpZmRlZiBDT05GSUdfWEZSTQpAQCAtNzE1NiwxMiAmIzQzOzcxNDcsOCBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsCiB2b2lkICpfX3NrYl9leHRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCwKIAkJICAgIHN0cnVjdCBza2JfZXh0ICpleHQpCiB7Ci0JdW5zaWduZWQgaW50IG5ld2xlbiwgbmV3b2ZmID0gU0tCX0VYVF9DSFVOS1NJWkVPRigqZXh0KTsKLQogCXNrYl9leHRfcHV0KHNrYik7Ci0JbmV3bGVuID0gbmV3b2ZmICYjNDM7IHNrYl9leHRfdHlwZV9sZW5baWRdOwotCWV4dC0mZ3Q7Y2h1bmtzID0gbmV3bGVuOwotCWV4dC0mZ3Q7b2Zmc2V0W2lkXSA9IG5ld29mZjsKJiM0MzsJZXh0LSZndDtwcmVzZW50X2V4dGVuc2lvbnMgPSAxICZsdDsmbHQ7IGlkOwogCXNrYi0mZ3Q7ZXh0ZW5zaW9ucyA9IGV4dDsKIAlza2ItJmd0O2FjdGl2ZV9leHRlbnNpb25zID0gMSAmbHQ7Jmx0OyBpZDsKIAlyZXR1cm4gc2tiX2V4dF9nZXRfcHRyKGV4dCwgaWQpOwpAQCAtNzE4NCwzMSAmIzQzOzcxNzEsMjMgQEAgRVhQT1JUX1NZTUJPTF9OU19HUEwoX19za2JfZXh0X3NldCwgJiMzNDtORVRERVZfSU5URVJOQUwmIzM0Oyk7CiAgKi8KIHZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCkKIHsKLQlzdHJ1Y3Qgc2tiX2V4dCAqbmV3LCAqb2xkID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgbmV3bGVuLCBuZXdvZmY7CiYjNDM7CXN0cnVjdCBza2JfZXh0ICpuZXc7CiAKIAlpZiAoc2tiLSZndDthY3RpdmVfZXh0ZW5zaW9ucykgewotCQlvbGQgPSBza2ItJmd0O2V4dGVuc2lvbnM7Ci0KLQkJbmV3ID0gc2tiX2V4dF9tYXliZV9jb3cob2xkLCBza2ItJmd0O2FjdGl2ZV9leHRlbnNpb25zKTsKJiM0MzsJCW5ldyA9IHNrYl9leHRfbWF5YmVfY293KHNrYi0mZ3Q7ZXh0ZW5zaW9ucywKJiM0MzsJCQkJCXNrYi0mZ3Q7YWN0aXZlX2V4dGVuc2lvbnMpOwogCQlpZiAoIW5ldykKIAkJCXJldHVybiBOVUxMOwogCiAJCWlmIChfX3NrYl9leHRfZXhpc3QobmV3LCBpZCkpCiAJCQlnb3RvIHNldF9hY3RpdmU7Ci0KLQkJbmV3b2ZmID0gbmV3LSZndDtjaHVua3M7CiAJfSBlbHNlIHsKLQkJbmV3b2ZmID0gU0tCX0VYVF9DSFVOS1NJWkVPRigqbmV3KTsKLQogCQluZXcgPSBfX3NrYl9leHRfYWxsb2MoR0ZQX0FUT01JQyk7CiAJCWlmICghbmV3KQogCQkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbmV3bGVuID0gbmV3b2ZmICYjNDM7IHNrYl9leHRfdHlwZV9sZW5baWRdOwotCW5ldy0mZ3Q7Y2h1bmtzID0gbmV3bGVuOwotCW5ldy0mZ3Q7b2Zmc2V0W2lkXSA9IG5ld29mZjsKJiM0MzsJbmV3LSZndDtwcmVzZW50X2V4dGVuc2lvbnMgfD0gMSAmbHQ7Jmx0OyBpZDsKIHNldF9hY3RpdmU6CiAJc2tiLSZndDtzbG93X2dybyA9IDE7CiAJc2tiLSZndDtleHRlbnNpb25zID0gbmV3Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ1MAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE5NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgaW4gdGhlIGBza2JfZXh0YCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYHNrYl9leHRgIGlzIG1hbmFnZWQuICBJbnN0ZWFkIG9mIHZhcmlhYmxlLXNpemVkIGV4dGVuc2lvbnMgd2l0aCBvZmZzZXRzIHRyYWNrZWQgaW4gYGV4dC0mZ3Q7b2Zmc2V0YCwgd2UmIzM5O3JlIG1vdmluZyB0byBhIGZpeGVkIGBzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXRgIHdpdGggcHJlLWRlZmluZWQgb2Zmc2V0cyBhbmQgYSBiaXRtYXAgKGBwcmVzZW50X2V4dGVuc2lvbnNgKSBmb3IgdHJhY2tpbmcgd2hpY2ggZXh0ZW5zaW9ucyBhcmUgYWN0dWFsbHkgcHJlc2VudC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYSBjbGFzc2ljIGJ1ZyBjbGFzcy4KClRoZSBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGBza2J1ZmZfZXh0X2NhY2hlYCwgYSBzbGFiIGNhY2hlLiBBbGxvY2F0aW9uIHdpdGggYGttZW1fY2FjaGVfYWxsb2NgICpkb2VzbiYjMzk7dCogemVybyB0aGUgZW50aXJlIHN0cnVjdDsgaXQgb25seSBpbml0aWFsaXplcyBgcHJlc2VudF9leHRlbnNpb25zYCB0byB6ZXJvIGFuZCB0aGUgcmVmY291bnQuICBTbywgdGhlIGV4dGVuc2lvbiBzbG90cyB0aGVtc2VsdmVzIGFyZSB1bmluaXRpYWxpemVkIGF0IGFsbG9jYXRpb24uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCBkaWdnaW5nIGZvciBwb3RlbnRpYWwgcHJvYmxlbXMuCgpXaGVuIGFuIGV4dGVuc2lvbiBpcyBhZGRlZCAodXNpbmcgYHNrYl9leHRfYWRkYCBvciBgX19za2JfZXh0X3NldGApLCB0aGUgY29kZSBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiBgcHJlc2VudF9leHRlbnNpb25zYCBhbmQgdGhlICpjYWxsZXIqIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIGV4dGVuc2lvbiBkYXRhIHdpdGhpbiBpdHMgZml4ZWQgc2xvdC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQsIGJ1dC4uLiB3aGF0IGlmIHRoZSBjYWxsZXIgZG9lc24mIzM5O3QgaW5pdGlhbGl6ZSAqYWxsKiB0aGUgZmllbGRzIG9mIHRoZSBleHRlbnNpb24sIG9yIHRoZXJlJiMzOTtzIHBhZGRpbmcgd2l0aGluIHRoZSBzdHJ1Y3Q/IEl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYSBuZXcgcHJvYmxlbS4KClRoZSBrZXkgcG9pbnQgaGVyZSBpcyBgc2tiX2V4dF9tYXliZV9jb3dgIChjb3B5LW9uLXdyaXRlKS4gVGhlIG9sZCBjb2RlIGNvcGllZCB0aGUgd2hvbGUgY2h1bmssIHdoaWNoIGluY2x1ZGVkIGJvdGggaW5pdGlhbGl6ZWQgZXh0ZW5zaW9ucyBhbmQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3IGNvZGUgZG9lcyB0aGlzOiBGaXJzdCwgaXQgY29waWVzIHRoZSBoZWFkZXI6IGBtZW1jcHkobmV3LCBvbGQsIFNLQl9FWFRfQ0hVTktTSVpFT0YoKm9sZCkgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtgIFRoZW4sIGl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlICpwcmVzZW50KiBleHRlbnNpb25zIGFuZCBjb3BpZXMgb25seSB0aGUgZGF0YTogYG1lbWNweShza2JfZXh0X2dldF9wdHIobmV3LCBpKSwgc2tiX2V4dF9nZXRfcHRyKG9sZCwgaSksIHNrYl9leHRfdHlwZV9sZW5baV0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtgCgpOb3csIHRoZSBwb3RlbnRpYWwgaXNzdWUgYmVjb21lcyBjbGVhcjogdGhlIG5ldyBjb2RlIG9ubHkgY29waWVzIHRoZSBkYXRhIG9mIGV4dGVuc2lvbnMgdGhhdCBhcmUgKnByZXNlbnQqLiBUaGUgdW5pbml0aWFsaXplZCBzbG90cyBmb3IgZXh0ZW5zaW9ucyAqbm90KiBwcmVzZW50IGluIHRoZSBvbGQgYHNrYl9leHRgIHJlbWFpbiB1bmluaXRpYWxpemVkIGluIHRoZSBuZXcgb25lLiBXaWxsIHRoYXQgY2F1c2UgcHJvYmxlbXMgZG93biB0aGUgbGluZT8gSWYgYW4gZXh0ZW5zaW9uIGlzIGFkZGVkIGxhdGVyLCB0aGUgY2FsbGVyIHdpbGwgaW5pdGlhbGl6ZSBpdC4gSWYgYW4gZXh0ZW5zaW9uIGlzIG5ldmVyIHVzZWQsIGl0IHJlbWFpbnMgdW50b3VjaGVkLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV2ZXIgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaz8KCkkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYHNrYl9leHRgIGlzbiYjMzk7dCBsZWFrZWQgdG8gdXNlciBzcGFjZSBiZWNhdXNlIHRoYXQgd291bGQgYmUgYSBzZXJpb3VzIGluZm8gbGVhay4gTHVja2lseSwgYHNrYl9leHRgIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUgYXR0YWNoZWQgdG8gYHNrX2J1ZmZgIGFuZCB1c2VkIGJ5IHRoaW5ncyBsaWtlIElQc2VjLCBicmlkZ2UgbmV0ZmlsdGVyLCBUQywgTVBUQ1AsIGV0Yy4sIGFuZCBub3Qgc2VudCB0byB1c2Vyc3BhY2UuCgpIb3dldmVyLCBjb25zaWRlciB0aGlzIHNjZW5hcmlvOiAgaWYgYG9sZGAgaGFkIGFuIGV4dGVuc2lvbiBhbmQsIGJlY2F1c2Ugb2YgcGFkZGluZywgaXQgaGFkICp1bmluaXRpYWxpemVkKiBtZW1vcnksIHRoZSBgbWVtY3B5YCB3b3VsZCBub3cgY29weSB0aGF0IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byBgbmV3YC4gIFRoaXMgaXNuJiMzOTt0IGEgbmV3IGlzc3VlLCBLTVNBTiB3b3VsZCBiZSB0cmFja2luZyB0aGUgZGF0YSBhbmQgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB3b3VsZG4mIzM5O3QgYmUgYSBwcm9ibGVtIGJ5IGl0c2VsZi4gQnV0IHdoYXQgYWJvdXQgdGhlIGhlYWRlcj8KClRoZSBoZWFkZXIgb2YgdGhlIGBza2JfZXh0YCAoc3RydWN0IGBza2JfZXh0YCkgaXMgY29waWVkIHdpdGggYG1lbWNweShuZXcsIG9sZCwgU0tCX0VYVF9DSFVOS1NJWkVPRigqb2xkKSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO2AuIE5vdywgYFNLQl9FWFRfQ0hVTktTSVpFT0YoKm9sZCkgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFYCBpcyA4IGJ5dGVzLCBmcm9tIHN0cnVjdCBgc2tiX2V4dGAgKGNvbnRhaW5pbmcgcmVmY291bnQgYW5kIHByZXNlbnRfZXh0ZW5zaW9ucykuIFRoaXMgaW5jbHVkZXMgMyBieXRlcyBvZiB1bmluaXRpYWxpemVkIHBhZGRpbmcuIENvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgd2l0aGluIHRoZSBrZXJuZWwgaXMgZ2VuZXJhbGx5IG9rYXksIHVubGVzcyBpdCBpcyB1c2VkIGluIGEgYnJhbmNoLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYnV0IG9ubHkgY29tcGxhaW5zIGlmIGFuIGFjY2VzcyBpcyBtYWRlLiBTbyB0aGlzIHByb2JhYmx5IGlzbiYjMzk7dCBhIHByb2JsZW0uCgpOb3csIGNoZWNraW5nIHRoZSBvbGQgY29kZTogYG1lbXNldChuZXctJmd0O29mZnNldCwgMCwgc2l6ZW9mKG5ldy0mZ3Q7b2Zmc2V0KSk7YC4gSW4gdGhlIG5ldyBjb2RlLCBvbmx5IGBuZXctJmd0O3ByZXNlbnRfZXh0ZW5zaW9ucyA9IDA7YCBpcyBkb25lLiBCdXQsIHNpbmNlIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaXMgbm93IGZpeGVkLCB0aGlzIHNob3VsZCBiZSBmaW5lLiBJdCBpcyBhbGxvY2F0ZWQgZnJvbSBhIHNsYWIgY2FjaGUuCgpBIGtleSBjb25jZXJuIGlzIEtNU0FOLXNwZWNpZmljOiBgc2tiX2V4dF9tYXliZV9jb3dgIHVzZXMgYG1lbWNweSguLi4sIHNrYl9leHRfdHlwZV9sZW5baV0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKWAgdG8gY29weSBlYWNoIGV4dGVuc2lvbi4gYHNrYl9leHRfdHlwZV9sZW5gIHN0b3JlcyBgU0tCX0VYVF9DSFVOS1NJWkVPRih0eXBlKWAgKGNodW5rLWFsaWduZWQgc2l6ZSBvZiB0aGUgZXh0ZW5zaW9uKS4gSWYgdGhlIGV4dGVuc2lvbiBzaXplIGlzbiYjMzk7dAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9leHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMjkgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9NDg9aW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTUxLVx0c3RydWN0IGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6NTI6XHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeDtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtNTMtXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy03OC1cdFx0Lyogc2F2ZSBmcmFtZV9sZW4gdG8gcmV1c2UgaXQgd2hlbiB0cmFuc21pc3Npb24gaXMgY29tcGxldGVkICovXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjc5Olx0XHRjc3ggPSBjYW5fc2tiX2V4dF9maW5kKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTgwLVx0XHRpZiAoY3N4KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MTAyPV9fY2FuX2dldF9lY2hvX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWR4LFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMTE3LVx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi1cdTAwM2VlY2hvX3NrYltpZHhdO1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoxMTg6XHRcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xMTktXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xMjYtXHRcdGlmIChmcmFtZV9sZW5fcHRyKSB7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjEyNzpcdFx0XHRjc3ggPSBjYW5fc2tiX2V4dF9maW5kKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTEyOC1cdFx0XHRpZiAoY3N4KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MTc5PXZvaWQgY2FuX2ZyZWVfZWNob19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkeCxcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTE5MS1cdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtXHUwMDNlZWNob19za2JbaWR4XTtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MTkyOlx0XHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeDtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMTkzLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xOTQtXHRcdGlmIChmcmFtZV9sZW5fcHRyKSB7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjE5NTpcdFx0XHRjc3ggPSBjYW5fc2tiX2V4dF9maW5kKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTE5Ni1cdFx0XHRpZiAoY3N4KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MjE1PXN0cnVjdCBza19idWZmICphbGxvY19jYW5fc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fZnJhbWUgKipjZilcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTIxNy1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjIxODpcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yMTktXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yMjMtXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjIyNDpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yMjUtXHRpZiAoIWNzeCkge1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MjQ1PXN0cnVjdCBza19idWZmICphbGxvY19jYW5mZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI0OC1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI0OTpcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yNTAtXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yNTQtXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI1NTpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yNTYtXHRpZiAoIWNzeCkge1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9Mjc5PXN0cnVjdCBza19idWZmICphbGxvY19jYW54bF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI4My1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI4NDpcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yODUtXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTItXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI5MzpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTQtXHRpZiAoIWNzeCkge1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MzM0PXN0YXRpYyBib29sIGNhbl9za2JfaW5pdF92YWxpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0zMzUte1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzozMzY6XHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeCA9IGNhbl9za2JfZXh0X2ZpbmQoc2tiKTtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzM3LVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzQxLVx0XHRpZiAoIWNzeCkge1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzozNDI6XHRcdFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTM0My1cdFx0XHRpZiAoIWNzeClcbi0tXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYz0zOT1zdGF0aWMgbmV0ZGV2X3R4X3QgdnhjYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqb3NrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy00My1cdHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwZWVyc3RhdHMsICpzcmNzdGF0cyA9IFx1MDAyNmRldi1cdTAwM2VzdGF0cztcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjQ0Olx0c3RydWN0IGNhbl9za2JfZXh0ICpjc3g7XG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy00NS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNjktXHQvKiB0aGUgY2xvbmVkIHNrYiBwb2ludHMgdG8gdGhlIHNrYiBleHRlbnNpb24gb2YgdGhlIGFscmVhZHkgY2xvbmVkXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYzo3MDpcdCAqIG9za2Igd2l0aCBhbiBpbmNyZWFzZWQgcmVmY291bnQuIHNrYl9leHRfYWRkKCkgY3JlYXRlcyBhIGNvcHkgdG9cbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTcxLVx0ICogc2VwYXJhdGUgdGhlIHNrYiBleHRlbnNpb24gZGF0YSB3aGljaCBpcyBuZWVkZWQgdG8gc3RhcnQgd2l0aCBhXG4tLVxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNzMtXHQgKi9cbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjc0Olx0Y3N4ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0NBTik7XG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy03NS1cdGlmICghY3N4KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM9NTcxOD1zdGF0aWMgYm9vbCBtbHg1ZV90Y19yZXN0b3JlX3NrYl90Y19tZXRhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtbHg1X3RjX2N0X3ByaXYgKmN0X3ByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTcyMi1cdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoc2tiLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1NzIzOlx0c3RydWN0IHRjX3NrYl9leHQgKnRjX3NrYl9leHQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NzI0LVx0dTY0IGFjdF9taXNzX2Nvb2tpZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NzMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTczNDpcdFx0dGNfc2tiX2V4dCA9IHRjX3NrYl9leHRfYWxsb2Moc2tiKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU3MzU6XHRcdGlmICghdGNfc2tiX2V4dCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTczNi1cdFx0XHRXQVJOX09OKDEpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU3NDAtXHRcdGlmIChhY3RfbWlzc19jb29raWUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU3NDE6XHRcdFx0dGNfc2tiX2V4dC1cdTAwM2VhY3RfbWlzc19jb29raWUgPSBhY3RfbWlzc19jb29raWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1NzQyOlx0XHRcdHRjX3NrYl9leHQtXHUwMDNlYWN0X21pc3MgPSAxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTc0My1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU3NDQ6XHRcdFx0dGNfc2tiX2V4dC1cdTAwM2VjaGFpbiA9IGNoYWluO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTc0NS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYz0zNjY9bWN0cF9pMmNfZ2V0X3R4X2Zsb3dfc3RhdGUoc3RydWN0IG1jdHBfaTJjX2RldiAqbWlkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTM3Mi1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYzozNzM6XHRmbG93ID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9NQ1RQKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYy0zNzQtXHRpZiAoIWZsb3cpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jPTQ1ND1zdGF0aWMgdm9pZCBtY3RwX2kyY19pbnZhbGlkYXRlX3R4X2Zsb3coc3RydWN0IG1jdHBfaTJjX2RldiAqbWlkZXYsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTQ2MS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYzo0NjI6XHRmbG93ID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9NQ1RQKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYy00NjMtXHRpZiAoIWZsb3cpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTEwMz1zdGF0aWMgaW50IG5zaW1fZm9yd2FyZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKnR4X2Rldixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA2LVx0XHRcdCAgICBzdHJ1Y3QgbnNpbV9ycSAqcnEsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA3Olx0XHRcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqcHNwX2V4dClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMDgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTMtXHRcdGlmIChwc3BfZXh0KVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjExNDpcdFx0XHRfX3NrYl9leHRfcHV0KHBzcF9leHQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExNS1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTIzPXN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTI1LVx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjEyNjpcdHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0ID0gTlVMTDtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjctXHRzdHJ1Y3QgbmV0X2RldmljZSAqcGVlcl9kZXY7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ1Mj12b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDUzOnZvaWQgbnNpbV9wc3BfaGFuZGxlX2V4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tiX2V4dCAqcHNwX2V4dCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDU0LWVudW0gc2tiX2Ryb3BfcmVhc29uXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDU1PW5zaW1fZG9fcHNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1NjpcdCAgICBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zLCBzdHJ1Y3Qgc2tiX2V4dCAqKnBzcF9leHQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Ny0jZWxzZVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NjE9bnNpbV9kb19wc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDYyOlx0ICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMsIHN0cnVjdCBza2JfZXh0ICoqcHNwX2V4dClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NjMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00Njc9c3RhdGljIGlubGluZSB2b2lkXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDY4Om5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpIHt9XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDY5LSNlbmRpZlxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xMC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxMTp2b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTIte1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTEzLVx0aWYgKHBzcF9leHQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTQ6XHRcdF9fc2tiX2V4dF9zZXQoc2tiLCBTS0JfRVhUX1BTUCwgcHNwX2V4dCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUtfVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xOD1uc2ltX2RvX3BzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxOTpcdCAgICBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zLCBzdHJ1Y3Qgc2tiX2V4dCAqKnBzcF9leHQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy02OC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzo2OTpcdFx0c2tiX2V4dF9yZXNldChza2IpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTcwLVx0XHRza2ItXHUwMDNlbWFjX2xlbiA9IEVUSF9ITEVOO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuYz05Njc9c3RhdGljIHZvaWQgYXRoMTJrX2RwX2NjX2NsZWFudXAoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmMtMTAzMy1cdFx0XHRcdFx0XHQgc2tiX2NiLVx1MDAzZXBhZGRyX2V4dF9kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jOjEwMzQ6XHRcdFx0XHRcdFx0IHR4X2Rlc2NfaW5mby1cdTAwM2Vza2JfZXh0X2Rlc2MtXHUwMDNlbGVuLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jLTEwMzUtXHRcdFx0XHRcdFx0IERNQV9UT19ERVZJQ0UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jOjEwMzY6XHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueSh0eF9kZXNjX2luZm8tXHUwMDNlc2tiX2V4dF9kZXNjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuYy0xMDM3LVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg9MzQ0PXN0cnVjdCBhdGgxMmtfdHhfZGVzY19pbmZvIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmgtMzQ2LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaDozNDc6XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2V4dF9kZXNjO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oLTM0OC1cdHUzMiBkZXNjX2lkOyAvKiBDb29raWUgKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg9MzUzPXN0cnVjdCBhdGgxMmtfdHhfZGVzY19wYXJhbXMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oLTM1NC1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg6MzU1Olx0c3RydWN0IHNrX2J1ZmYgKnNrYl9leHRfZGVzYztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaC0zNTYtXHR1OCBtYWNfaWQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jPTEzMT12b2lkIGF0aDEya19kcF90eF9yZWxlYXNlX3R4YnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYy0xMzUtXHRzcGluX2xvY2tfYmgoXHUwMDI2ZHAtXHUwMDNldHhfZGVzY19sb2NrW3Bvb2xfaWRdKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYzoxMzY6XHR0eF9kZXNjLVx1MDAzZXNrYl9leHRfZGVzYyA9IE5VTEw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmMtMTM3LVx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dHhfZGVzYy1cdTAwM2VsaXN0LCBcdTAwMjZkcC1cdTAwM2V0eF9kZXNjX2ZyZWVfbGlzdFtwb29sX2lkXSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jPTIzMj12b2lkIGF0aDEya19kcF90eF9mcmVlX3R4YnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYy0yNDUtXHRcdGRtYV91bm1hcF9zaW5nbGUoZHAtXHUwMDNlZGV2LCBza2JfY2ItXHUwMDNlcGFkZHJfZXh0X2Rlc2MsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmM6MjQ2Olx0XHRcdFx0IGRlc2NfcGFyYW1zLVx1MDAzZXNrYl9leHRfZGVzYy1cdTAwM2VsZW4sIERNQV9UT19ERVZJQ0UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jOjI0NzpcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoZGVzY19wYXJhbXMtXHUwMDNlc2tiX2V4dF9kZXNjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYy0yNDgtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jPTEwNj1pbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTExOC1cdHN0cnVjdCBoYWxfdHhfbXNkdV9leHRfZGVzYyAqbXNnO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjExOTpcdHN0cnVjdCBza19idWZmICpza2JfZXh0X2Rlc2MgPSBOVUxMO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTEyMC1cdHN0cnVjdCBoYWxfc3JuZyAqdGNsX3Jpbmc7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM1OS1cdGlmIChtc2R1X2V4dF9kZXNjKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzYwOlx0XHRza2JfZXh0X2Rlc2MgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgaGFsX3R4X21zZHVfZXh0X2Rlc2MpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozNjE6XHRcdGlmICghc2tiX2V4dF9kZXNjKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMzYyLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM2NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozNjY6XHRcdHNrYl9wdXQoc2tiX2V4dF9kZXNjLCBzaXplb2Yoc3RydWN0IGhhbF90eF9tc2R1X2V4dF9kZXNjKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzY3Olx0XHRtZW1zZXQoc2tiX2V4dF9kZXNjLVx1MDAzZWRhdGEsIDAsIHNrYl9leHRfZGVzYy1cdTAwM2VsZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM2OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozNjk6XHRcdG1zZyA9IChzdHJ1Y3QgaGFsX3R4X21zZHVfZXh0X2Rlc2MgKilza2JfZXh0X2Rlc2MtXHUwMDNlZGF0YTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNzAtXHRcdGF0aDEya193aWZpN19oYWxfdHhfY21kX2V4dF9kZXNjX3NldHVwKGFiLCBtc2csIFx1MDAyNnRpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMzcyLVx0XHRpZiAoYWRkX2h0dF9tZXRhZGF0YSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjM3MzpcdFx0XHRyZXQgPSBhdGgxMmtfd2lmaTdfZHBfcHJlcGFyZV9odHRfbWV0YWRhdGEoc2tiX2V4dF9kZXNjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNzQtXHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zODAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzgxOlx0XHR0aS5wYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRwLVx1MDAzZWRldiwgc2tiX2V4dF9kZXNjLVx1MDAzZWRhdGEsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzgyOlx0XHRcdFx0XHQgIHNrYl9leHRfZGVzYy1cdTAwM2VsZW4sIERNQV9UT19ERVZJQ0UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM4My1cdFx0cmV0ID0gZG1hX21hcHBpbmdfZXJyb3IoZHAtXHUwMDNlZGV2LCB0aS5wYWRkcik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM4Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozODc6XHRcdHRpLmRhdGFfbGVuID0gc2tiX2V4dF9kZXNjLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zODgtXHRcdHRpLnR5cGUgPSBIQUxfVENMX0RFU0NfVFlQRV9FWFRfREVTQztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMzkwLVx0XHRza2JfY2ItXHUwMDNlcGFkZHJfZXh0X2Rlc2MgPSB0aS5wYWRkcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozOTE6XHRcdHR4X2Rlc2MtXHUwMDNlc2tiX2V4dF9kZXNjID0gc2tiX2V4dF9kZXNjO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM5Mi1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNDUzLVx0XHRkbWFfdW5tYXBfc2luZ2xlKGRwLVx1MDAzZWRldiwgc2tiX2NiLVx1MDAzZXBhZGRyX2V4dF9kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjQ1NDpcdFx0XHRcdCBza2JfZXh0X2Rlc2MtXHUwMDNlbGVuLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTQ1NS1cdFx0XHRcdCBETUFfVE9fREVWSUNFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy00NTYtZmFpbF9mcmVlX2V4dF9za2I6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6NDU3Olx0a2ZyZWVfc2tiKHNrYl9leHRfZGVzYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNDU4LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYz00NzY9YXRoMTJrX2RwX3R4X2h0dF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aDEya19kcCAqZHAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTUxNC1cdFx0ZG1hX3VubWFwX3NpbmdsZShkcC1cdTAwM2VkZXYsIHNrYl9jYi1cdTAwM2VwYWRkcl9leHRfZGVzYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzo1MTU6XHRcdFx0XHQgZGVzY19wYXJhbXMtXHUwMDNlc2tiX2V4dF9kZXNjLVx1MDAzZWxlbiwgRE1BX1RPX0RFVklDRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6NTE2Olx0XHRkZXZfa2ZyZWVfc2tiX2FueShkZXNjX3BhcmFtcy1cdTAwM2Vza2JfZXh0X2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTUxNy1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM9NzM3PXN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0ZV9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNzY2LVx0XHRkbWFfdW5tYXBfc2luZ2xlKGRwLVx1MDAzZWRldiwgc2tiX2NiLVx1MDAzZXBhZGRyX2V4dF9kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjc2NzpcdFx0XHRcdCBkZXNjX3BhcmFtcy1cdTAwM2Vza2JfZXh0X2Rlc2MtXHUwMDNlbGVuLCBETUFfVE9fREVWSUNFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzo3Njg6XHRcdGRldl9rZnJlZV9za2JfYW55KGRlc2NfcGFyYW1zLVx1MDAzZXNrYl9leHRfZGVzYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNzY5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYz05MTA9dm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGlvbl9oYW5kbGVyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBpbnQgcmluZ19pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtOTgxLVx0XHRkZXNjX3BhcmFtcy5za2IgPSB0eF9kZXNjLVx1MDAzZXNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzo5ODI6XHRcdGRlc2NfcGFyYW1zLnNrYl9leHRfZGVzYyA9IHR4X2Rlc2MtXHUwMDNlc2tiX2V4dF9kZXNjO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTk4My1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0xOTAyPXN0YXRpYyBib29sIG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25vX25sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE5NTQtXHRza2ItXHUwMDNlbWFyayA9IDA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxOTU1Olx0c2tiX2V4dF9yZXNldChza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTk1Ni1cdG5mX3Jlc2V0X2N0KHNrYik7XG4tLVxuZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jPTEyNj1uZXRkZXZfdHhfdCBjdm1fb2N0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmMtMzQ5LVx0c2tiX2RzdF9kcm9wKHNrYik7XG5kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmM6MzUwOlx0c2tiX2V4dF9yZXNldChza2IpO1xuZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jLTM1MS1cdG5mX3Jlc2V0X2N0KHNrYik7XG4tLVxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg9Mzk9Ym9vbCBjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oLTQwLVxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NDE6c3RhdGljIGlubGluZSBzdHJ1Y3QgY2FuX3NrYl9leHQgKmNhbl9za2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNDIte1xuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NDM6XHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeCA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9DQU4pO1xuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNDQtXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo0NTpcdC8qIHNrYl9leHRfYWRkKCkgcmV0dXJucyB1bmluaXRpYWxpemVkIHNwYWNlICovXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00Ni1cdGlmIChjc3gpXG4tLVxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNTEtXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo1MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBjYW5fc2tiX2V4dCAqY2FuX3NrYl9leHRfZmluZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNTMte1xuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NTQ6XHRyZXR1cm4gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9DQU4pO1xuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNTUtfVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTI4PW5mX2JyaWRnZV9pbmZvX2dldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMjkte1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MzA6XHRyZXR1cm4gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMzEtfVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTMzPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9icmlkZ2VfaW5mb19leGlzdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTM0LXtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjM1Olx0cmV0dXJuIHNrYl9leHRfZXhpc3Qoc2tiLCBTS0JfRVhUX0JSSURHRV9ORik7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0zNi19XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yODM9dW5pb24gYnBmX2F0dHI7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjI4NDpzdHJ1Y3Qgc2tiX2V4dDtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjg1LXN0cnVjdCB0c19jb25maWc7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yODg9c3RydWN0IG5mX2JyaWRnZV9pbmZvIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMxNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjMxODovKiBDaGFpbiBpbiB0Y19za2JfZXh0IHdpbGwgYmUgdXNlZCB0byBzaGFyZSB0aGUgdGMgY2hhaW4gd2l0aFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTktICogb3ZzIHJlY2lyY19pZC4gSXQgd2lsbCBiZSBzZXQgdG8gdGhlIGN1cnJlbnQgY2hhaW4gYnkgdGNcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMyMS0gKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzIyOnN0cnVjdCB0Y19za2JfZXh0IHtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzIzLVx0dW5pb24ge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NzI4PWVudW0gc2tiX3RzdGFtcF90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTgzMi0gKlx0XHRwYWdlX3Bvb2wgc3VwcG9ydCBvbiBkcml2ZXIpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjgzMzogKlx0QGFjdGl2ZV9leHRlbnNpb25zOiBhY3RpdmUgZXh0ZW5zaW9ucyAoc2tiX2V4dF9pZCB0eXBlcylcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtODM0LSAqXHRAbmRpc2Nfbm9kZXR5cGU6IHJvdXRlciB0eXBlIChmcm9tIGxpbmsgbGF5ZXIpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTEwMC1cdC8qIG9ubHkgdXNhYmxlIGFmdGVyIGNoZWNraW5nIC1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyAhPSAwICovXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjExMDE6XHRzdHJ1Y3Qgc2tiX2V4dFx0XHQqZXh0ZW5zaW9ucztcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTEwMi0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyOTM9aW50IHNrYl9tcGxzX2RlY190dGwoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyOTQ6c3RydWN0IHNrX2J1ZmYgKnBza2JfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgdG9fY29weSxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI5NS1cdFx0XHQgICAgIGdmcF90IGdmcCk7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDA0PXN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X25mY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgbG9uZyBuZmN0KVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTAyNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwMjg6I2RlZmluZSBTS0JfRVhUX1hfVENcdFx0WChUQ19TS0JfRVhULCBzdHJ1Y3QgdGNfc2tiX2V4dClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTAyOS0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA0NS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNDY6I2RlZmluZSBTS0JfRVhUX1hfUFNQXHRcdFgoU0tCX0VYVF9QU1AsIHN0cnVjdCBwc3Bfc2tiX2V4dClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA0Ny0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA1MS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQ0FOKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDUyOiNkZWZpbmUgU0tCX0VYVF9YX0NBTlx0XHRYKFNLQl9FWFRfQ0FOLCBzdHJ1Y3QgY2FuX3NrYl9leHQpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTMtI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNjUtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNjY6ZW51bSBza2JfZXh0X2lkIHtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA2Ny0jZGVmaW5lIFgoaWQsIHR5cGUpXHRpZCxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNzItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNzM6ZXh0ZXJuIGNvbnN0IHU4IHNrYl9leHRfb2Zmc2V0W1NLQl9FWFRfTlVNXTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA3NC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA3NS0vKipcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA3NjogKlx0c3RydWN0IHNrYl9leHQgLSBza19idWZmIGV4dGVuc2lvbnNcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA3Ny0gKlx0QHJlZmNudDogMSBvbiBhbGxvY2F0aW9uLCBkZWFsbG9jYXRlZCBvbiAwXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDgxLSAqXHRFYWNoIGV4dGVuc2lvbiBpZCBvY2N1cGllcyBhIGZpeGVkIHNsb3Qgd2l0aGluIEBkYXRhLCBsb2NhdGVkIGF0XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwODI6ICpcdHNrYl9leHRfb2Zmc2V0W2lkXSBjaHVua3Mgb2YgOCBieXRlcy4gU3RvcmluZyBvZmZzZXRzL2xlbmd0aHNcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA4My0gKlx0aW4gOC1ieXRlIGNodW5rcyBhbGxvd3MgJiMzOTt1OCYjMzk7IHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA4NS0gKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA4NjpzdHJ1Y3Qgc2tiX2V4dCB7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwODctXHRyZWZjb3VudF90IHJlZmNudDtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTEtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTI6c3RydWN0IHNrYl9leHQgKl9fc2tiX2V4dF9hbGxvYyhnZnBfdCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTM6dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTQ6XHRcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5NTp2b2lkICpza2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk2OnZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk3OnZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5OC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5OTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEwMC17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMDEtXHRpZiAoc2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTAyOlx0XHRfX3NrYl9leHRfcHV0KHNrYi1cdTAwM2VleHRlbnNpb25zKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEwMy19XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMDQtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMDU6c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX2V4dF9jb3B5KHN0cnVjdCBza19idWZmICpkc3QsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMDYtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBza19idWZmICpzcmMpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTEwLVx0aWYgKHNyYy1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucykge1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTExOlx0XHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc3JjLVx1MDAzZWV4dGVuc2lvbnM7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMTItXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTE3LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTE4OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYylcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTExOS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjA6XHRza2JfZXh0X3B1dChkc3QpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTIxOlx0X19za2JfZXh0X2NvcHkoZHN0LCBzcmMpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTIyLX1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyMy1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEyNDpzdGF0aWMgaW5saW5lIGJvb2wgX19za2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza2JfZXh0ICpleHQsIGVudW0gc2tiX2V4dF9pZCBpKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTI1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjgtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjk6c3RhdGljIGlubGluZSBib29sIHNrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTMwLXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzMtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMzQ6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzNS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMzY6XHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEzNzpcdFx0X19za2JfZXh0X2RlbChza2IsIGlkKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzOC19XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzktXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNDA6c3RhdGljIGlubGluZSB2b2lkICpza2JfZXh0X2ZpbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTQxLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE0MjpcdGlmIChza2JfZXh0X2V4aXN0KHNrYiwgaWQpKSB7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNDM6XHRcdHN0cnVjdCBza2JfZXh0ICpleHQgPSBza2ItXHUwMDNlZXh0ZW5zaW9ucztcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE0NC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE0NTpcdFx0cmV0dXJuICh2b2lkICopZXh0ICYjNDM7IChza2JfZXh0X29mZnNldFtpZF0gXHUwMDNjXHUwMDNjIDMpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTQ2LVx0fVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE1MC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE1MTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTUyLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE1My1cdGlmICh1bmxpa2VseShza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpKSB7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNTQ6XHRcdF9fc2tiX2V4dF9wdXQoc2tiLVx1MDAzZWV4dGVuc2lvbnMpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTU1LVx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPSAwO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTE1OT1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2hhc19leHRlbnNpb25zKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTYzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNjQ6c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dCkge31cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE2NTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikge31cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE2NjpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7fVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTY3OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdW51c2VkKSB7fVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTY4OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnMpIHt9XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNjk6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcykge31cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE3MC1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2hhc19leHRlbnNpb25zKHN0cnVjdCBza19idWZmICpza2IpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MjM2PXN0YXRpYyBpbmxpbmUgaW50IHNlY3BhdGhfZXhpc3RzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MjM4LSNpZmRlZiBDT05GSUdfWEZSTVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MjM5Olx0cmV0dXJuIHNrYl9leHRfZXhpc3Qoc2tiLCBTS0JfRVhUX1NFQ19QQVRIKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTI0MC0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTI5ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBzZWNfcGF0aCAqc2tiX3NlY19wYXRoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01Mjk2LSNpZmRlZiBDT05GSUdfWEZSTVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1Mjk3Olx0cmV0dXJuIHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfU0VDX1BBVEgpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01Mjk4LSNlbHNlXG4tLVxuaW5jbHVkZS9uZXQvY2FuLmgtMTQtLyoqXG5pbmNsdWRlL25ldC9jYW4uaDoxNTogKiBzdHJ1Y3QgY2FuX3NrYl9leHQgLSBza2IgZXh0ZW5zaW9ucyBmb3IgQ0FOIHNwZWNpZmljIGNvbnRlbnRcbmluY2x1ZGUvbmV0L2Nhbi5oLTE2LSAqIEBjYW5faWlmOiBpZmluZGV4IG9mIHRoZSBmaXJzdCBpbnRlcmZhY2UgdGhlIENBTiBmcmFtZSBhcHBlYXJlZCBvblxuLS1cbmluY2x1ZGUvbmV0L2Nhbi5oLTIwLSAqL1xuaW5jbHVkZS9uZXQvY2FuLmg6MjE6c3RydWN0IGNhbl9za2JfZXh0IHtcbmluY2x1ZGUvbmV0L2Nhbi5oLTIyLVx0aW50XHRjYW5faWlmO1xuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmg9MTYwPXZvaWQgbXB0Y3BfZGlhZ19maWxsX2luZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IG1wdGNwX2luZm8gKmluZm8pO1xuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMTY0LSAqL1xuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNjU6c3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3NrYl9leHRfbW92ZShzdHJ1Y3Qgc2tfYnVmZiAqdG8sXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE2Ni1cdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpmcm9tKVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNjcte1xuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNjg6XHRpZiAoIXNrYl9leHRfZXhpc3QoZnJvbSwgU0tCX0VYVF9NUFRDUCkpXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE2OS1cdFx0cmV0dXJuO1xuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMTcxLVx0aWYgKFdBUk5fT05fT05DRSh0by1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucykpXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE3MjpcdFx0c2tiX2V4dF9wdXQodG8pO1xuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNzMtXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNzgtXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE3OTpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc2tiX2V4dF9jb3B5KHN0cnVjdCBza19idWZmICp0byxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTgwLVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xODMtXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE4NDpcdGZyb21fZXh0ID0gc2tiX2V4dF9maW5kKGZyb20sIFNLQl9FWFRfTVBUQ1ApO1xuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xODUtXHRpZiAoIWZyb21fZXh0KVxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMTg4LVx0ZnJvbV9leHQtXHUwMDNlZnJvemVuID0gMTtcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTg5Olx0c2tiX2V4dF9jb3B5KHRvLCBmcm9tKTtcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTkwLX1cbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oPTIwOD1zdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3Bfc2tiX2Nhbl9jb2xsYXBzZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqdG8sXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yMTAte1xuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyMTE6XHRyZXR1cm4gbXB0Y3BfZXh0X21hdGNoZXMoc2tiX2V4dF9maW5kKHRvLCBTS0JfRVhUX01QVENQKSxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjEyOlx0XHRcdFx0IHNrYl9leHRfZmluZChmcm9tLCBTS0JfRVhUX01QVENQKSk7XG5pbmNsdWRlL25ldC9tcHRjcC5oLTIxMy19XG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0yMjU9c3RhdGljIGlubGluZSBfX2JlMzIgbXB0Y3BfcmVzZXRfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9tcHRjcC5oLTIyNi17XG5pbmNsdWRlL25ldC9tcHRjcC5oOjIyNzpcdGlmIChza2JfZXh0X2V4aXN0KHNrYiwgU0tCX0VYVF9NUFRDUCkpXG5pbmNsdWRlL25ldC9tcHRjcC5oLTIyOC1cdFx0cmV0dXJuIG1wdGNwX2dldF9yZXNldF9vcHRpb24oc2tiKTtcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI2OT1zdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzQtXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI3NTpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc2tiX2V4dF9tb3ZlKHN0cnVjdCBza19idWZmICp0byxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjc2LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzktXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI4MDpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc2tiX2V4dF9jb3B5KHN0cnVjdCBza19idWZmICp0byxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjgxLVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oPTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZV9hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC0xMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaDoxMjpcdHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqYiA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEzLVxuLS1cbmluY2x1ZGUvbmV0L3BrdF9jbHMuaD03Nzc9c3RhdGljIGlubGluZSB2b2lkIHRjZl9wcm90b191cGRhdGVfdXNlc3coc3RydWN0IHRjZl9wcm90byAqdHAsIHUzMiBmbGFncylcbi0tXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNzg2LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVClcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDo3ODc6c3RhdGljIGlubGluZSBzdHJ1Y3QgdGNfc2tiX2V4dCAqdGNfc2tiX2V4dF9hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTc4OC17XG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6Nzg5Olx0c3RydWN0IHRjX3NrYl9leHQgKnRjX3NrYl9leHQgPSBza2JfZXh0X2FkZChza2IsIFRDX1NLQl9FWFQpO1xuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTc5MC1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUxNwoJCQkJCQkJb3V0cHV0OiAzMzEKCQkJCQkJCXRob3VnaHRzOiA0MzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBza2JfZXh0IFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHByZXNlbnRlZCB3aXRoIHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyByZWZhY3RvcmluZyB0aGUgYHNrYl9leHRgIGFsbG9jYXRpb24gYW5kIGxheW91dC4gSXQmIzM5O3MgbW92aW5nIGZyb20gYSB2YXJpYWJsZS1zaXplZCBzY2hlbWUgdG8gYSBmaXhlZC1zaXplIHN0cnVjdHVyZSAoYHN0cnVjdCBza2JfZXh0X2xheW91dGApLiBNeSBpbml0aWFsIHJlYWN0aW9uPyBJdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSwgYW5kIEkgbmVlZCB0byBiZSAqdGhvcm91Z2gqLiBUaGUgcHJvbXB0IGlzIGFza2luZyBhYm91dCBLTVNBTi4gUmlnaHQuIFRoZSBjZW50cmFsIHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYSAqbmV3KiBjaGFuY2Ugb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3Igb3RoZXJ3aXNlLCBhIHNlY3VyaXR5IGxlYWs/CgpGaXJzdCwgSSBpZGVudGlmeSBhbGwgdGhlIGV4dGVuc2lvbnMgdGhhdCB1c2UgYHNrYl9leHRgLiAgSSBzZWUgYSB3aG9sZSBob3N0IG9mIHRoZW06IENBTiwgQnJpZGdlIE5ldGZpbHRlciwgVEMsIE1QVENQLCBNQ1RQLCBQU1AsIGFuZCBJUHNlYy4gR29vZCwgSSBrbm93IHRoZSBwbGF5ZXJzLiBOZXh0LCBJIGNvbnNpZGVyIGhvdyB0aGVzZSBhcmUgdXNlZCBpbiByZWxhdGlvbiB0byB1c2Vyc3BhY2UuICpDcnVjaWFsbHkqLCBub25lIG9mIHRoZXNlIHN0cnVjdHMgYXJlIGRpcmVjdGx5ICpjb3BpZWQqIHRvIHVzZXJzcGFjZS4gVGhleSYjMzk7cmUgaW50ZXJuYWwga2VybmVsIG1ldGFkYXRhLiBUaGF0IGltbWVkaWF0ZWx5IGxvd2VycyBteSBhbnhpZXR5IGxldmVsIGFib3V0IHBvdGVudGlhbCBpbmZvLWxlYWtzLCBidXQgdGhlIGdhbWUgaXMgbm90IG92ZXIuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aHJvdWdoIHRoZSBhbGxvY2F0aW9uIGFuZCBjb3B5IGNvZGUuIFRoZSBjb3JlIGNvbmNlcm4gaGVyZSBpcyBgc2tiX2V4dF9tYXliZV9jb3dgIHdoaWNoIGhhbmRsZXMgY29weWluZywgcHJlc3VtYWJseSBpbmNsdWRpbmcgcGFkZGluZy4gVGhhdCYjMzk7cyB0aGUga2V5LiBPbGQgY29kZSwgbmV3IGNvZGUuLi5JIG5lZWQgdG8gY29tcGFyZS4gSW4gdGhlIG5ldyBjb2RlLCBJIHNlZSB0aGUgY2hhbmdlIHRvIGhvdyB3ZSBjb3B5IG5vdywgYml0d2lzZSwgZGVwZW5kZW50IG9uIHdoZXRoZXIgdGhlIGV4dGVuc2lvbiBpcyBhY3RpdmUuIFRoZSBvbGQgY29kZSBqdXN0IGBtZW1jcHlg4oCZZCB0aGUgd2hvbGUgYmxvY2suIElzICp0aGF0KiBhbiBpc3N1ZT8gSSBzZWUgdGhlIGNvZGUgYW5kIEkgY2FuIHJlYXNvbiB0aGUgbWVtY3B5LCBhbmQgcGFkZGluZyBpcyBub3QgdXNlZCBpbiBhIGJyYW5jaC4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBhZGRpbmcgbm93LCByZW1lbWJlcmluZyBgc2tiX2V4dF90eXBlX2xlbltpXSAqIFNLQl9FWFRfQUxJR05fVkFMVUVgLiBJZiB0aGVyZeKAmXMgdW5pbml0aWFsaXplZCBwYWRkaW5nICppbnNpZGUqIHRoZXNlIGV4dGVuc2lvbiBzdHJ1Y3RzLCBjb3VsZCBpdCBsZWFrIG91dD8gQnV0IHdhaXQsIEkgcmVjYWxsIHRoZXNlIHN0cnVjdHMgYXJlbuKAmXQgKmRpcmVjdGx5KiBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHRyYW5zbWl0dGVkIGFjcm9zcyB0aGUgbmV0d29yaywgdGhleeKAmXJlIGZvciBpbnRlcm5hbCB1c2UuIFRoaXMgc2hvdWxkIGJlIG9rYXksIGJ1dCBJIHdpbGwgY2hlY2sgb25lIHNwZWNpZmljIGFyZWHigKYKCk9rYXksIG5vdyBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBtcHRjcF9leHRgLiBDb3VsZCAqaXQqIGJlIGxlYWtlZD8gSXQgKmlzKiB1c2VkIGZvciBidWlsZGluZyBUQ1Agb3B0aW9ucy4uLiAqdGhhdCYjMzk7cyogc29tZXRoaW5nIHRoYXQgZ29lcyBvbiB0aGUgbmV0d29yayEgIEkgbmVlZCB0byBjaGVjayAqZXZlcnkqIGZpZWxkIGluIHRoYXQgc3RydWN0LCBhbmQgaG93IGl0IGlzIHVzZWQgdG8gYnVpbGQgVENQIG9wdGlvbnMuIElmIGFuIHVuaW5pdGlhbGl6ZWQgZmllbGQgaXMgKnVzZWQqIHRvIGNvbnN0cnVjdCBhIFRDUCBvcHRpb24sIHRoYXQgaXMgYSBjbGVhciBsZWFrIGFuZCBJIHdvdWxkIGhhdmUgYSBodWdlIHByb2JsZW0uIEJ1dCwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGNoYW5nZSBgbXB0Y3BfZXh0YCBpbml0aWFsaXphdGlvbiwgaXQgKm9ubHkqIGNoYW5nZXMgdGhlICpsYXlvdXQqIG9mIHRoZSBnZW5lcmljIGBza2JfZXh0YC4gVGhlIHBhdGNoIHNob3VsZG4mIzM5O3QgY3JlYXRlIGEgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGQgdGhhdCBwcmV2aW91c2x5IGRpZCBub3QgZXhpc3QuIEkmIzM5O20gc2F0aXNmaWVkIGZvciBub3csIGJ1dCBJIHdpbGwgY29tZSBiYWNrIHRvIHRoaXMuCgpJJiMzOTttIG5vdyB0aGlua2luZyBhYm91dCB3aGVyZSB0aGUgYWxsb2NhdGlvbiBpcyBkaWZmZXJlbnQuIFdpdGggdGhlIG9sZCwgdmFyaWFibGUtc2l6ZWQgc2NoZW1lLCBhbiBhbGxvY2F0aW9uIGZvciBhIG5ldyBleHRlbnNpb24gd291bGQgbWFrZSBpdCBncm93LiBUaGUgbmV3IGZpeGVkLXNpemUgbGF5b3V0IHVzZXMgYSBzbGFiIGNhY2hlLCBgc2tidWZmX2V4dF9jYWNoZWAuIGBfX3NrYl9leHRfYWxsb2NgIGRvZXMgKm5vdCogemVybyB0aGUgbWVtb3J5LCAqZXhjZXB0KiB0aGUgaGVhZGVyIGFuZCB0aGUgcmVmY291bnQuIEkgc2VlIHRoYXQgYHNrYl9leHRfYWRkYCB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhpcyBzcGFjZSwgYW5kIHRoZW4gdGhlIGNhbGxlciB3aWxsIGluaXRpYWxpemUgaXQuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBob3cgaXQgd29ya2VkIGJlZm9yZS4gVGhlIGNhbGxlcnMgYXJlICpzdXBwb3NlZCogdG8gaW5pdGlhbGl6ZSwgYW5kIHRoZSAqdW5pbml0aWFsaXplZCogcGFydHMgYXJlIHByb3RlY3RlZCBieSB0aGUgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0LiBTbyBldmVuIGlmIGEgY2FsbGVyICpkb2VzbiYjMzk7dCogaW5pdGlhbGl6ZSBpdCwgdGhlcmUmIzM5O3Mgbm8gbGVhay4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBhYm91dCB0aGlzLgoKSSYjMzk7bSBsb29raW5nIGF0IGBfX3NrYl9leHRfc2V0YCBhbmQgYHNrYl9leHRfbWF5YmVfY293YCwgb2xkIGFuZCBuZXcgY29kZSwgY29tcGFyaW5nLCBsaW5lIGJ5IGxpbmUuIEFtIEkgbWlzc2luZyBhbnl0aGluZz8gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgKm5ldmVyKiBhY2Nlc3NlZCwgYmVjYXVzZSBhbnkgYWNjZXNzIHRvIGFuIGV4dGVuc2lvbiBnb2VzIHRocm91Z2ggYHNrYl9leHRfZmluZGAsIHdoaWNoIGNoZWNrcyBgcHJlc2VudF9leHRlbnNpb25zYC4gQSAqbWlzc2luZyogZXh0ZW5zaW9uIGlzIGhhbmRsZWQgY29ycmVjdGx5IGFuZCBpcyBqdXN0IG5vdCBpbmNsdWRlZCBpbiB0aGUgbG9va3VwLiAgU28gdGhlIHVuaW5pdGlhbGl6ZWQgc2xvdHMgYXJlIG5ldmVyIHVzZWQuCgpJIGNpcmNsZSBiYWNrIHRvIHRoZSBtZW1vcnkgY29waWVzIGFnYWluLCBzcGVjaWZpY2FsbHkgYHNrYl9leHRfbWF5YmVfY293YC4gIEkmIzM5O20gbm93IHNhdGlzZmllZC4gSW4gdGhlIG9sZCBjb2RlLCBgbWVtY3B5YCBjb3BpZWQgdGhlIGVudGlyZSBjaHVuay4gSW4gdGhlIG5ldyBjb2RlLCBpdCBjb3BpZXMgdGhlIGhlYWRlciAqYW5kKiBlYWNoIHByZXNlbnQgZXh0ZW5zaW9uLCBidXQgZWFjaCBuZXcgYWxsb2NhdGlvbiBpcyBzdGlsbCB0aGUgKnNhbWUgc2l6ZSouIFRoZSBlbXB0eSBzcGFjZSBzdGF5cyB0aGF0IHdheSBhbmQgaXMgbm90IGEgc2VjdXJpdHkgcmlzay4KCkxldCYjMzk7cyBub3QgZm9yZ2V0IHRoZSBkZXRhaWxzISBgc2tiX2V4dF9vZmZzZXRgLiAgVGhlIGxheW91dCBpcyBub3cgZml4ZWQuIElmIHRoaXMgaXMgKmluY29ycmVjdCogdGhhdCBsZWFkcyB0byBPT0IuIEJ1dCwgaG93IGFyZSB0aGVzZSBvZmZzZXRzIGNhbGN1bGF0ZWQ/IE9rYXksIGl0JiMzOTtzCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBhbGxvY2F0aW9uIGFuZCBsYXlvdXQgb2YgYHNrYl9leHRgIChza19idWZmIGV4dGVuc2lvbnMpIGZyb20gYSB2YXJpYWJsZS1zaXplZCwgZHluYW1pY2FsbHkgYXBwZW5kZWQgbGF5b3V0IHRvIGEgZml4ZWQtc2l6ZWQgbGF5b3V0IChgc3RydWN0IHNrYl9leHRfbGF5b3V0YCkgd2l0aCBzdGF0aWMgb2Zmc2V0cyBmb3IgZWFjaCBleHRlbnNpb24gdHlwZS5cblxuMS4gVGhlIG5ldyBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGEgc2xhYiBjYWNoZSwgYW5kIGxpa2UgdGhlIG9sZCBjb2RlLCBvbmx5IHRoZSBoZWFkZXIgKGByZWZjbnRgIGFuZCBgcHJlc2VudF9leHRlbnNpb25zYCkgaXMgaW5pdGlhbGl6ZWQuIFRoZSBleHRlbnNpb24gZGF0YSBzbG90cyByZW1haW4gdW5pbml0aWFsaXplZCB1bnRpbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci5cbjIuIFRoZSB1bmluaXRpYWxpemVkIHNsb3RzIGFyZSBzdHJpY3RseSBndWFyZGVkIGJ5IHRoZSBgcHJlc2VudF9leHRlbnNpb25zYCBiaXRtYXAuIFRoZXkgY2Fubm90IGJlIGFjY2Vzc2VkIHVubGVzcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0LCB3aGljaCBvbmx5IGhhcHBlbnMgd2hlbiBhbiBleHRlbnNpb24gaXMgcHJvcGVybHkgYWRkZWQgYW5kIGluaXRpYWxpemVkLlxuMy4gV2hlbiBjb3B5aW5nIGFuIGV4dGVuc2lvbiAoYHNrYl9leHRfbWF5YmVfY293YCksIHRoZSBjb2RlIGNvcGllcyB0aGUgaGVhZGVyIGFuZCBvbmx5IHRoZSBwcmVzZW50IGV4dGVuc2lvbnMsIGxlYXZpbmcgdGhlIHVudXNlZCBzbG90cyB1bmluaXRpYWxpemVkLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgYmVoYXZpb3IgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG40LiBgc2tiX2V4dGAgYW5kIGl0cyBleHRlbnNpb25zIGFyZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyB1c2VkIGZvciBtZXRhZGF0YSAoZS5nLiwgSVBzZWMsIFRDLCBicmlkZ2UgbmV0ZmlsdGVyKSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIGluY29ycmVjdCBvZmZzZXQgY2FsY3VsYXRpb25zIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIGxheW91dCBvZiBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykgZnJvbSBhIHZhcmlhYmxlLXNpemVkLCBkeW5hbWljYWxseSBhcHBlbmRlZCBsYXlvdXQgdG8gYSBmaXhlZC1zaXplZCBsYXlvdXQgKGBzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXRgKSB3aXRoIHN0YXRpYyBvZmZzZXRzIGZvciBlYWNoIGV4dGVuc2lvbiB0eXBlLlxuXG4xLiBUaGUgbmV3IGBza2JfZXh0X2xheW91dGAgaXMgYWxsb2NhdGVkIGZyb20gYSBzbGFiIGNhY2hlLCBhbmQgbGlrZSB0aGUgb2xkIGNvZGUsIG9ubHkgdGhlIGhlYWRlciAoYHJlZmNudGAgYW5kIGBwcmVzZW50X2V4dGVuc2lvbnNgKSBpcyBpbml0aWFsaXplZC4gVGhlIGV4dGVuc2lvbiBkYXRhIHNsb3RzIHJlbWFpbiB1bmluaXRpYWxpemVkIHVudGlsIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVyLlxuMi4gVGhlIHVuaW5pdGlhbGl6ZWQgc2xvdHMgYXJlIHN0cmljdGx5IGd1YXJkZWQgYnkgdGhlIGBwcmVzZW50X2V4dGVuc2lvbnNgIGJpdG1hcC4gVGhleSBjYW5ub3QgYmUgYWNjZXNzZWQgdW5sZXNzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpcyBzZXQsIHdoaWNoIG9ubHkgaGFwcGVucyB3aGVuIGFuIGV4dGVuc2lvbiBpcyBwcm9wZXJseSBhZGRlZCBhbmQgaW5pdGlhbGl6ZWQuXG4zLiBXaGVuIGNvcHlpbmcgYW4gZXh0ZW5zaW9uIChgc2tiX2V4dF9tYXliZV9jb3dgKSwgdGhlIGNvZGUgY29waWVzIHRoZSBoZWFkZXIgYW5kIG9ubHkgdGhlIHByZXNlbnQgZXh0ZW5zaW9ucywgbGVhdmluZyB0aGUgdW51c2VkIHNsb3RzIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIG9sZCBiZWhhdmlvciBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cbjQuIGBza2JfZXh0YCBhbmQgaXRzIGV4dGVuc2lvbnMgYXJlIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIHVzZWQgZm9yIG1ldGFkYXRhIChlLmcuLCBJUHNlYywgVEMsIGJyaWRnZSBuZXRmaWx0ZXIpIGFuZCBhcmUgbm90IGNvcGllZCB0byB1c2Vyc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIGluZm8tbGVha3MuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgaW5jb3JyZWN0IG9mZnNldCBjYWxjdWxhdGlvbnMgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTc6MjQuNTE5NDUzNTY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyNTc5MDQ2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIkJSSURHRV9ORVRGSUxURVJcIixcbiAgICBcIkNBTlwiLFxuICAgIFwiTUNUUFwiLFxuICAgIFwiSTJDXCIsXG4gICAgXCJJMkNfU0xBVkVcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX0kyQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTVBUQ1BcIixcbiAgICBcIklORVRfUFNQXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX1RDX1NLQl9FWFRcIixcbiAgICBcIlhGUk1fVVNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9leHRfYWRkXCIsXG4gICAgXCJfX3NrYl9leHRfc2V0XCIsXG4gICAgXCJfX3NrYl9leHRfYWxsb2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbGF5b3V0IG9mIGBza2JfZXh0YCAoc2tfYnVmZiBleHRlbnNpb25zKSBmcm9tIGEgdmFyaWFibGUtc2l6ZWQsIGR5bmFtaWNhbGx5IGFwcGVuZGVkIGxheW91dCB0byBhIGZpeGVkLXNpemVkIGxheW91dCAoYHN0cnVjdCBza2JfZXh0X2xheW91dGApIHdpdGggc3RhdGljIG9mZnNldHMgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGUuXFxuXFxuMS4gVGhlIG5ldyBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGEgc2xhYiBjYWNoZSwgYW5kIGxpa2UgdGhlIG9sZCBjb2RlLCBvbmx5IHRoZSBoZWFkZXIgKGByZWZjbnRgIGFuZCBgcHJlc2VudF9leHRlbnNpb25zYCkgaXMgaW5pdGlhbGl6ZWQuIFRoZSBleHRlbnNpb24gZGF0YSBzbG90cyByZW1haW4gdW5pbml0aWFsaXplZCB1bnRpbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci5cXG4yLiBUaGUgdW5pbml0aWFsaXplZCBzbG90cyBhcmUgc3RyaWN0bHkgZ3VhcmRlZCBieSB0aGUgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0bWFwLiBUaGV5IGNhbm5vdCBiZSBhY2Nlc3NlZCB1bmxlc3MgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGlzIHNldCwgd2hpY2ggb25seSBoYXBwZW5zIHdoZW4gYW4gZXh0ZW5zaW9uIGlzIHByb3Blcmx5IGFkZGVkIGFuZCBpbml0aWFsaXplZC5cXG4zLiBXaGVuIGNvcHlpbmcgYW4gZXh0ZW5zaW9uIChgc2tiX2V4dF9tYXliZV9jb3dgKSwgdGhlIGNvZGUgY29waWVzIHRoZSBoZWFkZXIgYW5kIG9ubHkgdGhlIHByZXNlbnQgZXh0ZW5zaW9ucywgbGVhdmluZyB0aGUgdW51c2VkIHNsb3RzIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIG9sZCBiZWhhdmlvciBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cXG40LiBgc2tiX2V4dGAgYW5kIGl0cyBleHRlbnNpb25zIGFyZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyB1c2VkIGZvciBtZXRhZGF0YSAoZS5nLiwgSVBzZWMsIFRDLCBicmlkZ2UgbmV0ZmlsdGVyKSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgaW5jb3JyZWN0IG9mZnNldCBjYWxjdWxhdGlvbnMgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykuIEl0IHJlcGxhY2VzIGR5bmFtaWMgb2Zmc2V0cyB3aXRoIGNvbXBpbGUtdGltZSBmaXhlZCBvZmZzZXRzIGFuZCB1c2VzIGEgYml0bWFwIHRvIHRyYWNrIHByZXNlbnQgZXh0ZW5zaW9ucy4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBleHRlbnNpb25zIGxpa2UgSVBzZWMsIEJyaWRnZSBOZXRmaWx0ZXIsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOIGFyZSBhdHRhY2hlZCB0byBzb2NrZXQgYnVmZmVycy4gSXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgbWVtb3J5IGxheW91dCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU3OjI0LjUxOTQ1ODkzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzODI5ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDhjNmM0MDNmODZmMWFiYTA2YzNiNDkxMmIzMDlhYzM1ZjMzY2VlY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxNjo1NzoyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbmluZGV4IDk1MTg0MTgzMTgwZjYuLjVhNTE0M2U0N2IzMDIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG5AQCAtNTAxMSw0NSArNTAxMSw4MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9uZmN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGxvbmcgbmZjdClcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19TS0JfRVhURU5TSU9OU1xcbi1lbnVtIHNrYl9leHRfaWQge1xcbitcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuLVxcdFNLQl9FWFRfQlJJREdFX05GLFxcbisjZGVmaW5lIFNLQl9FWFRfWF9CUklER0VfTkZcXHRYKFNLQl9FWFRfQlJJREdFX05GLCBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pXFxuKyNlbHNlXFxuKyNkZWZpbmUgU0tCX0VYVF9YX0JSSURHRV9ORlxcbiAjZW5kaWZcXG4tI2lmZGVmIENPTkZJR19YRlJNXFxuLVxcdFNLQl9FWFRfU0VDX1BBVEgsXFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfWEZSTSlcXG4rI2RlZmluZSBTS0JfRVhUX1hfU0VDX1BBVEhcXHRYKFNLQl9FWFRfU0VDX1BBVEgsIHN0cnVjdCBzZWNfcGF0aClcXG4rI2Vsc2VcXG4rI2RlZmluZSBTS0JfRVhUX1hfU0VDX1BBVEhcXG4gI2VuZGlmXFxuK1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpXFxuLVxcdFRDX1NLQl9FWFQsXFxuKyNkZWZpbmUgU0tCX0VYVF9YX1RDXFx0XFx0WChUQ19TS0JfRVhULCBzdHJ1Y3QgdGNfc2tiX2V4dClcXG4rI2Vsc2VcXG4rI2RlZmluZSBTS0JfRVhUX1hfVENcXG4gI2VuZGlmXFxuK1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuLVxcdFNLQl9FWFRfTVBUQ1AsXFxuKyNkZWZpbmUgU0tCX0VYVF9YX01QVENQXFx0XFx0WChTS0JfRVhUX01QVENQLCBzdHJ1Y3QgbXB0Y3BfZXh0KVxcbisjZWxzZVxcbisjZGVmaW5lIFNLQl9FWFRfWF9NUFRDUFxcbiAjZW5kaWZcXG4rXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX0ZMT1dTKVxcbi1cXHRTS0JfRVhUX01DVFAsXFxuKyNkZWZpbmUgU0tCX0VYVF9YX01DVFBcXHRcXHRYKFNLQl9FWFRfTUNUUCwgc3RydWN0IG1jdHBfZmxvdylcXG4rI2Vsc2VcXG4rI2RlZmluZSBTS0JfRVhUX1hfTUNUUFxcbiAjZW5kaWZcXG4rXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG4tXFx0U0tCX0VYVF9QU1AsXFxuKyNkZWZpbmUgU0tCX0VYVF9YX1BTUFxcdFxcdFgoU0tCX0VYVF9QU1AsIHN0cnVjdCBwc3Bfc2tiX2V4dClcXG4rI2Vsc2VcXG4rI2RlZmluZSBTS0JfRVhUX1hfUFNQXFxuICNlbmRpZlxcbitcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTilcXG4tXFx0U0tCX0VYVF9DQU4sXFxuKyNkZWZpbmUgU0tCX0VYVF9YX0NBTlxcdFxcdFgoU0tCX0VYVF9DQU4sIHN0cnVjdCBjYW5fc2tiX2V4dClcXG4rI2Vsc2VcXG4rI2RlZmluZSBTS0JfRVhUX1hfQ0FOXFxuICNlbmRpZlxcbi1cXHRTS0JfRVhUX05VTSwgLyogbXVzdCBiZSBsYXN0ICovXFxuK1xcbisjZGVmaW5lIFNLQl9FWFRfRk9SRUFDSChYKVxcdFxcXFxcXG4rXFx0U0tCX0VYVF9YX0JSSURHRV9ORlxcdFxcXFxcXG4rXFx0U0tCX0VYVF9YX1NFQ19QQVRIXFx0XFxcXFxcbitcXHRTS0JfRVhUX1hfVENcXHRcXHRcXFxcXFxuK1xcdFNLQl9FWFRfWF9NUFRDUFxcdFxcdFxcXFxcXG4rXFx0U0tCX0VYVF9YX01DVFBcXHRcXHRcXFxcXFxuK1xcdFNLQl9FWFRfWF9QU1BcXHRcXHRcXFxcXFxuK1xcdFNLQl9FWFRfWF9DQU5cXG4rXFxuK2VudW0gc2tiX2V4dF9pZCB7XFxuKyNkZWZpbmUgWChpZCwgdHlwZSlcXHRpZCxcXG4rXFx0U0tCX0VYVF9GT1JFQUNIKFgpXFxuKyN1bmRlZiBYXFxuK1xcdFNLQl9FWFRfTlVNLFxcbiB9O1xcbiBcXG4rZXh0ZXJuIGNvbnN0IHU4IHNrYl9leHRfb2Zmc2V0W1NLQl9FWFRfTlVNXTtcXG4rXFxuIC8qKlxcbiAgKlxcdHN0cnVjdCBza2JfZXh0IC0gc2tfYnVmZiBleHRlbnNpb25zXFxuICAqXFx0QHJlZmNudDogMSBvbiBhbGxvY2F0aW9uLCBkZWFsbG9jYXRlZCBvbiAwXFxuLSAqXFx0QG9mZnNldDogb2Zmc2V0IHRvIGFkZCB0byBAZGF0YSB0byBvYnRhaW4gZXh0ZW5zaW9uIGFkZHJlc3NcXG4tICpcXHRAY2h1bmtzOiBzaXplIGN1cnJlbnRseSBhbGxvY2F0ZWQsIHN0b3JlZCBpbiBTS0JfRVhUX0FMSUdOX1NISUZUIHVuaXRzXFxuKyAqXFx0QHByZXNlbnRfZXh0ZW5zaW9uczogYml0bWFwIG9mIGV4dGVuc2lvbnMgc3RvcmVkIGluIEBkYXRhXFxuICAqXFx0QGRhdGE6IHN0YXJ0IG9mIGV4dGVuc2lvbiBkYXRhLCB2YXJpYWJsZSBzaXplZFxcbiAgKlxcbi0gKlxcdE5vdGU6IG9mZnNldHMvbGVuZ3RocyBhcmUgc3RvcmVkIGluIGNodW5rcyBvZiA4IGJ5dGVzLCB0aGlzIGFsbG93c1xcbi0gKlxcdHRvIHVzZSAndTgnIHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aCBvZiBleHRlbnNpb24gZGF0YS5cXG4rICpcXHRFYWNoIGV4dGVuc2lvbiBpZCBvY2N1cGllcyBhIGZpeGVkIHNsb3Qgd2l0aGluIEBkYXRhLCBsb2NhdGVkIGF0XFxuKyAqXFx0c2tiX2V4dF9vZmZzZXRbaWRdIGNodW5rcyBvZiA4IGJ5dGVzLiBTdG9yaW5nIG9mZnNldHMvbGVuZ3Roc1xcbisgKlxcdGluIDgtYnl0ZSBjaHVua3MgYWxsb3dzICd1OCcgdHlwZXMgd2hpbGUgYWxsb3dpbmcgdXAgdG8gMmtiIHdvcnRoXFxuKyAqXFx0b2YgZXh0ZW5zaW9uIGRhdGEuXFxuICAqL1xcbiBzdHJ1Y3Qgc2tiX2V4dCB7XFxuIFxcdHJlZmNvdW50X3QgcmVmY250O1xcbi1cXHR1OCBvZmZzZXRbU0tCX0VYVF9OVU1dOyAvKiBpbiBjaHVua3Mgb2YgOCBieXRlcyAqL1xcbi1cXHR1OCBjaHVua3M7XFx0XFx0Lyogc2FtZSAqL1xcbitcXHR1OCBwcmVzZW50X2V4dGVuc2lvbnM7XFxuIFxcdGNoYXIgZGF0YVtdIF9fYWxpZ25lZCg4KTtcXG4gfTtcXG4gXFxuQEAgLTUwODcsNyArNTEyMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYylcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3NrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGkpXFxuIHtcXG4tXFx0cmV0dXJuICEhZXh0LVxcdTAwM2VvZmZzZXRbaV07XFxuK1xcdHJldHVybiBleHQtXFx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIGkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2V4dF9leGlzdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXFxuQEAgLTUxMDYsNyArNTE0Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2tiX2V4dF9maW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4gXFx0aWYgKHNrYl9leHRfZXhpc3Qoc2tiLCBpZCkpIHtcXG4gXFx0XFx0c3RydWN0IHNrYl9leHQgKmV4dCA9IHNrYi1cXHUwMDNlZXh0ZW5zaW9ucztcXG4gXFxuLVxcdFxcdHJldHVybiAodm9pZCAqKWV4dCArIChleHQtXFx1MDAzZW9mZnNldFtpZF0gXFx1MDAzY1xcdTAwM2MgMyk7XFxuK1xcdFxcdHJldHVybiAodm9pZCAqKWV4dCArIChza2JfZXh0X29mZnNldFtpZF0gXFx1MDAzY1xcdTAwM2MgMyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBOVUxMO1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuaW5kZXggYzgyYTE0NzJhNWVhOC4uOGU1ZGI1Nzk3MjVkMCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuQEAgLTUxMzQsNDcgKzUxMzQsMzIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnQpO1xcbiAjZGVmaW5lIFNLQl9FWFRfQ0hVTktTSVpFT0YoeClcXHQoQUxJR04oKHNpemVvZih4KSksIFNLQl9FWFRfQUxJR05fVkFMVUUpIC8gU0tCX0VYVF9BTElHTl9WQUxVRSlcXG4gXFxuIHN0YXRpYyBjb25zdCB1OCBza2JfZXh0X3R5cGVfbGVuW10gPSB7XFxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbi1cXHRbU0tCX0VYVF9CUklER0VfTkZdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pLFxcbi0jZW5kaWZcXG4tI2lmZGVmIENPTkZJR19YRlJNXFxuLVxcdFtTS0JfRVhUX1NFQ19QQVRIXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHNlY19wYXRoKSxcXG4tI2VuZGlmXFxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVClcXG4tXFx0W1RDX1NLQl9FWFRdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgdGNfc2tiX2V4dCksXFxuLSNlbmRpZlxcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuLVxcdFtTS0JfRVhUX01QVENQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG1wdGNwX2V4dCksXFxuLSNlbmRpZlxcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUylcXG4tXFx0W1NLQl9FWFRfTUNUUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtY3RwX2Zsb3cpLFxcbi0jZW5kaWZcXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbi1cXHRbU0tCX0VYVF9QU1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgcHNwX3NrYl9leHQpLFxcbi0jZW5kaWZcXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTilcXG4tXFx0W1NLQl9FWFRfQ0FOXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IGNhbl9za2JfZXh0KSxcXG4tI2VuZGlmXFxuKyNkZWZpbmUgWChpZCwgdHlwZSlcXHRbaWRdID0gU0tCX0VYVF9DSFVOS1NJWkVPRih0eXBlKSxcXG4rXFx0U0tCX0VYVF9GT1JFQUNIKFgpXFxuKyN1bmRlZiBYXFxuIH07XFxuIFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbm9fcHJvZmlsZSB1bnNpZ25lZCBpbnQgc2tiX2V4dF90b3RhbF9sZW5ndGgodm9pZClcXG4te1xcbi1cXHR1bnNpZ25lZCBpbnQgbCA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHNrYl9leHQpO1xcbi1cXHRpbnQgaTtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNrYl9leHRfdHlwZV9sZW4pOyBpKyspXFxuLVxcdFxcdGwgKz0gc2tiX2V4dF90eXBlX2xlbltpXTtcXG4rc3RydWN0IHNrYl9leHRfbGF5b3V0IHtcXG4rXFx0dThcXHRoZWFkZXJbc2l6ZW9mKHN0cnVjdCBza2JfZXh0KV0gX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpO1xcbisjZGVmaW5lIFgoaWQsIHR5cGUpXFx0dHlwZSBmXyMjaWQgX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpO1xcbitcXHRTS0JfRVhUX0ZPUkVBQ0goWClcXG4rI3VuZGVmIFhcXG4rfTtcXG4gXFxuLVxcdHJldHVybiBsO1xcbi19XFxuK2NvbnN0IHU4IHNrYl9leHRfb2Zmc2V0W1NLQl9FWFRfTlVNXSA9IHtcXG4rI2RlZmluZSBYKGlkLCB0eXBlKVxcdFtpZF0gPSBvZmZzZXRvZihzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQsIGZfIyNpZCkgLyBTS0JfRVhUX0FMSUdOX1ZBTFVFLFxcbitcXHRTS0JfRVhUX0ZPUkVBQ0goWClcXG4rI3VuZGVmIFhcXG4rfTtcXG4rRVhQT1JUX1NZTUJPTChza2JfZXh0X29mZnNldCk7XFxuIFxcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgX19ub19wcm9maWxlIHNrYl9leHRlbnNpb25zX2luaXQodm9pZClcXG4ge1xcbiBcXHRCVUlMRF9CVUdfT04oU0tCX0VYVF9OVU0gXFx1MDAzZSA4KTtcXG4tXFx0QlVJTERfQlVHX09OKHNrYl9leHRfdG90YWxfbGVuZ3RoKCkgXFx1MDAzZSAyNTUpO1xcbitcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBza2JfZXh0X2xheW91dCkgXFx1MDAzZSAyNTUgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcXG4gXFxuIFxcdHNrYnVmZl9leHRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShcXFwic2tidWZmX2V4dF9jYWNoZVxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgU0tCX0VYVF9BTElHTl9WQUxVRSAqIHNrYl9leHRfdG90YWxfbGVuZ3RoKCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBza2JfZXh0X2xheW91dCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgMCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMKTtcXG5AQCAtNzA4Myw3ICs3MDY4LDcgQEAgRVhQT1JUX1NZTUJPTChza2JfY29uZGVuc2UpO1xcbiAjaWZkZWYgQ09ORklHX1NLQl9FWFRFTlNJT05TXFxuIHN0YXRpYyB2b2lkICpza2JfZXh0X2dldF9wdHIoc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGlkKVxcbiB7XFxuLVxcdHJldHVybiAodm9pZCAqKWV4dCArIChleHQtXFx1MDAzZW9mZnNldFtpZF0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcXG4rXFx0cmV0dXJuICh2b2lkICopZXh0ICsgKHNrYl9leHRfb2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNzEwMCw3ICs3MDg1LDcgQEAgc3RydWN0IHNrYl9leHQgKl9fc2tiX2V4dF9hbGxvYyhnZnBfdCBmbGFncylcXG4gXFx0c3RydWN0IHNrYl9leHQgKm5ldyA9IGttZW1fY2FjaGVfYWxsb2Moc2tidWZmX2V4dF9jYWNoZSwgZmxhZ3MpO1xcbiBcXG4gXFx0aWYgKG5ldykge1xcbi1cXHRcXHRtZW1zZXQobmV3LVxcdTAwM2VvZmZzZXQsIDAsIHNpemVvZihuZXctXFx1MDAzZW9mZnNldCkpO1xcbitcXHRcXHRuZXctXFx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyA9IDA7XFxuIFxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2bmV3LVxcdTAwM2VyZWZjbnQsIDEpO1xcbiBcXHR9XFxuIFxcbkBAIC03MTExLDYgKzcwOTYsNyBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgb2xkX2FjdGl2ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3O1xcbitcXHRpbnQgaTtcXG4gXFxuIFxcdGlmIChyZWZjb3VudF9yZWFkKFxcdTAwMjZvbGQtXFx1MDAzZXJlZmNudCkgPT0gMSlcXG4gXFx0XFx0cmV0dXJuIG9sZDtcXG5AQCAtNzExOSw3ICs3MTA1LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcXG4gXFx0aWYgKCFuZXcpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0bWVtY3B5KG5ldywgb2xkLCBvbGQtXFx1MDAzZWNodW5rcyAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xcbitcXHRtZW1jcHkobmV3LCBvbGQsIFNLQl9FWFRfQ0hVTktTSVpFT0YoKm9sZCkgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNLQl9FWFRfTlVNOyBpKyspIHtcXG4rXFx0XFx0aWYgKG9sZC1cXHUwMDNlcHJlc2VudF9leHRlbnNpb25zIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgaSkpXFxuK1xcdFxcdFxcdG1lbWNweShza2JfZXh0X2dldF9wdHIobmV3LCBpKSwgc2tiX2V4dF9nZXRfcHRyKG9sZCwgaSksXFxuK1xcdFxcdFxcdCAgICAgICBza2JfZXh0X3R5cGVfbGVuW2ldICogU0tCX0VYVF9BTElHTl9WQUxVRSk7XFxuK1xcdH1cXG4gXFx0cmVmY291bnRfc2V0KFxcdTAwMjZuZXctXFx1MDAzZXJlZmNudCwgMSk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1hGUk1cXG5AQCAtNzE1NiwxMiArNzE0Nyw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcXG4gdm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBuZXdsZW4sIG5ld29mZiA9IFNLQl9FWFRfQ0hVTktTSVpFT0YoKmV4dCk7XFxuLVxcbiBcXHRza2JfZXh0X3B1dChza2IpO1xcbi1cXHRuZXdsZW4gPSBuZXdvZmYgKyBza2JfZXh0X3R5cGVfbGVuW2lkXTtcXG4tXFx0ZXh0LVxcdTAwM2VjaHVua3MgPSBuZXdsZW47XFxuLVxcdGV4dC1cXHUwMDNlb2Zmc2V0W2lkXSA9IG5ld29mZjtcXG4rXFx0ZXh0LVxcdTAwM2VwcmVzZW50X2V4dGVuc2lvbnMgPSAxIFxcdTAwM2NcXHUwMDNjIGlkO1xcbiBcXHRza2ItXFx1MDAzZWV4dGVuc2lvbnMgPSBleHQ7XFxuIFxcdHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPSAxIFxcdTAwM2NcXHUwMDNjIGlkO1xcbiBcXHRyZXR1cm4gc2tiX2V4dF9nZXRfcHRyKGV4dCwgaWQpO1xcbkBAIC03MTg0LDMxICs3MTcxLDIzIEBAIEVYUE9SVF9TWU1CT0xfTlNfR1BMKF9fc2tiX2V4dF9zZXQsIFxcXCJORVRERVZfSU5URVJOQUxcXFwiKTtcXG4gICovXFxuIHZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3LCAqb2xkID0gTlVMTDtcXG4tXFx0dW5zaWduZWQgaW50IG5ld2xlbiwgbmV3b2ZmO1xcbitcXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3O1xcbiBcXG4gXFx0aWYgKHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpIHtcXG4tXFx0XFx0b2xkID0gc2tiLVxcdTAwM2VleHRlbnNpb25zO1xcbi1cXG4tXFx0XFx0bmV3ID0gc2tiX2V4dF9tYXliZV9jb3cob2xkLCBza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKTtcXG4rXFx0XFx0bmV3ID0gc2tiX2V4dF9tYXliZV9jb3coc2tiLVxcdTAwM2VleHRlbnNpb25zLFxcbitcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKTtcXG4gXFx0XFx0aWYgKCFuZXcpXFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0XFx0aWYgKF9fc2tiX2V4dF9leGlzdChuZXcsIGlkKSlcXG4gXFx0XFx0XFx0Z290byBzZXRfYWN0aXZlO1xcbi1cXG4tXFx0XFx0bmV3b2ZmID0gbmV3LVxcdTAwM2VjaHVua3M7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdG5ld29mZiA9IFNLQl9FWFRfQ0hVTktTSVpFT0YoKm5ldyk7XFxuLVxcbiBcXHRcXHRuZXcgPSBfX3NrYl9leHRfYWxsb2MoR0ZQX0FUT01JQyk7XFxuIFxcdFxcdGlmICghbmV3KVxcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0bmV3bGVuID0gbmV3b2ZmICsgc2tiX2V4dF90eXBlX2xlbltpZF07XFxuLVxcdG5ldy1cXHUwMDNlY2h1bmtzID0gbmV3bGVuO1xcbi1cXHRuZXctXFx1MDAzZW9mZnNldFtpZF0gPSBuZXdvZmY7XFxuK1xcdG5ldy1cXHUwMDNlcHJlc2VudF9leHRlbnNpb25zIHw9IDEgXFx1MDAzY1xcdTAwM2MgaWQ7XFxuIHNldF9hY3RpdmU6XFxuIFxcdHNrYi1cXHUwMDNlc2xvd19ncm8gPSAxO1xcbiBcXHRza2ItXFx1MDAzZWV4dGVuc2lvbnMgPSBuZXc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU3OjI0LjkwMzk1MzYxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIzNjIxNzQ5MDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJCUklER0VfTkVURklMVEVSXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIk1DVFBcIixcbiAgICBcIkkyQ1wiLFxuICAgIFwiSTJDX1NMQVZFXCIsXG4gICAgXCJNQ1RQX1RSQU5TUE9SVF9JMkNcIixcbiAgICBcIklORVRcIixcbiAgICBcIk1QVENQXCIsXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9UQ19TS0JfRVhUXCIsXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfZXh0X2FkZFwiLFxuICAgIFwiX19za2JfZXh0X3NldFwiLFxuICAgIFwiX19za2JfZXh0X2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgYHNrYl9leHRgIChza19idWZmIGV4dGVuc2lvbnMpLiBJdCByZXBsYWNlcyBkeW5hbWljIG9mZnNldHMgd2l0aCBjb21waWxlLXRpbWUgZml4ZWQgb2Zmc2V0cyBhbmQgdXNlcyBhIGJpdG1hcCB0byB0cmFjayBwcmVzZW50IGV4dGVuc2lvbnMuIFRoaXMgaXMgYSBjb3JlIG5ldHdvcmtpbmcgY2hhbmdlIGFmZmVjdGluZyBob3cgZXh0ZW5zaW9ucyBsaWtlIElQc2VjLCBCcmlkZ2UgTmV0ZmlsdGVyLCBUQywgTVBUQ1AsIE1DVFAsIFBTUCwgYW5kIENBTiBhcmUgYXR0YWNoZWQgdG8gc29ja2V0IGJ1ZmZlcnMuIEl0IGlzIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIG1lbW9yeSBsYXlvdXQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkOGM2YzQwM2Y4NmYxYWJhMDZjM2I0OTEyYjMwOWFjMzVmMzNjZWVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTY6NTc6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuaW5kZXggOTUxODQxODMxODBmNi4uNWE1MTQzZTQ3YjMwMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbkBAIC01MDExLDQ1ICs1MDExLDgxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X25mY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgbG9uZyBuZmN0KVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NLQl9FWFRFTlNJT05TXG4tZW51bSBza2JfZXh0X2lkIHtcbitcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbi1cdFNLQl9FWFRfQlJJREdFX05GLFxuKyNkZWZpbmUgU0tCX0VYVF9YX0JSSURHRV9ORlx0WChTS0JfRVhUX0JSSURHRV9ORiwgc3RydWN0IG5mX2JyaWRnZV9pbmZvKVxuKyNlbHNlXG4rI2RlZmluZSBTS0JfRVhUX1hfQlJJREdFX05GXG4gI2VuZGlmXG4tI2lmZGVmIENPTkZJR19YRlJNXG4tXHRTS0JfRVhUX1NFQ19QQVRILFxuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19YRlJNKVxuKyNkZWZpbmUgU0tCX0VYVF9YX1NFQ19QQVRIXHRYKFNLQl9FWFRfU0VDX1BBVEgsIHN0cnVjdCBzZWNfcGF0aClcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX1NFQ19QQVRIXG4gI2VuZGlmXG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKVxuLVx0VENfU0tCX0VYVCxcbisjZGVmaW5lIFNLQl9FWFRfWF9UQ1x0XHRYKFRDX1NLQl9FWFQsIHN0cnVjdCB0Y19za2JfZXh0KVxuKyNlbHNlXG4rI2RlZmluZSBTS0JfRVhUX1hfVENcbiAjZW5kaWZcbitcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG4tXHRTS0JfRVhUX01QVENQLFxuKyNkZWZpbmUgU0tCX0VYVF9YX01QVENQXHRcdFgoU0tCX0VYVF9NUFRDUCwgc3RydWN0IG1wdGNwX2V4dClcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX01QVENQXG4gI2VuZGlmXG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpXG4tXHRTS0JfRVhUX01DVFAsXG4rI2RlZmluZSBTS0JfRVhUX1hfTUNUUFx0XHRYKFNLQl9FWFRfTUNUUCwgc3RydWN0IG1jdHBfZmxvdylcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX01DVFBcbiAjZW5kaWZcbitcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG4tXHRTS0JfRVhUX1BTUCxcbisjZGVmaW5lIFNLQl9FWFRfWF9QU1BcdFx0WChTS0JfRVhUX1BTUCwgc3RydWN0IHBzcF9za2JfZXh0KVxuKyNlbHNlXG4rI2RlZmluZSBTS0JfRVhUX1hfUFNQXG4gI2VuZGlmXG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTilcbi1cdFNLQl9FWFRfQ0FOLFxuKyNkZWZpbmUgU0tCX0VYVF9YX0NBTlx0XHRYKFNLQl9FWFRfQ0FOLCBzdHJ1Y3QgY2FuX3NrYl9leHQpXG4rI2Vsc2VcbisjZGVmaW5lIFNLQl9FWFRfWF9DQU5cbiAjZW5kaWZcbi1cdFNLQl9FWFRfTlVNLCAvKiBtdXN0IGJlIGxhc3QgKi9cbitcbisjZGVmaW5lIFNLQl9FWFRfRk9SRUFDSChYKVx0XFxcbitcdFNLQl9FWFRfWF9CUklER0VfTkZcdFxcXG4rXHRTS0JfRVhUX1hfU0VDX1BBVEhcdFxcXG4rXHRTS0JfRVhUX1hfVENcdFx0XFxcbitcdFNLQl9FWFRfWF9NUFRDUFx0XHRcXFxuK1x0U0tCX0VYVF9YX01DVFBcdFx0XFxcbitcdFNLQl9FWFRfWF9QU1BcdFx0XFxcbitcdFNLQl9FWFRfWF9DQU5cbitcbitlbnVtIHNrYl9leHRfaWQge1xuKyNkZWZpbmUgWChpZCwgdHlwZSlcdGlkLFxuK1x0U0tCX0VYVF9GT1JFQUNIKFgpXG4rI3VuZGVmIFhcbitcdFNLQl9FWFRfTlVNLFxuIH07XG4gXG4rZXh0ZXJuIGNvbnN0IHU4IHNrYl9leHRfb2Zmc2V0W1NLQl9FWFRfTlVNXTtcbitcbiAvKipcbiAgKlx0c3RydWN0IHNrYl9leHQgLSBza19idWZmIGV4dGVuc2lvbnNcbiAgKlx0QHJlZmNudDogMSBvbiBhbGxvY2F0aW9uLCBkZWFsbG9jYXRlZCBvbiAwXG4tICpcdEBvZmZzZXQ6IG9mZnNldCB0byBhZGQgdG8gQGRhdGEgdG8gb2J0YWluIGV4dGVuc2lvbiBhZGRyZXNzXG4tICpcdEBjaHVua3M6IHNpemUgY3VycmVudGx5IGFsbG9jYXRlZCwgc3RvcmVkIGluIFNLQl9FWFRfQUxJR05fU0hJRlQgdW5pdHNcbisgKlx0QHByZXNlbnRfZXh0ZW5zaW9uczogYml0bWFwIG9mIGV4dGVuc2lvbnMgc3RvcmVkIGluIEBkYXRhXG4gICpcdEBkYXRhOiBzdGFydCBvZiBleHRlbnNpb24gZGF0YSwgdmFyaWFibGUgc2l6ZWRcbiAgKlxuLSAqXHROb3RlOiBvZmZzZXRzL2xlbmd0aHMgYXJlIHN0b3JlZCBpbiBjaHVua3Mgb2YgOCBieXRlcywgdGhpcyBhbGxvd3Ncbi0gKlx0dG8gdXNlICd1OCcgdHlwZXMgd2hpbGUgYWxsb3dpbmcgdXAgdG8gMmtiIHdvcnRoIG9mIGV4dGVuc2lvbiBkYXRhLlxuKyAqXHRFYWNoIGV4dGVuc2lvbiBpZCBvY2N1cGllcyBhIGZpeGVkIHNsb3Qgd2l0aGluIEBkYXRhLCBsb2NhdGVkIGF0XG4rICpcdHNrYl9leHRfb2Zmc2V0W2lkXSBjaHVua3Mgb2YgOCBieXRlcy4gU3RvcmluZyBvZmZzZXRzL2xlbmd0aHNcbisgKlx0aW4gOC1ieXRlIGNodW5rcyBhbGxvd3MgJ3U4JyB0eXBlcyB3aGlsZSBhbGxvd2luZyB1cCB0byAya2Igd29ydGhcbisgKlx0b2YgZXh0ZW5zaW9uIGRhdGEuXG4gICovXG4gc3RydWN0IHNrYl9leHQge1xuIFx0cmVmY291bnRfdCByZWZjbnQ7XG4tXHR1OCBvZmZzZXRbU0tCX0VYVF9OVU1dOyAvKiBpbiBjaHVua3Mgb2YgOCBieXRlcyAqL1xuLVx0dTggY2h1bmtzO1x0XHQvKiBzYW1lICovXG4rXHR1OCBwcmVzZW50X2V4dGVuc2lvbnM7XG4gXHRjaGFyIGRhdGFbXSBfX2FsaWduZWQoOCk7XG4gfTtcbiBcbkBAIC01MDg3LDcgKzUxMjMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9jb3B5KHN0cnVjdCBza19idWZmICpkc3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpzcmMpXG4gXG4gc3RhdGljIGlubGluZSBib29sIF9fc2tiX2V4dF9leGlzdChjb25zdCBzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaSlcbiB7XG4tXHRyZXR1cm4gISFleHQtXHUwMDNlb2Zmc2V0W2ldO1xuK1x0cmV0dXJuIGV4dC1cdTAwM2VwcmVzZW50X2V4dGVuc2lvbnMgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIHNrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuQEAgLTUxMDYsNyArNTE0Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2tiX2V4dF9maW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbiBcdGlmIChza2JfZXh0X2V4aXN0KHNrYiwgaWQpKSB7XG4gXHRcdHN0cnVjdCBza2JfZXh0ICpleHQgPSBza2ItXHUwMDNlZXh0ZW5zaW9ucztcbiBcbi1cdFx0cmV0dXJuICh2b2lkICopZXh0ICsgKGV4dC1cdTAwM2VvZmZzZXRbaWRdIFx1MDAzY1x1MDAzYyAzKTtcbitcdFx0cmV0dXJuICh2b2lkICopZXh0ICsgKHNrYl9leHRfb2Zmc2V0W2lkXSBcdTAwM2NcdTAwM2MgMyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBjODJhMTQ3MmE1ZWE4Li44ZTVkYjU3OTcyNWQwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtNTEzNCw0NyArNTEzNCwzMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudCk7XG4gI2RlZmluZSBTS0JfRVhUX0NIVU5LU0laRU9GKHgpXHQoQUxJR04oKHNpemVvZih4KSksIFNLQl9FWFRfQUxJR05fVkFMVUUpIC8gU0tCX0VYVF9BTElHTl9WQUxVRSlcbiBcbiBzdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xuLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuLVx0W1NLQl9FWFRfQlJJREdFX05GXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG5mX2JyaWRnZV9pbmZvKSxcbi0jZW5kaWZcbi0jaWZkZWYgQ09ORklHX1hGUk1cbi1cdFtTS0JfRVhUX1NFQ19QQVRIXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHNlY19wYXRoKSxcbi0jZW5kaWZcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpXG4tXHRbVENfU0tCX0VYVF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCB0Y19za2JfZXh0KSxcbi0jZW5kaWZcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG4tXHRbU0tCX0VYVF9NUFRDUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtcHRjcF9leHQpLFxuLSNlbmRpZlxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX0ZMT1dTKVxuLVx0W1NLQl9FWFRfTUNUUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtY3RwX2Zsb3cpLFxuLSNlbmRpZlxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbi1cdFtTS0JfRVhUX1BTUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBwc3Bfc2tiX2V4dCksXG4tI2VuZGlmXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTilcbi1cdFtTS0JfRVhUX0NBTl0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBjYW5fc2tiX2V4dCksXG4tI2VuZGlmXG4rI2RlZmluZSBYKGlkLCB0eXBlKVx0W2lkXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0YodHlwZSksXG4rXHRTS0JfRVhUX0ZPUkVBQ0goWClcbisjdW5kZWYgWFxuIH07XG4gXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX25vX3Byb2ZpbGUgdW5zaWduZWQgaW50IHNrYl9leHRfdG90YWxfbGVuZ3RoKHZvaWQpXG4te1xuLVx0dW5zaWduZWQgaW50IGwgPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBza2JfZXh0KTtcbi1cdGludCBpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShza2JfZXh0X3R5cGVfbGVuKTsgaSsrKVxuLVx0XHRsICs9IHNrYl9leHRfdHlwZV9sZW5baV07XG4rc3RydWN0IHNrYl9leHRfbGF5b3V0IHtcbitcdHU4XHRoZWFkZXJbc2l6ZW9mKHN0cnVjdCBza2JfZXh0KV0gX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuKyNkZWZpbmUgWChpZCwgdHlwZSlcdHR5cGUgZl8jI2lkIF9fYWxpZ25lZChTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbitcdFNLQl9FWFRfRk9SRUFDSChYKVxuKyN1bmRlZiBYXG4rfTtcbiBcbi1cdHJldHVybiBsO1xuLX1cbitjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV0gPSB7XG4rI2RlZmluZSBYKGlkLCB0eXBlKVx0W2lkXSA9IG9mZnNldG9mKHN0cnVjdCBza2JfZXh0X2xheW91dCwgZl8jI2lkKSAvIFNLQl9FWFRfQUxJR05fVkFMVUUsXG4rXHRTS0JfRVhUX0ZPUkVBQ0goWClcbisjdW5kZWYgWFxuK307XG4rRVhQT1JUX1NZTUJPTChza2JfZXh0X29mZnNldCk7XG4gXG4gc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IF9fbm9fcHJvZmlsZSBza2JfZXh0ZW5zaW9uc19pbml0KHZvaWQpXG4ge1xuIFx0QlVJTERfQlVHX09OKFNLQl9FWFRfTlVNIFx1MDAzZSA4KTtcbi1cdEJVSUxEX0JVR19PTihza2JfZXh0X3RvdGFsX2xlbmd0aCgpIFx1MDAzZSAyNTUpO1xuK1x0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQpIFx1MDAzZSAyNTUgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbiBcbiBcdHNrYnVmZl9leHRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShcInNrYnVmZl9leHRfY2FjaGVcIixcbi1cdFx0XHRcdFx0ICAgICBTS0JfRVhUX0FMSUdOX1ZBTFVFICogc2tiX2V4dF90b3RhbF9sZW5ndGgoKSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0KSxcbiBcdFx0XHRcdFx0ICAgICAwLFxuIFx0XHRcdFx0XHQgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLFxuIFx0XHRcdFx0XHQgICAgIE5VTEwpO1xuQEAgLTcwODMsNyArNzA2OCw3IEBAIEVYUE9SVF9TWU1CT0woc2tiX2NvbmRlbnNlKTtcbiAjaWZkZWYgQ09ORklHX1NLQl9FWFRFTlNJT05TXG4gc3RhdGljIHZvaWQgKnNrYl9leHRfZ2V0X3B0cihzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaWQpXG4ge1xuLVx0cmV0dXJuICh2b2lkICopZXh0ICsgKGV4dC1cdTAwM2VvZmZzZXRbaWRdICogU0tCX0VYVF9BTElHTl9WQUxVRSk7XG4rXHRyZXR1cm4gKHZvaWQgKilleHQgKyAoc2tiX2V4dF9vZmZzZXRbaWRdICogU0tCX0VYVF9BTElHTl9WQUxVRSk7XG4gfVxuIFxuIC8qKlxuQEAgLTcxMDAsNyArNzA4NSw3IEBAIHN0cnVjdCBza2JfZXh0ICpfX3NrYl9leHRfYWxsb2MoZ2ZwX3QgZmxhZ3MpXG4gXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3ID0ga21lbV9jYWNoZV9hbGxvYyhza2J1ZmZfZXh0X2NhY2hlLCBmbGFncyk7XG4gXG4gXHRpZiAobmV3KSB7XG4tXHRcdG1lbXNldChuZXctXHUwMDNlb2Zmc2V0LCAwLCBzaXplb2YobmV3LVx1MDAzZW9mZnNldCkpO1xuK1x0XHRuZXctXHUwMDNlcHJlc2VudF9leHRlbnNpb25zID0gMDtcbiBcdFx0cmVmY291bnRfc2V0KFx1MDAyNm5ldy1cdTAwM2VyZWZjbnQsIDEpO1xuIFx0fVxuIFxuQEAgLTcxMTEsNiArNzA5Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBvbGRfYWN0aXZlKVxuIHtcbiBcdHN0cnVjdCBza2JfZXh0ICpuZXc7XG4rXHRpbnQgaTtcbiBcbiBcdGlmIChyZWZjb3VudF9yZWFkKFx1MDAyNm9sZC1cdTAwM2VyZWZjbnQpID09IDEpXG4gXHRcdHJldHVybiBvbGQ7XG5AQCAtNzExOSw3ICs3MTA1LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdG1lbWNweShuZXcsIG9sZCwgb2xkLVx1MDAzZWNodW5rcyAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuK1x0bWVtY3B5KG5ldywgb2xkLCBTS0JfRVhUX0NIVU5LU0laRU9GKCpvbGQpICogU0tCX0VYVF9BTElHTl9WQUxVRSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTS0JfRVhUX05VTTsgaSsrKSB7XG4rXHRcdGlmIChvbGQtXHUwMDNlcHJlc2VudF9leHRlbnNpb25zIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgaSkpXG4rXHRcdFx0bWVtY3B5KHNrYl9leHRfZ2V0X3B0cihuZXcsIGkpLCBza2JfZXh0X2dldF9wdHIob2xkLCBpKSxcbitcdFx0XHQgICAgICAgc2tiX2V4dF90eXBlX2xlbltpXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuK1x0fVxuIFx0cmVmY291bnRfc2V0KFx1MDAyNm5ldy1cdTAwM2VyZWZjbnQsIDEpO1xuIFxuICNpZmRlZiBDT05GSUdfWEZSTVxuQEAgLTcxNTYsMTIgKzcxNDcsOCBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4gdm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXG4gXHRcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBuZXdsZW4sIG5ld29mZiA9IFNLQl9FWFRfQ0hVTktTSVpFT0YoKmV4dCk7XG4tXG4gXHRza2JfZXh0X3B1dChza2IpO1xuLVx0bmV3bGVuID0gbmV3b2ZmICsgc2tiX2V4dF90eXBlX2xlbltpZF07XG4tXHRleHQtXHUwMDNlY2h1bmtzID0gbmV3bGVuO1xuLVx0ZXh0LVx1MDAzZW9mZnNldFtpZF0gPSBuZXdvZmY7XG4rXHRleHQtXHUwMDNlcHJlc2VudF9leHRlbnNpb25zID0gMSBcdTAwM2NcdTAwM2MgaWQ7XG4gXHRza2ItXHUwMDNlZXh0ZW5zaW9ucyA9IGV4dDtcbiBcdHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyA9IDEgXHUwMDNjXHUwMDNjIGlkO1xuIFx0cmV0dXJuIHNrYl9leHRfZ2V0X3B0cihleHQsIGlkKTtcbkBAIC03MTg0LDMxICs3MTcxLDIzIEBAIEVYUE9SVF9TWU1CT0xfTlNfR1BMKF9fc2tiX2V4dF9zZXQsIFwiTkVUREVWX0lOVEVSTkFMXCIpO1xuICAqL1xuIHZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbiB7XG4tXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3LCAqb2xkID0gTlVMTDtcbi1cdHVuc2lnbmVkIGludCBuZXdsZW4sIG5ld29mZjtcbitcdHN0cnVjdCBza2JfZXh0ICpuZXc7XG4gXG4gXHRpZiAoc2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKSB7XG4tXHRcdG9sZCA9IHNrYi1cdTAwM2VleHRlbnNpb25zO1xuLVxuLVx0XHRuZXcgPSBza2JfZXh0X21heWJlX2NvdyhvbGQsIHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyk7XG4rXHRcdG5ldyA9IHNrYl9leHRfbWF5YmVfY293KHNrYi1cdTAwM2VleHRlbnNpb25zLFxuK1x0XHRcdFx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpO1xuIFx0XHRpZiAoIW5ldylcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdFx0aWYgKF9fc2tiX2V4dF9leGlzdChuZXcsIGlkKSlcbiBcdFx0XHRnb3RvIHNldF9hY3RpdmU7XG4tXG4tXHRcdG5ld29mZiA9IG5ldy1cdTAwM2VjaHVua3M7XG4gXHR9IGVsc2Uge1xuLVx0XHRuZXdvZmYgPSBTS0JfRVhUX0NIVU5LU0laRU9GKCpuZXcpO1xuLVxuIFx0XHRuZXcgPSBfX3NrYl9leHRfYWxsb2MoR0ZQX0FUT01JQyk7XG4gXHRcdGlmICghbmV3KVxuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0bmV3bGVuID0gbmV3b2ZmICsgc2tiX2V4dF90eXBlX2xlbltpZF07XG4tXHRuZXctXHUwMDNlY2h1bmtzID0gbmV3bGVuO1xuLVx0bmV3LVx1MDAzZW9mZnNldFtpZF0gPSBuZXdvZmY7XG4rXHRuZXctXHUwMDNlcHJlc2VudF9leHRlbnNpb25zIHw9IDEgXHUwMDNjXHUwMDNjIGlkO1xuIHNldF9hY3RpdmU6XG4gXHRza2ItXHUwMDNlc2xvd19ncm8gPSAxO1xuIFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBuZXc7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1NzoyNC45MDM5NTQ5MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDIyNzI2MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBTS0IgRXh0ZW5zaW9uIExheW91dCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gbG9vayBhdCBjbG9zZWx5LiBUaGUgY2hhbmdlcyB0byBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgYW5kIGBuZXQvY29yZS9za2J1ZmYuY2AgYXJlIHNpZ25pZmljYW50LiBJdCBsb29rcyBsaWtlIHRoZSB3YXkgYHNrYl9leHRgICh0aGUgc2tfYnVmZiBleHRlbnNpb25zKSBhcmUgaGFuZGxlZCBoYXMgYmVlbiBmdW5kYW1lbnRhbGx5IGFsdGVyZWQuIFByZXZpb3VzbHksIHRoZSBleHRlbnNpb25zIHdlcmUgYWxsb2NhdGVkIGFuZCBhcnJhbmdlZCBkeW5hbWljYWxseSwgd2l0aCBvZmZzZXRzIHN0b3JlZCBpbiBgZXh0LVx1MDAzZW9mZnNldFtpZF1gLiBOb3csIHdlJ3JlIHNlZWluZyBhIGZpeGVkIGxheW91dCBkZWZpbmVkIGJ5IGBzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXRgIGF0IGNvbXBpbGUgdGltZSwgYW5kIHN0YXRpYyBvZmZzZXRzIChgc2tiX2V4dF9vZmZzZXRbaWRdYCkuIFJlcGxhY2luZyB0aGUgYG9mZnNldGAgYXJyYXkgd2l0aCBhIGBwcmVzZW50X2V4dGVuc2lvbnNgIGJpdG1hcCBpcyBhbHNvIGEgcHJldHR5IG1ham9yIHNoaWZ0LlxuXG5UaGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGNoYW5nZSwgbm8gcXVlc3Rpb24uIFRoZSBmYWN0IHRoYXQgaXQgYWZmZWN0cyBmdW5jdGlvbnMgbGlrZSBgc2tiX2V4dF9hZGRgLCBgX19za2JfZXh0X3NldGAsIGFuZCBgc2tiX2V4dF9tYXliZV9jb3dgIHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgdGhlIG1lbW9yeSBsYXlvdXQgb2YgaG93IHRoZXNlIGV4dGVuc2lvbnMgYXJlIGFjY2Vzc2VkIGFuZCBtYW5pcHVsYXRlZC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGU/IEl0IGxvb2tzIGxpa2UgaXQgaXMsIGBza2JfZXh0X2FkZGAgaXMgdXNlZCBpbiBhIHdob2xlIGJ1bmNoIG9mIHBsYWNlcyB3aGVuIHdlIGFkZCBleHRlbnNpb25zIGxpa2UgU0VDX1BBVEgsIEJSSURHRV9ORiwgVEMsIE1QVENQLCBNQ1RQLCBQU1AsIGFuZCBDQU4uIEV4Y2VsbGVudCEgVGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gT2J2aW91c2x5LCBgc2tiX2V4dF9hZGRgIGlzIGNyaXRpY2FsLiBBbHNvLCBgX19za2JfZXh0X3NldGAgZGVmaW5pdGVseS4gYHNrYl9leHRfbWF5YmVfY293YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBzbyB3ZSBtaWdodCBub3QgYmUgYWJsZSB0byBmdXp6IGl0IGRpcmVjdGx5LCBidXQgYHNrYl9leHRfYWRkYCBjYWxscyBpdCBzbyB3ZSdsbCBoYXZlIHRvIGNvbnNpZGVyIHRoYXQuIFBlcmhhcHMgYF9fc2tiX2V4dF9hbGxvY2AgdG9vLCBhbmQgdGhlIGlubGluZSBgc2tiX2V4dF9jb3B5YC5cblxuVGltZSB0byBkaWcgaW50byBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbiBgc2tiX2V4dF9hZGRgIGFuZCBgX19za2JfZXh0X3NldGAuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGVyZSBgc2tiX2V4dF9hZGRgIGlzIGFjdHVhbGx5IHVzZWQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU3OjM0LjMyNjY4Mzk4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE0OTU5OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9leHRfYWRkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MjE1PXN0cnVjdCBza19idWZmICphbGxvY19jYW5fc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fZnJhbWUgKipjZilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjIzLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MjI0OlxcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjI1LVxcdGlmICghY3N4KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jPTI0NT1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuZmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI1NC1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI1NTpcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI1Ni1cXHRpZiAoIWNzeCkge1xcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYz0yNzk9c3RydWN0IHNrX2J1ZmYgKmFsbG9jX2NhbnhsX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTItXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoyOTM6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTQtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MzM0PXN0YXRpYyBib29sIGNhbl9za2JfaW5pdF92YWxpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0zNDEtXFx0XFx0aWYgKCFjc3gpIHtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjM0MjpcXHRcXHRcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTM0My1cXHRcXHRcXHRpZiAoIWNzeClcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jPTM5PXN0YXRpYyBuZXRkZXZfdHhfdCB2eGNhbl94bWl0KHN0cnVjdCBza19idWZmICpvc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNjktXFx0LyogdGhlIGNsb25lZCBza2IgcG9pbnRzIHRvIHRoZSBza2IgZXh0ZW5zaW9uIG9mIHRoZSBhbHJlYWR5IGNsb25lZFxcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjcwOlxcdCAqIG9za2Igd2l0aCBhbiBpbmNyZWFzZWQgcmVmY291bnQuIHNrYl9leHRfYWRkKCkgY3JlYXRlcyBhIGNvcHkgdG9cXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy03MS1cXHQgKiBzZXBhcmF0ZSB0aGUgc2tiIGV4dGVuc2lvbiBkYXRhIHdoaWNoIGlzIG5lZWRlZCB0byBzdGFydCB3aXRoIGFcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTczLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjc0OlxcdGNzeCA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9DQU4pO1xcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTc1LVxcdGlmICghY3N4KSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaD0zOT1ib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oLTQwLVxcbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oOjQxOnN0YXRpYyBpbmxpbmUgc3RydWN0IGNhbl9za2JfZXh0ICpjYW5fc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00Mi17XFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NDM6XFx0c3RydWN0IGNhbl9za2JfZXh0ICpjc3ggPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQ0FOKTtcXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00NC1cXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo0NTpcXHQvKiBza2JfZXh0X2FkZCgpIHJldHVybnMgdW5pbml0aWFsaXplZCBzcGFjZSAqL1xcbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oLTQ2LVxcdGlmIChjc3gpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwOTM9dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDk0LVxcdFxcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTU6dm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTYtdm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg9OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtMTEtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oOjEyOlxcdHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqYiA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC0xMy1cXG4tLVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaD03ODc9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGNfc2tiX2V4dCAqdGNfc2tiX2V4dF9hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC03ODgte1xcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDo3ODk6XFx0c3RydWN0IHRjX3NrYl9leHQgKnRjX3NrYl9leHQgPSBza2JfZXh0X2FkZChza2IsIFRDX1NLQl9FWFQpO1xcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC03OTAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTE2OD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX3Vuc2hhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE2OS17XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNzA6XFx0cmV0dXJuIHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTcxLX1cXG4tLVxcbm5ldC9jYW4vYmNtLmM9MzIxPXN0YXRpYyB2b2lkIGJjbV9jYW5fdHgoc3RydWN0IGJjbV9vcCAqb3AsIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YpXFxuLS1cXG5uZXQvY2FuL2JjbS5jLTM1My1cXG5uZXQvY2FuL2JjbS5jOjM1NDpcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5uZXQvY2FuL2JjbS5jLTM1NS1cXHRpZiAoIWNzeCkge1xcbi0tXFxubmV0L2Nhbi9iY20uYz0xNjAyPXN0YXRpYyBpbnQgYmNtX3R4X3NlbmQoc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgaWZpbmRleCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2Nhbi9iY20uYy0xNjE3LVxcbm5ldC9jYW4vYmNtLmM6MTYxODpcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5uZXQvY2FuL2JjbS5jLTE2MTktXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jYW4vZ3cuYz00NTg9c3RhdGljIHZvaWQgY2FuX2Nhbl9nd19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9jYW4vZ3cuYy01MTYtXFx0LyogdGhlIGNsb25lZC9jb3BpZWQgbnNrYiBwb2ludHMgdG8gdGhlIHNrYiBleHRlbnNpb24gb2YgdGhlIG9yaWdpbmFsXFxubmV0L2Nhbi9ndy5jOjUxNzpcXHQgKiBza2Igd2l0aCBhbiBpbmNyZWFzZWQgcmVmY291bnQuIHNrYl9leHRfYWRkKCkgY3JlYXRlcyBhIGNvcHkgdG9cXG5uZXQvY2FuL2d3LmMtNTE4LVxcdCAqIHNlcGFyYXRlIHRoZSBza2IgZXh0ZW5zaW9uIGRhdGEgdG8gbW9kaWZ5IHRoZSBjYW5fZ3dfaG9wcy5cXG5uZXQvY2FuL2d3LmMtNTE5LVxcdCAqL1xcbm5ldC9jYW4vZ3cuYzo1MjA6XFx0bmNzeCA9IHNrYl9leHRfYWRkKG5za2IsIFNLQl9FWFRfQ0FOKTtcXG5uZXQvY2FuL2d3LmMtNTIxLVxcdGlmICghbmNzeCkge1xcbi0tXFxubmV0L2Nhbi9pc290cC5jPTI4Nj1zdGF0aWMgaW50IGlzb3RwX3NlbmRfZmMoc3RydWN0IHNvY2sgKnNrLCBpbnQgYWUsIHU4IGZsb3dzdGF0dXMpXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtMjk4LVxcbm5ldC9jYW4vaXNvdHAuYzoyOTk6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKG5za2IpO1xcbm5ldC9jYW4vaXNvdHAuYy0zMDAtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYz04NjM9c3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTg4My1cXG5uZXQvY2FuL2lzb3RwLmM6ODg0OlxcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xcbm5ldC9jYW4vaXNvdHAuYy04ODUtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYz0xMTA0PXN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTEyMTMtXFxubmV0L2Nhbi9pc290cC5jOjEyMTQ6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxubmV0L2Nhbi9pc290cC5jLTEyMTUtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM9ODgxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqajE5Mzlfc2tfYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy04OTktXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYzo5MDA6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy05MDEtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmM9NjAxPXNrX2J1ZmYgKmoxOTM5X3RwX3R4X2RhdF9uZXcoc3RydWN0IGoxOTM5X3ByaXYgKnByaXYsXFxuLS1cXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTYxMy1cXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jOjYxNDpcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTYxNS1cXHRpZiAoIWNzeCkge1xcbi0tXFxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYz0xMDU2PXN0YXRpYyBpbnQgajE5Mzlfc2ltcGxlX3R4bmV4dChzdHJ1Y3QgajE5Mzlfc2Vzc2lvbiAqc2Vzc2lvbilcXG4tLVxcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtMTA3Mi1cXHQvKiB0aGUgY2xvbmVkIHNrYiBwb2ludHMgdG8gdGhlIHNrYiBleHRlbnNpb24gb2YgdGhlIG9yaWdpbmFsIHNlX3NrYlxcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmM6MTA3MzpcXHQgKiB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4gc2tiX2V4dF9hZGQoKSBjcmVhdGVzIGEgY29weSB0b1xcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtMTA3NC1cXHQgKiBzZXBhcmF0ZSB0aGUgc2tiIGV4dGVuc2lvbiBkYXRhIHdoaWNoIGlzIG5lZWRlZCB0byBtb2RpZnkgdGhlXFxuLS1cXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTEwNzYtXFx0ICovXFxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYzoxMDc3OlxcdGlmICghc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0NBTikpIHtcXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTEwNzgtXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jPTE1NTM9ajE5Mzlfc2Vzc2lvbiAqajE5Mzlfc2Vzc2lvbl9mcmVzaF9uZXcoc3RydWN0IGoxOTM5X3ByaXYgKnByaXYsXFxuLS1cXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTE1NjUtXFxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYzoxNTY2OlxcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtMTU2Ny1cXHRpZiAoIWNzeCkge1xcbi0tXFxubmV0L2Nhbi9yYXcuYz05MTg9c3RhdGljIGludCByYXdfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2Nhbi9yYXcuYy05NjItXFxubmV0L2Nhbi9yYXcuYzo5NjM6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxubmV0L2Nhbi9yYXcuYy05NjQtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcxNTY9RVhQT1JUX1NZTUJPTF9OU19HUEwoX19za2JfZXh0X3NldCwgXFxcIk5FVERFVl9JTlRFUk5BTFxcXCIpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzE1OC0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo3MTU5OiAqIHNrYl9leHRfYWRkIC0gYWxsb2NhdGUgc3BhY2UgZm9yIGdpdmVuIGV4dGVuc2lvbiwgQ09XIGlmIG5lZWRlZFxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNjAtICogQHNrYjogYnVmZmVyXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MTcxLSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjcxNzI6dm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNzMte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzE5Ni19XFxubmV0L2NvcmUvc2tidWZmLmM6NzE5NzpFWFBPUlRfU1lNQk9MKHNrYl9leHRfYWRkKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MTk4LVxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MjY1PXN0YXRpYyBpbnQgZXNwX3htaXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4tLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM1NC1cXHRpZiAoaHdfb2ZmbG9hZCkge1xcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjM1NTpcXHRcXHRpZiAoIXNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9TRUNfUEFUSCkpXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMzU2LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L2lwdjYvZXNwNl9vZmZsb2FkLmM9MzAzPXN0YXRpYyBpbnQgZXNwNl94bWl0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy0zNzUtXFx0aWYgKGh3X29mZmxvYWQpIHtcXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzozNzY6XFx0XFx0aWYgKCFza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfU0VDX1BBVEgpKVxcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM3Ny1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9tY3RwL3JvdXRlLmM9MzQ2PXN0YXRpYyB2b2lkIG1jdHBfc2tiX3NldF9mbG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtY3RwX3NrX2tleSAqa2V5KVxcbi0tXFxubmV0L21jdHAvcm91dGUuYy0zNDktXFxubmV0L21jdHAvcm91dGUuYzozNTA6XFx0ZmxvdyA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9NQ1RQKTtcXG5uZXQvbWN0cC9yb3V0ZS5jLTM1MS1cXHRpZiAoIWZsb3cpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTEyMjI9Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTMyMi1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEzMjM6XFx0bXBleHQgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfTVBUQ1ApO1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTMyNC1cXHRpZiAoIW1wZXh0KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xMjY9c3RhdGljIHZvaWQgc3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIHU4IHJlYXNvbilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyNy17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMjg6XFx0c3RydWN0IG1wdGNwX2V4dCAqbXBleHQgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfTVBUQ1ApO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTI5LVxcbi0tXFxubmV0L3BzcC9wc3BfbWFpbi5jPTI5OT1pbnQgcHNwX2Rldl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGRldl9pZCwgdTggZ2VuZXJhdGlvbiwgYm9vbCBzdHJpcF9pY3YpXFxuLS1cXG5uZXQvcHNwL3BzcF9tYWluLmMtMzY0LVxcbm5ldC9wc3AvcHNwX21haW4uYzozNjU6XFx0cHNlID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX1BTUCk7XFxubmV0L3BzcC9wc3BfbWFpbi5jLTM2Ni1cXHRpZiAoIXBzZSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYz0xMjM9c3RydWN0IHNlY19wYXRoICpzZWNwYXRoX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTEyNi1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6MTI3OlxcdHNwID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX1NFQ19QQVRIKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtMTI4LVxcdGlmICghc3ApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU3OjM1Ljk0MTY1MDUzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDQxNTcxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIHRoaXMgYXJlYTpcblxuKipBbmFseXppbmcgYHNrYl9leHRfYWRkYCBhbmQgYF9fc2tiX2V4dF9zZXRgIEZ1bmN0aW9uIFVzYWdlKipcblxuQWxyaWdodCwgc28gdGhlIHNoZWVyIG51bWJlciBvZiBjYWxscyB0byBgc2tiX2V4dF9hZGRgIGlzIGEgZ29vZCBpbmRpY2F0b3IsIGFuZCBJIHN1c3BlY3QgYF9fc2tiX2V4dF9zZXRgIGlzIGEga2V5IGNvbXBvbmVudCBoZXJlIHRvby4gVGhpcyBsaWtlbHkgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHBhY2tldCBleHRlbnNpb25zLCBhbmQgaXQncyBwcmFjdGljYWxseSBndWFyYW50ZWVkIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCB0byBtYW5hZ2luZyBhbmQgbWFuaXB1bGF0aW5nIHRob3NlIGV4dGVuc2lvbnMgaW4gdGhlIGtlcm5lbC4gR2l2ZW4gdGhlaXIgbmFtZXMsIEknZCBzYXkgYHNrYl9leHRfYWRkYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBvciBhdHRhY2hpbmcgdGhlc2UgZXh0ZW5zaW9ucyB0byB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZXMsIGFuZCBgX19za2JfZXh0X3NldGAgaXMgcHJvYmFibHkgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgZGF0YS4gSXQncyB0aW1lIHRvIGRlbHZlIGRlZXBlciwgYW5kIGV4YW1pbmUgYF9fc2tiX2V4dF9zZXRgIGFzIHdlbGwsIHRvIGNvbmZpcm0gdGhlc2UgYXNzdW1wdGlvbnMgYW5kIGJldHRlciB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoZWlyIGFwcGxpY2F0aW9uLiBMZXQncyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDgyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTc6NDAuODg1ODA5NjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTc3OTEzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NrYl9leHRfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xMT12b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTMtXFx0aWYgKHBzcF9leHQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE0OlxcdFxcdF9fc2tiX2V4dF9zZXQoc2tiLCBTS0JfRVhUX1BTUCwgcHNwX2V4dCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA5Mj1zdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTM6dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDk0LVxcdFxcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcwNjk9c3RhdGljIHZvaWQgKnNrYl9leHRfZ2V0X3B0cihzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaWQpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDc5LSAqIFJldHVybnMgdGhlIG5ld2x5IGFsbG9jYXRlZCBwb2ludGVyLiBUaGUgcG9pbnRlciBjYW4gbGF0ZXIgYXR0YWNoZWQgdG8gYVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcwODA6ICogc2tiIHZpYSBfX3NrYl9leHRfc2V0KCkuXFxubmV0L2NvcmUvc2tidWZmLmMtNzA4MS0gKiBOb3RlOiBjYWxsZXIgbXVzdCBoYW5kbGUgdGhlIHNrYl9leHQgYXMgYW4gb3BhcXVlIGRhdGEuXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03MDk1PXN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxMzctLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6NzEzODogKiBfX3NrYl9leHRfc2V0IC0gYXR0YWNoIHRoZSBzcGVjaWZpZWQgZXh0ZW5zaW9uIHN0b3JhZ2UgdG8gdGhpcyBza2JcXG5uZXQvY29yZS9za2J1ZmYuYy03MTM5LSAqIEBza2I6IGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzE0Ni0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo3MTQ3OnZvaWQgKl9fc2tiX2V4dF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNDgtXFx0XFx0ICAgIHN0cnVjdCBza2JfZXh0ICpleHQpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MTU1LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MTU2OkVYUE9SVF9TWU1CT0xfTlNfR1BMKF9fc2tiX2V4dF9zZXQsIFxcXCJORVRERVZfSU5URVJOQUxcXFwiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MTU3LVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTMwOT1zdGF0aWMgYm9vbCBfX21wdGNwX2FkZF9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTMxNC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTMxNTpcXHRfX3NrYl9leHRfc2V0KHNrYiwgU0tCX0VYVF9NUFRDUCwgbXBleHQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzMTYtXFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU3OjQyLjU5MTU5OTUxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MzQ2NzM4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUaGlzIGBza2JfZXh0YCBNZW1vcnkgUGF0Y2gqKlxuXG5Pa2F5LCB0aGlzIHBhdGNoIGlzIG1lc3Npbmcgd2l0aCB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWxsb2NhdGlvbiByZWxhdGVkIHRvIGBza2JfZXh0YC4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gTWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcyBhcmUgYWx3YXlzIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZpbmRpbmcgb2ZmLWJ5LW9uZSBlcnJvcnMsIHVzZS1hZnRlci1mcmVlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZGVkaWNhdGluZyBzb21lIHRpbWUgdG8uXG5cbkknZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBza2JfZXh0X2FkZGAsIGBfX3NrYl9leHRfc2V0YCwgYW5kIGVzcGVjaWFsbHkgYF9fc2tiX2V4dF9hbGxvY2AuIFRoZSBhbGxvY2F0b3IgaXMgYWx3YXlzIHRoZSBoZWFydCBvZiB0aGVzZSBraW5kcyBvZiBpc3N1ZXMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19za2JfZXh0X2FsbG9jYCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTMzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTc6NTEuNTI2Mjc1NDQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDE1NDQ3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19za2JfZXh0X2FsbG9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA4Nj1zdHJ1Y3Qgc2tiX2V4dCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTEtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDkyOnN0cnVjdCBza2JfZXh0ICpfX3NrYl9leHRfYWxsb2MoZ2ZwX3QgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5My12b2lkICpfX3NrYl9leHRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcwNjk9c3RhdGljIHZvaWQgKnNrYl9leHRfZ2V0X3B0cihzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaWQpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDc0LS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjcwNzU6ICogX19za2JfZXh0X2FsbG9jIC0gYWxsb2NhdGUgYSBuZXcgc2tiIGV4dGVuc2lvbnMgc3RvcmFnZVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNzYtICpcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwODItICovXFxubmV0L2NvcmUvc2tidWZmLmM6NzA4MzpzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwODQte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzA5NT1zdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MTQwLSAqIEBpZDogZXh0ZW5zaW9uIGlkXFxubmV0L2NvcmUvc2tidWZmLmM6NzE0MTogKiBAZXh0OiBleHRlbnNpb24gc3RvcmFnZSBwcmV2aW91c2x5IGFsbG9jYXRlZCB2aWEgX19za2JfZXh0X2FsbG9jKClcXG5uZXQvY29yZS9za2J1ZmYuYy03MTQyLSAqXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03MTcyPXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxODQtXFx0fSBlbHNlIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo3MTg1OlxcdFxcdG5ldyA9IF9fc2tiX2V4dF9hbGxvYyhHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MTg2LVxcdFxcdGlmICghbmV3KVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTMwOT1zdGF0aWMgYm9vbCBfX21wdGNwX2FkZF9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzMTAte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzMTE6XFx0c3RydWN0IHNrYl9leHQgKm1wZXh0ID0gX19za2JfZXh0X2FsbG9jKGdmcCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTMxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTc6NTMuMDY3ODI2NzQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MzkzMjY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLlxuXG4qKkRlY29uc3RydWN0aW5nIFNLQiBFeHRlbnNpb24gRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGVzZSBgc2tiYCBleHRlbnNpb24gZnVuY3Rpb25zLiBUaGUgY29yZSBvbmVzIEknbSBzZWVpbmcgYXMgaW1wb3J0YW50IGFyZSBgc2tiX2V4dF9hZGRgLCBgX19za2JfZXh0X3NldGAsIGFuZCBgX19za2JfZXh0X2FsbG9jYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UncmUgZGVhbGluZyB3aXRoIGV4dGVuc2lvbnMgaW4gdGhlIFNLQi4gTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgYW5kIGluY2x1ZGUgYHNrYl9leHRfZGVsYCBpbiBteSBhbmFseXNpcy4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBleHRlbnNpb25zIGFyZSByZW1vdmVkIGFzIHdlbGwgYXMgYWRkZWQsIHNldCwgYW5kIGFsbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1Nzo1OC45MjE3NjI4NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTk2MTUxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX2V4dF9kZWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDk1PXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk2OnZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5Ny12b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUxMjk9c3RhdGljIGlubGluZSBib29sIHNrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTMzLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEzNDpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzNS17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTM2LVxcdGlmIChza2JfZXh0X2V4aXN0KHNrYiwgaWQpKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEzNzpcXHRcXHRfX3NrYl9leHRfZGVsKHNrYiwgaWQpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzOC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUxNjY9c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfcmVzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikge31cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNjc6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGludCB1bnVzZWQpIHt9XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTY4LXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnMpIHt9XFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmg9MTE5Nz1zZWNwYXRoX3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMTE5OS0jaWZkZWYgQ09ORklHX1hGUk1cXG5pbmNsdWRlL25ldC94ZnJtLmg6MTIwMDpcXHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfU0VDX1BBVEgpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMjAxLSNlbmRpZlxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xNTU9c3RhdGljIHZvaWQgbmZfYnJpZGdlX2luZm9fZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTU2LXtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE1NzpcXHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE1OC19XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03MjEwPXN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X21jdHAoc3RydWN0IG1jdHBfZmxvdyAqZmxvdylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyMTYtXFxubmV0L2NvcmUvc2tidWZmLmM6NzIxNzp2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyMTgte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzIzNC19XFxubmV0L2NvcmUvc2tidWZmLmM6NzIzNTpFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcyMzYtXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTExMTM9c3RhdGljIGVudW0gbWFwcGluZ19zdGF0dXMgZ2V0X21hcHBpbmdfc3RhdHVzKHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTExNzQtXFx0XFx0XFx0XFx0ICovXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMTc1OlxcdFxcdFxcdFxcdHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9NUFRDUCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMTc2LVxcdFxcdFxcdFxcdHJldHVybiBNQVBQSU5HX09LO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMjA5LVxcdFxcdCAgICBzdWJmbG93LVxcdTAwM2VtYXBfY3N1bV9yZXFkID09IG1wZXh0LVxcdTAwM2Vjc3VtX3JlcWQpIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEyMTA6XFx0XFx0XFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX01QVENQKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyMTEtXFx0XFx0XFx0Z290byB2YWxpZGF0ZV9jc3VtO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMjUzLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTI1NDpcXHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfTVBUQ1ApO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTI1NS1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM9MTgyMD1pbnQgdGNmX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTE4NjctXFx0XFx0XFx0LyogQ29uc3VtZSwgc28gY2xvbmVkL3JlZGlyZWN0IHNrYnMgd29uJ3QgaW5oZXJpdCBleHQgKi9cXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjE4Njg6XFx0XFx0XFx0c2tiX2V4dF9kZWwoc2tiLCBUQ19TS0JfRVhUKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTE4NjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU4OjAwLjQyMTM4Mzk3OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzU1MDI2NjEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGUgY2hhbmdlOlxuXG4qKkFuYWx5emluZyB0aGUgU0tCIEV4dGVuc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJ3QgKmRpcmVjdGx5KiB0b3VjaGluZyBgX19za2JfZXh0X2RlbGAuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgbW9kaWZpY2F0aW9uIGlzIGZvY3VzZWQgb24gYHNrYl9leHRfbWF5YmVfY293YCwgd2hpY2ggaXMgaXRzZWxmIGNhbGxlZCB3aXRoaW4gYHNrYl9leHRfYWRkYC4gSG1tLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24uIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgX19za2JfZXh0X2RlbGAuIEkga25vdyBpdCdzIGRlZmluZWQgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgc28gbGV0IG1lIGp1bXAgb3ZlciB0aGVyZSBhbmQgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBpdHMgZXhhY3QgYmVoYXZpb3Igd2l0aGluIHRoZSBTS0IgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBgc2tiX2V4dF9tYXliZV9jb3dgIGNoYW5nZSBhZmZlY3RzIGV4dGVuc2lvbiBkZWFsbG9jYXRpb24sIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIENvcHktT24tV3JpdGUgc2NlbmFyaW9zLiBHb3QgaXQuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoaXMgc29ydGVkIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODg3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTg6MTcuOTcxNjUyMjczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyODc2NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2tiX2V4dF9kZWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDk1PXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk2OnZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5Ny12b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUxMzQ9c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzNi1cXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMzc6XFx0XFx0X19za2JfZXh0X2RlbChza2IsIGlkKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzgtfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzIxMD1zdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9tY3RwKHN0cnVjdCBtY3RwX2Zsb3cgKmZsb3cpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MjE2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcyMTc6dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG5uZXQvY29yZS9za2J1ZmYuYy03MjE4LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyMzQtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcyMzU6RVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MjM2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1ODoxOS41MzQ1MzMzNjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1OTQyNzU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgc2tiX2V4dF9kZWwgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBfX3NrYl9leHRfZGVsYC4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IHdvcmtzLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGZ1bmN0aW9uIHRvIHNlZSB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcy4gSG93IGRvZXMgaXQgbWFuYWdlIHRoZSByZWZlcmVuY2UgY291bnRpbmcgb2YgdGhlIHNoYXJlZCBleHRlbnNpb24gZGF0YT8gRG9lcyBpdCBoYW5kbGUgYW55IHNwZWNpYWwgY2FzZXMgaW52b2x2aW5nIGZyYWdtZW50ZWQgc2ticyBvciBvdGhlciBza2Igc3BlY2lmaWMgYmVoYXZpb3JzPyBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNpZGUgb2YgdGhpbmdzLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBleHRlbnNpb24gZGF0YSBpcyBmcmVlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIFNLQiBvcGVyYXRpb25zIHRoYXQgbWlnaHQgZGVwZW5kIG9uLCBvciBtb2RpZnksIHRob3NlIGV4dGVybmFsIGRhdGEgY2h1bmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU4OjI1LjA5Mzk2MzMxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjk0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIxNyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzIxNzpcXHR2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbjcyMTg6XFx0e1xcbjcyMTk6XFx0XFx0c3RydWN0IHNrYl9leHQgKmV4dCA9IHNrYi1cXHUwMDNlZXh0ZW5zaW9ucztcXG43MjIwOlxcdFxcbjcyMjE6XFx0XFx0c2tiLVxcdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyBcXHUwMDI2PSB+KDEgXFx1MDAzY1xcdTAwM2MgaWQpO1xcbjcyMjI6XFx0XFx0aWYgKHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPT0gMCkge1xcbjcyMjM6XFx0XFx0XFx0c2tiLVxcdTAwM2VleHRlbnNpb25zID0gTlVMTDtcXG43MjI0OlxcdFxcdFxcdF9fc2tiX2V4dF9wdXQoZXh0KTtcXG43MjI1OlxcdCNpZmRlZiBDT05GSUdfWEZSTVxcbjcyMjY6XFx0XFx0fSBlbHNlIGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIIFxcdTAwMjZcXHUwMDI2XFxuNzIyNzpcXHRcXHRcXHQgICByZWZjb3VudF9yZWFkKFxcdTAwMjZleHQtXFx1MDAzZXJlZmNudCkgPT0gMSkge1xcbjcyMjg6XFx0XFx0XFx0c3RydWN0IHNlY19wYXRoICpzcCA9IHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpO1xcbjcyMjk6XFx0XFxuNzIzMDpcXHRcXHRcXHRza2JfZXh0X3B1dF9zcChzcCk7XFxuNzIzMTpcXHRcXHRcXHRzcC1cXHUwMDNlbGVuID0gMDtcXG43MjMyOlxcdCNlbmRpZlxcbjcyMzM6XFx0XFx0fVxcbjcyMzQ6XFx0fVxcbjcyMzU6XFx0RVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcXG43MjM2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1ODoyNS4wOTQzMzM5MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzODYzODU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBTS0IgRXh0ZW5zaW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIFNLQiBleHRlbnNpb25zIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIGBfX3NrYl9leHRfZGVsYCBpc24ndCBhIG1ham9yIHBsYXllciBoZXJlLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBza2JfZXh0X2FkZGAsIGBfX3NrYl9leHRfc2V0YCwgYW5kIGBfX3NrYl9leHRfYWxsb2NgIOKAkyB0aG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBhY3R1YWxseSBtYW5hZ2luZyB0aGVzZSBleHRlbnNpb25zLiBJIHdhcyBpbml0aWFsbHkgY3VyaW91cyBhYm91dCBgc2tiX2V4dF9tYXliZV9jb3dgLCBidXQgc2luY2UgaXQncyBkZWNsYXJlZCBgc3RhdGljYCwgYW5kIG5vdCBpbmxpbmVkLCBpdCB3b24ndCBiZSBhcyBpbXBvcnRhbnQgZm9yIHRoZSBtYWluIGZsb3cuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gT2J2aW91c2x5LCBgQ09ORklHX1NLQl9FWFRFTlNJT05TYCBpcyBjcnVjaWFsLCB0aGF0J3MgYSBnaXZlbi4gQnV0IHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGV4dGVuc2lvbnMgYXJlIHVzZWQsIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIGZlYXR1cmVzIHRyaWdnZXIgdGhlbS4gU28sIGJhc2VkIG9uIGEgcXVpY2sgc2NhbiwgSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBjb25zaWRlciBgQlJJREdFX05FVEZJTFRFUmAsIGBYRlJNYCwgYE5FVF9UQ19TS0JfRVhUYCwgYE1QVENQYCwgYE1DVFBfRkxPV1NgLCBgSU5FVF9QU1BgLCBhbmQgYENBTmAuIEknbGwgd2FudCB0byBkaWcgaW50byBgS2NvbmZpZ2AgZm9yIGBDT05GSUdfU0tCX0VYVEVOU0lPTlNgIGFuZCBjb25maXJtIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1ODozMS42MzI5NzQ3NDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODE5NTI1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNLQl9FWFRFTlNJT05TXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTYzPWNvbmZpZyBTS0JfREVDUllQVEVEXFxuLS1cXG5uZXQvS2NvbmZpZy02NS1cXG5uZXQvS2NvbmZpZzo2Njpjb25maWcgU0tCX0VYVEVOU0lPTlNcXG5uZXQvS2NvbmZpZy02Ny1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU4OjMzLjUxNDkzMTQyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzg3NzcwMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSGlkZGVuIEJvb2wgUmVmbGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBwcm9jZXNzaW5nIHRoaXMgXCJoaWRkZW4gYm9vbC5cIiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoaXMgaXNuJ3Qgc29tZXRoaW5nIGV4cGxpY2l0bHkgc2V0IGJ5IGEgdXNlciBkaXJlY3RseSwgb3Igc29tZXRoaW5nIHN1cmZhY2VkIGluIGFuIG9idmlvdXMgVUkgZWxlbWVudC4gVGhlIGZhY3QgdGhhdCBpdCdzIFwiaGlkZGVuXCIgaXMga2V5LiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBmbGFnLCB1c2VkIHVuZGVyIHRoZSBob29kLCBhIHNldHRpbmcgdGhhdCdzIGRlcml2ZWQgZnJvbSwgb3IgaW5kaXJlY3RseSBpbmZsdWVuY2VkIGJ5LCB0aGUgc2V0dGluZ3Mgb2YgKm90aGVyKiBjb25maWd1cmF0aW9ucy5cblxuTXkgaW1tZWRpYXRlIGZvbGxvdyB1cCBxdWVzdGlvbnMgd291bGQgYmUsIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBpbmZsdWVuY2luZyB0aGlzIGhpZGRlbiBib29sPyBXaGF0IGxvZ2ljIGlzIGRldGVybWluaW5nIGl0cyBzdGF0ZT8gSXMgaXQgc2V0IGF0IGNvbXBpbGUgdGltZT8gUnVudGltZT8gSXMgaXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU/IEEgZmVhdHVyZSBmbGFnIG1hbmFnZWQgYnkgYSB0aGlyZCBwYXJ0eSBzeXN0ZW0/IFRoZSBpbnRlcnBsYXkgaGVyZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlbmRlZCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGRlcGVuZGVuY2llcy4gV2hhdCB1cHN0cmVhbSBzZXR0aW5ncyBhcmUgdGhlIHRyaWdnZXJzIGZvciB0aGlzIFwiaGlkZGVuIGJvb2xcIiB0byBiZSBzZXQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzkwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTg6MzguOTAyNzA0NzMyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMxMzYxMjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBTS0JfRVhURU5TSU9OU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4tLVxcbm5ldC9LY29uZmlnLTIzNi1cXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG5uZXQvS2NvbmZpZzoyMzc6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L0tjb25maWctMjM4LVxcdGhlbHBcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz02PW1lbnVjb25maWcgQ0FOXFxubmV0L2Nhbi9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkNBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxubmV0L2Nhbi9LY29uZmlnOjg6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L2Nhbi9LY29uZmlnLTktXFx0aGVscFxcbi0tXFxubmV0L21jdHAvS2NvbmZpZz0yMT1jb25maWcgTUNUUF9GTE9XU1xcbi0tXFxubmV0L21jdHAvS2NvbmZpZy0yMy1cXHRkZXBlbmRzIG9uIE1DVFBcXG5uZXQvbWN0cC9LY29uZmlnOjI0OlxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbi0tXFxubmV0L21wdGNwL0tjb25maWc9Mj1jb25maWcgTVBUQ1BcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L21wdGNwL0tjb25maWc6NTpcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG5uZXQvbXB0Y3AvS2NvbmZpZy02LVxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1Nlxcbi0tXFxubmV0L3BzcC9LY29uZmlnPTU9Y29uZmlnIElORVRfUFNQXFxuLS1cXG5uZXQvcHNwL0tjb25maWctOC1cXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbm5ldC9wc3AvS2NvbmZpZzo5OlxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbm5ldC9wc3AvS2NvbmZpZy0xMC1cXHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz05NTQ9Y29uZmlnIE5FVF9UQ19TS0JfRVhUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy05NTYtXFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnOjk1NzpcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG5uZXQvc2NoZWQvS2NvbmZpZy05NTgtXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOC1cXHRzZWxlY3QgR1JPX0NFTExTXFxubmV0L3hmcm0vS2NvbmZpZzo5OlxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbm5ldC94ZnJtL0tjb25maWctMTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU4OjQwLjQzNDA3MTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyODMxNTQwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEJhc2VkIG9uIHRoZSByZXF1aXJlbWVudHMsIEkgbmVlZCB0byBlbmFibGUgYSBzdWl0ZSBvZiBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBCUklER0VfTkVURklMVEVSYCwgYENBTmAsIGBNQ1RQX0ZMT1dTYCwgYE1QVENQYCwgYElORVRfUFNQYCwgYE5FVF9UQ19TS0JfRVhUYCwgYW5kIGBYRlJNYC4gQmVmb3JlIEkgc2ltcGx5IGZsaXAgdGhvc2Ugc3dpdGNoZXMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIExldCdzIHNlZS4uLlxuXG5gQlJJREdFX05FVEZJTFRFUmAgaGFzIHRoZSB1c3VhbCBkZXBlbmRlbmNpZXMsIGBCUklER0VgIGFuZCBgTkVURklMVEVSYCwgd2hpY2ggYXJlIG9idmlvdXMuIGBDQU5gIGlzIGEgc3Vic3lzdGVtLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBgTUNUUF9GTE9XU2AgbmVlZHMgYE1DVFBgLiBgTVBUQ1BgIGFuZCBgSU5FVF9QU1BgIGJvdGggcmVxdWlyZSBgSU5FVGAuIGBORVRfVENfU0tCX0VYVGAgcmVsaWVzIG9uIGBORVRfQ0xTX0FDVGAsIGFuZCBgWEZSTWAgaXMgYSBjb3JlIGNvbmZpZ3VyYXRpb24gaXRlbS4gTm90aGluZyB0b28gdW51c3VhbCBoZXJlLlxuXG5Pa2F5LCB3aXRoIGFsbCB0aGF0IGluIG1pbmQsIG15IGZpbmFsIGxpc3Qgb2YgY29uZmlncyB0byBlbmFibGUgaXM6XG5cbiogICBgQlJJREdFX05FVEZJTFRFUmBcbiogICBgQ0FOYFxuKiAgIGBNQ1RQX0ZMT1dTYFxuKiAgIGBNUFRDUGBcbiogICBgSU5FVF9QU1BgXG4qICAgYE5FVF9UQ19TS0JfRVhUYFxuKiAgIGBYRlJNYFxuKiAgIGBCUklER0VgXG4qICAgYE5FVEZJTFRFUmBcbiogICBgTUNUUGBcbiogICBgSU5FVGBcbiogICBgTkVUX0NMU19BQ1RgXG5cbkJlZm9yZSBJIG1hcmsgdGhpcyBhcyBjb21wbGV0ZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBgSU5FVF9QU1BgJ3MgZGVmaW5pdGlvbiBpbiBgbmV0L3BzcC9LY29uZmlnYCB0byBiZSBzdXJlIHRoZXJlIGlzbid0IGFueXRoaW5nIHRoZXJlIHRoYXQgbWlnaHQgYWZmZWN0IG15IGRlY2lzaW9uLiBBbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTg6NTMuNzE3MjI3OTQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wc3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQU1AgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIElORVRfUFNQXFxuICAgNjpcXHRcXHRib29sIFxcXCJQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IFNLQl9ERUNSWVBURURcXG4gICA5OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgMTA6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgUFNQIFNlY3VyaXR5IFByb3RvY29sIChQU1ApLlxcbiAgMTM6XFx0XFx0Rm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOlxcbiAgMTQ6XFx0XFx0ICBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZ29vZ2xlL3BzcC9tYWluL2RvYy9QU1BfQXJjaF9TcGVjLnBkZlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHRJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1ODo1My43MTcyNzk0MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxMzg5NDQwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipWZXJpZnlpbmcgdGhlIE1DVFAgRmxvdyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBjb25maXJtIHRoZSBgTUNUUF9GTE9XU2AgY29uZmlndXJhdGlvbiBzZXR0aW5nIHdpdGhpbiB0aGUgYG5ldC9tY3RwL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIHNldHRpbmcgaXMgcHJlc2VudCBhbmQgY29uZmlndXJlZCBjb3JyZWN0bHkuIFdoYXQgYXJlIHRoZSBleHBlY3RlZCB2YWx1ZXMgb3IgZGVwZW5kZW5jaWVzIGZvciB0aGlzPyBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFnYWluc3QgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgZXhpc3RpbmcgZ3VpZGVsaW5lcyB0byBtYWtlIGNlcnRhaW4gZXZlcnl0aGluZyBpcyBjb21wbGlhbnQgYW5kIHRoYXQgbm8gcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gdGllcyBpbnRvIHRoZSB3aWRlciBNQ1RQIGltcGxlbWVudGF0aW9uIGlzIGFsc28gdml0YWwuIFNvLCBJIHdpbGwgcHJvY2VlZCBieSBvcGVuaW5nIHRoZSBLY29uZmlnIGZpbGUgYW5kIHF1aWNrbHkgcnVuIGEgc2VhcmNoIHRvIGNvbmZpcm0gdGhlIHNldHRpbmcgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHNldHRpbmdzLiBJdCdzIGEgcXVpY2sgYXVkaXQsIGJ1dCBjcml0aWNhbCBmb3IgdGhlIGludGVncml0eSBvZiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6MDMuODU2MjI2ODE1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tY3RwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdG1lbnVjb25maWcgTUNUUFxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gICA0OlxcdFxcdGJvb2wgXFxcIk1DVFAgY29yZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBNYW5hZ2VtZW50IENvbXBvbmVudCBUcmFuc3BvcnQgUHJvdG9jb2wgKE1DVFApIGlzIGFuIGluLXN5c3RlbVxcbiAgIDc6XFx0XFx0ICBwcm90b2NvbCBmb3IgY29tbXVuaWNhdGluZyBiZXR3ZWVuIG1hbmFnZW1lbnQgY29udHJvbGxlcnMgYW5kXFxuICAgODpcXHRcXHQgIHRoZWlyIG1hbmFnZWQgZGV2aWNlcyAocGVyaXBoZXJhbHMsIGhvc3QgcHJvY2Vzc29ycywgZXRjLikuIFRoZVxcbiAgIDk6XFx0XFx0ICBwcm90b2NvbCBpcyBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjM2LlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgY29yZSBNQ1RQIHN1cHBvcnQuIEZvciBjb21tdW5pY2F0aW5nIHdpdGggb3RoZXJcXG4gIDEyOlxcdFxcdCAgZGV2aWNlcywgeW91J2xsIHdhbnQgdG8gZW5hYmxlIGEgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlXFxuICAxMzpcXHRcXHQgIGNoYW5uZWwuXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBNQ1RQX1RFU1RcXG4gIDE2OlxcdCAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAxNzpcXHQgICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXFxuICAxODpcXHQgICAgICAgIGRlcGVuZHMgb24gTUNUUD15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDE5OlxcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE1DVFBfRkxPV1NcXG4gIDIyOlxcdFxcdGJvb2xcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gTUNUUFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU5OjAzLjg1NjMwOTkxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzI4MDIwNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gYE1DVFBfRkxPV1NgIGFuZCBpdHMgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhpcyBgTUNUUF9GTE9XU2AgdmFyaWFibGUuIEkgcmVtZW1iZXIgaXQncyBhIGhpZGRlbiBib29sZWFuLCBtZWFuaW5nIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgaW4gdGhlIG5vcm1hbCBjb25maWd1cmF0aW9uIG1lbnVzLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoYXQgY29udHJvbHMgaXQ/IEFoLCByaWdodCwgSSBzZWUgdGhhdCBgTUNUUF9URVNUYCBpcyB0aGUga2V5LiBUaGF0IGltcGxpZXMgaXQncyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdGVzdGluZywgcHJvYmFibHkgdG8gZW5hYmxlIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBNQ1RQIGZsb3cgbWFuYWdlbWVudC4gSXMgdGhhdCB0aGUgb25seSB0aGluZyB0aGF0IHRvZ2dsZXMgaXQsIG9yIGFyZSB0aGVyZSBvdGhlciBkZXBlbmRlbmNpZXMgbHVya2luZz8gSXQncyBjcnVjaWFsIHRvIGtub3cgdGhpcywgb3RoZXJ3aXNlIGEgbWlzY29uZmlndXJhdGlvbiBzb21ld2hlcmUgZWxzZSBjb3VsZCBsZWFkIHRvIHByb2JsZW1zLiBJIG5lZWQgdG8gYmUgc3VyZS4gQW55IG90aGVyIGRlcGVuZGVuY2llcz8gTGV0IG1lIGRpZyBhIGxpdHRsZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTY5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1OToxMC4xODQzMzMzMDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjY5MjYzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE1DVFBfRkxPV1NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTI5PWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JMkNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zNC1cXHRkZXBlbmRzIG9uIEkyQ19TTEFWRVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNTpcXHRzZWxlY3QgTUNUUF9GTE9XU1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zNi1cXHRoZWxwXFxuLS1cXG5uZXQvbWN0cC9LY29uZmlnPTE1PWNvbmZpZyBNQ1RQX1RFU1RcXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubmV0L21jdHAvS2NvbmZpZzoxNzogICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXFxubmV0L21jdHAvS2NvbmZpZy0xOC0gICAgICAgIGRlcGVuZHMgb24gTUNUUD15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6MTEuNzExMjY2OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU4MzgwOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBNQ1RQL0kyQyBUcmFuc3BvcnQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBpZiBJIGVuYWJsZSBgTUNUUF9UUkFOU1BPUlRfSTJDYCwgdGhhdCBpbmhlcmVudGx5IHB1bGxzIGluIHRoZSBgTUNUUF9GTE9XU2AgY29uZmlndXJhdGlvbiwgYXMgZXhwZWN0ZWQuIEdvb2QsIHRoYXQncyBsb2dpY2FsLiBJdCdzIGEgc3RhbmRhcmQgZGVwZW5kZW5jeS4gTm93LCBJJ20gdGhpbmtpbmcsIG9rYXksIGxldCdzIHNheSBJIHdhbnQgdG8gdXNlIGBNQ1RQX1RSQU5TUE9SVF9JMkNgIOKAkyBJJ2xsIGFsc28gbGlrZWx5IG5lZWQgYEkyQ19TTEFWRWAgZW5hYmxlZCwgc2luY2UgdGhlIEkyQyB0cmFuc3BvcnQgbmVlZHMgdG8gYmUgc2V0IHVwIGFzIGEgc2xhdmUgb24gdGhlIGJ1cy4gVGhhdCBjb21iaW5hdGlvbiBtYWtlcyBzZW5zZSBmb3IgYSB0eXBpY2FsIGltcGxlbWVudGF0aW9uLiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBpbiB0aGUgbmV0d29yayBzdGFjayBpbnRlcmFjdGlvbiwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgYE5FVF9UQ19TS0JfRVhUYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb2YgdGhvc2Ugc2V0dGluZ3MgbWlnaHQgYWZmZWN0IGhvdyBJIGhhbmRsZSB0aGUgTUNUUCBmcmFtZXMgb3ZlciBJMkMsIGVzcGVjaWFsbHkgd2l0aCBob3cgdGhlIFNLQiBpcyBidWlsdC4gR290dGEgbWFrZSBzdXJlIHRoZSBJMkMgdHJhbnNwb3J0IHBsYXlzIG5pY2VseSB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU5OjE2LjM2OTY1MDMxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NTQsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NTQ6XFx0Y29uZmlnIE5FVF9UQ19TS0JfRVhUXFxuIDk1NTpcXHRcXHRib29sIFxcXCJUQyByZWNpcmN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDk1NjpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDk1NzpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gOTU4OlxcdFxcbiA5NTk6XFx0XFx0aGVscFxcbiA5NjA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHRjIGNoYWluIG1pc3NlcyB0byBjb250aW51ZSBpbiBPdlMgZGF0YXBhdGggaW5cXG4gOTYxOlxcdFxcdCAgdGhlIGNvcnJlY3QgcmVjaXJjX2lkLCBhbmQgaGFyZHdhcmUgY2hhaW4gbWlzc2VzIHRvIGNvbnRpbnVlIGluXFxuIDk2MjpcXHRcXHQgIHRoZSBjb3JyZWN0IGNoYWluIGluIHRjIHNvZnR3YXJlIGRhdGFwYXRoLlxcbiA5NjM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU5OjE2LjM2OTczMDYyMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzYyODAzNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5OlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYE5FVF9UQ19TS0JfRVhUYCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uLiBOb3csIGdpdmVuIHRoYXQsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gc2NydXRpbml6ZSBgQlJJREdFX05FVEZJTFRFUmAuIFRoZSBpbXBsaWNhdGlvbnMgb2Ygb25lIHdpdGhvdXQgdGhlIG90aGVyIGFyZSBpbXBvcnRhbnQsIGFuZCB0aGV5J2xsIGhlYXZpbHkgaW5mbHVlbmNlIGhvdyB0aGlzIHN0YWNrIGlzIGdvaW5nIHRvIGJlaGF2ZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyByZXByZXNlbnRzIGEgc3RhbmRhbG9uZSBjb25maWd1cmF0aW9uLCBvciBpZiBvdGhlciwgcmVsYXRlZCBvcHRpb25zIGFyZSBlbmFibGVkLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIGNlbnRyYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgdHJhZmZpYyBjb250cm9sIGNhcGFiaWxpdGllcyBhbmQgdGhlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IGluIHRoaXMgZW52aXJvbm1lbnQsIGFuZCBteSBhbmFseXNpcyByZWFsbHkgZGVwZW5kcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg5MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6MjEuMTMyNTM2NTU2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzMTpcXHRjb25maWcgQlJJREdFX05FVEZJTFRFUlxcbiAyMzI6XFx0XFx0dHJpc3RhdGUgXFxcIkJyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXFxcIlxcbiAyMzM6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gMjM0OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gMjM1OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDIzNjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gMjM3OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAyMzg6XFx0XFx0aGVscFxcbiAyMzk6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGxldCBhcnB0YWJsZXMgcmVzcC4gaXB0YWJsZXMgc2VlIGJyaWRnZWRcXG4gMjQwOlxcdFxcdCAgQVJQIHJlc3AuIElQIHRyYWZmaWMuIElmIHlvdSB3YW50IGEgYnJpZGdpbmcgZmlyZXdhbGwsIHlvdSBwcm9iYWJseVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1OToyMS4xMzI2MDc0MjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5ODUzNDE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmNpZXMgYW5kIGEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQlJJREdFX05FVEZJTFRFUmAgcmlnaHQgbm93LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQncyByZWxpYW50IG9uIGEgZmV3IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRvIGZ1bmN0aW9uIHByb3Blcmx5OiBzcGVjaWZpY2FsbHksIGBCUklER0VgLCBgTkVURklMVEVSYCwgYElORVRgLCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGJyaWRnaW5nIG9mdGVuIGludm9sdmVzIGZpbHRlcmluZyBhbmQsIG9mIGNvdXJzZSwgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbmZyYXN0cnVjdHVyZS4gTm93LCBqdXN0IGFzIGEgcXVpY2sgY2hlY2ssIEkgd2FudCB0byBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYENBTmAuIE5vIHBhcnRpY3VsYXIgcmVhc29uLCBqdXN0IG1ha2luZyBzdXJlIEkgZGlkbid0IG1pc3Mgc29tZXRoaW5nIG9idmlvdXMgaW4gdGhlIGJyb2FkZXIgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI1OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6MjYuNDMxMTQzOTc3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICA2OlxcdG1lbnVjb25maWcgQ0FOXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBDb250cm9sbGVyIEFyZWEgTmV0d29yayAoQ0FOKSBpcyBhIHNsb3cgKHVwIHRvIDFNYml0L3MpIHNlcmlhbFxcbiAgMTE6XFx0XFx0ICBjb21tdW5pY2F0aW9ucyBwcm90b2NvbC4gRGV2ZWxvcG1lbnQgb2YgdGhlIENBTiBidXMgc3RhcnRlZCBpblxcbiAgMTI6XFx0XFx0ICAxOTgzIGF0IFJvYmVydCBCb3NjaCBHbWJILCBhbmQgdGhlIHByb3RvY29sIHdhcyBvZmZpY2lhbGx5XFxuICAxMzpcXHRcXHQgIHJlbGVhc2VkIGluIDE5ODYuIFRoZSBDQU4gYnVzIHdhcyBvcmlnaW5hbGx5IG1haW5seSBmb3IgYXV0b21vdGl2ZSxcXG4gIDE0OlxcdFxcdCAgYnV0IGlzIG5vdyB3aWRlbHkgdXNlZCBpbiBtYXJpbmUgKE5NRUEyMDAwKSwgaW5kdXN0cmlhbCwgYW5kIG1lZGljYWxcXG4gIDE1OlxcdFxcdCAgYXBwbGljYXRpb25zLiBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBDQU4gbmV0d29yayBwcm90b2NvbCBmYW1pbHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6MjYuNDMxMjE5NzY4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2Njk2NjUyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgQ0FOYCBpbiB0aGUgbWl4IOKAkyB0aGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgZ2l2ZW4gdGhhdCBvYnNlcnZhdGlvbiwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYENBTmAgYmVpbmcgdmlzaWJsZSBpbiB0aGlzIGNvbnRleHQuIEl0IHN1Z2dlc3RzIGEgcGFydGljdWxhciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3IgcG90ZW50aWFsIGFyZWEgb2YgaW52ZXN0aWdhdGlvbi4gSXQgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBsYXllciBvciB0aGUgZGF0YWxpbmsgbGF5ZXIuXG5cbkxldCdzIHNoaWZ0IGZvY3VzIGFuZCBzZWUgaG93IGBNUFRDUGAgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBDb25zaWRlcmluZyBgQ0FOYCBpcyB2aXNpYmxlLCBhcmUgd2UgbGlrZWx5IHRvIHNlZSBgTVBUQ1BgIHJ1bm5pbmcgYXMgd2VsbD8gQXJlIHRoZXNlIHRlY2hub2xvZ2llcyBpbnRlcmFjdGluZz8gQXJlIHdlIGxvb2tpbmcgYXQgYSBzeXN0ZW0gd2l0aCBkdWFsLXN0YWNrIGNhcGFiaWxpdGllcz8gVGhlIGBNUFRDUGAgY2hlY2sgd2lsbCBnaXZlIG1lIG1vcmUgY29udGV4dC4gVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2MjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU5OjM2LjEwMDg4ODIwNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdFxcbiAgIDI6XFx0Y29uZmlnIE1QVENQXFxuICAgMzpcXHRcXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDU6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBjb25uZWN0aW9ucyBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb3ZlciBtdWx0aXBsZVxcbiAgMTA6XFx0XFx0ICBzdWJmbG93cyBpbiBvcmRlciB0byB1dGlsaXplIG11bHRpcGxlIG5ldHdvcmsgcGF0aHMuIEVhY2ggc3ViZmxvd1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1OTozNi4xMDA5NDQ3MTNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk2MTY0NjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBOZXR3b3JrIE11bHRpcGF0aGluZyoqXG5cbk9rYXksIHNvIEkgc2VlIGBNUFRDUGAgaXMgc2hvd2luZyB1cCDigJMgdGhhdCdzIGdvb2QsIGEgZGVmaW5pdGUgaW5kaWNhdGlvbiB0aGF0IHRoZSBtdWx0aXBhdGggVENQIGZ1bmN0aW9uYWxpdHkgaXMgYWN0aXZlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwbHkgaW50byB0aGUgc3BlY2lmaWMgTVBUQ1AgaW1wbGVtZW50YXRpb24sIGlzIHRvIGNoZWNrIHRoZSBgWEZSTWAgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IHRyYW5zZm9ybXMgYW5kIHBvbGljaWVzIGFyZSBjb3JyZWN0bHkgY29uZmlndXJlZCBhbmQgYmVpbmcgYXBwbGllZC4gYFhGUk1gIGlzIGNyaXRpY2FsIGZvciBzZWN1cmUgbXVsdGlwYXRoaW5nLCBhbmQgYW55IGlzc3VlcyB0aGVyZSBjYW4gY3JpcHBsZSBvciwgYXQgYmVzdCwgc2VyaW91c2x5IGRlZ3JhZGUgcGVyZm9ybWFuY2UuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgSSBsb29rIGF0IGFueXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1OTo0My4wNjI1OTM0NjRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBYRlJNXFxuICAgNjpcXHRcXHRib29sXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gICA5OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgMTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU5OjQzLjA2MjY1MjY3NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg0ODc3MjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYRlJNIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGBYRlJNYCBpcyB0aGlzIHVuZGVybHlpbmcgYm9vbGVhbiwgYSBzb3J0IG9mIG1hc3RlciBzd2l0Y2gsIGJ1dCBpdCdzICpoaWRkZW4qLiBJIHNlZSB0aGF0IGl0J3MgdG9nZ2xlZCBvbiBvciBvZmYgYnkgYSBidW5jaCBvZiBvdGhlciBvcHRpb25zLCB0aGluZ3MgbGlrZSBgWEZSTV9VU0VSYCwgYW5kIHRoZSB2YXJpb3VzIElQc2VjLXJlbGF0ZWQgcHJvdG9jb2xzOiBgSU5FVF9BSGAsIGBJTkVUX0VTUGAsIGBJTkVUX0lQQ09NUGAsIGFuZCB0aGVpciBJUHY2IGNvdW50ZXJwYXJ0cy5cblxuR2l2ZW4gdGhhdCBJIHdhbnQgdG8gaGF2ZSBjb250cm9sIGFuZCBmbGV4aWJpbGl0eSBvdmVyIHRoZSBYRlJNIHN1YnN5c3RlbSwgaXQgbWFrZXMgc2Vuc2UgZm9yIG1lIHRvIGVuYWJsZSBgWEZSTV9VU0VSYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaG9va3MgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI5MiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6NTUuOTExNDI3Mzk5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzMTIxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MTk0PWNvbmZpZyBJWEdCRV9JUFNFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xOTgtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxOTk6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjAwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjIwPWNvbmZpZyBJWEdCRVZGX0lQU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIyNC1cXHRkZWZhdWx0IHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyNTpcXHRzZWxlY3QgWEZSTV9BTEdPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMjYtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDctXFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjMwODpcXHRzZWxlY3QgWEZSTVxcbm5ldC9pcHY0L0tjb25maWctMzA5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXFx0dHJpc3RhdGUgXFxcIklQOiBBSCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcXHRzZWxlY3QgWEZSTV9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MzU2OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU3LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg2LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9Mzk0PWNvbmZpZyBJTkVUX0lQQ09NUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTYtXFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcXHRzZWxlY3QgWEZSTV9JUENPTVBcXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxcbm5ldC9pcHY2L0tjb25maWctNDgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY2L0tjb25maWc6NDk6XFx0c2VsZWN0IFhGUk1fQUhcXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjY0OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjUtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTA0LVxcdHNlbGVjdCBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTA1OlxcdHNlbGVjdCBYRlJNX0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTA2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTUzLVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTE0PWNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxNjpcXHRzZWxlY3QgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctMTctXFx0c2VsZWN0IENSWVBUT1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0yMz1jb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjI1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9ODQ9Y29uZmlnIFhGUk1fQUhcXG5uZXQveGZybS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzo4NjpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy04Ny1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTkzPWNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG5uZXQveGZybS9LY29uZmlnOjk1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTk2LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTA2PWNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxMDg6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctMTA5LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIlBGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjExNDpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMjctXFx0ZGVwZW5kcyBvbiBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZzoxMjg6XFx0c2VsZWN0IFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI5LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6NTcuNzM0NTUzNjE1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5OTExMzkxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGVzZSBjb25maWd1cmF0aW9ucy4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBlbmFibGUgYFhGUk1fVVNFUmAsIGFzIGl0IHNlZW1zIGxpa2UgdGhlIGNlbnRyYWwgcG9pbnQgb2YgY29udHJvbC4gSSB1bmRlcnN0YW5kIHRoYXQgYFhGUk1fVVNFUmAgaXMgdGhlIG9uZSB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGBYRlJNX0FMR09gLCB3aGljaCBpbiB0dXJuIHNlbGVjdHMgdGhlIG92ZXJhcmNoaW5nIGBYRlJNYCBmcmFtZXdvcmsuIFRoYXQgc2ltcGxpZmllcyB0aGUgaW5pdGlhbCBkZWNpc2lvbiwgc28gbGV0J3MgZ28gd2l0aCB0aGF0LlxuXG5Ob3csIGxldCdzIGdldCBhIGhhbmRsZSBvbiB0aGUgb3RoZXIgY29uZmlncyBhdCBwbGF5LiBJIHNlZSB0aGF0IHdlIGhhdmU6XG5cbiogICBgQlJJREdFX05FVEZJTFRFUmBcbiogICBgQ0FOYFxuKiAgIGBNQ1RQX0ZMT1dTYCAodGhhdCBpcyBnb2luZyB0byBiZSB2aWEgYE1DVFBfVEVTVGAgb3IgYE1DVFBfVFJBTlNQT1JUX0kyQ2ApXG4qICAgYE1QVENQYFxuKiAgIGBJTkVUX1BTUGBcbiogICBgTkVUX1RDX1NLQl9FWFRgXG4qICAgYFhGUk1fVVNFUmBcblxuV2FpdCBhIG1pbnV0ZSwgYE1DVFBfRkxPV1NgIGlzIGEgaGlkZGVuIEJvb2xlYW4sIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGVuYWJsZSBhIGRlcGVuZGVudCBjb25maWd1cmF0aW9uIGZvciB0aGlzLiBUaGUgY2hvaWNlcyBhcmUgYE1DVFBfVEVTVGAgYW5kIGBNQ1RQX1RSQU5TUE9SVF9JMkNgLlxuXG5JJ2xsIGxlYW4gdG93YXJkcyBlbmFibGluZyBgTUNUUF9URVNUYCBpbml0aWFsbHkuIFNvLCB0byBlbnN1cmUgYE1DVFBfRkxPV1NgIGlzIGFjdGl2ZSwgbGV0J3MgZW5hYmxlIGBNQ1RQX1RFU1RgLCBgTUNUUGAsIGFuZCBgS1VOSVRgLlxuXG5KdXN0IHRvIGRvdWJsZS1jaGVjaywgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdHVzIG9mIGBNQ1RQX1RFU1RgIHRvIGVuc3VyZSBpdCdzIHN0aWxsIGVuYWJsZWQgYW5kIGhhc24ndCBoYWQgc29tZSBzaWRlIGVmZmVjdCBvbiBteSBjdXJyZW50IHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAwOjA3LjcyNTY5NTQ2OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWN0cC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdGNvbmZpZyBNQ1RQX1RFU1RcXG4gIDE2OlxcdCAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAxNzpcXHQgICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXFxuICAxODpcXHQgICAgICAgIGRlcGVuZHMgb24gTUNUUD15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDE5OlxcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE1DVFBfRkxPV1NcXG4gIDIyOlxcdFxcdGJvb2xcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gTUNUUFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAwOjA3LjcyNTc2MDE0OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTg4NTU4NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgY29uZmlndXJhdGlvbiBpc3N1ZSwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBXYWxrdGhyb3VnaCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IGNoYWluLiAgYE1DVFBfVEVTVGAgcmVsaWVzIG9uIGJvdGggYE1DVFBgIGJlaW5nIHNldCB0byAneScgYW5kIGBLVU5JVGAgYWxzbyBiZWluZyBzZXQgdG8gJ3knLiAgU2ltcGxlIGVub3VnaC4gIFRoZXJlZm9yZSwgdG8gZ2V0IGBNQ1RQX1RFU1RgIGVuYWJsZWQsIEkgbmVlZCB0byBlbnN1cmUgYm90aCBgTUNUUGAgYW5kIGBLVU5JVGAgYXJlIGVuYWJsZWQuICBTbywgSSB3aWxsIGVuYWJsZSBgTUNUUGAsIGVuYWJsZSBgS1VOSVRgLCBhbmQgdGhlbiBleHBsaWNpdGx5IGVuYWJsZSBgTUNUUF9URVNUYCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBob29rZWQgdXAgY29ycmVjdGx5LlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIG5leHQgc2VjdGlvbi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGBORVRfVENfU0tCX0VYVGAuIFRoaXMgb25lIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTkVUX0NMU19BQ1RgIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgYmVmb3JlIEkgY2FuIHdvcnJ5IGFib3V0IGBORVRfVENfU0tCX0VYVGAuIEknbGwgZ28gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGBORVRfQ0xTX0FDVGAgYW5kIG1ha2Ugc3VyZSBpdCdzIHZhbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAyOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6MTQuOTE0MzIxODkxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcwMjQyODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0FDVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXFxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMDoxNi40ODQ1Njk0NjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkwNzExMjE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoaXMgZGVlcGx5LlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgYE5FVF9DTFNfQUNUYCBpcyBzaG93aW5nIHVwLCB3aGljaCBpcyBnb29kLiBUaGF0J3MgYSBzdGFydGluZyBwb2ludC4gTGV0J3MgZGlnIGRlZXBlciwgYXMgSSBhbHdheXMgZG8uIEZpcnN0LCBJJ20gZ29pbmcgdG8gbG9vayBhdCBgSU5FVF9QU1BgLCBnaXZlbiBpdHMgcmVsYXRpb25zaGlwIHRvIGBJTkVUYC4gT2theSwgaXQgaGluZ2VzIG9uIGBJTkVUYCBhcyBleHBlY3RlZC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGF0IEkgd2FzIGFudGljaXBhdGluZy5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYEJSSURHRV9ORVRGSUxURVJgLiBUaGlzIG9uZSdzIGFsd2F5cyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZGVwZW5kcyBvbiBgQlJJREdFYCwgYE5FVEZJTFRFUmAsIGBJTkVUYCwgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLiBUaGF0J3MgYSBtb3JlIGludm9sdmVkIHNldCBvZiBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBzdGFuZGFyZCwgbm90aGluZyBqdW1wcyBvdXQuXG5cbkFuZCwgb2YgY291cnNlLCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGBORVRGSUxURVJfQURWQU5DRURgLCBnaXZlbiBpdHMgcm9sZS4gVGhhdCdzIGEga2V5IGNvbXBvbmVudCBpbiBhIGNvbmZpZ3VyYXRpb24gbGlrZSB0aGlzLiBVbmRlcnN0YW5kaW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gZXZlcnl0aGluZyBlbHNlIGlzIGNyaXRpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ2MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAwOjI1LjM5MTY4NTY2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIzNTQxOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjE4PWlmIE5FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTIxOS1cXG5uZXQvS2NvbmZpZzoyMjA6Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxcbm5ldC9LY29uZmlnLTIyMS1cXHRib29sIFxcXCJBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6MjYuOTE1MjM1MDc3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDY5NjIxNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgTkVURklMVEVSX0FEVkFOQ0VEYCDigJMgdGhhdCdzIGEgZ29vZCBzdGFydC4gTGV0J3Mgc2VlIGFib3V0IGVuYWJsaW5nIE11bHRpUGF0aCBUQ1AsIG9yIGBNUFRDUGAuIEl0J3MgZGVwZW5kZW50IG9uIGBJTkVUYCwgc28gdGhhdCdzIGEga2V5IHJlcXVpcmVtZW50LiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkLiBOb3csIGxvb2tpbmcgYXQgQ29udHJvbGxlciBBcmVhIE5ldHdvcmssIG9yIGBDQU5gLCB0aGF0IGxvb2tzIGxpa2UgaXQncyBhdmFpbGFibGUuXG5cblNvLCBoZXJlJ3MgbXkgaW5pdGlhbCBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIEknbGwgbmVlZCB0byBlbmFibGUgZm9yIHRoaXMgYnVpbGQ6IGBCUklER0VfTkVURklMVEVSYCwgYEJSSURHRWAsIGBORVRGSUxURVJgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYElORVRgLCBgQ0FOYCwgYE1DVFBgLCBgS1VOSVRgLCBgTUNUUF9URVNUYCwgYE1QVENQYCwgYElORVRfUFNQYCwgYE5FVF9DTFNfQUNUYCwgYE5FVF9UQ19TS0JfRVhUYCwgYW5kIGBYRlJNX1VTRVJgLlxuXG5Ib2xkIG9uLi4uIEkganVzdCByZW1lbWJlcmVkIGBNQ1RQX1RFU1RgIGlzIGEgYm9vbGVhbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYW5vdGhlciB3YXkgdG8gZW5hYmxlIGBNQ1RQX0ZMT1dTYC4gRnVydGhlciBpbnZlc3RpZ2F0aW9uISBOb3csIGxvb2tpbmcgYXQgYE1DVFBfVFJBTlNQT1JUX0kyQ2AsIEkgc2VlIHRoYXQgaXQgZGVwZW5kcyBvbiBgSTJDX1NMQVZFYC4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgYEkyQ19TTEFWRWAgdG8gbWFrZSBzdXJlIGl0J3Mgc2V0IHVwIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4NDAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6MzMuMTYyMjAwMzI3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1MTIwODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJMkNfU0xBVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pMmMvS2NvbmZpZz0xMDI9Y29uZmlnIEkyQ19TVFVCXFxuLS1cXG5kcml2ZXJzL2kyYy9LY29uZmlnLTExMy1cXG5kcml2ZXJzL2kyYy9LY29uZmlnOjExNDpjb25maWcgSTJDX1NMQVZFXFxuZHJpdmVycy9pMmMvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiSTJDIHNsYXZlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2kyYy9LY29uZmlnPTEyMT1pZiBJMkNfU0xBVkVcXG5kcml2ZXJzL2kyYy9LY29uZmlnLTEyMi1cXG5kcml2ZXJzL2kyYy9LY29uZmlnOjEyMzpjb25maWcgSTJDX1NMQVZFX0VFUFJPTVxcbmRyaXZlcnMvaTJjL0tjb25maWctMTI0LVxcdHRyaXN0YXRlIFxcXCJJMkMgZWVwcm9tIHNsYXZlIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaTJjL0tjb25maWctMTI4LVxcbmRyaXZlcnMvaTJjL0tjb25maWc6MTI5OmNvbmZpZyBJMkNfU0xBVkVfVEVTVFVOSVRcXG5kcml2ZXJzL2kyYy9LY29uZmlnLTEzMC1cXHR0cmlzdGF0ZSBcXFwiSTJDIHRlc3R1bml0IGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6MzQuNjM3MzI1OTI4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMTY2MTUwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBBZGp1c3RtZW50cyoqXG5cbk9rYXksIHNvIEkgY2FuIHNlZSB0aGUgYEkyQ19TTEFWRWAgb3B0aW9uIG5vdywgdGhhdCdzIGEgZ29vZCBzdGFydC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3dpdGNoIHRoaW5ncyB1cCBhIGJpdCBmcm9tIHRoZSB0ZXN0IGNvbmZpZ3VyYXRpb24uIEluc3RlYWQgb2YgdGhlIGN1cnJlbnQgc2V0dXAsIHdoaWNoIGxpa2VseSBpbmNsdWRlcyBgTUNUUF9URVNUYCBhbmQgYEtVTklUYCAoYW5kIGtub3dpbmcgYEtVTklUYCBjYW4gb2Z0ZW4gZHJhZyBpbiBhIHdob2xlIGxvYWQgb2YgdW5uZWNlc3NhcnkgdGVzdHMsIGV2ZW4gdGhvdWdoIGl0J3MgdXNlZnVsIGZvciBzb21lIGRlYnVnZ2luZyksIEknbSBnb2luZyB0byBlbmFibGUgYE1DVFBfVFJBTlNQT1JUX0kyQ2AgYWxvbmcgd2l0aCBgSTJDX1NMQVZFYC4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIG1vcmUgZm9jdXNlZCBlbnZpcm9ubWVudCBmb3Igd2hhdCBJJ20gdHJ5aW5nIHRvIGFjaGlldmUuIEJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgdGhvdWdoLCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1DVFBfVFJBTlNQT1JUX0kyQ2AganVzdCB0byBiZSBjZXJ0YWluIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGNvbmZsaWN0cyBvciBwcmVyZXF1aXNpdGVzLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggYW5kIGF2b2lkIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU5MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAwOjQzLjk1Mzk0MzM3NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjksXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjk6XFx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX0kyQ1xcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIk1DVFAgU01CdXMvSTJDIHRyYW5zcG9ydFxcXCJcXG4gIDMxOlxcdFxcdCMgaTJjLW11eCBpcyBvcHRpb25hbCwgYnV0IHdlIG11c3QgYnVpbGQgYXMgYSBtb2R1bGUgaWYgaTJjLW11eCBpcyBhIG1vZHVsZVxcbiAgMzI6XFx0XFx0ZGVwZW5kcyBvbiBJMkNfTVVYIHx8ICFJMkNfTVVYXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIEkyQ1xcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBJMkNfU0xBVkVcXG4gIDM1OlxcdFxcdHNlbGVjdCBNQ1RQX0ZMT1dTXFxuICAzNjpcXHRcXHRoZWxwXFxuICAzNzpcXHRcXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBTTUJ1cy9JMkMgdHJhbnNwb3J0LFxcbiAgMzg6XFx0XFx0ICBmcm9tIERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjM3LiBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6NDMuOTU0MDAyNzg0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTk3Mzg2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBzbyBJJ20gc2V0dGluZyB1cCB0aGlzIHN5c3RlbSwgYW5kIGl0IGxvb2tzIGxpa2UgYE1DVFBfVFJBTlNQT1JUX0kyQ2AgaGFzIGEgZGVwZW5kZW5jeSBvbiBib3RoIGBJMkNgIGFuZCBgSTJDX1NMQVZFYC4gTWFrZXMgc2Vuc2UuIFNvLCBsZXQncyBlbmFibGUgdGhvc2UgaW4gYWRkaXRpb24gdG8gdGhlIG1haW4gbW9kdWxlLCBgTUNUUGAsIGFuZCBgTUNUUF9UUkFOU1BPUlRfSTJDYCBpdHNlbGYuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBsaW5lZCB1cCBjb3JyZWN0bHkuXG5cbk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIEkndmUgYWxyZWFkeSBzZXQuIEkndmUgZ290IGBCUklER0VgLCBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGFuZCBgQlJJREdFX05FVEZJTFRFUmAgZW5hYmxlZCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBBbHNvLCBgQ0FOYCwgYE1DVFBgLCBgSTJDYCwgYEkyQ19TTEFWRWAsIGBNQ1RQX1RSQU5TUE9SVF9JMkNgLCBgSU5FVGAsIGBNUFRDUGAsIGBJTkVUX1BTUGAsIGBORVRfQ0xTX0FDVGAsIGBORVRfVENfU0tCX0VYVGAsIGFuZCBgWEZSTV9VU0VSYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGFtIHVwIHRvIGRhdGUgd2l0aCBteSByZXF1aXJlZCBjaGFuZ2VzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBJTkVUX1BTUGAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjaGFuZ2VzIG9yIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwOTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMDo1MC4yNzM3NDQyMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcHNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUFNQIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBJTkVUX1BTUFxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiUFNQIFNlY3VyaXR5IFByb3RvY29sIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBTS0JfREVDUllQVEVEXFxuICAgOTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gIDEwOlxcdFxcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6NTAuMjczODA2MTZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3NDEzNDE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBWYWxpZGF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgdGhhdCBpbml0aWFsIGdsYW5jZSBzZWVtcyBwcm9taXNpbmcuIFZpc3VhbGx5LCBldmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgaW4gb3JkZXIuIEhvd2V2ZXIsIGFzIHdpdGggYW55IHRlY2huaWNhbCBhc3Nlc3NtZW50LCBJIG5lZWQgdG8gZ28gYmV5b25kIHRoZSBzdXJmYWNlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIHRoZSBuZWVkIGZvciBhIGRlZXBlciBkaXZlLiBUaGF0IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIE15IGZvY3VzIHNoaWZ0cyB0byBhIGNyaXRpY2FsIGNvbXBvbmVudCwgYW5kIGEgcG90ZW50aWFsIGFyZWEgZm9yIGNvbXBsZXhpdHk6IGBNUFRDUGAuIEl0IHdhcnJhbnRzIGEgcmlnb3JvdXMgZXhhbWluYXRpb24uIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIG9uIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjkyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMDo1My42NDc5NDI3MjJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6NTMuNjQ4MDA5NTQyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNzY5OTM2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFZlcmlmaWNhdGlvbioqXG5cbkFscmlnaHQsIGluaXRpYWwgaW1wcmVzc2lvbjogdGhpbmdzIGFyZSBsb29raW5nIGdvb2QsIGdlbmVyYWxseS4gQnV0IGFzIHdpdGggYW55IGNyaXRpY2FsIGNvZGUgcmV2aWV3LCBlc3BlY2lhbGx5IGluIHRoZSBuZXR3b3JraW5nIGtlcm5lbCBzcGFjZSwgXCJnb29kXCIgaXNuJ3QgZ29vZCBlbm91Z2guIEl0J3MgdGltZSB0byBkcmlsbCBkb3duLiBUaGUgaW1tZWRpYXRlIGFyZWEgb2YgY29uY2VybiBpcyB0aGUgYE5FVF9UQ19TS0JfRVhUYCBleHRlbnNpb24uIEkgd2FudCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBpbXBsaWNhdGlvbnMgYW5kIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byB0aGlzIGV4dGVuc2lvbiBhcmUgY29ycmVjdC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIG51YW5jZXMsIGNvcm5lciBjYXNlcywgYW5kIHBvdGVudGlhbCBmb3IgdW5hbnRpY2lwYXRlZCBzaWRlLWVmZmVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFydGljdWxhciBzdHJ1Y3R1cmUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIFdlIGtub3cgdGhpcyBhcmVhIGlzIHByb25lIHRvIHN1YnRsZSBidWdzLiBMZXQncyBtYWtlIHN1cmUgaXTigJlzIGlyb25jbGFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjAwMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6NTkuODI1MDA1Mzk1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1NCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1NDpcXHRjb25maWcgTkVUX1RDX1NLQl9FWFRcXG4gOTU1OlxcdFxcdGJvb2wgXFxcIlRDIHJlY2lyY3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gOTU2OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gOTU3OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiA5NTg6XFx0XFxuIDk1OTpcXHRcXHRoZWxwXFxuIDk2MDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgdGMgY2hhaW4gbWlzc2VzIHRvIGNvbnRpbnVlIGluIE92UyBkYXRhcGF0aCBpblxcbiA5NjE6XFx0XFx0ICB0aGUgY29ycmVjdCByZWNpcmNfaWQsIGFuZCBoYXJkd2FyZSBjaGFpbiBtaXNzZXMgdG8gY29udGludWUgaW5cXG4gOTYyOlxcdFxcdCAgdGhlIGNvcnJlY3QgY2hhaW4gaW4gdGMgc29mdHdhcmUgZGF0YXBhdGguXFxuIDk2MzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6NTkuODI1MDk4NzQ1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzQxODI4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBpbml0aWFsIGltcHJlc3Npb24gaXMgcG9zaXRpdmUuIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgYWxpZ25pbmcuIEJ1dCwgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIEkgYWx3YXlzIGVtcGhhc2l6ZSBkdWUgZGlsaWdlbmNlLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBwcm9jZWVkaW5nLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIHN0YXR1cyBvZiB0aGUgYEJSSURHRV9ORVRGSUxURVJgIHNldHRpbmcuIEl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBhIHF1aWNrIGRvdWJsZS1jaGVjayBoZXJlIGNvdWxkIHNhdmUgYSBsb3Qgb2YgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuIEl0J3MgdGhlIGx5bmNocGluLCBpZiBjb25maWd1cmVkIHdyb25nLCB0aGUgd2hvbGUgc3lzdGVtIGNvbGxhcHNlcy4gQmVzdCB0byBtYWtlIHN1cmUgaXQncyBwZXJmZWN0LCBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAxOjAzLjQ5OTI4NDc3NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzE6XFx0Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4gMjMyOlxcdFxcdHRyaXN0YXRlIFxcXCJCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1xcXCJcXG4gMjMzOlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuIDIzNDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuIDIzNTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAyMzY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxuIDIzNzpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gMjM4OlxcdFxcdGhlbHBcXG4gMjM5OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBsZXQgYXJwdGFibGVzIHJlc3AuIGlwdGFibGVzIHNlZSBicmlkZ2VkXFxuIDI0MDpcXHRcXHQgIEFSUCByZXNwLiBJUCB0cmFmZmljLiBJZiB5b3Ugd2FudCBhIGJyaWRnaW5nIGZpcmV3YWxsLCB5b3UgcHJvYmFibHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MDMuNDk5MzYzODQ1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzAyMzM1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgVmVyaWZpY2F0aW9uIFN0ZXAqKlxuXG5BbHJpZ2h0LCBpbml0aWFsIGltcHJlc3Npb25zIGFyZSBwb3NpdGl2ZTsgdGhlIHByb3Bvc2VkIHNvbHV0aW9uIGFwcGVhcnMgc291bmQgb24gdGhlIHN1cmZhY2UuIEJ1dCwgYXMgYWx3YXlzLCB3ZSBjYW4ndCBiZSBjb21wbGFjZW50LiBNeSBwcmltYXJ5IGNvbmNlcm4gYXQgdGhpcyBwb2ludCBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmZvcmVzZWVuIGlzc3VlcyByZWxhdGVkIHRvIHRoZSB1c2VybGFuZCBYRlJNIGludGVyZmFjZS4gU28sIGxldCdzIGRpdmUgaW50byBhIGNsb3NlciBleGFtaW5hdGlvbiBvZiB0aGUgYFhGUk1fVVNFUmAgY29tcG9uZW50LiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCdzIHdoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgb3IgaW1wbGVtZW50YXRpb24gbnVhbmNlcyBhcmUgbW9zdCBsaWtlbHkgdG8gbHVyay4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBzdGFnZTsgYXNzdW1pbmcgZXZlcnl0aGluZyBpcyByaWdodCBhdCB0aGlzIHBvaW50IGlzIGV4dHJlbWVseSBkYW5nZXJvdXMuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGFuZCB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAxOjA3LjA2OTU5OTkzMloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIzOlxcdGNvbmZpZyBYRlJNX1VTRVJcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbiAgMjU6XFx0XFx0c2VsZWN0IFhGUk1fQUxHT1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxuICAyODpcXHRcXHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDMxOlxcdFxcbiAgMzI6XFx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MDcuMDY5Njc2MDMyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDE0NTk3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgVmVyaWZpY2F0aW9uIFByb3RvY29sKipcblxuUmlnaHQsIGluaXRpYWwgYXNzZXNzbWVudCBzZWVtcyBwb3NpdGl2ZSwgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBwcmVzZW50YXRpb24gYXJlIHNvdW5kLiBCdXQsIHlvdSBrbm93IGhvdyBpdCBpcy4gV2UgY2FuJ3QgYmUgY29tcGxhY2VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbm90IHJlbHkgb24gYXNzdW1wdGlvbnMuIFdlIG5lZWQgdG8gcmlnb3JvdXNseSBleGFtaW5lIGFuZCB2YWxpZGF0ZSBldmVyeSBrZXkgYXNzdW1wdGlvbi4gSSdtIG1vdmluZyBiZXlvbmQgYSBjYXN1YWwgcmV2aWV3LCBhbmQgaGVhZGluZyBzdHJhaWdodCB0byB0aGUgY29yZS4gU28gSSdtIG5vdyBkcmlsbGluZyBkb3duIGFuZCBjcm9zcy1yZWZlcmVuY2luZyBhZ2FpbnN0IHRoZSBlc3RhYmxpc2hlZCBwcm90b2NvbHMuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgQ0FOYCAoQ3JpdGljYWwgQXNzdW1wdGlvbiBOZXR3b3JrKSDigJMgdGhhdCdzIHRoZSBjcnVjaWFsIHN0ZXAuIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuIEknbSBsb29raW5nIGZvciBoaWRkZW4gZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUuLi4gYmFzaWNhbGx5LCBldmVyeXRoaW5nIHRoYXQgY291bGQgYmUgYSAnZ290Y2hhJyBsYXRlciBvbi4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA0NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MTMuMjcxMTM5NzEyWiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY2FuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgNjpcXHRtZW51Y29uZmlnIENBTlxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkNBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKENBTikgaXMgYSBzbG93ICh1cCB0byAxTWJpdC9zKSBzZXJpYWxcXG4gIDExOlxcdFxcdCAgY29tbXVuaWNhdGlvbnMgcHJvdG9jb2wuIERldmVsb3BtZW50IG9mIHRoZSBDQU4gYnVzIHN0YXJ0ZWQgaW5cXG4gIDEyOlxcdFxcdCAgMTk4MyBhdCBSb2JlcnQgQm9zY2ggR21iSCwgYW5kIHRoZSBwcm90b2NvbCB3YXMgb2ZmaWNpYWxseVxcbiAgMTM6XFx0XFx0ICByZWxlYXNlZCBpbiAxOTg2LiBUaGUgQ0FOIGJ1cyB3YXMgb3JpZ2luYWxseSBtYWlubHkgZm9yIGF1dG9tb3RpdmUsXFxuICAxNDpcXHRcXHQgIGJ1dCBpcyBub3cgd2lkZWx5IHVzZWQgaW4gbWFyaW5lIChOTUVBMjAwMCksIGluZHVzdHJpYWwsIGFuZCBtZWRpY2FsXFxuICAxNTpcXHRcXHQgIGFwcGxpY2F0aW9ucy4gTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQ0FOIG5ldHdvcmsgcHJvdG9jb2wgZmFtaWx5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAxOjEzLjI3MTI0NDU1MloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzcxNTYxODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqXG5cbk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGNoYW5nZXMgdG8gaG93IGBza2JfZXh0YCDigJMgdGhvc2UgZXh0ZW5zaW9ucyB0byB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSDigJMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgc2NhbiBwb2ludHMgdG8gdGhlIGZvbGxvd2luZyBjcnVjaWFsIHN5bWJvbHMsIHRoZSBvbmVzIEkgbmVlZCB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZzogYHNrYl9leHRfYWRkYCwgYF9fc2tiX2V4dF9zZXRgLCBhbmQgYF9fc2tiX2V4dF9hbGxvY2AuXG5cblRoZSBnaXN0IG9mIGl0IGlzIHRoaXM6IHRoZXkncmUgZGl0Y2hpbmcgdGhlIG9sZCBkeW5hbWljIG9mZnNldHMgaW4gZmF2b3Igb2YgZml4ZWQsIGNvbXBpbGUtdGltZSBvZmZzZXRzIGFuZCBhIGJpdG1hcC1iYXNlZCBzeXN0ZW0gdG8gdHJhY2sgd2hpY2ggZXh0ZW5zaW9ucyBhcmUgcHJlc2VudC4gVGhpcyBpcyBhIGJpZyBkZWFsISBJdCdzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBhbmQgaG93IHRoZXNlIGV4dGVuc2lvbnMg4oCTIHRoaW5ncyBsaWtlIElQc2VjLCBCcmlkZ2UgTmV0ZmlsdGVyLCBUQywgTVBUQ1AsIE1DVFAsIFBTUCwgYW5kIENBTiDigJMgaG9vayBpbnRvIHNvY2tldCBidWZmZXJzLiBBbnkgbW9kaWZpY2F0aW9uIGluIHRoaXMgYXJlYSBjYW4gaGF2ZSB3aWRlc3ByZWFkIGVmZmVjdHMuIEdpdmVuIHRoZSByZWFjaGFiaWxpdHkgYW5kIHRoZSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIHRvIGJvdGggZXhlY3V0aW9uIGZsb3cgYW5kIG1lbW9yeSBsYXlvdXQsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhpcyBpcyBhIHByaW1lIHRhcmdldCBmb3IgZGlzY292ZXJpbmcgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzIG9yIG90aGVyIGhhcmQtdG8tZmluZCBidWdzLlxuXG5JJ20gZ29pbmcgdG8gc2V0IHVwIGEgdGVzdGluZyBzY2VuYXJpbyB0byBkZXRlcm1pbmUgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0NTQsIk91dHB1dFRva2VucyI6MjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MjEuMDQyODA5Mzg3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2MzE0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIkJSSURHRV9ORVRGSUxURVJcIixcbiAgICBcIkNBTlwiLFxuICAgIFwiTUNUUFwiLFxuICAgIFwiSTJDXCIsXG4gICAgXCJJMkNfU0xBVkVcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX0kyQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTVBUQ1BcIixcbiAgICBcIklORVRfUFNQXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX1RDX1NLQl9FWFRcIixcbiAgICBcIlhGUk1fVVNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9leHRfYWRkXCIsXG4gICAgXCJfX3NrYl9leHRfc2V0XCIsXG4gICAgXCJfX3NrYl9leHRfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykuIEl0IHJlcGxhY2VzIGR5bmFtaWMgb2Zmc2V0cyB3aXRoIGNvbXBpbGUtdGltZSBmaXhlZCBvZmZzZXRzIGFuZCB1c2VzIGEgYml0bWFwIHRvIHRyYWNrIHByZXNlbnQgZXh0ZW5zaW9ucy4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBleHRlbnNpb25zIGxpa2UgSVBzZWMsIEJyaWRnZSBOZXRmaWx0ZXIsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOIGFyZSBhdHRhY2hlZCB0byBzb2NrZXQgYnVmZmVycy4gSXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgbWVtb3J5IGxheW91dCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiQlJJREdFX05FVEZJTFRFUlwiLFxuICAgIFwiQ0FOXCIsXG4gICAgXCJNQ1RQXCIsXG4gICAgXCJJMkNcIixcbiAgICBcIkkyQ19TTEFWRVwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfSTJDXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiSU5FVF9QU1BcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORVRfVENfU0tCX0VYVFwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX2V4dF9hZGRcIixcbiAgICBcIl9fc2tiX2V4dF9zZXRcIixcbiAgICBcIl9fc2tiX2V4dF9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGFsbG9jYXRpb24gc3RyYXRlZ3kgZm9yIGBza2JfZXh0YCAoc2tfYnVmZiBleHRlbnNpb25zKS4gSXQgcmVwbGFjZXMgZHluYW1pYyBvZmZzZXRzIHdpdGggY29tcGlsZS10aW1lIGZpeGVkIG9mZnNldHMgYW5kIHVzZXMgYSBiaXRtYXAgdG8gdHJhY2sgcHJlc2VudCBleHRlbnNpb25zLiBUaGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGNoYW5nZSBhZmZlY3RpbmcgaG93IGV4dGVuc2lvbnMgbGlrZSBJUHNlYywgQnJpZGdlIE5ldGZpbHRlciwgVEMsIE1QVENQLCBNQ1RQLCBQU1AsIGFuZCBDQU4gYXJlIGF0dGFjaGVkIHRvIHNvY2tldCBidWZmZXJzLiBJdCBpcyBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGFuZCBtZW1vcnkgbGF5b3V0LCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MjEuMTIxNDQ3MjAxWiIsIlNlcSI6NjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU5NzcwNDQyOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMToyMS4xMjE5ODc3MjFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA1OTc2NTAwNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIGxheW91dCBvZiBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykgZnJvbSBhIHZhcmlhYmxlLXNpemVkLCBkeW5hbWljYWxseSBhcHBlbmRlZCBsYXlvdXQgdG8gYSBmaXhlZC1zaXplZCBsYXlvdXQgKGBzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXRgKSB3aXRoIHN0YXRpYyBvZmZzZXRzIGZvciBlYWNoIGV4dGVuc2lvbiB0eXBlLlxcblxcbjEuIFRoZSBuZXcgYHNrYl9leHRfbGF5b3V0YCBpcyBhbGxvY2F0ZWQgZnJvbSBhIHNsYWIgY2FjaGUsIGFuZCBsaWtlIHRoZSBvbGQgY29kZSwgb25seSB0aGUgaGVhZGVyIChgcmVmY250YCBhbmQgYHByZXNlbnRfZXh0ZW5zaW9uc2ApIGlzIGluaXRpYWxpemVkLiBUaGUgZXh0ZW5zaW9uIGRhdGEgc2xvdHMgcmVtYWluIHVuaW5pdGlhbGl6ZWQgdW50aWwgZXhwbGljaXRseSByZXF1ZXN0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIuXFxuMi4gVGhlIHVuaW5pdGlhbGl6ZWQgc2xvdHMgYXJlIHN0cmljdGx5IGd1YXJkZWQgYnkgdGhlIGBwcmVzZW50X2V4dGVuc2lvbnNgIGJpdG1hcC4gVGhleSBjYW5ub3QgYmUgYWNjZXNzZWQgdW5sZXNzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpcyBzZXQsIHdoaWNoIG9ubHkgaGFwcGVucyB3aGVuIGFuIGV4dGVuc2lvbiBpcyBwcm9wZXJseSBhZGRlZCBhbmQgaW5pdGlhbGl6ZWQuXFxuMy4gV2hlbiBjb3B5aW5nIGFuIGV4dGVuc2lvbiAoYHNrYl9leHRfbWF5YmVfY293YCksIHRoZSBjb2RlIGNvcGllcyB0aGUgaGVhZGVyIGFuZCBvbmx5IHRoZSBwcmVzZW50IGV4dGVuc2lvbnMsIGxlYXZpbmcgdGhlIHVudXNlZCBzbG90cyB1bmluaXRpYWxpemVkLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgYmVoYXZpb3IgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXFxuNC4gYHNrYl9leHRgIGFuZCBpdHMgZXh0ZW5zaW9ucyBhcmUgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgdXNlZCBmb3IgbWV0YWRhdGEgKGUuZy4sIElQc2VjLCBUQywgYnJpZGdlIG5ldGZpbHRlcikgYW5kIGFyZSBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmssIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgaW5mby1sZWFrcy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIGluY29ycmVjdCBvZmZzZXQgY2FsY3VsYXRpb25zIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDhjNmM0MDNmODZmMWFiYTA2YzNiNDkxMmIzMDlhYzM1ZjMzY2VlY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE2OjU3OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDk1MTg0MTgzMTgwZjYuLjVhNTE0M2U0N2IzMDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtNTAxMSw0NSArNTAxMSw4MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9uZmN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGxvbmcgbmZjdClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19TS0JfRVhURU5TSU9OU1xuLWVudW0gc2tiX2V4dF9pZCB7XG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG4tXHRTS0JfRVhUX0JSSURHRV9ORixcbisjZGVmaW5lIFNLQl9FWFRfWF9CUklER0VfTkZcdFgoU0tCX0VYVF9CUklER0VfTkYsIHN0cnVjdCBuZl9icmlkZ2VfaW5mbylcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX0JSSURHRV9ORlxuICNlbmRpZlxuLSNpZmRlZiBDT05GSUdfWEZSTVxuLVx0U0tCX0VYVF9TRUNfUEFUSCxcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfWEZSTSlcbisjZGVmaW5lIFNLQl9FWFRfWF9TRUNfUEFUSFx0WChTS0JfRVhUX1NFQ19QQVRILCBzdHJ1Y3Qgc2VjX3BhdGgpXG4rI2Vsc2VcbisjZGVmaW5lIFNLQl9FWFRfWF9TRUNfUEFUSFxuICNlbmRpZlxuK1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVClcbi1cdFRDX1NLQl9FWFQsXG4rI2RlZmluZSBTS0JfRVhUX1hfVENcdFx0WChUQ19TS0JfRVhULCBzdHJ1Y3QgdGNfc2tiX2V4dClcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX1RDXG4gI2VuZGlmXG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuLVx0U0tCX0VYVF9NUFRDUCxcbisjZGVmaW5lIFNLQl9FWFRfWF9NUFRDUFx0XHRYKFNLQl9FWFRfTVBUQ1AsIHN0cnVjdCBtcHRjcF9leHQpXG4rI2Vsc2VcbisjZGVmaW5lIFNLQl9FWFRfWF9NUFRDUFxuICNlbmRpZlxuK1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX0ZMT1dTKVxuLVx0U0tCX0VYVF9NQ1RQLFxuKyNkZWZpbmUgU0tCX0VYVF9YX01DVFBcdFx0WChTS0JfRVhUX01DVFAsIHN0cnVjdCBtY3RwX2Zsb3cpXG4rI2Vsc2VcbisjZGVmaW5lIFNLQl9FWFRfWF9NQ1RQXG4gI2VuZGlmXG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuLVx0U0tCX0VYVF9QU1AsXG4rI2RlZmluZSBTS0JfRVhUX1hfUFNQXHRcdFgoU0tCX0VYVF9QU1AsIHN0cnVjdCBwc3Bfc2tiX2V4dClcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX1BTUFxuICNlbmRpZlxuK1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19DQU4pXG4tXHRTS0JfRVhUX0NBTixcbisjZGVmaW5lIFNLQl9FWFRfWF9DQU5cdFx0WChTS0JfRVhUX0NBTiwgc3RydWN0IGNhbl9za2JfZXh0KVxuKyNlbHNlXG4rI2RlZmluZSBTS0JfRVhUX1hfQ0FOXG4gI2VuZGlmXG4tXHRTS0JfRVhUX05VTSwgLyogbXVzdCBiZSBsYXN0ICovXG4rXG4rI2RlZmluZSBTS0JfRVhUX0ZPUkVBQ0goWClcdFxcXG4rXHRTS0JfRVhUX1hfQlJJREdFX05GXHRcXFxuK1x0U0tCX0VYVF9YX1NFQ19QQVRIXHRcXFxuK1x0U0tCX0VYVF9YX1RDXHRcdFxcXG4rXHRTS0JfRVhUX1hfTVBUQ1BcdFx0XFxcbitcdFNLQl9FWFRfWF9NQ1RQXHRcdFxcXG4rXHRTS0JfRVhUX1hfUFNQXHRcdFxcXG4rXHRTS0JfRVhUX1hfQ0FOXG4rXG4rZW51bSBza2JfZXh0X2lkIHtcbisjZGVmaW5lIFgoaWQsIHR5cGUpXHRpZCxcbitcdFNLQl9FWFRfRk9SRUFDSChYKVxuKyN1bmRlZiBYXG4rXHRTS0JfRVhUX05VTSxcbiB9O1xuIFxuK2V4dGVybiBjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV07XG4rXG4gLyoqXG4gICpcdHN0cnVjdCBza2JfZXh0IC0gc2tfYnVmZiBleHRlbnNpb25zXG4gICpcdEByZWZjbnQ6IDEgb24gYWxsb2NhdGlvbiwgZGVhbGxvY2F0ZWQgb24gMFxuLSAqXHRAb2Zmc2V0OiBvZmZzZXQgdG8gYWRkIHRvIEBkYXRhIHRvIG9idGFpbiBleHRlbnNpb24gYWRkcmVzc1xuLSAqXHRAY2h1bmtzOiBzaXplIGN1cnJlbnRseSBhbGxvY2F0ZWQsIHN0b3JlZCBpbiBTS0JfRVhUX0FMSUdOX1NISUZUIHVuaXRzXG4rICpcdEBwcmVzZW50X2V4dGVuc2lvbnM6IGJpdG1hcCBvZiBleHRlbnNpb25zIHN0b3JlZCBpbiBAZGF0YVxuICAqXHRAZGF0YTogc3RhcnQgb2YgZXh0ZW5zaW9uIGRhdGEsIHZhcmlhYmxlIHNpemVkXG4gICpcbi0gKlx0Tm90ZTogb2Zmc2V0cy9sZW5ndGhzIGFyZSBzdG9yZWQgaW4gY2h1bmtzIG9mIDggYnl0ZXMsIHRoaXMgYWxsb3dzXG4tICpcdHRvIHVzZSAndTgnIHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aCBvZiBleHRlbnNpb24gZGF0YS5cbisgKlx0RWFjaCBleHRlbnNpb24gaWQgb2NjdXBpZXMgYSBmaXhlZCBzbG90IHdpdGhpbiBAZGF0YSwgbG9jYXRlZCBhdFxuKyAqXHRza2JfZXh0X29mZnNldFtpZF0gY2h1bmtzIG9mIDggYnl0ZXMuIFN0b3Jpbmcgb2Zmc2V0cy9sZW5ndGhzXG4rICpcdGluIDgtYnl0ZSBjaHVua3MgYWxsb3dzICd1OCcgdHlwZXMgd2hpbGUgYWxsb3dpbmcgdXAgdG8gMmtiIHdvcnRoXG4rICpcdG9mIGV4dGVuc2lvbiBkYXRhLlxuICAqL1xuIHN0cnVjdCBza2JfZXh0IHtcbiBcdHJlZmNvdW50X3QgcmVmY250O1xuLVx0dTggb2Zmc2V0W1NLQl9FWFRfTlVNXTsgLyogaW4gY2h1bmtzIG9mIDggYnl0ZXMgKi9cbi1cdHU4IGNodW5rcztcdFx0Lyogc2FtZSAqL1xuK1x0dTggcHJlc2VudF9leHRlbnNpb25zO1xuIFx0Y2hhciBkYXRhW10gX19hbGlnbmVkKDgpO1xuIH07XG4gXG5AQCAtNTA4Nyw3ICs1MTIzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3NrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGkpXG4ge1xuLVx0cmV0dXJuICEhZXh0LVx1MDAzZW9mZnNldFtpXTtcbitcdHJldHVybiBleHQtXHUwMDNlcHJlc2VudF9leHRlbnNpb25zIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgaSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbkBAIC01MTA2LDcgKzUxNDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9leHRfZmluZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4gXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSkge1xuIFx0XHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVx1MDAzZWV4dGVuc2lvbnM7XG4gXG4tXHRcdHJldHVybiAodm9pZCAqKWV4dCArIChleHQtXHUwMDNlb2Zmc2V0W2lkXSBcdTAwM2NcdTAwM2MgMyk7XG4rXHRcdHJldHVybiAodm9pZCAqKWV4dCArIChza2JfZXh0X29mZnNldFtpZF0gXHUwMDNjXHUwMDNjIDMpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYzgyYTE0NzJhNWVhOC4uOGU1ZGI1Nzk3MjVkMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTUxMzQsNDcgKzUxMzQsMzIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnQpO1xuICNkZWZpbmUgU0tCX0VYVF9DSFVOS1NJWkVPRih4KVx0KEFMSUdOKChzaXplb2YoeCkpLCBTS0JfRVhUX0FMSUdOX1ZBTFVFKSAvIFNLQl9FWFRfQUxJR05fVkFMVUUpXG4gXG4gc3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHtcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbi1cdFtTS0JfRVhUX0JSSURHRV9ORl0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBuZl9icmlkZ2VfaW5mbyksXG4tI2VuZGlmXG4tI2lmZGVmIENPTkZJR19YRlJNXG4tXHRbU0tCX0VYVF9TRUNfUEFUSF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBzZWNfcGF0aCksXG4tI2VuZGlmXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKVxuLVx0W1RDX1NLQl9FWFRdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgdGNfc2tiX2V4dCksXG4tI2VuZGlmXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuLVx0W1NLQl9FWFRfTVBUQ1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbXB0Y3BfZXh0KSxcbi0jZW5kaWZcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUylcbi1cdFtTS0JfRVhUX01DVFBdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbWN0cF9mbG93KSxcbi0jZW5kaWZcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG4tXHRbU0tCX0VYVF9QU1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgcHNwX3NrYl9leHQpLFxuLSNlbmRpZlxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19DQU4pXG4tXHRbU0tCX0VYVF9DQU5dID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgY2FuX3NrYl9leHQpLFxuLSNlbmRpZlxuKyNkZWZpbmUgWChpZCwgdHlwZSlcdFtpZF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHR5cGUpLFxuK1x0U0tCX0VYVF9GT1JFQUNIKFgpXG4rI3VuZGVmIFhcbiB9O1xuIFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19ub19wcm9maWxlIHVuc2lnbmVkIGludCBza2JfZXh0X3RvdGFsX2xlbmd0aCh2b2lkKVxuLXtcbi1cdHVuc2lnbmVkIGludCBsID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3Qgc2tiX2V4dCk7XG4tXHRpbnQgaTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2tiX2V4dF90eXBlX2xlbik7IGkrKylcbi1cdFx0bCArPSBza2JfZXh0X3R5cGVfbGVuW2ldO1xuK3N0cnVjdCBza2JfZXh0X2xheW91dCB7XG4rXHR1OFx0aGVhZGVyW3NpemVvZihzdHJ1Y3Qgc2tiX2V4dCldIF9fYWxpZ25lZChTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbisjZGVmaW5lIFgoaWQsIHR5cGUpXHR0eXBlIGZfIyNpZCBfX2FsaWduZWQoU0tCX0VYVF9BTElHTl9WQUxVRSk7XG4rXHRTS0JfRVhUX0ZPUkVBQ0goWClcbisjdW5kZWYgWFxuK307XG4gXG4tXHRyZXR1cm4gbDtcbi19XG4rY29uc3QgdTggc2tiX2V4dF9vZmZzZXRbU0tCX0VYVF9OVU1dID0ge1xuKyNkZWZpbmUgWChpZCwgdHlwZSlcdFtpZF0gPSBvZmZzZXRvZihzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQsIGZfIyNpZCkgLyBTS0JfRVhUX0FMSUdOX1ZBTFVFLFxuK1x0U0tCX0VYVF9GT1JFQUNIKFgpXG4rI3VuZGVmIFhcbit9O1xuK0VYUE9SVF9TWU1CT0woc2tiX2V4dF9vZmZzZXQpO1xuIFxuIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBfX25vX3Byb2ZpbGUgc2tiX2V4dGVuc2lvbnNfaW5pdCh2b2lkKVxuIHtcbiBcdEJVSUxEX0JVR19PTihTS0JfRVhUX05VTSBcdTAwM2UgOCk7XG4tXHRCVUlMRF9CVUdfT04oc2tiX2V4dF90b3RhbF9sZW5ndGgoKSBcdTAwM2UgMjU1KTtcbitcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0KSBcdTAwM2UgMjU1ICogU0tCX0VYVF9BTElHTl9WQUxVRSk7XG4gXG4gXHRza2J1ZmZfZXh0X2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXCJza2J1ZmZfZXh0X2NhY2hlXCIsXG4tXHRcdFx0XHRcdCAgICAgU0tCX0VYVF9BTElHTl9WQUxVRSAqIHNrYl9leHRfdG90YWxfbGVuZ3RoKCksXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBza2JfZXh0X2xheW91dCksXG4gXHRcdFx0XHRcdCAgICAgMCxcbiBcdFx0XHRcdFx0ICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQyxcbiBcdFx0XHRcdFx0ICAgICBOVUxMKTtcbkBAIC03MDgzLDcgKzcwNjgsNyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9jb25kZW5zZSk7XG4gI2lmZGVmIENPTkZJR19TS0JfRVhURU5TSU9OU1xuIHN0YXRpYyB2b2lkICpza2JfZXh0X2dldF9wdHIoc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGlkKVxuIHtcbi1cdHJldHVybiAodm9pZCAqKWV4dCArIChleHQtXHUwMDNlb2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuK1x0cmV0dXJuICh2b2lkICopZXh0ICsgKHNrYl9leHRfb2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuIH1cbiBcbiAvKipcbkBAIC03MTAwLDcgKzcwODUsNyBAQCBzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKVxuIFx0c3RydWN0IHNrYl9leHQgKm5ldyA9IGttZW1fY2FjaGVfYWxsb2Moc2tidWZmX2V4dF9jYWNoZSwgZmxhZ3MpO1xuIFxuIFx0aWYgKG5ldykge1xuLVx0XHRtZW1zZXQobmV3LVx1MDAzZW9mZnNldCwgMCwgc2l6ZW9mKG5ldy1cdTAwM2VvZmZzZXQpKTtcbitcdFx0bmV3LVx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyA9IDA7XG4gXHRcdHJlZmNvdW50X3NldChcdTAwMjZuZXctXHUwMDNlcmVmY250LCAxKTtcbiBcdH1cbiBcbkBAIC03MTExLDYgKzcwOTYsNyBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgb2xkX2FjdGl2ZSlcbiB7XG4gXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3O1xuK1x0aW50IGk7XG4gXG4gXHRpZiAocmVmY291bnRfcmVhZChcdTAwMjZvbGQtXHUwMDNlcmVmY250KSA9PSAxKVxuIFx0XHRyZXR1cm4gb2xkO1xuQEAgLTcxMTksNyArNzEwNSwxMiBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRtZW1jcHkobmV3LCBvbGQsIG9sZC1cdTAwM2VjaHVua3MgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbitcdG1lbWNweShuZXcsIG9sZCwgU0tCX0VYVF9DSFVOS1NJWkVPRigqb2xkKSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgU0tCX0VYVF9OVU07IGkrKykge1xuK1x0XHRpZiAob2xkLVx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGkpKVxuK1x0XHRcdG1lbWNweShza2JfZXh0X2dldF9wdHIobmV3LCBpKSwgc2tiX2V4dF9nZXRfcHRyKG9sZCwgaSksXG4rXHRcdFx0ICAgICAgIHNrYl9leHRfdHlwZV9sZW5baV0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbitcdH1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZuZXctXHUwMDNlcmVmY250LCAxKTtcbiBcbiAjaWZkZWYgQ09ORklHX1hGUk1cbkBAIC03MTU2LDEyICs3MTQ3LDggQEAgc3RhdGljIHN0cnVjdCBza2JfZXh0ICpza2JfZXh0X21heWJlX2NvdyhzdHJ1Y3Qgc2tiX2V4dCAqb2xkLFxuIHZvaWQgKl9fc2tiX2V4dF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkLFxuIFx0XHQgICAgc3RydWN0IHNrYl9leHQgKmV4dClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbmV3bGVuLCBuZXdvZmYgPSBTS0JfRVhUX0NIVU5LU0laRU9GKCpleHQpO1xuLVxuIFx0c2tiX2V4dF9wdXQoc2tiKTtcbi1cdG5ld2xlbiA9IG5ld29mZiArIHNrYl9leHRfdHlwZV9sZW5baWRdO1xuLVx0ZXh0LVx1MDAzZWNodW5rcyA9IG5ld2xlbjtcbi1cdGV4dC1cdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xuK1x0ZXh0LVx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyA9IDEgXHUwMDNjXHUwMDNjIGlkO1xuIFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBleHQ7XG4gXHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPSAxIFx1MDAzY1x1MDAzYyBpZDtcbiBcdHJldHVybiBza2JfZXh0X2dldF9wdHIoZXh0LCBpZCk7XG5AQCAtNzE4NCwzMSArNzE3MSwyMyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChfX3NrYl9leHRfc2V0LCBcIk5FVERFVl9JTlRFUk5BTFwiKTtcbiAgKi9cbiB2b2lkICpza2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4ge1xuLVx0c3RydWN0IHNrYl9leHQgKm5ldywgKm9sZCA9IE5VTEw7XG4tXHR1bnNpZ25lZCBpbnQgbmV3bGVuLCBuZXdvZmY7XG4rXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3O1xuIFxuIFx0aWYgKHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucykge1xuLVx0XHRvbGQgPSBza2ItXHUwMDNlZXh0ZW5zaW9ucztcbi1cbi1cdFx0bmV3ID0gc2tiX2V4dF9tYXliZV9jb3cob2xkLCBza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpO1xuK1x0XHRuZXcgPSBza2JfZXh0X21heWJlX2Nvdyhza2ItXHUwMDNlZXh0ZW5zaW9ucyxcbitcdFx0XHRcdFx0c2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKTtcbiBcdFx0aWYgKCFuZXcpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRcdGlmIChfX3NrYl9leHRfZXhpc3QobmV3LCBpZCkpXG4gXHRcdFx0Z290byBzZXRfYWN0aXZlO1xuLVxuLVx0XHRuZXdvZmYgPSBuZXctXHUwMDNlY2h1bmtzO1xuIFx0fSBlbHNlIHtcbi1cdFx0bmV3b2ZmID0gU0tCX0VYVF9DSFVOS1NJWkVPRigqbmV3KTtcbi1cbiBcdFx0bmV3ID0gX19za2JfZXh0X2FsbG9jKEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIW5ldylcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdG5ld2xlbiA9IG5ld29mZiArIHNrYl9leHRfdHlwZV9sZW5baWRdO1xuLVx0bmV3LVx1MDAzZWNodW5rcyA9IG5ld2xlbjtcbi1cdG5ldy1cdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xuK1x0bmV3LVx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyB8PSAxIFx1MDAzY1x1MDAzYyBpZDtcbiBzZXRfYWN0aXZlOlxuIFx0c2tiLVx1MDAzZXNsb3dfZ3JvID0gMTtcbiBcdHNrYi1cdTAwM2VleHRlbnNpb25zID0gbmV3O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MjEuMTIxOTg4NTYxWiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzEzNzYwMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIGluIHRoZSBgc2tiX2V4dGAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYHNrYl9leHRgIGlzIG1hbmFnZWQuICBJbnN0ZWFkIG9mIHZhcmlhYmxlLXNpemVkIGV4dGVuc2lvbnMgd2l0aCBvZmZzZXRzIHRyYWNrZWQgaW4gYGV4dC1cdTAwM2VvZmZzZXRgLCB3ZSdyZSBtb3ZpbmcgdG8gYSBmaXhlZCBgc3RydWN0IHNrYl9leHRfbGF5b3V0YCB3aXRoIHByZS1kZWZpbmVkIG9mZnNldHMgYW5kIGEgYml0bWFwIChgcHJlc2VudF9leHRlbnNpb25zYCkgZm9yIHRyYWNraW5nIHdoaWNoIGV4dGVuc2lvbnMgYXJlIGFjdHVhbGx5IHByZXNlbnQuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIGEgY2xhc3NpYyBidWcgY2xhc3MuXG5cblRoZSBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGBza2J1ZmZfZXh0X2NhY2hlYCwgYSBzbGFiIGNhY2hlLiBBbGxvY2F0aW9uIHdpdGggYGttZW1fY2FjaGVfYWxsb2NgICpkb2Vzbid0KiB6ZXJvIHRoZSBlbnRpcmUgc3RydWN0OyBpdCBvbmx5IGluaXRpYWxpemVzIGBwcmVzZW50X2V4dGVuc2lvbnNgIHRvIHplcm8gYW5kIHRoZSByZWZjb3VudC4gIFNvLCB0aGUgZXh0ZW5zaW9uIHNsb3RzIHRoZW1zZWx2ZXMgYXJlIHVuaW5pdGlhbGl6ZWQgYXQgYWxsb2NhdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGRpZ2dpbmcgZm9yIHBvdGVudGlhbCBwcm9ibGVtcy5cblxuV2hlbiBhbiBleHRlbnNpb24gaXMgYWRkZWQgKHVzaW5nIGBza2JfZXh0X2FkZGAgb3IgYF9fc2tiX2V4dF9zZXRgKSwgdGhlIGNvZGUgc2V0cyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gYHByZXNlbnRfZXh0ZW5zaW9uc2AgYW5kIHRoZSAqY2FsbGVyKiBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBleHRlbnNpb24gZGF0YSB3aXRoaW4gaXRzIGZpeGVkIHNsb3QuIFRoYXQncyBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQsIGJ1dC4uLiB3aGF0IGlmIHRoZSBjYWxsZXIgZG9lc24ndCBpbml0aWFsaXplICphbGwqIHRoZSBmaWVsZHMgb2YgdGhlIGV4dGVuc2lvbiwgb3IgdGhlcmUncyBwYWRkaW5nIHdpdGhpbiB0aGUgc3RydWN0PyBJdCBkb2Vzbid0IHNlZW0gdG8gYmUgYSBuZXcgcHJvYmxlbS5cblxuVGhlIGtleSBwb2ludCBoZXJlIGlzIGBza2JfZXh0X21heWJlX2Nvd2AgKGNvcHktb24td3JpdGUpLiBUaGUgb2xkIGNvZGUgY29waWVkIHRoZSB3aG9sZSBjaHVuaywgd2hpY2ggaW5jbHVkZWQgYm90aCBpbml0aWFsaXplZCBleHRlbnNpb25zIGFuZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBuZXcgY29kZSBkb2VzIHRoaXM6IEZpcnN0LCBpdCBjb3BpZXMgdGhlIGhlYWRlcjogYG1lbWNweShuZXcsIG9sZCwgU0tCX0VYVF9DSFVOS1NJWkVPRigqb2xkKSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO2AgVGhlbiwgaXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgKnByZXNlbnQqIGV4dGVuc2lvbnMgYW5kIGNvcGllcyBvbmx5IHRoZSBkYXRhOiBgbWVtY3B5KHNrYl9leHRfZ2V0X3B0cihuZXcsIGkpLCBza2JfZXh0X2dldF9wdHIob2xkLCBpKSwgc2tiX2V4dF90eXBlX2xlbltpXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO2BcblxuTm93LCB0aGUgcG90ZW50aWFsIGlzc3VlIGJlY29tZXMgY2xlYXI6IHRoZSBuZXcgY29kZSBvbmx5IGNvcGllcyB0aGUgZGF0YSBvZiBleHRlbnNpb25zIHRoYXQgYXJlICpwcmVzZW50Ki4gVGhlIHVuaW5pdGlhbGl6ZWQgc2xvdHMgZm9yIGV4dGVuc2lvbnMgKm5vdCogcHJlc2VudCBpbiB0aGUgb2xkIGBza2JfZXh0YCByZW1haW4gdW5pbml0aWFsaXplZCBpbiB0aGUgbmV3IG9uZS4gV2lsbCB0aGF0IGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmU/IElmIGFuIGV4dGVuc2lvbiBpcyBhZGRlZCBsYXRlciwgdGhlIGNhbGxlciB3aWxsIGluaXRpYWxpemUgaXQuIElmIGFuIGV4dGVuc2lvbiBpcyBuZXZlciB1c2VkLCBpdCByZW1haW5zIHVudG91Y2hlZC4gVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBldmVyIGFjY2Vzc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBzZW50IG92ZXIgdGhlIG5ldHdvcms/XG5cbkkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYHNrYl9leHRgIGlzbid0IGxlYWtlZCB0byB1c2VyIHNwYWNlIGJlY2F1c2UgdGhhdCB3b3VsZCBiZSBhIHNlcmlvdXMgaW5mbyBsZWFrLiBMdWNraWx5LCBgc2tiX2V4dGAgaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSBhdHRhY2hlZCB0byBgc2tfYnVmZmAgYW5kIHVzZWQgYnkgdGhpbmdzIGxpa2UgSVBzZWMsIGJyaWRnZSBuZXRmaWx0ZXIsIFRDLCBNUFRDUCwgZXRjLiwgYW5kIG5vdCBzZW50IHRvIHVzZXJzcGFjZS5cblxuSG93ZXZlciwgY29uc2lkZXIgdGhpcyBzY2VuYXJpbzogIGlmIGBvbGRgIGhhZCBhbiBleHRlbnNpb24gYW5kLCBiZWNhdXNlIG9mIHBhZGRpbmcsIGl0IGhhZCAqdW5pbml0aWFsaXplZCogbWVtb3J5LCB0aGUgYG1lbWNweWAgd291bGQgbm93IGNvcHkgdGhhdCB1bmluaXRpYWxpemVkIGRhdGEgdG8gYG5ld2AuICBUaGlzIGlzbid0IGEgbmV3IGlzc3VlLCBLTVNBTiB3b3VsZCBiZSB0cmFja2luZyB0aGUgZGF0YSBhbmQgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB3b3VsZG4ndCBiZSBhIHByb2JsZW0gYnkgaXRzZWxmLiBCdXQgd2hhdCBhYm91dCB0aGUgaGVhZGVyP1xuXG5UaGUgaGVhZGVyIG9mIHRoZSBgc2tiX2V4dGAgKHN0cnVjdCBgc2tiX2V4dGApIGlzIGNvcGllZCB3aXRoIGBtZW1jcHkobmV3LCBvbGQsIFNLQl9FWFRfQ0hVTktTSVpFT0YoKm9sZCkgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtgLiBOb3csIGBTS0JfRVhUX0NIVU5LU0laRU9GKCpvbGQpICogU0tCX0VYVF9BTElHTl9WQUxVRWAgaXMgOCBieXRlcywgZnJvbSBzdHJ1Y3QgYHNrYl9leHRgIChjb250YWluaW5nIHJlZmNvdW50IGFuZCBwcmVzZW50X2V4dGVuc2lvbnMpLiBUaGlzIGluY2x1ZGVzIDMgYnl0ZXMgb2YgdW5pbml0aWFsaXplZCBwYWRkaW5nLiBDb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUga2VybmVsIGlzIGdlbmVyYWxseSBva2F5LCB1bmxlc3MgaXQgaXMgdXNlZCBpbiBhIGJyYW5jaCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1dCBvbmx5IGNvbXBsYWlucyBpZiBhbiBhY2Nlc3MgaXMgbWFkZS4gU28gdGhpcyBwcm9iYWJseSBpc24ndCBhIHByb2JsZW0uXG5cbk5vdywgY2hlY2tpbmcgdGhlIG9sZCBjb2RlOiBgbWVtc2V0KG5ldy1cdTAwM2VvZmZzZXQsIDAsIHNpemVvZihuZXctXHUwMDNlb2Zmc2V0KSk7YC4gSW4gdGhlIG5ldyBjb2RlLCBvbmx5IGBuZXctXHUwMDNlcHJlc2VudF9leHRlbnNpb25zID0gMDtgIGlzIGRvbmUuIEJ1dCwgc2luY2UgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpcyBub3cgZml4ZWQsIHRoaXMgc2hvdWxkIGJlIGZpbmUuIEl0IGlzIGFsbG9jYXRlZCBmcm9tIGEgc2xhYiBjYWNoZS5cblxuQSBrZXkgY29uY2VybiBpcyBLTVNBTi1zcGVjaWZpYzogYHNrYl9leHRfbWF5YmVfY293YCB1c2VzIGBtZW1jcHkoLi4uLCBza2JfZXh0X3R5cGVfbGVuW2ldICogU0tCX0VYVF9BTElHTl9WQUxVRSlgIHRvIGNvcHkgZWFjaCBleHRlbnNpb24uIGBza2JfZXh0X3R5cGVfbGVuYCBzdG9yZXMgYFNLQl9FWFRfQ0hVTktTSVpFT0YodHlwZSlgIChjaHVuay1hbGlnbmVkIHNpemUgb2YgdGhlIGV4dGVuc2lvbikuIElmIHRoZSBleHRlbnNpb24gc2l6ZSBpc24ndFxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMTo1MC44MzU3NTIwMDFaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDc1NTU1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX2V4dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMjkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9NDg9aW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtNTEtXFx0c3RydWN0IGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjUyOlxcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTc4LVxcdFxcdC8qIHNhdmUgZnJhbWVfbGVuIHRvIHJldXNlIGl0IHdoZW4gdHJhbnNtaXNzaW9uIGlzIGNvbXBsZXRlZCAqL1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6Nzk6XFx0XFx0Y3N4ID0gY2FuX3NrYl9leHRfZmluZChza2IpO1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtODAtXFx0XFx0aWYgKGNzeClcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MTAyPV9fY2FuX2dldF9lY2hvX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWR4LFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xMTctXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtXFx1MDAzZWVjaG9fc2tiW2lkeF07XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoxMTg6XFx0XFx0c3RydWN0IGNhbl9za2JfZXh0ICpjc3g7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xMTktXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTEyNi1cXHRcXHRpZiAoZnJhbWVfbGVuX3B0cikge1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MTI3OlxcdFxcdFxcdGNzeCA9IGNhbl9za2JfZXh0X2ZpbmQoc2tiKTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTEyOC1cXHRcXHRcXHRpZiAoY3N4KVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYz0xNzk9dm9pZCBjYW5fZnJlZV9lY2hvX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWR4LFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xOTEtXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtXFx1MDAzZWVjaG9fc2tiW2lkeF07XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoxOTI6XFx0XFx0c3RydWN0IGNhbl9za2JfZXh0ICpjc3g7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xOTMtXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xOTQtXFx0XFx0aWYgKGZyYW1lX2xlbl9wdHIpIHtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjE5NTpcXHRcXHRcXHRjc3ggPSBjYW5fc2tiX2V4dF9maW5kKHNrYik7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xOTYtXFx0XFx0XFx0aWYgKGNzeClcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MjE1PXN0cnVjdCBza19idWZmICphbGxvY19jYW5fc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fZnJhbWUgKipjZilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjE3LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoyMTg6XFx0c3RydWN0IGNhbl9za2JfZXh0ICpjc3g7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yMTktXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTIyMy1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjIyNDpcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTIyNS1cXHRpZiAoIWNzeCkge1xcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYz0yNDU9c3RydWN0IHNrX2J1ZmYgKmFsbG9jX2NhbmZkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yNDgtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI0OTpcXHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeDtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI1MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjU0LVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MjU1OlxcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjU2LVxcdGlmICghY3N4KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jPTI3OT1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FueGxfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI4My1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6Mjg0OlxcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjg1LVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTItXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoyOTM6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTQtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MzM0PXN0YXRpYyBib29sIGNhbl9za2JfaW5pdF92YWxpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzM1LXtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjMzNjpcXHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeCA9IGNhbl9za2JfZXh0X2ZpbmQoc2tiKTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTMzNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzQxLVxcdFxcdGlmICghY3N4KSB7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzozNDI6XFx0XFx0XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0zNDMtXFx0XFx0XFx0aWYgKCFjc3gpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYz0zOT1zdGF0aWMgbmV0ZGV2X3R4X3QgdnhjYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqb3NrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTQzLVxcdHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwZWVyc3RhdHMsICpzcmNzdGF0cyA9IFxcdTAwMjZkZXYtXFx1MDAzZXN0YXRzO1xcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjQ0OlxcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTQ1LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy02OS1cXHQvKiB0aGUgY2xvbmVkIHNrYiBwb2ludHMgdG8gdGhlIHNrYiBleHRlbnNpb24gb2YgdGhlIGFscmVhZHkgY2xvbmVkXFxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmM6NzA6XFx0ICogb3NrYiB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4gc2tiX2V4dF9hZGQoKSBjcmVhdGVzIGEgY29weSB0b1xcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTcxLVxcdCAqIHNlcGFyYXRlIHRoZSBza2IgZXh0ZW5zaW9uIGRhdGEgd2hpY2ggaXMgbmVlZGVkIHRvIHN0YXJ0IHdpdGggYVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNzMtXFx0ICovXFxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmM6NzQ6XFx0Y3N4ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0NBTik7XFxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNzUtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jPTU3MTg9c3RhdGljIGJvb2wgbWx4NWVfdGNfcmVzdG9yZV9za2JfdGNfbWV0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWx4NV90Y19jdF9wcml2ICpjdF9wcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTcyMi1cXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KHNrYi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1NzIzOlxcdHN0cnVjdCB0Y19za2JfZXh0ICp0Y19za2JfZXh0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU3MjQtXFx0dTY0IGFjdF9taXNzX2Nvb2tpZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU3MzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTczNDpcXHRcXHR0Y19za2JfZXh0ID0gdGNfc2tiX2V4dF9hbGxvYyhza2IpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU3MzU6XFx0XFx0aWYgKCF0Y19za2JfZXh0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTczNi1cXHRcXHRcXHRXQVJOX09OKDEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTc0MC1cXHRcXHRpZiAoYWN0X21pc3NfY29va2llKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTc0MTpcXHRcXHRcXHR0Y19za2JfZXh0LVxcdTAwM2VhY3RfbWlzc19jb29raWUgPSBhY3RfbWlzc19jb29raWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTc0MjpcXHRcXHRcXHR0Y19za2JfZXh0LVxcdTAwM2VhY3RfbWlzcyA9IDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTc0My1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU3NDQ6XFx0XFx0XFx0dGNfc2tiX2V4dC1cXHUwMDNlY2hhaW4gPSBjaGFpbjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NzQ1LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYz0zNjY9bWN0cF9pMmNfZ2V0X3R4X2Zsb3dfc3RhdGUoc3RydWN0IG1jdHBfaTJjX2RldiAqbWlkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmMtMzcyLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYzozNzM6XFx0ZmxvdyA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfTUNUUCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTM3NC1cXHRpZiAoIWZsb3cpXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmM9NDU0PXN0YXRpYyB2b2lkIG1jdHBfaTJjX2ludmFsaWRhdGVfdHhfZmxvdyhzdHJ1Y3QgbWN0cF9pMmNfZGV2ICptaWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYy00NjEtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jOjQ2MjpcXHRmbG93ID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9NQ1RQKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmMtNDYzLVxcdGlmICghZmxvdylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMDM9c3RhdGljIGludCBuc2ltX2ZvcndhcmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICp0eF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA2LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbnNpbV9ycSAqcnEsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjEwNzpcXHRcXHRcXHQgICAgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTEzLVxcdFxcdGlmIChwc3BfZXh0KVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMTQ6XFx0XFx0XFx0X19za2JfZXh0X3B1dChwc3BfZXh0KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE1LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTIzPXN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjUtXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMjY6XFx0c3RydWN0IHNrYl9leHQgKnBzcF9leHQgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjctXFx0c3RydWN0IG5ldF9kZXZpY2UgKnBlZXJfZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ1Mj12b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1Mzp2b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTQtZW51bSBza2JfZHJvcF9yZWFzb25cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDU1PW5zaW1fZG9fcHNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTY6XFx0ICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMsIHN0cnVjdCBza2JfZXh0ICoqcHNwX2V4dCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Ny0jZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ2MT1uc2ltX2RvX3BzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDYyOlxcdCAgICBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zLCBzdHJ1Y3Qgc2tiX2V4dCAqKnBzcF9leHQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ2My17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDY3PXN0YXRpYyBpbmxpbmUgdm9pZFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0Njg6bnNpbV9wc3BfaGFuZGxlX2V4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tiX2V4dCAqcHNwX2V4dCkge31cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDY5LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTEwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxMTp2b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTEyLXtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTMtXFx0aWYgKHBzcF9leHQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE0OlxcdFxcdF9fc2tiX2V4dF9zZXQoc2tiLCBTS0JfRVhUX1BTUCwgcHNwX2V4dCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xOD1uc2ltX2RvX3BzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTk6XFx0ICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMsIHN0cnVjdCBza2JfZXh0ICoqcHNwX2V4dClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTY4LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzo2OTpcXHRcXHRza2JfZXh0X3Jlc2V0KHNrYik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTcwLVxcdFxcdHNrYi1cXHUwMDNlbWFjX2xlbiA9IEVUSF9ITEVOO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jPTk2Nz1zdGF0aWMgdm9pZCBhdGgxMmtfZHBfY2NfY2xlYW51cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jLTEwMzMtXFx0XFx0XFx0XFx0XFx0XFx0IHNrYl9jYi1cXHUwMDNlcGFkZHJfZXh0X2Rlc2MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jOjEwMzQ6XFx0XFx0XFx0XFx0XFx0XFx0IHR4X2Rlc2NfaW5mby1cXHUwMDNlc2tiX2V4dF9kZXNjLVxcdTAwM2VsZW4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jLTEwMzUtXFx0XFx0XFx0XFx0XFx0XFx0IERNQV9UT19ERVZJQ0UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuYzoxMDM2OlxcdFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHR4X2Rlc2NfaW5mby1cXHUwMDNlc2tiX2V4dF9kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmMtMTAzNy1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg9MzQ0PXN0cnVjdCBhdGgxMmtfdHhfZGVzY19pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaC0zNDYtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg6MzQ3OlxcdHN0cnVjdCBza19idWZmICpza2JfZXh0X2Rlc2M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oLTM0OC1cXHR1MzIgZGVzY19pZDsgLyogQ29va2llICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg9MzUzPXN0cnVjdCBhdGgxMmtfdHhfZGVzY19wYXJhbXMge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaC0zNTQtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg6MzU1OlxcdHN0cnVjdCBza19idWZmICpza2JfZXh0X2Rlc2M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oLTM1Ni1cXHR1OCBtYWNfaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmM9MTMxPXZvaWQgYXRoMTJrX2RwX3R4X3JlbGVhc2VfdHhidWYoc3RydWN0IGF0aDEya19kcCAqZHAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmMtMTM1LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2ZHAtXFx1MDAzZXR4X2Rlc2NfbG9ja1twb29sX2lkXSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jOjEzNjpcXHR0eF9kZXNjLVxcdTAwM2Vza2JfZXh0X2Rlc2MgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYy0xMzctXFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNnR4X2Rlc2MtXFx1MDAzZWxpc3QsIFxcdTAwMjZkcC1cXHUwMDNldHhfZGVzY19mcmVlX2xpc3RbcG9vbF9pZF0pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jPTIzMj12b2lkIGF0aDEya19kcF90eF9mcmVlX3R4YnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jLTI0NS1cXHRcXHRkbWFfdW5tYXBfc2luZ2xlKGRwLVxcdTAwM2VkZXYsIHNrYl9jYi1cXHUwMDNlcGFkZHJfZXh0X2Rlc2MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jOjI0NjpcXHRcXHRcXHRcXHQgZGVzY19wYXJhbXMtXFx1MDAzZXNrYl9leHRfZGVzYy1cXHUwMDNlbGVuLCBETUFfVE9fREVWSUNFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmM6MjQ3OlxcdFxcdGRldl9rZnJlZV9za2JfYW55KGRlc2NfcGFyYW1zLVxcdTAwM2Vza2JfZXh0X2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYy0yNDgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jPTEwNj1pbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMTE4LVxcdHN0cnVjdCBoYWxfdHhfbXNkdV9leHRfZGVzYyAqbXNnO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzoxMTk6XFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9leHRfZGVzYyA9IE5VTEw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTEyMC1cXHRzdHJ1Y3QgaGFsX3NybmcgKnRjbF9yaW5nO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM1OS1cXHRpZiAobXNkdV9leHRfZGVzYykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozNjA6XFx0XFx0c2tiX2V4dF9kZXNjID0gZGV2X2FsbG9jX3NrYihzaXplb2Yoc3RydWN0IGhhbF90eF9tc2R1X2V4dF9kZXNjKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjM2MTpcXHRcXHRpZiAoIXNrYl9leHRfZGVzYykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNjItXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjM2NjpcXHRcXHRza2JfcHV0KHNrYl9leHRfZGVzYywgc2l6ZW9mKHN0cnVjdCBoYWxfdHhfbXNkdV9leHRfZGVzYykpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozNjc6XFx0XFx0bWVtc2V0KHNrYl9leHRfZGVzYy1cXHUwMDNlZGF0YSwgMCwgc2tiX2V4dF9kZXNjLVxcdTAwM2VsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjM2OTpcXHRcXHRtc2cgPSAoc3RydWN0IGhhbF90eF9tc2R1X2V4dF9kZXNjICopc2tiX2V4dF9kZXNjLVxcdTAwM2VkYXRhO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNzAtXFx0XFx0YXRoMTJrX3dpZmk3X2hhbF90eF9jbWRfZXh0X2Rlc2Nfc2V0dXAoYWIsIG1zZywgXFx1MDAyNnRpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNzItXFx0XFx0aWYgKGFkZF9odHRfbWV0YWRhdGEpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzczOlxcdFxcdFxcdHJldCA9IGF0aDEya193aWZpN19kcF9wcmVwYXJlX2h0dF9tZXRhZGF0YShza2JfZXh0X2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNzQtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zODAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjM4MTpcXHRcXHR0aS5wYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRwLVxcdTAwM2VkZXYsIHNrYl9leHRfZGVzYy1cXHUwMDNlZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzgyOlxcdFxcdFxcdFxcdFxcdCAgc2tiX2V4dF9kZXNjLVxcdTAwM2VsZW4sIERNQV9UT19ERVZJQ0UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zODMtXFx0XFx0cmV0ID0gZG1hX21hcHBpbmdfZXJyb3IoZHAtXFx1MDAzZWRldiwgdGkucGFkZHIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM4Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6Mzg3OlxcdFxcdHRpLmRhdGFfbGVuID0gc2tiX2V4dF9kZXNjLVxcdTAwM2VsZW47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM4OC1cXHRcXHR0aS50eXBlID0gSEFMX1RDTF9ERVNDX1RZUEVfRVhUX0RFU0M7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMzkwLVxcdFxcdHNrYl9jYi1cXHUwMDNlcGFkZHJfZXh0X2Rlc2MgPSB0aS5wYWRkcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzkxOlxcdFxcdHR4X2Rlc2MtXFx1MDAzZXNrYl9leHRfZGVzYyA9IHNrYl9leHRfZGVzYztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMzkyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy00NTMtXFx0XFx0ZG1hX3VubWFwX3NpbmdsZShkcC1cXHUwMDNlZGV2LCBza2JfY2ItXFx1MDAzZXBhZGRyX2V4dF9kZXNjLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzo0NTQ6XFx0XFx0XFx0XFx0IHNrYl9leHRfZGVzYy1cXHUwMDNlbGVuLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy00NTUtXFx0XFx0XFx0XFx0IERNQV9UT19ERVZJQ0UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy00NTYtZmFpbF9mcmVlX2V4dF9za2I6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjQ1NzpcXHRrZnJlZV9za2Ioc2tiX2V4dF9kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNDU4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jPTQ3Nj1hdGgxMmtfZHBfdHhfaHR0X3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy01MTQtXFx0XFx0ZG1hX3VubWFwX3NpbmdsZShkcC1cXHUwMDNlZGV2LCBza2JfY2ItXFx1MDAzZXBhZGRyX2V4dF9kZXNjLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzo1MTU6XFx0XFx0XFx0XFx0IGRlc2NfcGFyYW1zLVxcdTAwM2Vza2JfZXh0X2Rlc2MtXFx1MDAzZWxlbiwgRE1BX1RPX0RFVklDRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjUxNjpcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShkZXNjX3BhcmFtcy1cXHUwMDNlc2tiX2V4dF9kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNTE3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYz03Mzc9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X2NvbXBsZXRlX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTc2Ni1cXHRcXHRkbWFfdW5tYXBfc2luZ2xlKGRwLVxcdTAwM2VkZXYsIHNrYl9jYi1cXHUwMDNlcGFkZHJfZXh0X2Rlc2MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjc2NzpcXHRcXHRcXHRcXHQgZGVzY19wYXJhbXMtXFx1MDAzZXNrYl9leHRfZGVzYy1cXHUwMDNlbGVuLCBETUFfVE9fREVWSUNFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6NzY4OlxcdFxcdGRldl9rZnJlZV9za2JfYW55KGRlc2NfcGFyYW1zLVxcdTAwM2Vza2JfZXh0X2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy03NjktXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jPTkxMD12b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0aW9uX2hhbmRsZXIoc3RydWN0IGF0aDEya19kcCAqZHAsIGludCByaW5nX2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTk4MS1cXHRcXHRkZXNjX3BhcmFtcy5za2IgPSB0eF9kZXNjLVxcdTAwM2Vza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjk4MjpcXHRcXHRkZXNjX3BhcmFtcy5za2JfZXh0X2Rlc2MgPSB0eF9kZXNjLVxcdTAwM2Vza2JfZXh0X2Rlc2M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTk4My1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTE5MDI9c3RhdGljIGJvb2wgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbm9fbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xOTU0LVxcdHNrYi1cXHUwMDNlbWFyayA9IDA7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTk1NTpcXHRza2JfZXh0X3Jlc2V0KHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTk1Ni1cXHRuZl9yZXNldF9jdChza2IpO1xcbi0tXFxuZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jPTEyNj1uZXRkZXZfdHhfdCBjdm1fb2N0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguYy0zNDktXFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jOjM1MDpcXHRza2JfZXh0X3Jlc2V0KHNrYik7XFxuZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jLTM1MS1cXHRuZl9yZXNldF9jdChza2IpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg9Mzk9Ym9vbCBjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00MC1cXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo0MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBjYW5fc2tiX2V4dCAqY2FuX3NrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNDIte1xcbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oOjQzOlxcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0NBTik7XFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNDQtXFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NDU6XFx0Lyogc2tiX2V4dF9hZGQoKSByZXR1cm5zIHVuaW5pdGlhbGl6ZWQgc3BhY2UgKi9cXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00Ni1cXHRpZiAoY3N4KVxcbi0tXFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNTEtXFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NTI6c3RhdGljIGlubGluZSBzdHJ1Y3QgY2FuX3NrYl9leHQgKmNhbl9za2JfZXh0X2ZpbmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC01My17XFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NTQ6XFx0cmV0dXJuIHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfQ0FOKTtcXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC01NS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD0yOD1uZl9icmlkZ2VfaW5mb19nZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0yOS17XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MzA6XFx0cmV0dXJuIHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0zMS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD0zMz1zdGF0aWMgaW5saW5lIGJvb2wgbmZfYnJpZGdlX2luZm9fZXhpc3RzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMzQte1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjM1OlxcdHJldHVybiBza2JfZXh0X2V4aXN0KHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTM2LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MjgzPXVuaW9uIGJwZl9hdHRyO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6Mjg0OnN0cnVjdCBza2JfZXh0O1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjg1LXN0cnVjdCB0c19jb25maWc7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTI4OD1zdHJ1Y3QgbmZfYnJpZGdlX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTctI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzE4Oi8qIENoYWluIGluIHRjX3NrYl9leHQgd2lsbCBiZSB1c2VkIHRvIHNoYXJlIHRoZSB0YyBjaGFpbiB3aXRoXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTktICogb3ZzIHJlY2lyY19pZC4gSXQgd2lsbCBiZSBzZXQgdG8gdGhlIGN1cnJlbnQgY2hhaW4gYnkgdGNcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzIxLSAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzIyOnN0cnVjdCB0Y19za2JfZXh0IHtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMyMy1cXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTcyOD1lbnVtIHNrYl90c3RhbXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTgzMi0gKlxcdFxcdHBhZ2VfcG9vbCBzdXBwb3J0IG9uIGRyaXZlcilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjgzMzogKlxcdEBhY3RpdmVfZXh0ZW5zaW9uczogYWN0aXZlIGV4dGVuc2lvbnMgKHNrYl9leHRfaWQgdHlwZXMpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC04MzQtICpcXHRAbmRpc2Nfbm9kZXR5cGU6IHJvdXRlciB0eXBlIChmcm9tIGxpbmsgbGF5ZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTg4Nj1zdHJ1Y3Qgc2tfYnVmZiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTExMDAtXFx0Lyogb25seSB1c2FibGUgYWZ0ZXIgY2hlY2tpbmcgLVxcdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyAhPSAwICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMTAxOlxcdHN0cnVjdCBza2JfZXh0XFx0XFx0KmV4dGVuc2lvbnM7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMTAyLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjkzPWludCBza2JfbXBsc19kZWNfdHRsKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI5NDpzdHJ1Y3Qgc2tfYnVmZiAqcHNrYl9leHRyYWN0KHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYsIGludCB0b19jb3B5LFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI5NS1cXHRcXHRcXHQgICAgIGdmcF90IGdmcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwMDQ9c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfbmZjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBsb25nIG5mY3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwMjctI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTAyODojZGVmaW5lIFNLQl9FWFRfWF9UQ1xcdFxcdFgoVENfU0tCX0VYVCwgc3RydWN0IHRjX3NrYl9leHQpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDI5LSNlbHNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNDUtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA0NjojZGVmaW5lIFNLQl9FWFRfWF9QU1BcXHRcXHRYKFNLQl9FWFRfUFNQLCBzdHJ1Y3QgcHNwX3NrYl9leHQpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDQ3LSNlbHNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTEtI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNTI6I2RlZmluZSBTS0JfRVhUX1hfQ0FOXFx0XFx0WChTS0JfRVhUX0NBTiwgc3RydWN0IGNhbl9za2JfZXh0KVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA1My0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDY1LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA2NjplbnVtIHNrYl9leHRfaWQge1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA2Ny0jZGVmaW5lIFgoaWQsIHR5cGUpXFx0aWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNzItXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDczOmV4dGVybiBjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV07XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDc0LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA3NS0vKipcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNzY6ICpcXHRzdHJ1Y3Qgc2tiX2V4dCAtIHNrX2J1ZmYgZXh0ZW5zaW9uc1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA3Ny0gKlxcdEByZWZjbnQ6IDEgb24gYWxsb2NhdGlvbiwgZGVhbGxvY2F0ZWQgb24gMFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDgxLSAqXFx0RWFjaCBleHRlbnNpb24gaWQgb2NjdXBpZXMgYSBmaXhlZCBzbG90IHdpdGhpbiBAZGF0YSwgbG9jYXRlZCBhdFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA4MjogKlxcdHNrYl9leHRfb2Zmc2V0W2lkXSBjaHVua3Mgb2YgOCBieXRlcy4gU3RvcmluZyBvZmZzZXRzL2xlbmd0aHNcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwODMtICpcXHRpbiA4LWJ5dGUgY2h1bmtzIGFsbG93cyAndTgnIHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDg1LSAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA4NjpzdHJ1Y3Qgc2tiX2V4dCB7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDg3LVxcdHJlZmNvdW50X3QgcmVmY250O1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDkxLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5MjpzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTM6dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk0OlxcdFxcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTU6dm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTY6dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk3OnZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTgtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk5OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEwMC17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTAxLVxcdGlmIChza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEwMjpcXHRcXHRfX3NrYl9leHRfcHV0KHNrYi1cXHUwMDNlZXh0ZW5zaW9ucyk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTAzLX1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMDQtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTA1OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEwNi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBza19idWZmICpzcmMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMTAtXFx0aWYgKHNyYy1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpIHtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMTE6XFx0XFx0c3RydWN0IHNrYl9leHQgKmV4dCA9IHNyYy1cXHUwMDNlZXh0ZW5zaW9ucztcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMTctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTE4OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYylcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMTkte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEyMDpcXHRza2JfZXh0X3B1dChkc3QpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEyMTpcXHRfX3NrYl9leHRfY29weShkc3QsIHNyYyk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTIyLX1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjMtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTI0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX3NrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGkpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTI1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyOC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjk6c3RhdGljIGlubGluZSBib29sIHNrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzMC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzMtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTM0OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTM1LXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMzY6XFx0aWYgKHNrYl9leHRfZXhpc3Qoc2tiLCBpZCkpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTM3OlxcdFxcdF9fc2tiX2V4dF9kZWwoc2tiLCBpZCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTM4LX1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzktXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTQwOnN0YXRpYyBpbmxpbmUgdm9pZCAqc2tiX2V4dF9maW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxNDEte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE0MjpcXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSkge1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE0MzpcXHRcXHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVxcdTAwM2VleHRlbnNpb25zO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE0NC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNDU6XFx0XFx0cmV0dXJuICh2b2lkICopZXh0ICsgKHNrYl9leHRfb2Zmc2V0W2lkXSBcXHUwMDNjXFx1MDAzYyAzKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxNDYtXFx0fVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTUwLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE1MTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE1Mi17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTUzLVxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKSkge1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE1NDpcXHRcXHRfX3NrYl9leHRfcHV0KHNrYi1cXHUwMDNlZXh0ZW5zaW9ucyk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTU1LVxcdFxcdHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPSAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfaGFzX2V4dGVuc2lvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE2My0jZWxzZVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE2NDpzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KSB7fVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE2NTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikge31cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNjY6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfcmVzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikge31cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNjc6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGludCB1bnVzZWQpIHt9XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTY4OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnMpIHt9XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTY5OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnMpIHt9XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTcwLXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfaGFzX2V4dGVuc2lvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYikgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTIzNj1zdGF0aWMgaW5saW5lIGludCBzZWNwYXRoX2V4aXN0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MjM4LSNpZmRlZiBDT05GSUdfWEZSTVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTIzOTpcXHRyZXR1cm4gc2tiX2V4dF9leGlzdChza2IsIFNLQl9FWFRfU0VDX1BBVEgpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTI0MC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01Mjk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNlY19wYXRoICpza2Jfc2VjX3BhdGgoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTI5Ni0jaWZkZWYgQ09ORklHX1hGUk1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUyOTc6XFx0cmV0dXJuIHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfU0VDX1BBVEgpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTI5OC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9uZXQvY2FuLmgtMTQtLyoqXFxuaW5jbHVkZS9uZXQvY2FuLmg6MTU6ICogc3RydWN0IGNhbl9za2JfZXh0IC0gc2tiIGV4dGVuc2lvbnMgZm9yIENBTiBzcGVjaWZpYyBjb250ZW50XFxuaW5jbHVkZS9uZXQvY2FuLmgtMTYtICogQGNhbl9paWY6IGlmaW5kZXggb2YgdGhlIGZpcnN0IGludGVyZmFjZSB0aGUgQ0FOIGZyYW1lIGFwcGVhcmVkIG9uXFxuLS1cXG5pbmNsdWRlL25ldC9jYW4uaC0yMC0gKi9cXG5pbmNsdWRlL25ldC9jYW4uaDoyMTpzdHJ1Y3QgY2FuX3NrYl9leHQge1xcbmluY2x1ZGUvbmV0L2Nhbi5oLTIyLVxcdGludFxcdGNhbl9paWY7XFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oPTE2MD12b2lkIG1wdGNwX2RpYWdfZmlsbF9pbmZvKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9pbmZvICppbmZvKTtcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTY0LSAqL1xcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTY1OnN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9za2JfZXh0X21vdmUoc3RydWN0IHNrX2J1ZmYgKnRvLFxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTY2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpmcm9tKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTY3LXtcXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE2ODpcXHRpZiAoIXNrYl9leHRfZXhpc3QoZnJvbSwgU0tCX0VYVF9NUFRDUCkpXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNjktXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNzEtXFx0aWYgKFdBUk5fT05fT05DRSh0by1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpKVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTcyOlxcdFxcdHNrYl9leHRfcHV0KHRvKTtcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE3My1cXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTc4LVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTc5OnN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9za2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLFxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTgwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpmcm9tKVxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xODMtXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxODQ6XFx0ZnJvbV9leHQgPSBza2JfZXh0X2ZpbmQoZnJvbSwgU0tCX0VYVF9NUFRDUCk7XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xODUtXFx0aWYgKCFmcm9tX2V4dClcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTg4LVxcdGZyb21fZXh0LVxcdTAwM2Vmcm96ZW4gPSAxO1xcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTg5OlxcdHNrYl9leHRfY29weSh0bywgZnJvbSk7XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xOTAtfVxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0yMDg9c3RhdGljIGlubGluZSBib29sIG1wdGNwX3NrYl9jYW5fY29sbGFwc2UoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnRvLFxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yMTAte1xcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjExOlxcdHJldHVybiBtcHRjcF9leHRfbWF0Y2hlcyhza2JfZXh0X2ZpbmQodG8sIFNLQl9FWFRfTVBUQ1ApLFxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjEyOlxcdFxcdFxcdFxcdCBza2JfZXh0X2ZpbmQoZnJvbSwgU0tCX0VYVF9NUFRDUCkpO1xcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjEzLX1cXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmg9MjI1PXN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjI2LXtcXG5pbmNsdWRlL25ldC9tcHRjcC5oOjIyNzpcXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIFNLQl9FWFRfTVBUQ1ApKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjI4LVxcdFxcdHJldHVybiBtcHRjcF9nZXRfcmVzZXRfb3B0aW9uKHNrYik7XFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI2OT1zdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI3NC1cXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI3NTpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc2tiX2V4dF9tb3ZlKHN0cnVjdCBza19idWZmICp0byxcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI3Ni1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjc5LVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9za2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLFxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjgxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpmcm9tKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oPTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZV9hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTExLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaDoxMjpcXHRzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKmIgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtMTMtXFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9Nzc3PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y2ZfcHJvdG9fdXBkYXRlX3VzZXN3KHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1MzIgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNzg2LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVClcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6Nzg3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHRjX3NrYl9leHQgKnRjX3NrYl9leHRfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNzg4LXtcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6Nzg5OlxcdHN0cnVjdCB0Y19za2JfZXh0ICp0Y19za2JfZXh0ID0gc2tiX2V4dF9hZGQoc2tiLCBUQ19TS0JfRVhUKTtcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNzkwLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMTo1Mi43ODMzMTIxMjdaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQzMTUxNTc5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIHNrYl9leHQgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHByZXNlbnRlZCB3aXRoIHRoaXMgcGF0Y2ggdGhhdCdzIHJlZmFjdG9yaW5nIHRoZSBgc2tiX2V4dGAgYWxsb2NhdGlvbiBhbmQgbGF5b3V0LiBJdCdzIG1vdmluZyBmcm9tIGEgdmFyaWFibGUtc2l6ZWQgc2NoZW1lIHRvIGEgZml4ZWQtc2l6ZSBzdHJ1Y3R1cmUgKGBzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXRgKS4gTXkgaW5pdGlhbCByZWFjdGlvbj8gSXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSwgYW5kIEkgbmVlZCB0byBiZSAqdGhvcm91Z2gqLiBUaGUgcHJvbXB0IGlzIGFza2luZyBhYm91dCBLTVNBTi4gUmlnaHQuIFRoZSBjZW50cmFsIHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYSAqbmV3KiBjaGFuY2Ugb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3Igb3RoZXJ3aXNlLCBhIHNlY3VyaXR5IGxlYWs/XG5cbkZpcnN0LCBJIGlkZW50aWZ5IGFsbCB0aGUgZXh0ZW5zaW9ucyB0aGF0IHVzZSBgc2tiX2V4dGAuICBJIHNlZSBhIHdob2xlIGhvc3Qgb2YgdGhlbTogQ0FOLCBCcmlkZ2UgTmV0ZmlsdGVyLCBUQywgTVBUQ1AsIE1DVFAsIFBTUCwgYW5kIElQc2VjLiBHb29kLCBJIGtub3cgdGhlIHBsYXllcnMuIE5leHQsIEkgY29uc2lkZXIgaG93IHRoZXNlIGFyZSB1c2VkIGluIHJlbGF0aW9uIHRvIHVzZXJzcGFjZS4gKkNydWNpYWxseSosIG5vbmUgb2YgdGhlc2Ugc3RydWN0cyBhcmUgZGlyZWN0bHkgKmNvcGllZCogdG8gdXNlcnNwYWNlLiBUaGV5J3JlIGludGVybmFsIGtlcm5lbCBtZXRhZGF0YS4gVGhhdCBpbW1lZGlhdGVseSBsb3dlcnMgbXkgYW54aWV0eSBsZXZlbCBhYm91dCBwb3RlbnRpYWwgaW5mby1sZWFrcywgYnV0IHRoZSBnYW1lIGlzIG5vdCBvdmVyLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRocm91Z2ggdGhlIGFsbG9jYXRpb24gYW5kIGNvcHkgY29kZS4gVGhlIGNvcmUgY29uY2VybiBoZXJlIGlzIGBza2JfZXh0X21heWJlX2Nvd2Agd2hpY2ggaGFuZGxlcyBjb3B5aW5nLCBwcmVzdW1hYmx5IGluY2x1ZGluZyBwYWRkaW5nLiBUaGF0J3MgdGhlIGtleS4gT2xkIGNvZGUsIG5ldyBjb2RlLi4uSSBuZWVkIHRvIGNvbXBhcmUuIEluIHRoZSBuZXcgY29kZSwgSSBzZWUgdGhlIGNoYW5nZSB0byBob3cgd2UgY29weSBub3csIGJpdHdpc2UsIGRlcGVuZGVudCBvbiB3aGV0aGVyIHRoZSBleHRlbnNpb24gaXMgYWN0aXZlLiBUaGUgb2xkIGNvZGUganVzdCBgbWVtY3B5YOKAmWQgdGhlIHdob2xlIGJsb2NrLiBJcyAqdGhhdCogYW4gaXNzdWU/IEkgc2VlIHRoZSBjb2RlIGFuZCBJIGNhbiByZWFzb24gdGhlIG1lbWNweSwgYW5kIHBhZGRpbmcgaXMgbm90IHVzZWQgaW4gYSBicmFuY2guXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgcGFkZGluZyBub3csIHJlbWVtYmVyaW5nIGBza2JfZXh0X3R5cGVfbGVuW2ldICogU0tCX0VYVF9BTElHTl9WQUxVRWAuIElmIHRoZXJl4oCZcyB1bmluaXRpYWxpemVkIHBhZGRpbmcgKmluc2lkZSogdGhlc2UgZXh0ZW5zaW9uIHN0cnVjdHMsIGNvdWxkIGl0IGxlYWsgb3V0PyBCdXQgd2FpdCwgSSByZWNhbGwgdGhlc2Ugc3RydWN0cyBhcmVu4oCZdCAqZGlyZWN0bHkqIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdHJhbnNtaXR0ZWQgYWNyb3NzIHRoZSBuZXR3b3JrLCB0aGV54oCZcmUgZm9yIGludGVybmFsIHVzZS4gVGhpcyBzaG91bGQgYmUgb2theSwgYnV0IEkgd2lsbCBjaGVjayBvbmUgc3BlY2lmaWMgYXJlYeKAplxuXG5Pa2F5LCBub3cgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBtcHRjcF9leHRgLiBDb3VsZCAqaXQqIGJlIGxlYWtlZD8gSXQgKmlzKiB1c2VkIGZvciBidWlsZGluZyBUQ1Agb3B0aW9ucy4uLiAqdGhhdCdzKiBzb21ldGhpbmcgdGhhdCBnb2VzIG9uIHRoZSBuZXR3b3JrISAgSSBuZWVkIHRvIGNoZWNrICpldmVyeSogZmllbGQgaW4gdGhhdCBzdHJ1Y3QsIGFuZCBob3cgaXQgaXMgdXNlZCB0byBidWlsZCBUQ1Agb3B0aW9ucy4gSWYgYW4gdW5pbml0aWFsaXplZCBmaWVsZCBpcyAqdXNlZCogdG8gY29uc3RydWN0IGEgVENQIG9wdGlvbiwgdGhhdCBpcyBhIGNsZWFyIGxlYWsgYW5kIEkgd291bGQgaGF2ZSBhIGh1Z2UgcHJvYmxlbS4gQnV0LCB0aGUgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYG1wdGNwX2V4dGAgaW5pdGlhbGl6YXRpb24sIGl0ICpvbmx5KiBjaGFuZ2VzIHRoZSAqbGF5b3V0KiBvZiB0aGUgZ2VuZXJpYyBgc2tiX2V4dGAuIFRoZSBwYXRjaCBzaG91bGRuJ3QgY3JlYXRlIGEgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGQgdGhhdCBwcmV2aW91c2x5IGRpZCBub3QgZXhpc3QuIEknbSBzYXRpc2ZpZWQgZm9yIG5vdywgYnV0IEkgd2lsbCBjb21lIGJhY2sgdG8gdGhpcy5cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCB3aGVyZSB0aGUgYWxsb2NhdGlvbiBpcyBkaWZmZXJlbnQuIFdpdGggdGhlIG9sZCwgdmFyaWFibGUtc2l6ZWQgc2NoZW1lLCBhbiBhbGxvY2F0aW9uIGZvciBhIG5ldyBleHRlbnNpb24gd291bGQgbWFrZSBpdCBncm93LiBUaGUgbmV3IGZpeGVkLXNpemUgbGF5b3V0IHVzZXMgYSBzbGFiIGNhY2hlLCBgc2tidWZmX2V4dF9jYWNoZWAuIGBfX3NrYl9leHRfYWxsb2NgIGRvZXMgKm5vdCogemVybyB0aGUgbWVtb3J5LCAqZXhjZXB0KiB0aGUgaGVhZGVyIGFuZCB0aGUgcmVmY291bnQuIEkgc2VlIHRoYXQgYHNrYl9leHRfYWRkYCB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhpcyBzcGFjZSwgYW5kIHRoZW4gdGhlIGNhbGxlciB3aWxsIGluaXRpYWxpemUgaXQuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBob3cgaXQgd29ya2VkIGJlZm9yZS4gVGhlIGNhbGxlcnMgYXJlICpzdXBwb3NlZCogdG8gaW5pdGlhbGl6ZSwgYW5kIHRoZSAqdW5pbml0aWFsaXplZCogcGFydHMgYXJlIHByb3RlY3RlZCBieSB0aGUgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0LiBTbyBldmVuIGlmIGEgY2FsbGVyICpkb2Vzbid0KiBpbml0aWFsaXplIGl0LCB0aGVyZSdzIG5vIGxlYWsuIEkgaGF2ZSB0byBtYWtlIHN1cmUgYWJvdXQgdGhpcy5cblxuSSdtIGxvb2tpbmcgYXQgYF9fc2tiX2V4dF9zZXRgIGFuZCBgc2tiX2V4dF9tYXliZV9jb3dgLCBvbGQgYW5kIG5ldyBjb2RlLCBjb21wYXJpbmcsIGxpbmUgYnkgbGluZS4gQW0gSSBtaXNzaW5nIGFueXRoaW5nPyBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyAqbmV2ZXIqIGFjY2Vzc2VkLCBiZWNhdXNlIGFueSBhY2Nlc3MgdG8gYW4gZXh0ZW5zaW9uIGdvZXMgdGhyb3VnaCBgc2tiX2V4dF9maW5kYCwgd2hpY2ggY2hlY2tzIGBwcmVzZW50X2V4dGVuc2lvbnNgLiBBICptaXNzaW5nKiBleHRlbnNpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGlzIGp1c3Qgbm90IGluY2x1ZGVkIGluIHRoZSBsb29rdXAuICBTbyB0aGUgdW5pbml0aWFsaXplZCBzbG90cyBhcmUgbmV2ZXIgdXNlZC5cblxuSSBjaXJjbGUgYmFjayB0byB0aGUgbWVtb3J5IGNvcGllcyBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGBza2JfZXh0X21heWJlX2Nvd2AuICBJJ20gbm93IHNhdGlzZmllZC4gSW4gdGhlIG9sZCBjb2RlLCBgbWVtY3B5YCBjb3BpZWQgdGhlIGVudGlyZSBjaHVuay4gSW4gdGhlIG5ldyBjb2RlLCBpdCBjb3BpZXMgdGhlIGhlYWRlciAqYW5kKiBlYWNoIHByZXNlbnQgZXh0ZW5zaW9uLCBidXQgZWFjaCBuZXcgYWxsb2NhdGlvbiBpcyBzdGlsbCB0aGUgKnNhbWUgc2l6ZSouIFRoZSBlbXB0eSBzcGFjZSBzdGF5cyB0aGF0IHdheSBhbmQgaXMgbm90IGEgc2VjdXJpdHkgcmlzay5cblxuTGV0J3Mgbm90IGZvcmdldCB0aGUgZGV0YWlscyEgYHNrYl9leHRfb2Zmc2V0YC4gIFRoZSBsYXlvdXQgaXMgbm93IGZpeGVkLiBJZiB0aGlzIGlzICppbmNvcnJlY3QqIHRoYXQgbGVhZHMgdG8gT09CLiBCdXQsIGhvdyBhcmUgdGhlc2Ugb2Zmc2V0cyBjYWxjdWxhdGVkPyBPa2F5LCBpdCdzXG5cbiIsIklucHV0VG9rZW5zIjoyMDUxNywiT3V0cHV0VG9rZW5zIjozMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAzOjA3LjA5ODQ3MjEyNloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBhbGxvY2F0aW9uIGFuZCBsYXlvdXQgb2YgYHNrYl9leHRgIChza19idWZmIGV4dGVuc2lvbnMpIGZyb20gYSB2YXJpYWJsZS1zaXplZCwgZHluYW1pY2FsbHkgYXBwZW5kZWQgbGF5b3V0IHRvIGEgZml4ZWQtc2l6ZWQgbGF5b3V0IChgc3RydWN0IHNrYl9leHRfbGF5b3V0YCkgd2l0aCBzdGF0aWMgb2Zmc2V0cyBmb3IgZWFjaCBleHRlbnNpb24gdHlwZS5cXG5cXG4xLiBUaGUgbmV3IGBza2JfZXh0X2xheW91dGAgaXMgYWxsb2NhdGVkIGZyb20gYSBzbGFiIGNhY2hlLCBhbmQgbGlrZSB0aGUgb2xkIGNvZGUsIG9ubHkgdGhlIGhlYWRlciAoYHJlZmNudGAgYW5kIGBwcmVzZW50X2V4dGVuc2lvbnNgKSBpcyBpbml0aWFsaXplZC4gVGhlIGV4dGVuc2lvbiBkYXRhIHNsb3RzIHJlbWFpbiB1bmluaXRpYWxpemVkIHVudGlsIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVyLlxcbjIuIFRoZSB1bmluaXRpYWxpemVkIHNsb3RzIGFyZSBzdHJpY3RseSBndWFyZGVkIGJ5IHRoZSBgcHJlc2VudF9leHRlbnNpb25zYCBiaXRtYXAuIFRoZXkgY2Fubm90IGJlIGFjY2Vzc2VkIHVubGVzcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0LCB3aGljaCBvbmx5IGhhcHBlbnMgd2hlbiBhbiBleHRlbnNpb24gaXMgcHJvcGVybHkgYWRkZWQgYW5kIGluaXRpYWxpemVkLlxcbjMuIFdoZW4gY29weWluZyBhbiBleHRlbnNpb24gKGBza2JfZXh0X21heWJlX2Nvd2ApLCB0aGUgY29kZSBjb3BpZXMgdGhlIGhlYWRlciBhbmQgb25seSB0aGUgcHJlc2VudCBleHRlbnNpb25zLCBsZWF2aW5nIHRoZSB1bnVzZWQgc2xvdHMgdW5pbml0aWFsaXplZC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byB0aGUgb2xkIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxcbjQuIGBza2JfZXh0YCBhbmQgaXRzIGV4dGVuc2lvbnMgYXJlIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIHVzZWQgZm9yIG1ldGFkYXRhIChlLmcuLCBJUHNlYywgVEMsIGJyaWRnZSBuZXRmaWx0ZXIpIGFuZCBhcmUgbm90IGNvcGllZCB0byB1c2Vyc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIGluZm8tbGVha3MuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbGF5b3V0IG9mIGBza2JfZXh0YCAoc2tfYnVmZiBleHRlbnNpb25zKSBmcm9tIGEgdmFyaWFibGUtc2l6ZWQsIGR5bmFtaWNhbGx5IGFwcGVuZGVkIGxheW91dCB0byBhIGZpeGVkLXNpemVkIGxheW91dCAoYHN0cnVjdCBza2JfZXh0X2xheW91dGApIHdpdGggc3RhdGljIG9mZnNldHMgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGUuXFxuXFxuMS4gVGhlIG5ldyBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGEgc2xhYiBjYWNoZSwgYW5kIGxpa2UgdGhlIG9sZCBjb2RlLCBvbmx5IHRoZSBoZWFkZXIgKGByZWZjbnRgIGFuZCBgcHJlc2VudF9leHRlbnNpb25zYCkgaXMgaW5pdGlhbGl6ZWQuIFRoZSBleHRlbnNpb24gZGF0YSBzbG90cyByZW1haW4gdW5pbml0aWFsaXplZCB1bnRpbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci5cXG4yLiBUaGUgdW5pbml0aWFsaXplZCBzbG90cyBhcmUgc3RyaWN0bHkgZ3VhcmRlZCBieSB0aGUgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0bWFwLiBUaGV5IGNhbm5vdCBiZSBhY2Nlc3NlZCB1bmxlc3MgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGlzIHNldCwgd2hpY2ggb25seSBoYXBwZW5zIHdoZW4gYW4gZXh0ZW5zaW9uIGlzIHByb3Blcmx5IGFkZGVkIGFuZCBpbml0aWFsaXplZC5cXG4zLiBXaGVuIGNvcHlpbmcgYW4gZXh0ZW5zaW9uIChgc2tiX2V4dF9tYXliZV9jb3dgKSwgdGhlIGNvZGUgY29waWVzIHRoZSBoZWFkZXIgYW5kIG9ubHkgdGhlIHByZXNlbnQgZXh0ZW5zaW9ucywgbGVhdmluZyB0aGUgdW51c2VkIHNsb3RzIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIG9sZCBiZWhhdmlvciBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cXG40LiBgc2tiX2V4dGAgYW5kIGl0cyBleHRlbnNpb25zIGFyZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyB1c2VkIGZvciBtZXRhZGF0YSAoZS5nLiwgSVBzZWMsIFRDLCBicmlkZ2UgbmV0ZmlsdGVyKSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgaW5jb3JyZWN0IG9mZnNldCBjYWxjdWxhdGlvbnMgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow86fwm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 16:40:38 +0000 UTC FinishedAt: 2026-08-25 17:03:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "NETFILTER", "NETFILTER_ADVANCED", "BRIDGE_NETFILTER", "CAN", "MCTP", "I2C", "I2C_SLAVE", "MCTP_TRANSPORT_I2C", "INET", "MPTCP", "INET_PSP", "NET_CLS_ACT", "NET_TC_SKB_EXT", "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "NETFILTER", "NETFILTER_ADVANCED", "BRIDGE_NETFILTER", "CAN", "MCTP", "I2C", "I2C_SLAVE", "MCTP_TRANSPORT_I2C", "INET", "MPTCP", "INET_PSP", "NET_CLS_ACT", "NET_TC_SKB_EXT", "XFRM_USER" ], "series_id": "403a2d64-e3c0-4842-ab73-8887a16ad19c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_ext_add", "__skb_ext_set", "__skb_ext_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7STJDJiMzNDssCiAgICAmIzM0O0kyQ19TTEFWRSYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9JMkMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtJTkVUX1BTUCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfVENfU0tCX0VYVCYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtfX3NrYl9leHRfc2V0JiMzNDssCiAgICAmIzM0O19fc2tiX2V4dF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbGF5b3V0IG9mIGBza2JfZXh0YCAoc2tfYnVmZiBleHRlbnNpb25zKSBmcm9tIGEgdmFyaWFibGUtc2l6ZWQsIGR5bmFtaWNhbGx5IGFwcGVuZGVkIGxheW91dCB0byBhIGZpeGVkLXNpemVkIGxheW91dCAoYHN0cnVjdCBza2JfZXh0X2xheW91dGApIHdpdGggc3RhdGljIG9mZnNldHMgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGUuXG5cbjEuIFRoZSBuZXcgYHNrYl9leHRfbGF5b3V0YCBpcyBhbGxvY2F0ZWQgZnJvbSBhIHNsYWIgY2FjaGUsIGFuZCBsaWtlIHRoZSBvbGQgY29kZSwgb25seSB0aGUgaGVhZGVyIChgcmVmY250YCBhbmQgYHByZXNlbnRfZXh0ZW5zaW9uc2ApIGlzIGluaXRpYWxpemVkLiBUaGUgZXh0ZW5zaW9uIGRhdGEgc2xvdHMgcmVtYWluIHVuaW5pdGlhbGl6ZWQgdW50aWwgZXhwbGljaXRseSByZXF1ZXN0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIuXG4yLiBUaGUgdW5pbml0aWFsaXplZCBzbG90cyBhcmUgc3RyaWN0bHkgZ3VhcmRlZCBieSB0aGUgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0bWFwLiBUaGV5IGNhbm5vdCBiZSBhY2Nlc3NlZCB1bmxlc3MgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGlzIHNldCwgd2hpY2ggb25seSBoYXBwZW5zIHdoZW4gYW4gZXh0ZW5zaW9uIGlzIHByb3Blcmx5IGFkZGVkIGFuZCBpbml0aWFsaXplZC5cbjMuIFdoZW4gY29weWluZyBhbiBleHRlbnNpb24gKGBza2JfZXh0X21heWJlX2Nvd2ApLCB0aGUgY29kZSBjb3BpZXMgdGhlIGhlYWRlciBhbmQgb25seSB0aGUgcHJlc2VudCBleHRlbnNpb25zLCBsZWF2aW5nIHRoZSB1bnVzZWQgc2xvdHMgdW5pbml0aWFsaXplZC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byB0aGUgb2xkIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuNC4gYHNrYl9leHRgIGFuZCBpdHMgZXh0ZW5zaW9ucyBhcmUgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgdXNlZCBmb3IgbWV0YWRhdGEgKGUuZy4sIElQc2VjLCBUQywgYnJpZGdlIG5ldGZpbHRlcikgYW5kIGFyZSBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmssIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgaW5mby1sZWFrcy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykuIEl0IHJlcGxhY2VzIGR5bmFtaWMgb2Zmc2V0cyB3aXRoIGNvbXBpbGUtdGltZSBmaXhlZCBvZmZzZXRzIGFuZCB1c2VzIGEgYml0bWFwIHRvIHRyYWNrIHByZXNlbnQgZXh0ZW5zaW9ucy4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBleHRlbnNpb25zIGxpa2UgSVBzZWMsIEJyaWRnZSBOZXRmaWx0ZXIsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOIGFyZSBhdHRhY2hlZCB0byBzb2NrZXQgYnVmZmVycy4gSXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgbWVtb3J5IGxheW91dCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkOGM2YzQwM2Y4NmYxYWJhMDZjM2I0OTEyYjMwOWFjMzVmMzNjZWVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTY6NTc6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDk1MTg0MTgzMTgwZjYuLjVhNTE0M2U0N2IzMDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtNTAxMSw0NSAmIzQzOzUwMTEsODEgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfbmZjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBsb25nIG5mY3QpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlNcbi1lbnVtIHNrYl9leHRfaWQge1xuJiM0MztcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbi1cdFNLQl9FWFRfQlJJREdFX05GLFxuJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9CUklER0VfTkZcdFgoU0tCX0VYVF9CUklER0VfTkYsIHN0cnVjdCBuZl9icmlkZ2VfaW5mbylcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQlJJREdFX05GXG4gI2VuZGlmXG4tI2lmZGVmIENPTkZJR19YRlJNXG4tXHRTS0JfRVhUX1NFQ19QQVRILFxuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1hGUk0pXG4mIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1NFQ19QQVRIXHRYKFNLQl9FWFRfU0VDX1BBVEgsIHN0cnVjdCBzZWNfcGF0aClcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfU0VDX1BBVEhcbiAjZW5kaWZcbiYjNDM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKVxuLVx0VENfU0tCX0VYVCxcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfVENcdFx0WChUQ19TS0JfRVhULCBzdHJ1Y3QgdGNfc2tiX2V4dClcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfVENcbiAjZW5kaWZcbiYjNDM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuLVx0U0tCX0VYVF9NUFRDUCxcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfTVBUQ1BcdFx0WChTS0JfRVhUX01QVENQLCBzdHJ1Y3QgbXB0Y3BfZXh0KVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9NUFRDUFxuICNlbmRpZlxuJiM0MztcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUylcbi1cdFNLQl9FWFRfTUNUUCxcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfTUNUUFx0XHRYKFNLQl9FWFRfTUNUUCwgc3RydWN0IG1jdHBfZmxvdylcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfTUNUUFxuICNlbmRpZlxuJiM0MztcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG4tXHRTS0JfRVhUX1BTUCxcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfUFNQXHRcdFgoU0tCX0VYVF9QU1AsIHN0cnVjdCBwc3Bfc2tiX2V4dClcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfUFNQXG4gI2VuZGlmXG4mIzQzO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19DQU4pXG4tXHRTS0JfRVhUX0NBTixcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQ0FOXHRcdFgoU0tCX0VYVF9DQU4sIHN0cnVjdCBjYW5fc2tiX2V4dClcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQ0FOXG4gI2VuZGlmXG4tXHRTS0JfRVhUX05VTSwgLyogbXVzdCBiZSBsYXN0ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFNLQl9FWFRfRk9SRUFDSChYKVx0XFxcbiYjNDM7XHRTS0JfRVhUX1hfQlJJREdFX05GXHRcXFxuJiM0MztcdFNLQl9FWFRfWF9TRUNfUEFUSFx0XFxcbiYjNDM7XHRTS0JfRVhUX1hfVENcdFx0XFxcbiYjNDM7XHRTS0JfRVhUX1hfTVBUQ1BcdFx0XFxcbiYjNDM7XHRTS0JfRVhUX1hfTUNUUFx0XHRcXFxuJiM0MztcdFNLQl9FWFRfWF9QU1BcdFx0XFxcbiYjNDM7XHRTS0JfRVhUX1hfQ0FOXG4mIzQzO1xuJiM0MztlbnVtIHNrYl9leHRfaWQge1xuJiM0MzsjZGVmaW5lIFgoaWQsIHR5cGUpXHRpZCxcbiYjNDM7XHRTS0JfRVhUX0ZPUkVBQ0goWClcbiYjNDM7I3VuZGVmIFhcbiYjNDM7XHRTS0JfRVhUX05VTSxcbiB9O1xuIFxuJiM0MztleHRlcm4gY29uc3QgdTggc2tiX2V4dF9vZmZzZXRbU0tCX0VYVF9OVU1dO1xuJiM0MztcbiAvKipcbiAgKlx0c3RydWN0IHNrYl9leHQgLSBza19idWZmIGV4dGVuc2lvbnNcbiAgKlx0QHJlZmNudDogMSBvbiBhbGxvY2F0aW9uLCBkZWFsbG9jYXRlZCBvbiAwXG4tICpcdEBvZmZzZXQ6IG9mZnNldCB0byBhZGQgdG8gQGRhdGEgdG8gb2J0YWluIGV4dGVuc2lvbiBhZGRyZXNzXG4tICpcdEBjaHVua3M6IHNpemUgY3VycmVudGx5IGFsbG9jYXRlZCwgc3RvcmVkIGluIFNLQl9FWFRfQUxJR05fU0hJRlQgdW5pdHNcbiYjNDM7ICpcdEBwcmVzZW50X2V4dGVuc2lvbnM6IGJpdG1hcCBvZiBleHRlbnNpb25zIHN0b3JlZCBpbiBAZGF0YVxuICAqXHRAZGF0YTogc3RhcnQgb2YgZXh0ZW5zaW9uIGRhdGEsIHZhcmlhYmxlIHNpemVkXG4gICpcbi0gKlx0Tm90ZTogb2Zmc2V0cy9sZW5ndGhzIGFyZSBzdG9yZWQgaW4gY2h1bmtzIG9mIDggYnl0ZXMsIHRoaXMgYWxsb3dzXG4tICpcdHRvIHVzZSAmIzM5O3U4JiMzOTsgdHlwZXMgd2hpbGUgYWxsb3dpbmcgdXAgdG8gMmtiIHdvcnRoIG9mIGV4dGVuc2lvbiBkYXRhLlxuJiM0MzsgKlx0RWFjaCBleHRlbnNpb24gaWQgb2NjdXBpZXMgYSBmaXhlZCBzbG90IHdpdGhpbiBAZGF0YSwgbG9jYXRlZCBhdFxuJiM0MzsgKlx0c2tiX2V4dF9vZmZzZXRbaWRdIGNodW5rcyBvZiA4IGJ5dGVzLiBTdG9yaW5nIG9mZnNldHMvbGVuZ3Roc1xuJiM0MzsgKlx0aW4gOC1ieXRlIGNodW5rcyBhbGxvd3MgJiMzOTt1OCYjMzk7IHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aFxuJiM0MzsgKlx0b2YgZXh0ZW5zaW9uIGRhdGEuXG4gICovXG4gc3RydWN0IHNrYl9leHQge1xuIFx0cmVmY291bnRfdCByZWZjbnQ7XG4tXHR1OCBvZmZzZXRbU0tCX0VYVF9OVU1dOyAvKiBpbiBjaHVua3Mgb2YgOCBieXRlcyAqL1xuLVx0dTggY2h1bmtzO1x0XHQvKiBzYW1lICovXG4mIzQzO1x0dTggcHJlc2VudF9leHRlbnNpb25zO1xuIFx0Y2hhciBkYXRhW10gX19hbGlnbmVkKDgpO1xuIH07XG4gXG5AQCAtNTA4Nyw3ICYjNDM7NTEyMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYylcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgX19za2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza2JfZXh0ICpleHQsIGVudW0gc2tiX2V4dF9pZCBpKVxuIHtcbi1cdHJldHVybiAhIWV4dC1cdTAwM2VvZmZzZXRbaV07XG4mIzQzO1x0cmV0dXJuIGV4dC1cdTAwM2VwcmVzZW50X2V4dGVuc2lvbnMgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIHNrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuQEAgLTUxMDYsNyAmIzQzOzUxNDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9leHRfZmluZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4gXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSkge1xuIFx0XHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVx1MDAzZWV4dGVuc2lvbnM7XG4gXG4tXHRcdHJldHVybiAodm9pZCAqKWV4dCAmIzQzOyAoZXh0LVx1MDAzZW9mZnNldFtpZF0gXHUwMDNjXHUwMDNjIDMpO1xuJiM0MztcdFx0cmV0dXJuICh2b2lkICopZXh0ICYjNDM7IChza2JfZXh0X29mZnNldFtpZF0gXHUwMDNjXHUwMDNjIDMpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYzgyYTE0NzJhNWVhOC4uOGU1ZGI1Nzk3MjVkMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTUxMzQsNDcgJiM0Mzs1MTM0LDMyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50KTtcbiAjZGVmaW5lIFNLQl9FWFRfQ0hVTktTSVpFT0YoeClcdChBTElHTigoc2l6ZW9mKHgpKSwgU0tCX0VYVF9BTElHTl9WQUxVRSkgLyBTS0JfRVhUX0FMSUdOX1ZBTFVFKVxuIFxuIHN0YXRpYyBjb25zdCB1OCBza2JfZXh0X3R5cGVfbGVuW10gPSB7XG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG4tXHRbU0tCX0VYVF9CUklER0VfTkZdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pLFxuLSNlbmRpZlxuLSNpZmRlZiBDT05GSUdfWEZSTVxuLVx0W1NLQl9FWFRfU0VDX1BBVEhdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3Qgc2VjX3BhdGgpLFxuLSNlbmRpZlxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVClcbi1cdFtUQ19TS0JfRVhUXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHRjX3NrYl9leHQpLFxuLSNlbmRpZlxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUClcbi1cdFtTS0JfRVhUX01QVENQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG1wdGNwX2V4dCksXG4tI2VuZGlmXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpXG4tXHRbU0tCX0VYVF9NQ1RQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG1jdHBfZmxvdyksXG4tI2VuZGlmXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuLVx0W1NLQl9FWFRfUFNQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHBzcF9za2JfZXh0KSxcbi0jZW5kaWZcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfQ0FOKVxuLVx0W1NLQl9FWFRfQ0FOXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IGNhbl9za2JfZXh0KSxcbi0jZW5kaWZcbiYjNDM7I2RlZmluZSBYKGlkLCB0eXBlKVx0W2lkXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0YodHlwZSksXG4mIzQzO1x0U0tCX0VYVF9GT1JFQUNIKFgpXG4mIzQzOyN1bmRlZiBYXG4gfTtcbiBcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbm9fcHJvZmlsZSB1bnNpZ25lZCBpbnQgc2tiX2V4dF90b3RhbF9sZW5ndGgodm9pZClcbi17XG4tXHR1bnNpZ25lZCBpbnQgbCA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHNrYl9leHQpO1xuLVx0aW50IGk7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNrYl9leHRfdHlwZV9sZW4pOyBpJiM0MzsmIzQzOylcbi1cdFx0bCAmIzQzOz0gc2tiX2V4dF90eXBlX2xlbltpXTtcbiYjNDM7c3RydWN0IHNrYl9leHRfbGF5b3V0IHtcbiYjNDM7XHR1OFx0aGVhZGVyW3NpemVvZihzdHJ1Y3Qgc2tiX2V4dCldIF9fYWxpZ25lZChTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbiYjNDM7I2RlZmluZSBYKGlkLCB0eXBlKVx0dHlwZSBmXyMjaWQgX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuJiM0MztcdFNLQl9FWFRfRk9SRUFDSChYKVxuJiM0MzsjdW5kZWYgWFxuJiM0Mzt9O1xuIFxuLVx0cmV0dXJuIGw7XG4tfVxuJiM0Mztjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV0gPSB7XG4mIzQzOyNkZWZpbmUgWChpZCwgdHlwZSlcdFtpZF0gPSBvZmZzZXRvZihzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQsIGZfIyNpZCkgLyBTS0JfRVhUX0FMSUdOX1ZBTFVFLFxuJiM0MztcdFNLQl9FWFRfRk9SRUFDSChYKVxuJiM0MzsjdW5kZWYgWFxuJiM0Mzt9O1xuJiM0MztFWFBPUlRfU1lNQk9MKHNrYl9leHRfb2Zmc2V0KTtcbiBcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgX19ub19wcm9maWxlIHNrYl9leHRlbnNpb25zX2luaXQodm9pZClcbiB7XG4gXHRCVUlMRF9CVUdfT04oU0tCX0VYVF9OVU0gXHUwMDNlIDgpO1xuLVx0QlVJTERfQlVHX09OKHNrYl9leHRfdG90YWxfbGVuZ3RoKCkgXHUwMDNlIDI1NSk7XG4mIzQzO1x0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQpIFx1MDAzZSAyNTUgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbiBcbiBcdHNrYnVmZl9leHRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShcJiMzNDtza2J1ZmZfZXh0X2NhY2hlXCYjMzQ7LFxuLVx0XHRcdFx0XHQgICAgIFNLQl9FWFRfQUxJR05fVkFMVUUgKiBza2JfZXh0X3RvdGFsX2xlbmd0aCgpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0KSxcbiBcdFx0XHRcdFx0ICAgICAwLFxuIFx0XHRcdFx0XHQgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLFxuIFx0XHRcdFx0XHQgICAgIE5VTEwpO1xuQEAgLTcwODMsNyAmIzQzOzcwNjgsNyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9jb25kZW5zZSk7XG4gI2lmZGVmIENPTkZJR19TS0JfRVhURU5TSU9OU1xuIHN0YXRpYyB2b2lkICpza2JfZXh0X2dldF9wdHIoc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGlkKVxuIHtcbi1cdHJldHVybiAodm9pZCAqKWV4dCAmIzQzOyAoZXh0LVx1MDAzZW9mZnNldFtpZF0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbiYjNDM7XHRyZXR1cm4gKHZvaWQgKilleHQgJiM0MzsgKHNrYl9leHRfb2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuIH1cbiBcbiAvKipcbkBAIC03MTAwLDcgJiM0Mzs3MDg1LDcgQEAgc3RydWN0IHNrYl9leHQgKl9fc2tiX2V4dF9hbGxvYyhnZnBfdCBmbGFncylcbiBcdHN0cnVjdCBza2JfZXh0ICpuZXcgPSBrbWVtX2NhY2hlX2FsbG9jKHNrYnVmZl9leHRfY2FjaGUsIGZsYWdzKTtcbiBcbiBcdGlmIChuZXcpIHtcbi1cdFx0bWVtc2V0KG5ldy1cdTAwM2VvZmZzZXQsIDAsIHNpemVvZihuZXctXHUwMDNlb2Zmc2V0KSk7XG4mIzQzO1x0XHRuZXctXHUwMDNlcHJlc2VudF9leHRlbnNpb25zID0gMDtcbiBcdFx0cmVmY291bnRfc2V0KFx1MDAyNm5ldy1cdTAwM2VyZWZjbnQsIDEpO1xuIFx0fVxuIFxuQEAgLTcxMTEsNiAmIzQzOzcwOTYsNyBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgb2xkX2FjdGl2ZSlcbiB7XG4gXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3O1xuJiM0MztcdGludCBpO1xuIFxuIFx0aWYgKHJlZmNvdW50X3JlYWQoXHUwMDI2b2xkLVx1MDAzZXJlZmNudCkgPT0gMSlcbiBcdFx0cmV0dXJuIG9sZDtcbkBAIC03MTE5LDcgJiM0Mzs3MTA1LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdG1lbWNweShuZXcsIG9sZCwgb2xkLVx1MDAzZWNodW5rcyAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuJiM0MztcdG1lbWNweShuZXcsIG9sZCwgU0tCX0VYVF9DSFVOS1NJWkVPRigqb2xkKSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFNLQl9FWFRfTlVNOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG9sZC1cdTAwM2VwcmVzZW50X2V4dGVuc2lvbnMgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBpKSlcbiYjNDM7XHRcdFx0bWVtY3B5KHNrYl9leHRfZ2V0X3B0cihuZXcsIGkpLCBza2JfZXh0X2dldF9wdHIob2xkLCBpKSxcbiYjNDM7XHRcdFx0ICAgICAgIHNrYl9leHRfdHlwZV9sZW5baV0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbiYjNDM7XHR9XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2bmV3LVx1MDAzZXJlZmNudCwgMSk7XG4gXG4gI2lmZGVmIENPTkZJR19YRlJNXG5AQCAtNzE1NiwxMiAmIzQzOzcxNDcsOCBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4gdm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXG4gXHRcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBuZXdsZW4sIG5ld29mZiA9IFNLQl9FWFRfQ0hVTktTSVpFT0YoKmV4dCk7XG4tXG4gXHRza2JfZXh0X3B1dChza2IpO1xuLVx0bmV3bGVuID0gbmV3b2ZmICYjNDM7IHNrYl9leHRfdHlwZV9sZW5baWRdO1xuLVx0ZXh0LVx1MDAzZWNodW5rcyA9IG5ld2xlbjtcbi1cdGV4dC1cdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xuJiM0MztcdGV4dC1cdTAwM2VwcmVzZW50X2V4dGVuc2lvbnMgPSAxIFx1MDAzY1x1MDAzYyBpZDtcbiBcdHNrYi1cdTAwM2VleHRlbnNpb25zID0gZXh0O1xuIFx0c2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zID0gMSBcdTAwM2NcdTAwM2MgaWQ7XG4gXHRyZXR1cm4gc2tiX2V4dF9nZXRfcHRyKGV4dCwgaWQpO1xuQEAgLTcxODQsMzEgJiM0Mzs3MTcxLDIzIEBAIEVYUE9SVF9TWU1CT0xfTlNfR1BMKF9fc2tiX2V4dF9zZXQsIFwmIzM0O05FVERFVl9JTlRFUk5BTFwmIzM0Oyk7XG4gICovXG4gdm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuIHtcbi1cdHN0cnVjdCBza2JfZXh0ICpuZXcsICpvbGQgPSBOVUxMO1xuLVx0dW5zaWduZWQgaW50IG5ld2xlbiwgbmV3b2ZmO1xuJiM0MztcdHN0cnVjdCBza2JfZXh0ICpuZXc7XG4gXG4gXHRpZiAoc2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKSB7XG4tXHRcdG9sZCA9IHNrYi1cdTAwM2VleHRlbnNpb25zO1xuLVxuLVx0XHRuZXcgPSBza2JfZXh0X21heWJlX2NvdyhvbGQsIHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyk7XG4mIzQzO1x0XHRuZXcgPSBza2JfZXh0X21heWJlX2Nvdyhza2ItXHUwMDNlZXh0ZW5zaW9ucyxcbiYjNDM7XHRcdFx0XHRcdHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyk7XG4gXHRcdGlmICghbmV3KVxuIFx0XHRcdHJldHVybiBOVUxMO1xuIFxuIFx0XHRpZiAoX19za2JfZXh0X2V4aXN0KG5ldywgaWQpKVxuIFx0XHRcdGdvdG8gc2V0X2FjdGl2ZTtcbi1cbi1cdFx0bmV3b2ZmID0gbmV3LVx1MDAzZWNodW5rcztcbiBcdH0gZWxzZSB7XG4tXHRcdG5ld29mZiA9IFNLQl9FWFRfQ0hVTktTSVpFT0YoKm5ldyk7XG4tXG4gXHRcdG5ldyA9IF9fc2tiX2V4dF9hbGxvYyhHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFuZXcpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRuZXdsZW4gPSBuZXdvZmYgJiM0Mzsgc2tiX2V4dF90eXBlX2xlbltpZF07XG4tXHRuZXctXHUwMDNlY2h1bmtzID0gbmV3bGVuO1xuLVx0bmV3LVx1MDAzZW9mZnNldFtpZF0gPSBuZXdvZmY7XG4mIzQzO1x0bmV3LVx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyB8PSAxIFx1MDAzY1x1MDAzYyBpZDtcbiBzZXRfYWN0aXZlOlxuIFx0c2tiLVx1MDAzZXNsb3dfZ3JvID0gMTtcbiBcdHNrYi1cdTAwM2VleHRlbnNpb25zID0gbmV3O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtCUklER0VfTkVURklMVEVSJiMzNDssCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtNQ1RQJiMzNDssCiAgICAmIzM0O0kyQyYjMzQ7LAogICAgJiMzNDtJMkNfU0xBVkUmIzM0OywKICAgICYjMzQ7TUNUUF9UUkFOU1BPUlRfSTJDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7SU5FVF9QU1AmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX1RDX1NLQl9FWFQmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX2V4dF9hZGQmIzM0OywKICAgICYjMzQ7X19za2JfZXh0X3NldCYjMzQ7LAogICAgJiMzNDtfX3NrYl9leHRfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgYHNrYl9leHRgIChza19idWZmIGV4dGVuc2lvbnMpLiBJdCByZXBsYWNlcyBkeW5hbWljIG9mZnNldHMgd2l0aCBjb21waWxlLXRpbWUgZml4ZWQgb2Zmc2V0cyBhbmQgdXNlcyBhIGJpdG1hcCB0byB0cmFjayBwcmVzZW50IGV4dGVuc2lvbnMuIFRoaXMgaXMgYSBjb3JlIG5ldHdvcmtpbmcgY2hhbmdlIGFmZmVjdGluZyBob3cgZXh0ZW5zaW9ucyBsaWtlIElQc2VjLCBCcmlkZ2UgTmV0ZmlsdGVyLCBUQywgTVBUQ1AsIE1DVFAsIFBTUCwgYW5kIENBTiBhcmUgYXR0YWNoZWQgdG8gc29ja2V0IGJ1ZmZlcnMuIEl0IGlzIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIG1lbW9yeSBsYXlvdXQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDhjNmM0MDNmODZmMWFiYTA2YzNiNDkxMmIzMDlhYzM1ZjMzY2VlYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDE2OjU3OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggOTUxODQxODMxODBmNi4uNWE1MTQzZTQ3YjMwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC01MDExLDQ1ICYjNDM7NTAxMSw4MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9uZmN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGxvbmcgbmZjdCkKIH0KIAogI2lmZGVmIENPTkZJR19TS0JfRVhURU5TSU9OUwotZW51bSBza2JfZXh0X2lkIHsKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKQotCVNLQl9FWFRfQlJJREdFX05GLAomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX0JSSURHRV9ORglYKFNLQl9FWFRfQlJJREdFX05GLCBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9CUklER0VfTkYKICNlbmRpZgotI2lmZGVmIENPTkZJR19YRlJNCi0JU0tCX0VYVF9TRUNfUEFUSCwKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfWEZSTSkKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9TRUNfUEFUSAlYKFNLQl9FWFRfU0VDX1BBVEgsIHN0cnVjdCBzZWNfcGF0aCkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1NFQ19QQVRICiAjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVCkKLQlUQ19TS0JfRVhULAomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1RDCQlYKFRDX1NLQl9FWFQsIHN0cnVjdCB0Y19za2JfZXh0KQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfVEMKICNlbmRpZgomIzQzOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKQotCVNLQl9FWFRfTVBUQ1AsCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfTVBUQ1AJCVgoU0tCX0VYVF9NUFRDUCwgc3RydWN0IG1wdGNwX2V4dCkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX01QVENQCiAjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX0ZMT1dTKQotCVNLQl9FWFRfTUNUUCwKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9NQ1RQCQlYKFNLQl9FWFRfTUNUUCwgc3RydWN0IG1jdHBfZmxvdykKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX01DVFAKICNlbmRpZgomIzQzOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKQotCVNLQl9FWFRfUFNQLAomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1BTUAkJWChTS0JfRVhUX1BTUCwgc3RydWN0IHBzcF9za2JfZXh0KQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfUFNQCiAjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19DQU4pCi0JU0tCX0VYVF9DQU4sCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQ0FOCQlYKFNLQl9FWFRfQ0FOLCBzdHJ1Y3QgY2FuX3NrYl9leHQpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9DQU4KICNlbmRpZgotCVNLQl9FWFRfTlVNLCAvKiBtdXN0IGJlIGxhc3QgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFNLQl9FWFRfRk9SRUFDSChYKQlcCiYjNDM7CVNLQl9FWFRfWF9CUklER0VfTkYJXAomIzQzOwlTS0JfRVhUX1hfU0VDX1BBVEgJXAomIzQzOwlTS0JfRVhUX1hfVEMJCVwKJiM0MzsJU0tCX0VYVF9YX01QVENQCQlcCiYjNDM7CVNLQl9FWFRfWF9NQ1RQCQlcCiYjNDM7CVNLQl9FWFRfWF9QU1AJCVwKJiM0MzsJU0tCX0VYVF9YX0NBTgomIzQzOwomIzQzO2VudW0gc2tiX2V4dF9pZCB7CiYjNDM7I2RlZmluZSBYKGlkLCB0eXBlKQlpZCwKJiM0MzsJU0tCX0VYVF9GT1JFQUNIKFgpCiYjNDM7I3VuZGVmIFgKJiM0MzsJU0tCX0VYVF9OVU0sCiB9OwogCiYjNDM7ZXh0ZXJuIGNvbnN0IHU4IHNrYl9leHRfb2Zmc2V0W1NLQl9FWFRfTlVNXTsKJiM0MzsKIC8qKgogICoJc3RydWN0IHNrYl9leHQgLSBza19idWZmIGV4dGVuc2lvbnMKICAqCUByZWZjbnQ6IDEgb24gYWxsb2NhdGlvbiwgZGVhbGxvY2F0ZWQgb24gMAotICoJQG9mZnNldDogb2Zmc2V0IHRvIGFkZCB0byBAZGF0YSB0byBvYnRhaW4gZXh0ZW5zaW9uIGFkZHJlc3MKLSAqCUBjaHVua3M6IHNpemUgY3VycmVudGx5IGFsbG9jYXRlZCwgc3RvcmVkIGluIFNLQl9FWFRfQUxJR05fU0hJRlQgdW5pdHMKJiM0MzsgKglAcHJlc2VudF9leHRlbnNpb25zOiBiaXRtYXAgb2YgZXh0ZW5zaW9ucyBzdG9yZWQgaW4gQGRhdGEKICAqCUBkYXRhOiBzdGFydCBvZiBleHRlbnNpb24gZGF0YSwgdmFyaWFibGUgc2l6ZWQKICAqCi0gKglOb3RlOiBvZmZzZXRzL2xlbmd0aHMgYXJlIHN0b3JlZCBpbiBjaHVua3Mgb2YgOCBieXRlcywgdGhpcyBhbGxvd3MKLSAqCXRvIHVzZSAmIzM5O3U4JiMzOTsgdHlwZXMgd2hpbGUgYWxsb3dpbmcgdXAgdG8gMmtiIHdvcnRoIG9mIGV4dGVuc2lvbiBkYXRhLgomIzQzOyAqCUVhY2ggZXh0ZW5zaW9uIGlkIG9jY3VwaWVzIGEgZml4ZWQgc2xvdCB3aXRoaW4gQGRhdGEsIGxvY2F0ZWQgYXQKJiM0MzsgKglza2JfZXh0X29mZnNldFtpZF0gY2h1bmtzIG9mIDggYnl0ZXMuIFN0b3Jpbmcgb2Zmc2V0cy9sZW5ndGhzCiYjNDM7ICoJaW4gOC1ieXRlIGNodW5rcyBhbGxvd3MgJiMzOTt1OCYjMzk7IHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aAomIzQzOyAqCW9mIGV4dGVuc2lvbiBkYXRhLgogICovCiBzdHJ1Y3Qgc2tiX2V4dCB7CiAJcmVmY291bnRfdCByZWZjbnQ7Ci0JdTggb2Zmc2V0W1NLQl9FWFRfTlVNXTsgLyogaW4gY2h1bmtzIG9mIDggYnl0ZXMgKi8KLQl1OCBjaHVua3M7CQkvKiBzYW1lICovCiYjNDM7CXU4IHByZXNlbnRfZXh0ZW5zaW9uczsKIAljaGFyIGRhdGFbXSBfX2FsaWduZWQoOCk7CiB9OwogCkBAIC01MDg3LDcgJiM0Mzs1MTIzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgX19za2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza2JfZXh0ICpleHQsIGVudW0gc2tiX2V4dF9pZCBpKQogewotCXJldHVybiAhIWV4dC0mZ3Q7b2Zmc2V0W2ldOwomIzQzOwlyZXR1cm4gZXh0LSZndDtwcmVzZW50X2V4dGVuc2lvbnMgJmFtcDsgKDEgJmx0OyZsdDsgaSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCkKQEAgLTUxMDYsNyAmIzQzOzUxNDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9leHRfZmluZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpCiAJaWYgKHNrYl9leHRfZXhpc3Qoc2tiLCBpZCkpIHsKIAkJc3RydWN0IHNrYl9leHQgKmV4dCA9IHNrYi0mZ3Q7ZXh0ZW5zaW9uczsKIAotCQlyZXR1cm4gKHZvaWQgKilleHQgJiM0MzsgKGV4dC0mZ3Q7b2Zmc2V0W2lkXSAmbHQ7Jmx0OyAzKTsKJiM0MzsJCXJldHVybiAodm9pZCAqKWV4dCAmIzQzOyAoc2tiX2V4dF9vZmZzZXRbaWRdICZsdDsmbHQ7IDMpOwogCX0KIAogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBjODJhMTQ3MmE1ZWE4Li44ZTVkYjU3OTcyNWQwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtNTEzNCw0NyAmIzQzOzUxMzQsMzIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnQpOwogI2RlZmluZSBTS0JfRVhUX0NIVU5LU0laRU9GKHgpCShBTElHTigoc2l6ZW9mKHgpKSwgU0tCX0VYVF9BTElHTl9WQUxVRSkgLyBTS0JfRVhUX0FMSUdOX1ZBTFVFKQogCiBzdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0gewotI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpCi0JW1NLQl9FWFRfQlJJREdFX05GXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG5mX2JyaWRnZV9pbmZvKSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YRlJNCi0JW1NLQl9FWFRfU0VDX1BBVEhdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3Qgc2VjX3BhdGgpLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpCi0JW1RDX1NLQl9FWFRdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgdGNfc2tiX2V4dCksCi0jZW5kaWYKLSNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUCkKLQlbU0tCX0VYVF9NUFRDUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtcHRjcF9leHQpLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUykKLQlbU0tCX0VYVF9NQ1RQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG1jdHBfZmxvdyksCi0jZW5kaWYKLSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUCkKLQlbU0tCX0VYVF9QU1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgcHNwX3NrYl9leHQpLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfQ0FOKQotCVtTS0JfRVhUX0NBTl0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBjYW5fc2tiX2V4dCksCi0jZW5kaWYKJiM0MzsjZGVmaW5lIFgoaWQsIHR5cGUpCVtpZF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHR5cGUpLAomIzQzOwlTS0JfRVhUX0ZPUkVBQ0goWCkKJiM0MzsjdW5kZWYgWAogfTsKIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX25vX3Byb2ZpbGUgdW5zaWduZWQgaW50IHNrYl9leHRfdG90YWxfbGVuZ3RoKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGwgPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBza2JfZXh0KTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHNrYl9leHRfdHlwZV9sZW4pOyBpJiM0MzsmIzQzOykKLQkJbCAmIzQzOz0gc2tiX2V4dF90eXBlX2xlbltpXTsKJiM0MztzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQgewomIzQzOwl1OAloZWFkZXJbc2l6ZW9mKHN0cnVjdCBza2JfZXh0KV0gX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpOwomIzQzOyNkZWZpbmUgWChpZCwgdHlwZSkJdHlwZSBmXyMjaWQgX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpOwomIzQzOwlTS0JfRVhUX0ZPUkVBQ0goWCkKJiM0MzsjdW5kZWYgWAomIzQzO307CiAKLQlyZXR1cm4gbDsKLX0KJiM0Mztjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV0gPSB7CiYjNDM7I2RlZmluZSBYKGlkLCB0eXBlKQlbaWRdID0gb2Zmc2V0b2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0LCBmXyMjaWQpIC8gU0tCX0VYVF9BTElHTl9WQUxVRSwKJiM0MzsJU0tCX0VYVF9GT1JFQUNIKFgpCiYjNDM7I3VuZGVmIFgKJiM0Mzt9OwomIzQzO0VYUE9SVF9TWU1CT0woc2tiX2V4dF9vZmZzZXQpOwogCiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgX19ub19wcm9maWxlIHNrYl9leHRlbnNpb25zX2luaXQodm9pZCkKIHsKIAlCVUlMRF9CVUdfT04oU0tCX0VYVF9OVU0gJmd0OyA4KTsKLQlCVUlMRF9CVUdfT04oc2tiX2V4dF90b3RhbF9sZW5ndGgoKSAmZ3Q7IDI1NSk7CiYjNDM7CUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0KSAmZ3Q7IDI1NSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpOwogCiAJc2tidWZmX2V4dF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCYjMzQ7c2tidWZmX2V4dF9jYWNoZSYjMzQ7LAotCQkJCQkgICAgIFNLQl9FWFRfQUxJR05fVkFMVUUgKiBza2JfZXh0X3RvdGFsX2xlbmd0aCgpLAomIzQzOwkJCQkJICAgICBzaXplb2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0KSwKIAkJCQkJICAgICAwLAogCQkJCQkgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLAogCQkJCQkgICAgIE5VTEwpOwpAQCAtNzA4Myw3ICYjNDM7NzA2OCw3IEBAIEVYUE9SVF9TWU1CT0woc2tiX2NvbmRlbnNlKTsKICNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlMKIHN0YXRpYyB2b2lkICpza2JfZXh0X2dldF9wdHIoc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGlkKQogewotCXJldHVybiAodm9pZCAqKWV4dCAmIzQzOyAoZXh0LSZndDtvZmZzZXRbaWRdICogU0tCX0VYVF9BTElHTl9WQUxVRSk7CiYjNDM7CXJldHVybiAodm9pZCAqKWV4dCAmIzQzOyAoc2tiX2V4dF9vZmZzZXRbaWRdICogU0tCX0VYVF9BTElHTl9WQUxVRSk7CiB9CiAKIC8qKgpAQCAtNzEwMCw3ICYjNDM7NzA4NSw3IEBAIHN0cnVjdCBza2JfZXh0ICpfX3NrYl9leHRfYWxsb2MoZ2ZwX3QgZmxhZ3MpCiAJc3RydWN0IHNrYl9leHQgKm5ldyA9IGttZW1fY2FjaGVfYWxsb2Moc2tidWZmX2V4dF9jYWNoZSwgZmxhZ3MpOwogCiAJaWYgKG5ldykgewotCQltZW1zZXQobmV3LSZndDtvZmZzZXQsIDAsIHNpemVvZihuZXctJmd0O29mZnNldCkpOwomIzQzOwkJbmV3LSZndDtwcmVzZW50X2V4dGVuc2lvbnMgPSAwOwogCQlyZWZjb3VudF9zZXQoJmFtcDtuZXctJmd0O3JlZmNudCwgMSk7CiAJfQogCkBAIC03MTExLDYgJiM0Mzs3MDk2LDcgQEAgc3RhdGljIHN0cnVjdCBza2JfZXh0ICpza2JfZXh0X21heWJlX2NvdyhzdHJ1Y3Qgc2tiX2V4dCAqb2xkLAogCQkJCQkgdW5zaWduZWQgaW50IG9sZF9hY3RpdmUpCiB7CiAJc3RydWN0IHNrYl9leHQgKm5ldzsKJiM0MzsJaW50IGk7CiAKIAlpZiAocmVmY291bnRfcmVhZCgmYW1wO29sZC0mZ3Q7cmVmY250KSA9PSAxKQogCQlyZXR1cm4gb2xkOwpAQCAtNzExOSw3ICYjNDM7NzEwNSwxMiBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsCiAJaWYgKCFuZXcpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtY3B5KG5ldywgb2xkLCBvbGQtJmd0O2NodW5rcyAqIFNLQl9FWFRfQUxJR05fVkFMVUUpOwomIzQzOwltZW1jcHkobmV3LCBvbGQsIFNLQl9FWFRfQ0hVTktTSVpFT0YoKm9sZCkgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFNLQl9FWFRfTlVNOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG9sZC0mZ3Q7cHJlc2VudF9leHRlbnNpb25zICZhbXA7ICgxICZsdDsmbHQ7IGkpKQomIzQzOwkJCW1lbWNweShza2JfZXh0X2dldF9wdHIobmV3LCBpKSwgc2tiX2V4dF9nZXRfcHRyKG9sZCwgaSksCiYjNDM7CQkJICAgICAgIHNrYl9leHRfdHlwZV9sZW5baV0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKJiM0MzsJfQogCXJlZmNvdW50X3NldCgmYW1wO25ldy0mZ3Q7cmVmY250LCAxKTsKIAogI2lmZGVmIENPTkZJR19YRlJNCkBAIC03MTU2LDEyICYjNDM7NzE0Nyw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCwKIHZvaWQgKl9fc2tiX2V4dF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkLAogCQkgICAgc3RydWN0IHNrYl9leHQgKmV4dCkKIHsKLQl1bnNpZ25lZCBpbnQgbmV3bGVuLCBuZXdvZmYgPSBTS0JfRVhUX0NIVU5LU0laRU9GKCpleHQpOwotCiAJc2tiX2V4dF9wdXQoc2tiKTsKLQluZXdsZW4gPSBuZXdvZmYgJiM0Mzsgc2tiX2V4dF90eXBlX2xlbltpZF07Ci0JZXh0LSZndDtjaHVua3MgPSBuZXdsZW47Ci0JZXh0LSZndDtvZmZzZXRbaWRdID0gbmV3b2ZmOwomIzQzOwlleHQtJmd0O3ByZXNlbnRfZXh0ZW5zaW9ucyA9IDEgJmx0OyZsdDsgaWQ7CiAJc2tiLSZndDtleHRlbnNpb25zID0gZXh0OwogCXNrYi0mZ3Q7YWN0aXZlX2V4dGVuc2lvbnMgPSAxICZsdDsmbHQ7IGlkOwogCXJldHVybiBza2JfZXh0X2dldF9wdHIoZXh0LCBpZCk7CkBAIC03MTg0LDMxICYjNDM7NzE3MSwyMyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChfX3NrYl9leHRfc2V0LCAmIzM0O05FVERFVl9JTlRFUk5BTCYjMzQ7KTsKICAqLwogdm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKQogewotCXN0cnVjdCBza2JfZXh0ICpuZXcsICpvbGQgPSBOVUxMOwotCXVuc2lnbmVkIGludCBuZXdsZW4sIG5ld29mZjsKJiM0MzsJc3RydWN0IHNrYl9leHQgKm5ldzsKIAogCWlmIChza2ItJmd0O2FjdGl2ZV9leHRlbnNpb25zKSB7Ci0JCW9sZCA9IHNrYi0mZ3Q7ZXh0ZW5zaW9uczsKLQotCQluZXcgPSBza2JfZXh0X21heWJlX2NvdyhvbGQsIHNrYi0mZ3Q7YWN0aXZlX2V4dGVuc2lvbnMpOwomIzQzOwkJbmV3ID0gc2tiX2V4dF9tYXliZV9jb3coc2tiLSZndDtleHRlbnNpb25zLAomIzQzOwkJCQkJc2tiLSZndDthY3RpdmVfZXh0ZW5zaW9ucyk7CiAJCWlmICghbmV3KQogCQkJcmV0dXJuIE5VTEw7CiAKIAkJaWYgKF9fc2tiX2V4dF9leGlzdChuZXcsIGlkKSkKIAkJCWdvdG8gc2V0X2FjdGl2ZTsKLQotCQluZXdvZmYgPSBuZXctJmd0O2NodW5rczsKIAl9IGVsc2UgewotCQluZXdvZmYgPSBTS0JfRVhUX0NIVU5LU0laRU9GKCpuZXcpOwotCiAJCW5ldyA9IF9fc2tiX2V4dF9hbGxvYyhHRlBfQVRPTUlDKTsKIAkJaWYgKCFuZXcpCiAJCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQluZXdsZW4gPSBuZXdvZmYgJiM0Mzsgc2tiX2V4dF90eXBlX2xlbltpZF07Ci0JbmV3LSZndDtjaHVua3MgPSBuZXdsZW47Ci0JbmV3LSZndDtvZmZzZXRbaWRdID0gbmV3b2ZmOwomIzQzOwluZXctJmd0O3ByZXNlbnRfZXh0ZW5zaW9ucyB8PSAxICZsdDsmbHQ7IGlkOwogc2V0X2FjdGl2ZToKIAlza2ItJmd0O3Nsb3dfZ3JvID0gMTsKIAlza2ItJmd0O2V4dGVuc2lvbnMgPSBuZXc7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFNLQiBFeHRlbnNpb24gTGF5b3V0IENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gbG9vayBhdCBjbG9zZWx5LiBUaGUgY2hhbmdlcyB0byBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgYW5kIGBuZXQvY29yZS9za2J1ZmYuY2AgYXJlIHNpZ25pZmljYW50LiBJdCBsb29rcyBsaWtlIHRoZSB3YXkgYHNrYl9leHRgICh0aGUgc2tfYnVmZiBleHRlbnNpb25zKSBhcmUgaGFuZGxlZCBoYXMgYmVlbiBmdW5kYW1lbnRhbGx5IGFsdGVyZWQuIFByZXZpb3VzbHksIHRoZSBleHRlbnNpb25zIHdlcmUgYWxsb2NhdGVkIGFuZCBhcnJhbmdlZCBkeW5hbWljYWxseSwgd2l0aCBvZmZzZXRzIHN0b3JlZCBpbiBgZXh0LSZndDtvZmZzZXRbaWRdYC4gTm93LCB3ZSYjMzk7cmUgc2VlaW5nIGEgZml4ZWQgbGF5b3V0IGRlZmluZWQgYnkgYHN0cnVjdCBza2JfZXh0X2xheW91dGAgYXQgY29tcGlsZSB0aW1lLCBhbmQgc3RhdGljIG9mZnNldHMgKGBza2JfZXh0X29mZnNldFtpZF1gKS4gUmVwbGFjaW5nIHRoZSBgb2Zmc2V0YCBhcnJheSB3aXRoIGEgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0bWFwIGlzIGFsc28gYSBwcmV0dHkgbWFqb3Igc2hpZnQuCgpUaGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGNoYW5nZSwgbm8gcXVlc3Rpb24uIFRoZSBmYWN0IHRoYXQgaXQgYWZmZWN0cyBmdW5jdGlvbnMgbGlrZSBgc2tiX2V4dF9hZGRgLCBgX19za2JfZXh0X3NldGAsIGFuZCBgc2tiX2V4dF9tYXliZV9jb3dgIHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgdGhlIG1lbW9yeSBsYXlvdXQgb2YgaG93IHRoZXNlIGV4dGVuc2lvbnMgYXJlIGFjY2Vzc2VkIGFuZCBtYW5pcHVsYXRlZC4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlPyBJdCBsb29rcyBsaWtlIGl0IGlzLCBgc2tiX2V4dF9hZGRgIGlzIHVzZWQgaW4gYSB3aG9sZSBidW5jaCBvZiBwbGFjZXMgd2hlbiB3ZSBhZGQgZXh0ZW5zaW9ucyBsaWtlIFNFQ19QQVRILCBCUklER0VfTkYsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOLiBFeGNlbGxlbnQhIFRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gT2J2aW91c2x5LCBgc2tiX2V4dF9hZGRgIGlzIGNyaXRpY2FsLiBBbHNvLCBgX19za2JfZXh0X3NldGAgZGVmaW5pdGVseS4gYHNrYl9leHRfbWF5YmVfY293YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBzbyB3ZSBtaWdodCBub3QgYmUgYWJsZSB0byBmdXp6IGl0IGRpcmVjdGx5LCBidXQgYHNrYl9leHRfYWRkYCBjYWxscyBpdCBzbyB3ZSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciB0aGF0LiBQZXJoYXBzIGBfX3NrYl9leHRfYWxsb2NgIHRvbywgYW5kIHRoZSBpbmxpbmUgYHNrYl9leHRfY29weWAuCgpUaW1lIHRvIGRpZyBpbnRvIGBuZXQvY29yZS9za2J1ZmYuY2AgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBgc2tiX2V4dF9hZGRgIGFuZCBgX19za2JfZXh0X3NldGAuIEkmIzM5O2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWUgd2hlcmUgYHNrYl9leHRfYWRkYCBpcyBhY3R1YWxseSB1c2VkLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9leHRfYWRkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MjE1PXN0cnVjdCBza19idWZmICphbGxvY19jYW5fc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fZnJhbWUgKipjZilcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTIyMy1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MjI0Olx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTIyNS1cdGlmICghY3N4KSB7XG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYz0yNDU9c3RydWN0IHNrX2J1ZmYgKmFsbG9jX2NhbmZkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjU0LVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoyNTU6XHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjU2LVx0aWYgKCFjc3gpIHtcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jPTI3OT1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FueGxfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTItXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI5MzpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTQtXHRpZiAoIWNzeCkge1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MzM0PXN0YXRpYyBib29sIGNhbl9za2JfaW5pdF92YWxpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzQxLVx0XHRpZiAoIWNzeCkge1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzozNDI6XHRcdFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTM0My1cdFx0XHRpZiAoIWNzeClcbi0tXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYz0zOT1zdGF0aWMgbmV0ZGV2X3R4X3QgdnhjYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqb3NrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy02OS1cdC8qIHRoZSBjbG9uZWQgc2tiIHBvaW50cyB0byB0aGUgc2tiIGV4dGVuc2lvbiBvZiB0aGUgYWxyZWFkeSBjbG9uZWRcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjcwOlx0ICogb3NrYiB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4gc2tiX2V4dF9hZGQoKSBjcmVhdGVzIGEgY29weSB0b1xuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNzEtXHQgKiBzZXBhcmF0ZSB0aGUgc2tiIGV4dGVuc2lvbiBkYXRhIHdoaWNoIGlzIG5lZWRlZCB0byBzdGFydCB3aXRoIGFcbi0tXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy03My1cdCAqL1xuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmM6NzQ6XHRjc3ggPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQ0FOKTtcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTc1LVx0aWYgKCFjc3gpIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaD0zOT1ib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNDAtXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo0MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBjYW5fc2tiX2V4dCAqY2FuX3NrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00Mi17XG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo0MzpcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0NBTik7XG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00NC1cbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oOjQ1Olx0Lyogc2tiX2V4dF9hZGQoKSByZXR1cm5zIHVuaW5pdGlhbGl6ZWQgc3BhY2UgKi9cbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oLTQ2LVx0aWYgKGNzeClcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwOTM9dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTQtXHRcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5NTp2b2lkICpza2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDk2LXZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaD05PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2VfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtMTEtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg6MTI6XHRzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKmIgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC0xMy1cbi0tXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9Nzg3PXN0YXRpYyBpbmxpbmUgc3RydWN0IHRjX3NrYl9leHQgKnRjX3NrYl9leHRfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC03ODgte1xuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjc4OTpcdHN0cnVjdCB0Y19za2JfZXh0ICp0Y19za2JfZXh0ID0gc2tiX2V4dF9hZGQoc2tiLCBUQ19TS0JfRVhUKTtcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC03OTAtXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xNjg9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZV91bnNoYXJlKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE2OS17XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE3MDpcdHJldHVybiBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTcxLX1cbi0tXG5uZXQvY2FuL2JjbS5jPTMyMT1zdGF0aWMgdm9pZCBiY21fY2FuX3R4KHN0cnVjdCBiY21fb3AgKm9wLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmKVxuLS1cbm5ldC9jYW4vYmNtLmMtMzUzLVxubmV0L2Nhbi9iY20uYzozNTQ6XHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbm5ldC9jYW4vYmNtLmMtMzU1LVx0aWYgKCFjc3gpIHtcbi0tXG5uZXQvY2FuL2JjbS5jPTE2MDI9c3RhdGljIGludCBiY21fdHhfc2VuZChzdHJ1Y3QgbXNnaGRyICptc2csIGludCBpZmluZGV4LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2Nhbi9iY20uYy0xNjE3LVxubmV0L2Nhbi9iY20uYzoxNjE4Olx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5uZXQvY2FuL2JjbS5jLTE2MTktXHRpZiAoIWNzeCkge1xuLS1cbm5ldC9jYW4vZ3cuYz00NTg9c3RhdGljIHZvaWQgY2FuX2Nhbl9nd19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvY2FuL2d3LmMtNTE2LVx0LyogdGhlIGNsb25lZC9jb3BpZWQgbnNrYiBwb2ludHMgdG8gdGhlIHNrYiBleHRlbnNpb24gb2YgdGhlIG9yaWdpbmFsXG5uZXQvY2FuL2d3LmM6NTE3Olx0ICogc2tiIHdpdGggYW4gaW5jcmVhc2VkIHJlZmNvdW50LiBza2JfZXh0X2FkZCgpIGNyZWF0ZXMgYSBjb3B5IHRvXG5uZXQvY2FuL2d3LmMtNTE4LVx0ICogc2VwYXJhdGUgdGhlIHNrYiBleHRlbnNpb24gZGF0YSB0byBtb2RpZnkgdGhlIGNhbl9nd19ob3BzLlxubmV0L2Nhbi9ndy5jLTUxOS1cdCAqL1xubmV0L2Nhbi9ndy5jOjUyMDpcdG5jc3ggPSBza2JfZXh0X2FkZChuc2tiLCBTS0JfRVhUX0NBTik7XG5uZXQvY2FuL2d3LmMtNTIxLVx0aWYgKCFuY3N4KSB7XG4tLVxubmV0L2Nhbi9pc290cC5jPTI4Nj1zdGF0aWMgaW50IGlzb3RwX3NlbmRfZmMoc3RydWN0IHNvY2sgKnNrLCBpbnQgYWUsIHU4IGZsb3dzdGF0dXMpXG4tLVxubmV0L2Nhbi9pc290cC5jLTI5OC1cbm5ldC9jYW4vaXNvdHAuYzoyOTk6XHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQobnNrYik7XG5uZXQvY2FuL2lzb3RwLmMtMzAwLVx0aWYgKCFjc3gpIHtcbi0tXG5uZXQvY2FuL2lzb3RwLmM9ODYzPXN0YXRpYyB2b2lkIGlzb3RwX3NlbmRfY2ZyYW1lKHN0cnVjdCBpc290cF9zb2NrICpzbylcbi0tXG5uZXQvY2FuL2lzb3RwLmMtODgzLVxubmV0L2Nhbi9pc290cC5jOjg4NDpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xubmV0L2Nhbi9pc290cC5jLTg4NS1cdGlmICghY3N4KSB7XG4tLVxubmV0L2Nhbi9pc290cC5jPTExMDQ9c3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2Nhbi9pc290cC5jLTEyMTMtXG5uZXQvY2FuL2lzb3RwLmM6MTIxNDpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xubmV0L2Nhbi9pc290cC5jLTEyMTUtXHRpZiAoIWNzeCkge1xuLS1cbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM9ODgxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqajE5Mzlfc2tfYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbm5ldC9jYW4vajE5Mzkvc29ja2V0LmMtODk5LVxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYzo5MDA6XHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbm5ldC9jYW4vajE5Mzkvc29ja2V0LmMtOTAxLVx0aWYgKCFjc3gpIHtcbi0tXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jPTYwMT1za19idWZmICpqMTkzOV90cF90eF9kYXRfbmV3KHN0cnVjdCBqMTkzOV9wcml2ICpwcml2LFxuLS1cbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtNjEzLVxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYzo2MTQ6XHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtNjE1LVx0aWYgKCFjc3gpIHtcbi0tXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jPTEwNTY9c3RhdGljIGludCBqMTkzOV9zaW1wbGVfdHhuZXh0KHN0cnVjdCBqMTkzOV9zZXNzaW9uICpzZXNzaW9uKVxuLS1cbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtMTA3Mi1cdC8qIHRoZSBjbG9uZWQgc2tiIHBvaW50cyB0byB0aGUgc2tiIGV4dGVuc2lvbiBvZiB0aGUgb3JpZ2luYWwgc2Vfc2tiXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jOjEwNzM6XHQgKiB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4gc2tiX2V4dF9hZGQoKSBjcmVhdGVzIGEgY29weSB0b1xubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYy0xMDc0LVx0ICogc2VwYXJhdGUgdGhlIHNrYiBleHRlbnNpb24gZGF0YSB3aGljaCBpcyBuZWVkZWQgdG8gbW9kaWZ5IHRoZVxuLS1cbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtMTA3Ni1cdCAqL1xubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYzoxMDc3Olx0aWYgKCFza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQ0FOKSkge1xubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYy0xMDc4LVx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jPTE1NTM9ajE5Mzlfc2Vzc2lvbiAqajE5Mzlfc2Vzc2lvbl9mcmVzaF9uZXcoc3RydWN0IGoxOTM5X3ByaXYgKnByaXYsXG4tLVxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYy0xNTY1LVxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYzoxNTY2Olx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTE1NjctXHRpZiAoIWNzeCkge1xuLS1cbm5ldC9jYW4vcmF3LmM9OTE4PXN0YXRpYyBpbnQgcmF3X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvY2FuL3Jhdy5jLTk2Mi1cbm5ldC9jYW4vcmF3LmM6OTYzOlx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5uZXQvY2FuL3Jhdy5jLTk2NC1cdGlmICghY3N4KSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NzE1Nj1FWFBPUlRfU1lNQk9MX05TX0dQTChfX3NrYl9leHRfc2V0LCBcJiMzNDtORVRERVZfSU5URVJOQUxcJiMzNDspO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcxNTgtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzo3MTU5OiAqIHNrYl9leHRfYWRkIC0gYWxsb2NhdGUgc3BhY2UgZm9yIGdpdmVuIGV4dGVuc2lvbiwgQ09XIGlmIG5lZWRlZFxubmV0L2NvcmUvc2tidWZmLmMtNzE2MC0gKiBAc2tiOiBidWZmZXJcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTcxLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzE3Mjp2b2lkICpza2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG5uZXQvY29yZS9za2J1ZmYuYy03MTczLXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTk2LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjcxOTc6RVhQT1JUX1NZTUJPTChza2JfZXh0X2FkZCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MTk4LVxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jPTI2NT1zdGF0aWMgaW50IGVzcF94bWl0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMzU0LVx0aWYgKGh3X29mZmxvYWQpIHtcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjM1NTpcdFx0aWYgKCFza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfU0VDX1BBVEgpKVxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMzU2LVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jPTMwMz1zdGF0aWMgaW50IGVzcDZfeG1pdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM3NS1cdGlmIChod19vZmZsb2FkKSB7XG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzozNzY6XHRcdGlmICghc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX1NFQ19QQVRIKSlcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM3Ny1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvbWN0cC9yb3V0ZS5jPTM0Nj1zdGF0aWMgdm9pZCBtY3RwX3NrYl9zZXRfZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWN0cF9za19rZXkgKmtleSlcbi0tXG5uZXQvbWN0cC9yb3V0ZS5jLTM0OS1cbm5ldC9tY3RwL3JvdXRlLmM6MzUwOlx0ZmxvdyA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9NQ1RQKTtcbm5ldC9tY3RwL3JvdXRlLmMtMzUxLVx0aWYgKCFmbG93KVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTIyMj1ib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTMyMi1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTMyMzpcdG1wZXh0ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX01QVENQKTtcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTMyNC1cdGlmICghbXBleHQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xMjY9c3RhdGljIHZvaWQgc3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIHU4IHJlYXNvbilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTI3LXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTI4Olx0c3RydWN0IG1wdGNwX2V4dCAqbXBleHQgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfTVBUQ1ApO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xMjktXG4tLVxubmV0L3BzcC9wc3BfbWFpbi5jPTI5OT1pbnQgcHNwX2Rldl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGRldl9pZCwgdTggZ2VuZXJhdGlvbiwgYm9vbCBzdHJpcF9pY3YpXG4tLVxubmV0L3BzcC9wc3BfbWFpbi5jLTM2NC1cbm5ldC9wc3AvcHNwX21haW4uYzozNjU6XHRwc2UgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfUFNQKTtcbm5ldC9wc3AvcHNwX21haW4uYy0zNjYtXHRpZiAoIXBzZSlcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmM9MTIzPXN0cnVjdCBzZWNfcGF0aCAqc2VjcGF0aF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtMTI2LVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjEyNzpcdHNwID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX1NFQ19QQVRIKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy0xMjgtXHRpZiAoIXNwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDgyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6CgoqKkFuYWx5emluZyBgc2tiX2V4dF9hZGRgIGFuZCBgX19za2JfZXh0X3NldGAgRnVuY3Rpb24gVXNhZ2UqKgoKQWxyaWdodCwgc28gdGhlIHNoZWVyIG51bWJlciBvZiBjYWxscyB0byBgc2tiX2V4dF9hZGRgIGlzIGEgZ29vZCBpbmRpY2F0b3IsIGFuZCBJIHN1c3BlY3QgYF9fc2tiX2V4dF9zZXRgIGlzIGEga2V5IGNvbXBvbmVudCBoZXJlIHRvby4gVGhpcyBsaWtlbHkgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWNrZXQgZXh0ZW5zaW9ucywgYW5kIGl0JiMzOTtzIHByYWN0aWNhbGx5IGd1YXJhbnRlZWQgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGZ1bmRhbWVudGFsIHRvIG1hbmFnaW5nIGFuZCBtYW5pcHVsYXRpbmcgdGhvc2UgZXh0ZW5zaW9ucyBpbiB0aGUga2VybmVsLiBHaXZlbiB0aGVpciBuYW1lcywgSSYjMzk7ZCBzYXkgYHNrYl9leHRfYWRkYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBvciBhdHRhY2hpbmcgdGhlc2UgZXh0ZW5zaW9ucyB0byB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZXMsIGFuZCBgX19za2JfZXh0X3NldGAgaXMgcHJvYmFibHkgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgZGF0YS4gSXQmIzM5O3MgdGltZSB0byBkZWx2ZSBkZWVwZXIsIGFuZCBleGFtaW5lIGBfX3NrYl9leHRfc2V0YCBhcyB3ZWxsLCB0byBjb25maXJtIHRoZXNlIGFzc3VtcHRpb25zIGFuZCBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGVpciBhcHBsaWNhdGlvbi4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NrYl9leHRfc2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xMT12b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTEzLVx0aWYgKHBzcF9leHQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTQ6XHRcdF9fc2tiX2V4dF9zZXQoc2tiLCBTS0JfRVhUX1BTUCwgcHNwX2V4dCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA5Mj1zdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5Mzp2b2lkICpfX3NrYl9leHRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5NC1cdFx0ICAgIHN0cnVjdCBza2JfZXh0ICpleHQpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTcwNjk9c3RhdGljIHZvaWQgKnNrYl9leHRfZ2V0X3B0cihzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaWQpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA3OS0gKiBSZXR1cm5zIHRoZSBuZXdseSBhbGxvY2F0ZWQgcG9pbnRlci4gVGhlIHBvaW50ZXIgY2FuIGxhdGVyIGF0dGFjaGVkIHRvIGFcbm5ldC9jb3JlL3NrYnVmZi5jOjcwODA6ICogc2tiIHZpYSBfX3NrYl9leHRfc2V0KCkuXG5uZXQvY29yZS9za2J1ZmYuYy03MDgxLSAqIE5vdGU6IGNhbGxlciBtdXN0IGhhbmRsZSB0aGUgc2tiX2V4dCBhcyBhbiBvcGFxdWUgZGF0YS5cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MDk1PXN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTM3LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6NzEzODogKiBfX3NrYl9leHRfc2V0IC0gYXR0YWNoIHRoZSBzcGVjaWZpZWQgZXh0ZW5zaW9uIHN0b3JhZ2UgdG8gdGhpcyBza2Jcbm5ldC9jb3JlL3NrYnVmZi5jLTcxMzktICogQHNrYjogYnVmZmVyXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzE0Ni0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjcxNDc6dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXG5uZXQvY29yZS9za2J1ZmYuYy03MTQ4LVx0XHQgICAgc3RydWN0IHNrYl9leHQgKmV4dClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTU1LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjcxNTY6RVhQT1JUX1NZTUJPTF9OU19HUEwoX19za2JfZXh0X3NldCwgXCYjMzQ7TkVUREVWX0lOVEVSTkFMXCYjMzQ7KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNTctXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTMwOT1zdGF0aWMgYm9vbCBfX21wdGNwX2FkZF9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzMTQtXHRcdHJldHVybiBmYWxzZTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzMTU6XHRfX3NrYl9leHRfc2V0KHNrYiwgU0tCX0VYVF9NUFRDUCwgbXBleHQpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTMxNi1cdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTMzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUaGlzIGBza2JfZXh0YCBNZW1vcnkgUGF0Y2gqKgoKT2theSwgdGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGFsbG9jYXRpb24gcmVsYXRlZCB0byBgc2tiX2V4dGAuIFRoYXQgaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUuIE1lbW9yeSBhbGxvY2F0aW9uIGNoYW5nZXMgYXJlIGFsd2F5cyBwcmltZSBjYW5kaWRhdGVzIGZvciBmaW5kaW5nIG9mZi1ieS1vbmUgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGRlZGljYXRpbmcgc29tZSB0aW1lIHRvLgoKSSYjMzk7ZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBza2JfZXh0X2FkZGAsIGBfX3NrYl9leHRfc2V0YCwgYW5kIGVzcGVjaWFsbHkgYF9fc2tiX2V4dF9hbGxvY2AuIFRoZSBhbGxvY2F0b3IgaXMgYWx3YXlzIHRoZSBoZWFydCBvZiB0aGVzZSBraW5kcyBvZiBpc3N1ZXMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYF9fc2tiX2V4dF9hbGxvY2AgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc2tiX2V4dF9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwODY9c3RydWN0IHNrYl9leHQge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5MS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5MjpzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5My12b2lkICpfX3NrYl9leHRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MDY5PXN0YXRpYyB2b2lkICpza2JfZXh0X2dldF9wdHIoc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGlkKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwNzQtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzo3MDc1OiAqIF9fc2tiX2V4dF9hbGxvYyAtIGFsbG9jYXRlIGEgbmV3IHNrYiBleHRlbnNpb25zIHN0b3JhZ2Vcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNzYtICpcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MDgyLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NzA4MzpzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKVxubmV0L2NvcmUvc2tidWZmLmMtNzA4NC17XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NzA5NT1zdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzE0MC0gKiBAaWQ6IGV4dGVuc2lvbiBpZFxubmV0L2NvcmUvc2tidWZmLmM6NzE0MTogKiBAZXh0OiBleHRlbnNpb24gc3RvcmFnZSBwcmV2aW91c2x5IGFsbG9jYXRlZCB2aWEgX19za2JfZXh0X2FsbG9jKClcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNDItICpcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MTcyPXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MTg0LVx0fSBlbHNlIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjcxODU6XHRcdG5ldyA9IF9fc2tiX2V4dF9hbGxvYyhHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTcxODYtXHRcdGlmICghbmV3KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEzMDk9c3RhdGljIGJvb2wgX19tcHRjcF9hZGRfZXh0KHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcClcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzMTAte1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTMxMTpcdHN0cnVjdCBza2JfZXh0ICptcGV4dCA9IF9fc2tiX2V4dF9hbGxvYyhnZnApO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTMxMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipEZWNvbnN0cnVjdGluZyBTS0IgRXh0ZW5zaW9uIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGVzZSBgc2tiYCBleHRlbnNpb24gZnVuY3Rpb25zLiBUaGUgY29yZSBvbmVzIEkmIzM5O20gc2VlaW5nIGFzIGltcG9ydGFudCBhcmUgYHNrYl9leHRfYWRkYCwgYF9fc2tiX2V4dF9zZXRgLCBhbmQgYF9fc2tiX2V4dF9hbGxvY2AuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZXh0ZW5zaW9ucyBpbiB0aGUgU0tCLiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgYW5kIGluY2x1ZGUgYHNrYl9leHRfZGVsYCBpbiBteSBhbmFseXNpcy4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBleHRlbnNpb25zIGFyZSByZW1vdmVkIGFzIHdlbGwgYXMgYWRkZWQsIHNldCwgYW5kIGFsbG9jYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX2V4dF9kZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDk1PXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTY6dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTctdm9pZCBfX3NrYl9leHRfcHV0KHN0cnVjdCBza2JfZXh0ICpleHQpO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTEyOT1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2V4dF9leGlzdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTMzLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTM0OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzUte1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTM2LVx0aWYgKHNrYl9leHRfZXhpc3Qoc2tiLCBpZCkpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMzc6XHRcdF9fc2tiX2V4dF9kZWwoc2tiLCBpZCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzgtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTE2Nj1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7fVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTY3OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdW51c2VkKSB7fVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTY4LXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnMpIHt9XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTExOTc9c2VjcGF0aF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaC0xMTk5LSNpZmRlZiBDT05GSUdfWEZSTVxuaW5jbHVkZS9uZXQveGZybS5oOjEyMDA6XHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfU0VDX1BBVEgpO1xuaW5jbHVkZS9uZXQveGZybS5oLTEyMDEtI2VuZGlmXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xNTU9c3RhdGljIHZvaWQgbmZfYnJpZGdlX2luZm9fZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNTYte1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNTc6XHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTU4LX1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MjEwPXN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X21jdHAoc3RydWN0IG1jdHBfZmxvdyAqZmxvdylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MjE2LVxubmV0L2NvcmUvc2tidWZmLmM6NzIxNzp2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxubmV0L2NvcmUvc2tidWZmLmMtNzIxOC17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzIzNC19XG5uZXQvY29yZS9za2J1ZmYuYzo3MjM1OkVYUE9SVF9TWU1CT0woX19za2JfZXh0X2RlbCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MjM2LVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTExMz1zdGF0aWMgZW51bSBtYXBwaW5nX3N0YXR1cyBnZXRfbWFwcGluZ19zdGF0dXMoc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTExNzQtXHRcdFx0XHQgKi9cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTE3NTpcdFx0XHRcdHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9NUFRDUCk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTExNzYtXHRcdFx0XHRyZXR1cm4gTUFQUElOR19PSztcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyMDktXHRcdCAgICBzdWJmbG93LVx1MDAzZW1hcF9jc3VtX3JlcWQgPT0gbXBleHQtXHUwMDNlY3N1bV9yZXFkKSB7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEyMTA6XHRcdFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX01QVENQKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTIxMS1cdFx0XHRnb3RvIHZhbGlkYXRlX2NzdW07XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xMjUzLVxubmV0L21wdGNwL3N1YmZsb3cuYzoxMjU0Olx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX01QVENQKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTI1NS1cbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTE4MjA9aW50IHRjZl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtMTg2Ny1cdFx0XHQvKiBDb25zdW1lLCBzbyBjbG9uZWQvcmVkaXJlY3Qgc2ticyB3b24mIzM5O3QgaW5oZXJpdCBleHQgKi9cbm5ldC9zY2hlZC9jbHNfYXBpLmM6MTg2ODpcdFx0XHRza2JfZXh0X2RlbChza2IsIFRDX1NLQl9FWFQpO1xubmV0L3NjaGVkL2Nsc19hcGkuYy0xODY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlIGNoYW5nZToKCioqQW5hbHl6aW5nIHRoZSBTS0IgRXh0ZW5zaW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJiMzOTt0ICpkaXJlY3RseSogdG91Y2hpbmcgYF9fc2tiX2V4dF9kZWxgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gaXMgZm9jdXNlZCBvbiBgc2tiX2V4dF9tYXliZV9jb3dgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIHdpdGhpbiBgc2tiX2V4dF9hZGRgLiBIbW0sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29ubmVjdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29kZSBhcm91bmQgYF9fc2tiX2V4dF9kZWxgLiBJIGtub3cgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLCBzbyBsZXQgbWUganVtcCBvdmVyIHRoZXJlIGFuZCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGl0cyBleGFjdCBiZWhhdmlvciB3aXRoaW4gdGhlIFNLQiBsaWZlY3ljbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGBza2JfZXh0X21heWJlX2Nvd2AgY2hhbmdlIGFmZmVjdHMgZXh0ZW5zaW9uIGRlYWxsb2NhdGlvbiwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIENvcHktT24tV3JpdGUgc2NlbmFyaW9zLiBHb3QgaXQuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoaXMgc29ydGVkIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc2tiX2V4dF9kZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDk1PXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTY6dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTctdm9pZCBfX3NrYl9leHRfcHV0KHN0cnVjdCBza2JfZXh0ICpleHQpO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTEzND1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzNi1cdGlmIChza2JfZXh0X2V4aXN0KHNrYiwgaWQpKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTM3Olx0XHRfX3NrYl9leHRfZGVsKHNrYiwgaWQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTM4LX1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MjEwPXN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X21jdHAoc3RydWN0IG1jdHBfZmxvdyAqZmxvdylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03MjE2LVxubmV0L2NvcmUvc2tidWZmLmM6NzIxNzp2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxubmV0L2NvcmUvc2tidWZmLmMtNzIxOC17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzIzNC19XG5uZXQvY29yZS9za2J1ZmYuYzo3MjM1OkVYUE9SVF9TWU1CT0woX19za2JfZXh0X2RlbCk7XG5uZXQvY29yZS9za2J1ZmYuYy03MjM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYxMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIHNrYl9leHRfZGVsIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fc2tiX2V4dF9kZWxgLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IHdvcmtzLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGZ1bmN0aW9uIHRvIHNlZSB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcy4gSG93IGRvZXMgaXQgbWFuYWdlIHRoZSByZWZlcmVuY2UgY291bnRpbmcgb2YgdGhlIHNoYXJlZCBleHRlbnNpb24gZGF0YT8gRG9lcyBpdCBoYW5kbGUgYW55IHNwZWNpYWwgY2FzZXMgaW52b2x2aW5nIGZyYWdtZW50ZWQgc2ticyBvciBvdGhlciBza2Igc3BlY2lmaWMgYmVoYXZpb3JzPyBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzaWRlIG9mIHRoaW5ncywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgZXh0ZW5zaW9uIGRhdGEgaXMgZnJlZWQsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIGlzc3VlcyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgU0tCIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBkZXBlbmQgb24sIG9yIG1vZGlmeSwgdGhvc2UgZXh0ZXJuYWwgZGF0YSBjaHVua3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcyMTc6XHR2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuNzIxODpcdHtcbjcyMTk6XHRcdHN0cnVjdCBza2JfZXh0ICpleHQgPSBza2ItXHUwMDNlZXh0ZW5zaW9ucztcbjcyMjA6XHRcbjcyMjE6XHRcdHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyBcdTAwMjY9IH4oMSBcdTAwM2NcdTAwM2MgaWQpO1xuNzIyMjpcdFx0aWYgKHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyA9PSAwKSB7XG43MjIzOlx0XHRcdHNrYi1cdTAwM2VleHRlbnNpb25zID0gTlVMTDtcbjcyMjQ6XHRcdFx0X19za2JfZXh0X3B1dChleHQpO1xuNzIyNTpcdCNpZmRlZiBDT05GSUdfWEZSTVxuNzIyNjpcdFx0fSBlbHNlIGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIIFx1MDAyNlx1MDAyNlxuNzIyNzpcdFx0XHQgICByZWZjb3VudF9yZWFkKFx1MDAyNmV4dC1cdTAwM2VyZWZjbnQpID09IDEpIHtcbjcyMjg6XHRcdFx0c3RydWN0IHNlY19wYXRoICpzcCA9IHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpO1xuNzIyOTpcdFxuNzIzMDpcdFx0XHRza2JfZXh0X3B1dF9zcChzcCk7XG43MjMxOlx0XHRcdHNwLVx1MDAzZWxlbiA9IDA7XG43MjMyOlx0I2VuZGlmXG43MjMzOlx0XHR9XG43MjM0Olx0fVxuNzIzNTpcdEVYUE9SVF9TWU1CT0woX19za2JfZXh0X2RlbCk7XG43MjM2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTczCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIFNLQiBFeHRlbnNpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBTS0IgZXh0ZW5zaW9ucyBjb2RlLCBhbmQgaXQgc2VlbXMgbGlrZSBgX19za2JfZXh0X2RlbGAgaXNuJiMzOTt0IGEgbWFqb3IgcGxheWVyIGhlcmUuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gYHNrYl9leHRfYWRkYCwgYF9fc2tiX2V4dF9zZXRgLCBhbmQgYF9fc2tiX2V4dF9hbGxvY2Ag4oCTIHRob3NlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGludm9sdmVkIGluIGFjdHVhbGx5IG1hbmFnaW5nIHRoZXNlIGV4dGVuc2lvbnMuIEkgd2FzIGluaXRpYWxseSBjdXJpb3VzIGFib3V0IGBza2JfZXh0X21heWJlX2Nvd2AsIGJ1dCBzaW5jZSBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYCwgYW5kIG5vdCBpbmxpbmVkLCBpdCB3b24mIzM5O3QgYmUgYXMgaW1wb3J0YW50IGZvciB0aGUgbWFpbiBmbG93LgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfU0tCX0VYVEVOU0lPTlNgIGlzIGNydWNpYWwsIHRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGV4dGVuc2lvbnMgYXJlIHVzZWQsIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBmZWF0dXJlcyB0cmlnZ2VyIHRoZW0uIFNvLCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4sIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBgQlJJREdFX05FVEZJTFRFUmAsIGBYRlJNYCwgYE5FVF9UQ19TS0JfRVhUYCwgYE1QVENQYCwgYE1DVFBfRkxPV1NgLCBgSU5FVF9QU1BgLCBhbmQgYENBTmAuIEkmIzM5O2xsIHdhbnQgdG8gZGlnIGludG8gYEtjb25maWdgIGZvciBgQ09ORklHX1NLQl9FWFRFTlNJT05TYCBhbmQgY29uZmlybSB3aGF0IGRlcGVuZGVuY2llcyBhcmUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTS0JfRVhURU5TSU9OUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz02Mz1jb25maWcgU0tCX0RFQ1JZUFRFRFxuLS1cbm5ldC9LY29uZmlnLTY1LVxubmV0L0tjb25maWc6NjY6Y29uZmlnIFNLQl9FWFRFTlNJT05TXG5uZXQvS2NvbmZpZy02Ny1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3OTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSGlkZGVuIEJvb2wgUmVmbGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHByb2Nlc3NpbmcgdGhpcyAmIzM0O2hpZGRlbiBib29sLiYjMzQ7IFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIGV4cGxpY2l0bHkgc2V0IGJ5IGEgdXNlciBkaXJlY3RseSwgb3Igc29tZXRoaW5nIHN1cmZhY2VkIGluIGFuIG9idmlvdXMgVUkgZWxlbWVudC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAmIzM0O2hpZGRlbiYjMzQ7IGlzIGtleS4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBhIGNvbmZpZ3VyYXRpb24gZmxhZywgdXNlZCB1bmRlciB0aGUgaG9vZCwgYSBzZXR0aW5nIHRoYXQmIzM5O3MgZGVyaXZlZCBmcm9tLCBvciBpbmRpcmVjdGx5IGluZmx1ZW5jZWQgYnksIHRoZSBzZXR0aW5ncyBvZiAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zLgoKTXkgaW1tZWRpYXRlIGZvbGxvdyB1cCBxdWVzdGlvbnMgd291bGQgYmUsIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBpbmZsdWVuY2luZyB0aGlzIGhpZGRlbiBib29sPyBXaGF0IGxvZ2ljIGlzIGRldGVybWluaW5nIGl0cyBzdGF0ZT8gSXMgaXQgc2V0IGF0IGNvbXBpbGUgdGltZT8gUnVudGltZT8gSXMgaXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU/IEEgZmVhdHVyZSBmbGFnIG1hbmFnZWQgYnkgYSB0aGlyZCBwYXJ0eSBzeXN0ZW0/IFRoZSBpbnRlcnBsYXkgaGVyZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlbmRlZCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGRlcGVuZGVuY2llcy4gV2hhdCB1cHN0cmVhbSBzZXR0aW5ncyBhcmUgdGhlIHRyaWdnZXJzIGZvciB0aGlzICYjMzQ7aGlkZGVuIGJvb2wmIzM0OyB0byBiZSBzZXQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBTS0JfRVhURU5TSU9OUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbi0tXG5uZXQvS2NvbmZpZy0yMzYtXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0Vcbm5ldC9LY29uZmlnOjIzNzpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L0tjb25maWctMjM4LVx0aGVscFxuLS1cbm5ldC9jYW4vS2NvbmZpZz02PW1lbnVjb25maWcgQ0FOXG5uZXQvY2FuL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0NBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbm5ldC9jYW4vS2NvbmZpZzo4Olx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG5uZXQvY2FuL0tjb25maWctOS1cdGhlbHBcbi0tXG5uZXQvbWN0cC9LY29uZmlnPTIxPWNvbmZpZyBNQ1RQX0ZMT1dTXG4tLVxubmV0L21jdHAvS2NvbmZpZy0yMy1cdGRlcGVuZHMgb24gTUNUUFxubmV0L21jdHAvS2NvbmZpZzoyNDpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTI9Y29uZmlnIE1QVENQXG4tLVxubmV0L21wdGNwL0tjb25maWctNC1cdGRlcGVuZHMgb24gSU5FVFxubmV0L21wdGNwL0tjb25maWc6NTpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L21wdGNwL0tjb25maWctNi1cdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuLS1cbm5ldC9wc3AvS2NvbmZpZz01PWNvbmZpZyBJTkVUX1BTUFxuLS1cbm5ldC9wc3AvS2NvbmZpZy04LVx0c2VsZWN0IFNLQl9ERUNSWVBURURcbm5ldC9wc3AvS2NvbmZpZzo5Olx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG5uZXQvcHNwL0tjb25maWctMTAtXHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG4tLVxubmV0L3NjaGVkL0tjb25maWc9OTU0PWNvbmZpZyBORVRfVENfU0tCX0VYVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTk1Ni1cdGRlcGVuZHMgb24gTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnOjk1NzpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L3NjaGVkL0tjb25maWctOTU4LVxuLS1cbm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctOC1cdHNlbGVjdCBHUk9fQ0VMTFNcbm5ldC94ZnJtL0tjb25maWc6OTpcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xubmV0L3hmcm0vS2NvbmZpZy0xMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gQmFzZWQgb24gdGhlIHJlcXVpcmVtZW50cywgSSBuZWVkIHRvIGVuYWJsZSBhIHN1aXRlIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uczogYEJSSURHRV9ORVRGSUxURVJgLCBgQ0FOYCwgYE1DVFBfRkxPV1NgLCBgTVBUQ1BgLCBgSU5FVF9QU1BgLCBgTkVUX1RDX1NLQl9FWFRgLCBhbmQgYFhGUk1gLiBCZWZvcmUgSSBzaW1wbHkgZmxpcCB0aG9zZSBzd2l0Y2hlcywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4gTGV0JiMzOTtzIHNlZS4uLgoKYEJSSURHRV9ORVRGSUxURVJgIGhhcyB0aGUgdXN1YWwgZGVwZW5kZW5jaWVzLCBgQlJJREdFYCBhbmQgYE5FVEZJTFRFUmAsIHdoaWNoIGFyZSBvYnZpb3VzLiBgQ0FOYCBpcyBhIHN1YnN5c3RlbSwgdGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIGBNQ1RQX0ZMT1dTYCBuZWVkcyBgTUNUUGAuIGBNUFRDUGAgYW5kIGBJTkVUX1BTUGAgYm90aCByZXF1aXJlIGBJTkVUYC4gYE5FVF9UQ19TS0JfRVhUYCByZWxpZXMgb24gYE5FVF9DTFNfQUNUYCwgYW5kIGBYRlJNYCBpcyBhIGNvcmUgY29uZmlndXJhdGlvbiBpdGVtLiBOb3RoaW5nIHRvbyB1bnVzdWFsIGhlcmUuCgpPa2F5LCB3aXRoIGFsbCB0aGF0IGluIG1pbmQsIG15IGZpbmFsIGxpc3Qgb2YgY29uZmlncyB0byBlbmFibGUgaXM6CgoqICAgYEJSSURHRV9ORVRGSUxURVJgCiogICBgQ0FOYAoqICAgYE1DVFBfRkxPV1NgCiogICBgTVBUQ1BgCiogICBgSU5FVF9QU1BgCiogICBgTkVUX1RDX1NLQl9FWFRgCiogICBgWEZSTWAKKiAgIGBCUklER0VgCiogICBgTkVURklMVEVSYAoqICAgYE1DVFBgCiogICBgSU5FVGAKKiAgIGBORVRfQ0xTX0FDVGAKCkJlZm9yZSBJIG1hcmsgdGhpcyBhcyBjb21wbGV0ZSwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgYElORVRfUFNQYCYjMzk7cyBkZWZpbml0aW9uIGluIGBuZXQvcHNwL0tjb25maWdgIHRvIGJlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIHRoZXJlIHRoYXQgbWlnaHQgYWZmZWN0IG15IGRlY2lzaW9uLiBBbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcHNwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQU1AgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgSU5FVF9QU1BcbiAgIDY6XHRcdGJvb2wgXCYjMzQ7UFNQIFNlY3VyaXR5IFByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IFNLQl9ERUNSWVBURURcbiAgIDk6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAxMDpcdFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgUFNQIFNlY3VyaXR5IFByb3RvY29sIChQU1ApLlxuICAxMzpcdFx0Rm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOlxuICAxNDpcdFx0ICBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZ29vZ2xlL3BzcC9tYWluL2RvYy9QU1BfQXJjaF9TcGVjLnBkZlxuICAxNTpcdFxuICAxNjpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqVmVyaWZ5aW5nIHRoZSBNQ1RQIEZsb3cgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGNvbmZpcm0gdGhlIGBNQ1RQX0ZMT1dTYCBjb25maWd1cmF0aW9uIHNldHRpbmcgd2l0aGluIHRoZSBgbmV0L21jdHAvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIHNldHRpbmcgaXMgcHJlc2VudCBhbmQgY29uZmlndXJlZCBjb3JyZWN0bHkuIFdoYXQgYXJlIHRoZSBleHBlY3RlZCB2YWx1ZXMgb3IgZGVwZW5kZW5jaWVzIGZvciB0aGlzPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBhZ2FpbnN0IHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIGV4aXN0aW5nIGd1aWRlbGluZXMgdG8gbWFrZSBjZXJ0YWluIGV2ZXJ5dGhpbmcgaXMgY29tcGxpYW50IGFuZCB0aGF0IG5vIHBvdGVudGlhbCByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRpZXMgaW50byB0aGUgd2lkZXIgTUNUUCBpbXBsZW1lbnRhdGlvbiBpcyBhbHNvIHZpdGFsLiBTbywgSSB3aWxsIHByb2NlZWQgYnkgb3BlbmluZyB0aGUgS2NvbmZpZyBmaWxlIGFuZCBxdWlja2x5IHJ1biBhIHNlYXJjaCB0byBjb25maXJtIHRoZSBzZXR0aW5nIGFuZCBpdHMgY29ycmVzcG9uZGluZyBzZXR0aW5ncy4gSXQmIzM5O3MgYSBxdWljayBhdWRpdCwgYnV0IGNyaXRpY2FsIGZvciB0aGUgaW50ZWdyaXR5IG9mIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21jdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdG1lbnVjb25maWcgTUNUUFxuICAgMzpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7TUNUUCBjb3JlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgTWFuYWdlbWVudCBDb21wb25lbnQgVHJhbnNwb3J0IFByb3RvY29sIChNQ1RQKSBpcyBhbiBpbi1zeXN0ZW1cbiAgIDc6XHRcdCAgcHJvdG9jb2wgZm9yIGNvbW11bmljYXRpbmcgYmV0d2VlbiBtYW5hZ2VtZW50IGNvbnRyb2xsZXJzIGFuZFxuICAgODpcdFx0ICB0aGVpciBtYW5hZ2VkIGRldmljZXMgKHBlcmlwaGVyYWxzLCBob3N0IHByb2Nlc3NvcnMsIGV0Yy4pLiBUaGVcbiAgIDk6XHRcdCAgcHJvdG9jb2wgaXMgZGVmaW5lZCBieSBETVRGIHNwZWNpZmljYXRpb24gRFNQMDIzNi5cbiAgMTA6XHRcbiAgMTE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBjb3JlIE1DVFAgc3VwcG9ydC4gRm9yIGNvbW11bmljYXRpbmcgd2l0aCBvdGhlclxuICAxMjpcdFx0ICBkZXZpY2VzLCB5b3UmIzM5O2xsIHdhbnQgdG8gZW5hYmxlIGEgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlXG4gIDEzOlx0XHQgIGNoYW5uZWwuXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIE1DVFBfVEVTVFxuICAxNjpcdCAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIGNvcmUgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAxNzpcdCAgICAgICAgc2VsZWN0IE1DVFBfRkxPV1NcbiAgMTg6XHQgICAgICAgIGRlcGVuZHMgb24gTUNUUD15IFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDE5Olx0ICAgICAgICBkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBNQ1RQX0ZMT1dTXG4gIDIyOlx0XHRib29sXG4gIDIzOlx0XHRkZXBlbmRzIG9uIE1DVFBcbiAgMjQ6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byBgTUNUUF9GTE9XU2AgYW5kIGl0cyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGBNQ1RQX0ZMT1dTYCB2YXJpYWJsZS4gSSByZW1lbWJlciBpdCYjMzk7cyBhIGhpZGRlbiBib29sZWFuLCBtZWFuaW5nIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkIGluIHRoZSBub3JtYWwgY29uZmlndXJhdGlvbiBtZW51cy4gVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGF0IGNvbnRyb2xzIGl0PyBBaCwgcmlnaHQsIEkgc2VlIHRoYXQgYE1DVFBfVEVTVGAgaXMgdGhlIGtleS4gVGhhdCBpbXBsaWVzIGl0JiMzOTtzIGludGVuZGVkIGZvciBpbnRlcm5hbCB0ZXN0aW5nLCBwcm9iYWJseSB0byBlbmFibGUgc29tZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIE1DVFAgZmxvdyBtYW5hZ2VtZW50LiBJcyB0aGF0IHRoZSBvbmx5IHRoaW5nIHRoYXQgdG9nZ2xlcyBpdCwgb3IgYXJlIHRoZXJlIG90aGVyIGRlcGVuZGVuY2llcyBsdXJraW5nPyBJdCYjMzk7cyBjcnVjaWFsIHRvIGtub3cgdGhpcywgb3RoZXJ3aXNlIGEgbWlzY29uZmlndXJhdGlvbiBzb21ld2hlcmUgZWxzZSBjb3VsZCBsZWFkIHRvIHByb2JsZW1zLiBJIG5lZWQgdG8gYmUgc3VyZS4gQW55IG90aGVyIGRlcGVuZGVuY2llcz8gTGV0IG1lIGRpZyBhIGxpdHRsZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBNQ1RQX0ZMT1dTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZz0yOT1jb25maWcgTUNUUF9UUkFOU1BPUlRfSTJDXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnLTM0LVx0ZGVwZW5kcyBvbiBJMkNfU0xBVkVcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNTpcdHNlbGVjdCBNQ1RQX0ZMT1dTXG5kcml2ZXJzL25ldC9tY3RwL0tjb25maWctMzYtXHRoZWxwXG4tLVxubmV0L21jdHAvS2NvbmZpZz0xNT1jb25maWcgTUNUUF9URVNUXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcJiMzNDtNQ1RQIGNvcmUgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubmV0L21jdHAvS2NvbmZpZzoxNzogICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXG5uZXQvbWN0cC9LY29uZmlnLTE4LSAgICAgICAgZGVwZW5kcyBvbiBNQ1RQPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBNQ1RQL0kyQyBUcmFuc3BvcnQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gaWYgSSBlbmFibGUgYE1DVFBfVFJBTlNQT1JUX0kyQ2AsIHRoYXQgaW5oZXJlbnRseSBwdWxscyBpbiB0aGUgYE1DVFBfRkxPV1NgIGNvbmZpZ3VyYXRpb24sIGFzIGV4cGVjdGVkLiBHb29kLCB0aGF0JiMzOTtzIGxvZ2ljYWwuIEl0JiMzOTtzIGEgc3RhbmRhcmQgZGVwZW5kZW5jeS4gTm93LCBJJiMzOTttIHRoaW5raW5nLCBva2F5LCBsZXQmIzM5O3Mgc2F5IEkgd2FudCB0byB1c2UgYE1DVFBfVFJBTlNQT1JUX0kyQ2Ag4oCTIEkmIzM5O2xsIGFsc28gbGlrZWx5IG5lZWQgYEkyQ19TTEFWRWAgZW5hYmxlZCwgc2luY2UgdGhlIEkyQyB0cmFuc3BvcnQgbmVlZHMgdG8gYmUgc2V0IHVwIGFzIGEgc2xhdmUgb24gdGhlIGJ1cy4gVGhhdCBjb21iaW5hdGlvbiBtYWtlcyBzZW5zZSBmb3IgYSB0eXBpY2FsIGltcGxlbWVudGF0aW9uLiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgaW4gdGhlIG5ldHdvcmsgc3RhY2sgaW50ZXJhY3Rpb24sIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiBgTkVUX1RDX1NLQl9FWFRgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBvZiB0aG9zZSBzZXR0aW5ncyBtaWdodCBhZmZlY3QgaG93IEkgaGFuZGxlIHRoZSBNQ1RQIGZyYW1lcyBvdmVyIEkyQywgZXNwZWNpYWxseSB3aXRoIGhvdyB0aGUgU0tCIGlzIGJ1aWx0LiBHb3R0YSBtYWtlIHN1cmUgdGhlIEkyQyB0cmFuc3BvcnQgcGxheXMgbmljZWx5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIGZlYXR1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTU0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTQ6XHRjb25maWcgTkVUX1RDX1NLQl9FWFRcbiA5NTU6XHRcdGJvb2wgXCYjMzQ7VEMgcmVjaXJjdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gOTU2Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gOTU3Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiA5NTg6XHRcbiA5NTk6XHRcdGhlbHBcbiA5NjA6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyB0YyBjaGFpbiBtaXNzZXMgdG8gY29udGludWUgaW4gT3ZTIGRhdGFwYXRoIGluXG4gOTYxOlx0XHQgIHRoZSBjb3JyZWN0IHJlY2lyY19pZCwgYW5kIGhhcmR3YXJlIGNoYWluIG1pc3NlcyB0byBjb250aW51ZSBpblxuIDk2MjpcdFx0ICB0aGUgY29ycmVjdCBjaGFpbiBpbiB0YyBzb2Z0d2FyZSBkYXRhcGF0aC5cbiA5NjM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4OTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgTkVUX1RDX1NLQl9FWFRgIGlzIGRlZmluaXRlbHkgZW5hYmxlZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIE5vdywgZ2l2ZW4gdGhhdCwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBzY3J1dGluaXplIGBCUklER0VfTkVURklMVEVSYC4gVGhlIGltcGxpY2F0aW9ucyBvZiBvbmUgd2l0aG91dCB0aGUgb3RoZXIgYXJlIGltcG9ydGFudCwgYW5kIHRoZXkmIzM5O2xsIGhlYXZpbHkgaW5mbHVlbmNlIGhvdyB0aGlzIHN0YWNrIGlzIGdvaW5nIHRvIGJlaGF2ZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgcmVwcmVzZW50cyBhIHN0YW5kYWxvbmUgY29uZmlndXJhdGlvbiwgb3IgaWYgb3RoZXIsIHJlbGF0ZWQgb3B0aW9ucyBhcmUgZW5hYmxlZC4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjZW50cmFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHRyYWZmaWMgY29udHJvbCBjYXBhYmlsaXRpZXMgYW5kIHRoZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSBpbiB0aGlzIGVudmlyb25tZW50LCBhbmQgbXkgYW5hbHlzaXMgcmVhbGx5IGRlcGVuZHMgb24gdW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMxOlx0Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbiAyMzI6XHRcdHRyaXN0YXRlIFwmIzM0O0JyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXCYjMzQ7XG4gMjMzOlx0XHRkZXBlbmRzIG9uIEJSSURHRVxuIDIzNDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVIgXHUwMDI2XHUwMDI2IElORVRcbiAyMzU6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMjM2Olx0XHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAyMzc6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuIDIzODpcdFx0aGVscFxuIDIzOTpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGxldCBhcnB0YWJsZXMgcmVzcC4gaXB0YWJsZXMgc2VlIGJyaWRnZWRcbiAyNDA6XHRcdCAgQVJQIHJlc3AuIElQIHRyYWZmaWMuIElmIHlvdSB3YW50IGEgYnJpZGdpbmcgZmlyZXdhbGwsIHlvdSBwcm9iYWJseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI1OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY2llcyBhbmQgYSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEJSSURHRV9ORVRGSUxURVJgIHJpZ2h0IG5vdy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0JiMzOTtzIHJlbGlhbnQgb24gYSBmZXcgb3RoZXIgY29uZmlndXJhdGlvbnMgdG8gZnVuY3Rpb24gcHJvcGVybHk6IHNwZWNpZmljYWxseSwgYEJSSURHRWAsIGBORVRGSUxURVJgLCBgSU5FVGAsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYC4gVGhhdCBtYWtlcyBzZW5zZTsgYnJpZGdpbmcgb2Z0ZW4gaW52b2x2ZXMgZmlsdGVyaW5nIGFuZCwgb2YgY291cnNlLCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBOb3csIGp1c3QgYXMgYSBxdWljayBjaGVjaywgSSB3YW50IHRvIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgQ0FOYC4gTm8gcGFydGljdWxhciByZWFzb24sIGp1c3QgbWFraW5nIHN1cmUgSSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nIG9idmlvdXMgaW4gdGhlIGJyb2FkZXIgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgNjpcdG1lbnVjb25maWcgQ0FOXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKENBTikgaXMgYSBzbG93ICh1cCB0byAxTWJpdC9zKSBzZXJpYWxcbiAgMTE6XHRcdCAgY29tbXVuaWNhdGlvbnMgcHJvdG9jb2wuIERldmVsb3BtZW50IG9mIHRoZSBDQU4gYnVzIHN0YXJ0ZWQgaW5cbiAgMTI6XHRcdCAgMTk4MyBhdCBSb2JlcnQgQm9zY2ggR21iSCwgYW5kIHRoZSBwcm90b2NvbCB3YXMgb2ZmaWNpYWxseVxuICAxMzpcdFx0ICByZWxlYXNlZCBpbiAxOTg2LiBUaGUgQ0FOIGJ1cyB3YXMgb3JpZ2luYWxseSBtYWlubHkgZm9yIGF1dG9tb3RpdmUsXG4gIDE0Olx0XHQgIGJ1dCBpcyBub3cgd2lkZWx5IHVzZWQgaW4gbWFyaW5lIChOTUVBMjAwMCksIGluZHVzdHJpYWwsIGFuZCBtZWRpY2FsXG4gIDE1Olx0XHQgIGFwcGxpY2F0aW9ucy4gTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQ0FOIG5ldHdvcmsgcHJvdG9jb2wgZmFtaWx5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjI4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE5ldHdvcmsgVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJIHNlZSBgQ0FOYCBpbiB0aGUgbWl4IOKAkyB0aGF0JiMzOTtzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBOb3csIGdpdmVuIHRoYXQgb2JzZXJ2YXRpb24sIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBDQU5gIGJlaW5nIHZpc2libGUgaW4gdGhpcyBjb250ZXh0LiBJdCBzdWdnZXN0cyBhIHBhcnRpY3VsYXIgbmV0d29yayBjb25maWd1cmF0aW9uIG9yIHBvdGVudGlhbCBhcmVhIG9mIGludmVzdGlnYXRpb24uIEl0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgbGF5ZXIgb3IgdGhlIGRhdGFsaW5rIGxheWVyLgoKTGV0JiMzOTtzIHNoaWZ0IGZvY3VzIGFuZCBzZWUgaG93IGBNUFRDUGAgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBDb25zaWRlcmluZyBgQ0FOYCBpcyB2aXNpYmxlLCBhcmUgd2UgbGlrZWx5IHRvIHNlZSBgTVBUQ1BgIHJ1bm5pbmcgYXMgd2VsbD8gQXJlIHRoZXNlIHRlY2hub2xvZ2llcyBpbnRlcmFjdGluZz8gQXJlIHdlIGxvb2tpbmcgYXQgYSBzeXN0ZW0gd2l0aCBkdWFsLXN0YWNrIGNhcGFiaWxpdGllcz8gVGhlIGBNUFRDUGAgY2hlY2sgd2lsbCBnaXZlIG1lIG1vcmUgY29udGV4dC4gVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRcbiAgIDI6XHRjb25maWcgTVBUQ1BcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBjb25uZWN0aW9ucyBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb3ZlciBtdWx0aXBsZVxuICAxMDpcdFx0ICBzdWJmbG93cyBpbiBvcmRlciB0byB1dGlsaXplIG11bHRpcGxlIG5ldHdvcmsgcGF0aHMuIEVhY2ggc3ViZmxvd1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk5NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgTmV0d29yayBNdWx0aXBhdGhpbmcqKgoKT2theSwgc28gSSBzZWUgYE1QVENQYCBpcyBzaG93aW5nIHVwIOKAkyB0aGF0JiMzOTtzIGdvb2QsIGEgZGVmaW5pdGUgaW5kaWNhdGlvbiB0aGF0IHRoZSBtdWx0aXBhdGggVENQIGZ1bmN0aW9uYWxpdHkgaXMgYWN0aXZlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwbHkgaW50byB0aGUgc3BlY2lmaWMgTVBUQ1AgaW1wbGVtZW50YXRpb24sIGlzIHRvIGNoZWNrIHRoZSBgWEZSTWAgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IHRyYW5zZm9ybXMgYW5kIHBvbGljaWVzIGFyZSBjb3JyZWN0bHkgY29uZmlndXJlZCBhbmQgYmVpbmcgYXBwbGllZC4gYFhGUk1gIGlzIGNyaXRpY2FsIGZvciBzZWN1cmUgbXVsdGlwYXRoaW5nLCBhbmQgYW55IGlzc3VlcyB0aGVyZSBjYW4gY3JpcHBsZSBvciwgYXQgYmVzdCwgc2VyaW91c2x5IGRlZ3JhZGUgcGVyZm9ybWFuY2UuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgSSBsb29rIGF0IGFueXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFhGUk0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgWEZSTVxuICAgNjpcdFx0Ym9vbFxuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gICA5Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgMTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTY6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyOTIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBYRlJNIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgYFhGUk1gIGlzIHRoaXMgdW5kZXJseWluZyBib29sZWFuLCBhIHNvcnQgb2YgbWFzdGVyIHN3aXRjaCwgYnV0IGl0JiMzOTtzICpoaWRkZW4qLiBJIHNlZSB0aGF0IGl0JiMzOTtzIHRvZ2dsZWQgb24gb3Igb2ZmIGJ5IGEgYnVuY2ggb2Ygb3RoZXIgb3B0aW9ucywgdGhpbmdzIGxpa2UgYFhGUk1fVVNFUmAsIGFuZCB0aGUgdmFyaW91cyBJUHNlYy1yZWxhdGVkIHByb3RvY29sczogYElORVRfQUhgLCBgSU5FVF9FU1BgLCBgSU5FVF9JUENPTVBgLCBhbmQgdGhlaXIgSVB2NiBjb3VudGVycGFydHMuCgpHaXZlbiB0aGF0IEkgd2FudCB0byBoYXZlIGNvbnRyb2wgYW5kIGZsZXhpYmlsaXR5IG92ZXIgdGhlIFhGUk0gc3Vic3lzdGVtLCBpdCBtYWtlcyBzZW5zZSBmb3IgbWUgdG8gZW5hYmxlIGBYRlJNX1VTRVJgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBob29rcyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MTk0PWNvbmZpZyBJWEdCRV9JUFNFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTk4LVx0ZGVmYXVsdCB5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjE5OTpcdHNlbGVjdCBYRlJNX0FMR09cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjAwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjIwPWNvbmZpZyBJWEdCRVZGX0lQU0VDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMjQtXHRkZWZhdWx0IHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjI1Olx0c2VsZWN0IFhGUk1fQUxHT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMjYtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxuLS1cbm5ldC9pcHY0L0tjb25maWctMzA3LVx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWc6MzA4Olx0c2VsZWN0IFhGUk1cbm5ldC9pcHY0L0tjb25maWctMzA5LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozNDE6XHRzZWxlY3QgWEZSTV9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDItXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb25cJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MzU2Olx0c2VsZWN0IFhGUk1fRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM1Ny1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzcxLVx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cdGRlZmF1bHQgblxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODYtXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcdHNlbGVjdCBYRlJNX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM5ND1jb25maWcgSU5FVF9JUENPTVBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM5Ni1cdHNlbGVjdCBJTkVUX1hGUk1fVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcdHNlbGVjdCBYRlJNX0lQQ09NUFxubmV0L2lwdjQvS2NvbmZpZy0zOTgtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz00Nz1jb25maWcgSU5FVDZfQUhcbm5ldC9pcHY2L0tjb25maWctNDgtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBBSCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzo0OTpcdHNlbGVjdCBYRlJNX0FIXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzo2NDpcdHNlbGVjdCBYRlJNX0VTUFxubmV0L2lwdjYvS2NvbmZpZy02NS1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzktXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY2L0tjb25maWctODEtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTkwPWNvbmZpZyBJTkVUNl9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWctOTQtXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnOjk1Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTYtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTA0LVx0c2VsZWN0IElORVQ2X1hGUk1fVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnOjEwNTpcdHNlbGVjdCBYRlJNX0lQQ09NUFxubmV0L2lwdjYvS2NvbmZpZy0xMDYtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMTI9Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNTMtXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjYvS2NvbmZpZy0xNTUtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xND1jb25maWcgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTE1LVx0dHJpc3RhdGVcbm5ldC94ZnJtL0tjb25maWc6MTY6XHRzZWxlY3QgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy0xNy1cdHNlbGVjdCBDUllQVE9cbi0tXG5uZXQveGZybS9LY29uZmlnPTIzPWNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG5uZXQveGZybS9LY29uZmlnOjI1Olx0c2VsZWN0IFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0yNi1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTg0PWNvbmZpZyBYRlJNX0FIXG5uZXQveGZybS9LY29uZmlnLTg1LVx0dHJpc3RhdGVcbm5ldC94ZnJtL0tjb25maWc6ODY6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTg3LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9OTM9Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbm5ldC94ZnJtL0tjb25maWc6OTU6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTk2LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MTA2PWNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzoxMDg6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTEwOS1cdHNlbGVjdCBDUllQVE9cbi0tXG5uZXQveGZybS9LY29uZmlnPTExMj1jb25maWcgTkVUX0tFWVxubmV0L3hmcm0vS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtQRl9LRVkgc29ja2V0cyAoZGVwcmVjYXRlZClcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MTE0Olx0c2VsZWN0IFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xMTUtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTI3LVx0ZGVwZW5kcyBvbiBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnOjEyODpcdHNlbGVjdCBYRlJNX01JR1JBVEVcbm5ldC94ZnJtL0tjb25maWctMTI5LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI3OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlc2UgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gZW5hYmxlIGBYRlJNX1VTRVJgLCBhcyBpdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHBvaW50IG9mIGNvbnRyb2wuIEkgdW5kZXJzdGFuZCB0aGF0IGBYRlJNX1VTRVJgIGlzIHRoZSBvbmUgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBgWEZSTV9BTEdPYCwgd2hpY2ggaW4gdHVybiBzZWxlY3RzIHRoZSBvdmVyYXJjaGluZyBgWEZSTWAgZnJhbWV3b3JrLiBUaGF0IHNpbXBsaWZpZXMgdGhlIGluaXRpYWwgZGVjaXNpb24sIHNvIGxldCYjMzk7cyBnbyB3aXRoIHRoYXQuCgpOb3csIGxldCYjMzk7cyBnZXQgYSBoYW5kbGUgb24gdGhlIG90aGVyIGNvbmZpZ3MgYXQgcGxheS4gSSBzZWUgdGhhdCB3ZSBoYXZlOgoKKiAgIGBCUklER0VfTkVURklMVEVSYAoqICAgYENBTmAKKiAgIGBNQ1RQX0ZMT1dTYCAodGhhdCBpcyBnb2luZyB0byBiZSB2aWEgYE1DVFBfVEVTVGAgb3IgYE1DVFBfVFJBTlNQT1JUX0kyQ2ApCiogICBgTVBUQ1BgCiogICBgSU5FVF9QU1BgCiogICBgTkVUX1RDX1NLQl9FWFRgCiogICBgWEZSTV9VU0VSYAoKV2FpdCBhIG1pbnV0ZSwgYE1DVFBfRkxPV1NgIGlzIGEgaGlkZGVuIEJvb2xlYW4sIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYSBkZXBlbmRlbnQgY29uZmlndXJhdGlvbiBmb3IgdGhpcy4gVGhlIGNob2ljZXMgYXJlIGBNQ1RQX1RFU1RgIGFuZCBgTUNUUF9UUkFOU1BPUlRfSTJDYC4KCkkmIzM5O2xsIGxlYW4gdG93YXJkcyBlbmFibGluZyBgTUNUUF9URVNUYCBpbml0aWFsbHkuIFNvLCB0byBlbnN1cmUgYE1DVFBfRkxPV1NgIGlzIGFjdGl2ZSwgbGV0JiMzOTtzIGVuYWJsZSBgTUNUUF9URVNUYCwgYE1DVFBgLCBhbmQgYEtVTklUYC4KCkp1c3QgdG8gZG91YmxlLWNoZWNrLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdHVzIG9mIGBNQ1RQX1RFU1RgIHRvIGVuc3VyZSBpdCYjMzk7cyBzdGlsbCBlbmFibGVkIGFuZCBoYXNuJiMzOTt0IGhhZCBzb21lIHNpZGUgZWZmZWN0IG9uIG15IGN1cnJlbnQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWN0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdGNvbmZpZyBNQ1RQX1RFU1RcbiAgMTY6XHQgICAgICAgIGJvb2wgXCYjMzQ7TUNUUCBjb3JlIHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMTc6XHQgICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXG4gIDE4Olx0ICAgICAgICBkZXBlbmRzIG9uIE1DVFA9eSBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAxOTpcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTUNUUF9GTE9XU1xuICAyMjpcdFx0Ym9vbFxuICAyMzpcdFx0ZGVwZW5kcyBvbiBNQ1RQXG4gIDI0Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBXYWxrdGhyb3VnaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IGNoYWluLiAgYE1DVFBfVEVTVGAgcmVsaWVzIG9uIGJvdGggYE1DVFBgIGJlaW5nIHNldCB0byAmIzM5O3kmIzM5OyBhbmQgYEtVTklUYCBhbHNvIGJlaW5nIHNldCB0byAmIzM5O3kmIzM5Oy4gIFNpbXBsZSBlbm91Z2guICBUaGVyZWZvcmUsIHRvIGdldCBgTUNUUF9URVNUYCBlbmFibGVkLCBJIG5lZWQgdG8gZW5zdXJlIGJvdGggYE1DVFBgIGFuZCBgS1VOSVRgIGFyZSBlbmFibGVkLiAgU28sIEkgd2lsbCBlbmFibGUgYE1DVFBgLCBlbmFibGUgYEtVTklUYCwgYW5kIHRoZW4gZXhwbGljaXRseSBlbmFibGUgYE1DVFBfVEVTVGAgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgaG9va2VkIHVwIGNvcnJlY3RseS4KCk5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gdGhlIG5leHQgc2VjdGlvbi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGBORVRfVENfU0tCX0VYVGAuIFRoaXMgb25lIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTkVUX0NMU19BQ1RgIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgYmVmb3JlIEkgY2FuIHdvcnJ5IGFib3V0IGBORVRfVENfU0tCX0VYVGAuIEkmIzM5O2xsIGdvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciBgTkVUX0NMU19BQ1RgIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgdmFsaWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ0xTX0FDVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXG4tLVxubmV0L3NjaGVkL0tjb25maWctNzAxLVxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxubmV0L3NjaGVkL0tjb25maWctNzAzLVx0Ym9vbCBcJiMzNDtBY3Rpb25zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDYzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhpcyBkZWVwbHkuCgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCkFscmlnaHQsIGBORVRfQ0xTX0FDVGAgaXMgc2hvd2luZyB1cCwgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgZGlnIGRlZXBlciwgYXMgSSBhbHdheXMgZG8uIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYElORVRfUFNQYCwgZ2l2ZW4gaXRzIHJlbGF0aW9uc2hpcCB0byBgSU5FVGAuIE9rYXksIGl0IGhpbmdlcyBvbiBgSU5FVGAgYXMgZXhwZWN0ZWQuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHdoYXQgSSB3YXMgYW50aWNpcGF0aW5nLgoKTm93LCBsZXQmIzM5O3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBCUklER0VfTkVURklMVEVSYC4gVGhpcyBvbmUmIzM5O3MgYWx3YXlzIGludGVyZXN0aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBkZXBlbmRzIG9uIGBCUklER0VgLCBgTkVURklMVEVSYCwgYElORVRgLCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRoYXQmIzM5O3MgYSBtb3JlIGludm9sdmVkIHNldCBvZiBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBzdGFuZGFyZCwgbm90aGluZyBqdW1wcyBvdXQuCgpBbmQsIG9mIGNvdXJzZSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGdpdmVuIGl0cyByb2xlLiBUaGF0JiMzOTtzIGEga2V5IGNvbXBvbmVudCBpbiBhIGNvbmZpZ3VyYXRpb24gbGlrZSB0aGlzLiBVbmRlcnN0YW5kaW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gZXZlcnl0aGluZyBlbHNlIGlzIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTIxOD1pZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTIxOS1cbm5ldC9LY29uZmlnOjIyMDpjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0FkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODQwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgc2VlIGBORVRGSUxURVJfQURWQU5DRURgIOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gTGV0JiMzOTtzIHNlZSBhYm91dCBlbmFibGluZyBNdWx0aVBhdGggVENQLCBvciBgTVBUQ1BgLiBJdCYjMzk7cyBkZXBlbmRlbnQgb24gYElORVRgLCBzbyB0aGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQuIE5vdywgbG9va2luZyBhdCBDb250cm9sbGVyIEFyZWEgTmV0d29yaywgb3IgYENBTmAsIHRoYXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhdmFpbGFibGUuCgpTbywgaGVyZSYjMzk7cyBteSBpbml0aWFsIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgZm9yIHRoaXMgYnVpbGQ6IGBCUklER0VfTkVURklMVEVSYCwgYEJSSURHRWAsIGBORVRGSUxURVJgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYElORVRgLCBgQ0FOYCwgYE1DVFBgLCBgS1VOSVRgLCBgTUNUUF9URVNUYCwgYE1QVENQYCwgYElORVRfUFNQYCwgYE5FVF9DTFNfQUNUYCwgYE5FVF9UQ19TS0JfRVhUYCwgYW5kIGBYRlJNX1VTRVJgLgoKSG9sZCBvbi4uLiBJIGp1c3QgcmVtZW1iZXJlZCBgTUNUUF9URVNUYCBpcyBhIGJvb2xlYW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGFub3RoZXIgd2F5IHRvIGVuYWJsZSBgTUNUUF9GTE9XU2AuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiEgTm93LCBsb29raW5nIGF0IGBNQ1RQX1RSQU5TUE9SVF9JMkNgLCBJIHNlZSB0aGF0IGl0IGRlcGVuZHMgb24gYEkyQ19TTEFWRWAuIExldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgSTJDX1NMQVZFYCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgc2V0IHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEkyQ19TTEFWRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2kyYy9LY29uZmlnPTEwMj1jb25maWcgSTJDX1NUVUJcbi0tXG5kcml2ZXJzL2kyYy9LY29uZmlnLTExMy1cbmRyaXZlcnMvaTJjL0tjb25maWc6MTE0OmNvbmZpZyBJMkNfU0xBVkVcbmRyaXZlcnMvaTJjL0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtJMkMgc2xhdmUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaTJjL0tjb25maWc9MTIxPWlmIEkyQ19TTEFWRVxuZHJpdmVycy9pMmMvS2NvbmZpZy0xMjItXG5kcml2ZXJzL2kyYy9LY29uZmlnOjEyMzpjb25maWcgSTJDX1NMQVZFX0VFUFJPTVxuZHJpdmVycy9pMmMvS2NvbmZpZy0xMjQtXHR0cmlzdGF0ZSBcJiMzNDtJMkMgZWVwcm9tIHNsYXZlIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvaTJjL0tjb25maWctMTI4LVxuZHJpdmVycy9pMmMvS2NvbmZpZzoxMjk6Y29uZmlnIEkyQ19TTEFWRV9URVNUVU5JVFxuZHJpdmVycy9pMmMvS2NvbmZpZy0xMzAtXHR0cmlzdGF0ZSBcJiMzNDtJMkMgdGVzdHVuaXQgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBBZGp1c3RtZW50cyoqCgpPa2F5LCBzbyBJIGNhbiBzZWUgdGhlIGBJMkNfU0xBVkVgIG9wdGlvbiBub3csIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzd2l0Y2ggdGhpbmdzIHVwIGEgYml0IGZyb20gdGhlIHRlc3QgY29uZmlndXJhdGlvbi4gSW5zdGVhZCBvZiB0aGUgY3VycmVudCBzZXR1cCwgd2hpY2ggbGlrZWx5IGluY2x1ZGVzIGBNQ1RQX1RFU1RgIGFuZCBgS1VOSVRgIChhbmQga25vd2luZyBgS1VOSVRgIGNhbiBvZnRlbiBkcmFnIGluIGEgd2hvbGUgbG9hZCBvZiB1bm5lY2Vzc2FyeSB0ZXN0cywgZXZlbiB0aG91Z2ggaXQmIzM5O3MgdXNlZnVsIGZvciBzb21lIGRlYnVnZ2luZyksIEkmIzM5O20gZ29pbmcgdG8gZW5hYmxlIGBNQ1RQX1RSQU5TUE9SVF9JMkNgIGFsb25nIHdpdGggYEkyQ19TTEFWRWAuIFRoYXQgc2hvdWxkIHByb3ZpZGUgYSBtb3JlIGZvY3VzZWQgZW52aXJvbm1lbnQgZm9yIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gYWNoaWV2ZS4gQmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCB0aG91Z2gsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1DVFBfVFJBTlNQT1JUX0kyQ2AganVzdCB0byBiZSBjZXJ0YWluIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGNvbmZsaWN0cyBvciBwcmVyZXF1aXNpdGVzLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggYW5kIGF2b2lkIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21jdHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjk6XHRjb25maWcgTUNUUF9UUkFOU1BPUlRfSTJDXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtNQ1RQIFNNQnVzL0kyQyB0cmFuc3BvcnRcJiMzNDtcbiAgMzE6XHRcdCMgaTJjLW11eCBpcyBvcHRpb25hbCwgYnV0IHdlIG11c3QgYnVpbGQgYXMgYSBtb2R1bGUgaWYgaTJjLW11eCBpcyBhIG1vZHVsZVxuICAzMjpcdFx0ZGVwZW5kcyBvbiBJMkNfTVVYIHx8ICFJMkNfTVVYXG4gIDMzOlx0XHRkZXBlbmRzIG9uIEkyQ1xuICAzNDpcdFx0ZGVwZW5kcyBvbiBJMkNfU0xBVkVcbiAgMzU6XHRcdHNlbGVjdCBNQ1RQX0ZMT1dTXG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBTTUJ1cy9JMkMgdHJhbnNwb3J0LFxuICAzODpcdFx0ICBmcm9tIERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjM3LiBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwOTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gSSYjMzk7bSBzZXR0aW5nIHVwIHRoaXMgc3lzdGVtLCBhbmQgaXQgbG9va3MgbGlrZSBgTUNUUF9UUkFOU1BPUlRfSTJDYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGJvdGggYEkyQ2AgYW5kIGBJMkNfU0xBVkVgLiBNYWtlcyBzZW5zZS4gU28sIGxldCYjMzk7cyBlbmFibGUgdGhvc2UgaW4gYWRkaXRpb24gdG8gdGhlIG1haW4gbW9kdWxlLCBgTUNUUGAsIGFuZCBgTUNUUF9UUkFOU1BPUlRfSTJDYCBpdHNlbGYuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgbGluZWQgdXAgY29ycmVjdGx5LgoKTm93LCBsZXQgbWUgcnVuIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgSSYjMzk7dmUgYWxyZWFkeSBzZXQuIEkmIzM5O3ZlIGdvdCBgQlJJREdFYCwgYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBhbmQgYEJSSURHRV9ORVRGSUxURVJgIGVuYWJsZWQsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4gQWxzbywgYENBTmAsIGBNQ1RQYCwgYEkyQ2AsIGBJMkNfU0xBVkVgLCBgTUNUUF9UUkFOU1BPUlRfSTJDYCwgYElORVRgLCBgTVBUQ1BgLCBgSU5FVF9QU1BgLCBgTkVUX0NMU19BQ1RgLCBgTkVUX1RDX1NLQl9FWFRgLCBhbmQgYFhGUk1fVVNFUmAuIEkgbmVlZCB0byBlbnN1cmUgSSBhbSB1cCB0byBkYXRlIHdpdGggbXkgcmVxdWlyZWQgY2hhbmdlcy4KCkZpbmFsbHksIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYElORVRfUFNQYCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGNoYW5nZXMgb3IgY29uZmxpY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9wc3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFBTUCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbmZpZyBJTkVUX1BTUFxuICAgNjpcdFx0Ym9vbCBcJiMzNDtQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxuICAgOTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gIDEwOlx0XHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjkyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBWYWxpZGF0aW9uIENoZWNrKioKCkFscmlnaHQsIHRoYXQgaW5pdGlhbCBnbGFuY2Ugc2VlbXMgcHJvbWlzaW5nLiBWaXN1YWxseSwgZXZlcnl0aGluZyBhcHBlYXJzIHRvIGJlIGluIG9yZGVyLiBIb3dldmVyLCBhcyB3aXRoIGFueSB0ZWNobmljYWwgYXNzZXNzbWVudCwgSSBuZWVkIHRvIGdvIGJleW9uZCB0aGUgc3VyZmFjZS4gTXkgbWluZCBpbW1lZGlhdGVseSBmbGFncyB0aGUgbmVlZCBmb3IgYSBkZWVwZXIgZGl2ZS4gVGhhdCBpbml0aWFsIGltcHJlc3Npb24gaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gTXkgZm9jdXMgc2hpZnRzIHRvIGEgY3JpdGljYWwgY29tcG9uZW50LCBhbmQgYSBwb3RlbnRpYWwgYXJlYSBmb3IgY29tcGxleGl0eTogYE1QVENQYC4gSXQgd2FycmFudHMgYSByaWdvcm91cyBleGFtaW5hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIG9uIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRcbiAgIDI6XHRjb25maWcgTVBUQ1BcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBjb25uZWN0aW9ucyBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb3ZlciBtdWx0aXBsZVxuICAxMDpcdFx0ICBzdWJmbG93cyBpbiBvcmRlciB0byB1dGlsaXplIG11bHRpcGxlIG5ldHdvcmsgcGF0aHMuIEVhY2ggc3ViZmxvd1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjAwMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBpbml0aWFsIGltcHJlc3Npb246IHRoaW5ncyBhcmUgbG9va2luZyBnb29kLCBnZW5lcmFsbHkuIEJ1dCBhcyB3aXRoIGFueSBjcml0aWNhbCBjb2RlIHJldmlldywgZXNwZWNpYWxseSBpbiB0aGUgbmV0d29ya2luZyBrZXJuZWwgc3BhY2UsICYjMzQ7Z29vZCYjMzQ7IGlzbiYjMzk7dCBnb29kIGVub3VnaC4gSXQmIzM5O3MgdGltZSB0byBkcmlsbCBkb3duLiBUaGUgaW1tZWRpYXRlIGFyZWEgb2YgY29uY2VybiBpcyB0aGUgYE5FVF9UQ19TS0JfRVhUYCBleHRlbnNpb24uIEkgd2FudCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBpbXBsaWNhdGlvbnMgYW5kIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byB0aGlzIGV4dGVuc2lvbiBhcmUgY29ycmVjdC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIG51YW5jZXMsIGNvcm5lciBjYXNlcywgYW5kIHBvdGVudGlhbCBmb3IgdW5hbnRpY2lwYXRlZCBzaWRlLWVmZmVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFydGljdWxhciBzdHJ1Y3R1cmUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIFdlIGtub3cgdGhpcyBhcmVhIGlzIHByb25lIHRvIHN1YnRsZSBidWdzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl04oCZcyBpcm9uY2xhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTU0Olx0Y29uZmlnIE5FVF9UQ19TS0JfRVhUXG4gOTU1Olx0XHRib29sIFwmIzM0O1RDIHJlY2lyY3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuIDk1NjpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDk1NzpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gOTU4Olx0XG4gOTU5Olx0XHRoZWxwXG4gOTYwOlx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgdGMgY2hhaW4gbWlzc2VzIHRvIGNvbnRpbnVlIGluIE92UyBkYXRhcGF0aCBpblxuIDk2MTpcdFx0ICB0aGUgY29ycmVjdCByZWNpcmNfaWQsIGFuZCBoYXJkd2FyZSBjaGFpbiBtaXNzZXMgdG8gY29udGludWUgaW5cbiA5NjI6XHRcdCAgdGhlIGNvcnJlY3QgY2hhaW4gaW4gdGMgc29mdHdhcmUgZGF0YXBhdGguXG4gOTYzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2Mzc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBpbml0aWFsIGltcHJlc3Npb24gaXMgcG9zaXRpdmUuIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgYWxpZ25pbmcuIEJ1dCwgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIEkgYWx3YXlzIGVtcGhhc2l6ZSBkdWUgZGlsaWdlbmNlLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBwcm9jZWVkaW5nLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIHN0YXR1cyBvZiB0aGUgYEJSSURHRV9ORVRGSUxURVJgIHNldHRpbmcuIEl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50LCBhbmQgYSBxdWljayBkb3VibGUtY2hlY2sgaGVyZSBjb3VsZCBzYXZlIGEgbG90IG9mIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4sIGlmIGNvbmZpZ3VyZWQgd3JvbmcsIHRoZSB3aG9sZSBzeXN0ZW0gY29sbGFwc2VzLiBCZXN0IHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBwZXJmZWN0LCBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMxOlx0Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbiAyMzI6XHRcdHRyaXN0YXRlIFwmIzM0O0JyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXCYjMzQ7XG4gMjMzOlx0XHRkZXBlbmRzIG9uIEJSSURHRVxuIDIzNDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVIgXHUwMDI2XHUwMDI2IElORVRcbiAyMzU6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMjM2Olx0XHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAyMzc6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuIDIzODpcdFx0aGVscFxuIDIzOTpcdFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGxldCBhcnB0YWJsZXMgcmVzcC4gaXB0YWJsZXMgc2VlIGJyaWRnZWRcbiAyNDA6XHRcdCAgQVJQIHJlc3AuIElQIHRyYWZmaWMuIElmIHlvdSB3YW50IGEgYnJpZGdpbmcgZmlyZXdhbGwsIHlvdSBwcm9iYWJseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjcxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgVmVyaWZpY2F0aW9uIFN0ZXAqKgoKQWxyaWdodCwgaW5pdGlhbCBpbXByZXNzaW9ucyBhcmUgcG9zaXRpdmU7IHRoZSBwcm9wb3NlZCBzb2x1dGlvbiBhcHBlYXJzIHNvdW5kIG9uIHRoZSBzdXJmYWNlLiBCdXQsIGFzIGFsd2F5cywgd2UgY2FuJiMzOTt0IGJlIGNvbXBsYWNlbnQuIE15IHByaW1hcnkgY29uY2VybiBhdCB0aGlzIHBvaW50IGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuZm9yZXNlZW4gaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIHVzZXJsYW5kIFhGUk0gaW50ZXJmYWNlLiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byBhIGNsb3NlciBleGFtaW5hdGlvbiBvZiB0aGUgYFhGUk1fVVNFUmAgY29tcG9uZW50LiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCYjMzk7cyB3aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIG9yIGltcGxlbWVudGF0aW9uIG51YW5jZXMgYXJlIG1vc3QgbGlrZWx5IHRvIGx1cmsuIFRoaXMgaXMgdGhlIGNydWNpYWwgc3RhZ2U7IGFzc3VtaW5nIGV2ZXJ5dGhpbmcgaXMgcmlnaHQgYXQgdGhpcyBwb2ludCBpcyBleHRyZW1lbHkgZGFuZ2Vyb3VzLiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIzOlx0Y29uZmlnIFhGUk1fVVNFUlxuICAyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuICAyNTpcdFx0c2VsZWN0IFhGUk1fQUxHT1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4gIDI4Olx0XHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFZlcmlmaWNhdGlvbiBQcm90b2NvbCoqCgpSaWdodCwgaW5pdGlhbCBhc3Nlc3NtZW50IHNlZW1zIHBvc2l0aXZlLCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIHByZXNlbnRhdGlvbiBhcmUgc291bmQuIEJ1dCwgeW91IGtub3cgaG93IGl0IGlzLiBXZSBjYW4mIzM5O3QgYmUgY29tcGxhY2VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbm90IHJlbHkgb24gYXNzdW1wdGlvbnMuIFdlIG5lZWQgdG8gcmlnb3JvdXNseSBleGFtaW5lIGFuZCB2YWxpZGF0ZSBldmVyeSBrZXkgYXNzdW1wdGlvbi4gSSYjMzk7bSBtb3ZpbmcgYmV5b25kIGEgY2FzdWFsIHJldmlldywgYW5kIGhlYWRpbmcgc3RyYWlnaHQgdG8gdGhlIGNvcmUuIFNvIEkmIzM5O20gbm93IGRyaWxsaW5nIGRvd24gYW5kIGNyb3NzLXJlZmVyZW5jaW5nIGFnYWluc3QgdGhlIGVzdGFibGlzaGVkIHByb3RvY29scy4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBDQU5gIChDcml0aWNhbCBBc3N1bXB0aW9uIE5ldHdvcmspIOKAkyB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIHN0ZXAuIE1ha2Ugc3VyZSB3ZSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nLiBJJiMzOTttIGxvb2tpbmcgZm9yIGhpZGRlbiBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbCBwb2ludHMgb2YgZmFpbHVyZS4uLiBiYXNpY2FsbHksIGV2ZXJ5dGhpbmcgdGhhdCBjb3VsZCBiZSBhICYjMzk7Z290Y2hhJiMzOTsgbGF0ZXIgb24uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICA2Olx0bWVudWNvbmZpZyBDQU5cbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0NBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBDb250cm9sbGVyIEFyZWEgTmV0d29yayAoQ0FOKSBpcyBhIHNsb3cgKHVwIHRvIDFNYml0L3MpIHNlcmlhbFxuICAxMTpcdFx0ICBjb21tdW5pY2F0aW9ucyBwcm90b2NvbC4gRGV2ZWxvcG1lbnQgb2YgdGhlIENBTiBidXMgc3RhcnRlZCBpblxuICAxMjpcdFx0ICAxOTgzIGF0IFJvYmVydCBCb3NjaCBHbWJILCBhbmQgdGhlIHByb3RvY29sIHdhcyBvZmZpY2lhbGx5XG4gIDEzOlx0XHQgIHJlbGVhc2VkIGluIDE5ODYuIFRoZSBDQU4gYnVzIHdhcyBvcmlnaW5hbGx5IG1haW5seSBmb3IgYXV0b21vdGl2ZSxcbiAgMTQ6XHRcdCAgYnV0IGlzIG5vdyB3aWRlbHkgdXNlZCBpbiBtYXJpbmUgKE5NRUEyMDAwKSwgaW5kdXN0cmlhbCwgYW5kIG1lZGljYWxcbiAgMTU6XHRcdCAgYXBwbGljYXRpb25zLiBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBDQU4gbmV0d29yayBwcm90b2NvbCBmYW1pbHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0NTQKCQkJCQkJCW91dHB1dDogMjU3CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqCgpPa2F5LCB0aGlzIGxvb2tzIHByb21pc2luZy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBjaGFuZ2VzIHRvIGhvdyBgc2tiX2V4dGAg4oCTIHRob3NlIGV4dGVuc2lvbnMgdG8gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUg4oCTIGFyZSBoYW5kbGVkLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIHRvIHRoZSBmb2xsb3dpbmcgY3J1Y2lhbCBzeW1ib2xzLCB0aGUgb25lcyBJIG5lZWQgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmc6IGBza2JfZXh0X2FkZGAsIGBfX3NrYl9leHRfc2V0YCwgYW5kIGBfX3NrYl9leHRfYWxsb2NgLgoKVGhlIGdpc3Qgb2YgaXQgaXMgdGhpczogdGhleSYjMzk7cmUgZGl0Y2hpbmcgdGhlIG9sZCBkeW5hbWljIG9mZnNldHMgaW4gZmF2b3Igb2YgZml4ZWQsIGNvbXBpbGUtdGltZSBvZmZzZXRzIGFuZCBhIGJpdG1hcC1iYXNlZCBzeXN0ZW0gdG8gdHJhY2sgd2hpY2ggZXh0ZW5zaW9ucyBhcmUgcHJlc2VudC4gVGhpcyBpcyBhIGJpZyBkZWFsISBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgbWVtb3J5IGlzIG1hbmFnZWQgYW5kIGhvdyB0aGVzZSBleHRlbnNpb25zIOKAkyB0aGluZ3MgbGlrZSBJUHNlYywgQnJpZGdlIE5ldGZpbHRlciwgVEMsIE1QVENQLCBNQ1RQLCBQU1AsIGFuZCBDQU4g4oCTIGhvb2sgaW50byBzb2NrZXQgYnVmZmVycy4gQW55IG1vZGlmaWNhdGlvbiBpbiB0aGlzIGFyZWEgY2FuIGhhdmUgd2lkZXNwcmVhZCBlZmZlY3RzLiBHaXZlbiB0aGUgcmVhY2hhYmlsaXR5IGFuZCB0aGUgZnVuY3Rpb25hbCBhbHRlcmF0aW9ucyB0byBib3RoIGV4ZWN1dGlvbiBmbG93IGFuZCBtZW1vcnkgbGF5b3V0LCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGRpc2NvdmVyaW5nIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcyBvciBvdGhlciBoYXJkLXRvLWZpbmQgYnVncy4KCkkmIzM5O20gZ29pbmcgdG8gc2V0IHVwIGEgdGVzdGluZyBzY2VuYXJpbyB0byBkZXRlcm1pbmUgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7STJDJiMzNDssCiAgICAmIzM0O0kyQ19TTEFWRSYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9JMkMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtJTkVUX1BTUCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfVENfU0tCX0VYVCYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtfX3NrYl9leHRfc2V0JiMzNDssCiAgICAmIzM0O19fc2tiX2V4dF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykuIEl0IHJlcGxhY2VzIGR5bmFtaWMgb2Zmc2V0cyB3aXRoIGNvbXBpbGUtdGltZSBmaXhlZCBvZmZzZXRzIGFuZCB1c2VzIGEgYml0bWFwIHRvIHRyYWNrIHByZXNlbnQgZXh0ZW5zaW9ucy4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBleHRlbnNpb25zIGxpa2UgSVBzZWMsIEJyaWRnZSBOZXRmaWx0ZXIsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOIGFyZSBhdHRhY2hlZCB0byBzb2NrZXQgYnVmZmVycy4gSXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgbWVtb3J5IGxheW91dCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O01DVFAmIzM0OywKICAgICYjMzQ7STJDJiMzNDssCiAgICAmIzM0O0kyQ19TTEFWRSYjMzQ7LAogICAgJiMzNDtNQ1RQX1RSQU5TUE9SVF9JMkMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtJTkVUX1BTUCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7LAogICAgJiMzNDtORVRfVENfU0tCX0VYVCYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfZXh0X2FkZCYjMzQ7LAogICAgJiMzNDtfX3NrYl9leHRfc2V0JiMzNDssCiAgICAmIzM0O19fc2tiX2V4dF9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykuIEl0IHJlcGxhY2VzIGR5bmFtaWMgb2Zmc2V0cyB3aXRoIGNvbXBpbGUtdGltZSBmaXhlZCBvZmZzZXRzIGFuZCB1c2VzIGEgYml0bWFwIHRvIHRyYWNrIHByZXNlbnQgZXh0ZW5zaW9ucy4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBleHRlbnNpb25zIGxpa2UgSVBzZWMsIEJyaWRnZSBOZXRmaWx0ZXIsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOIGFyZSBhdHRhY2hlZCB0byBzb2NrZXQgYnVmZmVycy4gSXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgbWVtb3J5IGxheW91dCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBhbGxvY2F0aW9uIGFuZCBsYXlvdXQgb2YgYHNrYl9leHRgIChza19idWZmIGV4dGVuc2lvbnMpIGZyb20gYSB2YXJpYWJsZS1zaXplZCwgZHluYW1pY2FsbHkgYXBwZW5kZWQgbGF5b3V0IHRvIGEgZml4ZWQtc2l6ZWQgbGF5b3V0IChgc3RydWN0IHNrYl9leHRfbGF5b3V0YCkgd2l0aCBzdGF0aWMgb2Zmc2V0cyBmb3IgZWFjaCBleHRlbnNpb24gdHlwZS5cblxuMS4gVGhlIG5ldyBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGEgc2xhYiBjYWNoZSwgYW5kIGxpa2UgdGhlIG9sZCBjb2RlLCBvbmx5IHRoZSBoZWFkZXIgKGByZWZjbnRgIGFuZCBgcHJlc2VudF9leHRlbnNpb25zYCkgaXMgaW5pdGlhbGl6ZWQuIFRoZSBleHRlbnNpb24gZGF0YSBzbG90cyByZW1haW4gdW5pbml0aWFsaXplZCB1bnRpbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci5cbjIuIFRoZSB1bmluaXRpYWxpemVkIHNsb3RzIGFyZSBzdHJpY3RseSBndWFyZGVkIGJ5IHRoZSBgcHJlc2VudF9leHRlbnNpb25zYCBiaXRtYXAuIFRoZXkgY2Fubm90IGJlIGFjY2Vzc2VkIHVubGVzcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0LCB3aGljaCBvbmx5IGhhcHBlbnMgd2hlbiBhbiBleHRlbnNpb24gaXMgcHJvcGVybHkgYWRkZWQgYW5kIGluaXRpYWxpemVkLlxuMy4gV2hlbiBjb3B5aW5nIGFuIGV4dGVuc2lvbiAoYHNrYl9leHRfbWF5YmVfY293YCksIHRoZSBjb2RlIGNvcGllcyB0aGUgaGVhZGVyIGFuZCBvbmx5IHRoZSBwcmVzZW50IGV4dGVuc2lvbnMsIGxlYXZpbmcgdGhlIHVudXNlZCBzbG90cyB1bmluaXRpYWxpemVkLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgYmVoYXZpb3IgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG40LiBgc2tiX2V4dGAgYW5kIGl0cyBleHRlbnNpb25zIGFyZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyB1c2VkIGZvciBtZXRhZGF0YSAoZS5nLiwgSVBzZWMsIFRDLCBicmlkZ2UgbmV0ZmlsdGVyKSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIGluY29ycmVjdCBvZmZzZXQgY2FsY3VsYXRpb25zIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ4YzZjNDAzZjg2ZjFhYmEwNmMzYjQ5MTJiMzA5YWMzNWYzM2NlZWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxNjo1NzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IDk1MTg0MTgzMTgwZjYuLjVhNTE0M2U0N2IzMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtNTAxMSw0NSAmIzQzOzUwMTEsODEgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfbmZjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBsb25nIG5mY3QpCiB9CiAKICNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlMKLWVudW0gc2tiX2V4dF9pZCB7CiYjNDM7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUikKLQlTS0JfRVhUX0JSSURHRV9ORiwKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9CUklER0VfTkYJWChTS0JfRVhUX0JSSURHRV9ORiwgc3RydWN0IG5mX2JyaWRnZV9pbmZvKQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQlJJREdFX05GCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfWEZSTQotCVNLQl9FWFRfU0VDX1BBVEgsCiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX1hGUk0pCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfU0VDX1BBVEgJWChTS0JfRVhUX1NFQ19QQVRILCBzdHJ1Y3Qgc2VjX3BhdGgpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9TRUNfUEFUSAogI2VuZGlmCiYjNDM7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpCi0JVENfU0tCX0VYVCwKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9UQwkJWChUQ19TS0JfRVhULCBzdHJ1Y3QgdGNfc2tiX2V4dCkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1RDCiAjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUCkKLQlTS0JfRVhUX01QVENQLAomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX01QVENQCQlYKFNLQl9FWFRfTVBUQ1AsIHN0cnVjdCBtcHRjcF9leHQpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9NUFRDUAogI2VuZGlmCiYjNDM7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUykKLQlTS0JfRVhUX01DVFAsCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfTUNUUAkJWChTS0JfRVhUX01DVFAsIHN0cnVjdCBtY3RwX2Zsb3cpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9NQ1RQCiAjZW5kaWYKJiM0MzsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUCkKLQlTS0JfRVhUX1BTUCwKJiM0MzsjZGVmaW5lIFNLQl9FWFRfWF9QU1AJCVgoU0tCX0VYVF9QU1AsIHN0cnVjdCBwc3Bfc2tiX2V4dCkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX1BTUAogI2VuZGlmCiYjNDM7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQ0FOKQotCVNLQl9FWFRfQ0FOLAomIzQzOyNkZWZpbmUgU0tCX0VYVF9YX0NBTgkJWChTS0JfRVhUX0NBTiwgc3RydWN0IGNhbl9za2JfZXh0KQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBTS0JfRVhUX1hfQ0FOCiAjZW5kaWYKLQlTS0JfRVhUX05VTSwgLyogbXVzdCBiZSBsYXN0ICovCiYjNDM7CiYjNDM7I2RlZmluZSBTS0JfRVhUX0ZPUkVBQ0goWCkJXAomIzQzOwlTS0JfRVhUX1hfQlJJREdFX05GCVwKJiM0MzsJU0tCX0VYVF9YX1NFQ19QQVRICVwKJiM0MzsJU0tCX0VYVF9YX1RDCQlcCiYjNDM7CVNLQl9FWFRfWF9NUFRDUAkJXAomIzQzOwlTS0JfRVhUX1hfTUNUUAkJXAomIzQzOwlTS0JfRVhUX1hfUFNQCQlcCiYjNDM7CVNLQl9FWFRfWF9DQU4KJiM0MzsKJiM0MztlbnVtIHNrYl9leHRfaWQgewomIzQzOyNkZWZpbmUgWChpZCwgdHlwZSkJaWQsCiYjNDM7CVNLQl9FWFRfRk9SRUFDSChYKQomIzQzOyN1bmRlZiBYCiYjNDM7CVNLQl9FWFRfTlVNLAogfTsKIAomIzQzO2V4dGVybiBjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV07CiYjNDM7CiAvKioKICAqCXN0cnVjdCBza2JfZXh0IC0gc2tfYnVmZiBleHRlbnNpb25zCiAgKglAcmVmY250OiAxIG9uIGFsbG9jYXRpb24sIGRlYWxsb2NhdGVkIG9uIDAKLSAqCUBvZmZzZXQ6IG9mZnNldCB0byBhZGQgdG8gQGRhdGEgdG8gb2J0YWluIGV4dGVuc2lvbiBhZGRyZXNzCi0gKglAY2h1bmtzOiBzaXplIGN1cnJlbnRseSBhbGxvY2F0ZWQsIHN0b3JlZCBpbiBTS0JfRVhUX0FMSUdOX1NISUZUIHVuaXRzCiYjNDM7ICoJQHByZXNlbnRfZXh0ZW5zaW9uczogYml0bWFwIG9mIGV4dGVuc2lvbnMgc3RvcmVkIGluIEBkYXRhCiAgKglAZGF0YTogc3RhcnQgb2YgZXh0ZW5zaW9uIGRhdGEsIHZhcmlhYmxlIHNpemVkCiAgKgotICoJTm90ZTogb2Zmc2V0cy9sZW5ndGhzIGFyZSBzdG9yZWQgaW4gY2h1bmtzIG9mIDggYnl0ZXMsIHRoaXMgYWxsb3dzCi0gKgl0byB1c2UgJiMzOTt1OCYjMzk7IHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aCBvZiBleHRlbnNpb24gZGF0YS4KJiM0MzsgKglFYWNoIGV4dGVuc2lvbiBpZCBvY2N1cGllcyBhIGZpeGVkIHNsb3Qgd2l0aGluIEBkYXRhLCBsb2NhdGVkIGF0CiYjNDM7ICoJc2tiX2V4dF9vZmZzZXRbaWRdIGNodW5rcyBvZiA4IGJ5dGVzLiBTdG9yaW5nIG9mZnNldHMvbGVuZ3RocwomIzQzOyAqCWluIDgtYnl0ZSBjaHVua3MgYWxsb3dzICYjMzk7dTgmIzM5OyB0eXBlcyB3aGlsZSBhbGxvd2luZyB1cCB0byAya2Igd29ydGgKJiM0MzsgKglvZiBleHRlbnNpb24gZGF0YS4KICAqLwogc3RydWN0IHNrYl9leHQgewogCXJlZmNvdW50X3QgcmVmY250OwotCXU4IG9mZnNldFtTS0JfRVhUX05VTV07IC8qIGluIGNodW5rcyBvZiA4IGJ5dGVzICovCi0JdTggY2h1bmtzOwkJLyogc2FtZSAqLwomIzQzOwl1OCBwcmVzZW50X2V4dGVuc2lvbnM7CiAJY2hhciBkYXRhW10gX19hbGlnbmVkKDgpOwogfTsKIApAQCAtNTA4Nyw3ICYjNDM7NTEyMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYykKIAogc3RhdGljIGlubGluZSBib29sIF9fc2tiX2V4dF9leGlzdChjb25zdCBzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaSkKIHsKLQlyZXR1cm4gISFleHQtJmd0O29mZnNldFtpXTsKJiM0MzsJcmV0dXJuIGV4dC0mZ3Q7cHJlc2VudF9leHRlbnNpb25zICZhbXA7ICgxICZsdDsmbHQ7IGkpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2V4dF9leGlzdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpCkBAIC01MTA2LDcgJiM0Mzs1MTQyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpza2JfZXh0X2ZpbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKQogCWlmIChza2JfZXh0X2V4aXN0KHNrYiwgaWQpKSB7CiAJCXN0cnVjdCBza2JfZXh0ICpleHQgPSBza2ItJmd0O2V4dGVuc2lvbnM7CiAKLQkJcmV0dXJuICh2b2lkICopZXh0ICYjNDM7IChleHQtJmd0O29mZnNldFtpZF0gJmx0OyZsdDsgMyk7CiYjNDM7CQlyZXR1cm4gKHZvaWQgKilleHQgJiM0MzsgKHNrYl9leHRfb2Zmc2V0W2lkXSAmbHQ7Jmx0OyAzKTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYzgyYTE0NzJhNWVhOC4uOGU1ZGI1Nzk3MjVkMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTUxMzQsNDcgJiM0Mzs1MTM0LDMyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50KTsKICNkZWZpbmUgU0tCX0VYVF9DSFVOS1NJWkVPRih4KQkoQUxJR04oKHNpemVvZih4KSksIFNLQl9FWFRfQUxJR05fVkFMVUUpIC8gU0tCX0VYVF9BTElHTl9WQUxVRSkKIAogc3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHsKLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKQotCVtTS0JfRVhUX0JSSURHRV9ORl0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBuZl9icmlkZ2VfaW5mbyksCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWEZSTQotCVtTS0JfRVhUX1NFQ19QQVRIXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHNlY19wYXRoKSwKLSNlbmRpZgotI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKQotCVtUQ19TS0JfRVhUXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHRjX3NrYl9leHQpLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApCi0JW1NLQl9FWFRfTVBUQ1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbXB0Y3BfZXh0KSwKLSNlbmRpZgotI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpCi0JW1NLQl9FWFRfTUNUUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtY3RwX2Zsb3cpLAotI2VuZGlmCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApCi0JW1NLQl9FWFRfUFNQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHBzcF9za2JfZXh0KSwKLSNlbmRpZgotI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTikKLQlbU0tCX0VYVF9DQU5dID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgY2FuX3NrYl9leHQpLAotI2VuZGlmCiYjNDM7I2RlZmluZSBYKGlkLCB0eXBlKQlbaWRdID0gU0tCX0VYVF9DSFVOS1NJWkVPRih0eXBlKSwKJiM0MzsJU0tCX0VYVF9GT1JFQUNIKFgpCiYjNDM7I3VuZGVmIFgKIH07CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19ub19wcm9maWxlIHVuc2lnbmVkIGludCBza2JfZXh0X3RvdGFsX2xlbmd0aCh2b2lkKQotewotCXVuc2lnbmVkIGludCBsID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3Qgc2tiX2V4dCk7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShza2JfZXh0X3R5cGVfbGVuKTsgaSYjNDM7JiM0MzspCi0JCWwgJiM0Mzs9IHNrYl9leHRfdHlwZV9sZW5baV07CiYjNDM7c3RydWN0IHNrYl9leHRfbGF5b3V0IHsKJiM0MzsJdTgJaGVhZGVyW3NpemVvZihzdHJ1Y3Qgc2tiX2V4dCldIF9fYWxpZ25lZChTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKJiM0MzsjZGVmaW5lIFgoaWQsIHR5cGUpCXR5cGUgZl8jI2lkIF9fYWxpZ25lZChTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKJiM0MzsJU0tCX0VYVF9GT1JFQUNIKFgpCiYjNDM7I3VuZGVmIFgKJiM0Mzt9OwogCi0JcmV0dXJuIGw7Ci19CiYjNDM7Y29uc3QgdTggc2tiX2V4dF9vZmZzZXRbU0tCX0VYVF9OVU1dID0gewomIzQzOyNkZWZpbmUgWChpZCwgdHlwZSkJW2lkXSA9IG9mZnNldG9mKHN0cnVjdCBza2JfZXh0X2xheW91dCwgZl8jI2lkKSAvIFNLQl9FWFRfQUxJR05fVkFMVUUsCiYjNDM7CVNLQl9FWFRfRk9SRUFDSChYKQomIzQzOyN1bmRlZiBYCiYjNDM7fTsKJiM0MztFWFBPUlRfU1lNQk9MKHNrYl9leHRfb2Zmc2V0KTsKIAogc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IF9fbm9fcHJvZmlsZSBza2JfZXh0ZW5zaW9uc19pbml0KHZvaWQpCiB7CiAJQlVJTERfQlVHX09OKFNLQl9FWFRfTlVNICZndDsgOCk7Ci0JQlVJTERfQlVHX09OKHNrYl9leHRfdG90YWxfbGVuZ3RoKCkgJmd0OyAyNTUpOwomIzQzOwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBza2JfZXh0X2xheW91dCkgJmd0OyAyNTUgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKIAogCXNrYnVmZl9leHRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgmIzM0O3NrYnVmZl9leHRfY2FjaGUmIzM0OywKLQkJCQkJICAgICBTS0JfRVhUX0FMSUdOX1ZBTFVFICogc2tiX2V4dF90b3RhbF9sZW5ndGgoKSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBza2JfZXh0X2xheW91dCksCiAJCQkJCSAgICAgMCwKIAkJCQkJICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQywKIAkJCQkJICAgICBOVUxMKTsKQEAgLTcwODMsNyAmIzQzOzcwNjgsNyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9jb25kZW5zZSk7CiAjaWZkZWYgQ09ORklHX1NLQl9FWFRFTlNJT05TCiBzdGF0aWMgdm9pZCAqc2tiX2V4dF9nZXRfcHRyKHN0cnVjdCBza2JfZXh0ICpleHQsIGVudW0gc2tiX2V4dF9pZCBpZCkKIHsKLQlyZXR1cm4gKHZvaWQgKilleHQgJiM0MzsgKGV4dC0mZ3Q7b2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpOwomIzQzOwlyZXR1cm4gKHZvaWQgKilleHQgJiM0MzsgKHNrYl9leHRfb2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpOwogfQogCiAvKioKQEAgLTcxMDAsNyAmIzQzOzcwODUsNyBAQCBzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKQogCXN0cnVjdCBza2JfZXh0ICpuZXcgPSBrbWVtX2NhY2hlX2FsbG9jKHNrYnVmZl9leHRfY2FjaGUsIGZsYWdzKTsKIAogCWlmIChuZXcpIHsKLQkJbWVtc2V0KG5ldy0mZ3Q7b2Zmc2V0LCAwLCBzaXplb2YobmV3LSZndDtvZmZzZXQpKTsKJiM0MzsJCW5ldy0mZ3Q7cHJlc2VudF9leHRlbnNpb25zID0gMDsKIAkJcmVmY291bnRfc2V0KCZhbXA7bmV3LSZndDtyZWZjbnQsIDEpOwogCX0KIApAQCAtNzExMSw2ICYjNDM7NzA5Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCwKIAkJCQkJIHVuc2lnbmVkIGludCBvbGRfYWN0aXZlKQogewogCXN0cnVjdCBza2JfZXh0ICpuZXc7CiYjNDM7CWludCBpOwogCiAJaWYgKHJlZmNvdW50X3JlYWQoJmFtcDtvbGQtJmd0O3JlZmNudCkgPT0gMSkKIAkJcmV0dXJuIG9sZDsKQEAgLTcxMTksNyAmIzQzOzcxMDUsMTIgQEAgc3RhdGljIHN0cnVjdCBza2JfZXh0ICpza2JfZXh0X21heWJlX2NvdyhzdHJ1Y3Qgc2tiX2V4dCAqb2xkLAogCWlmICghbmV3KQogCQlyZXR1cm4gTlVMTDsKIAotCW1lbWNweShuZXcsIG9sZCwgb2xkLSZndDtjaHVua3MgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTsKJiM0MzsJbWVtY3B5KG5ldywgb2xkLCBTS0JfRVhUX0NIVU5LU0laRU9GKCpvbGQpICogU0tCX0VYVF9BTElHTl9WQUxVRSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBTS0JfRVhUX05VTTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChvbGQtJmd0O3ByZXNlbnRfZXh0ZW5zaW9ucyAmYW1wOyAoMSAmbHQ7Jmx0OyBpKSkKJiM0MzsJCQltZW1jcHkoc2tiX2V4dF9nZXRfcHRyKG5ldywgaSksIHNrYl9leHRfZ2V0X3B0cihvbGQsIGkpLAomIzQzOwkJCSAgICAgICBza2JfZXh0X3R5cGVfbGVuW2ldICogU0tCX0VYVF9BTElHTl9WQUxVRSk7CiYjNDM7CX0KIAlyZWZjb3VudF9zZXQoJmFtcDtuZXctJmd0O3JlZmNudCwgMSk7CiAKICNpZmRlZiBDT05GSUdfWEZSTQpAQCAtNzE1NiwxMiAmIzQzOzcxNDcsOCBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsCiB2b2lkICpfX3NrYl9leHRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCwKIAkJICAgIHN0cnVjdCBza2JfZXh0ICpleHQpCiB7Ci0JdW5zaWduZWQgaW50IG5ld2xlbiwgbmV3b2ZmID0gU0tCX0VYVF9DSFVOS1NJWkVPRigqZXh0KTsKLQogCXNrYl9leHRfcHV0KHNrYik7Ci0JbmV3bGVuID0gbmV3b2ZmICYjNDM7IHNrYl9leHRfdHlwZV9sZW5baWRdOwotCWV4dC0mZ3Q7Y2h1bmtzID0gbmV3bGVuOwotCWV4dC0mZ3Q7b2Zmc2V0W2lkXSA9IG5ld29mZjsKJiM0MzsJZXh0LSZndDtwcmVzZW50X2V4dGVuc2lvbnMgPSAxICZsdDsmbHQ7IGlkOwogCXNrYi0mZ3Q7ZXh0ZW5zaW9ucyA9IGV4dDsKIAlza2ItJmd0O2FjdGl2ZV9leHRlbnNpb25zID0gMSAmbHQ7Jmx0OyBpZDsKIAlyZXR1cm4gc2tiX2V4dF9nZXRfcHRyKGV4dCwgaWQpOwpAQCAtNzE4NCwzMSAmIzQzOzcxNzEsMjMgQEAgRVhQT1JUX1NZTUJPTF9OU19HUEwoX19za2JfZXh0X3NldCwgJiMzNDtORVRERVZfSU5URVJOQUwmIzM0Oyk7CiAgKi8KIHZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCkKIHsKLQlzdHJ1Y3Qgc2tiX2V4dCAqbmV3LCAqb2xkID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgbmV3bGVuLCBuZXdvZmY7CiYjNDM7CXN0cnVjdCBza2JfZXh0ICpuZXc7CiAKIAlpZiAoc2tiLSZndDthY3RpdmVfZXh0ZW5zaW9ucykgewotCQlvbGQgPSBza2ItJmd0O2V4dGVuc2lvbnM7Ci0KLQkJbmV3ID0gc2tiX2V4dF9tYXliZV9jb3cob2xkLCBza2ItJmd0O2FjdGl2ZV9leHRlbnNpb25zKTsKJiM0MzsJCW5ldyA9IHNrYl9leHRfbWF5YmVfY293KHNrYi0mZ3Q7ZXh0ZW5zaW9ucywKJiM0MzsJCQkJCXNrYi0mZ3Q7YWN0aXZlX2V4dGVuc2lvbnMpOwogCQlpZiAoIW5ldykKIAkJCXJldHVybiBOVUxMOwogCiAJCWlmIChfX3NrYl9leHRfZXhpc3QobmV3LCBpZCkpCiAJCQlnb3RvIHNldF9hY3RpdmU7Ci0KLQkJbmV3b2ZmID0gbmV3LSZndDtjaHVua3M7CiAJfSBlbHNlIHsKLQkJbmV3b2ZmID0gU0tCX0VYVF9DSFVOS1NJWkVPRigqbmV3KTsKLQogCQluZXcgPSBfX3NrYl9leHRfYWxsb2MoR0ZQX0FUT01JQyk7CiAJCWlmICghbmV3KQogCQkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbmV3bGVuID0gbmV3b2ZmICYjNDM7IHNrYl9leHRfdHlwZV9sZW5baWRdOwotCW5ldy0mZ3Q7Y2h1bmtzID0gbmV3bGVuOwotCW5ldy0mZ3Q7b2Zmc2V0W2lkXSA9IG5ld29mZjsKJiM0MzsJbmV3LSZndDtwcmVzZW50X2V4dGVuc2lvbnMgfD0gMSAmbHQ7Jmx0OyBpZDsKIHNldF9hY3RpdmU6CiAJc2tiLSZndDtzbG93X2dybyA9IDE7CiAJc2tiLSZndDtleHRlbnNpb25zID0gbmV3Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ1MAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE5NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgaW4gdGhlIGBza2JfZXh0YCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYHNrYl9leHRgIGlzIG1hbmFnZWQuICBJbnN0ZWFkIG9mIHZhcmlhYmxlLXNpemVkIGV4dGVuc2lvbnMgd2l0aCBvZmZzZXRzIHRyYWNrZWQgaW4gYGV4dC0mZ3Q7b2Zmc2V0YCwgd2UmIzM5O3JlIG1vdmluZyB0byBhIGZpeGVkIGBzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXRgIHdpdGggcHJlLWRlZmluZWQgb2Zmc2V0cyBhbmQgYSBiaXRtYXAgKGBwcmVzZW50X2V4dGVuc2lvbnNgKSBmb3IgdHJhY2tpbmcgd2hpY2ggZXh0ZW5zaW9ucyBhcmUgYWN0dWFsbHkgcHJlc2VudC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYSBjbGFzc2ljIGJ1ZyBjbGFzcy4KClRoZSBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGBza2J1ZmZfZXh0X2NhY2hlYCwgYSBzbGFiIGNhY2hlLiBBbGxvY2F0aW9uIHdpdGggYGttZW1fY2FjaGVfYWxsb2NgICpkb2VzbiYjMzk7dCogemVybyB0aGUgZW50aXJlIHN0cnVjdDsgaXQgb25seSBpbml0aWFsaXplcyBgcHJlc2VudF9leHRlbnNpb25zYCB0byB6ZXJvIGFuZCB0aGUgcmVmY291bnQuICBTbywgdGhlIGV4dGVuc2lvbiBzbG90cyB0aGVtc2VsdmVzIGFyZSB1bmluaXRpYWxpemVkIGF0IGFsbG9jYXRpb24uIFRoaXMgaXMgd2hlcmUgSSBzdGFydCBkaWdnaW5nIGZvciBwb3RlbnRpYWwgcHJvYmxlbXMuCgpXaGVuIGFuIGV4dGVuc2lvbiBpcyBhZGRlZCAodXNpbmcgYHNrYl9leHRfYWRkYCBvciBgX19za2JfZXh0X3NldGApLCB0aGUgY29kZSBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiBgcHJlc2VudF9leHRlbnNpb25zYCBhbmQgdGhlICpjYWxsZXIqIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIGV4dGVuc2lvbiBkYXRhIHdpdGhpbiBpdHMgZml4ZWQgc2xvdC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQsIGJ1dC4uLiB3aGF0IGlmIHRoZSBjYWxsZXIgZG9lc24mIzM5O3QgaW5pdGlhbGl6ZSAqYWxsKiB0aGUgZmllbGRzIG9mIHRoZSBleHRlbnNpb24sIG9yIHRoZXJlJiMzOTtzIHBhZGRpbmcgd2l0aGluIHRoZSBzdHJ1Y3Q/IEl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYSBuZXcgcHJvYmxlbS4KClRoZSBrZXkgcG9pbnQgaGVyZSBpcyBgc2tiX2V4dF9tYXliZV9jb3dgIChjb3B5LW9uLXdyaXRlKS4gVGhlIG9sZCBjb2RlIGNvcGllZCB0aGUgd2hvbGUgY2h1bmssIHdoaWNoIGluY2x1ZGVkIGJvdGggaW5pdGlhbGl6ZWQgZXh0ZW5zaW9ucyBhbmQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgbmV3IGNvZGUgZG9lcyB0aGlzOiBGaXJzdCwgaXQgY29waWVzIHRoZSBoZWFkZXI6IGBtZW1jcHkobmV3LCBvbGQsIFNLQl9FWFRfQ0hVTktTSVpFT0YoKm9sZCkgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtgIFRoZW4sIGl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlICpwcmVzZW50KiBleHRlbnNpb25zIGFuZCBjb3BpZXMgb25seSB0aGUgZGF0YTogYG1lbWNweShza2JfZXh0X2dldF9wdHIobmV3LCBpKSwgc2tiX2V4dF9nZXRfcHRyKG9sZCwgaSksIHNrYl9leHRfdHlwZV9sZW5baV0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtgCgpOb3csIHRoZSBwb3RlbnRpYWwgaXNzdWUgYmVjb21lcyBjbGVhcjogdGhlIG5ldyBjb2RlIG9ubHkgY29waWVzIHRoZSBkYXRhIG9mIGV4dGVuc2lvbnMgdGhhdCBhcmUgKnByZXNlbnQqLiBUaGUgdW5pbml0aWFsaXplZCBzbG90cyBmb3IgZXh0ZW5zaW9ucyAqbm90KiBwcmVzZW50IGluIHRoZSBvbGQgYHNrYl9leHRgIHJlbWFpbiB1bmluaXRpYWxpemVkIGluIHRoZSBuZXcgb25lLiBXaWxsIHRoYXQgY2F1c2UgcHJvYmxlbXMgZG93biB0aGUgbGluZT8gSWYgYW4gZXh0ZW5zaW9uIGlzIGFkZGVkIGxhdGVyLCB0aGUgY2FsbGVyIHdpbGwgaW5pdGlhbGl6ZSBpdC4gSWYgYW4gZXh0ZW5zaW9uIGlzIG5ldmVyIHVzZWQsIGl0IHJlbWFpbnMgdW50b3VjaGVkLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV2ZXIgYWNjZXNzZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaz8KCkkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYHNrYl9leHRgIGlzbiYjMzk7dCBsZWFrZWQgdG8gdXNlciBzcGFjZSBiZWNhdXNlIHRoYXQgd291bGQgYmUgYSBzZXJpb3VzIGluZm8gbGVhay4gTHVja2lseSwgYHNrYl9leHRgIGlzIGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUgYXR0YWNoZWQgdG8gYHNrX2J1ZmZgIGFuZCB1c2VkIGJ5IHRoaW5ncyBsaWtlIElQc2VjLCBicmlkZ2UgbmV0ZmlsdGVyLCBUQywgTVBUQ1AsIGV0Yy4sIGFuZCBub3Qgc2VudCB0byB1c2Vyc3BhY2UuCgpIb3dldmVyLCBjb25zaWRlciB0aGlzIHNjZW5hcmlvOiAgaWYgYG9sZGAgaGFkIGFuIGV4dGVuc2lvbiBhbmQsIGJlY2F1c2Ugb2YgcGFkZGluZywgaXQgaGFkICp1bmluaXRpYWxpemVkKiBtZW1vcnksIHRoZSBgbWVtY3B5YCB3b3VsZCBub3cgY29weSB0aGF0IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byBgbmV3YC4gIFRoaXMgaXNuJiMzOTt0IGEgbmV3IGlzc3VlLCBLTVNBTiB3b3VsZCBiZSB0cmFja2luZyB0aGUgZGF0YSBhbmQgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB3b3VsZG4mIzM5O3QgYmUgYSBwcm9ibGVtIGJ5IGl0c2VsZi4gQnV0IHdoYXQgYWJvdXQgdGhlIGhlYWRlcj8KClRoZSBoZWFkZXIgb2YgdGhlIGBza2JfZXh0YCAoc3RydWN0IGBza2JfZXh0YCkgaXMgY29waWVkIHdpdGggYG1lbWNweShuZXcsIG9sZCwgU0tCX0VYVF9DSFVOS1NJWkVPRigqb2xkKSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO2AuIE5vdywgYFNLQl9FWFRfQ0hVTktTSVpFT0YoKm9sZCkgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFYCBpcyA4IGJ5dGVzLCBmcm9tIHN0cnVjdCBgc2tiX2V4dGAgKGNvbnRhaW5pbmcgcmVmY291bnQgYW5kIHByZXNlbnRfZXh0ZW5zaW9ucykuIFRoaXMgaW5jbHVkZXMgMyBieXRlcyBvZiB1bmluaXRpYWxpemVkIHBhZGRpbmcuIENvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgd2l0aGluIHRoZSBrZXJuZWwgaXMgZ2VuZXJhbGx5IG9rYXksIHVubGVzcyBpdCBpcyB1c2VkIGluIGEgYnJhbmNoLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgYnV0IG9ubHkgY29tcGxhaW5zIGlmIGFuIGFjY2VzcyBpcyBtYWRlLiBTbyB0aGlzIHByb2JhYmx5IGlzbiYjMzk7dCBhIHByb2JsZW0uCgpOb3csIGNoZWNraW5nIHRoZSBvbGQgY29kZTogYG1lbXNldChuZXctJmd0O29mZnNldCwgMCwgc2l6ZW9mKG5ldy0mZ3Q7b2Zmc2V0KSk7YC4gSW4gdGhlIG5ldyBjb2RlLCBvbmx5IGBuZXctJmd0O3ByZXNlbnRfZXh0ZW5zaW9ucyA9IDA7YCBpcyBkb25lLiBCdXQsIHNpbmNlIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaXMgbm93IGZpeGVkLCB0aGlzIHNob3VsZCBiZSBmaW5lLiBJdCBpcyBhbGxvY2F0ZWQgZnJvbSBhIHNsYWIgY2FjaGUuCgpBIGtleSBjb25jZXJuIGlzIEtNU0FOLXNwZWNpZmljOiBgc2tiX2V4dF9tYXliZV9jb3dgIHVzZXMgYG1lbWNweSguLi4sIHNrYl9leHRfdHlwZV9sZW5baV0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKWAgdG8gY29weSBlYWNoIGV4dGVuc2lvbi4gYHNrYl9leHRfdHlwZV9sZW5gIHN0b3JlcyBgU0tCX0VYVF9DSFVOS1NJWkVPRih0eXBlKWAgKGNodW5rLWFsaWduZWQgc2l6ZSBvZiB0aGUgZXh0ZW5zaW9uKS4gSWYgdGhlIGV4dGVuc2lvbiBzaXplIGlzbiYjMzk7dAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9leHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMjkgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9NDg9aW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTUxLVx0c3RydWN0IGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6NTI6XHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeDtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtNTMtXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy03OC1cdFx0Lyogc2F2ZSBmcmFtZV9sZW4gdG8gcmV1c2UgaXQgd2hlbiB0cmFuc21pc3Npb24gaXMgY29tcGxldGVkICovXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjc5Olx0XHRjc3ggPSBjYW5fc2tiX2V4dF9maW5kKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTgwLVx0XHRpZiAoY3N4KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MTAyPV9fY2FuX2dldF9lY2hvX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWR4LFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMTE3LVx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi1cdTAwM2VlY2hvX3NrYltpZHhdO1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoxMTg6XHRcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xMTktXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xMjYtXHRcdGlmIChmcmFtZV9sZW5fcHRyKSB7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjEyNzpcdFx0XHRjc3ggPSBjYW5fc2tiX2V4dF9maW5kKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTEyOC1cdFx0XHRpZiAoY3N4KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MTc5PXZvaWQgY2FuX2ZyZWVfZWNob19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkeCxcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTE5MS1cdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtXHUwMDNlZWNob19za2JbaWR4XTtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MTkyOlx0XHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeDtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMTkzLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xOTQtXHRcdGlmIChmcmFtZV9sZW5fcHRyKSB7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjE5NTpcdFx0XHRjc3ggPSBjYW5fc2tiX2V4dF9maW5kKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTE5Ni1cdFx0XHRpZiAoY3N4KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MjE1PXN0cnVjdCBza19idWZmICphbGxvY19jYW5fc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fZnJhbWUgKipjZilcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTIxNy1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjIxODpcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yMTktXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yMjMtXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjIyNDpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yMjUtXHRpZiAoIWNzeCkge1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MjQ1PXN0cnVjdCBza19idWZmICphbGxvY19jYW5mZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI0OC1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI0OTpcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yNTAtXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yNTQtXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI1NTpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yNTYtXHRpZiAoIWNzeCkge1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9Mjc5PXN0cnVjdCBza19idWZmICphbGxvY19jYW54bF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI4My1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI4NDpcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yODUtXG4tLVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTItXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI5MzpcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTQtXHRpZiAoIWNzeCkge1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MzM0PXN0YXRpYyBib29sIGNhbl9za2JfaW5pdF92YWxpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0zMzUte1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzozMzY6XHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeCA9IGNhbl9za2JfZXh0X2ZpbmQoc2tiKTtcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzM3LVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzQxLVx0XHRpZiAoIWNzeCkge1xuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzozNDI6XHRcdFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTM0My1cdFx0XHRpZiAoIWNzeClcbi0tXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYz0zOT1zdGF0aWMgbmV0ZGV2X3R4X3QgdnhjYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqb3NrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy00My1cdHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwZWVyc3RhdHMsICpzcmNzdGF0cyA9IFx1MDAyNmRldi1cdTAwM2VzdGF0cztcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjQ0Olx0c3RydWN0IGNhbl9za2JfZXh0ICpjc3g7XG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy00NS1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNjktXHQvKiB0aGUgY2xvbmVkIHNrYiBwb2ludHMgdG8gdGhlIHNrYiBleHRlbnNpb24gb2YgdGhlIGFscmVhZHkgY2xvbmVkXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYzo3MDpcdCAqIG9za2Igd2l0aCBhbiBpbmNyZWFzZWQgcmVmY291bnQuIHNrYl9leHRfYWRkKCkgY3JlYXRlcyBhIGNvcHkgdG9cbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTcxLVx0ICogc2VwYXJhdGUgdGhlIHNrYiBleHRlbnNpb24gZGF0YSB3aGljaCBpcyBuZWVkZWQgdG8gc3RhcnQgd2l0aCBhXG4tLVxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNzMtXHQgKi9cbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjc0Olx0Y3N4ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0NBTik7XG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy03NS1cdGlmICghY3N4KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM9NTcxOD1zdGF0aWMgYm9vbCBtbHg1ZV90Y19yZXN0b3JlX3NrYl90Y19tZXRhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtbHg1X3RjX2N0X3ByaXYgKmN0X3ByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTcyMi1cdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoc2tiLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1NzIzOlx0c3RydWN0IHRjX3NrYl9leHQgKnRjX3NrYl9leHQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NzI0LVx0dTY0IGFjdF9taXNzX2Nvb2tpZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NzMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTczNDpcdFx0dGNfc2tiX2V4dCA9IHRjX3NrYl9leHRfYWxsb2Moc2tiKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU3MzU6XHRcdGlmICghdGNfc2tiX2V4dCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTczNi1cdFx0XHRXQVJOX09OKDEpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU3NDAtXHRcdGlmIChhY3RfbWlzc19jb29raWUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU3NDE6XHRcdFx0dGNfc2tiX2V4dC1cdTAwM2VhY3RfbWlzc19jb29raWUgPSBhY3RfbWlzc19jb29raWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1NzQyOlx0XHRcdHRjX3NrYl9leHQtXHUwMDNlYWN0X21pc3MgPSAxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTc0My1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU3NDQ6XHRcdFx0dGNfc2tiX2V4dC1cdTAwM2VjaGFpbiA9IGNoYWluO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTc0NS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYz0zNjY9bWN0cF9pMmNfZ2V0X3R4X2Zsb3dfc3RhdGUoc3RydWN0IG1jdHBfaTJjX2RldiAqbWlkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTM3Mi1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYzozNzM6XHRmbG93ID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9NQ1RQKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYy0zNzQtXHRpZiAoIWZsb3cpXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jPTQ1ND1zdGF0aWMgdm9pZCBtY3RwX2kyY19pbnZhbGlkYXRlX3R4X2Zsb3coc3RydWN0IG1jdHBfaTJjX2RldiAqbWlkZXYsXG4tLVxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTQ2MS1cbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYzo0NjI6XHRmbG93ID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9NQ1RQKTtcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYy00NjMtXHRpZiAoIWZsb3cpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTEwMz1zdGF0aWMgaW50IG5zaW1fZm9yd2FyZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKnR4X2Rldixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA2LVx0XHRcdCAgICBzdHJ1Y3QgbnNpbV9ycSAqcnEsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA3Olx0XHRcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqcHNwX2V4dClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMDgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTMtXHRcdGlmIChwc3BfZXh0KVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjExNDpcdFx0XHRfX3NrYl9leHRfcHV0KHBzcF9leHQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExNS1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTIzPXN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTI1LVx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjEyNjpcdHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0ID0gTlVMTDtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjctXHRzdHJ1Y3QgbmV0X2RldmljZSAqcGVlcl9kZXY7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ1Mj12b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDUzOnZvaWQgbnNpbV9wc3BfaGFuZGxlX2V4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tiX2V4dCAqcHNwX2V4dCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDU0LWVudW0gc2tiX2Ryb3BfcmVhc29uXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDU1PW5zaW1fZG9fcHNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1NjpcdCAgICBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zLCBzdHJ1Y3Qgc2tiX2V4dCAqKnBzcF9leHQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Ny0jZWxzZVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NjE9bnNpbV9kb19wc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDYyOlx0ICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMsIHN0cnVjdCBza2JfZXh0ICoqcHNwX2V4dClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NjMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00Njc9c3RhdGljIGlubGluZSB2b2lkXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDY4Om5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpIHt9XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDY5LSNlbmRpZlxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0xMC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxMTp2b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTIte1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTEzLVx0aWYgKHBzcF9leHQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTQ6XHRcdF9fc2tiX2V4dF9zZXQoc2tiLCBTS0JfRVhUX1BTUCwgcHNwX2V4dCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTUtfVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xOD1uc2ltX2RvX3BzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxOTpcdCAgICBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zLCBzdHJ1Y3Qgc2tiX2V4dCAqKnBzcF9leHQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy02OC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzo2OTpcdFx0c2tiX2V4dF9yZXNldChza2IpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTcwLVx0XHRza2ItXHUwMDNlbWFjX2xlbiA9IEVUSF9ITEVOO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuYz05Njc9c3RhdGljIHZvaWQgYXRoMTJrX2RwX2NjX2NsZWFudXAoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmMtMTAzMy1cdFx0XHRcdFx0XHQgc2tiX2NiLVx1MDAzZXBhZGRyX2V4dF9kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jOjEwMzQ6XHRcdFx0XHRcdFx0IHR4X2Rlc2NfaW5mby1cdTAwM2Vza2JfZXh0X2Rlc2MtXHUwMDNlbGVuLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jLTEwMzUtXHRcdFx0XHRcdFx0IERNQV9UT19ERVZJQ0UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jOjEwMzY6XHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueSh0eF9kZXNjX2luZm8tXHUwMDNlc2tiX2V4dF9kZXNjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuYy0xMDM3LVx0XHRcdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg9MzQ0PXN0cnVjdCBhdGgxMmtfdHhfZGVzY19pbmZvIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmgtMzQ2LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaDozNDc6XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2V4dF9kZXNjO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oLTM0OC1cdHUzMiBkZXNjX2lkOyAvKiBDb29raWUgKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg9MzUzPXN0cnVjdCBhdGgxMmtfdHhfZGVzY19wYXJhbXMge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oLTM1NC1cdHN0cnVjdCBza19idWZmICpza2I7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg6MzU1Olx0c3RydWN0IHNrX2J1ZmYgKnNrYl9leHRfZGVzYztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaC0zNTYtXHR1OCBtYWNfaWQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jPTEzMT12b2lkIGF0aDEya19kcF90eF9yZWxlYXNlX3R4YnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYy0xMzUtXHRzcGluX2xvY2tfYmgoXHUwMDI2ZHAtXHUwMDNldHhfZGVzY19sb2NrW3Bvb2xfaWRdKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYzoxMzY6XHR0eF9kZXNjLVx1MDAzZXNrYl9leHRfZGVzYyA9IE5VTEw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmMtMTM3LVx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dHhfZGVzYy1cdTAwM2VsaXN0LCBcdTAwMjZkcC1cdTAwM2V0eF9kZXNjX2ZyZWVfbGlzdFtwb29sX2lkXSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jPTIzMj12b2lkIGF0aDEya19kcF90eF9mcmVlX3R4YnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYy0yNDUtXHRcdGRtYV91bm1hcF9zaW5nbGUoZHAtXHUwMDNlZGV2LCBza2JfY2ItXHUwMDNlcGFkZHJfZXh0X2Rlc2MsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmM6MjQ2Olx0XHRcdFx0IGRlc2NfcGFyYW1zLVx1MDAzZXNrYl9leHRfZGVzYy1cdTAwM2VsZW4sIERNQV9UT19ERVZJQ0UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jOjI0NzpcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoZGVzY19wYXJhbXMtXHUwMDNlc2tiX2V4dF9kZXNjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYy0yNDgtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jPTEwNj1pbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTExOC1cdHN0cnVjdCBoYWxfdHhfbXNkdV9leHRfZGVzYyAqbXNnO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjExOTpcdHN0cnVjdCBza19idWZmICpza2JfZXh0X2Rlc2MgPSBOVUxMO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTEyMC1cdHN0cnVjdCBoYWxfc3JuZyAqdGNsX3Jpbmc7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM1OS1cdGlmIChtc2R1X2V4dF9kZXNjKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzYwOlx0XHRza2JfZXh0X2Rlc2MgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgaGFsX3R4X21zZHVfZXh0X2Rlc2MpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozNjE6XHRcdGlmICghc2tiX2V4dF9kZXNjKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMzYyLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM2NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozNjY6XHRcdHNrYl9wdXQoc2tiX2V4dF9kZXNjLCBzaXplb2Yoc3RydWN0IGhhbF90eF9tc2R1X2V4dF9kZXNjKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzY3Olx0XHRtZW1zZXQoc2tiX2V4dF9kZXNjLVx1MDAzZWRhdGEsIDAsIHNrYl9leHRfZGVzYy1cdTAwM2VsZW4pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM2OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozNjk6XHRcdG1zZyA9IChzdHJ1Y3QgaGFsX3R4X21zZHVfZXh0X2Rlc2MgKilza2JfZXh0X2Rlc2MtXHUwMDNlZGF0YTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNzAtXHRcdGF0aDEya193aWZpN19oYWxfdHhfY21kX2V4dF9kZXNjX3NldHVwKGFiLCBtc2csIFx1MDAyNnRpKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMzcyLVx0XHRpZiAoYWRkX2h0dF9tZXRhZGF0YSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjM3MzpcdFx0XHRyZXQgPSBhdGgxMmtfd2lmaTdfZHBfcHJlcGFyZV9odHRfbWV0YWRhdGEoc2tiX2V4dF9kZXNjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNzQtXHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zODAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzgxOlx0XHR0aS5wYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRwLVx1MDAzZWRldiwgc2tiX2V4dF9kZXNjLVx1MDAzZWRhdGEsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzgyOlx0XHRcdFx0XHQgIHNrYl9leHRfZGVzYy1cdTAwM2VsZW4sIERNQV9UT19ERVZJQ0UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM4My1cdFx0cmV0ID0gZG1hX21hcHBpbmdfZXJyb3IoZHAtXHUwMDNlZGV2LCB0aS5wYWRkcik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM4Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozODc6XHRcdHRpLmRhdGFfbGVuID0gc2tiX2V4dF9kZXNjLVx1MDAzZWxlbjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zODgtXHRcdHRpLnR5cGUgPSBIQUxfVENMX0RFU0NfVFlQRV9FWFRfREVTQztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMzkwLVx0XHRza2JfY2ItXHUwMDNlcGFkZHJfZXh0X2Rlc2MgPSB0aS5wYWRkcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozOTE6XHRcdHR4X2Rlc2MtXHUwMDNlc2tiX2V4dF9kZXNjID0gc2tiX2V4dF9kZXNjO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM5Mi1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNDUzLVx0XHRkbWFfdW5tYXBfc2luZ2xlKGRwLVx1MDAzZWRldiwgc2tiX2NiLVx1MDAzZXBhZGRyX2V4dF9kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjQ1NDpcdFx0XHRcdCBza2JfZXh0X2Rlc2MtXHUwMDNlbGVuLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTQ1NS1cdFx0XHRcdCBETUFfVE9fREVWSUNFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy00NTYtZmFpbF9mcmVlX2V4dF9za2I6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6NDU3Olx0a2ZyZWVfc2tiKHNrYl9leHRfZGVzYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNDU4LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYz00NzY9YXRoMTJrX2RwX3R4X2h0dF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aDEya19kcCAqZHAsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTUxNC1cdFx0ZG1hX3VubWFwX3NpbmdsZShkcC1cdTAwM2VkZXYsIHNrYl9jYi1cdTAwM2VwYWRkcl9leHRfZGVzYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzo1MTU6XHRcdFx0XHQgZGVzY19wYXJhbXMtXHUwMDNlc2tiX2V4dF9kZXNjLVx1MDAzZWxlbiwgRE1BX1RPX0RFVklDRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6NTE2Olx0XHRkZXZfa2ZyZWVfc2tiX2FueShkZXNjX3BhcmFtcy1cdTAwM2Vza2JfZXh0X2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTUxNy1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM9NzM3PXN0YXRpYyB2b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0ZV9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNzY2LVx0XHRkbWFfdW5tYXBfc2luZ2xlKGRwLVx1MDAzZWRldiwgc2tiX2NiLVx1MDAzZXBhZGRyX2V4dF9kZXNjLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjc2NzpcdFx0XHRcdCBkZXNjX3BhcmFtcy1cdTAwM2Vza2JfZXh0X2Rlc2MtXHUwMDNlbGVuLCBETUFfVE9fREVWSUNFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzo3Njg6XHRcdGRldl9rZnJlZV9za2JfYW55KGRlc2NfcGFyYW1zLVx1MDAzZXNrYl9leHRfZGVzYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNzY5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYz05MTA9dm9pZCBhdGgxMmtfd2lmaTdfZHBfdHhfY29tcGxldGlvbl9oYW5kbGVyKHN0cnVjdCBhdGgxMmtfZHAgKmRwLCBpbnQgcmluZ19pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtOTgxLVx0XHRkZXNjX3BhcmFtcy5za2IgPSB0eF9kZXNjLVx1MDAzZXNrYjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzo5ODI6XHRcdGRlc2NfcGFyYW1zLnNrYl9leHRfZGVzYyA9IHR4X2Rlc2MtXHUwMDNlc2tiX2V4dF9kZXNjO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTk4My1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz0xOTAyPXN0YXRpYyBib29sIG1hYzgwMjExX2h3c2ltX3R4X2ZyYW1lX25vX25sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTE5NTQtXHRza2ItXHUwMDNlbWFyayA9IDA7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxOTU1Olx0c2tiX2V4dF9yZXNldChza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTk1Ni1cdG5mX3Jlc2V0X2N0KHNrYik7XG4tLVxuZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jPTEyNj1uZXRkZXZfdHhfdCBjdm1fb2N0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmMtMzQ5LVx0c2tiX2RzdF9kcm9wKHNrYik7XG5kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmM6MzUwOlx0c2tiX2V4dF9yZXNldChza2IpO1xuZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jLTM1MS1cdG5mX3Jlc2V0X2N0KHNrYik7XG4tLVxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg9Mzk9Ym9vbCBjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oLTQwLVxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NDE6c3RhdGljIGlubGluZSBzdHJ1Y3QgY2FuX3NrYl9leHQgKmNhbl9za2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNDIte1xuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NDM6XHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeCA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9DQU4pO1xuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNDQtXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo0NTpcdC8qIHNrYl9leHRfYWRkKCkgcmV0dXJucyB1bmluaXRpYWxpemVkIHNwYWNlICovXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00Ni1cdGlmIChjc3gpXG4tLVxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNTEtXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo1MjpzdGF0aWMgaW5saW5lIHN0cnVjdCBjYW5fc2tiX2V4dCAqY2FuX3NrYl9leHRfZmluZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNTMte1xuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NTQ6XHRyZXR1cm4gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9DQU4pO1xuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNTUtfVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTI4PW5mX2JyaWRnZV9pbmZvX2dldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMjkte1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MzA6XHRyZXR1cm4gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMzEtfVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTMzPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9icmlkZ2VfaW5mb19leGlzdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTM0LXtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjM1Olx0cmV0dXJuIHNrYl9leHRfZXhpc3Qoc2tiLCBTS0JfRVhUX0JSSURHRV9ORik7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0zNi19XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yODM9dW5pb24gYnBmX2F0dHI7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjI4NDpzdHJ1Y3Qgc2tiX2V4dDtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjg1LXN0cnVjdCB0c19jb25maWc7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yODg9c3RydWN0IG5mX2JyaWRnZV9pbmZvIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMxNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjMxODovKiBDaGFpbiBpbiB0Y19za2JfZXh0IHdpbGwgYmUgdXNlZCB0byBzaGFyZSB0aGUgdGMgY2hhaW4gd2l0aFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTktICogb3ZzIHJlY2lyY19pZC4gSXQgd2lsbCBiZSBzZXQgdG8gdGhlIGN1cnJlbnQgY2hhaW4gYnkgdGNcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMyMS0gKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzIyOnN0cnVjdCB0Y19za2JfZXh0IHtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzIzLVx0dW5pb24ge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NzI4PWVudW0gc2tiX3RzdGFtcF90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTgzMi0gKlx0XHRwYWdlX3Bvb2wgc3VwcG9ydCBvbiBkcml2ZXIpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjgzMzogKlx0QGFjdGl2ZV9leHRlbnNpb25zOiBhY3RpdmUgZXh0ZW5zaW9ucyAoc2tiX2V4dF9pZCB0eXBlcylcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtODM0LSAqXHRAbmRpc2Nfbm9kZXR5cGU6IHJvdXRlciB0eXBlIChmcm9tIGxpbmsgbGF5ZXIpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD04ODY9c3RydWN0IHNrX2J1ZmYge1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTEwMC1cdC8qIG9ubHkgdXNhYmxlIGFmdGVyIGNoZWNraW5nIC1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyAhPSAwICovXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjExMDE6XHRzdHJ1Y3Qgc2tiX2V4dFx0XHQqZXh0ZW5zaW9ucztcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTEwMi0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyOTM9aW50IHNrYl9tcGxzX2RlY190dGwoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyOTQ6c3RydWN0IHNrX2J1ZmYgKnBza2JfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmLCBpbnQgdG9fY29weSxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI5NS1cdFx0XHQgICAgIGdmcF90IGdmcCk7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDA0PXN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X25mY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgbG9uZyBuZmN0KVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTAyNy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwMjg6I2RlZmluZSBTS0JfRVhUX1hfVENcdFx0WChUQ19TS0JfRVhULCBzdHJ1Y3QgdGNfc2tiX2V4dClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTAyOS0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA0NS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNDY6I2RlZmluZSBTS0JfRVhUX1hfUFNQXHRcdFgoU0tCX0VYVF9QU1AsIHN0cnVjdCBwc3Bfc2tiX2V4dClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA0Ny0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA1MS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQ0FOKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDUyOiNkZWZpbmUgU0tCX0VYVF9YX0NBTlx0XHRYKFNLQl9FWFRfQ0FOLCBzdHJ1Y3QgY2FuX3NrYl9leHQpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTMtI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNjUtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNjY6ZW51bSBza2JfZXh0X2lkIHtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA2Ny0jZGVmaW5lIFgoaWQsIHR5cGUpXHRpZCxcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNzItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNzM6ZXh0ZXJuIGNvbnN0IHU4IHNrYl9leHRfb2Zmc2V0W1NLQl9FWFRfTlVNXTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA3NC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA3NS0vKipcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA3NjogKlx0c3RydWN0IHNrYl9leHQgLSBza19idWZmIGV4dGVuc2lvbnNcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA3Ny0gKlx0QHJlZmNudDogMSBvbiBhbGxvY2F0aW9uLCBkZWFsbG9jYXRlZCBvbiAwXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDgxLSAqXHRFYWNoIGV4dGVuc2lvbiBpZCBvY2N1cGllcyBhIGZpeGVkIHNsb3Qgd2l0aGluIEBkYXRhLCBsb2NhdGVkIGF0XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwODI6ICpcdHNrYl9leHRfb2Zmc2V0W2lkXSBjaHVua3Mgb2YgOCBieXRlcy4gU3RvcmluZyBvZmZzZXRzL2xlbmd0aHNcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA4My0gKlx0aW4gOC1ieXRlIGNodW5rcyBhbGxvd3MgJiMzOTt1OCYjMzk7IHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aFxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA4NS0gKi9cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA4NjpzdHJ1Y3Qgc2tiX2V4dCB7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwODctXHRyZWZjb3VudF90IHJlZmNudDtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTEtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTI6c3RydWN0IHNrYl9leHQgKl9fc2tiX2V4dF9hbGxvYyhnZnBfdCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTM6dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTQ6XHRcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5NTp2b2lkICpza2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk2OnZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk3OnZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5OC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5OTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEwMC17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMDEtXHRpZiAoc2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTAyOlx0XHRfX3NrYl9leHRfcHV0KHNrYi1cdTAwM2VleHRlbnNpb25zKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEwMy19XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMDQtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMDU6c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX2V4dF9jb3B5KHN0cnVjdCBza19idWZmICpkc3QsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMDYtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBza19idWZmICpzcmMpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTEwLVx0aWYgKHNyYy1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucykge1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTExOlx0XHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc3JjLVx1MDAzZWV4dGVuc2lvbnM7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMTItXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTE3LVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTE4OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYylcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTExOS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjA6XHRza2JfZXh0X3B1dChkc3QpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTIxOlx0X19za2JfZXh0X2NvcHkoZHN0LCBzcmMpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTIyLX1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyMy1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEyNDpzdGF0aWMgaW5saW5lIGJvb2wgX19za2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza2JfZXh0ICpleHQsIGVudW0gc2tiX2V4dF9pZCBpKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTI1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjgtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjk6c3RhdGljIGlubGluZSBib29sIHNrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTMwLXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzMtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMzQ6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzNS17XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMzY6XHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSlcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEzNzpcdFx0X19za2JfZXh0X2RlbChza2IsIGlkKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzOC19XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzktXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNDA6c3RhdGljIGlubGluZSB2b2lkICpza2JfZXh0X2ZpbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTQxLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE0MjpcdGlmIChza2JfZXh0X2V4aXN0KHNrYiwgaWQpKSB7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNDM6XHRcdHN0cnVjdCBza2JfZXh0ICpleHQgPSBza2ItXHUwMDNlZXh0ZW5zaW9ucztcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE0NC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE0NTpcdFx0cmV0dXJuICh2b2lkICopZXh0ICYjNDM7IChza2JfZXh0X29mZnNldFtpZF0gXHUwMDNjXHUwMDNjIDMpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTQ2LVx0fVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE1MC1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE1MTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTUyLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE1My1cdGlmICh1bmxpa2VseShza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpKSB7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNTQ6XHRcdF9fc2tiX2V4dF9wdXQoc2tiLVx1MDAzZWV4dGVuc2lvbnMpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTU1LVx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPSAwO1xuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTE1OT1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2hhc19leHRlbnNpb25zKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTYzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNjQ6c3RhdGljIGlubGluZSB2b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dCkge31cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE2NTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikge31cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE2NjpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7fVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTY3OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdW51c2VkKSB7fVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTY4OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnMpIHt9XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNjk6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqcykge31cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE3MC1zdGF0aWMgaW5saW5lIGJvb2wgc2tiX2hhc19leHRlbnNpb25zKHN0cnVjdCBza19idWZmICpza2IpIHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MjM2PXN0YXRpYyBpbmxpbmUgaW50IHNlY3BhdGhfZXhpc3RzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MjM4LSNpZmRlZiBDT05GSUdfWEZSTVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MjM5Olx0cmV0dXJuIHNrYl9leHRfZXhpc3Qoc2tiLCBTS0JfRVhUX1NFQ19QQVRIKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTI0MC0jZWxzZVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTI5ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBzZWNfcGF0aCAqc2tiX3NlY19wYXRoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01Mjk2LSNpZmRlZiBDT05GSUdfWEZSTVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1Mjk3Olx0cmV0dXJuIHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfU0VDX1BBVEgpO1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01Mjk4LSNlbHNlXG4tLVxuaW5jbHVkZS9uZXQvY2FuLmgtMTQtLyoqXG5pbmNsdWRlL25ldC9jYW4uaDoxNTogKiBzdHJ1Y3QgY2FuX3NrYl9leHQgLSBza2IgZXh0ZW5zaW9ucyBmb3IgQ0FOIHNwZWNpZmljIGNvbnRlbnRcbmluY2x1ZGUvbmV0L2Nhbi5oLTE2LSAqIEBjYW5faWlmOiBpZmluZGV4IG9mIHRoZSBmaXJzdCBpbnRlcmZhY2UgdGhlIENBTiBmcmFtZSBhcHBlYXJlZCBvblxuLS1cbmluY2x1ZGUvbmV0L2Nhbi5oLTIwLSAqL1xuaW5jbHVkZS9uZXQvY2FuLmg6MjE6c3RydWN0IGNhbl9za2JfZXh0IHtcbmluY2x1ZGUvbmV0L2Nhbi5oLTIyLVx0aW50XHRjYW5faWlmO1xuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmg9MTYwPXZvaWQgbXB0Y3BfZGlhZ19maWxsX2luZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IG1wdGNwX2luZm8gKmluZm8pO1xuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMTY0LSAqL1xuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNjU6c3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3NrYl9leHRfbW92ZShzdHJ1Y3Qgc2tfYnVmZiAqdG8sXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE2Ni1cdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpmcm9tKVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNjcte1xuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNjg6XHRpZiAoIXNrYl9leHRfZXhpc3QoZnJvbSwgU0tCX0VYVF9NUFRDUCkpXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE2OS1cdFx0cmV0dXJuO1xuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMTcxLVx0aWYgKFdBUk5fT05fT05DRSh0by1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucykpXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE3MjpcdFx0c2tiX2V4dF9wdXQodG8pO1xuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNzMtXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNzgtXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE3OTpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc2tiX2V4dF9jb3B5KHN0cnVjdCBza19idWZmICp0byxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTgwLVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xODMtXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE4NDpcdGZyb21fZXh0ID0gc2tiX2V4dF9maW5kKGZyb20sIFNLQl9FWFRfTVBUQ1ApO1xuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xODUtXHRpZiAoIWZyb21fZXh0KVxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMTg4LVx0ZnJvbV9leHQtXHUwMDNlZnJvemVuID0gMTtcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTg5Olx0c2tiX2V4dF9jb3B5KHRvLCBmcm9tKTtcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTkwLX1cbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oPTIwOD1zdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3Bfc2tiX2Nhbl9jb2xsYXBzZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqdG8sXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yMTAte1xuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyMTE6XHRyZXR1cm4gbXB0Y3BfZXh0X21hdGNoZXMoc2tiX2V4dF9maW5kKHRvLCBTS0JfRVhUX01QVENQKSxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjEyOlx0XHRcdFx0IHNrYl9leHRfZmluZChmcm9tLCBTS0JfRVhUX01QVENQKSk7XG5pbmNsdWRlL25ldC9tcHRjcC5oLTIxMy19XG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0yMjU9c3RhdGljIGlubGluZSBfX2JlMzIgbXB0Y3BfcmVzZXRfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9tcHRjcC5oLTIyNi17XG5pbmNsdWRlL25ldC9tcHRjcC5oOjIyNzpcdGlmIChza2JfZXh0X2V4aXN0KHNrYiwgU0tCX0VYVF9NUFRDUCkpXG5pbmNsdWRlL25ldC9tcHRjcC5oLTIyOC1cdFx0cmV0dXJuIG1wdGNwX2dldF9yZXNldF9vcHRpb24oc2tiKTtcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI2OT1zdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzQtXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI3NTpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc2tiX2V4dF9tb3ZlKHN0cnVjdCBza19idWZmICp0byxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjc2LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzktXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI4MDpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc2tiX2V4dF9jb3B5KHN0cnVjdCBza19idWZmICp0byxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjgxLVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oPTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZV9hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC0xMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaDoxMjpcdHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqYiA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEzLVxuLS1cbmluY2x1ZGUvbmV0L3BrdF9jbHMuaD03Nzc9c3RhdGljIGlubGluZSB2b2lkIHRjZl9wcm90b191cGRhdGVfdXNlc3coc3RydWN0IHRjZl9wcm90byAqdHAsIHUzMiBmbGFncylcbi0tXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNzg2LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVClcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDo3ODc6c3RhdGljIGlubGluZSBzdHJ1Y3QgdGNfc2tiX2V4dCAqdGNfc2tiX2V4dF9hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTc4OC17XG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6Nzg5Olx0c3RydWN0IHRjX3NrYl9leHQgKnRjX3NrYl9leHQgPSBza2JfZXh0X2FkZChza2IsIFRDX1NLQl9FWFQpO1xuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTc5MC1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUxNwoJCQkJCQkJb3V0cHV0OiAzMzEKCQkJCQkJCXRob3VnaHRzOiA0MzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBza2JfZXh0IFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHByZXNlbnRlZCB3aXRoIHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyByZWZhY3RvcmluZyB0aGUgYHNrYl9leHRgIGFsbG9jYXRpb24gYW5kIGxheW91dC4gSXQmIzM5O3MgbW92aW5nIGZyb20gYSB2YXJpYWJsZS1zaXplZCBzY2hlbWUgdG8gYSBmaXhlZC1zaXplIHN0cnVjdHVyZSAoYHN0cnVjdCBza2JfZXh0X2xheW91dGApLiBNeSBpbml0aWFsIHJlYWN0aW9uPyBJdCYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSwgYW5kIEkgbmVlZCB0byBiZSAqdGhvcm91Z2gqLiBUaGUgcHJvbXB0IGlzIGFza2luZyBhYm91dCBLTVNBTi4gUmlnaHQuIFRoZSBjZW50cmFsIHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYSAqbmV3KiBjaGFuY2Ugb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3Igb3RoZXJ3aXNlLCBhIHNlY3VyaXR5IGxlYWs/CgpGaXJzdCwgSSBpZGVudGlmeSBhbGwgdGhlIGV4dGVuc2lvbnMgdGhhdCB1c2UgYHNrYl9leHRgLiAgSSBzZWUgYSB3aG9sZSBob3N0IG9mIHRoZW06IENBTiwgQnJpZGdlIE5ldGZpbHRlciwgVEMsIE1QVENQLCBNQ1RQLCBQU1AsIGFuZCBJUHNlYy4gR29vZCwgSSBrbm93IHRoZSBwbGF5ZXJzLiBOZXh0LCBJIGNvbnNpZGVyIGhvdyB0aGVzZSBhcmUgdXNlZCBpbiByZWxhdGlvbiB0byB1c2Vyc3BhY2UuICpDcnVjaWFsbHkqLCBub25lIG9mIHRoZXNlIHN0cnVjdHMgYXJlIGRpcmVjdGx5ICpjb3BpZWQqIHRvIHVzZXJzcGFjZS4gVGhleSYjMzk7cmUgaW50ZXJuYWwga2VybmVsIG1ldGFkYXRhLiBUaGF0IGltbWVkaWF0ZWx5IGxvd2VycyBteSBhbnhpZXR5IGxldmVsIGFib3V0IHBvdGVudGlhbCBpbmZvLWxlYWtzLCBidXQgdGhlIGdhbWUgaXMgbm90IG92ZXIuCgpOb3csIGxldCYjMzk7cyB0cmFjZSB0aHJvdWdoIHRoZSBhbGxvY2F0aW9uIGFuZCBjb3B5IGNvZGUuIFRoZSBjb3JlIGNvbmNlcm4gaGVyZSBpcyBgc2tiX2V4dF9tYXliZV9jb3dgIHdoaWNoIGhhbmRsZXMgY29weWluZywgcHJlc3VtYWJseSBpbmNsdWRpbmcgcGFkZGluZy4gVGhhdCYjMzk7cyB0aGUga2V5LiBPbGQgY29kZSwgbmV3IGNvZGUuLi5JIG5lZWQgdG8gY29tcGFyZS4gSW4gdGhlIG5ldyBjb2RlLCBJIHNlZSB0aGUgY2hhbmdlIHRvIGhvdyB3ZSBjb3B5IG5vdywgYml0d2lzZSwgZGVwZW5kZW50IG9uIHdoZXRoZXIgdGhlIGV4dGVuc2lvbiBpcyBhY3RpdmUuIFRoZSBvbGQgY29kZSBqdXN0IGBtZW1jcHlg4oCZZCB0aGUgd2hvbGUgYmxvY2suIElzICp0aGF0KiBhbiBpc3N1ZT8gSSBzZWUgdGhlIGNvZGUgYW5kIEkgY2FuIHJlYXNvbiB0aGUgbWVtY3B5LCBhbmQgcGFkZGluZyBpcyBub3QgdXNlZCBpbiBhIGJyYW5jaC4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBhZGRpbmcgbm93LCByZW1lbWJlcmluZyBgc2tiX2V4dF90eXBlX2xlbltpXSAqIFNLQl9FWFRfQUxJR05fVkFMVUVgLiBJZiB0aGVyZeKAmXMgdW5pbml0aWFsaXplZCBwYWRkaW5nICppbnNpZGUqIHRoZXNlIGV4dGVuc2lvbiBzdHJ1Y3RzLCBjb3VsZCBpdCBsZWFrIG91dD8gQnV0IHdhaXQsIEkgcmVjYWxsIHRoZXNlIHN0cnVjdHMgYXJlbuKAmXQgKmRpcmVjdGx5KiBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHRyYW5zbWl0dGVkIGFjcm9zcyB0aGUgbmV0d29yaywgdGhleeKAmXJlIGZvciBpbnRlcm5hbCB1c2UuIFRoaXMgc2hvdWxkIGJlIG9rYXksIGJ1dCBJIHdpbGwgY2hlY2sgb25lIHNwZWNpZmljIGFyZWHigKYKCk9rYXksIG5vdyBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBtcHRjcF9leHRgLiBDb3VsZCAqaXQqIGJlIGxlYWtlZD8gSXQgKmlzKiB1c2VkIGZvciBidWlsZGluZyBUQ1Agb3B0aW9ucy4uLiAqdGhhdCYjMzk7cyogc29tZXRoaW5nIHRoYXQgZ29lcyBvbiB0aGUgbmV0d29yayEgIEkgbmVlZCB0byBjaGVjayAqZXZlcnkqIGZpZWxkIGluIHRoYXQgc3RydWN0LCBhbmQgaG93IGl0IGlzIHVzZWQgdG8gYnVpbGQgVENQIG9wdGlvbnMuIElmIGFuIHVuaW5pdGlhbGl6ZWQgZmllbGQgaXMgKnVzZWQqIHRvIGNvbnN0cnVjdCBhIFRDUCBvcHRpb24sIHRoYXQgaXMgYSBjbGVhciBsZWFrIGFuZCBJIHdvdWxkIGhhdmUgYSBodWdlIHByb2JsZW0uIEJ1dCwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGNoYW5nZSBgbXB0Y3BfZXh0YCBpbml0aWFsaXphdGlvbiwgaXQgKm9ubHkqIGNoYW5nZXMgdGhlICpsYXlvdXQqIG9mIHRoZSBnZW5lcmljIGBza2JfZXh0YC4gVGhlIHBhdGNoIHNob3VsZG4mIzM5O3QgY3JlYXRlIGEgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGQgdGhhdCBwcmV2aW91c2x5IGRpZCBub3QgZXhpc3QuIEkmIzM5O20gc2F0aXNmaWVkIGZvciBub3csIGJ1dCBJIHdpbGwgY29tZSBiYWNrIHRvIHRoaXMuCgpJJiMzOTttIG5vdyB0aGlua2luZyBhYm91dCB3aGVyZSB0aGUgYWxsb2NhdGlvbiBpcyBkaWZmZXJlbnQuIFdpdGggdGhlIG9sZCwgdmFyaWFibGUtc2l6ZWQgc2NoZW1lLCBhbiBhbGxvY2F0aW9uIGZvciBhIG5ldyBleHRlbnNpb24gd291bGQgbWFrZSBpdCBncm93LiBUaGUgbmV3IGZpeGVkLXNpemUgbGF5b3V0IHVzZXMgYSBzbGFiIGNhY2hlLCBgc2tidWZmX2V4dF9jYWNoZWAuIGBfX3NrYl9leHRfYWxsb2NgIGRvZXMgKm5vdCogemVybyB0aGUgbWVtb3J5LCAqZXhjZXB0KiB0aGUgaGVhZGVyIGFuZCB0aGUgcmVmY291bnQuIEkgc2VlIHRoYXQgYHNrYl9leHRfYWRkYCB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhpcyBzcGFjZSwgYW5kIHRoZW4gdGhlIGNhbGxlciB3aWxsIGluaXRpYWxpemUgaXQuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBob3cgaXQgd29ya2VkIGJlZm9yZS4gVGhlIGNhbGxlcnMgYXJlICpzdXBwb3NlZCogdG8gaW5pdGlhbGl6ZSwgYW5kIHRoZSAqdW5pbml0aWFsaXplZCogcGFydHMgYXJlIHByb3RlY3RlZCBieSB0aGUgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0LiBTbyBldmVuIGlmIGEgY2FsbGVyICpkb2VzbiYjMzk7dCogaW5pdGlhbGl6ZSBpdCwgdGhlcmUmIzM5O3Mgbm8gbGVhay4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBhYm91dCB0aGlzLgoKSSYjMzk7bSBsb29raW5nIGF0IGBfX3NrYl9leHRfc2V0YCBhbmQgYHNrYl9leHRfbWF5YmVfY293YCwgb2xkIGFuZCBuZXcgY29kZSwgY29tcGFyaW5nLCBsaW5lIGJ5IGxpbmUuIEFtIEkgbWlzc2luZyBhbnl0aGluZz8gVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgKm5ldmVyKiBhY2Nlc3NlZCwgYmVjYXVzZSBhbnkgYWNjZXNzIHRvIGFuIGV4dGVuc2lvbiBnb2VzIHRocm91Z2ggYHNrYl9leHRfZmluZGAsIHdoaWNoIGNoZWNrcyBgcHJlc2VudF9leHRlbnNpb25zYC4gQSAqbWlzc2luZyogZXh0ZW5zaW9uIGlzIGhhbmRsZWQgY29ycmVjdGx5IGFuZCBpcyBqdXN0IG5vdCBpbmNsdWRlZCBpbiB0aGUgbG9va3VwLiAgU28gdGhlIHVuaW5pdGlhbGl6ZWQgc2xvdHMgYXJlIG5ldmVyIHVzZWQuCgpJIGNpcmNsZSBiYWNrIHRvIHRoZSBtZW1vcnkgY29waWVzIGFnYWluLCBzcGVjaWZpY2FsbHkgYHNrYl9leHRfbWF5YmVfY293YC4gIEkmIzM5O20gbm93IHNhdGlzZmllZC4gSW4gdGhlIG9sZCBjb2RlLCBgbWVtY3B5YCBjb3BpZWQgdGhlIGVudGlyZSBjaHVuay4gSW4gdGhlIG5ldyBjb2RlLCBpdCBjb3BpZXMgdGhlIGhlYWRlciAqYW5kKiBlYWNoIHByZXNlbnQgZXh0ZW5zaW9uLCBidXQgZWFjaCBuZXcgYWxsb2NhdGlvbiBpcyBzdGlsbCB0aGUgKnNhbWUgc2l6ZSouIFRoZSBlbXB0eSBzcGFjZSBzdGF5cyB0aGF0IHdheSBhbmQgaXMgbm90IGEgc2VjdXJpdHkgcmlzay4KCkxldCYjMzk7cyBub3QgZm9yZ2V0IHRoZSBkZXRhaWxzISBgc2tiX2V4dF9vZmZzZXRgLiAgVGhlIGxheW91dCBpcyBub3cgZml4ZWQuIElmIHRoaXMgaXMgKmluY29ycmVjdCogdGhhdCBsZWFkcyB0byBPT0IuIEJ1dCwgaG93IGFyZSB0aGVzZSBvZmZzZXRzIGNhbGN1bGF0ZWQ/IE9rYXksIGl0JiMzOTtzCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBhbGxvY2F0aW9uIGFuZCBsYXlvdXQgb2YgYHNrYl9leHRgIChza19idWZmIGV4dGVuc2lvbnMpIGZyb20gYSB2YXJpYWJsZS1zaXplZCwgZHluYW1pY2FsbHkgYXBwZW5kZWQgbGF5b3V0IHRvIGEgZml4ZWQtc2l6ZWQgbGF5b3V0IChgc3RydWN0IHNrYl9leHRfbGF5b3V0YCkgd2l0aCBzdGF0aWMgb2Zmc2V0cyBmb3IgZWFjaCBleHRlbnNpb24gdHlwZS5cblxuMS4gVGhlIG5ldyBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGEgc2xhYiBjYWNoZSwgYW5kIGxpa2UgdGhlIG9sZCBjb2RlLCBvbmx5IHRoZSBoZWFkZXIgKGByZWZjbnRgIGFuZCBgcHJlc2VudF9leHRlbnNpb25zYCkgaXMgaW5pdGlhbGl6ZWQuIFRoZSBleHRlbnNpb24gZGF0YSBzbG90cyByZW1haW4gdW5pbml0aWFsaXplZCB1bnRpbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci5cbjIuIFRoZSB1bmluaXRpYWxpemVkIHNsb3RzIGFyZSBzdHJpY3RseSBndWFyZGVkIGJ5IHRoZSBgcHJlc2VudF9leHRlbnNpb25zYCBiaXRtYXAuIFRoZXkgY2Fubm90IGJlIGFjY2Vzc2VkIHVubGVzcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0LCB3aGljaCBvbmx5IGhhcHBlbnMgd2hlbiBhbiBleHRlbnNpb24gaXMgcHJvcGVybHkgYWRkZWQgYW5kIGluaXRpYWxpemVkLlxuMy4gV2hlbiBjb3B5aW5nIGFuIGV4dGVuc2lvbiAoYHNrYl9leHRfbWF5YmVfY293YCksIHRoZSBjb2RlIGNvcGllcyB0aGUgaGVhZGVyIGFuZCBvbmx5IHRoZSBwcmVzZW50IGV4dGVuc2lvbnMsIGxlYXZpbmcgdGhlIHVudXNlZCBzbG90cyB1bmluaXRpYWxpemVkLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgYmVoYXZpb3IgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG40LiBgc2tiX2V4dGAgYW5kIGl0cyBleHRlbnNpb25zIGFyZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyB1c2VkIGZvciBtZXRhZGF0YSAoZS5nLiwgSVBzZWMsIFRDLCBicmlkZ2UgbmV0ZmlsdGVyKSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIGluY29ycmVjdCBvZmZzZXQgY2FsY3VsYXRpb25zIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIGxheW91dCBvZiBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykgZnJvbSBhIHZhcmlhYmxlLXNpemVkLCBkeW5hbWljYWxseSBhcHBlbmRlZCBsYXlvdXQgdG8gYSBmaXhlZC1zaXplZCBsYXlvdXQgKGBzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXRgKSB3aXRoIHN0YXRpYyBvZmZzZXRzIGZvciBlYWNoIGV4dGVuc2lvbiB0eXBlLlxuXG4xLiBUaGUgbmV3IGBza2JfZXh0X2xheW91dGAgaXMgYWxsb2NhdGVkIGZyb20gYSBzbGFiIGNhY2hlLCBhbmQgbGlrZSB0aGUgb2xkIGNvZGUsIG9ubHkgdGhlIGhlYWRlciAoYHJlZmNudGAgYW5kIGBwcmVzZW50X2V4dGVuc2lvbnNgKSBpcyBpbml0aWFsaXplZC4gVGhlIGV4dGVuc2lvbiBkYXRhIHNsb3RzIHJlbWFpbiB1bmluaXRpYWxpemVkIHVudGlsIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVyLlxuMi4gVGhlIHVuaW5pdGlhbGl6ZWQgc2xvdHMgYXJlIHN0cmljdGx5IGd1YXJkZWQgYnkgdGhlIGBwcmVzZW50X2V4dGVuc2lvbnNgIGJpdG1hcC4gVGhleSBjYW5ub3QgYmUgYWNjZXNzZWQgdW5sZXNzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpcyBzZXQsIHdoaWNoIG9ubHkgaGFwcGVucyB3aGVuIGFuIGV4dGVuc2lvbiBpcyBwcm9wZXJseSBhZGRlZCBhbmQgaW5pdGlhbGl6ZWQuXG4zLiBXaGVuIGNvcHlpbmcgYW4gZXh0ZW5zaW9uIChgc2tiX2V4dF9tYXliZV9jb3dgKSwgdGhlIGNvZGUgY29waWVzIHRoZSBoZWFkZXIgYW5kIG9ubHkgdGhlIHByZXNlbnQgZXh0ZW5zaW9ucywgbGVhdmluZyB0aGUgdW51c2VkIHNsb3RzIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIG9sZCBiZWhhdmlvciBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cbjQuIGBza2JfZXh0YCBhbmQgaXRzIGV4dGVuc2lvbnMgYXJlIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIHVzZWQgZm9yIG1ldGFkYXRhIChlLmcuLCBJUHNlYywgVEMsIGJyaWRnZSBuZXRmaWx0ZXIpIGFuZCBhcmUgbm90IGNvcGllZCB0byB1c2Vyc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIGluZm8tbGVha3MuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgaW5jb3JyZWN0IG9mZnNldCBjYWxjdWxhdGlvbnMgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTc6MjQuNTE5NDUzNTY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyNTc5MDQ2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIkJSSURHRV9ORVRGSUxURVJcIixcbiAgICBcIkNBTlwiLFxuICAgIFwiTUNUUFwiLFxuICAgIFwiSTJDXCIsXG4gICAgXCJJMkNfU0xBVkVcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX0kyQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTVBUQ1BcIixcbiAgICBcIklORVRfUFNQXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX1RDX1NLQl9FWFRcIixcbiAgICBcIlhGUk1fVVNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9leHRfYWRkXCIsXG4gICAgXCJfX3NrYl9leHRfc2V0XCIsXG4gICAgXCJfX3NrYl9leHRfYWxsb2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbGF5b3V0IG9mIGBza2JfZXh0YCAoc2tfYnVmZiBleHRlbnNpb25zKSBmcm9tIGEgdmFyaWFibGUtc2l6ZWQsIGR5bmFtaWNhbGx5IGFwcGVuZGVkIGxheW91dCB0byBhIGZpeGVkLXNpemVkIGxheW91dCAoYHN0cnVjdCBza2JfZXh0X2xheW91dGApIHdpdGggc3RhdGljIG9mZnNldHMgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGUuXFxuXFxuMS4gVGhlIG5ldyBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGEgc2xhYiBjYWNoZSwgYW5kIGxpa2UgdGhlIG9sZCBjb2RlLCBvbmx5IHRoZSBoZWFkZXIgKGByZWZjbnRgIGFuZCBgcHJlc2VudF9leHRlbnNpb25zYCkgaXMgaW5pdGlhbGl6ZWQuIFRoZSBleHRlbnNpb24gZGF0YSBzbG90cyByZW1haW4gdW5pbml0aWFsaXplZCB1bnRpbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci5cXG4yLiBUaGUgdW5pbml0aWFsaXplZCBzbG90cyBhcmUgc3RyaWN0bHkgZ3VhcmRlZCBieSB0aGUgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0bWFwLiBUaGV5IGNhbm5vdCBiZSBhY2Nlc3NlZCB1bmxlc3MgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGlzIHNldCwgd2hpY2ggb25seSBoYXBwZW5zIHdoZW4gYW4gZXh0ZW5zaW9uIGlzIHByb3Blcmx5IGFkZGVkIGFuZCBpbml0aWFsaXplZC5cXG4zLiBXaGVuIGNvcHlpbmcgYW4gZXh0ZW5zaW9uIChgc2tiX2V4dF9tYXliZV9jb3dgKSwgdGhlIGNvZGUgY29waWVzIHRoZSBoZWFkZXIgYW5kIG9ubHkgdGhlIHByZXNlbnQgZXh0ZW5zaW9ucywgbGVhdmluZyB0aGUgdW51c2VkIHNsb3RzIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIG9sZCBiZWhhdmlvciBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cXG40LiBgc2tiX2V4dGAgYW5kIGl0cyBleHRlbnNpb25zIGFyZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyB1c2VkIGZvciBtZXRhZGF0YSAoZS5nLiwgSVBzZWMsIFRDLCBicmlkZ2UgbmV0ZmlsdGVyKSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgaW5jb3JyZWN0IG9mZnNldCBjYWxjdWxhdGlvbnMgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykuIEl0IHJlcGxhY2VzIGR5bmFtaWMgb2Zmc2V0cyB3aXRoIGNvbXBpbGUtdGltZSBmaXhlZCBvZmZzZXRzIGFuZCB1c2VzIGEgYml0bWFwIHRvIHRyYWNrIHByZXNlbnQgZXh0ZW5zaW9ucy4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBleHRlbnNpb25zIGxpa2UgSVBzZWMsIEJyaWRnZSBOZXRmaWx0ZXIsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOIGFyZSBhdHRhY2hlZCB0byBzb2NrZXQgYnVmZmVycy4gSXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgbWVtb3J5IGxheW91dCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU3OjI0LjUxOTQ1ODkzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzODI5ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDhjNmM0MDNmODZmMWFiYTA2YzNiNDkxMmIzMDlhYzM1ZjMzY2VlY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxNjo1NzoyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbmluZGV4IDk1MTg0MTgzMTgwZjYuLjVhNTE0M2U0N2IzMDIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG5AQCAtNTAxMSw0NSArNTAxMSw4MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9uZmN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGxvbmcgbmZjdClcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19TS0JfRVhURU5TSU9OU1xcbi1lbnVtIHNrYl9leHRfaWQge1xcbitcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuLVxcdFNLQl9FWFRfQlJJREdFX05GLFxcbisjZGVmaW5lIFNLQl9FWFRfWF9CUklER0VfTkZcXHRYKFNLQl9FWFRfQlJJREdFX05GLCBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pXFxuKyNlbHNlXFxuKyNkZWZpbmUgU0tCX0VYVF9YX0JSSURHRV9ORlxcbiAjZW5kaWZcXG4tI2lmZGVmIENPTkZJR19YRlJNXFxuLVxcdFNLQl9FWFRfU0VDX1BBVEgsXFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfWEZSTSlcXG4rI2RlZmluZSBTS0JfRVhUX1hfU0VDX1BBVEhcXHRYKFNLQl9FWFRfU0VDX1BBVEgsIHN0cnVjdCBzZWNfcGF0aClcXG4rI2Vsc2VcXG4rI2RlZmluZSBTS0JfRVhUX1hfU0VDX1BBVEhcXG4gI2VuZGlmXFxuK1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpXFxuLVxcdFRDX1NLQl9FWFQsXFxuKyNkZWZpbmUgU0tCX0VYVF9YX1RDXFx0XFx0WChUQ19TS0JfRVhULCBzdHJ1Y3QgdGNfc2tiX2V4dClcXG4rI2Vsc2VcXG4rI2RlZmluZSBTS0JfRVhUX1hfVENcXG4gI2VuZGlmXFxuK1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuLVxcdFNLQl9FWFRfTVBUQ1AsXFxuKyNkZWZpbmUgU0tCX0VYVF9YX01QVENQXFx0XFx0WChTS0JfRVhUX01QVENQLCBzdHJ1Y3QgbXB0Y3BfZXh0KVxcbisjZWxzZVxcbisjZGVmaW5lIFNLQl9FWFRfWF9NUFRDUFxcbiAjZW5kaWZcXG4rXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX0ZMT1dTKVxcbi1cXHRTS0JfRVhUX01DVFAsXFxuKyNkZWZpbmUgU0tCX0VYVF9YX01DVFBcXHRcXHRYKFNLQl9FWFRfTUNUUCwgc3RydWN0IG1jdHBfZmxvdylcXG4rI2Vsc2VcXG4rI2RlZmluZSBTS0JfRVhUX1hfTUNUUFxcbiAjZW5kaWZcXG4rXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG4tXFx0U0tCX0VYVF9QU1AsXFxuKyNkZWZpbmUgU0tCX0VYVF9YX1BTUFxcdFxcdFgoU0tCX0VYVF9QU1AsIHN0cnVjdCBwc3Bfc2tiX2V4dClcXG4rI2Vsc2VcXG4rI2RlZmluZSBTS0JfRVhUX1hfUFNQXFxuICNlbmRpZlxcbitcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTilcXG4tXFx0U0tCX0VYVF9DQU4sXFxuKyNkZWZpbmUgU0tCX0VYVF9YX0NBTlxcdFxcdFgoU0tCX0VYVF9DQU4sIHN0cnVjdCBjYW5fc2tiX2V4dClcXG4rI2Vsc2VcXG4rI2RlZmluZSBTS0JfRVhUX1hfQ0FOXFxuICNlbmRpZlxcbi1cXHRTS0JfRVhUX05VTSwgLyogbXVzdCBiZSBsYXN0ICovXFxuK1xcbisjZGVmaW5lIFNLQl9FWFRfRk9SRUFDSChYKVxcdFxcXFxcXG4rXFx0U0tCX0VYVF9YX0JSSURHRV9ORlxcdFxcXFxcXG4rXFx0U0tCX0VYVF9YX1NFQ19QQVRIXFx0XFxcXFxcbitcXHRTS0JfRVhUX1hfVENcXHRcXHRcXFxcXFxuK1xcdFNLQl9FWFRfWF9NUFRDUFxcdFxcdFxcXFxcXG4rXFx0U0tCX0VYVF9YX01DVFBcXHRcXHRcXFxcXFxuK1xcdFNLQl9FWFRfWF9QU1BcXHRcXHRcXFxcXFxuK1xcdFNLQl9FWFRfWF9DQU5cXG4rXFxuK2VudW0gc2tiX2V4dF9pZCB7XFxuKyNkZWZpbmUgWChpZCwgdHlwZSlcXHRpZCxcXG4rXFx0U0tCX0VYVF9GT1JFQUNIKFgpXFxuKyN1bmRlZiBYXFxuK1xcdFNLQl9FWFRfTlVNLFxcbiB9O1xcbiBcXG4rZXh0ZXJuIGNvbnN0IHU4IHNrYl9leHRfb2Zmc2V0W1NLQl9FWFRfTlVNXTtcXG4rXFxuIC8qKlxcbiAgKlxcdHN0cnVjdCBza2JfZXh0IC0gc2tfYnVmZiBleHRlbnNpb25zXFxuICAqXFx0QHJlZmNudDogMSBvbiBhbGxvY2F0aW9uLCBkZWFsbG9jYXRlZCBvbiAwXFxuLSAqXFx0QG9mZnNldDogb2Zmc2V0IHRvIGFkZCB0byBAZGF0YSB0byBvYnRhaW4gZXh0ZW5zaW9uIGFkZHJlc3NcXG4tICpcXHRAY2h1bmtzOiBzaXplIGN1cnJlbnRseSBhbGxvY2F0ZWQsIHN0b3JlZCBpbiBTS0JfRVhUX0FMSUdOX1NISUZUIHVuaXRzXFxuKyAqXFx0QHByZXNlbnRfZXh0ZW5zaW9uczogYml0bWFwIG9mIGV4dGVuc2lvbnMgc3RvcmVkIGluIEBkYXRhXFxuICAqXFx0QGRhdGE6IHN0YXJ0IG9mIGV4dGVuc2lvbiBkYXRhLCB2YXJpYWJsZSBzaXplZFxcbiAgKlxcbi0gKlxcdE5vdGU6IG9mZnNldHMvbGVuZ3RocyBhcmUgc3RvcmVkIGluIGNodW5rcyBvZiA4IGJ5dGVzLCB0aGlzIGFsbG93c1xcbi0gKlxcdHRvIHVzZSAndTgnIHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aCBvZiBleHRlbnNpb24gZGF0YS5cXG4rICpcXHRFYWNoIGV4dGVuc2lvbiBpZCBvY2N1cGllcyBhIGZpeGVkIHNsb3Qgd2l0aGluIEBkYXRhLCBsb2NhdGVkIGF0XFxuKyAqXFx0c2tiX2V4dF9vZmZzZXRbaWRdIGNodW5rcyBvZiA4IGJ5dGVzLiBTdG9yaW5nIG9mZnNldHMvbGVuZ3Roc1xcbisgKlxcdGluIDgtYnl0ZSBjaHVua3MgYWxsb3dzICd1OCcgdHlwZXMgd2hpbGUgYWxsb3dpbmcgdXAgdG8gMmtiIHdvcnRoXFxuKyAqXFx0b2YgZXh0ZW5zaW9uIGRhdGEuXFxuICAqL1xcbiBzdHJ1Y3Qgc2tiX2V4dCB7XFxuIFxcdHJlZmNvdW50X3QgcmVmY250O1xcbi1cXHR1OCBvZmZzZXRbU0tCX0VYVF9OVU1dOyAvKiBpbiBjaHVua3Mgb2YgOCBieXRlcyAqL1xcbi1cXHR1OCBjaHVua3M7XFx0XFx0Lyogc2FtZSAqL1xcbitcXHR1OCBwcmVzZW50X2V4dGVuc2lvbnM7XFxuIFxcdGNoYXIgZGF0YVtdIF9fYWxpZ25lZCg4KTtcXG4gfTtcXG4gXFxuQEAgLTUwODcsNyArNTEyMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYylcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3NrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGkpXFxuIHtcXG4tXFx0cmV0dXJuICEhZXh0LVxcdTAwM2VvZmZzZXRbaV07XFxuK1xcdHJldHVybiBleHQtXFx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIGkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2V4dF9leGlzdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXFxuQEAgLTUxMDYsNyArNTE0Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2tiX2V4dF9maW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4gXFx0aWYgKHNrYl9leHRfZXhpc3Qoc2tiLCBpZCkpIHtcXG4gXFx0XFx0c3RydWN0IHNrYl9leHQgKmV4dCA9IHNrYi1cXHUwMDNlZXh0ZW5zaW9ucztcXG4gXFxuLVxcdFxcdHJldHVybiAodm9pZCAqKWV4dCArIChleHQtXFx1MDAzZW9mZnNldFtpZF0gXFx1MDAzY1xcdTAwM2MgMyk7XFxuK1xcdFxcdHJldHVybiAodm9pZCAqKWV4dCArIChza2JfZXh0X29mZnNldFtpZF0gXFx1MDAzY1xcdTAwM2MgMyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBOVUxMO1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuaW5kZXggYzgyYTE0NzJhNWVhOC4uOGU1ZGI1Nzk3MjVkMCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuQEAgLTUxMzQsNDcgKzUxMzQsMzIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnQpO1xcbiAjZGVmaW5lIFNLQl9FWFRfQ0hVTktTSVpFT0YoeClcXHQoQUxJR04oKHNpemVvZih4KSksIFNLQl9FWFRfQUxJR05fVkFMVUUpIC8gU0tCX0VYVF9BTElHTl9WQUxVRSlcXG4gXFxuIHN0YXRpYyBjb25zdCB1OCBza2JfZXh0X3R5cGVfbGVuW10gPSB7XFxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbi1cXHRbU0tCX0VYVF9CUklER0VfTkZdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pLFxcbi0jZW5kaWZcXG4tI2lmZGVmIENPTkZJR19YRlJNXFxuLVxcdFtTS0JfRVhUX1NFQ19QQVRIXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHNlY19wYXRoKSxcXG4tI2VuZGlmXFxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVClcXG4tXFx0W1RDX1NLQl9FWFRdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgdGNfc2tiX2V4dCksXFxuLSNlbmRpZlxcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuLVxcdFtTS0JfRVhUX01QVENQXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG1wdGNwX2V4dCksXFxuLSNlbmRpZlxcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUylcXG4tXFx0W1NLQl9FWFRfTUNUUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtY3RwX2Zsb3cpLFxcbi0jZW5kaWZcXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbi1cXHRbU0tCX0VYVF9QU1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgcHNwX3NrYl9leHQpLFxcbi0jZW5kaWZcXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTilcXG4tXFx0W1NLQl9FWFRfQ0FOXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IGNhbl9za2JfZXh0KSxcXG4tI2VuZGlmXFxuKyNkZWZpbmUgWChpZCwgdHlwZSlcXHRbaWRdID0gU0tCX0VYVF9DSFVOS1NJWkVPRih0eXBlKSxcXG4rXFx0U0tCX0VYVF9GT1JFQUNIKFgpXFxuKyN1bmRlZiBYXFxuIH07XFxuIFxcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIF9fbm9fcHJvZmlsZSB1bnNpZ25lZCBpbnQgc2tiX2V4dF90b3RhbF9sZW5ndGgodm9pZClcXG4te1xcbi1cXHR1bnNpZ25lZCBpbnQgbCA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHNrYl9leHQpO1xcbi1cXHRpbnQgaTtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNrYl9leHRfdHlwZV9sZW4pOyBpKyspXFxuLVxcdFxcdGwgKz0gc2tiX2V4dF90eXBlX2xlbltpXTtcXG4rc3RydWN0IHNrYl9leHRfbGF5b3V0IHtcXG4rXFx0dThcXHRoZWFkZXJbc2l6ZW9mKHN0cnVjdCBza2JfZXh0KV0gX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpO1xcbisjZGVmaW5lIFgoaWQsIHR5cGUpXFx0dHlwZSBmXyMjaWQgX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpO1xcbitcXHRTS0JfRVhUX0ZPUkVBQ0goWClcXG4rI3VuZGVmIFhcXG4rfTtcXG4gXFxuLVxcdHJldHVybiBsO1xcbi19XFxuK2NvbnN0IHU4IHNrYl9leHRfb2Zmc2V0W1NLQl9FWFRfTlVNXSA9IHtcXG4rI2RlZmluZSBYKGlkLCB0eXBlKVxcdFtpZF0gPSBvZmZzZXRvZihzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQsIGZfIyNpZCkgLyBTS0JfRVhUX0FMSUdOX1ZBTFVFLFxcbitcXHRTS0JfRVhUX0ZPUkVBQ0goWClcXG4rI3VuZGVmIFhcXG4rfTtcXG4rRVhQT1JUX1NZTUJPTChza2JfZXh0X29mZnNldCk7XFxuIFxcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgX19ub19wcm9maWxlIHNrYl9leHRlbnNpb25zX2luaXQodm9pZClcXG4ge1xcbiBcXHRCVUlMRF9CVUdfT04oU0tCX0VYVF9OVU0gXFx1MDAzZSA4KTtcXG4tXFx0QlVJTERfQlVHX09OKHNrYl9leHRfdG90YWxfbGVuZ3RoKCkgXFx1MDAzZSAyNTUpO1xcbitcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBza2JfZXh0X2xheW91dCkgXFx1MDAzZSAyNTUgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcXG4gXFxuIFxcdHNrYnVmZl9leHRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShcXFwic2tidWZmX2V4dF9jYWNoZVxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgU0tCX0VYVF9BTElHTl9WQUxVRSAqIHNrYl9leHRfdG90YWxfbGVuZ3RoKCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBza2JfZXh0X2xheW91dCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgMCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMKTtcXG5AQCAtNzA4Myw3ICs3MDY4LDcgQEAgRVhQT1JUX1NZTUJPTChza2JfY29uZGVuc2UpO1xcbiAjaWZkZWYgQ09ORklHX1NLQl9FWFRFTlNJT05TXFxuIHN0YXRpYyB2b2lkICpza2JfZXh0X2dldF9wdHIoc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGlkKVxcbiB7XFxuLVxcdHJldHVybiAodm9pZCAqKWV4dCArIChleHQtXFx1MDAzZW9mZnNldFtpZF0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcXG4rXFx0cmV0dXJuICh2b2lkICopZXh0ICsgKHNrYl9leHRfb2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNzEwMCw3ICs3MDg1LDcgQEAgc3RydWN0IHNrYl9leHQgKl9fc2tiX2V4dF9hbGxvYyhnZnBfdCBmbGFncylcXG4gXFx0c3RydWN0IHNrYl9leHQgKm5ldyA9IGttZW1fY2FjaGVfYWxsb2Moc2tidWZmX2V4dF9jYWNoZSwgZmxhZ3MpO1xcbiBcXG4gXFx0aWYgKG5ldykge1xcbi1cXHRcXHRtZW1zZXQobmV3LVxcdTAwM2VvZmZzZXQsIDAsIHNpemVvZihuZXctXFx1MDAzZW9mZnNldCkpO1xcbitcXHRcXHRuZXctXFx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyA9IDA7XFxuIFxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2bmV3LVxcdTAwM2VyZWZjbnQsIDEpO1xcbiBcXHR9XFxuIFxcbkBAIC03MTExLDYgKzcwOTYsNyBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgb2xkX2FjdGl2ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3O1xcbitcXHRpbnQgaTtcXG4gXFxuIFxcdGlmIChyZWZjb3VudF9yZWFkKFxcdTAwMjZvbGQtXFx1MDAzZXJlZmNudCkgPT0gMSlcXG4gXFx0XFx0cmV0dXJuIG9sZDtcXG5AQCAtNzExOSw3ICs3MTA1LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcXG4gXFx0aWYgKCFuZXcpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0bWVtY3B5KG5ldywgb2xkLCBvbGQtXFx1MDAzZWNodW5rcyAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xcbitcXHRtZW1jcHkobmV3LCBvbGQsIFNLQl9FWFRfQ0hVTktTSVpFT0YoKm9sZCkgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFNLQl9FWFRfTlVNOyBpKyspIHtcXG4rXFx0XFx0aWYgKG9sZC1cXHUwMDNlcHJlc2VudF9leHRlbnNpb25zIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2MgaSkpXFxuK1xcdFxcdFxcdG1lbWNweShza2JfZXh0X2dldF9wdHIobmV3LCBpKSwgc2tiX2V4dF9nZXRfcHRyKG9sZCwgaSksXFxuK1xcdFxcdFxcdCAgICAgICBza2JfZXh0X3R5cGVfbGVuW2ldICogU0tCX0VYVF9BTElHTl9WQUxVRSk7XFxuK1xcdH1cXG4gXFx0cmVmY291bnRfc2V0KFxcdTAwMjZuZXctXFx1MDAzZXJlZmNudCwgMSk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1hGUk1cXG5AQCAtNzE1NiwxMiArNzE0Nyw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcXG4gdm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBuZXdsZW4sIG5ld29mZiA9IFNLQl9FWFRfQ0hVTktTSVpFT0YoKmV4dCk7XFxuLVxcbiBcXHRza2JfZXh0X3B1dChza2IpO1xcbi1cXHRuZXdsZW4gPSBuZXdvZmYgKyBza2JfZXh0X3R5cGVfbGVuW2lkXTtcXG4tXFx0ZXh0LVxcdTAwM2VjaHVua3MgPSBuZXdsZW47XFxuLVxcdGV4dC1cXHUwMDNlb2Zmc2V0W2lkXSA9IG5ld29mZjtcXG4rXFx0ZXh0LVxcdTAwM2VwcmVzZW50X2V4dGVuc2lvbnMgPSAxIFxcdTAwM2NcXHUwMDNjIGlkO1xcbiBcXHRza2ItXFx1MDAzZWV4dGVuc2lvbnMgPSBleHQ7XFxuIFxcdHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPSAxIFxcdTAwM2NcXHUwMDNjIGlkO1xcbiBcXHRyZXR1cm4gc2tiX2V4dF9nZXRfcHRyKGV4dCwgaWQpO1xcbkBAIC03MTg0LDMxICs3MTcxLDIzIEBAIEVYUE9SVF9TWU1CT0xfTlNfR1BMKF9fc2tiX2V4dF9zZXQsIFxcXCJORVRERVZfSU5URVJOQUxcXFwiKTtcXG4gICovXFxuIHZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4ge1xcbi1cXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3LCAqb2xkID0gTlVMTDtcXG4tXFx0dW5zaWduZWQgaW50IG5ld2xlbiwgbmV3b2ZmO1xcbitcXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3O1xcbiBcXG4gXFx0aWYgKHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpIHtcXG4tXFx0XFx0b2xkID0gc2tiLVxcdTAwM2VleHRlbnNpb25zO1xcbi1cXG4tXFx0XFx0bmV3ID0gc2tiX2V4dF9tYXliZV9jb3cob2xkLCBza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKTtcXG4rXFx0XFx0bmV3ID0gc2tiX2V4dF9tYXliZV9jb3coc2tiLVxcdTAwM2VleHRlbnNpb25zLFxcbitcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKTtcXG4gXFx0XFx0aWYgKCFuZXcpXFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0XFx0aWYgKF9fc2tiX2V4dF9leGlzdChuZXcsIGlkKSlcXG4gXFx0XFx0XFx0Z290byBzZXRfYWN0aXZlO1xcbi1cXG4tXFx0XFx0bmV3b2ZmID0gbmV3LVxcdTAwM2VjaHVua3M7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdG5ld29mZiA9IFNLQl9FWFRfQ0hVTktTSVpFT0YoKm5ldyk7XFxuLVxcbiBcXHRcXHRuZXcgPSBfX3NrYl9leHRfYWxsb2MoR0ZQX0FUT01JQyk7XFxuIFxcdFxcdGlmICghbmV3KVxcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0bmV3bGVuID0gbmV3b2ZmICsgc2tiX2V4dF90eXBlX2xlbltpZF07XFxuLVxcdG5ldy1cXHUwMDNlY2h1bmtzID0gbmV3bGVuO1xcbi1cXHRuZXctXFx1MDAzZW9mZnNldFtpZF0gPSBuZXdvZmY7XFxuK1xcdG5ldy1cXHUwMDNlcHJlc2VudF9leHRlbnNpb25zIHw9IDEgXFx1MDAzY1xcdTAwM2MgaWQ7XFxuIHNldF9hY3RpdmU6XFxuIFxcdHNrYi1cXHUwMDNlc2xvd19ncm8gPSAxO1xcbiBcXHRza2ItXFx1MDAzZWV4dGVuc2lvbnMgPSBuZXc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU3OjI0LjkwMzk1MzYxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIzNjIxNzQ5MDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJCUklER0VfTkVURklMVEVSXCIsXG4gICAgXCJDQU5cIixcbiAgICBcIk1DVFBcIixcbiAgICBcIkkyQ1wiLFxuICAgIFwiSTJDX1NMQVZFXCIsXG4gICAgXCJNQ1RQX1RSQU5TUE9SVF9JMkNcIixcbiAgICBcIklORVRcIixcbiAgICBcIk1QVENQXCIsXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9UQ19TS0JfRVhUXCIsXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfZXh0X2FkZFwiLFxuICAgIFwiX19za2JfZXh0X3NldFwiLFxuICAgIFwiX19za2JfZXh0X2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgYHNrYl9leHRgIChza19idWZmIGV4dGVuc2lvbnMpLiBJdCByZXBsYWNlcyBkeW5hbWljIG9mZnNldHMgd2l0aCBjb21waWxlLXRpbWUgZml4ZWQgb2Zmc2V0cyBhbmQgdXNlcyBhIGJpdG1hcCB0byB0cmFjayBwcmVzZW50IGV4dGVuc2lvbnMuIFRoaXMgaXMgYSBjb3JlIG5ldHdvcmtpbmcgY2hhbmdlIGFmZmVjdGluZyBob3cgZXh0ZW5zaW9ucyBsaWtlIElQc2VjLCBCcmlkZ2UgTmV0ZmlsdGVyLCBUQywgTVBUQ1AsIE1DVFAsIFBTUCwgYW5kIENBTiBhcmUgYXR0YWNoZWQgdG8gc29ja2V0IGJ1ZmZlcnMuIEl0IGlzIGhpZ2hseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgZXhlY3V0aW9uIGZsb3cgYW5kIG1lbW9yeSBsYXlvdXQsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkOGM2YzQwM2Y4NmYxYWJhMDZjM2I0OTEyYjMwOWFjMzVmMzNjZWVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTY6NTc6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuaW5kZXggOTUxODQxODMxODBmNi4uNWE1MTQzZTQ3YjMwMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbkBAIC01MDExLDQ1ICs1MDExLDgxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X25mY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgbG9uZyBuZmN0KVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1NLQl9FWFRFTlNJT05TXG4tZW51bSBza2JfZXh0X2lkIHtcbitcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbi1cdFNLQl9FWFRfQlJJREdFX05GLFxuKyNkZWZpbmUgU0tCX0VYVF9YX0JSSURHRV9ORlx0WChTS0JfRVhUX0JSSURHRV9ORiwgc3RydWN0IG5mX2JyaWRnZV9pbmZvKVxuKyNlbHNlXG4rI2RlZmluZSBTS0JfRVhUX1hfQlJJREdFX05GXG4gI2VuZGlmXG4tI2lmZGVmIENPTkZJR19YRlJNXG4tXHRTS0JfRVhUX1NFQ19QQVRILFxuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19YRlJNKVxuKyNkZWZpbmUgU0tCX0VYVF9YX1NFQ19QQVRIXHRYKFNLQl9FWFRfU0VDX1BBVEgsIHN0cnVjdCBzZWNfcGF0aClcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX1NFQ19QQVRIXG4gI2VuZGlmXG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKVxuLVx0VENfU0tCX0VYVCxcbisjZGVmaW5lIFNLQl9FWFRfWF9UQ1x0XHRYKFRDX1NLQl9FWFQsIHN0cnVjdCB0Y19za2JfZXh0KVxuKyNlbHNlXG4rI2RlZmluZSBTS0JfRVhUX1hfVENcbiAjZW5kaWZcbitcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG4tXHRTS0JfRVhUX01QVENQLFxuKyNkZWZpbmUgU0tCX0VYVF9YX01QVENQXHRcdFgoU0tCX0VYVF9NUFRDUCwgc3RydWN0IG1wdGNwX2V4dClcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX01QVENQXG4gI2VuZGlmXG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01DVFBfRkxPV1MpXG4tXHRTS0JfRVhUX01DVFAsXG4rI2RlZmluZSBTS0JfRVhUX1hfTUNUUFx0XHRYKFNLQl9FWFRfTUNUUCwgc3RydWN0IG1jdHBfZmxvdylcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX01DVFBcbiAjZW5kaWZcbitcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG4tXHRTS0JfRVhUX1BTUCxcbisjZGVmaW5lIFNLQl9FWFRfWF9QU1BcdFx0WChTS0JfRVhUX1BTUCwgc3RydWN0IHBzcF9za2JfZXh0KVxuKyNlbHNlXG4rI2RlZmluZSBTS0JfRVhUX1hfUFNQXG4gI2VuZGlmXG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTilcbi1cdFNLQl9FWFRfQ0FOLFxuKyNkZWZpbmUgU0tCX0VYVF9YX0NBTlx0XHRYKFNLQl9FWFRfQ0FOLCBzdHJ1Y3QgY2FuX3NrYl9leHQpXG4rI2Vsc2VcbisjZGVmaW5lIFNLQl9FWFRfWF9DQU5cbiAjZW5kaWZcbi1cdFNLQl9FWFRfTlVNLCAvKiBtdXN0IGJlIGxhc3QgKi9cbitcbisjZGVmaW5lIFNLQl9FWFRfRk9SRUFDSChYKVx0XFxcbitcdFNLQl9FWFRfWF9CUklER0VfTkZcdFxcXG4rXHRTS0JfRVhUX1hfU0VDX1BBVEhcdFxcXG4rXHRTS0JfRVhUX1hfVENcdFx0XFxcbitcdFNLQl9FWFRfWF9NUFRDUFx0XHRcXFxuK1x0U0tCX0VYVF9YX01DVFBcdFx0XFxcbitcdFNLQl9FWFRfWF9QU1BcdFx0XFxcbitcdFNLQl9FWFRfWF9DQU5cbitcbitlbnVtIHNrYl9leHRfaWQge1xuKyNkZWZpbmUgWChpZCwgdHlwZSlcdGlkLFxuK1x0U0tCX0VYVF9GT1JFQUNIKFgpXG4rI3VuZGVmIFhcbitcdFNLQl9FWFRfTlVNLFxuIH07XG4gXG4rZXh0ZXJuIGNvbnN0IHU4IHNrYl9leHRfb2Zmc2V0W1NLQl9FWFRfTlVNXTtcbitcbiAvKipcbiAgKlx0c3RydWN0IHNrYl9leHQgLSBza19idWZmIGV4dGVuc2lvbnNcbiAgKlx0QHJlZmNudDogMSBvbiBhbGxvY2F0aW9uLCBkZWFsbG9jYXRlZCBvbiAwXG4tICpcdEBvZmZzZXQ6IG9mZnNldCB0byBhZGQgdG8gQGRhdGEgdG8gb2J0YWluIGV4dGVuc2lvbiBhZGRyZXNzXG4tICpcdEBjaHVua3M6IHNpemUgY3VycmVudGx5IGFsbG9jYXRlZCwgc3RvcmVkIGluIFNLQl9FWFRfQUxJR05fU0hJRlQgdW5pdHNcbisgKlx0QHByZXNlbnRfZXh0ZW5zaW9uczogYml0bWFwIG9mIGV4dGVuc2lvbnMgc3RvcmVkIGluIEBkYXRhXG4gICpcdEBkYXRhOiBzdGFydCBvZiBleHRlbnNpb24gZGF0YSwgdmFyaWFibGUgc2l6ZWRcbiAgKlxuLSAqXHROb3RlOiBvZmZzZXRzL2xlbmd0aHMgYXJlIHN0b3JlZCBpbiBjaHVua3Mgb2YgOCBieXRlcywgdGhpcyBhbGxvd3Ncbi0gKlx0dG8gdXNlICd1OCcgdHlwZXMgd2hpbGUgYWxsb3dpbmcgdXAgdG8gMmtiIHdvcnRoIG9mIGV4dGVuc2lvbiBkYXRhLlxuKyAqXHRFYWNoIGV4dGVuc2lvbiBpZCBvY2N1cGllcyBhIGZpeGVkIHNsb3Qgd2l0aGluIEBkYXRhLCBsb2NhdGVkIGF0XG4rICpcdHNrYl9leHRfb2Zmc2V0W2lkXSBjaHVua3Mgb2YgOCBieXRlcy4gU3RvcmluZyBvZmZzZXRzL2xlbmd0aHNcbisgKlx0aW4gOC1ieXRlIGNodW5rcyBhbGxvd3MgJ3U4JyB0eXBlcyB3aGlsZSBhbGxvd2luZyB1cCB0byAya2Igd29ydGhcbisgKlx0b2YgZXh0ZW5zaW9uIGRhdGEuXG4gICovXG4gc3RydWN0IHNrYl9leHQge1xuIFx0cmVmY291bnRfdCByZWZjbnQ7XG4tXHR1OCBvZmZzZXRbU0tCX0VYVF9OVU1dOyAvKiBpbiBjaHVua3Mgb2YgOCBieXRlcyAqL1xuLVx0dTggY2h1bmtzO1x0XHQvKiBzYW1lICovXG4rXHR1OCBwcmVzZW50X2V4dGVuc2lvbnM7XG4gXHRjaGFyIGRhdGFbXSBfX2FsaWduZWQoOCk7XG4gfTtcbiBcbkBAIC01MDg3LDcgKzUxMjMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9jb3B5KHN0cnVjdCBza19idWZmICpkc3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpzcmMpXG4gXG4gc3RhdGljIGlubGluZSBib29sIF9fc2tiX2V4dF9leGlzdChjb25zdCBzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaSlcbiB7XG4tXHRyZXR1cm4gISFleHQtXHUwMDNlb2Zmc2V0W2ldO1xuK1x0cmV0dXJuIGV4dC1cdTAwM2VwcmVzZW50X2V4dGVuc2lvbnMgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIHNrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxuQEAgLTUxMDYsNyArNTE0Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2tiX2V4dF9maW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbiBcdGlmIChza2JfZXh0X2V4aXN0KHNrYiwgaWQpKSB7XG4gXHRcdHN0cnVjdCBza2JfZXh0ICpleHQgPSBza2ItXHUwMDNlZXh0ZW5zaW9ucztcbiBcbi1cdFx0cmV0dXJuICh2b2lkICopZXh0ICsgKGV4dC1cdTAwM2VvZmZzZXRbaWRdIFx1MDAzY1x1MDAzYyAzKTtcbitcdFx0cmV0dXJuICh2b2lkICopZXh0ICsgKHNrYl9leHRfb2Zmc2V0W2lkXSBcdTAwM2NcdTAwM2MgMyk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBjODJhMTQ3MmE1ZWE4Li44ZTVkYjU3OTcyNWQwIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtNTEzNCw0NyArNTEzNCwzMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudCk7XG4gI2RlZmluZSBTS0JfRVhUX0NIVU5LU0laRU9GKHgpXHQoQUxJR04oKHNpemVvZih4KSksIFNLQl9FWFRfQUxJR05fVkFMVUUpIC8gU0tCX0VYVF9BTElHTl9WQUxVRSlcbiBcbiBzdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xuLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuLVx0W1NLQl9FWFRfQlJJREdFX05GXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG5mX2JyaWRnZV9pbmZvKSxcbi0jZW5kaWZcbi0jaWZkZWYgQ09ORklHX1hGUk1cbi1cdFtTS0JfRVhUX1NFQ19QQVRIXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IHNlY19wYXRoKSxcbi0jZW5kaWZcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1RDX1NLQl9FWFQpXG4tXHRbVENfU0tCX0VYVF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCB0Y19za2JfZXh0KSxcbi0jZW5kaWZcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG4tXHRbU0tCX0VYVF9NUFRDUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtcHRjcF9leHQpLFxuLSNlbmRpZlxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX0ZMT1dTKVxuLVx0W1NLQl9FWFRfTUNUUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBtY3RwX2Zsb3cpLFxuLSNlbmRpZlxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbi1cdFtTS0JfRVhUX1BTUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBwc3Bfc2tiX2V4dCksXG4tI2VuZGlmXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTilcbi1cdFtTS0JfRVhUX0NBTl0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBjYW5fc2tiX2V4dCksXG4tI2VuZGlmXG4rI2RlZmluZSBYKGlkLCB0eXBlKVx0W2lkXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0YodHlwZSksXG4rXHRTS0JfRVhUX0ZPUkVBQ0goWClcbisjdW5kZWYgWFxuIH07XG4gXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX25vX3Byb2ZpbGUgdW5zaWduZWQgaW50IHNrYl9leHRfdG90YWxfbGVuZ3RoKHZvaWQpXG4te1xuLVx0dW5zaWduZWQgaW50IGwgPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBza2JfZXh0KTtcbi1cdGludCBpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShza2JfZXh0X3R5cGVfbGVuKTsgaSsrKVxuLVx0XHRsICs9IHNrYl9leHRfdHlwZV9sZW5baV07XG4rc3RydWN0IHNrYl9leHRfbGF5b3V0IHtcbitcdHU4XHRoZWFkZXJbc2l6ZW9mKHN0cnVjdCBza2JfZXh0KV0gX19hbGlnbmVkKFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuKyNkZWZpbmUgWChpZCwgdHlwZSlcdHR5cGUgZl8jI2lkIF9fYWxpZ25lZChTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbitcdFNLQl9FWFRfRk9SRUFDSChYKVxuKyN1bmRlZiBYXG4rfTtcbiBcbi1cdHJldHVybiBsO1xuLX1cbitjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV0gPSB7XG4rI2RlZmluZSBYKGlkLCB0eXBlKVx0W2lkXSA9IG9mZnNldG9mKHN0cnVjdCBza2JfZXh0X2xheW91dCwgZl8jI2lkKSAvIFNLQl9FWFRfQUxJR05fVkFMVUUsXG4rXHRTS0JfRVhUX0ZPUkVBQ0goWClcbisjdW5kZWYgWFxuK307XG4rRVhQT1JUX1NZTUJPTChza2JfZXh0X29mZnNldCk7XG4gXG4gc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IF9fbm9fcHJvZmlsZSBza2JfZXh0ZW5zaW9uc19pbml0KHZvaWQpXG4ge1xuIFx0QlVJTERfQlVHX09OKFNLQl9FWFRfTlVNIFx1MDAzZSA4KTtcbi1cdEJVSUxEX0JVR19PTihza2JfZXh0X3RvdGFsX2xlbmd0aCgpIFx1MDAzZSAyNTUpO1xuK1x0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQpIFx1MDAzZSAyNTUgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbiBcbiBcdHNrYnVmZl9leHRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShcInNrYnVmZl9leHRfY2FjaGVcIixcbi1cdFx0XHRcdFx0ICAgICBTS0JfRVhUX0FMSUdOX1ZBTFVFICogc2tiX2V4dF90b3RhbF9sZW5ndGgoKSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0KSxcbiBcdFx0XHRcdFx0ICAgICAwLFxuIFx0XHRcdFx0XHQgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLFxuIFx0XHRcdFx0XHQgICAgIE5VTEwpO1xuQEAgLTcwODMsNyArNzA2OCw3IEBAIEVYUE9SVF9TWU1CT0woc2tiX2NvbmRlbnNlKTtcbiAjaWZkZWYgQ09ORklHX1NLQl9FWFRFTlNJT05TXG4gc3RhdGljIHZvaWQgKnNrYl9leHRfZ2V0X3B0cihzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaWQpXG4ge1xuLVx0cmV0dXJuICh2b2lkICopZXh0ICsgKGV4dC1cdTAwM2VvZmZzZXRbaWRdICogU0tCX0VYVF9BTElHTl9WQUxVRSk7XG4rXHRyZXR1cm4gKHZvaWQgKilleHQgKyAoc2tiX2V4dF9vZmZzZXRbaWRdICogU0tCX0VYVF9BTElHTl9WQUxVRSk7XG4gfVxuIFxuIC8qKlxuQEAgLTcxMDAsNyArNzA4NSw3IEBAIHN0cnVjdCBza2JfZXh0ICpfX3NrYl9leHRfYWxsb2MoZ2ZwX3QgZmxhZ3MpXG4gXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3ID0ga21lbV9jYWNoZV9hbGxvYyhza2J1ZmZfZXh0X2NhY2hlLCBmbGFncyk7XG4gXG4gXHRpZiAobmV3KSB7XG4tXHRcdG1lbXNldChuZXctXHUwMDNlb2Zmc2V0LCAwLCBzaXplb2YobmV3LVx1MDAzZW9mZnNldCkpO1xuK1x0XHRuZXctXHUwMDNlcHJlc2VudF9leHRlbnNpb25zID0gMDtcbiBcdFx0cmVmY291bnRfc2V0KFx1MDAyNm5ldy1cdTAwM2VyZWZjbnQsIDEpO1xuIFx0fVxuIFxuQEAgLTcxMTEsNiArNzA5Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBvbGRfYWN0aXZlKVxuIHtcbiBcdHN0cnVjdCBza2JfZXh0ICpuZXc7XG4rXHRpbnQgaTtcbiBcbiBcdGlmIChyZWZjb3VudF9yZWFkKFx1MDAyNm9sZC1cdTAwM2VyZWZjbnQpID09IDEpXG4gXHRcdHJldHVybiBvbGQ7XG5AQCAtNzExOSw3ICs3MTA1LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdG1lbWNweShuZXcsIG9sZCwgb2xkLVx1MDAzZWNodW5rcyAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuK1x0bWVtY3B5KG5ldywgb2xkLCBTS0JfRVhUX0NIVU5LU0laRU9GKCpvbGQpICogU0tCX0VYVF9BTElHTl9WQUxVRSk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTS0JfRVhUX05VTTsgaSsrKSB7XG4rXHRcdGlmIChvbGQtXHUwMDNlcHJlc2VudF9leHRlbnNpb25zIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgaSkpXG4rXHRcdFx0bWVtY3B5KHNrYl9leHRfZ2V0X3B0cihuZXcsIGkpLCBza2JfZXh0X2dldF9wdHIob2xkLCBpKSxcbitcdFx0XHQgICAgICAgc2tiX2V4dF90eXBlX2xlbltpXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuK1x0fVxuIFx0cmVmY291bnRfc2V0KFx1MDAyNm5ldy1cdTAwM2VyZWZjbnQsIDEpO1xuIFxuICNpZmRlZiBDT05GSUdfWEZSTVxuQEAgLTcxNTYsMTIgKzcxNDcsOCBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4gdm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXG4gXHRcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBuZXdsZW4sIG5ld29mZiA9IFNLQl9FWFRfQ0hVTktTSVpFT0YoKmV4dCk7XG4tXG4gXHRza2JfZXh0X3B1dChza2IpO1xuLVx0bmV3bGVuID0gbmV3b2ZmICsgc2tiX2V4dF90eXBlX2xlbltpZF07XG4tXHRleHQtXHUwMDNlY2h1bmtzID0gbmV3bGVuO1xuLVx0ZXh0LVx1MDAzZW9mZnNldFtpZF0gPSBuZXdvZmY7XG4rXHRleHQtXHUwMDNlcHJlc2VudF9leHRlbnNpb25zID0gMSBcdTAwM2NcdTAwM2MgaWQ7XG4gXHRza2ItXHUwMDNlZXh0ZW5zaW9ucyA9IGV4dDtcbiBcdHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyA9IDEgXHUwMDNjXHUwMDNjIGlkO1xuIFx0cmV0dXJuIHNrYl9leHRfZ2V0X3B0cihleHQsIGlkKTtcbkBAIC03MTg0LDMxICs3MTcxLDIzIEBAIEVYUE9SVF9TWU1CT0xfTlNfR1BMKF9fc2tiX2V4dF9zZXQsIFwiTkVUREVWX0lOVEVSTkFMXCIpO1xuICAqL1xuIHZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbiB7XG4tXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3LCAqb2xkID0gTlVMTDtcbi1cdHVuc2lnbmVkIGludCBuZXdsZW4sIG5ld29mZjtcbitcdHN0cnVjdCBza2JfZXh0ICpuZXc7XG4gXG4gXHRpZiAoc2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKSB7XG4tXHRcdG9sZCA9IHNrYi1cdTAwM2VleHRlbnNpb25zO1xuLVxuLVx0XHRuZXcgPSBza2JfZXh0X21heWJlX2NvdyhvbGQsIHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyk7XG4rXHRcdG5ldyA9IHNrYl9leHRfbWF5YmVfY293KHNrYi1cdTAwM2VleHRlbnNpb25zLFxuK1x0XHRcdFx0XHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpO1xuIFx0XHRpZiAoIW5ldylcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdFx0aWYgKF9fc2tiX2V4dF9leGlzdChuZXcsIGlkKSlcbiBcdFx0XHRnb3RvIHNldF9hY3RpdmU7XG4tXG4tXHRcdG5ld29mZiA9IG5ldy1cdTAwM2VjaHVua3M7XG4gXHR9IGVsc2Uge1xuLVx0XHRuZXdvZmYgPSBTS0JfRVhUX0NIVU5LU0laRU9GKCpuZXcpO1xuLVxuIFx0XHRuZXcgPSBfX3NrYl9leHRfYWxsb2MoR0ZQX0FUT01JQyk7XG4gXHRcdGlmICghbmV3KVxuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0bmV3bGVuID0gbmV3b2ZmICsgc2tiX2V4dF90eXBlX2xlbltpZF07XG4tXHRuZXctXHUwMDNlY2h1bmtzID0gbmV3bGVuO1xuLVx0bmV3LVx1MDAzZW9mZnNldFtpZF0gPSBuZXdvZmY7XG4rXHRuZXctXHUwMDNlcHJlc2VudF9leHRlbnNpb25zIHw9IDEgXHUwMDNjXHUwMDNjIGlkO1xuIHNldF9hY3RpdmU6XG4gXHRza2ItXHUwMDNlc2xvd19ncm8gPSAxO1xuIFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBuZXc7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1NzoyNC45MDM5NTQ5MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDIyNzI2MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBTS0IgRXh0ZW5zaW9uIExheW91dCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gbG9vayBhdCBjbG9zZWx5LiBUaGUgY2hhbmdlcyB0byBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAgYW5kIGBuZXQvY29yZS9za2J1ZmYuY2AgYXJlIHNpZ25pZmljYW50LiBJdCBsb29rcyBsaWtlIHRoZSB3YXkgYHNrYl9leHRgICh0aGUgc2tfYnVmZiBleHRlbnNpb25zKSBhcmUgaGFuZGxlZCBoYXMgYmVlbiBmdW5kYW1lbnRhbGx5IGFsdGVyZWQuIFByZXZpb3VzbHksIHRoZSBleHRlbnNpb25zIHdlcmUgYWxsb2NhdGVkIGFuZCBhcnJhbmdlZCBkeW5hbWljYWxseSwgd2l0aCBvZmZzZXRzIHN0b3JlZCBpbiBgZXh0LVx1MDAzZW9mZnNldFtpZF1gLiBOb3csIHdlJ3JlIHNlZWluZyBhIGZpeGVkIGxheW91dCBkZWZpbmVkIGJ5IGBzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXRgIGF0IGNvbXBpbGUgdGltZSwgYW5kIHN0YXRpYyBvZmZzZXRzIChgc2tiX2V4dF9vZmZzZXRbaWRdYCkuIFJlcGxhY2luZyB0aGUgYG9mZnNldGAgYXJyYXkgd2l0aCBhIGBwcmVzZW50X2V4dGVuc2lvbnNgIGJpdG1hcCBpcyBhbHNvIGEgcHJldHR5IG1ham9yIHNoaWZ0LlxuXG5UaGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGNoYW5nZSwgbm8gcXVlc3Rpb24uIFRoZSBmYWN0IHRoYXQgaXQgYWZmZWN0cyBmdW5jdGlvbnMgbGlrZSBgc2tiX2V4dF9hZGRgLCBgX19za2JfZXh0X3NldGAsIGFuZCBgc2tiX2V4dF9tYXliZV9jb3dgIHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gY2hhbmdlIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgdGhlIG1lbW9yeSBsYXlvdXQgb2YgaG93IHRoZXNlIGV4dGVuc2lvbnMgYXJlIGFjY2Vzc2VkIGFuZCBtYW5pcHVsYXRlZC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgaXMgdGhpcyByZWFjaGFibGU/IEl0IGxvb2tzIGxpa2UgaXQgaXMsIGBza2JfZXh0X2FkZGAgaXMgdXNlZCBpbiBhIHdob2xlIGJ1bmNoIG9mIHBsYWNlcyB3aGVuIHdlIGFkZCBleHRlbnNpb25zIGxpa2UgU0VDX1BBVEgsIEJSSURHRV9ORiwgVEMsIE1QVENQLCBNQ1RQLCBQU1AsIGFuZCBDQU4uIEV4Y2VsbGVudCEgVGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gT2J2aW91c2x5LCBgc2tiX2V4dF9hZGRgIGlzIGNyaXRpY2FsLiBBbHNvLCBgX19za2JfZXh0X3NldGAgZGVmaW5pdGVseS4gYHNrYl9leHRfbWF5YmVfY293YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBzbyB3ZSBtaWdodCBub3QgYmUgYWJsZSB0byBmdXp6IGl0IGRpcmVjdGx5LCBidXQgYHNrYl9leHRfYWRkYCBjYWxscyBpdCBzbyB3ZSdsbCBoYXZlIHRvIGNvbnNpZGVyIHRoYXQuIFBlcmhhcHMgYF9fc2tiX2V4dF9hbGxvY2AgdG9vLCBhbmQgdGhlIGlubGluZSBgc2tiX2V4dF9jb3B5YC5cblxuVGltZSB0byBkaWcgaW50byBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbiBgc2tiX2V4dF9hZGRgIGFuZCBgX19za2JfZXh0X3NldGAuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGVyZSBgc2tiX2V4dF9hZGRgIGlzIGFjdHVhbGx5IHVzZWQuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU3OjM0LjMyNjY4Mzk4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE0OTU5OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9leHRfYWRkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MjE1PXN0cnVjdCBza19idWZmICphbGxvY19jYW5fc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fZnJhbWUgKipjZilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjIzLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MjI0OlxcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjI1LVxcdGlmICghY3N4KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jPTI0NT1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuZmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI1NC1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI1NTpcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI1Ni1cXHRpZiAoIWNzeCkge1xcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYz0yNzk9c3RydWN0IHNrX2J1ZmYgKmFsbG9jX2NhbnhsX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTItXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoyOTM6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTQtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MzM0PXN0YXRpYyBib29sIGNhbl9za2JfaW5pdF92YWxpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0zNDEtXFx0XFx0aWYgKCFjc3gpIHtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjM0MjpcXHRcXHRcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTM0My1cXHRcXHRcXHRpZiAoIWNzeClcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jPTM5PXN0YXRpYyBuZXRkZXZfdHhfdCB2eGNhbl94bWl0KHN0cnVjdCBza19idWZmICpvc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNjktXFx0LyogdGhlIGNsb25lZCBza2IgcG9pbnRzIHRvIHRoZSBza2IgZXh0ZW5zaW9uIG9mIHRoZSBhbHJlYWR5IGNsb25lZFxcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjcwOlxcdCAqIG9za2Igd2l0aCBhbiBpbmNyZWFzZWQgcmVmY291bnQuIHNrYl9leHRfYWRkKCkgY3JlYXRlcyBhIGNvcHkgdG9cXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy03MS1cXHQgKiBzZXBhcmF0ZSB0aGUgc2tiIGV4dGVuc2lvbiBkYXRhIHdoaWNoIGlzIG5lZWRlZCB0byBzdGFydCB3aXRoIGFcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTczLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjc0OlxcdGNzeCA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9DQU4pO1xcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTc1LVxcdGlmICghY3N4KSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaD0zOT1ib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oLTQwLVxcbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oOjQxOnN0YXRpYyBpbmxpbmUgc3RydWN0IGNhbl9za2JfZXh0ICpjYW5fc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00Mi17XFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NDM6XFx0c3RydWN0IGNhbl9za2JfZXh0ICpjc3ggPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQ0FOKTtcXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00NC1cXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo0NTpcXHQvKiBza2JfZXh0X2FkZCgpIHJldHVybnMgdW5pbml0aWFsaXplZCBzcGFjZSAqL1xcbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oLTQ2LVxcdGlmIChjc3gpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwOTM9dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDk0LVxcdFxcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTU6dm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTYtdm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg9OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtMTEtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oOjEyOlxcdHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqYiA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC0xMy1cXG4tLVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaD03ODc9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGNfc2tiX2V4dCAqdGNfc2tiX2V4dF9hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC03ODgte1xcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDo3ODk6XFx0c3RydWN0IHRjX3NrYl9leHQgKnRjX3NrYl9leHQgPSBza2JfZXh0X2FkZChza2IsIFRDX1NLQl9FWFQpO1xcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC03OTAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTE2OD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX3Vuc2hhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE2OS17XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNzA6XFx0cmV0dXJuIHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTcxLX1cXG4tLVxcbm5ldC9jYW4vYmNtLmM9MzIxPXN0YXRpYyB2b2lkIGJjbV9jYW5fdHgoc3RydWN0IGJjbV9vcCAqb3AsIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YpXFxuLS1cXG5uZXQvY2FuL2JjbS5jLTM1My1cXG5uZXQvY2FuL2JjbS5jOjM1NDpcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5uZXQvY2FuL2JjbS5jLTM1NS1cXHRpZiAoIWNzeCkge1xcbi0tXFxubmV0L2Nhbi9iY20uYz0xNjAyPXN0YXRpYyBpbnQgYmNtX3R4X3NlbmQoc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgaWZpbmRleCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2Nhbi9iY20uYy0xNjE3LVxcbm5ldC9jYW4vYmNtLmM6MTYxODpcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5uZXQvY2FuL2JjbS5jLTE2MTktXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jYW4vZ3cuYz00NTg9c3RhdGljIHZvaWQgY2FuX2Nhbl9nd19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9jYW4vZ3cuYy01MTYtXFx0LyogdGhlIGNsb25lZC9jb3BpZWQgbnNrYiBwb2ludHMgdG8gdGhlIHNrYiBleHRlbnNpb24gb2YgdGhlIG9yaWdpbmFsXFxubmV0L2Nhbi9ndy5jOjUxNzpcXHQgKiBza2Igd2l0aCBhbiBpbmNyZWFzZWQgcmVmY291bnQuIHNrYl9leHRfYWRkKCkgY3JlYXRlcyBhIGNvcHkgdG9cXG5uZXQvY2FuL2d3LmMtNTE4LVxcdCAqIHNlcGFyYXRlIHRoZSBza2IgZXh0ZW5zaW9uIGRhdGEgdG8gbW9kaWZ5IHRoZSBjYW5fZ3dfaG9wcy5cXG5uZXQvY2FuL2d3LmMtNTE5LVxcdCAqL1xcbm5ldC9jYW4vZ3cuYzo1MjA6XFx0bmNzeCA9IHNrYl9leHRfYWRkKG5za2IsIFNLQl9FWFRfQ0FOKTtcXG5uZXQvY2FuL2d3LmMtNTIxLVxcdGlmICghbmNzeCkge1xcbi0tXFxubmV0L2Nhbi9pc290cC5jPTI4Nj1zdGF0aWMgaW50IGlzb3RwX3NlbmRfZmMoc3RydWN0IHNvY2sgKnNrLCBpbnQgYWUsIHU4IGZsb3dzdGF0dXMpXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtMjk4LVxcbm5ldC9jYW4vaXNvdHAuYzoyOTk6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKG5za2IpO1xcbm5ldC9jYW4vaXNvdHAuYy0zMDAtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYz04NjM9c3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTg4My1cXG5uZXQvY2FuL2lzb3RwLmM6ODg0OlxcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xcbm5ldC9jYW4vaXNvdHAuYy04ODUtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYz0xMTA0PXN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTEyMTMtXFxubmV0L2Nhbi9pc290cC5jOjEyMTQ6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxubmV0L2Nhbi9pc290cC5jLTEyMTUtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM9ODgxPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqajE5Mzlfc2tfYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy04OTktXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYzo5MDA6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy05MDEtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmM9NjAxPXNrX2J1ZmYgKmoxOTM5X3RwX3R4X2RhdF9uZXcoc3RydWN0IGoxOTM5X3ByaXYgKnByaXYsXFxuLS1cXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTYxMy1cXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jOjYxNDpcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTYxNS1cXHRpZiAoIWNzeCkge1xcbi0tXFxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYz0xMDU2PXN0YXRpYyBpbnQgajE5Mzlfc2ltcGxlX3R4bmV4dChzdHJ1Y3QgajE5Mzlfc2Vzc2lvbiAqc2Vzc2lvbilcXG4tLVxcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtMTA3Mi1cXHQvKiB0aGUgY2xvbmVkIHNrYiBwb2ludHMgdG8gdGhlIHNrYiBleHRlbnNpb24gb2YgdGhlIG9yaWdpbmFsIHNlX3NrYlxcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmM6MTA3MzpcXHQgKiB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4gc2tiX2V4dF9hZGQoKSBjcmVhdGVzIGEgY29weSB0b1xcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtMTA3NC1cXHQgKiBzZXBhcmF0ZSB0aGUgc2tiIGV4dGVuc2lvbiBkYXRhIHdoaWNoIGlzIG5lZWRlZCB0byBtb2RpZnkgdGhlXFxuLS1cXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTEwNzYtXFx0ICovXFxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYzoxMDc3OlxcdGlmICghc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0NBTikpIHtcXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTEwNzgtXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jPTE1NTM9ajE5Mzlfc2Vzc2lvbiAqajE5Mzlfc2Vzc2lvbl9mcmVzaF9uZXcoc3RydWN0IGoxOTM5X3ByaXYgKnByaXYsXFxuLS1cXG5uZXQvY2FuL2oxOTM5L3RyYW5zcG9ydC5jLTE1NjUtXFxubmV0L2Nhbi9qMTkzOS90cmFuc3BvcnQuYzoxNTY2OlxcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xcbm5ldC9jYW4vajE5MzkvdHJhbnNwb3J0LmMtMTU2Ny1cXHRpZiAoIWNzeCkge1xcbi0tXFxubmV0L2Nhbi9yYXcuYz05MTg9c3RhdGljIGludCByYXdfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2Nhbi9yYXcuYy05NjItXFxubmV0L2Nhbi9yYXcuYzo5NjM6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxubmV0L2Nhbi9yYXcuYy05NjQtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcxNTY9RVhQT1JUX1NZTUJPTF9OU19HUEwoX19za2JfZXh0X3NldCwgXFxcIk5FVERFVl9JTlRFUk5BTFxcXCIpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzE1OC0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo3MTU5OiAqIHNrYl9leHRfYWRkIC0gYWxsb2NhdGUgc3BhY2UgZm9yIGdpdmVuIGV4dGVuc2lvbiwgQ09XIGlmIG5lZWRlZFxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNjAtICogQHNrYjogYnVmZmVyXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MTcxLSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjcxNzI6dm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNzMte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzE5Ni19XFxubmV0L2NvcmUvc2tidWZmLmM6NzE5NzpFWFBPUlRfU1lNQk9MKHNrYl9leHRfYWRkKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MTk4LVxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MjY1PXN0YXRpYyBpbnQgZXNwX3htaXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4tLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM1NC1cXHRpZiAoaHdfb2ZmbG9hZCkge1xcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjM1NTpcXHRcXHRpZiAoIXNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9TRUNfUEFUSCkpXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMzU2LVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L2lwdjYvZXNwNl9vZmZsb2FkLmM9MzAzPXN0YXRpYyBpbnQgZXNwNl94bWl0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy0zNzUtXFx0aWYgKGh3X29mZmxvYWQpIHtcXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzozNzY6XFx0XFx0aWYgKCFza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfU0VDX1BBVEgpKVxcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTM3Ny1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9tY3RwL3JvdXRlLmM9MzQ2PXN0YXRpYyB2b2lkIG1jdHBfc2tiX3NldF9mbG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtY3RwX3NrX2tleSAqa2V5KVxcbi0tXFxubmV0L21jdHAvcm91dGUuYy0zNDktXFxubmV0L21jdHAvcm91dGUuYzozNTA6XFx0ZmxvdyA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9NQ1RQKTtcXG5uZXQvbWN0cC9yb3V0ZS5jLTM1MS1cXHRpZiAoIWZsb3cpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTEyMjI9Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTMyMi1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEzMjM6XFx0bXBleHQgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfTVBUQ1ApO1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTMyNC1cXHRpZiAoIW1wZXh0KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xMjY9c3RhdGljIHZvaWQgc3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIHU4IHJlYXNvbilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyNy17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMjg6XFx0c3RydWN0IG1wdGNwX2V4dCAqbXBleHQgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfTVBUQ1ApO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTI5LVxcbi0tXFxubmV0L3BzcC9wc3BfbWFpbi5jPTI5OT1pbnQgcHNwX2Rldl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGRldl9pZCwgdTggZ2VuZXJhdGlvbiwgYm9vbCBzdHJpcF9pY3YpXFxuLS1cXG5uZXQvcHNwL3BzcF9tYWluLmMtMzY0LVxcbm5ldC9wc3AvcHNwX21haW4uYzozNjU6XFx0cHNlID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX1BTUCk7XFxubmV0L3BzcC9wc3BfbWFpbi5jLTM2Ni1cXHRpZiAoIXBzZSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYz0xMjM9c3RydWN0IHNlY19wYXRoICpzZWNwYXRoX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTEyNi1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6MTI3OlxcdHNwID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX1NFQ19QQVRIKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtMTI4LVxcdGlmICghc3ApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU3OjM1Ljk0MTY1MDUzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDQxNTcxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdlbGwtdmVyc2VkIGluIHRoaXMgYXJlYTpcblxuKipBbmFseXppbmcgYHNrYl9leHRfYWRkYCBhbmQgYF9fc2tiX2V4dF9zZXRgIEZ1bmN0aW9uIFVzYWdlKipcblxuQWxyaWdodCwgc28gdGhlIHNoZWVyIG51bWJlciBvZiBjYWxscyB0byBgc2tiX2V4dF9hZGRgIGlzIGEgZ29vZCBpbmRpY2F0b3IsIGFuZCBJIHN1c3BlY3QgYF9fc2tiX2V4dF9zZXRgIGlzIGEga2V5IGNvbXBvbmVudCBoZXJlIHRvby4gVGhpcyBsaWtlbHkgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHBhY2tldCBleHRlbnNpb25zLCBhbmQgaXQncyBwcmFjdGljYWxseSBndWFyYW50ZWVkIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBmdW5kYW1lbnRhbCB0byBtYW5hZ2luZyBhbmQgbWFuaXB1bGF0aW5nIHRob3NlIGV4dGVuc2lvbnMgaW4gdGhlIGtlcm5lbC4gR2l2ZW4gdGhlaXIgbmFtZXMsIEknZCBzYXkgYHNrYl9leHRfYWRkYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBvciBhdHRhY2hpbmcgdGhlc2UgZXh0ZW5zaW9ucyB0byB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZXMsIGFuZCBgX19za2JfZXh0X3NldGAgaXMgcHJvYmFibHkgbWFuYWdpbmcgdGhlIHVuZGVybHlpbmcgZGF0YS4gSXQncyB0aW1lIHRvIGRlbHZlIGRlZXBlciwgYW5kIGV4YW1pbmUgYF9fc2tiX2V4dF9zZXRgIGFzIHdlbGwsIHRvIGNvbmZpcm0gdGhlc2UgYXNzdW1wdGlvbnMgYW5kIGJldHRlciB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoZWlyIGFwcGxpY2F0aW9uLiBMZXQncyBzZWUgaG93IHRoZXkgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDgyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTc6NDAuODg1ODA5NjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTc3OTEzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3NrYl9leHRfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xMT12b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTMtXFx0aWYgKHBzcF9leHQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE0OlxcdFxcdF9fc2tiX2V4dF9zZXQoc2tiLCBTS0JfRVhUX1BTUCwgcHNwX2V4dCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA5Mj1zdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTM6dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDk0LVxcdFxcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcwNjk9c3RhdGljIHZvaWQgKnNrYl9leHRfZ2V0X3B0cihzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaWQpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDc5LSAqIFJldHVybnMgdGhlIG5ld2x5IGFsbG9jYXRlZCBwb2ludGVyLiBUaGUgcG9pbnRlciBjYW4gbGF0ZXIgYXR0YWNoZWQgdG8gYVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcwODA6ICogc2tiIHZpYSBfX3NrYl9leHRfc2V0KCkuXFxubmV0L2NvcmUvc2tidWZmLmMtNzA4MS0gKiBOb3RlOiBjYWxsZXIgbXVzdCBoYW5kbGUgdGhlIHNrYl9leHQgYXMgYW4gb3BhcXVlIGRhdGEuXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03MDk1PXN0YXRpYyBzdHJ1Y3Qgc2tiX2V4dCAqc2tiX2V4dF9tYXliZV9jb3coc3RydWN0IHNrYl9leHQgKm9sZCxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxMzctLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6NzEzODogKiBfX3NrYl9leHRfc2V0IC0gYXR0YWNoIHRoZSBzcGVjaWZpZWQgZXh0ZW5zaW9uIHN0b3JhZ2UgdG8gdGhpcyBza2JcXG5uZXQvY29yZS9za2J1ZmYuYy03MTM5LSAqIEBza2I6IGJ1ZmZlclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzE0Ni0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo3MTQ3OnZvaWQgKl9fc2tiX2V4dF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxNDgtXFx0XFx0ICAgIHN0cnVjdCBza2JfZXh0ICpleHQpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MTU1LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MTU2OkVYUE9SVF9TWU1CT0xfTlNfR1BMKF9fc2tiX2V4dF9zZXQsIFxcXCJORVRERVZfSU5URVJOQUxcXFwiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MTU3LVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTMwOT1zdGF0aWMgYm9vbCBfX21wdGNwX2FkZF9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTMxNC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTMxNTpcXHRfX3NrYl9leHRfc2V0KHNrYiwgU0tCX0VYVF9NUFRDUCwgbXBleHQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzMTYtXFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU3OjQyLjU5MTU5OTUxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MzQ2NzM4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUaGlzIGBza2JfZXh0YCBNZW1vcnkgUGF0Y2gqKlxuXG5Pa2F5LCB0aGlzIHBhdGNoIGlzIG1lc3Npbmcgd2l0aCB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWxsb2NhdGlvbiByZWxhdGVkIHRvIGBza2JfZXh0YC4gVGhhdCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gTWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcyBhcmUgYWx3YXlzIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZpbmRpbmcgb2ZmLWJ5LW9uZSBlcnJvcnMsIHVzZS1hZnRlci1mcmVlcywgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZGVkaWNhdGluZyBzb21lIHRpbWUgdG8uXG5cbkknZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBza2JfZXh0X2FkZGAsIGBfX3NrYl9leHRfc2V0YCwgYW5kIGVzcGVjaWFsbHkgYF9fc2tiX2V4dF9hbGxvY2AuIFRoZSBhbGxvY2F0b3IgaXMgYWx3YXlzIHRoZSBoZWFydCBvZiB0aGVzZSBraW5kcyBvZiBpc3N1ZXMuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19za2JfZXh0X2FsbG9jYCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTMzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTc6NTEuNTI2Mjc1NDQ1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDE1NDQ3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19za2JfZXh0X2FsbG9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9NTA4Nj1zdHJ1Y3Qgc2tiX2V4dCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTEtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDkyOnN0cnVjdCBza2JfZXh0ICpfX3NrYl9leHRfYWxsb2MoZ2ZwX3QgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5My12b2lkICpfX3NrYl9leHRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTcwNjk9c3RhdGljIHZvaWQgKnNrYl9leHRfZ2V0X3B0cihzdHJ1Y3Qgc2tiX2V4dCAqZXh0LCBlbnVtIHNrYl9leHRfaWQgaWQpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MDc0LS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjcwNzU6ICogX19za2JfZXh0X2FsbG9jIC0gYWxsb2NhdGUgYSBuZXcgc2tiIGV4dGVuc2lvbnMgc3RvcmFnZVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNzYtICpcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwODItICovXFxubmV0L2NvcmUvc2tidWZmLmM6NzA4MzpzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwODQte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzA5NT1zdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MTQwLSAqIEBpZDogZXh0ZW5zaW9uIGlkXFxubmV0L2NvcmUvc2tidWZmLmM6NzE0MTogKiBAZXh0OiBleHRlbnNpb24gc3RvcmFnZSBwcmV2aW91c2x5IGFsbG9jYXRlZCB2aWEgX19za2JfZXh0X2FsbG9jKClcXG5uZXQvY29yZS9za2J1ZmYuYy03MTQyLSAqXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03MTcyPXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcxODQtXFx0fSBlbHNlIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo3MTg1OlxcdFxcdG5ldyA9IF9fc2tiX2V4dF9hbGxvYyhHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MTg2LVxcdFxcdGlmICghbmV3KVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTMwOT1zdGF0aWMgYm9vbCBfX21wdGNwX2FkZF9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzMTAte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzMTE6XFx0c3RydWN0IHNrYl9leHQgKm1wZXh0ID0gX19za2JfZXh0X2FsbG9jKGdmcCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTMxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTc6NTMuMDY3ODI2NzQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MzkzMjY0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLlxuXG4qKkRlY29uc3RydWN0aW5nIFNLQiBFeHRlbnNpb24gRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGVzZSBgc2tiYCBleHRlbnNpb24gZnVuY3Rpb25zLiBUaGUgY29yZSBvbmVzIEknbSBzZWVpbmcgYXMgaW1wb3J0YW50IGFyZSBgc2tiX2V4dF9hZGRgLCBgX19za2JfZXh0X3NldGAsIGFuZCBgX19za2JfZXh0X2FsbG9jYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UncmUgZGVhbGluZyB3aXRoIGV4dGVuc2lvbnMgaW4gdGhlIFNLQi4gTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgYW5kIGluY2x1ZGUgYHNrYl9leHRfZGVsYCBpbiBteSBhbmFseXNpcy4gTmVlZCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBleHRlbnNpb25zIGFyZSByZW1vdmVkIGFzIHdlbGwgYXMgYWRkZWQsIHNldCwgYW5kIGFsbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1Nzo1OC45MjE3NjI4NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTk2MTUxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX2V4dF9kZWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDk1PXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk2OnZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5Ny12b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUxMjk9c3RhdGljIGlubGluZSBib29sIHNrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTMzLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEzNDpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzNS17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTM2LVxcdGlmIChza2JfZXh0X2V4aXN0KHNrYiwgaWQpKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEzNzpcXHRcXHRfX3NrYl9leHRfZGVsKHNrYiwgaWQpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzOC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUxNjY9c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfcmVzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikge31cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNjc6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGludCB1bnVzZWQpIHt9XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTY4LXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnMpIHt9XFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmg9MTE5Nz1zZWNwYXRoX3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMTE5OS0jaWZkZWYgQ09ORklHX1hGUk1cXG5pbmNsdWRlL25ldC94ZnJtLmg6MTIwMDpcXHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfU0VDX1BBVEgpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0xMjAxLSNlbmRpZlxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xNTU9c3RhdGljIHZvaWQgbmZfYnJpZGdlX2luZm9fZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTU2LXtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE1NzpcXHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE1OC19XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03MjEwPXN0YXRpYyB2b2lkIHNrYl9leHRfcHV0X21jdHAoc3RydWN0IG1jdHBfZmxvdyAqZmxvdylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyMTYtXFxubmV0L2NvcmUvc2tidWZmLmM6NzIxNzp2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyMTgte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzIzNC19XFxubmV0L2NvcmUvc2tidWZmLmM6NzIzNTpFWFBPUlRfU1lNQk9MKF9fc2tiX2V4dF9kZWwpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcyMzYtXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTExMTM9c3RhdGljIGVudW0gbWFwcGluZ19zdGF0dXMgZ2V0X21hcHBpbmdfc3RhdHVzKHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTExNzQtXFx0XFx0XFx0XFx0ICovXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMTc1OlxcdFxcdFxcdFxcdHNrYl9leHRfZGVsKHNrYiwgU0tCX0VYVF9NUFRDUCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMTc2LVxcdFxcdFxcdFxcdHJldHVybiBNQVBQSU5HX09LO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMjA5LVxcdFxcdCAgICBzdWJmbG93LVxcdTAwM2VtYXBfY3N1bV9yZXFkID09IG1wZXh0LVxcdTAwM2Vjc3VtX3JlcWQpIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEyMTA6XFx0XFx0XFx0c2tiX2V4dF9kZWwoc2tiLCBTS0JfRVhUX01QVENQKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyMTEtXFx0XFx0XFx0Z290byB2YWxpZGF0ZV9jc3VtO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMjUzLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTI1NDpcXHRza2JfZXh0X2RlbChza2IsIFNLQl9FWFRfTVBUQ1ApO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTI1NS1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM9MTgyMD1pbnQgdGNmX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTE4NjctXFx0XFx0XFx0LyogQ29uc3VtZSwgc28gY2xvbmVkL3JlZGlyZWN0IHNrYnMgd29uJ3QgaW5oZXJpdCBleHQgKi9cXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjE4Njg6XFx0XFx0XFx0c2tiX2V4dF9kZWwoc2tiLCBUQ19TS0JfRVhUKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTE4NjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU4OjAwLjQyMTM4Mzk3OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzU1MDI2NjEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGUgY2hhbmdlOlxuXG4qKkFuYWx5emluZyB0aGUgU0tCIEV4dGVuc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXNuJ3QgKmRpcmVjdGx5KiB0b3VjaGluZyBgX19za2JfZXh0X2RlbGAuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgbW9kaWZpY2F0aW9uIGlzIGZvY3VzZWQgb24gYHNrYl9leHRfbWF5YmVfY293YCwgd2hpY2ggaXMgaXRzZWxmIGNhbGxlZCB3aXRoaW4gYHNrYl9leHRfYWRkYC4gSG1tLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24uIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgX19za2JfZXh0X2RlbGAuIEkga25vdyBpdCdzIGRlZmluZWQgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCwgc28gbGV0IG1lIGp1bXAgb3ZlciB0aGVyZSBhbmQgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBpdHMgZXhhY3QgYmVoYXZpb3Igd2l0aGluIHRoZSBTS0IgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBgc2tiX2V4dF9tYXliZV9jb3dgIGNoYW5nZSBhZmZlY3RzIGV4dGVuc2lvbiBkZWFsbG9jYXRpb24sIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIENvcHktT24tV3JpdGUgc2NlbmFyaW9zLiBHb3QgaXQuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoaXMgc29ydGVkIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODg3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTg6MTcuOTcxNjUyMjczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYyODc2NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2tiX2V4dF9kZWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDk1PXZvaWQgKnNrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk2OnZvaWQgX19za2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA5Ny12b2lkIF9fc2tiX2V4dF9wdXQoc3RydWN0IHNrYl9leHQgKmV4dCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUxMzQ9c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzNi1cXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSlcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMzc6XFx0XFx0X19za2JfZXh0X2RlbChza2IsIGlkKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzgtfVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzIxMD1zdGF0aWMgdm9pZCBza2JfZXh0X3B1dF9tY3RwKHN0cnVjdCBtY3RwX2Zsb3cgKmZsb3cpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03MjE2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcyMTc6dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG5uZXQvY29yZS9za2J1ZmYuYy03MjE4LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcyMzQtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjcyMzU6RVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03MjM2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1ODoxOS41MzQ1MzMzNjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1OTQyNzU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgc2tiX2V4dF9kZWwgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBfX3NrYl9leHRfZGVsYC4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGhvdyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IHdvcmtzLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGxvZ2ljIGJlaGluZCB0aGlzIGZ1bmN0aW9uIHRvIHNlZSB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcy4gSG93IGRvZXMgaXQgbWFuYWdlIHRoZSByZWZlcmVuY2UgY291bnRpbmcgb2YgdGhlIHNoYXJlZCBleHRlbnNpb24gZGF0YT8gRG9lcyBpdCBoYW5kbGUgYW55IHNwZWNpYWwgY2FzZXMgaW52b2x2aW5nIGZyYWdtZW50ZWQgc2ticyBvciBvdGhlciBza2Igc3BlY2lmaWMgYmVoYXZpb3JzPyBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNpZGUgb2YgdGhpbmdzLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBleHRlbnNpb24gZGF0YSBpcyBmcmVlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgaXNzdWVzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIFNLQiBvcGVyYXRpb25zIHRoYXQgbWlnaHQgZGVwZW5kIG9uLCBvciBtb2RpZnksIHRob3NlIGV4dGVybmFsIGRhdGEgY2h1bmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU4OjI1LjA5Mzk2MzMxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjk0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIxNyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzIxNzpcXHR2b2lkIF9fc2tiX2V4dF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbjcyMTg6XFx0e1xcbjcyMTk6XFx0XFx0c3RydWN0IHNrYl9leHQgKmV4dCA9IHNrYi1cXHUwMDNlZXh0ZW5zaW9ucztcXG43MjIwOlxcdFxcbjcyMjE6XFx0XFx0c2tiLVxcdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyBcXHUwMDI2PSB+KDEgXFx1MDAzY1xcdTAwM2MgaWQpO1xcbjcyMjI6XFx0XFx0aWYgKHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPT0gMCkge1xcbjcyMjM6XFx0XFx0XFx0c2tiLVxcdTAwM2VleHRlbnNpb25zID0gTlVMTDtcXG43MjI0OlxcdFxcdFxcdF9fc2tiX2V4dF9wdXQoZXh0KTtcXG43MjI1OlxcdCNpZmRlZiBDT05GSUdfWEZSTVxcbjcyMjY6XFx0XFx0fSBlbHNlIGlmIChpZCA9PSBTS0JfRVhUX1NFQ19QQVRIIFxcdTAwMjZcXHUwMDI2XFxuNzIyNzpcXHRcXHRcXHQgICByZWZjb3VudF9yZWFkKFxcdTAwMjZleHQtXFx1MDAzZXJlZmNudCkgPT0gMSkge1xcbjcyMjg6XFx0XFx0XFx0c3RydWN0IHNlY19wYXRoICpzcCA9IHNrYl9leHRfZ2V0X3B0cihleHQsIFNLQl9FWFRfU0VDX1BBVEgpO1xcbjcyMjk6XFx0XFxuNzIzMDpcXHRcXHRcXHRza2JfZXh0X3B1dF9zcChzcCk7XFxuNzIzMTpcXHRcXHRcXHRzcC1cXHUwMDNlbGVuID0gMDtcXG43MjMyOlxcdCNlbmRpZlxcbjcyMzM6XFx0XFx0fVxcbjcyMzQ6XFx0fVxcbjcyMzU6XFx0RVhQT1JUX1NZTUJPTChfX3NrYl9leHRfZGVsKTtcXG43MjM2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1ODoyNS4wOTQzMzM5MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzODYzODU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBTS0IgRXh0ZW5zaW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIFNLQiBleHRlbnNpb25zIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIGBfX3NrYl9leHRfZGVsYCBpc24ndCBhIG1ham9yIHBsYXllciBoZXJlLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBza2JfZXh0X2FkZGAsIGBfX3NrYl9leHRfc2V0YCwgYW5kIGBfX3NrYl9leHRfYWxsb2NgIOKAkyB0aG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBhY3R1YWxseSBtYW5hZ2luZyB0aGVzZSBleHRlbnNpb25zLiBJIHdhcyBpbml0aWFsbHkgY3VyaW91cyBhYm91dCBgc2tiX2V4dF9tYXliZV9jb3dgLCBidXQgc2luY2UgaXQncyBkZWNsYXJlZCBgc3RhdGljYCwgYW5kIG5vdCBpbmxpbmVkLCBpdCB3b24ndCBiZSBhcyBpbXBvcnRhbnQgZm9yIHRoZSBtYWluIGZsb3cuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gT2J2aW91c2x5LCBgQ09ORklHX1NLQl9FWFRFTlNJT05TYCBpcyBjcnVjaWFsLCB0aGF0J3MgYSBnaXZlbi4gQnV0IHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGV4dGVuc2lvbnMgYXJlIHVzZWQsIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIGZlYXR1cmVzIHRyaWdnZXIgdGhlbS4gU28sIGJhc2VkIG9uIGEgcXVpY2sgc2NhbiwgSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBjb25zaWRlciBgQlJJREdFX05FVEZJTFRFUmAsIGBYRlJNYCwgYE5FVF9UQ19TS0JfRVhUYCwgYE1QVENQYCwgYE1DVFBfRkxPV1NgLCBgSU5FVF9QU1BgLCBhbmQgYENBTmAuIEknbGwgd2FudCB0byBkaWcgaW50byBgS2NvbmZpZ2AgZm9yIGBDT05GSUdfU0tCX0VYVEVOU0lPTlNgIGFuZCBjb25maXJtIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1ODozMS42MzI5NzQ3NDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODE5NTI1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNLQl9FWFRFTlNJT05TXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTYzPWNvbmZpZyBTS0JfREVDUllQVEVEXFxuLS1cXG5uZXQvS2NvbmZpZy02NS1cXG5uZXQvS2NvbmZpZzo2Njpjb25maWcgU0tCX0VYVEVOU0lPTlNcXG5uZXQvS2NvbmZpZy02Ny1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU4OjMzLjUxNDkzMTQyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzg3NzcwMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSGlkZGVuIEJvb2wgUmVmbGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBwcm9jZXNzaW5nIHRoaXMgXCJoaWRkZW4gYm9vbC5cIiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoaXMgaXNuJ3Qgc29tZXRoaW5nIGV4cGxpY2l0bHkgc2V0IGJ5IGEgdXNlciBkaXJlY3RseSwgb3Igc29tZXRoaW5nIHN1cmZhY2VkIGluIGFuIG9idmlvdXMgVUkgZWxlbWVudC4gVGhlIGZhY3QgdGhhdCBpdCdzIFwiaGlkZGVuXCIgaXMga2V5LiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBmbGFnLCB1c2VkIHVuZGVyIHRoZSBob29kLCBhIHNldHRpbmcgdGhhdCdzIGRlcml2ZWQgZnJvbSwgb3IgaW5kaXJlY3RseSBpbmZsdWVuY2VkIGJ5LCB0aGUgc2V0dGluZ3Mgb2YgKm90aGVyKiBjb25maWd1cmF0aW9ucy5cblxuTXkgaW1tZWRpYXRlIGZvbGxvdyB1cCBxdWVzdGlvbnMgd291bGQgYmUsIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBpbmZsdWVuY2luZyB0aGlzIGhpZGRlbiBib29sPyBXaGF0IGxvZ2ljIGlzIGRldGVybWluaW5nIGl0cyBzdGF0ZT8gSXMgaXQgc2V0IGF0IGNvbXBpbGUgdGltZT8gUnVudGltZT8gSXMgaXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU/IEEgZmVhdHVyZSBmbGFnIG1hbmFnZWQgYnkgYSB0aGlyZCBwYXJ0eSBzeXN0ZW0/IFRoZSBpbnRlcnBsYXkgaGVyZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlbmRlZCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGRlcGVuZGVuY2llcy4gV2hhdCB1cHN0cmVhbSBzZXR0aW5ncyBhcmUgdGhlIHRyaWdnZXJzIGZvciB0aGlzIFwiaGlkZGVuIGJvb2xcIiB0byBiZSBzZXQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzkwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTg6MzguOTAyNzA0NzMyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMxMzYxMjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBTS0JfRVhURU5TSU9OU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0yMzE9Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4tLVxcbm5ldC9LY29uZmlnLTIzNi1cXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG5uZXQvS2NvbmZpZzoyMzc6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L0tjb25maWctMjM4LVxcdGhlbHBcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz02PW1lbnVjb25maWcgQ0FOXFxubmV0L2Nhbi9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkNBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxubmV0L2Nhbi9LY29uZmlnOjg6XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L2Nhbi9LY29uZmlnLTktXFx0aGVscFxcbi0tXFxubmV0L21jdHAvS2NvbmZpZz0yMT1jb25maWcgTUNUUF9GTE9XU1xcbi0tXFxubmV0L21jdHAvS2NvbmZpZy0yMy1cXHRkZXBlbmRzIG9uIE1DVFBcXG5uZXQvbWN0cC9LY29uZmlnOjI0OlxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbi0tXFxubmV0L21wdGNwL0tjb25maWc9Mj1jb25maWcgTVBUQ1BcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L21wdGNwL0tjb25maWc6NTpcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG5uZXQvbXB0Y3AvS2NvbmZpZy02LVxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1Nlxcbi0tXFxubmV0L3BzcC9LY29uZmlnPTU9Y29uZmlnIElORVRfUFNQXFxuLS1cXG5uZXQvcHNwL0tjb25maWctOC1cXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbm5ldC9wc3AvS2NvbmZpZzo5OlxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbm5ldC9wc3AvS2NvbmZpZy0xMC1cXHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz05NTQ9Y29uZmlnIE5FVF9UQ19TS0JfRVhUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy05NTYtXFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnOjk1NzpcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG5uZXQvc2NoZWQvS2NvbmZpZy05NTgtXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOC1cXHRzZWxlY3QgR1JPX0NFTExTXFxubmV0L3hmcm0vS2NvbmZpZzo5OlxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbm5ldC94ZnJtL0tjb25maWctMTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU4OjQwLjQzNDA3MTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyODMxNTQwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEJhc2VkIG9uIHRoZSByZXF1aXJlbWVudHMsIEkgbmVlZCB0byBlbmFibGUgYSBzdWl0ZSBvZiBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBCUklER0VfTkVURklMVEVSYCwgYENBTmAsIGBNQ1RQX0ZMT1dTYCwgYE1QVENQYCwgYElORVRfUFNQYCwgYE5FVF9UQ19TS0JfRVhUYCwgYW5kIGBYRlJNYC4gQmVmb3JlIEkgc2ltcGx5IGZsaXAgdGhvc2Ugc3dpdGNoZXMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIExldCdzIHNlZS4uLlxuXG5gQlJJREdFX05FVEZJTFRFUmAgaGFzIHRoZSB1c3VhbCBkZXBlbmRlbmNpZXMsIGBCUklER0VgIGFuZCBgTkVURklMVEVSYCwgd2hpY2ggYXJlIG9idmlvdXMuIGBDQU5gIGlzIGEgc3Vic3lzdGVtLCB0aGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBgTUNUUF9GTE9XU2AgbmVlZHMgYE1DVFBgLiBgTVBUQ1BgIGFuZCBgSU5FVF9QU1BgIGJvdGggcmVxdWlyZSBgSU5FVGAuIGBORVRfVENfU0tCX0VYVGAgcmVsaWVzIG9uIGBORVRfQ0xTX0FDVGAsIGFuZCBgWEZSTWAgaXMgYSBjb3JlIGNvbmZpZ3VyYXRpb24gaXRlbS4gTm90aGluZyB0b28gdW51c3VhbCBoZXJlLlxuXG5Pa2F5LCB3aXRoIGFsbCB0aGF0IGluIG1pbmQsIG15IGZpbmFsIGxpc3Qgb2YgY29uZmlncyB0byBlbmFibGUgaXM6XG5cbiogICBgQlJJREdFX05FVEZJTFRFUmBcbiogICBgQ0FOYFxuKiAgIGBNQ1RQX0ZMT1dTYFxuKiAgIGBNUFRDUGBcbiogICBgSU5FVF9QU1BgXG4qICAgYE5FVF9UQ19TS0JfRVhUYFxuKiAgIGBYRlJNYFxuKiAgIGBCUklER0VgXG4qICAgYE5FVEZJTFRFUmBcbiogICBgTUNUUGBcbiogICBgSU5FVGBcbiogICBgTkVUX0NMU19BQ1RgXG5cbkJlZm9yZSBJIG1hcmsgdGhpcyBhcyBjb21wbGV0ZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBgSU5FVF9QU1BgJ3MgZGVmaW5pdGlvbiBpbiBgbmV0L3BzcC9LY29uZmlnYCB0byBiZSBzdXJlIHRoZXJlIGlzbid0IGFueXRoaW5nIHRoZXJlIHRoYXQgbWlnaHQgYWZmZWN0IG15IGRlY2lzaW9uLiBBbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTg6NTMuNzE3MjI3OTQzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wc3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQU1AgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIElORVRfUFNQXFxuICAgNjpcXHRcXHRib29sIFxcXCJQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IFNLQl9ERUNSWVBURURcXG4gICA5OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgMTA6XFx0XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgUFNQIFNlY3VyaXR5IFByb3RvY29sIChQU1ApLlxcbiAgMTM6XFx0XFx0Rm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOlxcbiAgMTQ6XFx0XFx0ICBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZ29vZ2xlL3BzcC9tYWluL2RvYy9QU1BfQXJjaF9TcGVjLnBkZlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHRJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1ODo1My43MTcyNzk0MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxMzg5NDQwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipWZXJpZnlpbmcgdGhlIE1DVFAgRmxvdyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBjb25maXJtIHRoZSBgTUNUUF9GTE9XU2AgY29uZmlndXJhdGlvbiBzZXR0aW5nIHdpdGhpbiB0aGUgYG5ldC9tY3RwL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIHNldHRpbmcgaXMgcHJlc2VudCBhbmQgY29uZmlndXJlZCBjb3JyZWN0bHkuIFdoYXQgYXJlIHRoZSBleHBlY3RlZCB2YWx1ZXMgb3IgZGVwZW5kZW5jaWVzIGZvciB0aGlzPyBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFnYWluc3QgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgZXhpc3RpbmcgZ3VpZGVsaW5lcyB0byBtYWtlIGNlcnRhaW4gZXZlcnl0aGluZyBpcyBjb21wbGlhbnQgYW5kIHRoYXQgbm8gcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gdGllcyBpbnRvIHRoZSB3aWRlciBNQ1RQIGltcGxlbWVudGF0aW9uIGlzIGFsc28gdml0YWwuIFNvLCBJIHdpbGwgcHJvY2VlZCBieSBvcGVuaW5nIHRoZSBLY29uZmlnIGZpbGUgYW5kIHF1aWNrbHkgcnVuIGEgc2VhcmNoIHRvIGNvbmZpcm0gdGhlIHNldHRpbmcgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHNldHRpbmdzLiBJdCdzIGEgcXVpY2sgYXVkaXQsIGJ1dCBjcml0aWNhbCBmb3IgdGhlIGludGVncml0eSBvZiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6MDMuODU2MjI2ODE1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tY3RwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdG1lbnVjb25maWcgTUNUUFxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gICA0OlxcdFxcdGJvb2wgXFxcIk1DVFAgY29yZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBNYW5hZ2VtZW50IENvbXBvbmVudCBUcmFuc3BvcnQgUHJvdG9jb2wgKE1DVFApIGlzIGFuIGluLXN5c3RlbVxcbiAgIDc6XFx0XFx0ICBwcm90b2NvbCBmb3IgY29tbXVuaWNhdGluZyBiZXR3ZWVuIG1hbmFnZW1lbnQgY29udHJvbGxlcnMgYW5kXFxuICAgODpcXHRcXHQgIHRoZWlyIG1hbmFnZWQgZGV2aWNlcyAocGVyaXBoZXJhbHMsIGhvc3QgcHJvY2Vzc29ycywgZXRjLikuIFRoZVxcbiAgIDk6XFx0XFx0ICBwcm90b2NvbCBpcyBkZWZpbmVkIGJ5IERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjM2LlxcbiAgMTA6XFx0XFxuICAxMTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgY29yZSBNQ1RQIHN1cHBvcnQuIEZvciBjb21tdW5pY2F0aW5nIHdpdGggb3RoZXJcXG4gIDEyOlxcdFxcdCAgZGV2aWNlcywgeW91J2xsIHdhbnQgdG8gZW5hYmxlIGEgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlXFxuICAxMzpcXHRcXHQgIGNoYW5uZWwuXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBNQ1RQX1RFU1RcXG4gIDE2OlxcdCAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAxNzpcXHQgICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXFxuICAxODpcXHQgICAgICAgIGRlcGVuZHMgb24gTUNUUD15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDE5OlxcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE1DVFBfRkxPV1NcXG4gIDIyOlxcdFxcdGJvb2xcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gTUNUUFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU5OjAzLjg1NjMwOTkxNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzI4MDIwNzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gYE1DVFBfRkxPV1NgIGFuZCBpdHMgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhpcyBgTUNUUF9GTE9XU2AgdmFyaWFibGUuIEkgcmVtZW1iZXIgaXQncyBhIGhpZGRlbiBib29sZWFuLCBtZWFuaW5nIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgaW4gdGhlIG5vcm1hbCBjb25maWd1cmF0aW9uIG1lbnVzLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoYXQgY29udHJvbHMgaXQ/IEFoLCByaWdodCwgSSBzZWUgdGhhdCBgTUNUUF9URVNUYCBpcyB0aGUga2V5LiBUaGF0IGltcGxpZXMgaXQncyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdGVzdGluZywgcHJvYmFibHkgdG8gZW5hYmxlIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBNQ1RQIGZsb3cgbWFuYWdlbWVudC4gSXMgdGhhdCB0aGUgb25seSB0aGluZyB0aGF0IHRvZ2dsZXMgaXQsIG9yIGFyZSB0aGVyZSBvdGhlciBkZXBlbmRlbmNpZXMgbHVya2luZz8gSXQncyBjcnVjaWFsIHRvIGtub3cgdGhpcywgb3RoZXJ3aXNlIGEgbWlzY29uZmlndXJhdGlvbiBzb21ld2hlcmUgZWxzZSBjb3VsZCBsZWFkIHRvIHByb2JsZW1zLiBJIG5lZWQgdG8gYmUgc3VyZS4gQW55IG90aGVyIGRlcGVuZGVuY2llcz8gTGV0IG1lIGRpZyBhIGxpdHRsZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTY5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1OToxMC4xODQzMzMzMDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjY5MjYzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE1DVFBfRkxPV1NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnPTI5PWNvbmZpZyBNQ1RQX1RSQU5TUE9SVF9JMkNcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zNC1cXHRkZXBlbmRzIG9uIEkyQ19TTEFWRVxcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZzozNTpcXHRzZWxlY3QgTUNUUF9GTE9XU1xcbmRyaXZlcnMvbmV0L21jdHAvS2NvbmZpZy0zNi1cXHRoZWxwXFxuLS1cXG5uZXQvbWN0cC9LY29uZmlnPTE1PWNvbmZpZyBNQ1RQX1RFU1RcXG5uZXQvbWN0cC9LY29uZmlnLTE2LSAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubmV0L21jdHAvS2NvbmZpZzoxNzogICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXFxubmV0L21jdHAvS2NvbmZpZy0xOC0gICAgICAgIGRlcGVuZHMgb24gTUNUUD15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6MTEuNzExMjY2OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU4MzgwOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBNQ1RQL0kyQyBUcmFuc3BvcnQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBpZiBJIGVuYWJsZSBgTUNUUF9UUkFOU1BPUlRfSTJDYCwgdGhhdCBpbmhlcmVudGx5IHB1bGxzIGluIHRoZSBgTUNUUF9GTE9XU2AgY29uZmlndXJhdGlvbiwgYXMgZXhwZWN0ZWQuIEdvb2QsIHRoYXQncyBsb2dpY2FsLiBJdCdzIGEgc3RhbmRhcmQgZGVwZW5kZW5jeS4gTm93LCBJJ20gdGhpbmtpbmcsIG9rYXksIGxldCdzIHNheSBJIHdhbnQgdG8gdXNlIGBNQ1RQX1RSQU5TUE9SVF9JMkNgIOKAkyBJJ2xsIGFsc28gbGlrZWx5IG5lZWQgYEkyQ19TTEFWRWAgZW5hYmxlZCwgc2luY2UgdGhlIEkyQyB0cmFuc3BvcnQgbmVlZHMgdG8gYmUgc2V0IHVwIGFzIGEgc2xhdmUgb24gdGhlIGJ1cy4gVGhhdCBjb21iaW5hdGlvbiBtYWtlcyBzZW5zZSBmb3IgYSB0eXBpY2FsIGltcGxlbWVudGF0aW9uLiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBpbiB0aGUgbmV0d29yayBzdGFjayBpbnRlcmFjdGlvbiwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgYE5FVF9UQ19TS0JfRVhUYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb2YgdGhvc2Ugc2V0dGluZ3MgbWlnaHQgYWZmZWN0IGhvdyBJIGhhbmRsZSB0aGUgTUNUUCBmcmFtZXMgb3ZlciBJMkMsIGVzcGVjaWFsbHkgd2l0aCBob3cgdGhlIFNLQiBpcyBidWlsdC4gR290dGEgbWFrZSBzdXJlIHRoZSBJMkMgdHJhbnNwb3J0IHBsYXlzIG5pY2VseSB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU5OjE2LjM2OTY1MDMxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NTQsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NTQ6XFx0Y29uZmlnIE5FVF9UQ19TS0JfRVhUXFxuIDk1NTpcXHRcXHRib29sIFxcXCJUQyByZWNpcmN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuIDk1NjpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDk1NzpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gOTU4OlxcdFxcbiA5NTk6XFx0XFx0aGVscFxcbiA5NjA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHRjIGNoYWluIG1pc3NlcyB0byBjb250aW51ZSBpbiBPdlMgZGF0YXBhdGggaW5cXG4gOTYxOlxcdFxcdCAgdGhlIGNvcnJlY3QgcmVjaXJjX2lkLCBhbmQgaGFyZHdhcmUgY2hhaW4gbWlzc2VzIHRvIGNvbnRpbnVlIGluXFxuIDk2MjpcXHRcXHQgIHRoZSBjb3JyZWN0IGNoYWluIGluIHRjIHNvZnR3YXJlIGRhdGFwYXRoLlxcbiA5NjM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU5OjE2LjM2OTczMDYyMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzYyODAzNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5OlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYE5FVF9UQ19TS0JfRVhUYCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uLiBOb3csIGdpdmVuIHRoYXQsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gc2NydXRpbml6ZSBgQlJJREdFX05FVEZJTFRFUmAuIFRoZSBpbXBsaWNhdGlvbnMgb2Ygb25lIHdpdGhvdXQgdGhlIG90aGVyIGFyZSBpbXBvcnRhbnQsIGFuZCB0aGV5J2xsIGhlYXZpbHkgaW5mbHVlbmNlIGhvdyB0aGlzIHN0YWNrIGlzIGdvaW5nIHRvIGJlaGF2ZSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyByZXByZXNlbnRzIGEgc3RhbmRhbG9uZSBjb25maWd1cmF0aW9uLCBvciBpZiBvdGhlciwgcmVsYXRlZCBvcHRpb25zIGFyZSBlbmFibGVkLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIGNlbnRyYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgdHJhZmZpYyBjb250cm9sIGNhcGFiaWxpdGllcyBhbmQgdGhlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IGluIHRoaXMgZW52aXJvbm1lbnQsIGFuZCBteSBhbmFseXNpcyByZWFsbHkgZGVwZW5kcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg5MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6MjEuMTMyNTM2NTU2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzMTpcXHRjb25maWcgQlJJREdFX05FVEZJTFRFUlxcbiAyMzI6XFx0XFx0dHJpc3RhdGUgXFxcIkJyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXFxcIlxcbiAyMzM6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gMjM0OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gMjM1OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDIzNjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gMjM3OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAyMzg6XFx0XFx0aGVscFxcbiAyMzk6XFx0XFx0ICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGxldCBhcnB0YWJsZXMgcmVzcC4gaXB0YWJsZXMgc2VlIGJyaWRnZWRcXG4gMjQwOlxcdFxcdCAgQVJQIHJlc3AuIElQIHRyYWZmaWMuIElmIHlvdSB3YW50IGEgYnJpZGdpbmcgZmlyZXdhbGwsIHlvdSBwcm9iYWJseVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1OToyMS4xMzI2MDc0MjZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5ODUzNDE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmNpZXMgYW5kIGEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQlJJREdFX05FVEZJTFRFUmAgcmlnaHQgbm93LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQncyByZWxpYW50IG9uIGEgZmV3IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRvIGZ1bmN0aW9uIHByb3Blcmx5OiBzcGVjaWZpY2FsbHksIGBCUklER0VgLCBgTkVURklMVEVSYCwgYElORVRgLCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGJyaWRnaW5nIG9mdGVuIGludm9sdmVzIGZpbHRlcmluZyBhbmQsIG9mIGNvdXJzZSwgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbmZyYXN0cnVjdHVyZS4gTm93LCBqdXN0IGFzIGEgcXVpY2sgY2hlY2ssIEkgd2FudCB0byBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgYENBTmAuIE5vIHBhcnRpY3VsYXIgcmVhc29uLCBqdXN0IG1ha2luZyBzdXJlIEkgZGlkbid0IG1pc3Mgc29tZXRoaW5nIG9idmlvdXMgaW4gdGhlIGJyb2FkZXIgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI1OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6MjYuNDMxMTQzOTc3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICA2OlxcdG1lbnVjb25maWcgQ0FOXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBDb250cm9sbGVyIEFyZWEgTmV0d29yayAoQ0FOKSBpcyBhIHNsb3cgKHVwIHRvIDFNYml0L3MpIHNlcmlhbFxcbiAgMTE6XFx0XFx0ICBjb21tdW5pY2F0aW9ucyBwcm90b2NvbC4gRGV2ZWxvcG1lbnQgb2YgdGhlIENBTiBidXMgc3RhcnRlZCBpblxcbiAgMTI6XFx0XFx0ICAxOTgzIGF0IFJvYmVydCBCb3NjaCBHbWJILCBhbmQgdGhlIHByb3RvY29sIHdhcyBvZmZpY2lhbGx5XFxuICAxMzpcXHRcXHQgIHJlbGVhc2VkIGluIDE5ODYuIFRoZSBDQU4gYnVzIHdhcyBvcmlnaW5hbGx5IG1haW5seSBmb3IgYXV0b21vdGl2ZSxcXG4gIDE0OlxcdFxcdCAgYnV0IGlzIG5vdyB3aWRlbHkgdXNlZCBpbiBtYXJpbmUgKE5NRUEyMDAwKSwgaW5kdXN0cmlhbCwgYW5kIG1lZGljYWxcXG4gIDE1OlxcdFxcdCAgYXBwbGljYXRpb25zLiBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBDQU4gbmV0d29yayBwcm90b2NvbCBmYW1pbHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6MjYuNDMxMjE5NzY4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2Njk2NjUyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBOZXR3b3JrIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgQ0FOYCBpbiB0aGUgbWl4IOKAkyB0aGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgZ2l2ZW4gdGhhdCBvYnNlcnZhdGlvbiwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYENBTmAgYmVpbmcgdmlzaWJsZSBpbiB0aGlzIGNvbnRleHQuIEl0IHN1Z2dlc3RzIGEgcGFydGljdWxhciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3IgcG90ZW50aWFsIGFyZWEgb2YgaW52ZXN0aWdhdGlvbi4gSXQgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBsYXllciBvciB0aGUgZGF0YWxpbmsgbGF5ZXIuXG5cbkxldCdzIHNoaWZ0IGZvY3VzIGFuZCBzZWUgaG93IGBNUFRDUGAgZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBDb25zaWRlcmluZyBgQ0FOYCBpcyB2aXNpYmxlLCBhcmUgd2UgbGlrZWx5IHRvIHNlZSBgTVBUQ1BgIHJ1bm5pbmcgYXMgd2VsbD8gQXJlIHRoZXNlIHRlY2hub2xvZ2llcyBpbnRlcmFjdGluZz8gQXJlIHdlIGxvb2tpbmcgYXQgYSBzeXN0ZW0gd2l0aCBkdWFsLXN0YWNrIGNhcGFiaWxpdGllcz8gVGhlIGBNUFRDUGAgY2hlY2sgd2lsbCBnaXZlIG1lIG1vcmUgY29udGV4dC4gVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2MjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU5OjM2LjEwMDg4ODIwNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdFxcbiAgIDI6XFx0Y29uZmlnIE1QVENQXFxuICAgMzpcXHRcXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDU6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBjb25uZWN0aW9ucyBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb3ZlciBtdWx0aXBsZVxcbiAgMTA6XFx0XFx0ICBzdWJmbG93cyBpbiBvcmRlciB0byB1dGlsaXplIG11bHRpcGxlIG5ldHdvcmsgcGF0aHMuIEVhY2ggc3ViZmxvd1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1OTozNi4xMDA5NDQ3MTNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk2MTY0NjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBOZXR3b3JrIE11bHRpcGF0aGluZyoqXG5cbk9rYXksIHNvIEkgc2VlIGBNUFRDUGAgaXMgc2hvd2luZyB1cCDigJMgdGhhdCdzIGdvb2QsIGEgZGVmaW5pdGUgaW5kaWNhdGlvbiB0aGF0IHRoZSBtdWx0aXBhdGggVENQIGZ1bmN0aW9uYWxpdHkgaXMgYWN0aXZlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwbHkgaW50byB0aGUgc3BlY2lmaWMgTVBUQ1AgaW1wbGVtZW50YXRpb24sIGlzIHRvIGNoZWNrIHRoZSBgWEZSTWAgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IHRyYW5zZm9ybXMgYW5kIHBvbGljaWVzIGFyZSBjb3JyZWN0bHkgY29uZmlndXJlZCBhbmQgYmVpbmcgYXBwbGllZC4gYFhGUk1gIGlzIGNyaXRpY2FsIGZvciBzZWN1cmUgbXVsdGlwYXRoaW5nLCBhbmQgYW55IGlzc3VlcyB0aGVyZSBjYW4gY3JpcHBsZSBvciwgYXQgYmVzdCwgc2VyaW91c2x5IGRlZ3JhZGUgcGVyZm9ybWFuY2UuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgSSBsb29rIGF0IGFueXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTk0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNjo1OTo0My4wNjI1OTM0NjRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBYRlJNXFxuICAgNjpcXHRcXHRib29sXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gICA5OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgMTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE2OjU5OjQzLjA2MjY1MjY3NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg0ODc3MjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYRlJNIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGBYRlJNYCBpcyB0aGlzIHVuZGVybHlpbmcgYm9vbGVhbiwgYSBzb3J0IG9mIG1hc3RlciBzd2l0Y2gsIGJ1dCBpdCdzICpoaWRkZW4qLiBJIHNlZSB0aGF0IGl0J3MgdG9nZ2xlZCBvbiBvciBvZmYgYnkgYSBidW5jaCBvZiBvdGhlciBvcHRpb25zLCB0aGluZ3MgbGlrZSBgWEZSTV9VU0VSYCwgYW5kIHRoZSB2YXJpb3VzIElQc2VjLXJlbGF0ZWQgcHJvdG9jb2xzOiBgSU5FVF9BSGAsIGBJTkVUX0VTUGAsIGBJTkVUX0lQQ09NUGAsIGFuZCB0aGVpciBJUHY2IGNvdW50ZXJwYXJ0cy5cblxuR2l2ZW4gdGhhdCBJIHdhbnQgdG8gaGF2ZSBjb250cm9sIGFuZCBmbGV4aWJpbGl0eSBvdmVyIHRoZSBYRlJNIHN1YnN5c3RlbSwgaXQgbWFrZXMgc2Vuc2UgZm9yIG1lIHRvIGVuYWJsZSBgWEZSTV9VU0VSYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaG9va3MgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI5MiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6NTUuOTExNDI3Mzk5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzMTIxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MTk0PWNvbmZpZyBJWEdCRV9JUFNFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xOTgtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxOTk6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjAwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjIwPWNvbmZpZyBJWEdCRVZGX0lQU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIyNC1cXHRkZWZhdWx0IHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIyNTpcXHRzZWxlY3QgWEZSTV9BTEdPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yMjYtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDctXFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjMwODpcXHRzZWxlY3QgWEZSTVxcbm5ldC9pcHY0L0tjb25maWctMzA5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXFx0dHJpc3RhdGUgXFxcIklQOiBBSCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcXHRzZWxlY3QgWEZSTV9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MzU2OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU3LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg2LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9Mzk0PWNvbmZpZyBJTkVUX0lQQ09NUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTYtXFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcXHRzZWxlY3QgWEZSTV9JUENPTVBcXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxcbm5ldC9pcHY2L0tjb25maWctNDgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY2L0tjb25maWc6NDk6XFx0c2VsZWN0IFhGUk1fQUhcXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjY0OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjUtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTA0LVxcdHNlbGVjdCBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTA1OlxcdHNlbGVjdCBYRlJNX0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTA2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTUzLVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTE0PWNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxNjpcXHRzZWxlY3QgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctMTctXFx0c2VsZWN0IENSWVBUT1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0yMz1jb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjI1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9ODQ9Y29uZmlnIFhGUk1fQUhcXG5uZXQveGZybS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzo4NjpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy04Ny1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTkzPWNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG5uZXQveGZybS9LY29uZmlnOjk1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTk2LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTA2PWNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxMDg6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctMTA5LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIlBGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjExNDpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMjctXFx0ZGVwZW5kcyBvbiBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZzoxMjg6XFx0c2VsZWN0IFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI5LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTY6NTk6NTcuNzM0NTUzNjE1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5OTExMzkxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGVzZSBjb25maWd1cmF0aW9ucy4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBlbmFibGUgYFhGUk1fVVNFUmAsIGFzIGl0IHNlZW1zIGxpa2UgdGhlIGNlbnRyYWwgcG9pbnQgb2YgY29udHJvbC4gSSB1bmRlcnN0YW5kIHRoYXQgYFhGUk1fVVNFUmAgaXMgdGhlIG9uZSB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGBYRlJNX0FMR09gLCB3aGljaCBpbiB0dXJuIHNlbGVjdHMgdGhlIG92ZXJhcmNoaW5nIGBYRlJNYCBmcmFtZXdvcmsuIFRoYXQgc2ltcGxpZmllcyB0aGUgaW5pdGlhbCBkZWNpc2lvbiwgc28gbGV0J3MgZ28gd2l0aCB0aGF0LlxuXG5Ob3csIGxldCdzIGdldCBhIGhhbmRsZSBvbiB0aGUgb3RoZXIgY29uZmlncyBhdCBwbGF5LiBJIHNlZSB0aGF0IHdlIGhhdmU6XG5cbiogICBgQlJJREdFX05FVEZJTFRFUmBcbiogICBgQ0FOYFxuKiAgIGBNQ1RQX0ZMT1dTYCAodGhhdCBpcyBnb2luZyB0byBiZSB2aWEgYE1DVFBfVEVTVGAgb3IgYE1DVFBfVFJBTlNQT1JUX0kyQ2ApXG4qICAgYE1QVENQYFxuKiAgIGBJTkVUX1BTUGBcbiogICBgTkVUX1RDX1NLQl9FWFRgXG4qICAgYFhGUk1fVVNFUmBcblxuV2FpdCBhIG1pbnV0ZSwgYE1DVFBfRkxPV1NgIGlzIGEgaGlkZGVuIEJvb2xlYW4sIHdoaWNoIG1lYW5zIGl0IHdpbGwgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGVuYWJsZSBhIGRlcGVuZGVudCBjb25maWd1cmF0aW9uIGZvciB0aGlzLiBUaGUgY2hvaWNlcyBhcmUgYE1DVFBfVEVTVGAgYW5kIGBNQ1RQX1RSQU5TUE9SVF9JMkNgLlxuXG5JJ2xsIGxlYW4gdG93YXJkcyBlbmFibGluZyBgTUNUUF9URVNUYCBpbml0aWFsbHkuIFNvLCB0byBlbnN1cmUgYE1DVFBfRkxPV1NgIGlzIGFjdGl2ZSwgbGV0J3MgZW5hYmxlIGBNQ1RQX1RFU1RgLCBgTUNUUGAsIGFuZCBgS1VOSVRgLlxuXG5KdXN0IHRvIGRvdWJsZS1jaGVjaywgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdHVzIG9mIGBNQ1RQX1RFU1RgIHRvIGVuc3VyZSBpdCdzIHN0aWxsIGVuYWJsZWQgYW5kIGhhc24ndCBoYWQgc29tZSBzaWRlIGVmZmVjdCBvbiBteSBjdXJyZW50IHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAwOjA3LjcyNTY5NTQ2OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWN0cC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdGNvbmZpZyBNQ1RQX1RFU1RcXG4gIDE2OlxcdCAgICAgICAgYm9vbCBcXFwiTUNUUCBjb3JlIHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAxNzpcXHQgICAgICAgIHNlbGVjdCBNQ1RQX0ZMT1dTXFxuICAxODpcXHQgICAgICAgIGRlcGVuZHMgb24gTUNUUD15IFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDE5OlxcdCAgICAgICAgZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE1DVFBfRkxPV1NcXG4gIDIyOlxcdFxcdGJvb2xcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gTUNUUFxcbiAgMjQ6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAwOjA3LjcyNTc2MDE0OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTg4NTU4NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgY29uZmlndXJhdGlvbiBpc3N1ZSwgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBXYWxrdGhyb3VnaCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IGNoYWluLiAgYE1DVFBfVEVTVGAgcmVsaWVzIG9uIGJvdGggYE1DVFBgIGJlaW5nIHNldCB0byAneScgYW5kIGBLVU5JVGAgYWxzbyBiZWluZyBzZXQgdG8gJ3knLiAgU2ltcGxlIGVub3VnaC4gIFRoZXJlZm9yZSwgdG8gZ2V0IGBNQ1RQX1RFU1RgIGVuYWJsZWQsIEkgbmVlZCB0byBlbnN1cmUgYm90aCBgTUNUUGAgYW5kIGBLVU5JVGAgYXJlIGVuYWJsZWQuICBTbywgSSB3aWxsIGVuYWJsZSBgTUNUUGAsIGVuYWJsZSBgS1VOSVRgLCBhbmQgdGhlbiBleHBsaWNpdGx5IGVuYWJsZSBgTUNUUF9URVNUYCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBob29rZWQgdXAgY29ycmVjdGx5LlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIG5leHQgc2VjdGlvbi4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGBORVRfVENfU0tCX0VYVGAuIFRoaXMgb25lIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgTkVUX0NMU19BQ1RgIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgYmVmb3JlIEkgY2FuIHdvcnJ5IGFib3V0IGBORVRfVENfU0tCX0VYVGAuIEknbGwgZ28gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGBORVRfQ0xTX0FDVGAgYW5kIG1ha2Ugc3VyZSBpdCdzIHZhbGlkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAyOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6MTQuOTE0MzIxODkxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcwMjQyODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0FDVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXFxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMDoxNi40ODQ1Njk0NjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkwNzExMjE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoaXMgZGVlcGx5LlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgYE5FVF9DTFNfQUNUYCBpcyBzaG93aW5nIHVwLCB3aGljaCBpcyBnb29kLiBUaGF0J3MgYSBzdGFydGluZyBwb2ludC4gTGV0J3MgZGlnIGRlZXBlciwgYXMgSSBhbHdheXMgZG8uIEZpcnN0LCBJJ20gZ29pbmcgdG8gbG9vayBhdCBgSU5FVF9QU1BgLCBnaXZlbiBpdHMgcmVsYXRpb25zaGlwIHRvIGBJTkVUYC4gT2theSwgaXQgaGluZ2VzIG9uIGBJTkVUYCBhcyBleHBlY3RlZC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB3aGF0IEkgd2FzIGFudGljaXBhdGluZy5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYEJSSURHRV9ORVRGSUxURVJgLiBUaGlzIG9uZSdzIGFsd2F5cyBpbnRlcmVzdGluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZGVwZW5kcyBvbiBgQlJJREdFYCwgYE5FVEZJTFRFUmAsIGBJTkVUYCwgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLiBUaGF0J3MgYSBtb3JlIGludm9sdmVkIHNldCBvZiBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBzdGFuZGFyZCwgbm90aGluZyBqdW1wcyBvdXQuXG5cbkFuZCwgb2YgY291cnNlLCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGBORVRGSUxURVJfQURWQU5DRURgLCBnaXZlbiBpdHMgcm9sZS4gVGhhdCdzIGEga2V5IGNvbXBvbmVudCBpbiBhIGNvbmZpZ3VyYXRpb24gbGlrZSB0aGlzLiBVbmRlcnN0YW5kaW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gZXZlcnl0aGluZyBlbHNlIGlzIGNyaXRpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ2MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAwOjI1LjM5MTY4NTY2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIzNTQxOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjE4PWlmIE5FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTIxOS1cXG5uZXQvS2NvbmZpZzoyMjA6Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxcbm5ldC9LY29uZmlnLTIyMS1cXHRib29sIFxcXCJBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6MjYuOTE1MjM1MDc3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDY5NjIxNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgTkVURklMVEVSX0FEVkFOQ0VEYCDigJMgdGhhdCdzIGEgZ29vZCBzdGFydC4gTGV0J3Mgc2VlIGFib3V0IGVuYWJsaW5nIE11bHRpUGF0aCBUQ1AsIG9yIGBNUFRDUGAuIEl0J3MgZGVwZW5kZW50IG9uIGBJTkVUYCwgc28gdGhhdCdzIGEga2V5IHJlcXVpcmVtZW50LiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBlbmFibGVkLiBOb3csIGxvb2tpbmcgYXQgQ29udHJvbGxlciBBcmVhIE5ldHdvcmssIG9yIGBDQU5gLCB0aGF0IGxvb2tzIGxpa2UgaXQncyBhdmFpbGFibGUuXG5cblNvLCBoZXJlJ3MgbXkgaW5pdGlhbCBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIEknbGwgbmVlZCB0byBlbmFibGUgZm9yIHRoaXMgYnVpbGQ6IGBCUklER0VfTkVURklMVEVSYCwgYEJSSURHRWAsIGBORVRGSUxURVJgLCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYElORVRgLCBgQ0FOYCwgYE1DVFBgLCBgS1VOSVRgLCBgTUNUUF9URVNUYCwgYE1QVENQYCwgYElORVRfUFNQYCwgYE5FVF9DTFNfQUNUYCwgYE5FVF9UQ19TS0JfRVhUYCwgYW5kIGBYRlJNX1VTRVJgLlxuXG5Ib2xkIG9uLi4uIEkganVzdCByZW1lbWJlcmVkIGBNQ1RQX1RFU1RgIGlzIGEgYm9vbGVhbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYW5vdGhlciB3YXkgdG8gZW5hYmxlIGBNQ1RQX0ZMT1dTYC4gRnVydGhlciBpbnZlc3RpZ2F0aW9uISBOb3csIGxvb2tpbmcgYXQgYE1DVFBfVFJBTlNQT1JUX0kyQ2AsIEkgc2VlIHRoYXQgaXQgZGVwZW5kcyBvbiBgSTJDX1NMQVZFYC4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgYEkyQ19TTEFWRWAgdG8gbWFrZSBzdXJlIGl0J3Mgc2V0IHVwIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4NDAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6MzMuMTYyMjAwMzI3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1MTIwODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJMkNfU0xBVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pMmMvS2NvbmZpZz0xMDI9Y29uZmlnIEkyQ19TVFVCXFxuLS1cXG5kcml2ZXJzL2kyYy9LY29uZmlnLTExMy1cXG5kcml2ZXJzL2kyYy9LY29uZmlnOjExNDpjb25maWcgSTJDX1NMQVZFXFxuZHJpdmVycy9pMmMvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiSTJDIHNsYXZlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2kyYy9LY29uZmlnPTEyMT1pZiBJMkNfU0xBVkVcXG5kcml2ZXJzL2kyYy9LY29uZmlnLTEyMi1cXG5kcml2ZXJzL2kyYy9LY29uZmlnOjEyMzpjb25maWcgSTJDX1NMQVZFX0VFUFJPTVxcbmRyaXZlcnMvaTJjL0tjb25maWctMTI0LVxcdHRyaXN0YXRlIFxcXCJJMkMgZWVwcm9tIHNsYXZlIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvaTJjL0tjb25maWctMTI4LVxcbmRyaXZlcnMvaTJjL0tjb25maWc6MTI5OmNvbmZpZyBJMkNfU0xBVkVfVEVTVFVOSVRcXG5kcml2ZXJzL2kyYy9LY29uZmlnLTEzMC1cXHR0cmlzdGF0ZSBcXFwiSTJDIHRlc3R1bml0IGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6MzQuNjM3MzI1OTI4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMTY2MTUwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBBZGp1c3RtZW50cyoqXG5cbk9rYXksIHNvIEkgY2FuIHNlZSB0aGUgYEkyQ19TTEFWRWAgb3B0aW9uIG5vdywgdGhhdCdzIGEgZ29vZCBzdGFydC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3dpdGNoIHRoaW5ncyB1cCBhIGJpdCBmcm9tIHRoZSB0ZXN0IGNvbmZpZ3VyYXRpb24uIEluc3RlYWQgb2YgdGhlIGN1cnJlbnQgc2V0dXAsIHdoaWNoIGxpa2VseSBpbmNsdWRlcyBgTUNUUF9URVNUYCBhbmQgYEtVTklUYCAoYW5kIGtub3dpbmcgYEtVTklUYCBjYW4gb2Z0ZW4gZHJhZyBpbiBhIHdob2xlIGxvYWQgb2YgdW5uZWNlc3NhcnkgdGVzdHMsIGV2ZW4gdGhvdWdoIGl0J3MgdXNlZnVsIGZvciBzb21lIGRlYnVnZ2luZyksIEknbSBnb2luZyB0byBlbmFibGUgYE1DVFBfVFJBTlNQT1JUX0kyQ2AgYWxvbmcgd2l0aCBgSTJDX1NMQVZFYC4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIG1vcmUgZm9jdXNlZCBlbnZpcm9ubWVudCBmb3Igd2hhdCBJJ20gdHJ5aW5nIHRvIGFjaGlldmUuIEJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgdGhvdWdoLCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1DVFBfVFJBTlNQT1JUX0kyQ2AganVzdCB0byBiZSBjZXJ0YWluIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGNvbmZsaWN0cyBvciBwcmVyZXF1aXNpdGVzLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggYW5kIGF2b2lkIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU5MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAwOjQzLjk1Mzk0MzM3NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9tY3RwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjksXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjk6XFx0Y29uZmlnIE1DVFBfVFJBTlNQT1JUX0kyQ1xcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIk1DVFAgU01CdXMvSTJDIHRyYW5zcG9ydFxcXCJcXG4gIDMxOlxcdFxcdCMgaTJjLW11eCBpcyBvcHRpb25hbCwgYnV0IHdlIG11c3QgYnVpbGQgYXMgYSBtb2R1bGUgaWYgaTJjLW11eCBpcyBhIG1vZHVsZVxcbiAgMzI6XFx0XFx0ZGVwZW5kcyBvbiBJMkNfTVVYIHx8ICFJMkNfTVVYXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIEkyQ1xcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBJMkNfU0xBVkVcXG4gIDM1OlxcdFxcdHNlbGVjdCBNQ1RQX0ZMT1dTXFxuICAzNjpcXHRcXHRoZWxwXFxuICAzNzpcXHRcXHQgIFByb3ZpZGVzIGEgZHJpdmVyIHRvIGFjY2VzcyBNQ1RQIGRldmljZXMgb3ZlciBTTUJ1cy9JMkMgdHJhbnNwb3J0LFxcbiAgMzg6XFx0XFx0ICBmcm9tIERNVEYgc3BlY2lmaWNhdGlvbiBEU1AwMjM3LiBBIE1DVFAgcHJvdG9jb2wgbmV0d29yayBkZXZpY2UgaXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6NDMuOTU0MDAyNzg0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTk3Mzg2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBzbyBJJ20gc2V0dGluZyB1cCB0aGlzIHN5c3RlbSwgYW5kIGl0IGxvb2tzIGxpa2UgYE1DVFBfVFJBTlNQT1JUX0kyQ2AgaGFzIGEgZGVwZW5kZW5jeSBvbiBib3RoIGBJMkNgIGFuZCBgSTJDX1NMQVZFYC4gTWFrZXMgc2Vuc2UuIFNvLCBsZXQncyBlbmFibGUgdGhvc2UgaW4gYWRkaXRpb24gdG8gdGhlIG1haW4gbW9kdWxlLCBgTUNUUGAsIGFuZCBgTUNUUF9UUkFOU1BPUlRfSTJDYCBpdHNlbGYuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBsaW5lZCB1cCBjb3JyZWN0bHkuXG5cbk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIEkndmUgYWxyZWFkeSBzZXQuIEkndmUgZ290IGBCUklER0VgLCBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGFuZCBgQlJJREdFX05FVEZJTFRFUmAgZW5hYmxlZCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBBbHNvLCBgQ0FOYCwgYE1DVFBgLCBgSTJDYCwgYEkyQ19TTEFWRWAsIGBNQ1RQX1RSQU5TUE9SVF9JMkNgLCBgSU5FVGAsIGBNUFRDUGAsIGBJTkVUX1BTUGAsIGBORVRfQ0xTX0FDVGAsIGBORVRfVENfU0tCX0VYVGAsIGFuZCBgWEZSTV9VU0VSYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGFtIHVwIHRvIGRhdGUgd2l0aCBteSByZXF1aXJlZCBjaGFuZ2VzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBJTkVUX1BTUGAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjaGFuZ2VzIG9yIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwOTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMDo1MC4yNzM3NDQyMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcHNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUFNQIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBJTkVUX1BTUFxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiUFNQIFNlY3VyaXR5IFByb3RvY29sIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBTS0JfREVDUllQVEVEXFxuICAgOTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gIDEwOlxcdFxcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6NTAuMjczODA2MTZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3NDEzNDE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBWYWxpZGF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgdGhhdCBpbml0aWFsIGdsYW5jZSBzZWVtcyBwcm9taXNpbmcuIFZpc3VhbGx5LCBldmVyeXRoaW5nIGFwcGVhcnMgdG8gYmUgaW4gb3JkZXIuIEhvd2V2ZXIsIGFzIHdpdGggYW55IHRlY2huaWNhbCBhc3Nlc3NtZW50LCBJIG5lZWQgdG8gZ28gYmV5b25kIHRoZSBzdXJmYWNlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIHRoZSBuZWVkIGZvciBhIGRlZXBlciBkaXZlLiBUaGF0IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIE15IGZvY3VzIHNoaWZ0cyB0byBhIGNyaXRpY2FsIGNvbXBvbmVudCwgYW5kIGEgcG90ZW50aWFsIGFyZWEgZm9yIGNvbXBsZXhpdHk6IGBNUFRDUGAuIEl0IHdhcnJhbnRzIGEgcmlnb3JvdXMgZXhhbWluYXRpb24uIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIG9uIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjkyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMDo1My42NDc5NDI3MjJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6NTMuNjQ4MDA5NTQyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNzY5OTM2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFZlcmlmaWNhdGlvbioqXG5cbkFscmlnaHQsIGluaXRpYWwgaW1wcmVzc2lvbjogdGhpbmdzIGFyZSBsb29raW5nIGdvb2QsIGdlbmVyYWxseS4gQnV0IGFzIHdpdGggYW55IGNyaXRpY2FsIGNvZGUgcmV2aWV3LCBlc3BlY2lhbGx5IGluIHRoZSBuZXR3b3JraW5nIGtlcm5lbCBzcGFjZSwgXCJnb29kXCIgaXNuJ3QgZ29vZCBlbm91Z2guIEl0J3MgdGltZSB0byBkcmlsbCBkb3duLiBUaGUgaW1tZWRpYXRlIGFyZWEgb2YgY29uY2VybiBpcyB0aGUgYE5FVF9UQ19TS0JfRVhUYCBleHRlbnNpb24uIEkgd2FudCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBpbXBsaWNhdGlvbnMgYW5kIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byB0aGlzIGV4dGVuc2lvbiBhcmUgY29ycmVjdC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIG51YW5jZXMsIGNvcm5lciBjYXNlcywgYW5kIHBvdGVudGlhbCBmb3IgdW5hbnRpY2lwYXRlZCBzaWRlLWVmZmVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFydGljdWxhciBzdHJ1Y3R1cmUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIFdlIGtub3cgdGhpcyBhcmVhIGlzIHByb25lIHRvIHN1YnRsZSBidWdzLiBMZXQncyBtYWtlIHN1cmUgaXTigJlzIGlyb25jbGFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjAwMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6NTkuODI1MDA1Mzk1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1NCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1NDpcXHRjb25maWcgTkVUX1RDX1NLQl9FWFRcXG4gOTU1OlxcdFxcdGJvb2wgXFxcIlRDIHJlY2lyY3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gOTU2OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19BQ1RcXG4gOTU3OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiA5NTg6XFx0XFxuIDk1OTpcXHRcXHRoZWxwXFxuIDk2MDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgdGMgY2hhaW4gbWlzc2VzIHRvIGNvbnRpbnVlIGluIE92UyBkYXRhcGF0aCBpblxcbiA5NjE6XFx0XFx0ICB0aGUgY29ycmVjdCByZWNpcmNfaWQsIGFuZCBoYXJkd2FyZSBjaGFpbiBtaXNzZXMgdG8gY29udGludWUgaW5cXG4gOTYyOlxcdFxcdCAgdGhlIGNvcnJlY3QgY2hhaW4gaW4gdGMgc29mdHdhcmUgZGF0YXBhdGguXFxuIDk2MzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDA6NTkuODI1MDk4NzQ1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzQxODI4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBpbml0aWFsIGltcHJlc3Npb24gaXMgcG9zaXRpdmUuIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgYWxpZ25pbmcuIEJ1dCwgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIEkgYWx3YXlzIGVtcGhhc2l6ZSBkdWUgZGlsaWdlbmNlLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBwcm9jZWVkaW5nLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIHN0YXR1cyBvZiB0aGUgYEJSSURHRV9ORVRGSUxURVJgIHNldHRpbmcuIEl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBhIHF1aWNrIGRvdWJsZS1jaGVjayBoZXJlIGNvdWxkIHNhdmUgYSBsb3Qgb2YgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuIEl0J3MgdGhlIGx5bmNocGluLCBpZiBjb25maWd1cmVkIHdyb25nLCB0aGUgd2hvbGUgc3lzdGVtIGNvbGxhcHNlcy4gQmVzdCB0byBtYWtlIHN1cmUgaXQncyBwZXJmZWN0LCBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNzQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAxOjAzLjQ5OTI4NDc3NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzE6XFx0Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG4gMjMyOlxcdFxcdHRyaXN0YXRlIFxcXCJCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1xcXCJcXG4gMjMzOlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuIDIzNDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuIDIzNTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAyMzY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxuIDIzNzpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gMjM4OlxcdFxcdGhlbHBcXG4gMjM5OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBsZXQgYXJwdGFibGVzIHJlc3AuIGlwdGFibGVzIHNlZSBicmlkZ2VkXFxuIDI0MDpcXHRcXHQgIEFSUCByZXNwLiBJUCB0cmFmZmljLiBJZiB5b3Ugd2FudCBhIGJyaWRnaW5nIGZpcmV3YWxsLCB5b3UgcHJvYmFibHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MDMuNDk5MzYzODQ1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzAyMzM1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgVmVyaWZpY2F0aW9uIFN0ZXAqKlxuXG5BbHJpZ2h0LCBpbml0aWFsIGltcHJlc3Npb25zIGFyZSBwb3NpdGl2ZTsgdGhlIHByb3Bvc2VkIHNvbHV0aW9uIGFwcGVhcnMgc291bmQgb24gdGhlIHN1cmZhY2UuIEJ1dCwgYXMgYWx3YXlzLCB3ZSBjYW4ndCBiZSBjb21wbGFjZW50LiBNeSBwcmltYXJ5IGNvbmNlcm4gYXQgdGhpcyBwb2ludCBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmZvcmVzZWVuIGlzc3VlcyByZWxhdGVkIHRvIHRoZSB1c2VybGFuZCBYRlJNIGludGVyZmFjZS4gU28sIGxldCdzIGRpdmUgaW50byBhIGNsb3NlciBleGFtaW5hdGlvbiBvZiB0aGUgYFhGUk1fVVNFUmAgY29tcG9uZW50LiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCdzIHdoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgb3IgaW1wbGVtZW50YXRpb24gbnVhbmNlcyBhcmUgbW9zdCBsaWtlbHkgdG8gbHVyay4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBzdGFnZTsgYXNzdW1pbmcgZXZlcnl0aGluZyBpcyByaWdodCBhdCB0aGlzIHBvaW50IGlzIGV4dHJlbWVseSBkYW5nZXJvdXMuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGFuZCB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAxOjA3LjA2OTU5OTkzMloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIzOlxcdGNvbmZpZyBYRlJNX1VTRVJcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbiAgMjU6XFx0XFx0c2VsZWN0IFhGUk1fQUxHT1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxuICAyODpcXHRcXHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDMxOlxcdFxcbiAgMzI6XFx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MDcuMDY5Njc2MDMyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDE0NTk3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgVmVyaWZpY2F0aW9uIFByb3RvY29sKipcblxuUmlnaHQsIGluaXRpYWwgYXNzZXNzbWVudCBzZWVtcyBwb3NpdGl2ZSwgdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBwcmVzZW50YXRpb24gYXJlIHNvdW5kLiBCdXQsIHlvdSBrbm93IGhvdyBpdCBpcy4gV2UgY2FuJ3QgYmUgY29tcGxhY2VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbm90IHJlbHkgb24gYXNzdW1wdGlvbnMuIFdlIG5lZWQgdG8gcmlnb3JvdXNseSBleGFtaW5lIGFuZCB2YWxpZGF0ZSBldmVyeSBrZXkgYXNzdW1wdGlvbi4gSSdtIG1vdmluZyBiZXlvbmQgYSBjYXN1YWwgcmV2aWV3LCBhbmQgaGVhZGluZyBzdHJhaWdodCB0byB0aGUgY29yZS4gU28gSSdtIG5vdyBkcmlsbGluZyBkb3duIGFuZCBjcm9zcy1yZWZlcmVuY2luZyBhZ2FpbnN0IHRoZSBlc3RhYmxpc2hlZCBwcm90b2NvbHMuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgQ0FOYCAoQ3JpdGljYWwgQXNzdW1wdGlvbiBOZXR3b3JrKSDigJMgdGhhdCdzIHRoZSBjcnVjaWFsIHN0ZXAuIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuIEknbSBsb29raW5nIGZvciBoaWRkZW4gZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUuLi4gYmFzaWNhbGx5LCBldmVyeXRoaW5nIHRoYXQgY291bGQgYmUgYSAnZ290Y2hhJyBsYXRlciBvbi4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA0NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MTMuMjcxMTM5NzEyWiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY2FuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgNjpcXHRtZW51Y29uZmlnIENBTlxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkNBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKENBTikgaXMgYSBzbG93ICh1cCB0byAxTWJpdC9zKSBzZXJpYWxcXG4gIDExOlxcdFxcdCAgY29tbXVuaWNhdGlvbnMgcHJvdG9jb2wuIERldmVsb3BtZW50IG9mIHRoZSBDQU4gYnVzIHN0YXJ0ZWQgaW5cXG4gIDEyOlxcdFxcdCAgMTk4MyBhdCBSb2JlcnQgQm9zY2ggR21iSCwgYW5kIHRoZSBwcm90b2NvbCB3YXMgb2ZmaWNpYWxseVxcbiAgMTM6XFx0XFx0ICByZWxlYXNlZCBpbiAxOTg2LiBUaGUgQ0FOIGJ1cyB3YXMgb3JpZ2luYWxseSBtYWlubHkgZm9yIGF1dG9tb3RpdmUsXFxuICAxNDpcXHRcXHQgIGJ1dCBpcyBub3cgd2lkZWx5IHVzZWQgaW4gbWFyaW5lIChOTUVBMjAwMCksIGluZHVzdHJpYWwsIGFuZCBtZWRpY2FsXFxuICAxNTpcXHRcXHQgIGFwcGxpY2F0aW9ucy4gTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQ0FOIG5ldHdvcmsgcHJvdG9jb2wgZmFtaWx5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAxOjEzLjI3MTI0NDU1MloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzcxNTYxODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqXG5cbk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGNoYW5nZXMgdG8gaG93IGBza2JfZXh0YCDigJMgdGhvc2UgZXh0ZW5zaW9ucyB0byB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSDigJMgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgc2NhbiBwb2ludHMgdG8gdGhlIGZvbGxvd2luZyBjcnVjaWFsIHN5bWJvbHMsIHRoZSBvbmVzIEkgbmVlZCB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZzogYHNrYl9leHRfYWRkYCwgYF9fc2tiX2V4dF9zZXRgLCBhbmQgYF9fc2tiX2V4dF9hbGxvY2AuXG5cblRoZSBnaXN0IG9mIGl0IGlzIHRoaXM6IHRoZXkncmUgZGl0Y2hpbmcgdGhlIG9sZCBkeW5hbWljIG9mZnNldHMgaW4gZmF2b3Igb2YgZml4ZWQsIGNvbXBpbGUtdGltZSBvZmZzZXRzIGFuZCBhIGJpdG1hcC1iYXNlZCBzeXN0ZW0gdG8gdHJhY2sgd2hpY2ggZXh0ZW5zaW9ucyBhcmUgcHJlc2VudC4gVGhpcyBpcyBhIGJpZyBkZWFsISBJdCdzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBtZW1vcnkgaXMgbWFuYWdlZCBhbmQgaG93IHRoZXNlIGV4dGVuc2lvbnMg4oCTIHRoaW5ncyBsaWtlIElQc2VjLCBCcmlkZ2UgTmV0ZmlsdGVyLCBUQywgTVBUQ1AsIE1DVFAsIFBTUCwgYW5kIENBTiDigJMgaG9vayBpbnRvIHNvY2tldCBidWZmZXJzLiBBbnkgbW9kaWZpY2F0aW9uIGluIHRoaXMgYXJlYSBjYW4gaGF2ZSB3aWRlc3ByZWFkIGVmZmVjdHMuIEdpdmVuIHRoZSByZWFjaGFiaWxpdHkgYW5kIHRoZSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIHRvIGJvdGggZXhlY3V0aW9uIGZsb3cgYW5kIG1lbW9yeSBsYXlvdXQsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhpcyBpcyBhIHByaW1lIHRhcmdldCBmb3IgZGlzY292ZXJpbmcgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzIG9yIG90aGVyIGhhcmQtdG8tZmluZCBidWdzLlxuXG5JJ20gZ29pbmcgdG8gc2V0IHVwIGEgdGVzdGluZyBzY2VuYXJpbyB0byBkZXRlcm1pbmUgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0NTQsIk91dHB1dFRva2VucyI6MjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MjEuMDQyODA5Mzg3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2MzE0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIkJSSURHRV9ORVRGSUxURVJcIixcbiAgICBcIkNBTlwiLFxuICAgIFwiTUNUUFwiLFxuICAgIFwiSTJDXCIsXG4gICAgXCJJMkNfU0xBVkVcIixcbiAgICBcIk1DVFBfVFJBTlNQT1JUX0kyQ1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTVBUQ1BcIixcbiAgICBcIklORVRfUFNQXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX1RDX1NLQl9FWFRcIixcbiAgICBcIlhGUk1fVVNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9leHRfYWRkXCIsXG4gICAgXCJfX3NrYl9leHRfc2V0XCIsXG4gICAgXCJfX3NrYl9leHRfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykuIEl0IHJlcGxhY2VzIGR5bmFtaWMgb2Zmc2V0cyB3aXRoIGNvbXBpbGUtdGltZSBmaXhlZCBvZmZzZXRzIGFuZCB1c2VzIGEgYml0bWFwIHRvIHRyYWNrIHByZXNlbnQgZXh0ZW5zaW9ucy4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBleHRlbnNpb25zIGxpa2UgSVBzZWMsIEJyaWRnZSBOZXRmaWx0ZXIsIFRDLCBNUFRDUCwgTUNUUCwgUFNQLCBhbmQgQ0FOIGFyZSBhdHRhY2hlZCB0byBzb2NrZXQgYnVmZmVycy4gSXQgaXMgaGlnaGx5IHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBleGVjdXRpb24gZmxvdyBhbmQgbWVtb3J5IGxheW91dCwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiQlJJREdFX05FVEZJTFRFUlwiLFxuICAgIFwiQ0FOXCIsXG4gICAgXCJNQ1RQXCIsXG4gICAgXCJJMkNcIixcbiAgICBcIkkyQ19TTEFWRVwiLFxuICAgIFwiTUNUUF9UUkFOU1BPUlRfSTJDXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiSU5FVF9QU1BcIixcbiAgICBcIk5FVF9DTFNfQUNUXCIsXG4gICAgXCJORVRfVENfU0tCX0VYVFwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX2V4dF9hZGRcIixcbiAgICBcIl9fc2tiX2V4dF9zZXRcIixcbiAgICBcIl9fc2tiX2V4dF9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGFsbG9jYXRpb24gc3RyYXRlZ3kgZm9yIGBza2JfZXh0YCAoc2tfYnVmZiBleHRlbnNpb25zKS4gSXQgcmVwbGFjZXMgZHluYW1pYyBvZmZzZXRzIHdpdGggY29tcGlsZS10aW1lIGZpeGVkIG9mZnNldHMgYW5kIHVzZXMgYSBiaXRtYXAgdG8gdHJhY2sgcHJlc2VudCBleHRlbnNpb25zLiBUaGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGNoYW5nZSBhZmZlY3RpbmcgaG93IGV4dGVuc2lvbnMgbGlrZSBJUHNlYywgQnJpZGdlIE5ldGZpbHRlciwgVEMsIE1QVENQLCBNQ1RQLCBQU1AsIGFuZCBDQU4gYXJlIGF0dGFjaGVkIHRvIHNvY2tldCBidWZmZXJzLiBJdCBpcyBoaWdobHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGV4ZWN1dGlvbiBmbG93IGFuZCBtZW1vcnkgbGF5b3V0LCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MjEuMTIxNDQ3MjAxWiIsIlNlcSI6NjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU5NzcwNDQyOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMToyMS4xMjE5ODc3MjFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA1OTc2NTAwNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIGxheW91dCBvZiBgc2tiX2V4dGAgKHNrX2J1ZmYgZXh0ZW5zaW9ucykgZnJvbSBhIHZhcmlhYmxlLXNpemVkLCBkeW5hbWljYWxseSBhcHBlbmRlZCBsYXlvdXQgdG8gYSBmaXhlZC1zaXplZCBsYXlvdXQgKGBzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXRgKSB3aXRoIHN0YXRpYyBvZmZzZXRzIGZvciBlYWNoIGV4dGVuc2lvbiB0eXBlLlxcblxcbjEuIFRoZSBuZXcgYHNrYl9leHRfbGF5b3V0YCBpcyBhbGxvY2F0ZWQgZnJvbSBhIHNsYWIgY2FjaGUsIGFuZCBsaWtlIHRoZSBvbGQgY29kZSwgb25seSB0aGUgaGVhZGVyIChgcmVmY250YCBhbmQgYHByZXNlbnRfZXh0ZW5zaW9uc2ApIGlzIGluaXRpYWxpemVkLiBUaGUgZXh0ZW5zaW9uIGRhdGEgc2xvdHMgcmVtYWluIHVuaW5pdGlhbGl6ZWQgdW50aWwgZXhwbGljaXRseSByZXF1ZXN0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIuXFxuMi4gVGhlIHVuaW5pdGlhbGl6ZWQgc2xvdHMgYXJlIHN0cmljdGx5IGd1YXJkZWQgYnkgdGhlIGBwcmVzZW50X2V4dGVuc2lvbnNgIGJpdG1hcC4gVGhleSBjYW5ub3QgYmUgYWNjZXNzZWQgdW5sZXNzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpcyBzZXQsIHdoaWNoIG9ubHkgaGFwcGVucyB3aGVuIGFuIGV4dGVuc2lvbiBpcyBwcm9wZXJseSBhZGRlZCBhbmQgaW5pdGlhbGl6ZWQuXFxuMy4gV2hlbiBjb3B5aW5nIGFuIGV4dGVuc2lvbiAoYHNrYl9leHRfbWF5YmVfY293YCksIHRoZSBjb2RlIGNvcGllcyB0aGUgaGVhZGVyIGFuZCBvbmx5IHRoZSBwcmVzZW50IGV4dGVuc2lvbnMsIGxlYXZpbmcgdGhlIHVudXNlZCBzbG90cyB1bmluaXRpYWxpemVkLiBUaGlzIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHRoZSBvbGQgYmVoYXZpb3IgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXFxuNC4gYHNrYl9leHRgIGFuZCBpdHMgZXh0ZW5zaW9ucyBhcmUgaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZXMgdXNlZCBmb3IgbWV0YWRhdGEgKGUuZy4sIElQc2VjLCBUQywgYnJpZGdlIG5ldGZpbHRlcikgYW5kIGFyZSBub3QgY29waWVkIHRvIHVzZXJzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmssIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgaW5mby1sZWFrcy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIGluY29ycmVjdCBvZmZzZXQgY2FsY3VsYXRpb25zIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDhjNmM0MDNmODZmMWFiYTA2YzNiNDkxMmIzMDlhYzM1ZjMzY2VlY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE2OjU3OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDk1MTg0MTgzMTgwZjYuLjVhNTE0M2U0N2IzMDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtNTAxMSw0NSArNTAxMSw4MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9uZmN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGxvbmcgbmZjdClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19TS0JfRVhURU5TSU9OU1xuLWVudW0gc2tiX2V4dF9pZCB7XG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG4tXHRTS0JfRVhUX0JSSURHRV9ORixcbisjZGVmaW5lIFNLQl9FWFRfWF9CUklER0VfTkZcdFgoU0tCX0VYVF9CUklER0VfTkYsIHN0cnVjdCBuZl9icmlkZ2VfaW5mbylcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX0JSSURHRV9ORlxuICNlbmRpZlxuLSNpZmRlZiBDT05GSUdfWEZSTVxuLVx0U0tCX0VYVF9TRUNfUEFUSCxcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfWEZSTSlcbisjZGVmaW5lIFNLQl9FWFRfWF9TRUNfUEFUSFx0WChTS0JfRVhUX1NFQ19QQVRILCBzdHJ1Y3Qgc2VjX3BhdGgpXG4rI2Vsc2VcbisjZGVmaW5lIFNLQl9FWFRfWF9TRUNfUEFUSFxuICNlbmRpZlxuK1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVClcbi1cdFRDX1NLQl9FWFQsXG4rI2RlZmluZSBTS0JfRVhUX1hfVENcdFx0WChUQ19TS0JfRVhULCBzdHJ1Y3QgdGNfc2tiX2V4dClcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX1RDXG4gI2VuZGlmXG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuLVx0U0tCX0VYVF9NUFRDUCxcbisjZGVmaW5lIFNLQl9FWFRfWF9NUFRDUFx0XHRYKFNLQl9FWFRfTVBUQ1AsIHN0cnVjdCBtcHRjcF9leHQpXG4rI2Vsc2VcbisjZGVmaW5lIFNLQl9FWFRfWF9NUFRDUFxuICNlbmRpZlxuK1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19NQ1RQX0ZMT1dTKVxuLVx0U0tCX0VYVF9NQ1RQLFxuKyNkZWZpbmUgU0tCX0VYVF9YX01DVFBcdFx0WChTS0JfRVhUX01DVFAsIHN0cnVjdCBtY3RwX2Zsb3cpXG4rI2Vsc2VcbisjZGVmaW5lIFNLQl9FWFRfWF9NQ1RQXG4gI2VuZGlmXG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuLVx0U0tCX0VYVF9QU1AsXG4rI2RlZmluZSBTS0JfRVhUX1hfUFNQXHRcdFgoU0tCX0VYVF9QU1AsIHN0cnVjdCBwc3Bfc2tiX2V4dClcbisjZWxzZVxuKyNkZWZpbmUgU0tCX0VYVF9YX1BTUFxuICNlbmRpZlxuK1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19DQU4pXG4tXHRTS0JfRVhUX0NBTixcbisjZGVmaW5lIFNLQl9FWFRfWF9DQU5cdFx0WChTS0JfRVhUX0NBTiwgc3RydWN0IGNhbl9za2JfZXh0KVxuKyNlbHNlXG4rI2RlZmluZSBTS0JfRVhUX1hfQ0FOXG4gI2VuZGlmXG4tXHRTS0JfRVhUX05VTSwgLyogbXVzdCBiZSBsYXN0ICovXG4rXG4rI2RlZmluZSBTS0JfRVhUX0ZPUkVBQ0goWClcdFxcXG4rXHRTS0JfRVhUX1hfQlJJREdFX05GXHRcXFxuK1x0U0tCX0VYVF9YX1NFQ19QQVRIXHRcXFxuK1x0U0tCX0VYVF9YX1RDXHRcdFxcXG4rXHRTS0JfRVhUX1hfTVBUQ1BcdFx0XFxcbitcdFNLQl9FWFRfWF9NQ1RQXHRcdFxcXG4rXHRTS0JfRVhUX1hfUFNQXHRcdFxcXG4rXHRTS0JfRVhUX1hfQ0FOXG4rXG4rZW51bSBza2JfZXh0X2lkIHtcbisjZGVmaW5lIFgoaWQsIHR5cGUpXHRpZCxcbitcdFNLQl9FWFRfRk9SRUFDSChYKVxuKyN1bmRlZiBYXG4rXHRTS0JfRVhUX05VTSxcbiB9O1xuIFxuK2V4dGVybiBjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV07XG4rXG4gLyoqXG4gICpcdHN0cnVjdCBza2JfZXh0IC0gc2tfYnVmZiBleHRlbnNpb25zXG4gICpcdEByZWZjbnQ6IDEgb24gYWxsb2NhdGlvbiwgZGVhbGxvY2F0ZWQgb24gMFxuLSAqXHRAb2Zmc2V0OiBvZmZzZXQgdG8gYWRkIHRvIEBkYXRhIHRvIG9idGFpbiBleHRlbnNpb24gYWRkcmVzc1xuLSAqXHRAY2h1bmtzOiBzaXplIGN1cnJlbnRseSBhbGxvY2F0ZWQsIHN0b3JlZCBpbiBTS0JfRVhUX0FMSUdOX1NISUZUIHVuaXRzXG4rICpcdEBwcmVzZW50X2V4dGVuc2lvbnM6IGJpdG1hcCBvZiBleHRlbnNpb25zIHN0b3JlZCBpbiBAZGF0YVxuICAqXHRAZGF0YTogc3RhcnQgb2YgZXh0ZW5zaW9uIGRhdGEsIHZhcmlhYmxlIHNpemVkXG4gICpcbi0gKlx0Tm90ZTogb2Zmc2V0cy9sZW5ndGhzIGFyZSBzdG9yZWQgaW4gY2h1bmtzIG9mIDggYnl0ZXMsIHRoaXMgYWxsb3dzXG4tICpcdHRvIHVzZSAndTgnIHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aCBvZiBleHRlbnNpb24gZGF0YS5cbisgKlx0RWFjaCBleHRlbnNpb24gaWQgb2NjdXBpZXMgYSBmaXhlZCBzbG90IHdpdGhpbiBAZGF0YSwgbG9jYXRlZCBhdFxuKyAqXHRza2JfZXh0X29mZnNldFtpZF0gY2h1bmtzIG9mIDggYnl0ZXMuIFN0b3Jpbmcgb2Zmc2V0cy9sZW5ndGhzXG4rICpcdGluIDgtYnl0ZSBjaHVua3MgYWxsb3dzICd1OCcgdHlwZXMgd2hpbGUgYWxsb3dpbmcgdXAgdG8gMmtiIHdvcnRoXG4rICpcdG9mIGV4dGVuc2lvbiBkYXRhLlxuICAqL1xuIHN0cnVjdCBza2JfZXh0IHtcbiBcdHJlZmNvdW50X3QgcmVmY250O1xuLVx0dTggb2Zmc2V0W1NLQl9FWFRfTlVNXTsgLyogaW4gY2h1bmtzIG9mIDggYnl0ZXMgKi9cbi1cdHU4IGNodW5rcztcdFx0Lyogc2FtZSAqL1xuK1x0dTggcHJlc2VudF9leHRlbnNpb25zO1xuIFx0Y2hhciBkYXRhW10gX19hbGlnbmVkKDgpO1xuIH07XG4gXG5AQCAtNTA4Nyw3ICs1MTIzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3NrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGkpXG4ge1xuLVx0cmV0dXJuICEhZXh0LVx1MDAzZW9mZnNldFtpXTtcbitcdHJldHVybiBleHQtXHUwMDNlcHJlc2VudF9leHRlbnNpb25zIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2MgaSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfZXh0X2V4aXN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcbkBAIC01MTA2LDcgKzUxNDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9leHRfZmluZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4gXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSkge1xuIFx0XHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVx1MDAzZWV4dGVuc2lvbnM7XG4gXG4tXHRcdHJldHVybiAodm9pZCAqKWV4dCArIChleHQtXHUwMDNlb2Zmc2V0W2lkXSBcdTAwM2NcdTAwM2MgMyk7XG4rXHRcdHJldHVybiAodm9pZCAqKWV4dCArIChza2JfZXh0X29mZnNldFtpZF0gXHUwMDNjXHUwMDNjIDMpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYzgyYTE0NzJhNWVhOC4uOGU1ZGI1Nzk3MjVkMCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTUxMzQsNDcgKzUxMzQsMzIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnQpO1xuICNkZWZpbmUgU0tCX0VYVF9DSFVOS1NJWkVPRih4KVx0KEFMSUdOKChzaXplb2YoeCkpLCBTS0JfRVhUX0FMSUdOX1ZBTFVFKSAvIFNLQl9FWFRfQUxJR05fVkFMVUUpXG4gXG4gc3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHtcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbi1cdFtTS0JfRVhUX0JSSURHRV9ORl0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBuZl9icmlkZ2VfaW5mbyksXG4tI2VuZGlmXG4tI2lmZGVmIENPTkZJR19YRlJNXG4tXHRbU0tCX0VYVF9TRUNfUEFUSF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBzZWNfcGF0aCksXG4tI2VuZGlmXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKVxuLVx0W1RDX1NLQl9FWFRdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgdGNfc2tiX2V4dCksXG4tI2VuZGlmXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuLVx0W1NLQl9FWFRfTVBUQ1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbXB0Y3BfZXh0KSxcbi0jZW5kaWZcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUNUUF9GTE9XUylcbi1cdFtTS0JfRVhUX01DVFBdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbWN0cF9mbG93KSxcbi0jZW5kaWZcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG4tXHRbU0tCX0VYVF9QU1BdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgcHNwX3NrYl9leHQpLFxuLSNlbmRpZlxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19DQU4pXG4tXHRbU0tCX0VYVF9DQU5dID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgY2FuX3NrYl9leHQpLFxuLSNlbmRpZlxuKyNkZWZpbmUgWChpZCwgdHlwZSlcdFtpZF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHR5cGUpLFxuK1x0U0tCX0VYVF9GT1JFQUNIKFgpXG4rI3VuZGVmIFhcbiB9O1xuIFxuLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19ub19wcm9maWxlIHVuc2lnbmVkIGludCBza2JfZXh0X3RvdGFsX2xlbmd0aCh2b2lkKVxuLXtcbi1cdHVuc2lnbmVkIGludCBsID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3Qgc2tiX2V4dCk7XG4tXHRpbnQgaTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2tiX2V4dF90eXBlX2xlbik7IGkrKylcbi1cdFx0bCArPSBza2JfZXh0X3R5cGVfbGVuW2ldO1xuK3N0cnVjdCBza2JfZXh0X2xheW91dCB7XG4rXHR1OFx0aGVhZGVyW3NpemVvZihzdHJ1Y3Qgc2tiX2V4dCldIF9fYWxpZ25lZChTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbisjZGVmaW5lIFgoaWQsIHR5cGUpXHR0eXBlIGZfIyNpZCBfX2FsaWduZWQoU0tCX0VYVF9BTElHTl9WQUxVRSk7XG4rXHRTS0JfRVhUX0ZPUkVBQ0goWClcbisjdW5kZWYgWFxuK307XG4gXG4tXHRyZXR1cm4gbDtcbi19XG4rY29uc3QgdTggc2tiX2V4dF9vZmZzZXRbU0tCX0VYVF9OVU1dID0ge1xuKyNkZWZpbmUgWChpZCwgdHlwZSlcdFtpZF0gPSBvZmZzZXRvZihzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXQsIGZfIyNpZCkgLyBTS0JfRVhUX0FMSUdOX1ZBTFVFLFxuK1x0U0tCX0VYVF9GT1JFQUNIKFgpXG4rI3VuZGVmIFhcbit9O1xuK0VYUE9SVF9TWU1CT0woc2tiX2V4dF9vZmZzZXQpO1xuIFxuIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBfX25vX3Byb2ZpbGUgc2tiX2V4dGVuc2lvbnNfaW5pdCh2b2lkKVxuIHtcbiBcdEJVSUxEX0JVR19PTihTS0JfRVhUX05VTSBcdTAwM2UgOCk7XG4tXHRCVUlMRF9CVUdfT04oc2tiX2V4dF90b3RhbF9sZW5ndGgoKSBcdTAwM2UgMjU1KTtcbitcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHNrYl9leHRfbGF5b3V0KSBcdTAwM2UgMjU1ICogU0tCX0VYVF9BTElHTl9WQUxVRSk7XG4gXG4gXHRza2J1ZmZfZXh0X2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXCJza2J1ZmZfZXh0X2NhY2hlXCIsXG4tXHRcdFx0XHRcdCAgICAgU0tCX0VYVF9BTElHTl9WQUxVRSAqIHNrYl9leHRfdG90YWxfbGVuZ3RoKCksXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBza2JfZXh0X2xheW91dCksXG4gXHRcdFx0XHRcdCAgICAgMCxcbiBcdFx0XHRcdFx0ICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQyxcbiBcdFx0XHRcdFx0ICAgICBOVUxMKTtcbkBAIC03MDgzLDcgKzcwNjgsNyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9jb25kZW5zZSk7XG4gI2lmZGVmIENPTkZJR19TS0JfRVhURU5TSU9OU1xuIHN0YXRpYyB2b2lkICpza2JfZXh0X2dldF9wdHIoc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGlkKVxuIHtcbi1cdHJldHVybiAodm9pZCAqKWV4dCArIChleHQtXHUwMDNlb2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuK1x0cmV0dXJuICh2b2lkICopZXh0ICsgKHNrYl9leHRfb2Zmc2V0W2lkXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuIH1cbiBcbiAvKipcbkBAIC03MTAwLDcgKzcwODUsNyBAQCBzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKVxuIFx0c3RydWN0IHNrYl9leHQgKm5ldyA9IGttZW1fY2FjaGVfYWxsb2Moc2tidWZmX2V4dF9jYWNoZSwgZmxhZ3MpO1xuIFxuIFx0aWYgKG5ldykge1xuLVx0XHRtZW1zZXQobmV3LVx1MDAzZW9mZnNldCwgMCwgc2l6ZW9mKG5ldy1cdTAwM2VvZmZzZXQpKTtcbitcdFx0bmV3LVx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyA9IDA7XG4gXHRcdHJlZmNvdW50X3NldChcdTAwMjZuZXctXHUwMDNlcmVmY250LCAxKTtcbiBcdH1cbiBcbkBAIC03MTExLDYgKzcwOTYsNyBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgb2xkX2FjdGl2ZSlcbiB7XG4gXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3O1xuK1x0aW50IGk7XG4gXG4gXHRpZiAocmVmY291bnRfcmVhZChcdTAwMjZvbGQtXHUwMDNlcmVmY250KSA9PSAxKVxuIFx0XHRyZXR1cm4gb2xkO1xuQEAgLTcxMTksNyArNzEwNSwxMiBAQCBzdGF0aWMgc3RydWN0IHNrYl9leHQgKnNrYl9leHRfbWF5YmVfY293KHN0cnVjdCBza2JfZXh0ICpvbGQsXG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRtZW1jcHkobmV3LCBvbGQsIG9sZC1cdTAwM2VjaHVua3MgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbitcdG1lbWNweShuZXcsIG9sZCwgU0tCX0VYVF9DSFVOS1NJWkVPRigqb2xkKSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgU0tCX0VYVF9OVU07IGkrKykge1xuK1x0XHRpZiAob2xkLVx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGkpKVxuK1x0XHRcdG1lbWNweShza2JfZXh0X2dldF9wdHIobmV3LCBpKSwgc2tiX2V4dF9nZXRfcHRyKG9sZCwgaSksXG4rXHRcdFx0ICAgICAgIHNrYl9leHRfdHlwZV9sZW5baV0gKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtcbitcdH1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZuZXctXHUwMDNlcmVmY250LCAxKTtcbiBcbiAjaWZkZWYgQ09ORklHX1hGUk1cbkBAIC03MTU2LDEyICs3MTQ3LDggQEAgc3RhdGljIHN0cnVjdCBza2JfZXh0ICpza2JfZXh0X21heWJlX2NvdyhzdHJ1Y3Qgc2tiX2V4dCAqb2xkLFxuIHZvaWQgKl9fc2tiX2V4dF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkLFxuIFx0XHQgICAgc3RydWN0IHNrYl9leHQgKmV4dClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbmV3bGVuLCBuZXdvZmYgPSBTS0JfRVhUX0NIVU5LU0laRU9GKCpleHQpO1xuLVxuIFx0c2tiX2V4dF9wdXQoc2tiKTtcbi1cdG5ld2xlbiA9IG5ld29mZiArIHNrYl9leHRfdHlwZV9sZW5baWRdO1xuLVx0ZXh0LVx1MDAzZWNodW5rcyA9IG5ld2xlbjtcbi1cdGV4dC1cdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xuK1x0ZXh0LVx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyA9IDEgXHUwMDNjXHUwMDNjIGlkO1xuIFx0c2tiLVx1MDAzZWV4dGVuc2lvbnMgPSBleHQ7XG4gXHRza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPSAxIFx1MDAzY1x1MDAzYyBpZDtcbiBcdHJldHVybiBza2JfZXh0X2dldF9wdHIoZXh0LCBpZCk7XG5AQCAtNzE4NCwzMSArNzE3MSwyMyBAQCBFWFBPUlRfU1lNQk9MX05TX0dQTChfX3NrYl9leHRfc2V0LCBcIk5FVERFVl9JTlRFUk5BTFwiKTtcbiAgKi9cbiB2b2lkICpza2JfZXh0X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXG4ge1xuLVx0c3RydWN0IHNrYl9leHQgKm5ldywgKm9sZCA9IE5VTEw7XG4tXHR1bnNpZ25lZCBpbnQgbmV3bGVuLCBuZXdvZmY7XG4rXHRzdHJ1Y3Qgc2tiX2V4dCAqbmV3O1xuIFxuIFx0aWYgKHNrYi1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucykge1xuLVx0XHRvbGQgPSBza2ItXHUwMDNlZXh0ZW5zaW9ucztcbi1cbi1cdFx0bmV3ID0gc2tiX2V4dF9tYXliZV9jb3cob2xkLCBza2ItXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpO1xuK1x0XHRuZXcgPSBza2JfZXh0X21heWJlX2Nvdyhza2ItXHUwMDNlZXh0ZW5zaW9ucyxcbitcdFx0XHRcdFx0c2tiLVx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKTtcbiBcdFx0aWYgKCFuZXcpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRcdGlmIChfX3NrYl9leHRfZXhpc3QobmV3LCBpZCkpXG4gXHRcdFx0Z290byBzZXRfYWN0aXZlO1xuLVxuLVx0XHRuZXdvZmYgPSBuZXctXHUwMDNlY2h1bmtzO1xuIFx0fSBlbHNlIHtcbi1cdFx0bmV3b2ZmID0gU0tCX0VYVF9DSFVOS1NJWkVPRigqbmV3KTtcbi1cbiBcdFx0bmV3ID0gX19za2JfZXh0X2FsbG9jKEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIW5ldylcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdG5ld2xlbiA9IG5ld29mZiArIHNrYl9leHRfdHlwZV9sZW5baWRdO1xuLVx0bmV3LVx1MDAzZWNodW5rcyA9IG5ld2xlbjtcbi1cdG5ldy1cdTAwM2VvZmZzZXRbaWRdID0gbmV3b2ZmO1xuK1x0bmV3LVx1MDAzZXByZXNlbnRfZXh0ZW5zaW9ucyB8PSAxIFx1MDAzY1x1MDAzYyBpZDtcbiBzZXRfYWN0aXZlOlxuIFx0c2tiLVx1MDAzZXNsb3dfZ3JvID0gMTtcbiBcdHNrYi1cdTAwM2VleHRlbnNpb25zID0gbmV3O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTc6MDE6MjEuMTIxOTg4NTYxWiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzEzNzYwMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzIGluIHRoZSBgc2tiX2V4dGAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYHNrYl9leHRgIGlzIG1hbmFnZWQuICBJbnN0ZWFkIG9mIHZhcmlhYmxlLXNpemVkIGV4dGVuc2lvbnMgd2l0aCBvZmZzZXRzIHRyYWNrZWQgaW4gYGV4dC1cdTAwM2VvZmZzZXRgLCB3ZSdyZSBtb3ZpbmcgdG8gYSBmaXhlZCBgc3RydWN0IHNrYl9leHRfbGF5b3V0YCB3aXRoIHByZS1kZWZpbmVkIG9mZnNldHMgYW5kIGEgYml0bWFwIChgcHJlc2VudF9leHRlbnNpb25zYCkgZm9yIHRyYWNraW5nIHdoaWNoIGV4dGVuc2lvbnMgYXJlIGFjdHVhbGx5IHByZXNlbnQuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIGEgY2xhc3NpYyBidWcgY2xhc3MuXG5cblRoZSBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGBza2J1ZmZfZXh0X2NhY2hlYCwgYSBzbGFiIGNhY2hlLiBBbGxvY2F0aW9uIHdpdGggYGttZW1fY2FjaGVfYWxsb2NgICpkb2Vzbid0KiB6ZXJvIHRoZSBlbnRpcmUgc3RydWN0OyBpdCBvbmx5IGluaXRpYWxpemVzIGBwcmVzZW50X2V4dGVuc2lvbnNgIHRvIHplcm8gYW5kIHRoZSByZWZjb3VudC4gIFNvLCB0aGUgZXh0ZW5zaW9uIHNsb3RzIHRoZW1zZWx2ZXMgYXJlIHVuaW5pdGlhbGl6ZWQgYXQgYWxsb2NhdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGRpZ2dpbmcgZm9yIHBvdGVudGlhbCBwcm9ibGVtcy5cblxuV2hlbiBhbiBleHRlbnNpb24gaXMgYWRkZWQgKHVzaW5nIGBza2JfZXh0X2FkZGAgb3IgYF9fc2tiX2V4dF9zZXRgKSwgdGhlIGNvZGUgc2V0cyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gYHByZXNlbnRfZXh0ZW5zaW9uc2AgYW5kIHRoZSAqY2FsbGVyKiBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBleHRlbnNpb24gZGF0YSB3aXRoaW4gaXRzIGZpeGVkIHNsb3QuIFRoYXQncyBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQsIGJ1dC4uLiB3aGF0IGlmIHRoZSBjYWxsZXIgZG9lc24ndCBpbml0aWFsaXplICphbGwqIHRoZSBmaWVsZHMgb2YgdGhlIGV4dGVuc2lvbiwgb3IgdGhlcmUncyBwYWRkaW5nIHdpdGhpbiB0aGUgc3RydWN0PyBJdCBkb2Vzbid0IHNlZW0gdG8gYmUgYSBuZXcgcHJvYmxlbS5cblxuVGhlIGtleSBwb2ludCBoZXJlIGlzIGBza2JfZXh0X21heWJlX2Nvd2AgKGNvcHktb24td3JpdGUpLiBUaGUgb2xkIGNvZGUgY29waWVkIHRoZSB3aG9sZSBjaHVuaywgd2hpY2ggaW5jbHVkZWQgYm90aCBpbml0aWFsaXplZCBleHRlbnNpb25zIGFuZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBuZXcgY29kZSBkb2VzIHRoaXM6IEZpcnN0LCBpdCBjb3BpZXMgdGhlIGhlYWRlcjogYG1lbWNweShuZXcsIG9sZCwgU0tCX0VYVF9DSFVOS1NJWkVPRigqb2xkKSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO2AgVGhlbiwgaXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgKnByZXNlbnQqIGV4dGVuc2lvbnMgYW5kIGNvcGllcyBvbmx5IHRoZSBkYXRhOiBgbWVtY3B5KHNrYl9leHRfZ2V0X3B0cihuZXcsIGkpLCBza2JfZXh0X2dldF9wdHIob2xkLCBpKSwgc2tiX2V4dF90eXBlX2xlbltpXSAqIFNLQl9FWFRfQUxJR05fVkFMVUUpO2BcblxuTm93LCB0aGUgcG90ZW50aWFsIGlzc3VlIGJlY29tZXMgY2xlYXI6IHRoZSBuZXcgY29kZSBvbmx5IGNvcGllcyB0aGUgZGF0YSBvZiBleHRlbnNpb25zIHRoYXQgYXJlICpwcmVzZW50Ki4gVGhlIHVuaW5pdGlhbGl6ZWQgc2xvdHMgZm9yIGV4dGVuc2lvbnMgKm5vdCogcHJlc2VudCBpbiB0aGUgb2xkIGBza2JfZXh0YCByZW1haW4gdW5pbml0aWFsaXplZCBpbiB0aGUgbmV3IG9uZS4gV2lsbCB0aGF0IGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmU/IElmIGFuIGV4dGVuc2lvbiBpcyBhZGRlZCBsYXRlciwgdGhlIGNhbGxlciB3aWxsIGluaXRpYWxpemUgaXQuIElmIGFuIGV4dGVuc2lvbiBpcyBuZXZlciB1c2VkLCBpdCByZW1haW5zIHVudG91Y2hlZC4gVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBldmVyIGFjY2Vzc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBzZW50IG92ZXIgdGhlIG5ldHdvcms/XG5cbkkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYHNrYl9leHRgIGlzbid0IGxlYWtlZCB0byB1c2VyIHNwYWNlIGJlY2F1c2UgdGhhdCB3b3VsZCBiZSBhIHNlcmlvdXMgaW5mbyBsZWFrLiBMdWNraWx5LCBgc2tiX2V4dGAgaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSBhdHRhY2hlZCB0byBgc2tfYnVmZmAgYW5kIHVzZWQgYnkgdGhpbmdzIGxpa2UgSVBzZWMsIGJyaWRnZSBuZXRmaWx0ZXIsIFRDLCBNUFRDUCwgZXRjLiwgYW5kIG5vdCBzZW50IHRvIHVzZXJzcGFjZS5cblxuSG93ZXZlciwgY29uc2lkZXIgdGhpcyBzY2VuYXJpbzogIGlmIGBvbGRgIGhhZCBhbiBleHRlbnNpb24gYW5kLCBiZWNhdXNlIG9mIHBhZGRpbmcsIGl0IGhhZCAqdW5pbml0aWFsaXplZCogbWVtb3J5LCB0aGUgYG1lbWNweWAgd291bGQgbm93IGNvcHkgdGhhdCB1bmluaXRpYWxpemVkIGRhdGEgdG8gYG5ld2AuICBUaGlzIGlzbid0IGEgbmV3IGlzc3VlLCBLTVNBTiB3b3VsZCBiZSB0cmFja2luZyB0aGUgZGF0YSBhbmQgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSB3b3VsZG4ndCBiZSBhIHByb2JsZW0gYnkgaXRzZWxmLiBCdXQgd2hhdCBhYm91dCB0aGUgaGVhZGVyP1xuXG5UaGUgaGVhZGVyIG9mIHRoZSBgc2tiX2V4dGAgKHN0cnVjdCBgc2tiX2V4dGApIGlzIGNvcGllZCB3aXRoIGBtZW1jcHkobmV3LCBvbGQsIFNLQl9FWFRfQ0hVTktTSVpFT0YoKm9sZCkgKiBTS0JfRVhUX0FMSUdOX1ZBTFVFKTtgLiBOb3csIGBTS0JfRVhUX0NIVU5LU0laRU9GKCpvbGQpICogU0tCX0VYVF9BTElHTl9WQUxVRWAgaXMgOCBieXRlcywgZnJvbSBzdHJ1Y3QgYHNrYl9leHRgIChjb250YWluaW5nIHJlZmNvdW50IGFuZCBwcmVzZW50X2V4dGVuc2lvbnMpLiBUaGlzIGluY2x1ZGVzIDMgYnl0ZXMgb2YgdW5pbml0aWFsaXplZCBwYWRkaW5nLiBDb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUga2VybmVsIGlzIGdlbmVyYWxseSBva2F5LCB1bmxlc3MgaXQgaXMgdXNlZCBpbiBhIGJyYW5jaCwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1dCBvbmx5IGNvbXBsYWlucyBpZiBhbiBhY2Nlc3MgaXMgbWFkZS4gU28gdGhpcyBwcm9iYWJseSBpc24ndCBhIHByb2JsZW0uXG5cbk5vdywgY2hlY2tpbmcgdGhlIG9sZCBjb2RlOiBgbWVtc2V0KG5ldy1cdTAwM2VvZmZzZXQsIDAsIHNpemVvZihuZXctXHUwMDNlb2Zmc2V0KSk7YC4gSW4gdGhlIG5ldyBjb2RlLCBvbmx5IGBuZXctXHUwMDNlcHJlc2VudF9leHRlbnNpb25zID0gMDtgIGlzIGRvbmUuIEJ1dCwgc2luY2UgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpcyBub3cgZml4ZWQsIHRoaXMgc2hvdWxkIGJlIGZpbmUuIEl0IGlzIGFsbG9jYXRlZCBmcm9tIGEgc2xhYiBjYWNoZS5cblxuQSBrZXkgY29uY2VybiBpcyBLTVNBTi1zcGVjaWZpYzogYHNrYl9leHRfbWF5YmVfY293YCB1c2VzIGBtZW1jcHkoLi4uLCBza2JfZXh0X3R5cGVfbGVuW2ldICogU0tCX0VYVF9BTElHTl9WQUxVRSlgIHRvIGNvcHkgZWFjaCBleHRlbnNpb24uIGBza2JfZXh0X3R5cGVfbGVuYCBzdG9yZXMgYFNLQl9FWFRfQ0hVTktTSVpFT0YodHlwZSlgIChjaHVuay1hbGlnbmVkIHNpemUgb2YgdGhlIGV4dGVuc2lvbikuIElmIHRoZSBleHRlbnNpb24gc2l6ZSBpc24ndFxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMTo1MC44MzU3NTIwMDFaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDc1NTU1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX2V4dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMjkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9NDg9aW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtNTEtXFx0c3RydWN0IGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjUyOlxcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTc4LVxcdFxcdC8qIHNhdmUgZnJhbWVfbGVuIHRvIHJldXNlIGl0IHdoZW4gdHJhbnNtaXNzaW9uIGlzIGNvbXBsZXRlZCAqL1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6Nzk6XFx0XFx0Y3N4ID0gY2FuX3NrYl9leHRfZmluZChza2IpO1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtODAtXFx0XFx0aWYgKGNzeClcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MTAyPV9fY2FuX2dldF9lY2hvX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWR4LFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xMTctXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtXFx1MDAzZWVjaG9fc2tiW2lkeF07XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoxMTg6XFx0XFx0c3RydWN0IGNhbl9za2JfZXh0ICpjc3g7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xMTktXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTEyNi1cXHRcXHRpZiAoZnJhbWVfbGVuX3B0cikge1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MTI3OlxcdFxcdFxcdGNzeCA9IGNhbl9za2JfZXh0X2ZpbmQoc2tiKTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTEyOC1cXHRcXHRcXHRpZiAoY3N4KVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYz0xNzk9dm9pZCBjYW5fZnJlZV9lY2hvX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWR4LFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xOTEtXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtXFx1MDAzZWVjaG9fc2tiW2lkeF07XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoxOTI6XFx0XFx0c3RydWN0IGNhbl9za2JfZXh0ICpjc3g7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xOTMtXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xOTQtXFx0XFx0aWYgKGZyYW1lX2xlbl9wdHIpIHtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjE5NTpcXHRcXHRcXHRjc3ggPSBjYW5fc2tiX2V4dF9maW5kKHNrYik7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0xOTYtXFx0XFx0XFx0aWYgKGNzeClcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MjE1PXN0cnVjdCBza19idWZmICphbGxvY19jYW5fc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fZnJhbWUgKipjZilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjE3LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoyMTg6XFx0c3RydWN0IGNhbl9za2JfZXh0ICpjc3g7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yMTktXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTIyMy1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjIyNDpcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTIyNS1cXHRpZiAoIWNzeCkge1xcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYz0yNDU9c3RydWN0IHNrX2J1ZmYgKmFsbG9jX2NhbmZkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yNDgtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjI0OTpcXHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeDtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI1MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjU0LVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6MjU1OlxcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjU2LVxcdGlmICghY3N4KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jPTI3OT1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FueGxfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTI4My1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM6Mjg0OlxcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMjg1LVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTItXFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzoyOTM6XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0yOTQtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmM9MzM0PXN0YXRpYyBib29sIGNhbl9za2JfaW5pdF92YWxpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzM1LXtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jOjMzNjpcXHRzdHJ1Y3QgY2FuX3NrYl9leHQgKmNzeCA9IGNhbl9za2JfZXh0X2ZpbmQoc2tiKTtcXG5kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jLTMzNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMtMzQxLVxcdFxcdGlmICghY3N4KSB7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYzozNDI6XFx0XFx0XFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxuZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYy0zNDMtXFx0XFx0XFx0aWYgKCFjc3gpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYz0zOT1zdGF0aWMgbmV0ZGV2X3R4X3QgdnhjYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqb3NrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTQzLVxcdHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwZWVyc3RhdHMsICpzcmNzdGF0cyA9IFxcdTAwMjZkZXYtXFx1MDAzZXN0YXRzO1xcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jOjQ0OlxcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4O1xcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTQ1LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdnhjYW4uYy02OS1cXHQvKiB0aGUgY2xvbmVkIHNrYiBwb2ludHMgdG8gdGhlIHNrYiBleHRlbnNpb24gb2YgdGhlIGFscmVhZHkgY2xvbmVkXFxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmM6NzA6XFx0ICogb3NrYiB3aXRoIGFuIGluY3JlYXNlZCByZWZjb3VudC4gc2tiX2V4dF9hZGQoKSBjcmVhdGVzIGEgY29weSB0b1xcbmRyaXZlcnMvbmV0L2Nhbi92eGNhbi5jLTcxLVxcdCAqIHNlcGFyYXRlIHRoZSBza2IgZXh0ZW5zaW9uIGRhdGEgd2hpY2ggaXMgbmVlZGVkIHRvIHN0YXJ0IHdpdGggYVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNzMtXFx0ICovXFxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmM6NzQ6XFx0Y3N4ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0NBTik7XFxuZHJpdmVycy9uZXQvY2FuL3Z4Y2FuLmMtNzUtXFx0aWYgKCFjc3gpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jPTU3MTg9c3RhdGljIGJvb2wgbWx4NWVfdGNfcmVzdG9yZV9za2JfdGNfbWV0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWx4NV90Y19jdF9wcml2ICpjdF9wcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTcyMi1cXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KHNrYi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1NzIzOlxcdHN0cnVjdCB0Y19za2JfZXh0ICp0Y19za2JfZXh0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU3MjQtXFx0dTY0IGFjdF9taXNzX2Nvb2tpZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU3MzMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTczNDpcXHRcXHR0Y19za2JfZXh0ID0gdGNfc2tiX2V4dF9hbGxvYyhza2IpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU3MzU6XFx0XFx0aWYgKCF0Y19za2JfZXh0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTczNi1cXHRcXHRcXHRXQVJOX09OKDEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTc0MC1cXHRcXHRpZiAoYWN0X21pc3NfY29va2llKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTc0MTpcXHRcXHRcXHR0Y19za2JfZXh0LVxcdTAwM2VhY3RfbWlzc19jb29raWUgPSBhY3RfbWlzc19jb29raWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM6NTc0MjpcXHRcXHRcXHR0Y19za2JfZXh0LVxcdTAwM2VhY3RfbWlzcyA9IDE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTc0My1cXHRcXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU3NDQ6XFx0XFx0XFx0dGNfc2tiX2V4dC1cXHUwMDNlY2hhaW4gPSBjaGFpbjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NzQ1LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYz0zNjY9bWN0cF9pMmNfZ2V0X3R4X2Zsb3dfc3RhdGUoc3RydWN0IG1jdHBfaTJjX2RldiAqbWlkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmMtMzcyLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYzozNzM6XFx0ZmxvdyA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfTUNUUCk7XFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jLTM3NC1cXHRpZiAoIWZsb3cpXFxuLS1cXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmM9NDU0PXN0YXRpYyB2b2lkIG1jdHBfaTJjX2ludmFsaWRhdGVfdHhfZmxvdyhzdHJ1Y3QgbWN0cF9pMmNfZGV2ICptaWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L21jdHAvbWN0cC1pMmMuYy00NjEtXFxuZHJpdmVycy9uZXQvbWN0cC9tY3RwLWkyYy5jOjQ2MjpcXHRmbG93ID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9NQ1RQKTtcXG5kcml2ZXJzL25ldC9tY3RwL21jdHAtaTJjLmMtNDYzLVxcdGlmICghZmxvdylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMDM9c3RhdGljIGludCBuc2ltX2ZvcndhcmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICp0eF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA2LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbnNpbV9ycSAqcnEsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjEwNzpcXHRcXHRcXHQgICAgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTEzLVxcdFxcdGlmIChwc3BfZXh0KVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMTQ6XFx0XFx0XFx0X19za2JfZXh0X3B1dChwc3BfZXh0KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE1LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTIzPXN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjUtXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMjY6XFx0c3RydWN0IHNrYl9leHQgKnBzcF9leHQgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjctXFx0c3RydWN0IG5ldF9kZXZpY2UgKnBlZXJfZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ1Mj12b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1Mzp2b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTQtZW51bSBza2JfZHJvcF9yZWFzb25cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDU1PW5zaW1fZG9fcHNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTY6XFx0ICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMsIHN0cnVjdCBza2JfZXh0ICoqcHNwX2V4dCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Ny0jZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ2MT1uc2ltX2RvX3BzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDYyOlxcdCAgICBzdHJ1Y3QgbmV0ZGV2c2ltICpwZWVyX25zLCBzdHJ1Y3Qgc2tiX2V4dCAqKnBzcF9leHQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ2My17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDY3PXN0YXRpYyBpbmxpbmUgdm9pZFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0Njg6bnNpbV9wc3BfaGFuZGxlX2V4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tiX2V4dCAqcHNwX2V4dCkge31cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDY5LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTEwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxMTp2b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTEyLXtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTMtXFx0aWYgKHBzcF9leHQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjE0OlxcdFxcdF9fc2tiX2V4dF9zZXQoc2tiLCBTS0JfRVhUX1BTUCwgcHNwX2V4dCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTE1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xOD1uc2ltX2RvX3BzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ZGV2c2ltICpucyxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTk6XFx0ICAgIHN0cnVjdCBuZXRkZXZzaW0gKnBlZXJfbnMsIHN0cnVjdCBza2JfZXh0ICoqcHNwX2V4dClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTY4LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzo2OTpcXHRcXHRza2JfZXh0X3Jlc2V0KHNrYik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTcwLVxcdFxcdHNrYi1cXHUwMDNlbWFjX2xlbiA9IEVUSF9ITEVOO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jPTk2Nz1zdGF0aWMgdm9pZCBhdGgxMmtfZHBfY2NfY2xlYW51cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jLTEwMzMtXFx0XFx0XFx0XFx0XFx0XFx0IHNrYl9jYi1cXHUwMDNlcGFkZHJfZXh0X2Rlc2MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jOjEwMzQ6XFx0XFx0XFx0XFx0XFx0XFx0IHR4X2Rlc2NfaW5mby1cXHUwMDNlc2tiX2V4dF9kZXNjLVxcdTAwM2VsZW4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5jLTEwMzUtXFx0XFx0XFx0XFx0XFx0XFx0IERNQV9UT19ERVZJQ0UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuYzoxMDM2OlxcdFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHR4X2Rlc2NfaW5mby1cXHUwMDNlc2tiX2V4dF9kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmMtMTAzNy1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg9MzQ0PXN0cnVjdCBhdGgxMmtfdHhfZGVzY19pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaC0zNDYtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg6MzQ3OlxcdHN0cnVjdCBza19idWZmICpza2JfZXh0X2Rlc2M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oLTM0OC1cXHR1MzIgZGVzY19pZDsgLyogQ29va2llICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg9MzUzPXN0cnVjdCBhdGgxMmtfdHhfZGVzY19wYXJhbXMge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHAuaC0zNTQtXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwLmg6MzU1OlxcdHN0cnVjdCBza19idWZmICpza2JfZXh0X2Rlc2M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcC5oLTM1Ni1cXHR1OCBtYWNfaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmM9MTMxPXZvaWQgYXRoMTJrX2RwX3R4X3JlbGVhc2VfdHhidWYoc3RydWN0IGF0aDEya19kcCAqZHAsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmMtMTM1LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2ZHAtXFx1MDAzZXR4X2Rlc2NfbG9ja1twb29sX2lkXSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jOjEzNjpcXHR0eF9kZXNjLVxcdTAwM2Vza2JfZXh0X2Rlc2MgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYy0xMzctXFx0bGlzdF9tb3ZlX3RhaWwoXFx1MDAyNnR4X2Rlc2MtXFx1MDAzZWxpc3QsIFxcdTAwMjZkcC1cXHUwMDNldHhfZGVzY19mcmVlX2xpc3RbcG9vbF9pZF0pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jPTIzMj12b2lkIGF0aDEya19kcF90eF9mcmVlX3R4YnVmKHN0cnVjdCBhdGgxMmtfZHAgKmRwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jLTI0NS1cXHRcXHRkbWFfdW5tYXBfc2luZ2xlKGRwLVxcdTAwM2VkZXYsIHNrYl9jYi1cXHUwMDNlcGFkZHJfZXh0X2Rlc2MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF90eC5jOjI0NjpcXHRcXHRcXHRcXHQgZGVzY19wYXJhbXMtXFx1MDAzZXNrYl9leHRfZGVzYy1cXHUwMDNlbGVuLCBETUFfVE9fREVWSUNFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3R4LmM6MjQ3OlxcdFxcdGRldl9rZnJlZV9za2JfYW55KGRlc2NfcGFyYW1zLVxcdTAwM2Vza2JfZXh0X2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfdHguYy0yNDgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jPTEwNj1pbnQgYXRoMTJrX3dpZmk3X2RwX3R4KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMTE4LVxcdHN0cnVjdCBoYWxfdHhfbXNkdV9leHRfZGVzYyAqbXNnO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzoxMTk6XFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9leHRfZGVzYyA9IE5VTEw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTEyMC1cXHRzdHJ1Y3QgaGFsX3NybmcgKnRjbF9yaW5nO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM1OS1cXHRpZiAobXNkdV9leHRfZGVzYykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozNjA6XFx0XFx0c2tiX2V4dF9kZXNjID0gZGV2X2FsbG9jX3NrYihzaXplb2Yoc3RydWN0IGhhbF90eF9tc2R1X2V4dF9kZXNjKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjM2MTpcXHRcXHRpZiAoIXNrYl9leHRfZGVzYykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNjItXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjM2NjpcXHRcXHRza2JfcHV0KHNrYl9leHRfZGVzYywgc2l6ZW9mKHN0cnVjdCBoYWxfdHhfbXNkdV9leHRfZGVzYykpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzozNjc6XFx0XFx0bWVtc2V0KHNrYl9leHRfZGVzYy1cXHUwMDNlZGF0YSwgMCwgc2tiX2V4dF9kZXNjLVxcdTAwM2VsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjM2OTpcXHRcXHRtc2cgPSAoc3RydWN0IGhhbF90eF9tc2R1X2V4dF9kZXNjICopc2tiX2V4dF9kZXNjLVxcdTAwM2VkYXRhO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNzAtXFx0XFx0YXRoMTJrX3dpZmk3X2hhbF90eF9jbWRfZXh0X2Rlc2Nfc2V0dXAoYWIsIG1zZywgXFx1MDAyNnRpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNzItXFx0XFx0aWYgKGFkZF9odHRfbWV0YWRhdGEpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzczOlxcdFxcdFxcdHJldCA9IGF0aDEya193aWZpN19kcF9wcmVwYXJlX2h0dF9tZXRhZGF0YShza2JfZXh0X2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zNzQtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zODAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjM4MTpcXHRcXHR0aS5wYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRwLVxcdTAwM2VkZXYsIHNrYl9leHRfZGVzYy1cXHUwMDNlZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzgyOlxcdFxcdFxcdFxcdFxcdCAgc2tiX2V4dF9kZXNjLVxcdTAwM2VsZW4sIERNQV9UT19ERVZJQ0UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy0zODMtXFx0XFx0cmV0ID0gZG1hX21hcHBpbmdfZXJyb3IoZHAtXFx1MDAzZWRldiwgdGkucGFkZHIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM4Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6Mzg3OlxcdFxcdHRpLmRhdGFfbGVuID0gc2tiX2V4dF9kZXNjLVxcdTAwM2VsZW47XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTM4OC1cXHRcXHR0aS50eXBlID0gSEFMX1RDTF9ERVNDX1RZUEVfRVhUX0RFU0M7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMzkwLVxcdFxcdHNrYl9jYi1cXHUwMDNlcGFkZHJfZXh0X2Rlc2MgPSB0aS5wYWRkcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6MzkxOlxcdFxcdHR4X2Rlc2MtXFx1MDAzZXNrYl9leHRfZGVzYyA9IHNrYl9leHRfZGVzYztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtMzkyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy00NTMtXFx0XFx0ZG1hX3VubWFwX3NpbmdsZShkcC1cXHUwMDNlZGV2LCBza2JfY2ItXFx1MDAzZXBhZGRyX2V4dF9kZXNjLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzo0NTQ6XFx0XFx0XFx0XFx0IHNrYl9leHRfZGVzYy1cXHUwMDNlbGVuLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy00NTUtXFx0XFx0XFx0XFx0IERNQV9UT19ERVZJQ0UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy00NTYtZmFpbF9mcmVlX2V4dF9za2I6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjQ1NzpcXHRrZnJlZV9za2Ioc2tiX2V4dF9kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNDU4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jPTQ3Nj1hdGgxMmtfZHBfdHhfaHR0X3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoMTJrX2RwICpkcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy01MTQtXFx0XFx0ZG1hX3VubWFwX3NpbmdsZShkcC1cXHUwMDNlZGV2LCBza2JfY2ItXFx1MDAzZXBhZGRyX2V4dF9kZXNjLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYzo1MTU6XFx0XFx0XFx0XFx0IGRlc2NfcGFyYW1zLVxcdTAwM2Vza2JfZXh0X2Rlc2MtXFx1MDAzZWxlbiwgRE1BX1RPX0RFVklDRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjUxNjpcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShkZXNjX3BhcmFtcy1cXHUwMDNlc2tiX2V4dF9kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmMtNTE3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYz03Mzc9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2RwX3R4X2NvbXBsZXRlX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTc2Ni1cXHRcXHRkbWFfdW5tYXBfc2luZ2xlKGRwLVxcdTAwM2VkZXYsIHNrYl9jYi1cXHUwMDNlcGFkZHJfZXh0X2Rlc2MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjc2NzpcXHRcXHRcXHRcXHQgZGVzY19wYXJhbXMtXFx1MDAzZXNrYl9leHRfZGVzYy1cXHUwMDNlbGVuLCBETUFfVE9fREVWSUNFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3R4LmM6NzY4OlxcdFxcdGRldl9rZnJlZV9za2JfYW55KGRlc2NfcGFyYW1zLVxcdTAwM2Vza2JfZXh0X2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfdHguYy03NjktXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jPTkxMD12b2lkIGF0aDEya193aWZpN19kcF90eF9jb21wbGV0aW9uX2hhbmRsZXIoc3RydWN0IGF0aDEya19kcCAqZHAsIGludCByaW5nX2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTk4MS1cXHRcXHRkZXNjX3BhcmFtcy5za2IgPSB0eF9kZXNjLVxcdTAwM2Vza2I7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jOjk4MjpcXHRcXHRkZXNjX3BhcmFtcy5za2JfZXh0X2Rlc2MgPSB0eF9kZXNjLVxcdTAwM2Vza2JfZXh0X2Rlc2M7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF90eC5jLTk4My1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTE5MDI9c3RhdGljIGJvb2wgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbm9fbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xOTU0LVxcdHNrYi1cXHUwMDNlbWFyayA9IDA7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MTk1NTpcXHRza2JfZXh0X3Jlc2V0KHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTk1Ni1cXHRuZl9yZXNldF9jdChza2IpO1xcbi0tXFxuZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jPTEyNj1uZXRkZXZfdHhfdCBjdm1fb2N0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguYy0zNDktXFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jOjM1MDpcXHRza2JfZXh0X3Jlc2V0KHNrYik7XFxuZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jLTM1MS1cXHRuZl9yZXNldF9jdChza2IpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg9Mzk9Ym9vbCBjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00MC1cXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaDo0MTpzdGF0aWMgaW5saW5lIHN0cnVjdCBjYW5fc2tiX2V4dCAqY2FuX3NrYl9leHRfYWRkKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNDIte1xcbmluY2x1ZGUvbGludXgvY2FuL3NrYi5oOjQzOlxcdHN0cnVjdCBjYW5fc2tiX2V4dCAqY3N4ID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0NBTik7XFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNDQtXFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NDU6XFx0Lyogc2tiX2V4dF9hZGQoKSByZXR1cm5zIHVuaW5pdGlhbGl6ZWQgc3BhY2UgKi9cXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC00Ni1cXHRpZiAoY3N4KVxcbi0tXFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmgtNTEtXFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NTI6c3RhdGljIGlubGluZSBzdHJ1Y3QgY2FuX3NrYl9leHQgKmNhbl9za2JfZXh0X2ZpbmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC01My17XFxuaW5jbHVkZS9saW51eC9jYW4vc2tiLmg6NTQ6XFx0cmV0dXJuIHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfQ0FOKTtcXG5pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaC01NS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD0yOD1uZl9icmlkZ2VfaW5mb19nZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0yOS17XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MzA6XFx0cmV0dXJuIHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0zMS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD0zMz1zdGF0aWMgaW5saW5lIGJvb2wgbmZfYnJpZGdlX2luZm9fZXhpc3RzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMzQte1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjM1OlxcdHJldHVybiBza2JfZXh0X2V4aXN0KHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTM2LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MjgzPXVuaW9uIGJwZl9hdHRyO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6Mjg0OnN0cnVjdCBza2JfZXh0O1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMjg1LXN0cnVjdCB0c19jb25maWc7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTI4OD1zdHJ1Y3QgbmZfYnJpZGdlX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTctI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzE4Oi8qIENoYWluIGluIHRjX3NrYl9leHQgd2lsbCBiZSB1c2VkIHRvIHNoYXJlIHRoZSB0YyBjaGFpbiB3aXRoXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zMTktICogb3ZzIHJlY2lyY19pZC4gSXQgd2lsbCBiZSBzZXQgdG8gdGhlIGN1cnJlbnQgY2hhaW4gYnkgdGNcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzIxLSAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzIyOnN0cnVjdCB0Y19za2JfZXh0IHtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTMyMy1cXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTcyOD1lbnVtIHNrYl90c3RhbXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTgzMi0gKlxcdFxcdHBhZ2VfcG9vbCBzdXBwb3J0IG9uIGRyaXZlcilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjgzMzogKlxcdEBhY3RpdmVfZXh0ZW5zaW9uczogYWN0aXZlIGV4dGVuc2lvbnMgKHNrYl9leHRfaWQgdHlwZXMpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC04MzQtICpcXHRAbmRpc2Nfbm9kZXR5cGU6IHJvdXRlciB0eXBlIChmcm9tIGxpbmsgbGF5ZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTg4Nj1zdHJ1Y3Qgc2tfYnVmZiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTExMDAtXFx0Lyogb25seSB1c2FibGUgYWZ0ZXIgY2hlY2tpbmcgLVxcdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyAhPSAwICovXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMTAxOlxcdHN0cnVjdCBza2JfZXh0XFx0XFx0KmV4dGVuc2lvbnM7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMTAyLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD00MjkzPWludCBza2JfbXBsc19kZWNfdHRsKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI5NDpzdHJ1Y3Qgc2tfYnVmZiAqcHNrYl9leHRyYWN0KHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYsIGludCB0b19jb3B5LFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI5NS1cXHRcXHRcXHQgICAgIGdmcF90IGdmcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwMDQ9c3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfbmZjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBsb25nIG5mY3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwMjctI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9UQ19TS0JfRVhUKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTAyODojZGVmaW5lIFNLQl9FWFRfWF9UQ1xcdFxcdFgoVENfU0tCX0VYVCwgc3RydWN0IHRjX3NrYl9leHQpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDI5LSNlbHNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNDUtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA0NjojZGVmaW5lIFNLQl9FWFRfWF9QU1BcXHRcXHRYKFNLQl9FWFRfUFNQLCBzdHJ1Y3QgcHNwX3NrYl9leHQpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDQ3LSNlbHNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTEtI2lmIElTX0VOQUJMRUQoQ09ORklHX0NBTilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNTI6I2RlZmluZSBTS0JfRVhUX1hfQ0FOXFx0XFx0WChTS0JfRVhUX0NBTiwgc3RydWN0IGNhbl9za2JfZXh0KVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA1My0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDY1LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA2NjplbnVtIHNrYl9leHRfaWQge1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA2Ny0jZGVmaW5lIFgoaWQsIHR5cGUpXFx0aWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNzItXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDczOmV4dGVybiBjb25zdCB1OCBza2JfZXh0X29mZnNldFtTS0JfRVhUX05VTV07XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDc0LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA3NS0vKipcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwNzY6ICpcXHRzdHJ1Y3Qgc2tiX2V4dCAtIHNrX2J1ZmYgZXh0ZW5zaW9uc1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA3Ny0gKlxcdEByZWZjbnQ6IDEgb24gYWxsb2NhdGlvbiwgZGVhbGxvY2F0ZWQgb24gMFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDgxLSAqXFx0RWFjaCBleHRlbnNpb24gaWQgb2NjdXBpZXMgYSBmaXhlZCBzbG90IHdpdGhpbiBAZGF0YSwgbG9jYXRlZCBhdFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA4MjogKlxcdHNrYl9leHRfb2Zmc2V0W2lkXSBjaHVua3Mgb2YgOCBieXRlcy4gU3RvcmluZyBvZmZzZXRzL2xlbmd0aHNcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwODMtICpcXHRpbiA4LWJ5dGUgY2h1bmtzIGFsbG93cyAndTgnIHR5cGVzIHdoaWxlIGFsbG93aW5nIHVwIHRvIDJrYiB3b3J0aFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDg1LSAqL1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA4NjpzdHJ1Y3Qgc2tiX2V4dCB7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDg3LVxcdHJlZmNvdW50X3QgcmVmY250O1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDkxLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTA5MjpzdHJ1Y3Qgc2tiX2V4dCAqX19za2JfZXh0X2FsbG9jKGdmcF90IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTM6dm9pZCAqX19za2JfZXh0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk0OlxcdFxcdCAgICBzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTU6dm9pZCAqc2tiX2V4dF9hZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUwOTY6dm9pZCBfX3NrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk3OnZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwOTgtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDk5OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEwMC17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTAxLVxcdGlmIChza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEwMjpcXHRcXHRfX3NrYl9leHRfcHV0KHNrYi1cXHUwMDNlZXh0ZW5zaW9ucyk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTAzLX1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMDQtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTA1OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEwNi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBza19idWZmICpzcmMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMTAtXFx0aWYgKHNyYy1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpIHtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMTE6XFx0XFx0c3RydWN0IHNrYl9leHQgKmV4dCA9IHNyYy1cXHUwMDNlZXh0ZW5zaW9ucztcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMTctXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTE4OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYylcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMTkte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEyMDpcXHRza2JfZXh0X3B1dChkc3QpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTEyMTpcXHRfX3NrYl9leHRfY29weShkc3QsIHNyYyk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTIyLX1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMjMtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTI0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX3NrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrYl9leHQgKmV4dCwgZW51bSBza2JfZXh0X2lkIGkpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTI1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEyOC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMjk6c3RhdGljIGlubGluZSBib29sIHNrYl9leHRfZXhpc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZXh0X2lkIGlkKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTEzMC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzMtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTM0OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9leHRfaWQgaWQpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTM1LXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxMzY6XFx0aWYgKHNrYl9leHRfZXhpc3Qoc2tiLCBpZCkpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTM3OlxcdFxcdF9fc2tiX2V4dF9kZWwoc2tiLCBpZCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTM4LX1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxMzktXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTQwOnN0YXRpYyBpbmxpbmUgdm9pZCAqc2tiX2V4dF9maW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2V4dF9pZCBpZClcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxNDEte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE0MjpcXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIGlkKSkge1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE0MzpcXHRcXHRzdHJ1Y3Qgc2tiX2V4dCAqZXh0ID0gc2tiLVxcdTAwM2VleHRlbnNpb25zO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE0NC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNDU6XFx0XFx0cmV0dXJuICh2b2lkICopZXh0ICsgKHNrYl9leHRfb2Zmc2V0W2lkXSBcXHUwMDNjXFx1MDAzYyAzKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUxNDYtXFx0fVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTUwLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE1MTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE1Mi17XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTUzLVxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZWFjdGl2ZV9leHRlbnNpb25zKSkge1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE1NDpcXHRcXHRfX3NrYl9leHRfcHV0KHNrYi1cXHUwMDNlZXh0ZW5zaW9ucyk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTU1LVxcdFxcdHNrYi1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgPSAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MTU5PXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfaGFzX2V4dGVuc2lvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTE2My0jZWxzZVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE2NDpzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfZXh0X3B1dChzdHJ1Y3Qgc2tiX2V4dCAqZXh0KSB7fVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTE2NTpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2V4dF9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikge31cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNjY6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfcmVzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikge31cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUxNjc6c3RhdGljIGlubGluZSB2b2lkIHNrYl9leHRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIGludCB1bnVzZWQpIHt9XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTY4OnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9leHRfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnMpIHt9XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MTY5OnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnMpIHt9XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MTcwLXN0YXRpYyBpbmxpbmUgYm9vbCBza2JfaGFzX2V4dGVuc2lvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYikgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NTIzNj1zdGF0aWMgaW5saW5lIGludCBzZWNwYXRoX2V4aXN0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MjM4LSNpZmRlZiBDT05GSUdfWEZSTVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTIzOTpcXHRyZXR1cm4gc2tiX2V4dF9leGlzdChza2IsIFNLQl9FWFRfU0VDX1BBVEgpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTI0MC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01Mjk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNlY19wYXRoICpza2Jfc2VjX3BhdGgoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTI5Ni0jaWZkZWYgQ09ORklHX1hGUk1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjUyOTc6XFx0cmV0dXJuIHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfU0VDX1BBVEgpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTI5OC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9uZXQvY2FuLmgtMTQtLyoqXFxuaW5jbHVkZS9uZXQvY2FuLmg6MTU6ICogc3RydWN0IGNhbl9za2JfZXh0IC0gc2tiIGV4dGVuc2lvbnMgZm9yIENBTiBzcGVjaWZpYyBjb250ZW50XFxuaW5jbHVkZS9uZXQvY2FuLmgtMTYtICogQGNhbl9paWY6IGlmaW5kZXggb2YgdGhlIGZpcnN0IGludGVyZmFjZSB0aGUgQ0FOIGZyYW1lIGFwcGVhcmVkIG9uXFxuLS1cXG5pbmNsdWRlL25ldC9jYW4uaC0yMC0gKi9cXG5pbmNsdWRlL25ldC9jYW4uaDoyMTpzdHJ1Y3QgY2FuX3NrYl9leHQge1xcbmluY2x1ZGUvbmV0L2Nhbi5oLTIyLVxcdGludFxcdGNhbl9paWY7XFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oPTE2MD12b2lkIG1wdGNwX2RpYWdfZmlsbF9pbmZvKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9pbmZvICppbmZvKTtcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTY0LSAqL1xcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTY1OnN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9za2JfZXh0X21vdmUoc3RydWN0IHNrX2J1ZmYgKnRvLFxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTY2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpmcm9tKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTY3LXtcXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE2ODpcXHRpZiAoIXNrYl9leHRfZXhpc3QoZnJvbSwgU0tCX0VYVF9NUFRDUCkpXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNjktXFx0XFx0cmV0dXJuO1xcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNzEtXFx0aWYgKFdBUk5fT05fT05DRSh0by1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMpKVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTcyOlxcdFxcdHNrYl9leHRfcHV0KHRvKTtcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE3My1cXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTc4LVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTc5OnN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9za2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLFxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTgwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpmcm9tKVxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xODMtXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxODQ6XFx0ZnJvbV9leHQgPSBza2JfZXh0X2ZpbmQoZnJvbSwgU0tCX0VYVF9NUFRDUCk7XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xODUtXFx0aWYgKCFmcm9tX2V4dClcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTg4LVxcdGZyb21fZXh0LVxcdTAwM2Vmcm96ZW4gPSAxO1xcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTg5OlxcdHNrYl9leHRfY29weSh0bywgZnJvbSk7XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xOTAtfVxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0yMDg9c3RhdGljIGlubGluZSBib29sIG1wdGNwX3NrYl9jYW5fY29sbGFwc2UoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnRvLFxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yMTAte1xcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjExOlxcdHJldHVybiBtcHRjcF9leHRfbWF0Y2hlcyhza2JfZXh0X2ZpbmQodG8sIFNLQl9FWFRfTVBUQ1ApLFxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjEyOlxcdFxcdFxcdFxcdCBza2JfZXh0X2ZpbmQoZnJvbSwgU0tCX0VYVF9NUFRDUCkpO1xcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjEzLX1cXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmg9MjI1PXN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjI2LXtcXG5pbmNsdWRlL25ldC9tcHRjcC5oOjIyNzpcXHRpZiAoc2tiX2V4dF9leGlzdChza2IsIFNLQl9FWFRfTVBUQ1ApKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjI4LVxcdFxcdHJldHVybiBtcHRjcF9nZXRfcmVzZXRfb3B0aW9uKHNrYik7XFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI2OT1zdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI3NC1cXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI3NTpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc2tiX2V4dF9tb3ZlKHN0cnVjdCBza19idWZmICp0byxcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI3Ni1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjc5LVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9za2JfZXh0X2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLFxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjgxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpmcm9tKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oPTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZV9hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTExLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaDoxMjpcXHRzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKmIgPSBza2JfZXh0X2FkZChza2IsIFNLQl9FWFRfQlJJREdFX05GKTtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtMTMtXFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9Nzc3PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y2ZfcHJvdG9fdXBkYXRlX3VzZXN3KHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1MzIgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNzg2LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfVENfU0tCX0VYVClcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6Nzg3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHRjX3NrYl9leHQgKnRjX3NrYl9leHRfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNzg4LXtcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6Nzg5OlxcdHN0cnVjdCB0Y19za2JfZXh0ICp0Y19za2JfZXh0ID0gc2tiX2V4dF9hZGQoc2tiLCBUQ19TS0JfRVhUKTtcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNzkwLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNzowMTo1Mi43ODMzMTIxMjdaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQzMTUxNTc5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIHNrYl9leHQgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHByZXNlbnRlZCB3aXRoIHRoaXMgcGF0Y2ggdGhhdCdzIHJlZmFjdG9yaW5nIHRoZSBgc2tiX2V4dGAgYWxsb2NhdGlvbiBhbmQgbGF5b3V0LiBJdCdzIG1vdmluZyBmcm9tIGEgdmFyaWFibGUtc2l6ZWQgc2NoZW1lIHRvIGEgZml4ZWQtc2l6ZSBzdHJ1Y3R1cmUgKGBzdHJ1Y3Qgc2tiX2V4dF9sYXlvdXRgKS4gTXkgaW5pdGlhbCByZWFjdGlvbj8gSXQncyBhIHNpZ25pZmljYW50IGNoYW5nZSwgYW5kIEkgbmVlZCB0byBiZSAqdGhvcm91Z2gqLiBUaGUgcHJvbXB0IGlzIGFza2luZyBhYm91dCBLTVNBTi4gUmlnaHQuIFRoZSBjZW50cmFsIHF1ZXN0aW9uIGluIG15IG1pbmQgaXM6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYSAqbmV3KiBjaGFuY2Ugb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3Igb3RoZXJ3aXNlLCBhIHNlY3VyaXR5IGxlYWs/XG5cbkZpcnN0LCBJIGlkZW50aWZ5IGFsbCB0aGUgZXh0ZW5zaW9ucyB0aGF0IHVzZSBgc2tiX2V4dGAuICBJIHNlZSBhIHdob2xlIGhvc3Qgb2YgdGhlbTogQ0FOLCBCcmlkZ2UgTmV0ZmlsdGVyLCBUQywgTVBUQ1AsIE1DVFAsIFBTUCwgYW5kIElQc2VjLiBHb29kLCBJIGtub3cgdGhlIHBsYXllcnMuIE5leHQsIEkgY29uc2lkZXIgaG93IHRoZXNlIGFyZSB1c2VkIGluIHJlbGF0aW9uIHRvIHVzZXJzcGFjZS4gKkNydWNpYWxseSosIG5vbmUgb2YgdGhlc2Ugc3RydWN0cyBhcmUgZGlyZWN0bHkgKmNvcGllZCogdG8gdXNlcnNwYWNlLiBUaGV5J3JlIGludGVybmFsIGtlcm5lbCBtZXRhZGF0YS4gVGhhdCBpbW1lZGlhdGVseSBsb3dlcnMgbXkgYW54aWV0eSBsZXZlbCBhYm91dCBwb3RlbnRpYWwgaW5mby1sZWFrcywgYnV0IHRoZSBnYW1lIGlzIG5vdCBvdmVyLlxuXG5Ob3csIGxldCdzIHRyYWNlIHRocm91Z2ggdGhlIGFsbG9jYXRpb24gYW5kIGNvcHkgY29kZS4gVGhlIGNvcmUgY29uY2VybiBoZXJlIGlzIGBza2JfZXh0X21heWJlX2Nvd2Agd2hpY2ggaGFuZGxlcyBjb3B5aW5nLCBwcmVzdW1hYmx5IGluY2x1ZGluZyBwYWRkaW5nLiBUaGF0J3MgdGhlIGtleS4gT2xkIGNvZGUsIG5ldyBjb2RlLi4uSSBuZWVkIHRvIGNvbXBhcmUuIEluIHRoZSBuZXcgY29kZSwgSSBzZWUgdGhlIGNoYW5nZSB0byBob3cgd2UgY29weSBub3csIGJpdHdpc2UsIGRlcGVuZGVudCBvbiB3aGV0aGVyIHRoZSBleHRlbnNpb24gaXMgYWN0aXZlLiBUaGUgb2xkIGNvZGUganVzdCBgbWVtY3B5YOKAmWQgdGhlIHdob2xlIGJsb2NrLiBJcyAqdGhhdCogYW4gaXNzdWU/IEkgc2VlIHRoZSBjb2RlIGFuZCBJIGNhbiByZWFzb24gdGhlIG1lbWNweSwgYW5kIHBhZGRpbmcgaXMgbm90IHVzZWQgaW4gYSBicmFuY2guXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgcGFkZGluZyBub3csIHJlbWVtYmVyaW5nIGBza2JfZXh0X3R5cGVfbGVuW2ldICogU0tCX0VYVF9BTElHTl9WQUxVRWAuIElmIHRoZXJl4oCZcyB1bmluaXRpYWxpemVkIHBhZGRpbmcgKmluc2lkZSogdGhlc2UgZXh0ZW5zaW9uIHN0cnVjdHMsIGNvdWxkIGl0IGxlYWsgb3V0PyBCdXQgd2FpdCwgSSByZWNhbGwgdGhlc2Ugc3RydWN0cyBhcmVu4oCZdCAqZGlyZWN0bHkqIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgdHJhbnNtaXR0ZWQgYWNyb3NzIHRoZSBuZXR3b3JrLCB0aGV54oCZcmUgZm9yIGludGVybmFsIHVzZS4gVGhpcyBzaG91bGQgYmUgb2theSwgYnV0IEkgd2lsbCBjaGVjayBvbmUgc3BlY2lmaWMgYXJlYeKAplxuXG5Pa2F5LCBub3cgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBtcHRjcF9leHRgLiBDb3VsZCAqaXQqIGJlIGxlYWtlZD8gSXQgKmlzKiB1c2VkIGZvciBidWlsZGluZyBUQ1Agb3B0aW9ucy4uLiAqdGhhdCdzKiBzb21ldGhpbmcgdGhhdCBnb2VzIG9uIHRoZSBuZXR3b3JrISAgSSBuZWVkIHRvIGNoZWNrICpldmVyeSogZmllbGQgaW4gdGhhdCBzdHJ1Y3QsIGFuZCBob3cgaXQgaXMgdXNlZCB0byBidWlsZCBUQ1Agb3B0aW9ucy4gSWYgYW4gdW5pbml0aWFsaXplZCBmaWVsZCBpcyAqdXNlZCogdG8gY29uc3RydWN0IGEgVENQIG9wdGlvbiwgdGhhdCBpcyBhIGNsZWFyIGxlYWsgYW5kIEkgd291bGQgaGF2ZSBhIGh1Z2UgcHJvYmxlbS4gQnV0LCB0aGUgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYG1wdGNwX2V4dGAgaW5pdGlhbGl6YXRpb24sIGl0ICpvbmx5KiBjaGFuZ2VzIHRoZSAqbGF5b3V0KiBvZiB0aGUgZ2VuZXJpYyBgc2tiX2V4dGAuIFRoZSBwYXRjaCBzaG91bGRuJ3QgY3JlYXRlIGEgbmV3IHVuaW5pdGlhbGl6ZWQgZmllbGQgdGhhdCBwcmV2aW91c2x5IGRpZCBub3QgZXhpc3QuIEknbSBzYXRpc2ZpZWQgZm9yIG5vdywgYnV0IEkgd2lsbCBjb21lIGJhY2sgdG8gdGhpcy5cblxuSSdtIG5vdyB0aGlua2luZyBhYm91dCB3aGVyZSB0aGUgYWxsb2NhdGlvbiBpcyBkaWZmZXJlbnQuIFdpdGggdGhlIG9sZCwgdmFyaWFibGUtc2l6ZWQgc2NoZW1lLCBhbiBhbGxvY2F0aW9uIGZvciBhIG5ldyBleHRlbnNpb24gd291bGQgbWFrZSBpdCBncm93LiBUaGUgbmV3IGZpeGVkLXNpemUgbGF5b3V0IHVzZXMgYSBzbGFiIGNhY2hlLCBgc2tidWZmX2V4dF9jYWNoZWAuIGBfX3NrYl9leHRfYWxsb2NgIGRvZXMgKm5vdCogemVybyB0aGUgbWVtb3J5LCAqZXhjZXB0KiB0aGUgaGVhZGVyIGFuZCB0aGUgcmVmY291bnQuIEkgc2VlIHRoYXQgYHNrYl9leHRfYWRkYCB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhpcyBzcGFjZSwgYW5kIHRoZW4gdGhlIGNhbGxlciB3aWxsIGluaXRpYWxpemUgaXQuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBob3cgaXQgd29ya2VkIGJlZm9yZS4gVGhlIGNhbGxlcnMgYXJlICpzdXBwb3NlZCogdG8gaW5pdGlhbGl6ZSwgYW5kIHRoZSAqdW5pbml0aWFsaXplZCogcGFydHMgYXJlIHByb3RlY3RlZCBieSB0aGUgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0LiBTbyBldmVuIGlmIGEgY2FsbGVyICpkb2Vzbid0KiBpbml0aWFsaXplIGl0LCB0aGVyZSdzIG5vIGxlYWsuIEkgaGF2ZSB0byBtYWtlIHN1cmUgYWJvdXQgdGhpcy5cblxuSSdtIGxvb2tpbmcgYXQgYF9fc2tiX2V4dF9zZXRgIGFuZCBgc2tiX2V4dF9tYXliZV9jb3dgLCBvbGQgYW5kIG5ldyBjb2RlLCBjb21wYXJpbmcsIGxpbmUgYnkgbGluZS4gQW0gSSBtaXNzaW5nIGFueXRoaW5nPyBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyAqbmV2ZXIqIGFjY2Vzc2VkLCBiZWNhdXNlIGFueSBhY2Nlc3MgdG8gYW4gZXh0ZW5zaW9uIGdvZXMgdGhyb3VnaCBgc2tiX2V4dF9maW5kYCwgd2hpY2ggY2hlY2tzIGBwcmVzZW50X2V4dGVuc2lvbnNgLiBBICptaXNzaW5nKiBleHRlbnNpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGlzIGp1c3Qgbm90IGluY2x1ZGVkIGluIHRoZSBsb29rdXAuICBTbyB0aGUgdW5pbml0aWFsaXplZCBzbG90cyBhcmUgbmV2ZXIgdXNlZC5cblxuSSBjaXJjbGUgYmFjayB0byB0aGUgbWVtb3J5IGNvcGllcyBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGBza2JfZXh0X21heWJlX2Nvd2AuICBJJ20gbm93IHNhdGlzZmllZC4gSW4gdGhlIG9sZCBjb2RlLCBgbWVtY3B5YCBjb3BpZWQgdGhlIGVudGlyZSBjaHVuay4gSW4gdGhlIG5ldyBjb2RlLCBpdCBjb3BpZXMgdGhlIGhlYWRlciAqYW5kKiBlYWNoIHByZXNlbnQgZXh0ZW5zaW9uLCBidXQgZWFjaCBuZXcgYWxsb2NhdGlvbiBpcyBzdGlsbCB0aGUgKnNhbWUgc2l6ZSouIFRoZSBlbXB0eSBzcGFjZSBzdGF5cyB0aGF0IHdheSBhbmQgaXMgbm90IGEgc2VjdXJpdHkgcmlzay5cblxuTGV0J3Mgbm90IGZvcmdldCB0aGUgZGV0YWlscyEgYHNrYl9leHRfb2Zmc2V0YC4gIFRoZSBsYXlvdXQgaXMgbm93IGZpeGVkLiBJZiB0aGlzIGlzICppbmNvcnJlY3QqIHRoYXQgbGVhZHMgdG8gT09CLiBCdXQsIGhvdyBhcmUgdGhlc2Ugb2Zmc2V0cyBjYWxjdWxhdGVkPyBPa2F5LCBpdCdzXG5cbiIsIklucHV0VG9rZW5zIjoyMDUxNywiT3V0cHV0VG9rZW5zIjozMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE3OjAzOjA3LjA5ODQ3MjEyNloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBhbGxvY2F0aW9uIGFuZCBsYXlvdXQgb2YgYHNrYl9leHRgIChza19idWZmIGV4dGVuc2lvbnMpIGZyb20gYSB2YXJpYWJsZS1zaXplZCwgZHluYW1pY2FsbHkgYXBwZW5kZWQgbGF5b3V0IHRvIGEgZml4ZWQtc2l6ZWQgbGF5b3V0IChgc3RydWN0IHNrYl9leHRfbGF5b3V0YCkgd2l0aCBzdGF0aWMgb2Zmc2V0cyBmb3IgZWFjaCBleHRlbnNpb24gdHlwZS5cXG5cXG4xLiBUaGUgbmV3IGBza2JfZXh0X2xheW91dGAgaXMgYWxsb2NhdGVkIGZyb20gYSBzbGFiIGNhY2hlLCBhbmQgbGlrZSB0aGUgb2xkIGNvZGUsIG9ubHkgdGhlIGhlYWRlciAoYHJlZmNudGAgYW5kIGBwcmVzZW50X2V4dGVuc2lvbnNgKSBpcyBpbml0aWFsaXplZC4gVGhlIGV4dGVuc2lvbiBkYXRhIHNsb3RzIHJlbWFpbiB1bmluaXRpYWxpemVkIHVudGlsIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVyLlxcbjIuIFRoZSB1bmluaXRpYWxpemVkIHNsb3RzIGFyZSBzdHJpY3RseSBndWFyZGVkIGJ5IHRoZSBgcHJlc2VudF9leHRlbnNpb25zYCBiaXRtYXAuIFRoZXkgY2Fubm90IGJlIGFjY2Vzc2VkIHVubGVzcyB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0LCB3aGljaCBvbmx5IGhhcHBlbnMgd2hlbiBhbiBleHRlbnNpb24gaXMgcHJvcGVybHkgYWRkZWQgYW5kIGluaXRpYWxpemVkLlxcbjMuIFdoZW4gY29weWluZyBhbiBleHRlbnNpb24gKGBza2JfZXh0X21heWJlX2Nvd2ApLCB0aGUgY29kZSBjb3BpZXMgdGhlIGhlYWRlciBhbmQgb25seSB0aGUgcHJlc2VudCBleHRlbnNpb25zLCBsZWF2aW5nIHRoZSB1bnVzZWQgc2xvdHMgdW5pbml0aWFsaXplZC4gVGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byB0aGUgb2xkIGJlaGF2aW9yIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxcbjQuIGBza2JfZXh0YCBhbmQgaXRzIGV4dGVuc2lvbnMgYXJlIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmVzIHVzZWQgZm9yIG1ldGFkYXRhIChlLmcuLCBJUHNlYywgVEMsIGJyaWRnZSBuZXRmaWx0ZXIpIGFuZCBhcmUgbm90IGNvcGllZCB0byB1c2Vyc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIGluZm8tbGVha3MuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBpbmNvcnJlY3Qgb2Zmc2V0IGNhbGN1bGF0aW9ucyBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbGF5b3V0IG9mIGBza2JfZXh0YCAoc2tfYnVmZiBleHRlbnNpb25zKSBmcm9tIGEgdmFyaWFibGUtc2l6ZWQsIGR5bmFtaWNhbGx5IGFwcGVuZGVkIGxheW91dCB0byBhIGZpeGVkLXNpemVkIGxheW91dCAoYHN0cnVjdCBza2JfZXh0X2xheW91dGApIHdpdGggc3RhdGljIG9mZnNldHMgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGUuXFxuXFxuMS4gVGhlIG5ldyBgc2tiX2V4dF9sYXlvdXRgIGlzIGFsbG9jYXRlZCBmcm9tIGEgc2xhYiBjYWNoZSwgYW5kIGxpa2UgdGhlIG9sZCBjb2RlLCBvbmx5IHRoZSBoZWFkZXIgKGByZWZjbnRgIGFuZCBgcHJlc2VudF9leHRlbnNpb25zYCkgaXMgaW5pdGlhbGl6ZWQuIFRoZSBleHRlbnNpb24gZGF0YSBzbG90cyByZW1haW4gdW5pbml0aWFsaXplZCB1bnRpbCBleHBsaWNpdGx5IHJlcXVlc3RlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci5cXG4yLiBUaGUgdW5pbml0aWFsaXplZCBzbG90cyBhcmUgc3RyaWN0bHkgZ3VhcmRlZCBieSB0aGUgYHByZXNlbnRfZXh0ZW5zaW9uc2AgYml0bWFwLiBUaGV5IGNhbm5vdCBiZSBhY2Nlc3NlZCB1bmxlc3MgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGlzIHNldCwgd2hpY2ggb25seSBoYXBwZW5zIHdoZW4gYW4gZXh0ZW5zaW9uIGlzIHByb3Blcmx5IGFkZGVkIGFuZCBpbml0aWFsaXplZC5cXG4zLiBXaGVuIGNvcHlpbmcgYW4gZXh0ZW5zaW9uIChgc2tiX2V4dF9tYXliZV9jb3dgKSwgdGhlIGNvZGUgY29waWVzIHRoZSBoZWFkZXIgYW5kIG9ubHkgdGhlIHByZXNlbnQgZXh0ZW5zaW9ucywgbGVhdmluZyB0aGUgdW51c2VkIHNsb3RzIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIG9sZCBiZWhhdmlvciBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cXG40LiBgc2tiX2V4dGAgYW5kIGl0cyBleHRlbnNpb25zIGFyZSBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcyB1c2VkIGZvciBtZXRhZGF0YSAoZS5nLiwgSVBzZWMsIFRDLCBicmlkZ2UgbmV0ZmlsdGVyKSBhbmQgYXJlIG5vdCBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgaW5jb3JyZWN0IG9mZnNldCBjYWxjdWxhdGlvbnMgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow86fwm[1] Phase: Succeeded StartedAt: 2026-08-25 17:03:18 +0000 UTC FinishedAt: 2026-08-25 17:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 17:03:18 +0000 UTC FinishedAt: 2026-08-25 17:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2] Phase: Succeeded StartedAt: 2026-08-25 17:03:18 +0000 UTC FinishedAt: 2026-08-25 20:46:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 17:03:18 +0000 UTC FinishedAt: 2026-08-25 20:46:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 17:03:18 +0000 UTC FinishedAt: 2026-08-25 17:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 17:03:18 +0000 UTC FinishedAt: 2026-08-25 17:03:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86fwm/series-workflow86fwm-convert-artifact-3172566129/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 17:03:28 +0000 UTC FinishedAt: 2026-08-25 17:21:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 17:03:28 +0000 UTC FinishedAt: 2026-08-25 17:21:08 +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:*a17415af-9b2f-45e3-ba46-6740cd43f7e5,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-workflow86fwm/series-workflow86fwm-convert-artifact-3172566129/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": "9cca5dac-7917-4f1b-8991-60ce824a789b", "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-workflow86fwm/series-workflow86fwm-build-action-3917758111/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 17:03:28 +0000 UTC FinishedAt: 2026-08-25 17:20:58 +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:*a17415af-9b2f-45e3-ba46-6740cd43f7e5,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-workflow86fwm/series-workflow86fwm-convert-artifact-3172566129/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": "9cca5dac-7917-4f1b-8991-60ce824a789b", "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-workflow86fwm/series-workflow86fwm-build-action-3917758111/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 17:21:08 +0000 UTC FinishedAt: 2026-08-25 17:21:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 17:21:08 +0000 UTC FinishedAt: 2026-08-25 17:21:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 17:21:08 +0000 UTC FinishedAt: 2026-08-25 17:21:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 17:21:08 +0000 UTC FinishedAt: 2026-08-25 17:21:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow86fwm/series-workflow86fwm-convert-artifact-2578611652/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 17:21:18 +0000 UTC FinishedAt: 2026-08-25 17:23:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 17:21:18 +0000 UTC FinishedAt: 2026-08-25 17:22:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9cca5dac-7917-4f1b-8991-60ce824a789b,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-workflow86fwm/series-workflow86fwm-build-action-3917758111/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-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 17:23:08 +0000 UTC FinishedAt: 2026-08-25 17:23:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 17:23:08 +0000 UTC FinishedAt: 2026-08-25 17:23:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 17:23:08 +0000 UTC FinishedAt: 2026-08-25 17:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 17:23:08 +0000 UTC FinishedAt: 2026-08-25 17:40:48 +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:*a17415af-9b2f-45e3-ba46-6740cd43f7e5,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-workflow86fwm/series-workflow86fwm-convert-artifact-2578611652/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": "043ddad0-a241-4466-baba-959da5b1a3bc", "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-workflow86fwm/series-workflow86fwm-build-action-153658832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 17:23:08 +0000 UTC FinishedAt: 2026-08-25 17:40:38 +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:*a17415af-9b2f-45e3-ba46-6740cd43f7e5,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-workflow86fwm/series-workflow86fwm-convert-artifact-2578611652/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": "043ddad0-a241-4466-baba-959da5b1a3bc", "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-workflow86fwm/series-workflow86fwm-build-action-153658832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 17:40:48 +0000 UTC FinishedAt: 2026-08-25 17:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 17:40:48 +0000 UTC FinishedAt: 2026-08-25 17:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 17:40:48 +0000 UTC FinishedAt: 2026-08-25 17:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 17:40:48 +0000 UTC FinishedAt: 2026-08-25 17:43:09 +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:*043ddad0-a241-4466-baba-959da5b1a3bc,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-workflow86fwm/series-workflow86fwm-build-action-153658832/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-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 17:43:19 +0000 UTC FinishedAt: 2026-08-25 20:46:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 17:43:19 +0000 UTC FinishedAt: 2026-08-25 20:46:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"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:*9cca5dac-7917-4f1b-8991-60ce824a789b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*043ddad0-a241-4466-baba-959da5b1a3bc,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-workflow86fwm/series-workflow86fwm-build-action-3917758111/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-workflow86fwm/series-workflow86fwm-build-action-153658832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 17:43:19 +0000 UTC FinishedAt: 2026-08-25 17:43:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 17:43:19 +0000 UTC FinishedAt: 2026-08-25 17:43:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"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-workflow86fwm/series-workflow86fwm-convert-artifact-1660851149/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 17:43:19 +0000 UTC FinishedAt: 2026-08-25 17:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 17:43:19 +0000 UTC FinishedAt: 2026-08-25 17:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 17:43:19 +0000 UTC FinishedAt: 2026-08-25 17:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 17:43:29 +0000 UTC FinishedAt: 2026-08-25 20:46:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86fwm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_ext_add","__skb_ext_set","__skb_ext_alloc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","NETFILTER","NETFILTER_ADVANCED","BRIDGE_NETFILTER","CAN","MCTP","I2C","I2C_SLAVE","MCTP_TRANSPORT_I2C","INET","MPTCP","INET_PSP","NET_CLS_ACT","NET_TC_SKB_EXT","XFRM_USER"],"series_id":"403a2d64-e3c0-4842-ab73-8887a16ad19c","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 17:43:29 +0000 UTC FinishedAt: 2026-08-25 20:46:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9cca5dac-7917-4f1b-8991-60ce824a789b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*043ddad0-a241-4466-baba-959da5b1a3bc,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-workflow86fwm/series-workflow86fwm-build-action-3917758111/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-workflow86fwm/series-workflow86fwm-build-action-153658832/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-workflow86fwm/series-workflow86fwm-convert-artifact-1660851149/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,}