Name: series-workflowpkgc6 Phase: Running StartedAt: 2026-09-02 07:21:18 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkgc6[0] Phase: Succeeded StartedAt: 2026-09-02 07:21:18 +0000 UTC FinishedAt: 2026-09-02 07:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkgc6[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 07:21:18 +0000 UTC FinishedAt: 2026-09-02 07:25:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NEW_LEDS", "LEDS_CLASS", "LEDS_TRIGGERS", "LEDS_TRIGGERS_HW_CHANGED", "LEDS_TRIGGER_NETDEV", "LEDS_BRIGHTNESS_HW_CHANGED", "IDEAPAD_LAPTOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NEW_LEDS", "LEDS_CLASS", "LEDS_TRIGGERS", "LEDS_TRIGGERS_HW_CHANGED", "LEDS_TRIGGER_NETDEV", "LEDS_BRIGHTNESS_HW_CHANGED", "IDEAPAD_LAPTOP" ], "series_id": "d84af761-1ab2-4d46-a1d0-3d99dce40287" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "trigger_may_offload_show", "led_trigger_is_hw_controlled", "led_trigger_remove_hw_control", "led_trigger_set", "led_trigger_notify_hw_control_changed" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FV19MRURTJiMzNDssCiAgICAmIzM0O0xFRFNfQ0xBU1MmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSUyYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSX05FVERFViYjMzQ7LAogICAgJiMzNDtMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtJREVBUEFEX0xBUFRPUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3NldCYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1jb250cm9sbGVkIExFRCB0cmlnZ2VyIG9mZmxvYWQgaW5mcmFzdHJ1Y3R1cmUsIHRoZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgc3lzZnMgYXR0cmlidXRlLCBoYXJkd2FyZSB0cmlnZ2VyIHRyYW5zaXRpb24gbm90aWZpY2F0aW9ucyB2aWEgYSB3b3JrcXVldWUsIGFuZCB1cGRhdGVzIGRyaXZlcnMgaW5jbHVkaW5nIGlkZWFwYWQtbGFwdG9wIGFuZCBsZWRzLWNyb3NfZWMuXG5cbjEuIE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgb3Igc29ja2V0IGJ1ZmZlcnMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzLiBVc2Vyc3BhY2UgZXhwb3N1cmUgaXMgbGltaXRlZCB0byBzdGFuZGFyZCBzeXNmc19lbWl0IHN0cmluZyBmb3JtYXR0aW5nLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RydWN0IGZpZWxkcyAoZS5nLiwgdHJpZ2dlcnNfaHdfY2hhbmdlZCwgbGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJyYW5jaGluZy5cbjMuIENvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaGFuZGxpbmcgKHN1Y2ggYXMgd29ya3F1ZXVlIGZsdXNoL2Rlc3RydWN0aW9uIGFuZCBtdXRleC9yd3NlbSBsb2NrcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIGdlbmVyaWMgc3lzZnMgYXR0cmlidXRlICh0cmlnZ2VyX21heV9vZmZsb2FkKSBmb3IgcXVlcnlhYmxlIGhhcmR3YXJlLW9mZmxvYWRlZCBMRUQgdHJpZ2dlcnMsIHVwZGF0ZXMgY29yZSBicmlnaHRuZXNzIGdldC9zZXQgbG9ja2luZyBhbmQgdHJpZ2dlciByZW1vdmFsIGxvZ2ljLCBhbmQgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyAoQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCkgYWxvbmcgd2l0aCB1cGRhdGVzIHRvIExFRCB0cmlnZ2VyIGRyaXZlcnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBMRUQgY2xhc3MvdHJpZ2dlciBzeXNmcyBpbnRlcmZhY2VzIGFuZCBjb3JlIHRyaWdnZXIgbGlmZWN5Y2xlIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDA3YTVlM2M5MjExNGM3NTQ1MzE3MmE5NDUyYWI3YTI1YmMzNGI1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDc6MjI6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuaW5kZXggZDRjOTE4Y2MxMWExMi4uOTRjMzMxZDljNDEwNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuQEAgLTc4LDYgJiM0Mzs3OCwzMSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0KHdoaWNoIHdvdWxkIG9mdGVuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGRldmljZSB0cmVlIGZvciB0aGVcbiBcdFx0aGFyZHdhcmUpLlxuIFxuJiM0MztXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRcbiYjNDM7RGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjZcbiYjNDM7S2VybmVsVmVyc2lvbjpcdDcuNFxuJiM0MztDb250YWN0Olx0bGludXgtbGVkc0B2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7RGVzY3JpcHRpb246XG4mIzQzO1x0XHROYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbiYjNDM7XHRcdFN1Y2ggdHJpZ2dlcnMgYXJlIGFsc28gY2FsbGVkIFwmIzM0O2hhcmR3YXJlIGNvbnRyb2wgdHJpZ2dlclwmIzM0OyBpbiBzb21lXG4mIzQzO1x0XHRjb250ZXh0LlxuJiM0MztcbiYjNDM7XHRcdE9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuXG4mIzQzO1xuJiM0MztcdFx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyBhIGxpc3Qgb2YgdHJpZ2dlcnMgdGhhdCBhcmUgY2FwYWJsZSB0b1xuJiM0MztcdFx0YmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWVcbiYjNDM7XHRcdGluZGljYXRlIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCB0cmlnZ2VyOlxuJiM0MztcbiYjNDM7XHRcdC0gYGZvb190cmlnZ2VyYDogdGhlIHRyaWdnZXIgaXMgbm90IHNlbGVjdGVkLlxuJiM0MztcdFx0LSBgXHUwMDNjZm9vX3RyaWdnZXJcdTAwM2VgOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCwgYnV0IGZhbGxzIGJhY2sgdG9cbiYjNDM7XHRcdCAgc29mdHdhcmUgYmxpbmsgZm9yIHNvbWUgcmVhc29uIChlLmcuLCBpbmNvbXBhdGlibGUgdHJpZ2dlclxuJiM0MztcdFx0ICBwYXJhbWV0ZXJzKVxuJiM0MztcdFx0LSBgW2Zvb190cmlnZ2VyXWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkIGFuZCBvZmZsb2FkZWQgdG9cbiYjNDM7XHRcdCAgaGFyZHdhcmUuXG4mIzQzO1xuJiM0MztcdFx0VGhlIFwmIzM0O25ldGRldlwmIzM0OyB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvXG4mIzQzO1x0XHRpbmRpY2F0ZSBpdHMgc3RhdGUsIHNlZSBgL3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS9vZmZsb2FkZWRgLlxuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2ludmVydGVkXG4gRGF0ZTpcdFx0SmFudWFyeSAyMDExXG4gS2VybmVsVmVyc2lvbjpcdDIuNi4zOFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbmluZGV4IGVkNDZiMzdhYjhhMjguLmE1MTQ2ZWExZTNlNjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbkBAIC03NSw2ICYjNDM7NzUsOSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0SWYgMSwgdGhlIExFRCBibGlua2luZyBpbiByZXF1ZXN0ZWQgbW9kZSBpcyBvZmZsb2FkZWQgdG9cbiBcdFx0aGFyZHdhcmUuXG4gXG4mIzQzO1x0XHRMRUQgdHJpZ2dlciBjb3JlIGFsc28gcHJvdmlkZXMgYSBnZW5lcmljIGF0dHJpYnV0ZSBmb3IgdGhpc1xuJiM0MztcdFx0cHVycG9zZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRgLlxuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2xpbmtfMTBcbiBEYXRlOlx0XHRKdW4gMjAyM1xuIEtlcm5lbFZlcnNpb246XHQ2LjVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbmluZGV4IDM5MTM5NjZjZmRhYzAuLmFkYmM1N2I5ZjQ5YzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuQEAgLTI0Miw2ICYjNDM7MjQyLDkgQEAgb3BzIGFuZCBuZWVkcyB0byBkZWNsYXJlIHNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlcnMuXG4gXG4gV2l0aCBodyBjb250cm9sIHdlIHJlZmVyIHRvIHRoZSBMRUQgZHJpdmVuIGJ5IGhhcmR3YXJlLlxuIFxuJiM0MztBIHN5c2ZzIGF0dHJpYnV0ZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgaXMgcHJvdmlkZWQgZm9yIHVzZXJzcGFjZSB0b1xuJiM0MztxdWVyeSBzdXBwb3J0ZWQgdHJpZ2dlcnMgYW5kIHRoZWlyIHN0YXRlcy5cbiYjNDM7XG4gTEVEIGRyaXZlciBtdXN0IGRlZmluZSB0aGUgZm9sbG93aW5nIHZhbHVlIHRvIHN1cHBvcnQgaHcgY29udHJvbDpcbiBcbiAgICAgLSBod19jb250cm9sX3RyaWdnZXI6XG5AQCAtMjk4LDYgJiM0MzszMDEsMTUgQEAgTEVEIGRyaXZlciBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6XG4gICAgICAgICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGRldmljZSBvciBOVUxMIGlmIG5vdGhpbmdcbiAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IGF0dGFjaGVkLlxuIFxuJiM0MztMRUQgdHJpZ2dlciBzaG91bGQgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgQVBJIHRvIGluZGljYXRlIGh3IGNvbnRyb2w6XG4mIzQzOyAgICAtIG9mZmxvYWRlZDpcbiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdHJpZ2dlciBpcyBjdXJyZW50bHlcbiYjNDM7ICAgICAgICAgICAgICAgIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBJZiBhIHRyaWdnZXIgZG9lc24mIzM5O3QgaW1wbGVtZW50IHRoaXMgY2FsbGJhY2ssIHRoZSBkZWZhdWx0XG4mIzQzOyAgICAgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIHRydWUgZm9yIHByaXZhdGUgdHJpZ2dlcnMgYW5kIGZhbHNlIGZvciBnZW5lcmljXG4mIzQzOyAgICAgICAgICAgICAgICBvbmVzLlxuJiM0MztcbiBMRUQgZHJpdmVyIGNhbiBhY3RpdmF0ZSBhZGRpdGlvbmFsIG1vZGVzIGJ5IGRlZmF1bHQgdG8gd29ya2Fyb3VuZCB0aGVcbiBpbXBvc3NpYmlsaXR5IG9mIHN1cHBvcnRpbmcgZWFjaCBkaWZmZXJlbnQgbW9kZSBvbiB0aGUgc3VwcG9ydGVkIHRyaWdnZXIuXG4gRXhhbXBsZXMgYXJlIGhhcmRjb2RpbmcgdGhlIGJsaW5rIHNwZWVkIHRvIGEgc2V0IGludGVydmFsLCBlbmFibGUgc3BlY2lhbFxuQEAgLTMxMSw5ICYjNDM7MzIzLDY5IEBAIHRoZSBlbmQgdXNlIGh3X2NvbnRyb2xfc2V0IHRvIGFjdGl2YXRlIGh3IGNvbnRyb2wuXG4gQSB0cmlnZ2VyIGNhbiB1c2UgaHdfY29udHJvbF9nZXQgdG8gY2hlY2sgaWYgYSBMRUQgaXMgYWxyZWFkeSBpbiBodyBjb250cm9sXG4gYW5kIGluaXQgdGhlaXIgZmxhZ3MuXG4gXG4mIzQzO0FsdGVybmF0aXZlbHksIGEgcHJpdmF0ZSB0cmlnZ2VyIGNhbiBiZSBpbXBsZW1lbnRlZCBhbG9uZyB3aXRoIHRoZSBMRUQgZHJpdmVyIGlmXG4mIzQzO3RoZSBMRUQmIzM5O3MgaGFyZHdhcmUgY29udHJvbCBkb2VzbiYjMzk7dCBmaXQgYW55IGdlbmVyaWMgdHJpZ2dlci4gVG8gYXNzb2NpYXRlIHRoZVxuJiM0Mztwcml2YXRlIHRyaWdnZXIgd2l0aCB0aGUgTEVEIGNsYXNzZGV2LCB0aGVpciBgdHJpZ2dlcl90eXBlYCBtdXN0IGJlIHRoZSBzYW1lLiBUb1xuJiM0MztkZWNsYXJlIHRoYXQgdGhlIHByaXZhdGUgdHJpZ2dlciBwcm92aWRlcyBoYXJkd2FyZSBjb250cm9sIGZvciB0aGUgYXNzb2NpYXRlZFxuJiM0MztMRUQgY2xhc3NkZXYsIHNldCB0aGUgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgc3RyaW5nIHRvIHRoZSB0cmlnZ2VyJiMzOTtzIG5hbWUuIFNpbmNlXG4mIzQzO2JvdGggdGhlIExFRCBjbGFzc2RldiBhbmQgdGhlIHByaXZhdGUgdHJpZ2dlciBhcmUgaW4gdGhlIHNhbWUgTEVEIGRyaXZlciwgaXQmIzM5O3NcbiYjNDM7bm90IG5lY2Vzc2FyeSBmb3IgdGhlbSB0byBjb29yZGluYXRlIHZpYSBgaHdfY29udHJvbF8qYCBjYWxsYmFja3MuXG4mIzQzO1xuIFdoZW4gdGhlIExFRCBpcyBpbiBodyBjb250cm9sLCBubyBzb2Z0d2FyZSBibGluayBpcyBwb3NzaWJsZSBhbmQgZG9pbmcgc29cbiB3aWxsIGVmZmVjdGl2ZWx5IGRpc2FibGUgaHcgY29udHJvbC5cbiBcbiYjNDM7SGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvblxuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztTb21lIGhhcmR3YXJlIGNhbiBhdXRvbm9tb3VzbHkgYWN0aXZhdGUvZGVhY3RpdmF0ZSBoYXJkd2FyZSBjb250cm9sLiBBZnRlciB0aGF0LFxuJiM0Mzt0aGUgTEVEIGhhcmR3YXJlIG5vdGlmaWVzIHRoZSBMRUQgZHJpdmVyLlxuJiM0MztcbiYjNDM7SWYgdGhlIGRyaXZlciBjYW4gZGV0ZWN0IHN1Y2ggdHJhbnNpdGlvbnMgYW5kIHRodXMgd2FudHMgdG8gbm90aWZ5IHRoZSBMRUQgY29yZVxuJiM0Mzt0byB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciB0aGVuIHRoZSBgTEVEX1RSSUdfSFdfQ0hBTkdFRGAgZmxhZyBtdXN0IGJlIHNldCBpblxuJiM0MztmbGFncyBiZWZvcmUgcmVnaXN0ZXJpbmcuIFRvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIGFjY29yZGluZ2x5LCBjYWxsXG4mIzQzO2BsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBvbiB0aGUgTEVEIGNsYXNzZGV2LlxuJiM0MztcbiYjNDM7VGhpcyBjYXBhYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIExFRCBkZXZpY2UmIzM5O3MgcHJpdmF0ZSB0cmlnZ2VyLiBUaGUgcHJpdmF0ZVxuJiM0Mzt0cmlnZ2VyIG11c3QgaGF2ZSBiZWVuIHByb3Blcmx5IHJlZ2lzdGVyZWQgKHNlZSBhYm92ZSkgYW5kIG5hbWVkIGFmdGVyXG4mIzQzO2Bod19jb250cm9sX3RyaWdnZXJgLlxuJiM0MztcbiYjNDM7T25seSB0d28gdHJhbnNpdGlvbnMgYXJlIGRlZmluZWQ6XG4mIzQzO1xuJiM0MzstIFwmIzM0O25vbmVcJiMzNDsgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXI6XG4mIzQzOyAgICAgICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGhhcmR3YXJlIGF1dG9ub21vdXNseSBhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbFxuJiM0MzsgICAgICAgIGFuZCB3aGVuIFwmIzM0O25vbmVcJiMzNDsgKGkuZS4sIG5vIHRyaWdnZXIpIGlzIGN1cnJlbnRseSBhY3RpdmUuIElmIHRoZSBwcml2YXRlXG4mIzQzOyAgICAgICAgdHJpZ2dlciBpcyBhbHJlYWR5IGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5XG4mIzQzOyAgICAgICAgYSBuby1vcC5cbiYjNDM7XG4mIzQzOyAgICAgICAgVGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xuJiM0MzsgICAgICAgIG5vcm1hbC5cbiYjNDM7XG4mIzQzOyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcbiYjNDM7ICAgICAgICBhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIGN1cnJlbnRseSBpbiBoYXJkd2FyZVxuJiM0MzsgICAgICAgIGNvbnRyb2wuXG4mIzQzO1xuJiM0MzsgICAgICAgIElmIGVycm9yIG9jY3VycyBpbiB0aGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSwgdGhlIExFRCBUcmlnZ2VyIGNvcmUgcmV2ZXJ0c1xuJiM0MzsgICAgICAgIHRoZSBlZmZlY3RpdmUgdHJpZ2dlciB0byBcJiMzNDtub25lXCYjMzQ7LlxuJiM0MztcbiYjNDM7LSBwcml2YXRlIHRyaWdnZXIgPVx1MDAzZSBcJiMzNDtub25lXCYjMzQ7XG4mIzQzOyAgICAgICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGhhcmR3YXJlIGF1dG9ub21vdXNseSBkZWFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sXG4mIzQzOyAgICAgICAgYW5kIHdoZW4gdGhlIHByaXZhdGUgdHJpZ2dlciBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiBcJiMzNDtub25lXCYjMzQ7IChpLmUuLCBub1xuJiM0MzsgICAgICAgIHRyaWdnZXIpIGlzIGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5IGFcbiYjNDM7ICAgICAgICBuby1vcC5cbiYjNDM7XG4mIzQzOyAgICAgICAgVGhlIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHByaXZhdGUgdHJpZ2dlciB3aWxsIGJlIGV4ZWN1dGVkIGFzXG4mIzQzOyAgICAgICAgbm9ybWFsLCBleGNlcHQgdGhhdCB0aGUgY3VycmVudCBMRUQgYnJpZ2h0bmVzcyBpcyByZXRhaW5lZC4gVGhlIHJlYXNvblxuJiM0MzsgICAgICAgIGZvciBrZWVwaW5nIHRoZSBicmlnaHRuZXNzIHVuY2hhbmdlZCBpcyB0aGF0IHNvbWUgaGFyZHdhcmUgbWF5IGNob29zZSBhXG4mIzQzOyAgICAgICAgc3BlY2lmaWMgYnJpZ2h0bmVzcyBpbnN0ZWFkIG9mIHNpbXBseSB0dXJuaW5nIG9mZiB0aGUgTEVEIGFmdGVyXG4mIzQzOyAgICAgICAgYXV0b25vbW91c2x5IGRlYWN0aXZhdGluZyBoYXJkd2FyZSBjb250cm9sLlxuJiM0MztcbiYjNDM7ICAgICAgICBUaGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZVxuJiM0MzsgICAgICAgIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBub3QgY3VycmVudGx5IGluIGhhcmR3YXJlXG4mIzQzOyAgICAgICAgY29udHJvbC5cbiYjNDM7XG4mIzQzO0lmIHRoZSBjdXJyZW50IHRyaWdnZXIgaXMgbmVpdGhlciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIG5vciBcJiMzNDtub25lXCYjMzQ7LCBubyB0cmFuc2l0aW9uXG4mIzQzO3dpbGwgYmUgbWFkZS5cbiYjNDM7XG4gS25vd24gSXNzdWVzXG4gPT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG5pbmRleCBhNTFiMGVkNTM4ODY0Li4zYjQzOGQ4ZGE1ZTBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbkBAIC0yNywyOSAmIzQzOzI3LDE5IEBAIHN0YXRpYyBMSVNUX0hFQUQobGVkc19sb29rdXBfbGlzdCk7XG4gXG4gc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsZWRzX3dxO1xuIFxuLXN0YXRpYyBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4te1xuLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuLVx0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbi1cdHJldHVybiBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyIFx1MDAyNlx1MDAyNiBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZXRyaWdnZXJfdHlwZTtcbi0jZWxzZVxuLVx0cmV0dXJuIGZhbHNlO1xuLSNlbmRpZlxuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIHtcbiBcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gXHR1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcztcbiBcbi1cdGlmIChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSlcbi1cdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcykge1xuJiM0MztcdFx0aWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0RBVEE7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmxlZF9jZGV2LVx1MDAzZWxlZF9hY2Nlc3MpO1xuLVx0bGVkX3VwZGF0ZV9icmlnaHRuZXNzKGxlZF9jZGV2KTtcbi1cdGJyaWdodG5lc3MgPSBsZWRfY2Rldi1cdTAwM2VicmlnaHRuZXNzO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxlZF9jZGV2LVx1MDAzZWxlZF9hY2Nlc3MpO1xuJiM0MztcdFx0bGVkX3VwZGF0ZV9icmlnaHRuZXNzKGxlZF9jZGV2KTtcbiYjNDM7XHRcdGJyaWdodG5lc3MgPSBsZWRfY2Rldi1cdTAwM2VicmlnaHRuZXNzO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGJyaWdodG5lc3MpO1xuIH1cbkBAIC03NCw2ICYjNDM7NjQsOSBAQCBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcbiBcdGlmIChzdGF0ZSA9PSBMRURfT0ZGKVxuIFx0XHRsZWRfdHJpZ2dlcl9yZW1vdmUobGVkX2NkZXYpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKGxlZF9jZGV2KTtcbiYjNDM7XG4gXHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIHN0YXRlKTtcbiBcbiBcdHJldCA9IHNpemU7XG5AQCAtMTAzLDggJiM0Mzs5NiwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0ge1xuIFx0XHUwMDI2YmluX2F0dHJfdHJpZ2dlcixcbiBcdE5VTEwsXG4gfTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERVZJQ0VfQVRUUl9STyh0cmlnZ2VyX21heV9vZmZsb2FkKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZF90cmlnZ2VyX2F0dHJzW10gPSB7XG4mIzQzO1x0XHUwMDI2ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyLFxuJiM0MztcdE5VTExcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1bW9kZV90IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbiYjNDM7XHRcdFx0XHQgICAgICBpbnQgaWR4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaik7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGF0dHIgPT0gXHUwMDI2ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyKVxuJiM0MztcdFx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA/IGF0dHItXHUwMDNlbW9kZSA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhdHRyLVx1MDAzZW1vZGU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbGVkX3RyaWdnZXJfZ3JvdXAgPSB7XG4gXHQuYmluX2F0dHJzID0gbGVkX3RyaWdnZXJfYmluX2F0dHJzLFxuJiM0MztcdC5hdHRycyA9IGxlZF90cmlnZ2VyX2F0dHJzLFxuJiM0MztcdC5pc192aXNpYmxlID0gbGVkX3RyaWdnZXJfaXNfdmlzaWJsZSxcbiB9O1xuICNlbmRpZlxuIFxuQEAgLTU5Niw2ICYjNDM7NjExLDkgQEAgaW50IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoc3RydWN0IGRldmljZSAqcGFyZW50LFxuIFx0bGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQobGVkX2NkZXYpO1xuICNlbmRpZlxuIFxuJiM0MztcdGlmIChsZWRfY2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRClcbiYjNDM7XHRcdGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChsZWRfY2Rldik7XG4mIzQzO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxlZF9jZGV2LVx1MDAzZWxlZF9hY2Nlc3MpO1xuIFxuIFx0ZGV2X2RiZyhwYXJlbnQsIFwmIzM0O1JlZ2lzdGVyZWQgbGVkIGRldmljZTogJXNcXG5cJiMzNDssXG5AQCAtNjE2LDYgJiM0Mzs2MzQsOSBAQCB2b2lkIGxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGxlZF9jZGV2LVx1MDAzZWRldikpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRpZiAobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpXG4mIzQzO1x0XHRsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQobGVkX2NkZXYpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbiBcdGRvd25fd3JpdGUoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiBcdGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xuaW5kZXggYjEyMjMyMThiZGExMS4uYTlkOTkyYTg4NjE2MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXG5AQCAtNyw5ICYjNDM7NywxMyBAQFxuICAqIEF1dGhvcjogUmljaGFyZCBQdXJkaWUgXHUwMDNjcnB1cmRpZUBvcGVuZWRoYW5kLmNvbVx1MDAzZVxuICAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbG9ja2RlcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuQEAgLTMzLDYgJiM0MzszNywzNCBAQCB0cmlnZ2VyX3JlbGV2YW50KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4gXHRyZXR1cm4gIXRyaWctXHUwMDNldHJpZ2dlcl90eXBlIHx8IHRyaWctXHUwMDNldHJpZ2dlcl90eXBlID09IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfdHlwZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIWxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fFxuJiM0MztcdCAgICBzdHJjbXAobGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW5hbWUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAobGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VvZmZsb2FkZWQpXG4mIzQzO1x0XHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VvZmZsb2FkZWQobGVkX2NkZXYpO1xuJiM0MztcbiYjNDM7XHRkZXZfd2Fybl9vbmNlKGxlZF9jZGV2LVx1MDAzZWRldiwgXCYjMzQ7aHcgY29udHJvbCB0cmlnZ2VyICVzIGRvZXNuJiMzOTt0IGltcGxlbWVudCBvZmZsb2FkZWQoKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSk7XG4mIzQzO1xuJiM0MztcdC8qIE90aGVyd2lzZSBhc3N1bWUgcHJpdmF0ZSB0cmlnZ2VycyBhcyBhbHdheXMgb2ZmbG9hZGVkLiAqL1xuJiM0MztcdHJldHVybiBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZXRyaWdnZXJfdHlwZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKTtcbiYjNDM7XG4gc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcbiBcdFx0XHQgIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudClcbkBAIC0xNjMsNyAmIzQzOzE5NSw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVhZCk7XG4gXG4gLyogQ2FsbGVyIG11c3QgZW5zdXJlIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayBoZWxkICovXG4taW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuJiM0MztzdGF0aWMgaW50IF9fbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsXG4mIzQzO1x0XHRcdCAgICAgYm9vbCBod190cmlnZ2VyZWQpXG4ge1xuIFx0Y2hhciAqZXZlbnQgPSBOVUxMO1xuIFx0Y2hhciAqZW52cFsyXTtcbkBAIC0xOTQsNyAmIzQzOzIyNywyMSBAQCBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4gXHRcdGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfZGF0YSA9IE5VTEw7XG4gXHRcdGxlZF9jZGV2LVx1MDAzZWFjdGl2YXRlZCA9IGZhbHNlO1xuIFx0XHRsZWRfY2Rldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5MRURfSU5JVF9ERUZBVUxUX1RSSUdHRVI7XG4tXHRcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEhhcmR3YXJlIG1heSBoYXZlIHNlbGVjdGVkIGEgbmV3IGJyaWdodG5lc3MgbGV2ZWwgZHVyaW5nIGl0c1xuJiM0MztcdFx0ICogaGFyZHdhcmUgY29udHJvbCB0cmFuc2l0aW9uLCBzbyBvbmx5IHJlc2V0IGJyaWdodG5lc3MgaWYgd2VcbiYjNDM7XHRcdCAqIGFyZSBzd2l0Y2hpbmcgdG8gYW5vdGhlciB0cmlnZ2VyIG9yIGlmIHRoZSBzd2l0Y2hpbmcgaXMgbm90XG4mIzQzO1x0XHQgKiBoYXJkd2FyZSB0cmlnZ2VyZWQuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIGVycm9yIHBhdGgsIGFzIHJ1bm5pbmdcbiYjNDM7XHRcdCAqIGludG8gdGhlIGVycm9yIHBhdGggaW1wbGllcyBhIG5vbmUgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXJcbiYjNDM7XHRcdCAqIHRyYW5zaXRpb24uIFRoaXMgaGludHMgdGhhdCB0aGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGVcbiYjNDM7XHRcdCAqIHRyaWdnZXIgbXVzdCBoYXZlIHNvbWUgZnVuZGFtZW50YWwgYnVncywgc28gZG9uJiMzOTt0IGJvdGhlclxuJiM0MztcdFx0ICogbGVhdmluZyB0aGUgTEVEIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHRyaWcgfHwgIWh3X3RyaWdnZXJlZClcbiYjNDM7XHRcdFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTtcbiBcdH1cbiBcdGlmICh0cmlnKSB7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZ0cmlnLVx1MDAzZWxlZGRldl9saXN0X2xvY2spO1xuQEAgLTI1OCw2ICYjNDM7MzA1LDExIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuJiM0MztcbiYjNDM7aW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCB0cmlnLCBmYWxzZSk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9zZXQpO1xuIFxuIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuQEAgLTI2OCw2ICYjNDM7MzIwLDE1IEBAIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmUpO1xuIFxuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxuJiM0MztcdFx0bGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbCk7XG4mIzQzO1xuIHN0YXRpYyBib29sIGxlZF9tYXRjaF9kZWZhdWx0X3RyaWdnZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4ge1xuQEAgLTMxMyw2ICYjNDM7Mzc0LDMyIEBAIHZvaWQgbGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KTtcbiBcbiYjNDM7c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7XG4mIzQzO1x0Ym9vbCBoaXQsIG9mZmxvYWRlZDtcbiYjNDM7XHRpbnQgbGVuO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcyk7XG4mIzQzO1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0dHJpZyA9IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXI7XG4mIzQzO1xuJiM0MztcdG9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XG4mIzQzO1x0aGl0ID0gb2ZmbG9hZGVkIHx8ICh0cmlnIFx1MDAyNlx1MDAyNiAhc3RyY21wKGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciwgdHJpZy1cdTAwM2VuYW1lKSk7XG4mIzQzO1xuJiM0MztcdC8qIFtvZmZsb2FkZWRdIFx1MDAzY2FjdGl2ZV9idXRfbm90X29mZmxvYWRlZFx1MDAzZSBpbmFjdGl2ZSAqL1xuJiM0MztcdGxlbiA9IHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcyVzJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBvZmZsb2FkZWQgPyBcJiMzNDtbXCYjMzQ7IDogKGhpdCA/IFwmIzM0O1x1MDAzY1wmIzM0OyA6IFwmIzM0O1wmIzM0OyksXG4mIzQzO1x0XHRcdCBsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsXG4mIzQzO1x0XHRcdCBvZmZsb2FkZWQgPyBcJiMzNDtdXCYjMzQ7IDogKGhpdCA/IFwmIzM0O1x1MDAzZVwmIzM0OyA6IFwmIzM0O1wmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbGVuO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyk7XG4mIzQzO1xuIC8qIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqL1xuIFxuIGludCBsZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG5AQCAtNDAzLDYgJiM0Mzs0OTAsODggQEAgaW50IGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2xlZF90cmlnZ2VyX3JlZ2lzdGVyKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0IHN0cnVjdCBsZWRfdHJpZ2dlciAqaGNfdHJpZylcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXIpIHtcbiYjNDM7XHRcdC8qIFwmIzM0O25vbmVcJiMzNDsgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXIuICovXG4mIzQzO1x0XHRpZiAoYWN0aXZhdGUpXG4mIzQzO1x0XHRcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBoY190cmlnLCB0cnVlKTtcbiYjNDM7XHR9IGVsc2UgaWYgKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXIgPT0gaGNfdHJpZykge1xuJiM0MztcdFx0LyogcHJpdmF0ZSB0cmlnZ2VyID1cdTAwM2UgXCYjMzQ7bm9uZVwmIzM0Oy4gKi9cbiYjNDM7XHRcdGlmICghYWN0aXZhdGUpXG4mIzQzO1x0XHRcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMLCB0cnVlKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogT3RoZXIgdHJpZ2dlciBpcyBhY3RpdmUuICovXG4mIzQzO1x0XHRkZXZfZGJnKGxlZF9jZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7SWdub3JpbmcgaHcgY29udHJvbCB0cmFuc2l0aW9uICglcyAlcykgd2hpbGUgJXMgaXMgYWN0aXZlXCYjMzQ7LFxuJiM0MztcdFx0XHRhY3RpdmF0ZSA/IFwmIzM0O2FjdGl2YXRlXCYjMzQ7IDogXCYjMzQ7ZGVhY3RpdmF0ZVwmIzM0OywgaGNfdHJpZy1cdTAwM2VuYW1lLFxuJiM0MztcdFx0XHRsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW5hbWUpO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRkZXZfd2FybihsZWRfY2Rldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byAlcyAlcyBpbiBodyBjb250cm9sIHRyYW5zaXRpb246ICVkXCYjMzQ7LFxuJiM0MztcdFx0XHQgYWN0aXZhdGUgPyBcJiMzNDthY3RpdmF0ZVwmIzM0OyA6IFwmIzM0O2RlYWN0aXZhdGVcJiMzNDssIGhjX3RyaWctXHUwMDNlbmFtZSwgZXJyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbGVkX3RyaWdnZXJfaHdfY29udHJvbF9jaGFuZ2VkX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxlZF9jbGFzc2RldiwgdHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrKTtcbiYjNDM7XHRib29sIGFjdGl2YXRlID0gUkVBRF9PTkNFKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWQpO1xuJiM0MztcbiYjNDM7XHRzY29wZWRfZ3VhcmQocndzZW1fcmVhZCwgXHUwMDI2dHJpZ2dlcnNfbGlzdF9sb2NrKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0cmlnLCBcdTAwMjZ0cmlnZ2VyX2xpc3QsIG5leHRfdHJpZykge1xuJiM0MztcdFx0XHRpZiAodHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIXN0cmNtcCh0cmlnLVx1MDAzZW5hbWUsIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcikpIHtcbiYjNDM7XHRcdFx0XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZfZXJyKGxlZF9jZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFwmIzM0OyVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0X19mdW5jX18sIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSlcbiYjNDM7e1xuJiM0MztcdC8qIFJlc3RyaWN0ZWQgdG8gcHJpdmF0ZSB0cmlnZ2Vycy4gKi9cbiYjNDM7XHRpZiAoV0FSTl9PTighKGxlZF9jZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBMRURfVFJJR19IV19DSEFOR0VEKSB8fFxuJiM0MztcdFx0ICAgICFsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgfHwgIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfdHlwZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UobGVkX2NkZXYtXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZCwgYWN0aXZhdGUpO1xuJiM0MztcbiYjNDM7XHRzY2hlZHVsZV93b3JrKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XG4mIzQzO1xuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmssIGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZCk7XG4mIzQzO1xuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXG4mIzQzO1xuIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cbiBcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbmluZGV4IDE4NDRkMGNkNWY1MjguLjZkYjgzZDAxNTI3NzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuQEAgLTg1LDEyICYjNDM7ODUsMTggQEAgc3RhdGljIGludCBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIFx0cmV0dXJuIGNyb3NfZWNfbGVkX3NlbmRfY21kKHByaXYtXHUwMDNlY3Jvc19lYywgXHUwMDI2YXJnKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGNyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZTtcbiBcbiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGNyb3NfZWNfbGVkX3RyaWdnZXIgPSB7XG4gXHQubmFtZSA9IFwmIzM0O2Nocm9tZW9zLWF1dG9cJiMzNDssXG4gXHQudHJpZ2dlcl90eXBlID0gXHUwMDI2Y3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlLFxuIFx0LmFjdGl2YXRlID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZSxcbiYjNDM7XHQub2ZmbG9hZGVkID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbmluZGV4IGVkNmE0N2JiYjQ0ZjkuLjMyZDQwZDE3NmQzZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbkBAIC0xOTUsMTAgJiM0MzsxOTUsMTYgQEAgc3RhdGljIHZvaWQgb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldilcbiBcdFx0XHRlcnIpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgb21uaWFfaHd0cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBvbW5pYV9od190cmlnZ2VyID0ge1xuIFx0Lm5hbWVcdFx0PSBcJiMzNDtvbW5pYS1tY3VcJiMzNDssXG4gXHQuYWN0aXZhdGVcdD0gb21uaWFfaHd0cmlnX2FjdGl2YXRlLFxuIFx0LmRlYWN0aXZhdGVcdD0gb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUsXG4mIzQzO1x0Lm9mZmxvYWRlZFx0PSBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkLFxuIFx0LnRyaWdnZXJfdHlwZVx0PSBcdTAwMjZvbW5pYV9od190cmlnZ2VyX3R5cGUsXG4gfTtcbiBcbkBAIC0yNTEsNiAmIzQzOzI1Nyw3IEBAIHN0YXRpYyBpbnQgb21uaWFfbGVkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBvbW5pYV9sZWQgKmxlZCxcbiBcdCAqIGJ5IExFRCBjbGFzcyBmcm9tIHRoZSBsaW51eCxkZWZhdWx0LXRyaWdnZXIgcHJvcGVydHkuXG4gXHQgKi9cbiBcdGNkZXYtXHUwMDNlZGVmYXVsdF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xuJiM0MztcdGNkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xuIFxuIFx0LyogUHV0IHRoZSBMRUQgaW50byBzb2Z0d2FyZSBtb2RlICovXG4gXHRyZXQgPSBvbW5pYV9jbWRfd3JpdGVfdTgoY2xpZW50LCBPTU5JQV9DTURfTEVEX01PREUsIE9NTklBX0NNRF9MRURfTU9ERV9MRUQobGVkLVx1MDAzZXJlZykgfFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLmggYi9kcml2ZXJzL2xlZHMvbGVkcy5oXG5pbmRleCBiZWU0NjY1MWUwNjhmLi5iZGFjMjMzNjAxMmU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMuaFxuQEAgLTI3LDggJiM0MzsyNywxOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0XHRcdGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCk7XG4mIzQzO3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7XG4gXG4gZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbGVkc19saXN0X2xvY2s7XG4gZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbGVkc19saXN0O1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4mIzQzO3ZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiYjNDM7I2Vsc2UgLyogIUNPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHsgfVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuJiM0MztcbiAjZW5kaWZcdC8qIF9fTEVEU19IX0lOQ0xVREVEICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbmluZGV4IGMxMTI4MmE3NGI1YWMuLmExMWQwNGNlNGFiMmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG5AQCAtOSw2ICYjNDM7OSwxNiBAQCBtZW51Y29uZmlnIExFRFNfVFJJR0dFUlNcbiBcbiBpZiBMRURTX1RSSUdHRVJTXG4gXG4mIzQzO2NvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbiYjNDM7XHRib29sIFwmIzM0O0xFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRkZWZhdWx0IExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBoYXJkd2FyZSBpbml0aWF0ZWQgaGFyZHdhcmUgY29udHJvbFxuJiM0MztcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cbiYjNDM7XHQgIFwmIzM0O25vbmVcJiMzNDsgKGkuZS4sIG5vIHRyaWdnZXIpIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyLlxuJiM0MztcbiYjNDM7XHQgIFNlZSBEb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgZm9yIGRldGFpbHMuXG4mIzQzO1xuIGNvbmZpZyBMRURTX1RSSUdHRVJfVElNRVJcbiBcdHRyaXN0YXRlIFwmIzM0O0xFRCBUaW1lciBUcmlnZ2VyXCYjMzQ7XG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcbmluZGV4IDViNGU5MmMxNGRiYjQuLjJlOWFmNDhhNzRkYmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5AQCAtNzk4LDEwICYjNDM7Nzk4LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl90cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gXHRrZnJlZSh0cmlnZ2VyX2RhdGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxlZF9uZXRkZXZfZGF0YSAqdHJpZ2dlcl9kYXRhID0gbGVkX2dldF90cmlnZ2VyX2RhdGEobGVkX2NkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJpZ2dlcl9kYXRhLVx1MDAzZWh3X2NvbnRyb2w7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBuZXRkZXZfbGVkX3RyaWdnZXIgPSB7XG4gXHQubmFtZSA9IFwmIzM0O25ldGRldlwmIzM0OyxcbiBcdC5hY3RpdmF0ZSA9IG5ldGRldl90cmlnX2FjdGl2YXRlLFxuIFx0LmRlYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlLFxuJiM0MztcdC5vZmZsb2FkZWQgPSBuZXRkZXZfdHJpZ19vZmZsb2FkZWQsXG4gXHQuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuaW5kZXggNTE2NTk0OTkzMDczOS4uYTk3ODUyYjBiMjI4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAIGNvbmZpZyBJREVBUEFEX0xBUFRPUFxuIFx0c2VsZWN0IElOUFVUX1NQQVJTRUtNQVBcbiBcdHNlbGVjdCBORVdfTEVEU1xuIFx0c2VsZWN0IExFRFNfQ0xBU1NcbiYjNDM7XHRzZWxlY3QgTEVEU19UUklHR0VSU1xuIFx0aGVscFxuIFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciBMZW5vdm8gSWRlYVBhZCBuZXRib29rcyBjb250YWlucyBkcml2ZXJzIGZvclxuIFx0ICByZmtpbGwgc3dpdGNoLCBob3RrZXksIGZhbiBjb250cm9sIGFuZCBiYWNrbGlnaHQgY29udHJvbC5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXG5pbmRleCA4MjEzNTI0NTA0ZWViLi5mODZjMTFmNTFkMGJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXG5AQCAtMTQsOSAmIzQzOzE0LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaTgwNDIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuQEAgLTI2LDkgJiM0MzsyOSwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fcHJvZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG93ZXJfc3VwcGx5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZmtpbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXHUwMDNlXG5AQCAtMTM0LDEwICYjNDM7MTM5LDMxIEBAIGVudW0ge1xuIH07XG4gXG4gLypcbi0gKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIHN0YXRlcyAtIDFcbi0gKiBGdXR1cmUga2V5Ym9hcmQgdHlwZXMgbWF5IG5lZWQgYSBuZXcgc3lzdGVtLCBpZiB0aGVyZSYjMzk7cyBhIGNvbGxpc2lvblxuLSAqIEtCRF9CTF9UUklTVEFURV9BVVRPIGhhcyBubyB3YXkgdG8gcmVwb3J0IG9yIHNldCB0aGUgYXV0byBzdGF0ZVxuLSAqIHNvIGl0IGVmZmVjdGl2ZWx5IGhhcyAzIHN0YXRlcywgYnV0IG5lZWRzIHRvIGhhbmRsZSA0XG4mIzQzOyAqIFRoZSBlbnVtZXJhdGlvbiBoYXMgdHdvIHB1cnBvc2VzOlxuJiM0MzsgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodFxuJiM0MzsgKiAgIC0gYXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIG9mIHRoZSBLQkxDIGNvbW1hbmRcbiYjNDM7ICpcbiYjNDM7ICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgICAgICBIYXJkd2FyZSBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHwgICAgMyB8XG4mIzQzOyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1NUQU5EQVJEICAgICAgICAgIHwgICAgICBvZmYgfCAgb24gfCAgTi9BIHwgIE4vQSB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgIE4vQSB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqXG4mIzQzOyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czpcbiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgIExFRCBjbGFzc2RldiBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHxcbiYjNDM7ICogfCBPcGVyYXRpb24gICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiYjNDM7ICogfCBSZWFkICAgICAgICAgICAgICAgICAgICAgfCBvZmYvYXV0byB8IGxvdyB8IGhpZ2ggfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiYjNDM7ICogfCBXcml0ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiAgKi9cbiBlbnVtIHtcbiBcdEtCRF9CTF9TVEFOREFSRCAgICAgID0gMSxcbkBAIC0xNDUsNiAmIzQzOzE3MSw4IEBAIGVudW0ge1xuIFx0S0JEX0JMX1RSSVNUQVRFX0FVVE8gPSAzLFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTXHQzXG4mIzQzO1xuICNkZWZpbmUgS0JEX0JMX1FVRVJZX1RZUEVcdFx0MHgxXG4gI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfVFlQRVx0XHQweDVcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9BVVRPX1RZUEVcdDB4N1xuQEAgLTIwMCwxMCAmIzQzOzIyOCwxNCBAQCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlIHtcbiBcdFx0Ym9vbCB5bWNfZWNfdHJpZ2dlciAgICAgICA6IDE7XG4gXHR9IGZlYXR1cmVzO1xuIFx0c3RydWN0IHtcbi1cdFx0Ym9vbCBpbml0aWFsaXplZDtcbiYjNDM7XHRcdGludCBpbml0aWFsaXplZDsgLyogIDA6IGluaXRpYWxpemlvbiBwZW5kaW5nL29uZ29pbmcvZmFpbGVkXG4mIzQzO1x0XHRcdFx0ICAqIFx1MDAzZTA6IGluaXRpYWxpemlvbiBmaW5pc2hlZFxuJiM0MztcdFx0XHRcdCAgKiBcdTAwM2MwOiB1bnJlZ2lzdGVyYXRpb24gb25nb2luZy9maW5pc2hlZFxuJiM0MztcdFx0XHRcdCAgKi9cbiBcdFx0aW50IHR5cGU7XG4gXHRcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkO1xuLVx0XHR1bnNpZ25lZCBpbnQgbGFzdF9icmlnaHRuZXNzO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGxhc3RfaHdfYnJpZ2h0bmVzcztcbiYjNDM7XHRcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogcHJvdGVjdHMgYnJpZ2h0bmVzcyB0cmFja2luZyAqL1xuIFx0fSBrYmRfYmw7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRib29sIGluaXRpYWxpemVkO1xuQEAgLTE1OTIsNyAmIzQzOzE2MjQsMjQgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShpbnQgdHlwZSlcbiBcdHJldHVybiAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEUpIHx8ICh0eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPKTtcbiB9XG4gXG4tc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2Uoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXG4mIzQzO3tcbiYjNDM7XHQvKiBPZmYsIGxvdyBvciBoaWdoICovXG4mIzQzO1x0aWYgKGh3X2JyaWdodG5lc3MgXHUwMDNjPSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4mIzQzO1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbiYjNDM7XG4mIzQzO1x0LyogQXV0byAoY29udHJvbGxlZCBieSBFQyBhY2NvcmRpbmcgdG8gQUxTKSwgcmVwb3J0IGFzIG9mZiAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWtiZF9ibC50eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBVbmtub3duIHZhbHVlICovXG4mIzQzO1x0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LFxuJiM0MztcdFx0IFwmIzM0O1Vua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlZFwmIzM0OywgaHdfYnJpZ2h0bmVzcyk7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHZhbHVlO1xuIFx0aW50IGVycjtcbkBAIC0xNjA2LDIxICYjNDM7MTY1NSw3IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHQvKiBDb252ZXJ0IHJldHVybmVkIHZhbHVlIHRvIGJyaWdodG5lc3MgbGV2ZWwgKi9cbi1cdFx0dmFsdWUgPSBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7XG4tXG4tXHRcdC8qIE9mZiwgbG93IG9yIGhpZ2ggKi9cbi1cdFx0aWYgKHZhbHVlIFx1MDAzYz0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuLVx0XHRcdHJldHVybiB2YWx1ZTtcbi1cbi1cdFx0LyogQXV0bywgcmVwb3J0IGFzIG9mZiAqL1xuLVx0XHRpZiAodmFsdWUgPT0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzICYjNDM7IDEpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXG4tXHRcdC8qIFVua25vd24gdmFsdWUgKi9cbi1cdFx0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LFxuLVx0XHRcdCBcJiMzNDtVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWx1XCYjMzQ7LCB2YWx1ZSk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0cmV0dXJuIEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTtcbiBcdH1cbiBcbiBcdGVyciA9IGV2YWxfaGFscyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCBcdTAwMjZ2YWx1ZSk7XG5AQCAtMTYzMCw2ICYjNDM7MTY2NSwxNiBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gISF0ZXN0X2JpdChIQUxTX0tCRF9CTF9TVEFURV9CSVQsIFx1MDAyNnZhbHVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCBod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4mIzQzO1xuJiM0MztcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIHtcbiBcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuQEAgLTE2MzcsOTkgJiM0MzsxNjgyLDIwNyBAQCBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYVxuIFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKVxuJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXG4ge1xuLVx0aW50IGVycjtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4gXHRpbnQgdHlwZSA9IHByaXYtXHUwMDNla2JkX2JsLnR5cGU7XG4mIzQzO1x0aW50IGVycjtcbiBcbi1cdGlmIChpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZSh0eXBlKSkge1xuLVx0XHRpZiAoYnJpZ2h0bmVzcyBcdTAwM2UgcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5tdXRleCk7XG4gXG4tXHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHxcbiYjNDM7XHRpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHtcbiYjNDM7XHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGh3X2JyaWdodG5lc3MpIHxcbiBcdFx0XHRGSUVMRF9QUkVQKEtCRF9CTF9DT01NQU5EX1RZUEUsIHR5cGUpIHxcbiBcdFx0XHRLQkRfQkxfQ09NTUFORF9TRVQ7XG4gXHRcdGVyciA9IGV4ZWNfa2JsYyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCB2YWx1ZSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRlcnIgPSBleGVjX3NhbHMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGKTtcbiYjNDM7XHRcdHZhbHVlID0gaHdfYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGO1xuJiM0MztcdFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH1cbi1cbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xuJiM0MztcdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYnJpZ2h0bmVzcyBcdTAwM2UgcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBicmlnaHRuZXNzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIFx0XHRcdFx0XHRcdCAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuIHtcbiBcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiB1bnJlZ2lzdGVyaW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBMRUQgdW5yZWdpc3RyYXRpb25cbiYjNDM7XHQgKiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSYjMzk7dmUgc2V0IExFRF9SRVRBSU5fQVRfU0hVVERPV05cbiYjNDM7XHQgKiB0byByZXRhaW4gbGVkX2NkZXYgYnJpZ2h0bmVzcyBsZXZlbC4gVG8gZG8gdGhlIHNhbWUgZm9yIGF1dG8gbW9kZSxcbiYjNDM7XHQgKiBnYXRlIGNoYW5nZXMgYW5kIHJldHVybiBlYXJseS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEl0JiMzOTtzIG5lZWRsZXNzIHRvIGdhdGUgY2hhbmdlcyB3aGVuIGluaXRpYWxpemluZywgYXMgdGhlcmUgbWF5IGJlIGFcbiYjNDM7XHQgKiB0aW1lIG1hcmdpbiBiZXR3ZWVuIHN5c2ZzIGF0dHJpYnV0ZSBjcmVhdGlvbiBhbmQgc3RhdGUgY2hhbmdlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2MgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQocHJpdiwgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtpZGVhcGFkLWF1dG9cJiMzNDssXG4mIzQzO1x0LnRyaWdnZXJfdHlwZSA9IFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlLFxuJiM0MztcdC5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSxcbiYjNDM7XHQub2ZmbG9hZGVkID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2woc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdixcbiYjNDM7XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGh3X2NvbnRyb2wsIGxhc3RfaHdfY29udHJvbDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCB8fCBwcml2LVx1MDAzZWtiZF9ibC50eXBlICE9IEtCRF9CTF9UUklTVEFURV9BVVRPKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRod19jb250cm9sID0gaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4mIzQzO1x0bGFzdF9od19jb250cm9sID0gcHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUztcbiYjNDM7XG4mIzQzO1x0aWYgKGh3X2NvbnRyb2wgIT0gbGFzdF9od19jb250cm9sKVxuJiM0MztcdFx0bGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGh3X2NvbnRyb2wpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIHtcbi1cdGludCBicmlnaHRuZXNzO1xuJiM0MztcdGludCBod19icmlnaHRuZXNzLCBicmlnaHRuZXNzO1xuIFxuLVx0aWYgKCFwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZClcbiYjNDM7XHRpZiAodW5saWtlbHkocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXHUwMDNjPSAwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuLVx0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm11dGV4KTtcbiYjNDM7XG4mIzQzO1x0aHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuJiM0MztcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoYnJpZ2h0bmVzcyA9PSBwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MpXG4mIzQzO1x0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4mIzQzO1x0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47IC8qIFJlamVjdCBpbnNhbmUgdmFsdWVzIGVhcmx5LiAqL1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IGh3X2JyaWdodG5lc3MpXG4gXHRcdHJldHVybjtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XG4mIzQzO1x0aWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2wocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7XG4gXG4gXHRsZWRfY2xhc3NkZXZfbm90aWZ5X2JyaWdodG5lc3NfaHdfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGJyaWdodG5lc3MpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4tXHRpbnQgYnJpZ2h0bmVzcywgZXJyO1xuJiM0MztcdGludCBod19icmlnaHRuZXNzLCBlcnI7XG4gXG4gXHRpZiAoIXByaXYtXHUwMDNlZmVhdHVyZXMua2JkX2JsKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdGlmIChXQVJOX09OKHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkKSlcbiYjNDM7XHRpZiAoV0FSTl9PTihwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2UgMCkpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuLVx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpKVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xuLVx0ZWxzZVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxO1xuJiM0MztcdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gMDtcbiBcbi1cdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbi1cdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gYnJpZ2h0bmVzcztcbiYjNDM7XHRlcnIgPSBkZXZtX211dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LCBcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5tdXRleCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcbiYjNDM7XHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBod19icmlnaHRuZXNzO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5uYW1lICAgICAgICAgICAgICAgICAgICA9IFwmIzM0O3BsYXRmb3JtOjpcJiMzNDsgTEVEX0ZVTkNUSU9OX0tCRF9CQUNLTElHSFQ7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuYnJpZ2h0bmVzc19nZXQgICAgICAgICAgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldDtcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0O1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmZsYWdzICAgICAgICAgICAgICAgICAgID0gTEVEX0JSSUdIVF9IV19DSEFOR0VEIHwgTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbiBcbiYjNDM7XHRzd2l0Y2ggKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpIHtcbiYjNDM7XHRjYXNlIEtCRF9CTF9UUklTVEFURV9BVVRPOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKSB7XG4mIzQzO1x0XHRcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7Q2Fubm90IHByb3ZpZGUgTEVEIHRyaWdnZXIgJXMgZm9yIGtleWJvYXJkIGJhY2tsaWdodFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuZmxhZ3MgfD0gTEVEX1RSSUdfSFdfQ0hBTkdFRDtcbiYjNDM7XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC50cmlnZ2VyX3R5cGUgPSBcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcbiYjNDM7XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5od19jb250cm9sX3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBIYXJkd2FyZSByZW1lbWJlcnMgdGhlIGxhc3QgYnJpZ2h0bmVzcyBsZXZlbCwgaW5jbHVkaW5nIGF1dG8gbW9kZS4gKi9cbiYjNDM7XHRcdGlmIChod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmRlZmF1bHRfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lO1xuJiM0MztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgS0JEX0JMX1RSSVNUQVRFOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgS0JEX0JMX1NUQU5EQVJEOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQvKiBUaGlzIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGJ5IGlkZWFwYWRfY2hlY2tfZmVhdHVyZXMoKS4gKi9cbiYjNDM7XHRcdHVucmVhY2hhYmxlKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZWplY3QgaW5zYW5lIHZhbHVlcy4gKi9cbiYjNDM7XHRlcnIgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdGVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsIFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLmxlZCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuJiM0MztcdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gMTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9leGl0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuLVx0aWYgKCFwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZClcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IGZhbHNlO1xuJiM0MztcdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gLTE7XG4gXG4gXHRsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQpO1xuIH1cbkBAIC0yNTQ4LDE3ICYjNDM7MjcwMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGVhcGFkX2xhcHRvcF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRlcnIgPSBsZWRfdHJpZ2dlcl9yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIExFRCB0cmlnZ2VyICVzOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUsIGVycik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXJyID0gaWRlYXBhZF93bWlfZHJpdmVyX3JlZ2lzdGVyKCk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfbGVkdHJpZztcbiBcbiBcdGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2FjcGlfZHJpdmVyKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfd21pO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfd21pOlxuJiM0MztcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XG4mIzQzO2Vycl9sZWR0cmlnOlxuJiM0MztcdGlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZClcbiYjNDM7XHRcdGxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBtb2R1bGVfaW5pdChpZGVhcGFkX2xhcHRvcF9pbml0KVxuIFxuQEAgLTI1NjYsNiAmIzQzOzI3MzIsOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgaWRlYXBhZF9sYXB0b3BfZXhpdCh2b2lkKVxuIHtcbiBcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuIFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxuJiM0MztcdFx0bGVkX3RyaWdnZXJfdW5yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuIH1cbiBtb2R1bGVfZXhpdChpZGVhcGFkX2xhcHRvcF9leGl0KVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVkcy5oIGIvaW5jbHVkZS9saW51eC9sZWRzLmhcbmluZGV4IGE1MTVmMDc1YzI5YTEuLjkzYjNmZDdlNTYzNjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sZWRzLmhcbkBAIC0xMDksNiAmIzQzOzEwOSw3IEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYge1xuICNkZWZpbmUgTEVEX0lOSVRfREVGQVVMVF9UUklHR0VSIEJJVCgyMylcbiAjZGVmaW5lIExFRF9SRUpFQ1RfTkFNRV9DT05GTElDVCBCSVQoMjQpXG4gI2RlZmluZSBMRURfTVVMVElfQ09MT1JcdFx0QklUKDI1KVxuJiM0MzsjZGVmaW5lIExFRF9UUklHX0hXX0NIQU5HRURcdEJJVCgyNilcbiBcbiBcdC8qIHNldF9icmlnaHRuZXNzX3dvcmsgLyBibGlua190aW1lciBmbGFncywgYXRvbWljLCBwcml2YXRlLiAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHR3b3JrX2ZsYWdzO1xuQEAgLTIzOSw2ICYjNDM7MjQwLDExIEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYge1xuIFx0c3RydWN0IGtlcm5mc19ub2RlXHQqYnJpZ2h0bmVzc19od19jaGFuZ2VkX2tuO1xuICNlbmRpZlxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuJiM0MztcdGJvb2xcdFx0XHR0cmlnZ2Vyc19od19jaGFuZ2VkO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0dHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHQvKiBFbnN1cmVzIGNvbnNpc3RlbnQgYWNjZXNzIHRvIHRoZSBMRUQgY2xhc3MgZGV2aWNlICovXG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0bGVkX2FjY2VzcztcbiB9O1xuQEAgLTQ4NSw2ICYjNDM7NDkxLDcgQEAgc3RydWN0IGxlZF90cmlnZ2VyIHtcbiBcdGNvbnN0IGNoYXJcdCAqbmFtZTtcbiBcdGludFx0XHQoKmFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gXHR2b2lkXHRcdCgqZGVhY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuJiM0MztcdGJvb2xcdFx0KCpvZmZsb2FkZWQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBcbiBcdC8qIEJyaWdodG5lc3Mgc2V0IGJ5IGxlZF90cmlnZ2VyX2V2ZW50ICovXG4gXHRlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7XG5AQCAtNTMzLDYgJiM0Mzs1NDAsOSBAQCB2b2lkIGxlZF90cmlnZ2VyX2JsaW5rX29uZXNob3Qoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyLFxuIHZvaWQgbGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcik7XG4gdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiYjNDM7XG4mIzQzO2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF9zZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIFx0XHRcdFx0XHR2b2lkICp0cmlnZ2VyX2RhdGEpXG5AQCAtNTg0LDYgJiM0Mzs1OTQsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkICpsZWRfZ2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB7XG5AQCAtNTk4LDYgJiM0Mzs2MTUsMTMgQEAgbGVkX3RyaWdnZXJfZ2V0X2JyaWdodG5lc3MoY29uc3Qgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKVxuIFxuICNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSUyAqL1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgYm9vbCBhY3RpdmF0ZSkge31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qIFRyaWdnZXIgc3BlY2lmaWMgZW51bSAqL1xuIGVudW0gbGVkX3RyaWdnZXJfbmV0ZGV2X21vZGVzIHtcbiBcdFRSSUdHRVJfTkVUREVWX0xJTksgPSAwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FV19MRURTJiMzNDssCiAgICAmIzM0O0xFRFNfQ0xBU1MmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSUyYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSX05FVERFViYjMzQ7LAogICAgJiMzNDtMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtJREVBUEFEX0xBUFRPUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3NldCYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBzeXNmcyBhdHRyaWJ1dGUgKHRyaWdnZXJfbWF5X29mZmxvYWQpIGZvciBxdWVyeWFibGUgaGFyZHdhcmUtb2ZmbG9hZGVkIExFRCB0cmlnZ2VycywgdXBkYXRlcyBjb3JlIGJyaWdodG5lc3MgZ2V0L3NldCBsb2NraW5nIGFuZCB0cmlnZ2VyIHJlbW92YWwgbG9naWMsIGFuZCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gTEVEIHRyaWdnZXIgZHJpdmVycy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIExFRCBjbGFzcy90cmlnZ2VyIHN5c2ZzIGludGVyZmFjZXMgYW5kIGNvcmUgdHJpZ2dlciBsaWZlY3ljbGUgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMDdhNWUzYzkyMTE0Yzc1NDUzMTcyYTk0NTJhYjdhMjViYzM0YjUyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAwNzoyMjoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKaW5kZXggZDRjOTE4Y2MxMWExMi4uOTRjMzMxZDljNDEwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKQEAgLTc4LDYgJiM0Mzs3OCwzMSBAQCBEZXNjcmlwdGlvbjoKIAkJKHdoaWNoIHdvdWxkIG9mdGVuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGRldmljZSB0cmVlIGZvciB0aGUKIAkJaGFyZHdhcmUpLgogCiYjNDM7V2hhdDoJCS9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy90cmlnZ2VyX21heV9vZmZsb2FkCiYjNDM7RGF0ZToJCVNlcHRlbWJlciAyMDI2CiYjNDM7S2VybmVsVmVyc2lvbjoJNy40CiYjNDM7Q29udGFjdDoJbGludXgtbGVkc0B2Z2VyLmtlcm5lbC5vcmcKJiM0MztEZXNjcmlwdGlvbjoKJiM0MzsJCU5hbWVzIGFuZCBzdGF0ZXMgb2YgdHJpZ2dlcnMgdGhhdCBtYXkgYmUgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLgomIzQzOwkJU3VjaCB0cmlnZ2VycyBhcmUgYWxzbyBjYWxsZWQgJiMzNDtoYXJkd2FyZSBjb250cm9sIHRyaWdnZXImIzM0OyBpbiBzb21lCiYjNDM7CQljb250ZXh0LgomIzQzOwomIzQzOwkJT25seSBleGlzdHMgd2hlbiB0aGUgTEVEIHN1cHBvcnRzIHRyaWdnZXIgb2ZmbG9hZC4KJiM0MzsKJiM0MzsJCVJlYWRpbmcgdGhpcyBmaWxlIHJldHVybnMgYSBsaXN0IG9mIHRyaWdnZXJzIHRoYXQgYXJlIGNhcGFibGUgdG8KJiM0MzsJCWJlIG9mZmxvYWRlZC4gVGhlIG9wdGlvbmFsIGJyYWNrZXRzIGFyb3VuZCB0aGUgdHJpZ2dlciBuYW1lCiYjNDM7CQlpbmRpY2F0ZSB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgdHJpZ2dlcjoKJiM0MzsKJiM0MzsJCS0gYGZvb190cmlnZ2VyYDogdGhlIHRyaWdnZXIgaXMgbm90IHNlbGVjdGVkLgomIzQzOwkJLSBgJmx0O2Zvb190cmlnZ2VyJmd0O2A6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkLCBidXQgZmFsbHMgYmFjayB0bwomIzQzOwkJICBzb2Z0d2FyZSBibGluayBmb3Igc29tZSByZWFzb24gKGUuZy4sIGluY29tcGF0aWJsZSB0cmlnZ2VyCiYjNDM7CQkgIHBhcmFtZXRlcnMpCiYjNDM7CQktIGBbZm9vX3RyaWdnZXJdYDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQgYW5kIG9mZmxvYWRlZCB0bwomIzQzOwkJICBoYXJkd2FyZS4KJiM0MzsKJiM0MzsJCVRoZSAmIzM0O25ldGRldiYjMzQ7IHRyaWdnZXIgYWxzbyBwcm92aWRlcyBhIGN1c3RvbSBhdHRyaWJ1dGUgdG8KJiM0MzsJCWluZGljYXRlIGl0cyBzdGF0ZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvJmx0O2xlZCZndDsvb2ZmbG9hZGVkYC4KJiM0MzsKIFdoYXQ6CQkvc3lzL2NsYXNzL2xlZHMvJmx0O2xlZCZndDsvaW52ZXJ0ZWQKIERhdGU6CQlKYW51YXJ5IDIwMTEKIEtlcm5lbFZlcnNpb246CTIuNi4zOApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXYgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldgppbmRleCBlZDQ2YjM3YWI4YTI4Li5hNTE0NmVhMWUzZTYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldgpAQCAtNzUsNiAmIzQzOzc1LDkgQEAgRGVzY3JpcHRpb246CiAJCUlmIDEsIHRoZSBMRUQgYmxpbmtpbmcgaW4gcmVxdWVzdGVkIG1vZGUgaXMgb2ZmbG9hZGVkIHRvCiAJCWhhcmR3YXJlLgogCiYjNDM7CQlMRUQgdHJpZ2dlciBjb3JlIGFsc28gcHJvdmlkZXMgYSBnZW5lcmljIGF0dHJpYnV0ZSBmb3IgdGhpcwomIzQzOwkJcHVycG9zZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvJmx0O2xlZCZndDsvdHJpZ2dlcl9tYXlfb2ZmbG9hZGAuCiYjNDM7CiBXaGF0OgkJL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L2xpbmtfMTAKIERhdGU6CQlKdW4gMjAyMwogS2VybmVsVmVyc2lvbjoJNi41CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QKaW5kZXggMzkxMzk2NmNmZGFjMC4uYWRiYzU3YjlmNDljMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdApAQCAtMjQyLDYgJiM0MzsyNDIsOSBAQCBvcHMgYW5kIG5lZWRzIHRvIGRlY2xhcmUgc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIHN1cHBvcnRlZCB0cmlnZ2Vycy4KIAogV2l0aCBodyBjb250cm9sIHdlIHJlZmVyIHRvIHRoZSBMRUQgZHJpdmVuIGJ5IGhhcmR3YXJlLgogCiYjNDM7QSBzeXNmcyBhdHRyaWJ1dGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIGlzIHByb3ZpZGVkIGZvciB1c2Vyc3BhY2UgdG8KJiM0MztxdWVyeSBzdXBwb3J0ZWQgdHJpZ2dlcnMgYW5kIHRoZWlyIHN0YXRlcy4KJiM0MzsKIExFRCBkcml2ZXIgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YWx1ZSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6CiAKICAgICAtIGh3X2NvbnRyb2xfdHJpZ2dlcjoKQEAgLTI5OCw2ICYjNDM7MzAxLDE1IEBAIExFRCBkcml2ZXIgbXVzdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gc3VwcG9ydCBodyBjb250cm9sOgogICAgICAgICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGRldmljZSBvciBOVUxMIGlmIG5vdGhpbmcKICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgYXR0YWNoZWQuCiAKJiM0MztMRUQgdHJpZ2dlciBzaG91bGQgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgQVBJIHRvIGluZGljYXRlIGh3IGNvbnRyb2w6CiYjNDM7ICAgIC0gb2ZmbG9hZGVkOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRyaWdnZXIgaXMgY3VycmVudGx5CiYjNDM7ICAgICAgICAgICAgICAgIG9mZmxvYWRlZCB0byBoYXJkd2FyZS4KJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgSWYgYSB0cmlnZ2VyIGRvZXNuJiMzOTt0IGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLCB0aGUgZGVmYXVsdAomIzQzOyAgICAgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIHRydWUgZm9yIHByaXZhdGUgdHJpZ2dlcnMgYW5kIGZhbHNlIGZvciBnZW5lcmljCiYjNDM7ICAgICAgICAgICAgICAgIG9uZXMuCiYjNDM7CiBMRUQgZHJpdmVyIGNhbiBhY3RpdmF0ZSBhZGRpdGlvbmFsIG1vZGVzIGJ5IGRlZmF1bHQgdG8gd29ya2Fyb3VuZCB0aGUKIGltcG9zc2liaWxpdHkgb2Ygc3VwcG9ydGluZyBlYWNoIGRpZmZlcmVudCBtb2RlIG9uIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlci4KIEV4YW1wbGVzIGFyZSBoYXJkY29kaW5nIHRoZSBibGluayBzcGVlZCB0byBhIHNldCBpbnRlcnZhbCwgZW5hYmxlIHNwZWNpYWwKQEAgLTMxMSw5ICYjNDM7MzIzLDY5IEBAIHRoZSBlbmQgdXNlIGh3X2NvbnRyb2xfc2V0IHRvIGFjdGl2YXRlIGh3IGNvbnRyb2wuCiBBIHRyaWdnZXIgY2FuIHVzZSBod19jb250cm9sX2dldCB0byBjaGVjayBpZiBhIExFRCBpcyBhbHJlYWR5IGluIGh3IGNvbnRyb2wKIGFuZCBpbml0IHRoZWlyIGZsYWdzLgogCiYjNDM7QWx0ZXJuYXRpdmVseSwgYSBwcml2YXRlIHRyaWdnZXIgY2FuIGJlIGltcGxlbWVudGVkIGFsb25nIHdpdGggdGhlIExFRCBkcml2ZXIgaWYKJiM0Mzt0aGUgTEVEJiMzOTtzIGhhcmR3YXJlIGNvbnRyb2wgZG9lc24mIzM5O3QgZml0IGFueSBnZW5lcmljIHRyaWdnZXIuIFRvIGFzc29jaWF0ZSB0aGUKJiM0Mztwcml2YXRlIHRyaWdnZXIgd2l0aCB0aGUgTEVEIGNsYXNzZGV2LCB0aGVpciBgdHJpZ2dlcl90eXBlYCBtdXN0IGJlIHRoZSBzYW1lLiBUbwomIzQzO2RlY2xhcmUgdGhhdCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHByb3ZpZGVzIGhhcmR3YXJlIGNvbnRyb2wgZm9yIHRoZSBhc3NvY2lhdGVkCiYjNDM7TEVEIGNsYXNzZGV2LCBzZXQgdGhlIGBod19jb250cm9sX3RyaWdnZXJgIHN0cmluZyB0byB0aGUgdHJpZ2dlciYjMzk7cyBuYW1lLiBTaW5jZQomIzQzO2JvdGggdGhlIExFRCBjbGFzc2RldiBhbmQgdGhlIHByaXZhdGUgdHJpZ2dlciBhcmUgaW4gdGhlIHNhbWUgTEVEIGRyaXZlciwgaXQmIzM5O3MKJiM0Mztub3QgbmVjZXNzYXJ5IGZvciB0aGVtIHRvIGNvb3JkaW5hdGUgdmlhIGBod19jb250cm9sXypgIGNhbGxiYWNrcy4KJiM0MzsKIFdoZW4gdGhlIExFRCBpcyBpbiBodyBjb250cm9sLCBubyBzb2Z0d2FyZSBibGluayBpcyBwb3NzaWJsZSBhbmQgZG9pbmcgc28KIHdpbGwgZWZmZWN0aXZlbHkgZGlzYWJsZSBodyBjb250cm9sLgogCiYjNDM7SGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbgomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztTb21lIGhhcmR3YXJlIGNhbiBhdXRvbm9tb3VzbHkgYWN0aXZhdGUvZGVhY3RpdmF0ZSBoYXJkd2FyZSBjb250cm9sLiBBZnRlciB0aGF0LAomIzQzO3RoZSBMRUQgaGFyZHdhcmUgbm90aWZpZXMgdGhlIExFRCBkcml2ZXIuCiYjNDM7CiYjNDM7SWYgdGhlIGRyaXZlciBjYW4gZGV0ZWN0IHN1Y2ggdHJhbnNpdGlvbnMgYW5kIHRodXMgd2FudHMgdG8gbm90aWZ5IHRoZSBMRUQgY29yZQomIzQzO3RvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIHRoZW4gdGhlIGBMRURfVFJJR19IV19DSEFOR0VEYCBmbGFnIG11c3QgYmUgc2V0IGluCiYjNDM7ZmxhZ3MgYmVmb3JlIHJlZ2lzdGVyaW5nLiBUbyB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciBhY2NvcmRpbmdseSwgY2FsbAomIzQzO2BsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBvbiB0aGUgTEVEIGNsYXNzZGV2LgomIzQzOwomIzQzO1RoaXMgY2FwYWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIHRoZSBMRUQgZGV2aWNlJiMzOTtzIHByaXZhdGUgdHJpZ2dlci4gVGhlIHByaXZhdGUKJiM0Mzt0cmlnZ2VyIG11c3QgaGF2ZSBiZWVuIHByb3Blcmx5IHJlZ2lzdGVyZWQgKHNlZSBhYm92ZSkgYW5kIG5hbWVkIGFmdGVyCiYjNDM7YGh3X2NvbnRyb2xfdHJpZ2dlcmAuCiYjNDM7CiYjNDM7T25seSB0d28gdHJhbnNpdGlvbnMgYXJlIGRlZmluZWQ6CiYjNDM7CiYjNDM7LSAmIzM0O25vbmUmIzM0OyA9Jmd0OyBwcml2YXRlIHRyaWdnZXI6CiYjNDM7ICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sCiYjNDM7ICAgICAgICBhbmQgd2hlbiAmIzM0O25vbmUmIzM0OyAoaS5lLiwgbm8gdHJpZ2dlcikgaXMgY3VycmVudGx5IGFjdGl2ZS4gSWYgdGhlIHByaXZhdGUKJiM0MzsgICAgICAgIHRyaWdnZXIgaXMgYWxyZWFkeSBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseQomIzQzOyAgICAgICAgYSBuby1vcC4KJiM0MzsKJiM0MzsgICAgICAgIFRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXMKJiM0MzsgICAgICAgIG5vcm1hbC4KJiM0MzsKJiM0MzsgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlCiYjNDM7ICAgICAgICBhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIGN1cnJlbnRseSBpbiBoYXJkd2FyZQomIzQzOyAgICAgICAgY29udHJvbC4KJiM0MzsKJiM0MzsgICAgICAgIElmIGVycm9yIG9jY3VycyBpbiB0aGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSwgdGhlIExFRCBUcmlnZ2VyIGNvcmUgcmV2ZXJ0cwomIzQzOyAgICAgICAgdGhlIGVmZmVjdGl2ZSB0cmlnZ2VyIHRvICYjMzQ7bm9uZSYjMzQ7LgomIzQzOwomIzQzOy0gcHJpdmF0ZSB0cmlnZ2VyID0mZ3Q7ICYjMzQ7bm9uZSYjMzQ7CiYjNDM7ICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGRlYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2wKJiM0MzsgICAgICAgIGFuZCB3aGVuIHRoZSBwcml2YXRlIHRyaWdnZXIgaXMgY3VycmVudGx5IGFjdGl2ZS4gSWYgJiMzNDtub25lJiMzNDsgKGkuZS4sIG5vCiYjNDM7ICAgICAgICB0cmlnZ2VyKSBpcyBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseSBhCiYjNDM7ICAgICAgICBuby1vcC4KJiM0MzsKJiM0MzsgICAgICAgIFRoZSBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhcwomIzQzOyAgICAgICAgbm9ybWFsLCBleGNlcHQgdGhhdCB0aGUgY3VycmVudCBMRUQgYnJpZ2h0bmVzcyBpcyByZXRhaW5lZC4gVGhlIHJlYXNvbgomIzQzOyAgICAgICAgZm9yIGtlZXBpbmcgdGhlIGJyaWdodG5lc3MgdW5jaGFuZ2VkIGlzIHRoYXQgc29tZSBoYXJkd2FyZSBtYXkgY2hvb3NlIGEKJiM0MzsgICAgICAgIHNwZWNpZmljIGJyaWdodG5lc3MgaW5zdGVhZCBvZiBzaW1wbHkgdHVybmluZyBvZmYgdGhlIExFRCBhZnRlcgomIzQzOyAgICAgICAgYXV0b25vbW91c2x5IGRlYWN0aXZhdGluZyBoYXJkd2FyZSBjb250cm9sLgomIzQzOwomIzQzOyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGUKJiM0MzsgICAgICAgIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBub3QgY3VycmVudGx5IGluIGhhcmR3YXJlCiYjNDM7ICAgICAgICBjb250cm9sLgomIzQzOwomIzQzO0lmIHRoZSBjdXJyZW50IHRyaWdnZXIgaXMgbmVpdGhlciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIG5vciAmIzM0O25vbmUmIzM0Oywgbm8gdHJhbnNpdGlvbgomIzQzO3dpbGwgYmUgbWFkZS4KJiM0MzsKIEtub3duIElzc3VlcwogPT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwppbmRleCBhNTFiMGVkNTM4ODY0Li4zYjQzOGQ4ZGE1ZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCkBAIC0yNywyOSAmIzQzOzI3LDE5IEBAIHN0YXRpYyBMSVNUX0hFQUQobGVkc19sb29rdXBfbGlzdCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTsKIAotc3RhdGljIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKLXsKLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwotCWd1YXJkKHJ3c2VtX3JlYWQpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7Ci0JcmV0dXJuIGxlZF9jZGV2LSZndDt0cmlnZ2VyICZhbXA7JmFtcDsgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O3RyaWdnZXJfdHlwZTsKLSNlbHNlCi0JcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczsKIAotCWlmIChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSkKLQkJcmV0dXJuIC1FTk9EQVRBOwomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpIHsKJiM0MzsJCWlmIChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSkKJiM0MzsJCQlyZXR1cm4gLUVOT0RBVEE7CiAKLQltdXRleF9sb2NrKCZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpOwotCWxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7Ci0JYnJpZ2h0bmVzcyA9IGxlZF9jZGV2LSZndDticmlnaHRuZXNzOwotCW11dGV4X3VubG9jaygmYW1wO2xlZF9jZGV2LSZndDtsZWRfYWNjZXNzKTsKJiM0MzsJCWxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7CiYjNDM7CQlicmlnaHRuZXNzID0gbGVkX2NkZXYtJmd0O2JyaWdodG5lc3M7CiYjNDM7CX0KIAogCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDsldVxuJiMzNDssIGJyaWdodG5lc3MpOwogfQpAQCAtNzQsNiAmIzQzOzY0LDkgQEAgc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAKIAlpZiAoc3RhdGUgPT0gTEVEX09GRikKIAkJbGVkX3RyaWdnZXJfcmVtb3ZlKGxlZF9jZGV2KTsKJiM0MzsJZWxzZQomIzQzOwkJbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wobGVkX2NkZXYpOwomIzQzOwogCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2Rldiwgc3RhdGUpOwogCiAJcmV0ID0gc2l6ZTsKQEAgLTEwMyw4ICYjNDM7OTYsMzAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCBsZWRfdHJpZ2dlcl9iaW5fYXR0cnNbXSA9IHsKIAkmYW1wO2Jpbl9hdHRyX3RyaWdnZXIsCiAJTlVMTCwKIH07CiYjNDM7CiYjNDM7c3RhdGljIERFVklDRV9BVFRSX1JPKHRyaWdnZXJfbWF5X29mZmxvYWQpOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsZWRfdHJpZ2dlcl9hdHRyc1tdID0gewomIzQzOwkmYW1wO2Rldl9hdHRyX3RyaWdnZXJfbWF5X29mZmxvYWQuYXR0ciwKJiM0MzsJTlVMTAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHVtb2RlX3QgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCQkJICAgICAgaW50IGlkeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGtvYmpfdG9fZGV2KGtvYmopOwomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwomIzQzOwomIzQzOwlpZiAoYXR0ciA9PSAmYW1wO2Rldl9hdHRyX3RyaWdnZXJfbWF5X29mZmxvYWQuYXR0cikKJiM0MzsJCXJldHVybiBsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyID8gYXR0ci0mZ3Q7bW9kZSA6IDA7CiYjNDM7CiYjNDM7CXJldHVybiBhdHRyLSZndDttb2RlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxlZF90cmlnZ2VyX2dyb3VwID0gewogCS5iaW5fYXR0cnMgPSBsZWRfdHJpZ2dlcl9iaW5fYXR0cnMsCiYjNDM7CS5hdHRycyA9IGxlZF90cmlnZ2VyX2F0dHJzLAomIzQzOwkuaXNfdmlzaWJsZSA9IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUsCiB9OwogI2VuZGlmCiAKQEAgLTU5Niw2ICYjNDM7NjExLDkgQEAgaW50IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoc3RydWN0IGRldmljZSAqcGFyZW50LAogCWxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KGxlZF9jZGV2KTsKICNlbmRpZgogCiYjNDM7CWlmIChsZWRfY2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgTEVEX1RSSUdfSFdfQ0hBTkdFRCkKJiM0MzsJCWxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChsZWRfY2Rldik7CiYjNDM7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpOwogCiAJZGV2X2RiZyhwYXJlbnQsICYjMzQ7UmVnaXN0ZXJlZCBsZWQgZGV2aWNlOiAlc1xuJiMzNDssCkBAIC02MTYsNiAmIzQzOzYzNCw5IEBAIHZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiAJaWYgKElTX0VSUl9PUl9OVUxMKGxlZF9jZGV2LSZndDtkZXYpKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKGxlZF9jZGV2LSZndDtmbGFncyAmYW1wOyBMRURfVFJJR19IV19DSEFOR0VEKQomIzQzOwkJbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKGxlZF9jZGV2KTsKJiM0MzsKICNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwogCWRvd25fd3JpdGUoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKIAlpZiAobGVkX2NkZXYtJmd0O3RyaWdnZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMKaW5kZXggYjEyMjMyMThiZGExMS4uYTlkOTkyYTg4NjE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYwpAQCAtNyw5ICYjNDM7NywxMyBAQAogICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSAmbHQ7cnB1cmRpZUBvcGVuZWRoYW5kLmNvbSZndDsKICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sb2NrZGVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwpAQCAtMzMsNiAmIzQzOzM3LDM0IEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKIAlyZXR1cm4gIXRyaWctJmd0O3RyaWdnZXJfdHlwZSB8fCB0cmlnLSZndDt0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtJmd0O3RyaWdnZXJfdHlwZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFsZWRfY2Rldi0mZ3Q7dHJpZ2dlcikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyIHx8CiYjNDM7CSAgICBzdHJjbXAobGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciwgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAobGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O29mZmxvYWRlZCkKJiM0MzsJCXJldHVybiBsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7b2ZmbG9hZGVkKGxlZF9jZGV2KTsKJiM0MzsKJiM0MzsJZGV2X3dhcm5fb25jZShsZWRfY2Rldi0mZ3Q7ZGV2LCAmIzM0O2h3IGNvbnRyb2wgdHJpZ2dlciAlcyBkb2VzbiYjMzk7dCBpbXBsZW1lbnQgb2ZmbG9hZGVkKClcbiYjMzQ7LAomIzQzOwkJICAgICAgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpOwomIzQzOwomIzQzOwkvKiBPdGhlcndpc2UgYXNzdW1lIHByaXZhdGUgdHJpZ2dlcnMgYXMgYWx3YXlzIG9mZmxvYWRlZC4gKi8KJiM0MzsJcmV0dXJuIGxlZF9jZGV2LSZndDt0cmlnZ2VyLSZndDt0cmlnZ2VyX3R5cGU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CWd1YXJkKHJ3c2VtX3JlYWQpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7CiYjNDM7CXJldHVybiBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKTsKJiM0MzsKIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZiwKIAkJCSAgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KQpAQCAtMTYzLDcgJiM0MzsxOTUsOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVhZCk7CiAKIC8qIENhbGxlciBtdXN0IGVuc3VyZSBsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrIGhlbGQgKi8KLWludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKJiM0MztzdGF0aWMgaW50IF9fbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsCiYjNDM7CQkJICAgICBib29sIGh3X3RyaWdnZXJlZCkKIHsKIAljaGFyICpldmVudCA9IE5VTEw7CiAJY2hhciAqZW52cFsyXTsKQEAgLTE5NCw3ICYjNDM7MjI3LDIxIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKIAkJbGVkX2NkZXYtJmd0O3RyaWdnZXJfZGF0YSA9IE5VTEw7CiAJCWxlZF9jZGV2LSZndDthY3RpdmF0ZWQgPSBmYWxzZTsKIAkJbGVkX2NkZXYtJmd0O2ZsYWdzICZhbXA7PSB+TEVEX0lOSVRfREVGQVVMVF9UUklHR0VSOwotCQlsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEhhcmR3YXJlIG1heSBoYXZlIHNlbGVjdGVkIGEgbmV3IGJyaWdodG5lc3MgbGV2ZWwgZHVyaW5nIGl0cwomIzQzOwkJICogaGFyZHdhcmUgY29udHJvbCB0cmFuc2l0aW9uLCBzbyBvbmx5IHJlc2V0IGJyaWdodG5lc3MgaWYgd2UKJiM0MzsJCSAqIGFyZSBzd2l0Y2hpbmcgdG8gYW5vdGhlciB0cmlnZ2VyIG9yIGlmIHRoZSBzd2l0Y2hpbmcgaXMgbm90CiYjNDM7CQkgKiBoYXJkd2FyZSB0cmlnZ2VyZWQuCiYjNDM7CQkgKgomIzQzOwkJICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIGVycm9yIHBhdGgsIGFzIHJ1bm5pbmcKJiM0MzsJCSAqIGludG8gdGhlIGVycm9yIHBhdGggaW1wbGllcyBhIG5vbmUgPSZndDsgcHJpdmF0ZSB0cmlnZ2VyCiYjNDM7CQkgKiB0cmFuc2l0aW9uLiBUaGlzIGhpbnRzIHRoYXQgdGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlCiYjNDM7CQkgKiB0cmlnZ2VyIG11c3QgaGF2ZSBzb21lIGZ1bmRhbWVudGFsIGJ1Z3MsIHNvIGRvbiYjMzk7dCBib3RoZXIKJiM0MzsJCSAqIGxlYXZpbmcgdGhlIExFRCBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0cmlnIHx8ICFod190cmlnZ2VyZWQpCiYjNDM7CQkJbGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTsKIAl9CiAJaWYgKHRyaWcpIHsKIAkJc3Bpbl9sb2NrKCZhbXA7dHJpZy0mZ3Q7bGVkZGV2X2xpc3RfbG9jayk7CkBAIC0yNTgsNiAmIzQzOzMwNSwxMSBAQCBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpCiAKIAlyZXR1cm4gcmV0OwogfQomIzQzOwomIzQzO2ludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgdHJpZywgZmFsc2UpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldCk7CiAKIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQpAQCAtMjY4LDYgJiM0MzszMjAsMTUgQEAgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmUpOwogCiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CWd1YXJkKHJ3c2VtX3dyaXRlKSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwlpZiAoX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSkKJiM0MzsJCWxlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKTsKJiM0MzsKIHN0YXRpYyBib29sIGxlZF9tYXRjaF9kZWZhdWx0X3RyaWdnZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJICAgICAgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQogewpAQCAtMzEzLDYgJiM0MzszNzQsMzIgQEAgdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KTsKIAomIzQzO3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwomIzQzOwlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7CiYjNDM7CWJvb2wgaGl0LCBvZmZsb2FkZWQ7CiYjNDM7CWludCBsZW47CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2xlZF9jZGV2LSZndDtsZWRfYWNjZXNzKTsKJiM0MzsJZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKJiM0MzsKJiM0MzsJdHJpZyA9IGxlZF9jZGV2LSZndDt0cmlnZ2VyOwomIzQzOwomIzQzOwlvZmZsb2FkZWQgPSBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpOwomIzQzOwloaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgJmFtcDsmYW1wOyAhc3RyY21wKGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIsIHRyaWctJmd0O25hbWUpKTsKJiM0MzsKJiM0MzsJLyogW29mZmxvYWRlZF0gJmx0O2FjdGl2ZV9idXRfbm90X29mZmxvYWRlZCZndDsgaW5hY3RpdmUgKi8KJiM0MzsJbGVuID0gc3lzZnNfZW1pdChidWYsICYjMzQ7JXMlcyVzXG4mIzM0OywKJiM0MzsJCQkgb2ZmbG9hZGVkID8gJiMzNDtbJiMzNDsgOiAoaGl0ID8gJiMzNDsmbHQ7JiMzNDsgOiAmIzM0OyYjMzQ7KSwKJiM0MzsJCQkgbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciwKJiM0MzsJCQkgb2ZmbG9hZGVkID8gJiMzNDtdJiMzNDsgOiAoaGl0ID8gJiMzNDsmZ3Q7JiMzNDsgOiAmIzM0OyYjMzQ7KSk7CiYjNDM7CiYjNDM7CXJldHVybiBsZW47CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyk7CiYjNDM7CiAvKiBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi8KIAogaW50IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKQEAgLTQwMyw2ICYjNDM7NDkwLDg4IEBAIGludCBkZXZtX2xlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIpOwogCiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsCiYjNDM7CQkJCQkJIHN0cnVjdCBsZWRfdHJpZ2dlciAqaGNfdHJpZykKJiM0Mzt7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIWxlZF9jZGV2LSZndDt0cmlnZ2VyKSB7CiYjNDM7CQkvKiAmIzM0O25vbmUmIzM0OyA9Jmd0OyBwcml2YXRlIHRyaWdnZXIuICovCiYjNDM7CQlpZiAoYWN0aXZhdGUpCiYjNDM7CQkJZXJyID0gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIGhjX3RyaWcsIHRydWUpOwomIzQzOwl9IGVsc2UgaWYgKGxlZF9jZGV2LSZndDt0cmlnZ2VyID09IGhjX3RyaWcpIHsKJiM0MzsJCS8qIHByaXZhdGUgdHJpZ2dlciA9Jmd0OyAmIzM0O25vbmUmIzM0Oy4gKi8KJiM0MzsJCWlmICghYWN0aXZhdGUpCiYjNDM7CQkJZXJyID0gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIE5VTEwsIHRydWUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogT3RoZXIgdHJpZ2dlciBpcyBhY3RpdmUuICovCiYjNDM7CQlkZXZfZGJnKGxlZF9jZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtJZ25vcmluZyBodyBjb250cm9sIHRyYW5zaXRpb24gKCVzICVzKSB3aGlsZSAlcyBpcyBhY3RpdmUmIzM0OywKJiM0MzsJCQlhY3RpdmF0ZSA/ICYjMzQ7YWN0aXZhdGUmIzM0OyA6ICYjMzQ7ZGVhY3RpdmF0ZSYjMzQ7LCBoY190cmlnLSZndDtuYW1lLAomIzQzOwkJCWxlZF9jZGV2LSZndDt0cmlnZ2VyLSZndDtuYW1lKTsKJiM0MzsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZGV2X3dhcm4obGVkX2NkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gJXMgJXMgaW4gaHcgY29udHJvbCB0cmFuc2l0aW9uOiAlZCYjMzQ7LAomIzQzOwkJCSBhY3RpdmF0ZSA/ICYjMzQ7YWN0aXZhdGUmIzM0OyA6ICYjMzQ7ZGVhY3RpdmF0ZSYjMzQ7LCBoY190cmlnLSZndDtuYW1lLCBlcnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9od19jb250cm9sX2NoYW5nZWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGVkX2NsYXNzZGV2LCB0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspOwomIzQzOwlib29sIGFjdGl2YXRlID0gUkVBRF9PTkNFKGxlZF9jZGV2LSZndDt0cmlnZ2Vyc19od19jaGFuZ2VkKTsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsICZhbXA7dHJpZ2dlcnNfbGlzdF9sb2NrKSB7CiYjNDM7CQlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7CiYjNDM7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyaWcsICZhbXA7dHJpZ2dlcl9saXN0LCBuZXh0X3RyaWcpIHsKJiM0MzsJCQlpZiAodHJpZy0mZ3Q7dHJpZ2dlcl90eXBlID09IGxlZF9jZGV2LSZndDt0cmlnZ2VyX3R5cGUgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhc3RyY21wKHRyaWctJmd0O25hbWUsIGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIpKSB7CiYjNDM7CQkJCWd1YXJkKHJ3c2VtX3dyaXRlKSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwkJCQlsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24obGVkX2NkZXYsIGFjdGl2YXRlLCB0cmlnKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlkZXZfZXJyKGxlZF9jZGV2LSZndDtkZXYsCiYjNDM7CQkmIzM0OyVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXG4mIzM0OywKJiM0MzsJCV9fZnVuY19fLCBsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKQomIzQzO3sKJiM0MzsJLyogUmVzdHJpY3RlZCB0byBwcml2YXRlIHRyaWdnZXJzLiAqLwomIzQzOwlpZiAoV0FSTl9PTighKGxlZF9jZGV2LSZndDtmbGFncyAmYW1wOyBMRURfVFJJR19IV19DSEFOR0VEKSB8fAomIzQzOwkJICAgICFsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyIHx8ICFsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl90eXBlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShsZWRfY2Rldi0mZ3Q7dHJpZ2dlcnNfaHdfY2hhbmdlZCwgYWN0aXZhdGUpOwomIzQzOwomIzQzOwlzY2hlZHVsZV93b3JrKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQpOwomIzQzOwomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJzX2h3X2NoYW5nZWRfd29yaywgbGVkX3RyaWdnZXJfaHdfY29udHJvbF9jaGFuZ2VkX3dvcmtlcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZCk7CiYjNDM7CiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovCiYjNDM7CiAvKiBTaW1wbGUgTEVEIFRyaWdnZXIgSW50ZXJmYWNlICovCiAKIHZvaWQgbGVkX3RyaWdnZXJfZXZlbnQoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jCmluZGV4IDE4NDRkMGNkNWY1MjguLjZkYjgzZDAxNTI3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMKQEAgLTg1LDEyICYjNDM7ODUsMTggQEAgc3RhdGljIGludCBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogCXJldHVybiBjcm9zX2VjX2xlZF9zZW5kX2NtZChwcml2LSZndDtjcm9zX2VjLCAmYW1wO2FyZyk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgbGVkX2h3X3RyaWdnZXJfdHlwZSBjcm9zX2VjX2xlZF90cmlnZ2VyX3R5cGU7CiAKIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgY3Jvc19lY19sZWRfdHJpZ2dlciA9IHsKIAkubmFtZSA9ICYjMzQ7Y2hyb21lb3MtYXV0byYjMzQ7LAogCS50cmlnZ2VyX3R5cGUgPSAmYW1wO2Nyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZSwKIAkuYWN0aXZhdGUgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlLAomIzQzOwkub2ZmbG9hZGVkID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQsCiB9OwogCiBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYwppbmRleCBlZDZhNDdiYmI0NGY5Li4zMmQ0MGQxNzZkM2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYwpAQCAtMTk1LDEwICYjNDM7MTk1LDE2IEBAIHN0YXRpYyB2b2lkIG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpCiAJCQllcnIpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgb21uaWFfaHd0cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBvbW5pYV9od190cmlnZ2VyID0gewogCS5uYW1lCQk9ICYjMzQ7b21uaWEtbWN1JiMzNDssCiAJLmFjdGl2YXRlCT0gb21uaWFfaHd0cmlnX2FjdGl2YXRlLAogCS5kZWFjdGl2YXRlCT0gb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUsCiYjNDM7CS5vZmZsb2FkZWQJPSBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkLAogCS50cmlnZ2VyX3R5cGUJPSAmYW1wO29tbmlhX2h3X3RyaWdnZXJfdHlwZSwKIH07CiAKQEAgLTI1MSw2ICYjNDM7MjU3LDcgQEAgc3RhdGljIGludCBvbW5pYV9sZWRfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IG9tbmlhX2xlZCAqbGVkLAogCSAqIGJ5IExFRCBjbGFzcyBmcm9tIHRoZSBsaW51eCxkZWZhdWx0LXRyaWdnZXIgcHJvcGVydHkuCiAJICovCiAJY2Rldi0mZ3Q7ZGVmYXVsdF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lOwomIzQzOwljZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7CiAKIAkvKiBQdXQgdGhlIExFRCBpbnRvIHNvZnR3YXJlIG1vZGUgKi8KIAlyZXQgPSBvbW5pYV9jbWRfd3JpdGVfdTgoY2xpZW50LCBPTU5JQV9DTURfTEVEX01PREUsIE9NTklBX0NNRF9MRURfTU9ERV9MRUQobGVkLSZndDtyZWcpIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLmggYi9kcml2ZXJzL2xlZHMvbGVkcy5oCmluZGV4IGJlZTQ2NjUxZTA2OGYuLmJkYWMyMzM2MDEyZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMuaApAQCAtMjcsOCAmIzQzOzI3LDE4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiBzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCWNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLAogCQkJbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KTsKJiM0Mztzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIAogZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbGVkc19saXN0X2xvY2s7CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBsZWRzX2xpc3Q7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiYjNDM7I2Vsc2UgLyogIUNPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH0KJiM0MzsjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqLwomIzQzOwogI2VuZGlmCS8qIF9fTEVEU19IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZwppbmRleCBjMTEyODJhNzRiNWFjLi5hMTFkMDRjZTRhYjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcKQEAgLTksNiAmIzQzOzksMTYgQEAgbWVudWNvbmZpZyBMRURTX1RSSUdHRVJTCiAKIGlmIExFRFNfVFJJR0dFUlMKIAomIzQzO2NvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQKJiM0MzsJYm9vbCAmIzM0O0xFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnQmIzM0OwomIzQzOwlkZWZhdWx0IExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VECiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGluaXRpYXRlZCBoYXJkd2FyZSBjb250cm9sCiYjNDM7CSAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW4KJiM0MzsJICAmIzM0O25vbmUmIzM0OyAoaS5lLiwgbm8gdHJpZ2dlcikgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIuCiYjNDM7CiYjNDM7CSAgU2VlIERvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBmb3IgZGV0YWlscy4KJiM0MzsKIGNvbmZpZyBMRURTX1RSSUdHRVJfVElNRVIKIAl0cmlzdGF0ZSAmIzM0O0xFRCBUaW1lciBUcmlnZ2VyJiMzNDsKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYwppbmRleCA1YjRlOTJjMTRkYmI0Li4yZTlhZjQ4YTc0ZGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMKQEAgLTc5OCwxMCAmIzQzOzc5OCwxOCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogCWtmcmVlKHRyaWdnZXJfZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBuZXRkZXZfdHJpZ19vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEgPSBsZWRfZ2V0X3RyaWdnZXJfZGF0YShsZWRfY2Rldik7CiYjNDM7CiYjNDM7CXJldHVybiB0cmlnZ2VyX2RhdGEtJmd0O2h3X2NvbnRyb2w7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBuZXRkZXZfbGVkX3RyaWdnZXIgPSB7CiAJLm5hbWUgPSAmIzM0O25ldGRldiYjMzQ7LAogCS5hY3RpdmF0ZSA9IG5ldGRldl90cmlnX2FjdGl2YXRlLAogCS5kZWFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZCA9IG5ldGRldl90cmlnX29mZmxvYWRlZCwKIAkuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZwppbmRleCA1MTY1OTQ5OTMwNzM5Li5hOTc4NTJiMGIyMjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZwpAQCAtMTYsNiAmIzQzOzE2LDcgQEAgY29uZmlnIElERUFQQURfTEFQVE9QCiAJc2VsZWN0IElOUFVUX1NQQVJTRUtNQVAKIAlzZWxlY3QgTkVXX0xFRFMKIAlzZWxlY3QgTEVEU19DTEFTUwomIzQzOwlzZWxlY3QgTEVEU19UUklHR0VSUwogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIExlbm92byBJZGVhUGFkIG5ldGJvb2tzIGNvbnRhaW5zIGRyaXZlcnMgZm9yCiAJICByZmtpbGwgc3dpdGNoLCBob3RrZXksIGZhbiBjb250cm9sIGFuZCBiYWNrbGlnaHQgY29udHJvbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMKaW5kZXggODIxMzUyNDUwNGVlYi4uZjg2YzExZjUxZDBiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMKQEAgLTE0LDkgJiM0MzsxNCwxMiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29udGFpbmVyX29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVidWdmcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pODA0Mi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKQEAgLTI2LDkgJiM0MzsyOSwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xlZHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9wcm9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcG93ZXJfc3VwcGx5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Jma2lsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nX2Nob2ljZXMuaCZndDsKQEAgLTEzNCwxMCAmIzQzOzEzOSwzMSBAQCBlbnVtIHsKIH07CiAKIC8qCi0gKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIHN0YXRlcyAtIDEKLSAqIEZ1dHVyZSBrZXlib2FyZCB0eXBlcyBtYXkgbmVlZCBhIG5ldyBzeXN0ZW0sIGlmIHRoZXJlJiMzOTtzIGEgY29sbGlzaW9uCi0gKiBLQkRfQkxfVFJJU1RBVEVfQVVUTyBoYXMgbm8gd2F5IHRvIHJlcG9ydCBvciBzZXQgdGhlIGF1dG8gc3RhdGUKLSAqIHNvIGl0IGVmZmVjdGl2ZWx5IGhhcyAzIHN0YXRlcywgYnV0IG5lZWRzIHRvIGhhbmRsZSA0CiYjNDM7ICogVGhlIGVudW1lcmF0aW9uIGhhcyB0d28gcHVycG9zZXM6CiYjNDM7ICogICAtIGFzIGFuIGludGVybmFsIGlkZW50aWZpZXIgZm9yIGFsbCBrbm93biB0eXBlcyBvZiBrZXlib2FyZCBiYWNrbGlnaHQKJiM0MzsgKiAgIC0gYXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIG9mIHRoZSBLQkxDIGNvbW1hbmQKJiM0MzsgKgomIzQzOyAqIEZvciBlYWNoIHR5cGUsIHRoZSBoYXJkd2FyZSBicmlnaHRuZXNzIHZhbHVlcyBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOgomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCAgICAgIEhhcmR3YXJlIGJyaWdodG5lc3MgfCAgICAgICAgMCB8ICAgMSB8ICAgIDIgfCAgICAzIHwKJiM0MzsgKiB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgIHwgICAgICB8ICAgICAgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCBLQkRfQkxfU1RBTkRBUkQgICAgICAgICAgfCAgICAgIG9mZiB8ICBvbiB8ICBOL0EgfCAgTi9BIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzOwomIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgIE4vQSB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IEtCRF9CTF9UUklTVEFURV9BVVRPICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8IGF1dG8gfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICoKJiM0MzsgKiBXZSBtYXAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgZm9yIEtCRF9CTF9UUklTVEFURV9BVVRPIGFzIGZvbGxvd3M6CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgfCAgICAgICAgMCB8ICAgMSB8ICAgIDIgfAomIzQzOyAqIHwgT3BlcmF0aW9uICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IFJlYWQgICAgICAgICAgICAgICAgICAgICB8IG9mZi9hdXRvIHwgbG93IHwgaGlnaCB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCBXcml0ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOwogICovCiBlbnVtIHsKIAlLQkRfQkxfU1RBTkRBUkQgICAgICA9IDEsCkBAIC0xNDUsNiAmIzQzOzE3MSw4IEBAIGVudW0gewogCUtCRF9CTF9UUklTVEFURV9BVVRPID0gMywKIH07CiAKJiM0MzsjZGVmaW5lIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUwkzCiYjNDM7CiAjZGVmaW5lIEtCRF9CTF9RVUVSWV9UWVBFCQkweDEKICNkZWZpbmUgS0JEX0JMX1RSSVNUQVRFX1RZUEUJCTB4NQogI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfQVVUT19UWVBFCTB4NwpAQCAtMjAwLDEwICYjNDM7MjI4LDE0IEBAIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgewogCQlib29sIHltY19lY190cmlnZ2VyICAgICAgIDogMTsKIAl9IGZlYXR1cmVzOwogCXN0cnVjdCB7Ci0JCWJvb2wgaW5pdGlhbGl6ZWQ7CiYjNDM7CQlpbnQgaW5pdGlhbGl6ZWQ7IC8qICAwOiBpbml0aWFsaXppb24gcGVuZGluZy9vbmdvaW5nL2ZhaWxlZAomIzQzOwkJCQkgICogJmd0OzA6IGluaXRpYWxpemlvbiBmaW5pc2hlZAomIzQzOwkJCQkgICogJmx0OzA6IHVucmVnaXN0ZXJhdGlvbiBvbmdvaW5nL2ZpbmlzaGVkCiYjNDM7CQkJCSAgKi8KIAkJaW50IHR5cGU7CiAJCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkOwotCQl1bnNpZ25lZCBpbnQgbGFzdF9icmlnaHRuZXNzOwomIzQzOwkJdW5zaWduZWQgaW50IGxhc3RfaHdfYnJpZ2h0bmVzczsKJiM0MzsJCXN0cnVjdCBtdXRleCBtdXRleDsgLyogcHJvdGVjdHMgYnJpZ2h0bmVzcyB0cmFja2luZyAqLwogCX0ga2JkX2JsOwogCXN0cnVjdCB7CiAJCWJvb2wgaW5pdGlhbGl6ZWQ7CkBAIC0xNTkyLDcgJiM0MzsxNjI0LDI0IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUoaW50IHR5cGUpCiAJcmV0dXJuICh0eXBlID09IEtCRF9CTF9UUklTVEFURSkgfHwgKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pOwogfQogCi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBod19icmlnaHRuZXNzKQomIzQzO3sKJiM0MzsJLyogT2ZmLCBsb3cgb3IgaGlnaCAqLwomIzQzOwlpZiAoaHdfYnJpZ2h0bmVzcyAmbHQ7PSBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKQomIzQzOwkJcmV0dXJuIGh3X2JyaWdodG5lc3M7CiYjNDM7CiYjNDM7CS8qIEF1dG8gKGNvbnRyb2xsZWQgYnkgRUMgYWNjb3JkaW5nIHRvIEFMUyksIHJlcG9ydCBhcyBvZmYgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2tiZF9ibC50eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPICZhbXA7JmFtcDsKJiM0MzsJICAgIGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFVua25vd24gdmFsdWUgKi8KJiM0MzsJZGV2X3dhcm4oJmFtcDtwcml2LSZndDtwbGF0Zm9ybV9kZXZpY2UtJmd0O2RldiwKJiM0MzsJCSAmIzM0O1Vua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlZCYjMzQ7LCBod19icmlnaHRuZXNzKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCBlcnI7CkBAIC0xNjA2LDIxICYjNDM7MTY1NSw3IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKLQkJLyogQ29udmVydCByZXR1cm5lZCB2YWx1ZSB0byBicmlnaHRuZXNzIGxldmVsICovCi0JCXZhbHVlID0gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpOwotCi0JCS8qIE9mZiwgbG93IG9yIGhpZ2ggKi8KLQkJaWYgKHZhbHVlICZsdDs9IHByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpCi0JCQlyZXR1cm4gdmFsdWU7Ci0KLQkJLyogQXV0bywgcmVwb3J0IGFzIG9mZiAqLwotCQlpZiAodmFsdWUgPT0gcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyAmIzQzOyAxKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogVW5rbm93biB2YWx1ZSAqLwotCQlkZXZfd2FybigmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LAotCQkJICYjMzQ7VW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVsdSYjMzQ7LCB2YWx1ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwomIzQzOwkJcmV0dXJuIEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTsKIAl9CiAKIAllcnIgPSBldmFsX2hhbHMocHJpdi0mZ3Q7YWRldi0mZ3Q7aGFuZGxlLCAmYW1wO3ZhbHVlKTsKQEAgLTE2MzAsNiAmIzQzOzE2NjUsMTYgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogCXJldHVybiAhIXRlc3RfYml0KEhBTFNfS0JEX0JMX1NUQVRFX0JJVCwgJmFtcDt2YWx1ZSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgaHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpOwomIzQzOwomIzQzOwlpZiAoaHdfYnJpZ2h0bmVzcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gaHdfYnJpZ2h0bmVzczsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiB7CiAJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7CkBAIC0xNjM3LDk5ICYjNDM7MTY4MiwyMDcgQEAgc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGEKIAlyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7CiB9CiAKLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpCiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGludCBod19icmlnaHRuZXNzKQogewotCWludCBlcnI7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlpbnQgdHlwZSA9IHByaXYtJmd0O2tiZF9ibC50eXBlOwomIzQzOwlpbnQgZXJyOwogCi0JaWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7Ci0JCWlmIChicmlnaHRuZXNzICZndDsgcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcykKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtwcml2LSZndDtrYmRfYmwubXV0ZXgpOwogCi0JCXZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHwKJiM0MzsJaWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7CiYjNDM7CQl2YWx1ZSA9IEZJRUxEX1BSRVAoS0JEX0JMX1NFVF9CUklHSFRORVNTLCBod19icmlnaHRuZXNzKSB8CiAJCQlGSUVMRF9QUkVQKEtCRF9CTF9DT01NQU5EX1RZUEUsIHR5cGUpIHwKIAkJCUtCRF9CTF9DT01NQU5EX1NFVDsKIAkJZXJyID0gZXhlY19rYmxjKHByaXYtJmd0O2FkZXYtJmd0O2hhbmRsZSwgdmFsdWUpOwogCX0gZWxzZSB7Ci0JCWVyciA9IGV4ZWNfc2Fscyhwcml2LSZndDthZGV2LSZndDtoYW5kbGUsIGJyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRik7CiYjNDM7CQl2YWx1ZSA9IGh3X2JyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRjsKJiM0MzsJCWVyciA9IGV4ZWNfc2Fscyhwcml2LSZndDthZGV2LSZndDtoYW5kbGUsIHZhbHVlKTsKIAl9Ci0KIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CiYjNDM7CXByaXYtJmd0O2tiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzOwogCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKQomIzQzO3sKJiM0MzsJaWYgKGJyaWdodG5lc3MgJmd0OyBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBicmlnaHRuZXNzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogCQkJCQkJICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7CiAJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7CiAKJiM0MzsJLyoKJiM0MzsJICogV2hlbiB1bnJlZ2lzdGVyaW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBMRUQgdW5yZWdpc3RyYXRpb24KJiM0MzsJICogd2hlbiBvdXIgcHJpdmF0ZSB0cmlnZ2VyIGlzIGFjdGl2ZS4gV2UmIzM5O3ZlIHNldCBMRURfUkVUQUlOX0FUX1NIVVRET1dOCiYjNDM7CSAqIHRvIHJldGFpbiBsZWRfY2RldiBicmlnaHRuZXNzIGxldmVsLiBUbyBkbyB0aGUgc2FtZSBmb3IgYXV0byBtb2RlLAomIzQzOwkgKiBnYXRlIGNoYW5nZXMgYW5kIHJldHVybiBlYXJseS4KJiM0MzsJICoKJiM0MzsJICogSXQmIzM5O3MgbmVlZGxlc3MgdG8gZ2F0ZSBjaGFuZ2VzIHdoZW4gaW5pdGlhbGl6aW5nLCBhcyB0aGVyZSBtYXkgYmUgYQomIzQzOwkgKiB0aW1lIG1hcmdpbiBiZXR3ZWVuIHN5c2ZzIGF0dHJpYnV0ZSBjcmVhdGlvbiBhbmQgc3RhdGUgY2hhbmdlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCAmbHQ7IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtwcml2LSZndDtrYmRfYmwubXV0ZXgpOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7CiYjNDM7CiYjNDM7CXJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZGVhcGFkLWF1dG8mIzM0OywKJiM0MzsJLnRyaWdnZXJfdHlwZSA9ICZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGUsCiYjNDM7CS5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZCA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LAomIzQzOwkJCQkJICAgICB1bnNpZ25lZCBpbnQgaHdfYnJpZ2h0bmVzcykKJiM0Mzt7CiYjNDM7CWJvb2wgaHdfY29udHJvbCwgbGFzdF9od19jb250cm9sOwomIzQzOwomIzQzOwlpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkIHx8IHByaXYtJmd0O2tiZF9ibC50eXBlICE9IEtCRF9CTF9UUklTVEFURV9BVVRPKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlod19jb250cm9sID0gaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7CiYjNDM7CWxhc3RfaHdfY29udHJvbCA9IHByaXYtJmd0O2tiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTOwomIzQzOwomIzQzOwlpZiAoaHdfY29udHJvbCAhPSBsYXN0X2h3X2NvbnRyb2wpCiYjNDM7CQlsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKCZhbXA7cHJpdi0mZ3Q7a2JkX2JsLmxlZCwgaHdfY29udHJvbCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiB7Ci0JaW50IGJyaWdodG5lc3M7CiYjNDM7CWludCBod19icmlnaHRuZXNzLCBicmlnaHRuZXNzOwogCi0JaWYgKCFwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpCiYjNDM7CWlmICh1bmxpa2VseShwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgJmx0Oz0gMCkpCiAJCXJldHVybjsKIAotCWJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTsKLQlpZiAoYnJpZ2h0bmVzcyAmbHQ7IDApCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ByaXYtJmd0O2tiZF9ibC5tdXRleCk7CiYjNDM7CiYjNDM7CWh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0OyAwKQogCQlyZXR1cm47CiAKLQlpZiAoYnJpZ2h0bmVzcyA9PSBwcml2LSZndDtrYmRfYmwubGFzdF9icmlnaHRuZXNzKQomIzQzOwlicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTsKJiM0MzsJaWYgKGJyaWdodG5lc3MgJmx0OyAwKQomIzQzOwkJcmV0dXJuOyAvKiBSZWplY3QgaW5zYW5lIHZhbHVlcyBlYXJseS4gKi8KJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2tiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gaHdfYnJpZ2h0bmVzcykKIAkJcmV0dXJuOwogCi0JcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CiYjNDM7CWlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHByaXYsIGh3X2JyaWdodG5lc3MpOwomIzQzOwomIzQzOwlwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID0gaHdfYnJpZ2h0bmVzczsKIAogCWxlZF9jbGFzc2Rldl9ub3RpZnlfYnJpZ2h0bmVzc19od19jaGFuZ2VkKCZhbXA7cHJpdi0mZ3Q7a2JkX2JsLmxlZCwgYnJpZ2h0bmVzcyk7CiB9CiAKIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaW5pdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogewotCWludCBicmlnaHRuZXNzLCBlcnI7CiYjNDM7CWludCBod19icmlnaHRuZXNzLCBlcnI7CiAKIAlpZiAoIXByaXYtJmd0O2ZlYXR1cmVzLmtiZF9ibCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoV0FSTl9PTihwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpKQomIzQzOwlpZiAoV0FSTl9PTihwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgJmd0OyAwKSkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKLQlpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUocHJpdi0mZ3Q7a2JkX2JsLnR5cGUpKQotCQlwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjsKLQllbHNlCi0JCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxOwomIzQzOwlwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgPSAwOwogCi0JYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpOwotCWlmIChicmlnaHRuZXNzICZsdDsgMCkKLQkJcmV0dXJuIGJyaWdodG5lc3M7CiYjNDM7CWVyciA9IGRldm1fbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LCAmYW1wO3ByaXYtJmd0O2tiZF9ibC5tdXRleCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7CiYjNDM7CWlmIChod19icmlnaHRuZXNzICZsdDsgMCkKJiM0MzsJCXJldHVybiBod19icmlnaHRuZXNzOwomIzQzOwomIzQzOwlwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID0gaHdfYnJpZ2h0bmVzczsKIAotCXByaXYtJmd0O2tiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzOwogCXByaXYtJmd0O2tiZF9ibC5sZWQubmFtZSAgICAgICAgICAgICAgICAgICAgPSAmIzM0O3BsYXRmb3JtOjomIzM0OyBMRURfRlVOQ1RJT05fS0JEX0JBQ0tMSUdIVDsKIAlwcml2LSZndDtrYmRfYmwubGVkLmJyaWdodG5lc3NfZ2V0ICAgICAgICAgID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQ7CiAJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0OwogCXByaXYtJmd0O2tiZF9ibC5sZWQuZmxhZ3MgICAgICAgICAgICAgICAgICAgPSBMRURfQlJJR0hUX0hXX0NIQU5HRUQgfCBMRURfUkVUQUlOX0FUX1NIVVRET1dOOwogCiYjNDM7CXN3aXRjaCAocHJpdi0mZ3Q7a2JkX2JsLnR5cGUpIHsKJiM0MzsJY2FzZSBLQkRfQkxfVFJJU1RBVEVfQVVUTzoKJiM0MzsJCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyOwomIzQzOwomIzQzOwkJaWYgKCFpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCkgewomIzQzOwkJCWRldl93YXJuKCZhbXA7cHJpdi0mZ3Q7cGxhdGZvcm1fZGV2aWNlLSZndDtkZXYsCiYjNDM7CQkJCSAmIzM0O0Nhbm5vdCBwcm92aWRlIExFRCB0cmlnZ2VyICVzIGZvciBrZXlib2FyZCBiYWNrbGlnaHRcbiYjMzQ7LAomIzQzOwkJCQkgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5mbGFncyB8PSBMRURfVFJJR19IV19DSEFOR0VEOwomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC50cmlnZ2VyX3R5cGUgPSAmYW1wO2lkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlOwomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5od19jb250cm9sX3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTsKJiM0MzsKJiM0MzsJCS8qIEhhcmR3YXJlIHJlbWVtYmVycyB0aGUgbGFzdCBicmlnaHRuZXNzIGxldmVsLCBpbmNsdWRpbmcgYXV0byBtb2RlLiAqLwomIzQzOwkJaWYgKGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKQomIzQzOwkJCXByaXYtJmd0O2tiZF9ibC5sZWQuZGVmYXVsdF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7CiYjNDM7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBLQkRfQkxfVFJJU1RBVEU6CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEtCRF9CTF9TVEFOREFSRDoKJiM0MzsJCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkvKiBUaGlzIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGJ5IGlkZWFwYWRfY2hlY2tfZmVhdHVyZXMoKS4gKi8KJiM0MzsJCXVucmVhY2hhYmxlKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVqZWN0IGluc2FuZSB2YWx1ZXMuICovCiYjNDM7CWVyciA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKIAllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmFtcDtwcml2LSZndDtwbGF0Zm9ybV9kZXZpY2UtJmd0O2RldiwgJmFtcDtwcml2LSZndDtrYmRfYmwubGVkKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkID0gdHJ1ZTsKJiM0MzsJcHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkID0gMTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9leGl0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiB7Ci0JaWYgKCFwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpCiYjNDM7CWlmIChwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgJmx0Oz0gMCkKIAkJcmV0dXJuOwogCi0JcHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkID0gZmFsc2U7CiYjNDM7CXByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCA9IC0xOwogCiAJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFtcDtwcml2LSZndDtrYmRfYmwubGVkKTsKIH0KQEAgLTI1NDgsMTcgJiM0MzsyNzAxLDMwIEBAIHN0YXRpYyBpbnQgX19pbml0IGlkZWFwYWRfbGFwdG9wX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCiYjNDM7CWVyciA9IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKCZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJcHJfd2FybigmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBMRUQgdHJpZ2dlciAlczogJWRcbiYjMzQ7LAomIzQzOwkJCWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lLCBlcnIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJZXJyID0gaWRlYXBhZF93bWlfZHJpdmVyX3JlZ2lzdGVyKCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZXJyX2xlZHRyaWc7CiAKIAllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFtcDtpZGVhcGFkX2FjcGlfZHJpdmVyKTsKLQlpZiAoZXJyKSB7Ci0JCWlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7Ci0JCXJldHVybiBlcnI7Ci0JfQomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfd21pOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3dtaToKJiM0MzsJaWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTsKJiM0MztlcnJfbGVkdHJpZzoKJiM0MzsJaWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKQomIzQzOwkJbGVkX3RyaWdnZXJfdW5yZWdpc3RlcigmYW1wO2lkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBtb2R1bGVfaW5pdChpZGVhcGFkX2xhcHRvcF9pbml0KQogCkBAIC0yNTY2LDYgJiM0MzsyNzMyLDkgQEAgc3RhdGljIHZvaWQgX19leGl0IGlkZWFwYWRfbGFwdG9wX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2lkZWFwYWRfYWNwaV9kcml2ZXIpOwogCWlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7CiYjNDM7CiYjNDM7CWlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCkKJiM0MzsJCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoJmFtcDtpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpOwogfQogbW9kdWxlX2V4aXQoaWRlYXBhZF9sYXB0b3BfZXhpdCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaAppbmRleCBhNTE1ZjA3NWMyOWExLi45M2IzZmQ3ZTU2MzY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xlZHMuaApAQCAtMTA5LDYgJiM0MzsxMDksNyBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHsKICNkZWZpbmUgTEVEX0lOSVRfREVGQVVMVF9UUklHR0VSIEJJVCgyMykKICNkZWZpbmUgTEVEX1JFSkVDVF9OQU1FX0NPTkZMSUNUIEJJVCgyNCkKICNkZWZpbmUgTEVEX01VTFRJX0NPTE9SCQlCSVQoMjUpCiYjNDM7I2RlZmluZSBMRURfVFJJR19IV19DSEFOR0VECUJJVCgyNikKIAogCS8qIHNldF9icmlnaHRuZXNzX3dvcmsgLyBibGlua190aW1lciBmbGFncywgYXRvbWljLCBwcml2YXRlLiAqLwogCXVuc2lnbmVkIGxvbmcJCXdvcmtfZmxhZ3M7CkBAIC0yMzksNiAmIzQzOzI0MCwxMSBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHsKIAlzdHJ1Y3Qga2VybmZzX25vZGUJKmJyaWdodG5lc3NfaHdfY2hhbmdlZF9rbjsKICNlbmRpZgogCiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQKJiM0MzsJYm9vbAkJCXRyaWdnZXJzX2h3X2NoYW5nZWQ7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAl0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcms7CiYjNDM7I2VuZGlmCiYjNDM7CiAJLyogRW5zdXJlcyBjb25zaXN0ZW50IGFjY2VzcyB0byB0aGUgTEVEIGNsYXNzIGRldmljZSAqLwogCXN0cnVjdCBtdXRleAkJbGVkX2FjY2VzczsKIH07CkBAIC00ODUsNiAmIzQzOzQ5MSw3IEBAIHN0cnVjdCBsZWRfdHJpZ2dlciB7CiAJY29uc3QgY2hhcgkgKm5hbWU7CiAJaW50CQkoKmFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiAJdm9pZAkJKCpkZWFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiYjNDM7CWJvb2wJCSgqb2ZmbG9hZGVkKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiAKIAkvKiBCcmlnaHRuZXNzIHNldCBieSBsZWRfdHJpZ2dlcl9ldmVudCAqLwogCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzczsKQEAgLTUzMyw2ICYjNDM7NTQwLDkgQEAgdm9pZCBsZWRfdHJpZ2dlcl9ibGlua19vbmVzaG90KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlciwKIHZvaWQgbGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwogaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTsKIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0MzsKJiM0Mztib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJCXZvaWQgKnRyaWdnZXJfZGF0YSkKQEAgLTU4NCw2ICYjNDM7NTk0LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGxlZF9zZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fQogc3RhdGljIGlubGluZSB2b2lkICpsZWRfZ2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIHsKQEAgLTU5OCw2ICYjNDM7NjE1LDEzIEBAIGxlZF90cmlnZ2VyX2dldF9icmlnaHRuZXNzKGNvbnN0IHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcikKIAogI2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTICovCiAKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKJiM0MzsJCQkJCQkJIGJvb2wgYWN0aXZhdGUpIHt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKiBUcmlnZ2VyIHNwZWNpZmljIGVudW0gKi8KIGVudW0gbGVkX3RyaWdnZXJfbmV0ZGV2X21vZGVzIHsKIAlUUklHR0VSX05FVERFVl9MSU5LID0gMCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5OTgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMRUQgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgYml0IG9mIHRoZSBMRUQgc3Vic3lzdGVtLCBzbyB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2YgZmlsZXM6IGRvY3VtZW50YXRpb24sIHRoZSBjb3JlIExFRCBjbGFzcyBkcml2ZXIsIHRyaWdnZXIgaW1wbGVtZW50YXRpb25zLCBhbmQgZXZlbiBzb21lIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlcnMgKENyb3MgRUMsIFR1cnJpcyBPbW5pYSwgYW5kIExlbm92byBsYXB0b3BzKS4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgbGlrZWx5IGFkZGluZyBzaWduaWZpY2FudCBuZXcgZnVuY3Rpb25hbGl0eSBvciBtb2RpZnlpbmcgZXhpc3RpbmcgYmVoYXZpb3IgaW4gYSBmYWlybHkgcGVydmFzaXZlIHdheS4KCkZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgZmlsZXMgdGhhdCBhcmUgdG91Y2hlZC4gSXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGFkZGluZyBhIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBzeXNmcyBhdHRyaWJ1dGUuIFRoYXQgYWxvbmUsIGFmZmVjdGluZyB0aGUgc3lzZnMgaW50ZXJmYWNlLCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIEFueXRpbWUgeW91IGFsdGVyIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHlvdSYjMzk7cmUgb3BlbmluZyB0aGUgZG9vciB0byBwb3RlbnRpYWwgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMgYW5kLCBieSBleHRlbnNpb24sIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIENoYW5nZXMgdG8gYGJyaWdodG5lc3Nfc2hvd2AgYW5kIGBicmlnaHRuZXNzX3N0b3JlYCBpbiBgbGVkLWNsYXNzLmNgIGFyZSBhbHNvIHByZXR0eSBzaWduaWZpY2FudCwgYWZmZWN0aW5nIGhvdyBicmlnaHRuZXNzIGNvbnRyb2wgd29ya3MgYWNyb3NzIGFsbCBMRURzLgoKQmV5b25kIHRoYXQsIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLCBhbmQgb3RoZXIgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIHRoZSBgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgY29uZmlnLCBoaW50cyBhdCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucy4gVGhlIG1lbnRpb24gb2YgYGh3X3RyaWdnZXJlZGAgaW1wbGllcyBzb21lIGxvZ2ljIGNoYW5nZSB3aXRoaW4gdGhlIGV4aXN0aW5nIHRyaWdnZXIgbWFuYWdlbWVudC4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgZmVhdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgdHJpZ2dlciBtZWNoYW5pc21zIGFuZCBob3cgdGhlIG5ldyBzeXNmcyBhdHRyaWJ1dGUgY29udHJvbHMgdGhpcyBpbnRlcmFjdGlvbi4KClRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGltcGFjdHMgZHJpdmVycyBsaWtlIHRoZSBuZXRkZXYgdHJpZ2dlciwgYW5kIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlcnMsIHN1Z2dlc3RzIGEgd2lkZXIgcmVhY2guIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgYSBuZXcgdHJpZ2dlciB0eXBlOyBpdCYjMzk7cyBhYm91dCBwb3RlbnRpYWxseSBpbnRlZ3JhdGluZyBoYXJkd2FyZSBjb250cm9sIGludG8gZXhpc3RpbmcgTEVEIHN1YnN5c3RlbXMuCgpOb3csIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByZWFjaCBvZiB0aGVzZSBjaGFuZ2VzLiBTaW5jZSB0aGlzIGlzIHRoZSBMRUQgc3Vic3lzdGVtLCB3aGljaCBpcyBmdW5kYW1lbnRhbCwgSSYjMzk7bSBhc3N1bWluZyB0aGF0IGl0IGlzIHJlYXNvbmFibHkgcmVhY2hhYmxlIGluIGEgdmFyaWV0eSBvZiBlbnZpcm9ubWVudHMsIGluY2x1ZGluZyBRRU1VIGFuZCB2aXJ0dWFsaXplZCBzY2VuYXJpb3MuIEFueSBMRUQgZGV2aWNlLCBlbXVsYXRlZCBvciByZWFsLCBjYW4gaW50ZXJhY3Qgd2l0aCB0aGlzLiBUaGUgZmFjdCB0aGF0IGFueSBlbXVsYXRlZCBvciByZWFsIHBsYXRmb3JtIGRldmljZXMgY2FuIGV4cG9zZSB0aGVzZSBhdHRyaWJ1dGVzIGluIHN5c2ZzIGFuZCB0cmlnZ2VyIHN5c2ZzIGludGVyYWN0aW9ucyBhZGRzIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMuCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHVzYWdlIG9mIHRoZXNlIHN5bWJvbHMgd2l0aCB0b29scyBsaWtlIEdyZXAuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0IGNvZGUgcGF0aHMgd2lsbCBiZSBoaXQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgd29ydGggZnV6emluZywgYW5kLCBpZiBzbywgd2hhdCB0aGUgYmVzdCBhcHByb2FjaCB3b3VsZCBiZS4gVGhpcyBsb29rcyBsaWtlIGl0IGhhcyBmdXp6aW5nIHBvdGVudGlhbCwgc2luY2Ugd2UgaGF2ZSB1c2VyIHNwYWNlIGludGVyYWN0aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGZyb20gaHcgY29udHJvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTEVEU19UUklHR0VSU19IV19DSEFOR0VEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTA9aWYgTEVEU19UUklHR0VSU1xuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTI6Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7TEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgZm9yIExFRCBUcmlnZ2VycyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTEVEIHRyaWdnZXJzIGFyZSBjb25maWd1cmVkLCBzbyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGBkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGxpbmVzIDEgdGhyb3VnaCAzMCwgYXMgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtYWluIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIHRyaWdnZXIgY29uZmlndXJhdGlvbiB0aGVyZSDigJMgbGlrZWx5IHRoZSBtYWluIG1lbnUgZW50cnkgYW5kIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGtlcm5lbCBmZWF0dXJlcy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBsaW5lcyB3aWxsIGRlZmluZSB0aGUgZGVmYXVsdCBiZWhhdmlvciwgd2hldGhlciBjZXJ0YWluIHRyaWdnZXJzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCB3aGljaCBwbGF0Zm9ybSBjb25maWd1cmF0aW9ucyB0aGV5IHJlbHkgdXBvbi4gR2V0dGluZyB0aGUgb3ZlcnZpZXcgb2YgdGhpcyBwYXJ0IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgYW5kIGhvdyB0aGlzIHNlY3Rpb24gdGllcyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBMRURTX1RSSUdHRVJTXG4gICAzOlx0XHRib29sIFwmIzM0O0xFRCBUcmlnZ2VyIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTEVEU19DTEFTU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRyaWdnZXIgc3VwcG9ydCBmb3IgdGhlIGxlZHMgY2xhc3MuXG4gICA3Olx0XHQgIFRoZXNlIHRyaWdnZXJzIGFsbG93IGtlcm5lbCBldmVudHMgdG8gZHJpdmUgdGhlIExFRHMgYW5kIGNhblxuICAgODpcdFx0ICBiZSBjb25maWd1cmVkIHZpYSBzeXNmcy4gSWYgdW5zdXJlLCBzYXkgWS5cbiAgIDk6XHRcbiAgMTA6XHRpZiBMRURTX1RSSUdHRVJTXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtMRUQgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDE0Olx0XHRkZWZhdWx0IExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgaW5pdGlhdGVkIGhhcmR3YXJlIGNvbnRyb2xcbiAgMTc6XHRcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cbiAgMTg6XHRcdCAgXCYjMzQ7bm9uZVwmIzM0OyAoaS5lLiwgbm8gdHJpZ2dlcikgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgZm9yIGRldGFpbHMuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIExFRFNfVFJJR0dFUl9USU1FUlxuICAyMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TEVEIFRpbWVyIFRyaWdnZXJcJiMzNDtcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBhbGxvd3MgTEVEcyB0byBiZSBjb250cm9sbGVkIGJ5IGEgcHJvZ3JhbW1hYmxlIHRpbWVyXG4gIDI2Olx0XHQgIHZpYSBzeXNmcy4gU29tZSBMRUQgaGFyZHdhcmUgY2FuIGJlIHByb2dyYW1tZWQgdG8gc3RhcnRcbiAgMjc6XHRcdCAgYmxpbmtpbmcgdGhlIExFRCB3aXRob3V0IGFueSBmdXJ0aGVyIHNvZnR3YXJlIGludGVyYWN0aW9uLlxuICAyODpcdFx0ICBGb3IgbW9yZSBkZXRhaWxzIHJlYWQgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0LlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTIzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIExFRCBUcmlnZ2VyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgTEVEIHRyaWdnZXIgb3B0aW9ucyBhcmUgYmVpbmcgYnVpbHQgYW5kIGludGVncmF0ZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGRyaXZlcnMvbGVkcy9LY29uZmlnYC4gVGhhdCYjMzk7bGwgYmUgdGhlIHBsYWNlIHRvIGZpbmQgdGhlIGFjdHVhbCBkZWZpbml0aW9ucyBvZiBgTEVEU19UUklHR0VSU2AgYW5kIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgLCBvciBhdCBsZWFzdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGVtLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhlIEtjb25maWcgZmlsZSB3aWxsIHNwZWNpZnkgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGEgZGVzY3JpcHRpb24uIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVyZSB0aGUgY29kZSBhbmQgZHJpdmVycyB1c2luZyB0aGVzZSBmbGFncyByZXNpZGUgaW4gdGhlIGNvZGViYXNlLgoKVGhlbiwgSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCBgZHJpdmVycy9sZWRzL01ha2VmaWxlYC4gVGhlIE1ha2VmaWxlIHNob3VsZCByZXZlYWwgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlc2Ugc3ltYm9scyBpbmZsdWVuY2UgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuIFRoaXMgd2lsbCBwcm9iYWJseSBpbmNsdWRlIGNvbmRpdGlvbmFscyBiYXNlZCBvbiB0aG9zZSBLY29uZmlnIHN5bWJvbHMsIGluZGljYXRpbmcgd2hpY2ggc291cmNlIGZpbGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBvcHRpb25zIGFyZSBlbmFibGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyBgTEVEU19UUklHR0VSU2AgYW5kIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIGFmZmVjdCB0aGUgZHJpdmVyIGJ1aWxkLiBUaGlzIGlzIGhvdyBJJiMzOTtsbCBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiB0aGVpciBpbXBhY3Qgb24gdGhlIGZpbmFsIGtlcm5lbCBpbWFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMRURTX1RSSUdHRVJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcy9LY29uZmlnPTIwMj1jb25maWcgTEVEU19DUk9TX0VDXG4tLVxuZHJpdmVycy9sZWRzL0tjb25maWctMjA1LVx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTX01VTFRJQ09MT1JcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjIwNjpcdHNlbGVjdCBMRURTX1RSSUdHRVJTXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMDctXHRkZWZhdWx0IE1GRF9DUk9TX0VDX0RFVlxuLS1cbmRyaXZlcnMvbGVkcy9LY29uZmlnPTIzMD1jb25maWcgTEVEU19UVVJSSVNfT01OSUFcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMzctXHRkZXBlbmRzIG9uIFRVUlJJU19PTU5JQV9NQ1VfR1BJT1xuZHJpdmVycy9sZWRzL0tjb25maWc6MjM4Olx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTIzOS1cdGhlbHBcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZz0zNDI9Y29uZmlnIExFRFNfQ09CQUxUX1JBUVxuLS1cbmRyaXZlcnMvbGVkcy9LY29uZmlnLTM0NC1cdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IFx1MDAyNlx1MDAyNiAoTUlQU19DT0JBTFQgfHwgQ09NUElMRV9URVNUKVxuZHJpdmVycy9sZWRzL0tjb25maWc6MzQ1Olx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTM0Ni1cdGhlbHBcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZz0zNTg9Y29uZmlnIExFRFNfU1VORklSRVxuLS1cbmRyaXZlcnMvbGVkcy9LY29uZmlnLTM2MS1cdGRlcGVuZHMgb24gU1BBUkM2NFxuZHJpdmVycy9sZWRzL0tjb25maWc6MzYyOlx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTM2My1cdGhlbHBcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZz05OTM9Y29uZmlnIExFRFNfU1QxMjAyXG4tLVxuZHJpdmVycy9sZWRzL0tjb25maWctOTk3LVx0ZGVwZW5kcyBvbiBPRlxuZHJpdmVycy9sZWRzL0tjb25maWc6OTk4Olx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTk5OS1cdHNlbGVjdCBMRURTX1RSSUdHRVJfUEFUVEVSTlxuLS1cbmRyaXZlcnMvbGVkcy9NYWtlZmlsZT03PW9iai0kKENPTkZJR19MRURTX0NMQVNTX01VTFRJQ09MT1IpXHQmIzQzOz0gbGVkLWNsYXNzLW11bHRpY29sb3Iub1xuZHJpdmVycy9sZWRzL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX0xFRFNfVFJJR0dFUlMpXHRcdCYjNDM7PSBsZWQtdHJpZ2dlcnMub1xuZHJpdmVycy9sZWRzL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX0xFRFNfS1VOSVRfVEVTVClcdFx0JiM0Mzs9IGxlZC10ZXN0Lm9cbi0tXG5kcml2ZXJzL2xlZHMvTWFrZWZpbGU9MTIwPW9iai0kKENPTkZJR19MRURTX0NMQVNTX01VTFRJQ09MT1IpXHQmIzQzOz0gcmdiL1xuLS1cbmRyaXZlcnMvbGVkcy9NYWtlZmlsZS0xMjItIyBMRUQgVHJpZ2dlcnNcbmRyaXZlcnMvbGVkcy9NYWtlZmlsZToxMjM6b2JqLSQoQ09ORklHX0xFRFNfVFJJR0dFUlMpXHRcdCYjNDM7PSB0cmlnZ2VyL1xuZHJpdmVycy9sZWRzL01ha2VmaWxlLTEyNC1cbi0tXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9OTE9c3RhdGljIERFVklDRV9BVFRSX1JPKG1heF9icmlnaHRuZXNzKTtcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy05Mi1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo5MzojaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy05NC1zdGF0aWMgY29uc3QgQklOX0FUVFIodHJpZ2dlciwgMDY0NCwgbGVkX3RyaWdnZXJfcmVhZCwgbGVkX3RyaWdnZXJfd3JpdGUsIDApO1xuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmxlZF9ncm91cHNbXSA9IHtcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy0xMzctXHRcdTAwMjZsZWRfZ3JvdXAsXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM6MTM4OiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTEzOS1cdFx1MDAyNmxlZF90cmlnZ2VyX2dyb3VwLFxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYz01MTc9aW50IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoc3RydWN0IGRldmljZSAqcGFyZW50LFxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy01ODktXHRsZWRfY2Rldi1cdTAwM2V3b3JrX2ZsYWdzID0gMDtcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo1OTA6I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNTkxLVx0aW5pdF9yd3NlbShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy02MDktXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM6NjEwOiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTYxMS1cdGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KGxlZF9jZGV2KTtcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9NjMyPXZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4tLVxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTYzOS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo2NDA6I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNjQxLVx0ZG93bl93cml0ZShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz00OTE9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNDkyLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jOjQ5MzojaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQ5NC1cbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM9NTcxPUVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZCk7XG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNTcyLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jOjU3MzojZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTU3NC1cbi0tXG5kcml2ZXJzL2xlZHMvbGVkcy5oPTM0PWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGxlZHNfbGlzdDtcbmRyaXZlcnMvbGVkcy9sZWRzLmgtMzUtXG5kcml2ZXJzL2xlZHMvbGVkcy5oOjM2OiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG5kcml2ZXJzL2xlZHMvbGVkcy5oLTM3LXZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbmRyaXZlcnMvbGVkcy9sZWRzLmg9Mzg9dm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuZHJpdmVycy9sZWRzL2xlZHMuaDozOTojZWxzZSAvKiAhQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuZHJpdmVycy9sZWRzL2xlZHMuaC00MC1zdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH1cbmRyaXZlcnMvbGVkcy9sZWRzLmg9NDE9c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikgeyB9XG5kcml2ZXJzL2xlZHMvbGVkcy5oOjQyOiNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXG5kcml2ZXJzL2xlZHMvbGVkcy5oLTQzLVxuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MjptZW51Y29uZmlnIExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TEVEIFRyaWdnZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctOS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTA6aWYgTEVEU19UUklHR0VSU1xuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTI6Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7TEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTA5PWNvbW1lbnQgXCYjMzQ7aXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KVwmIzM0O1xuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZzoxMTA6XHRkZXBlbmRzIG9uIExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTExLVxuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTU4PWNvbmZpZyBMRURTX1RSSUdHRVJfSU5QVVRfRVZFTlRTXG4tLVxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xNzMtXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjE3NDplbmRpZiAjIExFRFNfVFJJR0dFUlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ0OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTEVEIERyaXZlciBJbnRlcmFjdGlvbnMgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBMRUQgZHJpdmVyIHNpdHVhdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNgIGFuZCBgZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4cG9zZWQgZnVuY3Rpb25zIGFuZCBpbnRlcmZhY2VzIGludm9sdmVkLCByaWdodD8gR290dGEgc2VlIHdoYXQgdGhlIGxhbmRzY2FwZSBsb29rcyBsaWtlLiBUaGVuLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGJlZW4gYWRkZWQgaW4gdGhpcyBwYXRjaC4KCkkmIzM5O3ZlIGdvdCBhIGxpc3QgZnJvbSBgbGVkLXRyaWdnZXJzLmNgOiBgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGBsZWRfdHJpZ2dlcl9zZXRgLCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLCBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCwgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLCBgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkYCwgYW5kIGBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWRgLiBUaGVzZSBhcmUgYWxsIGBFWFBPUlRfU1lNQk9MX0dQTGAsIHNvIGRlZmluaXRlbHkgd29ydGggbm90aW5nLiBGcm9tIGBsZWQtY2xhc3MuY2AsIEkgc2VlIGBicmlnaHRuZXNzX3Nob3dgLCBgYnJpZ2h0bmVzc19zdG9yZWAgYW5kIGEgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZS4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgaWRlYXBhZC1sYXB0b3AuY2AuIEl0JiMzOTtzIGdvdCBzb21lIGZ1bmN0aW9ucyBsaWtlIGBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldGAsIGBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX3NldGAsIGBpZGVhcGFkX2tiZF9ibF9ub3RpZnlgLCBgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlYCBhbmQgYGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWRgLiBJJiMzOTttIGN1cmlvdXMgd2hhdCBraW5kIG9mIGludGVyYWN0aW9ucyB0aGlzIGhhcyB3aXRoIHRoZSBMRUQgY2xhc3MuIEFsc28sIGxldCYjMzk7cyBub3QgZm9yZ2V0IHRvIGNoZWNrIGBuZXRkZXZfdHJpZ19vZmZsb2FkZWRgIGluIGBsZWR0cmlnLW5ldGRldi5jYCAuCgpUaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiBlZmZlY3RpdmVseSBmdXp6LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHN5emthbGxlciBpcyBhIGdvb2QgY2FuZGlkYXRlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm06IGNhbiBpdCBhY2Nlc3MgYW5kIG1hbmlwdWxhdGUgdGhlIHJlbGV2YW50IExFRCBjbGFzcyBhbmQgdHJpZ2dlciBpbnRlcmZhY2VzPyBJIG5lZWQgdG8ga25vdyBpZiBpdCBjYW4gcmVhZCBhbmQgd3JpdGUgdG8gdGhlIGAvc3lzL2NsYXNzL2xlZHMvLi4uYCBzeXNmcyBmaWxlcy4KCklmIHRoYXQgY2hlY2tzIG91dCwgSSBzaG91bGQgc2VlIGlmIHRoZXJlIGFyZSBzdGFuZGFyZCBvciB2aXJ0dWFsIExFRCBkZXZpY2VzL3RyaWdnZXJzLCBsaWtlIGBuZXRkZXZgIChgTkVUREVWX0xFRFNgIC8gYExFRFNfVFJJR0dFUl9ORVRERVZgKS4gRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gY2hlY2sgYXJvdW5kIGBMRURTX0NMQVNTYCwgYExFRFNfVFJJR0dFUlNgLCBgTEVEU19UUklHR0VSU19IV19DSEFOR0VEYCwgYExFRFNfVFJJR0dFUl9ORVRERVZgLCBhbmQgd2hhdGV2ZXIgZWxzZSBpcyByZWxldmFudC4gVGhpcyBzaG91bGQgcGFpbnQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTEVEU19DTEFTUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvS2NvbmZpZz0yMT1pZiBORVdfTEVEU1xuZHJpdmVycy9sZWRzL0tjb25maWctMjItXG5kcml2ZXJzL2xlZHMvS2NvbmZpZzoyMzpjb25maWcgTEVEU19DTEFTU1xuZHJpdmVycy9sZWRzL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtMRUQgQ2xhc3MgU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbGVkcy9LY29uZmlnLTI4LVxuZHJpdmVycy9sZWRzL0tjb25maWc6Mjk6Y29uZmlnIExFRFNfQ0xBU1NfRkxBU0hcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7TEVEIEZsYXNoIENsYXNzIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0zOC1cbmRyaXZlcnMvbGVkcy9LY29uZmlnOjM5OmNvbmZpZyBMRURTX0NMQVNTX01VTFRJQ09MT1JcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTQwLVx0dHJpc3RhdGUgXCYjMzQ7TEVEIE11bHRpY29sb3IgQ2xhc3MgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTczMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6CgoqKktjb25maWcgRGl2ZTogTEVEU19UUklHR0VSX05FVERFVioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSB6ZXJvIGluIG9uIGBMRURTX1RSSUdHRVJfTkVUREVWYC4gSSYjMzk7bSBndWVzc2luZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgSSBuZWVkIHRvIGtub3cgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgYW5kIHdoYXQsIGlmIGFueSwgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHBvc3NpYmxlIGludGVyYWN0aW9ucyB0aGlzIHRyaWdnZXIgbWlnaHQgaGF2ZSB3aXRoIHRoZSBuZXR3b3JrIGRldmljZSBzdWJzeXN0ZW0uIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBpbnRlcmFjdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMgZWRnZSBjYXNlcyB0aGUgY3VycmVudCBjb2RlIGhhbmRsZXMsIG9yIGRvZXNuJiMzOTt0IGhhbmRsZSwgdGhhdCBuZWVkIHRvIGJlIHJldmlzaXRlZD8gVGltZSB0byBkaWcgaW50byBLY29uZmlnIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMRURTX1RSSUdHRVJfTkVUREVWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTI2PWNvbmZpZyBMRURTX1RSSUdHRVJfUEFOSUNcbi0tXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzNC1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTM1OmNvbmZpZyBMRURTX1RSSUdHRVJfTkVUREVWXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzNi1cdHRyaXN0YXRlIFwmIzM0O0xFRCBOZXRkZXYgVHJpZ2dlclwmIzM0O1xuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19MRURTX1RSSUdHRVJfUEFOSUMpXHQmIzQzOz0gbGVkdHJpZy1wYW5pYy5vXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfTEVEU19UUklHR0VSX05FVERFVilcdCYjNDM7PSBsZWR0cmlnLW5ldGRldi5vXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfTEVEU19UUklHR0VSX1BBVFRFUk4pXHQmIzQzOz0gbGVkdHJpZy1wYXR0ZXJuLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBMRUQgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgTkVXX0xFRFNgIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBgZHJpdmVycy9sZWRzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBzZXR0aW5ncyBpdCByZWxpZXMgb24uIEkgYWx3YXlzIHN0YXJ0IHdpdGggZGVwZW5kZW5jaWVzOyBpdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBvZiB1bmRlcnN0YW5kaW5nIGhvdyBhbnl0aGluZyB3aWxsIGZpdCBpbnRvIHRoZSB3aG9sZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGVuc3VyZSBhIHNtb290aCBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBMRURTX0dQSU9fUkVHSVNURVJcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBvcHRpb24gcHJvdmlkZXMgdGhlIGZ1bmN0aW9uIGdwaW9fbGVkX3JlZ2lzdGVyX2RldmljZS5cbiAgIDY6XHRcdCAgQXMgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IGFyY2ggY29kZSBpdCBtdXN0IG5vdCBiZSBjb21waWxlZCBhcyBhXG4gICA3Olx0XHQgIG1vZHVsZS5cbiAgIDg6XHRcbiAgIDk6XHQjIFRoaXMgbGlicmFyeSBkb2VzIG5vdCBkZXBlbmQgb24gTkVXX0xFRFMgYW5kIG11c3QgYmUgaW5kZXBlbmRlbnQgc28gaXQgY2FuIGJlXG4gIDEwOlx0IyBzZWxlY3RlZCBmcm9tIG90aGVyIHN1YnN5c3RlbXMgKHNwZWNpZmljYWxseSBiYWNrbGlnaHQpLlxuICAxMTpcdGNvbmZpZyBMRURTX0VYUFJFU1NXSVJFXG4gIDEyOlx0XHRib29sXG4gIDEzOlx0XHRkZXBlbmRzIG9uIEdQSU9MSUJcbiAgMTQ6XHRcbiAgMTU6XHRtZW51Y29uZmlnIE5FV19MRURTXG4gIDE2Olx0XHRib29sIFwmIzM0O0xFRCBTdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFNheSBZIHRvIGVuYWJsZSBMaW51eCBMRUQgc3VwcG9ydC4gIFRoaXMgYWxsb3dzIGNvbnRyb2wgb2Ygc3VwcG9ydGVkXG4gIDE5Olx0XHQgIExFRHMgZnJvbSBib3RoIHVzZXJzcGFjZSBhbmQgb3B0aW9uYWxseSwgYnkga2VybmVsIGV2ZW50cyAodHJpZ2dlcnMpLlxuICAyMDpcdFxuICAyMTpcdGlmIE5FV19MRURTXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIExFRFNfQ0xBU1NcbiAgMjQ6XHRcdHRyaXN0YXRlIFwmIzM0O0xFRCBDbGFzcyBTdXBwb3J0XCYjMzQ7XG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIExFRCBzeXNmcyBjbGFzcyBpbiAvc3lzL2NsYXNzL2xlZHMuICBZb3UmIzM5O2xsXG4gIDI3Olx0XHQgIG5lZWQgdGhpcyB0byBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCBMRURzLiAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgTEVEU19DTEFTU19GTEFTSFxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TEVEIEZsYXNoIENsYXNzIFN1cHBvcnRcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gTEVEU19DTEFTU1xuICAzMjpcdFx0aGVscFxuICAzMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmbGFzaCBMRUQgc3lzZnMgY2xhc3MgaW4gL3N5cy9jbGFzcy9sZWRzLlxuICAzNDpcdFx0ICBJdCB3cmFwcyBMRUQgQ2xhc3MgYW5kIGFkZHMgZmxhc2ggTEVEcyBzcGVjaWZpYyBzeXNmcyBhdHRyaWJ1dGVzXG4gIDM1Olx0XHQgIGFuZCBrZXJuZWwgaW50ZXJuYWwgQVBJIHRvIGl0LiBZb3UmIzM5O2xsIG5lZWQgdGhpcyB0byBwcm92aWRlIHN1cHBvcnRcbiAgMzY6XHRcdCAgZm9yIHRoZSBmbGFzaCByZWxhdGVkIGZlYXR1cmVzIG9mIGEgTEVEIGRldmljZS4gSXQgY2FuIGJlIGJ1aWx0XG4gIDM3Olx0XHQgIGFzIGEgbW9kdWxlLlxuICAzODpcdFxuICAzOTpcdGNvbmZpZyBMRURTX0NMQVNTX01VTFRJQ09MT1JcbiAgNDA6XHRcdHRyaXN0YXRlIFwmIzM0O0xFRCBNdWx0aWNvbG9yIENsYXNzIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4NzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIGBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRGAqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEYC4gVGhhdCBmbGFnIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBzaWduaWZpY2FudCBoYXMgY2hhbmdlZCBpbiB0aGUgaGFyZHdhcmUgYnJpZ2h0bmVzcyBsZXZlbC4gVGhpcyBtZWFucyBhIGRpcmVjdCwgcGh5c2ljYWwgYWx0ZXJhdGlvbiBvY2N1cnJlZCwgYnlwYXNzaW5nIHRoZSB0eXBpY2FsIHNvZnR3YXJlIGNvbnRyb2wuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgYmVjYXVzZSBhIGhhcmR3YXJlIGNoYW5nZSBkaWN0YXRlcyBob3cgdGhlIHNvZnR3YXJlIHJlc3BvbmRzIGFuZCB1cGRhdGVzLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGZsYWcgaXMgc2V0LCB3aGF0IHRyaWdnZXJzIGl0LCBhbmQgdGhlIGltbWVkaWF0ZSBjb25zZXF1ZW5jZXMgd2hlbiBpdCYjMzk7cyBhc3NlcnRlZC4gRG9lcyB0aGlzIGxlYWQgdG8gYW4gaW50ZXJydXB0IGhhbmRsZXIsIGEgcG9sbGluZyBsb29wLCBvciBwZXJoYXBzIGEgZGlyZWN0IHdyaXRlIHRvIGEgcmVnaXN0ZXI/IEFuZCB3aGF0IHNwZWNpZmljIHJlZ2lzdGVycyBhcmUgaW52b2x2ZWQ/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGFuYWxvZyBhZGp1c3RtZW50IG9yIGEgbW9yZSBjb21wbGV4IFBXTSBpbXBsZW1lbnRhdGlvbj8gVWx0aW1hdGVseSwgSSBtdXN0IHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gcmVjb25jaWxlcyB0aGUgbmV3IGhhcmR3YXJlIHZhbHVlIHdpdGggdGhlIGludGVuZGVkIHNvZnR3YXJlIHN0YXRlLiBBcmUgdGhlcmUgYW55IHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdG8gd29ycnkgYWJvdXQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSBjb2RlIHRoYXQgcmVhZHMgYW5kIHJlYWN0cyB0byB0aGlzIGZsYWcgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50IGNvbmZsaWN0aW5nIGJlaGF2aW9ycy4gTGV0JiMzOTtzIHNlZS4uLndoZXJlJiMzOTtzIHRoZSBkZWZpbml0aW9uLCBhbmQgbGV0JiMzOTtzIHRyYWNlIGl0IHRocm91Z2ggdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TEVEU19CUklHSFRORVNTX0hXX0NIQU5HRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL0tjb25maWc9Mzk9Y29uZmlnIExFRFNfQ0xBU1NfTVVMVElDT0xPUlxuLS1cbmRyaXZlcnMvbGVkcy9LY29uZmlnLTQ4LVxuZHJpdmVycy9sZWRzL0tjb25maWc6NDk6Y29uZmlnIExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy01MC1cdGJvb2wgXCYjMzQ7TEVEIENsYXNzIGJyaWdodG5lc3NfaHdfY2hhbmdlZCBhdHRyaWJ1dGUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmxlZF9ncm91cHNbXSA9IHtcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtMTQzLVxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jOjE0NDojaWZkZWYgQ09ORklHX0xFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtMTQ1LXN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3NfaHdfY2hhbmdlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9NTE3PWludCBsZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNTkyLSNlbmRpZlxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jOjU5MzojaWZkZWYgQ09ORklHX0xFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNTk0LVx0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19od19jaGFuZ2VkID0gLTE7XG4tLVxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZz0xMj1jb25maWcgTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtMRUQgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjE0Olx0ZGVmYXVsdCBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xNS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1ODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipLY29uZmlnIEluc3BlY3Rpb24gZm9yIElERUFQQURfTEFQVE9QKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhhdCBgSURFQVBBRF9MQVBUT1BgIHN5bWJvbCwgc3BlY2lmaWNhbGx5IHdoZXJlIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdXNlZC4gTXkgaW5zdGluY3QgaXMgdGhhdCBpdCB3aWxsIGJlIGluIHRoZSBgZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZ28tdG8gc3BvdCBmb3IgTGVub3ZvLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgYW5kIGZlYXR1cmVzLCBhbmQgdGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVjbGFyZWQuIEkga25vdyB0aGVzZSBwYXRocyBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIGJ1dCBJIHN0aWxsIGRvIGEgcXVpY2sgbWVudGFsIGNoZWNrIOKAkyB5ZXAsIHRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbi4gTGV0JiMzOTtzIGdldCB0byBpdC4gVGltZSB0byBvcGVuIHRoYXQgYEtjb25maWdgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTGVub3ZvIFg4NiBQbGF0Zm9ybSBTcGVjaWZpYyBEcml2ZXJzXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBJREVBUEFEX0xBUFRPUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7TGVub3ZvIElkZWFQYWQgTGFwdG9wIEV4dHJhc1wmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBBQ1BJXG4gICA5Olx0XHRkZXBlbmRzIG9uIEFDUElfQkFUVEVSWVxuICAxMDpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgXHUwMDI2XHUwMDI2IElOUFVUXG4gIDExOlx0XHRkZXBlbmRzIG9uIFNFUklPX0k4MDQyXG4gIDEyOlx0XHRkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0VcbiAgMTM6XHRcdGRlcGVuZHMgb24gQUNQSV9WSURFTyB8fCBBQ1BJX1ZJREVPID0gblxuICAxNDpcdFx0ZGVwZW5kcyBvbiBBQ1BJX1dNSSB8fCBBQ1BJX1dNSSA9IG5cbiAgMTU6XHRcdHNlbGVjdCBBQ1BJX1BMQVRGT1JNX1BST0ZJTEVcbiAgMTY6XHRcdHNlbGVjdCBJTlBVVF9TUEFSU0VLTUFQXG4gIDE3Olx0XHRzZWxlY3QgTkVXX0xFRFNcbiAgMTg6XHRcdHNlbGVjdCBMRURTX0NMQVNTXG4gIDE5Olx0XHRzZWxlY3QgTEVEU19UUklHR0VSU1xuICAyMDpcdFx0aGVscFxuICAyMTpcdFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciBMZW5vdm8gSWRlYVBhZCBuZXRib29rcyBjb250YWlucyBkcml2ZXJzIGZvclxuICAyMjpcdFx0ICByZmtpbGwgc3dpdGNoLCBob3RrZXksIGZhbiBjb250cm9sIGFuZCBiYWNrbGlnaHQgY29udHJvbC5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTEVOT1ZPX1dNSV9IT1RLRVlfVVRJTElUSUVTXG4gIDI1Olx0XHR0cmlzdGF0ZSBcJiMzNDtMZW5vdm8gSG90a2V5IFV0aWxpdHkgV01JIGV4dHJhcyBkcml2ZXJcJiMzNDtcbiAgMjY6XHRcdGRlcGVuZHMgb24gQUNQSV9XTUlcbiAgMjc6XHRcdHNlbGVjdCBORVdfTEVEU1xuICAyODpcdFx0c2VsZWN0IExFRFNfQ0xBU1NcbiAgMjk6XHRcdGltcGx5IElERUFQQURfTEFQVE9QXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIFdNSSBzdXBwb3J0IGZvciBMZW5vdm8gY3VzdG9taXplZCBob3RrZXlzIGZ1bmN0aW9uLFxuICAzMjpcdFx0ICBzdWNoIGFzIExFRCBjb250cm9sIGZvciBhdWRpby9taWMgbXV0ZSBldmVudCBmb3IgSWRlYXBhZCwgWU9HQSwgWGlhb1hpbixcbiAgMzM6XHRcdCAgR2FtaW5nLCBUaGlua0Jvb2sgYW5kIHNvIG9uLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBMRU5PVk9fV01JX0NBTUVSQVxuICAzNjpcdFx0dHJpc3RhdGUgXCYjMzQ7TGVub3ZvIFdNSSBDYW1lcmEgQnV0dG9uIGRyaXZlclwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBBQ1BJX1dNSVxuICAzODpcdFx0ZGVwZW5kcyBvbiBJTlBVVFxuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciBMZW5vdm8gY2FtZXJhIGJ1dHRvbi4gVGhlIENhbWVyYVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM3OQoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiAxMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IExFRCBTdWJzeXN0ZW0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gd2hldGhlciB0aGlzIExFRCBzdWJzeXN0ZW0gcGF0Y2ggaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBleHRlbnNpdmUgbW9kaWZpY2F0aW9ucyB0byB0aGUgTEVEIGNvcmUsIGluY2x1ZGluZyB1cGRhdGVzIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UgKHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIGB0cmlnZ2VyX21heV9vZmZsb2FkYCksIGltcHJvdmVkIGxvY2tpbmcgaW4gYnJpZ2h0bmVzcyBoYW5kbGluZywgYW5kLCBjcml0aWNhbGx5LCBhIG5ldyBmcmFtZXdvcmsgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGApLiAgQSBuZXcgcHJpdmF0ZSB0cmlnZ2VyIGBpZGVhcGFkLWF1dG9gIGhhcyBhbHNvIGJlZW4gYWRkZWQgaW4gYGlkZWFwYWQtbGFwdG9wLmNgLCBhbmQgdGhlIG5ldGRldiB0cmlnZ2VyIGhhcyBiZWVuIG1vZGlmaWVkIHRvby4KClRoZSBjcml0aWNhbCB0aGluZyBpcyByZWFjaGFiaWxpdHksIGFuZCB5ZXMsIGl0IHNlZW1zIGhpZ2hseSByZWFjaGFibGUuIFRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIExFRHMgaXMgYSBzdGFuZGFyZCBhdmVudWUgZnJvbSB1c2Vyc3BhY2UuIEFueSBMRUQgZGV2aWNlIChrZXlib2FyZCwgbmV0d29yaywgdmlydHVhbCwgZXRjLikgZXhwb3NlcyB0aGUgcmVsZXZhbnQgYXR0cmlidXRlcyAoYHRyaWdnZXJgLCBgYnJpZ2h0bmVzc2AsIGB0cmlnZ2VyX21heV9vZmZsb2FkYCkuIEludGVyYWN0aW5nIHdpdGggdGhvc2Ugc3lzZnMgZmlsZXMgc2hvdWxkIGV4ZXJjaXNlIHRoZSBjb3JlIGxvZ2ljLCBoaXR0aW5nIGZ1bmN0aW9ucyBsaWtlIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgLCBgYnJpZ2h0bmVzc19zaG93YCwgYGJyaWdodG5lc3Nfc3RvcmVgLCBgbGVkX3RyaWdnZXJfc2V0YCwgZXRjLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgY29uc3RpdHV0ZSBvdXIgJiMzNDtGb2N1c1N5bWJvbHMmIzM0Oy4gQmFzZWQgb24gdGhlIGNvZGUsIHRoZXkgc2VlbSB0byBiZTogYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYGxlZF90cmlnZ2VyX3NldGAsIGFuZCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAuICBXZSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZXNlIGluIGBsZWQtdHJpZ2dlcnMuY2AgdG8gYmUgY2VydGFpbi4KCldlJiMzOTtsbCBuZWVkIHRvIG5vdGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7bGwgbmVlZCBgTkVXX0xFRFNgLCBgTEVEU19DTEFTU2AsIGBMRURTX1RSSUdHRVJTYCwgYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAsIGBMRURTX1RSSUdHRVJfTkVUREVWYCwgYExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEYCwgYW5kIGBJREVBUEFEX0xBUFRPUGAuICBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgbmFtZXMgYXJlIHByb3Blcmx5IHNwZWxsZWQuCgpGaW5hbGx5LCBhIHF1aWNrIHJldmlldyBvZiB0aGUgbW9kaWZpZWQgZmlsZXMgaXMgbmVjZXNzYXJ5OiBgZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jYCwgYGRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY2AsIGBkcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jYCwgYGRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jYCwgYGRyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY2AsIGBkcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY2AuCgpCYXNlZCBvbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGUgYW5zd2VyIGlzIFllcyEgIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGRyaXZlciBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRyaWdnZXIgbWFuYWdlbWVudCwgbG9ja2luZywgY29uY3VycmVuY3kgYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgd29ya3F1ZXVlcywgYW5kIHRoZSBuZXcgaGFyZHdhcmUtdHJpZ2dlcmVkIHRyYW5zaXRpb25zLiBUaGlzIGhhcyBhIGhpZ2ggcG90ZW50aWFsIGZvciBleHBsb2l0YWJsZSBidWdzLiAgVGhlIGNvZGUgaXMgcmVhY2hhYmxlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQuCgpTbywgSSB3aWxsIGNvbmZpcm06CgoqICAgKipGb2N1c1N5bWJvbHM6KiogYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYGxlZF90cmlnZ2VyX3NldGAsIGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYAoqICAgKipFbmFibGVDb25maWdzOioqIGBORVdfTEVEU2AsIGBMRURTX0NMQVNTYCwgYExFRFNfVFJJR0dFUlNgLCBgTEVEU19UUklHR0VSU19IV19DSEFOR0VEYCwgYExFRFNfVFJJR0dFUl9ORVRERVZgLCBgTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRURgLCBgSURFQVBBRF9MQVBUT1BgLgoKTm93LCB0aW1lIHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FV19MRURTJiMzNDssCiAgICAmIzM0O0xFRFNfQ0xBU1MmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSUyYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSX05FVERFViYjMzQ7LAogICAgJiMzNDtMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtJREVBUEFEX0xBUFRPUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3NldCYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBzeXNmcyBhdHRyaWJ1dGUgKHRyaWdnZXJfbWF5X29mZmxvYWQpIGZvciBxdWVyeWFibGUgaGFyZHdhcmUtb2ZmbG9hZGVkIExFRCB0cmlnZ2VycywgdXBkYXRlcyBjb3JlIGJyaWdodG5lc3MgZ2V0L3NldCBsb2NraW5nIGFuZCB0cmlnZ2VyIHJlbW92YWwgbG9naWMsIGFuZCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gTEVEIHRyaWdnZXIgZHJpdmVycy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIExFRCBjbGFzcy90cmlnZ2VyIHN5c2ZzIGludGVyZmFjZXMgYW5kIGNvcmUgdHJpZ2dlciBsaWZlY3ljbGUgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FV19MRURTJiMzNDssCiAgICAmIzM0O0xFRFNfQ0xBU1MmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSUyYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSX05FVERFViYjMzQ7LAogICAgJiMzNDtMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtJREVBUEFEX0xBUFRPUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3NldCYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBzeXNmcyBhdHRyaWJ1dGUgKHRyaWdnZXJfbWF5X29mZmxvYWQpIGZvciBxdWVyeWFibGUgaGFyZHdhcmUtb2ZmbG9hZGVkIExFRCB0cmlnZ2VycywgdXBkYXRlcyBjb3JlIGJyaWdodG5lc3MgZ2V0L3NldCBsb2NraW5nIGFuZCB0cmlnZ2VyIHJlbW92YWwgbG9naWMsIGFuZCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gTEVEIHRyaWdnZXIgZHJpdmVycy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIExFRCBjbGFzcy90cmlnZ2VyIHN5c2ZzIGludGVyZmFjZXMgYW5kIGNvcmUgdHJpZ2dlciBsaWZlY3ljbGUgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLWNvbnRyb2xsZWQgTEVEIHRyaWdnZXIgb2ZmbG9hZCBpbmZyYXN0cnVjdHVyZSwgdGhlIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBzeXNmcyBhdHRyaWJ1dGUsIGhhcmR3YXJlIHRyaWdnZXIgdHJhbnNpdGlvbiBub3RpZmljYXRpb25zIHZpYSBhIHdvcmtxdWV1ZSwgYW5kIHVwZGF0ZXMgZHJpdmVycyBpbmNsdWRpbmcgaWRlYXBhZC1sYXB0b3AgYW5kIGxlZHMtY3Jvc19lYy5cblxuMS4gTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgYnVmZmVycyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMuIFVzZXJzcGFjZSBleHBvc3VyZSBpcyBsaW1pdGVkIHRvIHN0YW5kYXJkIHN5c2ZzX2VtaXQgc3RyaW5nIGZvcm1hdHRpbmcuXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3QgZmllbGRzIChlLmcuLCB0cmlnZ2Vyc19od19jaGFuZ2VkLCBsYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYnJhbmNoaW5nLlxuMy4gQ29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBoYW5kbGluZyAoc3VjaCBhcyB3b3JrcXVldWUgZmx1c2gvZGVzdHJ1Y3Rpb24gYW5kIG11dGV4L3J3c2VtIGxvY2tzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLlxuXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQwN2E1ZTNjOTIxMTRjNzU0NTMxNzJhOTQ1MmFiN2EyNWJjMzRiNTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDA3OjIyOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZAppbmRleCBkNGM5MThjYzExYTEyLi45NGMzMzFkOWM0MTA1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZApAQCAtNzgsNiAmIzQzOzc4LDMxIEBAIERlc2NyaXB0aW9uOgogCQkod2hpY2ggd291bGQgb2Z0ZW4gYmUgY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZQogCQloYXJkd2FyZSkuCiAKJiM0MztXaGF0OgkJL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L3RyaWdnZXJfbWF5X29mZmxvYWQKJiM0MztEYXRlOgkJU2VwdGVtYmVyIDIwMjYKJiM0MztLZXJuZWxWZXJzaW9uOgk3LjQKJiM0MztDb250YWN0OglsaW51eC1sZWRzQHZnZXIua2VybmVsLm9yZwomIzQzO0Rlc2NyaXB0aW9uOgomIzQzOwkJTmFtZXMgYW5kIHN0YXRlcyBvZiB0cmlnZ2VycyB0aGF0IG1heSBiZSBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuCiYjNDM7CQlTdWNoIHRyaWdnZXJzIGFyZSBhbHNvIGNhbGxlZCAmIzM0O2hhcmR3YXJlIGNvbnRyb2wgdHJpZ2dlciYjMzQ7IGluIHNvbWUKJiM0MzsJCWNvbnRleHQuCiYjNDM7CiYjNDM7CQlPbmx5IGV4aXN0cyB3aGVuIHRoZSBMRUQgc3VwcG9ydHMgdHJpZ2dlciBvZmZsb2FkLgomIzQzOwomIzQzOwkJUmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyBhIGxpc3Qgb2YgdHJpZ2dlcnMgdGhhdCBhcmUgY2FwYWJsZSB0bwomIzQzOwkJYmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWUKJiM0MzsJCWluZGljYXRlIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCB0cmlnZ2VyOgomIzQzOwomIzQzOwkJLSBgZm9vX3RyaWdnZXJgOiB0aGUgdHJpZ2dlciBpcyBub3Qgc2VsZWN0ZWQuCiYjNDM7CQktIGAmbHQ7Zm9vX3RyaWdnZXImZ3Q7YDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQsIGJ1dCBmYWxscyBiYWNrIHRvCiYjNDM7CQkgIHNvZnR3YXJlIGJsaW5rIGZvciBzb21lIHJlYXNvbiAoZS5nLiwgaW5jb21wYXRpYmxlIHRyaWdnZXIKJiM0MzsJCSAgcGFyYW1ldGVycykKJiM0MzsJCS0gYFtmb29fdHJpZ2dlcl1gOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCBhbmQgb2ZmbG9hZGVkIHRvCiYjNDM7CQkgIGhhcmR3YXJlLgomIzQzOwomIzQzOwkJVGhlICYjMzQ7bmV0ZGV2JiMzNDsgdHJpZ2dlciBhbHNvIHByb3ZpZGVzIGEgY3VzdG9tIGF0dHJpYnV0ZSB0bwomIzQzOwkJaW5kaWNhdGUgaXRzIHN0YXRlLCBzZWUgYC9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy9vZmZsb2FkZWRgLgomIzQzOwogV2hhdDoJCS9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy9pbnZlcnRlZAogRGF0ZToJCUphbnVhcnkgMjAxMQogS2VybmVsVmVyc2lvbjoJMi42LjM4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2CmluZGV4IGVkNDZiMzdhYjhhMjguLmE1MTQ2ZWExZTNlNjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2CkBAIC03NSw2ICYjNDM7NzUsOSBAQCBEZXNjcmlwdGlvbjoKIAkJSWYgMSwgdGhlIExFRCBibGlua2luZyBpbiByZXF1ZXN0ZWQgbW9kZSBpcyBvZmZsb2FkZWQgdG8KIAkJaGFyZHdhcmUuCiAKJiM0MzsJCUxFRCB0cmlnZ2VyIGNvcmUgYWxzbyBwcm92aWRlcyBhIGdlbmVyaWMgYXR0cmlidXRlIGZvciB0aGlzCiYjNDM7CQlwdXJwb3NlLCBzZWUgYC9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy90cmlnZ2VyX21heV9vZmZsb2FkYC4KJiM0MzsKIFdoYXQ6CQkvc3lzL2NsYXNzL2xlZHMvJmx0O2xlZCZndDsvbGlua18xMAogRGF0ZToJCUp1biAyMDIzCiBLZXJuZWxWZXJzaW9uOgk2LjUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdAppbmRleCAzOTEzOTY2Y2ZkYWMwLi5hZGJjNTdiOWY0OWMzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0CkBAIC0yNDIsNiAmIzQzOzI0Miw5IEBAIG9wcyBhbmQgbmVlZHMgdG8gZGVjbGFyZSBzcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzLgogCiBXaXRoIGh3IGNvbnRyb2wgd2UgcmVmZXIgdG8gdGhlIExFRCBkcml2ZW4gYnkgaGFyZHdhcmUuCiAKJiM0MztBIHN5c2ZzIGF0dHJpYnV0ZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgaXMgcHJvdmlkZWQgZm9yIHVzZXJzcGFjZSB0bwomIzQzO3F1ZXJ5IHN1cHBvcnRlZCB0cmlnZ2VycyBhbmQgdGhlaXIgc3RhdGVzLgomIzQzOwogTEVEIGRyaXZlciBtdXN0IGRlZmluZSB0aGUgZm9sbG93aW5nIHZhbHVlIHRvIHN1cHBvcnQgaHcgY29udHJvbDoKIAogICAgIC0gaHdfY29udHJvbF90cmlnZ2VyOgpAQCAtMjk4LDYgJiM0MzszMDEsMTUgQEAgTEVEIGRyaXZlciBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6CiAgICAgICAgICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGV2aWNlIG9yIE5VTEwgaWYgbm90aGluZwogICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBhdHRhY2hlZC4KIAomIzQzO0xFRCB0cmlnZ2VyIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gaW5kaWNhdGUgaHcgY29udHJvbDoKJiM0MzsgICAgLSBvZmZsb2FkZWQ6CiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdHJpZ2dlciBpcyBjdXJyZW50bHkKJiM0MzsgICAgICAgICAgICAgICAgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLgomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBJZiBhIHRyaWdnZXIgZG9lc24mIzM5O3QgaW1wbGVtZW50IHRoaXMgY2FsbGJhY2ssIHRoZSBkZWZhdWx0CiYjNDM7ICAgICAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgdHJ1ZSBmb3IgcHJpdmF0ZSB0cmlnZ2VycyBhbmQgZmFsc2UgZm9yIGdlbmVyaWMKJiM0MzsgICAgICAgICAgICAgICAgb25lcy4KJiM0MzsKIExFRCBkcml2ZXIgY2FuIGFjdGl2YXRlIGFkZGl0aW9uYWwgbW9kZXMgYnkgZGVmYXVsdCB0byB3b3JrYXJvdW5kIHRoZQogaW1wb3NzaWJpbGl0eSBvZiBzdXBwb3J0aW5nIGVhY2ggZGlmZmVyZW50IG1vZGUgb24gdGhlIHN1cHBvcnRlZCB0cmlnZ2VyLgogRXhhbXBsZXMgYXJlIGhhcmRjb2RpbmcgdGhlIGJsaW5rIHNwZWVkIHRvIGEgc2V0IGludGVydmFsLCBlbmFibGUgc3BlY2lhbApAQCAtMzExLDkgJiM0MzszMjMsNjkgQEAgdGhlIGVuZCB1c2UgaHdfY29udHJvbF9zZXQgdG8gYWN0aXZhdGUgaHcgY29udHJvbC4KIEEgdHJpZ2dlciBjYW4gdXNlIGh3X2NvbnRyb2xfZ2V0IHRvIGNoZWNrIGlmIGEgTEVEIGlzIGFscmVhZHkgaW4gaHcgY29udHJvbAogYW5kIGluaXQgdGhlaXIgZmxhZ3MuCiAKJiM0MztBbHRlcm5hdGl2ZWx5LCBhIHByaXZhdGUgdHJpZ2dlciBjYW4gYmUgaW1wbGVtZW50ZWQgYWxvbmcgd2l0aCB0aGUgTEVEIGRyaXZlciBpZgomIzQzO3RoZSBMRUQmIzM5O3MgaGFyZHdhcmUgY29udHJvbCBkb2VzbiYjMzk7dCBmaXQgYW55IGdlbmVyaWMgdHJpZ2dlci4gVG8gYXNzb2NpYXRlIHRoZQomIzQzO3ByaXZhdGUgdHJpZ2dlciB3aXRoIHRoZSBMRUQgY2xhc3NkZXYsIHRoZWlyIGB0cmlnZ2VyX3R5cGVgIG11c3QgYmUgdGhlIHNhbWUuIFRvCiYjNDM7ZGVjbGFyZSB0aGF0IHRoZSBwcml2YXRlIHRyaWdnZXIgcHJvdmlkZXMgaGFyZHdhcmUgY29udHJvbCBmb3IgdGhlIGFzc29jaWF0ZWQKJiM0MztMRUQgY2xhc3NkZXYsIHNldCB0aGUgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgc3RyaW5nIHRvIHRoZSB0cmlnZ2VyJiMzOTtzIG5hbWUuIFNpbmNlCiYjNDM7Ym90aCB0aGUgTEVEIGNsYXNzZGV2IGFuZCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIGFyZSBpbiB0aGUgc2FtZSBMRUQgZHJpdmVyLCBpdCYjMzk7cwomIzQzO25vdCBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gY29vcmRpbmF0ZSB2aWEgYGh3X2NvbnRyb2xfKmAgY2FsbGJhY2tzLgomIzQzOwogV2hlbiB0aGUgTEVEIGlzIGluIGh3IGNvbnRyb2wsIG5vIHNvZnR3YXJlIGJsaW5rIGlzIHBvc3NpYmxlIGFuZCBkb2luZyBzbwogd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIGh3IGNvbnRyb2wuCiAKJiM0MztIYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uCiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1NvbWUgaGFyZHdhcmUgY2FuIGF1dG9ub21vdXNseSBhY3RpdmF0ZS9kZWFjdGl2YXRlIGhhcmR3YXJlIGNvbnRyb2wuIEFmdGVyIHRoYXQsCiYjNDM7dGhlIExFRCBoYXJkd2FyZSBub3RpZmllcyB0aGUgTEVEIGRyaXZlci4KJiM0MzsKJiM0MztJZiB0aGUgZHJpdmVyIGNhbiBkZXRlY3Qgc3VjaCB0cmFuc2l0aW9ucyBhbmQgdGh1cyB3YW50cyB0byBub3RpZnkgdGhlIExFRCBjb3JlCiYjNDM7dG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgdGhlbiB0aGUgYExFRF9UUklHX0hXX0NIQU5HRURgIGZsYWcgbXVzdCBiZSBzZXQgaW4KJiM0MztmbGFncyBiZWZvcmUgcmVnaXN0ZXJpbmcuIFRvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIGFjY29yZGluZ2x5LCBjYWxsCiYjNDM7YGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIG9uIHRoZSBMRUQgY2xhc3NkZXYuCiYjNDM7CiYjNDM7VGhpcyBjYXBhYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIExFRCBkZXZpY2UmIzM5O3MgcHJpdmF0ZSB0cmlnZ2VyLiBUaGUgcHJpdmF0ZQomIzQzO3RyaWdnZXIgbXVzdCBoYXZlIGJlZW4gcHJvcGVybHkgcmVnaXN0ZXJlZCAoc2VlIGFib3ZlKSBhbmQgbmFtZWQgYWZ0ZXIKJiM0MztgaHdfY29udHJvbF90cmlnZ2VyYC4KJiM0MzsKJiM0MztPbmx5IHR3byB0cmFuc2l0aW9ucyBhcmUgZGVmaW5lZDoKJiM0MzsKJiM0MzstICYjMzQ7bm9uZSYjMzQ7ID0mZ3Q7IHByaXZhdGUgdHJpZ2dlcjoKJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2wKJiM0MzsgICAgICAgIGFuZCB3aGVuICYjMzQ7bm9uZSYjMzQ7IChpLmUuLCBubyB0cmlnZ2VyKSBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiB0aGUgcHJpdmF0ZQomIzQzOyAgICAgICAgdHJpZ2dlciBpcyBhbHJlYWR5IGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5CiYjNDM7ICAgICAgICBhIG5vLW9wLgomIzQzOwomIzQzOyAgICAgICAgVGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhcwomIzQzOyAgICAgICAgbm9ybWFsLgomIzQzOwomIzQzOyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGUKJiM0MzsgICAgICAgIGFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgY3VycmVudGx5IGluIGhhcmR3YXJlCiYjNDM7ICAgICAgICBjb250cm9sLgomIzQzOwomIzQzOyAgICAgICAgSWYgZXJyb3Igb2NjdXJzIGluIHRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlLCB0aGUgTEVEIFRyaWdnZXIgY29yZSByZXZlcnRzCiYjNDM7ICAgICAgICB0aGUgZWZmZWN0aXZlIHRyaWdnZXIgdG8gJiMzNDtub25lJiMzNDsuCiYjNDM7CiYjNDM7LSBwcml2YXRlIHRyaWdnZXIgPSZndDsgJiMzNDtub25lJiMzNDsKJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbAomIzQzOyAgICAgICAgYW5kIHdoZW4gdGhlIHByaXZhdGUgdHJpZ2dlciBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiAmIzM0O25vbmUmIzM0OyAoaS5lLiwgbm8KJiM0MzsgICAgICAgIHRyaWdnZXIpIGlzIGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5IGEKJiM0MzsgICAgICAgIG5vLW9wLgomIzQzOwomIzQzOyAgICAgICAgVGhlIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHByaXZhdGUgdHJpZ2dlciB3aWxsIGJlIGV4ZWN1dGVkIGFzCiYjNDM7ICAgICAgICBub3JtYWwsIGV4Y2VwdCB0aGF0IHRoZSBjdXJyZW50IExFRCBicmlnaHRuZXNzIGlzIHJldGFpbmVkLiBUaGUgcmVhc29uCiYjNDM7ICAgICAgICBmb3Iga2VlcGluZyB0aGUgYnJpZ2h0bmVzcyB1bmNoYW5nZWQgaXMgdGhhdCBzb21lIGhhcmR3YXJlIG1heSBjaG9vc2UgYQomIzQzOyAgICAgICAgc3BlY2lmaWMgYnJpZ2h0bmVzcyBpbnN0ZWFkIG9mIHNpbXBseSB0dXJuaW5nIG9mZiB0aGUgTEVEIGFmdGVyCiYjNDM7ICAgICAgICBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0aW5nIGhhcmR3YXJlIGNvbnRyb2wuCiYjNDM7CiYjNDM7ICAgICAgICBUaGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZQomIzQzOyAgICAgICAgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIG5vdCBjdXJyZW50bHkgaW4gaGFyZHdhcmUKJiM0MzsgICAgICAgIGNvbnRyb2wuCiYjNDM7CiYjNDM7SWYgdGhlIGN1cnJlbnQgdHJpZ2dlciBpcyBuZWl0aGVyIHRoZSBwcml2YXRlIHRyaWdnZXIgbm9yICYjMzQ7bm9uZSYjMzQ7LCBubyB0cmFuc2l0aW9uCiYjNDM7d2lsbCBiZSBtYWRlLgomIzQzOwogS25vd24gSXNzdWVzCiA9PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCmluZGV4IGE1MWIwZWQ1Mzg4NjQuLjNiNDM4ZDhkYTVlMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKQEAgLTI3LDI5ICYjNDM7MjcsMTkgQEAgc3RhdGljIExJU1RfSEVBRChsZWRzX2xvb2t1cF9saXN0KTsKIAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsZWRzX3dxOwogCi1zdGF0aWMgYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQotewotI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCi0JZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKLQlyZXR1cm4gbGVkX2NkZXYtJmd0O3RyaWdnZXIgJmFtcDsmYW1wOyBsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7dHJpZ2dlcl90eXBlOwotI2Vsc2UKLQlyZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQogc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOwogCi0JaWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKQotCQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtsZWRfY2Rldi0mZ3Q7bGVkX2FjY2VzcykgewomIzQzOwkJaWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKQomIzQzOwkJCXJldHVybiAtRU5PREFUQTsKIAotCW11dGV4X2xvY2soJmFtcDtsZWRfY2Rldi0mZ3Q7bGVkX2FjY2Vzcyk7Ci0JbGVkX3VwZGF0ZV9icmlnaHRuZXNzKGxlZF9jZGV2KTsKLQlicmlnaHRuZXNzID0gbGVkX2NkZXYtJmd0O2JyaWdodG5lc3M7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpOwomIzQzOwkJbGVkX3VwZGF0ZV9icmlnaHRuZXNzKGxlZF9jZGV2KTsKJiM0MzsJCWJyaWdodG5lc3MgPSBsZWRfY2Rldi0mZ3Q7YnJpZ2h0bmVzczsKJiM0MzsJfQogCiAJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgYnJpZ2h0bmVzcyk7CiB9CkBAIC03NCw2ICYjNDM7NjQsOSBAQCBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAogCWlmIChzdGF0ZSA9PSBMRURfT0ZGKQogCQlsZWRfdHJpZ2dlcl9yZW1vdmUobGVkX2NkZXYpOwomIzQzOwllbHNlCiYjNDM7CQlsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChsZWRfY2Rldik7CiYjNDM7CiAJbGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBzdGF0ZSk7CiAKIAlyZXQgPSBzaXplOwpAQCAtMTAzLDggJiM0Mzs5NiwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0gewogCSZhbXA7YmluX2F0dHJfdHJpZ2dlciwKIAlOVUxMLAogfTsKJiM0MzsKJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfUk8odHJpZ2dlcl9tYXlfb2ZmbG9hZCk7CiYjNDM7c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZF90cmlnZ2VyX2F0dHJzW10gPSB7CiYjNDM7CSZhbXA7ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyLAomIzQzOwlOVUxMCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdW1vZGVfdCBsZWRfdHJpZ2dlcl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAomIzQzOwkJCQkgICAgICBpbnQgaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaik7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CWlmIChhdHRyID09ICZhbXA7ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyKQomIzQzOwkJcmV0dXJuIGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPyBhdHRyLSZndDttb2RlIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGF0dHItJmd0O21vZGU7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbGVkX3RyaWdnZXJfZ3JvdXAgPSB7CiAJLmJpbl9hdHRycyA9IGxlZF90cmlnZ2VyX2Jpbl9hdHRycywKJiM0MzsJLmF0dHJzID0gbGVkX3RyaWdnZXJfYXR0cnMsCiYjNDM7CS5pc192aXNpYmxlID0gbGVkX3RyaWdnZXJfaXNfdmlzaWJsZSwKIH07CiAjZW5kaWYKIApAQCAtNTk2LDYgJiM0Mzs2MTEsOSBAQCBpbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCiAJbGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQobGVkX2NkZXYpOwogI2VuZGlmCiAKJiM0MzsJaWYgKGxlZF9jZGV2LSZndDtmbGFncyAmYW1wOyBMRURfVFJJR19IV19DSEFOR0VEKQomIzQzOwkJbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKGxlZF9jZGV2KTsKJiM0MzsKIAltdXRleF91bmxvY2soJmFtcDtsZWRfY2Rldi0mZ3Q7bGVkX2FjY2Vzcyk7CiAKIAlkZXZfZGJnKHBhcmVudCwgJiMzNDtSZWdpc3RlcmVkIGxlZCBkZXZpY2U6ICVzXG4mIzM0OywKQEAgLTYxNiw2ICYjNDM7NjM0LDkgQEAgdm9pZCBsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIAlpZiAoSVNfRVJSX09SX05VTEwobGVkX2NkZXYtJmd0O2RldikpCiAJCXJldHVybjsKIAomIzQzOwlpZiAobGVkX2NkZXYtJmd0O2ZsYWdzICZhbXA7IExFRF9UUklHX0hXX0NIQU5HRUQpCiYjNDM7CQlsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQobGVkX2NkZXYpOwomIzQzOwogI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCiAJZG93bl93cml0ZSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwogCWlmIChsZWRfY2Rldi0mZ3Q7dHJpZ2dlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYwppbmRleCBiMTIyMzIxOGJkYTExLi5hOWQ5OTJhODg2MTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jCkBAIC03LDkgJiM0Mzs3LDEzIEBACiAgKiBBdXRob3I6IFJpY2hhcmQgUHVyZGllICZsdDtycHVyZGllQG9wZW5lZGhhbmQuY29tJmd0OwogICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvY2tkZXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CkBAIC0zMyw2ICYjNDM7MzcsMzQgQEAgdHJpZ2dlcl9yZWxldmFudChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQogCXJldHVybiAhdHJpZy0mZ3Q7dHJpZ2dlcl90eXBlIHx8IHRyaWctJmd0O3RyaWdnZXJfdHlwZSA9PSBsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl90eXBlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwlpZiAoIWxlZF9jZGV2LSZndDt0cmlnZ2VyKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoIWxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgfHwKJiM0MzsJICAgIHN0cmNtcChsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyLCBsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7bmFtZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7b2ZmbG9hZGVkKQomIzQzOwkJcmV0dXJuIGxlZF9jZGV2LSZndDt0cmlnZ2VyLSZndDtvZmZsb2FkZWQobGVkX2NkZXYpOwomIzQzOwomIzQzOwlkZXZfd2Fybl9vbmNlKGxlZF9jZGV2LSZndDtkZXYsICYjMzQ7aHcgY29udHJvbCB0cmlnZ2VyICVzIGRvZXNuJiMzOTt0IGltcGxlbWVudCBvZmZsb2FkZWQoKVxuJiMzNDssCiYjNDM7CQkgICAgICBsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7bmFtZSk7CiYjNDM7CiYjNDM7CS8qIE90aGVyd2lzZSBhc3N1bWUgcHJpdmF0ZSB0cmlnZ2VycyBhcyBhbHdheXMgb2ZmbG9hZGVkLiAqLwomIzQzOwlyZXR1cm4gbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O3RyaWdnZXJfdHlwZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKJiM0MzsJcmV0dXJuIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQpOwomIzQzOwogc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLAogCQkJICBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpCkBAIC0xNjMsNyAmIzQzOzE5NSw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZWFkKTsKIAogLyogQ2FsbGVyIG11c3QgZW5zdXJlIGxlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2sgaGVsZCAqLwotaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQomIzQzO3N0YXRpYyBpbnQgX19sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZywKJiM0MzsJCQkgICAgIGJvb2wgaHdfdHJpZ2dlcmVkKQogewogCWNoYXIgKmV2ZW50ID0gTlVMTDsKIAljaGFyICplbnZwWzJdOwpAQCAtMTk0LDcgJiM0MzsyMjcsMjEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQogCQlsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9kYXRhID0gTlVMTDsKIAkJbGVkX2NkZXYtJmd0O2FjdGl2YXRlZCA9IGZhbHNlOwogCQlsZWRfY2Rldi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5MRURfSU5JVF9ERUZBVUxUX1RSSUdHRVI7Ci0JCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogSGFyZHdhcmUgbWF5IGhhdmUgc2VsZWN0ZWQgYSBuZXcgYnJpZ2h0bmVzcyBsZXZlbCBkdXJpbmcgaXRzCiYjNDM7CQkgKiBoYXJkd2FyZSBjb250cm9sIHRyYW5zaXRpb24sIHNvIG9ubHkgcmVzZXQgYnJpZ2h0bmVzcyBpZiB3ZQomIzQzOwkJICogYXJlIHN3aXRjaGluZyB0byBhbm90aGVyIHRyaWdnZXIgb3IgaWYgdGhlIHN3aXRjaGluZyBpcyBub3QKJiM0MzsJCSAqIGhhcmR3YXJlIHRyaWdnZXJlZC4KJiM0MzsJCSAqCiYjNDM7CQkgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZXJyb3IgcGF0aCwgYXMgcnVubmluZwomIzQzOwkJICogaW50byB0aGUgZXJyb3IgcGF0aCBpbXBsaWVzIGEgbm9uZSA9Jmd0OyBwcml2YXRlIHRyaWdnZXIKJiM0MzsJCSAqIHRyYW5zaXRpb24uIFRoaXMgaGludHMgdGhhdCB0aGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUKJiM0MzsJCSAqIHRyaWdnZXIgbXVzdCBoYXZlIHNvbWUgZnVuZGFtZW50YWwgYnVncywgc28gZG9uJiMzOTt0IGJvdGhlcgomIzQzOwkJICogbGVhdmluZyB0aGUgTEVEIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRyaWcgfHwgIWh3X3RyaWdnZXJlZCkKJiM0MzsJCQlsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpOwogCX0KIAlpZiAodHJpZykgewogCQlzcGluX2xvY2soJmFtcDt0cmlnLSZndDtsZWRkZXZfbGlzdF9sb2NrKTsKQEAgLTI1OCw2ICYjNDM7MzA1LDExIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKIAogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7aW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCB0cmlnLCBmYWxzZSk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0KTsKIAogdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCkBAIC0yNjgsNiAmIzQzOzMyMCwxNSBAQCB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7CiAKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKQomIzQzOwkJbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wpOwomIzQzOwogc3RhdGljIGJvb2wgbGVkX21hdGNoX2RlZmF1bHRfdHJpZ2dlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkgICAgICBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpCiB7CkBAIC0zMTMsNiAmIzQzOzM3NCwzMiBAQCB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQpOwogCiYjNDM7c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CXN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZzsKJiM0MzsJYm9vbCBoaXQsIG9mZmxvYWRlZDsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpOwomIzQzOwlndWFyZChyd3NlbV9yZWFkKSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwl0cmlnID0gbGVkX2NkZXYtJmd0O3RyaWdnZXI7CiYjNDM7CiYjNDM7CW9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7CiYjNDM7CWhpdCA9IG9mZmxvYWRlZCB8fCAodHJpZyAmYW1wOyZhbXA7ICFzdHJjbXAobGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciwgdHJpZy0mZ3Q7bmFtZSkpOwomIzQzOwomIzQzOwkvKiBbb2ZmbG9hZGVkXSAmbHQ7YWN0aXZlX2J1dF9ub3Rfb2ZmbG9hZGVkJmd0OyBpbmFjdGl2ZSAqLwomIzQzOwlsZW4gPSBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcyVzJXNcbiYjMzQ7LAomIzQzOwkJCSBvZmZsb2FkZWQgPyAmIzM0O1smIzM0OyA6IChoaXQgPyAmIzM0OyZsdDsmIzM0OyA6ICYjMzQ7JiMzNDspLAomIzQzOwkJCSBsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyLAomIzQzOwkJCSBvZmZsb2FkZWQgPyAmIzM0O10mIzM0OyA6IChoaXQgPyAmIzM0OyZndDsmIzM0OyA6ICYjMzQ7JiMzNDspKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGxlbjsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KTsKJiM0MzsKIC8qIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqLwogCiBpbnQgbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQpAQCAtNDAzLDYgJiM0Mzs0OTAsODggQEAgaW50IGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSwKJiM0MzsJCQkJCQkgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghbGVkX2NkZXYtJmd0O3RyaWdnZXIpIHsKJiM0MzsJCS8qICYjMzQ7bm9uZSYjMzQ7ID0mZ3Q7IHByaXZhdGUgdHJpZ2dlci4gKi8KJiM0MzsJCWlmIChhY3RpdmF0ZSkKJiM0MzsJCQllcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgaGNfdHJpZywgdHJ1ZSk7CiYjNDM7CX0gZWxzZSBpZiAobGVkX2NkZXYtJmd0O3RyaWdnZXIgPT0gaGNfdHJpZykgewomIzQzOwkJLyogcHJpdmF0ZSB0cmlnZ2VyID0mZ3Q7ICYjMzQ7bm9uZSYjMzQ7LiAqLwomIzQzOwkJaWYgKCFhY3RpdmF0ZSkKJiM0MzsJCQllcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCwgdHJ1ZSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBPdGhlciB0cmlnZ2VyIGlzIGFjdGl2ZS4gKi8KJiM0MzsJCWRldl9kYmcobGVkX2NkZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O0lnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZSYjMzQ7LAomIzQzOwkJCWFjdGl2YXRlID8gJiMzNDthY3RpdmF0ZSYjMzQ7IDogJiMzNDtkZWFjdGl2YXRlJiMzNDssIGhjX3RyaWctJmd0O25hbWUsCiYjNDM7CQkJbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpOwomIzQzOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlkZXZfd2FybihsZWRfY2Rldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyAlcyBpbiBodyBjb250cm9sIHRyYW5zaXRpb246ICVkJiMzNDssCiYjNDM7CQkJIGFjdGl2YXRlID8gJiMzNDthY3RpdmF0ZSYjMzQ7IDogJiMzNDtkZWFjdGl2YXRlJiMzNDssIGhjX3RyaWctJmd0O25hbWUsIGVycik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsZWRfY2xhc3NkZXYsIHRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7CiYjNDM7CWJvb2wgYWN0aXZhdGUgPSBSRUFEX09OQ0UobGVkX2NkZXYtJmd0O3RyaWdnZXJzX2h3X2NoYW5nZWQpOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQocndzZW1fcmVhZCwgJmFtcDt0cmlnZ2Vyc19saXN0X2xvY2spIHsKJiM0MzsJCXN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZzsKJiM0MzsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnkodHJpZywgJmFtcDt0cmlnZ2VyX2xpc3QsIG5leHRfdHJpZykgewomIzQzOwkJCWlmICh0cmlnLSZndDt0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtJmd0O3RyaWdnZXJfdHlwZSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICFzdHJjbXAodHJpZy0mZ3Q7bmFtZSwgbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlcikpIHsKJiM0MzsJCQkJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7CiYjNDM7CiYjNDM7CQkJCWxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbihsZWRfY2RldiwgYWN0aXZhdGUsIHRyaWcpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl9lcnIobGVkX2NkZXYtJmd0O2RldiwKJiM0MzsJCSYjMzQ7JXMoKSBpcyBjYWxsZWQsIGJ1dCB0aGUgcHJpdmF0ZSB0cmlnZ2VyICglcykgaXMgbm90IHByb3Blcmx5IHJlZ2lzdGVyZWRcbiYjMzQ7LAomIzQzOwkJX19mdW5jX18sIGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpCiYjNDM7ewomIzQzOwkvKiBSZXN0cmljdGVkIHRvIHByaXZhdGUgdHJpZ2dlcnMuICovCiYjNDM7CWlmIChXQVJOX09OKCEobGVkX2NkZXYtJmd0O2ZsYWdzICZhbXA7IExFRF9UUklHX0hXX0NIQU5HRUQpIHx8CiYjNDM7CQkgICAgIWxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgfHwgIWxlZF9jZGV2LSZndDt0cmlnZ2VyX3R5cGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGxlZF9jZGV2LSZndDt0cmlnZ2Vyc19od19jaGFuZ2VkLCBhY3RpdmF0ZSk7CiYjNDM7CiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7CiYjNDM7CiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlJTklUX1dPUksoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrLCBsZWRfdHJpZ2dlcl9od19jb250cm9sX2NoYW5nZWRfd29ya2VyKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKTsKJiM0MzsKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CWRpc2FibGVfd29ya19zeW5jKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi8KJiM0MzsKIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi8KIAogdm9pZCBsZWRfdHJpZ2dlcl9ldmVudChzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMKaW5kZXggMTg0NGQwY2Q1ZjUyOC4uNmRiODNkMDE1Mjc3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuYwpAQCAtODUsMTIgJiM0Mzs4NSwxOCBAQCBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiAJcmV0dXJuIGNyb3NfZWNfbGVkX3NlbmRfY21kKHByaXYtJmd0O2Nyb3NfZWMsICZhbXA7YXJnKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGNyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZTsKIAogc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBjcm9zX2VjX2xlZF90cmlnZ2VyID0gewogCS5uYW1lID0gJiMzNDtjaHJvbWVvcy1hdXRvJiMzNDssCiAJLnRyaWdnZXJfdHlwZSA9ICZhbXA7Y3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlLAogCS5hY3RpdmF0ZSA9IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUsCiYjNDM7CS5vZmZsb2FkZWQgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZCwKIH07CiAKIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jCmluZGV4IGVkNmE0N2JiYjQ0ZjkuLjMyZDQwZDE3NmQzZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jCkBAIC0xOTUsMTAgJiM0MzsxOTUsMTYgQEAgc3RhdGljIHZvaWQgb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldikKIAkJCWVycik7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIG9tbmlhX2h3X3RyaWdnZXIgPSB7CiAJLm5hbWUJCT0gJiMzNDtvbW5pYS1tY3UmIzM0OywKIAkuYWN0aXZhdGUJPSBvbW5pYV9od3RyaWdfYWN0aXZhdGUsCiAJLmRlYWN0aXZhdGUJPSBvbW5pYV9od3RyaWdfZGVhY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZAk9IG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQsCiAJLnRyaWdnZXJfdHlwZQk9ICZhbXA7b21uaWFfaHdfdHJpZ2dlcl90eXBlLAogfTsKIApAQCAtMjUxLDYgJiM0MzsyNTcsNyBAQCBzdGF0aWMgaW50IG9tbmlhX2xlZF9yZWdpc3RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3Qgb21uaWFfbGVkICpsZWQsCiAJICogYnkgTEVEIGNsYXNzIGZyb20gdGhlIGxpbnV4LGRlZmF1bHQtdHJpZ2dlciBwcm9wZXJ0eS4KIAkgKi8KIAljZGV2LSZndDtkZWZhdWx0X3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7CiYjNDM7CWNkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTsKIAogCS8qIFB1dCB0aGUgTEVEIGludG8gc29mdHdhcmUgbW9kZSAqLwogCXJldCA9IG9tbmlhX2NtZF93cml0ZV91OChjbGllbnQsIE9NTklBX0NNRF9MRURfTU9ERSwgT01OSUFfQ01EX0xFRF9NT0RFX0xFRChsZWQtJmd0O3JlZykgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMuaCBiL2RyaXZlcnMvbGVkcy9sZWRzLmgKaW5kZXggYmVlNDY2NTFlMDY4Zi4uYmRhYzIzMzYwMTJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkcy5oCkBAIC0yNyw4ICYjNDM7MjcsMTggQEAgc3NpemVfdCBsZWRfdHJpZ2dlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsCiAJCQlsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpOwomIzQzO3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogCiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBsZWRzX2xpc3RfbG9jazsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGxlZHNfbGlzdDsKIAomIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VECiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0MzsjZWxzZSAvKiAhQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHsgfQomIzQzOyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovCiYjNDM7CiAjZW5kaWYJLyogX19MRURTX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnCmluZGV4IGMxMTI4MmE3NGI1YWMuLmExMWQwNGNlNGFiMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZwpAQCAtOSw2ICYjNDM7OSwxNiBAQCBtZW51Y29uZmlnIExFRFNfVFJJR0dFUlMKIAogaWYgTEVEU19UUklHR0VSUwogCiYjNDM7Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzOwlib29sICYjMzQ7TEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydCYjMzQ7CiYjNDM7CWRlZmF1bHQgTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRUQKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgaW5pdGlhdGVkIGhhcmR3YXJlIGNvbnRyb2wKJiM0MzsJICB0cmFuc2l0aW9ucywgd2hlcmUgdGhlIExFRCBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgc3dpdGNoZXMgYmV0d2VlbgomIzQzOwkgICYjMzQ7bm9uZSYjMzQ7IChpLmUuLCBubyB0cmlnZ2VyKSBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlci4KJiM0MzsKJiM0MzsJICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLgomIzQzOwogY29uZmlnIExFRFNfVFJJR0dFUl9USU1FUgogCXRyaXN0YXRlICYjMzQ7TEVEIFRpbWVyIFRyaWdnZXImIzM0OwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jCmluZGV4IDViNGU5MmMxNGRiYjQuLjJlOWFmNDhhNzRkYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYwpAQCAtNzk4LDEwICYjNDM7Nzk4LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl90cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiAJa2ZyZWUodHJpZ2dlcl9kYXRhKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5ldGRldl90cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsZWRfbmV0ZGV2X2RhdGEgKnRyaWdnZXJfZGF0YSA9IGxlZF9nZXRfdHJpZ2dlcl9kYXRhKGxlZF9jZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRyaWdnZXJfZGF0YS0mZ3Q7aHdfY29udHJvbDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIG5ldGRldl9sZWRfdHJpZ2dlciA9IHsKIAkubmFtZSA9ICYjMzQ7bmV0ZGV2JiMzNDssCiAJLmFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfYWN0aXZhdGUsCiAJLmRlYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlLAomIzQzOwkub2ZmbG9hZGVkID0gbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkLAogCS5ncm91cHMgPSBuZXRkZXZfdHJpZ19ncm91cHMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnCmluZGV4IDUxNjU5NDk5MzA3MzkuLmE5Nzg1MmIwYjIyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnCkBAIC0xNiw2ICYjNDM7MTYsNyBAQCBjb25maWcgSURFQVBBRF9MQVBUT1AKIAlzZWxlY3QgSU5QVVRfU1BBUlNFS01BUAogCXNlbGVjdCBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCiYjNDM7CXNlbGVjdCBMRURTX1RSSUdHRVJTCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3IKIAkgIHJma2lsbCBzd2l0Y2gsIGhvdGtleSwgZmFuIGNvbnRyb2wgYW5kIGJhY2tsaWdodCBjb250cm9sLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYwppbmRleCA4MjEzNTI0NTA0ZWViLi5mODZjMTFmNTFkMGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYwpAQCAtMTQsOSAmIzQzOzE0LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYml0b3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2k4MDQyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwpAQCAtMjYsOSAmIzQzOzI5LDExIEBACiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGVkcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX3Byb2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wb3dlcl9zdXBwbHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmZraWxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2VxX2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmdfY2hvaWNlcy5oJmd0OwpAQCAtMTM0LDEwICYjNDM7MTM5LDMxIEBAIGVudW0gewogfTsKIAogLyoKLSAqIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgc3RhdGVzIC0gMQotICogRnV0dXJlIGtleWJvYXJkIHR5cGVzIG1heSBuZWVkIGEgbmV3IHN5c3RlbSwgaWYgdGhlcmUmIzM5O3MgYSBjb2xsaXNpb24KLSAqIEtCRF9CTF9UUklTVEFURV9BVVRPIGhhcyBubyB3YXkgdG8gcmVwb3J0IG9yIHNldCB0aGUgYXV0byBzdGF0ZQotICogc28gaXQgZWZmZWN0aXZlbHkgaGFzIDMgc3RhdGVzLCBidXQgbmVlZHMgdG8gaGFuZGxlIDQKJiM0MzsgKiBUaGUgZW51bWVyYXRpb24gaGFzIHR3byBwdXJwb3NlczoKJiM0MzsgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodAomIzQzOyAqICAgLSBhcyBhIG1hbmRhdG9yeSBwYXJhbWV0ZXIgb2YgdGhlIEtCTEMgY29tbWFuZAomIzQzOyAqCiYjNDM7ICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8ICAgICAgSGFyZHdhcmUgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8ICAgIDMgfAomIzQzOyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IEtCRF9CTF9TVEFOREFSRCAgICAgICAgICB8ICAgICAgb2ZmIHwgIG9uIHwgIE4vQSB8ICBOL0EgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCBLQkRfQkxfVFJJU1RBVEUgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfCAgTi9BIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzOwomIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKgomIzQzOyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czoKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8ICBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8CiYjNDM7ICogfCBPcGVyYXRpb24gICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOwomIzQzOyAqIHwgUmVhZCAgICAgICAgICAgICAgICAgICAgIHwgb2ZmL2F1dG8gfCBsb3cgfCBoaWdoIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IFdyaXRlICAgICAgICAgICAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7CiAgKi8KIGVudW0gewogCUtCRF9CTF9TVEFOREFSRCAgICAgID0gMSwKQEAgLTE0NSw2ICYjNDM7MTcxLDggQEAgZW51bSB7CiAJS0JEX0JMX1RSSVNUQVRFX0FVVE8gPSAzLAogfTsKIAomIzQzOyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTCTMKJiM0MzsKICNkZWZpbmUgS0JEX0JMX1FVRVJZX1RZUEUJCTB4MQogI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfVFlQRQkJMHg1CiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9BVVRPX1RZUEUJMHg3CkBAIC0yMDAsMTAgJiM0MzsyMjgsMTQgQEAgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSB7CiAJCWJvb2wgeW1jX2VjX3RyaWdnZXIgICAgICAgOiAxOwogCX0gZmVhdHVyZXM7CiAJc3RydWN0IHsKLQkJYm9vbCBpbml0aWFsaXplZDsKJiM0MzsJCWludCBpbml0aWFsaXplZDsgLyogIDA6IGluaXRpYWxpemlvbiBwZW5kaW5nL29uZ29pbmcvZmFpbGVkCiYjNDM7CQkJCSAgKiAmZ3Q7MDogaW5pdGlhbGl6aW9uIGZpbmlzaGVkCiYjNDM7CQkJCSAgKiAmbHQ7MDogdW5yZWdpc3RlcmF0aW9uIG9uZ29pbmcvZmluaXNoZWQKJiM0MzsJCQkJICAqLwogCQlpbnQgdHlwZTsKIAkJc3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7Ci0JCXVuc2lnbmVkIGludCBsYXN0X2JyaWdodG5lc3M7CiYjNDM7CQl1bnNpZ25lZCBpbnQgbGFzdF9od19icmlnaHRuZXNzOwomIzQzOwkJc3RydWN0IG11dGV4IG11dGV4OyAvKiBwcm90ZWN0cyBicmlnaHRuZXNzIHRyYWNraW5nICovCiAJfSBrYmRfYmw7CiAJc3RydWN0IHsKIAkJYm9vbCBpbml0aWFsaXplZDsKQEAgLTE1OTIsNyAmIzQzOzE2MjQsMjQgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShpbnQgdHlwZSkKIAlyZXR1cm4gKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFKSB8fCAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyk7CiB9CiAKLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2Uoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpCiYjNDM7ewomIzQzOwkvKiBPZmYsIGxvdyBvciBoaWdoICovCiYjNDM7CWlmIChod19icmlnaHRuZXNzICZsdDs9IHByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpCiYjNDM7CQlyZXR1cm4gaHdfYnJpZ2h0bmVzczsKJiM0MzsKJiM0MzsJLyogQXV0byAoY29udHJvbGxlZCBieSBFQyBhY2NvcmRpbmcgdG8gQUxTKSwgcmVwb3J0IGFzIG9mZiAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7a2JkX2JsLnR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8gJmFtcDsmYW1wOwomIzQzOwkgICAgaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogVW5rbm93biB2YWx1ZSAqLwomIzQzOwlkZXZfd2FybigmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LAomIzQzOwkJICYjMzQ7VW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVkJiMzNDssIGh3X2JyaWdodG5lc3MpOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJaW50IGVycjsKQEAgLTE2MDYsMjEgJiM0MzsxNjU1LDcgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQkvKiBDb252ZXJ0IHJldHVybmVkIHZhbHVlIHRvIGJyaWdodG5lc3MgbGV2ZWwgKi8KLQkJdmFsdWUgPSBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7Ci0KLQkJLyogT2ZmLCBsb3cgb3IgaGlnaCAqLwotCQlpZiAodmFsdWUgJmx0Oz0gcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcykKLQkJCXJldHVybiB2YWx1ZTsKLQotCQkvKiBBdXRvLCByZXBvcnQgYXMgb2ZmICovCi0JCWlmICh2YWx1ZSA9PSBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzICYjNDM7IDEpCi0JCQlyZXR1cm4gMDsKLQotCQkvKiBVbmtub3duIHZhbHVlICovCi0JCWRldl93YXJuKCZhbXA7cHJpdi0mZ3Q7cGxhdGZvcm1fZGV2aWNlLSZndDtkZXYsCi0JCQkgJiMzNDtVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWx1JiMzNDssIHZhbHVlKTsKLQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlyZXR1cm4gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpOwogCX0KIAogCWVyciA9IGV2YWxfaGFscyhwcml2LSZndDthZGV2LSZndDtoYW5kbGUsICZhbXA7dmFsdWUpOwpAQCAtMTYzMCw2ICYjNDM7MTY2NSwxNiBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiAJcmV0dXJuICEhdGVzdF9iaXQoSEFMU19LQkRfQkxfU1RBVEVfQklULCAmYW1wO3ZhbHVlKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7CiYjNDM7CiYjNDM7CWlmIChod19icmlnaHRuZXNzICZsdDsgMCkKJiM0MzsJCXJldHVybiBod19icmlnaHRuZXNzOwomIzQzOwomIzQzOwlyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIHsKIAlzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTsKQEAgLTE2MzcsOTkgJiM0MzsxNjgyLDIwNyBAQCBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYQogCXJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTsKIH0KIAotc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcykKJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsCiYjNDM7CQkJCQkgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpCiB7Ci0JaW50IGVycjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCB0eXBlID0gcHJpdi0mZ3Q7a2JkX2JsLnR5cGU7CiYjNDM7CWludCBlcnI7CiAKLQlpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHsKLQkJaWYgKGJyaWdodG5lc3MgJmd0OyBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKQotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ByaXYtJmd0O2tiZF9ibC5tdXRleCk7CiAKLQkJdmFsdWUgPSBGSUVMRF9QUkVQKEtCRF9CTF9TRVRfQlJJR0hUTkVTUywgYnJpZ2h0bmVzcykgfAomIzQzOwlpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHsKJiM0MzsJCXZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGh3X2JyaWdodG5lc3MpIHwKIAkJCUZJRUxEX1BSRVAoS0JEX0JMX0NPTU1BTkRfVFlQRSwgdHlwZSkgfAogCQkJS0JEX0JMX0NPTU1BTkRfU0VUOwogCQllcnIgPSBleGVjX2tibGMocHJpdi0mZ3Q7YWRldi0mZ3Q7aGFuZGxlLCB2YWx1ZSk7CiAJfSBlbHNlIHsKLQkJZXJyID0gZXhlY19zYWxzKHByaXYtJmd0O2FkZXYtJmd0O2hhbmRsZSwgYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGKTsKJiM0MzsJCXZhbHVlID0gaHdfYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGOwomIzQzOwkJZXJyID0gZXhlY19zYWxzKHByaXYtJmd0O2FkZXYtJmd0O2hhbmRsZSwgdmFsdWUpOwogCX0KLQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlwcml2LSZndDtrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKJiM0MzsJcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7CiAKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlpZiAoYnJpZ2h0bmVzcyAmZ3Q7IHByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJCQkgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKIHsKIAlzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTsKIAomIzQzOwkvKgomIzQzOwkgKiBXaGVuIHVucmVnaXN0ZXJpbmc6IEl0IG11c3QgYmUgdGhlIHNpZGUgZWZmZWN0IG9mIExFRCB1bnJlZ2lzdHJhdGlvbgomIzQzOwkgKiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSYjMzk7dmUgc2V0IExFRF9SRVRBSU5fQVRfU0hVVERPV04KJiM0MzsJICogdG8gcmV0YWluIGxlZF9jZGV2IGJyaWdodG5lc3MgbGV2ZWwuIFRvIGRvIHRoZSBzYW1lIGZvciBhdXRvIG1vZGUsCiYjNDM7CSAqIGdhdGUgY2hhbmdlcyBhbmQgcmV0dXJuIGVhcmx5LgomIzQzOwkgKgomIzQzOwkgKiBJdCYjMzk7cyBuZWVkbGVzcyB0byBnYXRlIGNoYW5nZXMgd2hlbiBpbml0aWFsaXppbmcsIGFzIHRoZXJlIG1heSBiZSBhCiYjNDM7CSAqIHRpbWUgbWFyZ2luIGJldHdlZW4gc3lzZnMgYXR0cmlidXRlIGNyZWF0aW9uIGFuZCBzdGF0ZSBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkocHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ByaXYtJmd0O2tiZF9ibC5tdXRleCk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGVkX2h3X3RyaWdnZXJfdHlwZSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlciA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O2lkZWFwYWQtYXV0byYjMzQ7LAomIzQzOwkudHJpZ2dlcl90eXBlID0gJmFtcDtpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZSwKJiM0MzsJLmFjdGl2YXRlID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlLAomIzQzOwkub2ZmbG9hZGVkID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsCiYjNDM7CQkJCQkgICAgIHVuc2lnbmVkIGludCBod19icmlnaHRuZXNzKQomIzQzO3sKJiM0MzsJYm9vbCBod19jb250cm9sLCBsYXN0X2h3X2NvbnRyb2w7CiYjNDM7CiYjNDM7CWlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgfHwgcHJpdi0mZ3Q7a2JkX2JsLnR5cGUgIT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWh3X2NvbnRyb2wgPSBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUzsKJiM0MzsJbGFzdF9od19jb250cm9sID0gcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7CiYjNDM7CiYjNDM7CWlmIChod19jb250cm9sICE9IGxhc3RfaHdfY29udHJvbCkKJiM0MzsJCWxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoJmFtcDtwcml2LSZndDtrYmRfYmwubGVkLCBod19jb250cm9sKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnkoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIHsKLQlpbnQgYnJpZ2h0bmVzczsKJiM0MzsJaW50IGh3X2JyaWdodG5lc3MsIGJyaWdodG5lc3M7CiAKLQlpZiAoIXByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCkKJiM0MzsJaWYgKHVubGlrZWx5KHByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCAmbHQ7PSAwKSkKIAkJcmV0dXJuOwogCi0JYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpOwotCWlmIChicmlnaHRuZXNzICZsdDsgMCkKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cHJpdi0mZ3Q7a2JkX2JsLm11dGV4KTsKJiM0MzsKJiM0MzsJaHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpOwomIzQzOwlpZiAoaHdfYnJpZ2h0bmVzcyAmbHQ7IDApCiAJCXJldHVybjsKIAotCWlmIChicmlnaHRuZXNzID09IHByaXYtJmd0O2tiZF9ibC5sYXN0X2JyaWdodG5lc3MpCiYjNDM7CWJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpOwomIzQzOwlpZiAoYnJpZ2h0bmVzcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm47IC8qIFJlamVjdCBpbnNhbmUgdmFsdWVzIGVhcmx5LiAqLwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7a2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBod19icmlnaHRuZXNzKQogCQlyZXR1cm47CiAKLQlwcml2LSZndDtrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKJiM0MzsJaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2wocHJpdiwgaHdfYnJpZ2h0bmVzcyk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2tiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzOwogCiAJbGVkX2NsYXNzZGV2X25vdGlmeV9icmlnaHRuZXNzX2h3X2NoYW5nZWQoJmFtcDtwcml2LSZndDtrYmRfYmwubGVkLCBicmlnaHRuZXNzKTsKIH0KIAogc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9pbml0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiB7Ci0JaW50IGJyaWdodG5lc3MsIGVycjsKJiM0MzsJaW50IGh3X2JyaWdodG5lc3MsIGVycjsKIAogCWlmICghcHJpdi0mZ3Q7ZmVhdHVyZXMua2JkX2JsKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChXQVJOX09OKHByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCkpCiYjNDM7CWlmIChXQVJOX09OKHByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCAmZ3Q7IDApKQogCQlyZXR1cm4gLUVFWElTVDsKIAotCWlmIChpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShwcml2LSZndDtrYmRfYmwudHlwZSkpCi0JCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyOwotCWVsc2UKLQkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7CiYjNDM7CXByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCA9IDA7CiAKLQlicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7Ci0JaWYgKGJyaWdodG5lc3MgJmx0OyAwKQotCQlyZXR1cm4gYnJpZ2h0bmVzczsKJiM0MzsJZXJyID0gZGV2bV9tdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7cGxhdGZvcm1fZGV2aWNlLSZndDtkZXYsICZhbXA7cHJpdi0mZ3Q7a2JkX2JsLm11dGV4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGh3X2JyaWdodG5lc3M7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2tiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzOwogCi0JcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CiAJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5uYW1lICAgICAgICAgICAgICAgICAgICA9ICYjMzQ7cGxhdGZvcm06OiYjMzQ7IExFRF9GVU5DVElPTl9LQkRfQkFDS0xJR0hUOwogCXByaXYtJmd0O2tiZF9ibC5sZWQuYnJpZ2h0bmVzc19nZXQgICAgICAgICAgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldDsKIAlwcml2LSZndDtrYmRfYmwubGVkLmJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQ7CiAJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5mbGFncyAgICAgICAgICAgICAgICAgICA9IExFRF9CUklHSFRfSFdfQ0hBTkdFRCB8IExFRF9SRVRBSU5fQVRfU0hVVERPV047CiAKJiM0MzsJc3dpdGNoIChwcml2LSZndDtrYmRfYmwudHlwZSkgewomIzQzOwljYXNlIEtCRF9CTF9UUklTVEFURV9BVVRPOgomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7CiYjNDM7CiYjNDM7CQlpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKSB7CiYjNDM7CQkJZGV2X3dhcm4oJmFtcDtwcml2LSZndDtwbGF0Zm9ybV9kZXZpY2UtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7Q2Fubm90IHByb3ZpZGUgTEVEIHRyaWdnZXIgJXMgZm9yIGtleWJvYXJkIGJhY2tsaWdodFxuJiMzNDssCiYjNDM7CQkJCSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLmZsYWdzIHw9IExFRF9UUklHX0hXX0NIQU5HRUQ7CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLnRyaWdnZXJfdHlwZSA9ICZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLmh3X2NvbnRyb2xfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lOwomIzQzOwomIzQzOwkJLyogSGFyZHdhcmUgcmVtZW1iZXJzIHRoZSBsYXN0IGJyaWdodG5lc3MgbGV2ZWwsIGluY2x1ZGluZyBhdXRvIG1vZGUuICovCiYjNDM7CQlpZiAoaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpCiYjNDM7CQkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5kZWZhdWx0X3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTsKJiM0MzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEtCRF9CTF9UUklTVEFURToKJiM0MzsJCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgS0JEX0JMX1NUQU5EQVJEOgomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qIFRoaXMgaGFzIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYnkgaWRlYXBhZF9jaGVja19mZWF0dXJlcygpLiAqLwomIzQzOwkJdW5yZWFjaGFibGUoKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBSZWplY3QgaW5zYW5lIHZhbHVlcy4gKi8KJiM0MzsJZXJyID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LCAmYW1wO3ByaXYtJmd0O2tiZF9ibC5sZWQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgPSB0cnVlOwomIzQzOwlwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgPSAxOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX2V4aXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIHsKLQlpZiAoIXByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCkKJiM0MzsJaWYgKHByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCAmbHQ7PSAwKQogCQlyZXR1cm47CiAKLQlwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKJiM0MzsJcHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkID0gLTE7CiAKIAlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmYW1wO3ByaXYtJmd0O2tiZF9ibC5sZWQpOwogfQpAQCAtMjU0OCwxNyAmIzQzOzI3MDEsMzAgQEAgc3RhdGljIGludCBfX2luaXQgaWRlYXBhZF9sYXB0b3BfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKJiM0MzsJZXJyID0gbGVkX3RyaWdnZXJfcmVnaXN0ZXIoJmFtcDtpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIExFRCB0cmlnZ2VyICVzOiAlZFxuJiMzNDssCiYjNDM7CQkJaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUsIGVycik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBpZGVhcGFkX3dtaV9kcml2ZXJfcmVnaXN0ZXIoKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnJfbGVkdHJpZzsKIAogCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYW1wO2lkZWFwYWRfYWNwaV9kcml2ZXIpOwotCWlmIChlcnIpIHsKLQkJaWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTsKLQkJcmV0dXJuIGVycjsKLQl9CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl93bWk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfd21pOgomIzQzOwlpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpOwomIzQzO2Vycl9sZWR0cmlnOgomIzQzOwlpZiAoaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpCiYjNDM7CQlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKCZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIG1vZHVsZV9pbml0KGlkZWFwYWRfbGFwdG9wX2luaXQpCiAKQEAgLTI1NjYsNiAmIzQzOzI3MzIsOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgaWRlYXBhZF9sYXB0b3BfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhbXA7aWRlYXBhZF9hY3BpX2RyaXZlcik7CiAJaWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTsKJiM0MzsKJiM0MzsJaWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKQomIzQzOwkJbGVkX3RyaWdnZXJfdW5yZWdpc3RlcigmYW1wO2lkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7CiB9CiBtb2R1bGVfZXhpdChpZGVhcGFkX2xhcHRvcF9leGl0KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMuaCBiL2luY2x1ZGUvbGludXgvbGVkcy5oCmluZGV4IGE1MTVmMDc1YzI5YTEuLjkzYjNmZDdlNTYzNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGVkcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbGVkcy5oCkBAIC0xMDksNiAmIzQzOzEwOSw3IEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYgewogI2RlZmluZSBMRURfSU5JVF9ERUZBVUxUX1RSSUdHRVIgQklUKDIzKQogI2RlZmluZSBMRURfUkVKRUNUX05BTUVfQ09ORkxJQ1QgQklUKDI0KQogI2RlZmluZSBMRURfTVVMVElfQ09MT1IJCUJJVCgyNSkKJiM0MzsjZGVmaW5lIExFRF9UUklHX0hXX0NIQU5HRUQJQklUKDI2KQogCiAJLyogc2V0X2JyaWdodG5lc3Nfd29yayAvIGJsaW5rX3RpbWVyIGZsYWdzLCBhdG9taWMsIHByaXZhdGUuICovCiAJdW5zaWduZWQgbG9uZwkJd29ya19mbGFnczsKQEAgLTIzOSw2ICYjNDM7MjQwLDExIEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYgewogCXN0cnVjdCBrZXJuZnNfbm9kZQkqYnJpZ2h0bmVzc19od19jaGFuZ2VkX2tuOwogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzOwlib29sCQkJdHJpZ2dlcnNfaHdfY2hhbmdlZDsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yazsKJiM0MzsjZW5kaWYKJiM0MzsKIAkvKiBFbnN1cmVzIGNvbnNpc3RlbnQgYWNjZXNzIHRvIHRoZSBMRUQgY2xhc3MgZGV2aWNlICovCiAJc3RydWN0IG11dGV4CQlsZWRfYWNjZXNzOwogfTsKQEAgLTQ4NSw2ICYjNDM7NDkxLDcgQEAgc3RydWN0IGxlZF90cmlnZ2VyIHsKIAljb25zdCBjaGFyCSAqbmFtZTsKIAlpbnQJCSgqYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIAl2b2lkCQkoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0MzsJYm9vbAkJKCpvZmZsb2FkZWQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIAogCS8qIEJyaWdodG5lc3Mgc2V0IGJ5IGxlZF90cmlnZ2VyX2V2ZW50ICovCiAJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzOwpAQCAtNTMzLDYgJiM0Mzs1NDAsOSBAQCB2b2lkIGxlZF90cmlnZ2VyX2JsaW5rX29uZXNob3Qoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyLAogdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpOwogdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwomIzQzOwomIzQzO2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfc2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkJdm9pZCAqdHJpZ2dlcl9kYXRhKQpAQCAtNTg0LDYgJiM0Mzs1OTQsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgKmxlZF9nZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogewpAQCAtNTk4LDYgJiM0Mzs2MTUsMTMgQEAgbGVkX3RyaWdnZXJfZ2V0X2JyaWdodG5lc3MoY29uc3Qgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKQogCiAjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlMgKi8KIAomIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VECiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkJCQkgYm9vbCBhY3RpdmF0ZSkge30KJiM0MzsjZW5kaWYKJiM0MzsKIC8qIFRyaWdnZXIgc3BlY2lmaWMgZW51bSAqLwogZW51bSBsZWRfdHJpZ2dlcl9uZXRkZXZfbW9kZXMgewogCVRSSUdHRVJfTkVUREVWX0xJTksgPSAwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5OTUKCQkJCQkJCW91dHB1dDogMjI1CgkJCQkJCQl0aG91Z2h0czogMjAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIExFRCB0cmlnZ2VyIHBhdGNoLiBNeSBpbml0aWFsIGZvY3VzIGlzIGFsd2F5cyBvbiBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKVGhpcyBwYXRjaCBpcyBwcmV0dHkgZm9jdXNlZC4gSXQmIzM5O3MgYWRkaW5nIGEgbmV3IGB0cmlnZ2VyX21heV9vZmZsb2FkYCBzeXNmcyBhdHRyaWJ1dGUgdG8gdGhlIExFRCBjbGFzcywgYSBjb3JyZXNwb25kaW5nIGBvZmZsb2FkZWRgIGNhbGxiYWNrIGluIHRoZSBgbGVkX3RyaWdnZXJgIHN0cnVjdHVyZSwgYW5kIGltcGxlbWVudGluZyBhIG1lY2hhbmlzbSBmb3IgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMuIENyaXRpY2FsbHksIGl0IHRoZW4gaW50ZWdyYXRlcyB0aGlzIHdpdGggc2V2ZXJhbCBzcGVjaWZpYyBkcml2ZXJzOiBgbGVkcy1jcm9zX2VjYCwgYGxlZHMtdHVycmlzLW9tbmlhYCwgYGxlZHRyaWctbmV0ZGV2YCwgYW5kIHRoZSBgaWRlYXBhZC1sYXB0b3BgLiBUaGF0IGxhc3Qgb25lIGNhdGNoZXMgbXkgZXllIOKAkyBBQ1BJIGFuZCBrZXlib2FyZCBiYWNrbGlnaHRzIGNhbiBiZSB0b3VjaHkgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLgoKU28sIGZpcnN0LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlLiBJIGltbWVkaWF0ZWx5IGxvb2sgYXQgdGhhdCBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCBmdW5jdGlvbi4gVGhlIGBzeXNmc19lbWl0YCBzZWVtcyBzYWZlIGhlcmUuIEkgYW0gdmVyaWZ5aW5nIHRoYXQgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tTlVMTCB3aGVuIHJlYWQuIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2hlY2tzIGZvciB0aGlzIGNvbmRpdGlvbiBpbiBgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZWAsIHNvIHRoZSBzeXNmcyBlbnRyeSB3aWxsIG5vdCBiZSBjcmVhdGVkLiBgb2ZmbG9hZGVkYCBhbmQgYGhpdGAgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBib29sZWFucy4gSXQmIzM5O3MgYWxsIGxvb2tpbmcgZ29vZCBzbyBmYXIuCgpOb3cgSSBkZWx2ZSBpbnRvIGBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLiBUaGlzIG9uZSBpcyBrZXksIGFzIGl0IGRldGVybWluZXMgaWYgYSB0cmlnZ2VyIGlzIGNvbnNpZGVyZWQgJiMzNDtvZmZsb2FkZWQuJiMzNDsgVGhlIGNvZGUgZG9lcyBhIGRlY2VudCBqb2IgY2hlY2tpbmcgZm9yIE5VTEwgdHJpZ2dlcnMgYW5kIGVuc3VyZXMgdGhlIHRyaWdnZXIgbmFtZSBtYXRjaGVzLiBJdCBhbHNvIGhhcyBhIGZhbGwtYmFjayBpZiB0aGUgdHJpZ2dlciBkb2VzIG5vdCBpbXBsZW1lbnQgYG9mZmxvYWRlZGAsIHNvIGl0IGlzIGxvb2tpbmcgbGlrZSB0aGUgY29kZSBpcyBoYW5kbGluZyBhbGwgcG9zc2libGUgcmV0dXJuIHBhdGhzLgoKVGhlbiBJIGNoZWNrIHRoZSB3b3JrcXVldWUgaW4gYGxlZC10cmlnZ2Vycy5jYC4gYGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXJgIHJlYWRzIGBsZWRjZGV2LSZndDt0cmlnZ2Vyc19od19jaGFuZ2VkYC4gSSYjMzk7bSBjaGVja2luZyB0aGUgaW5pdGlhbGl6YXRpb24uIFRoZSB2YXJpYWJsZSBpcyB3cml0dGVuIHVzaW5nIGBXUklURV9PTkNFYCBpbiBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgYW5kIGlzIGluaXRpYWxpemVkIGluIGBsZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0YC4gVGhpcyBsb29rcyBzb3VuZDsgdGhlIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCBwYWlyIGlzIGNvcnJlY3QgZm9yIHdvcmtxdWV1ZSBpbnRlcmFjdGlvbi4KCk5leHQsIEkgcmV2aWV3IHRoZSBgaWRlYXBhZC1sYXB0b3AuY2AgY29kZTsgSSBhbSBtYWtpbmcgc3VyZSB0aGUgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBmcm9tIEFDUEkgY2FsbHMuIEFmdGVyIHF1aWNrbHkgc2Nhbm5pbmcsIEkgZmluZCB0aGF0IEFDUEkgbWV0aG9kIGNhbGxzIGFyZSBjaGVja2VkLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHJlYWQuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MsIEkmIzM5O20gY2hlY2tpbmcgZm9yIGFueSBgY29weV90b191c2VyYCwgbmV0bGluayBtZXNzYWdlcywgc29ja2V0IG9wZXJhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcywgb3IgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gc3lzZnMgb3V0cHV0cyBhbmQgaW50ZXJuYWwgY2FsbGJhY2tzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyByZWxhdGVkIHRvIG5ldHdvcmtpbmcsIEJQRiwgb3IgZGlyZWN0IHVzZXItc3BhY2UgbWVtb3J5IGNvcGllcy4gVGhlIG9ubHkgaW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2UgaXMgdmlhIGBzeXNmc19lbWl0YCwgd2hpY2ggY29uc3RydWN0cyBzdHJpbmdzLiBUaGUgZGF0YSB0eXBlcyBhcmUgYmFzaWMgaW50cywgYm9vbGVhbnMsIGFuZCBpbml0aWFsaXplZCBzdHJ1Y3RzLiBJIHNlZSBubyBkaXJlY3QgdGhyZWF0cy4KCk5vdyBJIGFtIGdvaW5nIHRocm91Z2ggdGhlIGNyaXRlcmlhIGZvciBLTVNBTi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9ucyBhcmU6IGRvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IEFyZSB0aGVyZSBhbnkgYnJhbmNoaW5nIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGE/IEFyZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gRG9lcyB0aGUgY29kZSBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPwoKQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBJIGFtIGNvbmNsdWRpbmcgdGhhdCBhbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIHRoZXJlIGFyZSBubyBpbmZvLWxlYWtzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgdGh1cyBJIGFtIGNvbmZpZGVudCBpbiB0aGlzIGNvbmNsdXNpb24uIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtY29udHJvbGxlZCBMRUQgdHJpZ2dlciBvZmZsb2FkIGluZnJhc3RydWN0dXJlLCB0aGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZSwgaGFyZHdhcmUgdHJpZ2dlciB0cmFuc2l0aW9uIG5vdGlmaWNhdGlvbnMgdmlhIGEgd29ya3F1ZXVlLCBhbmQgdXBkYXRlcyBkcml2ZXJzIGluY2x1ZGluZyBpZGVhcGFkLWxhcHRvcCBhbmQgbGVkcy1jcm9zX2VjLlxuXG4xLiBObyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBidWZmZXJzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcy4gVXNlcnNwYWNlIGV4cG9zdXJlIGlzIGxpbWl0ZWQgdG8gc3RhbmRhcmQgc3lzZnNfZW1pdCBzdHJpbmcgZm9ybWF0dGluZy5cbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdCBmaWVsZHMgKGUuZy4sIHRyaWdnZXJzX2h3X2NoYW5nZWQsIGxhc3RfaHdfYnJpZ2h0bmVzcywgaHdfYnJpZ2h0bmVzcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBicmFuY2hpbmcuXG4zLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nIChzdWNoIGFzIHdvcmtxdWV1ZSBmbHVzaC9kZXN0cnVjdGlvbiBhbmQgbXV0ZXgvcndzZW0gbG9ja3MpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtY29udHJvbGxlZCBMRUQgdHJpZ2dlciBvZmZsb2FkIGluZnJhc3RydWN0dXJlLCB0aGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZSwgaGFyZHdhcmUgdHJpZ2dlciB0cmFuc2l0aW9uIG5vdGlmaWNhdGlvbnMgdmlhIGEgd29ya3F1ZXVlLCBhbmQgdXBkYXRlcyBkcml2ZXJzIGluY2x1ZGluZyBpZGVhcGFkLWxhcHRvcCBhbmQgbGVkcy1jcm9zX2VjLlxuXG4xLiBObyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBidWZmZXJzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcy4gVXNlcnNwYWNlIGV4cG9zdXJlIGlzIGxpbWl0ZWQgdG8gc3RhbmRhcmQgc3lzZnNfZW1pdCBzdHJpbmcgZm9ybWF0dGluZy5cbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdCBmaWVsZHMgKGUuZy4sIHRyaWdnZXJzX2h3X2NoYW5nZWQsIGxhc3RfaHdfYnJpZ2h0bmVzcywgaHdfYnJpZ2h0bmVzcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBicmFuY2hpbmcuXG4zLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nIChzdWNoIGFzIHdvcmtxdWV1ZSBmbHVzaC9kZXN0cnVjdGlvbiBhbmQgbXV0ZXgvcndzZW0gbG9ja3MpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjI6MjcuOTA4ODUyMTYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxOTUxNTA5NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FV19MRURTXCIsXG4gICAgXCJMRURTX0NMQVNTXCIsXG4gICAgXCJMRURTX1RSSUdHRVJTXCIsXG4gICAgXCJMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcIixcbiAgICBcIkxFRFNfVFJJR0dFUl9ORVRERVZcIixcbiAgICBcIkxFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXCIsXG4gICAgXCJJREVBUEFEX0xBUFRPUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd1wiLFxuICAgIFwibGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xcIixcbiAgICBcImxlZF90cmlnZ2VyX3NldFwiLFxuICAgIFwibGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1jb250cm9sbGVkIExFRCB0cmlnZ2VyIG9mZmxvYWQgaW5mcmFzdHJ1Y3R1cmUsIHRoZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgc3lzZnMgYXR0cmlidXRlLCBoYXJkd2FyZSB0cmlnZ2VyIHRyYW5zaXRpb24gbm90aWZpY2F0aW9ucyB2aWEgYSB3b3JrcXVldWUsIGFuZCB1cGRhdGVzIGRyaXZlcnMgaW5jbHVkaW5nIGlkZWFwYWQtbGFwdG9wIGFuZCBsZWRzLWNyb3NfZWMuXFxuXFxuMS4gTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgYnVmZmVycyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMuIFVzZXJzcGFjZSBleHBvc3VyZSBpcyBsaW1pdGVkIHRvIHN0YW5kYXJkIHN5c2ZzX2VtaXQgc3RyaW5nIGZvcm1hdHRpbmcuXFxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RydWN0IGZpZWxkcyAoZS5nLiwgdHJpZ2dlcnNfaHdfY2hhbmdlZCwgbGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJyYW5jaGluZy5cXG4zLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nIChzdWNoIGFzIHdvcmtxdWV1ZSBmbHVzaC9kZXN0cnVjdGlvbiBhbmQgbXV0ZXgvcndzZW0gbG9ja3MpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBzeXNmcyBhdHRyaWJ1dGUgKHRyaWdnZXJfbWF5X29mZmxvYWQpIGZvciBxdWVyeWFibGUgaGFyZHdhcmUtb2ZmbG9hZGVkIExFRCB0cmlnZ2VycywgdXBkYXRlcyBjb3JlIGJyaWdodG5lc3MgZ2V0L3NldCBsb2NraW5nIGFuZCB0cmlnZ2VyIHJlbW92YWwgbG9naWMsIGFuZCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gTEVEIHRyaWdnZXIgZHJpdmVycy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIExFRCBjbGFzcy90cmlnZ2VyIHN5c2ZzIGludGVyZmFjZXMgYW5kIGNvcmUgdHJpZ2dlciBsaWZlY3ljbGUgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIyOjI3LjkwODg1Njc5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NzA1MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDA3YTVlM2M5MjExNGM3NTQ1MzE3MmE5NDUyYWI3YTI1YmMzNGI1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjIyOjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcXG5pbmRleCBkNGM5MThjYzExYTEyLi45NGMzMzFkOWM0MTA1IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcXG5AQCAtNzgsNiArNzgsMzEgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdCh3aGljaCB3b3VsZCBvZnRlbiBiZSBjb25maWd1cmVkIGluIHRoZSBkZXZpY2UgdHJlZSBmb3IgdGhlXFxuIFxcdFxcdGhhcmR3YXJlKS5cXG4gXFxuK1doYXQ6XFx0XFx0L3N5cy9jbGFzcy9sZWRzL1xcdTAwM2NsZWRcXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRcXG4rRGF0ZTpcXHRcXHRTZXB0ZW1iZXIgMjAyNlxcbitLZXJuZWxWZXJzaW9uOlxcdDcuNFxcbitDb250YWN0OlxcdGxpbnV4LWxlZHNAdmdlci5rZXJuZWwub3JnXFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHROYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cXG4rXFx0XFx0U3VjaCB0cmlnZ2VycyBhcmUgYWxzbyBjYWxsZWQgXFxcImhhcmR3YXJlIGNvbnRyb2wgdHJpZ2dlclxcXCIgaW4gc29tZVxcbitcXHRcXHRjb250ZXh0LlxcbitcXG4rXFx0XFx0T25seSBleGlzdHMgd2hlbiB0aGUgTEVEIHN1cHBvcnRzIHRyaWdnZXIgb2ZmbG9hZC5cXG4rXFxuK1xcdFxcdFJlYWRpbmcgdGhpcyBmaWxlIHJldHVybnMgYSBsaXN0IG9mIHRyaWdnZXJzIHRoYXQgYXJlIGNhcGFibGUgdG9cXG4rXFx0XFx0YmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWVcXG4rXFx0XFx0aW5kaWNhdGUgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHRyaWdnZXI6XFxuK1xcbitcXHRcXHQtIGBmb29fdHJpZ2dlcmA6IHRoZSB0cmlnZ2VyIGlzIG5vdCBzZWxlY3RlZC5cXG4rXFx0XFx0LSBgXFx1MDAzY2Zvb190cmlnZ2VyXFx1MDAzZWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkLCBidXQgZmFsbHMgYmFjayB0b1xcbitcXHRcXHQgIHNvZnR3YXJlIGJsaW5rIGZvciBzb21lIHJlYXNvbiAoZS5nLiwgaW5jb21wYXRpYmxlIHRyaWdnZXJcXG4rXFx0XFx0ICBwYXJhbWV0ZXJzKVxcbitcXHRcXHQtIGBbZm9vX3RyaWdnZXJdYDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQgYW5kIG9mZmxvYWRlZCB0b1xcbitcXHRcXHQgIGhhcmR3YXJlLlxcbitcXG4rXFx0XFx0VGhlIFxcXCJuZXRkZXZcXFwiIHRyaWdnZXIgYWxzbyBwcm92aWRlcyBhIGN1c3RvbSBhdHRyaWJ1dGUgdG9cXG4rXFx0XFx0aW5kaWNhdGUgaXRzIHN0YXRlLCBzZWUgYC9zeXMvY2xhc3MvbGVkcy9cXHUwMDNjbGVkXFx1MDAzZS9vZmZsb2FkZWRgLlxcbitcXG4gV2hhdDpcXHRcXHQvc3lzL2NsYXNzL2xlZHMvXFx1MDAzY2xlZFxcdTAwM2UvaW52ZXJ0ZWRcXG4gRGF0ZTpcXHRcXHRKYW51YXJ5IDIwMTFcXG4gS2VybmVsVmVyc2lvbjpcXHQyLjYuMzhcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXYgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxcbmluZGV4IGVkNDZiMzdhYjhhMjguLmE1MTQ2ZWExZTNlNjEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxcbkBAIC03NSw2ICs3NSw5IEBAIERlc2NyaXB0aW9uOlxcbiBcXHRcXHRJZiAxLCB0aGUgTEVEIGJsaW5raW5nIGluIHJlcXVlc3RlZCBtb2RlIGlzIG9mZmxvYWRlZCB0b1xcbiBcXHRcXHRoYXJkd2FyZS5cXG4gXFxuK1xcdFxcdExFRCB0cmlnZ2VyIGNvcmUgYWxzbyBwcm92aWRlcyBhIGdlbmVyaWMgYXR0cmlidXRlIGZvciB0aGlzXFxuK1xcdFxcdHB1cnBvc2UsIHNlZSBgL3N5cy9jbGFzcy9sZWRzL1xcdTAwM2NsZWRcXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRgLlxcbitcXG4gV2hhdDpcXHRcXHQvc3lzL2NsYXNzL2xlZHMvXFx1MDAzY2xlZFxcdTAwM2UvbGlua18xMFxcbiBEYXRlOlxcdFxcdEp1biAyMDIzXFxuIEtlcm5lbFZlcnNpb246XFx0Ni41XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxcbmluZGV4IDM5MTM5NjZjZmRhYzAuLmFkYmM1N2I5ZjQ5YzMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0XFxuQEAgLTI0Miw2ICsyNDIsOSBAQCBvcHMgYW5kIG5lZWRzIHRvIGRlY2xhcmUgc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIHN1cHBvcnRlZCB0cmlnZ2Vycy5cXG4gXFxuIFdpdGggaHcgY29udHJvbCB3ZSByZWZlciB0byB0aGUgTEVEIGRyaXZlbiBieSBoYXJkd2FyZS5cXG4gXFxuK0Egc3lzZnMgYXR0cmlidXRlIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBpcyBwcm92aWRlZCBmb3IgdXNlcnNwYWNlIHRvXFxuK3F1ZXJ5IHN1cHBvcnRlZCB0cmlnZ2VycyBhbmQgdGhlaXIgc3RhdGVzLlxcbitcXG4gTEVEIGRyaXZlciBtdXN0IGRlZmluZSB0aGUgZm9sbG93aW5nIHZhbHVlIHRvIHN1cHBvcnQgaHcgY29udHJvbDpcXG4gXFxuICAgICAtIGh3X2NvbnRyb2xfdHJpZ2dlcjpcXG5AQCAtMjk4LDYgKzMwMSwxNSBAQCBMRUQgZHJpdmVyIG11c3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgQVBJIHRvIHN1cHBvcnQgaHcgY29udHJvbDpcXG4gICAgICAgICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGRldmljZSBvciBOVUxMIGlmIG5vdGhpbmdcXG4gICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBhdHRhY2hlZC5cXG4gXFxuK0xFRCB0cmlnZ2VyIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gaW5kaWNhdGUgaHcgY29udHJvbDpcXG4rICAgIC0gb2ZmbG9hZGVkOlxcbisgICAgICAgICAgICAgICAgcmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0cmlnZ2VyIGlzIGN1cnJlbnRseVxcbisgICAgICAgICAgICAgICAgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLlxcbitcXG4rICAgICAgICAgICAgICAgIElmIGEgdHJpZ2dlciBkb2Vzbid0IGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLCB0aGUgZGVmYXVsdFxcbisgICAgICAgICAgICAgICAgdmFsdWUgd2lsbCBiZSB0cnVlIGZvciBwcml2YXRlIHRyaWdnZXJzIGFuZCBmYWxzZSBmb3IgZ2VuZXJpY1xcbisgICAgICAgICAgICAgICAgb25lcy5cXG4rXFxuIExFRCBkcml2ZXIgY2FuIGFjdGl2YXRlIGFkZGl0aW9uYWwgbW9kZXMgYnkgZGVmYXVsdCB0byB3b3JrYXJvdW5kIHRoZVxcbiBpbXBvc3NpYmlsaXR5IG9mIHN1cHBvcnRpbmcgZWFjaCBkaWZmZXJlbnQgbW9kZSBvbiB0aGUgc3VwcG9ydGVkIHRyaWdnZXIuXFxuIEV4YW1wbGVzIGFyZSBoYXJkY29kaW5nIHRoZSBibGluayBzcGVlZCB0byBhIHNldCBpbnRlcnZhbCwgZW5hYmxlIHNwZWNpYWxcXG5AQCAtMzExLDkgKzMyMyw2OSBAQCB0aGUgZW5kIHVzZSBod19jb250cm9sX3NldCB0byBhY3RpdmF0ZSBodyBjb250cm9sLlxcbiBBIHRyaWdnZXIgY2FuIHVzZSBod19jb250cm9sX2dldCB0byBjaGVjayBpZiBhIExFRCBpcyBhbHJlYWR5IGluIGh3IGNvbnRyb2xcXG4gYW5kIGluaXQgdGhlaXIgZmxhZ3MuXFxuIFxcbitBbHRlcm5hdGl2ZWx5LCBhIHByaXZhdGUgdHJpZ2dlciBjYW4gYmUgaW1wbGVtZW50ZWQgYWxvbmcgd2l0aCB0aGUgTEVEIGRyaXZlciBpZlxcbit0aGUgTEVEJ3MgaGFyZHdhcmUgY29udHJvbCBkb2Vzbid0IGZpdCBhbnkgZ2VuZXJpYyB0cmlnZ2VyLiBUbyBhc3NvY2lhdGUgdGhlXFxuK3ByaXZhdGUgdHJpZ2dlciB3aXRoIHRoZSBMRUQgY2xhc3NkZXYsIHRoZWlyIGB0cmlnZ2VyX3R5cGVgIG11c3QgYmUgdGhlIHNhbWUuIFRvXFxuK2RlY2xhcmUgdGhhdCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHByb3ZpZGVzIGhhcmR3YXJlIGNvbnRyb2wgZm9yIHRoZSBhc3NvY2lhdGVkXFxuK0xFRCBjbGFzc2Rldiwgc2V0IHRoZSBgaHdfY29udHJvbF90cmlnZ2VyYCBzdHJpbmcgdG8gdGhlIHRyaWdnZXIncyBuYW1lLiBTaW5jZVxcbitib3RoIHRoZSBMRUQgY2xhc3NkZXYgYW5kIHRoZSBwcml2YXRlIHRyaWdnZXIgYXJlIGluIHRoZSBzYW1lIExFRCBkcml2ZXIsIGl0J3NcXG4rbm90IG5lY2Vzc2FyeSBmb3IgdGhlbSB0byBjb29yZGluYXRlIHZpYSBgaHdfY29udHJvbF8qYCBjYWxsYmFja3MuXFxuK1xcbiBXaGVuIHRoZSBMRUQgaXMgaW4gaHcgY29udHJvbCwgbm8gc29mdHdhcmUgYmxpbmsgaXMgcG9zc2libGUgYW5kIGRvaW5nIHNvXFxuIHdpbGwgZWZmZWN0aXZlbHkgZGlzYWJsZSBodyBjb250cm9sLlxcbiBcXG4rSGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvblxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitTb21lIGhhcmR3YXJlIGNhbiBhdXRvbm9tb3VzbHkgYWN0aXZhdGUvZGVhY3RpdmF0ZSBoYXJkd2FyZSBjb250cm9sLiBBZnRlciB0aGF0LFxcbit0aGUgTEVEIGhhcmR3YXJlIG5vdGlmaWVzIHRoZSBMRUQgZHJpdmVyLlxcbitcXG4rSWYgdGhlIGRyaXZlciBjYW4gZGV0ZWN0IHN1Y2ggdHJhbnNpdGlvbnMgYW5kIHRodXMgd2FudHMgdG8gbm90aWZ5IHRoZSBMRUQgY29yZVxcbit0byB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciB0aGVuIHRoZSBgTEVEX1RSSUdfSFdfQ0hBTkdFRGAgZmxhZyBtdXN0IGJlIHNldCBpblxcbitmbGFncyBiZWZvcmUgcmVnaXN0ZXJpbmcuIFRvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIGFjY29yZGluZ2x5LCBjYWxsXFxuK2BsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBvbiB0aGUgTEVEIGNsYXNzZGV2LlxcbitcXG4rVGhpcyBjYXBhYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIExFRCBkZXZpY2UncyBwcml2YXRlIHRyaWdnZXIuIFRoZSBwcml2YXRlXFxuK3RyaWdnZXIgbXVzdCBoYXZlIGJlZW4gcHJvcGVybHkgcmVnaXN0ZXJlZCAoc2VlIGFib3ZlKSBhbmQgbmFtZWQgYWZ0ZXJcXG4rYGh3X2NvbnRyb2xfdHJpZ2dlcmAuXFxuK1xcbitPbmx5IHR3byB0cmFuc2l0aW9ucyBhcmUgZGVmaW5lZDpcXG4rXFxuKy0gXFxcIm5vbmVcXFwiID1cXHUwMDNlIHByaXZhdGUgdHJpZ2dlcjpcXG4rICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sXFxuKyAgICAgICAgYW5kIHdoZW4gXFxcIm5vbmVcXFwiIChpLmUuLCBubyB0cmlnZ2VyKSBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiB0aGUgcHJpdmF0ZVxcbisgICAgICAgIHRyaWdnZXIgaXMgYWxyZWFkeSBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseVxcbisgICAgICAgIGEgbm8tb3AuXFxuK1xcbisgICAgICAgIFRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXNcXG4rICAgICAgICBub3JtYWwuXFxuK1xcbisgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlXFxuKyAgICAgICAgYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBjdXJyZW50bHkgaW4gaGFyZHdhcmVcXG4rICAgICAgICBjb250cm9sLlxcbitcXG4rICAgICAgICBJZiBlcnJvciBvY2N1cnMgaW4gdGhlIGFjdGl2YXRpb24gc2VxdWVuY2UsIHRoZSBMRUQgVHJpZ2dlciBjb3JlIHJldmVydHNcXG4rICAgICAgICB0aGUgZWZmZWN0aXZlIHRyaWdnZXIgdG8gXFxcIm5vbmVcXFwiLlxcbitcXG4rLSBwcml2YXRlIHRyaWdnZXIgPVxcdTAwM2UgXFxcIm5vbmVcXFwiXFxuKyAgICAgICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGhhcmR3YXJlIGF1dG9ub21vdXNseSBkZWFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sXFxuKyAgICAgICAgYW5kIHdoZW4gdGhlIHByaXZhdGUgdHJpZ2dlciBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiBcXFwibm9uZVxcXCIgKGkuZS4sIG5vXFxuKyAgICAgICAgdHJpZ2dlcikgaXMgYWN0aXZlIHdoZW4gdGhlIG1ldGhvZCBpcyBjYWxsZWQsIHRoaXMgaXMgZXNzZW50aWFsbHkgYVxcbisgICAgICAgIG5vLW9wLlxcbitcXG4rICAgICAgICBUaGUgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXNcXG4rICAgICAgICBub3JtYWwsIGV4Y2VwdCB0aGF0IHRoZSBjdXJyZW50IExFRCBicmlnaHRuZXNzIGlzIHJldGFpbmVkLiBUaGUgcmVhc29uXFxuKyAgICAgICAgZm9yIGtlZXBpbmcgdGhlIGJyaWdodG5lc3MgdW5jaGFuZ2VkIGlzIHRoYXQgc29tZSBoYXJkd2FyZSBtYXkgY2hvb3NlIGFcXG4rICAgICAgICBzcGVjaWZpYyBicmlnaHRuZXNzIGluc3RlYWQgb2Ygc2ltcGx5IHR1cm5pbmcgb2ZmIHRoZSBMRUQgYWZ0ZXJcXG4rICAgICAgICBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0aW5nIGhhcmR3YXJlIGNvbnRyb2wuXFxuK1xcbisgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlXFxuKyAgICAgICAgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIG5vdCBjdXJyZW50bHkgaW4gaGFyZHdhcmVcXG4rICAgICAgICBjb250cm9sLlxcbitcXG4rSWYgdGhlIGN1cnJlbnQgdHJpZ2dlciBpcyBuZWl0aGVyIHRoZSBwcml2YXRlIHRyaWdnZXIgbm9yIFxcXCJub25lXFxcIiwgbm8gdHJhbnNpdGlvblxcbit3aWxsIGJlIG1hZGUuXFxuK1xcbiBLbm93biBJc3N1ZXNcXG4gPT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcXG5pbmRleCBhNTFiMGVkNTM4ODY0Li4zYjQzOGQ4ZGE1ZTBjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xcbkBAIC0yNywyOSArMjcsMTkgQEAgc3RhdGljIExJU1RfSEVBRChsZWRzX2xvb2t1cF9saXN0KTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTtcXG4gXFxuLXN0YXRpYyBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuLXtcXG4tI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXFxuLVxcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4tXFx0cmV0dXJuIGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyIFxcdTAwMjZcXHUwMDI2IGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyLVxcdTAwM2V0cmlnZ2VyX3R5cGU7XFxuLSNlbHNlXFxuLVxcdHJldHVybiBmYWxzZTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIHtcXG4gXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4gXFx0dW5zaWduZWQgaW50IGJyaWdodG5lc3M7XFxuIFxcbi1cXHRpZiAobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXFxuLVxcdFxcdHJldHVybiAtRU5PREFUQTtcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZWxlZF9hY2Nlc3MpIHtcXG4rXFx0XFx0aWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNlbGVkX2FjY2Vzcyk7XFxuLVxcdGxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7XFxuLVxcdGJyaWdodG5lc3MgPSBsZWRfY2Rldi1cXHUwMDNlYnJpZ2h0bmVzcztcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNlbGVkX2FjY2Vzcyk7XFxuK1xcdFxcdGxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7XFxuK1xcdFxcdGJyaWdodG5lc3MgPSBsZWRfY2Rldi1cXHUwMDNlYnJpZ2h0bmVzcztcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGJyaWdodG5lc3MpO1xcbiB9XFxuQEAgLTc0LDYgKzY0LDkgQEAgc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcbiBcXHRpZiAoc3RhdGUgPT0gTEVEX09GRilcXG4gXFx0XFx0bGVkX3RyaWdnZXJfcmVtb3ZlKGxlZF9jZGV2KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChsZWRfY2Rldik7XFxuK1xcbiBcXHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIHN0YXRlKTtcXG4gXFxuIFxcdHJldCA9IHNpemU7XFxuQEAgLTEwMyw4ICs5NiwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0ge1xcbiBcXHRcXHUwMDI2YmluX2F0dHJfdHJpZ2dlcixcXG4gXFx0TlVMTCxcXG4gfTtcXG4rXFxuK3N0YXRpYyBERVZJQ0VfQVRUUl9STyh0cmlnZ2VyX21heV9vZmZsb2FkKTtcXG4rc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZF90cmlnZ2VyX2F0dHJzW10gPSB7XFxuK1xcdFxcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIsXFxuK1xcdE5VTExcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bW9kZV90IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGludCBpZHgpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaik7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcbitcXHRpZiAoYXR0ciA9PSBcXHUwMDI2ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyKVxcbitcXHRcXHRyZXR1cm4gbGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA/IGF0dHItXFx1MDAzZW1vZGUgOiAwO1xcbitcXG4rXFx0cmV0dXJuIGF0dHItXFx1MDAzZW1vZGU7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxlZF90cmlnZ2VyX2dyb3VwID0ge1xcbiBcXHQuYmluX2F0dHJzID0gbGVkX3RyaWdnZXJfYmluX2F0dHJzLFxcbitcXHQuYXR0cnMgPSBsZWRfdHJpZ2dlcl9hdHRycyxcXG4rXFx0LmlzX3Zpc2libGUgPSBsZWRfdHJpZ2dlcl9pc192aXNpYmxlLFxcbiB9O1xcbiAjZW5kaWZcXG4gXFxuQEAgLTU5Niw2ICs2MTEsOSBAQCBpbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuIFxcdGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KGxlZF9jZGV2KTtcXG4gI2VuZGlmXFxuIFxcbitcXHRpZiAobGVkX2NkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRClcXG4rXFx0XFx0bGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKGxlZF9jZGV2KTtcXG4rXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZWxlZF9hY2Nlc3MpO1xcbiBcXG4gXFx0ZGV2X2RiZyhwYXJlbnQsIFxcXCJSZWdpc3RlcmVkIGxlZCBkZXZpY2U6ICVzXFxcXG5cXFwiLFxcbkBAIC02MTYsNiArNjM0LDkgQEAgdm9pZCBsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4gXFx0aWYgKElTX0VSUl9PUl9OVUxMKGxlZF9jZGV2LVxcdTAwM2VkZXYpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRpZiAobGVkX2NkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRClcXG4rXFx0XFx0bGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKGxlZF9jZGV2KTtcXG4rXFxuICNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbiBcXHRkb3duX3dyaXRlKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4gXFx0aWYgKGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcXG5pbmRleCBiMTIyMzIxOGJkYTExLi5hOWQ5OTJhODg2MTYxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xcbkBAIC03LDkgKzcsMTMgQEBcXG4gICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSBcXHUwMDNjcnB1cmRpZUBvcGVuZWRoYW5kLmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvY2tkZXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuQEAgLTMzLDYgKzM3LDM0IEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcXG4gXFx0cmV0dXJuICF0cmlnLVxcdTAwM2V0cmlnZ2VyX3R5cGUgfHwgdHJpZy1cXHUwMDNldHJpZ2dlcl90eXBlID09IGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX3R5cGU7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4rXFxuK1xcdGlmICghbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXIpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghbGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fFxcbitcXHQgICAgc3RyY21wKGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyLVxcdTAwM2VuYW1lKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyLVxcdTAwM2VvZmZsb2FkZWQpXFxuK1xcdFxcdHJldHVybiBsZWRfY2Rldi1cXHUwMDNldHJpZ2dlci1cXHUwMDNlb2ZmbG9hZGVkKGxlZF9jZGV2KTtcXG4rXFxuK1xcdGRldl93YXJuX29uY2UobGVkX2NkZXYtXFx1MDAzZWRldiwgXFxcImh3IGNvbnRyb2wgdHJpZ2dlciAlcyBkb2Vzbid0IGltcGxlbWVudCBvZmZsb2FkZWQoKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZW5hbWUpO1xcbitcXG4rXFx0LyogT3RoZXJ3aXNlIGFzc3VtZSBwcml2YXRlIHRyaWdnZXJzIGFzIGFsd2F5cyBvZmZsb2FkZWQuICovXFxuK1xcdHJldHVybiBsZWRfY2Rldi1cXHUwMDNldHJpZ2dlci1cXHUwMDNldHJpZ2dlcl90eXBlO1xcbit9XFxuK1xcbitib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuK3tcXG4rXFx0Z3VhcmQocndzZW1fcmVhZCkoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbitcXHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKTtcXG4rXFxuIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxcbiBcXHRcXHRcXHQgIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudClcXG5AQCAtMTYzLDcgKzE5NSw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlYWQpO1xcbiBcXG4gLyogQ2FsbGVyIG11c3QgZW5zdXJlIGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2sgaGVsZCAqL1xcbi1pbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXFxuK3N0YXRpYyBpbnQgX19sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcXG4rXFx0XFx0XFx0ICAgICBib29sIGh3X3RyaWdnZXJlZClcXG4ge1xcbiBcXHRjaGFyICpldmVudCA9IE5VTEw7XFxuIFxcdGNoYXIgKmVudnBbMl07XFxuQEAgLTE5NCw3ICsyMjcsMjEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbiBcXHRcXHRsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9kYXRhID0gTlVMTDtcXG4gXFx0XFx0bGVkX2NkZXYtXFx1MDAzZWFjdGl2YXRlZCA9IGZhbHNlO1xcbiBcXHRcXHRsZWRfY2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkxFRF9JTklUX0RFRkFVTFRfVFJJR0dFUjtcXG4tXFx0XFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEhhcmR3YXJlIG1heSBoYXZlIHNlbGVjdGVkIGEgbmV3IGJyaWdodG5lc3MgbGV2ZWwgZHVyaW5nIGl0c1xcbitcXHRcXHQgKiBoYXJkd2FyZSBjb250cm9sIHRyYW5zaXRpb24sIHNvIG9ubHkgcmVzZXQgYnJpZ2h0bmVzcyBpZiB3ZVxcbitcXHRcXHQgKiBhcmUgc3dpdGNoaW5nIHRvIGFub3RoZXIgdHJpZ2dlciBvciBpZiB0aGUgc3dpdGNoaW5nIGlzIG5vdFxcbitcXHRcXHQgKiBoYXJkd2FyZSB0cmlnZ2VyZWQuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBlcnJvciBwYXRoLCBhcyBydW5uaW5nXFxuK1xcdFxcdCAqIGludG8gdGhlIGVycm9yIHBhdGggaW1wbGllcyBhIG5vbmUgPVxcdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyXFxuK1xcdFxcdCAqIHRyYW5zaXRpb24uIFRoaXMgaGludHMgdGhhdCB0aGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGVcXG4rXFx0XFx0ICogdHJpZ2dlciBtdXN0IGhhdmUgc29tZSBmdW5kYW1lbnRhbCBidWdzLCBzbyBkb24ndCBib3RoZXJcXG4rXFx0XFx0ICogbGVhdmluZyB0aGUgTEVEIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0cmlnIHx8ICFod190cmlnZ2VyZWQpXFxuK1xcdFxcdFxcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7XFxuIFxcdH1cXG4gXFx0aWYgKHRyaWcpIHtcXG4gXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ0cmlnLVxcdTAwM2VsZWRkZXZfbGlzdF9sb2NrKTtcXG5AQCAtMjU4LDYgKzMwNSwxMSBAQCBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuK1xcbitpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXFxuK3tcXG4rXFx0cmV0dXJuIF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCB0cmlnLCBmYWxzZSk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0KTtcXG4gXFxuIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbkBAIC0yNjgsNiArMzIwLDE1IEBAIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7XFxuIFxcbit2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfbG9jayk7XFxuK1xcbitcXHRpZiAoX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSlcXG4rXFx0XFx0bGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbCk7XFxuK1xcbiBzdGF0aWMgYm9vbCBsZWRfbWF0Y2hfZGVmYXVsdF90cmlnZ2VyKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXFxuIHtcXG5AQCAtMzEzLDYgKzM3NCwzMiBAQCB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KTtcXG4gXFxuK3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuK3tcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFx0c3RydWN0IGxlZF90cmlnZ2VyICp0cmlnO1xcbitcXHRib29sIGhpdCwgb2ZmbG9hZGVkO1xcbitcXHRpbnQgbGVuO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNlbGVkX2FjY2Vzcyk7XFxuK1xcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4rXFxuK1xcdHRyaWcgPSBsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcjtcXG4rXFxuK1xcdG9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XFxuK1xcdGhpdCA9IG9mZmxvYWRlZCB8fCAodHJpZyBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIHRyaWctXFx1MDAzZW5hbWUpKTtcXG4rXFxuK1xcdC8qIFtvZmZsb2FkZWRdIFxcdTAwM2NhY3RpdmVfYnV0X25vdF9vZmZsb2FkZWRcXHUwMDNlIGluYWN0aXZlICovXFxuK1xcdGxlbiA9IHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXMlcyVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgb2ZmbG9hZGVkID8gXFxcIltcXFwiIDogKGhpdCA/IFxcXCJcXHUwMDNjXFxcIiA6IFxcXCJcXFwiKSxcXG4rXFx0XFx0XFx0IGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3RyaWdnZXIsXFxuK1xcdFxcdFxcdCBvZmZsb2FkZWQgPyBcXFwiXVxcXCIgOiAoaGl0ID8gXFxcIlxcdTAwM2VcXFwiIDogXFxcIlxcXCIpKTtcXG4rXFxuK1xcdHJldHVybiBsZW47XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwodHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KTtcXG4rXFxuIC8qIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqL1xcbiBcXG4gaW50IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcXG5AQCAtNDAzLDYgKzQ5MCw4OCBAQCBpbnQgZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XFxuIFxcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbitcXG4rc3RhdGljIHZvaWQgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcikge1xcbitcXHRcXHQvKiBcXFwibm9uZVxcXCIgPVxcdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyLiAqL1xcbitcXHRcXHRpZiAoYWN0aXZhdGUpXFxuK1xcdFxcdFxcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBoY190cmlnLCB0cnVlKTtcXG4rXFx0fSBlbHNlIGlmIChsZWRfY2Rldi1cXHUwMDNldHJpZ2dlciA9PSBoY190cmlnKSB7XFxuK1xcdFxcdC8qIHByaXZhdGUgdHJpZ2dlciA9XFx1MDAzZSBcXFwibm9uZVxcXCIuICovXFxuK1xcdFxcdGlmICghYWN0aXZhdGUpXFxuK1xcdFxcdFxcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMLCB0cnVlKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogT3RoZXIgdHJpZ2dlciBpcyBhY3RpdmUuICovXFxuK1xcdFxcdGRldl9kYmcobGVkX2NkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIklnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZVxcXCIsXFxuK1xcdFxcdFxcdGFjdGl2YXRlID8gXFxcImFjdGl2YXRlXFxcIiA6IFxcXCJkZWFjdGl2YXRlXFxcIiwgaGNfdHJpZy1cXHUwMDNlbmFtZSxcXG4rXFx0XFx0XFx0bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZW5hbWUpO1xcbitcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRkZXZfd2FybihsZWRfY2Rldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvICVzICVzIGluIGh3IGNvbnRyb2wgdHJhbnNpdGlvbjogJWRcXFwiLFxcbitcXHRcXHRcXHQgYWN0aXZhdGUgPyBcXFwiYWN0aXZhdGVcXFwiIDogXFxcImRlYWN0aXZhdGVcXFwiLCBoY190cmlnLVxcdTAwM2VuYW1lLCBlcnIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9od19jb250cm9sX2NoYW5nZWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGVkX2NsYXNzZGV2LCB0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspO1xcbitcXHRib29sIGFjdGl2YXRlID0gUkVBRF9PTkNFKGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkKTtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCBcXHUwMDI2dHJpZ2dlcnNfbGlzdF9sb2NrKSB7XFxuK1xcdFxcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcXG4rXFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodHJpZywgXFx1MDAyNnRyaWdnZXJfbGlzdCwgbmV4dF90cmlnKSB7XFxuK1xcdFxcdFxcdGlmICh0cmlnLVxcdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfdHlwZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIXN0cmNtcCh0cmlnLVxcdTAwM2VuYW1lLCBsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyKSkge1xcbitcXHRcXHRcXHRcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbitcXG4rXFx0XFx0XFx0XFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGRldl9lcnIobGVkX2NkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFxcIiVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxcXG5cXFwiLFxcbitcXHRcXHRfX2Z1bmNfXywgbGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcik7XFxuK31cXG4rXFxuK3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSlcXG4re1xcbitcXHQvKiBSZXN0cmljdGVkIHRvIHByaXZhdGUgdHJpZ2dlcnMuICovXFxuK1xcdGlmIChXQVJOX09OKCEobGVkX2NkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRCkgfHxcXG4rXFx0XFx0ICAgICFsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8ICFsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl90eXBlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0V1JJVEVfT05DRShsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZCwgYWN0aXZhdGUpO1xcbitcXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XFxuK1xcbit2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmssIGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZCk7XFxuK1xcbit2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRkaXNhYmxlX3dvcmtfc3luYyhcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKTtcXG4rXFxuKyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXFxuK1xcbiAvKiBTaW1wbGUgTEVEIFRyaWdnZXIgSW50ZXJmYWNlICovXFxuIFxcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jXFxuaW5kZXggMTg0NGQwY2Q1ZjUyOC4uNmRiODNkMDE1Mjc3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcXG5AQCAtODUsMTIgKzg1LDE4IEBAIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4gXFx0cmV0dXJuIGNyb3NfZWNfbGVkX3NlbmRfY21kKHByaXYtXFx1MDAzZWNyb3NfZWMsIFxcdTAwMjZhcmcpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGNyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgY3Jvc19lY19sZWRfdHJpZ2dlciA9IHtcXG4gXFx0Lm5hbWUgPSBcXFwiY2hyb21lb3MtYXV0b1xcXCIsXFxuIFxcdC50cmlnZ2VyX3R5cGUgPSBcXHUwMDI2Y3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlLFxcbiBcXHQuYWN0aXZhdGUgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlLFxcbitcXHQub2ZmbG9hZGVkID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jXFxuaW5kZXggZWQ2YTQ3YmJiNDRmOS4uMzJkNDBkMTc2ZDNmMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jXFxuQEAgLTE5NSwxMCArMTk1LDE2IEBAIHN0YXRpYyB2b2lkIG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpXFxuIFxcdFxcdFxcdGVycik7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldilcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBvbW5pYV9od190cmlnZ2VyID0ge1xcbiBcXHQubmFtZVxcdFxcdD0gXFxcIm9tbmlhLW1jdVxcXCIsXFxuIFxcdC5hY3RpdmF0ZVxcdD0gb21uaWFfaHd0cmlnX2FjdGl2YXRlLFxcbiBcXHQuZGVhY3RpdmF0ZVxcdD0gb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUsXFxuK1xcdC5vZmZsb2FkZWRcXHQ9IG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQsXFxuIFxcdC50cmlnZ2VyX3R5cGVcXHQ9IFxcdTAwMjZvbW5pYV9od190cmlnZ2VyX3R5cGUsXFxuIH07XFxuIFxcbkBAIC0yNTEsNiArMjU3LDcgQEAgc3RhdGljIGludCBvbW5pYV9sZWRfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IG9tbmlhX2xlZCAqbGVkLFxcbiBcXHQgKiBieSBMRUQgY2xhc3MgZnJvbSB0aGUgbGludXgsZGVmYXVsdC10cmlnZ2VyIHByb3BlcnR5LlxcbiBcXHQgKi9cXG4gXFx0Y2Rldi1cXHUwMDNlZGVmYXVsdF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xcbitcXHRjZGV2LVxcdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7XFxuIFxcbiBcXHQvKiBQdXQgdGhlIExFRCBpbnRvIHNvZnR3YXJlIG1vZGUgKi9cXG4gXFx0cmV0ID0gb21uaWFfY21kX3dyaXRlX3U4KGNsaWVudCwgT01OSUFfQ01EX0xFRF9NT0RFLCBPTU5JQV9DTURfTEVEX01PREVfTEVEKGxlZC1cXHUwMDNlcmVnKSB8XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLmggYi9kcml2ZXJzL2xlZHMvbGVkcy5oXFxuaW5kZXggYmVlNDY2NTFlMDY4Zi4uYmRhYzIzMzYwMTJlNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy5oXFxuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxcbkBAIC0yNyw4ICsyNywxOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXFxuIFxcdFxcdFxcdGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCk7XFxuK3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpO1xcbiBcXG4gZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbGVkc19saXN0X2xvY2s7XFxuIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGxlZHNfbGlzdDtcXG4gXFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuK3ZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4rdm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xcbisjZWxzZSAvKiAhQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikgeyB9XFxuKyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXFxuK1xcbiAjZW5kaWZcXHQvKiBfX0xFRFNfSF9JTkNMVURFRCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xcbmluZGV4IGMxMTI4MmE3NGI1YWMuLmExMWQwNGNlNGFiMmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcXG5AQCAtOSw2ICs5LDE2IEBAIG1lbnVjb25maWcgTEVEU19UUklHR0VSU1xcbiBcXG4gaWYgTEVEU19UUklHR0VSU1xcbiBcXG4rY29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbitcXHRib29sIFxcXCJMRUQgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbiBzdXBwb3J0XFxcIlxcbitcXHRkZWZhdWx0IExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGluaXRpYXRlZCBoYXJkd2FyZSBjb250cm9sXFxuK1xcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cXG4rXFx0ICBcXFwibm9uZVxcXCIgKGkuZS4sIG5vIHRyaWdnZXIpIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyLlxcbitcXG4rXFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLlxcbitcXG4gY29uZmlnIExFRFNfVFJJR0dFUl9USU1FUlxcbiBcXHR0cmlzdGF0ZSBcXFwiTEVEIFRpbWVyIFRyaWdnZXJcXFwiXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcXG5pbmRleCA1YjRlOTJjMTRkYmI0Li4yZTlhZjQ4YTc0ZGJmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcXG4rKysgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXFxuQEAgLTc5OCwxMCArNzk4LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl90cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuIFxcdGtmcmVlKHRyaWdnZXJfZGF0YSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG5ldGRldl90cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEgPSBsZWRfZ2V0X3RyaWdnZXJfZGF0YShsZWRfY2Rldik7XFxuK1xcbitcXHRyZXR1cm4gdHJpZ2dlcl9kYXRhLVxcdTAwM2Vod19jb250cm9sO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIG5ldGRldl9sZWRfdHJpZ2dlciA9IHtcXG4gXFx0Lm5hbWUgPSBcXFwibmV0ZGV2XFxcIixcXG4gXFx0LmFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfYWN0aXZhdGUsXFxuIFxcdC5kZWFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZSxcXG4rXFx0Lm9mZmxvYWRlZCA9IG5ldGRldl90cmlnX29mZmxvYWRlZCxcXG4gXFx0Lmdyb3VwcyA9IG5ldGRldl90cmlnX2dyb3VwcyxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcXG5pbmRleCA1MTY1OTQ5OTMwNzM5Li5hOTc4NTJiMGIyMjg0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcXG5AQCAtMTYsNiArMTYsNyBAQCBjb25maWcgSURFQVBBRF9MQVBUT1BcXG4gXFx0c2VsZWN0IElOUFVUX1NQQVJTRUtNQVBcXG4gXFx0c2VsZWN0IE5FV19MRURTXFxuIFxcdHNlbGVjdCBMRURTX0NMQVNTXFxuK1xcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuIFxcdGhlbHBcXG4gXFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciBMZW5vdm8gSWRlYVBhZCBuZXRib29rcyBjb250YWlucyBkcml2ZXJzIGZvclxcbiBcXHQgIHJma2lsbCBzd2l0Y2gsIGhvdGtleSwgZmFuIGNvbnRyb2wgYW5kIGJhY2tsaWdodCBjb250cm9sLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXFxuaW5kZXggODIxMzUyNDUwNGVlYi4uZjg2YzExZjUxZDBiZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXFxuQEAgLTE0LDkgKzE0LDEyIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRvcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1pLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pODA0Mi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbkBAIC0yNiw5ICsyOSwxMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sZWRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX3Byb2ZpbGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bvd2VyX3N1cHBseS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJpbnRrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZmtpbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXFx1MDAzZVxcbkBAIC0xMzQsMTAgKzEzOSwzMSBAQCBlbnVtIHtcXG4gfTtcXG4gXFxuIC8qXFxuLSAqIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgc3RhdGVzIC0gMVxcbi0gKiBGdXR1cmUga2V5Ym9hcmQgdHlwZXMgbWF5IG5lZWQgYSBuZXcgc3lzdGVtLCBpZiB0aGVyZSdzIGEgY29sbGlzaW9uXFxuLSAqIEtCRF9CTF9UUklTVEFURV9BVVRPIGhhcyBubyB3YXkgdG8gcmVwb3J0IG9yIHNldCB0aGUgYXV0byBzdGF0ZVxcbi0gKiBzbyBpdCBlZmZlY3RpdmVseSBoYXMgMyBzdGF0ZXMsIGJ1dCBuZWVkcyB0byBoYW5kbGUgNFxcbisgKiBUaGUgZW51bWVyYXRpb24gaGFzIHR3byBwdXJwb3NlczpcXG4rICogICAtIGFzIGFuIGludGVybmFsIGlkZW50aWZpZXIgZm9yIGFsbCBrbm93biB0eXBlcyBvZiBrZXlib2FyZCBiYWNrbGlnaHRcXG4rICogICAtIGFzIGEgbWFuZGF0b3J5IHBhcmFtZXRlciBvZiB0aGUgS0JMQyBjb21tYW5kXFxuKyAqXFxuKyAqIEZvciBlYWNoIHR5cGUsIHRoZSBoYXJkd2FyZSBicmlnaHRuZXNzIHZhbHVlcyBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOlxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xcbisgKiB8ICAgICAgSGFyZHdhcmUgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8ICAgIDMgfFxcbisgKiB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgIHwgICAgICB8ICAgICAgfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xcbisgKiB8IEtCRF9CTF9TVEFOREFSRCAgICAgICAgICB8ICAgICAgb2ZmIHwgIG9uIHwgIE4vQSB8ICBOL0EgfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xcbisgKiB8IEtCRF9CTF9UUklTVEFURSAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8ICBOL0EgfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xcbisgKiB8IEtCRF9CTF9UUklTVEFURV9BVVRPICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8IGF1dG8gfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xcbisgKlxcbisgKiBXZSBtYXAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgZm9yIEtCRF9CTF9UUklTVEFURV9BVVRPIGFzIGZvbGxvd3M6XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcXG4rICogfCAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgfCAgICAgICAgMCB8ICAgMSB8ICAgIDIgfFxcbisgKiB8IE9wZXJhdGlvbiAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgIHwgICAgICB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcXG4rICogfCBSZWFkICAgICAgICAgICAgICAgICAgICAgfCBvZmYvYXV0byB8IGxvdyB8IGhpZ2ggfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXFxuKyAqIHwgV3JpdGUgICAgICAgICAgICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHxcXG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xcbiAgKi9cXG4gZW51bSB7XFxuIFxcdEtCRF9CTF9TVEFOREFSRCAgICAgID0gMSxcXG5AQCAtMTQ1LDYgKzE3MSw4IEBAIGVudW0ge1xcbiBcXHRLQkRfQkxfVFJJU1RBVEVfQVVUTyA9IDMsXFxuIH07XFxuIFxcbisjZGVmaW5lIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTU1xcdDNcXG4rXFxuICNkZWZpbmUgS0JEX0JMX1FVRVJZX1RZUEVcXHRcXHQweDFcXG4gI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfVFlQRVxcdFxcdDB4NVxcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9BVVRPX1RZUEVcXHQweDdcXG5AQCAtMjAwLDEwICsyMjgsMTQgQEAgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSB7XFxuIFxcdFxcdGJvb2wgeW1jX2VjX3RyaWdnZXIgICAgICAgOiAxO1xcbiBcXHR9IGZlYXR1cmVzO1xcbiBcXHRzdHJ1Y3Qge1xcbi1cXHRcXHRib29sIGluaXRpYWxpemVkO1xcbitcXHRcXHRpbnQgaW5pdGlhbGl6ZWQ7IC8qICAwOiBpbml0aWFsaXppb24gcGVuZGluZy9vbmdvaW5nL2ZhaWxlZFxcbitcXHRcXHRcXHRcXHQgICogXFx1MDAzZTA6IGluaXRpYWxpemlvbiBmaW5pc2hlZFxcbitcXHRcXHRcXHRcXHQgICogXFx1MDAzYzA6IHVucmVnaXN0ZXJhdGlvbiBvbmdvaW5nL2ZpbmlzaGVkXFxuK1xcdFxcdFxcdFxcdCAgKi9cXG4gXFx0XFx0aW50IHR5cGU7XFxuIFxcdFxcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkO1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbGFzdF9icmlnaHRuZXNzO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbGFzdF9od19icmlnaHRuZXNzO1xcbitcXHRcXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIHByb3RlY3RzIGJyaWdodG5lc3MgdHJhY2tpbmcgKi9cXG4gXFx0fSBrYmRfYmw7XFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQ7XFxuQEAgLTE1OTIsNyArMTYyNCwyNCBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKGludCB0eXBlKVxcbiBcXHRyZXR1cm4gKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFKSB8fCAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBod19icmlnaHRuZXNzKVxcbit7XFxuK1xcdC8qIE9mZiwgbG93IG9yIGhpZ2ggKi9cXG4rXFx0aWYgKGh3X2JyaWdodG5lc3MgXFx1MDAzYz0gcHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcXG4rXFx0XFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XFxuK1xcbitcXHQvKiBBdXRvIChjb250cm9sbGVkIGJ5IEVDIGFjY29yZGluZyB0byBBTFMpLCByZXBvcnQgYXMgb2ZmICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VrYmRfYmwudHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVW5rbm93biB2YWx1ZSAqL1xcbitcXHRkZXZfd2FybihcXHUwMDI2cHJpdi1cXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVxcdTAwM2VkZXYsXFxuK1xcdFxcdCBcXFwiVW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVkXFxcIiwgaHdfYnJpZ2h0bmVzcyk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcXG4gXFx0aW50IGVycjtcXG5AQCAtMTYwNiwyMSArMTY1NSw3IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdFxcdC8qIENvbnZlcnQgcmV0dXJuZWQgdmFsdWUgdG8gYnJpZ2h0bmVzcyBsZXZlbCAqL1xcbi1cXHRcXHR2YWx1ZSA9IEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTtcXG4tXFxuLVxcdFxcdC8qIE9mZiwgbG93IG9yIGhpZ2ggKi9cXG4tXFx0XFx0aWYgKHZhbHVlIFxcdTAwM2M9IHByaXYtXFx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXFxuLVxcdFxcdFxcdHJldHVybiB2YWx1ZTtcXG4tXFxuLVxcdFxcdC8qIEF1dG8sIHJlcG9ydCBhcyBvZmYgKi9cXG4tXFx0XFx0aWYgKHZhbHVlID09IHByaXYtXFx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgKyAxKVxcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdFxcdC8qIFVua25vd24gdmFsdWUgKi9cXG4tXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnByaXYtXFx1MDAzZXBsYXRmb3JtX2RldmljZS1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHQgXFxcIlVua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlbHVcXFwiLCB2YWx1ZSk7XFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRyZXR1cm4gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpO1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBldmFsX2hhbHMocHJpdi1cXHUwMDNlYWRldi1cXHUwMDNlaGFuZGxlLCBcXHUwMDI2dmFsdWUpO1xcbkBAIC0xNjMwLDYgKzE2NjUsMTYgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gISF0ZXN0X2JpdChIQUxTX0tCRF9CTF9TVEFURV9CSVQsIFxcdTAwMjZ2YWx1ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4re1xcbitcXHRpbnQgaHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xcbitcXG4rXFx0aWYgKGh3X2JyaWdodG5lc3MgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcXG4rXFxuK1xcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTtcXG5AQCAtMTYzNyw5OSArMTY4MiwyMDcgQEAgc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFcXG4gXFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKVxcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaHdfYnJpZ2h0bmVzcylcXG4ge1xcbi1cXHRpbnQgZXJyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHZhbHVlO1xcbiBcXHRpbnQgdHlwZSA9IHByaXYtXFx1MDAzZWtiZF9ibC50eXBlO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XFxuLVxcdFxcdGlmIChicmlnaHRuZXNzIFxcdTAwM2UgcHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLm11dGV4KTtcXG4gXFxuLVxcdFxcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHxcXG4rXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XFxuK1xcdFxcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGh3X2JyaWdodG5lc3MpIHxcXG4gXFx0XFx0XFx0RklFTERfUFJFUChLQkRfQkxfQ09NTUFORF9UWVBFLCB0eXBlKSB8XFxuIFxcdFxcdFxcdEtCRF9CTF9DT01NQU5EX1NFVDtcXG4gXFx0XFx0ZXJyID0gZXhlY19rYmxjKHByaXYtXFx1MDAzZWFkZXYtXFx1MDAzZWhhbmRsZSwgdmFsdWUpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRlcnIgPSBleGVjX3NhbHMocHJpdi1cXHUwMDNlYWRldi1cXHUwMDNlaGFuZGxlLCBicmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkYpO1xcbitcXHRcXHR2YWx1ZSA9IGh3X2JyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRjtcXG4rXFx0XFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXFx1MDAzZWFkZXYtXFx1MDAzZWhhbmRsZSwgdmFsdWUpO1xcbiBcXHR9XFxuLVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XFxuK1xcdHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpXFxuK3tcXG4rXFx0aWYgKGJyaWdodG5lc3MgXFx1MDAzZSBwcml2LVxcdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBicmlnaHRuZXNzKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXFxuIHtcXG4gXFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBXaGVuIHVucmVnaXN0ZXJpbmc6IEl0IG11c3QgYmUgdGhlIHNpZGUgZWZmZWN0IG9mIExFRCB1bnJlZ2lzdHJhdGlvblxcbitcXHQgKiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSd2ZSBzZXQgTEVEX1JFVEFJTl9BVF9TSFVURE9XTlxcbitcXHQgKiB0byByZXRhaW4gbGVkX2NkZXYgYnJpZ2h0bmVzcyBsZXZlbC4gVG8gZG8gdGhlIHNhbWUgZm9yIGF1dG8gbW9kZSxcXG4rXFx0ICogZ2F0ZSBjaGFuZ2VzIGFuZCByZXR1cm4gZWFybHkuXFxuK1xcdCAqXFxuK1xcdCAqIEl0J3MgbmVlZGxlc3MgdG8gZ2F0ZSBjaGFuZ2VzIHdoZW4gaW5pdGlhbGl6aW5nLCBhcyB0aGVyZSBtYXkgYmUgYVxcbitcXHQgKiB0aW1lIG1hcmdpbiBiZXR3ZWVuIHN5c2ZzIGF0dHJpYnV0ZSBjcmVhdGlvbiBhbmQgc3RhdGUgY2hhbmdlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcXHUwMDNjIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChwcml2LCBicmlnaHRuZXNzKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLm11dGV4KTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUztcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XFxuK1xcbitcXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQocHJpdiwgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlO1xcbitcXG4rc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIgPSB7XFxuK1xcdC5uYW1lID0gXFxcImlkZWFwYWQtYXV0b1xcXCIsXFxuK1xcdC50cmlnZ2VyX3R5cGUgPSBcXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGUsXFxuK1xcdC5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSxcXG4rXFx0Lm9mZmxvYWRlZCA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWQsXFxuK307XFxuK1xcbitzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZDtcXG4rXFxuK3N0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXFxuK3tcXG4rXFx0Ym9vbCBod19jb250cm9sLCBsYXN0X2h3X2NvbnRyb2w7XFxuK1xcbitcXHRpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkIHx8IHByaXYtXFx1MDAzZWtiZF9ibC50eXBlICE9IEtCRF9CTF9UUklTVEFURV9BVVRPKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRod19jb250cm9sID0gaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XFxuK1xcdGxhc3RfaHdfY29udHJvbCA9IHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xcbitcXG4rXFx0aWYgKGh3X2NvbnRyb2wgIT0gbGFzdF9od19jb250cm9sKVxcbitcXHRcXHRsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubGVkLCBod19jb250cm9sKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuIHtcXG4tXFx0aW50IGJyaWdodG5lc3M7XFxuK1xcdGludCBod19icmlnaHRuZXNzLCBicmlnaHRuZXNzO1xcbiBcXG4tXFx0aWYgKCFwcml2LVxcdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpXFxuK1xcdGlmICh1bmxpa2VseShwcml2LVxcdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXFx1MDAzYz0gMCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcXG4tXFx0aWYgKGJyaWdodG5lc3MgXFx1MDAzYyAwKVxcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5tdXRleCk7XFxuK1xcbitcXHRod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XFxuK1xcdGlmIChod19icmlnaHRuZXNzIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKGJyaWdodG5lc3MgPT0gcHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcylcXG4rXFx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XFxuK1xcdGlmIChicmlnaHRuZXNzIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuOyAvKiBSZWplY3QgaW5zYW5lIHZhbHVlcyBlYXJseS4gKi9cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IGh3X2JyaWdodG5lc3MpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xcbitcXHRpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChwcml2LCBod19icmlnaHRuZXNzKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzO1xcbiBcXG4gXFx0bGVkX2NsYXNzZGV2X25vdGlmeV9icmlnaHRuZXNzX2h3X2NoYW5nZWQoXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5sZWQsIGJyaWdodG5lc3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4ge1xcbi1cXHRpbnQgYnJpZ2h0bmVzcywgZXJyO1xcbitcXHRpbnQgaHdfYnJpZ2h0bmVzcywgZXJyO1xcbiBcXG4gXFx0aWYgKCFwcml2LVxcdTAwM2VmZWF0dXJlcy5rYmRfYmwpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0aWYgKFdBUk5fT04ocHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkKSlcXG4rXFx0aWYgKFdBUk5fT04ocHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkIFxcdTAwM2UgMCkpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXG4tXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXFx1MDAzZWtiZF9ibC50eXBlKSlcXG4tXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdHByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IDA7XFxuIFxcbi1cXHRicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7XFxuLVxcdGlmIChicmlnaHRuZXNzIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIGJyaWdodG5lc3M7XFxuK1xcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVxcdTAwM2VkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubXV0ZXgpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xcbitcXHRpZiAoaHdfYnJpZ2h0bmVzcyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBod19icmlnaHRuZXNzO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7XFxuIFxcbi1cXHRwcml2LVxcdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcXG4gXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5uYW1lICAgICAgICAgICAgICAgICAgICA9IFxcXCJwbGF0Zm9ybTo6XFxcIiBMRURfRlVOQ1RJT05fS0JEX0JBQ0tMSUdIVDtcXG4gXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5icmlnaHRuZXNzX2dldCAgICAgICAgICA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0O1xcbiBcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLmJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQ7XFxuIFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQuZmxhZ3MgICAgICAgICAgICAgICAgICAgPSBMRURfQlJJR0hUX0hXX0NIQU5HRUQgfCBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xcbiBcXG4rXFx0c3dpdGNoIChwcml2LVxcdTAwM2VrYmRfYmwudHlwZSkge1xcbitcXHRjYXNlIEtCRF9CTF9UUklTVEFURV9BVVRPOlxcbitcXHRcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcXG4rXFxuK1xcdFxcdGlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnByaXYtXFx1MDAzZXBsYXRmb3JtX2RldmljZS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgXFxcIkNhbm5vdCBwcm92aWRlIExFRCB0cmlnZ2VyICVzIGZvciBrZXlib2FyZCBiYWNrbGlnaHRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLmZsYWdzIHw9IExFRF9UUklHX0hXX0NIQU5HRUQ7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQudHJpZ2dlcl90eXBlID0gXFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlO1xcbitcXHRcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLmh3X2NvbnRyb2xfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lO1xcbitcXG4rXFx0XFx0LyogSGFyZHdhcmUgcmVtZW1iZXJzIHRoZSBsYXN0IGJyaWdodG5lc3MgbGV2ZWwsIGluY2x1ZGluZyBhdXRvIG1vZGUuICovXFxuK1xcdFxcdGlmIChod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5kZWZhdWx0X3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTtcXG4rXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEtCRF9CTF9UUklTVEFURTpcXG4rXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEtCRF9CTF9TVEFOREFSRDpcXG4rXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHQvKiBUaGlzIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGJ5IGlkZWFwYWRfY2hlY2tfZmVhdHVyZXMoKS4gKi9cXG4rXFx0XFx0dW5yZWFjaGFibGUoKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVqZWN0IGluc2FuZSB2YWx1ZXMuICovXFxuK1xcdGVyciA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4gXFx0ZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKFxcdTAwMjZwcml2LVxcdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXFx1MDAzZWRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5sZWQpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gdHJ1ZTtcXG4rXFx0cHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gMTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9leGl0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuIHtcXG4tXFx0aWYgKCFwcml2LVxcdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpXFxuK1xcdGlmIChwcml2LVxcdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXFx1MDAzYz0gMClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gZmFsc2U7XFxuK1xcdHByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IC0xO1xcbiBcXG4gXFx0bGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5sZWQpO1xcbiB9XFxuQEAgLTI1NDgsMTcgKzI3MDEsMzAgQEAgc3RhdGljIGludCBfX2luaXQgaWRlYXBhZF9sYXB0b3BfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRlcnIgPSBsZWRfdHJpZ2dlcl9yZWdpc3RlcihcXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEIHRyaWdnZXIgJXM6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSwgZXJyKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSBpZGVhcGFkX3dtaV9kcml2ZXJfcmVnaXN0ZXIoKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBlcnJfbGVkdHJpZztcXG4gXFxuIFxcdGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2aWRlYXBhZF9hY3BpX2RyaXZlcik7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl93bWk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl93bWk6XFxuK1xcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XFxuK2Vycl9sZWR0cmlnOlxcbitcXHRpZiAoaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpXFxuK1xcdFxcdGxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoXFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gbW9kdWxlX2luaXQoaWRlYXBhZF9sYXB0b3BfaW5pdClcXG4gXFxuQEAgLTI1NjYsNiArMjczMiw5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBpZGVhcGFkX2xhcHRvcF9leGl0KHZvaWQpXFxuIHtcXG4gXFx0cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xcbiBcXHRpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpO1xcbitcXG4rXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxcbitcXHRcXHRsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKFxcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xcbiB9XFxuIG1vZHVsZV9leGl0KGlkZWFwYWRfbGFwdG9wX2V4aXQpXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMuaCBiL2luY2x1ZGUvbGludXgvbGVkcy5oXFxuaW5kZXggYTUxNWYwNzVjMjlhMS4uOTNiM2ZkN2U1NjM2NCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy5oXFxuQEAgLTEwOSw2ICsxMDksNyBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHtcXG4gI2RlZmluZSBMRURfSU5JVF9ERUZBVUxUX1RSSUdHRVIgQklUKDIzKVxcbiAjZGVmaW5lIExFRF9SRUpFQ1RfTkFNRV9DT05GTElDVCBCSVQoMjQpXFxuICNkZWZpbmUgTEVEX01VTFRJX0NPTE9SXFx0XFx0QklUKDI1KVxcbisjZGVmaW5lIExFRF9UUklHX0hXX0NIQU5HRURcXHRCSVQoMjYpXFxuIFxcbiBcXHQvKiBzZXRfYnJpZ2h0bmVzc193b3JrIC8gYmxpbmtfdGltZXIgZmxhZ3MsIGF0b21pYywgcHJpdmF0ZS4gKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHdvcmtfZmxhZ3M7XFxuQEAgLTIzOSw2ICsyNDAsMTEgQEAgc3RydWN0IGxlZF9jbGFzc2RldiB7XFxuIFxcdHN0cnVjdCBrZXJuZnNfbm9kZVxcdCpicmlnaHRuZXNzX2h3X2NoYW5nZWRfa247XFxuICNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcXG4rXFx0Ym9vbFxcdFxcdFxcdHRyaWdnZXJzX2h3X2NoYW5nZWQ7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHRyaWdnZXJzX2h3X2NoYW5nZWRfd29yaztcXG4rI2VuZGlmXFxuK1xcbiBcXHQvKiBFbnN1cmVzIGNvbnNpc3RlbnQgYWNjZXNzIHRvIHRoZSBMRUQgY2xhc3MgZGV2aWNlICovXFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdGxlZF9hY2Nlc3M7XFxuIH07XFxuQEAgLTQ4NSw2ICs0OTEsNyBAQCBzdHJ1Y3QgbGVkX3RyaWdnZXIge1xcbiBcXHRjb25zdCBjaGFyXFx0ICpuYW1lO1xcbiBcXHRpbnRcXHRcXHQoKmFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcdHZvaWRcXHRcXHQoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4rXFx0Ym9vbFxcdFxcdCgqb2ZmbG9hZGVkKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcbiBcXHQvKiBCcmlnaHRuZXNzIHNldCBieSBsZWRfdHJpZ2dlcl9ldmVudCAqL1xcbiBcXHRlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7XFxuQEAgLTUzMyw2ICs1NDAsOSBAQCB2b2lkIGxlZF90cmlnZ2VyX2JsaW5rX29uZXNob3Qoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyLFxcbiB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4gaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTtcXG4gdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xcbit2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4rXFxuK2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdHZvaWQgKnRyaWdnZXJfZGF0YSlcXG5AQCAtNTg0LDYgKzU5NCwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF9zZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgKmxlZF9nZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbiB7XFxuQEAgLTU5OCw2ICs2MTUsMTMgQEAgbGVkX3RyaWdnZXJfZ2V0X2JyaWdodG5lc3MoY29uc3Qgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTICovXFxuIFxcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgYWN0aXZhdGUpIHt9XFxuKyNlbmRpZlxcbitcXG4gLyogVHJpZ2dlciBzcGVjaWZpYyBlbnVtICovXFxuIGVudW0gbGVkX3RyaWdnZXJfbmV0ZGV2X21vZGVzIHtcXG4gXFx0VFJJR0dFUl9ORVRERVZfTElOSyA9IDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIyOjI4LjM3NjE3MDI2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ5MzcxNzEyMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FV19MRURTXCIsXG4gICAgXCJMRURTX0NMQVNTXCIsXG4gICAgXCJMRURTX1RSSUdHRVJTXCIsXG4gICAgXCJMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcIixcbiAgICBcIkxFRFNfVFJJR0dFUl9ORVRERVZcIixcbiAgICBcIkxFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXCIsXG4gICAgXCJJREVBUEFEX0xBUFRPUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd1wiLFxuICAgIFwibGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xcIixcbiAgICBcImxlZF90cmlnZ2VyX3NldFwiLFxuICAgIFwibGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBzeXNmcyBhdHRyaWJ1dGUgKHRyaWdnZXJfbWF5X29mZmxvYWQpIGZvciBxdWVyeWFibGUgaGFyZHdhcmUtb2ZmbG9hZGVkIExFRCB0cmlnZ2VycywgdXBkYXRlcyBjb3JlIGJyaWdodG5lc3MgZ2V0L3NldCBsb2NraW5nIGFuZCB0cmlnZ2VyIHJlbW92YWwgbG9naWMsIGFuZCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gTEVEIHRyaWdnZXIgZHJpdmVycy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIExFRCBjbGFzcy90cmlnZ2VyIHN5c2ZzIGludGVyZmFjZXMgYW5kIGNvcmUgdHJpZ2dlciBsaWZlY3ljbGUgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQwN2E1ZTNjOTIxMTRjNzU0NTMxNzJhOTQ1MmFiN2EyNWJjMzRiNTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjIyOjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuaW5kZXggZDRjOTE4Y2MxMWExMi4uOTRjMzMxZDljNDEwNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuQEAgLTc4LDYgKzc4LDMxIEBAIERlc2NyaXB0aW9uOlxuIFx0XHQod2hpY2ggd291bGQgb2Z0ZW4gYmUgY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZVxuIFx0XHRoYXJkd2FyZSkuXG4gXG4rV2hhdDpcdFx0L3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS90cmlnZ2VyX21heV9vZmZsb2FkXG4rRGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjZcbitLZXJuZWxWZXJzaW9uOlx0Ny40XG4rQ29udGFjdDpcdGxpbnV4LWxlZHNAdmdlci5rZXJuZWwub3JnXG4rRGVzY3JpcHRpb246XG4rXHRcdE5hbWVzIGFuZCBzdGF0ZXMgb2YgdHJpZ2dlcnMgdGhhdCBtYXkgYmUgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLlxuK1x0XHRTdWNoIHRyaWdnZXJzIGFyZSBhbHNvIGNhbGxlZCBcImhhcmR3YXJlIGNvbnRyb2wgdHJpZ2dlclwiIGluIHNvbWVcbitcdFx0Y29udGV4dC5cbitcbitcdFx0T25seSBleGlzdHMgd2hlbiB0aGUgTEVEIHN1cHBvcnRzIHRyaWdnZXIgb2ZmbG9hZC5cbitcbitcdFx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyBhIGxpc3Qgb2YgdHJpZ2dlcnMgdGhhdCBhcmUgY2FwYWJsZSB0b1xuK1x0XHRiZSBvZmZsb2FkZWQuIFRoZSBvcHRpb25hbCBicmFja2V0cyBhcm91bmQgdGhlIHRyaWdnZXIgbmFtZVxuK1x0XHRpbmRpY2F0ZSB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgdHJpZ2dlcjpcbitcbitcdFx0LSBgZm9vX3RyaWdnZXJgOiB0aGUgdHJpZ2dlciBpcyBub3Qgc2VsZWN0ZWQuXG4rXHRcdC0gYFx1MDAzY2Zvb190cmlnZ2VyXHUwMDNlYDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQsIGJ1dCBmYWxscyBiYWNrIHRvXG4rXHRcdCAgc29mdHdhcmUgYmxpbmsgZm9yIHNvbWUgcmVhc29uIChlLmcuLCBpbmNvbXBhdGlibGUgdHJpZ2dlclxuK1x0XHQgIHBhcmFtZXRlcnMpXG4rXHRcdC0gYFtmb29fdHJpZ2dlcl1gOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCBhbmQgb2ZmbG9hZGVkIHRvXG4rXHRcdCAgaGFyZHdhcmUuXG4rXG4rXHRcdFRoZSBcIm5ldGRldlwiIHRyaWdnZXIgYWxzbyBwcm92aWRlcyBhIGN1c3RvbSBhdHRyaWJ1dGUgdG9cbitcdFx0aW5kaWNhdGUgaXRzIHN0YXRlLCBzZWUgYC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2Uvb2ZmbG9hZGVkYC5cbitcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2ludmVydGVkXG4gRGF0ZTpcdFx0SmFudWFyeSAyMDExXG4gS2VybmVsVmVyc2lvbjpcdDIuNi4zOFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbmluZGV4IGVkNDZiMzdhYjhhMjguLmE1MTQ2ZWExZTNlNjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbkBAIC03NSw2ICs3NSw5IEBAIERlc2NyaXB0aW9uOlxuIFx0XHRJZiAxLCB0aGUgTEVEIGJsaW5raW5nIGluIHJlcXVlc3RlZCBtb2RlIGlzIG9mZmxvYWRlZCB0b1xuIFx0XHRoYXJkd2FyZS5cbiBcbitcdFx0TEVEIHRyaWdnZXIgY29yZSBhbHNvIHByb3ZpZGVzIGEgZ2VuZXJpYyBhdHRyaWJ1dGUgZm9yIHRoaXNcbitcdFx0cHVycG9zZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRgLlxuK1xuIFdoYXQ6XHRcdC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvbGlua18xMFxuIERhdGU6XHRcdEp1biAyMDIzXG4gS2VybmVsVmVyc2lvbjpcdDYuNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuaW5kZXggMzkxMzk2NmNmZGFjMC4uYWRiYzU3YjlmNDljMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0XG5AQCAtMjQyLDYgKzI0Miw5IEBAIG9wcyBhbmQgbmVlZHMgdG8gZGVjbGFyZSBzcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzLlxuIFxuIFdpdGggaHcgY29udHJvbCB3ZSByZWZlciB0byB0aGUgTEVEIGRyaXZlbiBieSBoYXJkd2FyZS5cbiBcbitBIHN5c2ZzIGF0dHJpYnV0ZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgaXMgcHJvdmlkZWQgZm9yIHVzZXJzcGFjZSB0b1xuK3F1ZXJ5IHN1cHBvcnRlZCB0cmlnZ2VycyBhbmQgdGhlaXIgc3RhdGVzLlxuK1xuIExFRCBkcml2ZXIgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YWx1ZSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6XG4gXG4gICAgIC0gaHdfY29udHJvbF90cmlnZ2VyOlxuQEAgLTI5OCw2ICszMDEsMTUgQEAgTEVEIGRyaXZlciBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6XG4gICAgICAgICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGRldmljZSBvciBOVUxMIGlmIG5vdGhpbmdcbiAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IGF0dGFjaGVkLlxuIFxuK0xFRCB0cmlnZ2VyIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gaW5kaWNhdGUgaHcgY29udHJvbDpcbisgICAgLSBvZmZsb2FkZWQ6XG4rICAgICAgICAgICAgICAgIHJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdHJpZ2dlciBpcyBjdXJyZW50bHlcbisgICAgICAgICAgICAgICAgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLlxuK1xuKyAgICAgICAgICAgICAgICBJZiBhIHRyaWdnZXIgZG9lc24ndCBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjaywgdGhlIGRlZmF1bHRcbisgICAgICAgICAgICAgICAgdmFsdWUgd2lsbCBiZSB0cnVlIGZvciBwcml2YXRlIHRyaWdnZXJzIGFuZCBmYWxzZSBmb3IgZ2VuZXJpY1xuKyAgICAgICAgICAgICAgICBvbmVzLlxuK1xuIExFRCBkcml2ZXIgY2FuIGFjdGl2YXRlIGFkZGl0aW9uYWwgbW9kZXMgYnkgZGVmYXVsdCB0byB3b3JrYXJvdW5kIHRoZVxuIGltcG9zc2liaWxpdHkgb2Ygc3VwcG9ydGluZyBlYWNoIGRpZmZlcmVudCBtb2RlIG9uIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlci5cbiBFeGFtcGxlcyBhcmUgaGFyZGNvZGluZyB0aGUgYmxpbmsgc3BlZWQgdG8gYSBzZXQgaW50ZXJ2YWwsIGVuYWJsZSBzcGVjaWFsXG5AQCAtMzExLDkgKzMyMyw2OSBAQCB0aGUgZW5kIHVzZSBod19jb250cm9sX3NldCB0byBhY3RpdmF0ZSBodyBjb250cm9sLlxuIEEgdHJpZ2dlciBjYW4gdXNlIGh3X2NvbnRyb2xfZ2V0IHRvIGNoZWNrIGlmIGEgTEVEIGlzIGFscmVhZHkgaW4gaHcgY29udHJvbFxuIGFuZCBpbml0IHRoZWlyIGZsYWdzLlxuIFxuK0FsdGVybmF0aXZlbHksIGEgcHJpdmF0ZSB0cmlnZ2VyIGNhbiBiZSBpbXBsZW1lbnRlZCBhbG9uZyB3aXRoIHRoZSBMRUQgZHJpdmVyIGlmXG4rdGhlIExFRCdzIGhhcmR3YXJlIGNvbnRyb2wgZG9lc24ndCBmaXQgYW55IGdlbmVyaWMgdHJpZ2dlci4gVG8gYXNzb2NpYXRlIHRoZVxuK3ByaXZhdGUgdHJpZ2dlciB3aXRoIHRoZSBMRUQgY2xhc3NkZXYsIHRoZWlyIGB0cmlnZ2VyX3R5cGVgIG11c3QgYmUgdGhlIHNhbWUuIFRvXG4rZGVjbGFyZSB0aGF0IHRoZSBwcml2YXRlIHRyaWdnZXIgcHJvdmlkZXMgaGFyZHdhcmUgY29udHJvbCBmb3IgdGhlIGFzc29jaWF0ZWRcbitMRUQgY2xhc3NkZXYsIHNldCB0aGUgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgc3RyaW5nIHRvIHRoZSB0cmlnZ2VyJ3MgbmFtZS4gU2luY2Vcbitib3RoIHRoZSBMRUQgY2xhc3NkZXYgYW5kIHRoZSBwcml2YXRlIHRyaWdnZXIgYXJlIGluIHRoZSBzYW1lIExFRCBkcml2ZXIsIGl0J3Ncbitub3QgbmVjZXNzYXJ5IGZvciB0aGVtIHRvIGNvb3JkaW5hdGUgdmlhIGBod19jb250cm9sXypgIGNhbGxiYWNrcy5cbitcbiBXaGVuIHRoZSBMRUQgaXMgaW4gaHcgY29udHJvbCwgbm8gc29mdHdhcmUgYmxpbmsgaXMgcG9zc2libGUgYW5kIGRvaW5nIHNvXG4gd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIGh3IGNvbnRyb2wuXG4gXG4rSGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvblxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitTb21lIGhhcmR3YXJlIGNhbiBhdXRvbm9tb3VzbHkgYWN0aXZhdGUvZGVhY3RpdmF0ZSBoYXJkd2FyZSBjb250cm9sLiBBZnRlciB0aGF0LFxuK3RoZSBMRUQgaGFyZHdhcmUgbm90aWZpZXMgdGhlIExFRCBkcml2ZXIuXG4rXG4rSWYgdGhlIGRyaXZlciBjYW4gZGV0ZWN0IHN1Y2ggdHJhbnNpdGlvbnMgYW5kIHRodXMgd2FudHMgdG8gbm90aWZ5IHRoZSBMRUQgY29yZVxuK3RvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIHRoZW4gdGhlIGBMRURfVFJJR19IV19DSEFOR0VEYCBmbGFnIG11c3QgYmUgc2V0IGluXG4rZmxhZ3MgYmVmb3JlIHJlZ2lzdGVyaW5nLiBUbyB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciBhY2NvcmRpbmdseSwgY2FsbFxuK2BsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBvbiB0aGUgTEVEIGNsYXNzZGV2LlxuK1xuK1RoaXMgY2FwYWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIHRoZSBMRUQgZGV2aWNlJ3MgcHJpdmF0ZSB0cmlnZ2VyLiBUaGUgcHJpdmF0ZVxuK3RyaWdnZXIgbXVzdCBoYXZlIGJlZW4gcHJvcGVybHkgcmVnaXN0ZXJlZCAoc2VlIGFib3ZlKSBhbmQgbmFtZWQgYWZ0ZXJcbitgaHdfY29udHJvbF90cmlnZ2VyYC5cbitcbitPbmx5IHR3byB0cmFuc2l0aW9ucyBhcmUgZGVmaW5lZDpcbitcbistIFwibm9uZVwiID1cdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyOlxuKyAgICAgICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGhhcmR3YXJlIGF1dG9ub21vdXNseSBhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbFxuKyAgICAgICAgYW5kIHdoZW4gXCJub25lXCIgKGkuZS4sIG5vIHRyaWdnZXIpIGlzIGN1cnJlbnRseSBhY3RpdmUuIElmIHRoZSBwcml2YXRlXG4rICAgICAgICB0cmlnZ2VyIGlzIGFscmVhZHkgYWN0aXZlIHdoZW4gdGhlIG1ldGhvZCBpcyBjYWxsZWQsIHRoaXMgaXMgZXNzZW50aWFsbHlcbisgICAgICAgIGEgbm8tb3AuXG4rXG4rICAgICAgICBUaGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHByaXZhdGUgdHJpZ2dlciB3aWxsIGJlIGV4ZWN1dGVkIGFzXG4rICAgICAgICBub3JtYWwuXG4rXG4rICAgICAgICBUaGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZVxuKyAgICAgICAgYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBjdXJyZW50bHkgaW4gaGFyZHdhcmVcbisgICAgICAgIGNvbnRyb2wuXG4rXG4rICAgICAgICBJZiBlcnJvciBvY2N1cnMgaW4gdGhlIGFjdGl2YXRpb24gc2VxdWVuY2UsIHRoZSBMRUQgVHJpZ2dlciBjb3JlIHJldmVydHNcbisgICAgICAgIHRoZSBlZmZlY3RpdmUgdHJpZ2dlciB0byBcIm5vbmVcIi5cbitcbistIHByaXZhdGUgdHJpZ2dlciA9XHUwMDNlIFwibm9uZVwiXG4rICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGRlYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2xcbisgICAgICAgIGFuZCB3aGVuIHRoZSBwcml2YXRlIHRyaWdnZXIgaXMgY3VycmVudGx5IGFjdGl2ZS4gSWYgXCJub25lXCIgKGkuZS4sIG5vXG4rICAgICAgICB0cmlnZ2VyKSBpcyBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseSBhXG4rICAgICAgICBuby1vcC5cbitcbisgICAgICAgIFRoZSBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xuKyAgICAgICAgbm9ybWFsLCBleGNlcHQgdGhhdCB0aGUgY3VycmVudCBMRUQgYnJpZ2h0bmVzcyBpcyByZXRhaW5lZC4gVGhlIHJlYXNvblxuKyAgICAgICAgZm9yIGtlZXBpbmcgdGhlIGJyaWdodG5lc3MgdW5jaGFuZ2VkIGlzIHRoYXQgc29tZSBoYXJkd2FyZSBtYXkgY2hvb3NlIGFcbisgICAgICAgIHNwZWNpZmljIGJyaWdodG5lc3MgaW5zdGVhZCBvZiBzaW1wbHkgdHVybmluZyBvZmYgdGhlIExFRCBhZnRlclxuKyAgICAgICAgYXV0b25vbW91c2x5IGRlYWN0aXZhdGluZyBoYXJkd2FyZSBjb250cm9sLlxuK1xuKyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcbisgICAgICAgIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBub3QgY3VycmVudGx5IGluIGhhcmR3YXJlXG4rICAgICAgICBjb250cm9sLlxuK1xuK0lmIHRoZSBjdXJyZW50IHRyaWdnZXIgaXMgbmVpdGhlciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIG5vciBcIm5vbmVcIiwgbm8gdHJhbnNpdGlvblxuK3dpbGwgYmUgbWFkZS5cbitcbiBLbm93biBJc3N1ZXNcbiA9PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbmluZGV4IGE1MWIwZWQ1Mzg4NjQuLjNiNDM4ZDhkYTVlMGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xuQEAgLTI3LDI5ICsyNywxOSBAQCBzdGF0aWMgTElTVF9IRUFEKGxlZHNfbG9va3VwX2xpc3QpO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTtcbiBcbi1zdGF0aWMgYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuLXtcbi0jaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbi1cdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4tXHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNldHJpZ2dlciBcdTAwMjZcdTAwMjYgbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2V0cmlnZ2VyX3R5cGU7XG4tI2Vsc2Vcbi1cdHJldHVybiBmYWxzZTtcbi0jZW5kaWZcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuIFx0dW5zaWduZWQgaW50IGJyaWdodG5lc3M7XG4gXG4tXHRpZiAobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXG4tXHRcdHJldHVybiAtRU5PREFUQTtcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcykge1xuK1x0XHRpZiAobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXG4rXHRcdFx0cmV0dXJuIC1FTk9EQVRBO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZsZWRfY2Rldi1cdTAwM2VsZWRfYWNjZXNzKTtcbi1cdGxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7XG4tXHRicmlnaHRuZXNzID0gbGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcztcbi1cdG11dGV4X3VubG9jayhcdTAwMjZsZWRfY2Rldi1cdTAwM2VsZWRfYWNjZXNzKTtcbitcdFx0bGVkX3VwZGF0ZV9icmlnaHRuZXNzKGxlZF9jZGV2KTtcbitcdFx0YnJpZ2h0bmVzcyA9IGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3M7XG4rXHR9XG4gXG4gXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXVcXG5cIiwgYnJpZ2h0bmVzcyk7XG4gfVxuQEAgLTc0LDYgKzY0LDkgQEAgc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXG4gXHRpZiAoc3RhdGUgPT0gTEVEX09GRilcbiBcdFx0bGVkX3RyaWdnZXJfcmVtb3ZlKGxlZF9jZGV2KTtcbitcdGVsc2VcbitcdFx0bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wobGVkX2NkZXYpO1xuK1xuIFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBzdGF0ZSk7XG4gXG4gXHRyZXQgPSBzaXplO1xuQEAgLTEwMyw4ICs5NiwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0ge1xuIFx0XHUwMDI2YmluX2F0dHJfdHJpZ2dlcixcbiBcdE5VTEwsXG4gfTtcbitcbitzdGF0aWMgREVWSUNFX0FUVFJfUk8odHJpZ2dlcl9tYXlfb2ZmbG9hZCk7XG4rc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZF90cmlnZ2VyX2F0dHJzW10gPSB7XG4rXHRcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIsXG4rXHROVUxMXG4rfTtcbitcbitzdGF0aWMgdW1vZGVfdCBsZWRfdHJpZ2dlcl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbitcdFx0XHRcdCAgICAgIGludCBpZHgpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaik7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1xuK1x0aWYgKGF0dHIgPT0gXHUwMDI2ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyKVxuK1x0XHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID8gYXR0ci1cdTAwM2Vtb2RlIDogMDtcbitcbitcdHJldHVybiBhdHRyLVx1MDAzZW1vZGU7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxlZF90cmlnZ2VyX2dyb3VwID0ge1xuIFx0LmJpbl9hdHRycyA9IGxlZF90cmlnZ2VyX2Jpbl9hdHRycyxcbitcdC5hdHRycyA9IGxlZF90cmlnZ2VyX2F0dHJzLFxuK1x0LmlzX3Zpc2libGUgPSBsZWRfdHJpZ2dlcl9pc192aXNpYmxlLFxuIH07XG4gI2VuZGlmXG4gXG5AQCAtNTk2LDYgKzYxMSw5IEBAIGludCBsZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbiBcdGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KGxlZF9jZGV2KTtcbiAjZW5kaWZcbiBcbitcdGlmIChsZWRfY2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRClcbitcdFx0bGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKGxlZF9jZGV2KTtcbitcbiBcdG11dGV4X3VubG9jayhcdTAwMjZsZWRfY2Rldi1cdTAwM2VsZWRfYWNjZXNzKTtcbiBcbiBcdGRldl9kYmcocGFyZW50LCBcIlJlZ2lzdGVyZWQgbGVkIGRldmljZTogJXNcXG5cIixcbkBAIC02MTYsNiArNjM0LDkgQEAgdm9pZCBsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiBcdGlmIChJU19FUlJfT1JfTlVMTChsZWRfY2Rldi1cdTAwM2VkZXYpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpXG4rXHRcdGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChsZWRfY2Rldik7XG4rXG4gI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4gXHRkb3duX3dyaXRlKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4gXHRpZiAobGVkX2NkZXYtXHUwMDNldHJpZ2dlcilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcbmluZGV4IGIxMjIzMjE4YmRhMTEuLmE5ZDk5MmE4ODYxNjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xuQEAgLTcsOSArNywxMyBAQFxuICAqIEF1dGhvcjogUmljaGFyZCBQdXJkaWUgXHUwMDNjcnB1cmRpZUBvcGVuZWRoYW5kLmNvbVx1MDAzZVxuICAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2NrZGVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG5AQCAtMzMsNiArMzcsMzQgQEAgdHJpZ2dlcl9yZWxldmFudChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuIFx0cmV0dXJuICF0cmlnLVx1MDAzZXRyaWdnZXJfdHlwZSB8fCB0cmlnLVx1MDAzZXRyaWdnZXJfdHlwZSA9PSBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX3R5cGU7XG4gfVxuIFxuK3N0YXRpYyBib29sIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXG4rXHRpZiAoIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXIpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICghbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8XG4rXHQgICAgc3RyY21wKGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciwgbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VuYW1lKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlb2ZmbG9hZGVkKVxuK1x0XHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VvZmZsb2FkZWQobGVkX2NkZXYpO1xuK1xuK1x0ZGV2X3dhcm5fb25jZShsZWRfY2Rldi1cdTAwM2VkZXYsIFwiaHcgY29udHJvbCB0cmlnZ2VyICVzIGRvZXNuJ3QgaW1wbGVtZW50IG9mZmxvYWRlZCgpXFxuXCIsXG4rXHRcdCAgICAgIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSk7XG4rXG4rXHQvKiBPdGhlcndpc2UgYXNzdW1lIHByaXZhdGUgdHJpZ2dlcnMgYXMgYWx3YXlzIG9mZmxvYWRlZC4gKi9cbitcdHJldHVybiBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZXRyaWdnZXJfdHlwZTtcbit9XG4rXG4rYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZCk7XG4rXG4gc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcbiBcdFx0XHQgIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudClcbkBAIC0xNjMsNyArMTk1LDggQEAgc3NpemVfdCBsZWRfdHJpZ2dlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZWFkKTtcbiBcbiAvKiBDYWxsZXIgbXVzdCBlbnN1cmUgbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrIGhlbGQgKi9cbi1pbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4rc3RhdGljIGludCBfX2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnLFxuK1x0XHRcdCAgICAgYm9vbCBod190cmlnZ2VyZWQpXG4ge1xuIFx0Y2hhciAqZXZlbnQgPSBOVUxMO1xuIFx0Y2hhciAqZW52cFsyXTtcbkBAIC0xOTQsNyArMjI3LDIxIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcdFx0bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9kYXRhID0gTlVMTDtcbiBcdFx0bGVkX2NkZXYtXHUwMDNlYWN0aXZhdGVkID0gZmFsc2U7XG4gXHRcdGxlZF9jZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkxFRF9JTklUX0RFRkFVTFRfVFJJR0dFUjtcbi1cdFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTtcbitcbitcdFx0LypcbitcdFx0ICogSGFyZHdhcmUgbWF5IGhhdmUgc2VsZWN0ZWQgYSBuZXcgYnJpZ2h0bmVzcyBsZXZlbCBkdXJpbmcgaXRzXG4rXHRcdCAqIGhhcmR3YXJlIGNvbnRyb2wgdHJhbnNpdGlvbiwgc28gb25seSByZXNldCBicmlnaHRuZXNzIGlmIHdlXG4rXHRcdCAqIGFyZSBzd2l0Y2hpbmcgdG8gYW5vdGhlciB0cmlnZ2VyIG9yIGlmIHRoZSBzd2l0Y2hpbmcgaXMgbm90XG4rXHRcdCAqIGhhcmR3YXJlIHRyaWdnZXJlZC5cbitcdFx0ICpcbitcdFx0ICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIGVycm9yIHBhdGgsIGFzIHJ1bm5pbmdcbitcdFx0ICogaW50byB0aGUgZXJyb3IgcGF0aCBpbXBsaWVzIGEgbm9uZSA9XHUwMDNlIHByaXZhdGUgdHJpZ2dlclxuK1x0XHQgKiB0cmFuc2l0aW9uLiBUaGlzIGhpbnRzIHRoYXQgdGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlXG4rXHRcdCAqIHRyaWdnZXIgbXVzdCBoYXZlIHNvbWUgZnVuZGFtZW50YWwgYnVncywgc28gZG9uJ3QgYm90aGVyXG4rXHRcdCAqIGxlYXZpbmcgdGhlIExFRCBpbiBhbiB1bmRlZmluZWQgc3RhdGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAodHJpZyB8fCAhaHdfdHJpZ2dlcmVkKVxuK1x0XHRcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7XG4gXHR9XG4gXHRpZiAodHJpZykge1xuIFx0XHRzcGluX2xvY2soXHUwMDI2dHJpZy1cdTAwM2VsZWRkZXZfbGlzdF9sb2NrKTtcbkBAIC0yNTgsNiArMzA1LDExIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuK1xuK2ludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbit7XG4rXHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIHRyaWcsIGZhbHNlKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0KTtcbiBcbiB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbkBAIC0yNjgsNiArMzIwLDE1IEBAIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmUpO1xuIFxuK3ZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXG4rXHRpZiAoX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSlcbitcdFx0bGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wpO1xuK1xuIHN0YXRpYyBib29sIGxlZF9tYXRjaF9kZWZhdWx0X3RyaWdnZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4ge1xuQEAgLTMxMyw2ICszNzQsMzIgQEAgdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQpO1xuIFxuK3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuK3tcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXHRzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7XG4rXHRib29sIGhpdCwgb2ZmbG9hZGVkO1xuK1x0aW50IGxlbjtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZsZWRfY2Rldi1cdTAwM2VsZWRfYWNjZXNzKTtcbitcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXG4rXHR0cmlnID0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcjtcbitcbitcdG9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XG4rXHRoaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgXHUwMDI2XHUwMDI2ICFzdHJjbXAobGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCB0cmlnLVx1MDAzZW5hbWUpKTtcbitcbitcdC8qIFtvZmZsb2FkZWRdIFx1MDAzY2FjdGl2ZV9idXRfbm90X29mZmxvYWRlZFx1MDAzZSBpbmFjdGl2ZSAqL1xuK1x0bGVuID0gc3lzZnNfZW1pdChidWYsIFwiJXMlcyVzXFxuXCIsXG4rXHRcdFx0IG9mZmxvYWRlZCA/IFwiW1wiIDogKGhpdCA/IFwiXHUwMDNjXCIgOiBcIlwiKSxcbitcdFx0XHQgbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLFxuK1x0XHRcdCBvZmZsb2FkZWQgPyBcIl1cIiA6IChoaXQgPyBcIlx1MDAzZVwiIDogXCJcIikpO1xuK1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwodHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KTtcbitcbiAvKiBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cbiBcbiBpbnQgbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuQEAgLTQwMyw2ICs0OTAsODggQEAgaW50IGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2xlZF90cmlnZ2VyX3JlZ2lzdGVyKTtcbiBcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuK1xuK3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSxcbitcdFx0XHRcdFx0XHQgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKVxuK3tcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKSB7XG4rXHRcdC8qIFwibm9uZVwiID1cdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyLiAqL1xuK1x0XHRpZiAoYWN0aXZhdGUpXG4rXHRcdFx0ZXJyID0gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIGhjX3RyaWcsIHRydWUpO1xuK1x0fSBlbHNlIGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyID09IGhjX3RyaWcpIHtcbitcdFx0LyogcHJpdmF0ZSB0cmlnZ2VyID1cdTAwM2UgXCJub25lXCIuICovXG4rXHRcdGlmICghYWN0aXZhdGUpXG4rXHRcdFx0ZXJyID0gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIE5VTEwsIHRydWUpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogT3RoZXIgdHJpZ2dlciBpcyBhY3RpdmUuICovXG4rXHRcdGRldl9kYmcobGVkX2NkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiSWdub3JpbmcgaHcgY29udHJvbCB0cmFuc2l0aW9uICglcyAlcykgd2hpbGUgJXMgaXMgYWN0aXZlXCIsXG4rXHRcdFx0YWN0aXZhdGUgPyBcImFjdGl2YXRlXCIgOiBcImRlYWN0aXZhdGVcIiwgaGNfdHJpZy1cdTAwM2VuYW1lLFxuK1x0XHRcdGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSk7XG4rXG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChlcnIpXG4rXHRcdGRldl93YXJuKGxlZF9jZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gJXMgJXMgaW4gaHcgY29udHJvbCB0cmFuc2l0aW9uOiAlZFwiLFxuK1x0XHRcdCBhY3RpdmF0ZSA/IFwiYWN0aXZhdGVcIiA6IFwiZGVhY3RpdmF0ZVwiLCBoY190cmlnLVx1MDAzZW5hbWUsIGVycik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsZWRfY2xhc3NkZXYsIHRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7XG4rXHRib29sIGFjdGl2YXRlID0gUkVBRF9PTkNFKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWQpO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFx1MDAyNnRyaWdnZXJzX2xpc3RfbG9jaykge1xuK1x0XHRzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkodHJpZywgXHUwMDI2dHJpZ2dlcl9saXN0LCBuZXh0X3RyaWcpIHtcbitcdFx0XHRpZiAodHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhc3RyY21wKHRyaWctXHUwMDNlbmFtZSwgbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyKSkge1xuK1x0XHRcdFx0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXG4rXHRcdFx0XHRsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24obGVkX2NkZXYsIGFjdGl2YXRlLCB0cmlnKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdGRldl9lcnIobGVkX2NkZXYtXHUwMDNlZGV2LFxuK1x0XHRcIiVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxuXCIsXG4rXHRcdF9fZnVuY19fLCBsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIpO1xuK31cbitcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpXG4re1xuK1x0LyogUmVzdHJpY3RlZCB0byBwcml2YXRlIHRyaWdnZXJzLiAqL1xuK1x0aWYgKFdBUk5fT04oIShsZWRfY2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRCkgfHxcbitcdFx0ICAgICFsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgfHwgIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfdHlwZSkpXG4rXHRcdHJldHVybjtcbitcbitcdFdSSVRFX09OQ0UobGVkX2NkZXYtXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZCwgYWN0aXZhdGUpO1xuK1xuK1x0c2NoZWR1bGVfd29yayhcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKTtcbitcbit2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRJTklUX1dPUksoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrLCBsZWRfdHJpZ2dlcl9od19jb250cm9sX2NoYW5nZWRfd29ya2VyKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKTtcbitcbit2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQpO1xuK1xuKyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXG4rXG4gLyogU2ltcGxlIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqL1xuIFxuIHZvaWQgbGVkX3RyaWdnZXJfZXZlbnQoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuaW5kZXggMTg0NGQwY2Q1ZjUyOC4uNmRiODNkMDE1Mjc3NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jXG5AQCAtODUsMTIgKzg1LDE4IEBAIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiBcdHJldHVybiBjcm9zX2VjX2xlZF9zZW5kX2NtZChwcml2LVx1MDAzZWNyb3NfZWMsIFx1MDAyNmFyZyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgY3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgY3Jvc19lY19sZWRfdHJpZ2dlciA9IHtcbiBcdC5uYW1lID0gXCJjaHJvbWVvcy1hdXRvXCIsXG4gXHQudHJpZ2dlcl90eXBlID0gXHUwMDI2Y3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlLFxuIFx0LmFjdGl2YXRlID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWQgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuaW5kZXggZWQ2YTQ3YmJiNDRmOS4uMzJkNDBkMTc2ZDNmMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuQEAgLTE5NSwxMCArMTk1LDE2IEBAIHN0YXRpYyB2b2lkIG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpXG4gXHRcdFx0ZXJyKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgb21uaWFfaHd0cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIG9tbmlhX2h3X3RyaWdnZXIgPSB7XG4gXHQubmFtZVx0XHQ9IFwib21uaWEtbWN1XCIsXG4gXHQuYWN0aXZhdGVcdD0gb21uaWFfaHd0cmlnX2FjdGl2YXRlLFxuIFx0LmRlYWN0aXZhdGVcdD0gb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUsXG4rXHQub2ZmbG9hZGVkXHQ9IG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQsXG4gXHQudHJpZ2dlcl90eXBlXHQ9IFx1MDAyNm9tbmlhX2h3X3RyaWdnZXJfdHlwZSxcbiB9O1xuIFxuQEAgLTI1MSw2ICsyNTcsNyBAQCBzdGF0aWMgaW50IG9tbmlhX2xlZF9yZWdpc3RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3Qgb21uaWFfbGVkICpsZWQsXG4gXHQgKiBieSBMRUQgY2xhc3MgZnJvbSB0aGUgbGludXgsZGVmYXVsdC10cmlnZ2VyIHByb3BlcnR5LlxuIFx0ICovXG4gXHRjZGV2LVx1MDAzZWRlZmF1bHRfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTtcbitcdGNkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xuIFxuIFx0LyogUHV0IHRoZSBMRUQgaW50byBzb2Z0d2FyZSBtb2RlICovXG4gXHRyZXQgPSBvbW5pYV9jbWRfd3JpdGVfdTgoY2xpZW50LCBPTU5JQV9DTURfTEVEX01PREUsIE9NTklBX0NNRF9MRURfTU9ERV9MRUQobGVkLVx1MDAzZXJlZykgfFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLmggYi9kcml2ZXJzL2xlZHMvbGVkcy5oXG5pbmRleCBiZWU0NjY1MWUwNjhmLi5iZGFjMjMzNjAxMmU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMuaFxuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxuQEAgLTI3LDggKzI3LDE4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXG4gXHRcdFx0bG9mZl90IHBvcywgc2l6ZV90IGNvdW50KTtcbitzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7XG4gXG4gZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbGVkc19saXN0X2xvY2s7XG4gZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbGVkc19saXN0O1xuIFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG4rdm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuK3ZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbisjZWxzZSAvKiAhQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHsgfVxuKyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXG4rXG4gI2VuZGlmXHQvKiBfX0xFRFNfSF9JTkNMVURFRCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG5pbmRleCBjMTEyODJhNzRiNWFjLi5hMTFkMDRjZTRhYjJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xuQEAgLTksNiArOSwxNiBAQCBtZW51Y29uZmlnIExFRFNfVFJJR0dFUlNcbiBcbiBpZiBMRURTX1RSSUdHRVJTXG4gXG4rY29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuK1x0Ym9vbCBcIkxFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcIlxuK1x0ZGVmYXVsdCBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxuK1x0aGVscFxuK1x0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGluaXRpYXRlZCBoYXJkd2FyZSBjb250cm9sXG4rXHQgIHRyYW5zaXRpb25zLCB3aGVyZSB0aGUgTEVEIGhhcmR3YXJlIGF1dG9ub21vdXNseSBzd2l0Y2hlcyBiZXR3ZWVuXG4rXHQgIFwibm9uZVwiIChpLmUuLCBubyB0cmlnZ2VyKSBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlci5cbitcbitcdCAgU2VlIERvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBmb3IgZGV0YWlscy5cbitcbiBjb25maWcgTEVEU19UUklHR0VSX1RJTUVSXG4gXHR0cmlzdGF0ZSBcIkxFRCBUaW1lciBUcmlnZ2VyXCJcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuY1xuaW5kZXggNWI0ZTkyYzE0ZGJiNC4uMmU5YWY0OGE3NGRiZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcbisrKyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcbkBAIC03OTgsMTAgKzc5OCwxOCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIFx0a2ZyZWUodHJpZ2dlcl9kYXRhKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHN0cnVjdCBsZWRfbmV0ZGV2X2RhdGEgKnRyaWdnZXJfZGF0YSA9IGxlZF9nZXRfdHJpZ2dlcl9kYXRhKGxlZF9jZGV2KTtcbitcbitcdHJldHVybiB0cmlnZ2VyX2RhdGEtXHUwMDNlaHdfY29udHJvbDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBuZXRkZXZfbGVkX3RyaWdnZXIgPSB7XG4gXHQubmFtZSA9IFwibmV0ZGV2XCIsXG4gXHQuYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19hY3RpdmF0ZSxcbiBcdC5kZWFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWQgPSBuZXRkZXZfdHJpZ19vZmZsb2FkZWQsXG4gXHQuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuaW5kZXggNTE2NTk0OTkzMDczOS4uYTk3ODUyYjBiMjI4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuQEAgLTE2LDYgKzE2LDcgQEAgY29uZmlnIElERUFQQURfTEFQVE9QXG4gXHRzZWxlY3QgSU5QVVRfU1BBUlNFS01BUFxuIFx0c2VsZWN0IE5FV19MRURTXG4gXHRzZWxlY3QgTEVEU19DTEFTU1xuK1x0c2VsZWN0IExFRFNfVFJJR0dFUlNcbiBcdGhlbHBcbiBcdCAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3JcbiBcdCAgcmZraWxsIHN3aXRjaCwgaG90a2V5LCBmYW4gY29udHJvbCBhbmQgYmFja2xpZ2h0IGNvbnRyb2wuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xuaW5kZXggODIxMzUyNDUwNGVlYi4uZjg2YzExZjUxZDBiZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXG4rKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xuQEAgLTE0LDkgKzE0LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaTgwNDIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuQEAgLTI2LDkgKzI5LDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX3Byb2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvd2VyX3N1cHBseS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZmtpbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXHUwMDNlXG5AQCAtMTM0LDEwICsxMzksMzEgQEAgZW51bSB7XG4gfTtcbiBcbiAvKlxuLSAqIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgc3RhdGVzIC0gMVxuLSAqIEZ1dHVyZSBrZXlib2FyZCB0eXBlcyBtYXkgbmVlZCBhIG5ldyBzeXN0ZW0sIGlmIHRoZXJlJ3MgYSBjb2xsaXNpb25cbi0gKiBLQkRfQkxfVFJJU1RBVEVfQVVUTyBoYXMgbm8gd2F5IHRvIHJlcG9ydCBvciBzZXQgdGhlIGF1dG8gc3RhdGVcbi0gKiBzbyBpdCBlZmZlY3RpdmVseSBoYXMgMyBzdGF0ZXMsIGJ1dCBuZWVkcyB0byBoYW5kbGUgNFxuKyAqIFRoZSBlbnVtZXJhdGlvbiBoYXMgdHdvIHB1cnBvc2VzOlxuKyAqICAgLSBhcyBhbiBpbnRlcm5hbCBpZGVudGlmaWVyIGZvciBhbGwga25vd24gdHlwZXMgb2Yga2V5Ym9hcmQgYmFja2xpZ2h0XG4rICogICAtIGFzIGEgbWFuZGF0b3J5IHBhcmFtZXRlciBvZiB0aGUgS0JMQyBjb21tYW5kXG4rICpcbisgKiBGb3IgZWFjaCB0eXBlLCB0aGUgaGFyZHdhcmUgYnJpZ2h0bmVzcyB2YWx1ZXMgYXJlIGRlZmluZWQgYXMgZm9sbG93czpcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xuKyAqIHwgICAgICBIYXJkd2FyZSBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHwgICAgMyB8XG4rICogfCBUeXBlICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfCAgICAgIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xuKyAqIHwgS0JEX0JMX1NUQU5EQVJEICAgICAgICAgIHwgICAgICBvZmYgfCAgb24gfCAgTi9BIHwgIE4vQSB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKiB8IEtCRF9CTF9UUklTVEFURSAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8ICBOL0EgfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXG4rICogfCBLQkRfQkxfVFJJU1RBVEVfQVVUTyAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfCBhdXRvIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xuKyAqXG4rICogV2UgbWFwIExFRCBjbGFzc2RldiBicmlnaHRuZXNzIGZvciBLQkRfQkxfVFJJU1RBVEVfQVVUTyBhcyBmb2xsb3dzOlxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcbisgKiB8ICBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8XG4rICogfCBPcGVyYXRpb24gICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcbisgKiB8IFJlYWQgICAgICAgICAgICAgICAgICAgICB8IG9mZi9hdXRvIHwgbG93IHwgaGlnaCB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xuKyAqIHwgV3JpdGUgICAgICAgICAgICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXG4gICovXG4gZW51bSB7XG4gXHRLQkRfQkxfU1RBTkRBUkQgICAgICA9IDEsXG5AQCAtMTQ1LDYgKzE3MSw4IEBAIGVudW0ge1xuIFx0S0JEX0JMX1RSSVNUQVRFX0FVVE8gPSAzLFxuIH07XG4gXG4rI2RlZmluZSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1NcdDNcbitcbiAjZGVmaW5lIEtCRF9CTF9RVUVSWV9UWVBFXHRcdDB4MVxuICNkZWZpbmUgS0JEX0JMX1RSSVNUQVRFX1RZUEVcdFx0MHg1XG4gI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfQVVUT19UWVBFXHQweDdcbkBAIC0yMDAsMTAgKzIyOCwxNCBAQCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlIHtcbiBcdFx0Ym9vbCB5bWNfZWNfdHJpZ2dlciAgICAgICA6IDE7XG4gXHR9IGZlYXR1cmVzO1xuIFx0c3RydWN0IHtcbi1cdFx0Ym9vbCBpbml0aWFsaXplZDtcbitcdFx0aW50IGluaXRpYWxpemVkOyAvKiAgMDogaW5pdGlhbGl6aW9uIHBlbmRpbmcvb25nb2luZy9mYWlsZWRcbitcdFx0XHRcdCAgKiBcdTAwM2UwOiBpbml0aWFsaXppb24gZmluaXNoZWRcbitcdFx0XHRcdCAgKiBcdTAwM2MwOiB1bnJlZ2lzdGVyYXRpb24gb25nb2luZy9maW5pc2hlZFxuK1x0XHRcdFx0ICAqL1xuIFx0XHRpbnQgdHlwZTtcbiBcdFx0c3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7XG4tXHRcdHVuc2lnbmVkIGludCBsYXN0X2JyaWdodG5lc3M7XG4rXHRcdHVuc2lnbmVkIGludCBsYXN0X2h3X2JyaWdodG5lc3M7XG4rXHRcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogcHJvdGVjdHMgYnJpZ2h0bmVzcyB0cmFja2luZyAqL1xuIFx0fSBrYmRfYmw7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRib29sIGluaXRpYWxpemVkO1xuQEAgLTE1OTIsNyArMTYyNCwyNCBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKGludCB0eXBlKVxuIFx0cmV0dXJuICh0eXBlID09IEtCRF9CTF9UUklTVEFURSkgfHwgKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pO1xuIH1cbiBcbi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBod19icmlnaHRuZXNzKVxuK3tcbitcdC8qIE9mZiwgbG93IG9yIGhpZ2ggKi9cbitcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYz0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuK1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbitcbitcdC8qIEF1dG8gKGNvbnRyb2xsZWQgYnkgRUMgYWNjb3JkaW5nIHRvIEFMUyksIHJlcG9ydCBhcyBvZmYgKi9cbitcdGlmIChwcml2LVx1MDAzZWtiZF9ibC50eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFVua25vd24gdmFsdWUgKi9cbitcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbitcdFx0IFwiVW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVkXCIsIGh3X2JyaWdodG5lc3MpO1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHZhbHVlO1xuIFx0aW50IGVycjtcbkBAIC0xNjA2LDIxICsxNjU1LDcgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4tXHRcdC8qIENvbnZlcnQgcmV0dXJuZWQgdmFsdWUgdG8gYnJpZ2h0bmVzcyBsZXZlbCAqL1xuLVx0XHR2YWx1ZSA9IEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTtcbi1cbi1cdFx0LyogT2ZmLCBsb3cgb3IgaGlnaCAqL1xuLVx0XHRpZiAodmFsdWUgXHUwMDNjPSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4tXHRcdFx0cmV0dXJuIHZhbHVlO1xuLVxuLVx0XHQvKiBBdXRvLCByZXBvcnQgYXMgb2ZmICovXG4tXHRcdGlmICh2YWx1ZSA9PSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgKyAxKVxuLVx0XHRcdHJldHVybiAwO1xuLVxuLVx0XHQvKiBVbmtub3duIHZhbHVlICovXG4tXHRcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbi1cdFx0XHQgXCJVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWx1XCIsIHZhbHVlKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldHVybiBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7XG4gXHR9XG4gXG4gXHRlcnIgPSBldmFsX2hhbHMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgXHUwMDI2dmFsdWUpO1xuQEAgLTE2MzAsNiArMTY2NSwxNiBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gISF0ZXN0X2JpdChIQUxTX0tCRF9CTF9TVEFURV9CSVQsIFx1MDAyNnZhbHVlKTtcbiB9XG4gXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuK3tcbitcdGludCBod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4rXG4rXHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XG4rXG4rXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTtcbit9XG4rXG4gc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4ge1xuIFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG5AQCAtMTYzNyw5OSArMTY4MiwyMDcgQEAgc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFcbiBcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbiB9XG4gXG4tc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcylcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsXG4rXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaHdfYnJpZ2h0bmVzcylcbiB7XG4tXHRpbnQgZXJyO1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbiBcdGludCB0eXBlID0gcHJpdi1cdTAwM2VrYmRfYmwudHlwZTtcbitcdGludCBlcnI7XG4gXG4tXHRpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHtcbi1cdFx0aWYgKGJyaWdodG5lc3MgXHUwMDNlIHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5tdXRleCk7XG4gXG4tXHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHxcbitcdGlmIChpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZSh0eXBlKSkge1xuK1x0XHR2YWx1ZSA9IEZJRUxEX1BSRVAoS0JEX0JMX1NFVF9CUklHSFRORVNTLCBod19icmlnaHRuZXNzKSB8XG4gXHRcdFx0RklFTERfUFJFUChLQkRfQkxfQ09NTUFORF9UWVBFLCB0eXBlKSB8XG4gXHRcdFx0S0JEX0JMX0NPTU1BTkRfU0VUO1xuIFx0XHRlcnIgPSBleGVjX2tibGMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgdmFsdWUpO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIGJyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRik7XG4rXHRcdHZhbHVlID0gaHdfYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGO1xuK1x0XHRlcnIgPSBleGVjX3NhbHMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgdmFsdWUpO1xuIFx0fVxuLVxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XG4rXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpXG4re1xuK1x0aWYgKGJyaWdodG5lc3MgXHUwMDNlIHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHRcdFx0ICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4ge1xuIFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4gXG4rXHQvKlxuK1x0ICogV2hlbiB1bnJlZ2lzdGVyaW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBMRUQgdW5yZWdpc3RyYXRpb25cbitcdCAqIHdoZW4gb3VyIHByaXZhdGUgdHJpZ2dlciBpcyBhY3RpdmUuIFdlJ3ZlIHNldCBMRURfUkVUQUlOX0FUX1NIVVRET1dOXG4rXHQgKiB0byByZXRhaW4gbGVkX2NkZXYgYnJpZ2h0bmVzcyBsZXZlbC4gVG8gZG8gdGhlIHNhbWUgZm9yIGF1dG8gbW9kZSxcbitcdCAqIGdhdGUgY2hhbmdlcyBhbmQgcmV0dXJuIGVhcmx5LlxuK1x0ICpcbitcdCAqIEl0J3MgbmVlZGxlc3MgdG8gZ2F0ZSBjaGFuZ2VzIHdoZW4gaW5pdGlhbGl6aW5nLCBhcyB0aGVyZSBtYXkgYmUgYVxuK1x0ICogdGltZSBtYXJnaW4gYmV0d2VlbiBzeXNmcyBhdHRyaWJ1dGUgY3JlYXRpb24gYW5kIHN0YXRlIGNoYW5nZS5cbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkIFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubXV0ZXgpO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuK1xuK1x0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbGVkX2h3X3RyaWdnZXJfdHlwZSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcbitcbitzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlciA9IHtcbitcdC5uYW1lID0gXCJpZGVhcGFkLWF1dG9cIixcbitcdC50cmlnZ2VyX3R5cGUgPSBcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZSxcbitcdC5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWQgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkLFxuK307XG4rXG4rc3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQ7XG4rXG4rc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2woc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdixcbitcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgaHdfYnJpZ2h0bmVzcylcbit7XG4rXHRib29sIGh3X2NvbnRyb2wsIGxhc3RfaHdfY29udHJvbDtcbitcbitcdGlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgfHwgcHJpdi1cdTAwM2VrYmRfYmwudHlwZSAhPSBLQkRfQkxfVFJJU1RBVEVfQVVUTylcbitcdFx0cmV0dXJuO1xuK1xuK1x0aHdfY29udHJvbCA9IGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xuK1x0bGFzdF9od19jb250cm9sID0gcHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUztcbitcbitcdGlmIChod19jb250cm9sICE9IGxhc3RfaHdfY29udHJvbClcbitcdFx0bGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGh3X2NvbnRyb2wpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnkoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4tXHRpbnQgYnJpZ2h0bmVzcztcbitcdGludCBod19icmlnaHRuZXNzLCBicmlnaHRuZXNzO1xuIFxuLVx0aWYgKCFwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZClcbitcdGlmICh1bmxpa2VseShwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2M9IDApKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4tXHRpZiAoYnJpZ2h0bmVzcyBcdTAwM2MgMClcbitcdGd1YXJkKG11dGV4KShcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5tdXRleCk7XG4rXG4rXHRod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4rXHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKGJyaWdodG5lc3MgPT0gcHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzKVxuK1x0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4rXHRpZiAoYnJpZ2h0bmVzcyBcdTAwM2MgMClcbitcdFx0cmV0dXJuOyAvKiBSZWplY3QgaW5zYW5lIHZhbHVlcyBlYXJseS4gKi9cbitcbitcdGlmIChwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gaHdfYnJpZ2h0bmVzcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbitcdGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHByaXYsIGh3X2JyaWdodG5lc3MpO1xuK1xuK1x0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID0gaHdfYnJpZ2h0bmVzcztcbiBcbiBcdGxlZF9jbGFzc2Rldl9ub3RpZnlfYnJpZ2h0bmVzc19od19jaGFuZ2VkKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLmxlZCwgYnJpZ2h0bmVzcyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaW5pdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIHtcbi1cdGludCBicmlnaHRuZXNzLCBlcnI7XG4rXHRpbnQgaHdfYnJpZ2h0bmVzcywgZXJyO1xuIFxuIFx0aWYgKCFwcml2LVx1MDAzZWZlYXR1cmVzLmtiZF9ibClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4tXHRpZiAoV0FSTl9PTihwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCkpXG4rXHRpZiAoV0FSTl9PTihwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2UgMCkpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuLVx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpKVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xuLVx0ZWxzZVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSAwO1xuIFxuLVx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuLVx0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4tXHRcdHJldHVybiBicmlnaHRuZXNzO1xuK1x0ZXJyID0gZGV2bV9tdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldiwgXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubXV0ZXgpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcbitcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbitcbitcdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm5hbWUgICAgICAgICAgICAgICAgICAgID0gXCJwbGF0Zm9ybTo6XCIgTEVEX0ZVTkNUSU9OX0tCRF9CQUNLTElHSFQ7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuYnJpZ2h0bmVzc19nZXQgICAgICAgICAgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldDtcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0O1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmZsYWdzICAgICAgICAgICAgICAgICAgID0gTEVEX0JSSUdIVF9IV19DSEFOR0VEIHwgTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbiBcbitcdHN3aXRjaCAocHJpdi1cdTAwM2VrYmRfYmwudHlwZSkge1xuK1x0Y2FzZSBLQkRfQkxfVFJJU1RBVEVfQVVUTzpcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcbitcbitcdFx0aWYgKCFpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCkge1xuK1x0XHRcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbitcdFx0XHRcdCBcIkNhbm5vdCBwcm92aWRlIExFRCB0cmlnZ2VyICVzIGZvciBrZXlib2FyZCBiYWNrbGlnaHRcXG5cIixcbitcdFx0XHRcdCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmZsYWdzIHw9IExFRF9UUklHX0hXX0NIQU5HRUQ7XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC50cmlnZ2VyX3R5cGUgPSBcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmh3X2NvbnRyb2xfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lO1xuK1xuK1x0XHQvKiBIYXJkd2FyZSByZW1lbWJlcnMgdGhlIGxhc3QgYnJpZ2h0bmVzcyBsZXZlbCwgaW5jbHVkaW5nIGF1dG8gbW9kZS4gKi9cbitcdFx0aWYgKGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKVxuK1x0XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5kZWZhdWx0X3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTtcbitcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEtCRF9CTF9UUklTVEFURTpcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEtCRF9CTF9TVEFOREFSRDpcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHQvKiBUaGlzIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGJ5IGlkZWFwYWRfY2hlY2tfZmVhdHVyZXMoKS4gKi9cbitcdFx0dW5yZWFjaGFibGUoKTtcbitcdH1cbitcbitcdC8qIFJlamVjdCBpbnNhbmUgdmFsdWVzLiAqL1xuK1x0ZXJyID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRlcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LCBcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gdHJ1ZTtcbitcdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gMTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9leGl0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuLVx0aWYgKCFwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZClcbitcdGlmIChwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2M9IDApXG4gXHRcdHJldHVybjtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gZmFsc2U7XG4rXHRwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IC0xO1xuIFxuIFx0bGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkKTtcbiB9XG5AQCAtMjU0OCwxNyArMjcwMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGVhcGFkX2xhcHRvcF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdGVyciA9IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdHByX3dhcm4oXCJGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEIHRyaWdnZXIgJXM6ICVkXFxuXCIsXG4rXHRcdFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUsIGVycik7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCA9IHRydWU7XG4rXHR9XG4rXG4gXHRlcnIgPSBpZGVhcGFkX3dtaV9kcml2ZXJfcmVnaXN0ZXIoKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZXJyX2xlZHRyaWc7XG4gXG4gXHRlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2aWRlYXBhZF9hY3BpX2RyaXZlcik7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl93bWk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnJfd21pOlxuK1x0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbitlcnJfbGVkdHJpZzpcbitcdGlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZClcbitcdFx0bGVkX3RyaWdnZXJfdW5yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gbW9kdWxlX2luaXQoaWRlYXBhZF9sYXB0b3BfaW5pdClcbiBcbkBAIC0yNTY2LDYgKzI3MzIsOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgaWRlYXBhZF9sYXB0b3BfZXhpdCh2b2lkKVxuIHtcbiBcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuIFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbitcbitcdGlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZClcbitcdFx0bGVkX3RyaWdnZXJfdW5yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuIH1cbiBtb2R1bGVfZXhpdChpZGVhcGFkX2xhcHRvcF9leGl0KVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVkcy5oIGIvaW5jbHVkZS9saW51eC9sZWRzLmhcbmluZGV4IGE1MTVmMDc1YzI5YTEuLjkzYjNmZDdlNTYzNjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sZWRzLmhcbkBAIC0xMDksNiArMTA5LDcgQEAgc3RydWN0IGxlZF9jbGFzc2RldiB7XG4gI2RlZmluZSBMRURfSU5JVF9ERUZBVUxUX1RSSUdHRVIgQklUKDIzKVxuICNkZWZpbmUgTEVEX1JFSkVDVF9OQU1FX0NPTkZMSUNUIEJJVCgyNClcbiAjZGVmaW5lIExFRF9NVUxUSV9DT0xPUlx0XHRCSVQoMjUpXG4rI2RlZmluZSBMRURfVFJJR19IV19DSEFOR0VEXHRCSVQoMjYpXG4gXG4gXHQvKiBzZXRfYnJpZ2h0bmVzc193b3JrIC8gYmxpbmtfdGltZXIgZmxhZ3MsIGF0b21pYywgcHJpdmF0ZS4gKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0d29ya19mbGFncztcbkBAIC0yMzksNiArMjQwLDExIEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYge1xuIFx0c3RydWN0IGtlcm5mc19ub2RlXHQqYnJpZ2h0bmVzc19od19jaGFuZ2VkX2tuO1xuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG4rXHRib29sXHRcdFx0dHJpZ2dlcnNfaHdfY2hhbmdlZDtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdFx0dHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrO1xuKyNlbmRpZlxuK1xuIFx0LyogRW5zdXJlcyBjb25zaXN0ZW50IGFjY2VzcyB0byB0aGUgTEVEIGNsYXNzIGRldmljZSAqL1xuIFx0c3RydWN0IG11dGV4XHRcdGxlZF9hY2Nlc3M7XG4gfTtcbkBAIC00ODUsNiArNDkxLDcgQEAgc3RydWN0IGxlZF90cmlnZ2VyIHtcbiBcdGNvbnN0IGNoYXJcdCAqbmFtZTtcbiBcdGludFx0XHQoKmFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gXHR2b2lkXHRcdCgqZGVhY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuK1x0Ym9vbFx0XHQoKm9mZmxvYWRlZCkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFxuIFx0LyogQnJpZ2h0bmVzcyBzZXQgYnkgbGVkX3RyaWdnZXJfZXZlbnQgKi9cbiBcdGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcztcbkBAIC01MzMsNiArNTQwLDkgQEAgdm9pZCBsZWRfdHJpZ2dlcl9ibGlua19vbmVzaG90KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcixcbiB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpO1xuIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbit2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbitcbitib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfc2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiBcdFx0XHRcdFx0dm9pZCAqdHJpZ2dlcl9kYXRhKVxuQEAgLTU4NCw2ICs1OTQsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfc2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgKmxlZF9nZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIHtcbkBAIC01OTgsNiArNjE1LDEzIEBAIGxlZF90cmlnZ2VyX2dldF9icmlnaHRuZXNzKGNvbnN0IHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcilcbiBcbiAjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlMgKi9cbiBcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuK3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdFx0XHRcdCBib29sIGFjdGl2YXRlKSB7fVxuKyNlbmRpZlxuK1xuIC8qIFRyaWdnZXIgc3BlY2lmaWMgZW51bSAqL1xuIGVudW0gbGVkX3RyaWdnZXJfbmV0ZGV2X21vZGVzIHtcbiBcdFRSSUdHRVJfTkVUREVWX0xJTksgPSAwLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjI6MjguMzc2MTcxNjQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTE1ODI3MzA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExFRCBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgdG91Y2hpbmcgcXVpdGUgYSBiaXQgb2YgdGhlIExFRCBzdWJzeXN0ZW0sIHNvIHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBmaWxlczogZG9jdW1lbnRhdGlvbiwgdGhlIGNvcmUgTEVEIGNsYXNzIGRyaXZlciwgdHJpZ2dlciBpbXBsZW1lbnRhdGlvbnMsIGFuZCBldmVuIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVycyAoQ3JvcyBFQywgVHVycmlzIE9tbmlhLCBhbmQgTGVub3ZvIGxhcHRvcHMpLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXNuJ3QganVzdCBhIG1pbm9yIHR3ZWFrOyB0aGlzIGlzIGxpa2VseSBhZGRpbmcgc2lnbmlmaWNhbnQgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgbW9kaWZ5aW5nIGV4aXN0aW5nIGJlaGF2aW9yIGluIGEgZmFpcmx5IHBlcnZhc2l2ZSB3YXkuXG5cbkZpcnN0LCBJJ20gbm90aW5nIHRoZSBmaWxlcyB0aGF0IGFyZSB0b3VjaGVkLiBJdCBzZWVtcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gYWRkaW5nIGEgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZS4gVGhhdCBhbG9uZSwgYWZmZWN0aW5nIHRoZSBzeXNmcyBpbnRlcmZhY2UsIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gQW55dGltZSB5b3UgYWx0ZXIgdGhlIHN5c2ZzIGludGVyZmFjZSwgeW91J3JlIG9wZW5pbmcgdGhlIGRvb3IgdG8gcG90ZW50aWFsIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIGFuZCwgYnkgZXh0ZW5zaW9uLCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBDaGFuZ2VzIHRvIGBicmlnaHRuZXNzX3Nob3dgIGFuZCBgYnJpZ2h0bmVzc19zdG9yZWAgaW4gYGxlZC1jbGFzcy5jYCBhcmUgYWxzbyBwcmV0dHkgc2lnbmlmaWNhbnQsIGFmZmVjdGluZyBob3cgYnJpZ2h0bmVzcyBjb250cm9sIHdvcmtzIGFjcm9zcyBhbGwgTEVEcy5cblxuQmV5b25kIHRoYXQsIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLCBhbmQgb3RoZXIgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIHRoZSBgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgY29uZmlnLCBoaW50cyBhdCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucy4gVGhlIG1lbnRpb24gb2YgYGh3X3RyaWdnZXJlZGAgaW1wbGllcyBzb21lIGxvZ2ljIGNoYW5nZSB3aXRoaW4gdGhlIGV4aXN0aW5nIHRyaWdnZXIgbWFuYWdlbWVudC4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgZmVhdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgdHJpZ2dlciBtZWNoYW5pc21zIGFuZCBob3cgdGhlIG5ldyBzeXNmcyBhdHRyaWJ1dGUgY29udHJvbHMgdGhpcyBpbnRlcmFjdGlvbi5cblxuVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggaW1wYWN0cyBkcml2ZXJzIGxpa2UgdGhlIG5ldGRldiB0cmlnZ2VyLCBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVycywgc3VnZ2VzdHMgYSB3aWRlciByZWFjaC4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGEgbmV3IHRyaWdnZXIgdHlwZTsgaXQncyBhYm91dCBwb3RlbnRpYWxseSBpbnRlZ3JhdGluZyBoYXJkd2FyZSBjb250cm9sIGludG8gZXhpc3RpbmcgTEVEIHN1YnN5c3RlbXMuXG5cbk5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlYWNoIG9mIHRoZXNlIGNoYW5nZXMuIFNpbmNlIHRoaXMgaXMgdGhlIExFRCBzdWJzeXN0ZW0sIHdoaWNoIGlzIGZ1bmRhbWVudGFsLCBJJ20gYXNzdW1pbmcgdGhhdCBpdCBpcyByZWFzb25hYmx5IHJlYWNoYWJsZSBpbiBhIHZhcmlldHkgb2YgZW52aXJvbm1lbnRzLCBpbmNsdWRpbmcgUUVNVSBhbmQgdmlydHVhbGl6ZWQgc2NlbmFyaW9zLiBBbnkgTEVEIGRldmljZSwgZW11bGF0ZWQgb3IgcmVhbCwgY2FuIGludGVyYWN0IHdpdGggdGhpcy4gVGhlIGZhY3QgdGhhdCBhbnkgZW11bGF0ZWQgb3IgcmVhbCBwbGF0Zm9ybSBkZXZpY2VzIGNhbiBleHBvc2UgdGhlc2UgYXR0cmlidXRlcyBpbiBzeXNmcyBhbmQgdHJpZ2dlciBzeXNmcyBpbnRlcmFjdGlvbnMgYWRkcyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHVzYWdlIG9mIHRoZXNlIHN5bWJvbHMgd2l0aCB0b29scyBsaWtlIEdyZXAuIEknbGwgbmVlZCB0byBrbm93IHdoYXQgY29kZSBwYXRocyB3aWxsIGJlIGhpdCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLCBhbmQsIGlmIHNvLCB3aGF0IHRoZSBiZXN0IGFwcHJvYWNoIHdvdWxkIGJlLiBUaGlzIGxvb2tzIGxpa2UgaXQgaGFzIGZ1enppbmcgcG90ZW50aWFsLCBzaW5jZSB3ZSBoYXZlIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZnJvbSBodyBjb250cm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk5OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIyOjM3LjUzNDQ0NzgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjgxNjYyMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnPTEwPWlmIExFRFNfVFJJR0dFUlNcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTExLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTI6Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiTEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjI6MzkuNTAyNjE4NzcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc0MDkzMDM2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBMRUQgVHJpZ2dlcnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTEVEIHRyaWdnZXJzIGFyZSBjb25maWd1cmVkLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgYGRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBsaW5lcyAxIHRocm91Z2ggMzAsIGFzIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtYWluIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIHRyaWdnZXIgY29uZmlndXJhdGlvbiB0aGVyZSDigJMgbGlrZWx5IHRoZSBtYWluIG1lbnUgZW50cnkgYW5kIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGtlcm5lbCBmZWF0dXJlcy4gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIGxpbmVzIHdpbGwgZGVmaW5lIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB3aGV0aGVyIGNlcnRhaW4gdHJpZ2dlcnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIHdoaWNoIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb25zIHRoZXkgcmVseSB1cG9uLiBHZXR0aW5nIHRoZSBvdmVydmlldyBvZiB0aGlzIHBhcnQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgZmlsZSBhbmQgaG93IHRoaXMgc2VjdGlvbiB0aWVzIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjI6NTYuOTExOTI0MTM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBMRURTX1RSSUdHRVJTXFxuICAgMzpcXHRcXHRib29sIFxcXCJMRUQgVHJpZ2dlciBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdHJpZ2dlciBzdXBwb3J0IGZvciB0aGUgbGVkcyBjbGFzcy5cXG4gICA3OlxcdFxcdCAgVGhlc2UgdHJpZ2dlcnMgYWxsb3cga2VybmVsIGV2ZW50cyB0byBkcml2ZSB0aGUgTEVEcyBhbmQgY2FuXFxuICAgODpcXHRcXHQgIGJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzLiBJZiB1bnN1cmUsIHNheSBZLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRpZiBMRURTX1RSSUdHRVJTXFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcXG4gIDEzOlxcdFxcdGJvb2wgXFxcIkxFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcXFwiXFxuICAxNDpcXHRcXHRkZWZhdWx0IExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgaW5pdGlhdGVkIGhhcmR3YXJlIGNvbnRyb2xcXG4gIDE3OlxcdFxcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cXG4gIDE4OlxcdFxcdCAgXFxcIm5vbmVcXFwiIChpLmUuLCBubyB0cmlnZ2VyKSBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlci5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgTEVEU19UUklHR0VSX1RJTUVSXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTEVEIFRpbWVyIFRyaWdnZXJcXFwiXFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgYWxsb3dzIExFRHMgdG8gYmUgY29udHJvbGxlZCBieSBhIHByb2dyYW1tYWJsZSB0aW1lclxcbiAgMjY6XFx0XFx0ICB2aWEgc3lzZnMuIFNvbWUgTEVEIGhhcmR3YXJlIGNhbiBiZSBwcm9ncmFtbWVkIHRvIHN0YXJ0XFxuICAyNzpcXHRcXHQgIGJsaW5raW5nIHRoZSBMRUQgd2l0aG91dCBhbnkgZnVydGhlciBzb2Z0d2FyZSBpbnRlcmFjdGlvbi5cXG4gIDI4OlxcdFxcdCAgRm9yIG1vcmUgZGV0YWlscyByZWFkIERvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdC5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMjo1Ni45MTE5ODgwNjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTQ5NTMzNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgTEVEIFRyaWdnZXIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIExFRCB0cmlnZ2VyIG9wdGlvbnMgYXJlIGJlaW5nIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgZHJpdmVycy9sZWRzL0tjb25maWdgLiBUaGF0J2xsIGJlIHRoZSBwbGFjZSB0byBmaW5kIHRoZSBhY3R1YWwgZGVmaW5pdGlvbnMgb2YgYExFRFNfVFJJR0dFUlNgIGFuZCBgTEVEU19UUklHR0VSU19IV19DSEFOR0VEYCwgb3IgYXQgbGVhc3QgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlbS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhlIEtjb25maWcgZmlsZSB3aWxsIHNwZWNpZnkgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGEgZGVzY3JpcHRpb24uIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBjb2RlIGFuZCBkcml2ZXJzIHVzaW5nIHRoZXNlIGZsYWdzIHJlc2lkZSBpbiB0aGUgY29kZWJhc2UuXG5cblRoZW4sIEknbGwgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCBgZHJpdmVycy9sZWRzL01ha2VmaWxlYC4gVGhlIE1ha2VmaWxlIHNob3VsZCByZXZlYWwgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlc2Ugc3ltYm9scyBpbmZsdWVuY2UgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuIFRoaXMgd2lsbCBwcm9iYWJseSBpbmNsdWRlIGNvbmRpdGlvbmFscyBiYXNlZCBvbiB0aG9zZSBLY29uZmlnIHN5bWJvbHMsIGluZGljYXRpbmcgd2hpY2ggc291cmNlIGZpbGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBvcHRpb25zIGFyZSBlbmFibGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyBgTEVEU19UUklHR0VSU2AgYW5kIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIGFmZmVjdCB0aGUgZHJpdmVyIGJ1aWxkLiBUaGlzIGlzIGhvdyBJJ2xsIGRldGVybWluZSB0aGUgZXh0ZW50IG9mIHRoZWlyIGltcGFjdCBvbiB0aGUgZmluYWwga2VybmVsIGltYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEyMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6MDUuODYxNTI0OTc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTUxNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkxFRFNfVFJJR0dFUlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9sZWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9LY29uZmlnPTIwMj1jb25maWcgTEVEU19DUk9TX0VDXFxuLS1cXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMDUtXFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTX01VTFRJQ09MT1JcXG5kcml2ZXJzL2xlZHMvS2NvbmZpZzoyMDY6XFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMDctXFx0ZGVmYXVsdCBNRkRfQ1JPU19FQ19ERVZcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnPTIzMD1jb25maWcgTEVEU19UVVJSSVNfT01OSUFcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTIzNy1cXHRkZXBlbmRzIG9uIFRVUlJJU19PTU5JQV9NQ1VfR1BJT1xcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjIzODpcXHRzZWxlY3QgTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTIzOS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2xlZHMvS2NvbmZpZz0zNDI9Y29uZmlnIExFRFNfQ09CQUxUX1JBUVxcbi0tXFxuZHJpdmVycy9sZWRzL0tjb25maWctMzQ0LVxcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IFxcdTAwMjZcXHUwMDI2IChNSVBTX0NPQkFMVCB8fCBDT01QSUxFX1RFU1QpXFxuZHJpdmVycy9sZWRzL0tjb25maWc6MzQ1OlxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL0tjb25maWctMzQ2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnPTM1OD1jb25maWcgTEVEU19TVU5GSVJFXFxuLS1cXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0zNjEtXFx0ZGVwZW5kcyBvbiBTUEFSQzY0XFxuZHJpdmVycy9sZWRzL0tjb25maWc6MzYyOlxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL0tjb25maWctMzYzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnPTk5Mz1jb25maWcgTEVEU19TVDEyMDJcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTk5Ny1cXHRkZXBlbmRzIG9uIE9GXFxuZHJpdmVycy9sZWRzL0tjb25maWc6OTk4OlxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL0tjb25maWctOTk5LVxcdHNlbGVjdCBMRURTX1RSSUdHRVJfUEFUVEVSTlxcbi0tXFxuZHJpdmVycy9sZWRzL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX0xFRFNfQ0xBU1NfTVVMVElDT0xPUilcXHQrPSBsZWQtY2xhc3MtbXVsdGljb2xvci5vXFxuZHJpdmVycy9sZWRzL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX0xFRFNfVFJJR0dFUlMpXFx0XFx0Kz0gbGVkLXRyaWdnZXJzLm9cXG5kcml2ZXJzL2xlZHMvTWFrZWZpbGUtOS1vYmotJChDT05GSUdfTEVEU19LVU5JVF9URVNUKVxcdFxcdCs9IGxlZC10ZXN0Lm9cXG4tLVxcbmRyaXZlcnMvbGVkcy9NYWtlZmlsZT0xMjA9b2JqLSQoQ09ORklHX0xFRFNfQ0xBU1NfTVVMVElDT0xPUilcXHQrPSByZ2IvXFxuLS1cXG5kcml2ZXJzL2xlZHMvTWFrZWZpbGUtMTIyLSMgTEVEIFRyaWdnZXJzXFxuZHJpdmVycy9sZWRzL01ha2VmaWxlOjEyMzpvYmotJChDT05GSUdfTEVEU19UUklHR0VSUylcXHRcXHQrPSB0cmlnZ2VyL1xcbmRyaXZlcnMvbGVkcy9NYWtlZmlsZS0xMjQtXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9OTE9c3RhdGljIERFVklDRV9BVFRSX1JPKG1heF9icmlnaHRuZXNzKTtcXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtOTItXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jOjkzOiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy05NC1zdGF0aWMgY29uc3QgQklOX0FUVFIodHJpZ2dlciwgMDY0NCwgbGVkX3RyaWdnZXJfcmVhZCwgbGVkX3RyaWdnZXJfd3JpdGUsIDApO1xcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jPTEzNj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbGVkX2dyb3Vwc1tdID0ge1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy0xMzctXFx0XFx1MDAyNmxlZF9ncm91cCxcXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM6MTM4OiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy0xMzktXFx0XFx1MDAyNmxlZF90cmlnZ2VyX2dyb3VwLFxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jPTUxNz1pbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNTg5LVxcdGxlZF9jZGV2LVxcdTAwM2V3b3JrX2ZsYWdzID0gMDtcXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM6NTkwOiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy01OTEtXFx0aW5pdF9yd3NlbShcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfbG9jayk7XFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNjA5LVxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo2MTA6I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTYxMS1cXHRsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChsZWRfY2Rldik7XFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9NjMyPXZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNjM5LVxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo2NDA6I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTY0MS1cXHRkb3duX3dyaXRlKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz00OTE9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQ5Mi1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NDkzOiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQ5NC1cXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz01NzE9RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKTtcXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNTcyLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo1NzM6I2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi9cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNTc0LVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZHMuaD0zND1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBsZWRzX2xpc3Q7XFxuZHJpdmVycy9sZWRzL2xlZHMuaC0zNS1cXG5kcml2ZXJzL2xlZHMvbGVkcy5oOjM2OiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuZHJpdmVycy9sZWRzL2xlZHMuaC0zNy12b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuZHJpdmVycy9sZWRzL2xlZHMuaD0zOD12b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuZHJpdmVycy9sZWRzL2xlZHMuaDozOTojZWxzZSAvKiAhQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xcbmRyaXZlcnMvbGVkcy9sZWRzLmgtNDAtc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikgeyB9XFxuZHJpdmVycy9sZWRzL2xlZHMuaD00MT1zdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH1cXG5kcml2ZXJzL2xlZHMvbGVkcy5oOjQyOiNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXFxuZHJpdmVycy9sZWRzL2xlZHMuaC00My1cXG4tLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjI6bWVudWNvbmZpZyBMRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIkxFRCBUcmlnZ2VyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTktXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZzoxMDppZiBMRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjEyOmNvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIkxFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnPTEwOT1jb21tZW50IFxcXCJpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpXFxcIlxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTExLVxcbi0tXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZz0xNTg9Y29uZmlnIExFRFNfVFJJR0dFUl9JTlBVVF9FVkVOVFNcXG4tLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTczLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTc0OmVuZGlmICMgTEVEU19UUklHR0VSU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzowNS45MDgwODE1ODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjI3MjkxNDc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTEVEIERyaXZlciBJbnRlcmFjdGlvbnMgYW5kIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTEVEIGRyaXZlciBzaXR1YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jYCBhbmQgYGRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleHBvc2VkIGZ1bmN0aW9ucyBhbmQgaW50ZXJmYWNlcyBpbnZvbHZlZCwgcmlnaHQ/IEdvdHRhIHNlZSB3aGF0IHRoZSBsYW5kc2NhcGUgbG9va3MgbGlrZS4gVGhlbiwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGJlZW4gYWRkZWQgaW4gdGhpcyBwYXRjaC5cblxuSSd2ZSBnb3QgYSBsaXN0IGZyb20gYGxlZC10cmlnZ2Vycy5jYDogYGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBgbGVkX3RyaWdnZXJfc2V0YCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCwgYGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZGAsIGFuZCBgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkYC4gVGhlc2UgYXJlIGFsbCBgRVhQT1JUX1NZTUJPTF9HUExgLCBzbyBkZWZpbml0ZWx5IHdvcnRoIG5vdGluZy4gRnJvbSBgbGVkLWNsYXNzLmNgLCBJIHNlZSBgYnJpZ2h0bmVzc19zaG93YCwgYGJyaWdodG5lc3Nfc3RvcmVgIGFuZCBhIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBzeXNmcyBhdHRyaWJ1dGUuXG5cbk5leHQsIEknbGwgbmVlZCB0byBsb29rIGF0IGBpZGVhcGFkLWxhcHRvcC5jYC4gSXQncyBnb3Qgc29tZSBmdW5jdGlvbnMgbGlrZSBgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXRgLCBgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXRgLCBgaWRlYXBhZF9rYmRfYmxfbm90aWZ5YCwgYGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZWAgYW5kIGBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkYC4gSSdtIGN1cmlvdXMgd2hhdCBraW5kIG9mIGludGVyYWN0aW9ucyB0aGlzIGhhcyB3aXRoIHRoZSBMRUQgY2xhc3MuIEFsc28sIGxldCdzIG5vdCBmb3JnZXQgdG8gY2hlY2sgYG5ldGRldl90cmlnX29mZmxvYWRlZGAgaW4gYGxlZHRyaWctbmV0ZGV2LmNgIC5cblxuVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3ZSBjYW4gZWZmZWN0aXZlbHkgZnV6ei4gTXkgdW5kZXJzdGFuZGluZyBpcyBzeXprYWxsZXIgaXMgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IEkgbmVlZCB0byBjb25maXJtOiBjYW4gaXQgYWNjZXNzIGFuZCBtYW5pcHVsYXRlIHRoZSByZWxldmFudCBMRUQgY2xhc3MgYW5kIHRyaWdnZXIgaW50ZXJmYWNlcz8gSSBuZWVkIHRvIGtub3cgaWYgaXQgY2FuIHJlYWQgYW5kIHdyaXRlIHRvIHRoZSBgL3N5cy9jbGFzcy9sZWRzLy4uLmAgc3lzZnMgZmlsZXMuXG5cbklmIHRoYXQgY2hlY2tzIG91dCwgSSBzaG91bGQgc2VlIGlmIHRoZXJlIGFyZSBzdGFuZGFyZCBvciB2aXJ0dWFsIExFRCBkZXZpY2VzL3RyaWdnZXJzLCBsaWtlIGBuZXRkZXZgIChgTkVUREVWX0xFRFNgIC8gYExFRFNfVFJJR0dFUl9ORVRERVZgKS4gRmluYWxseSwgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGltZSB0byBjaGVjayBhcm91bmQgYExFRFNfQ0xBU1NgLCBgTEVEU19UUklHR0VSU2AsIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgLCBgTEVEU19UUklHR0VSX05FVERFVmAsIGFuZCB3aGF0ZXZlciBlbHNlIGlzIHJlbGV2YW50LiBUaGlzIHNob3VsZCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDQ4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjMyLjE4MDk5ODc3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NDM5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExFRFNfQ0xBU1NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9sZWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9LY29uZmlnPTIxPWlmIE5FV19MRURTXFxuZHJpdmVycy9sZWRzL0tjb25maWctMjItXFxuZHJpdmVycy9sZWRzL0tjb25maWc6MjM6Y29uZmlnIExFRFNfQ0xBU1NcXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiTEVEIENsYXNzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2xlZHMvS2NvbmZpZzoyOTpjb25maWcgTEVEU19DTEFTU19GTEFTSFxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJMRUQgRmxhc2ggQ2xhc3MgU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTM4LVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjM5OmNvbmZpZyBMRURTX0NMQVNTX01VTFRJQ09MT1JcXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy00MC1cXHR0cmlzdGF0ZSBcXFwiTEVEIE11bHRpY29sb3IgQ2xhc3MgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6MzIuMjI2OTQ2NDY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNTM3NjkzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OlxuXG4qKktjb25maWcgRGl2ZTogTEVEU19UUklHR0VSX05FVERFVioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHplcm8gaW4gb24gYExFRFNfVFJJR0dFUl9ORVRERVZgLiBJJ20gZ3Vlc3NpbmcgdGhlcmUncyBzb21ldGhpbmcgc3BlY2lmaWMgSSBuZWVkIHRvIGtub3cgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MganVzdCBtYWtlIHN1cmUgaXQncyBlbmFibGVkIGFuZCB3aGF0LCBpZiBhbnksIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgdGhpcyB0cmlnZ2VyIG1pZ2h0IGhhdmUgd2l0aCB0aGUgbmV0d29yayBkZXZpY2Ugc3Vic3lzdGVtLiBBcmUgdGhlcmUgYW55IHVudXN1YWwgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHNwZWNpZmljIGVkZ2UgY2FzZXMgdGhlIGN1cnJlbnQgY29kZSBoYW5kbGVzLCBvciBkb2Vzbid0IGhhbmRsZSwgdGhhdCBuZWVkIHRvIGJlIHJldmlzaXRlZD8gVGltZSB0byBkaWcgaW50byBLY29uZmlnIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzMwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6NDAuMzgwNzE5ODMzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM0NDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJMRURTX1RSSUdHRVJfTkVUREVWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbGVkc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnPTEyNj1jb25maWcgTEVEU19UUklHR0VSX1BBTklDXFxuLS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzNC1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjEzNTpjb25maWcgTEVEU19UUklHR0VSX05FVERFVlxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTM2LVxcdHRyaXN0YXRlIFxcXCJMRUQgTmV0ZGV2IFRyaWdnZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfTEVEU19UUklHR0VSX1BBTklDKVxcdCs9IGxlZHRyaWctcGFuaWMub1xcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19MRURTX1RSSUdHRVJfTkVUREVWKVxcdCs9IGxlZHRyaWctbmV0ZGV2Lm9cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfTEVEU19UUklHR0VSX1BBVFRFUk4pXFx0Kz0gbGVkdHJpZy1wYXR0ZXJuLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6NDAuNDI4MDczMjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg0ODk0MzAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgTEVEIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgTkVXX0xFRFNgIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBgZHJpdmVycy9sZWRzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBzZXR0aW5ncyBpdCByZWxpZXMgb24uIEkgYWx3YXlzIHN0YXJ0IHdpdGggZGVwZW5kZW5jaWVzOyBpdCdzIHRoZSBmb3VuZGF0aW9uIG9mIHVuZGVyc3RhbmRpbmcgaG93IGFueXRoaW5nIHdpbGwgZml0IGludG8gdGhlIHdob2xlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBlbnN1cmUgYSBzbW9vdGggaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTUxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6NDUuMjc3MDE5MjE2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2xlZHMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIExFRFNfR1BJT19SRUdJU1RFUlxcbiAgIDM6XFx0XFx0Ym9vbFxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyB0aGUgZnVuY3Rpb24gZ3Bpb19sZWRfcmVnaXN0ZXJfZGV2aWNlLlxcbiAgIDY6XFx0XFx0ICBBcyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgYXJjaCBjb2RlIGl0IG11c3Qgbm90IGJlIGNvbXBpbGVkIGFzIGFcXG4gICA3OlxcdFxcdCAgbW9kdWxlLlxcbiAgIDg6XFx0XFxuICAgOTpcXHQjIFRoaXMgbGlicmFyeSBkb2VzIG5vdCBkZXBlbmQgb24gTkVXX0xFRFMgYW5kIG11c3QgYmUgaW5kZXBlbmRlbnQgc28gaXQgY2FuIGJlXFxuICAxMDpcXHQjIHNlbGVjdGVkIGZyb20gb3RoZXIgc3Vic3lzdGVtcyAoc3BlY2lmaWNhbGx5IGJhY2tsaWdodCkuXFxuICAxMTpcXHRjb25maWcgTEVEU19FWFBSRVNTV0lSRVxcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBHUElPTElCXFxuICAxNDpcXHRcXG4gIDE1OlxcdG1lbnVjb25maWcgTkVXX0xFRFNcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIkxFRCBTdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTYXkgWSB0byBlbmFibGUgTGludXggTEVEIHN1cHBvcnQuICBUaGlzIGFsbG93cyBjb250cm9sIG9mIHN1cHBvcnRlZFxcbiAgMTk6XFx0XFx0ICBMRURzIGZyb20gYm90aCB1c2Vyc3BhY2UgYW5kIG9wdGlvbmFsbHksIGJ5IGtlcm5lbCBldmVudHMgKHRyaWdnZXJzKS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0aWYgTkVXX0xFRFNcXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIExFRFNfQ0xBU1NcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJMRUQgQ2xhc3MgU3VwcG9ydFxcXCJcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgTEVEIHN5c2ZzIGNsYXNzIGluIC9zeXMvY2xhc3MvbGVkcy4gIFlvdSdsbFxcbiAgMjc6XFx0XFx0ICBuZWVkIHRoaXMgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggTEVEcy4gIElmIHVuc3VyZSwgc2F5IFkuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBMRURTX0NMQVNTX0ZMQVNIXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTEVEIEZsYXNoIENsYXNzIFN1cHBvcnRcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1NcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZmxhc2ggTEVEIHN5c2ZzIGNsYXNzIGluIC9zeXMvY2xhc3MvbGVkcy5cXG4gIDM0OlxcdFxcdCAgSXQgd3JhcHMgTEVEIENsYXNzIGFuZCBhZGRzIGZsYXNoIExFRHMgc3BlY2lmaWMgc3lzZnMgYXR0cmlidXRlc1xcbiAgMzU6XFx0XFx0ICBhbmQga2VybmVsIGludGVybmFsIEFQSSB0byBpdC4gWW91J2xsIG5lZWQgdGhpcyB0byBwcm92aWRlIHN1cHBvcnRcXG4gIDM2OlxcdFxcdCAgZm9yIHRoZSBmbGFzaCByZWxhdGVkIGZlYXR1cmVzIG9mIGEgTEVEIGRldmljZS4gSXQgY2FuIGJlIGJ1aWx0XFxuICAzNzpcXHRcXHQgIGFzIGEgbW9kdWxlLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRjb25maWcgTEVEU19DTEFTU19NVUxUSUNPTE9SXFxuICA0MDpcXHRcXHR0cmlzdGF0ZSBcXFwiTEVEIE11bHRpY29sb3IgQ2xhc3MgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6NDUuMjc3MTI5MTA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTMzOTc3NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkNoZWNraW5nIGBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBMZXQncyBzdGFydCB3aXRoIGBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRGAuIFRoYXQgZmxhZyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgc2lnbmlmaWNhbnQgaGFzIGNoYW5nZWQgaW4gdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgbGV2ZWwuIFRoaXMgbWVhbnMgYSBkaXJlY3QsIHBoeXNpY2FsIGFsdGVyYXRpb24gb2NjdXJyZWQsIGJ5cGFzc2luZyB0aGUgdHlwaWNhbCBzb2Z0d2FyZSBjb250cm9sLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGJlY2F1c2UgYSBoYXJkd2FyZSBjaGFuZ2UgZGljdGF0ZXMgaG93IHRoZSBzb2Z0d2FyZSByZXNwb25kcyBhbmQgdXBkYXRlcy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyBmbGFnIGlzIHNldCwgd2hhdCB0cmlnZ2VycyBpdCwgYW5kIHRoZSBpbW1lZGlhdGUgY29uc2VxdWVuY2VzIHdoZW4gaXQncyBhc3NlcnRlZC4gRG9lcyB0aGlzIGxlYWQgdG8gYW4gaW50ZXJydXB0IGhhbmRsZXIsIGEgcG9sbGluZyBsb29wLCBvciBwZXJoYXBzIGEgZGlyZWN0IHdyaXRlIHRvIGEgcmVnaXN0ZXI/IEFuZCB3aGF0IHNwZWNpZmljIHJlZ2lzdGVycyBhcmUgaW52b2x2ZWQ/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGFuYWxvZyBhZGp1c3RtZW50IG9yIGEgbW9yZSBjb21wbGV4IFBXTSBpbXBsZW1lbnRhdGlvbj8gVWx0aW1hdGVseSwgSSBtdXN0IHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gcmVjb25jaWxlcyB0aGUgbmV3IGhhcmR3YXJlIHZhbHVlIHdpdGggdGhlIGludGVuZGVkIHNvZnR3YXJlIHN0YXRlLiBBcmUgdGhlcmUgYW55IHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdG8gd29ycnkgYWJvdXQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSBjb2RlIHRoYXQgcmVhZHMgYW5kIHJlYWN0cyB0byB0aGlzIGZsYWcgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50IGNvbmZsaWN0aW5nIGJlaGF2aW9ycy4gTGV0J3Mgc2VlLi4ud2hlcmUncyB0aGUgZGVmaW5pdGlvbiwgYW5kIGxldCdzIHRyYWNlIGl0IHRocm91Z2ggdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4NzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjU3LjQxMTEwOTY0NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMjQ5NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9sZWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9LY29uZmlnPTM5PWNvbmZpZyBMRURTX0NMQVNTX01VTFRJQ09MT1JcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjQ5OmNvbmZpZyBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkxFRCBDbGFzcyBicmlnaHRuZXNzX2h3X2NoYW5nZWQgYXR0cmlidXRlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9MTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpsZWRfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtMTQzLVxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzoxNDQ6I2lmZGVmIENPTkZJR19MRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy0xNDUtc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19od19jaGFuZ2VkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jPTUxNz1pbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNTkyLSNlbmRpZlxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo1OTM6I2lmZGVmIENPTkZJR19MRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy01OTQtXFx0bGVkX2NkZXYtXFx1MDAzZWJyaWdodG5lc3NfaHdfY2hhbmdlZCA9IC0xO1xcbi0tXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZz0xMj1jb25maWcgTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMy1cXHRib29sIFxcXCJMRUQgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTQ6XFx0ZGVmYXVsdCBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTUtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzo1Ny40NTgyNDA1MjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4MDYyODI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2NvbmZpZyBJbnNwZWN0aW9uIGZvciBJREVBUEFEX0xBUFRPUCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGF0IGBJREVBUEFEX0xBUFRPUGAgc3ltYm9sLCBzcGVjaWZpY2FsbHkgd2hlcmUgYW5kIGhvdyBpdCdzIGRlZmluZWQgYW5kIHVzZWQuIE15IGluc3RpbmN0IGlzIHRoYXQgaXQgd2lsbCBiZSBpbiB0aGUgYGRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gc3BvdCBmb3IgTGVub3ZvLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgYW5kIGZlYXR1cmVzLCBhbmQgdGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVjbGFyZWQuIEkga25vdyB0aGVzZSBwYXRocyBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIGJ1dCBJIHN0aWxsIGRvIGEgcXVpY2sgbWVudGFsIGNoZWNrIOKAkyB5ZXAsIHRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uLiBMZXQncyBnZXQgdG8gaXQuIFRpbWUgdG8gb3BlbiB0aGF0IGBLY29uZmlnYCBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1ODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzo1OS44Mzg4NzEzNzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTGVub3ZvIFg4NiBQbGF0Zm9ybSBTcGVjaWZpYyBEcml2ZXJzXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBJREVBUEFEX0xBUFRPUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkxlbm92byBJZGVhUGFkIExhcHRvcCBFeHRyYXNcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIEFDUElcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gQUNQSV9CQVRURVJZXFxuICAxMDpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCBcXHUwMDI2XFx1MDAyNiBJTlBVVFxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBTRVJJT19JODA0MlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIEFDUElfVklERU8gfHwgQUNQSV9WSURFTyA9IG5cXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gQUNQSV9XTUkgfHwgQUNQSV9XTUkgPSBuXFxuICAxNTpcXHRcXHRzZWxlY3QgQUNQSV9QTEFURk9STV9QUk9GSUxFXFxuICAxNjpcXHRcXHRzZWxlY3QgSU5QVVRfU1BBUlNFS01BUFxcbiAgMTc6XFx0XFx0c2VsZWN0IE5FV19MRURTXFxuICAxODpcXHRcXHRzZWxlY3QgTEVEU19DTEFTU1xcbiAgMTk6XFx0XFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcXG4gIDIwOlxcdFxcdGhlbHBcXG4gIDIxOlxcdFxcdCAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3JcXG4gIDIyOlxcdFxcdCAgcmZraWxsIHN3aXRjaCwgaG90a2V5LCBmYW4gY29udHJvbCBhbmQgYmFja2xpZ2h0IGNvbnRyb2wuXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBMRU5PVk9fV01JX0hPVEtFWV9VVElMSVRJRVNcXG4gIDI1OlxcdFxcdHRyaXN0YXRlIFxcXCJMZW5vdm8gSG90a2V5IFV0aWxpdHkgV01JIGV4dHJhcyBkcml2ZXJcXFwiXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIEFDUElfV01JXFxuICAyNzpcXHRcXHRzZWxlY3QgTkVXX0xFRFNcXG4gIDI4OlxcdFxcdHNlbGVjdCBMRURTX0NMQVNTXFxuICAyOTpcXHRcXHRpbXBseSBJREVBUEFEX0xBUFRPUFxcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBXTUkgc3VwcG9ydCBmb3IgTGVub3ZvIGN1c3RvbWl6ZWQgaG90a2V5cyBmdW5jdGlvbixcXG4gIDMyOlxcdFxcdCAgc3VjaCBhcyBMRUQgY29udHJvbCBmb3IgYXVkaW8vbWljIG11dGUgZXZlbnQgZm9yIElkZWFwYWQsIFlPR0EsIFhpYW9YaW4sXFxuICAzMzpcXHRcXHQgIEdhbWluZywgVGhpbmtCb29rIGFuZCBzbyBvbi5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIExFTk9WT19XTUlfQ0FNRVJBXFxuICAzNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTGVub3ZvIFdNSSBDYW1lcmEgQnV0dG9uIGRyaXZlclxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gQUNQSV9XTUlcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gSU5QVVRcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgTGVub3ZvIGNhbWVyYSBidXR0b24uIFRoZSBDYW1lcmFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6NTkuODM4OTQ3OTMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODMzNDAzMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IExFRCBTdWJzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHdoZXRoZXIgdGhpcyBMRUQgc3Vic3lzdGVtIHBhdGNoIGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBleHRlbnNpdmUgbW9kaWZpY2F0aW9ucyB0byB0aGUgTEVEIGNvcmUsIGluY2x1ZGluZyB1cGRhdGVzIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UgKHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIGB0cmlnZ2VyX21heV9vZmZsb2FkYCksIGltcHJvdmVkIGxvY2tpbmcgaW4gYnJpZ2h0bmVzcyBoYW5kbGluZywgYW5kLCBjcml0aWNhbGx5LCBhIG5ldyBmcmFtZXdvcmsgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGApLiAgQSBuZXcgcHJpdmF0ZSB0cmlnZ2VyIGBpZGVhcGFkLWF1dG9gIGhhcyBhbHNvIGJlZW4gYWRkZWQgaW4gYGlkZWFwYWQtbGFwdG9wLmNgLCBhbmQgdGhlIG5ldGRldiB0cmlnZ2VyIGhhcyBiZWVuIG1vZGlmaWVkIHRvby5cblxuVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHJlYWNoYWJpbGl0eSwgYW5kIHllcywgaXQgc2VlbXMgaGlnaGx5IHJlYWNoYWJsZS4gVGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgTEVEcyBpcyBhIHN0YW5kYXJkIGF2ZW51ZSBmcm9tIHVzZXJzcGFjZS4gQW55IExFRCBkZXZpY2UgKGtleWJvYXJkLCBuZXR3b3JrLCB2aXJ0dWFsLCBldGMuKSBleHBvc2VzIHRoZSByZWxldmFudCBhdHRyaWJ1dGVzIChgdHJpZ2dlcmAsIGBicmlnaHRuZXNzYCwgYHRyaWdnZXJfbWF5X29mZmxvYWRgKS4gSW50ZXJhY3Rpbmcgd2l0aCB0aG9zZSBzeXNmcyBmaWxlcyBzaG91bGQgZXhlcmNpc2UgdGhlIGNvcmUgbG9naWMsIGhpdHRpbmcgZnVuY3Rpb25zIGxpa2UgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBicmlnaHRuZXNzX3Nob3dgLCBgYnJpZ2h0bmVzc19zdG9yZWAsIGBsZWRfdHJpZ2dlcl9zZXRgLCBldGMuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgY29uc3RpdHV0ZSBvdXIgXCJGb2N1c1N5bWJvbHNcIi4gQmFzZWQgb24gdGhlIGNvZGUsIHRoZXkgc2VlbSB0byBiZTogYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYGxlZF90cmlnZ2VyX3NldGAsIGFuZCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAuICBXZSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZXNlIGluIGBsZWQtdHJpZ2dlcnMuY2AgdG8gYmUgY2VydGFpbi5cblxuV2UnbGwgbmVlZCB0byBub3RlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UnbGwgbmVlZCBgTkVXX0xFRFNgLCBgTEVEU19DTEFTU2AsIGBMRURTX1RSSUdHRVJTYCwgYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAsIGBMRURTX1RSSUdHRVJfTkVUREVWYCwgYExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEYCwgYW5kIGBJREVBUEFEX0xBUFRPUGAuICBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgbmFtZXMgYXJlIHByb3Blcmx5IHNwZWxsZWQuXG5cbkZpbmFsbHksIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBtb2RpZmllZCBmaWxlcyBpcyBuZWNlc3Nhcnk6IGBkcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNgLCBgZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jYCwgYGRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNgLCBgZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNgLCBgZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jYCwgYGRyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jYC5cblxuQmFzZWQgb24gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgdGhlIGFuc3dlciBpcyBZZXMhICBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gV2UncmUgZGVhbGluZyB3aXRoIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGRyaXZlciBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRyaWdnZXIgbWFuYWdlbWVudCwgbG9ja2luZywgY29uY3VycmVuY3kgYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgd29ya3F1ZXVlcywgYW5kIHRoZSBuZXcgaGFyZHdhcmUtdHJpZ2dlcmVkIHRyYW5zaXRpb25zLiBUaGlzIGhhcyBhIGhpZ2ggcG90ZW50aWFsIGZvciBleHBsb2l0YWJsZSBidWdzLiAgVGhlIGNvZGUgaXMgcmVhY2hhYmxlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQuXG5cblNvLCBJIHdpbGwgY29uZmlybTpcblxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgLCBgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbGAsIGBsZWRfdHJpZ2dlcl9zZXRgLCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE5FV19MRURTYCwgYExFRFNfQ0xBU1NgLCBgTEVEU19UUklHR0VSU2AsIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgLCBgTEVEU19UUklHR0VSX05FVERFVmAsIGBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRGAsIGBJREVBUEFEX0xBUFRPUGAuXG5cbk5vdywgdGltZSB0byBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Mzc5LCJPdXRwdXRUb2tlbnMiOjI0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyNDo1Ny42NzIzNTM3NjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTUyNjI5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVXX0xFRFNcIixcbiAgICBcIkxFRFNfQ0xBU1NcIixcbiAgICBcIkxFRFNfVFJJR0dFUlNcIixcbiAgICBcIkxFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFwiLFxuICAgIFwiTEVEU19UUklHR0VSX05FVERFVlwiLFxuICAgIFwiTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRURcIixcbiAgICBcIklERUFQQURfTEFQVE9QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93XCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbFwiLFxuICAgIFwibGVkX3RyaWdnZXJfc2V0XCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBnZW5lcmljIHN5c2ZzIGF0dHJpYnV0ZSAodHJpZ2dlcl9tYXlfb2ZmbG9hZCkgZm9yIHF1ZXJ5YWJsZSBoYXJkd2FyZS1vZmZsb2FkZWQgTEVEIHRyaWdnZXJzLCB1cGRhdGVzIGNvcmUgYnJpZ2h0bmVzcyBnZXQvc2V0IGxvY2tpbmcgYW5kIHRyaWdnZXIgcmVtb3ZhbCBsb2dpYywgYW5kIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMgKENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQpIGFsb25nIHdpdGggdXBkYXRlcyB0byBMRUQgdHJpZ2dlciBkcml2ZXJzLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgTEVEIGNsYXNzL3RyaWdnZXIgc3lzZnMgaW50ZXJmYWNlcyBhbmQgY29yZSB0cmlnZ2VyIGxpZmVjeWNsZSBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVdfTEVEU1wiLFxuICAgIFwiTEVEU19DTEFTU1wiLFxuICAgIFwiTEVEU19UUklHR0VSU1wiLFxuICAgIFwiTEVEU19UUklHR0VSU19IV19DSEFOR0VEXCIsXG4gICAgXCJMRURTX1RSSUdHRVJfTkVUREVWXCIsXG4gICAgXCJMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFwiLFxuICAgIFwiSURFQVBBRF9MQVBUT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dcIixcbiAgICBcImxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRcIixcbiAgICBcImxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9zZXRcIixcbiAgICBcImxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIGdlbmVyaWMgc3lzZnMgYXR0cmlidXRlICh0cmlnZ2VyX21heV9vZmZsb2FkKSBmb3IgcXVlcnlhYmxlIGhhcmR3YXJlLW9mZmxvYWRlZCBMRUQgdHJpZ2dlcnMsIHVwZGF0ZXMgY29yZSBicmlnaHRuZXNzIGdldC9zZXQgbG9ja2luZyBhbmQgdHJpZ2dlciByZW1vdmFsIGxvZ2ljLCBhbmQgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyAoQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCkgYWxvbmcgd2l0aCB1cGRhdGVzIHRvIExFRCB0cmlnZ2VyIGRyaXZlcnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBMRUQgY2xhc3MvdHJpZ2dlciBzeXNmcyBpbnRlcmZhY2VzIGFuZCBjb3JlIHRyaWdnZXIgbGlmZWN5Y2xlIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyNDo1Ny43NDc4ODY1MTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTEyNDY2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjQ6NTcuNzQ4NTM2MzU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDIxMTE4MTE4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtY29udHJvbGxlZCBMRUQgdHJpZ2dlciBvZmZsb2FkIGluZnJhc3RydWN0dXJlLCB0aGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZSwgaGFyZHdhcmUgdHJpZ2dlciB0cmFuc2l0aW9uIG5vdGlmaWNhdGlvbnMgdmlhIGEgd29ya3F1ZXVlLCBhbmQgdXBkYXRlcyBkcml2ZXJzIGluY2x1ZGluZyBpZGVhcGFkLWxhcHRvcCBhbmQgbGVkcy1jcm9zX2VjLlxcblxcbjEuIE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgb3Igc29ja2V0IGJ1ZmZlcnMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzLiBVc2Vyc3BhY2UgZXhwb3N1cmUgaXMgbGltaXRlZCB0byBzdGFuZGFyZCBzeXNmc19lbWl0IHN0cmluZyBmb3JtYXR0aW5nLlxcbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdCBmaWVsZHMgKGUuZy4sIHRyaWdnZXJzX2h3X2NoYW5nZWQsIGxhc3RfaHdfYnJpZ2h0bmVzcywgaHdfYnJpZ2h0bmVzcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBicmFuY2hpbmcuXFxuMy4gQ29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBoYW5kbGluZyAoc3VjaCBhcyB3b3JrcXVldWUgZmx1c2gvZGVzdHJ1Y3Rpb24gYW5kIG11dGV4L3J3c2VtIGxvY2tzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMDdhNWUzYzkyMTE0Yzc1NDUzMTcyYTk0NTJhYjdhMjViYzM0YjUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwNzoyMjoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcbmluZGV4IGQ0YzkxOGNjMTFhMTIuLjk0YzMzMWQ5YzQxMDUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcbkBAIC03OCw2ICs3OCwzMSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0KHdoaWNoIHdvdWxkIG9mdGVuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGRldmljZSB0cmVlIGZvciB0aGVcbiBcdFx0aGFyZHdhcmUpLlxuIFxuK1doYXQ6XHRcdC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvdHJpZ2dlcl9tYXlfb2ZmbG9hZFxuK0RhdGU6XHRcdFNlcHRlbWJlciAyMDI2XG4rS2VybmVsVmVyc2lvbjpcdDcuNFxuK0NvbnRhY3Q6XHRsaW51eC1sZWRzQHZnZXIua2VybmVsLm9yZ1xuK0Rlc2NyaXB0aW9uOlxuK1x0XHROYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbitcdFx0U3VjaCB0cmlnZ2VycyBhcmUgYWxzbyBjYWxsZWQgXCJoYXJkd2FyZSBjb250cm9sIHRyaWdnZXJcIiBpbiBzb21lXG4rXHRcdGNvbnRleHQuXG4rXG4rXHRcdE9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuXG4rXG4rXHRcdFJlYWRpbmcgdGhpcyBmaWxlIHJldHVybnMgYSBsaXN0IG9mIHRyaWdnZXJzIHRoYXQgYXJlIGNhcGFibGUgdG9cbitcdFx0YmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWVcbitcdFx0aW5kaWNhdGUgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHRyaWdnZXI6XG4rXG4rXHRcdC0gYGZvb190cmlnZ2VyYDogdGhlIHRyaWdnZXIgaXMgbm90IHNlbGVjdGVkLlxuK1x0XHQtIGBcdTAwM2Nmb29fdHJpZ2dlclx1MDAzZWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkLCBidXQgZmFsbHMgYmFjayB0b1xuK1x0XHQgIHNvZnR3YXJlIGJsaW5rIGZvciBzb21lIHJlYXNvbiAoZS5nLiwgaW5jb21wYXRpYmxlIHRyaWdnZXJcbitcdFx0ICBwYXJhbWV0ZXJzKVxuK1x0XHQtIGBbZm9vX3RyaWdnZXJdYDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQgYW5kIG9mZmxvYWRlZCB0b1xuK1x0XHQgIGhhcmR3YXJlLlxuK1xuK1x0XHRUaGUgXCJuZXRkZXZcIiB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvXG4rXHRcdGluZGljYXRlIGl0cyBzdGF0ZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL29mZmxvYWRlZGAuXG4rXG4gV2hhdDpcdFx0L3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS9pbnZlcnRlZFxuIERhdGU6XHRcdEphbnVhcnkgMjAxMVxuIEtlcm5lbFZlcnNpb246XHQyLjYuMzhcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2XG5pbmRleCBlZDQ2YjM3YWI4YTI4Li5hNTE0NmVhMWUzZTYxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2XG5AQCAtNzUsNiArNzUsOSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0SWYgMSwgdGhlIExFRCBibGlua2luZyBpbiByZXF1ZXN0ZWQgbW9kZSBpcyBvZmZsb2FkZWQgdG9cbiBcdFx0aGFyZHdhcmUuXG4gXG4rXHRcdExFRCB0cmlnZ2VyIGNvcmUgYWxzbyBwcm92aWRlcyBhIGdlbmVyaWMgYXR0cmlidXRlIGZvciB0aGlzXG4rXHRcdHB1cnBvc2UsIHNlZSBgL3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS90cmlnZ2VyX21heV9vZmZsb2FkYC5cbitcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2xpbmtfMTBcbiBEYXRlOlx0XHRKdW4gMjAyM1xuIEtlcm5lbFZlcnNpb246XHQ2LjVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbmluZGV4IDM5MTM5NjZjZmRhYzAuLmFkYmM1N2I5ZjQ5YzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuQEAgLTI0Miw2ICsyNDIsOSBAQCBvcHMgYW5kIG5lZWRzIHRvIGRlY2xhcmUgc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIHN1cHBvcnRlZCB0cmlnZ2Vycy5cbiBcbiBXaXRoIGh3IGNvbnRyb2wgd2UgcmVmZXIgdG8gdGhlIExFRCBkcml2ZW4gYnkgaGFyZHdhcmUuXG4gXG4rQSBzeXNmcyBhdHRyaWJ1dGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIGlzIHByb3ZpZGVkIGZvciB1c2Vyc3BhY2UgdG9cbitxdWVyeSBzdXBwb3J0ZWQgdHJpZ2dlcnMgYW5kIHRoZWlyIHN0YXRlcy5cbitcbiBMRUQgZHJpdmVyIG11c3QgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFsdWUgdG8gc3VwcG9ydCBodyBjb250cm9sOlxuIFxuICAgICAtIGh3X2NvbnRyb2xfdHJpZ2dlcjpcbkBAIC0yOTgsNiArMzAxLDE1IEBAIExFRCBkcml2ZXIgbXVzdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gc3VwcG9ydCBodyBjb250cm9sOlxuICAgICAgICAgICAgICAgICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cnVjdCBkZXZpY2Ugb3IgTlVMTCBpZiBub3RoaW5nXG4gICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBhdHRhY2hlZC5cbiBcbitMRUQgdHJpZ2dlciBzaG91bGQgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgQVBJIHRvIGluZGljYXRlIGh3IGNvbnRyb2w6XG4rICAgIC0gb2ZmbG9hZGVkOlxuKyAgICAgICAgICAgICAgICByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRyaWdnZXIgaXMgY3VycmVudGx5XG4rICAgICAgICAgICAgICAgIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbitcbisgICAgICAgICAgICAgICAgSWYgYSB0cmlnZ2VyIGRvZXNuJ3QgaW1wbGVtZW50IHRoaXMgY2FsbGJhY2ssIHRoZSBkZWZhdWx0XG4rICAgICAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgdHJ1ZSBmb3IgcHJpdmF0ZSB0cmlnZ2VycyBhbmQgZmFsc2UgZm9yIGdlbmVyaWNcbisgICAgICAgICAgICAgICAgb25lcy5cbitcbiBMRUQgZHJpdmVyIGNhbiBhY3RpdmF0ZSBhZGRpdGlvbmFsIG1vZGVzIGJ5IGRlZmF1bHQgdG8gd29ya2Fyb3VuZCB0aGVcbiBpbXBvc3NpYmlsaXR5IG9mIHN1cHBvcnRpbmcgZWFjaCBkaWZmZXJlbnQgbW9kZSBvbiB0aGUgc3VwcG9ydGVkIHRyaWdnZXIuXG4gRXhhbXBsZXMgYXJlIGhhcmRjb2RpbmcgdGhlIGJsaW5rIHNwZWVkIHRvIGEgc2V0IGludGVydmFsLCBlbmFibGUgc3BlY2lhbFxuQEAgLTMxMSw5ICszMjMsNjkgQEAgdGhlIGVuZCB1c2UgaHdfY29udHJvbF9zZXQgdG8gYWN0aXZhdGUgaHcgY29udHJvbC5cbiBBIHRyaWdnZXIgY2FuIHVzZSBod19jb250cm9sX2dldCB0byBjaGVjayBpZiBhIExFRCBpcyBhbHJlYWR5IGluIGh3IGNvbnRyb2xcbiBhbmQgaW5pdCB0aGVpciBmbGFncy5cbiBcbitBbHRlcm5hdGl2ZWx5LCBhIHByaXZhdGUgdHJpZ2dlciBjYW4gYmUgaW1wbGVtZW50ZWQgYWxvbmcgd2l0aCB0aGUgTEVEIGRyaXZlciBpZlxuK3RoZSBMRUQncyBoYXJkd2FyZSBjb250cm9sIGRvZXNuJ3QgZml0IGFueSBnZW5lcmljIHRyaWdnZXIuIFRvIGFzc29jaWF0ZSB0aGVcbitwcml2YXRlIHRyaWdnZXIgd2l0aCB0aGUgTEVEIGNsYXNzZGV2LCB0aGVpciBgdHJpZ2dlcl90eXBlYCBtdXN0IGJlIHRoZSBzYW1lLiBUb1xuK2RlY2xhcmUgdGhhdCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHByb3ZpZGVzIGhhcmR3YXJlIGNvbnRyb2wgZm9yIHRoZSBhc3NvY2lhdGVkXG4rTEVEIGNsYXNzZGV2LCBzZXQgdGhlIGBod19jb250cm9sX3RyaWdnZXJgIHN0cmluZyB0byB0aGUgdHJpZ2dlcidzIG5hbWUuIFNpbmNlXG4rYm90aCB0aGUgTEVEIGNsYXNzZGV2IGFuZCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIGFyZSBpbiB0aGUgc2FtZSBMRUQgZHJpdmVyLCBpdCdzXG4rbm90IG5lY2Vzc2FyeSBmb3IgdGhlbSB0byBjb29yZGluYXRlIHZpYSBgaHdfY29udHJvbF8qYCBjYWxsYmFja3MuXG4rXG4gV2hlbiB0aGUgTEVEIGlzIGluIGh3IGNvbnRyb2wsIG5vIHNvZnR3YXJlIGJsaW5rIGlzIHBvc3NpYmxlIGFuZCBkb2luZyBzb1xuIHdpbGwgZWZmZWN0aXZlbHkgZGlzYWJsZSBodyBjb250cm9sLlxuIFxuK0hhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25cbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rU29tZSBoYXJkd2FyZSBjYW4gYXV0b25vbW91c2x5IGFjdGl2YXRlL2RlYWN0aXZhdGUgaGFyZHdhcmUgY29udHJvbC4gQWZ0ZXIgdGhhdCxcbit0aGUgTEVEIGhhcmR3YXJlIG5vdGlmaWVzIHRoZSBMRUQgZHJpdmVyLlxuK1xuK0lmIHRoZSBkcml2ZXIgY2FuIGRldGVjdCBzdWNoIHRyYW5zaXRpb25zIGFuZCB0aHVzIHdhbnRzIHRvIG5vdGlmeSB0aGUgTEVEIGNvcmVcbit0byB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciB0aGVuIHRoZSBgTEVEX1RSSUdfSFdfQ0hBTkdFRGAgZmxhZyBtdXN0IGJlIHNldCBpblxuK2ZsYWdzIGJlZm9yZSByZWdpc3RlcmluZy4gVG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgYWNjb3JkaW5nbHksIGNhbGxcbitgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgb24gdGhlIExFRCBjbGFzc2Rldi5cbitcbitUaGlzIGNhcGFiaWxpdHkgaXMgcmVzdHJpY3RlZCB0byB0aGUgTEVEIGRldmljZSdzIHByaXZhdGUgdHJpZ2dlci4gVGhlIHByaXZhdGVcbit0cmlnZ2VyIG11c3QgaGF2ZSBiZWVuIHByb3Blcmx5IHJlZ2lzdGVyZWQgKHNlZSBhYm92ZSkgYW5kIG5hbWVkIGFmdGVyXG4rYGh3X2NvbnRyb2xfdHJpZ2dlcmAuXG4rXG4rT25seSB0d28gdHJhbnNpdGlvbnMgYXJlIGRlZmluZWQ6XG4rXG4rLSBcIm5vbmVcIiA9XHUwMDNlIHByaXZhdGUgdHJpZ2dlcjpcbisgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2xcbisgICAgICAgIGFuZCB3aGVuIFwibm9uZVwiIChpLmUuLCBubyB0cmlnZ2VyKSBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiB0aGUgcHJpdmF0ZVxuKyAgICAgICAgdHJpZ2dlciBpcyBhbHJlYWR5IGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5XG4rICAgICAgICBhIG5vLW9wLlxuK1xuKyAgICAgICAgVGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xuKyAgICAgICAgbm9ybWFsLlxuK1xuKyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcbisgICAgICAgIGFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgY3VycmVudGx5IGluIGhhcmR3YXJlXG4rICAgICAgICBjb250cm9sLlxuK1xuKyAgICAgICAgSWYgZXJyb3Igb2NjdXJzIGluIHRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlLCB0aGUgTEVEIFRyaWdnZXIgY29yZSByZXZlcnRzXG4rICAgICAgICB0aGUgZWZmZWN0aXZlIHRyaWdnZXIgdG8gXCJub25lXCIuXG4rXG4rLSBwcml2YXRlIHRyaWdnZXIgPVx1MDAzZSBcIm5vbmVcIlxuKyAgICAgICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGhhcmR3YXJlIGF1dG9ub21vdXNseSBkZWFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sXG4rICAgICAgICBhbmQgd2hlbiB0aGUgcHJpdmF0ZSB0cmlnZ2VyIGlzIGN1cnJlbnRseSBhY3RpdmUuIElmIFwibm9uZVwiIChpLmUuLCBub1xuKyAgICAgICAgdHJpZ2dlcikgaXMgYWN0aXZlIHdoZW4gdGhlIG1ldGhvZCBpcyBjYWxsZWQsIHRoaXMgaXMgZXNzZW50aWFsbHkgYVxuKyAgICAgICAgbm8tb3AuXG4rXG4rICAgICAgICBUaGUgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXNcbisgICAgICAgIG5vcm1hbCwgZXhjZXB0IHRoYXQgdGhlIGN1cnJlbnQgTEVEIGJyaWdodG5lc3MgaXMgcmV0YWluZWQuIFRoZSByZWFzb25cbisgICAgICAgIGZvciBrZWVwaW5nIHRoZSBicmlnaHRuZXNzIHVuY2hhbmdlZCBpcyB0aGF0IHNvbWUgaGFyZHdhcmUgbWF5IGNob29zZSBhXG4rICAgICAgICBzcGVjaWZpYyBicmlnaHRuZXNzIGluc3RlYWQgb2Ygc2ltcGx5IHR1cm5pbmcgb2ZmIHRoZSBMRUQgYWZ0ZXJcbisgICAgICAgIGF1dG9ub21vdXNseSBkZWFjdGl2YXRpbmcgaGFyZHdhcmUgY29udHJvbC5cbitcbisgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlXG4rICAgICAgICBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IGN1cnJlbnRseSBpbiBoYXJkd2FyZVxuKyAgICAgICAgY29udHJvbC5cbitcbitJZiB0aGUgY3VycmVudCB0cmlnZ2VyIGlzIG5laXRoZXIgdGhlIHByaXZhdGUgdHJpZ2dlciBub3IgXCJub25lXCIsIG5vIHRyYW5zaXRpb25cbit3aWxsIGJlIG1hZGUuXG4rXG4gS25vd24gSXNzdWVzXG4gPT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG5pbmRleCBhNTFiMGVkNTM4ODY0Li4zYjQzOGQ4ZGE1ZTBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbkBAIC0yNywyOSArMjcsMTkgQEAgc3RhdGljIExJU1RfSEVBRChsZWRzX2xvb2t1cF9saXN0KTtcbiBcbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxlZHNfd3E7XG4gXG4tc3RhdGljIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbi17XG4tI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4tXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuLVx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXIgXHUwMDI2XHUwMDI2IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNldHJpZ2dlcl90eXBlO1xuLSNlbHNlXG4tXHRyZXR1cm4gZmFsc2U7XG4tI2VuZGlmXG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiBcdHVuc2lnbmVkIGludCBicmlnaHRuZXNzO1xuIFxuLVx0aWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxuLVx0XHRyZXR1cm4gLUVOT0RBVEE7XG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmxlZF9jZGV2LVx1MDAzZWxlZF9hY2Nlc3MpIHtcbitcdFx0aWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxuK1x0XHRcdHJldHVybiAtRU5PREFUQTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcyk7XG4tXHRsZWRfdXBkYXRlX2JyaWdodG5lc3MobGVkX2NkZXYpO1xuLVx0YnJpZ2h0bmVzcyA9IGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3M7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcyk7XG4rXHRcdGxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7XG4rXHRcdGJyaWdodG5lc3MgPSBsZWRfY2Rldi1cdTAwM2VicmlnaHRuZXNzO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiV1XFxuXCIsIGJyaWdodG5lc3MpO1xuIH1cbkBAIC03NCw2ICs2NCw5IEBAIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFxuIFx0aWYgKHN0YXRlID09IExFRF9PRkYpXG4gXHRcdGxlZF90cmlnZ2VyX3JlbW92ZShsZWRfY2Rldik7XG4rXHRlbHNlXG4rXHRcdGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKGxlZF9jZGV2KTtcbitcbiBcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2Rldiwgc3RhdGUpO1xuIFxuIFx0cmV0ID0gc2l6ZTtcbkBAIC0xMDMsOCArOTYsMzAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCBsZWRfdHJpZ2dlcl9iaW5fYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmJpbl9hdHRyX3RyaWdnZXIsXG4gXHROVUxMLFxuIH07XG4rXG4rc3RhdGljIERFVklDRV9BVFRSX1JPKHRyaWdnZXJfbWF5X29mZmxvYWQpO1xuK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsZWRfdHJpZ2dlcl9hdHRyc1tdID0ge1xuK1x0XHUwMDI2ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyLFxuK1x0TlVMTFxuK307XG4rXG4rc3RhdGljIHVtb2RlX3QgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdFx0XHQgICAgICBpbnQgaWR4KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGtvYmpfdG9fZGV2KGtvYmopO1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcbitcdGlmIChhdHRyID09IFx1MDAyNmRldl9hdHRyX3RyaWdnZXJfbWF5X29mZmxvYWQuYXR0cilcbitcdFx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA/IGF0dHItXHUwMDNlbW9kZSA6IDA7XG4rXG4rXHRyZXR1cm4gYXR0ci1cdTAwM2Vtb2RlO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsZWRfdHJpZ2dlcl9ncm91cCA9IHtcbiBcdC5iaW5fYXR0cnMgPSBsZWRfdHJpZ2dlcl9iaW5fYXR0cnMsXG4rXHQuYXR0cnMgPSBsZWRfdHJpZ2dlcl9hdHRycyxcbitcdC5pc192aXNpYmxlID0gbGVkX3RyaWdnZXJfaXNfdmlzaWJsZSxcbiB9O1xuICNlbmRpZlxuIFxuQEAgLTU5Niw2ICs2MTEsOSBAQCBpbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXG4gXHRsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChsZWRfY2Rldik7XG4gI2VuZGlmXG4gXG4rXHRpZiAobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpXG4rXHRcdGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChsZWRfY2Rldik7XG4rXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcyk7XG4gXG4gXHRkZXZfZGJnKHBhcmVudCwgXCJSZWdpc3RlcmVkIGxlZCBkZXZpY2U6ICVzXFxuXCIsXG5AQCAtNjE2LDYgKzYzNCw5IEBAIHZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gXHRpZiAoSVNfRVJSX09SX05VTEwobGVkX2NkZXYtXHUwMDNlZGV2KSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKGxlZF9jZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBMRURfVFJJR19IV19DSEFOR0VEKVxuK1x0XHRsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQobGVkX2NkZXYpO1xuK1xuICNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuIFx0ZG93bl93cml0ZShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuIFx0aWYgKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jIGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXG5pbmRleCBiMTIyMzIxOGJkYTExLi5hOWQ5OTJhODg2MTYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcbkBAIC03LDkgKzcsMTMgQEBcbiAgKiBBdXRob3I6IFJpY2hhcmQgUHVyZGllIFx1MDAzY3JwdXJkaWVAb3BlbmVkaGFuZC5jb21cdTAwM2VcbiAgKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbG9ja2RlcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuQEAgLTMzLDYgKzM3LDM0IEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcdHJldHVybiAhdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgfHwgdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1xuK1x0aWYgKCFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIWxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fFxuK1x0ICAgIHN0cmNtcChsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW9mZmxvYWRlZClcbitcdFx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlb2ZmbG9hZGVkKGxlZF9jZGV2KTtcbitcbitcdGRldl93YXJuX29uY2UobGVkX2NkZXYtXHUwMDNlZGV2LCBcImh3IGNvbnRyb2wgdHJpZ2dlciAlcyBkb2Vzbid0IGltcGxlbWVudCBvZmZsb2FkZWQoKVxcblwiLFxuK1x0XHQgICAgICBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW5hbWUpO1xuK1xuK1x0LyogT3RoZXJ3aXNlIGFzc3VtZSBwcml2YXRlIHRyaWdnZXJzIGFzIGFsd2F5cyBvZmZsb2FkZWQuICovXG4rXHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2V0cmlnZ2VyX3R5cGU7XG4rfVxuK1xuK2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1x0cmV0dXJuIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQpO1xuK1xuIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0XHRcdCAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXG4gXHRcdFx0ICBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpXG5AQCAtMTYzLDcgKzE5NSw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVhZCk7XG4gXG4gLyogQ2FsbGVyIG11c3QgZW5zdXJlIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayBoZWxkICovXG4taW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuK3N0YXRpYyBpbnQgX19sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbitcdFx0XHQgICAgIGJvb2wgaHdfdHJpZ2dlcmVkKVxuIHtcbiBcdGNoYXIgKmV2ZW50ID0gTlVMTDtcbiBcdGNoYXIgKmVudnBbMl07XG5AQCAtMTk0LDcgKzIyNywyMSBAQCBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4gXHRcdGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfZGF0YSA9IE5VTEw7XG4gXHRcdGxlZF9jZGV2LVx1MDAzZWFjdGl2YXRlZCA9IGZhbHNlO1xuIFx0XHRsZWRfY2Rldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5MRURfSU5JVF9ERUZBVUxUX1RSSUdHRVI7XG4tXHRcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEhhcmR3YXJlIG1heSBoYXZlIHNlbGVjdGVkIGEgbmV3IGJyaWdodG5lc3MgbGV2ZWwgZHVyaW5nIGl0c1xuK1x0XHQgKiBoYXJkd2FyZSBjb250cm9sIHRyYW5zaXRpb24sIHNvIG9ubHkgcmVzZXQgYnJpZ2h0bmVzcyBpZiB3ZVxuK1x0XHQgKiBhcmUgc3dpdGNoaW5nIHRvIGFub3RoZXIgdHJpZ2dlciBvciBpZiB0aGUgc3dpdGNoaW5nIGlzIG5vdFxuK1x0XHQgKiBoYXJkd2FyZSB0cmlnZ2VyZWQuXG4rXHRcdCAqXG4rXHRcdCAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBlcnJvciBwYXRoLCBhcyBydW5uaW5nXG4rXHRcdCAqIGludG8gdGhlIGVycm9yIHBhdGggaW1wbGllcyBhIG5vbmUgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXJcbitcdFx0ICogdHJhbnNpdGlvbi4gVGhpcyBoaW50cyB0aGF0IHRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZVxuK1x0XHQgKiB0cmlnZ2VyIG11c3QgaGF2ZSBzb21lIGZ1bmRhbWVudGFsIGJ1Z3MsIHNvIGRvbid0IGJvdGhlclxuK1x0XHQgKiBsZWF2aW5nIHRoZSBMRUQgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRyaWcgfHwgIWh3X3RyaWdnZXJlZClcbitcdFx0XHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpO1xuIFx0fVxuIFx0aWYgKHRyaWcpIHtcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnRyaWctXHUwMDNlbGVkZGV2X2xpc3RfbG9jayk7XG5AQCAtMjU4LDYgKzMwNSwxMSBAQCBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbitcbitpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4re1xuK1x0cmV0dXJuIF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCB0cmlnLCBmYWxzZSk7XG4rfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldCk7XG4gXG4gdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG5AQCAtMjY4LDYgKzMyMCwxNSBAQCB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlKTtcbiBcbit2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1xuK1x0aWYgKF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXG4rXHRcdGxlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKTtcbitcbiBzdGF0aWMgYm9vbCBsZWRfbWF0Y2hfZGVmYXVsdF90cmlnZ2VyKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuIHtcbkBAIC0zMTMsNiArMzc0LDMyIEBAIHZvaWQgbGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KTtcbiBcbitzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbit7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0c3RydWN0IGxlZF90cmlnZ2VyICp0cmlnO1xuK1x0Ym9vbCBoaXQsIG9mZmxvYWRlZDtcbitcdGludCBsZW47XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcyk7XG4rXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1xuK1x0dHJpZyA9IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXI7XG4rXG4rXHRvZmZsb2FkZWQgPSBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpO1xuK1x0aGl0ID0gb2ZmbG9hZGVkIHx8ICh0cmlnIFx1MDAyNlx1MDAyNiAhc3RyY21wKGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciwgdHJpZy1cdTAwM2VuYW1lKSk7XG4rXG4rXHQvKiBbb2ZmbG9hZGVkXSBcdTAwM2NhY3RpdmVfYnV0X25vdF9vZmZsb2FkZWRcdTAwM2UgaW5hY3RpdmUgKi9cbitcdGxlbiA9IHN5c2ZzX2VtaXQoYnVmLCBcIiVzJXMlc1xcblwiLFxuK1x0XHRcdCBvZmZsb2FkZWQgPyBcIltcIiA6IChoaXQgPyBcIlx1MDAzY1wiIDogXCJcIiksXG4rXHRcdFx0IGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcixcbitcdFx0XHQgb2ZmbG9hZGVkID8gXCJdXCIgOiAoaGl0ID8gXCJcdTAwM2VcIiA6IFwiXCIpKTtcbitcbitcdHJldHVybiBsZW47XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyk7XG4rXG4gLyogTEVEIFRyaWdnZXIgSW50ZXJmYWNlICovXG4gXG4gaW50IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbkBAIC00MDMsNiArNDkwLDg4IEBAIGludCBkZXZtX2xlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldixcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XG4gXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbitcbitzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsXG4rXHRcdFx0XHRcdFx0IHN0cnVjdCBsZWRfdHJpZ2dlciAqaGNfdHJpZylcbit7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGlmICghbGVkX2NkZXYtXHUwMDNldHJpZ2dlcikge1xuK1x0XHQvKiBcIm5vbmVcIiA9XHUwMDNlIHByaXZhdGUgdHJpZ2dlci4gKi9cbitcdFx0aWYgKGFjdGl2YXRlKVxuK1x0XHRcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBoY190cmlnLCB0cnVlKTtcbitcdH0gZWxzZSBpZiAobGVkX2NkZXYtXHUwMDNldHJpZ2dlciA9PSBoY190cmlnKSB7XG4rXHRcdC8qIHByaXZhdGUgdHJpZ2dlciA9XHUwMDNlIFwibm9uZVwiLiAqL1xuK1x0XHRpZiAoIWFjdGl2YXRlKVxuK1x0XHRcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMLCB0cnVlKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIE90aGVyIHRyaWdnZXIgaXMgYWN0aXZlLiAqL1xuK1x0XHRkZXZfZGJnKGxlZF9jZGV2LVx1MDAzZWRldixcbitcdFx0XHRcIklnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZVwiLFxuK1x0XHRcdGFjdGl2YXRlID8gXCJhY3RpdmF0ZVwiIDogXCJkZWFjdGl2YXRlXCIsIGhjX3RyaWctXHUwMDNlbmFtZSxcbitcdFx0XHRsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW5hbWUpO1xuK1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoZXJyKVxuK1x0XHRkZXZfd2FybihsZWRfY2Rldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvICVzICVzIGluIGh3IGNvbnRyb2wgdHJhbnNpdGlvbjogJWRcIixcbitcdFx0XHQgYWN0aXZhdGUgPyBcImFjdGl2YXRlXCIgOiBcImRlYWN0aXZhdGVcIiwgaGNfdHJpZy1cdTAwM2VuYW1lLCBlcnIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9od19jb250cm9sX2NoYW5nZWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9XG4rXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGVkX2NsYXNzZGV2LCB0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspO1xuK1x0Ym9vbCBhY3RpdmF0ZSA9IFJFQURfT05DRShsZWRfY2Rldi1cdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkKTtcbitcbitcdHNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCBcdTAwMjZ0cmlnZ2Vyc19saXN0X2xvY2spIHtcbitcdFx0c3RydWN0IGxlZF90cmlnZ2VyICp0cmlnO1xuK1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyaWcsIFx1MDAyNnRyaWdnZXJfbGlzdCwgbmV4dF90cmlnKSB7XG4rXHRcdFx0aWYgKHRyaWctXHUwMDNldHJpZ2dlcl90eXBlID09IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfdHlwZSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIXN0cmNtcCh0cmlnLVx1MDAzZW5hbWUsIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcikpIHtcbitcdFx0XHRcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1xuK1x0XHRcdFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRkZXZfZXJyKGxlZF9jZGV2LVx1MDAzZWRldixcbitcdFx0XCIlcygpIGlzIGNhbGxlZCwgYnV0IHRoZSBwcml2YXRlIHRyaWdnZXIgKCVzKSBpcyBub3QgcHJvcGVybHkgcmVnaXN0ZXJlZFxcblwiLFxuK1x0XHRfX2Z1bmNfXywgbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyKTtcbit9XG4rXG4rdm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKVxuK3tcbitcdC8qIFJlc3RyaWN0ZWQgdG8gcHJpdmF0ZSB0cmlnZ2Vycy4gKi9cbitcdGlmIChXQVJOX09OKCEobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpIHx8XG4rXHRcdCAgICAhbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8ICFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX3R5cGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRXUklURV9PTkNFKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWQsIGFjdGl2YXRlKTtcbitcbitcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XG4rXG4rdm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yaywgbGVkX3RyaWdnZXJfaHdfY29udHJvbF9jaGFuZ2VkX3dvcmtlcik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZCk7XG4rXG4rdm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKTtcbitcbisjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuK1xuIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cbiBcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbmluZGV4IDE4NDRkMGNkNWY1MjguLjZkYjgzZDAxNTI3NzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuQEAgLTg1LDEyICs4NSwxOCBAQCBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gXHRyZXR1cm4gY3Jvc19lY19sZWRfc2VuZF9jbWQocHJpdi1cdTAwM2Vjcm9zX2VjLCBcdTAwMjZhcmcpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGNyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZTtcbiBcbiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGNyb3NfZWNfbGVkX3RyaWdnZXIgPSB7XG4gXHQubmFtZSA9IFwiY2hyb21lb3MtYXV0b1wiLFxuIFx0LnRyaWdnZXJfdHlwZSA9IFx1MDAyNmNyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZSxcbiBcdC5hY3RpdmF0ZSA9IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUsXG4rXHQub2ZmbG9hZGVkID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbmluZGV4IGVkNmE0N2JiYjQ0ZjkuLjMyZDQwZDE3NmQzZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbkBAIC0xOTUsMTAgKzE5NSwxNiBAQCBzdGF0aWMgdm9pZCBvbW5pYV9od3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KVxuIFx0XHRcdGVycik7XG4gfVxuIFxuK3N0YXRpYyBib29sIG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2Rldilcbit7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBvbW5pYV9od190cmlnZ2VyID0ge1xuIFx0Lm5hbWVcdFx0PSBcIm9tbmlhLW1jdVwiLFxuIFx0LmFjdGl2YXRlXHQ9IG9tbmlhX2h3dHJpZ19hY3RpdmF0ZSxcbiBcdC5kZWFjdGl2YXRlXHQ9IG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlLFxuK1x0Lm9mZmxvYWRlZFx0PSBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkLFxuIFx0LnRyaWdnZXJfdHlwZVx0PSBcdTAwMjZvbW5pYV9od190cmlnZ2VyX3R5cGUsXG4gfTtcbiBcbkBAIC0yNTEsNiArMjU3LDcgQEAgc3RhdGljIGludCBvbW5pYV9sZWRfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IG9tbmlhX2xlZCAqbGVkLFxuIFx0ICogYnkgTEVEIGNsYXNzIGZyb20gdGhlIGxpbnV4LGRlZmF1bHQtdHJpZ2dlciBwcm9wZXJ0eS5cbiBcdCAqL1xuIFx0Y2Rldi1cdTAwM2VkZWZhdWx0X3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7XG4rXHRjZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTtcbiBcbiBcdC8qIFB1dCB0aGUgTEVEIGludG8gc29mdHdhcmUgbW9kZSAqL1xuIFx0cmV0ID0gb21uaWFfY21kX3dyaXRlX3U4KGNsaWVudCwgT01OSUFfQ01EX0xFRF9NT0RFLCBPTU5JQV9DTURfTEVEX01PREVfTEVEKGxlZC1cdTAwM2VyZWcpIHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy5oIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxuaW5kZXggYmVlNDY2NTFlMDY4Zi4uYmRhYzIzMzYwMTJlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLmhcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLmhcbkBAIC0yNyw4ICsyNywxOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0XHRcdGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCk7XG4rc3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuK1x0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpO1xuIFxuIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGxlZHNfbGlzdF9sb2NrO1xuIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGxlZHNfbGlzdDtcbiBcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuK3ZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbit2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4rI2Vsc2UgLyogIUNPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH1cbisjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuK1xuICNlbmRpZlx0LyogX19MRURTX0hfSU5DTFVERUQgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xuaW5kZXggYzExMjgyYTc0YjVhYy4uYTExZDA0Y2U0YWIyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbkBAIC05LDYgKzksMTYgQEAgbWVudWNvbmZpZyBMRURTX1RSSUdHRVJTXG4gXG4gaWYgTEVEU19UUklHR0VSU1xuIFxuK2NvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbitcdGJvb2wgXCJMRUQgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbiBzdXBwb3J0XCJcbitcdGRlZmF1bHQgTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRURcbitcdGhlbHBcbitcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBoYXJkd2FyZSBpbml0aWF0ZWQgaGFyZHdhcmUgY29udHJvbFxuK1x0ICB0cmFuc2l0aW9ucywgd2hlcmUgdGhlIExFRCBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgc3dpdGNoZXMgYmV0d2VlblxuK1x0ICBcIm5vbmVcIiAoaS5lLiwgbm8gdHJpZ2dlcikgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIuXG4rXG4rXHQgIFNlZSBEb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgZm9yIGRldGFpbHMuXG4rXG4gY29uZmlnIExFRFNfVFJJR0dFUl9USU1FUlxuIFx0dHJpc3RhdGUgXCJMRUQgVGltZXIgVHJpZ2dlclwiXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcbmluZGV4IDViNGU5MmMxNGRiYjQuLjJlOWFmNDhhNzRkYmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG4rKysgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5AQCAtNzk4LDEwICs3OTgsMTggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiBcdGtmcmVlKHRyaWdnZXJfZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyBib29sIG5ldGRldl90cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEgPSBsZWRfZ2V0X3RyaWdnZXJfZGF0YShsZWRfY2Rldik7XG4rXG4rXHRyZXR1cm4gdHJpZ2dlcl9kYXRhLVx1MDAzZWh3X2NvbnRyb2w7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgbmV0ZGV2X2xlZF90cmlnZ2VyID0ge1xuIFx0Lm5hbWUgPSBcIm5ldGRldlwiLFxuIFx0LmFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfYWN0aXZhdGUsXG4gXHQuZGVhY3RpdmF0ZSA9IG5ldGRldl90cmlnX2RlYWN0aXZhdGUsXG4rXHQub2ZmbG9hZGVkID0gbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkLFxuIFx0Lmdyb3VwcyA9IG5ldGRldl90cmlnX2dyb3VwcyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcbmluZGV4IDUxNjU5NDk5MzA3MzkuLmE5Nzg1MmIwYjIyODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcbkBAIC0xNiw2ICsxNiw3IEBAIGNvbmZpZyBJREVBUEFEX0xBUFRPUFxuIFx0c2VsZWN0IElOUFVUX1NQQVJTRUtNQVBcbiBcdHNlbGVjdCBORVdfTEVEU1xuIFx0c2VsZWN0IExFRFNfQ0xBU1NcbitcdHNlbGVjdCBMRURTX1RSSUdHRVJTXG4gXHRoZWxwXG4gXHQgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIExlbm92byBJZGVhUGFkIG5ldGJvb2tzIGNvbnRhaW5zIGRyaXZlcnMgZm9yXG4gXHQgIHJma2lsbCBzd2l0Y2gsIGhvdGtleSwgZmFuIGNvbnRyb2wgYW5kIGJhY2tsaWdodCBjb250cm9sLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNcbmluZGV4IDgyMTM1MjQ1MDRlZWIuLmY4NmMxMWY1MWQwYmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xuKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNcbkBAIC0xNCw5ICsxNCwxMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2k4MDQyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbkBAIC0yNiw5ICsyOSwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9wcm9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wb3dlcl9zdXBwbHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmZraWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuQEAgLTEzNCwxMCArMTM5LDMxIEBAIGVudW0ge1xuIH07XG4gXG4gLypcbi0gKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIHN0YXRlcyAtIDFcbi0gKiBGdXR1cmUga2V5Ym9hcmQgdHlwZXMgbWF5IG5lZWQgYSBuZXcgc3lzdGVtLCBpZiB0aGVyZSdzIGEgY29sbGlzaW9uXG4tICogS0JEX0JMX1RSSVNUQVRFX0FVVE8gaGFzIG5vIHdheSB0byByZXBvcnQgb3Igc2V0IHRoZSBhdXRvIHN0YXRlXG4tICogc28gaXQgZWZmZWN0aXZlbHkgaGFzIDMgc3RhdGVzLCBidXQgbmVlZHMgdG8gaGFuZGxlIDRcbisgKiBUaGUgZW51bWVyYXRpb24gaGFzIHR3byBwdXJwb3NlczpcbisgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodFxuKyAqICAgLSBhcyBhIG1hbmRhdG9yeSBwYXJhbWV0ZXIgb2YgdGhlIEtCTEMgY29tbWFuZFxuKyAqXG4rICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKiB8ICAgICAgSGFyZHdhcmUgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8ICAgIDMgfFxuKyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKiB8IEtCRF9CTF9TVEFOREFSRCAgICAgICAgICB8ICAgICAgb2ZmIHwgIG9uIHwgIE4vQSB8ICBOL0EgfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXG4rICogfCBLQkRfQkxfVFJJU1RBVEUgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfCAgTi9BIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xuKyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKlxuKyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czpcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXG4rICogfCAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgfCAgICAgICAgMCB8ICAgMSB8ICAgIDIgfFxuKyAqIHwgT3BlcmF0aW9uICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXG4rICogfCBSZWFkICAgICAgICAgICAgICAgICAgICAgfCBvZmYvYXV0byB8IGxvdyB8IGhpZ2ggfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcbisgKiB8IFdyaXRlICAgICAgICAgICAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xuICAqL1xuIGVudW0ge1xuIFx0S0JEX0JMX1NUQU5EQVJEICAgICAgPSAxLFxuQEAgLTE0NSw2ICsxNzEsOCBAQCBlbnVtIHtcbiBcdEtCRF9CTF9UUklTVEFURV9BVVRPID0gMyxcbiB9O1xuIFxuKyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTXHQzXG4rXG4gI2RlZmluZSBLQkRfQkxfUVVFUllfVFlQRVx0XHQweDFcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9UWVBFXHRcdDB4NVxuICNkZWZpbmUgS0JEX0JMX1RSSVNUQVRFX0FVVE9fVFlQRVx0MHg3XG5AQCAtMjAwLDEwICsyMjgsMTQgQEAgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSB7XG4gXHRcdGJvb2wgeW1jX2VjX3RyaWdnZXIgICAgICAgOiAxO1xuIFx0fSBmZWF0dXJlcztcbiBcdHN0cnVjdCB7XG4tXHRcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4rXHRcdGludCBpbml0aWFsaXplZDsgLyogIDA6IGluaXRpYWxpemlvbiBwZW5kaW5nL29uZ29pbmcvZmFpbGVkXG4rXHRcdFx0XHQgICogXHUwMDNlMDogaW5pdGlhbGl6aW9uIGZpbmlzaGVkXG4rXHRcdFx0XHQgICogXHUwMDNjMDogdW5yZWdpc3RlcmF0aW9uIG9uZ29pbmcvZmluaXNoZWRcbitcdFx0XHRcdCAgKi9cbiBcdFx0aW50IHR5cGU7XG4gXHRcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkO1xuLVx0XHR1bnNpZ25lZCBpbnQgbGFzdF9icmlnaHRuZXNzO1xuK1x0XHR1bnNpZ25lZCBpbnQgbGFzdF9od19icmlnaHRuZXNzO1xuK1x0XHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIHByb3RlY3RzIGJyaWdodG5lc3MgdHJhY2tpbmcgKi9cbiBcdH0ga2JkX2JsO1xuIFx0c3RydWN0IHtcbiBcdFx0Ym9vbCBpbml0aWFsaXplZDtcbkBAIC0xNTkyLDcgKzE2MjQsMjQgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShpbnQgdHlwZSlcbiBcdHJldHVybiAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEUpIHx8ICh0eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPKTtcbiB9XG4gXG4tc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCB1bnNpZ25lZCBpbnQgaHdfYnJpZ2h0bmVzcylcbit7XG4rXHQvKiBPZmYsIGxvdyBvciBoaWdoICovXG4rXHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2M9IHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbitcdFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XG4rXG4rXHQvKiBBdXRvIChjb250cm9sbGVkIGJ5IEVDIGFjY29yZGluZyB0byBBTFMpLCByZXBvcnQgYXMgb2ZmICovXG4rXHRpZiAocHJpdi1cdTAwM2VrYmRfYmwudHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyBcdTAwMjZcdTAwMjZcbitcdCAgICBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBVbmtub3duIHZhbHVlICovXG4rXHRkZXZfd2FybihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsXG4rXHRcdCBcIlVua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlZFwiLCBod19icmlnaHRuZXNzKTtcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbiBcdGludCBlcnI7XG5AQCAtMTYwNiwyMSArMTY1NSw3IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHQvKiBDb252ZXJ0IHJldHVybmVkIHZhbHVlIHRvIGJyaWdodG5lc3MgbGV2ZWwgKi9cbi1cdFx0dmFsdWUgPSBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7XG4tXG4tXHRcdC8qIE9mZiwgbG93IG9yIGhpZ2ggKi9cbi1cdFx0aWYgKHZhbHVlIFx1MDAzYz0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuLVx0XHRcdHJldHVybiB2YWx1ZTtcbi1cbi1cdFx0LyogQXV0bywgcmVwb3J0IGFzIG9mZiAqL1xuLVx0XHRpZiAodmFsdWUgPT0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzICsgMSlcbi1cdFx0XHRyZXR1cm4gMDtcbi1cbi1cdFx0LyogVW5rbm93biB2YWx1ZSAqL1xuLVx0XHRkZXZfd2FybihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsXG4tXHRcdFx0IFwiVW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVsdVwiLCB2YWx1ZSk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRyZXR1cm4gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpO1xuIFx0fVxuIFxuIFx0ZXJyID0gZXZhbF9oYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIFx1MDAyNnZhbHVlKTtcbkBAIC0xNjMwLDYgKzE2NjUsMTYgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuICEhdGVzdF9iaXQoSEFMU19LQkRfQkxfU1RBVEVfQklULCBcdTAwMjZ2YWx1ZSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbit7XG4rXHRpbnQgaHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuK1xuK1x0aWYgKGh3X2JyaWdodG5lc3MgXHUwMDNjIDApXG4rXHRcdHJldHVybiBod19icmlnaHRuZXNzO1xuK1xuK1x0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4rfVxuK1xuIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIHtcbiBcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuQEAgLTE2MzcsOTkgKzE2ODIsMjA3IEBAIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhXG4gXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LFxuK1x0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXG4ge1xuLVx0aW50IGVycjtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4gXHRpbnQgdHlwZSA9IHByaXYtXHUwMDNla2JkX2JsLnR5cGU7XG4rXHRpbnQgZXJyO1xuIFxuLVx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XG4tXHRcdGlmIChicmlnaHRuZXNzIFx1MDAzZSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubXV0ZXgpO1xuIFxuLVx0XHR2YWx1ZSA9IEZJRUxEX1BSRVAoS0JEX0JMX1NFVF9CUklHSFRORVNTLCBicmlnaHRuZXNzKSB8XG4rXHRpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHtcbitcdFx0dmFsdWUgPSBGSUVMRF9QUkVQKEtCRF9CTF9TRVRfQlJJR0hUTkVTUywgaHdfYnJpZ2h0bmVzcykgfFxuIFx0XHRcdEZJRUxEX1BSRVAoS0JEX0JMX0NPTU1BTkRfVFlQRSwgdHlwZSkgfFxuIFx0XHRcdEtCRF9CTF9DT01NQU5EX1NFVDtcbiBcdFx0ZXJyID0gZXhlY19rYmxjKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGVyciA9IGV4ZWNfc2Fscyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCBicmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkYpO1xuK1x0XHR2YWx1ZSA9IGh3X2JyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRjtcbitcdFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH1cbi1cbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xuK1x0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID0gaHdfYnJpZ2h0bmVzcztcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKVxuK3tcbitcdGlmIChicmlnaHRuZXNzIFx1MDAzZSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpO1xuK31cbitcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIFx0XHRcdFx0XHRcdCAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuIHtcbiBcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuIFxuK1x0LypcbitcdCAqIFdoZW4gdW5yZWdpc3RlcmluZzogSXQgbXVzdCBiZSB0aGUgc2lkZSBlZmZlY3Qgb2YgTEVEIHVucmVnaXN0cmF0aW9uXG4rXHQgKiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSd2ZSBzZXQgTEVEX1JFVEFJTl9BVF9TSFVURE9XTlxuK1x0ICogdG8gcmV0YWluIGxlZF9jZGV2IGJyaWdodG5lc3MgbGV2ZWwuIFRvIGRvIHRoZSBzYW1lIGZvciBhdXRvIG1vZGUsXG4rXHQgKiBnYXRlIGNoYW5nZXMgYW5kIHJldHVybiBlYXJseS5cbitcdCAqXG4rXHQgKiBJdCdzIG5lZWRsZXNzIHRvIGdhdGUgY2hhbmdlcyB3aGVuIGluaXRpYWxpemluZywgYXMgdGhlcmUgbWF5IGJlIGFcbitcdCAqIHRpbWUgbWFyZ2luIGJldHdlZW4gc3lzZnMgYXR0cmlidXRlIGNyZWF0aW9uIGFuZCBzdGF0ZSBjaGFuZ2UuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm11dGV4KTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xuK31cbitcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTtcbitcbitcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7XG4rXG4rc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIgPSB7XG4rXHQubmFtZSA9IFwiaWRlYXBhZC1hdXRvXCIsXG4rXHQudHJpZ2dlcl90eXBlID0gXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGUsXG4rXHQuYWN0aXZhdGUgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfYWN0aXZhdGUsXG4rXHQub2ZmbG9hZGVkID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZCxcbit9O1xuK1xuK3N0YXRpYyBib29sIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkO1xuK1xuK3N0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsXG4rXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXG4re1xuK1x0Ym9vbCBod19jb250cm9sLCBsYXN0X2h3X2NvbnRyb2w7XG4rXG4rXHRpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkIHx8IHByaXYtXHUwMDNla2JkX2JsLnR5cGUgIT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pXG4rXHRcdHJldHVybjtcbitcbitcdGh3X2NvbnRyb2wgPSBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUztcbitcdGxhc3RfaHdfY29udHJvbCA9IHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4rXG4rXHRpZiAoaHdfY29udHJvbCAhPSBsYXN0X2h3X2NvbnRyb2wpXG4rXHRcdGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkLCBod19jb250cm9sKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuLVx0aW50IGJyaWdodG5lc3M7XG4rXHRpbnQgaHdfYnJpZ2h0bmVzcywgYnJpZ2h0bmVzcztcbiBcbi1cdGlmICghcHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpXG4rXHRpZiAodW5saWtlbHkocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXHUwMDNjPSAwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuLVx0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubXV0ZXgpO1xuK1xuK1x0aHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuK1x0aWYgKGh3X2JyaWdodG5lc3MgXHUwMDNjIDApXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmIChicmlnaHRuZXNzID09IHByaXYtXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcylcbitcdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xuK1x0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4rXHRcdHJldHVybjsgLyogUmVqZWN0IGluc2FuZSB2YWx1ZXMgZWFybHkuICovXG4rXG4rXHRpZiAocHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IGh3X2JyaWdodG5lc3MpXG4gXHRcdHJldHVybjtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XG4rXHRpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChwcml2LCBod19icmlnaHRuZXNzKTtcbitcbitcdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7XG4gXG4gXHRsZWRfY2xhc3NkZXZfbm90aWZ5X2JyaWdodG5lc3NfaHdfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGJyaWdodG5lc3MpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4tXHRpbnQgYnJpZ2h0bmVzcywgZXJyO1xuK1x0aW50IGh3X2JyaWdodG5lc3MsIGVycjtcbiBcbiBcdGlmICghcHJpdi1cdTAwM2VmZWF0dXJlcy5rYmRfYmwpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0aWYgKFdBUk5fT04ocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpKVxuK1x0aWYgKFdBUk5fT04ocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXHUwMDNlIDApKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbi1cdGlmIChpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShwcml2LVx1MDAzZWtiZF9ibC50eXBlKSlcbi1cdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcbi1cdGVsc2Vcbi1cdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMTtcbitcdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gMDtcbiBcbi1cdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbi1cdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gYnJpZ2h0bmVzcztcbitcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsIFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm11dGV4KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4rXHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XG4rXG4rXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5uYW1lICAgICAgICAgICAgICAgICAgICA9IFwicGxhdGZvcm06OlwiIExFRF9GVU5DVElPTl9LQkRfQkFDS0xJR0hUO1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmJyaWdodG5lc3NfZ2V0ICAgICAgICAgID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQ7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX3NldDtcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5mbGFncyAgICAgICAgICAgICAgICAgICA9IExFRF9CUklHSFRfSFdfQ0hBTkdFRCB8IExFRF9SRVRBSU5fQVRfU0hVVERPV047XG4gXG4rXHRzd2l0Y2ggKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpIHtcbitcdGNhc2UgS0JEX0JMX1RSSVNUQVRFX0FVVE86XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XG4rXG4rXHRcdGlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpIHtcbitcdFx0XHRkZXZfd2FybihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJDYW5ub3QgcHJvdmlkZSBMRUQgdHJpZ2dlciAlcyBmb3Iga2V5Ym9hcmQgYmFja2xpZ2h0XFxuXCIsXG4rXHRcdFx0XHQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5mbGFncyB8PSBMRURfVFJJR19IV19DSEFOR0VEO1xuK1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQudHJpZ2dlcl90eXBlID0gXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5od19jb250cm9sX3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTtcbitcbitcdFx0LyogSGFyZHdhcmUgcmVtZW1iZXJzIHRoZSBsYXN0IGJyaWdodG5lc3MgbGV2ZWwsIGluY2x1ZGluZyBhdXRvIG1vZGUuICovXG4rXHRcdGlmIChod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcbitcdFx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuZGVmYXVsdF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7XG4rXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLQkRfQkxfVFJJU1RBVEU6XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLQkRfQkxfU1RBTkRBUkQ6XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0LyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSBpZGVhcGFkX2NoZWNrX2ZlYXR1cmVzKCkuICovXG4rXHRcdHVucmVhY2hhYmxlKCk7XG4rXHR9XG4rXG4rXHQvKiBSZWplY3QgaW5zYW5lIHZhbHVlcy4gKi9cbitcdGVyciA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuIFx0ZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldiwgXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IHRydWU7XG4rXHRwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IDE7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfZXhpdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIHtcbi1cdGlmICghcHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpXG4rXHRpZiAocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IGZhbHNlO1xuK1x0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSAtMTtcbiBcbiBcdGxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLmxlZCk7XG4gfVxuQEAgLTI1NDgsMTcgKzI3MDEsMzAgQEAgc3RhdGljIGludCBfX2luaXQgaWRlYXBhZF9sYXB0b3BfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4rXHRlcnIgPSBsZWRfdHJpZ2dlcl9yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuK1x0aWYgKGVycikge1xuK1x0XHRwcl93YXJuKFwiRmFpbGVkIHRvIHJlZ2lzdGVyIExFRCB0cmlnZ2VyICVzOiAlZFxcblwiLFxuK1x0XHRcdGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lLCBlcnIpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgPSB0cnVlO1xuK1x0fVxuK1xuIFx0ZXJyID0gaWRlYXBhZF93bWlfZHJpdmVyX3JlZ2lzdGVyKCk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycl9sZWR0cmlnO1xuIFxuIFx0ZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuLVx0aWYgKGVycikge1xuLVx0XHRpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfd21pO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3dtaTpcbitcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XG4rZXJyX2xlZHRyaWc6XG4rXHRpZiAoaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpXG4rXHRcdGxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcbitcdHJldHVybiBlcnI7XG4gfVxuIG1vZHVsZV9pbml0KGlkZWFwYWRfbGFwdG9wX2luaXQpXG4gXG5AQCAtMjU2Niw2ICsyNzMyLDkgQEAgc3RhdGljIHZvaWQgX19leGl0IGlkZWFwYWRfbGFwdG9wX2V4aXQodm9pZClcbiB7XG4gXHRwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2FjcGlfZHJpdmVyKTtcbiBcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XG4rXG4rXHRpZiAoaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpXG4rXHRcdGxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcbiB9XG4gbW9kdWxlX2V4aXQoaWRlYXBhZF9sYXB0b3BfZXhpdClcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMuaCBiL2luY2x1ZGUvbGludXgvbGVkcy5oXG5pbmRleCBhNTE1ZjA3NWMyOWExLi45M2IzZmQ3ZTU2MzY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy5oXG5AQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYge1xuICNkZWZpbmUgTEVEX0lOSVRfREVGQVVMVF9UUklHR0VSIEJJVCgyMylcbiAjZGVmaW5lIExFRF9SRUpFQ1RfTkFNRV9DT05GTElDVCBCSVQoMjQpXG4gI2RlZmluZSBMRURfTVVMVElfQ09MT1JcdFx0QklUKDI1KVxuKyNkZWZpbmUgTEVEX1RSSUdfSFdfQ0hBTkdFRFx0QklUKDI2KVxuIFxuIFx0Lyogc2V0X2JyaWdodG5lc3Nfd29yayAvIGJsaW5rX3RpbWVyIGZsYWdzLCBhdG9taWMsIHByaXZhdGUuICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdHdvcmtfZmxhZ3M7XG5AQCAtMjM5LDYgKzI0MCwxMSBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHtcbiBcdHN0cnVjdCBrZXJuZnNfbm9kZVx0KmJyaWdodG5lc3NfaHdfY2hhbmdlZF9rbjtcbiAjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuK1x0Ym9vbFx0XHRcdHRyaWdnZXJzX2h3X2NoYW5nZWQ7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHRyaWdnZXJzX2h3X2NoYW5nZWRfd29yaztcbisjZW5kaWZcbitcbiBcdC8qIEVuc3VyZXMgY29uc2lzdGVudCBhY2Nlc3MgdG8gdGhlIExFRCBjbGFzcyBkZXZpY2UgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRsZWRfYWNjZXNzO1xuIH07XG5AQCAtNDg1LDYgKzQ5MSw3IEBAIHN0cnVjdCBsZWRfdHJpZ2dlciB7XG4gXHRjb25zdCBjaGFyXHQgKm5hbWU7XG4gXHRpbnRcdFx0KCphY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFx0dm9pZFx0XHQoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbitcdGJvb2xcdFx0KCpvZmZsb2FkZWQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBcbiBcdC8qIEJyaWdodG5lc3Mgc2V0IGJ5IGxlZF90cmlnZ2VyX2V2ZW50ICovXG4gXHRlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7XG5AQCAtNTMzLDYgKzU0MCw5IEBAIHZvaWQgbGVkX3RyaWdnZXJfYmxpbmtfb25lc2hvdChzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIsXG4gdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTtcbiB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4rdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4rXG4rYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHRcdHZvaWQgKnRyaWdnZXJfZGF0YSlcbkBAIC01ODQsNiArNTk0LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkICpsZWRfZ2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB7XG5AQCAtNTk4LDYgKzYxNSwxMyBAQCBsZWRfdHJpZ2dlcl9nZXRfYnJpZ2h0bmVzcyhjb25zdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTICovXG4gXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHRcdFx0XHQgYm9vbCBhY3RpdmF0ZSkge31cbisjZW5kaWZcbitcbiAvKiBUcmlnZ2VyIHNwZWNpZmljIGVudW0gKi9cbiBlbnVtIGxlZF90cmlnZ2VyX25ldGRldl9tb2RlcyB7XG4gXHRUUklHR0VSX05FVERFVl9MSU5LID0gMCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjI0OjU3Ljc0ODUzNzQ5NloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjExMTc5MTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBMRUQgdHJpZ2dlciBwYXRjaC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBhbHdheXMgb24gcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuVGhpcyBwYXRjaCBpcyBwcmV0dHkgZm9jdXNlZC4gSXQncyBhZGRpbmcgYSBuZXcgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZSB0byB0aGUgTEVEIGNsYXNzLCBhIGNvcnJlc3BvbmRpbmcgYG9mZmxvYWRlZGAgY2FsbGJhY2sgaW4gdGhlIGBsZWRfdHJpZ2dlcmAgc3RydWN0dXJlLCBhbmQgaW1wbGVtZW50aW5nIGEgbWVjaGFuaXNtIGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucy4gQ3JpdGljYWxseSwgaXQgdGhlbiBpbnRlZ3JhdGVzIHRoaXMgd2l0aCBzZXZlcmFsIHNwZWNpZmljIGRyaXZlcnM6IGBsZWRzLWNyb3NfZWNgLCBgbGVkcy10dXJyaXMtb21uaWFgLCBgbGVkdHJpZy1uZXRkZXZgLCBhbmQgdGhlIGBpZGVhcGFkLWxhcHRvcGAuIFRoYXQgbGFzdCBvbmUgY2F0Y2hlcyBteSBleWUg4oCTIEFDUEkgYW5kIGtleWJvYXJkIGJhY2tsaWdodHMgY2FuIGJlIHRvdWNoeSBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuXG5cblNvLCBmaXJzdCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlLiBJIGltbWVkaWF0ZWx5IGxvb2sgYXQgdGhhdCBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCBmdW5jdGlvbi4gVGhlIGBzeXNmc19lbWl0YCBzZWVtcyBzYWZlIGhlcmUuIEkgYW0gdmVyaWZ5aW5nIHRoYXQgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tTlVMTCB3aGVuIHJlYWQuIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2hlY2tzIGZvciB0aGlzIGNvbmRpdGlvbiBpbiBgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZWAsIHNvIHRoZSBzeXNmcyBlbnRyeSB3aWxsIG5vdCBiZSBjcmVhdGVkLiBgb2ZmbG9hZGVkYCBhbmQgYGhpdGAgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBib29sZWFucy4gSXQncyBhbGwgbG9va2luZyBnb29kIHNvIGZhci5cblxuTm93IEkgZGVsdmUgaW50byBgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYC4gVGhpcyBvbmUgaXMga2V5LCBhcyBpdCBkZXRlcm1pbmVzIGlmIGEgdHJpZ2dlciBpcyBjb25zaWRlcmVkIFwib2ZmbG9hZGVkLlwiIFRoZSBjb2RlIGRvZXMgYSBkZWNlbnQgam9iIGNoZWNraW5nIGZvciBOVUxMIHRyaWdnZXJzIGFuZCBlbnN1cmVzIHRoZSB0cmlnZ2VyIG5hbWUgbWF0Y2hlcy4gSXQgYWxzbyBoYXMgYSBmYWxsLWJhY2sgaWYgdGhlIHRyaWdnZXIgZG9lcyBub3QgaW1wbGVtZW50IGBvZmZsb2FkZWRgLCBzbyBpdCBpcyBsb29raW5nIGxpa2UgdGhlIGNvZGUgaXMgaGFuZGxpbmcgYWxsIHBvc3NpYmxlIHJldHVybiBwYXRocy5cblxuVGhlbiBJIGNoZWNrIHRoZSB3b3JrcXVldWUgaW4gYGxlZC10cmlnZ2Vycy5jYC4gYGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXJgIHJlYWRzIGBsZWRjZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRgLiBJJ20gY2hlY2tpbmcgdGhlIGluaXRpYWxpemF0aW9uLiBUaGUgdmFyaWFibGUgaXMgd3JpdHRlbiB1c2luZyBgV1JJVEVfT05DRWAgaW4gYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIGFuZCBpcyBpbml0aWFsaXplZCBpbiBgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dGAuIFRoaXMgbG9va3Mgc291bmQ7IHRoZSBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgcGFpciBpcyBjb3JyZWN0IGZvciB3b3JrcXVldWUgaW50ZXJhY3Rpb24uXG5cbk5leHQsIEkgcmV2aWV3IHRoZSBgaWRlYXBhZC1sYXB0b3AuY2AgY29kZTsgSSBhbSBtYWtpbmcgc3VyZSB0aGUgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBmcm9tIEFDUEkgY2FsbHMuIEFmdGVyIHF1aWNrbHkgc2Nhbm5pbmcsIEkgZmluZCB0aGF0IEFDUEkgbWV0aG9kIGNhbGxzIGFyZSBjaGVja2VkLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHJlYWQuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBJJ20gY2hlY2tpbmcgZm9yIGFueSBgY29weV90b191c2VyYCwgbmV0bGluayBtZXNzYWdlcywgc29ja2V0IG9wZXJhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcywgb3IgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gc3lzZnMgb3V0cHV0cyBhbmQgaW50ZXJuYWwgY2FsbGJhY2tzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyByZWxhdGVkIHRvIG5ldHdvcmtpbmcsIEJQRiwgb3IgZGlyZWN0IHVzZXItc3BhY2UgbWVtb3J5IGNvcGllcy4gVGhlIG9ubHkgaW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2UgaXMgdmlhIGBzeXNmc19lbWl0YCwgd2hpY2ggY29uc3RydWN0cyBzdHJpbmdzLiBUaGUgZGF0YSB0eXBlcyBhcmUgYmFzaWMgaW50cywgYm9vbGVhbnMsIGFuZCBpbml0aWFsaXplZCBzdHJ1Y3RzLiBJIHNlZSBubyBkaXJlY3QgdGhyZWF0cy5cblxuTm93IEkgYW0gZ29pbmcgdGhyb3VnaCB0aGUgY3JpdGVyaWEgZm9yIEtNU0FOLiBUaGUgY3JpdGljYWwgcXVlc3Rpb25zIGFyZTogZG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gQXJlIHRoZXJlIGFueSBicmFuY2hpbmcgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YT8gQXJlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBEb2VzIHRoZSBjb2RlIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/XG5cbkJhc2VkIG9uIHRoZSBhbmFseXNpcywgSSBhbSBjb25jbHVkaW5nIHRoYXQgYWxsIHRoZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCB0aGVyZSBhcmUgbm8gaW5mby1sZWFrcy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCB0aHVzIEkgYW0gY29uZmlkZW50IGluIHRoaXMgY29uY2x1c2lvbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk5NSwiT3V0cHV0VG9rZW5zIjoyMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjU6MzkuODYwMzMyMDA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLWNvbnRyb2xsZWQgTEVEIHRyaWdnZXIgb2ZmbG9hZCBpbmZyYXN0cnVjdHVyZSwgdGhlIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBzeXNmcyBhdHRyaWJ1dGUsIGhhcmR3YXJlIHRyaWdnZXIgdHJhbnNpdGlvbiBub3RpZmljYXRpb25zIHZpYSBhIHdvcmtxdWV1ZSwgYW5kIHVwZGF0ZXMgZHJpdmVycyBpbmNsdWRpbmcgaWRlYXBhZC1sYXB0b3AgYW5kIGxlZHMtY3Jvc19lYy5cXG5cXG4xLiBObyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBidWZmZXJzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcy4gVXNlcnNwYWNlIGV4cG9zdXJlIGlzIGxpbWl0ZWQgdG8gc3RhbmRhcmQgc3lzZnNfZW1pdCBzdHJpbmcgZm9ybWF0dGluZy5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3QgZmllbGRzIChlLmcuLCB0cmlnZ2Vyc19od19jaGFuZ2VkLCBsYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYnJhbmNoaW5nLlxcbjMuIENvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaGFuZGxpbmcgKHN1Y2ggYXMgd29ya3F1ZXVlIGZsdXNoL2Rlc3RydWN0aW9uIGFuZCBtdXRleC9yd3NlbSBsb2NrcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1jb250cm9sbGVkIExFRCB0cmlnZ2VyIG9mZmxvYWQgaW5mcmFzdHJ1Y3R1cmUsIHRoZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgc3lzZnMgYXR0cmlidXRlLCBoYXJkd2FyZSB0cmlnZ2VyIHRyYW5zaXRpb24gbm90aWZpY2F0aW9ucyB2aWEgYSB3b3JrcXVldWUsIGFuZCB1cGRhdGVzIGRyaXZlcnMgaW5jbHVkaW5nIGlkZWFwYWQtbGFwdG9wIGFuZCBsZWRzLWNyb3NfZWMuXFxuXFxuMS4gTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgYnVmZmVycyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMuIFVzZXJzcGFjZSBleHBvc3VyZSBpcyBsaW1pdGVkIHRvIHN0YW5kYXJkIHN5c2ZzX2VtaXQgc3RyaW5nIGZvcm1hdHRpbmcuXFxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RydWN0IGZpZWxkcyAoZS5nLiwgdHJpZ2dlcnNfaHdfY2hhbmdlZCwgbGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJyYW5jaGluZy5cXG4zLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nIChzdWNoIGFzIHdvcmtxdWV1ZSBmbHVzaC9kZXN0cnVjdGlvbiBhbmQgbXV0ZXgvcndzZW0gbG9ja3MpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpkgc6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 07:21:18 +0000 UTC FinishedAt: 2026-09-02 07:25:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NEW_LEDS", "LEDS_CLASS", "LEDS_TRIGGERS", "LEDS_TRIGGERS_HW_CHANGED", "LEDS_TRIGGER_NETDEV", "LEDS_BRIGHTNESS_HW_CHANGED", "IDEAPAD_LAPTOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NEW_LEDS", "LEDS_CLASS", "LEDS_TRIGGERS", "LEDS_TRIGGERS_HW_CHANGED", "LEDS_TRIGGER_NETDEV", "LEDS_BRIGHTNESS_HW_CHANGED", "IDEAPAD_LAPTOP" ], "series_id": "d84af761-1ab2-4d46-a1d0-3d99dce40287" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "trigger_may_offload_show", "led_trigger_is_hw_controlled", "led_trigger_remove_hw_control", "led_trigger_set", "led_trigger_notify_hw_control_changed" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FV19MRURTJiMzNDssCiAgICAmIzM0O0xFRFNfQ0xBU1MmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSUyYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSX05FVERFViYjMzQ7LAogICAgJiMzNDtMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtJREVBUEFEX0xBUFRPUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3NldCYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1jb250cm9sbGVkIExFRCB0cmlnZ2VyIG9mZmxvYWQgaW5mcmFzdHJ1Y3R1cmUsIHRoZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgc3lzZnMgYXR0cmlidXRlLCBoYXJkd2FyZSB0cmlnZ2VyIHRyYW5zaXRpb24gbm90aWZpY2F0aW9ucyB2aWEgYSB3b3JrcXVldWUsIGFuZCB1cGRhdGVzIGRyaXZlcnMgaW5jbHVkaW5nIGlkZWFwYWQtbGFwdG9wIGFuZCBsZWRzLWNyb3NfZWMuXG5cbjEuIE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgb3Igc29ja2V0IGJ1ZmZlcnMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzLiBVc2Vyc3BhY2UgZXhwb3N1cmUgaXMgbGltaXRlZCB0byBzdGFuZGFyZCBzeXNmc19lbWl0IHN0cmluZyBmb3JtYXR0aW5nLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RydWN0IGZpZWxkcyAoZS5nLiwgdHJpZ2dlcnNfaHdfY2hhbmdlZCwgbGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJyYW5jaGluZy5cbjMuIENvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaGFuZGxpbmcgKHN1Y2ggYXMgd29ya3F1ZXVlIGZsdXNoL2Rlc3RydWN0aW9uIGFuZCBtdXRleC9yd3NlbSBsb2NrcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi5cblxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIGdlbmVyaWMgc3lzZnMgYXR0cmlidXRlICh0cmlnZ2VyX21heV9vZmZsb2FkKSBmb3IgcXVlcnlhYmxlIGhhcmR3YXJlLW9mZmxvYWRlZCBMRUQgdHJpZ2dlcnMsIHVwZGF0ZXMgY29yZSBicmlnaHRuZXNzIGdldC9zZXQgbG9ja2luZyBhbmQgdHJpZ2dlciByZW1vdmFsIGxvZ2ljLCBhbmQgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyAoQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCkgYWxvbmcgd2l0aCB1cGRhdGVzIHRvIExFRCB0cmlnZ2VyIGRyaXZlcnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBMRUQgY2xhc3MvdHJpZ2dlciBzeXNmcyBpbnRlcmZhY2VzIGFuZCBjb3JlIHRyaWdnZXIgbGlmZWN5Y2xlIGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDA3YTVlM2M5MjExNGM3NTQ1MzE3MmE5NDUyYWI3YTI1YmMzNGI1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMDc6MjI6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuaW5kZXggZDRjOTE4Y2MxMWExMi4uOTRjMzMxZDljNDEwNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuQEAgLTc4LDYgJiM0Mzs3OCwzMSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0KHdoaWNoIHdvdWxkIG9mdGVuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGRldmljZSB0cmVlIGZvciB0aGVcbiBcdFx0aGFyZHdhcmUpLlxuIFxuJiM0MztXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRcbiYjNDM7RGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjZcbiYjNDM7S2VybmVsVmVyc2lvbjpcdDcuNFxuJiM0MztDb250YWN0Olx0bGludXgtbGVkc0B2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7RGVzY3JpcHRpb246XG4mIzQzO1x0XHROYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbiYjNDM7XHRcdFN1Y2ggdHJpZ2dlcnMgYXJlIGFsc28gY2FsbGVkIFwmIzM0O2hhcmR3YXJlIGNvbnRyb2wgdHJpZ2dlclwmIzM0OyBpbiBzb21lXG4mIzQzO1x0XHRjb250ZXh0LlxuJiM0MztcbiYjNDM7XHRcdE9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuXG4mIzQzO1xuJiM0MztcdFx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyBhIGxpc3Qgb2YgdHJpZ2dlcnMgdGhhdCBhcmUgY2FwYWJsZSB0b1xuJiM0MztcdFx0YmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWVcbiYjNDM7XHRcdGluZGljYXRlIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCB0cmlnZ2VyOlxuJiM0MztcbiYjNDM7XHRcdC0gYGZvb190cmlnZ2VyYDogdGhlIHRyaWdnZXIgaXMgbm90IHNlbGVjdGVkLlxuJiM0MztcdFx0LSBgXHUwMDNjZm9vX3RyaWdnZXJcdTAwM2VgOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCwgYnV0IGZhbGxzIGJhY2sgdG9cbiYjNDM7XHRcdCAgc29mdHdhcmUgYmxpbmsgZm9yIHNvbWUgcmVhc29uIChlLmcuLCBpbmNvbXBhdGlibGUgdHJpZ2dlclxuJiM0MztcdFx0ICBwYXJhbWV0ZXJzKVxuJiM0MztcdFx0LSBgW2Zvb190cmlnZ2VyXWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkIGFuZCBvZmZsb2FkZWQgdG9cbiYjNDM7XHRcdCAgaGFyZHdhcmUuXG4mIzQzO1xuJiM0MztcdFx0VGhlIFwmIzM0O25ldGRldlwmIzM0OyB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvXG4mIzQzO1x0XHRpbmRpY2F0ZSBpdHMgc3RhdGUsIHNlZSBgL3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS9vZmZsb2FkZWRgLlxuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2ludmVydGVkXG4gRGF0ZTpcdFx0SmFudWFyeSAyMDExXG4gS2VybmVsVmVyc2lvbjpcdDIuNi4zOFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbmluZGV4IGVkNDZiMzdhYjhhMjguLmE1MTQ2ZWExZTNlNjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbkBAIC03NSw2ICYjNDM7NzUsOSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0SWYgMSwgdGhlIExFRCBibGlua2luZyBpbiByZXF1ZXN0ZWQgbW9kZSBpcyBvZmZsb2FkZWQgdG9cbiBcdFx0aGFyZHdhcmUuXG4gXG4mIzQzO1x0XHRMRUQgdHJpZ2dlciBjb3JlIGFsc28gcHJvdmlkZXMgYSBnZW5lcmljIGF0dHJpYnV0ZSBmb3IgdGhpc1xuJiM0MztcdFx0cHVycG9zZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRgLlxuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2xpbmtfMTBcbiBEYXRlOlx0XHRKdW4gMjAyM1xuIEtlcm5lbFZlcnNpb246XHQ2LjVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbmluZGV4IDM5MTM5NjZjZmRhYzAuLmFkYmM1N2I5ZjQ5YzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuQEAgLTI0Miw2ICYjNDM7MjQyLDkgQEAgb3BzIGFuZCBuZWVkcyB0byBkZWNsYXJlIHNwZWNpZmljIHN1cHBvcnQgZm9yIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlcnMuXG4gXG4gV2l0aCBodyBjb250cm9sIHdlIHJlZmVyIHRvIHRoZSBMRUQgZHJpdmVuIGJ5IGhhcmR3YXJlLlxuIFxuJiM0MztBIHN5c2ZzIGF0dHJpYnV0ZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgaXMgcHJvdmlkZWQgZm9yIHVzZXJzcGFjZSB0b1xuJiM0MztxdWVyeSBzdXBwb3J0ZWQgdHJpZ2dlcnMgYW5kIHRoZWlyIHN0YXRlcy5cbiYjNDM7XG4gTEVEIGRyaXZlciBtdXN0IGRlZmluZSB0aGUgZm9sbG93aW5nIHZhbHVlIHRvIHN1cHBvcnQgaHcgY29udHJvbDpcbiBcbiAgICAgLSBod19jb250cm9sX3RyaWdnZXI6XG5AQCAtMjk4LDYgJiM0MzszMDEsMTUgQEAgTEVEIGRyaXZlciBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6XG4gICAgICAgICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGRldmljZSBvciBOVUxMIGlmIG5vdGhpbmdcbiAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IGF0dGFjaGVkLlxuIFxuJiM0MztMRUQgdHJpZ2dlciBzaG91bGQgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgQVBJIHRvIGluZGljYXRlIGh3IGNvbnRyb2w6XG4mIzQzOyAgICAtIG9mZmxvYWRlZDpcbiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdHJpZ2dlciBpcyBjdXJyZW50bHlcbiYjNDM7ICAgICAgICAgICAgICAgIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBJZiBhIHRyaWdnZXIgZG9lc24mIzM5O3QgaW1wbGVtZW50IHRoaXMgY2FsbGJhY2ssIHRoZSBkZWZhdWx0XG4mIzQzOyAgICAgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIHRydWUgZm9yIHByaXZhdGUgdHJpZ2dlcnMgYW5kIGZhbHNlIGZvciBnZW5lcmljXG4mIzQzOyAgICAgICAgICAgICAgICBvbmVzLlxuJiM0MztcbiBMRUQgZHJpdmVyIGNhbiBhY3RpdmF0ZSBhZGRpdGlvbmFsIG1vZGVzIGJ5IGRlZmF1bHQgdG8gd29ya2Fyb3VuZCB0aGVcbiBpbXBvc3NpYmlsaXR5IG9mIHN1cHBvcnRpbmcgZWFjaCBkaWZmZXJlbnQgbW9kZSBvbiB0aGUgc3VwcG9ydGVkIHRyaWdnZXIuXG4gRXhhbXBsZXMgYXJlIGhhcmRjb2RpbmcgdGhlIGJsaW5rIHNwZWVkIHRvIGEgc2V0IGludGVydmFsLCBlbmFibGUgc3BlY2lhbFxuQEAgLTMxMSw5ICYjNDM7MzIzLDY5IEBAIHRoZSBlbmQgdXNlIGh3X2NvbnRyb2xfc2V0IHRvIGFjdGl2YXRlIGh3IGNvbnRyb2wuXG4gQSB0cmlnZ2VyIGNhbiB1c2UgaHdfY29udHJvbF9nZXQgdG8gY2hlY2sgaWYgYSBMRUQgaXMgYWxyZWFkeSBpbiBodyBjb250cm9sXG4gYW5kIGluaXQgdGhlaXIgZmxhZ3MuXG4gXG4mIzQzO0FsdGVybmF0aXZlbHksIGEgcHJpdmF0ZSB0cmlnZ2VyIGNhbiBiZSBpbXBsZW1lbnRlZCBhbG9uZyB3aXRoIHRoZSBMRUQgZHJpdmVyIGlmXG4mIzQzO3RoZSBMRUQmIzM5O3MgaGFyZHdhcmUgY29udHJvbCBkb2VzbiYjMzk7dCBmaXQgYW55IGdlbmVyaWMgdHJpZ2dlci4gVG8gYXNzb2NpYXRlIHRoZVxuJiM0Mztwcml2YXRlIHRyaWdnZXIgd2l0aCB0aGUgTEVEIGNsYXNzZGV2LCB0aGVpciBgdHJpZ2dlcl90eXBlYCBtdXN0IGJlIHRoZSBzYW1lLiBUb1xuJiM0MztkZWNsYXJlIHRoYXQgdGhlIHByaXZhdGUgdHJpZ2dlciBwcm92aWRlcyBoYXJkd2FyZSBjb250cm9sIGZvciB0aGUgYXNzb2NpYXRlZFxuJiM0MztMRUQgY2xhc3NkZXYsIHNldCB0aGUgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgc3RyaW5nIHRvIHRoZSB0cmlnZ2VyJiMzOTtzIG5hbWUuIFNpbmNlXG4mIzQzO2JvdGggdGhlIExFRCBjbGFzc2RldiBhbmQgdGhlIHByaXZhdGUgdHJpZ2dlciBhcmUgaW4gdGhlIHNhbWUgTEVEIGRyaXZlciwgaXQmIzM5O3NcbiYjNDM7bm90IG5lY2Vzc2FyeSBmb3IgdGhlbSB0byBjb29yZGluYXRlIHZpYSBgaHdfY29udHJvbF8qYCBjYWxsYmFja3MuXG4mIzQzO1xuIFdoZW4gdGhlIExFRCBpcyBpbiBodyBjb250cm9sLCBubyBzb2Z0d2FyZSBibGluayBpcyBwb3NzaWJsZSBhbmQgZG9pbmcgc29cbiB3aWxsIGVmZmVjdGl2ZWx5IGRpc2FibGUgaHcgY29udHJvbC5cbiBcbiYjNDM7SGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvblxuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztTb21lIGhhcmR3YXJlIGNhbiBhdXRvbm9tb3VzbHkgYWN0aXZhdGUvZGVhY3RpdmF0ZSBoYXJkd2FyZSBjb250cm9sLiBBZnRlciB0aGF0LFxuJiM0Mzt0aGUgTEVEIGhhcmR3YXJlIG5vdGlmaWVzIHRoZSBMRUQgZHJpdmVyLlxuJiM0MztcbiYjNDM7SWYgdGhlIGRyaXZlciBjYW4gZGV0ZWN0IHN1Y2ggdHJhbnNpdGlvbnMgYW5kIHRodXMgd2FudHMgdG8gbm90aWZ5IHRoZSBMRUQgY29yZVxuJiM0Mzt0byB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciB0aGVuIHRoZSBgTEVEX1RSSUdfSFdfQ0hBTkdFRGAgZmxhZyBtdXN0IGJlIHNldCBpblxuJiM0MztmbGFncyBiZWZvcmUgcmVnaXN0ZXJpbmcuIFRvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIGFjY29yZGluZ2x5LCBjYWxsXG4mIzQzO2BsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBvbiB0aGUgTEVEIGNsYXNzZGV2LlxuJiM0MztcbiYjNDM7VGhpcyBjYXBhYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIExFRCBkZXZpY2UmIzM5O3MgcHJpdmF0ZSB0cmlnZ2VyLiBUaGUgcHJpdmF0ZVxuJiM0Mzt0cmlnZ2VyIG11c3QgaGF2ZSBiZWVuIHByb3Blcmx5IHJlZ2lzdGVyZWQgKHNlZSBhYm92ZSkgYW5kIG5hbWVkIGFmdGVyXG4mIzQzO2Bod19jb250cm9sX3RyaWdnZXJgLlxuJiM0MztcbiYjNDM7T25seSB0d28gdHJhbnNpdGlvbnMgYXJlIGRlZmluZWQ6XG4mIzQzO1xuJiM0MzstIFwmIzM0O25vbmVcJiMzNDsgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXI6XG4mIzQzOyAgICAgICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGhhcmR3YXJlIGF1dG9ub21vdXNseSBhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbFxuJiM0MzsgICAgICAgIGFuZCB3aGVuIFwmIzM0O25vbmVcJiMzNDsgKGkuZS4sIG5vIHRyaWdnZXIpIGlzIGN1cnJlbnRseSBhY3RpdmUuIElmIHRoZSBwcml2YXRlXG4mIzQzOyAgICAgICAgdHJpZ2dlciBpcyBhbHJlYWR5IGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5XG4mIzQzOyAgICAgICAgYSBuby1vcC5cbiYjNDM7XG4mIzQzOyAgICAgICAgVGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xuJiM0MzsgICAgICAgIG5vcm1hbC5cbiYjNDM7XG4mIzQzOyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcbiYjNDM7ICAgICAgICBhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIGN1cnJlbnRseSBpbiBoYXJkd2FyZVxuJiM0MzsgICAgICAgIGNvbnRyb2wuXG4mIzQzO1xuJiM0MzsgICAgICAgIElmIGVycm9yIG9jY3VycyBpbiB0aGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSwgdGhlIExFRCBUcmlnZ2VyIGNvcmUgcmV2ZXJ0c1xuJiM0MzsgICAgICAgIHRoZSBlZmZlY3RpdmUgdHJpZ2dlciB0byBcJiMzNDtub25lXCYjMzQ7LlxuJiM0MztcbiYjNDM7LSBwcml2YXRlIHRyaWdnZXIgPVx1MDAzZSBcJiMzNDtub25lXCYjMzQ7XG4mIzQzOyAgICAgICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGhhcmR3YXJlIGF1dG9ub21vdXNseSBkZWFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sXG4mIzQzOyAgICAgICAgYW5kIHdoZW4gdGhlIHByaXZhdGUgdHJpZ2dlciBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiBcJiMzNDtub25lXCYjMzQ7IChpLmUuLCBub1xuJiM0MzsgICAgICAgIHRyaWdnZXIpIGlzIGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5IGFcbiYjNDM7ICAgICAgICBuby1vcC5cbiYjNDM7XG4mIzQzOyAgICAgICAgVGhlIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHByaXZhdGUgdHJpZ2dlciB3aWxsIGJlIGV4ZWN1dGVkIGFzXG4mIzQzOyAgICAgICAgbm9ybWFsLCBleGNlcHQgdGhhdCB0aGUgY3VycmVudCBMRUQgYnJpZ2h0bmVzcyBpcyByZXRhaW5lZC4gVGhlIHJlYXNvblxuJiM0MzsgICAgICAgIGZvciBrZWVwaW5nIHRoZSBicmlnaHRuZXNzIHVuY2hhbmdlZCBpcyB0aGF0IHNvbWUgaGFyZHdhcmUgbWF5IGNob29zZSBhXG4mIzQzOyAgICAgICAgc3BlY2lmaWMgYnJpZ2h0bmVzcyBpbnN0ZWFkIG9mIHNpbXBseSB0dXJuaW5nIG9mZiB0aGUgTEVEIGFmdGVyXG4mIzQzOyAgICAgICAgYXV0b25vbW91c2x5IGRlYWN0aXZhdGluZyBoYXJkd2FyZSBjb250cm9sLlxuJiM0MztcbiYjNDM7ICAgICAgICBUaGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZVxuJiM0MzsgICAgICAgIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBub3QgY3VycmVudGx5IGluIGhhcmR3YXJlXG4mIzQzOyAgICAgICAgY29udHJvbC5cbiYjNDM7XG4mIzQzO0lmIHRoZSBjdXJyZW50IHRyaWdnZXIgaXMgbmVpdGhlciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIG5vciBcJiMzNDtub25lXCYjMzQ7LCBubyB0cmFuc2l0aW9uXG4mIzQzO3dpbGwgYmUgbWFkZS5cbiYjNDM7XG4gS25vd24gSXNzdWVzXG4gPT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG5pbmRleCBhNTFiMGVkNTM4ODY0Li4zYjQzOGQ4ZGE1ZTBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbkBAIC0yNywyOSAmIzQzOzI3LDE5IEBAIHN0YXRpYyBMSVNUX0hFQUQobGVkc19sb29rdXBfbGlzdCk7XG4gXG4gc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsZWRzX3dxO1xuIFxuLXN0YXRpYyBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4te1xuLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuLVx0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbi1cdHJldHVybiBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyIFx1MDAyNlx1MDAyNiBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZXRyaWdnZXJfdHlwZTtcbi0jZWxzZVxuLVx0cmV0dXJuIGZhbHNlO1xuLSNlbmRpZlxuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIHtcbiBcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gXHR1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcztcbiBcbi1cdGlmIChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSlcbi1cdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcykge1xuJiM0MztcdFx0aWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0RBVEE7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmxlZF9jZGV2LVx1MDAzZWxlZF9hY2Nlc3MpO1xuLVx0bGVkX3VwZGF0ZV9icmlnaHRuZXNzKGxlZF9jZGV2KTtcbi1cdGJyaWdodG5lc3MgPSBsZWRfY2Rldi1cdTAwM2VicmlnaHRuZXNzO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxlZF9jZGV2LVx1MDAzZWxlZF9hY2Nlc3MpO1xuJiM0MztcdFx0bGVkX3VwZGF0ZV9icmlnaHRuZXNzKGxlZF9jZGV2KTtcbiYjNDM7XHRcdGJyaWdodG5lc3MgPSBsZWRfY2Rldi1cdTAwM2VicmlnaHRuZXNzO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGJyaWdodG5lc3MpO1xuIH1cbkBAIC03NCw2ICYjNDM7NjQsOSBAQCBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbiBcbiBcdGlmIChzdGF0ZSA9PSBMRURfT0ZGKVxuIFx0XHRsZWRfdHJpZ2dlcl9yZW1vdmUobGVkX2NkZXYpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKGxlZF9jZGV2KTtcbiYjNDM7XG4gXHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIHN0YXRlKTtcbiBcbiBcdHJldCA9IHNpemU7XG5AQCAtMTAzLDggJiM0Mzs5NiwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0ge1xuIFx0XHUwMDI2YmluX2F0dHJfdHJpZ2dlcixcbiBcdE5VTEwsXG4gfTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERVZJQ0VfQVRUUl9STyh0cmlnZ2VyX21heV9vZmZsb2FkKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZF90cmlnZ2VyX2F0dHJzW10gPSB7XG4mIzQzO1x0XHUwMDI2ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyLFxuJiM0MztcdE5VTExcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1bW9kZV90IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbiYjNDM7XHRcdFx0XHQgICAgICBpbnQgaWR4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaik7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGF0dHIgPT0gXHUwMDI2ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyKVxuJiM0MztcdFx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA/IGF0dHItXHUwMDNlbW9kZSA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhdHRyLVx1MDAzZW1vZGU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbGVkX3RyaWdnZXJfZ3JvdXAgPSB7XG4gXHQuYmluX2F0dHJzID0gbGVkX3RyaWdnZXJfYmluX2F0dHJzLFxuJiM0MztcdC5hdHRycyA9IGxlZF90cmlnZ2VyX2F0dHJzLFxuJiM0MztcdC5pc192aXNpYmxlID0gbGVkX3RyaWdnZXJfaXNfdmlzaWJsZSxcbiB9O1xuICNlbmRpZlxuIFxuQEAgLTU5Niw2ICYjNDM7NjExLDkgQEAgaW50IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoc3RydWN0IGRldmljZSAqcGFyZW50LFxuIFx0bGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQobGVkX2NkZXYpO1xuICNlbmRpZlxuIFxuJiM0MztcdGlmIChsZWRfY2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRClcbiYjNDM7XHRcdGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChsZWRfY2Rldik7XG4mIzQzO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxlZF9jZGV2LVx1MDAzZWxlZF9hY2Nlc3MpO1xuIFxuIFx0ZGV2X2RiZyhwYXJlbnQsIFwmIzM0O1JlZ2lzdGVyZWQgbGVkIGRldmljZTogJXNcXG5cJiMzNDssXG5AQCAtNjE2LDYgJiM0Mzs2MzQsOSBAQCB2b2lkIGxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGxlZF9jZGV2LVx1MDAzZWRldikpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRpZiAobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpXG4mIzQzO1x0XHRsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQobGVkX2NkZXYpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbiBcdGRvd25fd3JpdGUoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiBcdGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xuaW5kZXggYjEyMjMyMThiZGExMS4uYTlkOTkyYTg4NjE2MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXG5AQCAtNyw5ICYjNDM7NywxMyBAQFxuICAqIEF1dGhvcjogUmljaGFyZCBQdXJkaWUgXHUwMDNjcnB1cmRpZUBvcGVuZWRoYW5kLmNvbVx1MDAzZVxuICAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbG9ja2RlcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuQEAgLTMzLDYgJiM0MzszNywzNCBAQCB0cmlnZ2VyX3JlbGV2YW50KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4gXHRyZXR1cm4gIXRyaWctXHUwMDNldHJpZ2dlcl90eXBlIHx8IHRyaWctXHUwMDNldHJpZ2dlcl90eXBlID09IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfdHlwZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIWxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fFxuJiM0MztcdCAgICBzdHJjbXAobGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW5hbWUpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAobGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VvZmZsb2FkZWQpXG4mIzQzO1x0XHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VvZmZsb2FkZWQobGVkX2NkZXYpO1xuJiM0MztcbiYjNDM7XHRkZXZfd2Fybl9vbmNlKGxlZF9jZGV2LVx1MDAzZWRldiwgXCYjMzQ7aHcgY29udHJvbCB0cmlnZ2VyICVzIGRvZXNuJiMzOTt0IGltcGxlbWVudCBvZmZsb2FkZWQoKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSk7XG4mIzQzO1xuJiM0MztcdC8qIE90aGVyd2lzZSBhc3N1bWUgcHJpdmF0ZSB0cmlnZ2VycyBhcyBhbHdheXMgb2ZmbG9hZGVkLiAqL1xuJiM0MztcdHJldHVybiBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZXRyaWdnZXJfdHlwZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKTtcbiYjNDM7XG4gc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcbiBcdFx0XHQgIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudClcbkBAIC0xNjMsNyAmIzQzOzE5NSw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVhZCk7XG4gXG4gLyogQ2FsbGVyIG11c3QgZW5zdXJlIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayBoZWxkICovXG4taW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuJiM0MztzdGF0aWMgaW50IF9fbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsXG4mIzQzO1x0XHRcdCAgICAgYm9vbCBod190cmlnZ2VyZWQpXG4ge1xuIFx0Y2hhciAqZXZlbnQgPSBOVUxMO1xuIFx0Y2hhciAqZW52cFsyXTtcbkBAIC0xOTQsNyAmIzQzOzIyNywyMSBAQCBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4gXHRcdGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfZGF0YSA9IE5VTEw7XG4gXHRcdGxlZF9jZGV2LVx1MDAzZWFjdGl2YXRlZCA9IGZhbHNlO1xuIFx0XHRsZWRfY2Rldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5MRURfSU5JVF9ERUZBVUxUX1RSSUdHRVI7XG4tXHRcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEhhcmR3YXJlIG1heSBoYXZlIHNlbGVjdGVkIGEgbmV3IGJyaWdodG5lc3MgbGV2ZWwgZHVyaW5nIGl0c1xuJiM0MztcdFx0ICogaGFyZHdhcmUgY29udHJvbCB0cmFuc2l0aW9uLCBzbyBvbmx5IHJlc2V0IGJyaWdodG5lc3MgaWYgd2VcbiYjNDM7XHRcdCAqIGFyZSBzd2l0Y2hpbmcgdG8gYW5vdGhlciB0cmlnZ2VyIG9yIGlmIHRoZSBzd2l0Y2hpbmcgaXMgbm90XG4mIzQzO1x0XHQgKiBoYXJkd2FyZSB0cmlnZ2VyZWQuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIGVycm9yIHBhdGgsIGFzIHJ1bm5pbmdcbiYjNDM7XHRcdCAqIGludG8gdGhlIGVycm9yIHBhdGggaW1wbGllcyBhIG5vbmUgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXJcbiYjNDM7XHRcdCAqIHRyYW5zaXRpb24uIFRoaXMgaGludHMgdGhhdCB0aGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGVcbiYjNDM7XHRcdCAqIHRyaWdnZXIgbXVzdCBoYXZlIHNvbWUgZnVuZGFtZW50YWwgYnVncywgc28gZG9uJiMzOTt0IGJvdGhlclxuJiM0MztcdFx0ICogbGVhdmluZyB0aGUgTEVEIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHRyaWcgfHwgIWh3X3RyaWdnZXJlZClcbiYjNDM7XHRcdFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTtcbiBcdH1cbiBcdGlmICh0cmlnKSB7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZ0cmlnLVx1MDAzZWxlZGRldl9saXN0X2xvY2spO1xuQEAgLTI1OCw2ICYjNDM7MzA1LDExIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuJiM0MztcbiYjNDM7aW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCB0cmlnLCBmYWxzZSk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9zZXQpO1xuIFxuIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuQEAgLTI2OCw2ICYjNDM7MzIwLDE1IEBAIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmUpO1xuIFxuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxuJiM0MztcdFx0bGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbCk7XG4mIzQzO1xuIHN0YXRpYyBib29sIGxlZF9tYXRjaF9kZWZhdWx0X3RyaWdnZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4ge1xuQEAgLTMxMyw2ICYjNDM7Mzc0LDMyIEBAIHZvaWQgbGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KTtcbiBcbiYjNDM7c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7XG4mIzQzO1x0Ym9vbCBoaXQsIG9mZmxvYWRlZDtcbiYjNDM7XHRpbnQgbGVuO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcyk7XG4mIzQzO1x0Z3VhcmQocndzZW1fcmVhZCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0dHJpZyA9IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXI7XG4mIzQzO1xuJiM0MztcdG9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XG4mIzQzO1x0aGl0ID0gb2ZmbG9hZGVkIHx8ICh0cmlnIFx1MDAyNlx1MDAyNiAhc3RyY21wKGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciwgdHJpZy1cdTAwM2VuYW1lKSk7XG4mIzQzO1xuJiM0MztcdC8qIFtvZmZsb2FkZWRdIFx1MDAzY2FjdGl2ZV9idXRfbm90X29mZmxvYWRlZFx1MDAzZSBpbmFjdGl2ZSAqL1xuJiM0MztcdGxlbiA9IHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcyVzJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBvZmZsb2FkZWQgPyBcJiMzNDtbXCYjMzQ7IDogKGhpdCA/IFwmIzM0O1x1MDAzY1wmIzM0OyA6IFwmIzM0O1wmIzM0OyksXG4mIzQzO1x0XHRcdCBsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsXG4mIzQzO1x0XHRcdCBvZmZsb2FkZWQgPyBcJiMzNDtdXCYjMzQ7IDogKGhpdCA/IFwmIzM0O1x1MDAzZVwmIzM0OyA6IFwmIzM0O1wmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbGVuO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyk7XG4mIzQzO1xuIC8qIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqL1xuIFxuIGludCBsZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG5AQCAtNDAzLDYgJiM0Mzs0OTAsODggQEAgaW50IGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2xlZF90cmlnZ2VyX3JlZ2lzdGVyKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0IHN0cnVjdCBsZWRfdHJpZ2dlciAqaGNfdHJpZylcbiYjNDM7e1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXIpIHtcbiYjNDM7XHRcdC8qIFwmIzM0O25vbmVcJiMzNDsgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXIuICovXG4mIzQzO1x0XHRpZiAoYWN0aXZhdGUpXG4mIzQzO1x0XHRcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBoY190cmlnLCB0cnVlKTtcbiYjNDM7XHR9IGVsc2UgaWYgKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXIgPT0gaGNfdHJpZykge1xuJiM0MztcdFx0LyogcHJpdmF0ZSB0cmlnZ2VyID1cdTAwM2UgXCYjMzQ7bm9uZVwmIzM0Oy4gKi9cbiYjNDM7XHRcdGlmICghYWN0aXZhdGUpXG4mIzQzO1x0XHRcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMLCB0cnVlKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogT3RoZXIgdHJpZ2dlciBpcyBhY3RpdmUuICovXG4mIzQzO1x0XHRkZXZfZGJnKGxlZF9jZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7SWdub3JpbmcgaHcgY29udHJvbCB0cmFuc2l0aW9uICglcyAlcykgd2hpbGUgJXMgaXMgYWN0aXZlXCYjMzQ7LFxuJiM0MztcdFx0XHRhY3RpdmF0ZSA/IFwmIzM0O2FjdGl2YXRlXCYjMzQ7IDogXCYjMzQ7ZGVhY3RpdmF0ZVwmIzM0OywgaGNfdHJpZy1cdTAwM2VuYW1lLFxuJiM0MztcdFx0XHRsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW5hbWUpO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRkZXZfd2FybihsZWRfY2Rldi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byAlcyAlcyBpbiBodyBjb250cm9sIHRyYW5zaXRpb246ICVkXCYjMzQ7LFxuJiM0MztcdFx0XHQgYWN0aXZhdGUgPyBcJiMzNDthY3RpdmF0ZVwmIzM0OyA6IFwmIzM0O2RlYWN0aXZhdGVcJiMzNDssIGhjX3RyaWctXHUwMDNlbmFtZSwgZXJyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbGVkX3RyaWdnZXJfaHdfY29udHJvbF9jaGFuZ2VkX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxlZF9jbGFzc2RldiwgdHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrKTtcbiYjNDM7XHRib29sIGFjdGl2YXRlID0gUkVBRF9PTkNFKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWQpO1xuJiM0MztcbiYjNDM7XHRzY29wZWRfZ3VhcmQocndzZW1fcmVhZCwgXHUwMDI2dHJpZ2dlcnNfbGlzdF9sb2NrKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh0cmlnLCBcdTAwMjZ0cmlnZ2VyX2xpc3QsIG5leHRfdHJpZykge1xuJiM0MztcdFx0XHRpZiAodHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIXN0cmNtcCh0cmlnLVx1MDAzZW5hbWUsIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcikpIHtcbiYjNDM7XHRcdFx0XHRndWFyZChyd3NlbV93cml0ZSkoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZfZXJyKGxlZF9jZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFwmIzM0OyVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0X19mdW5jX18sIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSlcbiYjNDM7e1xuJiM0MztcdC8qIFJlc3RyaWN0ZWQgdG8gcHJpdmF0ZSB0cmlnZ2Vycy4gKi9cbiYjNDM7XHRpZiAoV0FSTl9PTighKGxlZF9jZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBMRURfVFJJR19IV19DSEFOR0VEKSB8fFxuJiM0MztcdFx0ICAgICFsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgfHwgIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfdHlwZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UobGVkX2NkZXYtXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZCwgYWN0aXZhdGUpO1xuJiM0MztcbiYjNDM7XHRzY2hlZHVsZV93b3JrKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XG4mIzQzO1xuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmssIGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXIpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZCk7XG4mIzQzO1xuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXG4mIzQzO1xuIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cbiBcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbmluZGV4IDE4NDRkMGNkNWY1MjguLjZkYjgzZDAxNTI3NzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuQEAgLTg1LDEyICYjNDM7ODUsMTggQEAgc3RhdGljIGludCBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIFx0cmV0dXJuIGNyb3NfZWNfbGVkX3NlbmRfY21kKHByaXYtXHUwMDNlY3Jvc19lYywgXHUwMDI2YXJnKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGNyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZTtcbiBcbiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGNyb3NfZWNfbGVkX3RyaWdnZXIgPSB7XG4gXHQubmFtZSA9IFwmIzM0O2Nocm9tZW9zLWF1dG9cJiMzNDssXG4gXHQudHJpZ2dlcl90eXBlID0gXHUwMDI2Y3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlLFxuIFx0LmFjdGl2YXRlID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZSxcbiYjNDM7XHQub2ZmbG9hZGVkID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbmluZGV4IGVkNmE0N2JiYjQ0ZjkuLjMyZDQwZDE3NmQzZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbkBAIC0xOTUsMTAgJiM0MzsxOTUsMTYgQEAgc3RhdGljIHZvaWQgb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldilcbiBcdFx0XHRlcnIpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgb21uaWFfaHd0cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBvbW5pYV9od190cmlnZ2VyID0ge1xuIFx0Lm5hbWVcdFx0PSBcJiMzNDtvbW5pYS1tY3VcJiMzNDssXG4gXHQuYWN0aXZhdGVcdD0gb21uaWFfaHd0cmlnX2FjdGl2YXRlLFxuIFx0LmRlYWN0aXZhdGVcdD0gb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUsXG4mIzQzO1x0Lm9mZmxvYWRlZFx0PSBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkLFxuIFx0LnRyaWdnZXJfdHlwZVx0PSBcdTAwMjZvbW5pYV9od190cmlnZ2VyX3R5cGUsXG4gfTtcbiBcbkBAIC0yNTEsNiAmIzQzOzI1Nyw3IEBAIHN0YXRpYyBpbnQgb21uaWFfbGVkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBvbW5pYV9sZWQgKmxlZCxcbiBcdCAqIGJ5IExFRCBjbGFzcyBmcm9tIHRoZSBsaW51eCxkZWZhdWx0LXRyaWdnZXIgcHJvcGVydHkuXG4gXHQgKi9cbiBcdGNkZXYtXHUwMDNlZGVmYXVsdF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xuJiM0MztcdGNkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xuIFxuIFx0LyogUHV0IHRoZSBMRUQgaW50byBzb2Z0d2FyZSBtb2RlICovXG4gXHRyZXQgPSBvbW5pYV9jbWRfd3JpdGVfdTgoY2xpZW50LCBPTU5JQV9DTURfTEVEX01PREUsIE9NTklBX0NNRF9MRURfTU9ERV9MRUQobGVkLVx1MDAzZXJlZykgfFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLmggYi9kcml2ZXJzL2xlZHMvbGVkcy5oXG5pbmRleCBiZWU0NjY1MWUwNjhmLi5iZGFjMjMzNjAxMmU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMuaFxuQEAgLTI3LDggJiM0MzsyNywxOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0XHRcdGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCk7XG4mIzQzO3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7XG4gXG4gZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbGVkc19saXN0X2xvY2s7XG4gZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbGVkc19saXN0O1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4mIzQzO3ZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiYjNDM7I2Vsc2UgLyogIUNPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikgeyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHsgfVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuJiM0MztcbiAjZW5kaWZcdC8qIF9fTEVEU19IX0lOQ0xVREVEICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbmluZGV4IGMxMTI4MmE3NGI1YWMuLmExMWQwNGNlNGFiMmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG5AQCAtOSw2ICYjNDM7OSwxNiBAQCBtZW51Y29uZmlnIExFRFNfVFJJR0dFUlNcbiBcbiBpZiBMRURTX1RSSUdHRVJTXG4gXG4mIzQzO2NvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbiYjNDM7XHRib29sIFwmIzM0O0xFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRkZWZhdWx0IExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBoYXJkd2FyZSBpbml0aWF0ZWQgaGFyZHdhcmUgY29udHJvbFxuJiM0MztcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cbiYjNDM7XHQgIFwmIzM0O25vbmVcJiMzNDsgKGkuZS4sIG5vIHRyaWdnZXIpIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyLlxuJiM0MztcbiYjNDM7XHQgIFNlZSBEb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgZm9yIGRldGFpbHMuXG4mIzQzO1xuIGNvbmZpZyBMRURTX1RSSUdHRVJfVElNRVJcbiBcdHRyaXN0YXRlIFwmIzM0O0xFRCBUaW1lciBUcmlnZ2VyXCYjMzQ7XG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcbmluZGV4IDViNGU5MmMxNGRiYjQuLjJlOWFmNDhhNzRkYmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5AQCAtNzk4LDEwICYjNDM7Nzk4LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl90cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gXHRrZnJlZSh0cmlnZ2VyX2RhdGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxlZF9uZXRkZXZfZGF0YSAqdHJpZ2dlcl9kYXRhID0gbGVkX2dldF90cmlnZ2VyX2RhdGEobGVkX2NkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJpZ2dlcl9kYXRhLVx1MDAzZWh3X2NvbnRyb2w7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBuZXRkZXZfbGVkX3RyaWdnZXIgPSB7XG4gXHQubmFtZSA9IFwmIzM0O25ldGRldlwmIzM0OyxcbiBcdC5hY3RpdmF0ZSA9IG5ldGRldl90cmlnX2FjdGl2YXRlLFxuIFx0LmRlYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlLFxuJiM0MztcdC5vZmZsb2FkZWQgPSBuZXRkZXZfdHJpZ19vZmZsb2FkZWQsXG4gXHQuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuaW5kZXggNTE2NTk0OTkzMDczOS4uYTk3ODUyYjBiMjI4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAIGNvbmZpZyBJREVBUEFEX0xBUFRPUFxuIFx0c2VsZWN0IElOUFVUX1NQQVJTRUtNQVBcbiBcdHNlbGVjdCBORVdfTEVEU1xuIFx0c2VsZWN0IExFRFNfQ0xBU1NcbiYjNDM7XHRzZWxlY3QgTEVEU19UUklHR0VSU1xuIFx0aGVscFxuIFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciBMZW5vdm8gSWRlYVBhZCBuZXRib29rcyBjb250YWlucyBkcml2ZXJzIGZvclxuIFx0ICByZmtpbGwgc3dpdGNoLCBob3RrZXksIGZhbiBjb250cm9sIGFuZCBiYWNrbGlnaHQgY29udHJvbC5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXG5pbmRleCA4MjEzNTI0NTA0ZWViLi5mODZjMTFmNTFkMGJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXG5AQCAtMTQsOSAmIzQzOzE0LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaTgwNDIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuQEAgLTI2LDkgJiM0MzsyOSwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fcHJvZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG93ZXJfc3VwcGx5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZmtpbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXHUwMDNlXG5AQCAtMTM0LDEwICYjNDM7MTM5LDMxIEBAIGVudW0ge1xuIH07XG4gXG4gLypcbi0gKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIHN0YXRlcyAtIDFcbi0gKiBGdXR1cmUga2V5Ym9hcmQgdHlwZXMgbWF5IG5lZWQgYSBuZXcgc3lzdGVtLCBpZiB0aGVyZSYjMzk7cyBhIGNvbGxpc2lvblxuLSAqIEtCRF9CTF9UUklTVEFURV9BVVRPIGhhcyBubyB3YXkgdG8gcmVwb3J0IG9yIHNldCB0aGUgYXV0byBzdGF0ZVxuLSAqIHNvIGl0IGVmZmVjdGl2ZWx5IGhhcyAzIHN0YXRlcywgYnV0IG5lZWRzIHRvIGhhbmRsZSA0XG4mIzQzOyAqIFRoZSBlbnVtZXJhdGlvbiBoYXMgdHdvIHB1cnBvc2VzOlxuJiM0MzsgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodFxuJiM0MzsgKiAgIC0gYXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIG9mIHRoZSBLQkxDIGNvbW1hbmRcbiYjNDM7ICpcbiYjNDM7ICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgICAgICBIYXJkd2FyZSBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHwgICAgMyB8XG4mIzQzOyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1NUQU5EQVJEICAgICAgICAgIHwgICAgICBvZmYgfCAgb24gfCAgTi9BIHwgIE4vQSB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgIE4vQSB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8XG4mIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqXG4mIzQzOyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czpcbiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7XG4mIzQzOyAqIHwgIExFRCBjbGFzc2RldiBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHxcbiYjNDM7ICogfCBPcGVyYXRpb24gICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiYjNDM7ICogfCBSZWFkICAgICAgICAgICAgICAgICAgICAgfCBvZmYvYXV0byB8IGxvdyB8IGhpZ2ggfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiYjNDM7ICogfCBXcml0ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfFxuJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MztcbiAgKi9cbiBlbnVtIHtcbiBcdEtCRF9CTF9TVEFOREFSRCAgICAgID0gMSxcbkBAIC0xNDUsNiAmIzQzOzE3MSw4IEBAIGVudW0ge1xuIFx0S0JEX0JMX1RSSVNUQVRFX0FVVE8gPSAzLFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTXHQzXG4mIzQzO1xuICNkZWZpbmUgS0JEX0JMX1FVRVJZX1RZUEVcdFx0MHgxXG4gI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfVFlQRVx0XHQweDVcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9BVVRPX1RZUEVcdDB4N1xuQEAgLTIwMCwxMCAmIzQzOzIyOCwxNCBAQCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlIHtcbiBcdFx0Ym9vbCB5bWNfZWNfdHJpZ2dlciAgICAgICA6IDE7XG4gXHR9IGZlYXR1cmVzO1xuIFx0c3RydWN0IHtcbi1cdFx0Ym9vbCBpbml0aWFsaXplZDtcbiYjNDM7XHRcdGludCBpbml0aWFsaXplZDsgLyogIDA6IGluaXRpYWxpemlvbiBwZW5kaW5nL29uZ29pbmcvZmFpbGVkXG4mIzQzO1x0XHRcdFx0ICAqIFx1MDAzZTA6IGluaXRpYWxpemlvbiBmaW5pc2hlZFxuJiM0MztcdFx0XHRcdCAgKiBcdTAwM2MwOiB1bnJlZ2lzdGVyYXRpb24gb25nb2luZy9maW5pc2hlZFxuJiM0MztcdFx0XHRcdCAgKi9cbiBcdFx0aW50IHR5cGU7XG4gXHRcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkO1xuLVx0XHR1bnNpZ25lZCBpbnQgbGFzdF9icmlnaHRuZXNzO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGxhc3RfaHdfYnJpZ2h0bmVzcztcbiYjNDM7XHRcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogcHJvdGVjdHMgYnJpZ2h0bmVzcyB0cmFja2luZyAqL1xuIFx0fSBrYmRfYmw7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRib29sIGluaXRpYWxpemVkO1xuQEAgLTE1OTIsNyAmIzQzOzE2MjQsMjQgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShpbnQgdHlwZSlcbiBcdHJldHVybiAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEUpIHx8ICh0eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPKTtcbiB9XG4gXG4tc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2Uoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXG4mIzQzO3tcbiYjNDM7XHQvKiBPZmYsIGxvdyBvciBoaWdoICovXG4mIzQzO1x0aWYgKGh3X2JyaWdodG5lc3MgXHUwMDNjPSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4mIzQzO1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbiYjNDM7XG4mIzQzO1x0LyogQXV0byAoY29udHJvbGxlZCBieSBFQyBhY2NvcmRpbmcgdG8gQUxTKSwgcmVwb3J0IGFzIG9mZiAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWtiZF9ibC50eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBVbmtub3duIHZhbHVlICovXG4mIzQzO1x0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LFxuJiM0MztcdFx0IFwmIzM0O1Vua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlZFwmIzM0OywgaHdfYnJpZ2h0bmVzcyk7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHZhbHVlO1xuIFx0aW50IGVycjtcbkBAIC0xNjA2LDIxICYjNDM7MTY1NSw3IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHQvKiBDb252ZXJ0IHJldHVybmVkIHZhbHVlIHRvIGJyaWdodG5lc3MgbGV2ZWwgKi9cbi1cdFx0dmFsdWUgPSBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7XG4tXG4tXHRcdC8qIE9mZiwgbG93IG9yIGhpZ2ggKi9cbi1cdFx0aWYgKHZhbHVlIFx1MDAzYz0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuLVx0XHRcdHJldHVybiB2YWx1ZTtcbi1cbi1cdFx0LyogQXV0bywgcmVwb3J0IGFzIG9mZiAqL1xuLVx0XHRpZiAodmFsdWUgPT0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzICYjNDM7IDEpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXG4tXHRcdC8qIFVua25vd24gdmFsdWUgKi9cbi1cdFx0ZGV2X3dhcm4oXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LFxuLVx0XHRcdCBcJiMzNDtVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWx1XCYjMzQ7LCB2YWx1ZSk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0cmV0dXJuIEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTtcbiBcdH1cbiBcbiBcdGVyciA9IGV2YWxfaGFscyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCBcdTAwMjZ2YWx1ZSk7XG5AQCAtMTYzMCw2ICYjNDM7MTY2NSwxNiBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gISF0ZXN0X2JpdChIQUxTX0tCRF9CTF9TVEFURV9CSVQsIFx1MDAyNnZhbHVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCBod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4mIzQzO1xuJiM0MztcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIHtcbiBcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuQEAgLTE2MzcsOTkgJiM0MzsxNjgyLDIwNyBAQCBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYVxuIFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKVxuJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXG4ge1xuLVx0aW50IGVycjtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4gXHRpbnQgdHlwZSA9IHByaXYtXHUwMDNla2JkX2JsLnR5cGU7XG4mIzQzO1x0aW50IGVycjtcbiBcbi1cdGlmIChpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZSh0eXBlKSkge1xuLVx0XHRpZiAoYnJpZ2h0bmVzcyBcdTAwM2UgcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5tdXRleCk7XG4gXG4tXHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHxcbiYjNDM7XHRpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHtcbiYjNDM7XHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGh3X2JyaWdodG5lc3MpIHxcbiBcdFx0XHRGSUVMRF9QUkVQKEtCRF9CTF9DT01NQU5EX1RZUEUsIHR5cGUpIHxcbiBcdFx0XHRLQkRfQkxfQ09NTUFORF9TRVQ7XG4gXHRcdGVyciA9IGV4ZWNfa2JsYyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCB2YWx1ZSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRlcnIgPSBleGVjX3NhbHMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGKTtcbiYjNDM7XHRcdHZhbHVlID0gaHdfYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGO1xuJiM0MztcdFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH1cbi1cbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xuJiM0MztcdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYnJpZ2h0bmVzcyBcdTAwM2UgcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBicmlnaHRuZXNzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIFx0XHRcdFx0XHRcdCAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuIHtcbiBcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiB1bnJlZ2lzdGVyaW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBMRUQgdW5yZWdpc3RyYXRpb25cbiYjNDM7XHQgKiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSYjMzk7dmUgc2V0IExFRF9SRVRBSU5fQVRfU0hVVERPV05cbiYjNDM7XHQgKiB0byByZXRhaW4gbGVkX2NkZXYgYnJpZ2h0bmVzcyBsZXZlbC4gVG8gZG8gdGhlIHNhbWUgZm9yIGF1dG8gbW9kZSxcbiYjNDM7XHQgKiBnYXRlIGNoYW5nZXMgYW5kIHJldHVybiBlYXJseS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEl0JiMzOTtzIG5lZWRsZXNzIHRvIGdhdGUgY2hhbmdlcyB3aGVuIGluaXRpYWxpemluZywgYXMgdGhlcmUgbWF5IGJlIGFcbiYjNDM7XHQgKiB0aW1lIG1hcmdpbiBiZXR3ZWVuIHN5c2ZzIGF0dHJpYnV0ZSBjcmVhdGlvbiBhbmQgc3RhdGUgY2hhbmdlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2MgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQocHJpdiwgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtpZGVhcGFkLWF1dG9cJiMzNDssXG4mIzQzO1x0LnRyaWdnZXJfdHlwZSA9IFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlLFxuJiM0MztcdC5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSxcbiYjNDM7XHQub2ZmbG9hZGVkID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2woc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdixcbiYjNDM7XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXG4mIzQzO3tcbiYjNDM7XHRib29sIGh3X2NvbnRyb2wsIGxhc3RfaHdfY29udHJvbDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCB8fCBwcml2LVx1MDAzZWtiZF9ibC50eXBlICE9IEtCRF9CTF9UUklTVEFURV9BVVRPKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRod19jb250cm9sID0gaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4mIzQzO1x0bGFzdF9od19jb250cm9sID0gcHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUztcbiYjNDM7XG4mIzQzO1x0aWYgKGh3X2NvbnRyb2wgIT0gbGFzdF9od19jb250cm9sKVxuJiM0MztcdFx0bGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGh3X2NvbnRyb2wpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIHtcbi1cdGludCBicmlnaHRuZXNzO1xuJiM0MztcdGludCBod19icmlnaHRuZXNzLCBicmlnaHRuZXNzO1xuIFxuLVx0aWYgKCFwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZClcbiYjNDM7XHRpZiAodW5saWtlbHkocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXHUwMDNjPSAwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuLVx0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm11dGV4KTtcbiYjNDM7XG4mIzQzO1x0aHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuJiM0MztcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoYnJpZ2h0bmVzcyA9PSBwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MpXG4mIzQzO1x0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4mIzQzO1x0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47IC8qIFJlamVjdCBpbnNhbmUgdmFsdWVzIGVhcmx5LiAqL1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IGh3X2JyaWdodG5lc3MpXG4gXHRcdHJldHVybjtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XG4mIzQzO1x0aWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2wocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7XG4gXG4gXHRsZWRfY2xhc3NkZXZfbm90aWZ5X2JyaWdodG5lc3NfaHdfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGJyaWdodG5lc3MpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4tXHRpbnQgYnJpZ2h0bmVzcywgZXJyO1xuJiM0MztcdGludCBod19icmlnaHRuZXNzLCBlcnI7XG4gXG4gXHRpZiAoIXByaXYtXHUwMDNlZmVhdHVyZXMua2JkX2JsKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdGlmIChXQVJOX09OKHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkKSlcbiYjNDM7XHRpZiAoV0FSTl9PTihwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2UgMCkpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuLVx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpKVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xuLVx0ZWxzZVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxO1xuJiM0MztcdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gMDtcbiBcbi1cdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbi1cdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gYnJpZ2h0bmVzcztcbiYjNDM7XHRlcnIgPSBkZXZtX211dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LCBcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5tdXRleCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcbiYjNDM7XHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBod19icmlnaHRuZXNzO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5uYW1lICAgICAgICAgICAgICAgICAgICA9IFwmIzM0O3BsYXRmb3JtOjpcJiMzNDsgTEVEX0ZVTkNUSU9OX0tCRF9CQUNLTElHSFQ7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuYnJpZ2h0bmVzc19nZXQgICAgICAgICAgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldDtcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0O1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmZsYWdzICAgICAgICAgICAgICAgICAgID0gTEVEX0JSSUdIVF9IV19DSEFOR0VEIHwgTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbiBcbiYjNDM7XHRzd2l0Y2ggKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpIHtcbiYjNDM7XHRjYXNlIEtCRF9CTF9UUklTVEFURV9BVVRPOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKSB7XG4mIzQzO1x0XHRcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7Q2Fubm90IHByb3ZpZGUgTEVEIHRyaWdnZXIgJXMgZm9yIGtleWJvYXJkIGJhY2tsaWdodFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuZmxhZ3MgfD0gTEVEX1RSSUdfSFdfQ0hBTkdFRDtcbiYjNDM7XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC50cmlnZ2VyX3R5cGUgPSBcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcbiYjNDM7XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5od19jb250cm9sX3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBIYXJkd2FyZSByZW1lbWJlcnMgdGhlIGxhc3QgYnJpZ2h0bmVzcyBsZXZlbCwgaW5jbHVkaW5nIGF1dG8gbW9kZS4gKi9cbiYjNDM7XHRcdGlmIChod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmRlZmF1bHRfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lO1xuJiM0MztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgS0JEX0JMX1RSSVNUQVRFOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgS0JEX0JMX1NUQU5EQVJEOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQvKiBUaGlzIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGJ5IGlkZWFwYWRfY2hlY2tfZmVhdHVyZXMoKS4gKi9cbiYjNDM7XHRcdHVucmVhY2hhYmxlKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZWplY3QgaW5zYW5lIHZhbHVlcy4gKi9cbiYjNDM7XHRlcnIgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdGVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsIFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLmxlZCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuJiM0MztcdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gMTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9leGl0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuLVx0aWYgKCFwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZClcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IGZhbHNlO1xuJiM0MztcdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gLTE7XG4gXG4gXHRsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQpO1xuIH1cbkBAIC0yNTQ4LDE3ICYjNDM7MjcwMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGVhcGFkX2xhcHRvcF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRlcnIgPSBsZWRfdHJpZ2dlcl9yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIExFRCB0cmlnZ2VyICVzOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUsIGVycik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZXJyID0gaWRlYXBhZF93bWlfZHJpdmVyX3JlZ2lzdGVyKCk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfbGVkdHJpZztcbiBcbiBcdGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2FjcGlfZHJpdmVyKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfd21pO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfd21pOlxuJiM0MztcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XG4mIzQzO2Vycl9sZWR0cmlnOlxuJiM0MztcdGlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZClcbiYjNDM7XHRcdGxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBtb2R1bGVfaW5pdChpZGVhcGFkX2xhcHRvcF9pbml0KVxuIFxuQEAgLTI1NjYsNiAmIzQzOzI3MzIsOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgaWRlYXBhZF9sYXB0b3BfZXhpdCh2b2lkKVxuIHtcbiBcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuIFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxuJiM0MztcdFx0bGVkX3RyaWdnZXJfdW5yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuIH1cbiBtb2R1bGVfZXhpdChpZGVhcGFkX2xhcHRvcF9leGl0KVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVkcy5oIGIvaW5jbHVkZS9saW51eC9sZWRzLmhcbmluZGV4IGE1MTVmMDc1YzI5YTEuLjkzYjNmZDdlNTYzNjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sZWRzLmhcbkBAIC0xMDksNiAmIzQzOzEwOSw3IEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYge1xuICNkZWZpbmUgTEVEX0lOSVRfREVGQVVMVF9UUklHR0VSIEJJVCgyMylcbiAjZGVmaW5lIExFRF9SRUpFQ1RfTkFNRV9DT05GTElDVCBCSVQoMjQpXG4gI2RlZmluZSBMRURfTVVMVElfQ09MT1JcdFx0QklUKDI1KVxuJiM0MzsjZGVmaW5lIExFRF9UUklHX0hXX0NIQU5HRURcdEJJVCgyNilcbiBcbiBcdC8qIHNldF9icmlnaHRuZXNzX3dvcmsgLyBibGlua190aW1lciBmbGFncywgYXRvbWljLCBwcml2YXRlLiAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHR3b3JrX2ZsYWdzO1xuQEAgLTIzOSw2ICYjNDM7MjQwLDExIEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYge1xuIFx0c3RydWN0IGtlcm5mc19ub2RlXHQqYnJpZ2h0bmVzc19od19jaGFuZ2VkX2tuO1xuICNlbmRpZlxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuJiM0MztcdGJvb2xcdFx0XHR0cmlnZ2Vyc19od19jaGFuZ2VkO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdFx0dHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHQvKiBFbnN1cmVzIGNvbnNpc3RlbnQgYWNjZXNzIHRvIHRoZSBMRUQgY2xhc3MgZGV2aWNlICovXG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0bGVkX2FjY2VzcztcbiB9O1xuQEAgLTQ4NSw2ICYjNDM7NDkxLDcgQEAgc3RydWN0IGxlZF90cmlnZ2VyIHtcbiBcdGNvbnN0IGNoYXJcdCAqbmFtZTtcbiBcdGludFx0XHQoKmFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gXHR2b2lkXHRcdCgqZGVhY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuJiM0MztcdGJvb2xcdFx0KCpvZmZsb2FkZWQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBcbiBcdC8qIEJyaWdodG5lc3Mgc2V0IGJ5IGxlZF90cmlnZ2VyX2V2ZW50ICovXG4gXHRlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7XG5AQCAtNTMzLDYgJiM0Mzs1NDAsOSBAQCB2b2lkIGxlZF90cmlnZ2VyX2JsaW5rX29uZXNob3Qoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyLFxuIHZvaWQgbGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcik7XG4gdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiYjNDM7XG4mIzQzO2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF9zZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIFx0XHRcdFx0XHR2b2lkICp0cmlnZ2VyX2RhdGEpXG5AQCAtNTg0LDYgJiM0Mzs1OTQsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkICpsZWRfZ2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB7XG5AQCAtNTk4LDYgJiM0Mzs2MTUsMTMgQEAgbGVkX3RyaWdnZXJfZ2V0X2JyaWdodG5lc3MoY29uc3Qgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKVxuIFxuICNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSUyAqL1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgYm9vbCBhY3RpdmF0ZSkge31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qIFRyaWdnZXIgc3BlY2lmaWMgZW51bSAqL1xuIGVudW0gbGVkX3RyaWdnZXJfbmV0ZGV2X21vZGVzIHtcbiBcdFRSSUdHRVJfTkVUREVWX0xJTksgPSAwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FV19MRURTJiMzNDssCiAgICAmIzM0O0xFRFNfQ0xBU1MmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSUyYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSX05FVERFViYjMzQ7LAogICAgJiMzNDtMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtJREVBUEFEX0xBUFRPUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3NldCYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBzeXNmcyBhdHRyaWJ1dGUgKHRyaWdnZXJfbWF5X29mZmxvYWQpIGZvciBxdWVyeWFibGUgaGFyZHdhcmUtb2ZmbG9hZGVkIExFRCB0cmlnZ2VycywgdXBkYXRlcyBjb3JlIGJyaWdodG5lc3MgZ2V0L3NldCBsb2NraW5nIGFuZCB0cmlnZ2VyIHJlbW92YWwgbG9naWMsIGFuZCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gTEVEIHRyaWdnZXIgZHJpdmVycy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIExFRCBjbGFzcy90cmlnZ2VyIHN5c2ZzIGludGVyZmFjZXMgYW5kIGNvcmUgdHJpZ2dlciBsaWZlY3ljbGUgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMDdhNWUzYzkyMTE0Yzc1NDUzMTcyYTk0NTJhYjdhMjViYzM0YjUyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAwNzoyMjoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKaW5kZXggZDRjOTE4Y2MxMWExMi4uOTRjMzMxZDljNDEwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQKQEAgLTc4LDYgJiM0Mzs3OCwzMSBAQCBEZXNjcmlwdGlvbjoKIAkJKHdoaWNoIHdvdWxkIG9mdGVuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGRldmljZSB0cmVlIGZvciB0aGUKIAkJaGFyZHdhcmUpLgogCiYjNDM7V2hhdDoJCS9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy90cmlnZ2VyX21heV9vZmZsb2FkCiYjNDM7RGF0ZToJCVNlcHRlbWJlciAyMDI2CiYjNDM7S2VybmVsVmVyc2lvbjoJNy40CiYjNDM7Q29udGFjdDoJbGludXgtbGVkc0B2Z2VyLmtlcm5lbC5vcmcKJiM0MztEZXNjcmlwdGlvbjoKJiM0MzsJCU5hbWVzIGFuZCBzdGF0ZXMgb2YgdHJpZ2dlcnMgdGhhdCBtYXkgYmUgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLgomIzQzOwkJU3VjaCB0cmlnZ2VycyBhcmUgYWxzbyBjYWxsZWQgJiMzNDtoYXJkd2FyZSBjb250cm9sIHRyaWdnZXImIzM0OyBpbiBzb21lCiYjNDM7CQljb250ZXh0LgomIzQzOwomIzQzOwkJT25seSBleGlzdHMgd2hlbiB0aGUgTEVEIHN1cHBvcnRzIHRyaWdnZXIgb2ZmbG9hZC4KJiM0MzsKJiM0MzsJCVJlYWRpbmcgdGhpcyBmaWxlIHJldHVybnMgYSBsaXN0IG9mIHRyaWdnZXJzIHRoYXQgYXJlIGNhcGFibGUgdG8KJiM0MzsJCWJlIG9mZmxvYWRlZC4gVGhlIG9wdGlvbmFsIGJyYWNrZXRzIGFyb3VuZCB0aGUgdHJpZ2dlciBuYW1lCiYjNDM7CQlpbmRpY2F0ZSB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgdHJpZ2dlcjoKJiM0MzsKJiM0MzsJCS0gYGZvb190cmlnZ2VyYDogdGhlIHRyaWdnZXIgaXMgbm90IHNlbGVjdGVkLgomIzQzOwkJLSBgJmx0O2Zvb190cmlnZ2VyJmd0O2A6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkLCBidXQgZmFsbHMgYmFjayB0bwomIzQzOwkJICBzb2Z0d2FyZSBibGluayBmb3Igc29tZSByZWFzb24gKGUuZy4sIGluY29tcGF0aWJsZSB0cmlnZ2VyCiYjNDM7CQkgIHBhcmFtZXRlcnMpCiYjNDM7CQktIGBbZm9vX3RyaWdnZXJdYDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQgYW5kIG9mZmxvYWRlZCB0bwomIzQzOwkJICBoYXJkd2FyZS4KJiM0MzsKJiM0MzsJCVRoZSAmIzM0O25ldGRldiYjMzQ7IHRyaWdnZXIgYWxzbyBwcm92aWRlcyBhIGN1c3RvbSBhdHRyaWJ1dGUgdG8KJiM0MzsJCWluZGljYXRlIGl0cyBzdGF0ZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvJmx0O2xlZCZndDsvb2ZmbG9hZGVkYC4KJiM0MzsKIFdoYXQ6CQkvc3lzL2NsYXNzL2xlZHMvJmx0O2xlZCZndDsvaW52ZXJ0ZWQKIERhdGU6CQlKYW51YXJ5IDIwMTEKIEtlcm5lbFZlcnNpb246CTIuNi4zOApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXYgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldgppbmRleCBlZDQ2YjM3YWI4YTI4Li5hNTE0NmVhMWUzZTYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldgpAQCAtNzUsNiAmIzQzOzc1LDkgQEAgRGVzY3JpcHRpb246CiAJCUlmIDEsIHRoZSBMRUQgYmxpbmtpbmcgaW4gcmVxdWVzdGVkIG1vZGUgaXMgb2ZmbG9hZGVkIHRvCiAJCWhhcmR3YXJlLgogCiYjNDM7CQlMRUQgdHJpZ2dlciBjb3JlIGFsc28gcHJvdmlkZXMgYSBnZW5lcmljIGF0dHJpYnV0ZSBmb3IgdGhpcwomIzQzOwkJcHVycG9zZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvJmx0O2xlZCZndDsvdHJpZ2dlcl9tYXlfb2ZmbG9hZGAuCiYjNDM7CiBXaGF0OgkJL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L2xpbmtfMTAKIERhdGU6CQlKdW4gMjAyMwogS2VybmVsVmVyc2lvbjoJNi41CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QKaW5kZXggMzkxMzk2NmNmZGFjMC4uYWRiYzU3YjlmNDljMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdApAQCAtMjQyLDYgJiM0MzsyNDIsOSBAQCBvcHMgYW5kIG5lZWRzIHRvIGRlY2xhcmUgc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIHN1cHBvcnRlZCB0cmlnZ2Vycy4KIAogV2l0aCBodyBjb250cm9sIHdlIHJlZmVyIHRvIHRoZSBMRUQgZHJpdmVuIGJ5IGhhcmR3YXJlLgogCiYjNDM7QSBzeXNmcyBhdHRyaWJ1dGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIGlzIHByb3ZpZGVkIGZvciB1c2Vyc3BhY2UgdG8KJiM0MztxdWVyeSBzdXBwb3J0ZWQgdHJpZ2dlcnMgYW5kIHRoZWlyIHN0YXRlcy4KJiM0MzsKIExFRCBkcml2ZXIgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YWx1ZSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6CiAKICAgICAtIGh3X2NvbnRyb2xfdHJpZ2dlcjoKQEAgLTI5OCw2ICYjNDM7MzAxLDE1IEBAIExFRCBkcml2ZXIgbXVzdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gc3VwcG9ydCBodyBjb250cm9sOgogICAgICAgICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGRldmljZSBvciBOVUxMIGlmIG5vdGhpbmcKICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgYXR0YWNoZWQuCiAKJiM0MztMRUQgdHJpZ2dlciBzaG91bGQgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgQVBJIHRvIGluZGljYXRlIGh3IGNvbnRyb2w6CiYjNDM7ICAgIC0gb2ZmbG9hZGVkOgomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRyaWdnZXIgaXMgY3VycmVudGx5CiYjNDM7ICAgICAgICAgICAgICAgIG9mZmxvYWRlZCB0byBoYXJkd2FyZS4KJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgSWYgYSB0cmlnZ2VyIGRvZXNuJiMzOTt0IGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLCB0aGUgZGVmYXVsdAomIzQzOyAgICAgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIHRydWUgZm9yIHByaXZhdGUgdHJpZ2dlcnMgYW5kIGZhbHNlIGZvciBnZW5lcmljCiYjNDM7ICAgICAgICAgICAgICAgIG9uZXMuCiYjNDM7CiBMRUQgZHJpdmVyIGNhbiBhY3RpdmF0ZSBhZGRpdGlvbmFsIG1vZGVzIGJ5IGRlZmF1bHQgdG8gd29ya2Fyb3VuZCB0aGUKIGltcG9zc2liaWxpdHkgb2Ygc3VwcG9ydGluZyBlYWNoIGRpZmZlcmVudCBtb2RlIG9uIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlci4KIEV4YW1wbGVzIGFyZSBoYXJkY29kaW5nIHRoZSBibGluayBzcGVlZCB0byBhIHNldCBpbnRlcnZhbCwgZW5hYmxlIHNwZWNpYWwKQEAgLTMxMSw5ICYjNDM7MzIzLDY5IEBAIHRoZSBlbmQgdXNlIGh3X2NvbnRyb2xfc2V0IHRvIGFjdGl2YXRlIGh3IGNvbnRyb2wuCiBBIHRyaWdnZXIgY2FuIHVzZSBod19jb250cm9sX2dldCB0byBjaGVjayBpZiBhIExFRCBpcyBhbHJlYWR5IGluIGh3IGNvbnRyb2wKIGFuZCBpbml0IHRoZWlyIGZsYWdzLgogCiYjNDM7QWx0ZXJuYXRpdmVseSwgYSBwcml2YXRlIHRyaWdnZXIgY2FuIGJlIGltcGxlbWVudGVkIGFsb25nIHdpdGggdGhlIExFRCBkcml2ZXIgaWYKJiM0Mzt0aGUgTEVEJiMzOTtzIGhhcmR3YXJlIGNvbnRyb2wgZG9lc24mIzM5O3QgZml0IGFueSBnZW5lcmljIHRyaWdnZXIuIFRvIGFzc29jaWF0ZSB0aGUKJiM0Mztwcml2YXRlIHRyaWdnZXIgd2l0aCB0aGUgTEVEIGNsYXNzZGV2LCB0aGVpciBgdHJpZ2dlcl90eXBlYCBtdXN0IGJlIHRoZSBzYW1lLiBUbwomIzQzO2RlY2xhcmUgdGhhdCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHByb3ZpZGVzIGhhcmR3YXJlIGNvbnRyb2wgZm9yIHRoZSBhc3NvY2lhdGVkCiYjNDM7TEVEIGNsYXNzZGV2LCBzZXQgdGhlIGBod19jb250cm9sX3RyaWdnZXJgIHN0cmluZyB0byB0aGUgdHJpZ2dlciYjMzk7cyBuYW1lLiBTaW5jZQomIzQzO2JvdGggdGhlIExFRCBjbGFzc2RldiBhbmQgdGhlIHByaXZhdGUgdHJpZ2dlciBhcmUgaW4gdGhlIHNhbWUgTEVEIGRyaXZlciwgaXQmIzM5O3MKJiM0Mztub3QgbmVjZXNzYXJ5IGZvciB0aGVtIHRvIGNvb3JkaW5hdGUgdmlhIGBod19jb250cm9sXypgIGNhbGxiYWNrcy4KJiM0MzsKIFdoZW4gdGhlIExFRCBpcyBpbiBodyBjb250cm9sLCBubyBzb2Z0d2FyZSBibGluayBpcyBwb3NzaWJsZSBhbmQgZG9pbmcgc28KIHdpbGwgZWZmZWN0aXZlbHkgZGlzYWJsZSBodyBjb250cm9sLgogCiYjNDM7SGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbgomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztTb21lIGhhcmR3YXJlIGNhbiBhdXRvbm9tb3VzbHkgYWN0aXZhdGUvZGVhY3RpdmF0ZSBoYXJkd2FyZSBjb250cm9sLiBBZnRlciB0aGF0LAomIzQzO3RoZSBMRUQgaGFyZHdhcmUgbm90aWZpZXMgdGhlIExFRCBkcml2ZXIuCiYjNDM7CiYjNDM7SWYgdGhlIGRyaXZlciBjYW4gZGV0ZWN0IHN1Y2ggdHJhbnNpdGlvbnMgYW5kIHRodXMgd2FudHMgdG8gbm90aWZ5IHRoZSBMRUQgY29yZQomIzQzO3RvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIHRoZW4gdGhlIGBMRURfVFJJR19IV19DSEFOR0VEYCBmbGFnIG11c3QgYmUgc2V0IGluCiYjNDM7ZmxhZ3MgYmVmb3JlIHJlZ2lzdGVyaW5nLiBUbyB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciBhY2NvcmRpbmdseSwgY2FsbAomIzQzO2BsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBvbiB0aGUgTEVEIGNsYXNzZGV2LgomIzQzOwomIzQzO1RoaXMgY2FwYWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIHRoZSBMRUQgZGV2aWNlJiMzOTtzIHByaXZhdGUgdHJpZ2dlci4gVGhlIHByaXZhdGUKJiM0Mzt0cmlnZ2VyIG11c3QgaGF2ZSBiZWVuIHByb3Blcmx5IHJlZ2lzdGVyZWQgKHNlZSBhYm92ZSkgYW5kIG5hbWVkIGFmdGVyCiYjNDM7YGh3X2NvbnRyb2xfdHJpZ2dlcmAuCiYjNDM7CiYjNDM7T25seSB0d28gdHJhbnNpdGlvbnMgYXJlIGRlZmluZWQ6CiYjNDM7CiYjNDM7LSAmIzM0O25vbmUmIzM0OyA9Jmd0OyBwcml2YXRlIHRyaWdnZXI6CiYjNDM7ICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sCiYjNDM7ICAgICAgICBhbmQgd2hlbiAmIzM0O25vbmUmIzM0OyAoaS5lLiwgbm8gdHJpZ2dlcikgaXMgY3VycmVudGx5IGFjdGl2ZS4gSWYgdGhlIHByaXZhdGUKJiM0MzsgICAgICAgIHRyaWdnZXIgaXMgYWxyZWFkeSBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseQomIzQzOyAgICAgICAgYSBuby1vcC4KJiM0MzsKJiM0MzsgICAgICAgIFRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXMKJiM0MzsgICAgICAgIG5vcm1hbC4KJiM0MzsKJiM0MzsgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlCiYjNDM7ICAgICAgICBhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIGN1cnJlbnRseSBpbiBoYXJkd2FyZQomIzQzOyAgICAgICAgY29udHJvbC4KJiM0MzsKJiM0MzsgICAgICAgIElmIGVycm9yIG9jY3VycyBpbiB0aGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSwgdGhlIExFRCBUcmlnZ2VyIGNvcmUgcmV2ZXJ0cwomIzQzOyAgICAgICAgdGhlIGVmZmVjdGl2ZSB0cmlnZ2VyIHRvICYjMzQ7bm9uZSYjMzQ7LgomIzQzOwomIzQzOy0gcHJpdmF0ZSB0cmlnZ2VyID0mZ3Q7ICYjMzQ7bm9uZSYjMzQ7CiYjNDM7ICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGRlYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2wKJiM0MzsgICAgICAgIGFuZCB3aGVuIHRoZSBwcml2YXRlIHRyaWdnZXIgaXMgY3VycmVudGx5IGFjdGl2ZS4gSWYgJiMzNDtub25lJiMzNDsgKGkuZS4sIG5vCiYjNDM7ICAgICAgICB0cmlnZ2VyKSBpcyBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseSBhCiYjNDM7ICAgICAgICBuby1vcC4KJiM0MzsKJiM0MzsgICAgICAgIFRoZSBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhcwomIzQzOyAgICAgICAgbm9ybWFsLCBleGNlcHQgdGhhdCB0aGUgY3VycmVudCBMRUQgYnJpZ2h0bmVzcyBpcyByZXRhaW5lZC4gVGhlIHJlYXNvbgomIzQzOyAgICAgICAgZm9yIGtlZXBpbmcgdGhlIGJyaWdodG5lc3MgdW5jaGFuZ2VkIGlzIHRoYXQgc29tZSBoYXJkd2FyZSBtYXkgY2hvb3NlIGEKJiM0MzsgICAgICAgIHNwZWNpZmljIGJyaWdodG5lc3MgaW5zdGVhZCBvZiBzaW1wbHkgdHVybmluZyBvZmYgdGhlIExFRCBhZnRlcgomIzQzOyAgICAgICAgYXV0b25vbW91c2x5IGRlYWN0aXZhdGluZyBoYXJkd2FyZSBjb250cm9sLgomIzQzOwomIzQzOyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGUKJiM0MzsgICAgICAgIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBub3QgY3VycmVudGx5IGluIGhhcmR3YXJlCiYjNDM7ICAgICAgICBjb250cm9sLgomIzQzOwomIzQzO0lmIHRoZSBjdXJyZW50IHRyaWdnZXIgaXMgbmVpdGhlciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIG5vciAmIzM0O25vbmUmIzM0Oywgbm8gdHJhbnNpdGlvbgomIzQzO3dpbGwgYmUgbWFkZS4KJiM0MzsKIEtub3duIElzc3VlcwogPT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwppbmRleCBhNTFiMGVkNTM4ODY0Li4zYjQzOGQ4ZGE1ZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCkBAIC0yNywyOSAmIzQzOzI3LDE5IEBAIHN0YXRpYyBMSVNUX0hFQUQobGVkc19sb29rdXBfbGlzdCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTsKIAotc3RhdGljIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKLXsKLSNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwotCWd1YXJkKHJ3c2VtX3JlYWQpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7Ci0JcmV0dXJuIGxlZF9jZGV2LSZndDt0cmlnZ2VyICZhbXA7JmFtcDsgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O3RyaWdnZXJfdHlwZTsKLSNlbHNlCi0JcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczsKIAotCWlmIChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSkKLQkJcmV0dXJuIC1FTk9EQVRBOwomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpIHsKJiM0MzsJCWlmIChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSkKJiM0MzsJCQlyZXR1cm4gLUVOT0RBVEE7CiAKLQltdXRleF9sb2NrKCZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpOwotCWxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7Ci0JYnJpZ2h0bmVzcyA9IGxlZF9jZGV2LSZndDticmlnaHRuZXNzOwotCW11dGV4X3VubG9jaygmYW1wO2xlZF9jZGV2LSZndDtsZWRfYWNjZXNzKTsKJiM0MzsJCWxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7CiYjNDM7CQlicmlnaHRuZXNzID0gbGVkX2NkZXYtJmd0O2JyaWdodG5lc3M7CiYjNDM7CX0KIAogCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDsldVxuJiMzNDssIGJyaWdodG5lc3MpOwogfQpAQCAtNzQsNiAmIzQzOzY0LDkgQEAgc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAKIAlpZiAoc3RhdGUgPT0gTEVEX09GRikKIAkJbGVkX3RyaWdnZXJfcmVtb3ZlKGxlZF9jZGV2KTsKJiM0MzsJZWxzZQomIzQzOwkJbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wobGVkX2NkZXYpOwomIzQzOwogCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2Rldiwgc3RhdGUpOwogCiAJcmV0ID0gc2l6ZTsKQEAgLTEwMyw4ICYjNDM7OTYsMzAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCBsZWRfdHJpZ2dlcl9iaW5fYXR0cnNbXSA9IHsKIAkmYW1wO2Jpbl9hdHRyX3RyaWdnZXIsCiAJTlVMTCwKIH07CiYjNDM7CiYjNDM7c3RhdGljIERFVklDRV9BVFRSX1JPKHRyaWdnZXJfbWF5X29mZmxvYWQpOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsZWRfdHJpZ2dlcl9hdHRyc1tdID0gewomIzQzOwkmYW1wO2Rldl9hdHRyX3RyaWdnZXJfbWF5X29mZmxvYWQuYXR0ciwKJiM0MzsJTlVMTAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHVtb2RlX3QgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCQkJICAgICAgaW50IGlkeCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGtvYmpfdG9fZGV2KGtvYmopOwomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwomIzQzOwomIzQzOwlpZiAoYXR0ciA9PSAmYW1wO2Rldl9hdHRyX3RyaWdnZXJfbWF5X29mZmxvYWQuYXR0cikKJiM0MzsJCXJldHVybiBsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyID8gYXR0ci0mZ3Q7bW9kZSA6IDA7CiYjNDM7CiYjNDM7CXJldHVybiBhdHRyLSZndDttb2RlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxlZF90cmlnZ2VyX2dyb3VwID0gewogCS5iaW5fYXR0cnMgPSBsZWRfdHJpZ2dlcl9iaW5fYXR0cnMsCiYjNDM7CS5hdHRycyA9IGxlZF90cmlnZ2VyX2F0dHJzLAomIzQzOwkuaXNfdmlzaWJsZSA9IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUsCiB9OwogI2VuZGlmCiAKQEAgLTU5Niw2ICYjNDM7NjExLDkgQEAgaW50IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoc3RydWN0IGRldmljZSAqcGFyZW50LAogCWxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KGxlZF9jZGV2KTsKICNlbmRpZgogCiYjNDM7CWlmIChsZWRfY2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgTEVEX1RSSUdfSFdfQ0hBTkdFRCkKJiM0MzsJCWxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChsZWRfY2Rldik7CiYjNDM7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpOwogCiAJZGV2X2RiZyhwYXJlbnQsICYjMzQ7UmVnaXN0ZXJlZCBsZWQgZGV2aWNlOiAlc1xuJiMzNDssCkBAIC02MTYsNiAmIzQzOzYzNCw5IEBAIHZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiAJaWYgKElTX0VSUl9PUl9OVUxMKGxlZF9jZGV2LSZndDtkZXYpKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKGxlZF9jZGV2LSZndDtmbGFncyAmYW1wOyBMRURfVFJJR19IV19DSEFOR0VEKQomIzQzOwkJbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKGxlZF9jZGV2KTsKJiM0MzsKICNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwogCWRvd25fd3JpdGUoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKIAlpZiAobGVkX2NkZXYtJmd0O3RyaWdnZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMKaW5kZXggYjEyMjMyMThiZGExMS4uYTlkOTkyYTg4NjE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYwpAQCAtNyw5ICYjNDM7NywxMyBAQAogICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSAmbHQ7cnB1cmRpZUBvcGVuZWRoYW5kLmNvbSZndDsKICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sb2NrZGVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwpAQCAtMzMsNiAmIzQzOzM3LDM0IEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKIAlyZXR1cm4gIXRyaWctJmd0O3RyaWdnZXJfdHlwZSB8fCB0cmlnLSZndDt0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtJmd0O3RyaWdnZXJfdHlwZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFsZWRfY2Rldi0mZ3Q7dHJpZ2dlcikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyIHx8CiYjNDM7CSAgICBzdHJjbXAobGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciwgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAobGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O29mZmxvYWRlZCkKJiM0MzsJCXJldHVybiBsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7b2ZmbG9hZGVkKGxlZF9jZGV2KTsKJiM0MzsKJiM0MzsJZGV2X3dhcm5fb25jZShsZWRfY2Rldi0mZ3Q7ZGV2LCAmIzM0O2h3IGNvbnRyb2wgdHJpZ2dlciAlcyBkb2VzbiYjMzk7dCBpbXBsZW1lbnQgb2ZmbG9hZGVkKClcbiYjMzQ7LAomIzQzOwkJICAgICAgbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpOwomIzQzOwomIzQzOwkvKiBPdGhlcndpc2UgYXNzdW1lIHByaXZhdGUgdHJpZ2dlcnMgYXMgYWx3YXlzIG9mZmxvYWRlZC4gKi8KJiM0MzsJcmV0dXJuIGxlZF9jZGV2LSZndDt0cmlnZ2VyLSZndDt0cmlnZ2VyX3R5cGU7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CWd1YXJkKHJ3c2VtX3JlYWQpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7CiYjNDM7CXJldHVybiBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKTsKJiM0MzsKIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZiwKIAkJCSAgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KQpAQCAtMTYzLDcgJiM0MzsxOTUsOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVhZCk7CiAKIC8qIENhbGxlciBtdXN0IGVuc3VyZSBsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrIGhlbGQgKi8KLWludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKJiM0MztzdGF0aWMgaW50IF9fbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsCiYjNDM7CQkJICAgICBib29sIGh3X3RyaWdnZXJlZCkKIHsKIAljaGFyICpldmVudCA9IE5VTEw7CiAJY2hhciAqZW52cFsyXTsKQEAgLTE5NCw3ICYjNDM7MjI3LDIxIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKIAkJbGVkX2NkZXYtJmd0O3RyaWdnZXJfZGF0YSA9IE5VTEw7CiAJCWxlZF9jZGV2LSZndDthY3RpdmF0ZWQgPSBmYWxzZTsKIAkJbGVkX2NkZXYtJmd0O2ZsYWdzICZhbXA7PSB+TEVEX0lOSVRfREVGQVVMVF9UUklHR0VSOwotCQlsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEhhcmR3YXJlIG1heSBoYXZlIHNlbGVjdGVkIGEgbmV3IGJyaWdodG5lc3MgbGV2ZWwgZHVyaW5nIGl0cwomIzQzOwkJICogaGFyZHdhcmUgY29udHJvbCB0cmFuc2l0aW9uLCBzbyBvbmx5IHJlc2V0IGJyaWdodG5lc3MgaWYgd2UKJiM0MzsJCSAqIGFyZSBzd2l0Y2hpbmcgdG8gYW5vdGhlciB0cmlnZ2VyIG9yIGlmIHRoZSBzd2l0Y2hpbmcgaXMgbm90CiYjNDM7CQkgKiBoYXJkd2FyZSB0cmlnZ2VyZWQuCiYjNDM7CQkgKgomIzQzOwkJICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIGVycm9yIHBhdGgsIGFzIHJ1bm5pbmcKJiM0MzsJCSAqIGludG8gdGhlIGVycm9yIHBhdGggaW1wbGllcyBhIG5vbmUgPSZndDsgcHJpdmF0ZSB0cmlnZ2VyCiYjNDM7CQkgKiB0cmFuc2l0aW9uLiBUaGlzIGhpbnRzIHRoYXQgdGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlCiYjNDM7CQkgKiB0cmlnZ2VyIG11c3QgaGF2ZSBzb21lIGZ1bmRhbWVudGFsIGJ1Z3MsIHNvIGRvbiYjMzk7dCBib3RoZXIKJiM0MzsJCSAqIGxlYXZpbmcgdGhlIExFRCBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0cmlnIHx8ICFod190cmlnZ2VyZWQpCiYjNDM7CQkJbGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTsKIAl9CiAJaWYgKHRyaWcpIHsKIAkJc3Bpbl9sb2NrKCZhbXA7dHJpZy0mZ3Q7bGVkZGV2X2xpc3RfbG9jayk7CkBAIC0yNTgsNiAmIzQzOzMwNSwxMSBAQCBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpCiAKIAlyZXR1cm4gcmV0OwogfQomIzQzOwomIzQzO2ludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgdHJpZywgZmFsc2UpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldCk7CiAKIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQpAQCAtMjY4LDYgJiM0MzszMjAsMTUgQEAgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmUpOwogCiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CWd1YXJkKHJ3c2VtX3dyaXRlKSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwlpZiAoX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSkKJiM0MzsJCWxlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKTsKJiM0MzsKIHN0YXRpYyBib29sIGxlZF9tYXRjaF9kZWZhdWx0X3RyaWdnZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJICAgICAgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQogewpAQCAtMzEzLDYgJiM0MzszNzQsMzIgQEAgdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KTsKIAomIzQzO3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwomIzQzOwlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7CiYjNDM7CWJvb2wgaGl0LCBvZmZsb2FkZWQ7CiYjNDM7CWludCBsZW47CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2xlZF9jZGV2LSZndDtsZWRfYWNjZXNzKTsKJiM0MzsJZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKJiM0MzsKJiM0MzsJdHJpZyA9IGxlZF9jZGV2LSZndDt0cmlnZ2VyOwomIzQzOwomIzQzOwlvZmZsb2FkZWQgPSBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpOwomIzQzOwloaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgJmFtcDsmYW1wOyAhc3RyY21wKGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIsIHRyaWctJmd0O25hbWUpKTsKJiM0MzsKJiM0MzsJLyogW29mZmxvYWRlZF0gJmx0O2FjdGl2ZV9idXRfbm90X29mZmxvYWRlZCZndDsgaW5hY3RpdmUgKi8KJiM0MzsJbGVuID0gc3lzZnNfZW1pdChidWYsICYjMzQ7JXMlcyVzXG4mIzM0OywKJiM0MzsJCQkgb2ZmbG9hZGVkID8gJiMzNDtbJiMzNDsgOiAoaGl0ID8gJiMzNDsmbHQ7JiMzNDsgOiAmIzM0OyYjMzQ7KSwKJiM0MzsJCQkgbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciwKJiM0MzsJCQkgb2ZmbG9hZGVkID8gJiMzNDtdJiMzNDsgOiAoaGl0ID8gJiMzNDsmZ3Q7JiMzNDsgOiAmIzM0OyYjMzQ7KSk7CiYjNDM7CiYjNDM7CXJldHVybiBsZW47CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyk7CiYjNDM7CiAvKiBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi8KIAogaW50IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKQEAgLTQwMyw2ICYjNDM7NDkwLDg4IEBAIGludCBkZXZtX2xlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIpOwogCiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsCiYjNDM7CQkJCQkJIHN0cnVjdCBsZWRfdHJpZ2dlciAqaGNfdHJpZykKJiM0Mzt7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIWxlZF9jZGV2LSZndDt0cmlnZ2VyKSB7CiYjNDM7CQkvKiAmIzM0O25vbmUmIzM0OyA9Jmd0OyBwcml2YXRlIHRyaWdnZXIuICovCiYjNDM7CQlpZiAoYWN0aXZhdGUpCiYjNDM7CQkJZXJyID0gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIGhjX3RyaWcsIHRydWUpOwomIzQzOwl9IGVsc2UgaWYgKGxlZF9jZGV2LSZndDt0cmlnZ2VyID09IGhjX3RyaWcpIHsKJiM0MzsJCS8qIHByaXZhdGUgdHJpZ2dlciA9Jmd0OyAmIzM0O25vbmUmIzM0Oy4gKi8KJiM0MzsJCWlmICghYWN0aXZhdGUpCiYjNDM7CQkJZXJyID0gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIE5VTEwsIHRydWUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogT3RoZXIgdHJpZ2dlciBpcyBhY3RpdmUuICovCiYjNDM7CQlkZXZfZGJnKGxlZF9jZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtJZ25vcmluZyBodyBjb250cm9sIHRyYW5zaXRpb24gKCVzICVzKSB3aGlsZSAlcyBpcyBhY3RpdmUmIzM0OywKJiM0MzsJCQlhY3RpdmF0ZSA/ICYjMzQ7YWN0aXZhdGUmIzM0OyA6ICYjMzQ7ZGVhY3RpdmF0ZSYjMzQ7LCBoY190cmlnLSZndDtuYW1lLAomIzQzOwkJCWxlZF9jZGV2LSZndDt0cmlnZ2VyLSZndDtuYW1lKTsKJiM0MzsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZGV2X3dhcm4obGVkX2NkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gJXMgJXMgaW4gaHcgY29udHJvbCB0cmFuc2l0aW9uOiAlZCYjMzQ7LAomIzQzOwkJCSBhY3RpdmF0ZSA/ICYjMzQ7YWN0aXZhdGUmIzM0OyA6ICYjMzQ7ZGVhY3RpdmF0ZSYjMzQ7LCBoY190cmlnLSZndDtuYW1lLCBlcnIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9od19jb250cm9sX2NoYW5nZWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGVkX2NsYXNzZGV2LCB0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspOwomIzQzOwlib29sIGFjdGl2YXRlID0gUkVBRF9PTkNFKGxlZF9jZGV2LSZndDt0cmlnZ2Vyc19od19jaGFuZ2VkKTsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsICZhbXA7dHJpZ2dlcnNfbGlzdF9sb2NrKSB7CiYjNDM7CQlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7CiYjNDM7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyaWcsICZhbXA7dHJpZ2dlcl9saXN0LCBuZXh0X3RyaWcpIHsKJiM0MzsJCQlpZiAodHJpZy0mZ3Q7dHJpZ2dlcl90eXBlID09IGxlZF9jZGV2LSZndDt0cmlnZ2VyX3R5cGUgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhc3RyY21wKHRyaWctJmd0O25hbWUsIGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIpKSB7CiYjNDM7CQkJCWd1YXJkKHJ3c2VtX3dyaXRlKSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwkJCQlsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24obGVkX2NkZXYsIGFjdGl2YXRlLCB0cmlnKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlkZXZfZXJyKGxlZF9jZGV2LSZndDtkZXYsCiYjNDM7CQkmIzM0OyVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXG4mIzM0OywKJiM0MzsJCV9fZnVuY19fLCBsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKQomIzQzO3sKJiM0MzsJLyogUmVzdHJpY3RlZCB0byBwcml2YXRlIHRyaWdnZXJzLiAqLwomIzQzOwlpZiAoV0FSTl9PTighKGxlZF9jZGV2LSZndDtmbGFncyAmYW1wOyBMRURfVFJJR19IV19DSEFOR0VEKSB8fAomIzQzOwkJICAgICFsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyIHx8ICFsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl90eXBlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShsZWRfY2Rldi0mZ3Q7dHJpZ2dlcnNfaHdfY2hhbmdlZCwgYWN0aXZhdGUpOwomIzQzOwomIzQzOwlzY2hlZHVsZV93b3JrKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQpOwomIzQzOwomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJzX2h3X2NoYW5nZWRfd29yaywgbGVkX3RyaWdnZXJfaHdfY29udHJvbF9jaGFuZ2VkX3dvcmtlcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZCk7CiYjNDM7CiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovCiYjNDM7CiAvKiBTaW1wbGUgTEVEIFRyaWdnZXIgSW50ZXJmYWNlICovCiAKIHZvaWQgbGVkX3RyaWdnZXJfZXZlbnQoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jCmluZGV4IDE4NDRkMGNkNWY1MjguLjZkYjgzZDAxNTI3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMKQEAgLTg1LDEyICYjNDM7ODUsMTggQEAgc3RhdGljIGludCBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogCXJldHVybiBjcm9zX2VjX2xlZF9zZW5kX2NtZChwcml2LSZndDtjcm9zX2VjLCAmYW1wO2FyZyk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgbGVkX2h3X3RyaWdnZXJfdHlwZSBjcm9zX2VjX2xlZF90cmlnZ2VyX3R5cGU7CiAKIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgY3Jvc19lY19sZWRfdHJpZ2dlciA9IHsKIAkubmFtZSA9ICYjMzQ7Y2hyb21lb3MtYXV0byYjMzQ7LAogCS50cmlnZ2VyX3R5cGUgPSAmYW1wO2Nyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZSwKIAkuYWN0aXZhdGUgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlLAomIzQzOwkub2ZmbG9hZGVkID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQsCiB9OwogCiBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYwppbmRleCBlZDZhNDdiYmI0NGY5Li4zMmQ0MGQxNzZkM2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYwpAQCAtMTk1LDEwICYjNDM7MTk1LDE2IEBAIHN0YXRpYyB2b2lkIG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpCiAJCQllcnIpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgb21uaWFfaHd0cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBvbW5pYV9od190cmlnZ2VyID0gewogCS5uYW1lCQk9ICYjMzQ7b21uaWEtbWN1JiMzNDssCiAJLmFjdGl2YXRlCT0gb21uaWFfaHd0cmlnX2FjdGl2YXRlLAogCS5kZWFjdGl2YXRlCT0gb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUsCiYjNDM7CS5vZmZsb2FkZWQJPSBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkLAogCS50cmlnZ2VyX3R5cGUJPSAmYW1wO29tbmlhX2h3X3RyaWdnZXJfdHlwZSwKIH07CiAKQEAgLTI1MSw2ICYjNDM7MjU3LDcgQEAgc3RhdGljIGludCBvbW5pYV9sZWRfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IG9tbmlhX2xlZCAqbGVkLAogCSAqIGJ5IExFRCBjbGFzcyBmcm9tIHRoZSBsaW51eCxkZWZhdWx0LXRyaWdnZXIgcHJvcGVydHkuCiAJICovCiAJY2Rldi0mZ3Q7ZGVmYXVsdF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lOwomIzQzOwljZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7CiAKIAkvKiBQdXQgdGhlIExFRCBpbnRvIHNvZnR3YXJlIG1vZGUgKi8KIAlyZXQgPSBvbW5pYV9jbWRfd3JpdGVfdTgoY2xpZW50LCBPTU5JQV9DTURfTEVEX01PREUsIE9NTklBX0NNRF9MRURfTU9ERV9MRUQobGVkLSZndDtyZWcpIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLmggYi9kcml2ZXJzL2xlZHMvbGVkcy5oCmluZGV4IGJlZTQ2NjUxZTA2OGYuLmJkYWMyMzM2MDEyZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZHMuaApAQCAtMjcsOCAmIzQzOzI3LDE4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiBzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCWNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLAogCQkJbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KTsKJiM0Mztzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIAogZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbGVkc19saXN0X2xvY2s7CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBsZWRzX2xpc3Q7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiYjNDM7I2Vsc2UgLyogIUNPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH0KJiM0MzsjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqLwomIzQzOwogI2VuZGlmCS8qIF9fTEVEU19IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZwppbmRleCBjMTEyODJhNzRiNWFjLi5hMTFkMDRjZTRhYjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcKQEAgLTksNiAmIzQzOzksMTYgQEAgbWVudWNvbmZpZyBMRURTX1RSSUdHRVJTCiAKIGlmIExFRFNfVFJJR0dFUlMKIAomIzQzO2NvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQKJiM0MzsJYm9vbCAmIzM0O0xFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnQmIzM0OwomIzQzOwlkZWZhdWx0IExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VECiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGluaXRpYXRlZCBoYXJkd2FyZSBjb250cm9sCiYjNDM7CSAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW4KJiM0MzsJICAmIzM0O25vbmUmIzM0OyAoaS5lLiwgbm8gdHJpZ2dlcikgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIuCiYjNDM7CiYjNDM7CSAgU2VlIERvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBmb3IgZGV0YWlscy4KJiM0MzsKIGNvbmZpZyBMRURTX1RSSUdHRVJfVElNRVIKIAl0cmlzdGF0ZSAmIzM0O0xFRCBUaW1lciBUcmlnZ2VyJiMzNDsKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYwppbmRleCA1YjRlOTJjMTRkYmI0Li4yZTlhZjQ4YTc0ZGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMKQEAgLTc5OCwxMCAmIzQzOzc5OCwxOCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogCWtmcmVlKHRyaWdnZXJfZGF0YSk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBuZXRkZXZfdHJpZ19vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEgPSBsZWRfZ2V0X3RyaWdnZXJfZGF0YShsZWRfY2Rldik7CiYjNDM7CiYjNDM7CXJldHVybiB0cmlnZ2VyX2RhdGEtJmd0O2h3X2NvbnRyb2w7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBuZXRkZXZfbGVkX3RyaWdnZXIgPSB7CiAJLm5hbWUgPSAmIzM0O25ldGRldiYjMzQ7LAogCS5hY3RpdmF0ZSA9IG5ldGRldl90cmlnX2FjdGl2YXRlLAogCS5kZWFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZCA9IG5ldGRldl90cmlnX29mZmxvYWRlZCwKIAkuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZwppbmRleCA1MTY1OTQ5OTMwNzM5Li5hOTc4NTJiMGIyMjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZwpAQCAtMTYsNiAmIzQzOzE2LDcgQEAgY29uZmlnIElERUFQQURfTEFQVE9QCiAJc2VsZWN0IElOUFVUX1NQQVJTRUtNQVAKIAlzZWxlY3QgTkVXX0xFRFMKIAlzZWxlY3QgTEVEU19DTEFTUwomIzQzOwlzZWxlY3QgTEVEU19UUklHR0VSUwogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIExlbm92byBJZGVhUGFkIG5ldGJvb2tzIGNvbnRhaW5zIGRyaXZlcnMgZm9yCiAJICByZmtpbGwgc3dpdGNoLCBob3RrZXksIGZhbiBjb250cm9sIGFuZCBiYWNrbGlnaHQgY29udHJvbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMKaW5kZXggODIxMzUyNDUwNGVlYi4uZjg2YzExZjUxZDBiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMKQEAgLTE0LDkgJiM0MzsxNCwxMiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29udGFpbmVyX29mLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVidWdmcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Rldl9wcmludGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pODA0Mi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKQEAgLTI2LDkgJiM0MzsyOSwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xlZHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9wcm9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcG93ZXJfc3VwcGx5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Jma2lsbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nX2Nob2ljZXMuaCZndDsKQEAgLTEzNCwxMCAmIzQzOzEzOSwzMSBAQCBlbnVtIHsKIH07CiAKIC8qCi0gKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIHN0YXRlcyAtIDEKLSAqIEZ1dHVyZSBrZXlib2FyZCB0eXBlcyBtYXkgbmVlZCBhIG5ldyBzeXN0ZW0sIGlmIHRoZXJlJiMzOTtzIGEgY29sbGlzaW9uCi0gKiBLQkRfQkxfVFJJU1RBVEVfQVVUTyBoYXMgbm8gd2F5IHRvIHJlcG9ydCBvciBzZXQgdGhlIGF1dG8gc3RhdGUKLSAqIHNvIGl0IGVmZmVjdGl2ZWx5IGhhcyAzIHN0YXRlcywgYnV0IG5lZWRzIHRvIGhhbmRsZSA0CiYjNDM7ICogVGhlIGVudW1lcmF0aW9uIGhhcyB0d28gcHVycG9zZXM6CiYjNDM7ICogICAtIGFzIGFuIGludGVybmFsIGlkZW50aWZpZXIgZm9yIGFsbCBrbm93biB0eXBlcyBvZiBrZXlib2FyZCBiYWNrbGlnaHQKJiM0MzsgKiAgIC0gYXMgYSBtYW5kYXRvcnkgcGFyYW1ldGVyIG9mIHRoZSBLQkxDIGNvbW1hbmQKJiM0MzsgKgomIzQzOyAqIEZvciBlYWNoIHR5cGUsIHRoZSBoYXJkd2FyZSBicmlnaHRuZXNzIHZhbHVlcyBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOgomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCAgICAgIEhhcmR3YXJlIGJyaWdodG5lc3MgfCAgICAgICAgMCB8ICAgMSB8ICAgIDIgfCAgICAzIHwKJiM0MzsgKiB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgIHwgICAgICB8ICAgICAgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCBLQkRfQkxfU1RBTkRBUkQgICAgICAgICAgfCAgICAgIG9mZiB8ICBvbiB8ICBOL0EgfCAgTi9BIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzOwomIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgIE4vQSB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IEtCRF9CTF9UUklTVEFURV9BVVRPICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8IGF1dG8gfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICoKJiM0MzsgKiBXZSBtYXAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgZm9yIEtCRF9CTF9UUklTVEFURV9BVVRPIGFzIGZvbGxvd3M6CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgfCAgICAgICAgMCB8ICAgMSB8ICAgIDIgfAomIzQzOyAqIHwgT3BlcmF0aW9uICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IFJlYWQgICAgICAgICAgICAgICAgICAgICB8IG9mZi9hdXRvIHwgbG93IHwgaGlnaCB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCBXcml0ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOwogICovCiBlbnVtIHsKIAlLQkRfQkxfU1RBTkRBUkQgICAgICA9IDEsCkBAIC0xNDUsNiAmIzQzOzE3MSw4IEBAIGVudW0gewogCUtCRF9CTF9UUklTVEFURV9BVVRPID0gMywKIH07CiAKJiM0MzsjZGVmaW5lIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUwkzCiYjNDM7CiAjZGVmaW5lIEtCRF9CTF9RVUVSWV9UWVBFCQkweDEKICNkZWZpbmUgS0JEX0JMX1RSSVNUQVRFX1RZUEUJCTB4NQogI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfQVVUT19UWVBFCTB4NwpAQCAtMjAwLDEwICYjNDM7MjI4LDE0IEBAIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgewogCQlib29sIHltY19lY190cmlnZ2VyICAgICAgIDogMTsKIAl9IGZlYXR1cmVzOwogCXN0cnVjdCB7Ci0JCWJvb2wgaW5pdGlhbGl6ZWQ7CiYjNDM7CQlpbnQgaW5pdGlhbGl6ZWQ7IC8qICAwOiBpbml0aWFsaXppb24gcGVuZGluZy9vbmdvaW5nL2ZhaWxlZAomIzQzOwkJCQkgICogJmd0OzA6IGluaXRpYWxpemlvbiBmaW5pc2hlZAomIzQzOwkJCQkgICogJmx0OzA6IHVucmVnaXN0ZXJhdGlvbiBvbmdvaW5nL2ZpbmlzaGVkCiYjNDM7CQkJCSAgKi8KIAkJaW50IHR5cGU7CiAJCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkOwotCQl1bnNpZ25lZCBpbnQgbGFzdF9icmlnaHRuZXNzOwomIzQzOwkJdW5zaWduZWQgaW50IGxhc3RfaHdfYnJpZ2h0bmVzczsKJiM0MzsJCXN0cnVjdCBtdXRleCBtdXRleDsgLyogcHJvdGVjdHMgYnJpZ2h0bmVzcyB0cmFja2luZyAqLwogCX0ga2JkX2JsOwogCXN0cnVjdCB7CiAJCWJvb2wgaW5pdGlhbGl6ZWQ7CkBAIC0xNTkyLDcgJiM0MzsxNjI0LDI0IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUoaW50IHR5cGUpCiAJcmV0dXJuICh0eXBlID09IEtCRF9CTF9UUklTVEFURSkgfHwgKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pOwogfQogCi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBod19icmlnaHRuZXNzKQomIzQzO3sKJiM0MzsJLyogT2ZmLCBsb3cgb3IgaGlnaCAqLwomIzQzOwlpZiAoaHdfYnJpZ2h0bmVzcyAmbHQ7PSBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKQomIzQzOwkJcmV0dXJuIGh3X2JyaWdodG5lc3M7CiYjNDM7CiYjNDM7CS8qIEF1dG8gKGNvbnRyb2xsZWQgYnkgRUMgYWNjb3JkaW5nIHRvIEFMUyksIHJlcG9ydCBhcyBvZmYgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2tiZF9ibC50eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPICZhbXA7JmFtcDsKJiM0MzsJICAgIGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFVua25vd24gdmFsdWUgKi8KJiM0MzsJZGV2X3dhcm4oJmFtcDtwcml2LSZndDtwbGF0Zm9ybV9kZXZpY2UtJmd0O2RldiwKJiM0MzsJCSAmIzM0O1Vua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlZCYjMzQ7LCBod19icmlnaHRuZXNzKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCBlcnI7CkBAIC0xNjA2LDIxICYjNDM7MTY1NSw3IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKLQkJLyogQ29udmVydCByZXR1cm5lZCB2YWx1ZSB0byBicmlnaHRuZXNzIGxldmVsICovCi0JCXZhbHVlID0gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpOwotCi0JCS8qIE9mZiwgbG93IG9yIGhpZ2ggKi8KLQkJaWYgKHZhbHVlICZsdDs9IHByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpCi0JCQlyZXR1cm4gdmFsdWU7Ci0KLQkJLyogQXV0bywgcmVwb3J0IGFzIG9mZiAqLwotCQlpZiAodmFsdWUgPT0gcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyAmIzQzOyAxKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogVW5rbm93biB2YWx1ZSAqLwotCQlkZXZfd2FybigmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LAotCQkJICYjMzQ7VW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVsdSYjMzQ7LCB2YWx1ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwomIzQzOwkJcmV0dXJuIEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTsKIAl9CiAKIAllcnIgPSBldmFsX2hhbHMocHJpdi0mZ3Q7YWRldi0mZ3Q7aGFuZGxlLCAmYW1wO3ZhbHVlKTsKQEAgLTE2MzAsNiAmIzQzOzE2NjUsMTYgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogCXJldHVybiAhIXRlc3RfYml0KEhBTFNfS0JEX0JMX1NUQVRFX0JJVCwgJmFtcDt2YWx1ZSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgaHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpOwomIzQzOwomIzQzOwlpZiAoaHdfYnJpZ2h0bmVzcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gaHdfYnJpZ2h0bmVzczsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiB7CiAJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7CkBAIC0xNjM3LDk5ICYjNDM7MTY4MiwyMDcgQEAgc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGEKIAlyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7CiB9CiAKLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpCiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGludCBod19icmlnaHRuZXNzKQogewotCWludCBlcnI7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlpbnQgdHlwZSA9IHByaXYtJmd0O2tiZF9ibC50eXBlOwomIzQzOwlpbnQgZXJyOwogCi0JaWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7Ci0JCWlmIChicmlnaHRuZXNzICZndDsgcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcykKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtwcml2LSZndDtrYmRfYmwubXV0ZXgpOwogCi0JCXZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHwKJiM0MzsJaWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7CiYjNDM7CQl2YWx1ZSA9IEZJRUxEX1BSRVAoS0JEX0JMX1NFVF9CUklHSFRORVNTLCBod19icmlnaHRuZXNzKSB8CiAJCQlGSUVMRF9QUkVQKEtCRF9CTF9DT01NQU5EX1RZUEUsIHR5cGUpIHwKIAkJCUtCRF9CTF9DT01NQU5EX1NFVDsKIAkJZXJyID0gZXhlY19rYmxjKHByaXYtJmd0O2FkZXYtJmd0O2hhbmRsZSwgdmFsdWUpOwogCX0gZWxzZSB7Ci0JCWVyciA9IGV4ZWNfc2Fscyhwcml2LSZndDthZGV2LSZndDtoYW5kbGUsIGJyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRik7CiYjNDM7CQl2YWx1ZSA9IGh3X2JyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRjsKJiM0MzsJCWVyciA9IGV4ZWNfc2Fscyhwcml2LSZndDthZGV2LSZndDtoYW5kbGUsIHZhbHVlKTsKIAl9Ci0KIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CiYjNDM7CXByaXYtJmd0O2tiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzOwogCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKQomIzQzO3sKJiM0MzsJaWYgKGJyaWdodG5lc3MgJmd0OyBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBicmlnaHRuZXNzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogCQkJCQkJICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7CiAJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7CiAKJiM0MzsJLyoKJiM0MzsJICogV2hlbiB1bnJlZ2lzdGVyaW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBMRUQgdW5yZWdpc3RyYXRpb24KJiM0MzsJICogd2hlbiBvdXIgcHJpdmF0ZSB0cmlnZ2VyIGlzIGFjdGl2ZS4gV2UmIzM5O3ZlIHNldCBMRURfUkVUQUlOX0FUX1NIVVRET1dOCiYjNDM7CSAqIHRvIHJldGFpbiBsZWRfY2RldiBicmlnaHRuZXNzIGxldmVsLiBUbyBkbyB0aGUgc2FtZSBmb3IgYXV0byBtb2RlLAomIzQzOwkgKiBnYXRlIGNoYW5nZXMgYW5kIHJldHVybiBlYXJseS4KJiM0MzsJICoKJiM0MzsJICogSXQmIzM5O3MgbmVlZGxlc3MgdG8gZ2F0ZSBjaGFuZ2VzIHdoZW4gaW5pdGlhbGl6aW5nLCBhcyB0aGVyZSBtYXkgYmUgYQomIzQzOwkgKiB0aW1lIG1hcmdpbiBiZXR3ZWVuIHN5c2ZzIGF0dHJpYnV0ZSBjcmVhdGlvbiBhbmQgc3RhdGUgY2hhbmdlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCAmbHQ7IDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtwcml2LSZndDtrYmRfYmwubXV0ZXgpOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7CiYjNDM7CiYjNDM7CXJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZGVhcGFkLWF1dG8mIzM0OywKJiM0MzsJLnRyaWdnZXJfdHlwZSA9ICZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGUsCiYjNDM7CS5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZCA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LAomIzQzOwkJCQkJICAgICB1bnNpZ25lZCBpbnQgaHdfYnJpZ2h0bmVzcykKJiM0Mzt7CiYjNDM7CWJvb2wgaHdfY29udHJvbCwgbGFzdF9od19jb250cm9sOwomIzQzOwomIzQzOwlpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkIHx8IHByaXYtJmd0O2tiZF9ibC50eXBlICE9IEtCRF9CTF9UUklTVEFURV9BVVRPKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlod19jb250cm9sID0gaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7CiYjNDM7CWxhc3RfaHdfY29udHJvbCA9IHByaXYtJmd0O2tiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTOwomIzQzOwomIzQzOwlpZiAoaHdfY29udHJvbCAhPSBsYXN0X2h3X2NvbnRyb2wpCiYjNDM7CQlsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKCZhbXA7cHJpdi0mZ3Q7a2JkX2JsLmxlZCwgaHdfY29udHJvbCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiB7Ci0JaW50IGJyaWdodG5lc3M7CiYjNDM7CWludCBod19icmlnaHRuZXNzLCBicmlnaHRuZXNzOwogCi0JaWYgKCFwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpCiYjNDM7CWlmICh1bmxpa2VseShwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgJmx0Oz0gMCkpCiAJCXJldHVybjsKIAotCWJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTsKLQlpZiAoYnJpZ2h0bmVzcyAmbHQ7IDApCiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ByaXYtJmd0O2tiZF9ibC5tdXRleCk7CiYjNDM7CiYjNDM7CWh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0OyAwKQogCQlyZXR1cm47CiAKLQlpZiAoYnJpZ2h0bmVzcyA9PSBwcml2LSZndDtrYmRfYmwubGFzdF9icmlnaHRuZXNzKQomIzQzOwlicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTsKJiM0MzsJaWYgKGJyaWdodG5lc3MgJmx0OyAwKQomIzQzOwkJcmV0dXJuOyAvKiBSZWplY3QgaW5zYW5lIHZhbHVlcyBlYXJseS4gKi8KJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2tiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gaHdfYnJpZ2h0bmVzcykKIAkJcmV0dXJuOwogCi0JcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CiYjNDM7CWlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHByaXYsIGh3X2JyaWdodG5lc3MpOwomIzQzOwomIzQzOwlwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID0gaHdfYnJpZ2h0bmVzczsKIAogCWxlZF9jbGFzc2Rldl9ub3RpZnlfYnJpZ2h0bmVzc19od19jaGFuZ2VkKCZhbXA7cHJpdi0mZ3Q7a2JkX2JsLmxlZCwgYnJpZ2h0bmVzcyk7CiB9CiAKIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaW5pdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogewotCWludCBicmlnaHRuZXNzLCBlcnI7CiYjNDM7CWludCBod19icmlnaHRuZXNzLCBlcnI7CiAKIAlpZiAoIXByaXYtJmd0O2ZlYXR1cmVzLmtiZF9ibCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoV0FSTl9PTihwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpKQomIzQzOwlpZiAoV0FSTl9PTihwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgJmd0OyAwKSkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKLQlpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUocHJpdi0mZ3Q7a2JkX2JsLnR5cGUpKQotCQlwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjsKLQllbHNlCi0JCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxOwomIzQzOwlwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgPSAwOwogCi0JYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpOwotCWlmIChicmlnaHRuZXNzICZsdDsgMCkKLQkJcmV0dXJuIGJyaWdodG5lc3M7CiYjNDM7CWVyciA9IGRldm1fbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LCAmYW1wO3ByaXYtJmd0O2tiZF9ibC5tdXRleCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7CiYjNDM7CWlmIChod19icmlnaHRuZXNzICZsdDsgMCkKJiM0MzsJCXJldHVybiBod19icmlnaHRuZXNzOwomIzQzOwomIzQzOwlwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID0gaHdfYnJpZ2h0bmVzczsKIAotCXByaXYtJmd0O2tiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzOwogCXByaXYtJmd0O2tiZF9ibC5sZWQubmFtZSAgICAgICAgICAgICAgICAgICAgPSAmIzM0O3BsYXRmb3JtOjomIzM0OyBMRURfRlVOQ1RJT05fS0JEX0JBQ0tMSUdIVDsKIAlwcml2LSZndDtrYmRfYmwubGVkLmJyaWdodG5lc3NfZ2V0ICAgICAgICAgID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQ7CiAJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0OwogCXByaXYtJmd0O2tiZF9ibC5sZWQuZmxhZ3MgICAgICAgICAgICAgICAgICAgPSBMRURfQlJJR0hUX0hXX0NIQU5HRUQgfCBMRURfUkVUQUlOX0FUX1NIVVRET1dOOwogCiYjNDM7CXN3aXRjaCAocHJpdi0mZ3Q7a2JkX2JsLnR5cGUpIHsKJiM0MzsJY2FzZSBLQkRfQkxfVFJJU1RBVEVfQVVUTzoKJiM0MzsJCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyOwomIzQzOwomIzQzOwkJaWYgKCFpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCkgewomIzQzOwkJCWRldl93YXJuKCZhbXA7cHJpdi0mZ3Q7cGxhdGZvcm1fZGV2aWNlLSZndDtkZXYsCiYjNDM7CQkJCSAmIzM0O0Nhbm5vdCBwcm92aWRlIExFRCB0cmlnZ2VyICVzIGZvciBrZXlib2FyZCBiYWNrbGlnaHRcbiYjMzQ7LAomIzQzOwkJCQkgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5mbGFncyB8PSBMRURfVFJJR19IV19DSEFOR0VEOwomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC50cmlnZ2VyX3R5cGUgPSAmYW1wO2lkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlOwomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5od19jb250cm9sX3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTsKJiM0MzsKJiM0MzsJCS8qIEhhcmR3YXJlIHJlbWVtYmVycyB0aGUgbGFzdCBicmlnaHRuZXNzIGxldmVsLCBpbmNsdWRpbmcgYXV0byBtb2RlLiAqLwomIzQzOwkJaWYgKGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKQomIzQzOwkJCXByaXYtJmd0O2tiZF9ibC5sZWQuZGVmYXVsdF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7CiYjNDM7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBLQkRfQkxfVFJJU1RBVEU6CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEtCRF9CTF9TVEFOREFSRDoKJiM0MzsJCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkvKiBUaGlzIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGJ5IGlkZWFwYWRfY2hlY2tfZmVhdHVyZXMoKS4gKi8KJiM0MzsJCXVucmVhY2hhYmxlKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVqZWN0IGluc2FuZSB2YWx1ZXMuICovCiYjNDM7CWVyciA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKIAllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmFtcDtwcml2LSZndDtwbGF0Zm9ybV9kZXZpY2UtJmd0O2RldiwgJmFtcDtwcml2LSZndDtrYmRfYmwubGVkKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkID0gdHJ1ZTsKJiM0MzsJcHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkID0gMTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9leGl0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiB7Ci0JaWYgKCFwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQpCiYjNDM7CWlmIChwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgJmx0Oz0gMCkKIAkJcmV0dXJuOwogCi0JcHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkID0gZmFsc2U7CiYjNDM7CXByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCA9IC0xOwogCiAJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFtcDtwcml2LSZndDtrYmRfYmwubGVkKTsKIH0KQEAgLTI1NDgsMTcgJiM0MzsyNzAxLDMwIEBAIHN0YXRpYyBpbnQgX19pbml0IGlkZWFwYWRfbGFwdG9wX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCiYjNDM7CWVyciA9IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKCZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJcHJfd2FybigmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBMRUQgdHJpZ2dlciAlczogJWRcbiYjMzQ7LAomIzQzOwkJCWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lLCBlcnIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJZXJyID0gaWRlYXBhZF93bWlfZHJpdmVyX3JlZ2lzdGVyKCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZXJyX2xlZHRyaWc7CiAKIAllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFtcDtpZGVhcGFkX2FjcGlfZHJpdmVyKTsKLQlpZiAoZXJyKSB7Ci0JCWlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7Ci0JCXJldHVybiBlcnI7Ci0JfQomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfd21pOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3dtaToKJiM0MzsJaWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTsKJiM0MztlcnJfbGVkdHJpZzoKJiM0MzsJaWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKQomIzQzOwkJbGVkX3RyaWdnZXJfdW5yZWdpc3RlcigmYW1wO2lkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBtb2R1bGVfaW5pdChpZGVhcGFkX2xhcHRvcF9pbml0KQogCkBAIC0yNTY2LDYgJiM0MzsyNzMyLDkgQEAgc3RhdGljIHZvaWQgX19leGl0IGlkZWFwYWRfbGFwdG9wX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2lkZWFwYWRfYWNwaV9kcml2ZXIpOwogCWlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7CiYjNDM7CiYjNDM7CWlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCkKJiM0MzsJCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoJmFtcDtpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpOwogfQogbW9kdWxlX2V4aXQoaWRlYXBhZF9sYXB0b3BfZXhpdCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sZWRzLmggYi9pbmNsdWRlL2xpbnV4L2xlZHMuaAppbmRleCBhNTE1ZjA3NWMyOWExLi45M2IzZmQ3ZTU2MzY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xlZHMuaApAQCAtMTA5LDYgJiM0MzsxMDksNyBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHsKICNkZWZpbmUgTEVEX0lOSVRfREVGQVVMVF9UUklHR0VSIEJJVCgyMykKICNkZWZpbmUgTEVEX1JFSkVDVF9OQU1FX0NPTkZMSUNUIEJJVCgyNCkKICNkZWZpbmUgTEVEX01VTFRJX0NPTE9SCQlCSVQoMjUpCiYjNDM7I2RlZmluZSBMRURfVFJJR19IV19DSEFOR0VECUJJVCgyNikKIAogCS8qIHNldF9icmlnaHRuZXNzX3dvcmsgLyBibGlua190aW1lciBmbGFncywgYXRvbWljLCBwcml2YXRlLiAqLwogCXVuc2lnbmVkIGxvbmcJCXdvcmtfZmxhZ3M7CkBAIC0yMzksNiAmIzQzOzI0MCwxMSBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHsKIAlzdHJ1Y3Qga2VybmZzX25vZGUJKmJyaWdodG5lc3NfaHdfY2hhbmdlZF9rbjsKICNlbmRpZgogCiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQKJiM0MzsJYm9vbAkJCXRyaWdnZXJzX2h3X2NoYW5nZWQ7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAl0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcms7CiYjNDM7I2VuZGlmCiYjNDM7CiAJLyogRW5zdXJlcyBjb25zaXN0ZW50IGFjY2VzcyB0byB0aGUgTEVEIGNsYXNzIGRldmljZSAqLwogCXN0cnVjdCBtdXRleAkJbGVkX2FjY2VzczsKIH07CkBAIC00ODUsNiAmIzQzOzQ5MSw3IEBAIHN0cnVjdCBsZWRfdHJpZ2dlciB7CiAJY29uc3QgY2hhcgkgKm5hbWU7CiAJaW50CQkoKmFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiAJdm9pZAkJKCpkZWFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiYjNDM7CWJvb2wJCSgqb2ZmbG9hZGVkKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiAKIAkvKiBCcmlnaHRuZXNzIHNldCBieSBsZWRfdHJpZ2dlcl9ldmVudCAqLwogCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzczsKQEAgLTUzMyw2ICYjNDM7NTQwLDkgQEAgdm9pZCBsZWRfdHJpZ2dlcl9ibGlua19vbmVzaG90KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlciwKIHZvaWQgbGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwogaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTsKIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0MzsKJiM0Mztib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJCXZvaWQgKnRyaWdnZXJfZGF0YSkKQEAgLTU4NCw2ICYjNDM7NTk0LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIGxlZF9zZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fQogc3RhdGljIGlubGluZSB2b2lkICpsZWRfZ2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIHsKQEAgLTU5OCw2ICYjNDM7NjE1LDEzIEBAIGxlZF90cmlnZ2VyX2dldF9icmlnaHRuZXNzKGNvbnN0IHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcikKIAogI2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTICovCiAKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKJiM0MzsJCQkJCQkJIGJvb2wgYWN0aXZhdGUpIHt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKiBUcmlnZ2VyIHNwZWNpZmljIGVudW0gKi8KIGVudW0gbGVkX3RyaWdnZXJfbmV0ZGV2X21vZGVzIHsKIAlUUklHR0VSX05FVERFVl9MSU5LID0gMCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5OTgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMRUQgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgYml0IG9mIHRoZSBMRUQgc3Vic3lzdGVtLCBzbyB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2YgZmlsZXM6IGRvY3VtZW50YXRpb24sIHRoZSBjb3JlIExFRCBjbGFzcyBkcml2ZXIsIHRyaWdnZXIgaW1wbGVtZW50YXRpb25zLCBhbmQgZXZlbiBzb21lIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlcnMgKENyb3MgRUMsIFR1cnJpcyBPbW5pYSwgYW5kIExlbm92byBsYXB0b3BzKS4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgbGlrZWx5IGFkZGluZyBzaWduaWZpY2FudCBuZXcgZnVuY3Rpb25hbGl0eSBvciBtb2RpZnlpbmcgZXhpc3RpbmcgYmVoYXZpb3IgaW4gYSBmYWlybHkgcGVydmFzaXZlIHdheS4KCkZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgZmlsZXMgdGhhdCBhcmUgdG91Y2hlZC4gSXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIGFkZGluZyBhIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBzeXNmcyBhdHRyaWJ1dGUuIFRoYXQgYWxvbmUsIGFmZmVjdGluZyB0aGUgc3lzZnMgaW50ZXJmYWNlLCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIEFueXRpbWUgeW91IGFsdGVyIHRoZSBzeXNmcyBpbnRlcmZhY2UsIHlvdSYjMzk7cmUgb3BlbmluZyB0aGUgZG9vciB0byBwb3RlbnRpYWwgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMgYW5kLCBieSBleHRlbnNpb24sIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIENoYW5nZXMgdG8gYGJyaWdodG5lc3Nfc2hvd2AgYW5kIGBicmlnaHRuZXNzX3N0b3JlYCBpbiBgbGVkLWNsYXNzLmNgIGFyZSBhbHNvIHByZXR0eSBzaWduaWZpY2FudCwgYWZmZWN0aW5nIGhvdyBicmlnaHRuZXNzIGNvbnRyb2wgd29ya3MgYWNyb3NzIGFsbCBMRURzLgoKQmV5b25kIHRoYXQsIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLCBhbmQgb3RoZXIgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIHRoZSBgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgY29uZmlnLCBoaW50cyBhdCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucy4gVGhlIG1lbnRpb24gb2YgYGh3X3RyaWdnZXJlZGAgaW1wbGllcyBzb21lIGxvZ2ljIGNoYW5nZSB3aXRoaW4gdGhlIGV4aXN0aW5nIHRyaWdnZXIgbWFuYWdlbWVudC4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgZmVhdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgdHJpZ2dlciBtZWNoYW5pc21zIGFuZCBob3cgdGhlIG5ldyBzeXNmcyBhdHRyaWJ1dGUgY29udHJvbHMgdGhpcyBpbnRlcmFjdGlvbi4KClRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGltcGFjdHMgZHJpdmVycyBsaWtlIHRoZSBuZXRkZXYgdHJpZ2dlciwgYW5kIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlcnMsIHN1Z2dlc3RzIGEgd2lkZXIgcmVhY2guIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgYSBuZXcgdHJpZ2dlciB0eXBlOyBpdCYjMzk7cyBhYm91dCBwb3RlbnRpYWxseSBpbnRlZ3JhdGluZyBoYXJkd2FyZSBjb250cm9sIGludG8gZXhpc3RpbmcgTEVEIHN1YnN5c3RlbXMuCgpOb3csIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByZWFjaCBvZiB0aGVzZSBjaGFuZ2VzLiBTaW5jZSB0aGlzIGlzIHRoZSBMRUQgc3Vic3lzdGVtLCB3aGljaCBpcyBmdW5kYW1lbnRhbCwgSSYjMzk7bSBhc3N1bWluZyB0aGF0IGl0IGlzIHJlYXNvbmFibHkgcmVhY2hhYmxlIGluIGEgdmFyaWV0eSBvZiBlbnZpcm9ubWVudHMsIGluY2x1ZGluZyBRRU1VIGFuZCB2aXJ0dWFsaXplZCBzY2VuYXJpb3MuIEFueSBMRUQgZGV2aWNlLCBlbXVsYXRlZCBvciByZWFsLCBjYW4gaW50ZXJhY3Qgd2l0aCB0aGlzLiBUaGUgZmFjdCB0aGF0IGFueSBlbXVsYXRlZCBvciByZWFsIHBsYXRmb3JtIGRldmljZXMgY2FuIGV4cG9zZSB0aGVzZSBhdHRyaWJ1dGVzIGluIHN5c2ZzIGFuZCB0cmlnZ2VyIHN5c2ZzIGludGVyYWN0aW9ucyBhZGRzIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMuCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHVzYWdlIG9mIHRoZXNlIHN5bWJvbHMgd2l0aCB0b29scyBsaWtlIEdyZXAuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0IGNvZGUgcGF0aHMgd2lsbCBiZSBoaXQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgd29ydGggZnV6emluZywgYW5kLCBpZiBzbywgd2hhdCB0aGUgYmVzdCBhcHByb2FjaCB3b3VsZCBiZS4gVGhpcyBsb29rcyBsaWtlIGl0IGhhcyBmdXp6aW5nIHBvdGVudGlhbCwgc2luY2Ugd2UgaGF2ZSB1c2VyIHNwYWNlIGludGVyYWN0aW9uIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGZyb20gaHcgY29udHJvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTEVEU19UUklHR0VSU19IV19DSEFOR0VEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTA9aWYgTEVEU19UUklHR0VSU1xuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTI6Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7TEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgZm9yIExFRCBUcmlnZ2VycyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTEVEIHRyaWdnZXJzIGFyZSBjb25maWd1cmVkLCBzbyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGBkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGxpbmVzIDEgdGhyb3VnaCAzMCwgYXMgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtYWluIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIHRyaWdnZXIgY29uZmlndXJhdGlvbiB0aGVyZSDigJMgbGlrZWx5IHRoZSBtYWluIG1lbnUgZW50cnkgYW5kIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGtlcm5lbCBmZWF0dXJlcy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSBsaW5lcyB3aWxsIGRlZmluZSB0aGUgZGVmYXVsdCBiZWhhdmlvciwgd2hldGhlciBjZXJ0YWluIHRyaWdnZXJzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCB3aGljaCBwbGF0Zm9ybSBjb25maWd1cmF0aW9ucyB0aGV5IHJlbHkgdXBvbi4gR2V0dGluZyB0aGUgb3ZlcnZpZXcgb2YgdGhpcyBwYXJ0IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgYW5kIGhvdyB0aGlzIHNlY3Rpb24gdGllcyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBMRURTX1RSSUdHRVJTXG4gICAzOlx0XHRib29sIFwmIzM0O0xFRCBUcmlnZ2VyIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTEVEU19DTEFTU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRyaWdnZXIgc3VwcG9ydCBmb3IgdGhlIGxlZHMgY2xhc3MuXG4gICA3Olx0XHQgIFRoZXNlIHRyaWdnZXJzIGFsbG93IGtlcm5lbCBldmVudHMgdG8gZHJpdmUgdGhlIExFRHMgYW5kIGNhblxuICAgODpcdFx0ICBiZSBjb25maWd1cmVkIHZpYSBzeXNmcy4gSWYgdW5zdXJlLCBzYXkgWS5cbiAgIDk6XHRcbiAgMTA6XHRpZiBMRURTX1RSSUdHRVJTXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtMRUQgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDE0Olx0XHRkZWZhdWx0IExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgaW5pdGlhdGVkIGhhcmR3YXJlIGNvbnRyb2xcbiAgMTc6XHRcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cbiAgMTg6XHRcdCAgXCYjMzQ7bm9uZVwmIzM0OyAoaS5lLiwgbm8gdHJpZ2dlcikgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgZm9yIGRldGFpbHMuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIExFRFNfVFJJR0dFUl9USU1FUlxuICAyMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TEVEIFRpbWVyIFRyaWdnZXJcJiMzNDtcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBhbGxvd3MgTEVEcyB0byBiZSBjb250cm9sbGVkIGJ5IGEgcHJvZ3JhbW1hYmxlIHRpbWVyXG4gIDI2Olx0XHQgIHZpYSBzeXNmcy4gU29tZSBMRUQgaGFyZHdhcmUgY2FuIGJlIHByb2dyYW1tZWQgdG8gc3RhcnRcbiAgMjc6XHRcdCAgYmxpbmtpbmcgdGhlIExFRCB3aXRob3V0IGFueSBmdXJ0aGVyIHNvZnR3YXJlIGludGVyYWN0aW9uLlxuICAyODpcdFx0ICBGb3IgbW9yZSBkZXRhaWxzIHJlYWQgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0LlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTIzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIExFRCBUcmlnZ2VyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgTEVEIHRyaWdnZXIgb3B0aW9ucyBhcmUgYmVpbmcgYnVpbHQgYW5kIGludGVncmF0ZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYGRyaXZlcnMvbGVkcy9LY29uZmlnYC4gVGhhdCYjMzk7bGwgYmUgdGhlIHBsYWNlIHRvIGZpbmQgdGhlIGFjdHVhbCBkZWZpbml0aW9ucyBvZiBgTEVEU19UUklHR0VSU2AgYW5kIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgLCBvciBhdCBsZWFzdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGVtLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhlIEtjb25maWcgZmlsZSB3aWxsIHNwZWNpZnkgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGEgZGVzY3JpcHRpb24uIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVyZSB0aGUgY29kZSBhbmQgZHJpdmVycyB1c2luZyB0aGVzZSBmbGFncyByZXNpZGUgaW4gdGhlIGNvZGViYXNlLgoKVGhlbiwgSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCBgZHJpdmVycy9sZWRzL01ha2VmaWxlYC4gVGhlIE1ha2VmaWxlIHNob3VsZCByZXZlYWwgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlc2Ugc3ltYm9scyBpbmZsdWVuY2UgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuIFRoaXMgd2lsbCBwcm9iYWJseSBpbmNsdWRlIGNvbmRpdGlvbmFscyBiYXNlZCBvbiB0aG9zZSBLY29uZmlnIHN5bWJvbHMsIGluZGljYXRpbmcgd2hpY2ggc291cmNlIGZpbGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBvcHRpb25zIGFyZSBlbmFibGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyBgTEVEU19UUklHR0VSU2AgYW5kIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIGFmZmVjdCB0aGUgZHJpdmVyIGJ1aWxkLiBUaGlzIGlzIGhvdyBJJiMzOTtsbCBkZXRlcm1pbmUgdGhlIGV4dGVudCBvZiB0aGVpciBpbXBhY3Qgb24gdGhlIGZpbmFsIGtlcm5lbCBpbWFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMRURTX1RSSUdHRVJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcy9LY29uZmlnPTIwMj1jb25maWcgTEVEU19DUk9TX0VDXG4tLVxuZHJpdmVycy9sZWRzL0tjb25maWctMjA1LVx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTX01VTFRJQ09MT1JcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjIwNjpcdHNlbGVjdCBMRURTX1RSSUdHRVJTXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMDctXHRkZWZhdWx0IE1GRF9DUk9TX0VDX0RFVlxuLS1cbmRyaXZlcnMvbGVkcy9LY29uZmlnPTIzMD1jb25maWcgTEVEU19UVVJSSVNfT01OSUFcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMzctXHRkZXBlbmRzIG9uIFRVUlJJU19PTU5JQV9NQ1VfR1BJT1xuZHJpdmVycy9sZWRzL0tjb25maWc6MjM4Olx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTIzOS1cdGhlbHBcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZz0zNDI9Y29uZmlnIExFRFNfQ09CQUxUX1JBUVxuLS1cbmRyaXZlcnMvbGVkcy9LY29uZmlnLTM0NC1cdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IFx1MDAyNlx1MDAyNiAoTUlQU19DT0JBTFQgfHwgQ09NUElMRV9URVNUKVxuZHJpdmVycy9sZWRzL0tjb25maWc6MzQ1Olx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTM0Ni1cdGhlbHBcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZz0zNTg9Y29uZmlnIExFRFNfU1VORklSRVxuLS1cbmRyaXZlcnMvbGVkcy9LY29uZmlnLTM2MS1cdGRlcGVuZHMgb24gU1BBUkM2NFxuZHJpdmVycy9sZWRzL0tjb25maWc6MzYyOlx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTM2My1cdGhlbHBcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZz05OTM9Y29uZmlnIExFRFNfU1QxMjAyXG4tLVxuZHJpdmVycy9sZWRzL0tjb25maWctOTk3LVx0ZGVwZW5kcyBvbiBPRlxuZHJpdmVycy9sZWRzL0tjb25maWc6OTk4Olx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTk5OS1cdHNlbGVjdCBMRURTX1RSSUdHRVJfUEFUVEVSTlxuLS1cbmRyaXZlcnMvbGVkcy9NYWtlZmlsZT03PW9iai0kKENPTkZJR19MRURTX0NMQVNTX01VTFRJQ09MT1IpXHQmIzQzOz0gbGVkLWNsYXNzLW11bHRpY29sb3Iub1xuZHJpdmVycy9sZWRzL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX0xFRFNfVFJJR0dFUlMpXHRcdCYjNDM7PSBsZWQtdHJpZ2dlcnMub1xuZHJpdmVycy9sZWRzL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX0xFRFNfS1VOSVRfVEVTVClcdFx0JiM0Mzs9IGxlZC10ZXN0Lm9cbi0tXG5kcml2ZXJzL2xlZHMvTWFrZWZpbGU9MTIwPW9iai0kKENPTkZJR19MRURTX0NMQVNTX01VTFRJQ09MT1IpXHQmIzQzOz0gcmdiL1xuLS1cbmRyaXZlcnMvbGVkcy9NYWtlZmlsZS0xMjItIyBMRUQgVHJpZ2dlcnNcbmRyaXZlcnMvbGVkcy9NYWtlZmlsZToxMjM6b2JqLSQoQ09ORklHX0xFRFNfVFJJR0dFUlMpXHRcdCYjNDM7PSB0cmlnZ2VyL1xuZHJpdmVycy9sZWRzL01ha2VmaWxlLTEyNC1cbi0tXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9OTE9c3RhdGljIERFVklDRV9BVFRSX1JPKG1heF9icmlnaHRuZXNzKTtcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy05Mi1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo5MzojaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy05NC1zdGF0aWMgY29uc3QgQklOX0FUVFIodHJpZ2dlciwgMDY0NCwgbGVkX3RyaWdnZXJfcmVhZCwgbGVkX3RyaWdnZXJfd3JpdGUsIDApO1xuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmxlZF9ncm91cHNbXSA9IHtcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy0xMzctXHRcdTAwMjZsZWRfZ3JvdXAsXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM6MTM4OiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTEzOS1cdFx1MDAyNmxlZF90cmlnZ2VyX2dyb3VwLFxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYz01MTc9aW50IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoc3RydWN0IGRldmljZSAqcGFyZW50LFxuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy01ODktXHRsZWRfY2Rldi1cdTAwM2V3b3JrX2ZsYWdzID0gMDtcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo1OTA6I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNTkxLVx0aW5pdF9yd3NlbShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy02MDktXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM6NjEwOiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTYxMS1cdGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KGxlZF9jZGV2KTtcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9NjMyPXZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4tLVxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTYzOS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo2NDA6I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNjQxLVx0ZG93bl93cml0ZShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuLS1cbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz00OTE9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNDkyLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jOjQ5MzojaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQ5NC1cbi0tXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM9NTcxPUVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZCk7XG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNTcyLVxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jOjU3MzojZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTU3NC1cbi0tXG5kcml2ZXJzL2xlZHMvbGVkcy5oPTM0PWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGxlZHNfbGlzdDtcbmRyaXZlcnMvbGVkcy9sZWRzLmgtMzUtXG5kcml2ZXJzL2xlZHMvbGVkcy5oOjM2OiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG5kcml2ZXJzL2xlZHMvbGVkcy5oLTM3LXZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbmRyaXZlcnMvbGVkcy9sZWRzLmg9Mzg9dm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuZHJpdmVycy9sZWRzL2xlZHMuaDozOTojZWxzZSAvKiAhQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuZHJpdmVycy9sZWRzL2xlZHMuaC00MC1zdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH1cbmRyaXZlcnMvbGVkcy9sZWRzLmg9NDE9c3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikgeyB9XG5kcml2ZXJzL2xlZHMvbGVkcy5oOjQyOiNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXG5kcml2ZXJzL2xlZHMvbGVkcy5oLTQzLVxuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MjptZW51Y29uZmlnIExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TEVEIFRyaWdnZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctOS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTA6aWYgTEVEU19UUklHR0VSU1xuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTI6Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7TEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTA5PWNvbW1lbnQgXCYjMzQ7aXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KVwmIzM0O1xuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZzoxMTA6XHRkZXBlbmRzIG9uIExFRFNfVFJJR0dFUlNcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTExLVxuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTU4PWNvbmZpZyBMRURTX1RSSUdHRVJfSU5QVVRfRVZFTlRTXG4tLVxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xNzMtXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjE3NDplbmRpZiAjIExFRFNfVFJJR0dFUlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ0OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTEVEIERyaXZlciBJbnRlcmFjdGlvbnMgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBMRUQgZHJpdmVyIHNpdHVhdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNgIGFuZCBgZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4cG9zZWQgZnVuY3Rpb25zIGFuZCBpbnRlcmZhY2VzIGludm9sdmVkLCByaWdodD8gR290dGEgc2VlIHdoYXQgdGhlIGxhbmRzY2FwZSBsb29rcyBsaWtlLiBUaGVuLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGJlZW4gYWRkZWQgaW4gdGhpcyBwYXRjaC4KCkkmIzM5O3ZlIGdvdCBhIGxpc3QgZnJvbSBgbGVkLXRyaWdnZXJzLmNgOiBgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGBsZWRfdHJpZ2dlcl9zZXRgLCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLCBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCwgYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgLCBgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkYCwgYW5kIGBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWRgLiBUaGVzZSBhcmUgYWxsIGBFWFBPUlRfU1lNQk9MX0dQTGAsIHNvIGRlZmluaXRlbHkgd29ydGggbm90aW5nLiBGcm9tIGBsZWQtY2xhc3MuY2AsIEkgc2VlIGBicmlnaHRuZXNzX3Nob3dgLCBgYnJpZ2h0bmVzc19zdG9yZWAgYW5kIGEgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZS4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgaWRlYXBhZC1sYXB0b3AuY2AuIEl0JiMzOTtzIGdvdCBzb21lIGZ1bmN0aW9ucyBsaWtlIGBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldGAsIGBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX3NldGAsIGBpZGVhcGFkX2tiZF9ibF9ub3RpZnlgLCBgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlYCBhbmQgYGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWRgLiBJJiMzOTttIGN1cmlvdXMgd2hhdCBraW5kIG9mIGludGVyYWN0aW9ucyB0aGlzIGhhcyB3aXRoIHRoZSBMRUQgY2xhc3MuIEFsc28sIGxldCYjMzk7cyBub3QgZm9yZ2V0IHRvIGNoZWNrIGBuZXRkZXZfdHJpZ19vZmZsb2FkZWRgIGluIGBsZWR0cmlnLW5ldGRldi5jYCAuCgpUaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiBlZmZlY3RpdmVseSBmdXp6LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHN5emthbGxlciBpcyBhIGdvb2QgY2FuZGlkYXRlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm06IGNhbiBpdCBhY2Nlc3MgYW5kIG1hbmlwdWxhdGUgdGhlIHJlbGV2YW50IExFRCBjbGFzcyBhbmQgdHJpZ2dlciBpbnRlcmZhY2VzPyBJIG5lZWQgdG8ga25vdyBpZiBpdCBjYW4gcmVhZCBhbmQgd3JpdGUgdG8gdGhlIGAvc3lzL2NsYXNzL2xlZHMvLi4uYCBzeXNmcyBmaWxlcy4KCklmIHRoYXQgY2hlY2tzIG91dCwgSSBzaG91bGQgc2VlIGlmIHRoZXJlIGFyZSBzdGFuZGFyZCBvciB2aXJ0dWFsIExFRCBkZXZpY2VzL3RyaWdnZXJzLCBsaWtlIGBuZXRkZXZgIChgTkVUREVWX0xFRFNgIC8gYExFRFNfVFJJR0dFUl9ORVRERVZgKS4gRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gY2hlY2sgYXJvdW5kIGBMRURTX0NMQVNTYCwgYExFRFNfVFJJR0dFUlNgLCBgTEVEU19UUklHR0VSU19IV19DSEFOR0VEYCwgYExFRFNfVFJJR0dFUl9ORVRERVZgLCBhbmQgd2hhdGV2ZXIgZWxzZSBpcyByZWxldmFudC4gVGhpcyBzaG91bGQgcGFpbnQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTEVEU19DTEFTUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvS2NvbmZpZz0yMT1pZiBORVdfTEVEU1xuZHJpdmVycy9sZWRzL0tjb25maWctMjItXG5kcml2ZXJzL2xlZHMvS2NvbmZpZzoyMzpjb25maWcgTEVEU19DTEFTU1xuZHJpdmVycy9sZWRzL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtMRUQgQ2xhc3MgU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbGVkcy9LY29uZmlnLTI4LVxuZHJpdmVycy9sZWRzL0tjb25maWc6Mjk6Y29uZmlnIExFRFNfQ0xBU1NfRkxBU0hcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7TEVEIEZsYXNoIENsYXNzIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0zOC1cbmRyaXZlcnMvbGVkcy9LY29uZmlnOjM5OmNvbmZpZyBMRURTX0NMQVNTX01VTFRJQ09MT1JcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTQwLVx0dHJpc3RhdGUgXCYjMzQ7TEVEIE11bHRpY29sb3IgQ2xhc3MgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTczMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6CgoqKktjb25maWcgRGl2ZTogTEVEU19UUklHR0VSX05FVERFVioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSB6ZXJvIGluIG9uIGBMRURTX1RSSUdHRVJfTkVUREVWYC4gSSYjMzk7bSBndWVzc2luZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgSSBuZWVkIHRvIGtub3cgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgYW5kIHdoYXQsIGlmIGFueSwgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHBvc3NpYmxlIGludGVyYWN0aW9ucyB0aGlzIHRyaWdnZXIgbWlnaHQgaGF2ZSB3aXRoIHRoZSBuZXR3b3JrIGRldmljZSBzdWJzeXN0ZW0uIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBpbnRlcmFjdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMgZWRnZSBjYXNlcyB0aGUgY3VycmVudCBjb2RlIGhhbmRsZXMsIG9yIGRvZXNuJiMzOTt0IGhhbmRsZSwgdGhhdCBuZWVkIHRvIGJlIHJldmlzaXRlZD8gVGltZSB0byBkaWcgaW50byBLY29uZmlnIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMRURTX1RSSUdHRVJfTkVUREVWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc9MTI2PWNvbmZpZyBMRURTX1RSSUdHRVJfUEFOSUNcbi0tXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzNC1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTM1OmNvbmZpZyBMRURTX1RSSUdHRVJfTkVUREVWXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzNi1cdHRyaXN0YXRlIFwmIzM0O0xFRCBOZXRkZXYgVHJpZ2dlclwmIzM0O1xuLS1cbmRyaXZlcnMvbGVkcy90cmlnZ2VyL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19MRURTX1RSSUdHRVJfUEFOSUMpXHQmIzQzOz0gbGVkdHJpZy1wYW5pYy5vXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfTEVEU19UUklHR0VSX05FVERFVilcdCYjNDM7PSBsZWR0cmlnLW5ldGRldi5vXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfTEVEU19UUklHR0VSX1BBVFRFUk4pXHQmIzQzOz0gbGVkdHJpZy1wYXR0ZXJuLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBMRUQgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgTkVXX0xFRFNgIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBgZHJpdmVycy9sZWRzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBzZXR0aW5ncyBpdCByZWxpZXMgb24uIEkgYWx3YXlzIHN0YXJ0IHdpdGggZGVwZW5kZW5jaWVzOyBpdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBvZiB1bmRlcnN0YW5kaW5nIGhvdyBhbnl0aGluZyB3aWxsIGZpdCBpbnRvIHRoZSB3aG9sZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIGVuc3VyZSBhIHNtb290aCBpbnRlZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBMRURTX0dQSU9fUkVHSVNURVJcbiAgIDM6XHRcdGJvb2xcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBvcHRpb24gcHJvdmlkZXMgdGhlIGZ1bmN0aW9uIGdwaW9fbGVkX3JlZ2lzdGVyX2RldmljZS5cbiAgIDY6XHRcdCAgQXMgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IGFyY2ggY29kZSBpdCBtdXN0IG5vdCBiZSBjb21waWxlZCBhcyBhXG4gICA3Olx0XHQgIG1vZHVsZS5cbiAgIDg6XHRcbiAgIDk6XHQjIFRoaXMgbGlicmFyeSBkb2VzIG5vdCBkZXBlbmQgb24gTkVXX0xFRFMgYW5kIG11c3QgYmUgaW5kZXBlbmRlbnQgc28gaXQgY2FuIGJlXG4gIDEwOlx0IyBzZWxlY3RlZCBmcm9tIG90aGVyIHN1YnN5c3RlbXMgKHNwZWNpZmljYWxseSBiYWNrbGlnaHQpLlxuICAxMTpcdGNvbmZpZyBMRURTX0VYUFJFU1NXSVJFXG4gIDEyOlx0XHRib29sXG4gIDEzOlx0XHRkZXBlbmRzIG9uIEdQSU9MSUJcbiAgMTQ6XHRcbiAgMTU6XHRtZW51Y29uZmlnIE5FV19MRURTXG4gIDE2Olx0XHRib29sIFwmIzM0O0xFRCBTdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFNheSBZIHRvIGVuYWJsZSBMaW51eCBMRUQgc3VwcG9ydC4gIFRoaXMgYWxsb3dzIGNvbnRyb2wgb2Ygc3VwcG9ydGVkXG4gIDE5Olx0XHQgIExFRHMgZnJvbSBib3RoIHVzZXJzcGFjZSBhbmQgb3B0aW9uYWxseSwgYnkga2VybmVsIGV2ZW50cyAodHJpZ2dlcnMpLlxuICAyMDpcdFxuICAyMTpcdGlmIE5FV19MRURTXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIExFRFNfQ0xBU1NcbiAgMjQ6XHRcdHRyaXN0YXRlIFwmIzM0O0xFRCBDbGFzcyBTdXBwb3J0XCYjMzQ7XG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIExFRCBzeXNmcyBjbGFzcyBpbiAvc3lzL2NsYXNzL2xlZHMuICBZb3UmIzM5O2xsXG4gIDI3Olx0XHQgIG5lZWQgdGhpcyB0byBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCBMRURzLiAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgTEVEU19DTEFTU19GTEFTSFxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TEVEIEZsYXNoIENsYXNzIFN1cHBvcnRcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gTEVEU19DTEFTU1xuICAzMjpcdFx0aGVscFxuICAzMzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmbGFzaCBMRUQgc3lzZnMgY2xhc3MgaW4gL3N5cy9jbGFzcy9sZWRzLlxuICAzNDpcdFx0ICBJdCB3cmFwcyBMRUQgQ2xhc3MgYW5kIGFkZHMgZmxhc2ggTEVEcyBzcGVjaWZpYyBzeXNmcyBhdHRyaWJ1dGVzXG4gIDM1Olx0XHQgIGFuZCBrZXJuZWwgaW50ZXJuYWwgQVBJIHRvIGl0LiBZb3UmIzM5O2xsIG5lZWQgdGhpcyB0byBwcm92aWRlIHN1cHBvcnRcbiAgMzY6XHRcdCAgZm9yIHRoZSBmbGFzaCByZWxhdGVkIGZlYXR1cmVzIG9mIGEgTEVEIGRldmljZS4gSXQgY2FuIGJlIGJ1aWx0XG4gIDM3Olx0XHQgIGFzIGEgbW9kdWxlLlxuICAzODpcdFxuICAzOTpcdGNvbmZpZyBMRURTX0NMQVNTX01VTFRJQ09MT1JcbiAgNDA6XHRcdHRyaXN0YXRlIFwmIzM0O0xFRCBNdWx0aWNvbG9yIENsYXNzIFN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4NzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIGBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRGAqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEYC4gVGhhdCBmbGFnIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBzaWduaWZpY2FudCBoYXMgY2hhbmdlZCBpbiB0aGUgaGFyZHdhcmUgYnJpZ2h0bmVzcyBsZXZlbC4gVGhpcyBtZWFucyBhIGRpcmVjdCwgcGh5c2ljYWwgYWx0ZXJhdGlvbiBvY2N1cnJlZCwgYnlwYXNzaW5nIHRoZSB0eXBpY2FsIHNvZnR3YXJlIGNvbnRyb2wuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgYmVjYXVzZSBhIGhhcmR3YXJlIGNoYW5nZSBkaWN0YXRlcyBob3cgdGhlIHNvZnR3YXJlIHJlc3BvbmRzIGFuZCB1cGRhdGVzLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGZsYWcgaXMgc2V0LCB3aGF0IHRyaWdnZXJzIGl0LCBhbmQgdGhlIGltbWVkaWF0ZSBjb25zZXF1ZW5jZXMgd2hlbiBpdCYjMzk7cyBhc3NlcnRlZC4gRG9lcyB0aGlzIGxlYWQgdG8gYW4gaW50ZXJydXB0IGhhbmRsZXIsIGEgcG9sbGluZyBsb29wLCBvciBwZXJoYXBzIGEgZGlyZWN0IHdyaXRlIHRvIGEgcmVnaXN0ZXI/IEFuZCB3aGF0IHNwZWNpZmljIHJlZ2lzdGVycyBhcmUgaW52b2x2ZWQ/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGFuYWxvZyBhZGp1c3RtZW50IG9yIGEgbW9yZSBjb21wbGV4IFBXTSBpbXBsZW1lbnRhdGlvbj8gVWx0aW1hdGVseSwgSSBtdXN0IHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gcmVjb25jaWxlcyB0aGUgbmV3IGhhcmR3YXJlIHZhbHVlIHdpdGggdGhlIGludGVuZGVkIHNvZnR3YXJlIHN0YXRlLiBBcmUgdGhlcmUgYW55IHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdG8gd29ycnkgYWJvdXQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSBjb2RlIHRoYXQgcmVhZHMgYW5kIHJlYWN0cyB0byB0aGlzIGZsYWcgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50IGNvbmZsaWN0aW5nIGJlaGF2aW9ycy4gTGV0JiMzOTtzIHNlZS4uLndoZXJlJiMzOTtzIHRoZSBkZWZpbml0aW9uLCBhbmQgbGV0JiMzOTtzIHRyYWNlIGl0IHRocm91Z2ggdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TEVEU19CUklHSFRORVNTX0hXX0NIQU5HRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2xlZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9sZWRzL0tjb25maWc9Mzk9Y29uZmlnIExFRFNfQ0xBU1NfTVVMVElDT0xPUlxuLS1cbmRyaXZlcnMvbGVkcy9LY29uZmlnLTQ4LVxuZHJpdmVycy9sZWRzL0tjb25maWc6NDk6Y29uZmlnIExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy01MC1cdGJvb2wgXCYjMzQ7TEVEIENsYXNzIGJyaWdodG5lc3NfaHdfY2hhbmdlZCBhdHRyaWJ1dGUgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmxlZF9ncm91cHNbXSA9IHtcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtMTQzLVxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jOjE0NDojaWZkZWYgQ09ORklHX0xFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtMTQ1LXN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3NfaHdfY2hhbmdlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9NTE3PWludCBsZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbi0tXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNTkyLSNlbmRpZlxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jOjU5MzojaWZkZWYgQ09ORklHX0xFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNTk0LVx0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19od19jaGFuZ2VkID0gLTE7XG4tLVxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZz0xMj1jb25maWcgTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtMRUQgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjE0Olx0ZGVmYXVsdCBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xNS1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1ODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipLY29uZmlnIEluc3BlY3Rpb24gZm9yIElERUFQQURfTEFQVE9QKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggdGhhdCBgSURFQVBBRF9MQVBUT1BgIHN5bWJvbCwgc3BlY2lmaWNhbGx5IHdoZXJlIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdXNlZC4gTXkgaW5zdGluY3QgaXMgdGhhdCBpdCB3aWxsIGJlIGluIHRoZSBgZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZ28tdG8gc3BvdCBmb3IgTGVub3ZvLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgYW5kIGZlYXR1cmVzLCBhbmQgdGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVjbGFyZWQuIEkga25vdyB0aGVzZSBwYXRocyBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIGJ1dCBJIHN0aWxsIGRvIGEgcXVpY2sgbWVudGFsIGNoZWNrIOKAkyB5ZXAsIHRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbi4gTGV0JiMzOTtzIGdldCB0byBpdC4gVGltZSB0byBvcGVuIHRoYXQgYEtjb25maWdgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTGVub3ZvIFg4NiBQbGF0Zm9ybSBTcGVjaWZpYyBEcml2ZXJzXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBJREVBUEFEX0xBUFRPUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7TGVub3ZvIElkZWFQYWQgTGFwdG9wIEV4dHJhc1wmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBBQ1BJXG4gICA5Olx0XHRkZXBlbmRzIG9uIEFDUElfQkFUVEVSWVxuICAxMDpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgXHUwMDI2XHUwMDI2IElOUFVUXG4gIDExOlx0XHRkZXBlbmRzIG9uIFNFUklPX0k4MDQyXG4gIDEyOlx0XHRkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0VcbiAgMTM6XHRcdGRlcGVuZHMgb24gQUNQSV9WSURFTyB8fCBBQ1BJX1ZJREVPID0gblxuICAxNDpcdFx0ZGVwZW5kcyBvbiBBQ1BJX1dNSSB8fCBBQ1BJX1dNSSA9IG5cbiAgMTU6XHRcdHNlbGVjdCBBQ1BJX1BMQVRGT1JNX1BST0ZJTEVcbiAgMTY6XHRcdHNlbGVjdCBJTlBVVF9TUEFSU0VLTUFQXG4gIDE3Olx0XHRzZWxlY3QgTkVXX0xFRFNcbiAgMTg6XHRcdHNlbGVjdCBMRURTX0NMQVNTXG4gIDE5Olx0XHRzZWxlY3QgTEVEU19UUklHR0VSU1xuICAyMDpcdFx0aGVscFxuICAyMTpcdFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciBMZW5vdm8gSWRlYVBhZCBuZXRib29rcyBjb250YWlucyBkcml2ZXJzIGZvclxuICAyMjpcdFx0ICByZmtpbGwgc3dpdGNoLCBob3RrZXksIGZhbiBjb250cm9sIGFuZCBiYWNrbGlnaHQgY29udHJvbC5cbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTEVOT1ZPX1dNSV9IT1RLRVlfVVRJTElUSUVTXG4gIDI1Olx0XHR0cmlzdGF0ZSBcJiMzNDtMZW5vdm8gSG90a2V5IFV0aWxpdHkgV01JIGV4dHJhcyBkcml2ZXJcJiMzNDtcbiAgMjY6XHRcdGRlcGVuZHMgb24gQUNQSV9XTUlcbiAgMjc6XHRcdHNlbGVjdCBORVdfTEVEU1xuICAyODpcdFx0c2VsZWN0IExFRFNfQ0xBU1NcbiAgMjk6XHRcdGltcGx5IElERUFQQURfTEFQVE9QXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIFdNSSBzdXBwb3J0IGZvciBMZW5vdm8gY3VzdG9taXplZCBob3RrZXlzIGZ1bmN0aW9uLFxuICAzMjpcdFx0ICBzdWNoIGFzIExFRCBjb250cm9sIGZvciBhdWRpby9taWMgbXV0ZSBldmVudCBmb3IgSWRlYXBhZCwgWU9HQSwgWGlhb1hpbixcbiAgMzM6XHRcdCAgR2FtaW5nLCBUaGlua0Jvb2sgYW5kIHNvIG9uLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBMRU5PVk9fV01JX0NBTUVSQVxuICAzNjpcdFx0dHJpc3RhdGUgXCYjMzQ7TGVub3ZvIFdNSSBDYW1lcmEgQnV0dG9uIGRyaXZlclwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBBQ1BJX1dNSVxuICAzODpcdFx0ZGVwZW5kcyBvbiBJTlBVVFxuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciBMZW5vdm8gY2FtZXJhIGJ1dHRvbi4gVGhlIENhbWVyYVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM3OQoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiAxMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IExFRCBTdWJzeXN0ZW0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gd2hldGhlciB0aGlzIExFRCBzdWJzeXN0ZW0gcGF0Y2ggaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBleHRlbnNpdmUgbW9kaWZpY2F0aW9ucyB0byB0aGUgTEVEIGNvcmUsIGluY2x1ZGluZyB1cGRhdGVzIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UgKHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIGB0cmlnZ2VyX21heV9vZmZsb2FkYCksIGltcHJvdmVkIGxvY2tpbmcgaW4gYnJpZ2h0bmVzcyBoYW5kbGluZywgYW5kLCBjcml0aWNhbGx5LCBhIG5ldyBmcmFtZXdvcmsgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGApLiAgQSBuZXcgcHJpdmF0ZSB0cmlnZ2VyIGBpZGVhcGFkLWF1dG9gIGhhcyBhbHNvIGJlZW4gYWRkZWQgaW4gYGlkZWFwYWQtbGFwdG9wLmNgLCBhbmQgdGhlIG5ldGRldiB0cmlnZ2VyIGhhcyBiZWVuIG1vZGlmaWVkIHRvby4KClRoZSBjcml0aWNhbCB0aGluZyBpcyByZWFjaGFiaWxpdHksIGFuZCB5ZXMsIGl0IHNlZW1zIGhpZ2hseSByZWFjaGFibGUuIFRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIExFRHMgaXMgYSBzdGFuZGFyZCBhdmVudWUgZnJvbSB1c2Vyc3BhY2UuIEFueSBMRUQgZGV2aWNlIChrZXlib2FyZCwgbmV0d29yaywgdmlydHVhbCwgZXRjLikgZXhwb3NlcyB0aGUgcmVsZXZhbnQgYXR0cmlidXRlcyAoYHRyaWdnZXJgLCBgYnJpZ2h0bmVzc2AsIGB0cmlnZ2VyX21heV9vZmZsb2FkYCkuIEludGVyYWN0aW5nIHdpdGggdGhvc2Ugc3lzZnMgZmlsZXMgc2hvdWxkIGV4ZXJjaXNlIHRoZSBjb3JlIGxvZ2ljLCBoaXR0aW5nIGZ1bmN0aW9ucyBsaWtlIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgLCBgYnJpZ2h0bmVzc19zaG93YCwgYGJyaWdodG5lc3Nfc3RvcmVgLCBgbGVkX3RyaWdnZXJfc2V0YCwgZXRjLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgY29uc3RpdHV0ZSBvdXIgJiMzNDtGb2N1c1N5bWJvbHMmIzM0Oy4gQmFzZWQgb24gdGhlIGNvZGUsIHRoZXkgc2VlbSB0byBiZTogYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYGxlZF90cmlnZ2VyX3NldGAsIGFuZCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAuICBXZSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZXNlIGluIGBsZWQtdHJpZ2dlcnMuY2AgdG8gYmUgY2VydGFpbi4KCldlJiMzOTtsbCBuZWVkIHRvIG5vdGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7bGwgbmVlZCBgTkVXX0xFRFNgLCBgTEVEU19DTEFTU2AsIGBMRURTX1RSSUdHRVJTYCwgYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAsIGBMRURTX1RSSUdHRVJfTkVUREVWYCwgYExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEYCwgYW5kIGBJREVBUEFEX0xBUFRPUGAuICBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgbmFtZXMgYXJlIHByb3Blcmx5IHNwZWxsZWQuCgpGaW5hbGx5LCBhIHF1aWNrIHJldmlldyBvZiB0aGUgbW9kaWZpZWQgZmlsZXMgaXMgbmVjZXNzYXJ5OiBgZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jYCwgYGRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY2AsIGBkcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jYCwgYGRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jYCwgYGRyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY2AsIGBkcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY2AuCgpCYXNlZCBvbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGUgYW5zd2VyIGlzIFllcyEgIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGRyaXZlciBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRyaWdnZXIgbWFuYWdlbWVudCwgbG9ja2luZywgY29uY3VycmVuY3kgYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgd29ya3F1ZXVlcywgYW5kIHRoZSBuZXcgaGFyZHdhcmUtdHJpZ2dlcmVkIHRyYW5zaXRpb25zLiBUaGlzIGhhcyBhIGhpZ2ggcG90ZW50aWFsIGZvciBleHBsb2l0YWJsZSBidWdzLiAgVGhlIGNvZGUgaXMgcmVhY2hhYmxlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQuCgpTbywgSSB3aWxsIGNvbmZpcm06CgoqICAgKipGb2N1c1N5bWJvbHM6KiogYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYGxlZF90cmlnZ2VyX3NldGAsIGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYAoqICAgKipFbmFibGVDb25maWdzOioqIGBORVdfTEVEU2AsIGBMRURTX0NMQVNTYCwgYExFRFNfVFJJR0dFUlNgLCBgTEVEU19UUklHR0VSU19IV19DSEFOR0VEYCwgYExFRFNfVFJJR0dFUl9ORVRERVZgLCBgTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRURgLCBgSURFQVBBRF9MQVBUT1BgLgoKTm93LCB0aW1lIHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FV19MRURTJiMzNDssCiAgICAmIzM0O0xFRFNfQ0xBU1MmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSUyYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSX05FVERFViYjMzQ7LAogICAgJiMzNDtMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtJREVBUEFEX0xBUFRPUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3NldCYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBzeXNmcyBhdHRyaWJ1dGUgKHRyaWdnZXJfbWF5X29mZmxvYWQpIGZvciBxdWVyeWFibGUgaGFyZHdhcmUtb2ZmbG9hZGVkIExFRCB0cmlnZ2VycywgdXBkYXRlcyBjb3JlIGJyaWdodG5lc3MgZ2V0L3NldCBsb2NraW5nIGFuZCB0cmlnZ2VyIHJlbW92YWwgbG9naWMsIGFuZCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gTEVEIHRyaWdnZXIgZHJpdmVycy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIExFRCBjbGFzcy90cmlnZ2VyIHN5c2ZzIGludGVyZmFjZXMgYW5kIGNvcmUgdHJpZ2dlciBsaWZlY3ljbGUgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FV19MRURTJiMzNDssCiAgICAmIzM0O0xFRFNfQ0xBU1MmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSUyYjMzQ7LAogICAgJiMzNDtMRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQmIzM0OywKICAgICYjMzQ7TEVEU19UUklHR0VSX05FVERFViYjMzQ7LAogICAgJiMzNDtMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRCYjMzQ7LAogICAgJiMzNDtJREVBUEFEX0xBUFRPUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sJiMzNDssCiAgICAmIzM0O2xlZF90cmlnZ2VyX3NldCYjMzQ7LAogICAgJiMzNDtsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBzeXNmcyBhdHRyaWJ1dGUgKHRyaWdnZXJfbWF5X29mZmxvYWQpIGZvciBxdWVyeWFibGUgaGFyZHdhcmUtb2ZmbG9hZGVkIExFRCB0cmlnZ2VycywgdXBkYXRlcyBjb3JlIGJyaWdodG5lc3MgZ2V0L3NldCBsb2NraW5nIGFuZCB0cmlnZ2VyIHJlbW92YWwgbG9naWMsIGFuZCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gTEVEIHRyaWdnZXIgZHJpdmVycy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIExFRCBjbGFzcy90cmlnZ2VyIHN5c2ZzIGludGVyZmFjZXMgYW5kIGNvcmUgdHJpZ2dlciBsaWZlY3ljbGUgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLWNvbnRyb2xsZWQgTEVEIHRyaWdnZXIgb2ZmbG9hZCBpbmZyYXN0cnVjdHVyZSwgdGhlIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBzeXNmcyBhdHRyaWJ1dGUsIGhhcmR3YXJlIHRyaWdnZXIgdHJhbnNpdGlvbiBub3RpZmljYXRpb25zIHZpYSBhIHdvcmtxdWV1ZSwgYW5kIHVwZGF0ZXMgZHJpdmVycyBpbmNsdWRpbmcgaWRlYXBhZC1sYXB0b3AgYW5kIGxlZHMtY3Jvc19lYy5cblxuMS4gTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgYnVmZmVycyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMuIFVzZXJzcGFjZSBleHBvc3VyZSBpcyBsaW1pdGVkIHRvIHN0YW5kYXJkIHN5c2ZzX2VtaXQgc3RyaW5nIGZvcm1hdHRpbmcuXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3QgZmllbGRzIChlLmcuLCB0cmlnZ2Vyc19od19jaGFuZ2VkLCBsYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYnJhbmNoaW5nLlxuMy4gQ29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBoYW5kbGluZyAoc3VjaCBhcyB3b3JrcXVldWUgZmx1c2gvZGVzdHJ1Y3Rpb24gYW5kIG11dGV4L3J3c2VtIGxvY2tzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLlxuXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQwN2E1ZTNjOTIxMTRjNzU0NTMxNzJhOTQ1MmFiN2EyNWJjMzRiNTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDA3OjIyOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZAppbmRleCBkNGM5MThjYzExYTEyLi45NGMzMzFkOWM0MTA1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZApAQCAtNzgsNiAmIzQzOzc4LDMxIEBAIERlc2NyaXB0aW9uOgogCQkod2hpY2ggd291bGQgb2Z0ZW4gYmUgY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZQogCQloYXJkd2FyZSkuCiAKJiM0MztXaGF0OgkJL3N5cy9jbGFzcy9sZWRzLyZsdDtsZWQmZ3Q7L3RyaWdnZXJfbWF5X29mZmxvYWQKJiM0MztEYXRlOgkJU2VwdGVtYmVyIDIwMjYKJiM0MztLZXJuZWxWZXJzaW9uOgk3LjQKJiM0MztDb250YWN0OglsaW51eC1sZWRzQHZnZXIua2VybmVsLm9yZwomIzQzO0Rlc2NyaXB0aW9uOgomIzQzOwkJTmFtZXMgYW5kIHN0YXRlcyBvZiB0cmlnZ2VycyB0aGF0IG1heSBiZSBvZmZsb2FkZWQgdG8gaGFyZHdhcmUuCiYjNDM7CQlTdWNoIHRyaWdnZXJzIGFyZSBhbHNvIGNhbGxlZCAmIzM0O2hhcmR3YXJlIGNvbnRyb2wgdHJpZ2dlciYjMzQ7IGluIHNvbWUKJiM0MzsJCWNvbnRleHQuCiYjNDM7CiYjNDM7CQlPbmx5IGV4aXN0cyB3aGVuIHRoZSBMRUQgc3VwcG9ydHMgdHJpZ2dlciBvZmZsb2FkLgomIzQzOwomIzQzOwkJUmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyBhIGxpc3Qgb2YgdHJpZ2dlcnMgdGhhdCBhcmUgY2FwYWJsZSB0bwomIzQzOwkJYmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWUKJiM0MzsJCWluZGljYXRlIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCB0cmlnZ2VyOgomIzQzOwomIzQzOwkJLSBgZm9vX3RyaWdnZXJgOiB0aGUgdHJpZ2dlciBpcyBub3Qgc2VsZWN0ZWQuCiYjNDM7CQktIGAmbHQ7Zm9vX3RyaWdnZXImZ3Q7YDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQsIGJ1dCBmYWxscyBiYWNrIHRvCiYjNDM7CQkgIHNvZnR3YXJlIGJsaW5rIGZvciBzb21lIHJlYXNvbiAoZS5nLiwgaW5jb21wYXRpYmxlIHRyaWdnZXIKJiM0MzsJCSAgcGFyYW1ldGVycykKJiM0MzsJCS0gYFtmb29fdHJpZ2dlcl1gOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCBhbmQgb2ZmbG9hZGVkIHRvCiYjNDM7CQkgIGhhcmR3YXJlLgomIzQzOwomIzQzOwkJVGhlICYjMzQ7bmV0ZGV2JiMzNDsgdHJpZ2dlciBhbHNvIHByb3ZpZGVzIGEgY3VzdG9tIGF0dHJpYnV0ZSB0bwomIzQzOwkJaW5kaWNhdGUgaXRzIHN0YXRlLCBzZWUgYC9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy9vZmZsb2FkZWRgLgomIzQzOwogV2hhdDoJCS9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy9pbnZlcnRlZAogRGF0ZToJCUphbnVhcnkgMjAxMQogS2VybmVsVmVyc2lvbjoJMi42LjM4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2CmluZGV4IGVkNDZiMzdhYjhhMjguLmE1MTQ2ZWExZTNlNjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2CkBAIC03NSw2ICYjNDM7NzUsOSBAQCBEZXNjcmlwdGlvbjoKIAkJSWYgMSwgdGhlIExFRCBibGlua2luZyBpbiByZXF1ZXN0ZWQgbW9kZSBpcyBvZmZsb2FkZWQgdG8KIAkJaGFyZHdhcmUuCiAKJiM0MzsJCUxFRCB0cmlnZ2VyIGNvcmUgYWxzbyBwcm92aWRlcyBhIGdlbmVyaWMgYXR0cmlidXRlIGZvciB0aGlzCiYjNDM7CQlwdXJwb3NlLCBzZWUgYC9zeXMvY2xhc3MvbGVkcy8mbHQ7bGVkJmd0Oy90cmlnZ2VyX21heV9vZmZsb2FkYC4KJiM0MzsKIFdoYXQ6CQkvc3lzL2NsYXNzL2xlZHMvJmx0O2xlZCZndDsvbGlua18xMAogRGF0ZToJCUp1biAyMDIzCiBLZXJuZWxWZXJzaW9uOgk2LjUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdAppbmRleCAzOTEzOTY2Y2ZkYWMwLi5hZGJjNTdiOWY0OWMzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0CkBAIC0yNDIsNiAmIzQzOzI0Miw5IEBAIG9wcyBhbmQgbmVlZHMgdG8gZGVjbGFyZSBzcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzLgogCiBXaXRoIGh3IGNvbnRyb2wgd2UgcmVmZXIgdG8gdGhlIExFRCBkcml2ZW4gYnkgaGFyZHdhcmUuCiAKJiM0MztBIHN5c2ZzIGF0dHJpYnV0ZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgaXMgcHJvdmlkZWQgZm9yIHVzZXJzcGFjZSB0bwomIzQzO3F1ZXJ5IHN1cHBvcnRlZCB0cmlnZ2VycyBhbmQgdGhlaXIgc3RhdGVzLgomIzQzOwogTEVEIGRyaXZlciBtdXN0IGRlZmluZSB0aGUgZm9sbG93aW5nIHZhbHVlIHRvIHN1cHBvcnQgaHcgY29udHJvbDoKIAogICAgIC0gaHdfY29udHJvbF90cmlnZ2VyOgpAQCAtMjk4LDYgJiM0MzszMDEsMTUgQEAgTEVEIGRyaXZlciBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6CiAgICAgICAgICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGV2aWNlIG9yIE5VTEwgaWYgbm90aGluZwogICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBhdHRhY2hlZC4KIAomIzQzO0xFRCB0cmlnZ2VyIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gaW5kaWNhdGUgaHcgY29udHJvbDoKJiM0MzsgICAgLSBvZmZsb2FkZWQ6CiYjNDM7ICAgICAgICAgICAgICAgIHJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdHJpZ2dlciBpcyBjdXJyZW50bHkKJiM0MzsgICAgICAgICAgICAgICAgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLgomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBJZiBhIHRyaWdnZXIgZG9lc24mIzM5O3QgaW1wbGVtZW50IHRoaXMgY2FsbGJhY2ssIHRoZSBkZWZhdWx0CiYjNDM7ICAgICAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgdHJ1ZSBmb3IgcHJpdmF0ZSB0cmlnZ2VycyBhbmQgZmFsc2UgZm9yIGdlbmVyaWMKJiM0MzsgICAgICAgICAgICAgICAgb25lcy4KJiM0MzsKIExFRCBkcml2ZXIgY2FuIGFjdGl2YXRlIGFkZGl0aW9uYWwgbW9kZXMgYnkgZGVmYXVsdCB0byB3b3JrYXJvdW5kIHRoZQogaW1wb3NzaWJpbGl0eSBvZiBzdXBwb3J0aW5nIGVhY2ggZGlmZmVyZW50IG1vZGUgb24gdGhlIHN1cHBvcnRlZCB0cmlnZ2VyLgogRXhhbXBsZXMgYXJlIGhhcmRjb2RpbmcgdGhlIGJsaW5rIHNwZWVkIHRvIGEgc2V0IGludGVydmFsLCBlbmFibGUgc3BlY2lhbApAQCAtMzExLDkgJiM0MzszMjMsNjkgQEAgdGhlIGVuZCB1c2UgaHdfY29udHJvbF9zZXQgdG8gYWN0aXZhdGUgaHcgY29udHJvbC4KIEEgdHJpZ2dlciBjYW4gdXNlIGh3X2NvbnRyb2xfZ2V0IHRvIGNoZWNrIGlmIGEgTEVEIGlzIGFscmVhZHkgaW4gaHcgY29udHJvbAogYW5kIGluaXQgdGhlaXIgZmxhZ3MuCiAKJiM0MztBbHRlcm5hdGl2ZWx5LCBhIHByaXZhdGUgdHJpZ2dlciBjYW4gYmUgaW1wbGVtZW50ZWQgYWxvbmcgd2l0aCB0aGUgTEVEIGRyaXZlciBpZgomIzQzO3RoZSBMRUQmIzM5O3MgaGFyZHdhcmUgY29udHJvbCBkb2VzbiYjMzk7dCBmaXQgYW55IGdlbmVyaWMgdHJpZ2dlci4gVG8gYXNzb2NpYXRlIHRoZQomIzQzO3ByaXZhdGUgdHJpZ2dlciB3aXRoIHRoZSBMRUQgY2xhc3NkZXYsIHRoZWlyIGB0cmlnZ2VyX3R5cGVgIG11c3QgYmUgdGhlIHNhbWUuIFRvCiYjNDM7ZGVjbGFyZSB0aGF0IHRoZSBwcml2YXRlIHRyaWdnZXIgcHJvdmlkZXMgaGFyZHdhcmUgY29udHJvbCBmb3IgdGhlIGFzc29jaWF0ZWQKJiM0MztMRUQgY2xhc3NkZXYsIHNldCB0aGUgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgc3RyaW5nIHRvIHRoZSB0cmlnZ2VyJiMzOTtzIG5hbWUuIFNpbmNlCiYjNDM7Ym90aCB0aGUgTEVEIGNsYXNzZGV2IGFuZCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIGFyZSBpbiB0aGUgc2FtZSBMRUQgZHJpdmVyLCBpdCYjMzk7cwomIzQzO25vdCBuZWNlc3NhcnkgZm9yIHRoZW0gdG8gY29vcmRpbmF0ZSB2aWEgYGh3X2NvbnRyb2xfKmAgY2FsbGJhY2tzLgomIzQzOwogV2hlbiB0aGUgTEVEIGlzIGluIGh3IGNvbnRyb2wsIG5vIHNvZnR3YXJlIGJsaW5rIGlzIHBvc3NpYmxlIGFuZCBkb2luZyBzbwogd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIGh3IGNvbnRyb2wuCiAKJiM0MztIYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uCiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1NvbWUgaGFyZHdhcmUgY2FuIGF1dG9ub21vdXNseSBhY3RpdmF0ZS9kZWFjdGl2YXRlIGhhcmR3YXJlIGNvbnRyb2wuIEFmdGVyIHRoYXQsCiYjNDM7dGhlIExFRCBoYXJkd2FyZSBub3RpZmllcyB0aGUgTEVEIGRyaXZlci4KJiM0MzsKJiM0MztJZiB0aGUgZHJpdmVyIGNhbiBkZXRlY3Qgc3VjaCB0cmFuc2l0aW9ucyBhbmQgdGh1cyB3YW50cyB0byBub3RpZnkgdGhlIExFRCBjb3JlCiYjNDM7dG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgdGhlbiB0aGUgYExFRF9UUklHX0hXX0NIQU5HRURgIGZsYWcgbXVzdCBiZSBzZXQgaW4KJiM0MztmbGFncyBiZWZvcmUgcmVnaXN0ZXJpbmcuIFRvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIGFjY29yZGluZ2x5LCBjYWxsCiYjNDM7YGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIG9uIHRoZSBMRUQgY2xhc3NkZXYuCiYjNDM7CiYjNDM7VGhpcyBjYXBhYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIExFRCBkZXZpY2UmIzM5O3MgcHJpdmF0ZSB0cmlnZ2VyLiBUaGUgcHJpdmF0ZQomIzQzO3RyaWdnZXIgbXVzdCBoYXZlIGJlZW4gcHJvcGVybHkgcmVnaXN0ZXJlZCAoc2VlIGFib3ZlKSBhbmQgbmFtZWQgYWZ0ZXIKJiM0MztgaHdfY29udHJvbF90cmlnZ2VyYC4KJiM0MzsKJiM0MztPbmx5IHR3byB0cmFuc2l0aW9ucyBhcmUgZGVmaW5lZDoKJiM0MzsKJiM0MzstICYjMzQ7bm9uZSYjMzQ7ID0mZ3Q7IHByaXZhdGUgdHJpZ2dlcjoKJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2wKJiM0MzsgICAgICAgIGFuZCB3aGVuICYjMzQ7bm9uZSYjMzQ7IChpLmUuLCBubyB0cmlnZ2VyKSBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiB0aGUgcHJpdmF0ZQomIzQzOyAgICAgICAgdHJpZ2dlciBpcyBhbHJlYWR5IGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5CiYjNDM7ICAgICAgICBhIG5vLW9wLgomIzQzOwomIzQzOyAgICAgICAgVGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhcwomIzQzOyAgICAgICAgbm9ybWFsLgomIzQzOwomIzQzOyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGUKJiM0MzsgICAgICAgIGFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgY3VycmVudGx5IGluIGhhcmR3YXJlCiYjNDM7ICAgICAgICBjb250cm9sLgomIzQzOwomIzQzOyAgICAgICAgSWYgZXJyb3Igb2NjdXJzIGluIHRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlLCB0aGUgTEVEIFRyaWdnZXIgY29yZSByZXZlcnRzCiYjNDM7ICAgICAgICB0aGUgZWZmZWN0aXZlIHRyaWdnZXIgdG8gJiMzNDtub25lJiMzNDsuCiYjNDM7CiYjNDM7LSBwcml2YXRlIHRyaWdnZXIgPSZndDsgJiMzNDtub25lJiMzNDsKJiM0MzsgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbAomIzQzOyAgICAgICAgYW5kIHdoZW4gdGhlIHByaXZhdGUgdHJpZ2dlciBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiAmIzM0O25vbmUmIzM0OyAoaS5lLiwgbm8KJiM0MzsgICAgICAgIHRyaWdnZXIpIGlzIGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5IGEKJiM0MzsgICAgICAgIG5vLW9wLgomIzQzOwomIzQzOyAgICAgICAgVGhlIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHByaXZhdGUgdHJpZ2dlciB3aWxsIGJlIGV4ZWN1dGVkIGFzCiYjNDM7ICAgICAgICBub3JtYWwsIGV4Y2VwdCB0aGF0IHRoZSBjdXJyZW50IExFRCBicmlnaHRuZXNzIGlzIHJldGFpbmVkLiBUaGUgcmVhc29uCiYjNDM7ICAgICAgICBmb3Iga2VlcGluZyB0aGUgYnJpZ2h0bmVzcyB1bmNoYW5nZWQgaXMgdGhhdCBzb21lIGhhcmR3YXJlIG1heSBjaG9vc2UgYQomIzQzOyAgICAgICAgc3BlY2lmaWMgYnJpZ2h0bmVzcyBpbnN0ZWFkIG9mIHNpbXBseSB0dXJuaW5nIG9mZiB0aGUgTEVEIGFmdGVyCiYjNDM7ICAgICAgICBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0aW5nIGhhcmR3YXJlIGNvbnRyb2wuCiYjNDM7CiYjNDM7ICAgICAgICBUaGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZQomIzQzOyAgICAgICAgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIG5vdCBjdXJyZW50bHkgaW4gaGFyZHdhcmUKJiM0MzsgICAgICAgIGNvbnRyb2wuCiYjNDM7CiYjNDM7SWYgdGhlIGN1cnJlbnQgdHJpZ2dlciBpcyBuZWl0aGVyIHRoZSBwcml2YXRlIHRyaWdnZXIgbm9yICYjMzQ7bm9uZSYjMzQ7LCBubyB0cmFuc2l0aW9uCiYjNDM7d2lsbCBiZSBtYWRlLgomIzQzOwogS25vd24gSXNzdWVzCiA9PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCmluZGV4IGE1MWIwZWQ1Mzg4NjQuLjNiNDM4ZDhkYTVlMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKQEAgLTI3LDI5ICYjNDM7MjcsMTkgQEAgc3RhdGljIExJU1RfSEVBRChsZWRzX2xvb2t1cF9saXN0KTsKIAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsZWRzX3dxOwogCi1zdGF0aWMgYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQotewotI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCi0JZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKLQlyZXR1cm4gbGVkX2NkZXYtJmd0O3RyaWdnZXIgJmFtcDsmYW1wOyBsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7dHJpZ2dlcl90eXBlOwotI2Vsc2UKLQlyZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQogc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOwogCi0JaWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKQotCQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtsZWRfY2Rldi0mZ3Q7bGVkX2FjY2VzcykgewomIzQzOwkJaWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKQomIzQzOwkJCXJldHVybiAtRU5PREFUQTsKIAotCW11dGV4X2xvY2soJmFtcDtsZWRfY2Rldi0mZ3Q7bGVkX2FjY2Vzcyk7Ci0JbGVkX3VwZGF0ZV9icmlnaHRuZXNzKGxlZF9jZGV2KTsKLQlicmlnaHRuZXNzID0gbGVkX2NkZXYtJmd0O2JyaWdodG5lc3M7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpOwomIzQzOwkJbGVkX3VwZGF0ZV9icmlnaHRuZXNzKGxlZF9jZGV2KTsKJiM0MzsJCWJyaWdodG5lc3MgPSBsZWRfY2Rldi0mZ3Q7YnJpZ2h0bmVzczsKJiM0MzsJfQogCiAJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgYnJpZ2h0bmVzcyk7CiB9CkBAIC03NCw2ICYjNDM7NjQsOSBAQCBzdGF0aWMgc3NpemVfdCBicmlnaHRuZXNzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAogCWlmIChzdGF0ZSA9PSBMRURfT0ZGKQogCQlsZWRfdHJpZ2dlcl9yZW1vdmUobGVkX2NkZXYpOwomIzQzOwllbHNlCiYjNDM7CQlsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChsZWRfY2Rldik7CiYjNDM7CiAJbGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBzdGF0ZSk7CiAKIAlyZXQgPSBzaXplOwpAQCAtMTAzLDggJiM0Mzs5NiwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0gewogCSZhbXA7YmluX2F0dHJfdHJpZ2dlciwKIAlOVUxMLAogfTsKJiM0MzsKJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfUk8odHJpZ2dlcl9tYXlfb2ZmbG9hZCk7CiYjNDM7c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZF90cmlnZ2VyX2F0dHJzW10gPSB7CiYjNDM7CSZhbXA7ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyLAomIzQzOwlOVUxMCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdW1vZGVfdCBsZWRfdHJpZ2dlcl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAomIzQzOwkJCQkgICAgICBpbnQgaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaik7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CWlmIChhdHRyID09ICZhbXA7ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyKQomIzQzOwkJcmV0dXJuIGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPyBhdHRyLSZndDttb2RlIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGF0dHItJmd0O21vZGU7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbGVkX3RyaWdnZXJfZ3JvdXAgPSB7CiAJLmJpbl9hdHRycyA9IGxlZF90cmlnZ2VyX2Jpbl9hdHRycywKJiM0MzsJLmF0dHJzID0gbGVkX3RyaWdnZXJfYXR0cnMsCiYjNDM7CS5pc192aXNpYmxlID0gbGVkX3RyaWdnZXJfaXNfdmlzaWJsZSwKIH07CiAjZW5kaWYKIApAQCAtNTk2LDYgJiM0Mzs2MTEsOSBAQCBpbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCiAJbGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQobGVkX2NkZXYpOwogI2VuZGlmCiAKJiM0MzsJaWYgKGxlZF9jZGV2LSZndDtmbGFncyAmYW1wOyBMRURfVFJJR19IV19DSEFOR0VEKQomIzQzOwkJbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKGxlZF9jZGV2KTsKJiM0MzsKIAltdXRleF91bmxvY2soJmFtcDtsZWRfY2Rldi0mZ3Q7bGVkX2FjY2Vzcyk7CiAKIAlkZXZfZGJnKHBhcmVudCwgJiMzNDtSZWdpc3RlcmVkIGxlZCBkZXZpY2U6ICVzXG4mIzM0OywKQEAgLTYxNiw2ICYjNDM7NjM0LDkgQEAgdm9pZCBsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIAlpZiAoSVNfRVJSX09SX05VTEwobGVkX2NkZXYtJmd0O2RldikpCiAJCXJldHVybjsKIAomIzQzOwlpZiAobGVkX2NkZXYtJmd0O2ZsYWdzICZhbXA7IExFRF9UUklHX0hXX0NIQU5HRUQpCiYjNDM7CQlsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQobGVkX2NkZXYpOwomIzQzOwogI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCiAJZG93bl93cml0ZSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwogCWlmIChsZWRfY2Rldi0mZ3Q7dHJpZ2dlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYwppbmRleCBiMTIyMzIxOGJkYTExLi5hOWQ5OTJhODg2MTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jCkBAIC03LDkgJiM0Mzs3LDEzIEBACiAgKiBBdXRob3I6IFJpY2hhcmQgUHVyZGllICZsdDtycHVyZGllQG9wZW5lZGhhbmQuY29tJmd0OwogICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvY2tkZXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CkBAIC0zMyw2ICYjNDM7MzcsMzQgQEAgdHJpZ2dlcl9yZWxldmFudChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQogCXJldHVybiAhdHJpZy0mZ3Q7dHJpZ2dlcl90eXBlIHx8IHRyaWctJmd0O3RyaWdnZXJfdHlwZSA9PSBsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl90eXBlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwlpZiAoIWxlZF9jZGV2LSZndDt0cmlnZ2VyKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoIWxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgfHwKJiM0MzsJICAgIHN0cmNtcChsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyLCBsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7bmFtZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7b2ZmbG9hZGVkKQomIzQzOwkJcmV0dXJuIGxlZF9jZGV2LSZndDt0cmlnZ2VyLSZndDtvZmZsb2FkZWQobGVkX2NkZXYpOwomIzQzOwomIzQzOwlkZXZfd2Fybl9vbmNlKGxlZF9jZGV2LSZndDtkZXYsICYjMzQ7aHcgY29udHJvbCB0cmlnZ2VyICVzIGRvZXNuJiMzOTt0IGltcGxlbWVudCBvZmZsb2FkZWQoKVxuJiMzNDssCiYjNDM7CQkgICAgICBsZWRfY2Rldi0mZ3Q7dHJpZ2dlci0mZ3Q7bmFtZSk7CiYjNDM7CiYjNDM7CS8qIE90aGVyd2lzZSBhc3N1bWUgcHJpdmF0ZSB0cmlnZ2VycyBhcyBhbHdheXMgb2ZmbG9hZGVkLiAqLwomIzQzOwlyZXR1cm4gbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O3RyaWdnZXJfdHlwZTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fcmVhZCkoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9sb2NrKTsKJiM0MzsJcmV0dXJuIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQpOwomIzQzOwogc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLAogCQkJICBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpCkBAIC0xNjMsNyAmIzQzOzE5NSw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZWFkKTsKIAogLyogQ2FsbGVyIG11c3QgZW5zdXJlIGxlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2sgaGVsZCAqLwotaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQomIzQzO3N0YXRpYyBpbnQgX19sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZywKJiM0MzsJCQkgICAgIGJvb2wgaHdfdHJpZ2dlcmVkKQogewogCWNoYXIgKmV2ZW50ID0gTlVMTDsKIAljaGFyICplbnZwWzJdOwpAQCAtMTk0LDcgJiM0MzsyMjcsMjEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQogCQlsZWRfY2Rldi0mZ3Q7dHJpZ2dlcl9kYXRhID0gTlVMTDsKIAkJbGVkX2NkZXYtJmd0O2FjdGl2YXRlZCA9IGZhbHNlOwogCQlsZWRfY2Rldi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5MRURfSU5JVF9ERUZBVUxUX1RSSUdHRVI7Ci0JCWxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogSGFyZHdhcmUgbWF5IGhhdmUgc2VsZWN0ZWQgYSBuZXcgYnJpZ2h0bmVzcyBsZXZlbCBkdXJpbmcgaXRzCiYjNDM7CQkgKiBoYXJkd2FyZSBjb250cm9sIHRyYW5zaXRpb24sIHNvIG9ubHkgcmVzZXQgYnJpZ2h0bmVzcyBpZiB3ZQomIzQzOwkJICogYXJlIHN3aXRjaGluZyB0byBhbm90aGVyIHRyaWdnZXIgb3IgaWYgdGhlIHN3aXRjaGluZyBpcyBub3QKJiM0MzsJCSAqIGhhcmR3YXJlIHRyaWdnZXJlZC4KJiM0MzsJCSAqCiYjNDM7CQkgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhcHBseSB0byB0aGUgZXJyb3IgcGF0aCwgYXMgcnVubmluZwomIzQzOwkJICogaW50byB0aGUgZXJyb3IgcGF0aCBpbXBsaWVzIGEgbm9uZSA9Jmd0OyBwcml2YXRlIHRyaWdnZXIKJiM0MzsJCSAqIHRyYW5zaXRpb24uIFRoaXMgaGludHMgdGhhdCB0aGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUKJiM0MzsJCSAqIHRyaWdnZXIgbXVzdCBoYXZlIHNvbWUgZnVuZGFtZW50YWwgYnVncywgc28gZG9uJiMzOTt0IGJvdGhlcgomIzQzOwkJICogbGVhdmluZyB0aGUgTEVEIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRyaWcgfHwgIWh3X3RyaWdnZXJlZCkKJiM0MzsJCQlsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpOwogCX0KIAlpZiAodHJpZykgewogCQlzcGluX2xvY2soJmFtcDt0cmlnLSZndDtsZWRkZXZfbGlzdF9sb2NrKTsKQEAgLTI1OCw2ICYjNDM7MzA1LDExIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZykKIAogCXJldHVybiByZXQ7CiB9CiYjNDM7CiYjNDM7aW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCB0cmlnLCBmYWxzZSk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0KTsKIAogdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCkBAIC0yNjgsNiAmIzQzOzMyMCwxNSBAQCB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7CiAKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKQomIzQzOwkJbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wpOwomIzQzOwogc3RhdGljIGJvb2wgbGVkX21hdGNoX2RlZmF1bHRfdHJpZ2dlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkgICAgICBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpCiB7CkBAIC0zMTMsNiAmIzQzOzM3NCwzMiBAQCB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQpOwogCiYjNDM7c3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CXN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZzsKJiM0MzsJYm9vbCBoaXQsIG9mZmxvYWRlZDsKJiM0MzsJaW50IGxlbjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7bGVkX2NkZXYtJmd0O2xlZF9hY2Nlc3MpOwomIzQzOwlndWFyZChyd3NlbV9yZWFkKSgmYW1wO2xlZF9jZGV2LSZndDt0cmlnZ2VyX2xvY2spOwomIzQzOwomIzQzOwl0cmlnID0gbGVkX2NkZXYtJmd0O3RyaWdnZXI7CiYjNDM7CiYjNDM7CW9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7CiYjNDM7CWhpdCA9IG9mZmxvYWRlZCB8fCAodHJpZyAmYW1wOyZhbXA7ICFzdHJjbXAobGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciwgdHJpZy0mZ3Q7bmFtZSkpOwomIzQzOwomIzQzOwkvKiBbb2ZmbG9hZGVkXSAmbHQ7YWN0aXZlX2J1dF9ub3Rfb2ZmbG9hZGVkJmd0OyBpbmFjdGl2ZSAqLwomIzQzOwlsZW4gPSBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcyVzJXNcbiYjMzQ7LAomIzQzOwkJCSBvZmZsb2FkZWQgPyAmIzM0O1smIzM0OyA6IChoaXQgPyAmIzM0OyZsdDsmIzM0OyA6ICYjMzQ7JiMzNDspLAomIzQzOwkJCSBsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF90cmlnZ2VyLAomIzQzOwkJCSBvZmZsb2FkZWQgPyAmIzM0O10mIzM0OyA6IChoaXQgPyAmIzM0OyZndDsmIzM0OyA6ICYjMzQ7JiMzNDspKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGxlbjsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwodHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KTsKJiM0MzsKIC8qIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqLwogCiBpbnQgbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKQpAQCAtNDAzLDYgJiM0Mzs0OTAsODggQEAgaW50IGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSwKJiM0MzsJCQkJCQkgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKQomIzQzO3sKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghbGVkX2NkZXYtJmd0O3RyaWdnZXIpIHsKJiM0MzsJCS8qICYjMzQ7bm9uZSYjMzQ7ID0mZ3Q7IHByaXZhdGUgdHJpZ2dlci4gKi8KJiM0MzsJCWlmIChhY3RpdmF0ZSkKJiM0MzsJCQllcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgaGNfdHJpZywgdHJ1ZSk7CiYjNDM7CX0gZWxzZSBpZiAobGVkX2NkZXYtJmd0O3RyaWdnZXIgPT0gaGNfdHJpZykgewomIzQzOwkJLyogcHJpdmF0ZSB0cmlnZ2VyID0mZ3Q7ICYjMzQ7bm9uZSYjMzQ7LiAqLwomIzQzOwkJaWYgKCFhY3RpdmF0ZSkKJiM0MzsJCQllcnIgPSBfX2xlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCwgdHJ1ZSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBPdGhlciB0cmlnZ2VyIGlzIGFjdGl2ZS4gKi8KJiM0MzsJCWRldl9kYmcobGVkX2NkZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O0lnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZSYjMzQ7LAomIzQzOwkJCWFjdGl2YXRlID8gJiMzNDthY3RpdmF0ZSYjMzQ7IDogJiMzNDtkZWFjdGl2YXRlJiMzNDssIGhjX3RyaWctJmd0O25hbWUsCiYjNDM7CQkJbGVkX2NkZXYtJmd0O3RyaWdnZXItJmd0O25hbWUpOwomIzQzOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlkZXZfd2FybihsZWRfY2Rldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyAlcyBpbiBodyBjb250cm9sIHRyYW5zaXRpb246ICVkJiMzNDssCiYjNDM7CQkJIGFjdGl2YXRlID8gJiMzNDthY3RpdmF0ZSYjMzQ7IDogJiMzNDtkZWFjdGl2YXRlJiMzNDssIGhjX3RyaWctJmd0O25hbWUsIGVycik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsZWRfY2xhc3NkZXYsIHRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7CiYjNDM7CWJvb2wgYWN0aXZhdGUgPSBSRUFEX09OQ0UobGVkX2NkZXYtJmd0O3RyaWdnZXJzX2h3X2NoYW5nZWQpOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQocndzZW1fcmVhZCwgJmFtcDt0cmlnZ2Vyc19saXN0X2xvY2spIHsKJiM0MzsJCXN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZzsKJiM0MzsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnkodHJpZywgJmFtcDt0cmlnZ2VyX2xpc3QsIG5leHRfdHJpZykgewomIzQzOwkJCWlmICh0cmlnLSZndDt0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtJmd0O3RyaWdnZXJfdHlwZSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICFzdHJjbXAodHJpZy0mZ3Q7bmFtZSwgbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlcikpIHsKJiM0MzsJCQkJZ3VhcmQocndzZW1fd3JpdGUpKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJfbG9jayk7CiYjNDM7CiYjNDM7CQkJCWxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbihsZWRfY2RldiwgYWN0aXZhdGUsIHRyaWcpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl9lcnIobGVkX2NkZXYtJmd0O2RldiwKJiM0MzsJCSYjMzQ7JXMoKSBpcyBjYWxsZWQsIGJ1dCB0aGUgcHJpdmF0ZSB0cmlnZ2VyICglcykgaXMgbm90IHByb3Blcmx5IHJlZ2lzdGVyZWRcbiYjMzQ7LAomIzQzOwkJX19mdW5jX18sIGxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpCiYjNDM7ewomIzQzOwkvKiBSZXN0cmljdGVkIHRvIHByaXZhdGUgdHJpZ2dlcnMuICovCiYjNDM7CWlmIChXQVJOX09OKCEobGVkX2NkZXYtJmd0O2ZsYWdzICZhbXA7IExFRF9UUklHX0hXX0NIQU5HRUQpIHx8CiYjNDM7CQkgICAgIWxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgfHwgIWxlZF9jZGV2LSZndDt0cmlnZ2VyX3R5cGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGxlZF9jZGV2LSZndDt0cmlnZ2Vyc19od19jaGFuZ2VkLCBhY3RpdmF0ZSk7CiYjNDM7CiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7CiYjNDM7CiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlJTklUX1dPUksoJmFtcDtsZWRfY2Rldi0mZ3Q7dHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrLCBsZWRfdHJpZ2dlcl9od19jb250cm9sX2NoYW5nZWRfd29ya2VyKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKTsKJiM0MzsKJiM0Mzt2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CWRpc2FibGVfd29ya19zeW5jKCZhbXA7bGVkX2NkZXYtJmd0O3RyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi8KJiM0MzsKIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi8KIAogdm9pZCBsZWRfdHJpZ2dlcl9ldmVudChzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMKaW5kZXggMTg0NGQwY2Q1ZjUyOC4uNmRiODNkMDE1Mjc3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuYwpAQCAtODUsMTIgJiM0Mzs4NSwxOCBAQCBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiAJcmV0dXJuIGNyb3NfZWNfbGVkX3NlbmRfY21kKHByaXYtJmd0O2Nyb3NfZWMsICZhbXA7YXJnKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGNyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZTsKIAogc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBjcm9zX2VjX2xlZF90cmlnZ2VyID0gewogCS5uYW1lID0gJiMzNDtjaHJvbWVvcy1hdXRvJiMzNDssCiAJLnRyaWdnZXJfdHlwZSA9ICZhbXA7Y3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlLAogCS5hY3RpdmF0ZSA9IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUsCiYjNDM7CS5vZmZsb2FkZWQgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZCwKIH07CiAKIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jCmluZGV4IGVkNmE0N2JiYjQ0ZjkuLjMyZDQwZDE3NmQzZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jCkBAIC0xOTUsMTAgJiM0MzsxOTUsMTYgQEAgc3RhdGljIHZvaWQgb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldikKIAkJCWVycik7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIG9tbmlhX2h3X3RyaWdnZXIgPSB7CiAJLm5hbWUJCT0gJiMzNDtvbW5pYS1tY3UmIzM0OywKIAkuYWN0aXZhdGUJPSBvbW5pYV9od3RyaWdfYWN0aXZhdGUsCiAJLmRlYWN0aXZhdGUJPSBvbW5pYV9od3RyaWdfZGVhY3RpdmF0ZSwKJiM0MzsJLm9mZmxvYWRlZAk9IG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQsCiAJLnRyaWdnZXJfdHlwZQk9ICZhbXA7b21uaWFfaHdfdHJpZ2dlcl90eXBlLAogfTsKIApAQCAtMjUxLDYgJiM0MzsyNTcsNyBAQCBzdGF0aWMgaW50IG9tbmlhX2xlZF9yZWdpc3RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3Qgb21uaWFfbGVkICpsZWQsCiAJICogYnkgTEVEIGNsYXNzIGZyb20gdGhlIGxpbnV4LGRlZmF1bHQtdHJpZ2dlciBwcm9wZXJ0eS4KIAkgKi8KIAljZGV2LSZndDtkZWZhdWx0X3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7CiYjNDM7CWNkZXYtJmd0O2h3X2NvbnRyb2xfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTsKIAogCS8qIFB1dCB0aGUgTEVEIGludG8gc29mdHdhcmUgbW9kZSAqLwogCXJldCA9IG9tbmlhX2NtZF93cml0ZV91OChjbGllbnQsIE9NTklBX0NNRF9MRURfTU9ERSwgT01OSUFfQ01EX0xFRF9NT0RFX0xFRChsZWQtJmd0O3JlZykgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMuaCBiL2RyaXZlcnMvbGVkcy9sZWRzLmgKaW5kZXggYmVlNDY2NTFlMDY4Zi4uYmRhYzIzMzYwMTJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2xlZHMvbGVkcy5oCkBAIC0yNyw4ICYjNDM7MjcsMTggQEAgc3NpemVfdCBsZWRfdHJpZ2dlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsCiAJCQlsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpOwomIzQzO3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogCiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBsZWRzX2xpc3RfbG9jazsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGxlZHNfbGlzdDsKIAomIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VECiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0MzsjZWxzZSAvKiAhQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHsgfQomIzQzOyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovCiYjNDM7CiAjZW5kaWYJLyogX19MRURTX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnCmluZGV4IGMxMTI4MmE3NGI1YWMuLmExMWQwNGNlNGFiMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZwpAQCAtOSw2ICYjNDM7OSwxNiBAQCBtZW51Y29uZmlnIExFRFNfVFJJR0dFUlMKIAogaWYgTEVEU19UUklHR0VSUwogCiYjNDM7Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzOwlib29sICYjMzQ7TEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydCYjMzQ7CiYjNDM7CWRlZmF1bHQgTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRUQKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgaW5pdGlhdGVkIGhhcmR3YXJlIGNvbnRyb2wKJiM0MzsJICB0cmFuc2l0aW9ucywgd2hlcmUgdGhlIExFRCBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgc3dpdGNoZXMgYmV0d2VlbgomIzQzOwkgICYjMzQ7bm9uZSYjMzQ7IChpLmUuLCBubyB0cmlnZ2VyKSBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlci4KJiM0MzsKJiM0MzsJICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLgomIzQzOwogY29uZmlnIExFRFNfVFJJR0dFUl9USU1FUgogCXRyaXN0YXRlICYjMzQ7TEVEIFRpbWVyIFRyaWdnZXImIzM0OwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jCmluZGV4IDViNGU5MmMxNGRiYjQuLjJlOWFmNDhhNzRkYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYwpAQCAtNzk4LDEwICYjNDM7Nzk4LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl90cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiAJa2ZyZWUodHJpZ2dlcl9kYXRhKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5ldGRldl90cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsZWRfbmV0ZGV2X2RhdGEgKnRyaWdnZXJfZGF0YSA9IGxlZF9nZXRfdHJpZ2dlcl9kYXRhKGxlZF9jZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRyaWdnZXJfZGF0YS0mZ3Q7aHdfY29udHJvbDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIG5ldGRldl9sZWRfdHJpZ2dlciA9IHsKIAkubmFtZSA9ICYjMzQ7bmV0ZGV2JiMzNDssCiAJLmFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfYWN0aXZhdGUsCiAJLmRlYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlLAomIzQzOwkub2ZmbG9hZGVkID0gbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkLAogCS5ncm91cHMgPSBuZXRkZXZfdHJpZ19ncm91cHMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnCmluZGV4IDUxNjU5NDk5MzA3MzkuLmE5Nzg1MmIwYjIyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnCkBAIC0xNiw2ICYjNDM7MTYsNyBAQCBjb25maWcgSURFQVBBRF9MQVBUT1AKIAlzZWxlY3QgSU5QVVRfU1BBUlNFS01BUAogCXNlbGVjdCBORVdfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCiYjNDM7CXNlbGVjdCBMRURTX1RSSUdHRVJTCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3IKIAkgIHJma2lsbCBzd2l0Y2gsIGhvdGtleSwgZmFuIGNvbnRyb2wgYW5kIGJhY2tsaWdodCBjb250cm9sLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYwppbmRleCA4MjEzNTI0NTA0ZWViLi5mODZjMTFmNTFkMGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYwpAQCAtMTQsOSAmIzQzOzE0LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYml0b3BzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2xlYW51cC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGV2X3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2k4MDQyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwpAQCAtMjYsOSAmIzQzOzI5LDExIEBACiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGVkcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX3Byb2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wb3dlcl9zdXBwbHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmZraWxsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2VxX2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmdfY2hvaWNlcy5oJmd0OwpAQCAtMTM0LDEwICYjNDM7MTM5LDMxIEBAIGVudW0gewogfTsKIAogLyoKLSAqIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgc3RhdGVzIC0gMQotICogRnV0dXJlIGtleWJvYXJkIHR5cGVzIG1heSBuZWVkIGEgbmV3IHN5c3RlbSwgaWYgdGhlcmUmIzM5O3MgYSBjb2xsaXNpb24KLSAqIEtCRF9CTF9UUklTVEFURV9BVVRPIGhhcyBubyB3YXkgdG8gcmVwb3J0IG9yIHNldCB0aGUgYXV0byBzdGF0ZQotICogc28gaXQgZWZmZWN0aXZlbHkgaGFzIDMgc3RhdGVzLCBidXQgbmVlZHMgdG8gaGFuZGxlIDQKJiM0MzsgKiBUaGUgZW51bWVyYXRpb24gaGFzIHR3byBwdXJwb3NlczoKJiM0MzsgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodAomIzQzOyAqICAgLSBhcyBhIG1hbmRhdG9yeSBwYXJhbWV0ZXIgb2YgdGhlIEtCTEMgY29tbWFuZAomIzQzOyAqCiYjNDM7ICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8ICAgICAgSGFyZHdhcmUgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8ICAgIDMgfAomIzQzOyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IEtCRF9CTF9TVEFOREFSRCAgICAgICAgICB8ICAgICAgb2ZmIHwgIG9uIHwgIE4vQSB8ICBOL0EgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLSYjNDM7CiYjNDM7ICogfCBLQkRfQkxfVFJJU1RBVEUgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfCAgTi9BIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzOwomIzQzOyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKgomIzQzOyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czoKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8ICBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8CiYjNDM7ICogfCBPcGVyYXRpb24gICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfAomIzQzOyAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tLS0mIzQzOwomIzQzOyAqIHwgUmVhZCAgICAgICAgICAgICAgICAgICAgIHwgb2ZmL2F1dG8gfCBsb3cgfCBoaWdoIHwKJiM0MzsgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tJiM0MzstLS0tLSYjNDM7LS0tLS0tJiM0MzsKJiM0MzsgKiB8IFdyaXRlICAgICAgICAgICAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8CiYjNDM7ICogJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0tLSYjNDM7CiAgKi8KIGVudW0gewogCUtCRF9CTF9TVEFOREFSRCAgICAgID0gMSwKQEAgLTE0NSw2ICYjNDM7MTcxLDggQEAgZW51bSB7CiAJS0JEX0JMX1RSSVNUQVRFX0FVVE8gPSAzLAogfTsKIAomIzQzOyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTCTMKJiM0MzsKICNkZWZpbmUgS0JEX0JMX1FVRVJZX1RZUEUJCTB4MQogI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfVFlQRQkJMHg1CiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9BVVRPX1RZUEUJMHg3CkBAIC0yMDAsMTAgJiM0MzsyMjgsMTQgQEAgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSB7CiAJCWJvb2wgeW1jX2VjX3RyaWdnZXIgICAgICAgOiAxOwogCX0gZmVhdHVyZXM7CiAJc3RydWN0IHsKLQkJYm9vbCBpbml0aWFsaXplZDsKJiM0MzsJCWludCBpbml0aWFsaXplZDsgLyogIDA6IGluaXRpYWxpemlvbiBwZW5kaW5nL29uZ29pbmcvZmFpbGVkCiYjNDM7CQkJCSAgKiAmZ3Q7MDogaW5pdGlhbGl6aW9uIGZpbmlzaGVkCiYjNDM7CQkJCSAgKiAmbHQ7MDogdW5yZWdpc3RlcmF0aW9uIG9uZ29pbmcvZmluaXNoZWQKJiM0MzsJCQkJICAqLwogCQlpbnQgdHlwZTsKIAkJc3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7Ci0JCXVuc2lnbmVkIGludCBsYXN0X2JyaWdodG5lc3M7CiYjNDM7CQl1bnNpZ25lZCBpbnQgbGFzdF9od19icmlnaHRuZXNzOwomIzQzOwkJc3RydWN0IG11dGV4IG11dGV4OyAvKiBwcm90ZWN0cyBicmlnaHRuZXNzIHRyYWNraW5nICovCiAJfSBrYmRfYmw7CiAJc3RydWN0IHsKIAkJYm9vbCBpbml0aWFsaXplZDsKQEAgLTE1OTIsNyAmIzQzOzE2MjQsMjQgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShpbnQgdHlwZSkKIAlyZXR1cm4gKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFKSB8fCAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyk7CiB9CiAKLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2Uoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpCiYjNDM7ewomIzQzOwkvKiBPZmYsIGxvdyBvciBoaWdoICovCiYjNDM7CWlmIChod19icmlnaHRuZXNzICZsdDs9IHByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpCiYjNDM7CQlyZXR1cm4gaHdfYnJpZ2h0bmVzczsKJiM0MzsKJiM0MzsJLyogQXV0byAoY29udHJvbGxlZCBieSBFQyBhY2NvcmRpbmcgdG8gQUxTKSwgcmVwb3J0IGFzIG9mZiAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7a2JkX2JsLnR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8gJmFtcDsmYW1wOwomIzQzOwkgICAgaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogVW5rbm93biB2YWx1ZSAqLwomIzQzOwlkZXZfd2FybigmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LAomIzQzOwkJICYjMzQ7VW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVkJiMzNDssIGh3X2JyaWdodG5lc3MpOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJaW50IGVycjsKQEAgLTE2MDYsMjEgJiM0MzsxNjU1LDcgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KQogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQkvKiBDb252ZXJ0IHJldHVybmVkIHZhbHVlIHRvIGJyaWdodG5lc3MgbGV2ZWwgKi8KLQkJdmFsdWUgPSBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7Ci0KLQkJLyogT2ZmLCBsb3cgb3IgaGlnaCAqLwotCQlpZiAodmFsdWUgJmx0Oz0gcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcykKLQkJCXJldHVybiB2YWx1ZTsKLQotCQkvKiBBdXRvLCByZXBvcnQgYXMgb2ZmICovCi0JCWlmICh2YWx1ZSA9PSBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzICYjNDM7IDEpCi0JCQlyZXR1cm4gMDsKLQotCQkvKiBVbmtub3duIHZhbHVlICovCi0JCWRldl93YXJuKCZhbXA7cHJpdi0mZ3Q7cGxhdGZvcm1fZGV2aWNlLSZndDtkZXYsCi0JCQkgJiMzNDtVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWx1JiMzNDssIHZhbHVlKTsKLQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlyZXR1cm4gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpOwogCX0KIAogCWVyciA9IGV2YWxfaGFscyhwcml2LSZndDthZGV2LSZndDtoYW5kbGUsICZhbXA7dmFsdWUpOwpAQCAtMTYzMCw2ICYjNDM7MTY2NSwxNiBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiAJcmV0dXJuICEhdGVzdF9iaXQoSEFMU19LQkRfQkxfU1RBVEVfQklULCAmYW1wO3ZhbHVlKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7CiYjNDM7CiYjNDM7CWlmIChod19icmlnaHRuZXNzICZsdDsgMCkKJiM0MzsJCXJldHVybiBod19icmlnaHRuZXNzOwomIzQzOwomIzQzOwlyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKIHsKIAlzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTsKQEAgLTE2MzcsOTkgJiM0MzsxNjgyLDIwNyBAQCBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYQogCXJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTsKIH0KIAotc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcykKJiM0MztzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsCiYjNDM7CQkJCQkgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpCiB7Ci0JaW50IGVycjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCB0eXBlID0gcHJpdi0mZ3Q7a2JkX2JsLnR5cGU7CiYjNDM7CWludCBlcnI7CiAKLQlpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHsKLQkJaWYgKGJyaWdodG5lc3MgJmd0OyBwcml2LSZndDtrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKQotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ByaXYtJmd0O2tiZF9ibC5tdXRleCk7CiAKLQkJdmFsdWUgPSBGSUVMRF9QUkVQKEtCRF9CTF9TRVRfQlJJR0hUTkVTUywgYnJpZ2h0bmVzcykgfAomIzQzOwlpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHsKJiM0MzsJCXZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGh3X2JyaWdodG5lc3MpIHwKIAkJCUZJRUxEX1BSRVAoS0JEX0JMX0NPTU1BTkRfVFlQRSwgdHlwZSkgfAogCQkJS0JEX0JMX0NPTU1BTkRfU0VUOwogCQllcnIgPSBleGVjX2tibGMocHJpdi0mZ3Q7YWRldi0mZ3Q7aGFuZGxlLCB2YWx1ZSk7CiAJfSBlbHNlIHsKLQkJZXJyID0gZXhlY19zYWxzKHByaXYtJmd0O2FkZXYtJmd0O2hhbmRsZSwgYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGKTsKJiM0MzsJCXZhbHVlID0gaHdfYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGOwomIzQzOwkJZXJyID0gZXhlY19zYWxzKHByaXYtJmd0O2FkZXYtJmd0O2hhbmRsZSwgdmFsdWUpOwogCX0KLQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlwcml2LSZndDtrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKJiM0MzsJcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7CiAKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlpZiAoYnJpZ2h0bmVzcyAmZ3Q7IHByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJCQkgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKIHsKIAlzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTsKIAomIzQzOwkvKgomIzQzOwkgKiBXaGVuIHVucmVnaXN0ZXJpbmc6IEl0IG11c3QgYmUgdGhlIHNpZGUgZWZmZWN0IG9mIExFRCB1bnJlZ2lzdHJhdGlvbgomIzQzOwkgKiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSYjMzk7dmUgc2V0IExFRF9SRVRBSU5fQVRfU0hVVERPV04KJiM0MzsJICogdG8gcmV0YWluIGxlZF9jZGV2IGJyaWdodG5lc3MgbGV2ZWwuIFRvIGRvIHRoZSBzYW1lIGZvciBhdXRvIG1vZGUsCiYjNDM7CSAqIGdhdGUgY2hhbmdlcyBhbmQgcmV0dXJuIGVhcmx5LgomIzQzOwkgKgomIzQzOwkgKiBJdCYjMzk7cyBuZWVkbGVzcyB0byBnYXRlIGNoYW5nZXMgd2hlbiBpbml0aWFsaXppbmcsIGFzIHRoZXJlIG1heSBiZSBhCiYjNDM7CSAqIHRpbWUgbWFyZ2luIGJldHdlZW4gc3lzZnMgYXR0cmlidXRlIGNyZWF0aW9uIGFuZCBzdGF0ZSBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkocHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3ByaXYtJmd0O2tiZF9ibC5tdXRleCk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGVkX2h3X3RyaWdnZXJfdHlwZSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlciA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O2lkZWFwYWQtYXV0byYjMzQ7LAomIzQzOwkudHJpZ2dlcl90eXBlID0gJmFtcDtpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZSwKJiM0MzsJLmFjdGl2YXRlID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlLAomIzQzOwkub2ZmbG9hZGVkID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsCiYjNDM7CQkJCQkgICAgIHVuc2lnbmVkIGludCBod19icmlnaHRuZXNzKQomIzQzO3sKJiM0MzsJYm9vbCBod19jb250cm9sLCBsYXN0X2h3X2NvbnRyb2w7CiYjNDM7CiYjNDM7CWlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgfHwgcHJpdi0mZ3Q7a2JkX2JsLnR5cGUgIT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWh3X2NvbnRyb2wgPSBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUzsKJiM0MzsJbGFzdF9od19jb250cm9sID0gcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7CiYjNDM7CiYjNDM7CWlmIChod19jb250cm9sICE9IGxhc3RfaHdfY29udHJvbCkKJiM0MzsJCWxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoJmFtcDtwcml2LSZndDtrYmRfYmwubGVkLCBod19jb250cm9sKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnkoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIHsKLQlpbnQgYnJpZ2h0bmVzczsKJiM0MzsJaW50IGh3X2JyaWdodG5lc3MsIGJyaWdodG5lc3M7CiAKLQlpZiAoIXByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCkKJiM0MzsJaWYgKHVubGlrZWx5KHByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCAmbHQ7PSAwKSkKIAkJcmV0dXJuOwogCi0JYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpOwotCWlmIChicmlnaHRuZXNzICZsdDsgMCkKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cHJpdi0mZ3Q7a2JkX2JsLm11dGV4KTsKJiM0MzsKJiM0MzsJaHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpOwomIzQzOwlpZiAoaHdfYnJpZ2h0bmVzcyAmbHQ7IDApCiAJCXJldHVybjsKIAotCWlmIChicmlnaHRuZXNzID09IHByaXYtJmd0O2tiZF9ibC5sYXN0X2JyaWdodG5lc3MpCiYjNDM7CWJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpOwomIzQzOwlpZiAoYnJpZ2h0bmVzcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm47IC8qIFJlamVjdCBpbnNhbmUgdmFsdWVzIGVhcmx5LiAqLwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7a2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBod19icmlnaHRuZXNzKQogCQlyZXR1cm47CiAKLQlwcml2LSZndDtrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKJiM0MzsJaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2wocHJpdiwgaHdfYnJpZ2h0bmVzcyk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2tiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzOwogCiAJbGVkX2NsYXNzZGV2X25vdGlmeV9icmlnaHRuZXNzX2h3X2NoYW5nZWQoJmFtcDtwcml2LSZndDtrYmRfYmwubGVkLCBicmlnaHRuZXNzKTsKIH0KIAogc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9pbml0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCiB7Ci0JaW50IGJyaWdodG5lc3MsIGVycjsKJiM0MzsJaW50IGh3X2JyaWdodG5lc3MsIGVycjsKIAogCWlmICghcHJpdi0mZ3Q7ZmVhdHVyZXMua2JkX2JsKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChXQVJOX09OKHByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCkpCiYjNDM7CWlmIChXQVJOX09OKHByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCAmZ3Q7IDApKQogCQlyZXR1cm4gLUVFWElTVDsKIAotCWlmIChpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShwcml2LSZndDtrYmRfYmwudHlwZSkpCi0JCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyOwotCWVsc2UKLQkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7CiYjNDM7CXByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCA9IDA7CiAKLQlicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7Ci0JaWYgKGJyaWdodG5lc3MgJmx0OyAwKQotCQlyZXR1cm4gYnJpZ2h0bmVzczsKJiM0MzsJZXJyID0gZGV2bV9tdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7cGxhdGZvcm1fZGV2aWNlLSZndDtkZXYsICZhbXA7cHJpdi0mZ3Q7a2JkX2JsLm11dGV4KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTsKJiM0MzsJaWYgKGh3X2JyaWdodG5lc3MgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGh3X2JyaWdodG5lc3M7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2tiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzOwogCi0JcHJpdi0mZ3Q7a2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CiAJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5uYW1lICAgICAgICAgICAgICAgICAgICA9ICYjMzQ7cGxhdGZvcm06OiYjMzQ7IExFRF9GVU5DVElPTl9LQkRfQkFDS0xJR0hUOwogCXByaXYtJmd0O2tiZF9ibC5sZWQuYnJpZ2h0bmVzc19nZXQgICAgICAgICAgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldDsKIAlwcml2LSZndDtrYmRfYmwubGVkLmJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQ7CiAJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5mbGFncyAgICAgICAgICAgICAgICAgICA9IExFRF9CUklHSFRfSFdfQ0hBTkdFRCB8IExFRF9SRVRBSU5fQVRfU0hVVERPV047CiAKJiM0MzsJc3dpdGNoIChwcml2LSZndDtrYmRfYmwudHlwZSkgewomIzQzOwljYXNlIEtCRF9CTF9UUklTVEFURV9BVVRPOgomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7CiYjNDM7CiYjNDM7CQlpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKSB7CiYjNDM7CQkJZGV2X3dhcm4oJmFtcDtwcml2LSZndDtwbGF0Zm9ybV9kZXZpY2UtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7Q2Fubm90IHByb3ZpZGUgTEVEIHRyaWdnZXIgJXMgZm9yIGtleWJvYXJkIGJhY2tsaWdodFxuJiMzNDssCiYjNDM7CQkJCSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLmZsYWdzIHw9IExFRF9UUklHX0hXX0NIQU5HRUQ7CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLnRyaWdnZXJfdHlwZSA9ICZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7CiYjNDM7CQlwcml2LSZndDtrYmRfYmwubGVkLmh3X2NvbnRyb2xfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lOwomIzQzOwomIzQzOwkJLyogSGFyZHdhcmUgcmVtZW1iZXJzIHRoZSBsYXN0IGJyaWdodG5lc3MgbGV2ZWwsIGluY2x1ZGluZyBhdXRvIG1vZGUuICovCiYjNDM7CQlpZiAoaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpCiYjNDM7CQkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5kZWZhdWx0X3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTsKJiM0MzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEtCRF9CTF9UUklTVEFURToKJiM0MzsJCXByaXYtJmd0O2tiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgS0JEX0JMX1NUQU5EQVJEOgomIzQzOwkJcHJpdi0mZ3Q7a2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qIFRoaXMgaGFzIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYnkgaWRlYXBhZF9jaGVja19mZWF0dXJlcygpLiAqLwomIzQzOwkJdW5yZWFjaGFibGUoKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBSZWplY3QgaW5zYW5lIHZhbHVlcy4gKi8KJiM0MzsJZXJyID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmYW1wO3ByaXYtJmd0O3BsYXRmb3JtX2RldmljZS0mZ3Q7ZGV2LCAmYW1wO3ByaXYtJmd0O2tiZF9ibC5sZWQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgPSB0cnVlOwomIzQzOwlwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgPSAxOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX2V4aXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIHsKLQlpZiAoIXByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCkKJiM0MzsJaWYgKHByaXYtJmd0O2tiZF9ibC5pbml0aWFsaXplZCAmbHQ7PSAwKQogCQlyZXR1cm47CiAKLQlwcml2LSZndDtrYmRfYmwuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKJiM0MzsJcHJpdi0mZ3Q7a2JkX2JsLmluaXRpYWxpemVkID0gLTE7CiAKIAlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmYW1wO3ByaXYtJmd0O2tiZF9ibC5sZWQpOwogfQpAQCAtMjU0OCwxNyAmIzQzOzI3MDEsMzAgQEAgc3RhdGljIGludCBfX2luaXQgaWRlYXBhZF9sYXB0b3BfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKJiM0MzsJZXJyID0gbGVkX3RyaWdnZXJfcmVnaXN0ZXIoJmFtcDtpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIExFRCB0cmlnZ2VyICVzOiAlZFxuJiMzNDssCiYjNDM7CQkJaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUsIGVycik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBpZGVhcGFkX3dtaV9kcml2ZXJfcmVnaXN0ZXIoKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnJfbGVkdHJpZzsKIAogCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYW1wO2lkZWFwYWRfYWNwaV9kcml2ZXIpOwotCWlmIChlcnIpIHsKLQkJaWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTsKLQkJcmV0dXJuIGVycjsKLQl9CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl93bWk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfd21pOgomIzQzOwlpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpOwomIzQzO2Vycl9sZWR0cmlnOgomIzQzOwlpZiAoaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpCiYjNDM7CQlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKCZhbXA7aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIG1vZHVsZV9pbml0KGlkZWFwYWRfbGFwdG9wX2luaXQpCiAKQEAgLTI1NjYsNiAmIzQzOzI3MzIsOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgaWRlYXBhZF9sYXB0b3BfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhbXA7aWRlYXBhZF9hY3BpX2RyaXZlcik7CiAJaWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTsKJiM0MzsKJiM0MzsJaWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKQomIzQzOwkJbGVkX3RyaWdnZXJfdW5yZWdpc3RlcigmYW1wO2lkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7CiB9CiBtb2R1bGVfZXhpdChpZGVhcGFkX2xhcHRvcF9leGl0KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMuaCBiL2luY2x1ZGUvbGludXgvbGVkcy5oCmluZGV4IGE1MTVmMDc1YzI5YTEuLjkzYjNmZDdlNTYzNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGVkcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbGVkcy5oCkBAIC0xMDksNiAmIzQzOzEwOSw3IEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYgewogI2RlZmluZSBMRURfSU5JVF9ERUZBVUxUX1RSSUdHRVIgQklUKDIzKQogI2RlZmluZSBMRURfUkVKRUNUX05BTUVfQ09ORkxJQ1QgQklUKDI0KQogI2RlZmluZSBMRURfTVVMVElfQ09MT1IJCUJJVCgyNSkKJiM0MzsjZGVmaW5lIExFRF9UUklHX0hXX0NIQU5HRUQJQklUKDI2KQogCiAJLyogc2V0X2JyaWdodG5lc3Nfd29yayAvIGJsaW5rX3RpbWVyIGZsYWdzLCBhdG9taWMsIHByaXZhdGUuICovCiAJdW5zaWduZWQgbG9uZwkJd29ya19mbGFnczsKQEAgLTIzOSw2ICYjNDM7MjQwLDExIEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYgewogCXN0cnVjdCBrZXJuZnNfbm9kZQkqYnJpZ2h0bmVzc19od19jaGFuZ2VkX2tuOwogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRAomIzQzOwlib29sCQkJdHJpZ2dlcnNfaHdfY2hhbmdlZDsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yazsKJiM0MzsjZW5kaWYKJiM0MzsKIAkvKiBFbnN1cmVzIGNvbnNpc3RlbnQgYWNjZXNzIHRvIHRoZSBMRUQgY2xhc3MgZGV2aWNlICovCiAJc3RydWN0IG11dGV4CQlsZWRfYWNjZXNzOwogfTsKQEAgLTQ4NSw2ICYjNDM7NDkxLDcgQEAgc3RydWN0IGxlZF90cmlnZ2VyIHsKIAljb25zdCBjaGFyCSAqbmFtZTsKIAlpbnQJCSgqYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIAl2b2lkCQkoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKJiM0MzsJYm9vbAkJKCpvZmZsb2FkZWQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsKIAogCS8qIEJyaWdodG5lc3Mgc2V0IGJ5IGxlZF90cmlnZ2VyX2V2ZW50ICovCiAJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzOwpAQCAtNTMzLDYgJiM0Mzs1NDAsOSBAQCB2b2lkIGxlZF90cmlnZ2VyX2JsaW5rX29uZXNob3Qoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyLAogdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpOwogdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwomIzQzO3ZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpOwomIzQzOwomIzQzO2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfc2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkJdm9pZCAqdHJpZ2dlcl9kYXRhKQpAQCAtNTg0LDYgJiM0Mzs1OTQsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgKmxlZF9nZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogewpAQCAtNTk4LDYgJiM0Mzs2MTUsMTMgQEAgbGVkX3RyaWdnZXJfZ2V0X2JyaWdodG5lc3MoY29uc3Qgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKQogCiAjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlMgKi8KIAomIzQzOyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VECiYjNDM7dm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkJCQkgYm9vbCBhY3RpdmF0ZSkge30KJiM0MzsjZW5kaWYKJiM0MzsKIC8qIFRyaWdnZXIgc3BlY2lmaWMgZW51bSAqLwogZW51bSBsZWRfdHJpZ2dlcl9uZXRkZXZfbW9kZXMgewogCVRSSUdHRVJfTkVUREVWX0xJTksgPSAwLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5OTUKCQkJCQkJCW91dHB1dDogMjI1CgkJCQkJCQl0aG91Z2h0czogMjAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIExFRCB0cmlnZ2VyIHBhdGNoLiBNeSBpbml0aWFsIGZvY3VzIGlzIGFsd2F5cyBvbiBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKVGhpcyBwYXRjaCBpcyBwcmV0dHkgZm9jdXNlZC4gSXQmIzM5O3MgYWRkaW5nIGEgbmV3IGB0cmlnZ2VyX21heV9vZmZsb2FkYCBzeXNmcyBhdHRyaWJ1dGUgdG8gdGhlIExFRCBjbGFzcywgYSBjb3JyZXNwb25kaW5nIGBvZmZsb2FkZWRgIGNhbGxiYWNrIGluIHRoZSBgbGVkX3RyaWdnZXJgIHN0cnVjdHVyZSwgYW5kIGltcGxlbWVudGluZyBhIG1lY2hhbmlzbSBmb3IgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMuIENyaXRpY2FsbHksIGl0IHRoZW4gaW50ZWdyYXRlcyB0aGlzIHdpdGggc2V2ZXJhbCBzcGVjaWZpYyBkcml2ZXJzOiBgbGVkcy1jcm9zX2VjYCwgYGxlZHMtdHVycmlzLW9tbmlhYCwgYGxlZHRyaWctbmV0ZGV2YCwgYW5kIHRoZSBgaWRlYXBhZC1sYXB0b3BgLiBUaGF0IGxhc3Qgb25lIGNhdGNoZXMgbXkgZXllIOKAkyBBQ1BJIGFuZCBrZXlib2FyZCBiYWNrbGlnaHRzIGNhbiBiZSB0b3VjaHkgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLgoKU28sIGZpcnN0LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlLiBJIGltbWVkaWF0ZWx5IGxvb2sgYXQgdGhhdCBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCBmdW5jdGlvbi4gVGhlIGBzeXNmc19lbWl0YCBzZWVtcyBzYWZlIGhlcmUuIEkgYW0gdmVyaWZ5aW5nIHRoYXQgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tTlVMTCB3aGVuIHJlYWQuIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2hlY2tzIGZvciB0aGlzIGNvbmRpdGlvbiBpbiBgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZWAsIHNvIHRoZSBzeXNmcyBlbnRyeSB3aWxsIG5vdCBiZSBjcmVhdGVkLiBgb2ZmbG9hZGVkYCBhbmQgYGhpdGAgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBib29sZWFucy4gSXQmIzM5O3MgYWxsIGxvb2tpbmcgZ29vZCBzbyBmYXIuCgpOb3cgSSBkZWx2ZSBpbnRvIGBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLiBUaGlzIG9uZSBpcyBrZXksIGFzIGl0IGRldGVybWluZXMgaWYgYSB0cmlnZ2VyIGlzIGNvbnNpZGVyZWQgJiMzNDtvZmZsb2FkZWQuJiMzNDsgVGhlIGNvZGUgZG9lcyBhIGRlY2VudCBqb2IgY2hlY2tpbmcgZm9yIE5VTEwgdHJpZ2dlcnMgYW5kIGVuc3VyZXMgdGhlIHRyaWdnZXIgbmFtZSBtYXRjaGVzLiBJdCBhbHNvIGhhcyBhIGZhbGwtYmFjayBpZiB0aGUgdHJpZ2dlciBkb2VzIG5vdCBpbXBsZW1lbnQgYG9mZmxvYWRlZGAsIHNvIGl0IGlzIGxvb2tpbmcgbGlrZSB0aGUgY29kZSBpcyBoYW5kbGluZyBhbGwgcG9zc2libGUgcmV0dXJuIHBhdGhzLgoKVGhlbiBJIGNoZWNrIHRoZSB3b3JrcXVldWUgaW4gYGxlZC10cmlnZ2Vycy5jYC4gYGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXJgIHJlYWRzIGBsZWRjZGV2LSZndDt0cmlnZ2Vyc19od19jaGFuZ2VkYC4gSSYjMzk7bSBjaGVja2luZyB0aGUgaW5pdGlhbGl6YXRpb24uIFRoZSB2YXJpYWJsZSBpcyB3cml0dGVuIHVzaW5nIGBXUklURV9PTkNFYCBpbiBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgYW5kIGlzIGluaXRpYWxpemVkIGluIGBsZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0YC4gVGhpcyBsb29rcyBzb3VuZDsgdGhlIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCBwYWlyIGlzIGNvcnJlY3QgZm9yIHdvcmtxdWV1ZSBpbnRlcmFjdGlvbi4KCk5leHQsIEkgcmV2aWV3IHRoZSBgaWRlYXBhZC1sYXB0b3AuY2AgY29kZTsgSSBhbSBtYWtpbmcgc3VyZSB0aGUgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBmcm9tIEFDUEkgY2FsbHMuIEFmdGVyIHF1aWNrbHkgc2Nhbm5pbmcsIEkgZmluZCB0aGF0IEFDUEkgbWV0aG9kIGNhbGxzIGFyZSBjaGVja2VkLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHJlYWQuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MsIEkmIzM5O20gY2hlY2tpbmcgZm9yIGFueSBgY29weV90b191c2VyYCwgbmV0bGluayBtZXNzYWdlcywgc29ja2V0IG9wZXJhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcywgb3IgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gc3lzZnMgb3V0cHV0cyBhbmQgaW50ZXJuYWwgY2FsbGJhY2tzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyByZWxhdGVkIHRvIG5ldHdvcmtpbmcsIEJQRiwgb3IgZGlyZWN0IHVzZXItc3BhY2UgbWVtb3J5IGNvcGllcy4gVGhlIG9ubHkgaW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2UgaXMgdmlhIGBzeXNmc19lbWl0YCwgd2hpY2ggY29uc3RydWN0cyBzdHJpbmdzLiBUaGUgZGF0YSB0eXBlcyBhcmUgYmFzaWMgaW50cywgYm9vbGVhbnMsIGFuZCBpbml0aWFsaXplZCBzdHJ1Y3RzLiBJIHNlZSBubyBkaXJlY3QgdGhyZWF0cy4KCk5vdyBJIGFtIGdvaW5nIHRocm91Z2ggdGhlIGNyaXRlcmlhIGZvciBLTVNBTi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9ucyBhcmU6IGRvZXMgdGhlIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IEFyZSB0aGVyZSBhbnkgYnJhbmNoaW5nIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGE/IEFyZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gRG9lcyB0aGUgY29kZSBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPwoKQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBJIGFtIGNvbmNsdWRpbmcgdGhhdCBhbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIHRoZXJlIGFyZSBubyBpbmZvLWxlYWtzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgdGh1cyBJIGFtIGNvbmZpZGVudCBpbiB0aGlzIGNvbmNsdXNpb24uIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtY29udHJvbGxlZCBMRUQgdHJpZ2dlciBvZmZsb2FkIGluZnJhc3RydWN0dXJlLCB0aGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZSwgaGFyZHdhcmUgdHJpZ2dlciB0cmFuc2l0aW9uIG5vdGlmaWNhdGlvbnMgdmlhIGEgd29ya3F1ZXVlLCBhbmQgdXBkYXRlcyBkcml2ZXJzIGluY2x1ZGluZyBpZGVhcGFkLWxhcHRvcCBhbmQgbGVkcy1jcm9zX2VjLlxuXG4xLiBObyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBidWZmZXJzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcy4gVXNlcnNwYWNlIGV4cG9zdXJlIGlzIGxpbWl0ZWQgdG8gc3RhbmRhcmQgc3lzZnNfZW1pdCBzdHJpbmcgZm9ybWF0dGluZy5cbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdCBmaWVsZHMgKGUuZy4sIHRyaWdnZXJzX2h3X2NoYW5nZWQsIGxhc3RfaHdfYnJpZ2h0bmVzcywgaHdfYnJpZ2h0bmVzcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBicmFuY2hpbmcuXG4zLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nIChzdWNoIGFzIHdvcmtxdWV1ZSBmbHVzaC9kZXN0cnVjdGlvbiBhbmQgbXV0ZXgvcndzZW0gbG9ja3MpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtY29udHJvbGxlZCBMRUQgdHJpZ2dlciBvZmZsb2FkIGluZnJhc3RydWN0dXJlLCB0aGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZSwgaGFyZHdhcmUgdHJpZ2dlciB0cmFuc2l0aW9uIG5vdGlmaWNhdGlvbnMgdmlhIGEgd29ya3F1ZXVlLCBhbmQgdXBkYXRlcyBkcml2ZXJzIGluY2x1ZGluZyBpZGVhcGFkLWxhcHRvcCBhbmQgbGVkcy1jcm9zX2VjLlxuXG4xLiBObyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBidWZmZXJzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcy4gVXNlcnNwYWNlIGV4cG9zdXJlIGlzIGxpbWl0ZWQgdG8gc3RhbmRhcmQgc3lzZnNfZW1pdCBzdHJpbmcgZm9ybWF0dGluZy5cbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdCBmaWVsZHMgKGUuZy4sIHRyaWdnZXJzX2h3X2NoYW5nZWQsIGxhc3RfaHdfYnJpZ2h0bmVzcywgaHdfYnJpZ2h0bmVzcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBicmFuY2hpbmcuXG4zLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nIChzdWNoIGFzIHdvcmtxdWV1ZSBmbHVzaC9kZXN0cnVjdGlvbiBhbmQgbXV0ZXgvcndzZW0gbG9ja3MpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uXG5cblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjI6MjcuOTA4ODUyMTYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxOTUxNTA5NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FV19MRURTXCIsXG4gICAgXCJMRURTX0NMQVNTXCIsXG4gICAgXCJMRURTX1RSSUdHRVJTXCIsXG4gICAgXCJMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcIixcbiAgICBcIkxFRFNfVFJJR0dFUl9ORVRERVZcIixcbiAgICBcIkxFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXCIsXG4gICAgXCJJREVBUEFEX0xBUFRPUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd1wiLFxuICAgIFwibGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xcIixcbiAgICBcImxlZF90cmlnZ2VyX3NldFwiLFxuICAgIFwibGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1jb250cm9sbGVkIExFRCB0cmlnZ2VyIG9mZmxvYWQgaW5mcmFzdHJ1Y3R1cmUsIHRoZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgc3lzZnMgYXR0cmlidXRlLCBoYXJkd2FyZSB0cmlnZ2VyIHRyYW5zaXRpb24gbm90aWZpY2F0aW9ucyB2aWEgYSB3b3JrcXVldWUsIGFuZCB1cGRhdGVzIGRyaXZlcnMgaW5jbHVkaW5nIGlkZWFwYWQtbGFwdG9wIGFuZCBsZWRzLWNyb3NfZWMuXFxuXFxuMS4gTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgYnVmZmVycyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMuIFVzZXJzcGFjZSBleHBvc3VyZSBpcyBsaW1pdGVkIHRvIHN0YW5kYXJkIHN5c2ZzX2VtaXQgc3RyaW5nIGZvcm1hdHRpbmcuXFxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RydWN0IGZpZWxkcyAoZS5nLiwgdHJpZ2dlcnNfaHdfY2hhbmdlZCwgbGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJyYW5jaGluZy5cXG4zLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nIChzdWNoIGFzIHdvcmtxdWV1ZSBmbHVzaC9kZXN0cnVjdGlvbiBhbmQgbXV0ZXgvcndzZW0gbG9ja3MpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBzeXNmcyBhdHRyaWJ1dGUgKHRyaWdnZXJfbWF5X29mZmxvYWQpIGZvciBxdWVyeWFibGUgaGFyZHdhcmUtb2ZmbG9hZGVkIExFRCB0cmlnZ2VycywgdXBkYXRlcyBjb3JlIGJyaWdodG5lc3MgZ2V0L3NldCBsb2NraW5nIGFuZCB0cmlnZ2VyIHJlbW92YWwgbG9naWMsIGFuZCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gTEVEIHRyaWdnZXIgZHJpdmVycy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIExFRCBjbGFzcy90cmlnZ2VyIHN5c2ZzIGludGVyZmFjZXMgYW5kIGNvcmUgdHJpZ2dlciBsaWZlY3ljbGUgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIyOjI3LjkwODg1Njc5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NzA1MTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDA3YTVlM2M5MjExNGM3NTQ1MzE3MmE5NDUyYWI3YTI1YmMzNGI1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjIyOjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcXG5pbmRleCBkNGM5MThjYzExYTEyLi45NGMzMzFkOWM0MTA1IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcXG5AQCAtNzgsNiArNzgsMzEgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdCh3aGljaCB3b3VsZCBvZnRlbiBiZSBjb25maWd1cmVkIGluIHRoZSBkZXZpY2UgdHJlZSBmb3IgdGhlXFxuIFxcdFxcdGhhcmR3YXJlKS5cXG4gXFxuK1doYXQ6XFx0XFx0L3N5cy9jbGFzcy9sZWRzL1xcdTAwM2NsZWRcXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRcXG4rRGF0ZTpcXHRcXHRTZXB0ZW1iZXIgMjAyNlxcbitLZXJuZWxWZXJzaW9uOlxcdDcuNFxcbitDb250YWN0OlxcdGxpbnV4LWxlZHNAdmdlci5rZXJuZWwub3JnXFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHROYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cXG4rXFx0XFx0U3VjaCB0cmlnZ2VycyBhcmUgYWxzbyBjYWxsZWQgXFxcImhhcmR3YXJlIGNvbnRyb2wgdHJpZ2dlclxcXCIgaW4gc29tZVxcbitcXHRcXHRjb250ZXh0LlxcbitcXG4rXFx0XFx0T25seSBleGlzdHMgd2hlbiB0aGUgTEVEIHN1cHBvcnRzIHRyaWdnZXIgb2ZmbG9hZC5cXG4rXFxuK1xcdFxcdFJlYWRpbmcgdGhpcyBmaWxlIHJldHVybnMgYSBsaXN0IG9mIHRyaWdnZXJzIHRoYXQgYXJlIGNhcGFibGUgdG9cXG4rXFx0XFx0YmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWVcXG4rXFx0XFx0aW5kaWNhdGUgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHRyaWdnZXI6XFxuK1xcbitcXHRcXHQtIGBmb29fdHJpZ2dlcmA6IHRoZSB0cmlnZ2VyIGlzIG5vdCBzZWxlY3RlZC5cXG4rXFx0XFx0LSBgXFx1MDAzY2Zvb190cmlnZ2VyXFx1MDAzZWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkLCBidXQgZmFsbHMgYmFjayB0b1xcbitcXHRcXHQgIHNvZnR3YXJlIGJsaW5rIGZvciBzb21lIHJlYXNvbiAoZS5nLiwgaW5jb21wYXRpYmxlIHRyaWdnZXJcXG4rXFx0XFx0ICBwYXJhbWV0ZXJzKVxcbitcXHRcXHQtIGBbZm9vX3RyaWdnZXJdYDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQgYW5kIG9mZmxvYWRlZCB0b1xcbitcXHRcXHQgIGhhcmR3YXJlLlxcbitcXG4rXFx0XFx0VGhlIFxcXCJuZXRkZXZcXFwiIHRyaWdnZXIgYWxzbyBwcm92aWRlcyBhIGN1c3RvbSBhdHRyaWJ1dGUgdG9cXG4rXFx0XFx0aW5kaWNhdGUgaXRzIHN0YXRlLCBzZWUgYC9zeXMvY2xhc3MvbGVkcy9cXHUwMDNjbGVkXFx1MDAzZS9vZmZsb2FkZWRgLlxcbitcXG4gV2hhdDpcXHRcXHQvc3lzL2NsYXNzL2xlZHMvXFx1MDAzY2xlZFxcdTAwM2UvaW52ZXJ0ZWRcXG4gRGF0ZTpcXHRcXHRKYW51YXJ5IDIwMTFcXG4gS2VybmVsVmVyc2lvbjpcXHQyLjYuMzhcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXYgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxcbmluZGV4IGVkNDZiMzdhYjhhMjguLmE1MTQ2ZWExZTNlNjEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxcbkBAIC03NSw2ICs3NSw5IEBAIERlc2NyaXB0aW9uOlxcbiBcXHRcXHRJZiAxLCB0aGUgTEVEIGJsaW5raW5nIGluIHJlcXVlc3RlZCBtb2RlIGlzIG9mZmxvYWRlZCB0b1xcbiBcXHRcXHRoYXJkd2FyZS5cXG4gXFxuK1xcdFxcdExFRCB0cmlnZ2VyIGNvcmUgYWxzbyBwcm92aWRlcyBhIGdlbmVyaWMgYXR0cmlidXRlIGZvciB0aGlzXFxuK1xcdFxcdHB1cnBvc2UsIHNlZSBgL3N5cy9jbGFzcy9sZWRzL1xcdTAwM2NsZWRcXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRgLlxcbitcXG4gV2hhdDpcXHRcXHQvc3lzL2NsYXNzL2xlZHMvXFx1MDAzY2xlZFxcdTAwM2UvbGlua18xMFxcbiBEYXRlOlxcdFxcdEp1biAyMDIzXFxuIEtlcm5lbFZlcnNpb246XFx0Ni41XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxcbmluZGV4IDM5MTM5NjZjZmRhYzAuLmFkYmM1N2I5ZjQ5YzMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0XFxuQEAgLTI0Miw2ICsyNDIsOSBAQCBvcHMgYW5kIG5lZWRzIHRvIGRlY2xhcmUgc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIHN1cHBvcnRlZCB0cmlnZ2Vycy5cXG4gXFxuIFdpdGggaHcgY29udHJvbCB3ZSByZWZlciB0byB0aGUgTEVEIGRyaXZlbiBieSBoYXJkd2FyZS5cXG4gXFxuK0Egc3lzZnMgYXR0cmlidXRlIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBpcyBwcm92aWRlZCBmb3IgdXNlcnNwYWNlIHRvXFxuK3F1ZXJ5IHN1cHBvcnRlZCB0cmlnZ2VycyBhbmQgdGhlaXIgc3RhdGVzLlxcbitcXG4gTEVEIGRyaXZlciBtdXN0IGRlZmluZSB0aGUgZm9sbG93aW5nIHZhbHVlIHRvIHN1cHBvcnQgaHcgY29udHJvbDpcXG4gXFxuICAgICAtIGh3X2NvbnRyb2xfdHJpZ2dlcjpcXG5AQCAtMjk4LDYgKzMwMSwxNSBAQCBMRUQgZHJpdmVyIG11c3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgQVBJIHRvIHN1cHBvcnQgaHcgY29udHJvbDpcXG4gICAgICAgICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGRldmljZSBvciBOVUxMIGlmIG5vdGhpbmdcXG4gICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBhdHRhY2hlZC5cXG4gXFxuK0xFRCB0cmlnZ2VyIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gaW5kaWNhdGUgaHcgY29udHJvbDpcXG4rICAgIC0gb2ZmbG9hZGVkOlxcbisgICAgICAgICAgICAgICAgcmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0cmlnZ2VyIGlzIGN1cnJlbnRseVxcbisgICAgICAgICAgICAgICAgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLlxcbitcXG4rICAgICAgICAgICAgICAgIElmIGEgdHJpZ2dlciBkb2Vzbid0IGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLCB0aGUgZGVmYXVsdFxcbisgICAgICAgICAgICAgICAgdmFsdWUgd2lsbCBiZSB0cnVlIGZvciBwcml2YXRlIHRyaWdnZXJzIGFuZCBmYWxzZSBmb3IgZ2VuZXJpY1xcbisgICAgICAgICAgICAgICAgb25lcy5cXG4rXFxuIExFRCBkcml2ZXIgY2FuIGFjdGl2YXRlIGFkZGl0aW9uYWwgbW9kZXMgYnkgZGVmYXVsdCB0byB3b3JrYXJvdW5kIHRoZVxcbiBpbXBvc3NpYmlsaXR5IG9mIHN1cHBvcnRpbmcgZWFjaCBkaWZmZXJlbnQgbW9kZSBvbiB0aGUgc3VwcG9ydGVkIHRyaWdnZXIuXFxuIEV4YW1wbGVzIGFyZSBoYXJkY29kaW5nIHRoZSBibGluayBzcGVlZCB0byBhIHNldCBpbnRlcnZhbCwgZW5hYmxlIHNwZWNpYWxcXG5AQCAtMzExLDkgKzMyMyw2OSBAQCB0aGUgZW5kIHVzZSBod19jb250cm9sX3NldCB0byBhY3RpdmF0ZSBodyBjb250cm9sLlxcbiBBIHRyaWdnZXIgY2FuIHVzZSBod19jb250cm9sX2dldCB0byBjaGVjayBpZiBhIExFRCBpcyBhbHJlYWR5IGluIGh3IGNvbnRyb2xcXG4gYW5kIGluaXQgdGhlaXIgZmxhZ3MuXFxuIFxcbitBbHRlcm5hdGl2ZWx5LCBhIHByaXZhdGUgdHJpZ2dlciBjYW4gYmUgaW1wbGVtZW50ZWQgYWxvbmcgd2l0aCB0aGUgTEVEIGRyaXZlciBpZlxcbit0aGUgTEVEJ3MgaGFyZHdhcmUgY29udHJvbCBkb2Vzbid0IGZpdCBhbnkgZ2VuZXJpYyB0cmlnZ2VyLiBUbyBhc3NvY2lhdGUgdGhlXFxuK3ByaXZhdGUgdHJpZ2dlciB3aXRoIHRoZSBMRUQgY2xhc3NkZXYsIHRoZWlyIGB0cmlnZ2VyX3R5cGVgIG11c3QgYmUgdGhlIHNhbWUuIFRvXFxuK2RlY2xhcmUgdGhhdCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHByb3ZpZGVzIGhhcmR3YXJlIGNvbnRyb2wgZm9yIHRoZSBhc3NvY2lhdGVkXFxuK0xFRCBjbGFzc2Rldiwgc2V0IHRoZSBgaHdfY29udHJvbF90cmlnZ2VyYCBzdHJpbmcgdG8gdGhlIHRyaWdnZXIncyBuYW1lLiBTaW5jZVxcbitib3RoIHRoZSBMRUQgY2xhc3NkZXYgYW5kIHRoZSBwcml2YXRlIHRyaWdnZXIgYXJlIGluIHRoZSBzYW1lIExFRCBkcml2ZXIsIGl0J3NcXG4rbm90IG5lY2Vzc2FyeSBmb3IgdGhlbSB0byBjb29yZGluYXRlIHZpYSBgaHdfY29udHJvbF8qYCBjYWxsYmFja3MuXFxuK1xcbiBXaGVuIHRoZSBMRUQgaXMgaW4gaHcgY29udHJvbCwgbm8gc29mdHdhcmUgYmxpbmsgaXMgcG9zc2libGUgYW5kIGRvaW5nIHNvXFxuIHdpbGwgZWZmZWN0aXZlbHkgZGlzYWJsZSBodyBjb250cm9sLlxcbiBcXG4rSGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvblxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitTb21lIGhhcmR3YXJlIGNhbiBhdXRvbm9tb3VzbHkgYWN0aXZhdGUvZGVhY3RpdmF0ZSBoYXJkd2FyZSBjb250cm9sLiBBZnRlciB0aGF0LFxcbit0aGUgTEVEIGhhcmR3YXJlIG5vdGlmaWVzIHRoZSBMRUQgZHJpdmVyLlxcbitcXG4rSWYgdGhlIGRyaXZlciBjYW4gZGV0ZWN0IHN1Y2ggdHJhbnNpdGlvbnMgYW5kIHRodXMgd2FudHMgdG8gbm90aWZ5IHRoZSBMRUQgY29yZVxcbit0byB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciB0aGVuIHRoZSBgTEVEX1RSSUdfSFdfQ0hBTkdFRGAgZmxhZyBtdXN0IGJlIHNldCBpblxcbitmbGFncyBiZWZvcmUgcmVnaXN0ZXJpbmcuIFRvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIGFjY29yZGluZ2x5LCBjYWxsXFxuK2BsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBvbiB0aGUgTEVEIGNsYXNzZGV2LlxcbitcXG4rVGhpcyBjYXBhYmlsaXR5IGlzIHJlc3RyaWN0ZWQgdG8gdGhlIExFRCBkZXZpY2UncyBwcml2YXRlIHRyaWdnZXIuIFRoZSBwcml2YXRlXFxuK3RyaWdnZXIgbXVzdCBoYXZlIGJlZW4gcHJvcGVybHkgcmVnaXN0ZXJlZCAoc2VlIGFib3ZlKSBhbmQgbmFtZWQgYWZ0ZXJcXG4rYGh3X2NvbnRyb2xfdHJpZ2dlcmAuXFxuK1xcbitPbmx5IHR3byB0cmFuc2l0aW9ucyBhcmUgZGVmaW5lZDpcXG4rXFxuKy0gXFxcIm5vbmVcXFwiID1cXHUwMDNlIHByaXZhdGUgdHJpZ2dlcjpcXG4rICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sXFxuKyAgICAgICAgYW5kIHdoZW4gXFxcIm5vbmVcXFwiIChpLmUuLCBubyB0cmlnZ2VyKSBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiB0aGUgcHJpdmF0ZVxcbisgICAgICAgIHRyaWdnZXIgaXMgYWxyZWFkeSBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseVxcbisgICAgICAgIGEgbm8tb3AuXFxuK1xcbisgICAgICAgIFRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXNcXG4rICAgICAgICBub3JtYWwuXFxuK1xcbisgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlXFxuKyAgICAgICAgYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBjdXJyZW50bHkgaW4gaGFyZHdhcmVcXG4rICAgICAgICBjb250cm9sLlxcbitcXG4rICAgICAgICBJZiBlcnJvciBvY2N1cnMgaW4gdGhlIGFjdGl2YXRpb24gc2VxdWVuY2UsIHRoZSBMRUQgVHJpZ2dlciBjb3JlIHJldmVydHNcXG4rICAgICAgICB0aGUgZWZmZWN0aXZlIHRyaWdnZXIgdG8gXFxcIm5vbmVcXFwiLlxcbitcXG4rLSBwcml2YXRlIHRyaWdnZXIgPVxcdTAwM2UgXFxcIm5vbmVcXFwiXFxuKyAgICAgICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGhhcmR3YXJlIGF1dG9ub21vdXNseSBkZWFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sXFxuKyAgICAgICAgYW5kIHdoZW4gdGhlIHByaXZhdGUgdHJpZ2dlciBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiBcXFwibm9uZVxcXCIgKGkuZS4sIG5vXFxuKyAgICAgICAgdHJpZ2dlcikgaXMgYWN0aXZlIHdoZW4gdGhlIG1ldGhvZCBpcyBjYWxsZWQsIHRoaXMgaXMgZXNzZW50aWFsbHkgYVxcbisgICAgICAgIG5vLW9wLlxcbitcXG4rICAgICAgICBUaGUgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXNcXG4rICAgICAgICBub3JtYWwsIGV4Y2VwdCB0aGF0IHRoZSBjdXJyZW50IExFRCBicmlnaHRuZXNzIGlzIHJldGFpbmVkLiBUaGUgcmVhc29uXFxuKyAgICAgICAgZm9yIGtlZXBpbmcgdGhlIGJyaWdodG5lc3MgdW5jaGFuZ2VkIGlzIHRoYXQgc29tZSBoYXJkd2FyZSBtYXkgY2hvb3NlIGFcXG4rICAgICAgICBzcGVjaWZpYyBicmlnaHRuZXNzIGluc3RlYWQgb2Ygc2ltcGx5IHR1cm5pbmcgb2ZmIHRoZSBMRUQgYWZ0ZXJcXG4rICAgICAgICBhdXRvbm9tb3VzbHkgZGVhY3RpdmF0aW5nIGhhcmR3YXJlIGNvbnRyb2wuXFxuK1xcbisgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlXFxuKyAgICAgICAgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGV2ZW4gaWYgdGhlIGhhcmR3YXJlIGlzIG5vdCBjdXJyZW50bHkgaW4gaGFyZHdhcmVcXG4rICAgICAgICBjb250cm9sLlxcbitcXG4rSWYgdGhlIGN1cnJlbnQgdHJpZ2dlciBpcyBuZWl0aGVyIHRoZSBwcml2YXRlIHRyaWdnZXIgbm9yIFxcXCJub25lXFxcIiwgbm8gdHJhbnNpdGlvblxcbit3aWxsIGJlIG1hZGUuXFxuK1xcbiBLbm93biBJc3N1ZXNcXG4gPT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcXG5pbmRleCBhNTFiMGVkNTM4ODY0Li4zYjQzOGQ4ZGE1ZTBjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xcbkBAIC0yNywyOSArMjcsMTkgQEAgc3RhdGljIExJU1RfSEVBRChsZWRzX2xvb2t1cF9saXN0KTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTtcXG4gXFxuLXN0YXRpYyBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuLXtcXG4tI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXFxuLVxcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4tXFx0cmV0dXJuIGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyIFxcdTAwMjZcXHUwMDI2IGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyLVxcdTAwM2V0cmlnZ2VyX3R5cGU7XFxuLSNlbHNlXFxuLVxcdHJldHVybiBmYWxzZTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIHtcXG4gXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4gXFx0dW5zaWduZWQgaW50IGJyaWdodG5lc3M7XFxuIFxcbi1cXHRpZiAobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXFxuLVxcdFxcdHJldHVybiAtRU5PREFUQTtcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZWxlZF9hY2Nlc3MpIHtcXG4rXFx0XFx0aWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNlbGVkX2FjY2Vzcyk7XFxuLVxcdGxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7XFxuLVxcdGJyaWdodG5lc3MgPSBsZWRfY2Rldi1cXHUwMDNlYnJpZ2h0bmVzcztcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNlbGVkX2FjY2Vzcyk7XFxuK1xcdFxcdGxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7XFxuK1xcdFxcdGJyaWdodG5lc3MgPSBsZWRfY2Rldi1cXHUwMDNlYnJpZ2h0bmVzcztcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGJyaWdodG5lc3MpO1xcbiB9XFxuQEAgLTc0LDYgKzY0LDkgQEAgc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIFxcbiBcXHRpZiAoc3RhdGUgPT0gTEVEX09GRilcXG4gXFx0XFx0bGVkX3RyaWdnZXJfcmVtb3ZlKGxlZF9jZGV2KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChsZWRfY2Rldik7XFxuK1xcbiBcXHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIHN0YXRlKTtcXG4gXFxuIFxcdHJldCA9IHNpemU7XFxuQEAgLTEwMyw4ICs5NiwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0ge1xcbiBcXHRcXHUwMDI2YmluX2F0dHJfdHJpZ2dlcixcXG4gXFx0TlVMTCxcXG4gfTtcXG4rXFxuK3N0YXRpYyBERVZJQ0VfQVRUUl9STyh0cmlnZ2VyX21heV9vZmZsb2FkKTtcXG4rc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZF90cmlnZ2VyX2F0dHJzW10gPSB7XFxuK1xcdFxcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIsXFxuK1xcdE5VTExcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bW9kZV90IGxlZF90cmlnZ2VyX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGludCBpZHgpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaik7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuK1xcbitcXHRpZiAoYXR0ciA9PSBcXHUwMDI2ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyKVxcbitcXHRcXHRyZXR1cm4gbGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA/IGF0dHItXFx1MDAzZW1vZGUgOiAwO1xcbitcXG4rXFx0cmV0dXJuIGF0dHItXFx1MDAzZW1vZGU7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxlZF90cmlnZ2VyX2dyb3VwID0ge1xcbiBcXHQuYmluX2F0dHJzID0gbGVkX3RyaWdnZXJfYmluX2F0dHJzLFxcbitcXHQuYXR0cnMgPSBsZWRfdHJpZ2dlcl9hdHRycyxcXG4rXFx0LmlzX3Zpc2libGUgPSBsZWRfdHJpZ2dlcl9pc192aXNpYmxlLFxcbiB9O1xcbiAjZW5kaWZcXG4gXFxuQEAgLTU5Niw2ICs2MTEsOSBAQCBpbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuIFxcdGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KGxlZF9jZGV2KTtcXG4gI2VuZGlmXFxuIFxcbitcXHRpZiAobGVkX2NkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRClcXG4rXFx0XFx0bGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKGxlZF9jZGV2KTtcXG4rXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZWxlZF9hY2Nlc3MpO1xcbiBcXG4gXFx0ZGV2X2RiZyhwYXJlbnQsIFxcXCJSZWdpc3RlcmVkIGxlZCBkZXZpY2U6ICVzXFxcXG5cXFwiLFxcbkBAIC02MTYsNiArNjM0LDkgQEAgdm9pZCBsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4gXFx0aWYgKElTX0VSUl9PUl9OVUxMKGxlZF9jZGV2LVxcdTAwM2VkZXYpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRpZiAobGVkX2NkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRClcXG4rXFx0XFx0bGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKGxlZF9jZGV2KTtcXG4rXFxuICNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbiBcXHRkb3duX3dyaXRlKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4gXFx0aWYgKGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcXG5pbmRleCBiMTIyMzIxOGJkYTExLi5hOWQ5OTJhODg2MTYxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xcbkBAIC03LDkgKzcsMTMgQEBcXG4gICogQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSBcXHUwMDNjcnB1cmRpZUBvcGVuZWRoYW5kLmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvY2tkZXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuQEAgLTMzLDYgKzM3LDM0IEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcXG4gXFx0cmV0dXJuICF0cmlnLVxcdTAwM2V0cmlnZ2VyX3R5cGUgfHwgdHJpZy1cXHUwMDNldHJpZ2dlcl90eXBlID09IGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX3R5cGU7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4rXFxuK1xcdGlmICghbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXIpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghbGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fFxcbitcXHQgICAgc3RyY21wKGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyLVxcdTAwM2VuYW1lKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyLVxcdTAwM2VvZmZsb2FkZWQpXFxuK1xcdFxcdHJldHVybiBsZWRfY2Rldi1cXHUwMDNldHJpZ2dlci1cXHUwMDNlb2ZmbG9hZGVkKGxlZF9jZGV2KTtcXG4rXFxuK1xcdGRldl93YXJuX29uY2UobGVkX2NkZXYtXFx1MDAzZWRldiwgXFxcImh3IGNvbnRyb2wgdHJpZ2dlciAlcyBkb2Vzbid0IGltcGxlbWVudCBvZmZsb2FkZWQoKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZW5hbWUpO1xcbitcXG4rXFx0LyogT3RoZXJ3aXNlIGFzc3VtZSBwcml2YXRlIHRyaWdnZXJzIGFzIGFsd2F5cyBvZmZsb2FkZWQuICovXFxuK1xcdHJldHVybiBsZWRfY2Rldi1cXHUwMDNldHJpZ2dlci1cXHUwMDNldHJpZ2dlcl90eXBlO1xcbit9XFxuK1xcbitib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuK3tcXG4rXFx0Z3VhcmQocndzZW1fcmVhZCkoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbitcXHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKTtcXG4rXFxuIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxcbiBcXHRcXHRcXHQgIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudClcXG5AQCAtMTYzLDcgKzE5NSw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXFxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlYWQpO1xcbiBcXG4gLyogQ2FsbGVyIG11c3QgZW5zdXJlIGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2sgaGVsZCAqL1xcbi1pbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXFxuK3N0YXRpYyBpbnQgX19sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcXG4rXFx0XFx0XFx0ICAgICBib29sIGh3X3RyaWdnZXJlZClcXG4ge1xcbiBcXHRjaGFyICpldmVudCA9IE5VTEw7XFxuIFxcdGNoYXIgKmVudnBbMl07XFxuQEAgLTE5NCw3ICsyMjcsMjEgQEAgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxcbiBcXHRcXHRsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9kYXRhID0gTlVMTDtcXG4gXFx0XFx0bGVkX2NkZXYtXFx1MDAzZWFjdGl2YXRlZCA9IGZhbHNlO1xcbiBcXHRcXHRsZWRfY2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkxFRF9JTklUX0RFRkFVTFRfVFJJR0dFUjtcXG4tXFx0XFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEhhcmR3YXJlIG1heSBoYXZlIHNlbGVjdGVkIGEgbmV3IGJyaWdodG5lc3MgbGV2ZWwgZHVyaW5nIGl0c1xcbitcXHRcXHQgKiBoYXJkd2FyZSBjb250cm9sIHRyYW5zaXRpb24sIHNvIG9ubHkgcmVzZXQgYnJpZ2h0bmVzcyBpZiB3ZVxcbitcXHRcXHQgKiBhcmUgc3dpdGNoaW5nIHRvIGFub3RoZXIgdHJpZ2dlciBvciBpZiB0aGUgc3dpdGNoaW5nIGlzIG5vdFxcbitcXHRcXHQgKiBoYXJkd2FyZSB0cmlnZ2VyZWQuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBlcnJvciBwYXRoLCBhcyBydW5uaW5nXFxuK1xcdFxcdCAqIGludG8gdGhlIGVycm9yIHBhdGggaW1wbGllcyBhIG5vbmUgPVxcdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyXFxuK1xcdFxcdCAqIHRyYW5zaXRpb24uIFRoaXMgaGludHMgdGhhdCB0aGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGVcXG4rXFx0XFx0ICogdHJpZ2dlciBtdXN0IGhhdmUgc29tZSBmdW5kYW1lbnRhbCBidWdzLCBzbyBkb24ndCBib3RoZXJcXG4rXFx0XFx0ICogbGVhdmluZyB0aGUgTEVEIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0cmlnIHx8ICFod190cmlnZ2VyZWQpXFxuK1xcdFxcdFxcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7XFxuIFxcdH1cXG4gXFx0aWYgKHRyaWcpIHtcXG4gXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ0cmlnLVxcdTAwM2VsZWRkZXZfbGlzdF9sb2NrKTtcXG5AQCAtMjU4LDYgKzMwNSwxMSBAQCBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuK1xcbitpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXFxuK3tcXG4rXFx0cmV0dXJuIF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCB0cmlnLCBmYWxzZSk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0KTtcXG4gXFxuIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbkBAIC0yNjgsNiArMzIwLDE1IEBAIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZSk7XFxuIFxcbit2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdGd1YXJkKHJ3c2VtX3dyaXRlKShcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfbG9jayk7XFxuK1xcbitcXHRpZiAoX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSlcXG4rXFx0XFx0bGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbCk7XFxuK1xcbiBzdGF0aWMgYm9vbCBsZWRfbWF0Y2hfZGVmYXVsdF90cmlnZ2VyKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXFxuIHtcXG5AQCAtMzEzLDYgKzM3NCwzMiBAQCB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KTtcXG4gXFxuK3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuK3tcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFx0c3RydWN0IGxlZF90cmlnZ2VyICp0cmlnO1xcbitcXHRib29sIGhpdCwgb2ZmbG9hZGVkO1xcbitcXHRpbnQgbGVuO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNlbGVkX2FjY2Vzcyk7XFxuK1xcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4rXFxuK1xcdHRyaWcgPSBsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcjtcXG4rXFxuK1xcdG9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XFxuK1xcdGhpdCA9IG9mZmxvYWRlZCB8fCAodHJpZyBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIHRyaWctXFx1MDAzZW5hbWUpKTtcXG4rXFxuK1xcdC8qIFtvZmZsb2FkZWRdIFxcdTAwM2NhY3RpdmVfYnV0X25vdF9vZmZsb2FkZWRcXHUwMDNlIGluYWN0aXZlICovXFxuK1xcdGxlbiA9IHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXMlcyVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgb2ZmbG9hZGVkID8gXFxcIltcXFwiIDogKGhpdCA/IFxcXCJcXHUwMDNjXFxcIiA6IFxcXCJcXFwiKSxcXG4rXFx0XFx0XFx0IGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3RyaWdnZXIsXFxuK1xcdFxcdFxcdCBvZmZsb2FkZWQgPyBcXFwiXVxcXCIgOiAoaGl0ID8gXFxcIlxcdTAwM2VcXFwiIDogXFxcIlxcXCIpKTtcXG4rXFxuK1xcdHJldHVybiBsZW47XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwodHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KTtcXG4rXFxuIC8qIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqL1xcbiBcXG4gaW50IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcXG5AQCAtNDAzLDYgKzQ5MCw4OCBAQCBpbnQgZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XFxuIFxcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbitcXG4rc3RhdGljIHZvaWQgbGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKVxcbit7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcikge1xcbitcXHRcXHQvKiBcXFwibm9uZVxcXCIgPVxcdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyLiAqL1xcbitcXHRcXHRpZiAoYWN0aXZhdGUpXFxuK1xcdFxcdFxcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBoY190cmlnLCB0cnVlKTtcXG4rXFx0fSBlbHNlIGlmIChsZWRfY2Rldi1cXHUwMDNldHJpZ2dlciA9PSBoY190cmlnKSB7XFxuK1xcdFxcdC8qIHByaXZhdGUgdHJpZ2dlciA9XFx1MDAzZSBcXFwibm9uZVxcXCIuICovXFxuK1xcdFxcdGlmICghYWN0aXZhdGUpXFxuK1xcdFxcdFxcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMLCB0cnVlKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogT3RoZXIgdHJpZ2dlciBpcyBhY3RpdmUuICovXFxuK1xcdFxcdGRldl9kYmcobGVkX2NkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIklnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZVxcXCIsXFxuK1xcdFxcdFxcdGFjdGl2YXRlID8gXFxcImFjdGl2YXRlXFxcIiA6IFxcXCJkZWFjdGl2YXRlXFxcIiwgaGNfdHJpZy1cXHUwMDNlbmFtZSxcXG4rXFx0XFx0XFx0bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXItXFx1MDAzZW5hbWUpO1xcbitcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRkZXZfd2FybihsZWRfY2Rldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvICVzICVzIGluIGh3IGNvbnRyb2wgdHJhbnNpdGlvbjogJWRcXFwiLFxcbitcXHRcXHRcXHQgYWN0aXZhdGUgPyBcXFwiYWN0aXZhdGVcXFwiIDogXFxcImRlYWN0aXZhdGVcXFwiLCBoY190cmlnLVxcdTAwM2VuYW1lLCBlcnIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9od19jb250cm9sX2NoYW5nZWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGVkX2NsYXNzZGV2LCB0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspO1xcbitcXHRib29sIGFjdGl2YXRlID0gUkVBRF9PTkNFKGxlZF9jZGV2LVxcdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkKTtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCBcXHUwMDI2dHJpZ2dlcnNfbGlzdF9sb2NrKSB7XFxuK1xcdFxcdHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZztcXG4rXFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodHJpZywgXFx1MDAyNnRyaWdnZXJfbGlzdCwgbmV4dF90cmlnKSB7XFxuK1xcdFxcdFxcdGlmICh0cmlnLVxcdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfdHlwZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIXN0cmNtcCh0cmlnLVxcdTAwM2VuYW1lLCBsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyKSkge1xcbitcXHRcXHRcXHRcXHRndWFyZChyd3NlbV93cml0ZSkoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2VyX2xvY2spO1xcbitcXG4rXFx0XFx0XFx0XFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGRldl9lcnIobGVkX2NkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFxcIiVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxcXG5cXFwiLFxcbitcXHRcXHRfX2Z1bmNfXywgbGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcik7XFxuK31cXG4rXFxuK3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSlcXG4re1xcbitcXHQvKiBSZXN0cmljdGVkIHRvIHByaXZhdGUgdHJpZ2dlcnMuICovXFxuK1xcdGlmIChXQVJOX09OKCEobGVkX2NkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRCkgfHxcXG4rXFx0XFx0ICAgICFsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8ICFsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl90eXBlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0V1JJVEVfT05DRShsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZCwgYWN0aXZhdGUpO1xcbitcXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XFxuK1xcbit2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmxlZF9jZGV2LVxcdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmssIGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZCk7XFxuK1xcbit2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRkaXNhYmxlX3dvcmtfc3luYyhcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKTtcXG4rXFxuKyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXFxuK1xcbiAvKiBTaW1wbGUgTEVEIFRyaWdnZXIgSW50ZXJmYWNlICovXFxuIFxcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jXFxuaW5kZXggMTg0NGQwY2Q1ZjUyOC4uNmRiODNkMDE1Mjc3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcXG5AQCAtODUsMTIgKzg1LDE4IEBAIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4gXFx0cmV0dXJuIGNyb3NfZWNfbGVkX3NlbmRfY21kKHByaXYtXFx1MDAzZWNyb3NfZWMsIFxcdTAwMjZhcmcpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGNyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgY3Jvc19lY19sZWRfdHJpZ2dlciA9IHtcXG4gXFx0Lm5hbWUgPSBcXFwiY2hyb21lb3MtYXV0b1xcXCIsXFxuIFxcdC50cmlnZ2VyX3R5cGUgPSBcXHUwMDI2Y3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlLFxcbiBcXHQuYWN0aXZhdGUgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX2FjdGl2YXRlLFxcbitcXHQub2ZmbG9hZGVkID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jXFxuaW5kZXggZWQ2YTQ3YmJiNDRmOS4uMzJkNDBkMTc2ZDNmMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jXFxuQEAgLTE5NSwxMCArMTk1LDE2IEBAIHN0YXRpYyB2b2lkIG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpXFxuIFxcdFxcdFxcdGVycik7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldilcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBvbW5pYV9od190cmlnZ2VyID0ge1xcbiBcXHQubmFtZVxcdFxcdD0gXFxcIm9tbmlhLW1jdVxcXCIsXFxuIFxcdC5hY3RpdmF0ZVxcdD0gb21uaWFfaHd0cmlnX2FjdGl2YXRlLFxcbiBcXHQuZGVhY3RpdmF0ZVxcdD0gb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUsXFxuK1xcdC5vZmZsb2FkZWRcXHQ9IG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQsXFxuIFxcdC50cmlnZ2VyX3R5cGVcXHQ9IFxcdTAwMjZvbW5pYV9od190cmlnZ2VyX3R5cGUsXFxuIH07XFxuIFxcbkBAIC0yNTEsNiArMjU3LDcgQEAgc3RhdGljIGludCBvbW5pYV9sZWRfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IG9tbmlhX2xlZCAqbGVkLFxcbiBcXHQgKiBieSBMRUQgY2xhc3MgZnJvbSB0aGUgbGludXgsZGVmYXVsdC10cmlnZ2VyIHByb3BlcnR5LlxcbiBcXHQgKi9cXG4gXFx0Y2Rldi1cXHUwMDNlZGVmYXVsdF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xcbitcXHRjZGV2LVxcdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7XFxuIFxcbiBcXHQvKiBQdXQgdGhlIExFRCBpbnRvIHNvZnR3YXJlIG1vZGUgKi9cXG4gXFx0cmV0ID0gb21uaWFfY21kX3dyaXRlX3U4KGNsaWVudCwgT01OSUFfQ01EX0xFRF9NT0RFLCBPTU5JQV9DTURfTEVEX01PREVfTEVEKGxlZC1cXHUwMDNlcmVnKSB8XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLmggYi9kcml2ZXJzL2xlZHMvbGVkcy5oXFxuaW5kZXggYmVlNDY2NTFlMDY4Zi4uYmRhYzIzMzYwMTJlNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy5oXFxuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxcbkBAIC0yNyw4ICsyNywxOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBzc2l6ZV90IGxlZF90cmlnZ2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXFxuIFxcdFxcdFxcdGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCk7XFxuK3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpO1xcbiBcXG4gZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbGVkc19saXN0X2xvY2s7XFxuIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGxlZHNfbGlzdDtcXG4gXFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuK3ZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4rdm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xcbisjZWxzZSAvKiAhQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikgeyB9XFxuKyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXFxuK1xcbiAjZW5kaWZcXHQvKiBfX0xFRFNfSF9JTkNMVURFRCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xcbmluZGV4IGMxMTI4MmE3NGI1YWMuLmExMWQwNGNlNGFiMmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcXG5AQCAtOSw2ICs5LDE2IEBAIG1lbnVjb25maWcgTEVEU19UUklHR0VSU1xcbiBcXG4gaWYgTEVEU19UUklHR0VSU1xcbiBcXG4rY29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbitcXHRib29sIFxcXCJMRUQgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbiBzdXBwb3J0XFxcIlxcbitcXHRkZWZhdWx0IExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGluaXRpYXRlZCBoYXJkd2FyZSBjb250cm9sXFxuK1xcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cXG4rXFx0ICBcXFwibm9uZVxcXCIgKGkuZS4sIG5vIHRyaWdnZXIpIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyLlxcbitcXG4rXFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLlxcbitcXG4gY29uZmlnIExFRFNfVFJJR0dFUl9USU1FUlxcbiBcXHR0cmlzdGF0ZSBcXFwiTEVEIFRpbWVyIFRyaWdnZXJcXFwiXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcXG5pbmRleCA1YjRlOTJjMTRkYmI0Li4yZTlhZjQ4YTc0ZGJmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcXG4rKysgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXFxuQEAgLTc5OCwxMCArNzk4LDE4IEBAIHN0YXRpYyB2b2lkIG5ldGRldl90cmlnX2RlYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuIFxcdGtmcmVlKHRyaWdnZXJfZGF0YSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG5ldGRldl90cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEgPSBsZWRfZ2V0X3RyaWdnZXJfZGF0YShsZWRfY2Rldik7XFxuK1xcbitcXHRyZXR1cm4gdHJpZ2dlcl9kYXRhLVxcdTAwM2Vod19jb250cm9sO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIG5ldGRldl9sZWRfdHJpZ2dlciA9IHtcXG4gXFx0Lm5hbWUgPSBcXFwibmV0ZGV2XFxcIixcXG4gXFx0LmFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfYWN0aXZhdGUsXFxuIFxcdC5kZWFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZSxcXG4rXFx0Lm9mZmxvYWRlZCA9IG5ldGRldl90cmlnX29mZmxvYWRlZCxcXG4gXFx0Lmdyb3VwcyA9IG5ldGRldl90cmlnX2dyb3VwcyxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcXG5pbmRleCA1MTY1OTQ5OTMwNzM5Li5hOTc4NTJiMGIyMjg0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcXG5AQCAtMTYsNiArMTYsNyBAQCBjb25maWcgSURFQVBBRF9MQVBUT1BcXG4gXFx0c2VsZWN0IElOUFVUX1NQQVJTRUtNQVBcXG4gXFx0c2VsZWN0IE5FV19MRURTXFxuIFxcdHNlbGVjdCBMRURTX0NMQVNTXFxuK1xcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuIFxcdGhlbHBcXG4gXFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciBMZW5vdm8gSWRlYVBhZCBuZXRib29rcyBjb250YWlucyBkcml2ZXJzIGZvclxcbiBcXHQgIHJma2lsbCBzd2l0Y2gsIGhvdGtleSwgZmFuIGNvbnRyb2wgYW5kIGJhY2tsaWdodCBjb250cm9sLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXFxuaW5kZXggODIxMzUyNDUwNGVlYi4uZjg2YzExZjUxZDBiZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xcbisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXFxuQEAgLTE0LDkgKzE0LDEyIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRvcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnRhaW5lcl9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1pLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pODA0Mi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbkBAIC0yNiw5ICsyOSwxMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sZWRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX3Byb2ZpbGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bvd2VyX3N1cHBseS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJpbnRrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZmtpbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXFx1MDAzZVxcbkBAIC0xMzQsMTAgKzEzOSwzMSBAQCBlbnVtIHtcXG4gfTtcXG4gXFxuIC8qXFxuLSAqIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgc3RhdGVzIC0gMVxcbi0gKiBGdXR1cmUga2V5Ym9hcmQgdHlwZXMgbWF5IG5lZWQgYSBuZXcgc3lzdGVtLCBpZiB0aGVyZSdzIGEgY29sbGlzaW9uXFxuLSAqIEtCRF9CTF9UUklTVEFURV9BVVRPIGhhcyBubyB3YXkgdG8gcmVwb3J0IG9yIHNldCB0aGUgYXV0byBzdGF0ZVxcbi0gKiBzbyBpdCBlZmZlY3RpdmVseSBoYXMgMyBzdGF0ZXMsIGJ1dCBuZWVkcyB0byBoYW5kbGUgNFxcbisgKiBUaGUgZW51bWVyYXRpb24gaGFzIHR3byBwdXJwb3NlczpcXG4rICogICAtIGFzIGFuIGludGVybmFsIGlkZW50aWZpZXIgZm9yIGFsbCBrbm93biB0eXBlcyBvZiBrZXlib2FyZCBiYWNrbGlnaHRcXG4rICogICAtIGFzIGEgbWFuZGF0b3J5IHBhcmFtZXRlciBvZiB0aGUgS0JMQyBjb21tYW5kXFxuKyAqXFxuKyAqIEZvciBlYWNoIHR5cGUsIHRoZSBoYXJkd2FyZSBicmlnaHRuZXNzIHZhbHVlcyBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOlxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xcbisgKiB8ICAgICAgSGFyZHdhcmUgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8ICAgIDMgfFxcbisgKiB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgIHwgICAgICB8ICAgICAgfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xcbisgKiB8IEtCRF9CTF9TVEFOREFSRCAgICAgICAgICB8ICAgICAgb2ZmIHwgIG9uIHwgIE4vQSB8ICBOL0EgfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xcbisgKiB8IEtCRF9CTF9UUklTVEFURSAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8ICBOL0EgfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xcbisgKiB8IEtCRF9CTF9UUklTVEFURV9BVVRPICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8IGF1dG8gfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xcbisgKlxcbisgKiBXZSBtYXAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgZm9yIEtCRF9CTF9UUklTVEFURV9BVVRPIGFzIGZvbGxvd3M6XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcXG4rICogfCAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgfCAgICAgICAgMCB8ICAgMSB8ICAgIDIgfFxcbisgKiB8IE9wZXJhdGlvbiAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgIHwgICAgICB8XFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcXG4rICogfCBSZWFkICAgICAgICAgICAgICAgICAgICAgfCBvZmYvYXV0byB8IGxvdyB8IGhpZ2ggfFxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXFxuKyAqIHwgV3JpdGUgICAgICAgICAgICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHxcXG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xcbiAgKi9cXG4gZW51bSB7XFxuIFxcdEtCRF9CTF9TVEFOREFSRCAgICAgID0gMSxcXG5AQCAtMTQ1LDYgKzE3MSw4IEBAIGVudW0ge1xcbiBcXHRLQkRfQkxfVFJJU1RBVEVfQVVUTyA9IDMsXFxuIH07XFxuIFxcbisjZGVmaW5lIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTU1xcdDNcXG4rXFxuICNkZWZpbmUgS0JEX0JMX1FVRVJZX1RZUEVcXHRcXHQweDFcXG4gI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfVFlQRVxcdFxcdDB4NVxcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9BVVRPX1RZUEVcXHQweDdcXG5AQCAtMjAwLDEwICsyMjgsMTQgQEAgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSB7XFxuIFxcdFxcdGJvb2wgeW1jX2VjX3RyaWdnZXIgICAgICAgOiAxO1xcbiBcXHR9IGZlYXR1cmVzO1xcbiBcXHRzdHJ1Y3Qge1xcbi1cXHRcXHRib29sIGluaXRpYWxpemVkO1xcbitcXHRcXHRpbnQgaW5pdGlhbGl6ZWQ7IC8qICAwOiBpbml0aWFsaXppb24gcGVuZGluZy9vbmdvaW5nL2ZhaWxlZFxcbitcXHRcXHRcXHRcXHQgICogXFx1MDAzZTA6IGluaXRpYWxpemlvbiBmaW5pc2hlZFxcbitcXHRcXHRcXHRcXHQgICogXFx1MDAzYzA6IHVucmVnaXN0ZXJhdGlvbiBvbmdvaW5nL2ZpbmlzaGVkXFxuK1xcdFxcdFxcdFxcdCAgKi9cXG4gXFx0XFx0aW50IHR5cGU7XFxuIFxcdFxcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkO1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbGFzdF9icmlnaHRuZXNzO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbGFzdF9od19icmlnaHRuZXNzO1xcbitcXHRcXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIHByb3RlY3RzIGJyaWdodG5lc3MgdHJhY2tpbmcgKi9cXG4gXFx0fSBrYmRfYmw7XFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdGJvb2wgaW5pdGlhbGl6ZWQ7XFxuQEAgLTE1OTIsNyArMTYyNCwyNCBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKGludCB0eXBlKVxcbiBcXHRyZXR1cm4gKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFKSB8fCAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBod19icmlnaHRuZXNzKVxcbit7XFxuK1xcdC8qIE9mZiwgbG93IG9yIGhpZ2ggKi9cXG4rXFx0aWYgKGh3X2JyaWdodG5lc3MgXFx1MDAzYz0gcHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcXG4rXFx0XFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XFxuK1xcbitcXHQvKiBBdXRvIChjb250cm9sbGVkIGJ5IEVDIGFjY29yZGluZyB0byBBTFMpLCByZXBvcnQgYXMgb2ZmICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VrYmRfYmwudHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVW5rbm93biB2YWx1ZSAqL1xcbitcXHRkZXZfd2FybihcXHUwMDI2cHJpdi1cXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVxcdTAwM2VkZXYsXFxuK1xcdFxcdCBcXFwiVW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVkXFxcIiwgaHdfYnJpZ2h0bmVzcyk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcXG4gXFx0aW50IGVycjtcXG5AQCAtMTYwNiwyMSArMTY1NSw3IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdFxcdC8qIENvbnZlcnQgcmV0dXJuZWQgdmFsdWUgdG8gYnJpZ2h0bmVzcyBsZXZlbCAqL1xcbi1cXHRcXHR2YWx1ZSA9IEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTtcXG4tXFxuLVxcdFxcdC8qIE9mZiwgbG93IG9yIGhpZ2ggKi9cXG4tXFx0XFx0aWYgKHZhbHVlIFxcdTAwM2M9IHByaXYtXFx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXFxuLVxcdFxcdFxcdHJldHVybiB2YWx1ZTtcXG4tXFxuLVxcdFxcdC8qIEF1dG8sIHJlcG9ydCBhcyBvZmYgKi9cXG4tXFx0XFx0aWYgKHZhbHVlID09IHByaXYtXFx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgKyAxKVxcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdFxcdC8qIFVua25vd24gdmFsdWUgKi9cXG4tXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnByaXYtXFx1MDAzZXBsYXRmb3JtX2RldmljZS1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHQgXFxcIlVua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlbHVcXFwiLCB2YWx1ZSk7XFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRyZXR1cm4gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpO1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBldmFsX2hhbHMocHJpdi1cXHUwMDNlYWRldi1cXHUwMDNlaGFuZGxlLCBcXHUwMDI2dmFsdWUpO1xcbkBAIC0xNjMwLDYgKzE2NjUsMTYgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gISF0ZXN0X2JpdChIQUxTX0tCRF9CTF9TVEFURV9CSVQsIFxcdTAwMjZ2YWx1ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4re1xcbitcXHRpbnQgaHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xcbitcXG4rXFx0aWYgKGh3X2JyaWdodG5lc3MgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcXG4rXFxuK1xcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTtcXG5AQCAtMTYzNyw5OSArMTY4MiwyMDcgQEAgc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFcXG4gXFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKVxcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaHdfYnJpZ2h0bmVzcylcXG4ge1xcbi1cXHRpbnQgZXJyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHZhbHVlO1xcbiBcXHRpbnQgdHlwZSA9IHByaXYtXFx1MDAzZWtiZF9ibC50eXBlO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XFxuLVxcdFxcdGlmIChicmlnaHRuZXNzIFxcdTAwM2UgcHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLm11dGV4KTtcXG4gXFxuLVxcdFxcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHxcXG4rXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XFxuK1xcdFxcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGh3X2JyaWdodG5lc3MpIHxcXG4gXFx0XFx0XFx0RklFTERfUFJFUChLQkRfQkxfQ09NTUFORF9UWVBFLCB0eXBlKSB8XFxuIFxcdFxcdFxcdEtCRF9CTF9DT01NQU5EX1NFVDtcXG4gXFx0XFx0ZXJyID0gZXhlY19rYmxjKHByaXYtXFx1MDAzZWFkZXYtXFx1MDAzZWhhbmRsZSwgdmFsdWUpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRlcnIgPSBleGVjX3NhbHMocHJpdi1cXHUwMDNlYWRldi1cXHUwMDNlaGFuZGxlLCBicmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkYpO1xcbitcXHRcXHR2YWx1ZSA9IGh3X2JyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRjtcXG4rXFx0XFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXFx1MDAzZWFkZXYtXFx1MDAzZWhhbmRsZSwgdmFsdWUpO1xcbiBcXHR9XFxuLVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XFxuK1xcdHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpXFxuK3tcXG4rXFx0aWYgKGJyaWdodG5lc3MgXFx1MDAzZSBwcml2LVxcdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBicmlnaHRuZXNzKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXFxuIHtcXG4gXFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBXaGVuIHVucmVnaXN0ZXJpbmc6IEl0IG11c3QgYmUgdGhlIHNpZGUgZWZmZWN0IG9mIExFRCB1bnJlZ2lzdHJhdGlvblxcbitcXHQgKiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSd2ZSBzZXQgTEVEX1JFVEFJTl9BVF9TSFVURE9XTlxcbitcXHQgKiB0byByZXRhaW4gbGVkX2NkZXYgYnJpZ2h0bmVzcyBsZXZlbC4gVG8gZG8gdGhlIHNhbWUgZm9yIGF1dG8gbW9kZSxcXG4rXFx0ICogZ2F0ZSBjaGFuZ2VzIGFuZCByZXR1cm4gZWFybHkuXFxuK1xcdCAqXFxuK1xcdCAqIEl0J3MgbmVlZGxlc3MgdG8gZ2F0ZSBjaGFuZ2VzIHdoZW4gaW5pdGlhbGl6aW5nLCBhcyB0aGVyZSBtYXkgYmUgYVxcbitcXHQgKiB0aW1lIG1hcmdpbiBiZXR3ZWVuIHN5c2ZzIGF0dHJpYnV0ZSBjcmVhdGlvbiBhbmQgc3RhdGUgY2hhbmdlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcXHUwMDNjIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChwcml2LCBicmlnaHRuZXNzKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cHJpdi1cXHUwMDNla2JkX2JsLm11dGV4KTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUztcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XFxuK1xcbitcXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQocHJpdiwgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlO1xcbitcXG4rc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIgPSB7XFxuK1xcdC5uYW1lID0gXFxcImlkZWFwYWQtYXV0b1xcXCIsXFxuK1xcdC50cmlnZ2VyX3R5cGUgPSBcXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGUsXFxuK1xcdC5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSxcXG4rXFx0Lm9mZmxvYWRlZCA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWQsXFxuK307XFxuK1xcbitzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZDtcXG4rXFxuK3N0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXFxuK3tcXG4rXFx0Ym9vbCBod19jb250cm9sLCBsYXN0X2h3X2NvbnRyb2w7XFxuK1xcbitcXHRpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkIHx8IHByaXYtXFx1MDAzZWtiZF9ibC50eXBlICE9IEtCRF9CTF9UUklTVEFURV9BVVRPKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRod19jb250cm9sID0gaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XFxuK1xcdGxhc3RfaHdfY29udHJvbCA9IHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xcbitcXG4rXFx0aWYgKGh3X2NvbnRyb2wgIT0gbGFzdF9od19jb250cm9sKVxcbitcXHRcXHRsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubGVkLCBod19jb250cm9sKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuIHtcXG4tXFx0aW50IGJyaWdodG5lc3M7XFxuK1xcdGludCBod19icmlnaHRuZXNzLCBicmlnaHRuZXNzO1xcbiBcXG4tXFx0aWYgKCFwcml2LVxcdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpXFxuK1xcdGlmICh1bmxpa2VseShwcml2LVxcdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXFx1MDAzYz0gMCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcXG4tXFx0aWYgKGJyaWdodG5lc3MgXFx1MDAzYyAwKVxcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5tdXRleCk7XFxuK1xcbitcXHRod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XFxuK1xcdGlmIChod19icmlnaHRuZXNzIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKGJyaWdodG5lc3MgPT0gcHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcylcXG4rXFx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XFxuK1xcdGlmIChicmlnaHRuZXNzIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuOyAvKiBSZWplY3QgaW5zYW5lIHZhbHVlcyBlYXJseS4gKi9cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IGh3X2JyaWdodG5lc3MpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xcbitcXHRpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChwcml2LCBod19icmlnaHRuZXNzKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzO1xcbiBcXG4gXFx0bGVkX2NsYXNzZGV2X25vdGlmeV9icmlnaHRuZXNzX2h3X2NoYW5nZWQoXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5sZWQsIGJyaWdodG5lc3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcXG4ge1xcbi1cXHRpbnQgYnJpZ2h0bmVzcywgZXJyO1xcbitcXHRpbnQgaHdfYnJpZ2h0bmVzcywgZXJyO1xcbiBcXG4gXFx0aWYgKCFwcml2LVxcdTAwM2VmZWF0dXJlcy5rYmRfYmwpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0aWYgKFdBUk5fT04ocHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkKSlcXG4rXFx0aWYgKFdBUk5fT04ocHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkIFxcdTAwM2UgMCkpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXG4tXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXFx1MDAzZWtiZF9ibC50eXBlKSlcXG4tXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdHByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IDA7XFxuIFxcbi1cXHRicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7XFxuLVxcdGlmIChicmlnaHRuZXNzIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIGJyaWdodG5lc3M7XFxuK1xcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVxcdTAwM2VkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VrYmRfYmwubXV0ZXgpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xcbitcXHRpZiAoaHdfYnJpZ2h0bmVzcyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBod19icmlnaHRuZXNzO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7XFxuIFxcbi1cXHRwcml2LVxcdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcXG4gXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5uYW1lICAgICAgICAgICAgICAgICAgICA9IFxcXCJwbGF0Zm9ybTo6XFxcIiBMRURfRlVOQ1RJT05fS0JEX0JBQ0tMSUdIVDtcXG4gXFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5icmlnaHRuZXNzX2dldCAgICAgICAgICA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0O1xcbiBcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLmJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQ7XFxuIFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQuZmxhZ3MgICAgICAgICAgICAgICAgICAgPSBMRURfQlJJR0hUX0hXX0NIQU5HRUQgfCBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xcbiBcXG4rXFx0c3dpdGNoIChwcml2LVxcdTAwM2VrYmRfYmwudHlwZSkge1xcbitcXHRjYXNlIEtCRF9CTF9UUklTVEFURV9BVVRPOlxcbitcXHRcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcXG4rXFxuK1xcdFxcdGlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnByaXYtXFx1MDAzZXBsYXRmb3JtX2RldmljZS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgXFxcIkNhbm5vdCBwcm92aWRlIExFRCB0cmlnZ2VyICVzIGZvciBrZXlib2FyZCBiYWNrbGlnaHRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLmZsYWdzIHw9IExFRF9UUklHX0hXX0NIQU5HRUQ7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWtiZF9ibC5sZWQudHJpZ2dlcl90eXBlID0gXFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl90eXBlO1xcbitcXHRcXHRwcml2LVxcdTAwM2VrYmRfYmwubGVkLmh3X2NvbnRyb2xfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lO1xcbitcXG4rXFx0XFx0LyogSGFyZHdhcmUgcmVtZW1iZXJzIHRoZSBsYXN0IGJyaWdodG5lc3MgbGV2ZWwsIGluY2x1ZGluZyBhdXRvIG1vZGUuICovXFxuK1xcdFxcdGlmIChod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5kZWZhdWx0X3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTtcXG4rXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEtCRF9CTF9UUklTVEFURTpcXG4rXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEtCRF9CTF9TVEFOREFSRDpcXG4rXFx0XFx0cHJpdi1cXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHQvKiBUaGlzIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGJ5IGlkZWFwYWRfY2hlY2tfZmVhdHVyZXMoKS4gKi9cXG4rXFx0XFx0dW5yZWFjaGFibGUoKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVqZWN0IGluc2FuZSB2YWx1ZXMuICovXFxuK1xcdGVyciA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4gXFx0ZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKFxcdTAwMjZwcml2LVxcdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXFx1MDAzZWRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5sZWQpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gdHJ1ZTtcXG4rXFx0cHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gMTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9leGl0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXFxuIHtcXG4tXFx0aWYgKCFwcml2LVxcdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpXFxuK1xcdGlmIChwcml2LVxcdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXFx1MDAzYz0gMClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cHJpdi1cXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gZmFsc2U7XFxuK1xcdHByaXYtXFx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IC0xO1xcbiBcXG4gXFx0bGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoXFx1MDAyNnByaXYtXFx1MDAzZWtiZF9ibC5sZWQpO1xcbiB9XFxuQEAgLTI1NDgsMTcgKzI3MDEsMzAgQEAgc3RhdGljIGludCBfX2luaXQgaWRlYXBhZF9sYXB0b3BfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRlcnIgPSBsZWRfdHJpZ2dlcl9yZWdpc3RlcihcXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEIHRyaWdnZXIgJXM6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSwgZXJyKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSBpZGVhcGFkX3dtaV9kcml2ZXJfcmVnaXN0ZXIoKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBlcnJfbGVkdHJpZztcXG4gXFxuIFxcdGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2aWRlYXBhZF9hY3BpX2RyaXZlcik7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl93bWk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl93bWk6XFxuK1xcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XFxuK2Vycl9sZWR0cmlnOlxcbitcXHRpZiAoaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpXFxuK1xcdFxcdGxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoXFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gbW9kdWxlX2luaXQoaWRlYXBhZF9sYXB0b3BfaW5pdClcXG4gXFxuQEAgLTI1NjYsNiArMjczMiw5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBpZGVhcGFkX2xhcHRvcF9leGl0KHZvaWQpXFxuIHtcXG4gXFx0cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xcbiBcXHRpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpO1xcbitcXG4rXFx0aWYgKGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkKVxcbitcXHRcXHRsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKFxcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xcbiB9XFxuIG1vZHVsZV9leGl0KGlkZWFwYWRfbGFwdG9wX2V4aXQpXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMuaCBiL2luY2x1ZGUvbGludXgvbGVkcy5oXFxuaW5kZXggYTUxNWYwNzVjMjlhMS4uOTNiM2ZkN2U1NjM2NCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy5oXFxuQEAgLTEwOSw2ICsxMDksNyBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHtcXG4gI2RlZmluZSBMRURfSU5JVF9ERUZBVUxUX1RSSUdHRVIgQklUKDIzKVxcbiAjZGVmaW5lIExFRF9SRUpFQ1RfTkFNRV9DT05GTElDVCBCSVQoMjQpXFxuICNkZWZpbmUgTEVEX01VTFRJX0NPTE9SXFx0XFx0QklUKDI1KVxcbisjZGVmaW5lIExFRF9UUklHX0hXX0NIQU5HRURcXHRCSVQoMjYpXFxuIFxcbiBcXHQvKiBzZXRfYnJpZ2h0bmVzc193b3JrIC8gYmxpbmtfdGltZXIgZmxhZ3MsIGF0b21pYywgcHJpdmF0ZS4gKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHdvcmtfZmxhZ3M7XFxuQEAgLTIzOSw2ICsyNDAsMTEgQEAgc3RydWN0IGxlZF9jbGFzc2RldiB7XFxuIFxcdHN0cnVjdCBrZXJuZnNfbm9kZVxcdCpicmlnaHRuZXNzX2h3X2NoYW5nZWRfa247XFxuICNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcXG4rXFx0Ym9vbFxcdFxcdFxcdHRyaWdnZXJzX2h3X2NoYW5nZWQ7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHRyaWdnZXJzX2h3X2NoYW5nZWRfd29yaztcXG4rI2VuZGlmXFxuK1xcbiBcXHQvKiBFbnN1cmVzIGNvbnNpc3RlbnQgYWNjZXNzIHRvIHRoZSBMRUQgY2xhc3MgZGV2aWNlICovXFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdGxlZF9hY2Nlc3M7XFxuIH07XFxuQEAgLTQ4NSw2ICs0OTEsNyBAQCBzdHJ1Y3QgbGVkX3RyaWdnZXIge1xcbiBcXHRjb25zdCBjaGFyXFx0ICpuYW1lO1xcbiBcXHRpbnRcXHRcXHQoKmFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcdHZvaWRcXHRcXHQoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4rXFx0Ym9vbFxcdFxcdCgqb2ZmbG9hZGVkKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcbiBcXHQvKiBCcmlnaHRuZXNzIHNldCBieSBsZWRfdHJpZ2dlcl9ldmVudCAqL1xcbiBcXHRlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7XFxuQEAgLTUzMyw2ICs1NDAsOSBAQCB2b2lkIGxlZF90cmlnZ2VyX2JsaW5rX29uZXNob3Qoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyLFxcbiB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4gaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTtcXG4gdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xcbit2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcXG4rXFxuK2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdHZvaWQgKnRyaWdnZXJfZGF0YSlcXG5AQCAtNTg0LDYgKzU5NCwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF9zZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgKmxlZF9nZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbiB7XFxuQEAgLTU5OCw2ICs2MTUsMTMgQEAgbGVkX3RyaWdnZXJfZ2V0X2JyaWdodG5lc3MoY29uc3Qgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKVxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTICovXFxuIFxcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGJvb2wgYWN0aXZhdGUpIHt9XFxuKyNlbmRpZlxcbitcXG4gLyogVHJpZ2dlciBzcGVjaWZpYyBlbnVtICovXFxuIGVudW0gbGVkX3RyaWdnZXJfbmV0ZGV2X21vZGVzIHtcXG4gXFx0VFJJR0dFUl9ORVRERVZfTElOSyA9IDAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIyOjI4LjM3NjE3MDI2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ5MzcxNzEyMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FV19MRURTXCIsXG4gICAgXCJMRURTX0NMQVNTXCIsXG4gICAgXCJMRURTX1RSSUdHRVJTXCIsXG4gICAgXCJMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcIixcbiAgICBcIkxFRFNfVFJJR0dFUl9ORVRERVZcIixcbiAgICBcIkxFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXCIsXG4gICAgXCJJREVBUEFEX0xBUFRPUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd1wiLFxuICAgIFwibGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZFwiLFxuICAgIFwibGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xcIixcbiAgICBcImxlZF90cmlnZ2VyX3NldFwiLFxuICAgIFwibGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBzeXNmcyBhdHRyaWJ1dGUgKHRyaWdnZXJfbWF5X29mZmxvYWQpIGZvciBxdWVyeWFibGUgaGFyZHdhcmUtb2ZmbG9hZGVkIExFRCB0cmlnZ2VycywgdXBkYXRlcyBjb3JlIGJyaWdodG5lc3MgZ2V0L3NldCBsb2NraW5nIGFuZCB0cmlnZ2VyIHJlbW92YWwgbG9naWMsIGFuZCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gTEVEIHRyaWdnZXIgZHJpdmVycy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIExFRCBjbGFzcy90cmlnZ2VyIHN5c2ZzIGludGVyZmFjZXMgYW5kIGNvcmUgdHJpZ2dlciBsaWZlY3ljbGUgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQwN2E1ZTNjOTIxMTRjNzU0NTMxNzJhOTQ1MmFiN2EyNWJjMzRiNTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjIyOjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuaW5kZXggZDRjOTE4Y2MxMWExMi4uOTRjMzMxZDljNDEwNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuQEAgLTc4LDYgKzc4LDMxIEBAIERlc2NyaXB0aW9uOlxuIFx0XHQod2hpY2ggd291bGQgb2Z0ZW4gYmUgY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZVxuIFx0XHRoYXJkd2FyZSkuXG4gXG4rV2hhdDpcdFx0L3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS90cmlnZ2VyX21heV9vZmZsb2FkXG4rRGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjZcbitLZXJuZWxWZXJzaW9uOlx0Ny40XG4rQ29udGFjdDpcdGxpbnV4LWxlZHNAdmdlci5rZXJuZWwub3JnXG4rRGVzY3JpcHRpb246XG4rXHRcdE5hbWVzIGFuZCBzdGF0ZXMgb2YgdHJpZ2dlcnMgdGhhdCBtYXkgYmUgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLlxuK1x0XHRTdWNoIHRyaWdnZXJzIGFyZSBhbHNvIGNhbGxlZCBcImhhcmR3YXJlIGNvbnRyb2wgdHJpZ2dlclwiIGluIHNvbWVcbitcdFx0Y29udGV4dC5cbitcbitcdFx0T25seSBleGlzdHMgd2hlbiB0aGUgTEVEIHN1cHBvcnRzIHRyaWdnZXIgb2ZmbG9hZC5cbitcbitcdFx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyBhIGxpc3Qgb2YgdHJpZ2dlcnMgdGhhdCBhcmUgY2FwYWJsZSB0b1xuK1x0XHRiZSBvZmZsb2FkZWQuIFRoZSBvcHRpb25hbCBicmFja2V0cyBhcm91bmQgdGhlIHRyaWdnZXIgbmFtZVxuK1x0XHRpbmRpY2F0ZSB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgdHJpZ2dlcjpcbitcbitcdFx0LSBgZm9vX3RyaWdnZXJgOiB0aGUgdHJpZ2dlciBpcyBub3Qgc2VsZWN0ZWQuXG4rXHRcdC0gYFx1MDAzY2Zvb190cmlnZ2VyXHUwMDNlYDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQsIGJ1dCBmYWxscyBiYWNrIHRvXG4rXHRcdCAgc29mdHdhcmUgYmxpbmsgZm9yIHNvbWUgcmVhc29uIChlLmcuLCBpbmNvbXBhdGlibGUgdHJpZ2dlclxuK1x0XHQgIHBhcmFtZXRlcnMpXG4rXHRcdC0gYFtmb29fdHJpZ2dlcl1gOiB0aGUgdHJpZ2dlciBpcyBzZWxlY3RlZCBhbmQgb2ZmbG9hZGVkIHRvXG4rXHRcdCAgaGFyZHdhcmUuXG4rXG4rXHRcdFRoZSBcIm5ldGRldlwiIHRyaWdnZXIgYWxzbyBwcm92aWRlcyBhIGN1c3RvbSBhdHRyaWJ1dGUgdG9cbitcdFx0aW5kaWNhdGUgaXRzIHN0YXRlLCBzZWUgYC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2Uvb2ZmbG9hZGVkYC5cbitcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2ludmVydGVkXG4gRGF0ZTpcdFx0SmFudWFyeSAyMDExXG4gS2VybmVsVmVyc2lvbjpcdDIuNi4zOFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbmluZGV4IGVkNDZiMzdhYjhhMjguLmE1MTQ2ZWExZTNlNjEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldlxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbkBAIC03NSw2ICs3NSw5IEBAIERlc2NyaXB0aW9uOlxuIFx0XHRJZiAxLCB0aGUgTEVEIGJsaW5raW5nIGluIHJlcXVlc3RlZCBtb2RlIGlzIG9mZmxvYWRlZCB0b1xuIFx0XHRoYXJkd2FyZS5cbiBcbitcdFx0TEVEIHRyaWdnZXIgY29yZSBhbHNvIHByb3ZpZGVzIGEgZ2VuZXJpYyBhdHRyaWJ1dGUgZm9yIHRoaXNcbitcdFx0cHVycG9zZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL3RyaWdnZXJfbWF5X29mZmxvYWRgLlxuK1xuIFdoYXQ6XHRcdC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvbGlua18xMFxuIERhdGU6XHRcdEp1biAyMDIzXG4gS2VybmVsVmVyc2lvbjpcdDYuNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuaW5kZXggMzkxMzk2NmNmZGFjMC4uYWRiYzU3YjlmNDljMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0XG5AQCAtMjQyLDYgKzI0Miw5IEBAIG9wcyBhbmQgbmVlZHMgdG8gZGVjbGFyZSBzcGVjaWZpYyBzdXBwb3J0IGZvciB0aGUgc3VwcG9ydGVkIHRyaWdnZXJzLlxuIFxuIFdpdGggaHcgY29udHJvbCB3ZSByZWZlciB0byB0aGUgTEVEIGRyaXZlbiBieSBoYXJkd2FyZS5cbiBcbitBIHN5c2ZzIGF0dHJpYnV0ZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgaXMgcHJvdmlkZWQgZm9yIHVzZXJzcGFjZSB0b1xuK3F1ZXJ5IHN1cHBvcnRlZCB0cmlnZ2VycyBhbmQgdGhlaXIgc3RhdGVzLlxuK1xuIExFRCBkcml2ZXIgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YWx1ZSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6XG4gXG4gICAgIC0gaHdfY29udHJvbF90cmlnZ2VyOlxuQEAgLTI5OCw2ICszMDEsMTUgQEAgTEVEIGRyaXZlciBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIEFQSSB0byBzdXBwb3J0IGh3IGNvbnRyb2w6XG4gICAgICAgICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RydWN0IGRldmljZSBvciBOVUxMIGlmIG5vdGhpbmdcbiAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IGF0dGFjaGVkLlxuIFxuK0xFRCB0cmlnZ2VyIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gaW5kaWNhdGUgaHcgY29udHJvbDpcbisgICAgLSBvZmZsb2FkZWQ6XG4rICAgICAgICAgICAgICAgIHJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdHJpZ2dlciBpcyBjdXJyZW50bHlcbisgICAgICAgICAgICAgICAgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlLlxuK1xuKyAgICAgICAgICAgICAgICBJZiBhIHRyaWdnZXIgZG9lc24ndCBpbXBsZW1lbnQgdGhpcyBjYWxsYmFjaywgdGhlIGRlZmF1bHRcbisgICAgICAgICAgICAgICAgdmFsdWUgd2lsbCBiZSB0cnVlIGZvciBwcml2YXRlIHRyaWdnZXJzIGFuZCBmYWxzZSBmb3IgZ2VuZXJpY1xuKyAgICAgICAgICAgICAgICBvbmVzLlxuK1xuIExFRCBkcml2ZXIgY2FuIGFjdGl2YXRlIGFkZGl0aW9uYWwgbW9kZXMgYnkgZGVmYXVsdCB0byB3b3JrYXJvdW5kIHRoZVxuIGltcG9zc2liaWxpdHkgb2Ygc3VwcG9ydGluZyBlYWNoIGRpZmZlcmVudCBtb2RlIG9uIHRoZSBzdXBwb3J0ZWQgdHJpZ2dlci5cbiBFeGFtcGxlcyBhcmUgaGFyZGNvZGluZyB0aGUgYmxpbmsgc3BlZWQgdG8gYSBzZXQgaW50ZXJ2YWwsIGVuYWJsZSBzcGVjaWFsXG5AQCAtMzExLDkgKzMyMyw2OSBAQCB0aGUgZW5kIHVzZSBod19jb250cm9sX3NldCB0byBhY3RpdmF0ZSBodyBjb250cm9sLlxuIEEgdHJpZ2dlciBjYW4gdXNlIGh3X2NvbnRyb2xfZ2V0IHRvIGNoZWNrIGlmIGEgTEVEIGlzIGFscmVhZHkgaW4gaHcgY29udHJvbFxuIGFuZCBpbml0IHRoZWlyIGZsYWdzLlxuIFxuK0FsdGVybmF0aXZlbHksIGEgcHJpdmF0ZSB0cmlnZ2VyIGNhbiBiZSBpbXBsZW1lbnRlZCBhbG9uZyB3aXRoIHRoZSBMRUQgZHJpdmVyIGlmXG4rdGhlIExFRCdzIGhhcmR3YXJlIGNvbnRyb2wgZG9lc24ndCBmaXQgYW55IGdlbmVyaWMgdHJpZ2dlci4gVG8gYXNzb2NpYXRlIHRoZVxuK3ByaXZhdGUgdHJpZ2dlciB3aXRoIHRoZSBMRUQgY2xhc3NkZXYsIHRoZWlyIGB0cmlnZ2VyX3R5cGVgIG11c3QgYmUgdGhlIHNhbWUuIFRvXG4rZGVjbGFyZSB0aGF0IHRoZSBwcml2YXRlIHRyaWdnZXIgcHJvdmlkZXMgaGFyZHdhcmUgY29udHJvbCBmb3IgdGhlIGFzc29jaWF0ZWRcbitMRUQgY2xhc3NkZXYsIHNldCB0aGUgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgc3RyaW5nIHRvIHRoZSB0cmlnZ2VyJ3MgbmFtZS4gU2luY2Vcbitib3RoIHRoZSBMRUQgY2xhc3NkZXYgYW5kIHRoZSBwcml2YXRlIHRyaWdnZXIgYXJlIGluIHRoZSBzYW1lIExFRCBkcml2ZXIsIGl0J3Ncbitub3QgbmVjZXNzYXJ5IGZvciB0aGVtIHRvIGNvb3JkaW5hdGUgdmlhIGBod19jb250cm9sXypgIGNhbGxiYWNrcy5cbitcbiBXaGVuIHRoZSBMRUQgaXMgaW4gaHcgY29udHJvbCwgbm8gc29mdHdhcmUgYmxpbmsgaXMgcG9zc2libGUgYW5kIGRvaW5nIHNvXG4gd2lsbCBlZmZlY3RpdmVseSBkaXNhYmxlIGh3IGNvbnRyb2wuXG4gXG4rSGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvblxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitTb21lIGhhcmR3YXJlIGNhbiBhdXRvbm9tb3VzbHkgYWN0aXZhdGUvZGVhY3RpdmF0ZSBoYXJkd2FyZSBjb250cm9sLiBBZnRlciB0aGF0LFxuK3RoZSBMRUQgaGFyZHdhcmUgbm90aWZpZXMgdGhlIExFRCBkcml2ZXIuXG4rXG4rSWYgdGhlIGRyaXZlciBjYW4gZGV0ZWN0IHN1Y2ggdHJhbnNpdGlvbnMgYW5kIHRodXMgd2FudHMgdG8gbm90aWZ5IHRoZSBMRUQgY29yZVxuK3RvIHVwZGF0ZSB0aGUgY3VycmVudCB0cmlnZ2VyIHRoZW4gdGhlIGBMRURfVFJJR19IV19DSEFOR0VEYCBmbGFnIG11c3QgYmUgc2V0IGluXG4rZmxhZ3MgYmVmb3JlIHJlZ2lzdGVyaW5nLiBUbyB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciBhY2NvcmRpbmdseSwgY2FsbFxuK2BsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCBvbiB0aGUgTEVEIGNsYXNzZGV2LlxuK1xuK1RoaXMgY2FwYWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIHRoZSBMRUQgZGV2aWNlJ3MgcHJpdmF0ZSB0cmlnZ2VyLiBUaGUgcHJpdmF0ZVxuK3RyaWdnZXIgbXVzdCBoYXZlIGJlZW4gcHJvcGVybHkgcmVnaXN0ZXJlZCAoc2VlIGFib3ZlKSBhbmQgbmFtZWQgYWZ0ZXJcbitgaHdfY29udHJvbF90cmlnZ2VyYC5cbitcbitPbmx5IHR3byB0cmFuc2l0aW9ucyBhcmUgZGVmaW5lZDpcbitcbistIFwibm9uZVwiID1cdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyOlxuKyAgICAgICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGhhcmR3YXJlIGF1dG9ub21vdXNseSBhY3RpdmF0ZXMgaGFyZHdhcmUgY29udHJvbFxuKyAgICAgICAgYW5kIHdoZW4gXCJub25lXCIgKGkuZS4sIG5vIHRyaWdnZXIpIGlzIGN1cnJlbnRseSBhY3RpdmUuIElmIHRoZSBwcml2YXRlXG4rICAgICAgICB0cmlnZ2VyIGlzIGFscmVhZHkgYWN0aXZlIHdoZW4gdGhlIG1ldGhvZCBpcyBjYWxsZWQsIHRoaXMgaXMgZXNzZW50aWFsbHlcbisgICAgICAgIGEgbm8tb3AuXG4rXG4rICAgICAgICBUaGUgYWN0aXZhdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHByaXZhdGUgdHJpZ2dlciB3aWxsIGJlIGV4ZWN1dGVkIGFzXG4rICAgICAgICBub3JtYWwuXG4rXG4rICAgICAgICBUaGUgTEVEIGRyaXZlciBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHRoZVxuKyAgICAgICAgYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBjdXJyZW50bHkgaW4gaGFyZHdhcmVcbisgICAgICAgIGNvbnRyb2wuXG4rXG4rICAgICAgICBJZiBlcnJvciBvY2N1cnMgaW4gdGhlIGFjdGl2YXRpb24gc2VxdWVuY2UsIHRoZSBMRUQgVHJpZ2dlciBjb3JlIHJldmVydHNcbisgICAgICAgIHRoZSBlZmZlY3RpdmUgdHJpZ2dlciB0byBcIm5vbmVcIi5cbitcbistIHByaXZhdGUgdHJpZ2dlciA9XHUwMDNlIFwibm9uZVwiXG4rICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaGFyZHdhcmUgYXV0b25vbW91c2x5IGRlYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2xcbisgICAgICAgIGFuZCB3aGVuIHRoZSBwcml2YXRlIHRyaWdnZXIgaXMgY3VycmVudGx5IGFjdGl2ZS4gSWYgXCJub25lXCIgKGkuZS4sIG5vXG4rICAgICAgICB0cmlnZ2VyKSBpcyBhY3RpdmUgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgdGhpcyBpcyBlc3NlbnRpYWxseSBhXG4rICAgICAgICBuby1vcC5cbitcbisgICAgICAgIFRoZSBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xuKyAgICAgICAgbm9ybWFsLCBleGNlcHQgdGhhdCB0aGUgY3VycmVudCBMRUQgYnJpZ2h0bmVzcyBpcyByZXRhaW5lZC4gVGhlIHJlYXNvblxuKyAgICAgICAgZm9yIGtlZXBpbmcgdGhlIGJyaWdodG5lc3MgdW5jaGFuZ2VkIGlzIHRoYXQgc29tZSBoYXJkd2FyZSBtYXkgY2hvb3NlIGFcbisgICAgICAgIHNwZWNpZmljIGJyaWdodG5lc3MgaW5zdGVhZCBvZiBzaW1wbHkgdHVybmluZyBvZmYgdGhlIExFRCBhZnRlclxuKyAgICAgICAgYXV0b25vbW91c2x5IGRlYWN0aXZhdGluZyBoYXJkd2FyZSBjb250cm9sLlxuK1xuKyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcbisgICAgICAgIGRlYWN0aXZhdGlvbiBzZXF1ZW5jZSBldmVuIGlmIHRoZSBoYXJkd2FyZSBpcyBub3QgY3VycmVudGx5IGluIGhhcmR3YXJlXG4rICAgICAgICBjb250cm9sLlxuK1xuK0lmIHRoZSBjdXJyZW50IHRyaWdnZXIgaXMgbmVpdGhlciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIG5vciBcIm5vbmVcIiwgbm8gdHJhbnNpdGlvblxuK3dpbGwgYmUgbWFkZS5cbitcbiBLbm93biBJc3N1ZXNcbiA9PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbmluZGV4IGE1MWIwZWQ1Mzg4NjQuLjNiNDM4ZDhkYTVlMGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuY1xuQEAgLTI3LDI5ICsyNywxOSBAQCBzdGF0aWMgTElTVF9IRUFEKGxlZHNfbG9va3VwX2xpc3QpO1xuIFxuIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkc193cTtcbiBcbi1zdGF0aWMgYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuLXtcbi0jaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbi1cdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4tXHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNldHJpZ2dlciBcdTAwMjZcdTAwMjYgbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2V0cmlnZ2VyX3R5cGU7XG4tI2Vsc2Vcbi1cdHJldHVybiBmYWxzZTtcbi0jZW5kaWZcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuIFx0dW5zaWduZWQgaW50IGJyaWdodG5lc3M7XG4gXG4tXHRpZiAobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXG4tXHRcdHJldHVybiAtRU5PREFUQTtcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcykge1xuK1x0XHRpZiAobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXG4rXHRcdFx0cmV0dXJuIC1FTk9EQVRBO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZsZWRfY2Rldi1cdTAwM2VsZWRfYWNjZXNzKTtcbi1cdGxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7XG4tXHRicmlnaHRuZXNzID0gbGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcztcbi1cdG11dGV4X3VubG9jayhcdTAwMjZsZWRfY2Rldi1cdTAwM2VsZWRfYWNjZXNzKTtcbitcdFx0bGVkX3VwZGF0ZV9icmlnaHRuZXNzKGxlZF9jZGV2KTtcbitcdFx0YnJpZ2h0bmVzcyA9IGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3M7XG4rXHR9XG4gXG4gXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXVcXG5cIiwgYnJpZ2h0bmVzcyk7XG4gfVxuQEAgLTc0LDYgKzY0LDkgQEAgc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXG4gXHRpZiAoc3RhdGUgPT0gTEVEX09GRilcbiBcdFx0bGVkX3RyaWdnZXJfcmVtb3ZlKGxlZF9jZGV2KTtcbitcdGVsc2VcbitcdFx0bGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wobGVkX2NkZXYpO1xuK1xuIFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBzdGF0ZSk7XG4gXG4gXHRyZXQgPSBzaXplO1xuQEAgLTEwMyw4ICs5NiwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmNvbnN0IGxlZF90cmlnZ2VyX2Jpbl9hdHRyc1tdID0ge1xuIFx0XHUwMDI2YmluX2F0dHJfdHJpZ2dlcixcbiBcdE5VTEwsXG4gfTtcbitcbitzdGF0aWMgREVWSUNFX0FUVFJfUk8odHJpZ2dlcl9tYXlfb2ZmbG9hZCk7XG4rc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZF90cmlnZ2VyX2F0dHJzW10gPSB7XG4rXHRcdTAwMjZkZXZfYXR0cl90cmlnZ2VyX21heV9vZmZsb2FkLmF0dHIsXG4rXHROVUxMXG4rfTtcbitcbitzdGF0aWMgdW1vZGVfdCBsZWRfdHJpZ2dlcl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbitcdFx0XHRcdCAgICAgIGludCBpZHgpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaik7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1xuK1x0aWYgKGF0dHIgPT0gXHUwMDI2ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyKVxuK1x0XHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID8gYXR0ci1cdTAwM2Vtb2RlIDogMDtcbitcbitcdHJldHVybiBhdHRyLVx1MDAzZW1vZGU7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxlZF90cmlnZ2VyX2dyb3VwID0ge1xuIFx0LmJpbl9hdHRycyA9IGxlZF90cmlnZ2VyX2Jpbl9hdHRycyxcbitcdC5hdHRycyA9IGxlZF90cmlnZ2VyX2F0dHJzLFxuK1x0LmlzX3Zpc2libGUgPSBsZWRfdHJpZ2dlcl9pc192aXNpYmxlLFxuIH07XG4gI2VuZGlmXG4gXG5AQCAtNTk2LDYgKzYxMSw5IEBAIGludCBsZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbiBcdGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KGxlZF9jZGV2KTtcbiAjZW5kaWZcbiBcbitcdGlmIChsZWRfY2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRClcbitcdFx0bGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKGxlZF9jZGV2KTtcbitcbiBcdG11dGV4X3VubG9jayhcdTAwMjZsZWRfY2Rldi1cdTAwM2VsZWRfYWNjZXNzKTtcbiBcbiBcdGRldl9kYmcocGFyZW50LCBcIlJlZ2lzdGVyZWQgbGVkIGRldmljZTogJXNcXG5cIixcbkBAIC02MTYsNiArNjM0LDkgQEAgdm9pZCBsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiBcdGlmIChJU19FUlJfT1JfTlVMTChsZWRfY2Rldi1cdTAwM2VkZXYpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpXG4rXHRcdGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChsZWRfY2Rldik7XG4rXG4gI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4gXHRkb3duX3dyaXRlKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4gXHRpZiAobGVkX2NkZXYtXHUwMDNldHJpZ2dlcilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcbmluZGV4IGIxMjIzMjE4YmRhMTEuLmE5ZDk5MmE4ODYxNjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY1xuQEAgLTcsOSArNywxMyBAQFxuICAqIEF1dGhvcjogUmljaGFyZCBQdXJkaWUgXHUwMDNjcnB1cmRpZUBvcGVuZWRoYW5kLmNvbVx1MDAzZVxuICAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2NrZGVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lci5oXHUwMDNlXG5AQCAtMzMsNiArMzcsMzQgQEAgdHJpZ2dlcl9yZWxldmFudChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuIFx0cmV0dXJuICF0cmlnLVx1MDAzZXRyaWdnZXJfdHlwZSB8fCB0cmlnLVx1MDAzZXRyaWdnZXJfdHlwZSA9PSBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX3R5cGU7XG4gfVxuIFxuK3N0YXRpYyBib29sIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXG4rXHRpZiAoIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXIpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICghbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8XG4rXHQgICAgc3RyY21wKGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciwgbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VuYW1lKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlb2ZmbG9hZGVkKVxuK1x0XHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2VvZmZsb2FkZWQobGVkX2NkZXYpO1xuK1xuK1x0ZGV2X3dhcm5fb25jZShsZWRfY2Rldi1cdTAwM2VkZXYsIFwiaHcgY29udHJvbCB0cmlnZ2VyICVzIGRvZXNuJ3QgaW1wbGVtZW50IG9mZmxvYWRlZCgpXFxuXCIsXG4rXHRcdCAgICAgIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSk7XG4rXG4rXHQvKiBPdGhlcndpc2UgYXNzdW1lIHByaXZhdGUgdHJpZ2dlcnMgYXMgYWx3YXlzIG9mZmxvYWRlZC4gKi9cbitcdHJldHVybiBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZXRyaWdnZXJfdHlwZTtcbit9XG4rXG4rYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZCk7XG4rXG4gc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0ICBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZixcbiBcdFx0XHQgIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudClcbkBAIC0xNjMsNyArMTk1LDggQEAgc3NpemVfdCBsZWRfdHJpZ2dlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZWFkKTtcbiBcbiAvKiBDYWxsZXIgbXVzdCBlbnN1cmUgbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9sb2NrIGhlbGQgKi9cbi1pbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4rc3RhdGljIGludCBfX2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnLFxuK1x0XHRcdCAgICAgYm9vbCBod190cmlnZ2VyZWQpXG4ge1xuIFx0Y2hhciAqZXZlbnQgPSBOVUxMO1xuIFx0Y2hhciAqZW52cFsyXTtcbkBAIC0xOTQsNyArMjI3LDIxIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcdFx0bGVkX2NkZXYtXHUwMDNldHJpZ2dlcl9kYXRhID0gTlVMTDtcbiBcdFx0bGVkX2NkZXYtXHUwMDNlYWN0aXZhdGVkID0gZmFsc2U7XG4gXHRcdGxlZF9jZGV2LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkxFRF9JTklUX0RFRkFVTFRfVFJJR0dFUjtcbi1cdFx0bGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTtcbitcbitcdFx0LypcbitcdFx0ICogSGFyZHdhcmUgbWF5IGhhdmUgc2VsZWN0ZWQgYSBuZXcgYnJpZ2h0bmVzcyBsZXZlbCBkdXJpbmcgaXRzXG4rXHRcdCAqIGhhcmR3YXJlIGNvbnRyb2wgdHJhbnNpdGlvbiwgc28gb25seSByZXNldCBicmlnaHRuZXNzIGlmIHdlXG4rXHRcdCAqIGFyZSBzd2l0Y2hpbmcgdG8gYW5vdGhlciB0cmlnZ2VyIG9yIGlmIHRoZSBzd2l0Y2hpbmcgaXMgbm90XG4rXHRcdCAqIGhhcmR3YXJlIHRyaWdnZXJlZC5cbitcdFx0ICpcbitcdFx0ICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIGVycm9yIHBhdGgsIGFzIHJ1bm5pbmdcbitcdFx0ICogaW50byB0aGUgZXJyb3IgcGF0aCBpbXBsaWVzIGEgbm9uZSA9XHUwMDNlIHByaXZhdGUgdHJpZ2dlclxuK1x0XHQgKiB0cmFuc2l0aW9uLiBUaGlzIGhpbnRzIHRoYXQgdGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlXG4rXHRcdCAqIHRyaWdnZXIgbXVzdCBoYXZlIHNvbWUgZnVuZGFtZW50YWwgYnVncywgc28gZG9uJ3QgYm90aGVyXG4rXHRcdCAqIGxlYXZpbmcgdGhlIExFRCBpbiBhbiB1bmRlZmluZWQgc3RhdGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAodHJpZyB8fCAhaHdfdHJpZ2dlcmVkKVxuK1x0XHRcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7XG4gXHR9XG4gXHRpZiAodHJpZykge1xuIFx0XHRzcGluX2xvY2soXHUwMDI2dHJpZy1cdTAwM2VsZWRkZXZfbGlzdF9sb2NrKTtcbkBAIC0yNTgsNiArMzA1LDExIEBAIGludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuK1xuK2ludCBsZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbit7XG4rXHRyZXR1cm4gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIHRyaWcsIGZhbHNlKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0KTtcbiBcbiB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbkBAIC0yNjgsNiArMzIwLDE1IEBAIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9yZW1vdmUpO1xuIFxuK3ZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXG4rXHRpZiAoX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKGxlZF9jZGV2KSlcbitcdFx0bGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2wpO1xuK1xuIHN0YXRpYyBib29sIGxlZF9tYXRjaF9kZWZhdWx0X3RyaWdnZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4ge1xuQEAgLTMxMyw2ICszNzQsMzIgQEAgdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQpO1xuIFxuK3NzaXplX3QgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuK3tcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXHRzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7XG4rXHRib29sIGhpdCwgb2ZmbG9hZGVkO1xuK1x0aW50IGxlbjtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZsZWRfY2Rldi1cdTAwM2VsZWRfYWNjZXNzKTtcbitcdGd1YXJkKHJ3c2VtX3JlYWQpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXG4rXHR0cmlnID0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcjtcbitcbitcdG9mZmxvYWRlZCA9IF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XG4rXHRoaXQgPSBvZmZsb2FkZWQgfHwgKHRyaWcgXHUwMDI2XHUwMDI2ICFzdHJjbXAobGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLCB0cmlnLVx1MDAzZW5hbWUpKTtcbitcbitcdC8qIFtvZmZsb2FkZWRdIFx1MDAzY2FjdGl2ZV9idXRfbm90X29mZmxvYWRlZFx1MDAzZSBpbmFjdGl2ZSAqL1xuK1x0bGVuID0gc3lzZnNfZW1pdChidWYsIFwiJXMlcyVzXFxuXCIsXG4rXHRcdFx0IG9mZmxvYWRlZCA/IFwiW1wiIDogKGhpdCA/IFwiXHUwMDNjXCIgOiBcIlwiKSxcbitcdFx0XHQgbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyLFxuK1x0XHRcdCBvZmZsb2FkZWQgPyBcIl1cIiA6IChoaXQgPyBcIlx1MDAzZVwiIDogXCJcIikpO1xuK1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwodHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93KTtcbitcbiAvKiBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cbiBcbiBpbnQgbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuQEAgLTQwMyw2ICs0OTAsODggQEAgaW50IGRldm1fbGVkX3RyaWdnZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2xlZF90cmlnZ2VyX3JlZ2lzdGVyKTtcbiBcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuK1xuK3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2RvX2h3X2NvbnRyb2xfdHJhbnNpdGlvbihzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSxcbitcdFx0XHRcdFx0XHQgc3RydWN0IGxlZF90cmlnZ2VyICpoY190cmlnKVxuK3tcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0aWYgKCFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKSB7XG4rXHRcdC8qIFwibm9uZVwiID1cdTAwM2UgcHJpdmF0ZSB0cmlnZ2VyLiAqL1xuK1x0XHRpZiAoYWN0aXZhdGUpXG4rXHRcdFx0ZXJyID0gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIGhjX3RyaWcsIHRydWUpO1xuK1x0fSBlbHNlIGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyID09IGhjX3RyaWcpIHtcbitcdFx0LyogcHJpdmF0ZSB0cmlnZ2VyID1cdTAwM2UgXCJub25lXCIuICovXG4rXHRcdGlmICghYWN0aXZhdGUpXG4rXHRcdFx0ZXJyID0gX19sZWRfdHJpZ2dlcl9zZXQobGVkX2NkZXYsIE5VTEwsIHRydWUpO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogT3RoZXIgdHJpZ2dlciBpcyBhY3RpdmUuICovXG4rXHRcdGRldl9kYmcobGVkX2NkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiSWdub3JpbmcgaHcgY29udHJvbCB0cmFuc2l0aW9uICglcyAlcykgd2hpbGUgJXMgaXMgYWN0aXZlXCIsXG4rXHRcdFx0YWN0aXZhdGUgPyBcImFjdGl2YXRlXCIgOiBcImRlYWN0aXZhdGVcIiwgaGNfdHJpZy1cdTAwM2VuYW1lLFxuK1x0XHRcdGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSk7XG4rXG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChlcnIpXG4rXHRcdGRldl93YXJuKGxlZF9jZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gJXMgJXMgaW4gaHcgY29udHJvbCB0cmFuc2l0aW9uOiAlZFwiLFxuK1x0XHRcdCBhY3RpdmF0ZSA/IFwiYWN0aXZhdGVcIiA6IFwiZGVhY3RpdmF0ZVwiLCBoY190cmlnLVx1MDAzZW5hbWUsIGVycik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsZWRfY2xhc3NkZXYsIHRyaWdnZXJzX2h3X2NoYW5nZWRfd29yayk7XG4rXHRib29sIGFjdGl2YXRlID0gUkVBRF9PTkNFKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWQpO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFx1MDAyNnRyaWdnZXJzX2xpc3RfbG9jaykge1xuK1x0XHRzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWc7XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkodHJpZywgXHUwMDI2dHJpZ2dlcl9saXN0LCBuZXh0X3RyaWcpIHtcbitcdFx0XHRpZiAodHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhc3RyY21wKHRyaWctXHUwMDNlbmFtZSwgbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyKSkge1xuK1x0XHRcdFx0Z3VhcmQocndzZW1fd3JpdGUpKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayk7XG4rXG4rXHRcdFx0XHRsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24obGVkX2NkZXYsIGFjdGl2YXRlLCB0cmlnKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdGRldl9lcnIobGVkX2NkZXYtXHUwMDNlZGV2LFxuK1x0XHRcIiVzKCkgaXMgY2FsbGVkLCBidXQgdGhlIHByaXZhdGUgdHJpZ2dlciAoJXMpIGlzIG5vdCBwcm9wZXJseSByZWdpc3RlcmVkXFxuXCIsXG4rXHRcdF9fZnVuY19fLCBsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIpO1xuK31cbitcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpXG4re1xuK1x0LyogUmVzdHJpY3RlZCB0byBwcml2YXRlIHRyaWdnZXJzLiAqL1xuK1x0aWYgKFdBUk5fT04oIShsZWRfY2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTEVEX1RSSUdfSFdfQ0hBTkdFRCkgfHxcbitcdFx0ICAgICFsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgfHwgIWxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfdHlwZSkpXG4rXHRcdHJldHVybjtcbitcbitcdFdSSVRFX09OQ0UobGVkX2NkZXYtXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZCwgYWN0aXZhdGUpO1xuK1xuK1x0c2NoZWR1bGVfd29yayhcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKTtcbitcbit2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRJTklUX1dPUksoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrLCBsZWRfdHJpZ2dlcl9od19jb250cm9sX2NoYW5nZWRfd29ya2VyKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKTtcbitcbit2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQpO1xuK1xuKyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXG4rXG4gLyogU2ltcGxlIExFRCBUcmlnZ2VyIEludGVyZmFjZSAqL1xuIFxuIHZvaWQgbGVkX3RyaWdnZXJfZXZlbnQoc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuaW5kZXggMTg0NGQwY2Q1ZjUyOC4uNmRiODNkMDE1Mjc3NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jXG5AQCAtODUsMTIgKzg1LDE4IEBAIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiBcdHJldHVybiBjcm9zX2VjX2xlZF9zZW5kX2NtZChwcml2LVx1MDAzZWNyb3NfZWMsIFx1MDAyNmFyZyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGNyb3NfZWNfbGVkX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgY3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgY3Jvc19lY19sZWRfdHJpZ2dlciA9IHtcbiBcdC5uYW1lID0gXCJjaHJvbWVvcy1hdXRvXCIsXG4gXHQudHJpZ2dlcl90eXBlID0gXHUwMDI2Y3Jvc19lY19sZWRfdHJpZ2dlcl90eXBlLFxuIFx0LmFjdGl2YXRlID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9hY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWQgPSBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY3Jvc19lY19sZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuaW5kZXggZWQ2YTQ3YmJiNDRmOS4uMzJkNDBkMTc2ZDNmMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuQEAgLTE5NSwxMCArMTk1LDE2IEBAIHN0YXRpYyB2b2lkIG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYpXG4gXHRcdFx0ZXJyKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgb21uaWFfaHd0cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIG9tbmlhX2h3X3RyaWdnZXIgPSB7XG4gXHQubmFtZVx0XHQ9IFwib21uaWEtbWN1XCIsXG4gXHQuYWN0aXZhdGVcdD0gb21uaWFfaHd0cmlnX2FjdGl2YXRlLFxuIFx0LmRlYWN0aXZhdGVcdD0gb21uaWFfaHd0cmlnX2RlYWN0aXZhdGUsXG4rXHQub2ZmbG9hZGVkXHQ9IG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQsXG4gXHQudHJpZ2dlcl90eXBlXHQ9IFx1MDAyNm9tbmlhX2h3X3RyaWdnZXJfdHlwZSxcbiB9O1xuIFxuQEAgLTI1MSw2ICsyNTcsNyBAQCBzdGF0aWMgaW50IG9tbmlhX2xlZF9yZWdpc3RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3Qgb21uaWFfbGVkICpsZWQsXG4gXHQgKiBieSBMRUQgY2xhc3MgZnJvbSB0aGUgbGludXgsZGVmYXVsdC10cmlnZ2VyIHByb3BlcnR5LlxuIFx0ICovXG4gXHRjZGV2LVx1MDAzZWRlZmF1bHRfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTtcbitcdGNkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gb21uaWFfaHdfdHJpZ2dlci5uYW1lO1xuIFxuIFx0LyogUHV0IHRoZSBMRUQgaW50byBzb2Z0d2FyZSBtb2RlICovXG4gXHRyZXQgPSBvbW5pYV9jbWRfd3JpdGVfdTgoY2xpZW50LCBPTU5JQV9DTURfTEVEX01PREUsIE9NTklBX0NNRF9MRURfTU9ERV9MRUQobGVkLVx1MDAzZXJlZykgfFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLmggYi9kcml2ZXJzL2xlZHMvbGVkcy5oXG5pbmRleCBiZWU0NjY1MWUwNjhmLi5iZGFjMjMzNjAxMmU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMuaFxuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxuQEAgLTI3LDggKzI3LDE4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gc3NpemVfdCBsZWRfdHJpZ2dlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXG4gXHRcdFx0bG9mZl90IHBvcywgc2l6ZV90IGNvdW50KTtcbitzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7XG4gXG4gZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbGVkc19saXN0X2xvY2s7XG4gZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbGVkc19saXN0O1xuIFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG4rdm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuK3ZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbisjZWxzZSAvKiAhQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHsgfVxuKyNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXG4rXG4gI2VuZGlmXHQvKiBfX0xFRFNfSF9JTkNMVURFRCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnXG5pbmRleCBjMTEyODJhNzRiNWFjLi5hMTFkMDRjZTRhYjJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xuQEAgLTksNiArOSwxNiBAQCBtZW51Y29uZmlnIExFRFNfVFJJR0dFUlNcbiBcbiBpZiBMRURTX1RSSUdHRVJTXG4gXG4rY29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuK1x0Ym9vbCBcIkxFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcIlxuK1x0ZGVmYXVsdCBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxuK1x0aGVscFxuK1x0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGluaXRpYXRlZCBoYXJkd2FyZSBjb250cm9sXG4rXHQgIHRyYW5zaXRpb25zLCB3aGVyZSB0aGUgTEVEIGhhcmR3YXJlIGF1dG9ub21vdXNseSBzd2l0Y2hlcyBiZXR3ZWVuXG4rXHQgIFwibm9uZVwiIChpLmUuLCBubyB0cmlnZ2VyKSBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlci5cbitcbitcdCAgU2VlIERvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdCBmb3IgZGV0YWlscy5cbitcbiBjb25maWcgTEVEU19UUklHR0VSX1RJTUVSXG4gXHR0cmlzdGF0ZSBcIkxFRCBUaW1lciBUcmlnZ2VyXCJcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuY1xuaW5kZXggNWI0ZTkyYzE0ZGJiNC4uMmU5YWY0OGE3NGRiZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcbisrKyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcbkBAIC03OTgsMTAgKzc5OCwxOCBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfdHJpZ19kZWFjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIFx0a2ZyZWUodHJpZ2dlcl9kYXRhKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHN0cnVjdCBsZWRfbmV0ZGV2X2RhdGEgKnRyaWdnZXJfZGF0YSA9IGxlZF9nZXRfdHJpZ2dlcl9kYXRhKGxlZF9jZGV2KTtcbitcbitcdHJldHVybiB0cmlnZ2VyX2RhdGEtXHUwMDNlaHdfY29udHJvbDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBuZXRkZXZfbGVkX3RyaWdnZXIgPSB7XG4gXHQubmFtZSA9IFwibmV0ZGV2XCIsXG4gXHQuYWN0aXZhdGUgPSBuZXRkZXZfdHJpZ19hY3RpdmF0ZSxcbiBcdC5kZWFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWQgPSBuZXRkZXZfdHJpZ19vZmZsb2FkZWQsXG4gXHQuZ3JvdXBzID0gbmV0ZGV2X3RyaWdfZ3JvdXBzLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuaW5kZXggNTE2NTk0OTkzMDczOS4uYTk3ODUyYjBiMjI4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuQEAgLTE2LDYgKzE2LDcgQEAgY29uZmlnIElERUFQQURfTEFQVE9QXG4gXHRzZWxlY3QgSU5QVVRfU1BBUlNFS01BUFxuIFx0c2VsZWN0IE5FV19MRURTXG4gXHRzZWxlY3QgTEVEU19DTEFTU1xuK1x0c2VsZWN0IExFRFNfVFJJR0dFUlNcbiBcdGhlbHBcbiBcdCAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3JcbiBcdCAgcmZraWxsIHN3aXRjaCwgaG90a2V5LCBmYW4gY29udHJvbCBhbmQgYmFja2xpZ2h0IGNvbnRyb2wuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xuaW5kZXggODIxMzUyNDUwNGVlYi4uZjg2YzExZjUxZDBiZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jXG4rKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xuQEAgLTE0LDkgKzE0LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaTgwNDIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuQEAgLTI2LDkgKzI5LDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX3Byb2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bvd2VyX3N1cHBseS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZmtpbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXHUwMDNlXG5AQCAtMTM0LDEwICsxMzksMzEgQEAgZW51bSB7XG4gfTtcbiBcbiAvKlxuLSAqIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgc3RhdGVzIC0gMVxuLSAqIEZ1dHVyZSBrZXlib2FyZCB0eXBlcyBtYXkgbmVlZCBhIG5ldyBzeXN0ZW0sIGlmIHRoZXJlJ3MgYSBjb2xsaXNpb25cbi0gKiBLQkRfQkxfVFJJU1RBVEVfQVVUTyBoYXMgbm8gd2F5IHRvIHJlcG9ydCBvciBzZXQgdGhlIGF1dG8gc3RhdGVcbi0gKiBzbyBpdCBlZmZlY3RpdmVseSBoYXMgMyBzdGF0ZXMsIGJ1dCBuZWVkcyB0byBoYW5kbGUgNFxuKyAqIFRoZSBlbnVtZXJhdGlvbiBoYXMgdHdvIHB1cnBvc2VzOlxuKyAqICAgLSBhcyBhbiBpbnRlcm5hbCBpZGVudGlmaWVyIGZvciBhbGwga25vd24gdHlwZXMgb2Yga2V5Ym9hcmQgYmFja2xpZ2h0XG4rICogICAtIGFzIGEgbWFuZGF0b3J5IHBhcmFtZXRlciBvZiB0aGUgS0JMQyBjb21tYW5kXG4rICpcbisgKiBGb3IgZWFjaCB0eXBlLCB0aGUgaGFyZHdhcmUgYnJpZ2h0bmVzcyB2YWx1ZXMgYXJlIGRlZmluZWQgYXMgZm9sbG93czpcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xuKyAqIHwgICAgICBIYXJkd2FyZSBicmlnaHRuZXNzIHwgICAgICAgIDAgfCAgIDEgfCAgICAyIHwgICAgMyB8XG4rICogfCBUeXBlICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfCAgICAgIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xuKyAqIHwgS0JEX0JMX1NUQU5EQVJEICAgICAgICAgIHwgICAgICBvZmYgfCAgb24gfCAgTi9BIHwgIE4vQSB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKiB8IEtCRF9CTF9UUklTVEFURSAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8ICBOL0EgfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXG4rICogfCBLQkRfQkxfVFJJU1RBVEVfQVVUTyAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfCBhdXRvIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xuKyAqXG4rICogV2UgbWFwIExFRCBjbGFzc2RldiBicmlnaHRuZXNzIGZvciBLQkRfQkxfVFJJU1RBVEVfQVVUTyBhcyBmb2xsb3dzOlxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcbisgKiB8ICBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8XG4rICogfCBPcGVyYXRpb24gICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8ICAgICAgfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcbisgKiB8IFJlYWQgICAgICAgICAgICAgICAgICAgICB8IG9mZi9hdXRvIHwgbG93IHwgaGlnaCB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xuKyAqIHwgV3JpdGUgICAgICAgICAgICAgICAgICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXG4gICovXG4gZW51bSB7XG4gXHRLQkRfQkxfU1RBTkRBUkQgICAgICA9IDEsXG5AQCAtMTQ1LDYgKzE3MSw4IEBAIGVudW0ge1xuIFx0S0JEX0JMX1RSSVNUQVRFX0FVVE8gPSAzLFxuIH07XG4gXG4rI2RlZmluZSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1NcdDNcbitcbiAjZGVmaW5lIEtCRF9CTF9RVUVSWV9UWVBFXHRcdDB4MVxuICNkZWZpbmUgS0JEX0JMX1RSSVNUQVRFX1RZUEVcdFx0MHg1XG4gI2RlZmluZSBLQkRfQkxfVFJJU1RBVEVfQVVUT19UWVBFXHQweDdcbkBAIC0yMDAsMTAgKzIyOCwxNCBAQCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlIHtcbiBcdFx0Ym9vbCB5bWNfZWNfdHJpZ2dlciAgICAgICA6IDE7XG4gXHR9IGZlYXR1cmVzO1xuIFx0c3RydWN0IHtcbi1cdFx0Ym9vbCBpbml0aWFsaXplZDtcbitcdFx0aW50IGluaXRpYWxpemVkOyAvKiAgMDogaW5pdGlhbGl6aW9uIHBlbmRpbmcvb25nb2luZy9mYWlsZWRcbitcdFx0XHRcdCAgKiBcdTAwM2UwOiBpbml0aWFsaXppb24gZmluaXNoZWRcbitcdFx0XHRcdCAgKiBcdTAwM2MwOiB1bnJlZ2lzdGVyYXRpb24gb25nb2luZy9maW5pc2hlZFxuK1x0XHRcdFx0ICAqL1xuIFx0XHRpbnQgdHlwZTtcbiBcdFx0c3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7XG4tXHRcdHVuc2lnbmVkIGludCBsYXN0X2JyaWdodG5lc3M7XG4rXHRcdHVuc2lnbmVkIGludCBsYXN0X2h3X2JyaWdodG5lc3M7XG4rXHRcdHN0cnVjdCBtdXRleCBtdXRleDsgLyogcHJvdGVjdHMgYnJpZ2h0bmVzcyB0cmFja2luZyAqL1xuIFx0fSBrYmRfYmw7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRib29sIGluaXRpYWxpemVkO1xuQEAgLTE1OTIsNyArMTYyNCwyNCBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKGludCB0eXBlKVxuIFx0cmV0dXJuICh0eXBlID09IEtCRF9CTF9UUklTVEFURSkgfHwgKHR5cGUgPT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pO1xuIH1cbiBcbi1zdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBod19icmlnaHRuZXNzKVxuK3tcbitcdC8qIE9mZiwgbG93IG9yIGhpZ2ggKi9cbitcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYz0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuK1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbitcbitcdC8qIEF1dG8gKGNvbnRyb2xsZWQgYnkgRUMgYWNjb3JkaW5nIHRvIEFMUyksIHJlcG9ydCBhcyBvZmYgKi9cbitcdGlmIChwcml2LVx1MDAzZWtiZF9ibC50eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFVua25vd24gdmFsdWUgKi9cbitcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbitcdFx0IFwiVW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVkXCIsIGh3X2JyaWdodG5lc3MpO1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHZhbHVlO1xuIFx0aW50IGVycjtcbkBAIC0xNjA2LDIxICsxNjU1LDcgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4tXHRcdC8qIENvbnZlcnQgcmV0dXJuZWQgdmFsdWUgdG8gYnJpZ2h0bmVzcyBsZXZlbCAqL1xuLVx0XHR2YWx1ZSA9IEZJRUxEX0dFVChLQkRfQkxfR0VUX0JSSUdIVE5FU1MsIHZhbHVlKTtcbi1cbi1cdFx0LyogT2ZmLCBsb3cgb3IgaGlnaCAqL1xuLVx0XHRpZiAodmFsdWUgXHUwMDNjPSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4tXHRcdFx0cmV0dXJuIHZhbHVlO1xuLVxuLVx0XHQvKiBBdXRvLCByZXBvcnQgYXMgb2ZmICovXG4tXHRcdGlmICh2YWx1ZSA9PSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgKyAxKVxuLVx0XHRcdHJldHVybiAwO1xuLVxuLVx0XHQvKiBVbmtub3duIHZhbHVlICovXG4tXHRcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbi1cdFx0XHQgXCJVbmtub3duIGtleWJvYXJkIGJhY2tsaWdodCB2YWx1ZTogJWx1XCIsIHZhbHVlKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldHVybiBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7XG4gXHR9XG4gXG4gXHRlcnIgPSBldmFsX2hhbHMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgXHUwMDI2dmFsdWUpO1xuQEAgLTE2MzAsNiArMTY2NSwxNiBAQCBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gISF0ZXN0X2JpdChIQUxTX0tCRF9CTF9TVEFURV9CSVQsIFx1MDAyNnZhbHVlKTtcbiB9XG4gXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuK3tcbitcdGludCBod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4rXG4rXHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XG4rXG4rXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTtcbit9XG4rXG4gc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4ge1xuIFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG5AQCAtMTYzNyw5OSArMTY4MiwyMDcgQEAgc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGxlZF9jbGFcbiBcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbiB9XG4gXG4tc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzcylcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsXG4rXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaHdfYnJpZ2h0bmVzcylcbiB7XG4tXHRpbnQgZXJyO1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbiBcdGludCB0eXBlID0gcHJpdi1cdTAwM2VrYmRfYmwudHlwZTtcbitcdGludCBlcnI7XG4gXG4tXHRpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHtcbi1cdFx0aWYgKGJyaWdodG5lc3MgXHUwMDNlIHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGd1YXJkKG11dGV4KShcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5tdXRleCk7XG4gXG4tXHRcdHZhbHVlID0gRklFTERfUFJFUChLQkRfQkxfU0VUX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpIHxcbitcdGlmIChpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZSh0eXBlKSkge1xuK1x0XHR2YWx1ZSA9IEZJRUxEX1BSRVAoS0JEX0JMX1NFVF9CUklHSFRORVNTLCBod19icmlnaHRuZXNzKSB8XG4gXHRcdFx0RklFTERfUFJFUChLQkRfQkxfQ09NTUFORF9UWVBFLCB0eXBlKSB8XG4gXHRcdFx0S0JEX0JMX0NPTU1BTkRfU0VUO1xuIFx0XHRlcnIgPSBleGVjX2tibGMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgdmFsdWUpO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIGJyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRik7XG4rXHRcdHZhbHVlID0gaHdfYnJpZ2h0bmVzcyA/IFNBTFNfS0JEX0JMX09OIDogU0FMU19LQkRfQkxfT0ZGO1xuK1x0XHRlcnIgPSBleGVjX3NhbHMocHJpdi1cdTAwM2VhZGV2LVx1MDAzZWhhbmRsZSwgdmFsdWUpO1xuIFx0fVxuLVxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XG4rXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpXG4re1xuK1x0aWYgKGJyaWdodG5lc3MgXHUwMDNlIHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHRcdFx0ICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4ge1xuIFx0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4gXG4rXHQvKlxuK1x0ICogV2hlbiB1bnJlZ2lzdGVyaW5nOiBJdCBtdXN0IGJlIHRoZSBzaWRlIGVmZmVjdCBvZiBMRUQgdW5yZWdpc3RyYXRpb25cbitcdCAqIHdoZW4gb3VyIHByaXZhdGUgdHJpZ2dlciBpcyBhY3RpdmUuIFdlJ3ZlIHNldCBMRURfUkVUQUlOX0FUX1NIVVRET1dOXG4rXHQgKiB0byByZXRhaW4gbGVkX2NkZXYgYnJpZ2h0bmVzcyBsZXZlbC4gVG8gZG8gdGhlIHNhbWUgZm9yIGF1dG8gbW9kZSxcbitcdCAqIGdhdGUgY2hhbmdlcyBhbmQgcmV0dXJuIGVhcmx5LlxuK1x0ICpcbitcdCAqIEl0J3MgbmVlZGxlc3MgdG8gZ2F0ZSBjaGFuZ2VzIHdoZW4gaW5pdGlhbGl6aW5nLCBhcyB0aGVyZSBtYXkgYmUgYVxuK1x0ICogdGltZSBtYXJnaW4gYmV0d2VlbiBzeXNmcyBhdHRyaWJ1dGUgY3JlYXRpb24gYW5kIHN0YXRlIGNoYW5nZS5cbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkIFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQocHJpdiwgYnJpZ2h0bmVzcyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0c3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSwga2JkX2JsLmxlZCk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubXV0ZXgpO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX2FjdGl2YXRlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuK1xuK1x0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUyk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbGVkX2h3X3RyaWdnZXJfdHlwZSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcbitcbitzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlciA9IHtcbitcdC5uYW1lID0gXCJpZGVhcGFkLWF1dG9cIixcbitcdC50cmlnZ2VyX3R5cGUgPSBcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZSxcbitcdC5hY3RpdmF0ZSA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZSxcbitcdC5vZmZsb2FkZWQgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkLFxuK307XG4rXG4rc3RhdGljIGJvb2wgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQ7XG4rXG4rc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5X2h3X2NvbnRyb2woc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdixcbitcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgaHdfYnJpZ2h0bmVzcylcbit7XG4rXHRib29sIGh3X2NvbnRyb2wsIGxhc3RfaHdfY29udHJvbDtcbitcbitcdGlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgfHwgcHJpdi1cdTAwM2VrYmRfYmwudHlwZSAhPSBLQkRfQkxfVFJJU1RBVEVfQVVUTylcbitcdFx0cmV0dXJuO1xuK1xuK1x0aHdfY29udHJvbCA9IGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xuK1x0bGFzdF9od19jb250cm9sID0gcHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUztcbitcbitcdGlmIChod19jb250cm9sICE9IGxhc3RfaHdfY29udHJvbClcbitcdFx0bGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGh3X2NvbnRyb2wpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9ub3RpZnkoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4tXHRpbnQgYnJpZ2h0bmVzcztcbitcdGludCBod19icmlnaHRuZXNzLCBicmlnaHRuZXNzO1xuIFxuLVx0aWYgKCFwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZClcbitcdGlmICh1bmxpa2VseShwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2M9IDApKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRicmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4tXHRpZiAoYnJpZ2h0bmVzcyBcdTAwM2MgMClcbitcdGd1YXJkKG11dGV4KShcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5tdXRleCk7XG4rXG4rXHRod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4rXHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKGJyaWdodG5lc3MgPT0gcHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzKVxuK1x0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4rXHRpZiAoYnJpZ2h0bmVzcyBcdTAwM2MgMClcbitcdFx0cmV0dXJuOyAvKiBSZWplY3QgaW5zYW5lIHZhbHVlcyBlYXJseS4gKi9cbitcbitcdGlmIChwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gaHdfYnJpZ2h0bmVzcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbitcdGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHByaXYsIGh3X2JyaWdodG5lc3MpO1xuK1xuK1x0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID0gaHdfYnJpZ2h0bmVzcztcbiBcbiBcdGxlZF9jbGFzc2Rldl9ub3RpZnlfYnJpZ2h0bmVzc19od19jaGFuZ2VkKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLmxlZCwgYnJpZ2h0bmVzcyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfaW5pdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIHtcbi1cdGludCBicmlnaHRuZXNzLCBlcnI7XG4rXHRpbnQgaHdfYnJpZ2h0bmVzcywgZXJyO1xuIFxuIFx0aWYgKCFwcml2LVx1MDAzZWZlYXR1cmVzLmtiZF9ibClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4tXHRpZiAoV0FSTl9PTihwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCkpXG4rXHRpZiAoV0FSTl9PTihwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2UgMCkpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuLVx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpKVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAyO1xuLVx0ZWxzZVxuLVx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSAwO1xuIFxuLVx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuLVx0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4tXHRcdHJldHVybiBicmlnaHRuZXNzO1xuK1x0ZXJyID0gZGV2bV9tdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldiwgXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubXV0ZXgpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGh3X2JyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX2dldChwcml2KTtcbitcdGlmIChod19icmlnaHRuZXNzIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gaHdfYnJpZ2h0bmVzcztcbitcbitcdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm5hbWUgICAgICAgICAgICAgICAgICAgID0gXCJwbGF0Zm9ybTo6XCIgTEVEX0ZVTkNUSU9OX0tCRF9CQUNLTElHSFQ7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuYnJpZ2h0bmVzc19nZXQgICAgICAgICAgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX2dldDtcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0O1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmZsYWdzICAgICAgICAgICAgICAgICAgID0gTEVEX0JSSUdIVF9IV19DSEFOR0VEIHwgTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbiBcbitcdHN3aXRjaCAocHJpdi1cdTAwM2VrYmRfYmwudHlwZSkge1xuK1x0Y2FzZSBLQkRfQkxfVFJJU1RBVEVfQVVUTzpcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcbitcbitcdFx0aWYgKCFpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCkge1xuK1x0XHRcdGRldl93YXJuKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldixcbitcdFx0XHRcdCBcIkNhbm5vdCBwcm92aWRlIExFRCB0cmlnZ2VyICVzIGZvciBrZXlib2FyZCBiYWNrbGlnaHRcXG5cIixcbitcdFx0XHRcdCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmZsYWdzIHw9IExFRF9UUklHX0hXX0NIQU5HRUQ7XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC50cmlnZ2VyX3R5cGUgPSBcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfdHlwZTtcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmh3X2NvbnRyb2xfdHJpZ2dlciA9IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lO1xuK1xuK1x0XHQvKiBIYXJkd2FyZSByZW1lbWJlcnMgdGhlIGxhc3QgYnJpZ2h0bmVzcyBsZXZlbCwgaW5jbHVkaW5nIGF1dG8gbW9kZS4gKi9cbitcdFx0aWYgKGh3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTKVxuK1x0XHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5kZWZhdWx0X3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTtcbitcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEtCRF9CTF9UUklTVEFURTpcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEtCRF9CTF9TVEFOREFSRDpcbitcdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHQvKiBUaGlzIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGJ5IGlkZWFwYWRfY2hlY2tfZmVhdHVyZXMoKS4gKi9cbitcdFx0dW5yZWFjaGFibGUoKTtcbitcdH1cbitcbitcdC8qIFJlamVjdCBpbnNhbmUgdmFsdWVzLiAqL1xuK1x0ZXJyID0gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShwcml2LCBod19icmlnaHRuZXNzKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRlcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoXHUwMDI2cHJpdi1cdTAwM2VwbGF0Zm9ybV9kZXZpY2UtXHUwMDNlZGV2LCBcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gdHJ1ZTtcbitcdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gMTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZGVhcGFkX2tiZF9ibF9leGl0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuLVx0aWYgKCFwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZClcbitcdGlmIChwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2M9IDApXG4gXHRcdHJldHVybjtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gZmFsc2U7XG4rXHRwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IC0xO1xuIFxuIFx0bGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkKTtcbiB9XG5AQCAtMjU0OCwxNyArMjcwMSwzMCBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGVhcGFkX2xhcHRvcF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdGVyciA9IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdHByX3dhcm4oXCJGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEIHRyaWdnZXIgJXM6ICVkXFxuXCIsXG4rXHRcdFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUsIGVycik7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZCA9IHRydWU7XG4rXHR9XG4rXG4gXHRlcnIgPSBpZGVhcGFkX3dtaV9kcml2ZXJfcmVnaXN0ZXIoKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZXJyX2xlZHRyaWc7XG4gXG4gXHRlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2aWRlYXBhZF9hY3BpX2RyaXZlcik7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl93bWk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnJfd21pOlxuK1x0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbitlcnJfbGVkdHJpZzpcbitcdGlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZClcbitcdFx0bGVkX3RyaWdnZXJfdW5yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gbW9kdWxlX2luaXQoaWRlYXBhZF9sYXB0b3BfaW5pdClcbiBcbkBAIC0yNTY2LDYgKzI3MzIsOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgaWRlYXBhZF9sYXB0b3BfZXhpdCh2b2lkKVxuIHtcbiBcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuIFx0aWRlYXBhZF93bWlfZHJpdmVyX3VucmVnaXN0ZXIoKTtcbitcbitcdGlmIChpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfcmVnaXN0ZXJlZClcbitcdFx0bGVkX3RyaWdnZXJfdW5yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuIH1cbiBtb2R1bGVfZXhpdChpZGVhcGFkX2xhcHRvcF9leGl0KVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVkcy5oIGIvaW5jbHVkZS9saW51eC9sZWRzLmhcbmluZGV4IGE1MTVmMDc1YzI5YTEuLjkzYjNmZDdlNTYzNjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xlZHMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sZWRzLmhcbkBAIC0xMDksNiArMTA5LDcgQEAgc3RydWN0IGxlZF9jbGFzc2RldiB7XG4gI2RlZmluZSBMRURfSU5JVF9ERUZBVUxUX1RSSUdHRVIgQklUKDIzKVxuICNkZWZpbmUgTEVEX1JFSkVDVF9OQU1FX0NPTkZMSUNUIEJJVCgyNClcbiAjZGVmaW5lIExFRF9NVUxUSV9DT0xPUlx0XHRCSVQoMjUpXG4rI2RlZmluZSBMRURfVFJJR19IV19DSEFOR0VEXHRCSVQoMjYpXG4gXG4gXHQvKiBzZXRfYnJpZ2h0bmVzc193b3JrIC8gYmxpbmtfdGltZXIgZmxhZ3MsIGF0b21pYywgcHJpdmF0ZS4gKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0d29ya19mbGFncztcbkBAIC0yMzksNiArMjQwLDExIEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYge1xuIFx0c3RydWN0IGtlcm5mc19ub2RlXHQqYnJpZ2h0bmVzc19od19jaGFuZ2VkX2tuO1xuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXG4rXHRib29sXHRcdFx0dHJpZ2dlcnNfaHdfY2hhbmdlZDtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdFx0dHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrO1xuKyNlbmRpZlxuK1xuIFx0LyogRW5zdXJlcyBjb25zaXN0ZW50IGFjY2VzcyB0byB0aGUgTEVEIGNsYXNzIGRldmljZSAqL1xuIFx0c3RydWN0IG11dGV4XHRcdGxlZF9hY2Nlc3M7XG4gfTtcbkBAIC00ODUsNiArNDkxLDcgQEAgc3RydWN0IGxlZF90cmlnZ2VyIHtcbiBcdGNvbnN0IGNoYXJcdCAqbmFtZTtcbiBcdGludFx0XHQoKmFjdGl2YXRlKShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gXHR2b2lkXHRcdCgqZGVhY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuK1x0Ym9vbFx0XHQoKm9mZmxvYWRlZCkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFxuIFx0LyogQnJpZ2h0bmVzcyBzZXQgYnkgbGVkX3RyaWdnZXJfZXZlbnQgKi9cbiBcdGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcztcbkBAIC01MzMsNiArNTQwLDkgQEAgdm9pZCBsZWRfdHJpZ2dlcl9ibGlua19vbmVzaG90KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcixcbiB2b2lkIGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpO1xuIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbit2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbitcbitib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfc2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiBcdFx0XHRcdFx0dm9pZCAqdHJpZ2dlcl9kYXRhKVxuQEAgLTU4NCw2ICs1OTQsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBsZWRfc2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgKmxlZF9nZXRfdHJpZ2dlcl9kYXRhKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIHtcbkBAIC01OTgsNiArNjE1LDEzIEBAIGxlZF90cmlnZ2VyX2dldF9icmlnaHRuZXNzKGNvbnN0IHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZ2dlcilcbiBcbiAjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlMgKi9cbiBcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuK3ZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgYm9vbCBhY3RpdmF0ZSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdFx0XHRcdCBib29sIGFjdGl2YXRlKSB7fVxuKyNlbmRpZlxuK1xuIC8qIFRyaWdnZXIgc3BlY2lmaWMgZW51bSAqL1xuIGVudW0gbGVkX3RyaWdnZXJfbmV0ZGV2X21vZGVzIHtcbiBcdFRSSUdHRVJfTkVUREVWX0xJTksgPSAwLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjI6MjguMzc2MTcxNjQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTE1ODI3MzA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExFRCBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgdG91Y2hpbmcgcXVpdGUgYSBiaXQgb2YgdGhlIExFRCBzdWJzeXN0ZW0sIHNvIHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBmaWxlczogZG9jdW1lbnRhdGlvbiwgdGhlIGNvcmUgTEVEIGNsYXNzIGRyaXZlciwgdHJpZ2dlciBpbXBsZW1lbnRhdGlvbnMsIGFuZCBldmVuIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVycyAoQ3JvcyBFQywgVHVycmlzIE9tbmlhLCBhbmQgTGVub3ZvIGxhcHRvcHMpLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXNuJ3QganVzdCBhIG1pbm9yIHR3ZWFrOyB0aGlzIGlzIGxpa2VseSBhZGRpbmcgc2lnbmlmaWNhbnQgbmV3IGZ1bmN0aW9uYWxpdHkgb3IgbW9kaWZ5aW5nIGV4aXN0aW5nIGJlaGF2aW9yIGluIGEgZmFpcmx5IHBlcnZhc2l2ZSB3YXkuXG5cbkZpcnN0LCBJJ20gbm90aW5nIHRoZSBmaWxlcyB0aGF0IGFyZSB0b3VjaGVkLiBJdCBzZWVtcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gYWRkaW5nIGEgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZS4gVGhhdCBhbG9uZSwgYWZmZWN0aW5nIHRoZSBzeXNmcyBpbnRlcmZhY2UsIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gQW55dGltZSB5b3UgYWx0ZXIgdGhlIHN5c2ZzIGludGVyZmFjZSwgeW91J3JlIG9wZW5pbmcgdGhlIGRvb3IgdG8gcG90ZW50aWFsIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIGFuZCwgYnkgZXh0ZW5zaW9uLCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBDaGFuZ2VzIHRvIGBicmlnaHRuZXNzX3Nob3dgIGFuZCBgYnJpZ2h0bmVzc19zdG9yZWAgaW4gYGxlZC1jbGFzcy5jYCBhcmUgYWxzbyBwcmV0dHkgc2lnbmlmaWNhbnQsIGFmZmVjdGluZyBob3cgYnJpZ2h0bmVzcyBjb250cm9sIHdvcmtzIGFjcm9zcyBhbGwgTEVEcy5cblxuQmV5b25kIHRoYXQsIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2xgLCBhbmQgb3RoZXIgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIHRoZSBgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAgY29uZmlnLCBoaW50cyBhdCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucy4gVGhlIG1lbnRpb24gb2YgYGh3X3RyaWdnZXJlZGAgaW1wbGllcyBzb21lIGxvZ2ljIGNoYW5nZSB3aXRoaW4gdGhlIGV4aXN0aW5nIHRyaWdnZXIgbWFuYWdlbWVudC4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgZmVhdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgdHJpZ2dlciBtZWNoYW5pc21zIGFuZCBob3cgdGhlIG5ldyBzeXNmcyBhdHRyaWJ1dGUgY29udHJvbHMgdGhpcyBpbnRlcmFjdGlvbi5cblxuVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggaW1wYWN0cyBkcml2ZXJzIGxpa2UgdGhlIG5ldGRldiB0cmlnZ2VyLCBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVycywgc3VnZ2VzdHMgYSB3aWRlciByZWFjaC4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGEgbmV3IHRyaWdnZXIgdHlwZTsgaXQncyBhYm91dCBwb3RlbnRpYWxseSBpbnRlZ3JhdGluZyBoYXJkd2FyZSBjb250cm9sIGludG8gZXhpc3RpbmcgTEVEIHN1YnN5c3RlbXMuXG5cbk5vdywgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlYWNoIG9mIHRoZXNlIGNoYW5nZXMuIFNpbmNlIHRoaXMgaXMgdGhlIExFRCBzdWJzeXN0ZW0sIHdoaWNoIGlzIGZ1bmRhbWVudGFsLCBJJ20gYXNzdW1pbmcgdGhhdCBpdCBpcyByZWFzb25hYmx5IHJlYWNoYWJsZSBpbiBhIHZhcmlldHkgb2YgZW52aXJvbm1lbnRzLCBpbmNsdWRpbmcgUUVNVSBhbmQgdmlydHVhbGl6ZWQgc2NlbmFyaW9zLiBBbnkgTEVEIGRldmljZSwgZW11bGF0ZWQgb3IgcmVhbCwgY2FuIGludGVyYWN0IHdpdGggdGhpcy4gVGhlIGZhY3QgdGhhdCBhbnkgZW11bGF0ZWQgb3IgcmVhbCBwbGF0Zm9ybSBkZXZpY2VzIGNhbiBleHBvc2UgdGhlc2UgYXR0cmlidXRlcyBpbiBzeXNmcyBhbmQgdHJpZ2dlciBzeXNmcyBpbnRlcmFjdGlvbnMgYWRkcyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHVzYWdlIG9mIHRoZXNlIHN5bWJvbHMgd2l0aCB0b29scyBsaWtlIEdyZXAuIEknbGwgbmVlZCB0byBrbm93IHdoYXQgY29kZSBwYXRocyB3aWxsIGJlIGhpdCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLCBhbmQsIGlmIHNvLCB3aGF0IHRoZSBiZXN0IGFwcHJvYWNoIHdvdWxkIGJlLiBUaGlzIGxvb2tzIGxpa2UgaXQgaGFzIGZ1enppbmcgcG90ZW50aWFsLCBzaW5jZSB3ZSBoYXZlIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgZnJvbSBodyBjb250cm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk5OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIyOjM3LjUzNDQ0NzgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjgxNjYyMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnPTEwPWlmIExFRFNfVFJJR0dFUlNcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTExLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTI6Y29uZmlnIExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiTEVEIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjI6MzkuNTAyNjE4NzcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc0MDkzMDM2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBMRUQgVHJpZ2dlcnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTEVEIHRyaWdnZXJzIGFyZSBjb25maWd1cmVkLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgYGRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBsaW5lcyAxIHRocm91Z2ggMzAsIGFzIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtYWluIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIHRyaWdnZXIgY29uZmlndXJhdGlvbiB0aGVyZSDigJMgbGlrZWx5IHRoZSBtYWluIG1lbnUgZW50cnkgYW5kIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGtlcm5lbCBmZWF0dXJlcy4gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIGxpbmVzIHdpbGwgZGVmaW5lIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB3aGV0aGVyIGNlcnRhaW4gdHJpZ2dlcnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIHdoaWNoIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb25zIHRoZXkgcmVseSB1cG9uLiBHZXR0aW5nIHRoZSBvdmVydmlldyBvZiB0aGlzIHBhcnQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgZmlsZSBhbmQgaG93IHRoaXMgc2VjdGlvbiB0aWVzIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjI6NTYuOTExOTI0MTM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudWNvbmZpZyBMRURTX1RSSUdHRVJTXFxuICAgMzpcXHRcXHRib29sIFxcXCJMRUQgVHJpZ2dlciBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdHJpZ2dlciBzdXBwb3J0IGZvciB0aGUgbGVkcyBjbGFzcy5cXG4gICA3OlxcdFxcdCAgVGhlc2UgdHJpZ2dlcnMgYWxsb3cga2VybmVsIGV2ZW50cyB0byBkcml2ZSB0aGUgTEVEcyBhbmQgY2FuXFxuICAgODpcXHRcXHQgIGJlIGNvbmZpZ3VyZWQgdmlhIHN5c2ZzLiBJZiB1bnN1cmUsIHNheSBZLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRpZiBMRURTX1RSSUdHRVJTXFxuICAxMTpcXHRcXG4gIDEyOlxcdGNvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcXG4gIDEzOlxcdFxcdGJvb2wgXFxcIkxFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcXFwiXFxuICAxNDpcXHRcXHRkZWZhdWx0IExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgaGFyZHdhcmUgaW5pdGlhdGVkIGhhcmR3YXJlIGNvbnRyb2xcXG4gIDE3OlxcdFxcdCAgdHJhbnNpdGlvbnMsIHdoZXJlIHRoZSBMRUQgaGFyZHdhcmUgYXV0b25vbW91c2x5IHN3aXRjaGVzIGJldHdlZW5cXG4gIDE4OlxcdFxcdCAgXFxcIm5vbmVcXFwiIChpLmUuLCBubyB0cmlnZ2VyKSBhbmQgaXRzIHByaXZhdGUgdHJpZ2dlci5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9sZWRzL2xlZHMtY2xhc3MucnN0IGZvciBkZXRhaWxzLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgTEVEU19UUklHR0VSX1RJTUVSXFxuICAyMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTEVEIFRpbWVyIFRyaWdnZXJcXFwiXFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgYWxsb3dzIExFRHMgdG8gYmUgY29udHJvbGxlZCBieSBhIHByb2dyYW1tYWJsZSB0aW1lclxcbiAgMjY6XFx0XFx0ICB2aWEgc3lzZnMuIFNvbWUgTEVEIGhhcmR3YXJlIGNhbiBiZSBwcm9ncmFtbWVkIHRvIHN0YXJ0XFxuICAyNzpcXHRcXHQgIGJsaW5raW5nIHRoZSBMRUQgd2l0aG91dCBhbnkgZnVydGhlciBzb2Z0d2FyZSBpbnRlcmFjdGlvbi5cXG4gIDI4OlxcdFxcdCAgRm9yIG1vcmUgZGV0YWlscyByZWFkIERvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdC5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMjo1Ni45MTE5ODgwNjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTQ5NTMzNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgTEVEIFRyaWdnZXIgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIExFRCB0cmlnZ2VyIG9wdGlvbnMgYXJlIGJlaW5nIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgYnVpbGQgY29uZmlndXJhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgZHJpdmVycy9sZWRzL0tjb25maWdgLiBUaGF0J2xsIGJlIHRoZSBwbGFjZSB0byBmaW5kIHRoZSBhY3R1YWwgZGVmaW5pdGlvbnMgb2YgYExFRFNfVFJJR0dFUlNgIGFuZCBgTEVEU19UUklHR0VSU19IV19DSEFOR0VEYCwgb3IgYXQgbGVhc3QgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlbS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhlIEtjb25maWcgZmlsZSB3aWxsIHNwZWNpZnkgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGEgZGVzY3JpcHRpb24uIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBjb2RlIGFuZCBkcml2ZXJzIHVzaW5nIHRoZXNlIGZsYWdzIHJlc2lkZSBpbiB0aGUgY29kZWJhc2UuXG5cblRoZW4sIEknbGwgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCBgZHJpdmVycy9sZWRzL01ha2VmaWxlYC4gVGhlIE1ha2VmaWxlIHNob3VsZCByZXZlYWwgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlc2Ugc3ltYm9scyBpbmZsdWVuY2UgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuIFRoaXMgd2lsbCBwcm9iYWJseSBpbmNsdWRlIGNvbmRpdGlvbmFscyBiYXNlZCBvbiB0aG9zZSBLY29uZmlnIHN5bWJvbHMsIGluZGljYXRpbmcgd2hpY2ggc291cmNlIGZpbGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBvcHRpb25zIGFyZSBlbmFibGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyBgTEVEU19UUklHR0VSU2AgYW5kIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgIGFmZmVjdCB0aGUgZHJpdmVyIGJ1aWxkLiBUaGlzIGlzIGhvdyBJJ2xsIGRldGVybWluZSB0aGUgZXh0ZW50IG9mIHRoZWlyIGltcGFjdCBvbiB0aGUgZmluYWwga2VybmVsIGltYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEyMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6MDUuODYxNTI0OTc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTUxNjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkxFRFNfVFJJR0dFUlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9sZWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9LY29uZmlnPTIwMj1jb25maWcgTEVEU19DUk9TX0VDXFxuLS1cXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMDUtXFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTX01VTFRJQ09MT1JcXG5kcml2ZXJzL2xlZHMvS2NvbmZpZzoyMDY6XFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yMDctXFx0ZGVmYXVsdCBNRkRfQ1JPU19FQ19ERVZcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnPTIzMD1jb25maWcgTEVEU19UVVJSSVNfT01OSUFcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTIzNy1cXHRkZXBlbmRzIG9uIFRVUlJJU19PTU5JQV9NQ1VfR1BJT1xcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjIzODpcXHRzZWxlY3QgTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTIzOS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2xlZHMvS2NvbmZpZz0zNDI9Y29uZmlnIExFRFNfQ09CQUxUX1JBUVxcbi0tXFxuZHJpdmVycy9sZWRzL0tjb25maWctMzQ0LVxcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IFxcdTAwMjZcXHUwMDI2IChNSVBTX0NPQkFMVCB8fCBDT01QSUxFX1RFU1QpXFxuZHJpdmVycy9sZWRzL0tjb25maWc6MzQ1OlxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL0tjb25maWctMzQ2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnPTM1OD1jb25maWcgTEVEU19TVU5GSVJFXFxuLS1cXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0zNjEtXFx0ZGVwZW5kcyBvbiBTUEFSQzY0XFxuZHJpdmVycy9sZWRzL0tjb25maWc6MzYyOlxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL0tjb25maWctMzYzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnPTk5Mz1jb25maWcgTEVEU19TVDEyMDJcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTk5Ny1cXHRkZXBlbmRzIG9uIE9GXFxuZHJpdmVycy9sZWRzL0tjb25maWc6OTk4OlxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL0tjb25maWctOTk5LVxcdHNlbGVjdCBMRURTX1RSSUdHRVJfUEFUVEVSTlxcbi0tXFxuZHJpdmVycy9sZWRzL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX0xFRFNfQ0xBU1NfTVVMVElDT0xPUilcXHQrPSBsZWQtY2xhc3MtbXVsdGljb2xvci5vXFxuZHJpdmVycy9sZWRzL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX0xFRFNfVFJJR0dFUlMpXFx0XFx0Kz0gbGVkLXRyaWdnZXJzLm9cXG5kcml2ZXJzL2xlZHMvTWFrZWZpbGUtOS1vYmotJChDT05GSUdfTEVEU19LVU5JVF9URVNUKVxcdFxcdCs9IGxlZC10ZXN0Lm9cXG4tLVxcbmRyaXZlcnMvbGVkcy9NYWtlZmlsZT0xMjA9b2JqLSQoQ09ORklHX0xFRFNfQ0xBU1NfTVVMVElDT0xPUilcXHQrPSByZ2IvXFxuLS1cXG5kcml2ZXJzL2xlZHMvTWFrZWZpbGUtMTIyLSMgTEVEIFRyaWdnZXJzXFxuZHJpdmVycy9sZWRzL01ha2VmaWxlOjEyMzpvYmotJChDT05GSUdfTEVEU19UUklHR0VSUylcXHRcXHQrPSB0cmlnZ2VyL1xcbmRyaXZlcnMvbGVkcy9NYWtlZmlsZS0xMjQtXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9OTE9c3RhdGljIERFVklDRV9BVFRSX1JPKG1heF9icmlnaHRuZXNzKTtcXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtOTItXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jOjkzOiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy05NC1zdGF0aWMgY29uc3QgQklOX0FUVFIodHJpZ2dlciwgMDY0NCwgbGVkX3RyaWdnZXJfcmVhZCwgbGVkX3RyaWdnZXJfd3JpdGUsIDApO1xcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jPTEzNj1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbGVkX2dyb3Vwc1tdID0ge1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy0xMzctXFx0XFx1MDAyNmxlZF9ncm91cCxcXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM6MTM4OiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy0xMzktXFx0XFx1MDAyNmxlZF90cmlnZ2VyX2dyb3VwLFxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jPTUxNz1pbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNTg5LVxcdGxlZF9jZGV2LVxcdTAwM2V3b3JrX2ZsYWdzID0gMDtcXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM6NTkwOiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy01OTEtXFx0aW5pdF9yd3NlbShcXHUwMDI2bGVkX2NkZXYtXFx1MDAzZXRyaWdnZXJfbG9jayk7XFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNjA5LVxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo2MTA6I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTYxMS1cXHRsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChsZWRfY2Rldik7XFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9NjMyPXZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNjM5LVxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo2NDA6I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jLTY0MS1cXHRkb3duX3dyaXRlKFxcdTAwMjZsZWRfY2Rldi1cXHUwMDNldHJpZ2dlcl9sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz00OTE9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQ5Mi1cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmM6NDkzOiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jLTQ5NC1cXG4tLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYz01NzE9RVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKTtcXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNTcyLVxcbmRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYzo1NzM6I2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi9cXG5kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMtNTc0LVxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZHMuaD0zND1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBsZWRzX2xpc3Q7XFxuZHJpdmVycy9sZWRzL2xlZHMuaC0zNS1cXG5kcml2ZXJzL2xlZHMvbGVkcy5oOjM2OiNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuZHJpdmVycy9sZWRzL2xlZHMuaC0zNy12b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuZHJpdmVycy9sZWRzL2xlZHMuaD0zOD12b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XFxuZHJpdmVycy9sZWRzL2xlZHMuaDozOTojZWxzZSAvKiAhQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xcbmRyaXZlcnMvbGVkcy9sZWRzLmgtNDAtc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikgeyB9XFxuZHJpdmVycy9sZWRzL2xlZHMuaD00MT1zdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH1cXG5kcml2ZXJzL2xlZHMvbGVkcy5oOjQyOiNlbmRpZiAvKiBDT05GSUdfTEVEU19UUklHR0VSU19IV19DSEFOR0VEICovXFxuZHJpdmVycy9sZWRzL2xlZHMuaC00My1cXG4tLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjI6bWVudWNvbmZpZyBMRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIkxFRCBUcmlnZ2VyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTktXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZzoxMDppZiBMRURTX1RSSUdHRVJTXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjEyOmNvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIkxFRCBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnPTEwOT1jb21tZW50IFxcXCJpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpXFxcIlxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTEwOlxcdGRlcGVuZHMgb24gTEVEU19UUklHR0VSU1xcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTExLVxcbi0tXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZz0xNTg9Y29uZmlnIExFRFNfVFJJR0dFUl9JTlBVVF9FVkVOVFNcXG4tLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTczLVxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTc0OmVuZGlmICMgTEVEU19UUklHR0VSU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzowNS45MDgwODE1ODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjI3MjkxNDc1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTEVEIERyaXZlciBJbnRlcmFjdGlvbnMgYW5kIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTEVEIGRyaXZlciBzaXR1YXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jYCBhbmQgYGRyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleHBvc2VkIGZ1bmN0aW9ucyBhbmQgaW50ZXJmYWNlcyBpbnZvbHZlZCwgcmlnaHQ/IEdvdHRhIHNlZSB3aGF0IHRoZSBsYW5kc2NhcGUgbG9va3MgbGlrZS4gVGhlbiwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGJlZW4gYWRkZWQgaW4gdGhpcyBwYXRjaC5cblxuSSd2ZSBnb3QgYSBsaXN0IGZyb20gYGxlZC10cmlnZ2Vycy5jYDogYGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRgLCBgbGVkX3RyaWdnZXJfc2V0YCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkYCwgYGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZGAsIGFuZCBgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkYC4gVGhlc2UgYXJlIGFsbCBgRVhQT1JUX1NZTUJPTF9HUExgLCBzbyBkZWZpbml0ZWx5IHdvcnRoIG5vdGluZy4gRnJvbSBgbGVkLWNsYXNzLmNgLCBJIHNlZSBgYnJpZ2h0bmVzc19zaG93YCwgYGJyaWdodG5lc3Nfc3RvcmVgIGFuZCBhIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBzeXNmcyBhdHRyaWJ1dGUuXG5cbk5leHQsIEknbGwgbmVlZCB0byBsb29rIGF0IGBpZGVhcGFkLWxhcHRvcC5jYC4gSXQncyBnb3Qgc29tZSBmdW5jdGlvbnMgbGlrZSBgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXRgLCBgaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19zZXRgLCBgaWRlYXBhZF9rYmRfYmxfbm90aWZ5YCwgYGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZWAgYW5kIGBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkYC4gSSdtIGN1cmlvdXMgd2hhdCBraW5kIG9mIGludGVyYWN0aW9ucyB0aGlzIGhhcyB3aXRoIHRoZSBMRUQgY2xhc3MuIEFsc28sIGxldCdzIG5vdCBmb3JnZXQgdG8gY2hlY2sgYG5ldGRldl90cmlnX29mZmxvYWRlZGAgaW4gYGxlZHRyaWctbmV0ZGV2LmNgIC5cblxuVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3ZSBjYW4gZWZmZWN0aXZlbHkgZnV6ei4gTXkgdW5kZXJzdGFuZGluZyBpcyBzeXprYWxsZXIgaXMgYSBnb29kIGNhbmRpZGF0ZSwgYnV0IEkgbmVlZCB0byBjb25maXJtOiBjYW4gaXQgYWNjZXNzIGFuZCBtYW5pcHVsYXRlIHRoZSByZWxldmFudCBMRUQgY2xhc3MgYW5kIHRyaWdnZXIgaW50ZXJmYWNlcz8gSSBuZWVkIHRvIGtub3cgaWYgaXQgY2FuIHJlYWQgYW5kIHdyaXRlIHRvIHRoZSBgL3N5cy9jbGFzcy9sZWRzLy4uLmAgc3lzZnMgZmlsZXMuXG5cbklmIHRoYXQgY2hlY2tzIG91dCwgSSBzaG91bGQgc2VlIGlmIHRoZXJlIGFyZSBzdGFuZGFyZCBvciB2aXJ0dWFsIExFRCBkZXZpY2VzL3RyaWdnZXJzLCBsaWtlIGBuZXRkZXZgIChgTkVUREVWX0xFRFNgIC8gYExFRFNfVFJJR0dFUl9ORVRERVZgKS4gRmluYWxseSwgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGltZSB0byBjaGVjayBhcm91bmQgYExFRFNfQ0xBU1NgLCBgTEVEU19UUklHR0VSU2AsIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgLCBgTEVEU19UUklHR0VSX05FVERFVmAsIGFuZCB3aGF0ZXZlciBlbHNlIGlzIHJlbGV2YW50LiBUaGlzIHNob3VsZCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDQ4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjMyLjE4MDk5ODc3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NDM5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExFRFNfQ0xBU1NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9sZWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9LY29uZmlnPTIxPWlmIE5FV19MRURTXFxuZHJpdmVycy9sZWRzL0tjb25maWctMjItXFxuZHJpdmVycy9sZWRzL0tjb25maWc6MjM6Y29uZmlnIExFRFNfQ0xBU1NcXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiTEVEIENsYXNzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2xlZHMvS2NvbmZpZzoyOTpjb25maWcgTEVEU19DTEFTU19GTEFTSFxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJMRUQgRmxhc2ggQ2xhc3MgU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTM4LVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjM5OmNvbmZpZyBMRURTX0NMQVNTX01VTFRJQ09MT1JcXG5kcml2ZXJzL2xlZHMvS2NvbmZpZy00MC1cXHR0cmlzdGF0ZSBcXFwiTEVEIE11bHRpY29sb3IgQ2xhc3MgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6MzIuMjI2OTQ2NDY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNTM3NjkzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OlxuXG4qKktjb25maWcgRGl2ZTogTEVEU19UUklHR0VSX05FVERFVioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHplcm8gaW4gb24gYExFRFNfVFJJR0dFUl9ORVRERVZgLiBJJ20gZ3Vlc3NpbmcgdGhlcmUncyBzb21ldGhpbmcgc3BlY2lmaWMgSSBuZWVkIHRvIGtub3cgYWJvdXQgaXRzIGNvbmZpZ3VyYXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MganVzdCBtYWtlIHN1cmUgaXQncyBlbmFibGVkIGFuZCB3aGF0LCBpZiBhbnksIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgdGhpcyB0cmlnZ2VyIG1pZ2h0IGhhdmUgd2l0aCB0aGUgbmV0d29yayBkZXZpY2Ugc3Vic3lzdGVtLiBBcmUgdGhlcmUgYW55IHVudXN1YWwgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIHNwZWNpZmljIGVkZ2UgY2FzZXMgdGhlIGN1cnJlbnQgY29kZSBoYW5kbGVzLCBvciBkb2Vzbid0IGhhbmRsZSwgdGhhdCBuZWVkIHRvIGJlIHJldmlzaXRlZD8gVGltZSB0byBkaWcgaW50byBLY29uZmlnIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzMwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6NDAuMzgwNzE5ODMzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM0NDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJMRURTX1RSSUdHRVJfTkVUREVWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbGVkc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnPTEyNj1jb25maWcgTEVEU19UUklHR0VSX1BBTklDXFxuLS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnLTEzNC1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnOjEzNTpjb25maWcgTEVEU19UUklHR0VSX05FVERFVlxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTM2LVxcdHRyaXN0YXRlIFxcXCJMRUQgTmV0ZGV2IFRyaWdnZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfTEVEU19UUklHR0VSX1BBTklDKVxcdCs9IGxlZHRyaWctcGFuaWMub1xcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19MRURTX1RSSUdHRVJfTkVUREVWKVxcdCs9IGxlZHRyaWctbmV0ZGV2Lm9cXG5kcml2ZXJzL2xlZHMvdHJpZ2dlci9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfTEVEU19UUklHR0VSX1BBVFRFUk4pXFx0Kz0gbGVkdHJpZy1wYXR0ZXJuLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6NDAuNDI4MDczMjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg0ODk0MzAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgTEVEIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgTkVXX0xFRFNgIGRlcGVuZGVuY3kgd2l0aGluIHRoZSBgZHJpdmVycy9sZWRzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBzZXR0aW5ncyBpdCByZWxpZXMgb24uIEkgYWx3YXlzIHN0YXJ0IHdpdGggZGVwZW5kZW5jaWVzOyBpdCdzIHRoZSBmb3VuZGF0aW9uIG9mIHVuZGVyc3RhbmRpbmcgaG93IGFueXRoaW5nIHdpbGwgZml0IGludG8gdGhlIHdob2xlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBlbnN1cmUgYSBzbW9vdGggaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTUxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6NDUuMjc3MDE5MjE2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2xlZHMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIExFRFNfR1BJT19SRUdJU1RFUlxcbiAgIDM6XFx0XFx0Ym9vbFxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyB0aGUgZnVuY3Rpb24gZ3Bpb19sZWRfcmVnaXN0ZXJfZGV2aWNlLlxcbiAgIDY6XFx0XFx0ICBBcyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgYXJjaCBjb2RlIGl0IG11c3Qgbm90IGJlIGNvbXBpbGVkIGFzIGFcXG4gICA3OlxcdFxcdCAgbW9kdWxlLlxcbiAgIDg6XFx0XFxuICAgOTpcXHQjIFRoaXMgbGlicmFyeSBkb2VzIG5vdCBkZXBlbmQgb24gTkVXX0xFRFMgYW5kIG11c3QgYmUgaW5kZXBlbmRlbnQgc28gaXQgY2FuIGJlXFxuICAxMDpcXHQjIHNlbGVjdGVkIGZyb20gb3RoZXIgc3Vic3lzdGVtcyAoc3BlY2lmaWNhbGx5IGJhY2tsaWdodCkuXFxuICAxMTpcXHRjb25maWcgTEVEU19FWFBSRVNTV0lSRVxcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBHUElPTElCXFxuICAxNDpcXHRcXG4gIDE1OlxcdG1lbnVjb25maWcgTkVXX0xFRFNcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIkxFRCBTdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTYXkgWSB0byBlbmFibGUgTGludXggTEVEIHN1cHBvcnQuICBUaGlzIGFsbG93cyBjb250cm9sIG9mIHN1cHBvcnRlZFxcbiAgMTk6XFx0XFx0ICBMRURzIGZyb20gYm90aCB1c2Vyc3BhY2UgYW5kIG9wdGlvbmFsbHksIGJ5IGtlcm5lbCBldmVudHMgKHRyaWdnZXJzKS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0aWYgTkVXX0xFRFNcXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIExFRFNfQ0xBU1NcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJMRUQgQ2xhc3MgU3VwcG9ydFxcXCJcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgTEVEIHN5c2ZzIGNsYXNzIGluIC9zeXMvY2xhc3MvbGVkcy4gIFlvdSdsbFxcbiAgMjc6XFx0XFx0ICBuZWVkIHRoaXMgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggTEVEcy4gIElmIHVuc3VyZSwgc2F5IFkuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBMRURTX0NMQVNTX0ZMQVNIXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTEVEIEZsYXNoIENsYXNzIFN1cHBvcnRcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1NcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZmxhc2ggTEVEIHN5c2ZzIGNsYXNzIGluIC9zeXMvY2xhc3MvbGVkcy5cXG4gIDM0OlxcdFxcdCAgSXQgd3JhcHMgTEVEIENsYXNzIGFuZCBhZGRzIGZsYXNoIExFRHMgc3BlY2lmaWMgc3lzZnMgYXR0cmlidXRlc1xcbiAgMzU6XFx0XFx0ICBhbmQga2VybmVsIGludGVybmFsIEFQSSB0byBpdC4gWW91J2xsIG5lZWQgdGhpcyB0byBwcm92aWRlIHN1cHBvcnRcXG4gIDM2OlxcdFxcdCAgZm9yIHRoZSBmbGFzaCByZWxhdGVkIGZlYXR1cmVzIG9mIGEgTEVEIGRldmljZS4gSXQgY2FuIGJlIGJ1aWx0XFxuICAzNzpcXHRcXHQgIGFzIGEgbW9kdWxlLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRjb25maWcgTEVEU19DTEFTU19NVUxUSUNPTE9SXFxuICA0MDpcXHRcXHR0cmlzdGF0ZSBcXFwiTEVEIE11bHRpY29sb3IgQ2xhc3MgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6NDUuMjc3MTI5MTA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTMzOTc3NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkNoZWNraW5nIGBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBMZXQncyBzdGFydCB3aXRoIGBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRGAuIFRoYXQgZmxhZyBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgc2lnbmlmaWNhbnQgaGFzIGNoYW5nZWQgaW4gdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgbGV2ZWwuIFRoaXMgbWVhbnMgYSBkaXJlY3QsIHBoeXNpY2FsIGFsdGVyYXRpb24gb2NjdXJyZWQsIGJ5cGFzc2luZyB0aGUgdHlwaWNhbCBzb2Z0d2FyZSBjb250cm9sLiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGJlY2F1c2UgYSBoYXJkd2FyZSBjaGFuZ2UgZGljdGF0ZXMgaG93IHRoZSBzb2Z0d2FyZSByZXNwb25kcyBhbmQgdXBkYXRlcy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyBmbGFnIGlzIHNldCwgd2hhdCB0cmlnZ2VycyBpdCwgYW5kIHRoZSBpbW1lZGlhdGUgY29uc2VxdWVuY2VzIHdoZW4gaXQncyBhc3NlcnRlZC4gRG9lcyB0aGlzIGxlYWQgdG8gYW4gaW50ZXJydXB0IGhhbmRsZXIsIGEgcG9sbGluZyBsb29wLCBvciBwZXJoYXBzIGEgZGlyZWN0IHdyaXRlIHRvIGEgcmVnaXN0ZXI/IEFuZCB3aGF0IHNwZWNpZmljIHJlZ2lzdGVycyBhcmUgaW52b2x2ZWQ/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGFuYWxvZyBhZGp1c3RtZW50IG9yIGEgbW9yZSBjb21wbGV4IFBXTSBpbXBsZW1lbnRhdGlvbj8gVWx0aW1hdGVseSwgSSBtdXN0IHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gcmVjb25jaWxlcyB0aGUgbmV3IGhhcmR3YXJlIHZhbHVlIHdpdGggdGhlIGludGVuZGVkIHNvZnR3YXJlIHN0YXRlLiBBcmUgdGhlcmUgYW55IHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdG8gd29ycnkgYWJvdXQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSBjb2RlIHRoYXQgcmVhZHMgYW5kIHJlYWN0cyB0byB0aGlzIGZsYWcgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFuZCBwcmV2ZW50IGNvbmZsaWN0aW5nIGJlaGF2aW9ycy4gTGV0J3Mgc2VlLi4ud2hlcmUncyB0aGUgZGVmaW5pdGlvbiwgYW5kIGxldCdzIHRyYWNlIGl0IHRocm91Z2ggdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4NzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjU3LjQxMTEwOTY0NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMjQ5NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9sZWRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbGVkcy9LY29uZmlnPTM5PWNvbmZpZyBMRURTX0NMQVNTX01VTFRJQ09MT1JcXG4tLVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbGVkcy9LY29uZmlnOjQ5OmNvbmZpZyBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkxFRCBDbGFzcyBicmlnaHRuZXNzX2h3X2NoYW5nZWQgYXR0cmlidXRlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmM9MTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpsZWRfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtMTQzLVxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzoxNDQ6I2lmZGVmIENPTkZJR19MRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy0xNDUtc3RhdGljIHNzaXplX3QgYnJpZ2h0bmVzc19od19jaGFuZ2VkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jPTUxNz1pbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuLS1cXG5kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMtNTkyLSNlbmRpZlxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYzo1OTM6I2lmZGVmIENPTkZJR19MRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYy01OTQtXFx0bGVkX2NkZXYtXFx1MDAzZWJyaWdodG5lc3NfaHdfY2hhbmdlZCA9IC0xO1xcbi0tXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZz0xMj1jb25maWcgTEVEU19UUklHR0VSU19IV19DSEFOR0VEXFxuZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZy0xMy1cXHRib29sIFxcXCJMRUQgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWc6MTQ6XFx0ZGVmYXVsdCBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFxcbmRyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWctMTUtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzo1Ny40NTgyNDA1MjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4MDYyODI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2NvbmZpZyBJbnNwZWN0aW9uIGZvciBJREVBUEFEX0xBUFRPUCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGF0IGBJREVBUEFEX0xBUFRPUGAgc3ltYm9sLCBzcGVjaWZpY2FsbHkgd2hlcmUgYW5kIGhvdyBpdCdzIGRlZmluZWQgYW5kIHVzZWQuIE15IGluc3RpbmN0IGlzIHRoYXQgaXQgd2lsbCBiZSBpbiB0aGUgYGRyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gc3BvdCBmb3IgTGVub3ZvLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlcnMgYW5kIGZlYXR1cmVzLCBhbmQgdGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVjbGFyZWQuIEkga25vdyB0aGVzZSBwYXRocyBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIGJ1dCBJIHN0aWxsIGRvIGEgcXVpY2sgbWVudGFsIGNoZWNrIOKAkyB5ZXAsIHRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uLiBMZXQncyBnZXQgdG8gaXQuIFRpbWUgdG8gb3BlbiB0aGF0IGBLY29uZmlnYCBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1ODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzo1OS44Mzg4NzEzNzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTGVub3ZvIFg4NiBQbGF0Zm9ybSBTcGVjaWZpYyBEcml2ZXJzXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBJREVBUEFEX0xBUFRPUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkxlbm92byBJZGVhUGFkIExhcHRvcCBFeHRyYXNcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIEFDUElcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gQUNQSV9CQVRURVJZXFxuICAxMDpcXHRcXHRkZXBlbmRzIG9uIFJGS0lMTCBcXHUwMDI2XFx1MDAyNiBJTlBVVFxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBTRVJJT19JODA0MlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIEFDUElfVklERU8gfHwgQUNQSV9WSURFTyA9IG5cXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gQUNQSV9XTUkgfHwgQUNQSV9XTUkgPSBuXFxuICAxNTpcXHRcXHRzZWxlY3QgQUNQSV9QTEFURk9STV9QUk9GSUxFXFxuICAxNjpcXHRcXHRzZWxlY3QgSU5QVVRfU1BBUlNFS01BUFxcbiAgMTc6XFx0XFx0c2VsZWN0IE5FV19MRURTXFxuICAxODpcXHRcXHRzZWxlY3QgTEVEU19DTEFTU1xcbiAgMTk6XFx0XFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcXG4gIDIwOlxcdFxcdGhlbHBcXG4gIDIxOlxcdFxcdCAgVGhpcyBpcyBhIGRyaXZlciBmb3IgTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MgY29udGFpbnMgZHJpdmVycyBmb3JcXG4gIDIyOlxcdFxcdCAgcmZraWxsIHN3aXRjaCwgaG90a2V5LCBmYW4gY29udHJvbCBhbmQgYmFja2xpZ2h0IGNvbnRyb2wuXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBMRU5PVk9fV01JX0hPVEtFWV9VVElMSVRJRVNcXG4gIDI1OlxcdFxcdHRyaXN0YXRlIFxcXCJMZW5vdm8gSG90a2V5IFV0aWxpdHkgV01JIGV4dHJhcyBkcml2ZXJcXFwiXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIEFDUElfV01JXFxuICAyNzpcXHRcXHRzZWxlY3QgTkVXX0xFRFNcXG4gIDI4OlxcdFxcdHNlbGVjdCBMRURTX0NMQVNTXFxuICAyOTpcXHRcXHRpbXBseSBJREVBUEFEX0xBUFRPUFxcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBXTUkgc3VwcG9ydCBmb3IgTGVub3ZvIGN1c3RvbWl6ZWQgaG90a2V5cyBmdW5jdGlvbixcXG4gIDMyOlxcdFxcdCAgc3VjaCBhcyBMRUQgY29udHJvbCBmb3IgYXVkaW8vbWljIG11dGUgZXZlbnQgZm9yIElkZWFwYWQsIFlPR0EsIFhpYW9YaW4sXFxuICAzMzpcXHRcXHQgIEdhbWluZywgVGhpbmtCb29rIGFuZCBzbyBvbi5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIExFTk9WT19XTUlfQ0FNRVJBXFxuICAzNjpcXHRcXHR0cmlzdGF0ZSBcXFwiTGVub3ZvIFdNSSBDYW1lcmEgQnV0dG9uIGRyaXZlclxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gQUNQSV9XTUlcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gSU5QVVRcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgTGVub3ZvIGNhbWVyYSBidXR0b24uIFRoZSBDYW1lcmFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6NTkuODM4OTQ3OTMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODMzNDAzMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IExFRCBTdWJzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHdoZXRoZXIgdGhpcyBMRUQgc3Vic3lzdGVtIHBhdGNoIGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBleHRlbnNpdmUgbW9kaWZpY2F0aW9ucyB0byB0aGUgTEVEIGNvcmUsIGluY2x1ZGluZyB1cGRhdGVzIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UgKHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIGB0cmlnZ2VyX21heV9vZmZsb2FkYCksIGltcHJvdmVkIGxvY2tpbmcgaW4gYnJpZ2h0bmVzcyBoYW5kbGluZywgYW5kLCBjcml0aWNhbGx5LCBhIG5ldyBmcmFtZXdvcmsgZm9yIGhhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25zIChgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGApLiAgQSBuZXcgcHJpdmF0ZSB0cmlnZ2VyIGBpZGVhcGFkLWF1dG9gIGhhcyBhbHNvIGJlZW4gYWRkZWQgaW4gYGlkZWFwYWQtbGFwdG9wLmNgLCBhbmQgdGhlIG5ldGRldiB0cmlnZ2VyIGhhcyBiZWVuIG1vZGlmaWVkIHRvby5cblxuVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHJlYWNoYWJpbGl0eSwgYW5kIHllcywgaXQgc2VlbXMgaGlnaGx5IHJlYWNoYWJsZS4gVGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgTEVEcyBpcyBhIHN0YW5kYXJkIGF2ZW51ZSBmcm9tIHVzZXJzcGFjZS4gQW55IExFRCBkZXZpY2UgKGtleWJvYXJkLCBuZXR3b3JrLCB2aXJ0dWFsLCBldGMuKSBleHBvc2VzIHRoZSByZWxldmFudCBhdHRyaWJ1dGVzIChgdHJpZ2dlcmAsIGBicmlnaHRuZXNzYCwgYHRyaWdnZXJfbWF5X29mZmxvYWRgKS4gSW50ZXJhY3Rpbmcgd2l0aCB0aG9zZSBzeXNmcyBmaWxlcyBzaG91bGQgZXhlcmNpc2UgdGhlIGNvcmUgbG9naWMsIGhpdHRpbmcgZnVuY3Rpb25zIGxpa2UgYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBicmlnaHRuZXNzX3Nob3dgLCBgYnJpZ2h0bmVzc19zdG9yZWAsIGBsZWRfdHJpZ2dlcl9zZXRgLCBldGMuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgY29uc3RpdHV0ZSBvdXIgXCJGb2N1c1N5bWJvbHNcIi4gQmFzZWQgb24gdGhlIGNvZGUsIHRoZXkgc2VlbSB0byBiZTogYHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvd2AsIGBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYCwgYGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sYCwgYGxlZF90cmlnZ2VyX3NldGAsIGFuZCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAuICBXZSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZXNlIGluIGBsZWQtdHJpZ2dlcnMuY2AgdG8gYmUgY2VydGFpbi5cblxuV2UnbGwgbmVlZCB0byBub3RlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UnbGwgbmVlZCBgTkVXX0xFRFNgLCBgTEVEU19DTEFTU2AsIGBMRURTX1RSSUdHRVJTYCwgYExFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRGAsIGBMRURTX1RSSUdHRVJfTkVUREVWYCwgYExFRFNfQlJJR0hUTkVTU19IV19DSEFOR0VEYCwgYW5kIGBJREVBUEFEX0xBUFRPUGAuICBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgbmFtZXMgYXJlIHByb3Blcmx5IHNwZWxsZWQuXG5cbkZpbmFsbHksIGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBtb2RpZmllZCBmaWxlcyBpcyBuZWNlc3Nhcnk6IGBkcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNgLCBgZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jYCwgYGRyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNgLCBgZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNgLCBgZHJpdmVycy9sZWRzL2xlZHMtY3Jvc19lYy5jYCwgYGRyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jYC5cblxuQmFzZWQgb24gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgdGhlIGFuc3dlciBpcyBZZXMhICBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gV2UncmUgZGVhbGluZyB3aXRoIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiBjb3JlIGRyaXZlciBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRyaWdnZXIgbWFuYWdlbWVudCwgbG9ja2luZywgY29uY3VycmVuY3kgYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgd29ya3F1ZXVlcywgYW5kIHRoZSBuZXcgaGFyZHdhcmUtdHJpZ2dlcmVkIHRyYW5zaXRpb25zLiBUaGlzIGhhcyBhIGhpZ2ggcG90ZW50aWFsIGZvciBleHBsb2l0YWJsZSBidWdzLiAgVGhlIGNvZGUgaXMgcmVhY2hhYmxlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQuXG5cblNvLCBJIHdpbGwgY29uZmlybTpcblxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dgLCBgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZGAsIGBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbGAsIGBsZWRfdHJpZ2dlcl9zZXRgLCBgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE5FV19MRURTYCwgYExFRFNfQ0xBU1NgLCBgTEVEU19UUklHR0VSU2AsIGBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURgLCBgTEVEU19UUklHR0VSX05FVERFVmAsIGBMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRGAsIGBJREVBUEFEX0xBUFRPUGAuXG5cbk5vdywgdGltZSB0byBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Mzc5LCJPdXRwdXRUb2tlbnMiOjI0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyNDo1Ny42NzIzNTM3NjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTUyNjI5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVXX0xFRFNcIixcbiAgICBcIkxFRFNfQ0xBU1NcIixcbiAgICBcIkxFRFNfVFJJR0dFUlNcIixcbiAgICBcIkxFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFwiLFxuICAgIFwiTEVEU19UUklHR0VSX05FVERFVlwiLFxuICAgIFwiTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRURcIixcbiAgICBcIklERUFQQURfTEFQVE9QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93XCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbFwiLFxuICAgIFwibGVkX3RyaWdnZXJfc2V0XCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBnZW5lcmljIHN5c2ZzIGF0dHJpYnV0ZSAodHJpZ2dlcl9tYXlfb2ZmbG9hZCkgZm9yIHF1ZXJ5YWJsZSBoYXJkd2FyZS1vZmZsb2FkZWQgTEVEIHRyaWdnZXJzLCB1cGRhdGVzIGNvcmUgYnJpZ2h0bmVzcyBnZXQvc2V0IGxvY2tpbmcgYW5kIHRyaWdnZXIgcmVtb3ZhbCBsb2dpYywgYW5kIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbnMgKENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQpIGFsb25nIHdpdGggdXBkYXRlcyB0byBMRUQgdHJpZ2dlciBkcml2ZXJzLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgTEVEIGNsYXNzL3RyaWdnZXIgc3lzZnMgaW50ZXJmYWNlcyBhbmQgY29yZSB0cmlnZ2VyIGxpZmVjeWNsZSBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVdfTEVEU1wiLFxuICAgIFwiTEVEU19DTEFTU1wiLFxuICAgIFwiTEVEU19UUklHR0VSU1wiLFxuICAgIFwiTEVEU19UUklHR0VSU19IV19DSEFOR0VEXCIsXG4gICAgXCJMRURTX1RSSUdHRVJfTkVUREVWXCIsXG4gICAgXCJMRURTX0JSSUdIVE5FU1NfSFdfQ0hBTkdFRFwiLFxuICAgIFwiSURFQVBBRF9MQVBUT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3dcIixcbiAgICBcImxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWRcIixcbiAgICBcImxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sXCIsXG4gICAgXCJsZWRfdHJpZ2dlcl9zZXRcIixcbiAgICBcImxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIGdlbmVyaWMgc3lzZnMgYXR0cmlidXRlICh0cmlnZ2VyX21heV9vZmZsb2FkKSBmb3IgcXVlcnlhYmxlIGhhcmR3YXJlLW9mZmxvYWRlZCBMRUQgdHJpZ2dlcnMsIHVwZGF0ZXMgY29yZSBicmlnaHRuZXNzIGdldC9zZXQgbG9ja2luZyBhbmQgdHJpZ2dlciByZW1vdmFsIGxvZ2ljLCBhbmQgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucyAoQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCkgYWxvbmcgd2l0aCB1cGRhdGVzIHRvIExFRCB0cmlnZ2VyIGRyaXZlcnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBMRUQgY2xhc3MvdHJpZ2dlciBzeXNmcyBpbnRlcmZhY2VzIGFuZCBjb3JlIHRyaWdnZXIgbGlmZWN5Y2xlIGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyNDo1Ny43NDc4ODY1MTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTEyNDY2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjQ6NTcuNzQ4NTM2MzU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDIxMTE4MTE4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtY29udHJvbGxlZCBMRUQgdHJpZ2dlciBvZmZsb2FkIGluZnJhc3RydWN0dXJlLCB0aGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZSwgaGFyZHdhcmUgdHJpZ2dlciB0cmFuc2l0aW9uIG5vdGlmaWNhdGlvbnMgdmlhIGEgd29ya3F1ZXVlLCBhbmQgdXBkYXRlcyBkcml2ZXJzIGluY2x1ZGluZyBpZGVhcGFkLWxhcHRvcCBhbmQgbGVkcy1jcm9zX2VjLlxcblxcbjEuIE5vIGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSB2aWEgY29weV90b191c2VyLCBuZXRsaW5rLCBpb2N0bCwgb3Igc29ja2V0IGJ1ZmZlcnMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzLiBVc2Vyc3BhY2UgZXhwb3N1cmUgaXMgbGltaXRlZCB0byBzdGFuZGFyZCBzeXNmc19lbWl0IHN0cmluZyBmb3JtYXR0aW5nLlxcbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdCBmaWVsZHMgKGUuZy4sIHRyaWdnZXJzX2h3X2NoYW5nZWQsIGxhc3RfaHdfYnJpZ2h0bmVzcywgaHdfYnJpZ2h0bmVzcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBvciBicmFuY2hpbmcuXFxuMy4gQ29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBoYW5kbGluZyAoc3VjaCBhcyB3b3JrcXVldWUgZmx1c2gvZGVzdHJ1Y3Rpb24gYW5kIG11dGV4L3J3c2VtIGxvY2tzKSBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLlxcblxcblRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMDdhNWUzYzkyMTE0Yzc1NDUzMTcyYTk0NTJhYjdhMjViYzM0YjUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwNzoyMjoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcbmluZGV4IGQ0YzkxOGNjMTFhMTIuLjk0YzMzMWQ5YzQxMDUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWRcbkBAIC03OCw2ICs3OCwzMSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0KHdoaWNoIHdvdWxkIG9mdGVuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIGRldmljZSB0cmVlIGZvciB0aGVcbiBcdFx0aGFyZHdhcmUpLlxuIFxuK1doYXQ6XHRcdC9zeXMvY2xhc3MvbGVkcy9cdTAwM2NsZWRcdTAwM2UvdHJpZ2dlcl9tYXlfb2ZmbG9hZFxuK0RhdGU6XHRcdFNlcHRlbWJlciAyMDI2XG4rS2VybmVsVmVyc2lvbjpcdDcuNFxuK0NvbnRhY3Q6XHRsaW51eC1sZWRzQHZnZXIua2VybmVsLm9yZ1xuK0Rlc2NyaXB0aW9uOlxuK1x0XHROYW1lcyBhbmQgc3RhdGVzIG9mIHRyaWdnZXJzIHRoYXQgbWF5IGJlIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbitcdFx0U3VjaCB0cmlnZ2VycyBhcmUgYWxzbyBjYWxsZWQgXCJoYXJkd2FyZSBjb250cm9sIHRyaWdnZXJcIiBpbiBzb21lXG4rXHRcdGNvbnRleHQuXG4rXG4rXHRcdE9ubHkgZXhpc3RzIHdoZW4gdGhlIExFRCBzdXBwb3J0cyB0cmlnZ2VyIG9mZmxvYWQuXG4rXG4rXHRcdFJlYWRpbmcgdGhpcyBmaWxlIHJldHVybnMgYSBsaXN0IG9mIHRyaWdnZXJzIHRoYXQgYXJlIGNhcGFibGUgdG9cbitcdFx0YmUgb2ZmbG9hZGVkLiBUaGUgb3B0aW9uYWwgYnJhY2tldHMgYXJvdW5kIHRoZSB0cmlnZ2VyIG5hbWVcbitcdFx0aW5kaWNhdGUgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHRyaWdnZXI6XG4rXG4rXHRcdC0gYGZvb190cmlnZ2VyYDogdGhlIHRyaWdnZXIgaXMgbm90IHNlbGVjdGVkLlxuK1x0XHQtIGBcdTAwM2Nmb29fdHJpZ2dlclx1MDAzZWA6IHRoZSB0cmlnZ2VyIGlzIHNlbGVjdGVkLCBidXQgZmFsbHMgYmFjayB0b1xuK1x0XHQgIHNvZnR3YXJlIGJsaW5rIGZvciBzb21lIHJlYXNvbiAoZS5nLiwgaW5jb21wYXRpYmxlIHRyaWdnZXJcbitcdFx0ICBwYXJhbWV0ZXJzKVxuK1x0XHQtIGBbZm9vX3RyaWdnZXJdYDogdGhlIHRyaWdnZXIgaXMgc2VsZWN0ZWQgYW5kIG9mZmxvYWRlZCB0b1xuK1x0XHQgIGhhcmR3YXJlLlxuK1xuK1x0XHRUaGUgXCJuZXRkZXZcIiB0cmlnZ2VyIGFsc28gcHJvdmlkZXMgYSBjdXN0b20gYXR0cmlidXRlIHRvXG4rXHRcdGluZGljYXRlIGl0cyBzdGF0ZSwgc2VlIGAvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL29mZmxvYWRlZGAuXG4rXG4gV2hhdDpcdFx0L3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS9pbnZlcnRlZFxuIERhdGU6XHRcdEphbnVhcnkgMjAxMVxuIEtlcm5lbFZlcnNpb246XHQyLjYuMzhcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZC10cmlnZ2VyLW5ldGRldiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2XG5pbmRleCBlZDQ2YjM3YWI4YTI4Li5hNTE0NmVhMWUzZTYxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1sZWQtdHJpZ2dlci1uZXRkZXZcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkLXRyaWdnZXItbmV0ZGV2XG5AQCAtNzUsNiArNzUsOSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0SWYgMSwgdGhlIExFRCBibGlua2luZyBpbiByZXF1ZXN0ZWQgbW9kZSBpcyBvZmZsb2FkZWQgdG9cbiBcdFx0aGFyZHdhcmUuXG4gXG4rXHRcdExFRCB0cmlnZ2VyIGNvcmUgYWxzbyBwcm92aWRlcyBhIGdlbmVyaWMgYXR0cmlidXRlIGZvciB0aGlzXG4rXHRcdHB1cnBvc2UsIHNlZSBgL3N5cy9jbGFzcy9sZWRzL1x1MDAzY2xlZFx1MDAzZS90cmlnZ2VyX21heV9vZmZsb2FkYC5cbitcbiBXaGF0Olx0XHQvc3lzL2NsYXNzL2xlZHMvXHUwMDNjbGVkXHUwMDNlL2xpbmtfMTBcbiBEYXRlOlx0XHRKdW4gMjAyM1xuIEtlcm5lbFZlcnNpb246XHQ2LjVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbmluZGV4IDM5MTM5NjZjZmRhYzAuLmFkYmM1N2I5ZjQ5YzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbGVkcy9sZWRzLWNsYXNzLnJzdFxuQEAgLTI0Miw2ICsyNDIsOSBAQCBvcHMgYW5kIG5lZWRzIHRvIGRlY2xhcmUgc3BlY2lmaWMgc3VwcG9ydCBmb3IgdGhlIHN1cHBvcnRlZCB0cmlnZ2Vycy5cbiBcbiBXaXRoIGh3IGNvbnRyb2wgd2UgcmVmZXIgdG8gdGhlIExFRCBkcml2ZW4gYnkgaGFyZHdhcmUuXG4gXG4rQSBzeXNmcyBhdHRyaWJ1dGUgYHRyaWdnZXJfbWF5X29mZmxvYWRgIGlzIHByb3ZpZGVkIGZvciB1c2Vyc3BhY2UgdG9cbitxdWVyeSBzdXBwb3J0ZWQgdHJpZ2dlcnMgYW5kIHRoZWlyIHN0YXRlcy5cbitcbiBMRUQgZHJpdmVyIG11c3QgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdmFsdWUgdG8gc3VwcG9ydCBodyBjb250cm9sOlxuIFxuICAgICAtIGh3X2NvbnRyb2xfdHJpZ2dlcjpcbkBAIC0yOTgsNiArMzAxLDE1IEBAIExFRCBkcml2ZXIgbXVzdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBBUEkgdG8gc3VwcG9ydCBodyBjb250cm9sOlxuICAgICAgICAgICAgICAgICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cnVjdCBkZXZpY2Ugb3IgTlVMTCBpZiBub3RoaW5nXG4gICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBhdHRhY2hlZC5cbiBcbitMRUQgdHJpZ2dlciBzaG91bGQgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgQVBJIHRvIGluZGljYXRlIGh3IGNvbnRyb2w6XG4rICAgIC0gb2ZmbG9hZGVkOlxuKyAgICAgICAgICAgICAgICByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRyaWdnZXIgaXMgY3VycmVudGx5XG4rICAgICAgICAgICAgICAgIG9mZmxvYWRlZCB0byBoYXJkd2FyZS5cbitcbisgICAgICAgICAgICAgICAgSWYgYSB0cmlnZ2VyIGRvZXNuJ3QgaW1wbGVtZW50IHRoaXMgY2FsbGJhY2ssIHRoZSBkZWZhdWx0XG4rICAgICAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgdHJ1ZSBmb3IgcHJpdmF0ZSB0cmlnZ2VycyBhbmQgZmFsc2UgZm9yIGdlbmVyaWNcbisgICAgICAgICAgICAgICAgb25lcy5cbitcbiBMRUQgZHJpdmVyIGNhbiBhY3RpdmF0ZSBhZGRpdGlvbmFsIG1vZGVzIGJ5IGRlZmF1bHQgdG8gd29ya2Fyb3VuZCB0aGVcbiBpbXBvc3NpYmlsaXR5IG9mIHN1cHBvcnRpbmcgZWFjaCBkaWZmZXJlbnQgbW9kZSBvbiB0aGUgc3VwcG9ydGVkIHRyaWdnZXIuXG4gRXhhbXBsZXMgYXJlIGhhcmRjb2RpbmcgdGhlIGJsaW5rIHNwZWVkIHRvIGEgc2V0IGludGVydmFsLCBlbmFibGUgc3BlY2lhbFxuQEAgLTMxMSw5ICszMjMsNjkgQEAgdGhlIGVuZCB1c2UgaHdfY29udHJvbF9zZXQgdG8gYWN0aXZhdGUgaHcgY29udHJvbC5cbiBBIHRyaWdnZXIgY2FuIHVzZSBod19jb250cm9sX2dldCB0byBjaGVjayBpZiBhIExFRCBpcyBhbHJlYWR5IGluIGh3IGNvbnRyb2xcbiBhbmQgaW5pdCB0aGVpciBmbGFncy5cbiBcbitBbHRlcm5hdGl2ZWx5LCBhIHByaXZhdGUgdHJpZ2dlciBjYW4gYmUgaW1wbGVtZW50ZWQgYWxvbmcgd2l0aCB0aGUgTEVEIGRyaXZlciBpZlxuK3RoZSBMRUQncyBoYXJkd2FyZSBjb250cm9sIGRvZXNuJ3QgZml0IGFueSBnZW5lcmljIHRyaWdnZXIuIFRvIGFzc29jaWF0ZSB0aGVcbitwcml2YXRlIHRyaWdnZXIgd2l0aCB0aGUgTEVEIGNsYXNzZGV2LCB0aGVpciBgdHJpZ2dlcl90eXBlYCBtdXN0IGJlIHRoZSBzYW1lLiBUb1xuK2RlY2xhcmUgdGhhdCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHByb3ZpZGVzIGhhcmR3YXJlIGNvbnRyb2wgZm9yIHRoZSBhc3NvY2lhdGVkXG4rTEVEIGNsYXNzZGV2LCBzZXQgdGhlIGBod19jb250cm9sX3RyaWdnZXJgIHN0cmluZyB0byB0aGUgdHJpZ2dlcidzIG5hbWUuIFNpbmNlXG4rYm90aCB0aGUgTEVEIGNsYXNzZGV2IGFuZCB0aGUgcHJpdmF0ZSB0cmlnZ2VyIGFyZSBpbiB0aGUgc2FtZSBMRUQgZHJpdmVyLCBpdCdzXG4rbm90IG5lY2Vzc2FyeSBmb3IgdGhlbSB0byBjb29yZGluYXRlIHZpYSBgaHdfY29udHJvbF8qYCBjYWxsYmFja3MuXG4rXG4gV2hlbiB0aGUgTEVEIGlzIGluIGh3IGNvbnRyb2wsIG5vIHNvZnR3YXJlIGJsaW5rIGlzIHBvc3NpYmxlIGFuZCBkb2luZyBzb1xuIHdpbGwgZWZmZWN0aXZlbHkgZGlzYWJsZSBodyBjb250cm9sLlxuIFxuK0hhcmR3YXJlLWluaXRpYXRlZCB0cmlnZ2VyIHRyYW5zaXRpb25cbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rU29tZSBoYXJkd2FyZSBjYW4gYXV0b25vbW91c2x5IGFjdGl2YXRlL2RlYWN0aXZhdGUgaGFyZHdhcmUgY29udHJvbC4gQWZ0ZXIgdGhhdCxcbit0aGUgTEVEIGhhcmR3YXJlIG5vdGlmaWVzIHRoZSBMRUQgZHJpdmVyLlxuK1xuK0lmIHRoZSBkcml2ZXIgY2FuIGRldGVjdCBzdWNoIHRyYW5zaXRpb25zIGFuZCB0aHVzIHdhbnRzIHRvIG5vdGlmeSB0aGUgTEVEIGNvcmVcbit0byB1cGRhdGUgdGhlIGN1cnJlbnQgdHJpZ2dlciB0aGVuIHRoZSBgTEVEX1RSSUdfSFdfQ0hBTkdFRGAgZmxhZyBtdXN0IGJlIHNldCBpblxuK2ZsYWdzIGJlZm9yZSByZWdpc3RlcmluZy4gVG8gdXBkYXRlIHRoZSBjdXJyZW50IHRyaWdnZXIgYWNjb3JkaW5nbHksIGNhbGxcbitgbGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZGAgb24gdGhlIExFRCBjbGFzc2Rldi5cbitcbitUaGlzIGNhcGFiaWxpdHkgaXMgcmVzdHJpY3RlZCB0byB0aGUgTEVEIGRldmljZSdzIHByaXZhdGUgdHJpZ2dlci4gVGhlIHByaXZhdGVcbit0cmlnZ2VyIG11c3QgaGF2ZSBiZWVuIHByb3Blcmx5IHJlZ2lzdGVyZWQgKHNlZSBhYm92ZSkgYW5kIG5hbWVkIGFmdGVyXG4rYGh3X2NvbnRyb2xfdHJpZ2dlcmAuXG4rXG4rT25seSB0d28gdHJhbnNpdGlvbnMgYXJlIGRlZmluZWQ6XG4rXG4rLSBcIm5vbmVcIiA9XHUwMDNlIHByaXZhdGUgdHJpZ2dlcjpcbisgICAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgYWN0aXZhdGVzIGhhcmR3YXJlIGNvbnRyb2xcbisgICAgICAgIGFuZCB3aGVuIFwibm9uZVwiIChpLmUuLCBubyB0cmlnZ2VyKSBpcyBjdXJyZW50bHkgYWN0aXZlLiBJZiB0aGUgcHJpdmF0ZVxuKyAgICAgICAgdHJpZ2dlciBpcyBhbHJlYWR5IGFjdGl2ZSB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkLCB0aGlzIGlzIGVzc2VudGlhbGx5XG4rICAgICAgICBhIG5vLW9wLlxuK1xuKyAgICAgICAgVGhlIGFjdGl2YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBwcml2YXRlIHRyaWdnZXIgd2lsbCBiZSBleGVjdXRlZCBhc1xuKyAgICAgICAgbm9ybWFsLlxuK1xuKyAgICAgICAgVGhlIExFRCBkcml2ZXIgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGVcbisgICAgICAgIGFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgY3VycmVudGx5IGluIGhhcmR3YXJlXG4rICAgICAgICBjb250cm9sLlxuK1xuKyAgICAgICAgSWYgZXJyb3Igb2NjdXJzIGluIHRoZSBhY3RpdmF0aW9uIHNlcXVlbmNlLCB0aGUgTEVEIFRyaWdnZXIgY29yZSByZXZlcnRzXG4rICAgICAgICB0aGUgZWZmZWN0aXZlIHRyaWdnZXIgdG8gXCJub25lXCIuXG4rXG4rLSBwcml2YXRlIHRyaWdnZXIgPVx1MDAzZSBcIm5vbmVcIlxuKyAgICAgICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGhhcmR3YXJlIGF1dG9ub21vdXNseSBkZWFjdGl2YXRlcyBoYXJkd2FyZSBjb250cm9sXG4rICAgICAgICBhbmQgd2hlbiB0aGUgcHJpdmF0ZSB0cmlnZ2VyIGlzIGN1cnJlbnRseSBhY3RpdmUuIElmIFwibm9uZVwiIChpLmUuLCBub1xuKyAgICAgICAgdHJpZ2dlcikgaXMgYWN0aXZlIHdoZW4gdGhlIG1ldGhvZCBpcyBjYWxsZWQsIHRoaXMgaXMgZXNzZW50aWFsbHkgYVxuKyAgICAgICAgbm8tb3AuXG4rXG4rICAgICAgICBUaGUgZGVhY3RpdmF0aW9uIHNlcXVlbmNlIGZvciB0aGUgcHJpdmF0ZSB0cmlnZ2VyIHdpbGwgYmUgZXhlY3V0ZWQgYXNcbisgICAgICAgIG5vcm1hbCwgZXhjZXB0IHRoYXQgdGhlIGN1cnJlbnQgTEVEIGJyaWdodG5lc3MgaXMgcmV0YWluZWQuIFRoZSByZWFzb25cbisgICAgICAgIGZvciBrZWVwaW5nIHRoZSBicmlnaHRuZXNzIHVuY2hhbmdlZCBpcyB0aGF0IHNvbWUgaGFyZHdhcmUgbWF5IGNob29zZSBhXG4rICAgICAgICBzcGVjaWZpYyBicmlnaHRuZXNzIGluc3RlYWQgb2Ygc2ltcGx5IHR1cm5pbmcgb2ZmIHRoZSBMRUQgYWZ0ZXJcbisgICAgICAgIGF1dG9ub21vdXNseSBkZWFjdGl2YXRpbmcgaGFyZHdhcmUgY29udHJvbC5cbitcbisgICAgICAgIFRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZSB0cmlnZ2VyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhlXG4rICAgICAgICBkZWFjdGl2YXRpb24gc2VxdWVuY2UgZXZlbiBpZiB0aGUgaGFyZHdhcmUgaXMgbm90IGN1cnJlbnRseSBpbiBoYXJkd2FyZVxuKyAgICAgICAgY29udHJvbC5cbitcbitJZiB0aGUgY3VycmVudCB0cmlnZ2VyIGlzIG5laXRoZXIgdGhlIHByaXZhdGUgdHJpZ2dlciBub3IgXCJub25lXCIsIG5vIHRyYW5zaXRpb25cbit3aWxsIGJlIG1hZGUuXG4rXG4gS25vd24gSXNzdWVzXG4gPT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jIGIvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG5pbmRleCBhNTFiMGVkNTM4ODY0Li4zYjQzOGQ4ZGE1ZTBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmNcbkBAIC0yNywyOSArMjcsMTkgQEAgc3RhdGljIExJU1RfSEVBRChsZWRzX2xvb2t1cF9saXN0KTtcbiBcbiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxlZHNfd3E7XG4gXG4tc3RhdGljIGJvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbi17XG4tI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4tXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuLVx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXIgXHUwMDI2XHUwMDI2IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNldHJpZ2dlcl90eXBlO1xuLSNlbHNlXG4tXHRyZXR1cm4gZmFsc2U7XG4tI2VuZGlmXG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiBcdHVuc2lnbmVkIGludCBicmlnaHRuZXNzO1xuIFxuLVx0aWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxuLVx0XHRyZXR1cm4gLUVOT0RBVEE7XG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmxlZF9jZGV2LVx1MDAzZWxlZF9hY2Nlc3MpIHtcbitcdFx0aWYgKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpKVxuK1x0XHRcdHJldHVybiAtRU5PREFUQTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcyk7XG4tXHRsZWRfdXBkYXRlX2JyaWdodG5lc3MobGVkX2NkZXYpO1xuLVx0YnJpZ2h0bmVzcyA9IGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3M7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcyk7XG4rXHRcdGxlZF91cGRhdGVfYnJpZ2h0bmVzcyhsZWRfY2Rldik7XG4rXHRcdGJyaWdodG5lc3MgPSBsZWRfY2Rldi1cdTAwM2VicmlnaHRuZXNzO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiV1XFxuXCIsIGJyaWdodG5lc3MpO1xuIH1cbkBAIC03NCw2ICs2NCw5IEBAIHN0YXRpYyBzc2l6ZV90IGJyaWdodG5lc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuIFxuIFx0aWYgKHN0YXRlID09IExFRF9PRkYpXG4gXHRcdGxlZF90cmlnZ2VyX3JlbW92ZShsZWRfY2Rldik7XG4rXHRlbHNlXG4rXHRcdGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKGxlZF9jZGV2KTtcbitcbiBcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2Rldiwgc3RhdGUpO1xuIFxuIFx0cmV0ID0gc2l6ZTtcbkBAIC0xMDMsOCArOTYsMzAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpjb25zdCBsZWRfdHJpZ2dlcl9iaW5fYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmJpbl9hdHRyX3RyaWdnZXIsXG4gXHROVUxMLFxuIH07XG4rXG4rc3RhdGljIERFVklDRV9BVFRSX1JPKHRyaWdnZXJfbWF5X29mZmxvYWQpO1xuK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsZWRfdHJpZ2dlcl9hdHRyc1tdID0ge1xuK1x0XHUwMDI2ZGV2X2F0dHJfdHJpZ2dlcl9tYXlfb2ZmbG9hZC5hdHRyLFxuK1x0TlVMTFxuK307XG4rXG4rc3RhdGljIHVtb2RlX3QgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4rXHRcdFx0XHQgICAgICBpbnQgaWR4KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGtvYmpfdG9fZGV2KGtvYmopO1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcbitcdGlmIChhdHRyID09IFx1MDAyNmRldl9hdHRyX3RyaWdnZXJfbWF5X29mZmxvYWQuYXR0cilcbitcdFx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA/IGF0dHItXHUwMDNlbW9kZSA6IDA7XG4rXG4rXHRyZXR1cm4gYXR0ci1cdTAwM2Vtb2RlO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsZWRfdHJpZ2dlcl9ncm91cCA9IHtcbiBcdC5iaW5fYXR0cnMgPSBsZWRfdHJpZ2dlcl9iaW5fYXR0cnMsXG4rXHQuYXR0cnMgPSBsZWRfdHJpZ2dlcl9hdHRycyxcbitcdC5pc192aXNpYmxlID0gbGVkX3RyaWdnZXJfaXNfdmlzaWJsZSxcbiB9O1xuICNlbmRpZlxuIFxuQEAgLTU5Niw2ICs2MTEsOSBAQCBpbnQgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXG4gXHRsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChsZWRfY2Rldik7XG4gI2VuZGlmXG4gXG4rXHRpZiAobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpXG4rXHRcdGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZChsZWRfY2Rldik7XG4rXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcyk7XG4gXG4gXHRkZXZfZGJnKHBhcmVudCwgXCJSZWdpc3RlcmVkIGxlZCBkZXZpY2U6ICVzXFxuXCIsXG5AQCAtNjE2LDYgKzYzNCw5IEBAIHZvaWQgbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gXHRpZiAoSVNfRVJSX09SX05VTEwobGVkX2NkZXYtXHUwMDNlZGV2KSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKGxlZF9jZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBMRURfVFJJR19IV19DSEFOR0VEKVxuK1x0XHRsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQobGVkX2NkZXYpO1xuK1xuICNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xuIFx0ZG93bl93cml0ZShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuIFx0aWYgKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXIpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jIGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXG5pbmRleCBiMTIyMzIxOGJkYTExLi5hOWQ5OTJhODg2MTYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jXG4rKysgYi9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmNcbkBAIC03LDkgKzcsMTMgQEBcbiAgKiBBdXRob3I6IFJpY2hhcmQgUHVyZGllIFx1MDAzY3JwdXJkaWVAb3BlbmVkaGFuZC5jb21cdTAwM2VcbiAgKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbG9ja2RlcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuQEAgLTMzLDYgKzM3LDM0IEBAIHRyaWdnZXJfcmVsZXZhbnQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbiBcdHJldHVybiAhdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgfHwgdHJpZy1cdTAwM2V0cmlnZ2VyX3R5cGUgPT0gbGVkX2NkZXYtXHUwMDNldHJpZ2dlcl90eXBlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1xuK1x0aWYgKCFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIWxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciB8fFxuK1x0ICAgIHN0cmNtcChsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIsIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlbmFtZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW9mZmxvYWRlZClcbitcdFx0cmV0dXJuIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXItXHUwMDNlb2ZmbG9hZGVkKGxlZF9jZGV2KTtcbitcbitcdGRldl93YXJuX29uY2UobGVkX2NkZXYtXHUwMDNlZGV2LCBcImh3IGNvbnRyb2wgdHJpZ2dlciAlcyBkb2Vzbid0IGltcGxlbWVudCBvZmZsb2FkZWQoKVxcblwiLFxuK1x0XHQgICAgICBsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW5hbWUpO1xuK1xuK1x0LyogT3RoZXJ3aXNlIGFzc3VtZSBwcml2YXRlIHRyaWdnZXJzIGFzIGFsd2F5cyBvZmZsb2FkZWQuICovXG4rXHRyZXR1cm4gbGVkX2NkZXYtXHUwMDNldHJpZ2dlci1cdTAwM2V0cmlnZ2VyX3R5cGU7XG4rfVxuK1xuK2Jvb2wgbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1x0cmV0dXJuIF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2Rldik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQpO1xuK1xuIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0XHRcdCAgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsXG4gXHRcdFx0ICBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpXG5AQCAtMTYzLDcgKzE5NSw4IEBAIHNzaXplX3QgbGVkX3RyaWdnZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVhZCk7XG4gXG4gLyogQ2FsbGVyIG11c3QgZW5zdXJlIGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfbG9jayBoZWxkICovXG4taW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuK3N0YXRpYyBpbnQgX19sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbitcdFx0XHQgICAgIGJvb2wgaHdfdHJpZ2dlcmVkKVxuIHtcbiBcdGNoYXIgKmV2ZW50ID0gTlVMTDtcbiBcdGNoYXIgKmVudnBbMl07XG5AQCAtMTk0LDcgKzIyNywyMSBAQCBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4gXHRcdGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfZGF0YSA9IE5VTEw7XG4gXHRcdGxlZF9jZGV2LVx1MDAzZWFjdGl2YXRlZCA9IGZhbHNlO1xuIFx0XHRsZWRfY2Rldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5MRURfSU5JVF9ERUZBVUxUX1RSSUdHRVI7XG4tXHRcdGxlZF9zZXRfYnJpZ2h0bmVzcyhsZWRfY2RldiwgTEVEX09GRik7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIEhhcmR3YXJlIG1heSBoYXZlIHNlbGVjdGVkIGEgbmV3IGJyaWdodG5lc3MgbGV2ZWwgZHVyaW5nIGl0c1xuK1x0XHQgKiBoYXJkd2FyZSBjb250cm9sIHRyYW5zaXRpb24sIHNvIG9ubHkgcmVzZXQgYnJpZ2h0bmVzcyBpZiB3ZVxuK1x0XHQgKiBhcmUgc3dpdGNoaW5nIHRvIGFub3RoZXIgdHJpZ2dlciBvciBpZiB0aGUgc3dpdGNoaW5nIGlzIG5vdFxuK1x0XHQgKiBoYXJkd2FyZSB0cmlnZ2VyZWQuXG4rXHRcdCAqXG4rXHRcdCAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBlcnJvciBwYXRoLCBhcyBydW5uaW5nXG4rXHRcdCAqIGludG8gdGhlIGVycm9yIHBhdGggaW1wbGllcyBhIG5vbmUgPVx1MDAzZSBwcml2YXRlIHRyaWdnZXJcbitcdFx0ICogdHJhbnNpdGlvbi4gVGhpcyBoaW50cyB0aGF0IHRoZSBMRUQgZHJpdmVyIGFuZCBpdHMgcHJpdmF0ZVxuK1x0XHQgKiB0cmlnZ2VyIG11c3QgaGF2ZSBzb21lIGZ1bmRhbWVudGFsIGJ1Z3MsIHNvIGRvbid0IGJvdGhlclxuK1x0XHQgKiBsZWF2aW5nIHRoZSBMRUQgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRyaWcgfHwgIWh3X3RyaWdnZXJlZClcbitcdFx0XHRsZWRfc2V0X2JyaWdodG5lc3MobGVkX2NkZXYsIExFRF9PRkYpO1xuIFx0fVxuIFx0aWYgKHRyaWcpIHtcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnRyaWctXHUwMDNlbGVkZGV2X2xpc3RfbG9jayk7XG5AQCAtMjU4LDYgKzMwNSwxMSBAQCBpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbitcbitpbnQgbGVkX3RyaWdnZXJfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWcpXG4re1xuK1x0cmV0dXJuIF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCB0cmlnLCBmYWxzZSk7XG4rfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldCk7XG4gXG4gdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG5AQCAtMjY4LDYgKzMyMCwxNSBAQCB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfcmVtb3ZlKTtcbiBcbit2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1xuK1x0aWYgKF9fbGVkX3RyaWdnZXJfaXNfaHdfY29udHJvbGxlZChsZWRfY2RldikpXG4rXHRcdGxlZF90cmlnZ2VyX3NldChsZWRfY2RldiwgTlVMTCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3JlbW92ZV9od19jb250cm9sKTtcbitcbiBzdGF0aWMgYm9vbCBsZWRfbWF0Y2hfZGVmYXVsdF90cmlnZ2VyKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnKVxuIHtcbkBAIC0zMTMsNiArMzc0LDMyIEBAIHZvaWQgbGVkX3RyaWdnZXJfc2V0X2RlZmF1bHQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX3NldF9kZWZhdWx0KTtcbiBcbitzc2l6ZV90IHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbit7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0c3RydWN0IGxlZF90cmlnZ2VyICp0cmlnO1xuK1x0Ym9vbCBoaXQsIG9mZmxvYWRlZDtcbitcdGludCBsZW47XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2bGVkX2NkZXYtXHUwMDNlbGVkX2FjY2Vzcyk7XG4rXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1xuK1x0dHJpZyA9IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXI7XG4rXG4rXHRvZmZsb2FkZWQgPSBfX2xlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQobGVkX2NkZXYpO1xuK1x0aGl0ID0gb2ZmbG9hZGVkIHx8ICh0cmlnIFx1MDAyNlx1MDAyNiAhc3RyY21wKGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciwgdHJpZy1cdTAwM2VuYW1lKSk7XG4rXG4rXHQvKiBbb2ZmbG9hZGVkXSBcdTAwM2NhY3RpdmVfYnV0X25vdF9vZmZsb2FkZWRcdTAwM2UgaW5hY3RpdmUgKi9cbitcdGxlbiA9IHN5c2ZzX2VtaXQoYnVmLCBcIiVzJXMlc1xcblwiLFxuK1x0XHRcdCBvZmZsb2FkZWQgPyBcIltcIiA6IChoaXQgPyBcIlx1MDAzY1wiIDogXCJcIiksXG4rXHRcdFx0IGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcixcbitcdFx0XHQgb2ZmbG9hZGVkID8gXCJdXCIgOiAoaGl0ID8gXCJcdTAwM2VcIiA6IFwiXCIpKTtcbitcbitcdHJldHVybiBsZW47XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHRyaWdnZXJfbWF5X29mZmxvYWRfc2hvdyk7XG4rXG4gLyogTEVEIFRyaWdnZXIgSW50ZXJmYWNlICovXG4gXG4gaW50IGxlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZylcbkBAIC00MDMsNiArNDkwLDg4IEBAIGludCBkZXZtX2xlZF90cmlnZ2VyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldixcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9sZWRfdHJpZ2dlcl9yZWdpc3Rlcik7XG4gXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbitcbitzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9kb19od19jb250cm9sX3RyYW5zaXRpb24oc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUsXG4rXHRcdFx0XHRcdFx0IHN0cnVjdCBsZWRfdHJpZ2dlciAqaGNfdHJpZylcbit7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGlmICghbGVkX2NkZXYtXHUwMDNldHJpZ2dlcikge1xuK1x0XHQvKiBcIm5vbmVcIiA9XHUwMDNlIHByaXZhdGUgdHJpZ2dlci4gKi9cbitcdFx0aWYgKGFjdGl2YXRlKVxuK1x0XHRcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBoY190cmlnLCB0cnVlKTtcbitcdH0gZWxzZSBpZiAobGVkX2NkZXYtXHUwMDNldHJpZ2dlciA9PSBoY190cmlnKSB7XG4rXHRcdC8qIHByaXZhdGUgdHJpZ2dlciA9XHUwMDNlIFwibm9uZVwiLiAqL1xuK1x0XHRpZiAoIWFjdGl2YXRlKVxuK1x0XHRcdGVyciA9IF9fbGVkX3RyaWdnZXJfc2V0KGxlZF9jZGV2LCBOVUxMLCB0cnVlKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIE90aGVyIHRyaWdnZXIgaXMgYWN0aXZlLiAqL1xuK1x0XHRkZXZfZGJnKGxlZF9jZGV2LVx1MDAzZWRldixcbitcdFx0XHRcIklnbm9yaW5nIGh3IGNvbnRyb2wgdHJhbnNpdGlvbiAoJXMgJXMpIHdoaWxlICVzIGlzIGFjdGl2ZVwiLFxuK1x0XHRcdGFjdGl2YXRlID8gXCJhY3RpdmF0ZVwiIDogXCJkZWFjdGl2YXRlXCIsIGhjX3RyaWctXHUwMDNlbmFtZSxcbitcdFx0XHRsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyLVx1MDAzZW5hbWUpO1xuK1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoZXJyKVxuK1x0XHRkZXZfd2FybihsZWRfY2Rldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvICVzICVzIGluIGh3IGNvbnRyb2wgdHJhbnNpdGlvbjogJWRcIixcbitcdFx0XHQgYWN0aXZhdGUgPyBcImFjdGl2YXRlXCIgOiBcImRlYWN0aXZhdGVcIiwgaGNfdHJpZy1cdTAwM2VuYW1lLCBlcnIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBsZWRfdHJpZ2dlcl9od19jb250cm9sX2NoYW5nZWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9XG4rXHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGVkX2NsYXNzZGV2LCB0cmlnZ2Vyc19od19jaGFuZ2VkX3dvcmspO1xuK1x0Ym9vbCBhY3RpdmF0ZSA9IFJFQURfT05DRShsZWRfY2Rldi1cdTAwM2V0cmlnZ2Vyc19od19jaGFuZ2VkKTtcbitcbitcdHNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCBcdTAwMjZ0cmlnZ2Vyc19saXN0X2xvY2spIHtcbitcdFx0c3RydWN0IGxlZF90cmlnZ2VyICp0cmlnO1xuK1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyaWcsIFx1MDAyNnRyaWdnZXJfbGlzdCwgbmV4dF90cmlnKSB7XG4rXHRcdFx0aWYgKHRyaWctXHUwMDNldHJpZ2dlcl90eXBlID09IGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJfdHlwZSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIXN0cmNtcCh0cmlnLVx1MDAzZW5hbWUsIGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlcikpIHtcbitcdFx0XHRcdGd1YXJkKHJ3c2VtX3dyaXRlKShcdTAwMjZsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX2xvY2spO1xuK1xuK1x0XHRcdFx0bGVkX3RyaWdnZXJfZG9faHdfY29udHJvbF90cmFuc2l0aW9uKGxlZF9jZGV2LCBhY3RpdmF0ZSwgdHJpZyk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRkZXZfZXJyKGxlZF9jZGV2LVx1MDAzZWRldixcbitcdFx0XCIlcygpIGlzIGNhbGxlZCwgYnV0IHRoZSBwcml2YXRlIHRyaWdnZXIgKCVzKSBpcyBub3QgcHJvcGVybHkgcmVnaXN0ZXJlZFxcblwiLFxuK1x0XHRfX2Z1bmNfXywgbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyKTtcbit9XG4rXG4rdm9pZCBsZWRfdHJpZ2dlcl9ub3RpZnlfaHdfY29udHJvbF9jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBib29sIGFjdGl2YXRlKVxuK3tcbitcdC8qIFJlc3RyaWN0ZWQgdG8gcHJpdmF0ZSB0cmlnZ2Vycy4gKi9cbitcdGlmIChXQVJOX09OKCEobGVkX2NkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IExFRF9UUklHX0hXX0NIQU5HRUQpIHx8XG4rXHRcdCAgICAhbGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyIHx8ICFsZWRfY2Rldi1cdTAwM2V0cmlnZ2VyX3R5cGUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRXUklURV9PTkNFKGxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWQsIGFjdGl2YXRlKTtcbitcbitcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfbm90aWZ5X2h3X2NvbnRyb2xfY2hhbmdlZCk7XG4rXG4rdm9pZCBsZWRfdHJpZ2dlcl9pbml0X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxlZF9jZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRfd29yaywgbGVkX3RyaWdnZXJfaHdfY29udHJvbF9jaGFuZ2VkX3dvcmtlcik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGxlZF90cmlnZ2VyX2luaXRfaHdfY2hhbmdlZCk7XG4rXG4rdm9pZCBsZWRfdHJpZ2dlcl9kZXN0cm95X2h3X2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2bGVkX2NkZXYtXHUwMDNldHJpZ2dlcnNfaHdfY2hhbmdlZF93b3JrKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKTtcbitcbisjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuK1xuIC8qIFNpbXBsZSBMRUQgVHJpZ2dlciBJbnRlcmZhY2UgKi9cbiBcbiB2b2lkIGxlZF90cmlnZ2VyX2V2ZW50KHN0cnVjdCBsZWRfdHJpZ2dlciAqdHJpZyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbmluZGV4IDE4NDRkMGNkNWY1MjguLjZkYjgzZDAxNTI3NzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jcm9zX2VjLmNcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNyb3NfZWMuY1xuQEAgLTg1LDEyICs4NSwxOCBAQCBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4gXHRyZXR1cm4gY3Jvc19lY19sZWRfc2VuZF9jbWQocHJpdi1cdTAwM2Vjcm9zX2VjLCBcdTAwMjZhcmcpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBjcm9zX2VjX2xlZF90cmlnZ2VyX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBsZWRfaHdfdHJpZ2dlcl90eXBlIGNyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZTtcbiBcbiBzdGF0aWMgc3RydWN0IGxlZF90cmlnZ2VyIGNyb3NfZWNfbGVkX3RyaWdnZXIgPSB7XG4gXHQubmFtZSA9IFwiY2hyb21lb3MtYXV0b1wiLFxuIFx0LnRyaWdnZXJfdHlwZSA9IFx1MDAyNmNyb3NfZWNfbGVkX3RyaWdnZXJfdHlwZSxcbiBcdC5hY3RpdmF0ZSA9IGNyb3NfZWNfbGVkX3RyaWdnZXJfYWN0aXZhdGUsXG4rXHQub2ZmbG9hZGVkID0gY3Jvc19lY19sZWRfdHJpZ2dlcl9vZmZsb2FkZWQsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGNyb3NfZWNfbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXR1cnJpcy1vbW5pYS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbmluZGV4IGVkNmE0N2JiYjQ0ZjkuLjMyZDQwZDE3NmQzZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy10dXJyaXMtb21uaWEuY1xuKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtdHVycmlzLW9tbmlhLmNcbkBAIC0xOTUsMTAgKzE5NSwxNiBAQCBzdGF0aWMgdm9pZCBvbW5pYV9od3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2KVxuIFx0XHRcdGVycik7XG4gfVxuIFxuK3N0YXRpYyBib29sIG9tbmlhX2h3dHJpZ19vZmZsb2FkZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqY2Rldilcbit7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBvbW5pYV9od190cmlnZ2VyID0ge1xuIFx0Lm5hbWVcdFx0PSBcIm9tbmlhLW1jdVwiLFxuIFx0LmFjdGl2YXRlXHQ9IG9tbmlhX2h3dHJpZ19hY3RpdmF0ZSxcbiBcdC5kZWFjdGl2YXRlXHQ9IG9tbmlhX2h3dHJpZ19kZWFjdGl2YXRlLFxuK1x0Lm9mZmxvYWRlZFx0PSBvbW5pYV9od3RyaWdfb2ZmbG9hZGVkLFxuIFx0LnRyaWdnZXJfdHlwZVx0PSBcdTAwMjZvbW5pYV9od190cmlnZ2VyX3R5cGUsXG4gfTtcbiBcbkBAIC0yNTEsNiArMjU3LDcgQEAgc3RhdGljIGludCBvbW5pYV9sZWRfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IG9tbmlhX2xlZCAqbGVkLFxuIFx0ICogYnkgTEVEIGNsYXNzIGZyb20gdGhlIGxpbnV4LGRlZmF1bHQtdHJpZ2dlciBwcm9wZXJ0eS5cbiBcdCAqL1xuIFx0Y2Rldi1cdTAwM2VkZWZhdWx0X3RyaWdnZXIgPSBvbW5pYV9od190cmlnZ2VyLm5hbWU7XG4rXHRjZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IG9tbmlhX2h3X3RyaWdnZXIubmFtZTtcbiBcbiBcdC8qIFB1dCB0aGUgTEVEIGludG8gc29mdHdhcmUgbW9kZSAqL1xuIFx0cmV0ID0gb21uaWFfY21kX3dyaXRlX3U4KGNsaWVudCwgT01OSUFfQ01EX0xFRF9NT0RFLCBPTU5JQV9DTURfTEVEX01PREVfTEVEKGxlZC1cdTAwM2VyZWcpIHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy5oIGIvZHJpdmVycy9sZWRzL2xlZHMuaFxuaW5kZXggYmVlNDY2NTFlMDY4Zi4uYmRhYzIzMzYwMTJlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLmhcbisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLmhcbkBAIC0yNyw4ICsyNywxOCBAQCBzc2l6ZV90IGxlZF90cmlnZ2VyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIHNzaXplX3QgbGVkX3RyaWdnZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0XHRcdGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCk7XG4rc3NpemVfdCB0cmlnZ2VyX21heV9vZmZsb2FkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuK1x0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpO1xuIFxuIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGxlZHNfbGlzdF9sb2NrO1xuIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGxlZHNfbGlzdDtcbiBcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuK3ZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbit2b2lkIGxlZF90cmlnZ2VyX2Rlc3Ryb3lfaHdfY2hhbmdlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4rI2Vsc2UgLyogIUNPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRUQgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfaW5pdF9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfZGVzdHJveV9od19jaGFuZ2VkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KSB7IH1cbisjZW5kaWYgLyogQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRCAqL1xuK1xuICNlbmRpZlx0LyogX19MRURTX0hfSU5DTFVERUQgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9LY29uZmlnIGIvZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZ1xuaW5kZXggYzExMjgyYTc0YjVhYy4uYTExZDA0Y2U0YWIyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL0tjb25maWdcbkBAIC05LDYgKzksMTYgQEAgbWVudWNvbmZpZyBMRURTX1RSSUdHRVJTXG4gXG4gaWYgTEVEU19UUklHR0VSU1xuIFxuK2NvbmZpZyBMRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbitcdGJvb2wgXCJMRUQgaGFyZHdhcmUtaW5pdGlhdGVkIHRyaWdnZXIgdHJhbnNpdGlvbiBzdXBwb3J0XCJcbitcdGRlZmF1bHQgTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRURcbitcdGhlbHBcbitcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBoYXJkd2FyZSBpbml0aWF0ZWQgaGFyZHdhcmUgY29udHJvbFxuK1x0ICB0cmFuc2l0aW9ucywgd2hlcmUgdGhlIExFRCBoYXJkd2FyZSBhdXRvbm9tb3VzbHkgc3dpdGNoZXMgYmV0d2VlblxuK1x0ICBcIm5vbmVcIiAoaS5lLiwgbm8gdHJpZ2dlcikgYW5kIGl0cyBwcml2YXRlIHRyaWdnZXIuXG4rXG4rXHQgIFNlZSBEb2N1bWVudGF0aW9uL2xlZHMvbGVkcy1jbGFzcy5yc3QgZm9yIGRldGFpbHMuXG4rXG4gY29uZmlnIExFRFNfVFJJR0dFUl9USU1FUlxuIFx0dHJpc3RhdGUgXCJMRUQgVGltZXIgVHJpZ2dlclwiXG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL3RyaWdnZXIvbGVkdHJpZy1uZXRkZXYuYyBiL2RyaXZlcnMvbGVkcy90cmlnZ2VyL2xlZHRyaWctbmV0ZGV2LmNcbmluZGV4IDViNGU5MmMxNGRiYjQuLjJlOWFmNDhhNzRkYmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG4rKysgYi9kcml2ZXJzL2xlZHMvdHJpZ2dlci9sZWR0cmlnLW5ldGRldi5jXG5AQCAtNzk4LDEwICs3OTgsMTggQEAgc3RhdGljIHZvaWQgbmV0ZGV2X3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiBcdGtmcmVlKHRyaWdnZXJfZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyBib29sIG5ldGRldl90cmlnX29mZmxvYWRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgbGVkX25ldGRldl9kYXRhICp0cmlnZ2VyX2RhdGEgPSBsZWRfZ2V0X3RyaWdnZXJfZGF0YShsZWRfY2Rldik7XG4rXG4rXHRyZXR1cm4gdHJpZ2dlcl9kYXRhLVx1MDAzZWh3X2NvbnRyb2w7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbGVkX3RyaWdnZXIgbmV0ZGV2X2xlZF90cmlnZ2VyID0ge1xuIFx0Lm5hbWUgPSBcIm5ldGRldlwiLFxuIFx0LmFjdGl2YXRlID0gbmV0ZGV2X3RyaWdfYWN0aXZhdGUsXG4gXHQuZGVhY3RpdmF0ZSA9IG5ldGRldl90cmlnX2RlYWN0aXZhdGUsXG4rXHQub2ZmbG9hZGVkID0gbmV0ZGV2X3RyaWdfb2ZmbG9hZGVkLFxuIFx0Lmdyb3VwcyA9IG5ldGRldl90cmlnX2dyb3VwcyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcbmluZGV4IDUxNjU5NDk5MzA3MzkuLmE5Nzg1MmIwYjIyODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL0tjb25maWdcbkBAIC0xNiw2ICsxNiw3IEBAIGNvbmZpZyBJREVBUEFEX0xBUFRPUFxuIFx0c2VsZWN0IElOUFVUX1NQQVJTRUtNQVBcbiBcdHNlbGVjdCBORVdfTEVEU1xuIFx0c2VsZWN0IExFRFNfQ0xBU1NcbitcdHNlbGVjdCBMRURTX1RSSUdHRVJTXG4gXHRoZWxwXG4gXHQgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIExlbm92byBJZGVhUGFkIG5ldGJvb2tzIGNvbnRhaW5zIGRyaXZlcnMgZm9yXG4gXHQgIHJma2lsbCBzd2l0Y2gsIGhvdGtleSwgZmFuIGNvbnRyb2wgYW5kIGJhY2tsaWdodCBjb250cm9sLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2xlbm92by9pZGVhcGFkLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNcbmluZGV4IDgyMTM1MjQ1MDRlZWIuLmY4NmMxMWY1MWQwYmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9sZW5vdm8vaWRlYXBhZC1sYXB0b3AuY1xuKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbGVub3ZvL2lkZWFwYWQtbGFwdG9wLmNcbkBAIC0xNCw5ICsxNCwxMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2k4MDQyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbkBAIC0yNiw5ICsyOSwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9wcm9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wb3dlcl9zdXBwbHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmZraWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuQEAgLTEzNCwxMCArMTM5LDMxIEBAIGVudW0ge1xuIH07XG4gXG4gLypcbi0gKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIHN0YXRlcyAtIDFcbi0gKiBGdXR1cmUga2V5Ym9hcmQgdHlwZXMgbWF5IG5lZWQgYSBuZXcgc3lzdGVtLCBpZiB0aGVyZSdzIGEgY29sbGlzaW9uXG4tICogS0JEX0JMX1RSSVNUQVRFX0FVVE8gaGFzIG5vIHdheSB0byByZXBvcnQgb3Igc2V0IHRoZSBhdXRvIHN0YXRlXG4tICogc28gaXQgZWZmZWN0aXZlbHkgaGFzIDMgc3RhdGVzLCBidXQgbmVlZHMgdG8gaGFuZGxlIDRcbisgKiBUaGUgZW51bWVyYXRpb24gaGFzIHR3byBwdXJwb3NlczpcbisgKiAgIC0gYXMgYW4gaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYWxsIGtub3duIHR5cGVzIG9mIGtleWJvYXJkIGJhY2tsaWdodFxuKyAqICAgLSBhcyBhIG1hbmRhdG9yeSBwYXJhbWV0ZXIgb2YgdGhlIEtCTEMgY29tbWFuZFxuKyAqXG4rICogRm9yIGVhY2ggdHlwZSwgdGhlIGhhcmR3YXJlIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKiB8ICAgICAgSGFyZHdhcmUgYnJpZ2h0bmVzcyB8ICAgICAgICAwIHwgICAxIHwgICAgMiB8ICAgIDMgfFxuKyAqIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKiB8IEtCRF9CTF9TVEFOREFSRCAgICAgICAgICB8ICAgICAgb2ZmIHwgIG9uIHwgIE4vQSB8ICBOL0EgfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0rXG4rICogfCBLQkRfQkxfVFJJU1RBVEUgICAgICAgICAgfCAgICAgIG9mZiB8IGxvdyB8IGhpZ2ggfCAgTi9BIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tK1xuKyAqIHwgS0JEX0JMX1RSSVNUQVRFX0FVVE8gICAgIHwgICAgICBvZmYgfCBsb3cgfCBoaWdoIHwgYXV0byB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLStcbisgKlxuKyAqIFdlIG1hcCBMRUQgY2xhc3NkZXYgYnJpZ2h0bmVzcyBmb3IgS0JEX0JMX1RSSVNUQVRFX0FVVE8gYXMgZm9sbG93czpcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXG4rICogfCAgTEVEIGNsYXNzZGV2IGJyaWdodG5lc3MgfCAgICAgICAgMCB8ICAgMSB8ICAgIDIgfFxuKyAqIHwgT3BlcmF0aW9uICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfCAgICAgIHxcbisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSstLS0tLS0rXG4rICogfCBSZWFkICAgICAgICAgICAgICAgICAgICAgfCBvZmYvYXV0byB8IGxvdyB8IGhpZ2ggfFxuKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLStcbisgKiB8IFdyaXRlICAgICAgICAgICAgICAgICAgICB8ICAgICAgb2ZmIHwgbG93IHwgaGlnaCB8XG4rICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tK1xuICAqL1xuIGVudW0ge1xuIFx0S0JEX0JMX1NUQU5EQVJEICAgICAgPSAxLFxuQEAgLTE0NSw2ICsxNzEsOCBAQCBlbnVtIHtcbiBcdEtCRF9CTF9UUklTVEFURV9BVVRPID0gMyxcbiB9O1xuIFxuKyNkZWZpbmUgS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTXHQzXG4rXG4gI2RlZmluZSBLQkRfQkxfUVVFUllfVFlQRVx0XHQweDFcbiAjZGVmaW5lIEtCRF9CTF9UUklTVEFURV9UWVBFXHRcdDB4NVxuICNkZWZpbmUgS0JEX0JMX1RSSVNUQVRFX0FVVE9fVFlQRVx0MHg3XG5AQCAtMjAwLDEwICsyMjgsMTQgQEAgc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSB7XG4gXHRcdGJvb2wgeW1jX2VjX3RyaWdnZXIgICAgICAgOiAxO1xuIFx0fSBmZWF0dXJlcztcbiBcdHN0cnVjdCB7XG4tXHRcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4rXHRcdGludCBpbml0aWFsaXplZDsgLyogIDA6IGluaXRpYWxpemlvbiBwZW5kaW5nL29uZ29pbmcvZmFpbGVkXG4rXHRcdFx0XHQgICogXHUwMDNlMDogaW5pdGlhbGl6aW9uIGZpbmlzaGVkXG4rXHRcdFx0XHQgICogXHUwMDNjMDogdW5yZWdpc3RlcmF0aW9uIG9uZ29pbmcvZmluaXNoZWRcbitcdFx0XHRcdCAgKi9cbiBcdFx0aW50IHR5cGU7XG4gXHRcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkO1xuLVx0XHR1bnNpZ25lZCBpbnQgbGFzdF9icmlnaHRuZXNzO1xuK1x0XHR1bnNpZ25lZCBpbnQgbGFzdF9od19icmlnaHRuZXNzO1xuK1x0XHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIHByb3RlY3RzIGJyaWdodG5lc3MgdHJhY2tpbmcgKi9cbiBcdH0ga2JkX2JsO1xuIFx0c3RydWN0IHtcbiBcdFx0Ym9vbCBpbml0aWFsaXplZDtcbkBAIC0xNTkyLDcgKzE2MjQsMjQgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShpbnQgdHlwZSlcbiBcdHJldHVybiAodHlwZSA9PSBLQkRfQkxfVFJJU1RBVEUpIHx8ICh0eXBlID09IEtCRF9CTF9UUklTVEFURV9BVVRPKTtcbiB9XG4gXG4tc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19wYXJzZShzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LCB1bnNpZ25lZCBpbnQgaHdfYnJpZ2h0bmVzcylcbit7XG4rXHQvKiBPZmYsIGxvdyBvciBoaWdoICovXG4rXHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2M9IHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcylcbitcdFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XG4rXG4rXHQvKiBBdXRvIChjb250cm9sbGVkIGJ5IEVDIGFjY29yZGluZyB0byBBTFMpLCByZXBvcnQgYXMgb2ZmICovXG4rXHRpZiAocHJpdi1cdTAwM2VrYmRfYmwudHlwZSA9PSBLQkRfQkxfVFJJU1RBVEVfQVVUTyBcdTAwMjZcdTAwMjZcbitcdCAgICBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBVbmtub3duIHZhbHVlICovXG4rXHRkZXZfd2FybihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsXG4rXHRcdCBcIlVua25vd24ga2V5Ym9hcmQgYmFja2xpZ2h0IHZhbHVlOiAlZFwiLCBod19icmlnaHRuZXNzKTtcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbiBcdGludCBlcnI7XG5AQCAtMTYwNiwyMSArMTY1NSw3IEBAIHN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHQvKiBDb252ZXJ0IHJldHVybmVkIHZhbHVlIHRvIGJyaWdodG5lc3MgbGV2ZWwgKi9cbi1cdFx0dmFsdWUgPSBGSUVMRF9HRVQoS0JEX0JMX0dFVF9CUklHSFRORVNTLCB2YWx1ZSk7XG4tXG4tXHRcdC8qIE9mZiwgbG93IG9yIGhpZ2ggKi9cbi1cdFx0aWYgKHZhbHVlIFx1MDAzYz0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzKVxuLVx0XHRcdHJldHVybiB2YWx1ZTtcbi1cbi1cdFx0LyogQXV0bywgcmVwb3J0IGFzIG9mZiAqL1xuLVx0XHRpZiAodmFsdWUgPT0gcHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzICsgMSlcbi1cdFx0XHRyZXR1cm4gMDtcbi1cbi1cdFx0LyogVW5rbm93biB2YWx1ZSAqL1xuLVx0XHRkZXZfd2FybihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsXG4tXHRcdFx0IFwiVW5rbm93biBrZXlib2FyZCBiYWNrbGlnaHQgdmFsdWU6ICVsdVwiLCB2YWx1ZSk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRyZXR1cm4gRklFTERfR0VUKEtCRF9CTF9HRVRfQlJJR0hUTkVTUywgdmFsdWUpO1xuIFx0fVxuIFxuIFx0ZXJyID0gZXZhbF9oYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIFx1MDAyNnZhbHVlKTtcbkBAIC0xNjMwLDYgKzE2NjUsMTYgQEAgc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuICEhdGVzdF9iaXQoSEFMU19LQkRfQkxfU1RBVEVfQklULCBcdTAwMjZ2YWx1ZSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbit7XG4rXHRpbnQgaHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuK1xuK1x0aWYgKGh3X2JyaWdodG5lc3MgXHUwMDNjIDApXG4rXHRcdHJldHVybiBod19icmlnaHRuZXNzO1xuK1xuK1x0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4rfVxuK1xuIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuIHtcbiBcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuQEAgLTE2MzcsOTkgKzE2ODIsMjA3IEBAIHN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3NfZ2V0KHN0cnVjdCBsZWRfY2xhXG4gXHRyZXR1cm4gaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaWRlYXBhZF9rYmRfYmxfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgaW50IGJyaWdodG5lc3MpXG4rc3RhdGljIGludCBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2LFxuK1x0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXG4ge1xuLVx0aW50IGVycjtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4gXHRpbnQgdHlwZSA9IHByaXYtXHUwMDNla2JkX2JsLnR5cGU7XG4rXHRpbnQgZXJyO1xuIFxuLVx0aWYgKGlkZWFwYWRfa2JkX2JsX2NoZWNrX3RyaXN0YXRlKHR5cGUpKSB7XG4tXHRcdGlmIChicmlnaHRuZXNzIFx1MDAzZSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRndWFyZChtdXRleCkoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubXV0ZXgpO1xuIFxuLVx0XHR2YWx1ZSA9IEZJRUxEX1BSRVAoS0JEX0JMX1NFVF9CUklHSFRORVNTLCBicmlnaHRuZXNzKSB8XG4rXHRpZiAoaWRlYXBhZF9rYmRfYmxfY2hlY2tfdHJpc3RhdGUodHlwZSkpIHtcbitcdFx0dmFsdWUgPSBGSUVMRF9QUkVQKEtCRF9CTF9TRVRfQlJJR0hUTkVTUywgaHdfYnJpZ2h0bmVzcykgfFxuIFx0XHRcdEZJRUxEX1BSRVAoS0JEX0JMX0NPTU1BTkRfVFlQRSwgdHlwZSkgfFxuIFx0XHRcdEtCRF9CTF9DT01NQU5EX1NFVDtcbiBcdFx0ZXJyID0gZXhlY19rYmxjKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGVyciA9IGV4ZWNfc2Fscyhwcml2LVx1MDAzZWFkZXYtXHUwMDNlaGFuZGxlLCBicmlnaHRuZXNzID8gU0FMU19LQkRfQkxfT04gOiBTQUxTX0tCRF9CTF9PRkYpO1xuK1x0XHR2YWx1ZSA9IGh3X2JyaWdodG5lc3MgPyBTQUxTX0tCRF9CTF9PTiA6IFNBTFNfS0JEX0JMX09GRjtcbitcdFx0ZXJyID0gZXhlY19zYWxzKHByaXYtXHUwMDNlYWRldi1cdTAwM2VoYW5kbGUsIHZhbHVlKTtcbiBcdH1cbi1cbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2JyaWdodG5lc3MgPSBicmlnaHRuZXNzO1xuK1x0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID0gaHdfYnJpZ2h0bmVzcztcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGludCBicmlnaHRuZXNzKVxuK3tcbitcdGlmIChicmlnaHRuZXNzIFx1MDAzZSBwcml2LVx1MDAzZWtiZF9ibC5sZWQubWF4X2JyaWdodG5lc3MpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpO1xuK31cbitcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2xlZF9jZGV2X2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuIFx0XHRcdFx0XHRcdCAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuIHtcbiBcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuIFxuK1x0LypcbitcdCAqIFdoZW4gdW5yZWdpc3RlcmluZzogSXQgbXVzdCBiZSB0aGUgc2lkZSBlZmZlY3Qgb2YgTEVEIHVucmVnaXN0cmF0aW9uXG4rXHQgKiB3aGVuIG91ciBwcml2YXRlIHRyaWdnZXIgaXMgYWN0aXZlLiBXZSd2ZSBzZXQgTEVEX1JFVEFJTl9BVF9TSFVURE9XTlxuK1x0ICogdG8gcmV0YWluIGxlZF9jZGV2IGJyaWdodG5lc3MgbGV2ZWwuIFRvIGRvIHRoZSBzYW1lIGZvciBhdXRvIG1vZGUsXG4rXHQgKiBnYXRlIGNoYW5nZXMgYW5kIHJldHVybiBlYXJseS5cbitcdCAqXG4rXHQgKiBJdCdzIG5lZWRsZXNzIHRvIGdhdGUgY2hhbmdlcyB3aGVuIGluaXRpYWxpemluZywgYXMgdGhlcmUgbWF5IGJlIGFcbitcdCAqIHRpbWUgbWFyZ2luIGJldHdlZW4gc3lzZnMgYXR0cmlidXRlIGNyZWF0aW9uIGFuZCBzdGF0ZSBjaGFuZ2UuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0cmV0dXJuIGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3Nfc2V0KHByaXYsIGJyaWdodG5lc3MpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfb2ZmbG9hZGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuK3tcbitcdHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUsIGtiZF9ibC5sZWQpO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm11dGV4KTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPT0gS0JEX0JMX0FVVE9fTU9ERV9IV19CUklHSFRORVNTO1xuK31cbitcbitzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlLCBrYmRfYmwubGVkKTtcbitcbitcdHJldHVybiBpZGVhcGFkX2tiZF9ibF9od19icmlnaHRuZXNzX3NldChwcml2LCBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1MpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGxlZF9od190cmlnZ2VyX3R5cGUgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7XG4rXG4rc3RhdGljIHN0cnVjdCBsZWRfdHJpZ2dlciBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIgPSB7XG4rXHQubmFtZSA9IFwiaWRlYXBhZC1hdXRvXCIsXG4rXHQudHJpZ2dlcl90eXBlID0gXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGUsXG4rXHQuYWN0aXZhdGUgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXJfYWN0aXZhdGUsXG4rXHQub2ZmbG9hZGVkID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX29mZmxvYWRlZCxcbit9O1xuK1xuK3N0YXRpYyBib29sIGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkO1xuK1xuK3N0YXRpYyB2b2lkIGlkZWFwYWRfa2JkX2JsX25vdGlmeV9od19jb250cm9sKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYsXG4rXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IGh3X2JyaWdodG5lc3MpXG4re1xuK1x0Ym9vbCBod19jb250cm9sLCBsYXN0X2h3X2NvbnRyb2w7XG4rXG4rXHRpZiAoIWlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlcl9yZWdpc3RlcmVkIHx8IHByaXYtXHUwMDNla2JkX2JsLnR5cGUgIT0gS0JEX0JMX1RSSVNUQVRFX0FVVE8pXG4rXHRcdHJldHVybjtcbitcbitcdGh3X2NvbnRyb2wgPSBod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUztcbitcdGxhc3RfaHdfY29udHJvbCA9IHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9PSBLQkRfQkxfQVVUT19NT0RFX0hXX0JSSUdIVE5FU1M7XG4rXG4rXHRpZiAoaHdfY29udHJvbCAhPSBsYXN0X2h3X2NvbnRyb2wpXG4rXHRcdGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkLCBod19jb250cm9sKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfbm90aWZ5KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpXG4ge1xuLVx0aW50IGJyaWdodG5lc3M7XG4rXHRpbnQgaHdfYnJpZ2h0bmVzcywgYnJpZ2h0bmVzcztcbiBcbi1cdGlmICghcHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpXG4rXHRpZiAodW5saWtlbHkocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXHUwMDNjPSAwKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0YnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuLVx0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubXV0ZXgpO1xuK1xuK1x0aHdfYnJpZ2h0bmVzcyA9IGlkZWFwYWRfa2JkX2JsX2h3X2JyaWdodG5lc3NfZ2V0KHByaXYpO1xuK1x0aWYgKGh3X2JyaWdodG5lc3MgXHUwMDNjIDApXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmIChicmlnaHRuZXNzID09IHByaXYtXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcylcbitcdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX3BhcnNlKHByaXYsIGh3X2JyaWdodG5lc3MpO1xuK1x0aWYgKGJyaWdodG5lc3MgXHUwMDNjIDApXG4rXHRcdHJldHVybjsgLyogUmVqZWN0IGluc2FuZSB2YWx1ZXMgZWFybHkuICovXG4rXG4rXHRpZiAocHJpdi1cdTAwM2VrYmRfYmwubGFzdF9od19icmlnaHRuZXNzID09IGh3X2JyaWdodG5lc3MpXG4gXHRcdHJldHVybjtcbiBcbi1cdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7XG4rXHRpZGVhcGFkX2tiZF9ibF9ub3RpZnlfaHdfY29udHJvbChwcml2LCBod19icmlnaHRuZXNzKTtcbitcbitcdHByaXYtXHUwMDNla2JkX2JsLmxhc3RfaHdfYnJpZ2h0bmVzcyA9IGh3X2JyaWdodG5lc3M7XG4gXG4gXHRsZWRfY2xhc3NkZXZfbm90aWZ5X2JyaWdodG5lc3NfaHdfY2hhbmdlZChcdTAwMjZwcml2LVx1MDAzZWtiZF9ibC5sZWQsIGJyaWdodG5lc3MpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlkZWFwYWRfa2JkX2JsX2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdilcbiB7XG4tXHRpbnQgYnJpZ2h0bmVzcywgZXJyO1xuK1x0aW50IGh3X2JyaWdodG5lc3MsIGVycjtcbiBcbiBcdGlmICghcHJpdi1cdTAwM2VmZWF0dXJlcy5rYmRfYmwpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0aWYgKFdBUk5fT04ocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpKVxuK1x0aWYgKFdBUk5fT04ocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXHUwMDNlIDApKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbi1cdGlmIChpZGVhcGFkX2tiZF9ibF9jaGVja190cmlzdGF0ZShwcml2LVx1MDAzZWtiZF9ibC50eXBlKSlcbi1cdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMjtcbi1cdGVsc2Vcbi1cdFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLm1heF9icmlnaHRuZXNzID0gMTtcbitcdHByaXYtXHUwMDNla2JkX2JsLmluaXRpYWxpemVkID0gMDtcbiBcbi1cdGJyaWdodG5lc3MgPSBpZGVhcGFkX2tiZF9ibF9icmlnaHRuZXNzX2dldChwcml2KTtcbi1cdGlmIChicmlnaHRuZXNzIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gYnJpZ2h0bmVzcztcbitcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsIFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLm11dGV4KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRod19icmlnaHRuZXNzID0gaWRlYXBhZF9rYmRfYmxfaHdfYnJpZ2h0bmVzc19nZXQocHJpdik7XG4rXHRpZiAoaHdfYnJpZ2h0bmVzcyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGh3X2JyaWdodG5lc3M7XG4rXG4rXHRwcml2LVx1MDAzZWtiZF9ibC5sYXN0X2h3X2JyaWdodG5lc3MgPSBod19icmlnaHRuZXNzO1xuIFxuLVx0cHJpdi1cdTAwM2VrYmRfYmwubGFzdF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzcztcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5uYW1lICAgICAgICAgICAgICAgICAgICA9IFwicGxhdGZvcm06OlwiIExFRF9GVU5DVElPTl9LQkRfQkFDS0xJR0hUO1xuIFx0cHJpdi1cdTAwM2VrYmRfYmwubGVkLmJyaWdodG5lc3NfZ2V0ICAgICAgICAgID0gaWRlYXBhZF9rYmRfYmxfbGVkX2NkZXZfYnJpZ2h0bmVzc19nZXQ7XG4gXHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSBpZGVhcGFkX2tiZF9ibF9sZWRfY2Rldl9icmlnaHRuZXNzX3NldDtcbiBcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5mbGFncyAgICAgICAgICAgICAgICAgICA9IExFRF9CUklHSFRfSFdfQ0hBTkdFRCB8IExFRF9SRVRBSU5fQVRfU0hVVERPV047XG4gXG4rXHRzd2l0Y2ggKHByaXYtXHUwMDNla2JkX2JsLnR5cGUpIHtcbitcdGNhc2UgS0JEX0JMX1RSSVNUQVRFX0FVVE86XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XG4rXG4rXHRcdGlmICghaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpIHtcbitcdFx0XHRkZXZfd2FybihcdTAwMjZwcml2LVx1MDAzZXBsYXRmb3JtX2RldmljZS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJDYW5ub3QgcHJvdmlkZSBMRUQgdHJpZ2dlciAlcyBmb3Iga2V5Ym9hcmQgYmFja2xpZ2h0XFxuXCIsXG4rXHRcdFx0XHQgaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5mbGFncyB8PSBMRURfVFJJR19IV19DSEFOR0VEO1xuK1x0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQudHJpZ2dlcl90eXBlID0gXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3R5cGU7XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5od19jb250cm9sX3RyaWdnZXIgPSBpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIubmFtZTtcbitcbitcdFx0LyogSGFyZHdhcmUgcmVtZW1iZXJzIHRoZSBsYXN0IGJyaWdodG5lc3MgbGV2ZWwsIGluY2x1ZGluZyBhdXRvIG1vZGUuICovXG4rXHRcdGlmIChod19icmlnaHRuZXNzID09IEtCRF9CTF9BVVRPX01PREVfSFdfQlJJR0hUTkVTUylcbitcdFx0XHRwcml2LVx1MDAzZWtiZF9ibC5sZWQuZGVmYXVsdF90cmlnZ2VyID0gaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyLm5hbWU7XG4rXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLQkRfQkxfVFJJU1RBVEU6XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDI7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBLQkRfQkxfU1RBTkRBUkQ6XG4rXHRcdHByaXYtXHUwMDNla2JkX2JsLmxlZC5tYXhfYnJpZ2h0bmVzcyA9IDE7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0LyogVGhpcyBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSBpZGVhcGFkX2NoZWNrX2ZlYXR1cmVzKCkuICovXG4rXHRcdHVucmVhY2hhYmxlKCk7XG4rXHR9XG4rXG4rXHQvKiBSZWplY3QgaW5zYW5lIHZhbHVlcy4gKi9cbitcdGVyciA9IGlkZWFwYWRfa2JkX2JsX2JyaWdodG5lc3NfcGFyc2UocHJpdiwgaHdfYnJpZ2h0bmVzcyk7XG4rXHRpZiAoZXJyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuIFx0ZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKFx1MDAyNnByaXYtXHUwMDNlcGxhdGZvcm1fZGV2aWNlLVx1MDAzZWRldiwgXHUwMDI2cHJpdi1cdTAwM2VrYmRfYmwubGVkKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IHRydWU7XG4rXHRwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IDE7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaWRlYXBhZF9rYmRfYmxfZXhpdChzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2KVxuIHtcbi1cdGlmICghcHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQpXG4rXHRpZiAocHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwcml2LVx1MDAzZWtiZF9ibC5pbml0aWFsaXplZCA9IGZhbHNlO1xuK1x0cHJpdi1cdTAwM2VrYmRfYmwuaW5pdGlhbGl6ZWQgPSAtMTtcbiBcbiBcdGxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKFx1MDAyNnByaXYtXHUwMDNla2JkX2JsLmxlZCk7XG4gfVxuQEAgLTI1NDgsMTcgKzI3MDEsMzAgQEAgc3RhdGljIGludCBfX2luaXQgaWRlYXBhZF9sYXB0b3BfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBlcnI7XG4gXG4rXHRlcnIgPSBsZWRfdHJpZ2dlcl9yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2tiZF9ibF9hdXRvX3RyaWdnZXIpO1xuK1x0aWYgKGVycikge1xuK1x0XHRwcl93YXJuKFwiRmFpbGVkIHRvIHJlZ2lzdGVyIExFRCB0cmlnZ2VyICVzOiAlZFxcblwiLFxuK1x0XHRcdGlkZWFwYWRfa2JkX2JsX2F1dG9fdHJpZ2dlci5uYW1lLCBlcnIpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQgPSB0cnVlO1xuK1x0fVxuK1xuIFx0ZXJyID0gaWRlYXBhZF93bWlfZHJpdmVyX3JlZ2lzdGVyKCk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycl9sZWR0cmlnO1xuIFxuIFx0ZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmlkZWFwYWRfYWNwaV9kcml2ZXIpO1xuLVx0aWYgKGVycikge1xuLVx0XHRpZGVhcGFkX3dtaV9kcml2ZXJfdW5yZWdpc3RlcigpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfd21pO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3dtaTpcbitcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XG4rZXJyX2xlZHRyaWc6XG4rXHRpZiAoaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpXG4rXHRcdGxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcbitcdHJldHVybiBlcnI7XG4gfVxuIG1vZHVsZV9pbml0KGlkZWFwYWRfbGFwdG9wX2luaXQpXG4gXG5AQCAtMjU2Niw2ICsyNzMyLDkgQEAgc3RhdGljIHZvaWQgX19leGl0IGlkZWFwYWRfbGFwdG9wX2V4aXQodm9pZClcbiB7XG4gXHRwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZpZGVhcGFkX2FjcGlfZHJpdmVyKTtcbiBcdGlkZWFwYWRfd21pX2RyaXZlcl91bnJlZ2lzdGVyKCk7XG4rXG4rXHRpZiAoaWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyX3JlZ2lzdGVyZWQpXG4rXHRcdGxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoXHUwMDI2aWRlYXBhZF9rYmRfYmxfYXV0b190cmlnZ2VyKTtcbiB9XG4gbW9kdWxlX2V4aXQoaWRlYXBhZF9sYXB0b3BfZXhpdClcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlZHMuaCBiL2luY2x1ZGUvbGludXgvbGVkcy5oXG5pbmRleCBhNTE1ZjA3NWMyOWExLi45M2IzZmQ3ZTU2MzY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbGVkcy5oXG5AQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBsZWRfY2xhc3NkZXYge1xuICNkZWZpbmUgTEVEX0lOSVRfREVGQVVMVF9UUklHR0VSIEJJVCgyMylcbiAjZGVmaW5lIExFRF9SRUpFQ1RfTkFNRV9DT05GTElDVCBCSVQoMjQpXG4gI2RlZmluZSBMRURfTVVMVElfQ09MT1JcdFx0QklUKDI1KVxuKyNkZWZpbmUgTEVEX1RSSUdfSFdfQ0hBTkdFRFx0QklUKDI2KVxuIFxuIFx0Lyogc2V0X2JyaWdodG5lc3Nfd29yayAvIGJsaW5rX3RpbWVyIGZsYWdzLCBhdG9taWMsIHByaXZhdGUuICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdHdvcmtfZmxhZ3M7XG5AQCAtMjM5LDYgKzI0MCwxMSBAQCBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHtcbiBcdHN0cnVjdCBrZXJuZnNfbm9kZVx0KmJyaWdodG5lc3NfaHdfY2hhbmdlZF9rbjtcbiAjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNfSFdfQ0hBTkdFRFxuK1x0Ym9vbFx0XHRcdHRyaWdnZXJzX2h3X2NoYW5nZWQ7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHRyaWdnZXJzX2h3X2NoYW5nZWRfd29yaztcbisjZW5kaWZcbitcbiBcdC8qIEVuc3VyZXMgY29uc2lzdGVudCBhY2Nlc3MgdG8gdGhlIExFRCBjbGFzcyBkZXZpY2UgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRsZWRfYWNjZXNzO1xuIH07XG5AQCAtNDg1LDYgKzQ5MSw3IEBAIHN0cnVjdCBsZWRfdHJpZ2dlciB7XG4gXHRjb25zdCBjaGFyXHQgKm5hbWU7XG4gXHRpbnRcdFx0KCphY3RpdmF0ZSkoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpO1xuIFx0dm9pZFx0XHQoKmRlYWN0aXZhdGUpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbitcdGJvb2xcdFx0KCpvZmZsb2FkZWQpKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBcbiBcdC8qIEJyaWdodG5lc3Mgc2V0IGJ5IGxlZF90cmlnZ2VyX2V2ZW50ICovXG4gXHRlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7XG5AQCAtNTMzLDYgKzU0MCw5IEBAIHZvaWQgbGVkX3RyaWdnZXJfYmxpbmtfb25lc2hvdChzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIsXG4gdm9pZCBsZWRfdHJpZ2dlcl9zZXRfZGVmYXVsdChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4gaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldiwgc3RydWN0IGxlZF90cmlnZ2VyICp0cmlnZ2VyKTtcbiB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4rdm9pZCBsZWRfdHJpZ2dlcl9yZW1vdmVfaHdfY29udHJvbChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldik7XG4rXG4rYm9vbCBsZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4gXHRcdFx0XHRcdHZvaWQgKnRyaWdnZXJfZGF0YSlcbkBAIC01ODQsNiArNTk0LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxlZF90cmlnZ2VyX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX3JlbW92ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldikge31cbitzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3RyaWdnZXJfcmVtb3ZlX2h3X2NvbnRyb2woc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBib29sIGxlZF90cmlnZ2VyX2lzX2h3X2NvbnRyb2xsZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgbGVkX3NldF90cmlnZ2VyX2RhdGEoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkICpsZWRfZ2V0X3RyaWdnZXJfZGF0YShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcbiB7XG5AQCAtNTk4LDYgKzYxNSwxMyBAQCBsZWRfdHJpZ2dlcl9nZXRfYnJpZ2h0bmVzcyhjb25zdCBzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MRURTX1RSSUdHRVJTICovXG4gXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTX0hXX0NIQU5HRURcbit2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGJvb2wgYWN0aXZhdGUpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHRcdFx0XHQgYm9vbCBhY3RpdmF0ZSkge31cbisjZW5kaWZcbitcbiAvKiBUcmlnZ2VyIHNwZWNpZmljIGVudW0gKi9cbiBlbnVtIGxlZF90cmlnZ2VyX25ldGRldl9tb2RlcyB7XG4gXHRUUklHR0VSX05FVERFVl9MSU5LID0gMCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjI0OjU3Ljc0ODUzNzQ5NloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjExMTc5MTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBMRUQgdHJpZ2dlciBwYXRjaC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBhbHdheXMgb24gcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuVGhpcyBwYXRjaCBpcyBwcmV0dHkgZm9jdXNlZC4gSXQncyBhZGRpbmcgYSBuZXcgYHRyaWdnZXJfbWF5X29mZmxvYWRgIHN5c2ZzIGF0dHJpYnV0ZSB0byB0aGUgTEVEIGNsYXNzLCBhIGNvcnJlc3BvbmRpbmcgYG9mZmxvYWRlZGAgY2FsbGJhY2sgaW4gdGhlIGBsZWRfdHJpZ2dlcmAgc3RydWN0dXJlLCBhbmQgaW1wbGVtZW50aW5nIGEgbWVjaGFuaXNtIGZvciBoYXJkd2FyZS1pbml0aWF0ZWQgdHJpZ2dlciB0cmFuc2l0aW9ucy4gQ3JpdGljYWxseSwgaXQgdGhlbiBpbnRlZ3JhdGVzIHRoaXMgd2l0aCBzZXZlcmFsIHNwZWNpZmljIGRyaXZlcnM6IGBsZWRzLWNyb3NfZWNgLCBgbGVkcy10dXJyaXMtb21uaWFgLCBgbGVkdHJpZy1uZXRkZXZgLCBhbmQgdGhlIGBpZGVhcGFkLWxhcHRvcGAuIFRoYXQgbGFzdCBvbmUgY2F0Y2hlcyBteSBleWUg4oCTIEFDUEkgYW5kIGtleWJvYXJkIGJhY2tsaWdodHMgY2FuIGJlIHRvdWNoeSBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuXG5cblNvLCBmaXJzdCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlLiBJIGltbWVkaWF0ZWx5IGxvb2sgYXQgdGhhdCBgdHJpZ2dlcl9tYXlfb2ZmbG9hZF9zaG93YCBmdW5jdGlvbi4gVGhlIGBzeXNmc19lbWl0YCBzZWVtcyBzYWZlIGhlcmUuIEkgYW0gdmVyaWZ5aW5nIHRoYXQgYGh3X2NvbnRyb2xfdHJpZ2dlcmAgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tTlVMTCB3aGVuIHJlYWQuIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2hlY2tzIGZvciB0aGlzIGNvbmRpdGlvbiBpbiBgbGVkX3RyaWdnZXJfaXNfdmlzaWJsZWAsIHNvIHRoZSBzeXNmcyBlbnRyeSB3aWxsIG5vdCBiZSBjcmVhdGVkLiBgb2ZmbG9hZGVkYCBhbmQgYGhpdGAgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBib29sZWFucy4gSXQncyBhbGwgbG9va2luZyBnb29kIHNvIGZhci5cblxuTm93IEkgZGVsdmUgaW50byBgX19sZWRfdHJpZ2dlcl9pc19od19jb250cm9sbGVkYC4gVGhpcyBvbmUgaXMga2V5LCBhcyBpdCBkZXRlcm1pbmVzIGlmIGEgdHJpZ2dlciBpcyBjb25zaWRlcmVkIFwib2ZmbG9hZGVkLlwiIFRoZSBjb2RlIGRvZXMgYSBkZWNlbnQgam9iIGNoZWNraW5nIGZvciBOVUxMIHRyaWdnZXJzIGFuZCBlbnN1cmVzIHRoZSB0cmlnZ2VyIG5hbWUgbWF0Y2hlcy4gSXQgYWxzbyBoYXMgYSBmYWxsLWJhY2sgaWYgdGhlIHRyaWdnZXIgZG9lcyBub3QgaW1wbGVtZW50IGBvZmZsb2FkZWRgLCBzbyBpdCBpcyBsb29raW5nIGxpa2UgdGhlIGNvZGUgaXMgaGFuZGxpbmcgYWxsIHBvc3NpYmxlIHJldHVybiBwYXRocy5cblxuVGhlbiBJIGNoZWNrIHRoZSB3b3JrcXVldWUgaW4gYGxlZC10cmlnZ2Vycy5jYC4gYGxlZF90cmlnZ2VyX2h3X2NvbnRyb2xfY2hhbmdlZF93b3JrZXJgIHJlYWRzIGBsZWRjZGV2LVx1MDAzZXRyaWdnZXJzX2h3X2NoYW5nZWRgLiBJJ20gY2hlY2tpbmcgdGhlIGluaXRpYWxpemF0aW9uLiBUaGUgdmFyaWFibGUgaXMgd3JpdHRlbiB1c2luZyBgV1JJVEVfT05DRWAgaW4gYGxlZF90cmlnZ2VyX25vdGlmeV9od19jb250cm9sX2NoYW5nZWRgIGFuZCBpcyBpbml0aWFsaXplZCBpbiBgbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dGAuIFRoaXMgbG9va3Mgc291bmQ7IHRoZSBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgcGFpciBpcyBjb3JyZWN0IGZvciB3b3JrcXVldWUgaW50ZXJhY3Rpb24uXG5cbk5leHQsIEkgcmV2aWV3IHRoZSBgaWRlYXBhZC1sYXB0b3AuY2AgY29kZTsgSSBhbSBtYWtpbmcgc3VyZSB0aGUgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBmcm9tIEFDUEkgY2FsbHMuIEFmdGVyIHF1aWNrbHkgc2Nhbm5pbmcsIEkgZmluZCB0aGF0IEFDUEkgbWV0aG9kIGNhbGxzIGFyZSBjaGVja2VkLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHJlYWQuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBJJ20gY2hlY2tpbmcgZm9yIGFueSBgY29weV90b191c2VyYCwgbmV0bGluayBtZXNzYWdlcywgc29ja2V0IG9wZXJhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcywgb3IgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gc3lzZnMgb3V0cHV0cyBhbmQgaW50ZXJuYWwgY2FsbGJhY2tzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyByZWxhdGVkIHRvIG5ldHdvcmtpbmcsIEJQRiwgb3IgZGlyZWN0IHVzZXItc3BhY2UgbWVtb3J5IGNvcGllcy4gVGhlIG9ubHkgaW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2UgaXMgdmlhIGBzeXNmc19lbWl0YCwgd2hpY2ggY29uc3RydWN0cyBzdHJpbmdzLiBUaGUgZGF0YSB0eXBlcyBhcmUgYmFzaWMgaW50cywgYm9vbGVhbnMsIGFuZCBpbml0aWFsaXplZCBzdHJ1Y3RzLiBJIHNlZSBubyBkaXJlY3QgdGhyZWF0cy5cblxuTm93IEkgYW0gZ29pbmcgdGhyb3VnaCB0aGUgY3JpdGVyaWEgZm9yIEtNU0FOLiBUaGUgY3JpdGljYWwgcXVlc3Rpb25zIGFyZTogZG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gQXJlIHRoZXJlIGFueSBicmFuY2hpbmcgb3IgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YT8gQXJlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBEb2VzIHRoZSBjb2RlIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/XG5cbkJhc2VkIG9uIHRoZSBhbmFseXNpcywgSSBhbSBjb25jbHVkaW5nIHRoYXQgYWxsIHRoZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCB0aGVyZSBhcmUgbm8gaW5mby1sZWFrcy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCB0aHVzIEkgYW0gY29uZmlkZW50IGluIHRoaXMgY29uY2x1c2lvbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk5NSwiT3V0cHV0VG9rZW5zIjoyMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjU6MzkuODYwMzMyMDA2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLWNvbnRyb2xsZWQgTEVEIHRyaWdnZXIgb2ZmbG9hZCBpbmZyYXN0cnVjdHVyZSwgdGhlIGB0cmlnZ2VyX21heV9vZmZsb2FkYCBzeXNmcyBhdHRyaWJ1dGUsIGhhcmR3YXJlIHRyaWdnZXIgdHJhbnNpdGlvbiBub3RpZmljYXRpb25zIHZpYSBhIHdvcmtxdWV1ZSwgYW5kIHVwZGF0ZXMgZHJpdmVycyBpbmNsdWRpbmcgaWRlYXBhZC1sYXB0b3AgYW5kIGxlZHMtY3Jvc19lYy5cXG5cXG4xLiBObyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIGNvcHlfdG9fdXNlciwgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBidWZmZXJzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcy4gVXNlcnNwYWNlIGV4cG9zdXJlIGlzIGxpbWl0ZWQgdG8gc3RhbmRhcmQgc3lzZnNfZW1pdCBzdHJpbmcgZm9ybWF0dGluZy5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3QgZmllbGRzIChlLmcuLCB0cmlnZ2Vyc19od19jaGFuZ2VkLCBsYXN0X2h3X2JyaWdodG5lc3MsIGh3X2JyaWdodG5lc3MpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2Ugb3IgYnJhbmNoaW5nLlxcbjMuIENvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaGFuZGxpbmcgKHN1Y2ggYXMgd29ya3F1ZXVlIGZsdXNoL2Rlc3RydWN0aW9uIGFuZCBtdXRleC9yd3NlbSBsb2NrcykgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi5cXG5cXG5UaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1jb250cm9sbGVkIExFRCB0cmlnZ2VyIG9mZmxvYWQgaW5mcmFzdHJ1Y3R1cmUsIHRoZSBgdHJpZ2dlcl9tYXlfb2ZmbG9hZGAgc3lzZnMgYXR0cmlidXRlLCBoYXJkd2FyZSB0cmlnZ2VyIHRyYW5zaXRpb24gbm90aWZpY2F0aW9ucyB2aWEgYSB3b3JrcXVldWUsIGFuZCB1cGRhdGVzIGRyaXZlcnMgaW5jbHVkaW5nIGlkZWFwYWQtbGFwdG9wIGFuZCBsZWRzLWNyb3NfZWMuXFxuXFxuMS4gTm8gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgYnVmZmVycyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMuIFVzZXJzcGFjZSBleHBvc3VyZSBpcyBsaW1pdGVkIHRvIHN0YW5kYXJkIHN5c2ZzX2VtaXQgc3RyaW5nIGZvcm1hdHRpbmcuXFxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RydWN0IGZpZWxkcyAoZS5nLiwgdHJpZ2dlcnNfaHdfY2hhbmdlZCwgbGFzdF9od19icmlnaHRuZXNzLCBod19icmlnaHRuZXNzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIG9yIGJyYW5jaGluZy5cXG4zLiBDb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nIChzdWNoIGFzIHdvcmtxdWV1ZSBmbHVzaC9kZXN0cnVjdGlvbiBhbmQgbXV0ZXgvcndzZW0gbG9ja3MpIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uXFxuXFxuVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpkgc6[1] Phase: Succeeded StartedAt: 2026-09-02 07:25:51 +0000 UTC FinishedAt: 2026-09-02 07:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkgc6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 07:25:51 +0000 UTC FinishedAt: 2026-09-02 07:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkgc6[2] Phase: Running StartedAt: 2026-09-02 07:25:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkgc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["trigger_may_offload_show","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","led_trigger_set","led_trigger_notify_hw_control_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"d84af761-1ab2-4d46-a1d0-3d99dce40287","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-09-02 07:25:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["trigger_may_offload_show","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","led_trigger_set","led_trigger_notify_hw_control_changed"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"d84af761-1ab2-4d46-a1d0-3d99dce40287","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpkgc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["trigger_may_offload_show","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","led_trigger_set","led_trigger_notify_hw_control_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"d84af761-1ab2-4d46-a1d0-3d99dce40287","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 07:25:51 +0000 UTC FinishedAt: 2026-09-02 07:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkgc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["trigger_may_offload_show","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","led_trigger_set","led_trigger_notify_hw_control_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"d84af761-1ab2-4d46-a1d0-3d99dce40287","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 07:25:51 +0000 UTC FinishedAt: 2026-09-02 07:25:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowpkgc6/series-workflowpkgc6-convert-artifact-562202814/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpkgc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["trigger_may_offload_show","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","led_trigger_set","led_trigger_notify_hw_control_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"d84af761-1ab2-4d46-a1d0-3d99dce40287","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Running StartedAt: 2026-09-02 07:26:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpkgc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["trigger_may_offload_show","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","led_trigger_set","led_trigger_notify_hw_control_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"d84af761-1ab2-4d46-a1d0-3d99dce40287","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Running StartedAt: 2026-09-02 07:26:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*0b8a3f5e-d9c9-4924-8fcd-a3968de62f01,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-workflowpkgc6/series-workflowpkgc6-convert-artifact-562202814/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpkgc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["trigger_may_offload_show","led_trigger_is_hw_controlled","led_trigger_remove_hw_control","led_trigger_set","led_trigger_notify_hw_control_changed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["NEW_LEDS","LEDS_CLASS","LEDS_TRIGGERS","LEDS_TRIGGERS_HW_CHANGED","LEDS_TRIGGER_NETDEV","LEDS_BRIGHTNESS_HW_CHANGED","IDEAPAD_LAPTOP"],"series_id":"d84af761-1ab2-4d46-a1d0-3d99dce40287","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Running StartedAt: 2026-09-02 07:26:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*0b8a3f5e-d9c9-4924-8fcd-a3968de62f01,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-workflowpkgc6/series-workflowpkgc6-convert-artifact-562202814/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,}