Name: series-workflowhdkth Phase: Succeeded StartedAt: 2026-08-25 18:52:06 +0000 UTC FinishedAt: 2026-08-25 22:45:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[0] Phase: Succeeded StartedAt: 2026-08-25 18:52:06 +0000 UTC FinishedAt: 2026-08-25 18:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 18:52:06 +0000 UTC FinishedAt: 2026-08-25 18:58:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "63f99ba3-437d-41d9-b576-02efff1014ad" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_folio_is_writeback_buffer", "zswap_lookup_and_clear_shadows", "__swap_cache_alloc_folio", "workingset_refault", "workingset_refault_lru_managed", "swapin_sync", "zswap_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXImIzM0OywKICAgICYjMzQ7enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkJiMzNDssCiAgICAmIzM0O3N3YXBpbl9zeW5jJiMzNDssCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBjYWNoZSBhbmQgenN3YXAgbG9naWMgdG8gcHJlc2VydmUgd29ya2luZ3NldCBzaGFkb3cgZW50cmllcyBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24sIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCB4YXJyYXkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIGFuZCBzd2FwIGNhY2hlIGxvZ2ljIHRvIHByb3Blcmx5IGhhbmRsZSB3b3JraW5nc2V0IHJlZmF1bHRzIGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNoZWNrIGlmIGEgZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyIGFuZCB0byBsb29rdXAgYW5kIGNsZWFyIHNoYWRvd3MsIGFuZCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCBkZWxldGlvbiBwYXRocyB0byBwcmVzZXJ2ZSBhbmQgcmVzdG9yZSBzaGFkb3dzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2Ugd2l0aCBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMyODhhOTEwNTljZGRhNzYwNzc2MjgzMjNiNjkwMjM1YzNjODljNDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxODo1MzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTEuLmRmYjcxNTMyMzZmNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuQEAgLTM1LDYgJiM0MzszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG4gYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuIFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5AQCAtNjksNiAmIzQzOzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMzhiMTE2NTIxMmM5NC4uYzE5MTg4N2MxZmVkYSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0zOCw2ICYjNDM7MzgsNyBAQCB2b2lkIHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4gdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbiYjNDM7dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKiBtbS9mb2xpby5jICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggYzZhOTI0MmQxYjViZC4uNzcxMTk3YjNmY2M1YyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4OTQsNiAmIzQzOzQ4OTQsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG4gXHRwdGVfdCAqcHRlcDtcbiYjNDM7XHR2b2lkICpzaGFkb3c7XG4gXG4gXHRpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTUwMTgsNiAmIzQzOzUwMTksMTAgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gb3V0X3BhZ2U7XG4gXHR9XG4gXG4mIzQzO1x0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbiYjNDM7XHRpZiAoc2hhZG93KVxuJiM0MztcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBLU00gc29tZXRpbWVzIGhhcyB0byBjb3B5IG9uIHJlYWQgZmF1bHRzLCBmb3IgZXhhbXBsZSwgaWZcbiBcdCAqIGZvbGlvLVx1MDAzZWluZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IDU5OTY2NWEzZDZlN2IuLjFlZjZjYzc2NjA1ZTUgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtMjI2Niw2ICYjNDM7MjI2Niw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbiBcdGludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyO1xuIFx0cGdvZmZfdCBvZmZzZXQ7XG4mIzQzO1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0Vk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7XG4gXHRpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTtcbkBAIC0yMzc3LDYgJiM0MzsyMzc4LDEwIEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHQgKi9cbiBcdGFyY2hfc3dhcF9yZXN0b3JlKGZvbGlvX3N3YXAoc3dhcCwgZm9saW8pLCBmb2xpbyk7XG4gXG4mIzQzO1x0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbiYjNDM7XHRpZiAoc2hhZG93KVxuJiM0MztcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xuJiM0MztcbiBcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xuIFx0XHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXHUwMDI2Zm9saW8sIGdmcCwgaW5mbywgaW5kZXgsIHZtYSk7XG4gXHRcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDkwYTU1MWE4OGRmNjMuLjg2NzljYjYxMjY4ZTUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTMxMiw5ICYjNDM7MzEyLDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li5kZjllMDQ1MmYxOWI5IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0yNCw2ICYjNDM7MjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbkBAIC0yNjMsMTIgJiM0MzsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0dW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDtcbiBcdGJvb2wgZm9saW9fc3dhcHBlZCA9IGZhbHNlLCBuZWVkX2ZyZWUgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0dm9pZCAqc2hhZG93X3BhcmtlZDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgcGFya2VkIHRoZSBzbG90JiMzOTtzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcbiYjNDM7XHQgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4mIzQzO1x0aWYgKHNoYWRvd19wYXJrZWQpXG4mIzQzO1x0XHRzaGFkb3cgPSBzaGFkb3dfcGFya2VkO1xuJiM0MztcbiBcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xuIFx0Y2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpO1xuIFx0Y2lfZW5kID0gY2lfc3RhcnQgJiM0MzsgbnJfcGFnZXM7XG5AQCAtNDgzLDE5ICYjNDM7NDkzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuICAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4gICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcbiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVyb1xuQEAgLTUwNywxMyAmIzQzOzUxMywxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxuICAqXG4mIzQzOyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4mIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZVxuJiM0MzsgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cbiYjNDM7ICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNjQ0LDE3ICYjNDM7NjU0LDI3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbiBcdFx0cGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2FwdHVyZSB0aGUgc2xvdCYjMzk7cyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4mIzQzO1x0XHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGlmIChzaGFkb3cpXG4mIzQzO1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGN0eCwgZm9saW8pO1xuIFx0aWYgKHJlYWRhaGVhZCkge1xuIFx0XHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcbkBAIC02ODUsMTcgJiM0Mzs3MDUsMjcgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiB7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2FwdHVyZSB0aGUgc2xvdCYjMzk7cyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4mIzQzO1x0XHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbiYjNDM7XHRpZiAoc2hhZG93KVxuJiM0MztcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuJiM0MztcbiYjNDM7XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA3M2E4MWI0YTNlMTY0Li45OTA1NzUzYjdhMTBjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuQEAgLTczMyw3ICYjNDM7NzM0LDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiYjNDM7XHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxuIFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4gXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbiBcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCA3YWMyYjg4YzgwYWU1Li5lMjAzZDYzMWY2MWI4IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01MzYsMTYgJiM0Mzs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHRyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcbiB9XG4gXG4tLyoqXG4tICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4tICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuLSAqXG4tICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4tICovXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuJiM0MztzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csXG4mIzQzO1x0XHRcdFx0IGJvb2wgbHJ1X21hbmFnZWQpXG4ge1xuIFx0Ym9vbCBmaWxlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuQEAgLTU3Nyw3ICYjNDM7NTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQW4gTFJVLW1hbmFnZWQgZm9saW8gbWF5IHNpdCBpbiBhIHBlci1DUFUgYmF0Y2gsIHdoaWNoIGNhbm5vdCBiZVxuJiM0MztcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcbiYjNDM7XHQgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlXG4mIzQzO1x0ICogYWN0aXZhdGlvbiBmb3Igc3VjaCBhIGZvbGlvLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChscnVfbWFuYWdlZClcbiYjNDM7XHRcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiBcdHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KGxydXZlYywgbnIpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7XG4gXG5AQCAtNTkwLDYgJiM0Mzs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxuJiM0MzsgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbiYjNDM7ICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcbiYjNDM7ICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuJiM0MzsgKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIG5vdCBvbiB0aGUgTFJVIHlldCwgdGhlIGNhbGxlciBhZGRzXG4mIzQzOyAqIGl0IHdpdGggZm9saW9fYWRkX2xydSgpIGFmdGVyd2FyZHMuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4mIzQzO3tcbiYjNDM7XHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcbiYjNDM7ICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS5cbiYjNDM7ICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxuJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4mIzQzOyAqXG4mIzQzOyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG4mIzQzOyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXG4mIzQzOyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlVcbiYjNDM7ICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4mIzQzO3tcbiYjNDM7XHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uXG4gICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uYzFhNzhlZGZhMGI4NyAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC05NzIsNiAmIzQzOzk3Miw3OSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogd3JpdGViYWNrIGNvZGVcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XIHhhX21rX3ZhbHVlKDApXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/XG4mIzQzOyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4mIzQzOyAqXG4mIzQzOyAqIEEgZm9saW8gaXMgYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHdoZW4gZXZlcnkgb25lIG9mIGl0cyBzd2FwIG9mZnNldHMgaG9sZHNcbiYjNDM7ICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV1xuJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoXG4mIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4mIzQzOyAqL1xuJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICYjNDM7IGkpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJiMzOTtzIHBhcmtlZCBzaGFkb3cocylcbiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KVxuJiM0MzsgKlxuJiM0MzsgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJiMzOTtzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlXG4mIzQzOyAqIHpzd2FwIHRyZWUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93XG4mIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXG4mIzQzOyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0b1xuJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoKSAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmdcbiYjNDM7ICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4mIzQzO1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCAmIzQzOyBpKTtcbiYjNDM7XHRcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XG4mIzQzO1x0XHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCAmIzQzOyBpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICYjNDM7IGkpO1xuJiM0MztcdFx0aWYgKHBhcmtlZCAhPSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XKVxuJiM0MztcdFx0XHRzaGFkb3cgPSBwYXJrZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2hhZG93O1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQXR0ZW1wdHMgdG8gZnJlZSBhbiBlbnRyeSBieSBhZGRpbmcgYSBmb2xpbyB0byB0aGUgc3dhcCBjYWNoZSxcbiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhXG5AQCAtOTg3LDEyICYjNDM7MTA2MCwxNCBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiB7XG4mIzQzO1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbiBcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XG4gXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4mIzQzO1x0dm9pZCAqc2hhZG93O1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuQEAgLTEwMDAsOSAmIzQzOzEwNzUsMTEgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdGlmICghc2kpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuJiM0MztcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7XG4mIzQzO1xuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuJiM0MztcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4mIzQzO1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDE0LDYgJiM0MzsxMDkxLDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdCAqL1xuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbiYjNDM7XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcbiBcdC8qXG4gXHQgKiBmb2xpbyBpcyBsb2NrZWQsIGFuZCB0aGUgc3dhcGNhY2hlIGlzIG5vdyBzZWN1cmVkIGFnYWluc3RcbkBAIC0xMDM1LDcgJiM0MzsxMTEzLDEyIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgc2xvdCB3aXRoIG5vIHNoYWRvdyBhbHJlYWR5IHJlYWRzIGJhY2sgYXMgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVzpcbiYjNDM7XHQgKiB0aGUgc3dhcCB0YWJsZSBtYXJrcyBhIHN3YXBwZWQgb3V0IHNsb3Qgd2l0aCB4YV9ta192YWx1ZSgwKSBhbmQgaG9sZHNcbiYjNDM7XHQgKiB0aGUgc2hhZG93LCB3aGVuIHRoZXJlIGlzIG9uZSwgaW4gdGhhdCBzYW1lIHZhbHVlLlxuJiM0MztcdCAqL1xuJiM0MztcdHhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTtcbiBcbiBcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpXG5AQCAtMTA1NSw3ICYjNDM7MTEzOCwxNSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFxuIG91dDpcbiBcdGlmIChyZXQpIHtcbi1cdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCYjMzk7cyBzaGFkb3cgYW5kIG5vdGhpbmdcbiYjNDM7XHRcdCAqIGhhcyBiZWVuIHBhcmtlZCBmb3IgaXQgeWV0LCBzbyByZXN0b3JlIGl0IGFzIHRoZSBmb2xpbyBsZWF2ZXNcbiYjNDM7XHRcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKHN3cGVudHJ5KSwgb2Zmc2V0KTtcbiYjNDM7XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcbiYjNDM7XHRcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuJiM0MztcdFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdH1cbiBcdGZvbGlvX3B1dChmb2xpbyk7XG5AQCAtMTQ5OCw2ICYjNDM7MTU4OSwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGVcbiYjNDM7XHQgKiBzd2FwIGNhY2hlLCBzbyByZWNsYWltIHdyaXRlcyBpdCBvdXQgYWdhaW4uIFdyaXRlYmFjayBhbHJlYWR5XG4mIzQzO1x0ICogZGVjaWRlZCB0aGlzIGRhdGEgYmVsb25ncyBvbiBkaXNrLCBzbyBzZW5kIGl0IHRoZXJlIGluc3RlYWQgb2ZcbiYjNDM7XHQgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvd1xuJiM0MztcdCAqIHBhcmtlZCBmb3IgdGhlIGJ1ZmZlciBpbiBwbGFjZSwgc28gaXQgaXMgc3RpbGwgcmVzdG9yZWQgaW50b1xuJiM0MztcdCAqIHRoZSBzbG90IG9uY2UgdGhlIGZvbGlvIGxlYXZlcyB0aGUgc3dhcCBjYWNoZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKCF6c3dhcF9lbmFibGVkKVxuIFx0XHRnb3RvIGNoZWNrX29sZDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MmIzM0OywKICAgICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQmIzM0OywKICAgICYjMzQ7c3dhcGluX3N5bmMmIzM0OywKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIGFuZCBzd2FwIGNhY2hlIGxvZ2ljIHRvIHByb3Blcmx5IGhhbmRsZSB3b3JraW5nc2V0IHJlZmF1bHRzIGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNoZWNrIGlmIGEgZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyIGFuZCB0byBsb29rdXAgYW5kIGNsZWFyIHNoYWRvd3MsIGFuZCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCBkZWxldGlvbiBwYXRocyB0byBwcmVzZXJ2ZSBhbmQgcmVzdG9yZSBzaGFkb3dzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2Ugd2l0aCBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMyODhhOTEwNTljZGRhNzYwNzc2MjgzMjNiNjkwMjM1YzNjODljNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxODo1MzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaAppbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC96c3dhcC5oCkBAIC0zNSw2ICYjNDM7MzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7CiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTsKIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTsKJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogI2Vsc2UKIAogc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTsKQEAgLTY5LDYgJiM0Mzs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi8KZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM4YjExNjUyMTJjOTQuLmMxOTE4ODdjMWZlZGEgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMzgsNiAmIzQzOzM4LDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7CiYjNDM7dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTsKIHZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiAvKiBtbS9mb2xpby5jICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGM2YTkyNDJkMWI1YmQuLjc3MTE5N2IzZmNjNWMgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00ODk0LDYgJiM0Mzs0ODk0LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJdW5zaWduZWQgbG9uZyBwYWdlX2lkeDsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiAJcHRlX3QgKnB0ZXA7CiYjNDM7CXZvaWQgKnNoYWRvdzsKIAogCWlmICghcHRlX3VubWFwX3NhbWUodm1mKSkKIAkJZ290byBvdXQ7CkBAIC01MDE4LDYgJiM0Mzs1MDE5LDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlnb3RvIG91dF9wYWdlOwogCX0KIAomIzQzOwlzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCS8qCiAJICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmCiAJICogZm9saW8tJmd0O2luZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA1OTk2NjVhM2Q2ZTdiLi4xZWY2Y2M3NjYwNWU1IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTIyNjYsNiAmIzQzOzIyNjYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMOwogCWludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyOwogCXBnb2ZmX3Qgb2Zmc2V0OwomIzQzOwl2b2lkICpzaGFkb3c7CiAKIAlWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTsKIAlpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTsKQEAgLTIzNzcsNiAmIzQzOzIzNzgsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAkgKi8KIAlhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pOwogCiYjNDM7CXNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJaWYgKHNobWVtX3Nob3VsZF9yZXBsYWNlX2ZvbGlvKGZvbGlvLCBnZnApKSB7CiAJCWVycm9yID0gc2htZW1fcmVwbGFjZV9mb2xpbygmYW1wO2ZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpOwogCQlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggOTBhNTUxYTg4ZGY2My4uODY3OWNiNjEyNjhlNSAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzEyLDkgJiM0MzszMTIsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwogLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqLwogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IGI3NmViM2Q4NzZmZDcuLmRmOWUwNDUyZjE5YjkgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTI0LDYgJiM0MzsyNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2htZW1fZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjdGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zd2FwX29wcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcF90YWJsZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcC5oJiMzNDsKQEAgLTI2MywxMiAmIzQzOzI2NCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJdW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDsKIAlib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJdm9pZCAqc2hhZG93X3BhcmtlZDsKIAogCVZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7CiAKJiM0MzsJLyoKJiM0MzsJICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCYjMzk7cyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlCiYjNDM7CSAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi4KJiM0MzsJICovCiYjNDM7CXNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93X3BhcmtlZCkKJiM0MzsJCXNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7CiYjNDM7CiAJc2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7CiAJY2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpOwogCWNpX2VuZCA9IGNpX3N0YXJ0ICYjNDM7IG5yX3BhZ2VzOwpAQCAtNDgzLDE5ICYjNDM7NDkzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCiAJLyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovCiAJbWVtY2cxX3N3YXBpbihmb2xpbyk7Ci0JaWYgKHNoYWRvdykKLQkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwogCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CiAKLQkvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqLwotCWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXJldHVybiBmb2xpbzsKIH0KIAogLyoqCi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgogICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3QKICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVybwpAQCAtNTA3LDEzICYjNDM7NTEzLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieQogICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLgogICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlcgomIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZQomIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy4KICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwCiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLgogICovCi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC02NDQsMTcgJiM0Mzs2NTQsMjcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LAogCQlwZ29mZl90IGlseCwgYm9vbCByZWFkYWhlYWQpCiB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKIAl9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTsKIAogCWlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXN3YXBfcmVhZF9mb2xpbyhjdHgsIGZvbGlvKTsKIAlpZiAocmVhZGFoZWFkKSB7CiAJCWZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pOwpAQCAtNjg1LDE3ICYjNDM7NzA1LDI3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsCiB7CiAJc3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXZvaWQgKnNoYWRvdyA9IE5VTEw7CiAKIAlkbyB7CiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oJmFtcDtjdHgsIGZvbGlvKTsKIAlzd2FwX3JlYWRfc3VibWl0KCZhbXA7Y3R4KTsKIAlyZXR1cm4gZm9saW87CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDczYTgxYjRhM2UxNjQuLjk5MDU3NTNiN2ExMGMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00OCw2ICYjNDM7NDgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZXdhbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwpAQCAtNzMzLDcgJiM0Mzs3MzQsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewogCQlzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tJmd0O3N3YXA7CiAKLQkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiYjNDM7CQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKIAkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwogCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCA3YWMyYjg4YzgwYWU1Li5lMjAzZDYzMWY2MWI4IDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC01MzYsMTYgJiM0Mzs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsCiAJcmV0dXJuIHJlZmF1bHRfZGlzdGFuY2UgJmx0Oz0gd29ya2luZ3NldF9zaXplOwogfQogCi0vKioKLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLgotICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uCi0gKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCi0gKgotICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5Ci0gKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5Ci0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLgotICovCi12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiYjNDM7c3RhdGljIHZvaWQgX193b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93LAomIzQzOwkJCQkgYm9vbCBscnVfbWFuYWdlZCkKIHsKIAlib29sIGZpbGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpAQCAtNTc3LDcgJiM0Mzs1NjksMTYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCWlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsICZhbXA7d29ya2luZ3NldCwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwogCi0JZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CS8qCiYjNDM7CSAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmUKJiM0MzsJICogZGV0ZXJtaW5lZCBoZXJlOiBzZXR0aW5nIHRoZSBmbGFnIHdvdWxkIHJhY2UgdGhlIGRyYWluIGFuZCBsZWF2ZSBpdAomIzQzOwkgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlCiYjNDM7CSAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby4KJiM0MzsJICovCiYjNDM7CWlmIChscnVfbWFuYWdlZCkKJiM0MzsJCWZvbGlvX2FjdGl2YXRlKGZvbGlvKTsKJiM0MzsJZWxzZQomIzQzOwkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiAJd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7CiAKQEAgLTU5MCw2ICYjNDM7NTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby4KJiM0MzsgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby4KJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCiYjNDM7ICoKJiM0MzsgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHkKJiM0MzsgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5CiYjNDM7ICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHMKJiM0MzsgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkIC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5CiYjNDM7ICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS4KJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpbyB0aGUgZXZpY3Rpb24gaXMgcmVmYXVsdGVkIGludG8uCiYjNDM7ICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLgomIzQzOyAqCiYjNDM7ICogTGlrZSB3b3JraW5nc2V0X3JlZmF1bHQoKSwgYnV0IGZvciBhIGZvbGlvIHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgYWRkZWQKJiM0MzsgKiB0byB0aGUgTFJVLCB3aGljaCBoYXMgdG8gYmUgYWN0aXZhdGVkIGJ5IG1vdmluZyBpdCBiZXR3ZWVuIHRoZSBsaXN0cwomIzQzOyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLgomIzQzOyAqCiYjNDM7ICogVGhlIGFjdGl2YXRpb24gaXMgYmVzdCBlZmZvcnQ6IGEgZm9saW8gc3RpbGwgc2l0dGluZyBpbiBhIHBlci1DUFUgTFJVCiYjNDM7ICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgYWxyZWFkeSBhZGRlZCB0byB0aGUgTFJVLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIHRydWUpOwomIzQzO30KJiM0MzsKIC8qKgogICogd29ya2luZ3NldF9hY3RpdmF0aW9uIC0gbm90ZSBhIHBhZ2UgYWN0aXZhdGlvbgogICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC4KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLmMxYTc4ZWRmYTBiODcgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtOTcyLDYgJiM0Mzs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiB3cml0ZWJhY2sgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMCkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj8KJiM0MzsgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKQomIzQzOyAqCiYjNDM7ICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkcwomIzQzOyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cKJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aAomIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgJiM0MzsgaSkpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbyYjMzk7cyBwYXJrZWQgc2hhZG93KHMpCiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KQomIzQzOyAqCiYjNDM7ICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbyYjMzk7cyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZQomIzQzOyAqIHpzd2FwIHRyZWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvdwomIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkCiYjNDM7ICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nCiYjNDM7ICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LgomIzQzOyAqLwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tJmd0O3N3YXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpOwomIzQzOwkJdm9pZCAqcGFya2VkID0geGFfbG9hZCh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpCiYjNDM7CQkJc2hhZG93ID0gcGFya2VkOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaGFkb3c7CiYjNDM7fQomIzQzOwogLyoKICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsCiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhCkBAIC05ODcsMTIgJiM0MzsxMDYwLDE0IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCQkJIHN3cF9lbnRyeV90IHN3cGVudHJ5KQogewomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwogCXN0cnVjdCB4YXJyYXkgKnRyZWU7CiAJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cGVudHJ5KTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7CiAJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpOwogCXN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTsKJiM0MzsJdm9pZCAqc2hhZG93OwogCWludCByZXQgPSAwOwogCiAJLyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi8KQEAgLTEwMDAsOSAmIzQzOzEwNzUsMTEgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAlpZiAoIXNpKQogCQlyZXR1cm4gLUVFWElTVDsKIAomIzQzOwlzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwZW50cnkpOwomIzQzOwogCW1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0JZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCi0JCQkJICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwomIzQzOwlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAomIzQzOwkJCQkJIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwogCXB1dF9zd2FwX2RldmljZShzaSk7CiAKIAkvKgpAQCAtMTAxNCw2ICYjNDM7MTA5MSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJICovCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAKIAkvKgogCSAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdApAQCAtMTAzNSw3ICYjNDM7MTExMywxMiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlnb3RvIG91dDsKIAl9CiAKLQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQpOwomIzQzOwkvKgomIzQzOwkgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6CiYjNDM7CSAqIHRoZSBzd2FwIHRhYmxlIG1hcmtzIGEgc3dhcHBlZCBvdXQgc2xvdCB3aXRoIHhhX21rX3ZhbHVlKDApIGFuZCBob2xkcwomIzQzOwkgKiB0aGUgc2hhZG93LCB3aGVuIHRoZXJlIGlzIG9uZSwgaW4gdGhhdCBzYW1lIHZhbHVlLgomIzQzOwkgKi8KJiM0MzsJeGFfc3RvcmUodHJlZSwgb2Zmc2V0LCBzaGFkb3csIEdGUF9LRVJORUwpOwogCiAJY291bnRfdm1fZXZlbnQoWlNXUFdCKTsKIAlpZiAoZW50cnktJmd0O29iamNnKQpAQCAtMTA1NSw3ICYjNDM7MTEzOCwxNSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCiBvdXQ6CiAJaWYgKHJldCkgewotCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGFsbG9jYXRpb24gYWJvdmUgb3Zlcndyb3RlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBhbmQgbm90aGluZwomIzQzOwkJICogaGFzIGJlZW4gcGFya2VkIGZvciBpdCB5ZXQsIHNvIHJlc3RvcmUgaXQgYXMgdGhlIGZvbGlvIGxlYXZlcwomIzQzOwkJICogdGhlIHN3YXAgY2FjaGUsIG9yIHRoZSBldmljdGlvbiBpdCByZWNvcmRzIGlzIGxvc3QuCiYjNDM7CQkgKi8KJiM0MzsJCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oc3dwZW50cnkpLCBvZmZzZXQpOwomIzQzOwkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3cGVudHJ5LCBzaGFkb3cpOwomIzQzOwkJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiYjNDM7CQlmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCQlmb2xpb191bmxvY2soZm9saW8pOwogCX0KIAlmb2xpb19wdXQoZm9saW8pOwpAQCAtMTQ5OCw2ICYjNDM7MTU4OSwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJVk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpOwogCVZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGUKJiM0MzsJICogc3dhcCBjYWNoZSwgc28gcmVjbGFpbSB3cml0ZXMgaXQgb3V0IGFnYWluLiBXcml0ZWJhY2sgYWxyZWFkeQomIzQzOwkgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZgomIzQzOwkgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvdwomIzQzOwkgKiBwYXJrZWQgZm9yIHRoZSBidWZmZXIgaW4gcGxhY2UsIHNvIGl0IGlzIHN0aWxsIHJlc3RvcmVkIGludG8KJiM0MzsJICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWlmICghenN3YXBfZW5hYmxlZCkKIAkJZ290byBjaGVja19vbGQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBac3dhcCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIGl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGFyZWFzOiB6c3dhcCwgdGhlIHN3YXAgY2FjaGUsIGFuZCBob3cgdGhlIHdvcmtpbmdzZXQgcmVmYXVsdHMuIFRoaXMgbG9va3MgbGlrZSBhIGZhaXJseSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gR2l2ZW4gdGhlIHNjb3BlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVyZSYjMzk7cyBzb21lIHBvdGVudGlhbCBmb3IgZnVuY3Rpb25hbCBpbXBhY3QsIGFuZCBob25lc3RseSwgZnV6emluZyBpcyBnb2luZyB0byBiZSBlc3NlbnRpYWwgaGVyZS4KCkkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgYXJlYXMuIEZyb20gdGhlIGRpZmYsIEkgc2VlIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQ6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgX19zd2FwX2NhY2hlX2FsbG9jYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gLCBgc3dhcGluX3N5bmNgLCBgX19yZW1vdmVfbWFwcGluZ2AsIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGFuZCBgenN3YXBfc3RvcmVgLgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBmb2N1c2luZyBvbiB0aGUgbmV3IHN0dWZmLCBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLiBJIGNhbiBzZWUgZnJvbSB0aGUgZmlsZSBwYXRocyB0aGF0IHRoZXNlIGFyZSBib3RoIGRlZmluZWQgaW4gYG1tL3pzd2FwLmNgLCBhbmQgdGhleSYjMzk7cmUgYm90aCBnbG9iYWwuIE5leHQsIGxldCYjMzk7cyBsb29rIGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBgc3dhcGluX3N5bmNgLCBhbHNvIGluIHRoYXQgZmlsZS4gVGhlbiBgbW0vd29ya2luZ3NldC5jYCBpcyBnb2luZyB0byBjb250YWluIGB3b3JraW5nc2V0X3JlZmF1bHRgIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYC4gRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGB6c3dhcF9zdG9yZWAgaW4gYG1tL3pzd2FwLmNgLgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IGBkb19zd2FwX3BhZ2VgIGFuZCBgc2htZW1fc3dhcGluX2ZvbGlvYCBhcmUgaG90IHBhdGhzLCBzbyBpdCBtaWdodCBiZSB3aXNlIHRvIGJlIGV4dHJhIGNhcmVmdWwgdGhlcmUgZHVyaW5nIHRlc3RpbmcsIGFuZCBtYXliZSBhdm9pZCB0aGVtIGFzIGluaXRpYWwgZnV6emluZyB0YXJnZXRzLgoKT2J2aW91c2x5LCBgQ09ORklHX1pTV0FQYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoaXMgdG8gZXZlbiBjb21waWxlLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1NXQVBgIGlzIGFsc28gZW5hYmxlZC4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB1c2Ugc29tZSB0YXJnZXRlZCB0b29scyB0byB2ZXJpZnkgdGhpcyBvbmUsIHNvIEkgd2lsbCBwcmVwYXJlIHRob3NlIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3pzd2FwLmg9Mzc9Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oOjM4OmJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zOS12b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTY5PXN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTczLVxuaW5jbHVkZS9saW51eC96c3dhcC5oOjc0OnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNzUte1xuLS1cbm1tL3Ztc2Nhbi5jPTY4Mz1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtNzM3LVx0XHRpZiAocmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmM6NzM4Olx0XHQgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxubW0vdm1zY2FuLmMtNzM5LVx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4tLVxubW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtOTc4LS8qKlxubW0venN3YXAuYzo5Nzk6ICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/XG5tbS96c3dhcC5jLTk4MC0gKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKVxuLS1cbm1tL3pzd2FwLmMtOTg4LSAqL1xubW0venN3YXAuYzo5ODk6Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS96c3dhcC5jLTk5MC17XG4tLVxubW0venN3YXAuYz0xNTc5PWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE1OTktXHQgKi9cbm1tL3pzd2FwLmM6MTYwMDpcdGlmICh6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbm1tL3pzd2FwLmMtMTYwMS1cdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjYzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlOiBac3dhcCBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYXJvdW5kIGBDT05GSUdfWlNXQVBgLiBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgWnN3YXAgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbSwgcGFydGljdWxhcmx5IGl0cyByZXNwb25zaXZlbmVzcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGtub3cgaG93IHpzd2FwIGlzIGltcGFjdGluZyB0aGUgb3ZlcmFsbCBJL08gcHJvZmlsZS4gTXkgaW1tZWRpYXRlIG1lbnRhbCBjaGVja2xpc3QgaW5jbHVkZXM6IGlzIGl0IHNldCB0byAmIzM5O3kmIzM5OywgJiMzOTttJiMzOTssIG9yIHVuZGVmaW5lZD8gQSBzaW1wbGUgYGdyZXBgIG9yIGxvb2tpbmcgYXQgdGhlIGFwcHJvcHJpYXRlIGAuY29uZmlnYCBmaWxlIHdpbGwgcXVpY2tseSB0ZWxsIG1lLiBEZXBlbmRpbmcgb24gdGhlIHNldHRpbmcsIEkga25vdyBteSBuZXh0IHN0ZXBzIHdpbGwgY2hhbmdlLiBJZiBpdCYjMzk7cyBlbmFibGVkLCBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIHRoZSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMgbGlrZSBgenN3YXAubWF4X3Bvb2xfcGVyY2VudGAsIGFuZCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLCBhcyB0aG9zZSBoYXZlIGJpZyBlZmZlY3RzLiBJZiBpdCYjMzk7cyBkaXNhYmxlZCwgSSYjMzk7bGwgY29uc2lkZXIgd2h5IOKAkyBpcyBpdCBhIGRlbGliZXJhdGUgY2hvaWNlIHRvIGZhdm9yIHN3YXAgdG8gZGlzaywgb3IgbWF5YmUgdGhlcmUgYXJlIHJlc291cmNlIGxpbWl0YXRpb25zIHRoYXQgcHJlY2x1ZGUgWnN3YXAmIzM5O3MgdXNhZ2U/IEkmIzM5O2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIHdvcmtsb2FkIGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBoYXJkd2FyZSBpbiBvcmRlciB0byBldmFsdWF0ZSBpdHMgYXBwcm9wcmlhdGVuZXNzLiBJIG5lZWQgdG8gaGF2ZSBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB6c3dhcCBpbiBvcmRlciB0byBlbnN1cmUgdGhlIGJlc3QgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFpTV0FQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtaU1dBUCwmIzM0OyByaWdodD8gR290dGEgc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBtbS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgbGl2ZSwgc28gaXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgdGhlICYjMzQ7WlNXQVAmIzM0OyBvcHRpb24mIzM5O3MgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHBvdGVudGlhbGx5IGFueSBhc3NvY2lhdGVkIHN1Yi1vcHRpb25zIG9yIGhlbHAgdGV4dC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc3RhdGU6IGlzIGl0IGVuYWJsZWQgYnkgZGVmYXVsdCwgZG9lcyBpdCByZXF1aXJlIG90aGVyIGZlYXR1cmVzIHRvIGJlIGVuYWJsZWQsIGFuZCBhcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zPyBVbmRlcnN0YW5kaW5nIHRoZSBgS2NvbmZpZ2AgZW50cnkgaXMgY3J1Y2lhbCBiZWZvcmUgSSBzdGFydCBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyIHdpdGggdGhlIGN1cnJlbnQga2VybmVsJiMzOTtzIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjI6XHRjb25maWcgWlNXQVBcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBTV0FQXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDI2Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcbiAgMjk6XHRcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXG4gIDMwOlx0XHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXG4gIDMxOlx0XHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxuICAzMjpcdFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXG4gIDMzOlx0XHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG4gIDM2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcbiAgNDA6XHRcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXG4gIDQxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgWlNXQVAgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgYFpTV0FQYCB0aGluZy4gSXQgY2xlYXJseSByZWxpZXMgb24gYFNXQVBgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGluY2x1ZGUgYm90aCBgWlNXQVBgIGFuZCBgU1dBUGAgaW4gYEVuYWJsZUNvbmZpZ3NgLiBBbmQsIHRoaW5raW5nIGFib3V0IGEgZ29vZCB1c2VyIGV4cGVyaWVuY2UsIEkmIzM5O2xsIGxpa2VseSBhZGQgYFpTV0FQX0RFRkFVTFRfT05gIGFzIHdlbGwuIEVuYWJsaW5nIGl0IGJ5IGRlZmF1bHQganVzdCBmZWVscyByaWdodC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBwYXkgYXR0ZW50aW9uIHRvLiBGcm9tIG15IHByZXZpb3VzIGV4cGVyaWVuY2UgYW5kIGtub3dsZWRnZSwgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgY29yZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgY2xvc2VseTogYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAuCgpJ4oCZbGwgc3RhcnQgd2l0aCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGFjY2Vzc2libGUgYW5kIGV4cG9ydGVkIGFzIGl0IGlzIGNydWNpYWwgaW4gdGhlIG92ZXJhbGwgcHJvY2Vzcy4gVGltZSB0byBsb29rIGludG8gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGNvbmZpcm0gaXRzIHZpc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MzE0PXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmg6MzE1OnN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9zd2FwLmgtMzE2LVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NDE5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MDMtLyoqXG5tbS9zd2FwX3N0YXRlLmM6NTA0OiAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtNTA1LSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUyMy0gKi9cbm1tL3N3YXBfc3RhdGUuYzo1MjQ6c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxubW0vc3dhcF9zdGF0ZS5jLTUyNS1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTY1Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY2Ny1cdFx0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTtcbm1tL3N3YXBfc3RhdGUuYzo2Njg6XHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbm1tL3N3YXBfc3RhdGUuYy02NjktXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NzAzPXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTcxOC1cdFx0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTtcbm1tL3N3YXBfc3RhdGUuYzo3MTk6XHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xubW0vc3dhcF9zdGF0ZS5jLTcyMC1cdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuLS1cbm1tL3pzd2FwLmM9MTA2MD1zdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuLS1cbm1tL3pzd2FwLmMtMTA4MC1cdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5tbS96c3dhcC5jOjEwODE6XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxubW0venN3YXAuYy0xMDgyLVx0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwIENhY2hlIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgcGFnZXMgZ2V0IGludG8gdGhlIHN3YXAgY2FjaGUgYW5kIHdoZXJlIHRoZSBhbGxvY2F0aW9uIGhhcHBlbnMuIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIHRoZSBjYWxsIHNpdGVzIGFyZSBhIG1peCBvZiB0aGluZ3MuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIHN0YW5kYXJkIHN3YXAtaW4gcGF0aC4gSSYjMzk7bSBhbHNvIHNlZWluZyBpdCYjMzk7cyB1c2VkIGJ5IGBzd2FwaW5fc3luY2AsIHdoaWNoIEkga25vdyBpcyBhIGdsb2JhbCBmdW5jdGlvbiwgaW5kaWNhdGluZyB0aGlzIGlzIGEgc3luY2hyb25pemF0aW9uIHBvaW50IGZvciBzd2FwIG9wZXJhdGlvbnMgYWNyb3NzIHRoZSBzeXN0ZW0uIEFuZCB0aGVyZSYjMzk7cyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgc3VnZ2VzdGluZyB0aGlzIGZ1bmN0aW9uIGhhcyByZWxldmFuY2UgaW4gY29tcHJlc3NlZCBzd2FwIGFzIHdlbGwuCgpHaXZlbiB0aGUgcG90ZW50aWFsIHN5c3RlbS13aWRlIGltcGxpY2F0aW9ucyBvZiBgc3dhcGluX3N5bmNgLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuIEkgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gZGlnIGludG8gdGhlIHdvcmtpbmdzZXQgbWFuYWdlbWVudC4gVGhhdCBpcywgSSBzaG91bGQgY2hlY2sgaG93IGB3b3JraW5nc2V0X3JlZmF1bHRgIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCBpbnRlcmFjdCB3aXRoIHRoaXMgYWxsb2NhdGlvbiBwYXRoLiBUaGVzZSBhcmUgYWxzbyBnbG9iYWwgZnVuY3Rpb25zLCB3aGljaCBtZWFucyB0aGVpciBiZWhhdmlvciBpcyByZWxldmFudCB0byB0aGUgc3lzdGVtJiMzOTtzIG92ZXJhbGwgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzd2FwcGluZyBpbXBhY3RzIHRoZSB3b3JraW5nc2V0IGFuZCBob3cgdGhlIExSVSBpcyBtYW5hZ2VkIGluIHJlbGF0aW9uIHRvIHRoaXMuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0PTE0MjY9VGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTYzNy1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoxNjM4Olx0ICB3b3JraW5nc2V0X3JlZmF1bHRfYW5vblxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTE2MzktXHRcdE51bWJlciBvZiByZWZhdWx0cyBvZiBwcmV2aW91c2x5IGV2aWN0ZWQgYW5vbnltb3VzIHBhZ2VzLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTE2NDAtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3Q6MTY0MTpcdCAgd29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xNjQyLVx0XHROdW1iZXIgb2YgcmVmYXVsdHMgb2YgcHJldmlvdXNseSBldmljdGVkIGZpbGUgcGFnZXMuXG4tLVxubW0vZmlsZW1hcC5jPTk1NT1pbnQgZmlsZW1hcF9hZGRfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZmlsZW1hcC5jLTk4Ni1cdFx0aWYgKCEoZ2ZwIFx1MDAyNiBfX0dGUF9XUklURSkgXHUwMDI2XHUwMDI2IHNoYWRvdylcbm1tL2ZpbGVtYXAuYzo5ODc6XHRcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xubW0vZmlsZW1hcC5jLTk4OC1cdFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4tLVxubW0vaW50ZXJuYWwuaD0zOD12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9pbnRlcm5hbC5oLTM5LVx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG5tbS9pbnRlcm5hbC5oOjQwOnZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG5tbS9pbnRlcm5hbC5oOjQxOnZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG5tbS9pbnRlcm5hbC5oLTQyLXZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMTkzPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMjAyLVx0XCYjMzQ7d3JpdGViYWNrXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjIyMDM6XHRcJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfYW5vblwmIzM0Oyxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjA0Olx0XCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmMtMjIwNS0jaWZkZWYgQ09ORklHX1NXQVBcbi0tXG5tbS9tZW1jb250cm9sLmM9MTU5MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9zdGF0IG1lbW9yeV9zdGF0c1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjI5LVx0LyogVGhlIG1lbW9yeSBldmVudHMgKi9cbm1tL21lbWNvbnRyb2wuYzoxNjMwOlx0eyBcJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfYW5vblwmIzM0OyxcdFdPUktJTkdTRVRfUkVGQVVMVF9BTk9OXHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTYzMTpcdHsgXCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcJiMzNDssXHRXT1JLSU5HU0VUX1JFRkFVTFRfRklMRVx0XHR9LFxubW0vbWVtY29udHJvbC5jLTE2MzItXHR7IFwmIzM0O3dvcmtpbmdzZXRfYWN0aXZhdGVfYW5vblwmIzM0OyxcdFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTlx0fSxcbi0tXG5tbS9tZW1vcnkuYz00ODgxPXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUwMjMtXHRpZiAoc2hhZG93KVxubW0vbWVtb3J5LmM6NTAyNDpcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xubW0vbWVtb3J5LmMtNTAyNS1cbi0tXG5tbS9zaG1lbS5jPTIyNTQ9c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTIzODItXHRpZiAoc2hhZG93KVxubW0vc2htZW0uYzoyMzgzOlx0XHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XG5tbS9zaG1lbS5jLTIzODQtXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTY1Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY3NC1cdGlmIChzaGFkb3cpXG5tbS9zd2FwX3N0YXRlLmM6Njc1Olx0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG5tbS9zd2FwX3N0YXRlLmMtNjc2LVxuLS1cbm1tL3N3YXBfc3RhdGUuYz03MDM9c3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNzI1LVx0aWYgKHNoYWRvdylcbm1tL3N3YXBfc3RhdGUuYzo3MjY6XHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbm1tL3N3YXBfc3RhdGUuYy03MjctXG4tLVxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xMjQzLVx0W0koV09SS0lOR1NFVF9OT0RFUyldXHRcdFx0PSBcJiMzNDt3b3JraW5nc2V0X25vZGVzXCYjMzQ7LFxubW0vdm1zdGF0LmM6MTI0NDpcdFtJKFdPUktJTkdTRVRfUkVGQVVMVF9BTk9OKV1cdFx0PSBcJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfYW5vblwmIzM0Oyxcbm1tL3Ztc3RhdC5jOjEyNDU6XHRbSShXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSldXHRcdD0gXCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcJiMzNDssXG5tbS92bXN0YXQuYy0xMjQ2LVx0W0koV09SS0lOR1NFVF9BQ1RJVkFURV9BTk9OKV1cdFx0PSBcJiMzNDt3b3JraW5nc2V0X2FjdGl2YXRlX2Fub25cJiMzNDssXG4tLVxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTUzOC1cbm1tL3dvcmtpbmdzZXQuYzo1Mzk6c3RhdGljIHZvaWQgX193b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93LFxubW0vd29ya2luZ3NldC5jLTU0MC1cdFx0XHRcdCBib29sIGxydV9tYW5hZ2VkKVxuLS1cbm1tL3dvcmtpbmdzZXQuYy01OTQtLyoqXG5tbS93b3JraW5nc2V0LmM6NTk1OiAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxubW0vd29ya2luZ3NldC5jLTU5Ni0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbi0tXG5tbS93b3JraW5nc2V0LmMtNjA1LSAqL1xubW0vd29ya2luZ3NldC5jOjYwNjp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNjA3LXtcbm1tL3dvcmtpbmdzZXQuYzo2MDg6XHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG5tbS93b3JraW5nc2V0LmMtNjA5LX1cbi0tXG5tbS93b3JraW5nc2V0LmMtNjExLS8qKlxubW0vd29ya2luZ3NldC5jOjYxMjogKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcbm1tL3dvcmtpbmdzZXQuYy02MTMtICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS5cbi0tXG5tbS93b3JraW5nc2V0LmMtNjE2LSAqXG5tbS93b3JraW5nc2V0LmM6NjE3OiAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG5tbS93b3JraW5nc2V0LmMtNjE4LSAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXG4tLVxubW0vd29ya2luZ3NldC5jLTYyNS0gKi9cbm1tL3dvcmtpbmdzZXQuYzo2MjY6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxubW0vd29ya2luZ3NldC5jLTYyNy17XG5tbS93b3JraW5nc2V0LmM6NjI4Olx0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XG5tbS93b3JraW5nc2V0LmMtNjI5LX1cbi0tXG5tbS96c3dhcC5jPTk4OT1ib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTEwMTgtICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvXG5tbS96c3dhcC5jOjEwMTk6ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nXG5tbS96c3dhcC5jLTEwMjAtICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA1MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IG5vdGljaW5nIGEgcGF0dGVybi4gU2V2ZXJhbCBmdW5jdGlvbnMg4oCTIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgIOKAkyBhcmUgYWxsIGdsb2JhbCBpbiBzY29wZS4gVGhpcyByYWlzZXMgYSBmZXcgaW1tZWRpYXRlIHF1ZXN0aW9ucyBpbiBteSBtaW5kLCBtb3N0bHkgYWJvdXQgdGhlaXIgaW50ZW5kZWQgdXNhZ2UgYW5kIHdoZXRoZXIgdGhleSByZXByZXNlbnQgYSBnb29kIGVuY2Fwc3VsYXRpb24gb2YgZnVuY3Rpb24uIE15IG5leHQgdGhvdWdodCBpcywgbGV0JiMzOTtzIHplcm8gaW4gb24gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMga2V5IGZ1bmN0aW9uIGlzIGJlaW5nIGV4cG9ydGVkLCB3aGljaCBjb3VsZCBnaXZlIG1lIG1vcmUgaW5zaWdodCBpbnRvIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM4MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyBTY29wZSBhbmQgU3luY2hyb25pemF0aW9uKioKCkhtbSwgaW50ZXJlc3RpbmcuIFRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBpc24mIzM5O3QgKmV4cGxpY2l0bHkqIGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgY2xlYXJseSBhY2Nlc3NpYmxlIGdsb2JhbGx5LiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGNvbmNlcm4sIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBJbXBsaWNpdCBnbG9iYWwgdmFyaWFibGVzIGNhbiBiZSB0cmlja3kgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgZGVidWdnaW5nLCBlc3BlY2lhbGx5IGluIGEgbGFyZ2UgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCYjMzk7cyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LiBJcyB0aGlzIGJ5IGRlc2lnbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgb3IgYSBsZWdhY3kgYXJ0aWZhY3Q/IElzIGl0IGEgcG90ZW50aWFsIHNvdXJjZSBvZiB1bmludGVuZGVkIHNpZGUgZWZmZWN0cz8KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3dhcGluX3N5bmNgIGZ1bmN0aW9uLiBJdCBzZWVtcyBjcml0aWNhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IGZ1bmN0aW9uLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc3luY2hyb25pemF0aW9uIG9yIGRhdGEgdHJhbnNmZXIgbG9naWMgcmVsYXRlZCB0byB0aGlzIGdsb2JhbCB2YXJpYWJsZSBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBjb2hlcmVuY2UgbW9kZWwgaGVyZS4gVW5kZXJzdGFuZGluZyB0aGlzIHJvdXRpbmUgd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgZGVzaWduIGNob2ljZXMgc3Vycm91bmRpbmcgdGhlIHZhcmlhYmxlJiMzOTtzIHNjb3BlLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBjb250ZXh0IHN3aXRjaGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnN3YXBpbl9zeW5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NjUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYHpzd2FwX3N0b3JlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIG1lbnRpb24gb2YgYHpzd2FwX3N0b3JlYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGxpa2VseSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBleGFtaW5hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSwgaG93IGl0JiMzOTtzIGJlaGF2aW5nLCBhbmQgd2hhdCBzcGVjaWZpYyBhc3BlY3RzIHJlcXVpcmUgdGhlIG1vc3Qgc2NydXRpbnksIGdpdmVuIHRoZSBjdXJyZW50IGlzc3VlIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qenN3YXBfc3RvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgzMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgd29ya2luZ3NldF9yZWZhdWx0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBjaGVjayBgd29ya2luZ3NldF9yZWZhdWx0YC4mIzM0OyBJdCYjMzk7cyBhIGtleSBtZXRyaWMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBhbnkgcG90ZW50aWFsIGFub21hbGllcy4gTXkgbWluZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGF0IGNvdWxkIGJlIGNhdXNpbmcgZmx1Y3R1YXRpb25zLCB3aGF0IHRoZSB0eXBpY2FsIGJhc2VsaW5lcyBsb29rIGxpa2UgaW4gdGhpcyBlbnZpcm9ubWVudCwgYW5kIGFueSBwb3RlbnRpYWwgY29ycmVsYXRpb25zIHdpdGggb3RoZXIgcGVyZm9ybWFuY2UgaW5kaWNhdG9ycyBJJiMzOTttIHRyYWNraW5nLiBJcyBpdCBoaWdoZXIgdGhhbiBleHBlY3RlZD8gTG93ZXI/IEFuZCBjcml0aWNhbGx5LCB3aGF0IGFyZSB0aGUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gZWZmZWN0cywgb3IgdGhlIGxpa2VseSByb290IGNhdXNlcyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIGl0PyBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKndvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDQ2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBvYnZpb3VzbHksIGJ1dCB3aGF0IHNwZWNpZmljYWxseSBhbSBJIHRyeWluZyB0byBwYXJzZSBoZXJlPyBJdCYjMzk7cyBsaWtlbHkgYSBib29sZWFuIGZ1bmN0aW9uIG9yIG1hY3JvLCBhbmQgdGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0cyBwdXJwb3NlIGlzIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIGZvbGlvLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHpzd2FwYCwgcmVwcmVzZW50cyBhIHdyaXRlYmFjayBidWZmZXIuCgpTbywgdGhlIGltcGxpY2l0IHF1ZXN0aW9uIGluIG15IGhlYWQgaXM6ICppcyB0aGlzIGZvbGlvIGN1cnJlbnRseSB1bmRlcmdvaW5nIGEgd3JpdGViYWNrIG9wZXJhdGlvbiwgYW5kIHRoZXJlZm9yZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBzdWNoIHdpdGhpbiB6c3dhcCYjMzk7cyBtYW5hZ2VtZW50IHJvdXRpbmVzPyogVGhpcyBkaXN0aW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzLiBJZiBpdCYjMzk7cyBhIHdyaXRlYmFjayBidWZmZXIsIGNlcnRhaW4gb3B0aW1pemF0aW9ucyBhbmQgY29uc2lkZXJhdGlvbnMgcHJvYmFibHkgYXBwbHksIHZlcnN1cyBhIGZvbGlvIHNpbXBseSBoZWxkIHdpdGhpbiBhIHpzd2FwIGNhY2hlIHdhaXRpbmcgdG8gYmUgcGFnZWQgb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHdyaXRlYmFjayBvcGVyYXRpb25zIGNhbiBiZSBhc3luY2hyb25vdXMgYW5kIHRoZWlyIHN0YXR1cyBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoaXMgcmV0dXJucyB0cnVlLCB3aGF0IHRoYXQgaW1wbGllcyBhYm91dCB0aGUgZm9saW8mIzM5O3Mgc3RhdGUsIGFuZCBob3cgYHpzd2FwYCBsZXZlcmFnZXMgdGhpcyBpbmZvcm1hdGlvbi4gRnJvbSBoZXJlLCBJIGNhbiBleGFtaW5lIGl0cyBpbXBsZW1lbnRhdGlvbiwgbG9vayBhdCBpdHMgY2FsbGVycywgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIHVzZXMgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBrZXJuZWwgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBTeXprYWxsZXIgVGFyZ2V0cyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgZm9yIGFyZWFzIHRoYXQgbWlnaHQgYmUgZXhwbG9pdGFibGUgdGhyb3VnaCBzeXprYWxsZXIuIFRoZSBrZXkgaGVyZSBpcyBnbG9iYWwgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBzcGVjaWZpY2FsbHkgJiMzNDtleHBvcnRlZCYjMzQ7IGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZSwgYnV0IGFyZSBzdGlsbCBnbG9iYWxseSB2aXNpYmxlIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzIGZvciBzeXprYWxsZXIgZnV6emluZy4KCk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHpzd2FwX3N0b3JlYCBpbiBgbW0venN3YXAuY2AuIFpzd2FwLCB3aXRoIGl0cyBtZW1vcnkgY29tcHJlc3Npb24gYW5kIHN3YXBwaW5nIGZ1bmN0aW9uYWxpdHksIGlzIGNvbXBsZXggYW5kIGluaGVyZW50bHkgaW52b2x2ZXMgaW50ZXJhY3Rpb24gd2l0aCBhIGxvdCBvZiBvdGhlciBzdWJzeXN0ZW1zLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmaW5kaW5nIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUsIGJlaGF2aW9yIHRocm91Z2ggZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvbWVtaW5mby5jPTM0PXN0YXRpYyBpbnQgbWVtaW5mb19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmZzL3Byb2MvbWVtaW5mby5jLTkzLVx0c2VxX3ByaW50ZihtLCAgXCYjMzQ7WnN3YXBwZWQ6ICAgICAgICU4bHUga0JcXG5cJiMzNDssXG5mcy9wcm9jL21lbWluZm8uYzo5NDpcdFx0ICAgKHVuc2lnbmVkIGxvbmcpYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpIFx1MDAzY1x1MDAzY1xuZnMvcHJvYy9tZW1pbmZvLmMtOTUtXHRcdCAgIChQQUdFX1NISUZUIC0gMTApKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9OD1zdHJ1Y3QgbHJ1dmVjO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTktXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6MTA6ZXh0ZXJuIGF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX3BhZ2VzO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTExLVxuLS1cbmluY2x1ZGUvbGludXgvenN3YXAuaD0yNz11bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oOjI4OmJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMjktaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTQyPXN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNDMtXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6NDQ6c3RhdGljIGlubGluZSBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNDUte1xuLS1cbm1tL3BhZ2VfaW8uYz0yMDQ9aW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vcGFnZV9pby5jLTIzNy1cbm1tL3BhZ2VfaW8uYzoyMzg6XHRpZiAoenN3YXBfc3RvcmUoZm9saW8pKSB7XG5tbS9wYWdlX2lvLmMtMjM5LVx0XHRjb3VudF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLCBNVEhQX1NUQVRfWlNXUE9VVCk7XG4tLVxubW0venN3YXAuYy00Ni0vKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cbm1tL3pzd2FwLmM6NDc6YXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xubW0venN3YXAuYy00OC0vKiBUaGUgbnVtYmVyIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cbm1tL3pzd2FwLmM6NDk6c3RhdGljIGF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcbm1tL3pzd2FwLmMtNTAtXG4tLVxubW0venN3YXAuYz03NjU9c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuLS1cbm1tL3pzd2FwLmMtNzc0LVx0aWYgKGVudHJ5LVx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXG5tbS96c3dhcC5jOjc3NTpcdFx0YXRvbWljX2xvbmdfZGVjKFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XG5tbS96c3dhcC5jLTc3Ni1cdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xubW0venN3YXAuYzo3Nzc6XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtNzc4LX1cbi0tXG5tbS96c3dhcC5jPTEwMjI9dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xMDU0LSAqIHRvIHRoZSBzd2FwIGRldmljZS4gIFdlIGFyZSBiYXNpY2FsbHkgcmVzdW1pbmcgdGhlIHNhbWUgc3dhcFxubW0venN3YXAuYzoxMDU1OiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtMTA1Ni0gKiBpbiB0aGUgZmlyc3QgcGxhY2UuICBBZnRlciB0aGUgZm9saW8gaGFzIGJlZW4gZGVjb21wcmVzc2VkIGludG9cbi0tXG5tbS96c3dhcC5jPTEyODM9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTEzMTctXHRcdG5yX2JhY2tpbmcgPSB6c3dhcF90b3RhbF9wYWdlcygpO1xubW0venN3YXAuYzoxMzE4Olx0XHRucl9zdG9yZWQgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG5tbS96c3dhcC5jLTEzMTktXHR9XG4tLVxubW0venN3YXAuYz0xNDA4PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm1tL3pzd2FwLmMtMTQ5OC1cbm1tL3pzd2FwLmM6MTQ5OTpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0venN3YXAuYy0xNTAwLVx0XHRcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbm1tL3pzd2FwLmMtMTUzNy1cdCAqIG5vIGZ1cnRoZXIgcG9zc2liaWxpdHkgb2YgZmFpbHVyZS4gR3JhYiByZWZzIHRvIHRoZSBwb29sIGFuZCBvYmpjZyxcbm1tL3pzd2FwLmM6MTUzODpcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxubW0venN3YXAuYy0xNTM5LVx0ICogVGhlIG9wcG9zaXRlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQgYnkgenN3YXBfZW50cnlfZnJlZSgpXG4tLVxubW0venN3YXAuYy0xNTQ2LVx0fVxubW0venN3YXAuYzoxNTQ3Olx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG5tbS96c3dhcC5jLTE1NDgtXHRpZiAoZW50cnktXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcbm1tL3pzd2FwLmM6MTU0OTpcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XG5tbS96c3dhcC5jLTE1NTAtXG4tLVxubW0venN3YXAuYy0xNTc4LVxubW0venN3YXAuYzoxNTc5OmJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtMTU4MC17XG4tLVxubW0venN3YXAuYy0xNjM0LVxubW0venN3YXAuYzoxNjM1Olx0XHRpZiAoIXpzd2FwX3N0b3JlX3BhZ2UocGFnZSwgb2JqY2csIHBvb2wpKVxubW0venN3YXAuYy0xNjM2LVx0XHRcdGdvdG8gcHV0X3Bvb2w7XG4tLVxubW0venN3YXAuYz0xODE1PXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxubW0venN3YXAuYy0xODE2LXtcbm1tL3pzd2FwLmM6MTgxNzpcdCp2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG5tbS96c3dhcC5jLTE4MTgtXHRyZXR1cm4gMDtcbi0tXG5tbS96c3dhcC5jPTE4MjI9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXG5tbS96c3dhcC5jLTE4MjMte1xubW0venN3YXAuYzoxODI0Olx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTgyNS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmM9NTI9c3RhdGljIGludCByZWFkX21pbl9mcmVlX2tiKHNpemVfdCAqdmFsdWUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYy01Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmM6NTc6c3RhdGljIGludCBnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKHNpemVfdCAqdmFsdWUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jLTU4LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jPTU1OD1zdGF0aWMgaW50IHRlc3Rfbm9fa21lbV9ieXBhc3MoY29uc3QgY2hhciAqcm9vdClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jLTYyNC1cdFx0ZnJlZSh0cmlnZ2VyX2FsbG9jYXRpb24pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYzo2MjU6XHRcdGlmIChnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKFx1MDAyNnN0b3JlZF9wYWdlcykpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jLTYyNi1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NjEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipUcmFjaW5nIHRoZSBTd2FwIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIHN3YXAgaW1wbGVtZW50YXRpb24gaGVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYHpzd2FwX3N0b3JlYCBpcyBhIGdsb2JhbGx5IGFjY2Vzc2libGUgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBzd2FwX3dyaXRlb3V0YC4gT24gdGhlIG90aGVyIGhhbmQsIGBzd2FwaW5fc3luY2AgaXMgYWxzbyBnbG9iYWwsIGFuZCBpdHMgaW52b2NhdGlvbiBpcyB0cmlnZ2VyZWQgdGhyb3VnaCBgZG9fc3dhcF9wYWdlYCDigJMgc3BlY2lmaWNhbGx5LCB0aHJvdWdoIHRoYXQgYHN3YXBpbl9yZWFkYWhlYWRgIHBhdGguIE5vdywgSSB3YW50IHRvIGRyaWxsIGRvd24gZnVydGhlciBpbnRvIHRoZSBtZWNoYW5pY3Mgb2YgYHN3YXBpbl9zeW5jYC4gVGltZSB0byBjaGVjayBvdXQgYG1tL3N3YXBfc3RhdGUuY2AgZm9yIHRoZSBkZXRhaWxlZCBsb2dpYyBvZiB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwaW5fc3luYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz00ODgxPXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ5NzAtXHRcdGlmIChkYXRhX3JhY2Uoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykpXG5tbS9tZW1vcnkuYzo0OTcxOlx0XHRcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxubW0vbWVtb3J5LmMtNDk3Mi1cdFx0XHRcdFx0ICAgIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHZtZikgfCBCSVQoMCksXG4tLVxubW0vc2htZW0uYz0yMDQzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIwNTctXHRtcG9sID0gc2htZW1fZ2V0X3Bnb2ZmX3BvbGljeShpbmZvLCBpbmRleCwgb3JkZXIsIFx1MDAyNmlseCk7XG5tbS9zaG1lbS5jOjIwNTg6XHRmb2xpbyA9IHN3YXBpbl9zeW5jKGVudHJ5LCBnZnAsIEJJVChvcmRlciksIHZtZiwgbXBvbCwgaWx4KTtcbm1tL3NobWVtLmMtMjA1OS1cdG1wb2xfY29uZF9wdXQobXBvbCk7XG4tLVxubW0vc3dhcC5oPTMzMj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsXG5tbS9zd2FwLmgtMzMzLVx0XHRzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5tbS9zd2FwLmg6MzM0OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxubW0vc3dhcC5oLTMzNS1cdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuLS1cbm1tL3N3YXAuaD00MDg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3Qgc3dwLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwLmgtNDEzLVxubW0vc3dhcC5oOjQxNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoXG5tbS9zd2FwLmgtNDE1LVx0c3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz02NTI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxuLS1cbm1tL3N3YXBfc3RhdGUuYy02ODctLyoqXG5tbS9zd2FwX3N0YXRlLmM6Njg4OiAqIHN3YXBpbl9zeW5jIC0gc3dhcC1pbiBvbmUgb3IgbXVsdGlwbGUgZW50cmllcyBza2lwcGluZyByZWFkYWhlYWQuXG5tbS9zd2FwX3N0YXRlLmMtNjg5LSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuLS1cbm1tL3N3YXBfc3RhdGUuYy03MDItICovXG5tbS9zd2FwX3N0YXRlLmM6NzAzOnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG5tbS9zd2FwX3N0YXRlLmMtNzA0LVx0XHRcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MTIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE1vZGlmaWVkIFN3YXAgYW5kIFpzd2FwIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gc3dhcCBhbmQgenN3YXAsIHNwZWNpZmljYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHdvcmtpbmdzZXRzIGFuZCB0aGUgc3dhcCBjYWNoZS4KCkluaXRpYWxseSwgSSBpZGVudGlmaWVkIHNldmVyYWwgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCBmb2N1cyBwb2ludHM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBvZiB0aGUgbW9kaWZpZWQgbG9naWMuCgpJJiMzOTt2ZSBub3RlZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgc3dhcGluX3N5bmNgLCBgenN3YXBfc3RvcmVgLCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgKGZvcm1lcmx5IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCkuIEFsc28sIGB3b3JraW5nc2V0X3JlZmF1bHRgIGhhcyBiZWVuIGNoYW5nZWQuIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgLCBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhcmUgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnMuCgpOb3csIEkmIzM5O20gY2hlY2tpbmcgd2hpY2ggb2YgdGhlc2UgYXJlIHN0YXRpYywgYmVjYXVzZSBJIGtub3cgdGhhdCBpbXBhY3RzIGZ1enppbmcuIFNvLCBJIGNvbmZpcm1lZCB0aGF0IG5vbmUgb2YgdGhlIGNhbmRpZGF0ZSBmdW5jdGlvbnM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgIGFyZSBzdGF0aWMuIFRoZXJlZm9yZSwgdGhleSBhcmUgYWxsIHN1aXRhYmxlIGZvciBpbmNsdXNpb24gaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LgoKSSBoYWQgdG8gcmVtb3ZlIGBkb19zd2FwX3BhZ2VgIGFuZCBgc2htZW1fc3dhcGluX2ZvbGlvYCBmcm9tIG15IGxpc3QuIFRob3NlIGFyZSBob3QgcGF0aHMsIGFuZCBJIHdhbnQgdG8gYXZvaWQgdGhlbS4gU2ltaWxhcmx5LCBgenN3YXBfc3RvcmVgIGlzIGFsc28gYSBob3QgcGF0aCwgYnV0IGl0IGlzIHRoZSBtYWluIHpzd2FwIGVudHJ5IHBvaW50LgoKSSBhbSBjaGVja2luZyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGFuZCBgX19zd2FwX2NhY2hlX2FsbG9jYC4gVGhvc2UgYXJlIHN0YXRpYy4gVGhleSBhcmUgbm90IHN1aXRhYmxlIHRvIGluY2x1ZGUgaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LgoKU28sIHRoZSBkZWZpbml0aXZlIGxpc3QgZm9yIGBGb2N1c1N5bWJvbHNgOiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgLCBgc3dhcGluX3N5bmNgLCBhbmQgYHpzd2FwX3N0b3JlYC4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBlbmFibGluZyBgWlNXQVBgLCBgU1dBUGAsIGFuZCBgWlNXQVBfREVGQVVMVF9PTmAgaXMgd2hhdCBJIG5lZWQuIGBaU1dBUGAgaXMgdGhlIG1vc3QgaW1wb3J0YW50IGNvbmZpZywgYW5kIHRoZSBvdGhlcnMgYXJlIGRlcGVuZGVuY2llcy4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gaG93IHpzd2FwIGFuZCBzd2FwIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgd2l0aCBob3cgdGhleSBtYW5hZ2Ugd29ya2luZ3NldCByZWZhdWx0cyBhbmQgd3JpdGViYWNrIGJ1ZmZlcnMuIE5ldyBmdW5jdGlvbnMgYXJlIGFkZGVkLCBhbmQgZXhpc3Rpbmcgb25lcyBhcmUgbW9kaWZpZWQgdG8gZW5zdXJlIHRoYXQgc2hhZG93cyBhcmUgcHJlc2VydmVkIGFuZCByZXN0b3JlZCBpbiBzd2FwIGNhY2hlIG9wZXJhdGlvbnMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBXT1JLSU5HU0VUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbW0vd29ya2luZ3NldC5jYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBGaXJzdCwgbGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB0aGUgYG1tL3dvcmtpbmdzZXQuY2AgbW9kdWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIG1vZHVsZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIHBhZ2UgdGFibGUgc3RydWN0dXJlcywgdGhlIHBoeXNpY2FsIG1lbW9yeSBhbGxvY2F0b3IsIE5VTUEgY29uc2lkZXJhdGlvbnMsIG9yIHBlcmhhcHMgaW50ZXJhY3Rpb25zIHdpdGggc3BlY2lmaWMgQ1BVIGZlYXR1cmVzPyBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgZGVidWdnaW5nIGVmZm9ydHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byBjb25zdWx0IGFueSBvdGhlciBtb2R1bGVzIG9yIHRoZWlyIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbiB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgZW5zdXJlIEkgZG8gbm90IGJyZWFrIHRoaW5ncyB3aXRoIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dvcmtpbmdzZXRcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTU2LVx0XHRcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXG5tbS9NYWtlZmlsZTo1NzpcdFx0XHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcbm1tL01ha2VmaWxlLTU4LVx0XHRcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTczOQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudCBkb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgQ29tcHVsc29yeSBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBgd29ya2luZ3NldC5vYCBpcyAqYWx3YXlzKiBnZXR0aW5nIGNvbXBpbGVkLiBUaGF0JiMzOTtzIGEgYml0IG9kZCwgdXN1YWxseSBJJiMzOTtkIGV4cGVjdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkuIFNpbmNlIHRoZSBjb21waWxhdGlvbiBpcyBhbHdheXMgaGFwcGVuaW5nLCBJJiMzOTttIHRoaW5raW5nIG1heWJlIGl0JiMzOTtzIGNvbm5lY3RlZCB0byBhIGNvcmUgb3IgZnVuZGFtZW50YWwgZmVhdHVyZS4gV2hhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgc3VzcGVjdD8gQWgsIEkgc2hvdWxkIGNoZWNrIHRoZSBgQ09ORklHX01FTUNHYCBzZXR0aW5nIGZpcnN0LiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBtZW1vcnkgY2dyb3VwcyBjb3VsZCBiZSBpbmZsdWVuY2luZyB0aGluZ3MuIEkmIzM5O2xsIHNlZSBpZiBgd29ya2luZ3NldC5vYCBpcyBzb21laG93IHRpZWQgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGEgY29udGFpbmVyLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Nz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Ni1cbmluaXQvS2NvbmZpZzoxMDc3OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzgtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODUtXG5pbml0L0tjb25maWc6MTA4Njpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODctXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTItXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDk0LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk5LVxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwMS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE1OQoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBSZWZpbmVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGNvbmZpZ3VyZSB0aGlzIHN5c3RlbS4gYE1FTUNHYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGZvciB0cmFja2luZyBtZW1vcnkgY2dyb3VwcyBhbmQgaGFuZGxpbmcgd29ya2luZ3NldCByZWZhdWx0cy4gVGhhdCYjMzk7cyBhIGtleSBjb25zaWRlcmF0aW9uLiBTaW5jZSBgd29ya2luZ3NldC5jYCBpcyBhbHdheXMgY29tcGlsZWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBtYW5hZ2luZyBpdHMgaW50ZXJhY3Rpb25zIGVmZmVjdGl2ZWx5LgoKSSYjMzk7bSBkZWZpbml0ZWx5IGdvaW5nIHRvIGluY2x1ZGUgYFpTV0FQYCwgYFNXQVBgLCBhbmQgYFpTV0FQX0RFRkFVTFRfT05gLiBJIGNoZWNrZWQgYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdCBgWlNXQVBfREVGQVVMVF9PTmAgaXMgYSB2YWxpZCBjb25maWcgb3B0aW9uLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpJJiMzOTttIHJlLWV2YWx1YXRpbmcgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gLiBXaGlsZSBpdCBtaWdodCBub3QgYmUgc3RyaWN0bHkgKm5lY2Vzc2FyeSogZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcywgSSYjMzk7bGwga2VlcCBpdCBpbiBtaW5kLgoKTm93LCBmb3IgdGhlIGtleSBmb2N1cyBzeW1ib2xzIOKAkyBJJiMzOTt2ZSBmaW5hbGl6ZWQgdGhlc2U6CgoqICAgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgCiogICBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYAoqICAgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AKKiAgIGB3b3JraW5nc2V0X3JlZmF1bHRgCiogICBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYAoqICAgYHN3YXBpbl9zeW5jYAoKSSB3YXMgaW5pdGlhbGx5IG9uIHRoZSBmZW5jZSBhYm91dCBgenN3YXBfc3RvcmVgLiBJdCYjMzk7cyBhIGJpdCBnZW5lcmljIGFuZCBwb3RlbnRpYWxseSBhIHZlcnkgaG90IGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgc28gaXQgd2FycmFudHMgaW5jbHVzaW9uLiBJJiMzOTtsbCBhZGQgaXQgdG8gdGhlIGZpbmFsIGxpc3QuCgpBbHJpZ2h0LCB3aXRoIHRoZXNlIHNldHRpbmdzLCBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCYjMzQ7LAogICAgJiMzNDtzd2FwaW5fc3luYyYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgenN3YXAgYW5kIHN3YXAgY2FjaGUgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgcmVmYXVsdHMgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgaWYgYSBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIgYW5kIHRvIGxvb2t1cCBhbmQgY2xlYXIgc2hhZG93cywgYW5kIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIGRlbGV0aW9uIHBhdGhzIHRvIHByZXNlcnZlIGFuZCByZXN0b3JlIHNoYWRvd3MuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCYjMzQ7LAogICAgJiMzNDtzd2FwaW5fc3luYyYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgenN3YXAgYW5kIHN3YXAgY2FjaGUgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgcmVmYXVsdHMgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgaWYgYSBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIgYW5kIHRvIGxvb2t1cCBhbmQgY2xlYXIgc2hhZG93cywgYW5kIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIGRlbGV0aW9uIHBhdGhzIHRvIHByZXNlcnZlIGFuZCByZXN0b3JlIHNoYWRvd3MuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2FjaGUgYW5kIHpzd2FwIGxvZ2ljIHRvIHByZXNlcnZlIHdvcmtpbmdzZXQgc2hhZG93IGVudHJpZXMgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgeGFycmF5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMyODhhOTEwNTljZGRhNzYwNzc2MjgzMjNiNjkwMjM1YzNjODljNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxODo1MzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaAppbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC96c3dhcC5oCkBAIC0zNSw2ICYjNDM7MzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7CiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTsKIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTsKJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogI2Vsc2UKIAogc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTsKQEAgLTY5LDYgJiM0Mzs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi8KZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM4YjExNjUyMTJjOTQuLmMxOTE4ODdjMWZlZGEgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMzgsNiAmIzQzOzM4LDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7CiYjNDM7dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTsKIHZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiAvKiBtbS9mb2xpby5jICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGM2YTkyNDJkMWI1YmQuLjc3MTE5N2IzZmNjNWMgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00ODk0LDYgJiM0Mzs0ODk0LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJdW5zaWduZWQgbG9uZyBwYWdlX2lkeDsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiAJcHRlX3QgKnB0ZXA7CiYjNDM7CXZvaWQgKnNoYWRvdzsKIAogCWlmICghcHRlX3VubWFwX3NhbWUodm1mKSkKIAkJZ290byBvdXQ7CkBAIC01MDE4LDYgJiM0Mzs1MDE5LDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlnb3RvIG91dF9wYWdlOwogCX0KIAomIzQzOwlzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCS8qCiAJICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmCiAJICogZm9saW8tJmd0O2luZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA1OTk2NjVhM2Q2ZTdiLi4xZWY2Y2M3NjYwNWU1IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTIyNjYsNiAmIzQzOzIyNjYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMOwogCWludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyOwogCXBnb2ZmX3Qgb2Zmc2V0OwomIzQzOwl2b2lkICpzaGFkb3c7CiAKIAlWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTsKIAlpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTsKQEAgLTIzNzcsNiAmIzQzOzIzNzgsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAkgKi8KIAlhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pOwogCiYjNDM7CXNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJaWYgKHNobWVtX3Nob3VsZF9yZXBsYWNlX2ZvbGlvKGZvbGlvLCBnZnApKSB7CiAJCWVycm9yID0gc2htZW1fcmVwbGFjZV9mb2xpbygmYW1wO2ZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpOwogCQlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggOTBhNTUxYTg4ZGY2My4uODY3OWNiNjEyNjhlNSAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzEyLDkgJiM0MzszMTIsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwogLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqLwogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IGI3NmViM2Q4NzZmZDcuLmRmOWUwNDUyZjE5YjkgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTI0LDYgJiM0MzsyNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2htZW1fZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjdGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zd2FwX29wcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcF90YWJsZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcC5oJiMzNDsKQEAgLTI2MywxMiAmIzQzOzI2NCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJdW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDsKIAlib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJdm9pZCAqc2hhZG93X3BhcmtlZDsKIAogCVZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7CiAKJiM0MzsJLyoKJiM0MzsJICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCYjMzk7cyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlCiYjNDM7CSAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi4KJiM0MzsJICovCiYjNDM7CXNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93X3BhcmtlZCkKJiM0MzsJCXNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7CiYjNDM7CiAJc2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7CiAJY2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpOwogCWNpX2VuZCA9IGNpX3N0YXJ0ICYjNDM7IG5yX3BhZ2VzOwpAQCAtNDgzLDE5ICYjNDM7NDkzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCiAJLyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovCiAJbWVtY2cxX3N3YXBpbihmb2xpbyk7Ci0JaWYgKHNoYWRvdykKLQkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwogCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CiAKLQkvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqLwotCWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXJldHVybiBmb2xpbzsKIH0KIAogLyoqCi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgogICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3QKICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVybwpAQCAtNTA3LDEzICYjNDM7NTEzLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieQogICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLgogICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlcgomIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZQomIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy4KICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwCiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLgogICovCi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC02NDQsMTcgJiM0Mzs2NTQsMjcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LAogCQlwZ29mZl90IGlseCwgYm9vbCByZWFkYWhlYWQpCiB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKIAl9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTsKIAogCWlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXN3YXBfcmVhZF9mb2xpbyhjdHgsIGZvbGlvKTsKIAlpZiAocmVhZGFoZWFkKSB7CiAJCWZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pOwpAQCAtNjg1LDE3ICYjNDM7NzA1LDI3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsCiB7CiAJc3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXZvaWQgKnNoYWRvdyA9IE5VTEw7CiAKIAlkbyB7CiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oJmFtcDtjdHgsIGZvbGlvKTsKIAlzd2FwX3JlYWRfc3VibWl0KCZhbXA7Y3R4KTsKIAlyZXR1cm4gZm9saW87CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDczYTgxYjRhM2UxNjQuLjk5MDU3NTNiN2ExMGMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00OCw2ICYjNDM7NDgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZXdhbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwpAQCAtNzMzLDcgJiM0Mzs3MzQsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewogCQlzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tJmd0O3N3YXA7CiAKLQkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiYjNDM7CQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKIAkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwogCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCA3YWMyYjg4YzgwYWU1Li5lMjAzZDYzMWY2MWI4IDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC01MzYsMTYgJiM0Mzs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsCiAJcmV0dXJuIHJlZmF1bHRfZGlzdGFuY2UgJmx0Oz0gd29ya2luZ3NldF9zaXplOwogfQogCi0vKioKLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLgotICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uCi0gKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCi0gKgotICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5Ci0gKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5Ci0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLgotICovCi12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiYjNDM7c3RhdGljIHZvaWQgX193b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93LAomIzQzOwkJCQkgYm9vbCBscnVfbWFuYWdlZCkKIHsKIAlib29sIGZpbGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpAQCAtNTc3LDcgJiM0Mzs1NjksMTYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCWlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsICZhbXA7d29ya2luZ3NldCwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwogCi0JZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CS8qCiYjNDM7CSAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmUKJiM0MzsJICogZGV0ZXJtaW5lZCBoZXJlOiBzZXR0aW5nIHRoZSBmbGFnIHdvdWxkIHJhY2UgdGhlIGRyYWluIGFuZCBsZWF2ZSBpdAomIzQzOwkgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlCiYjNDM7CSAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby4KJiM0MzsJICovCiYjNDM7CWlmIChscnVfbWFuYWdlZCkKJiM0MzsJCWZvbGlvX2FjdGl2YXRlKGZvbGlvKTsKJiM0MzsJZWxzZQomIzQzOwkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiAJd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7CiAKQEAgLTU5MCw2ICYjNDM7NTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby4KJiM0MzsgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby4KJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCiYjNDM7ICoKJiM0MzsgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHkKJiM0MzsgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5CiYjNDM7ICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHMKJiM0MzsgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkIC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5CiYjNDM7ICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS4KJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpbyB0aGUgZXZpY3Rpb24gaXMgcmVmYXVsdGVkIGludG8uCiYjNDM7ICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLgomIzQzOyAqCiYjNDM7ICogTGlrZSB3b3JraW5nc2V0X3JlZmF1bHQoKSwgYnV0IGZvciBhIGZvbGlvIHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgYWRkZWQKJiM0MzsgKiB0byB0aGUgTFJVLCB3aGljaCBoYXMgdG8gYmUgYWN0aXZhdGVkIGJ5IG1vdmluZyBpdCBiZXR3ZWVuIHRoZSBsaXN0cwomIzQzOyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLgomIzQzOyAqCiYjNDM7ICogVGhlIGFjdGl2YXRpb24gaXMgYmVzdCBlZmZvcnQ6IGEgZm9saW8gc3RpbGwgc2l0dGluZyBpbiBhIHBlci1DUFUgTFJVCiYjNDM7ICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgYWxyZWFkeSBhZGRlZCB0byB0aGUgTFJVLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIHRydWUpOwomIzQzO30KJiM0MzsKIC8qKgogICogd29ya2luZ3NldF9hY3RpdmF0aW9uIC0gbm90ZSBhIHBhZ2UgYWN0aXZhdGlvbgogICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC4KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLmMxYTc4ZWRmYTBiODcgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtOTcyLDYgJiM0Mzs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiB3cml0ZWJhY2sgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMCkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj8KJiM0MzsgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKQomIzQzOyAqCiYjNDM7ICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkcwomIzQzOyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cKJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aAomIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgJiM0MzsgaSkpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbyYjMzk7cyBwYXJrZWQgc2hhZG93KHMpCiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KQomIzQzOyAqCiYjNDM7ICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbyYjMzk7cyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZQomIzQzOyAqIHpzd2FwIHRyZWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvdwomIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkCiYjNDM7ICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nCiYjNDM7ICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LgomIzQzOyAqLwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tJmd0O3N3YXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpOwomIzQzOwkJdm9pZCAqcGFya2VkID0geGFfbG9hZCh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpCiYjNDM7CQkJc2hhZG93ID0gcGFya2VkOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaGFkb3c7CiYjNDM7fQomIzQzOwogLyoKICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsCiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhCkBAIC05ODcsMTIgJiM0MzsxMDYwLDE0IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCQkJIHN3cF9lbnRyeV90IHN3cGVudHJ5KQogewomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwogCXN0cnVjdCB4YXJyYXkgKnRyZWU7CiAJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cGVudHJ5KTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7CiAJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpOwogCXN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTsKJiM0MzsJdm9pZCAqc2hhZG93OwogCWludCByZXQgPSAwOwogCiAJLyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi8KQEAgLTEwMDAsOSAmIzQzOzEwNzUsMTEgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAlpZiAoIXNpKQogCQlyZXR1cm4gLUVFWElTVDsKIAomIzQzOwlzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwZW50cnkpOwomIzQzOwogCW1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0JZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCi0JCQkJICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwomIzQzOwlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAomIzQzOwkJCQkJIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwogCXB1dF9zd2FwX2RldmljZShzaSk7CiAKIAkvKgpAQCAtMTAxNCw2ICYjNDM7MTA5MSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJICovCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAKIAkvKgogCSAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdApAQCAtMTAzNSw3ICYjNDM7MTExMywxMiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlnb3RvIG91dDsKIAl9CiAKLQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQpOwomIzQzOwkvKgomIzQzOwkgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6CiYjNDM7CSAqIHRoZSBzd2FwIHRhYmxlIG1hcmtzIGEgc3dhcHBlZCBvdXQgc2xvdCB3aXRoIHhhX21rX3ZhbHVlKDApIGFuZCBob2xkcwomIzQzOwkgKiB0aGUgc2hhZG93LCB3aGVuIHRoZXJlIGlzIG9uZSwgaW4gdGhhdCBzYW1lIHZhbHVlLgomIzQzOwkgKi8KJiM0MzsJeGFfc3RvcmUodHJlZSwgb2Zmc2V0LCBzaGFkb3csIEdGUF9LRVJORUwpOwogCiAJY291bnRfdm1fZXZlbnQoWlNXUFdCKTsKIAlpZiAoZW50cnktJmd0O29iamNnKQpAQCAtMTA1NSw3ICYjNDM7MTEzOCwxNSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCiBvdXQ6CiAJaWYgKHJldCkgewotCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGFsbG9jYXRpb24gYWJvdmUgb3Zlcndyb3RlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBhbmQgbm90aGluZwomIzQzOwkJICogaGFzIGJlZW4gcGFya2VkIGZvciBpdCB5ZXQsIHNvIHJlc3RvcmUgaXQgYXMgdGhlIGZvbGlvIGxlYXZlcwomIzQzOwkJICogdGhlIHN3YXAgY2FjaGUsIG9yIHRoZSBldmljdGlvbiBpdCByZWNvcmRzIGlzIGxvc3QuCiYjNDM7CQkgKi8KJiM0MzsJCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oc3dwZW50cnkpLCBvZmZzZXQpOwomIzQzOwkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3cGVudHJ5LCBzaGFkb3cpOwomIzQzOwkJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiYjNDM7CQlmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCQlmb2xpb191bmxvY2soZm9saW8pOwogCX0KIAlmb2xpb19wdXQoZm9saW8pOwpAQCAtMTQ5OCw2ICYjNDM7MTU4OSwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJVk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpOwogCVZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGUKJiM0MzsJICogc3dhcCBjYWNoZSwgc28gcmVjbGFpbSB3cml0ZXMgaXQgb3V0IGFnYWluLiBXcml0ZWJhY2sgYWxyZWFkeQomIzQzOwkgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZgomIzQzOwkgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvdwomIzQzOwkgKiBwYXJrZWQgZm9yIHRoZSBidWZmZXIgaW4gcGxhY2UsIHNvIGl0IGlzIHN0aWxsIHJlc3RvcmVkIGludG8KJiM0MzsJICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWlmICghenN3YXBfZW5hYmxlZCkKIAkJZ290byBjaGVja19vbGQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDQKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogNDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIENoZWNrOiBObyBJc3N1ZXMgRGV0ZWN0ZWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgbWVtb3J5IG1hbmFnZW1lbnQgcGVyc3BlY3RpdmUuIFRoaXMgcGF0Y2ggaXMgc29sZWx5IGNvbmNlcm5lZCB3aXRoIHJlZmluaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHpzd2FwLCB0aGUgc3dhcCBjYWNoZSwgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdHMuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucy4KClNvLCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIG1vZGlmaWNhdGlvbnMgdG8gYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWJvdXQgY29ycmVjdGx5IG1hbmFnaW5nIHNoYWRvdyBlbnRyaWVzIHdpdGhpbiB0aGUgd29ya2luZ3NldCBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBObyBuZXcgdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFkZGVkLCB3aGljaCBpcyBhIG1ham9yIHBvc2l0aXZlLgoKSXQmIzM5O3MgYWxsIGFib3V0IGZhbWlsaWFyIHN0cnVjdHVyZXM6IGBzdHJ1Y3QgZm9saW9gLCBgc3dwX2VudHJ5X3RgLCBgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvYCwgYW5kIHNoYWRvdyBlbnRyaWVzIHJlcHJlc2VudGVkIGFzIGB2b2lkICpgIHBvaW50ZXJzIHN0b3JlZCB3aXRoaW4geGFycmF5cy4gVGhpcyBpc24mIzM5O3QgZ3JvdW5kYnJlYWtpbmcsIGJ1dCB0aGUga2V5IGlzIGhvdyB0aGVzZSBzaGFkb3dzIGFyZSBoYW5kbGVkLgoKVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2Ugc2hhZG93IHBvaW50ZXJzLiBXZSYjMzk7cmUgZWl0aGVyIGdldHRpbmcgdGhlbSBmcm9tIGBzd2FwX2NhY2hlX2dldF9zaGFkb3dgIG9yIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLiBUaGVzZSBhcmUganVzdCBwb2ludGVycywgYW5kIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLiBHaXZlbiB0aGF0LCB3aXRoIGEgZ29vZCBLQVNBTiBydW4gb24gdGhlIHdob2xlIHN5c3RlbSwgdGhlIHVzdWFsIGJ1Z3MgLS0gb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGRlcmVmZXJlbmNlcywgZXRjLiAtLSBhcmUgaGFuZGxlZC4KClRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgbm9yIG5ldyBidWZmZXJzIGFsbG9jYXRlZCBhbmQgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IGNvbmNsdWRlIHRoYXQgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IG1lbW9yeSBtYW5hZ2VtZW50IGludGVybmFsLCBmb2N1c2luZyBvbiBwb2ludGVyIG1hbmlwdWxhdGlvbiBhbmQgdGhlIGV4aXN0aW5nIHN3YXAgY2FjaGUvenN3YXAgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2FjaGUgYW5kIHpzd2FwIGxvZ2ljIHRvIHByZXNlcnZlIHdvcmtpbmdzZXQgc2hhZG93IGVudHJpZXMgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgeGFycmF5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzd2FwIGNhY2hlIGFuZCB6c3dhcCBsb2dpYyB0byBwcmVzZXJ2ZSB3b3JraW5nc2V0IHNoYWRvdyBlbnRyaWVzIGR1cmluZyB6c3dhcCB3cml0ZWJhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgYnVmZmVycyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiwgZm9saW8gc3RhdGUgbWFuYWdlbWVudCwgYW5kIHhhcnJheSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1Mzo0MC4zNzc2MzY2ODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA3NzUzNDEzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyXCIsXG4gICAgXCJ6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NcIixcbiAgICBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRcIixcbiAgICBcInN3YXBpbl9zeW5jXCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBjYWNoZSBhbmQgenN3YXAgbG9naWMgdG8gcHJlc2VydmUgd29ya2luZ3NldCBzaGFkb3cgZW50cmllcyBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24sIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCB4YXJyYXkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgenN3YXAgYW5kIHN3YXAgY2FjaGUgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgcmVmYXVsdHMgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgaWYgYSBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIgYW5kIHRvIGxvb2t1cCBhbmQgY2xlYXIgc2hhZG93cywgYW5kIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIGRlbGV0aW9uIHBhdGhzIHRvIHByZXNlcnZlIGFuZCByZXN0b3JlIHNoYWRvd3MuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1Mzo0MC4zNzc2NDA5MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjE3Mzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMyODhhOTEwNTljZGRhNzYwNzc2MjgzMjNiNjkwMjM1YzNjODljNDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTg6NTM6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5AQCAtMzUsNiArMzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XFxuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbHNlXFxuIFxcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xcbkBAIC02OSw2ICs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggMzhiMTE2NTIxMmM5NC4uYzE5MTg4N2MxZmVkYSAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0zOCw2ICszOCw3IEBAIHZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xcbiB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuIC8qIG1tL2ZvbGlvLmMgKi9cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IGM2YTkyNDJkMWI1YmQuLjc3MTE5N2IzZmNjNWMgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC00ODk0LDYgKzQ4OTQsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xcbiBcXHRwdGVfdCAqcHRlcDtcXG4rXFx0dm9pZCAqc2hhZG93O1xcbiBcXG4gXFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtNTAxOCw2ICs1MDE5LDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXHRcXHRnb3RvIG91dF9wYWdlO1xcbiBcXHR9XFxuIFxcbitcXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBLU00gc29tZXRpbWVzIGhhcyB0byBjb3B5IG9uIHJlYWQgZmF1bHRzLCBmb3IgZXhhbXBsZSwgaWZcXG4gXFx0ICogZm9saW8tXFx1MDAzZWluZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlXFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggNTk5NjY1YTNkNmU3Yi4uMWVmNmNjNzY2MDVlNSAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0yMjY2LDYgKzIyNjYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcXG4gXFx0aW50IGVycm9yLCBucl9wYWdlcywgb3JkZXI7XFxuIFxcdHBnb2ZmX3Qgb2Zmc2V0O1xcbitcXHR2b2lkICpzaGFkb3c7XFxuIFxcbiBcXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcXG4gXFx0aW5kZXhfZW50cnkgPSByYWRpeF90b19zd3BfZW50cnkoKmZvbGlvcCk7XFxuQEAgLTIzNzcsNiArMjM3OCwxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHQgKi9cXG4gXFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcXG4gXFxuK1xcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XFxuK1xcdGlmIChzaGFkb3cpXFxuK1xcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcXG4rXFxuIFxcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xcbiBcXHRcXHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xcbiBcXHRcXHRpZiAoZXJyb3IpXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IDkwYTU1MWE4OGRmNjMuLjg2NzljYjYxMjY4ZTUgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5oXFxuKysrIGIvbW0vc3dhcC5oXFxuQEAgLTMxMiw5ICszMTIsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi9cXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xcbmluZGV4IGI3NmViM2Q4NzZmZDcuLmRmOWUwNDUyZjE5YjkgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXFxuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXFxuQEAgLTI0LDYgKzI0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjdGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXAuaFxcXCJcXG5AQCAtMjYzLDEyICsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xcbiBcXHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCdzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcXG4rXFx0ICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLlxcbitcXHQgKi9cXG4rXFx0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XFxuK1xcdGlmIChzaGFkb3dfcGFya2VkKVxcbitcXHRcXHRzaGFkb3cgPSBzaGFkb3dfcGFya2VkO1xcbitcXG4gXFx0c2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7XFxuIFxcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcXG4gXFx0Y2lfZW5kID0gY2lfc3RhcnQgKyBucl9wYWdlcztcXG5AQCAtNDgzLDE5ICs0OTMsMTUgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcbiBcXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cXG4gXFx0bWVtY2cxX3N3YXBpbihmb2xpbyk7XFxuLVxcdGlmIChzaGFkb3cpXFxuLVxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG4gXFxuIFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcXG4gXFxuLVxcdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXFxuLVxcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbiBcXHRyZXR1cm4gZm9saW87XFxuIH1cXG4gXFxuIC8qKlxcbi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG4rICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcXG4gICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cXG5AQCAtNTA3LDEzICs1MTMsMTcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuICAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnlcXG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxcbiAgKlxcbisgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlclxcbisgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWVcXG4rICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXFxuKyAqXFxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLlxcbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxcbiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLlxcbiAgKi9cXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4tXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxcbiB7XFxuIFxcdGludCBvcmRlciwgZXJyO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKnJldDtcXG5AQCAtNjQ0LDE3ICs2NTQsMjcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxcbiBcXHRcXHRwZ29mZl90IGlseCwgYm9vbCByZWFkYWhlYWQpXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0dm9pZCAqc2hhZG93ID0gTlVMTDtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XFxuIFxcdFxcdGlmIChmb2xpbylcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbi1cXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBDYXB0dXJlIHRoZSBzbG90J3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxcbitcXHRcXHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xcbitcXHRcXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XFxuIFxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbiBcXG4gXFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKGN0eCwgZm9saW8pO1xcbiBcXHRpZiAocmVhZGFoZWFkKSB7XFxuIFxcdFxcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xcbkBAIC02ODUsMTcgKzcwNSwyNyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbiB7XFxuIFxcdHN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0dm9pZCAqc2hhZG93ID0gTlVMTDtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XFxuIFxcdFxcdGlmIChmb2xpbylcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbi1cXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXFxuK1xcdFxcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XFxuK1xcdFxcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbiBcXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4gXFxuIFxcdGlmIChJU19FUlIoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gZm9saW87XFxuIFxcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKFxcdTAwMjZjdHgsIGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX3N1Ym1pdChcXHUwMDI2Y3R4KTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggNzNhODFiNGEzZTE2NC4uOTkwNTc1M2I3YTEwYyAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTQ4LDYgKzQ4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmludGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RheC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvenN3YXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZXdhbGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcXHUwMDNlXFxuQEAgLTczMyw3ICs3MzQsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4gXFx0XFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbiBcXG4tXFx0XFx0aWYgKHJlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxcbitcXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcXG4gXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4gXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbiBcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXFxuaW5kZXggN2FjMmI4OGM4MGFlNS4uZTIwM2Q2MzFmNjFiOCAxMDA2NDRcXG4tLS0gYS9tbS93b3JraW5nc2V0LmNcXG4rKysgYi9tbS93b3JraW5nc2V0LmNcXG5AQCAtNTM2LDE2ICs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuIFxcdHJldHVybiByZWZhdWx0X2Rpc3RhbmNlIFxcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxcbi0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxcbi0gKlxcbi0gKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcXG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxcbi0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLlxcbi0gKi9cXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbitzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csXFxuK1xcdFxcdFxcdFxcdCBib29sIGxydV9tYW5hZ2VkKVxcbiB7XFxuIFxcdGJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbkBAIC01NzcsNyArNTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0aWYgKCF3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgZmlsZSwgXFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbitcXHQvKlxcbitcXHQgKiBBbiBMUlUtbWFuYWdlZCBmb2xpbyBtYXkgc2l0IGluIGEgcGVyLUNQVSBiYXRjaCwgd2hpY2ggY2Fubm90IGJlXFxuK1xcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcXG4rXFx0ICogZGlzYWdyZWVpbmcgd2l0aCB0aGUgbGlzdC4gZm9saW9fYWN0aXZhdGUoKSBpcyBzYWZlLCBidXQgbWlzc2VzIHRoZVxcbitcXHQgKiBhY3RpdmF0aW9uIGZvciBzdWNoIGEgZm9saW8uXFxuK1xcdCAqL1xcbitcXHRpZiAobHJ1X21hbmFnZWQpXFxuK1xcdFxcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcXG4gXFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0JBU0UgKyBmaWxlLCBucik7XFxuIFxcbkBAIC01OTAsNiArNTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiB9XFxuIFxcbisvKipcXG4rICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXFxuKyAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxcbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXFxuKyAqXFxuKyAqIENhbGN1bGF0ZXMgYW5kIGV2YWx1YXRlcyB0aGUgcmVmYXVsdCBkaXN0YW5jZSBvZiB0aGUgcHJldmlvdXNseVxcbisgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5XFxuKyAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXFxuKyAqXFxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHNcXG4rICogaXQgd2l0aCBmb2xpb19hZGRfbHJ1KCkgYWZ0ZXJ3YXJkcy5cXG4rICovXFxuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4re1xcbitcXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcXG4rICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS5cXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxcbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXFxuKyAqXFxuKyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXFxuKyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXFxuKyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLlxcbisgKlxcbisgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlVcXG4rICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS5cXG4rICpcXG4rICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuXFxuKyAqL1xcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuK3tcXG4rXFx0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uXFxuICAqIEBmb2xpbzogRm9saW8gdGhhdCBpcyBiZWluZyBhY3RpdmF0ZWQuXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggMzdmMzRlNDA2YzhlMy4uYzFhNzhlZGZhMGI4NyAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC05NzIsNiArOTcyLDc5IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqIHdyaXRlYmFjayBjb2RlXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuK1xcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcXG4rXFxuKy8qKlxcbisgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cXG4rICogQGZvbGlvOiB0aGUgZm9saW8gYmVpbmcgZXhhbWluZWQgKHR5cGljYWxseSBhIHN3YXAgY2FjaGUgZm9saW8gdW5kZXIgcmVjbGFpbSlcXG4rICpcXG4rICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkc1xcbisgKiBhIHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93IChhIHJlYWwgc2hhZG93IG9yIHRoZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XXFxuKyAqIHNlbnRpbmVsKSBpbiB0aGUgenN3YXAgdHJlZSByYXRoZXIgdGhhbiBhIGxpdmUgenN3YXAgZW50cnkuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBAZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyLCBpbiB3aGljaCBjYXNlIHRoZSByZWNsYWltIHBhdGhcXG4rICogbXVzdCBub3QgbWludCBhIGZyZXNoIHdvcmtpbmdzZXQgc2hhZG93IGZvciBpdC5cXG4rICovXFxuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcXG4rXFx0XFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgKyBpKTtcXG4rXFxuK1xcdFxcdGlmICgheGFfaXNfdmFsdWUoeGFfbG9hZChzd2FwX3pzd2FwX3RyZWUoZSksIG9mZnNldCArIGkpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyAtIHJldHJpZXZlIGFuZCBjbGVhciBAZm9saW8ncyBwYXJrZWQgc2hhZG93KHMpXFxuKyAqIEBmb2xpbzogdGhlIHdyaXRlYmFjayBidWZmZXIgZm9saW8gKG9yIHRoZSBzd2FwaW4gZm9saW8gdGhhdCBjb25zdW1lZCBpdClcXG4rICpcXG4rICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbydzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlXFxuKyAqIHpzd2FwIHRyZWUuXFxuKyAqXFxuKyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93XFxuKyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXFxuKyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0b1xcbisgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoKSAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmdcXG4rICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxcbisgKi9cXG4rdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbitcXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcbitcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XFxuK1xcdFxcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XFxuK1xcdFxcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XFxuK1xcdFxcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICsgaSk7XFxuK1xcbitcXHRcXHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQgKyBpKTtcXG4rXFx0XFx0aWYgKHBhcmtlZCAhPSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XKVxcbitcXHRcXHRcXHRzaGFkb3cgPSBwYXJrZWQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaGFkb3c7XFxuK31cXG4rXFxuIC8qXFxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcXG5AQCAtOTg3LDEyICsxMDYwLDE0IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbiB7XFxuK1xcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuIFxcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XFxuIFxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3BlbnRyeSk7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XFxuIFxcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcXG4gXFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xcbitcXHR2b2lkICpzaGFkb3c7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cXG5AQCAtMTAwMCw5ICsxMDc1LDExIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcdGlmICghc2kpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXG4rXFx0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cGVudHJ5KTtcXG4rXFxuIFxcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxuLVxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XFxuK1xcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxuK1xcdFxcdFxcdFxcdFxcdCBOT19JTlRFUkxFQVZFX0lOREVYKTtcXG4gXFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEwMTQsNiArMTA5MSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcdCAqL1xcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdFxcbkBAIC0xMDM1LDcgKzExMTMsMTIgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCk7XFxuK1xcdC8qXFxuK1xcdCAqIEEgc2xvdCB3aXRoIG5vIHNoYWRvdyBhbHJlYWR5IHJlYWRzIGJhY2sgYXMgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVzpcXG4rXFx0ICogdGhlIHN3YXAgdGFibGUgbWFya3MgYSBzd2FwcGVkIG91dCBzbG90IHdpdGggeGFfbWtfdmFsdWUoMCkgYW5kIGhvbGRzXFxuK1xcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXFxuK1xcdCAqL1xcbitcXHR4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7XFxuIFxcbiBcXHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xcbiBcXHRpZiAoZW50cnktXFx1MDAzZW9iamNnKVxcbkBAIC0xMDU1LDcgKzExMzgsMTUgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFxuIG91dDpcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCdzIHNoYWRvdyBhbmQgbm90aGluZ1xcbitcXHRcXHQgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzXFxuK1xcdFxcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7XFxuK1xcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcXG4rXFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuK1xcdFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdH1cXG4gXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5AQCAtMTQ5OCw2ICsxNTg5LDE3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGVcXG4rXFx0ICogc3dhcCBjYWNoZSwgc28gcmVjbGFpbSB3cml0ZXMgaXQgb3V0IGFnYWluLiBXcml0ZWJhY2sgYWxyZWFkeVxcbitcXHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxcbitcXHQgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvd1xcbitcXHQgKiBwYXJrZWQgZm9yIHRoZSBidWZmZXIgaW4gcGxhY2UsIHNvIGl0IGlzIHN0aWxsIHJlc3RvcmVkIGludG9cXG4rXFx0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRpZiAoIXpzd2FwX2VuYWJsZWQpXFxuIFxcdFxcdGdvdG8gY2hlY2tfb2xkO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTM6NDAuODIwNjE2NjM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjc5NTMxNzY0MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUF9ERUZBVUxUX09OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlclwiLFxuICAgIFwienN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkXCIsXG4gICAgXCJzd2FwaW5fc3luY1wiLFxuICAgIFwienN3YXBfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgenN3YXAgYW5kIHN3YXAgY2FjaGUgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgcmVmYXVsdHMgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgaWYgYSBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIgYW5kIHRvIGxvb2t1cCBhbmQgY2xlYXIgc2hhZG93cywgYW5kIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIGRlbGV0aW9uIHBhdGhzIHRvIHByZXNlcnZlIGFuZCByZXN0b3JlIHNoYWRvd3MuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMjg4YTkxMDU5Y2RkYTc2MDc3NjI4MzIzYjY5MDIzNWMzYzg5YzQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTg6NTM6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTEuLmRmYjcxNTMyMzZmNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuQEAgLTM1LDYgKzM1LDggQEAgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xuIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTtcbiBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7XG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuIFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5AQCAtNjksNiArNzEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLmMxOTE4ODdjMWZlZGEgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMzgsNiArMzgsNyBAQCB2b2lkIHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4gdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xuIHZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIC8qIG1tL2ZvbGlvLmMgKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBjNmE5MjQyZDFiNWJkLi43NzExOTdiM2ZjYzVjIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNDg5NCw2ICs0ODk0LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuIFx0cHRlX3QgKnB0ZXA7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTUwMTgsNiArNTAxOSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBvdXRfcGFnZTtcbiBcdH1cbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHQvKlxuIFx0ICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmXG4gXHQgKiBmb2xpby1cdTAwM2VpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZVxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA1OTk2NjVhM2Q2ZTdiLi4xZWY2Y2M3NjYwNWU1IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTIyNjYsNiArMjI2Niw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbiBcdGludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyO1xuIFx0cGdvZmZfdCBvZmZzZXQ7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcbiBcdGluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApO1xuQEAgLTIzNzcsNiArMjM3OCwxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0ICovXG4gXHRhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbitcdGlmIChzaGFkb3cpXG4rXHRcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcbitcbiBcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xuIFx0XHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXHUwMDI2Zm9saW8sIGdmcCwgaW5mbywgaW5kZXgsIHZtYSk7XG4gXHRcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDkwYTU1MWE4OGRmNjMuLjg2NzljYjYxMjY4ZTUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMxMiw5ICszMTIsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IGI3NmViM2Q4NzZmZDcuLmRmOWUwNDUyZjE5YjkgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTI0LDYgKzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FwX29wcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJzd2FwX3RhYmxlLmhcIlxuICNpbmNsdWRlIFwic3dhcC5oXCJcbkBAIC0yNjMsMTIgKzI2NCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xuIFx0Ym9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0LypcbitcdCAqIEEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciBwYXJrZWQgdGhlIHNsb3QncyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlXG4rXHQgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uXG4rXHQgKi9cbitcdHNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvd19wYXJrZWQpXG4rXHRcdHNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7XG4rXG4gXHRzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTtcbiBcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcbiBcdGNpX2VuZCA9IGNpX3N0YXJ0ICsgbnJfcGFnZXM7XG5AQCAtNDgzLDE5ICs0OTMsMTUgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXG4gXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cbiBcdG1lbWNnMV9zd2FwaW4oZm9saW8pO1xuLVx0aWYgKHNoYWRvdylcbi1cdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuIFxuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcbiBcbi1cdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXG4tXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4gLyoqXG4tICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4rICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cbkBAIC01MDcsMTMgKzUxMywxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxuICAqXG4rICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXJcbisgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWVcbisgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cbisgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLlxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXG4gICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4ge1xuIFx0aW50IG9yZGVyLCBlcnI7XG4gXHRzdHJ1Y3QgZm9saW8gKnJldDtcbkBAIC02NDQsMTcgKzY1NCwyNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXG4gXHRcdHBnb2ZmX3QgaWx4LCBib29sIHJlYWRhaGVhZClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4rXHRcdC8qXG4rXHRcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4rXHRcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhjdHgsIGZvbGlvKTtcbiBcdGlmIChyZWFkYWhlYWQpIHtcbiBcdFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XG5AQCAtNjg1LDE3ICs3MDUsMjcgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiB7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbitcdFx0LypcbitcdFx0ICogQ2FwdHVyZSB0aGUgc2xvdCdzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCxcbitcdFx0ICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LlxuK1x0XHQgKi9cbitcdFx0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTtcbitcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA3M2E4MWI0YTNlMTY0Li45OTA1NzUzYjdhMTBjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbkBAIC03MzMsNyArNzM0LDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbitcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIFx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4gXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggN2FjMmI4OGM4MGFlNS4uZTIwM2Q2MzFmNjFiOCAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTM2LDE2ICs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHRyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcbiB9XG4gXG4tLyoqXG4tICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4tICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuLSAqXG4tICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4tICovXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuK3N0YXRpYyB2b2lkIF9fd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyxcbitcdFx0XHRcdCBib29sIGxydV9tYW5hZ2VkKVxuIHtcbiBcdGJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbkBAIC01NzcsNyArNTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0LypcbitcdCAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmVcbitcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcbitcdCAqIGRpc2FncmVlaW5nIHdpdGggdGhlIGxpc3QuIGZvbGlvX2FjdGl2YXRlKCkgaXMgc2FmZSwgYnV0IG1pc3NlcyB0aGVcbitcdCAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby5cbitcdCAqL1xuK1x0aWYgKGxydV9tYW5hZ2VkKVxuK1x0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuIFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgZmlsZSwgbnIpO1xuIFxuQEAgLTU5MCw2ICs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbisvKipcbisgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cbisgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4rICpcbisgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcbisgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5XG4rICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi5cbisgKlxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHNcbisgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLlxuKyAqL1xuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbit7XG4rXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG4rfVxuK1xuKy8qKlxuKyAqIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseVxuKyAqIGV2aWN0ZWQgZm9saW8gdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBMUlUuXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxuKyAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby5cbisgKlxuKyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG4rICogdG8gdGhlIExSVSwgd2hpY2ggaGFzIHRvIGJlIGFjdGl2YXRlZCBieSBtb3ZpbmcgaXQgYmV0d2VlbiB0aGUgbGlzdHNcbisgKiByYXRoZXIgdGhhbiBieSBzZXR0aW5nIFBHX2FjdGl2ZS5cbisgKlxuKyAqIFRoZSBhY3RpdmF0aW9uIGlzIGJlc3QgZWZmb3J0OiBhIGZvbGlvIHN0aWxsIHNpdHRpbmcgaW4gYSBwZXItQ1BVIExSVVxuKyAqIGJhdGNoIGNhbm5vdCBiZSBtb3ZlZCB5ZXQgYW5kIGlzIGxlZnQgaW5hY3RpdmUuXG4rICpcbisgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIGFscmVhZHkgYWRkZWQgdG8gdGhlIExSVS5cbisgKi9cbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4re1xuK1x0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XG4rfVxuK1xuIC8qKlxuICAqIHdvcmtpbmdzZXRfYWN0aXZhdGlvbiAtIG5vdGUgYSBwYWdlIGFjdGl2YXRpb25cbiAgKiBAZm9saW86IEZvbGlvIHRoYXQgaXMgYmVpbmcgYWN0aXZhdGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi5jMWE3OGVkZmEwYjg3IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk3Miw2ICs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcbitcbisvKipcbisgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cbisgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKVxuKyAqXG4rICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkc1xuKyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1dcbisgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aFxuKyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4rICovXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXHUwMDNlc3dhcDtcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgKyBpKTtcbitcbitcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICsgaSkpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKipcbisgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJ3MgcGFya2VkIHNoYWRvdyhzKVxuKyAqIEBmb2xpbzogdGhlIHdyaXRlYmFjayBidWZmZXIgZm9saW8gKG9yIHRoZSBzd2FwaW4gZm9saW8gdGhhdCBjb25zdW1lZCBpdClcbisgKlxuKyAqIFJlbW92ZSBhbnkgcGFya2VkIHdyaXRlYmFjayBzaGFkb3dzIGZvciBAZm9saW8ncyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZVxuKyAqIHpzd2FwIHRyZWUuXG4rICpcbisgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvd1xuKyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXG4rICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvXG4rICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nXG4rICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuKyAqL1xuK3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4rXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XG4rXHRcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XG4rXHRcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXG4rXHRcdGlmICgheGFfaXNfdmFsdWUocGFya2VkKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXHRcdGlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVylcbitcdFx0XHRzaGFkb3cgPSBwYXJrZWQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gc2hhZG93O1xuK31cbitcbiAvKlxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXG4gICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYVxuQEAgLTk4NywxMiArMTA2MCwxNCBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiB7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuIFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbiBcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3BlbnRyeSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiBcdHN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTtcbitcdHZvaWQgKnNoYWRvdztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbkBAIC0xMDAwLDkgKzEwNzUsMTEgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdGlmICghc2kpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuK1x0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cGVudHJ5KTtcbitcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4tXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbi1cdFx0XHRcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcbitcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4rXHRcdFx0XHRcdCBOT19JTlRFUkxFQVZFX0lOREVYKTtcbiBcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHQvKlxuQEAgLTEwMTQsNiArMTA5MSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHQgKi9cbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcbiBcdC8qXG4gXHQgKiBmb2xpbyBpcyBsb2NrZWQsIGFuZCB0aGUgc3dhcGNhY2hlIGlzIG5vdyBzZWN1cmVkIGFnYWluc3RcbkBAIC0xMDM1LDcgKzExMTMsMTIgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuK1x0LypcbitcdCAqIEEgc2xvdCB3aXRoIG5vIHNoYWRvdyBhbHJlYWR5IHJlYWRzIGJhY2sgYXMgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVzpcbitcdCAqIHRoZSBzd2FwIHRhYmxlIG1hcmtzIGEgc3dhcHBlZCBvdXQgc2xvdCB3aXRoIHhhX21rX3ZhbHVlKDApIGFuZCBob2xkc1xuK1x0ICogdGhlIHNoYWRvdywgd2hlbiB0aGVyZSBpcyBvbmUsIGluIHRoYXQgc2FtZSB2YWx1ZS5cbitcdCAqL1xuK1x0eGFfc3RvcmUodHJlZSwgb2Zmc2V0LCBzaGFkb3csIEdGUF9LRVJORUwpO1xuIFxuIFx0Y291bnRfdm1fZXZlbnQoWlNXUFdCKTtcbiBcdGlmIChlbnRyeS1cdTAwM2VvYmpjZylcbkBAIC0xMDU1LDcgKzExMzgsMTUgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcbiBvdXQ6XG4gXHRpZiAocmV0KSB7XG4tXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbitcdFx0LypcbitcdFx0ICogVGhlIGFsbG9jYXRpb24gYWJvdmUgb3Zlcndyb3RlIHRoZSBzbG90J3Mgc2hhZG93IGFuZCBub3RoaW5nXG4rXHRcdCAqIGhhcyBiZWVuIHBhcmtlZCBmb3IgaXQgeWV0LCBzbyByZXN0b3JlIGl0IGFzIHRoZSBmb2xpbyBsZWF2ZXNcbitcdFx0ICogdGhlIHN3YXAgY2FjaGUsIG9yIHRoZSBldmljdGlvbiBpdCByZWNvcmRzIGlzIGxvc3QuXG4rXHRcdCAqL1xuK1x0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKHN3cGVudHJ5KSwgb2Zmc2V0KTtcbitcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3cGVudHJ5LCBzaGFkb3cpO1xuK1x0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbitcdFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdH1cbiBcdGZvbGlvX3B1dChmb2xpbyk7XG5AQCAtMTQ5OCw2ICsxNTg5LDE3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTtcbiBcbitcdC8qXG4rXHQgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGVcbitcdCAqIHN3YXAgY2FjaGUsIHNvIHJlY2xhaW0gd3JpdGVzIGl0IG91dCBhZ2Fpbi4gV3JpdGViYWNrIGFscmVhZHlcbitcdCAqIGRlY2lkZWQgdGhpcyBkYXRhIGJlbG9uZ3Mgb24gZGlzaywgc28gc2VuZCBpdCB0aGVyZSBpbnN0ZWFkIG9mXG4rXHQgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvd1xuK1x0ICogcGFya2VkIGZvciB0aGUgYnVmZmVyIGluIHBsYWNlLCBzbyBpdCBpcyBzdGlsbCByZXN0b3JlZCBpbnRvXG4rXHQgKiB0aGUgc2xvdCBvbmNlIHRoZSBmb2xpbyBsZWF2ZXMgdGhlIHN3YXAgY2FjaGUuXG4rXHQgKi9cbitcdGlmICh6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0aWYgKCF6c3dhcF9lbmFibGVkKVxuIFx0XHRnb3RvIGNoZWNrX29sZDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjUzOjQwLjgyMDYxNzg2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MzA1MjA2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnN3YXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgaXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBjcml0aWNhbCBhcmVhczogenN3YXAsIHRoZSBzd2FwIGNhY2hlLCBhbmQgaG93IHRoZSB3b3JraW5nc2V0IHJlZmF1bHRzLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEdpdmVuIHRoZSBzY29wZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVyZSdzIHNvbWUgcG90ZW50aWFsIGZvciBmdW5jdGlvbmFsIGltcGFjdCwgYW5kIGhvbmVzdGx5LCBmdXp6aW5nIGlzIGdvaW5nIHRvIGJlIGVzc2VudGlhbCBoZXJlLlxuXG5JIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGFyZWFzLiBGcm9tIHRoZSBkaWZmLCBJIHNlZSB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9hbGxvY2AsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYHN3YXBpbl9zeW5jYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBhbmQgYHpzd2FwX3N0b3JlYC5cblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBuZXcgc3R1ZmYsIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AuIEkgY2FuIHNlZSBmcm9tIHRoZSBmaWxlIHBhdGhzIHRoYXQgdGhlc2UgYXJlIGJvdGggZGVmaW5lZCBpbiBgbW0venN3YXAuY2AsIGFuZCB0aGV5J3JlIGJvdGggZ2xvYmFsLiBOZXh0LCBsZXQncyBsb29rIGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBgc3dhcGluX3N5bmNgLCBhbHNvIGluIHRoYXQgZmlsZS4gVGhlbiBgbW0vd29ya2luZ3NldC5jYCBpcyBnb2luZyB0byBjb250YWluIGB3b3JraW5nc2V0X3JlZmF1bHRgIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYC4gRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGB6c3dhcF9zdG9yZWAgaW4gYG1tL3pzd2FwLmNgLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCBgZG9fc3dhcF9wYWdlYCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AgYXJlIGhvdCBwYXRocywgc28gaXQgbWlnaHQgYmUgd2lzZSB0byBiZSBleHRyYSBjYXJlZnVsIHRoZXJlIGR1cmluZyB0ZXN0aW5nLCBhbmQgbWF5YmUgYXZvaWQgdGhlbSBhcyBpbml0aWFsIGZ1enppbmcgdGFyZ2V0cy5cblxuT2J2aW91c2x5LCBgQ09ORklHX1pTV0FQYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoaXMgdG8gZXZlbiBjb21waWxlLCBhbmQgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfU1dBUGAgaXMgYWxzbyBlbmFibGVkLlxuXG5JJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHVzZSBzb21lIHRhcmdldGVkIHRvb2xzIHRvIHZlcmlmeSB0aGlzIG9uZSwgc28gSSB3aWxsIHByZXBhcmUgdGhvc2UgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjUzOjUwLjY1MTE0MTI4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjczODc2NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTM3PWJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mzg6Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zOS12b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9Njk9c3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC03My1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6NzQ6c3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNzUte1xcbi0tXFxubW0vdm1zY2FuLmM9NjgzPXN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczNy1cXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzo3Mzg6XFx0XFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcXG5tbS92bXNjYW4uYy03MzktXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4tLVxcbm1tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtOTc4LS8qKlxcbm1tL3pzd2FwLmM6OTc5OiAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyP1xcbm1tL3pzd2FwLmMtOTgwLSAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXFxuLS1cXG5tbS96c3dhcC5jLTk4OC0gKi9cXG5tbS96c3dhcC5jOjk4OTpib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTk5MC17XFxuLS1cXG5tbS96c3dhcC5jPTE1Nzk9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNTk5LVxcdCAqL1xcbm1tL3pzd2FwLmM6MTYwMDpcXHRpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXFxubW0venN3YXAuYy0xNjAxLVxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTM6NTIuMzI1MDIyMjgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY1MDQ0Mjc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlOiBac3dhcCBDaGVjayoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFyb3VuZCBgQ09ORklHX1pTV0FQYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIFpzd2FwIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0sIHBhcnRpY3VsYXJseSBpdHMgcmVzcG9uc2l2ZW5lc3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBrbm93IGhvdyB6c3dhcCBpcyBpbXBhY3RpbmcgdGhlIG92ZXJhbGwgSS9PIHByb2ZpbGUuIE15IGltbWVkaWF0ZSBtZW50YWwgY2hlY2tsaXN0IGluY2x1ZGVzOiBpcyBpdCBzZXQgdG8gJ3knLCAnbScsIG9yIHVuZGVmaW5lZD8gQSBzaW1wbGUgYGdyZXBgIG9yIGxvb2tpbmcgYXQgdGhlIGFwcHJvcHJpYXRlIGAuY29uZmlnYCBmaWxlIHdpbGwgcXVpY2tseSB0ZWxsIG1lLiBEZXBlbmRpbmcgb24gdGhlIHNldHRpbmcsIEkga25vdyBteSBuZXh0IHN0ZXBzIHdpbGwgY2hhbmdlLiBJZiBpdCdzIGVuYWJsZWQsIEknbGwgd2FudCB0byBjaGVjayB0aGUgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzIGxpa2UgYHpzd2FwLm1heF9wb29sX3BlcmNlbnRgLCBhbmQgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgYXMgdGhvc2UgaGF2ZSBiaWcgZWZmZWN0cy4gSWYgaXQncyBkaXNhYmxlZCwgSSdsbCBjb25zaWRlciB3aHkg4oCTIGlzIGl0IGEgZGVsaWJlcmF0ZSBjaG9pY2UgdG8gZmF2b3Igc3dhcCB0byBkaXNrLCBvciBtYXliZSB0aGVyZSBhcmUgcmVzb3VyY2UgbGltaXRhdGlvbnMgdGhhdCBwcmVjbHVkZSBac3dhcCdzIHVzYWdlPyBJJ2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIHdvcmtsb2FkIGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBoYXJkd2FyZSBpbiBvcmRlciB0byBldmFsdWF0ZSBpdHMgYXBwcm9wcmlhdGVuZXNzLiBJIG5lZWQgdG8gaGF2ZSBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB6c3dhcCBpbiBvcmRlciB0byBlbnN1cmUgdGhlIGJlc3QgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI2MywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjUzOjU5Ljk3NTQ2NzQxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ3ODc3MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDowMS43MjMzNTU0MTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDE5NTcxOTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIFpTV0FQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiWlNXQVAsXCIgcmlnaHQ/IEdvdHRhIHNlZSBob3cgdGhhdCdzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBsaXZlLCBzbyBpdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIHRoZSBcIlpTV0FQXCIgb3B0aW9uJ3MgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHBvdGVudGlhbGx5IGFueSBhc3NvY2lhdGVkIHN1Yi1vcHRpb25zIG9yIGhlbHAgdGV4dC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc3RhdGU6IGlzIGl0IGVuYWJsZWQgYnkgZGVmYXVsdCwgZG9lcyBpdCByZXF1aXJlIG90aGVyIGZlYXR1cmVzIHRvIGJlIGVuYWJsZWQsIGFuZCBhcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zPyBVbmRlcnN0YW5kaW5nIHRoZSBgS2NvbmZpZ2AgZW50cnkgaXMgY3J1Y2lhbCBiZWZvcmUgSSBzdGFydCBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyIHdpdGggdGhlIGN1cnJlbnQga2VybmVsJ3MgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTA2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTQ6MTEuMTQyOTI5NzU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMjpcXHRjb25maWcgWlNXQVBcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFNXQVBcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDI2OlxcdFxcdHNlbGVjdCBaU01BTExPQ1xcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xcbiAgMjk6XFx0XFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cXG4gIDMwOlxcdFxcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cXG4gIDMxOlxcdFxcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXFxuICAzMjpcXHRcXHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcXG4gIDMzOlxcdFxcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxuICAzNjpcXHRcXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxcbiAgNDA6XFx0XFx0ICBhdCBib290LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNhYmxlZC5cXG4gIDQxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDoxMS4xNDMwMjMzMTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzcyNTY3Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFpTV0FQIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBgWlNXQVBgIHRoaW5nLiBJdCBjbGVhcmx5IHJlbGllcyBvbiBgU1dBUGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaW5jbHVkZSBib3RoIGBaU1dBUGAgYW5kIGBTV0FQYCBpbiBgRW5hYmxlQ29uZmlnc2AuIEFuZCwgdGhpbmtpbmcgYWJvdXQgYSBnb29kIHVzZXIgZXhwZXJpZW5jZSwgSSdsbCBsaWtlbHkgYWRkIGBaU1dBUF9ERUZBVUxUX09OYCBhcyB3ZWxsLiBFbmFibGluZyBpdCBieSBkZWZhdWx0IGp1c3QgZmVlbHMgcmlnaHQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBwYXkgYXR0ZW50aW9uIHRvLiBGcm9tIG15IHByZXZpb3VzIGV4cGVyaWVuY2UgYW5kIGtub3dsZWRnZSwgSSd2ZSBpZGVudGlmaWVkIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBjbG9zZWx5OiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYC5cblxuSeKAmWxsIHN0YXJ0IHdpdGggYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCdzIGFjY2Vzc2libGUgYW5kIGV4cG9ydGVkIGFzIGl0IGlzIGNydWNpYWwgaW4gdGhlIG92ZXJhbGwgcHJvY2Vzcy4gVGltZSB0byBsb29rIGludG8gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGNvbmZpcm0gaXRzIHZpc2liaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjE1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTQ6MjAuNTE1NTk0NTEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEzNzM5ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmg9MzE0PXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oOjMxNTpzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbm1tL3N3YXAuaC0zMTYtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz00MTk9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTAzLS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo1MDQ6ICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtNTA1LSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTIzLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzo1MjQ6c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbm1tL3N3YXBfc3RhdGUuYy01MjUtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz02NTI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTY2Ny1cXHRcXHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xcbm1tL3N3YXBfc3RhdGUuYzo2Njg6XFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy02NjktXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NzAzPXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNzE4LVxcdFxcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XFxubW0vc3dhcF9zdGF0ZS5jOjcxOTpcXHRcXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcXG5tbS9zd2FwX3N0YXRlLmMtNzIwLVxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbi0tXFxubW0venN3YXAuYz0xMDYwPXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwODAtXFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG5tbS96c3dhcC5jOjEwODE6XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG5tbS96c3dhcC5jLTEwODItXFx0XFx0XFx0XFx0XFx0IE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDoyMi4wMjkzNDA4MDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzczMjg1MzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBDYWNoZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBwYWdlcyBnZXQgaW50byB0aGUgc3dhcCBjYWNoZSBhbmQgd2hlcmUgdGhlIGFsbG9jYXRpb24gaGFwcGVucy4gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgdGhlIGNhbGwgc2l0ZXMgYXJlIGEgbWl4IG9mIHRoaW5ncy4gSXQncyBjYWxsZWQgZnJvbSBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBzdGFuZGFyZCBzd2FwLWluIHBhdGguIEknbSBhbHNvIHNlZWluZyBpdCdzIHVzZWQgYnkgYHN3YXBpbl9zeW5jYCwgd2hpY2ggSSBrbm93IGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24gcG9pbnQgZm9yIHN3YXAgb3BlcmF0aW9ucyBhY3Jvc3MgdGhlIHN5c3RlbS4gQW5kIHRoZXJlJ3MgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIHN1Z2dlc3RpbmcgdGhpcyBmdW5jdGlvbiBoYXMgcmVsZXZhbmNlIGluIGNvbXByZXNzZWQgc3dhcCBhcyB3ZWxsLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIHN5c3RlbS13aWRlIGltcGxpY2F0aW9ucyBvZiBgc3dhcGluX3N5bmNgLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuIEkgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gZGlnIGludG8gdGhlIHdvcmtpbmdzZXQgbWFuYWdlbWVudC4gVGhhdCBpcywgSSBzaG91bGQgY2hlY2sgaG93IGB3b3JraW5nc2V0X3JlZmF1bHRgIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCBpbnRlcmFjdCB3aXRoIHRoaXMgYWxsb2NhdGlvbiBwYXRoLiBUaGVzZSBhcmUgYWxzbyBnbG9iYWwgZnVuY3Rpb25zLCB3aGljaCBtZWFucyB0aGVpciBiZWhhdmlvciBpcyByZWxldmFudCB0byB0aGUgc3lzdGVtJ3Mgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN3YXBwaW5nIGltcGFjdHMgdGhlIHdvcmtpbmdzZXQgYW5kIGhvdyB0aGUgTFJVIGlzIG1hbmFnZWQgaW4gcmVsYXRpb24gdG8gdGhpcy4gSSdsbCBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NDIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTQ6MjkuNzYyMTk3NzM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5ODU1NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3Q9MTQyNj1UaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTE2MzctXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0OjE2Mzg6XFx0ICB3b3JraW5nc2V0X3JlZmF1bHRfYW5vblxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xNjM5LVxcdFxcdE51bWJlciBvZiByZWZhdWx0cyBvZiBwcmV2aW91c2x5IGV2aWN0ZWQgYW5vbnltb3VzIHBhZ2VzLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xNjQwLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoxNjQxOlxcdCAgd29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTY0Mi1cXHRcXHROdW1iZXIgb2YgcmVmYXVsdHMgb2YgcHJldmlvdXNseSBldmljdGVkIGZpbGUgcGFnZXMuXFxuLS1cXG5tbS9maWxlbWFwLmM9OTU1PWludCBmaWxlbWFwX2FkZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy05ODYtXFx0XFx0aWYgKCEoZ2ZwIFxcdTAwMjYgX19HRlBfV1JJVEUpIFxcdTAwMjZcXHUwMDI2IHNoYWRvdylcXG5tbS9maWxlbWFwLmM6OTg3OlxcdFxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG5tbS9maWxlbWFwLmMtOTg4LVxcdFxcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbi0tXFxubW0vaW50ZXJuYWwuaD0zOD12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaW50ZXJuYWwuaC0zOS1cXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xcbm1tL2ludGVybmFsLmg6NDA6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcXG5tbS9pbnRlcm5hbC5oOjQxOnZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XFxubW0vaW50ZXJuYWwuaC00Mi12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yMTkzPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTIyMDItXFx0XFxcIndyaXRlYmFja1xcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjIyMDM6XFx0XFxcIndvcmtpbmdzZXRfcmVmYXVsdF9hbm9uXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MjIwNDpcXHRcXFwid29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjA1LSNpZmRlZiBDT05GSUdfU1dBUFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjI5LVxcdC8qIFRoZSBtZW1vcnkgZXZlbnRzICovXFxubW0vbWVtY29udHJvbC5jOjE2MzA6XFx0eyBcXFwid29ya2luZ3NldF9yZWZhdWx0X2Fub25cXFwiLFxcdFdPUktJTkdTRVRfUkVGQVVMVF9BTk9OXFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTYzMTpcXHR7IFxcXCJ3b3JraW5nc2V0X3JlZmF1bHRfZmlsZVxcXCIsXFx0V09SS0lOR1NFVF9SRUZBVUxUX0ZJTEVcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYy0xNjMyLVxcdHsgXFxcIndvcmtpbmdzZXRfYWN0aXZhdGVfYW5vblxcXCIsXFx0V09SS0lOR1NFVF9BQ1RJVkFURV9BTk9OXFx0fSxcXG4tLVxcbm1tL21lbW9yeS5jPTQ4ODE9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MDIzLVxcdGlmIChzaGFkb3cpXFxubW0vbWVtb3J5LmM6NTAyNDpcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XFxubW0vbWVtb3J5LmMtNTAyNS1cXG4tLVxcbm1tL3NobWVtLmM9MjI1ND1zdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yMzgyLVxcdGlmIChzaGFkb3cpXFxubW0vc2htZW0uYzoyMzgzOlxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcXG5tbS9zaG1lbS5jLTIzODQtXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NjUyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy02NzQtXFx0aWYgKHNoYWRvdylcXG5tbS9zd2FwX3N0YXRlLmM6Njc1OlxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG5tbS9zd2FwX3N0YXRlLmMtNjc2LVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTcwMz1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcyNS1cXHRpZiAoc2hhZG93KVxcbm1tL3N3YXBfc3RhdGUuYzo3MjY6XFx0XFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcbm1tL3N3YXBfc3RhdGUuYy03MjctXFxuLS1cXG5tbS92bXN0YXQuYz0xMTk5PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTI0My1cXHRbSShXT1JLSU5HU0VUX05PREVTKV1cXHRcXHRcXHQ9IFxcXCJ3b3JraW5nc2V0X25vZGVzXFxcIixcXG5tbS92bXN0YXQuYzoxMjQ0OlxcdFtJKFdPUktJTkdTRVRfUkVGQVVMVF9BTk9OKV1cXHRcXHQ9IFxcXCJ3b3JraW5nc2V0X3JlZmF1bHRfYW5vblxcXCIsXFxubW0vdm1zdGF0LmM6MTI0NTpcXHRbSShXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSldXFx0XFx0PSBcXFwid29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcXFwiLFxcbm1tL3Ztc3RhdC5jLTEyNDYtXFx0W0koV09SS0lOR1NFVF9BQ1RJVkFURV9BTk9OKV1cXHRcXHQ9IFxcXCJ3b3JraW5nc2V0X2FjdGl2YXRlX2Fub25cXFwiLFxcbi0tXFxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNTM4LVxcbm1tL3dvcmtpbmdzZXQuYzo1Mzk6c3RhdGljIHZvaWQgX193b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93LFxcbm1tL3dvcmtpbmdzZXQuYy01NDAtXFx0XFx0XFx0XFx0IGJvb2wgbHJ1X21hbmFnZWQpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNTk0LS8qKlxcbm1tL3dvcmtpbmdzZXQuYzo1OTU6ICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXFxubW0vd29ya2luZ3NldC5jLTU5Ni0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy02MDUtICovXFxubW0vd29ya2luZ3NldC5jOjYwNjp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxubW0vd29ya2luZ3NldC5jLTYwNy17XFxubW0vd29ya2luZ3NldC5jOjYwODpcXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XFxubW0vd29ya2luZ3NldC5jLTYwOS19XFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNjExLS8qKlxcbm1tL3dvcmtpbmdzZXQuYzo2MTI6ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkIC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5XFxubW0vd29ya2luZ3NldC5jLTYxMy0gKiBldmljdGVkIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgTFJVLlxcbi0tXFxubW0vd29ya2luZ3NldC5jLTYxNi0gKlxcbm1tL3dvcmtpbmdzZXQuYzo2MTc6ICogTGlrZSB3b3JraW5nc2V0X3JlZmF1bHQoKSwgYnV0IGZvciBhIGZvbGlvIHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgYWRkZWRcXG5tbS93b3JraW5nc2V0LmMtNjE4LSAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNjI1LSAqL1xcbm1tL3dvcmtpbmdzZXQuYzo2MjY6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbm1tL3dvcmtpbmdzZXQuYy02Mjcte1xcbm1tL3dvcmtpbmdzZXQuYzo2Mjg6XFx0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XFxubW0vd29ya2luZ3NldC5jLTYyOS19XFxuLS1cXG5tbS96c3dhcC5jPTk4OT1ib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTAxOC0gKiBzaGFkb3cgaW50byB0aGUgc3dhcCBzbG90IChidWZmZXIgZHJvcHBlZCkgb3IgZmVlZHMgaXQgdG9cXG5tbS96c3dhcC5jOjEwMTk6ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nXFxubW0venN3YXAuYy0xMDIwLSAqIGhlcmUgZW5zdXJlcyB0aGUgdHdvIHBhdGhzIG5ldmVyIGRvdWJsZS1jb3VudC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTQ6MzEuMzIyMDU5ODI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjQwMzAwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgbm90aWNpbmcgYSBwYXR0ZXJuLiBTZXZlcmFsIGZ1bmN0aW9ucyDigJMgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgLCBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYHN3YXBpbl9zeW5jYCwgYW5kIGB6c3dhcF9zdG9yZWAg4oCTIGFyZSBhbGwgZ2xvYmFsIGluIHNjb3BlLiBUaGlzIHJhaXNlcyBhIGZldyBpbW1lZGlhdGUgcXVlc3Rpb25zIGluIG15IG1pbmQsIG1vc3RseSBhYm91dCB0aGVpciBpbnRlbmRlZCB1c2FnZSBhbmQgd2hldGhlciB0aGV5IHJlcHJlc2VudCBhIGdvb2QgZW5jYXBzdWxhdGlvbiBvZiBmdW5jdGlvbi4gTXkgbmV4dCB0aG91Z2h0IGlzLCBsZXQncyB6ZXJvIGluIG9uIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGtleSBmdW5jdGlvbiBpcyBiZWluZyBleHBvcnRlZCwgd2hpY2ggY291bGQgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU0OjM2LjU4NjA5MTcwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MzY4ODU2NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDozOC42NTk3ODcyOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0MjY5NjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIFNjb3BlIGFuZCBTeW5jaHJvbml6YXRpb24qKlxuXG5IbW0sIGludGVyZXN0aW5nLiBUaGUgY29kZSBJJ20gbG9va2luZyBhdCBpc24ndCAqZXhwbGljaXRseSogZXhwb3J0ZWQsIGJ1dCBpdCdzIGNsZWFybHkgYWNjZXNzaWJsZSBnbG9iYWxseS4gVGhhdCdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGNvbmNlcm4sIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBJbXBsaWNpdCBnbG9iYWwgdmFyaWFibGVzIGNhbiBiZSB0cmlja3kgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgZGVidWdnaW5nLCBlc3BlY2lhbGx5IGluIGEgbGFyZ2UgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIHN0cnVjdHVyZWQgdGhpcyB3YXkuIElzIHRoaXMgYnkgZGVzaWduIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBvciBhIGxlZ2FjeSBhcnRpZmFjdD8gSXMgaXQgYSBwb3RlbnRpYWwgc291cmNlIG9mIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzP1xuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc3dhcGluX3N5bmNgIGZ1bmN0aW9uLiBJdCBzZWVtcyBjcml0aWNhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IGZ1bmN0aW9uLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc3luY2hyb25pemF0aW9uIG9yIGRhdGEgdHJhbnNmZXIgbG9naWMgcmVsYXRlZCB0byB0aGlzIGdsb2JhbCB2YXJpYWJsZSBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBjb2hlcmVuY2UgbW9kZWwgaGVyZS4gVW5kZXJzdGFuZGluZyB0aGlzIHJvdXRpbmUgd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgZGVzaWduIGNob2ljZXMgc3Vycm91bmRpbmcgdGhlIHZhcmlhYmxlJ3Mgc2NvcGUuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgY29udGV4dCBzd2l0Y2hlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzODMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDo0NS44MDI0ODYxMzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjMyNzI0MDIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnN3YXBpbl9zeW5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDo0Ny44NjU3NjQ1MzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5OTgwNjI0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGB6c3dhcF9zdG9yZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIG1lbnRpb24gb2YgYHpzd2FwX3N0b3JlYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGxpa2VseSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGV4YW1pbmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlLCBob3cgaXQncyBiZWhhdmluZywgYW5kIHdoYXQgc3BlY2lmaWMgYXNwZWN0cyByZXF1aXJlIHRoZSBtb3N0IHNjcnV0aW55LCBnaXZlbiB0aGUgY3VycmVudCBpc3N1ZSBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU1OjQ0Ljg2MzgyODgwM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NTQ5MTEwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qenN3YXBfc3RvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU1OjQ3LjA0OTMyNTE0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAxMzk4NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgd29ya2luZ3NldF9yZWZhdWx0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY2hlY2sgYHdvcmtpbmdzZXRfcmVmYXVsdGAuXCIgSXQncyBhIGtleSBtZXRyaWMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBhbnkgcG90ZW50aWFsIGFub21hbGllcy4gTXkgbWluZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSdtIHRoaW5raW5nIGFib3V0IHdoYXQgY291bGQgYmUgY2F1c2luZyBmbHVjdHVhdGlvbnMsIHdoYXQgdGhlIHR5cGljYWwgYmFzZWxpbmVzIGxvb2sgbGlrZSBpbiB0aGlzIGVudmlyb25tZW50LCBhbmQgYW55IHBvdGVudGlhbCBjb3JyZWxhdGlvbnMgd2l0aCBvdGhlciBwZXJmb3JtYW5jZSBpbmRpY2F0b3JzIEknbSB0cmFja2luZy4gSXMgaXQgaGlnaGVyIHRoYW4gZXhwZWN0ZWQ/IExvd2VyPyBBbmQgY3JpdGljYWxseSwgd2hhdCBhcmUgdGhlIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGVmZmVjdHMsIG9yIHRoZSBsaWtlbHkgcm9vdCBjYXVzZXMgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyBpdD8gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MzAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NTo1Mi4zNTA3MjU5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MDkxMjMxNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qd29ya2luZ3NldF9yZWZhdWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NTo1NC41MzE2NDUxMTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg2MDc3MzA4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYC4gSXQncyBhIGtleSBmdW5jdGlvbiwgb2J2aW91c2x5LCBidXQgd2hhdCBzcGVjaWZpY2FsbHkgYW0gSSB0cnlpbmcgdG8gcGFyc2UgaGVyZT8gSXQncyBsaWtlbHkgYSBib29sZWFuIGZ1bmN0aW9uIG9yIG1hY3JvLCBhbmQgdGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0cyBwdXJwb3NlIGlzIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIGZvbGlvLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHpzd2FwYCwgcmVwcmVzZW50cyBhIHdyaXRlYmFjayBidWZmZXIuXG5cblNvLCB0aGUgaW1wbGljaXQgcXVlc3Rpb24gaW4gbXkgaGVhZCBpczogKmlzIHRoaXMgZm9saW8gY3VycmVudGx5IHVuZGVyZ29pbmcgYSB3cml0ZWJhY2sgb3BlcmF0aW9uLCBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSB0cmVhdGVkIGFzIHN1Y2ggd2l0aGluIHpzd2FwJ3MgbWFuYWdlbWVudCByb3V0aW5lcz8qIFRoaXMgZGlzdGluY3Rpb24gaXMgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcy4gSWYgaXQncyBhIHdyaXRlYmFjayBidWZmZXIsIGNlcnRhaW4gb3B0aW1pemF0aW9ucyBhbmQgY29uc2lkZXJhdGlvbnMgcHJvYmFibHkgYXBwbHksIHZlcnN1cyBhIGZvbGlvIHNpbXBseSBoZWxkIHdpdGhpbiBhIHpzd2FwIGNhY2hlIHdhaXRpbmcgdG8gYmUgcGFnZWQgb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHdyaXRlYmFjayBvcGVyYXRpb25zIGNhbiBiZSBhc3luY2hyb25vdXMgYW5kIHRoZWlyIHN0YXR1cyBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoaXMgcmV0dXJucyB0cnVlLCB3aGF0IHRoYXQgaW1wbGllcyBhYm91dCB0aGUgZm9saW8ncyBzdGF0ZSwgYW5kIGhvdyBgenN3YXBgIGxldmVyYWdlcyB0aGlzIGluZm9ybWF0aW9uLiBGcm9tIGhlcmUsIEkgY2FuIGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uLCBsb29rIGF0IGl0cyBjYWxsZXJzLCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgdXNlcyB0aGlzIGNydWNpYWwgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTc6MDMuMTM5Mzc5Mjg2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk4Nzk2MjA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NzowNS4zMzgyMTEwMjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU0MDIxNDAxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEga2VybmVsIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBTeXprYWxsZXIgVGFyZ2V0cyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGZvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIGV4cGxvaXRhYmxlIHRocm91Z2ggc3l6a2FsbGVyLiBUaGUga2V5IGhlcmUgaXMgZ2xvYmFsIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCBzcGVjaWZpY2FsbHkgXCJleHBvcnRlZFwiIGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZSwgYnV0IGFyZSBzdGlsbCBnbG9iYWxseSB2aXNpYmxlIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzIGZvciBzeXprYWxsZXIgZnV6emluZy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgenN3YXBfc3RvcmVgIGluIGBtbS96c3dhcC5jYC4gWnN3YXAsIHdpdGggaXRzIG1lbW9yeSBjb21wcmVzc2lvbiBhbmQgc3dhcHBpbmcgZnVuY3Rpb25hbGl0eSwgaXMgY29tcGxleCBhbmQgaW5oZXJlbnRseSBpbnZvbHZlcyBpbnRlcmFjdGlvbiB3aXRoIGEgbG90IG9mIG90aGVyIHN1YnN5c3RlbXMuIFRoaXMgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZpbmRpbmcgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSwgYmVoYXZpb3IgdGhyb3VnaCBmdXp6aW5nLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzkxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTc6MjAuNzQwMzU0MjIzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkxMjU1MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX3N0b3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvbWVtaW5mby5jPTM0PXN0YXRpYyBpbnQgbWVtaW5mb19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuZnMvcHJvYy9tZW1pbmZvLmMtOTMtXFx0c2VxX3ByaW50ZihtLCAgXFxcIlpzd2FwcGVkOiAgICAgICAlOGx1IGtCXFxcXG5cXFwiLFxcbmZzL3Byb2MvbWVtaW5mby5jOjk0OlxcdFxcdCAgICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcykgXFx1MDAzY1xcdTAwM2NcXG5mcy9wcm9jL21lbWluZm8uYy05NS1cXHRcXHQgICAoUEFHRV9TSElGVCAtIDEwKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9OD1zdHJ1Y3QgbHJ1dmVjO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC05LVxcbmluY2x1ZGUvbGludXgvenN3YXAuaDoxMDpleHRlcm4gYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXM7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTExLVxcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oPTI3PXVuc2lnbmVkIGxvbmcgenN3YXBfdG90YWxfcGFnZXModm9pZCk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjI4OmJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTI5LWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oPTQyPXN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTQzLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaDo0NDpzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNDUte1xcbi0tXFxubW0vcGFnZV9pby5jPTIwND1pbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0yMzctXFxubW0vcGFnZV9pby5jOjIzODpcXHRpZiAoenN3YXBfc3RvcmUoZm9saW8pKSB7XFxubW0vcGFnZV9pby5jLTIzOS1cXHRcXHRjb3VudF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLCBNVEhQX1NUQVRfWlNXUE9VVCk7XFxuLS1cXG5tbS96c3dhcC5jLTQ2LS8qIFRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xcbm1tL3pzd2FwLmM6NDc6YXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNDgtLyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXFxubW0venN3YXAuYzo0OTpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNTAtXFxuLS1cXG5tbS96c3dhcC5jPTc2NT1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc3NC1cXHRpZiAoZW50cnktXFx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXFxubW0venN3YXAuYzo3NzU6XFx0XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtNzc2LVxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmM6Nzc3OlxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTc3OC19XFxuLS1cXG5tbS96c3dhcC5jPTEwMjI9dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTEwNTQtICogdG8gdGhlIHN3YXAgZGV2aWNlLiAgV2UgYXJlIGJhc2ljYWxseSByZXN1bWluZyB0aGUgc2FtZSBzd2FwXFxubW0venN3YXAuYzoxMDU1OiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcXG5tbS96c3dhcC5jLTEwNTYtICogaW4gdGhlIGZpcnN0IHBsYWNlLiAgQWZ0ZXIgdGhlIGZvbGlvIGhhcyBiZWVuIGRlY29tcHJlc3NlZCBpbnRvXFxuLS1cXG5tbS96c3dhcC5jPTEyODM9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3pzd2FwLmMtMTMxNy1cXHRcXHRucl9iYWNraW5nID0genN3YXBfdG90YWxfcGFnZXMoKTtcXG5tbS96c3dhcC5jOjEzMTg6XFx0XFx0bnJfc3RvcmVkID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTEzMTktXFx0fVxcbi0tXFxubW0venN3YXAuYz0xNDA4PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xNDk4LVxcbm1tL3pzd2FwLmM6MTQ5OTpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3pzd2FwLmMtMTUwMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL3pzd2FwLmMtMTUzNy1cXHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXFxubW0venN3YXAuYzoxNTM4OlxcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxcbm1tL3pzd2FwLmMtMTUzOS1cXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcXG4tLVxcbm1tL3pzd2FwLmMtMTU0Ni1cXHR9XFxubW0venN3YXAuYzoxNTQ3OlxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE1NDgtXFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbm1tL3pzd2FwLmM6MTU0OTpcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNTUwLVxcbi0tXFxubW0venN3YXAuYy0xNTc4LVxcbm1tL3pzd2FwLmM6MTU3OTpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNTgwLXtcXG4tLVxcbm1tL3pzd2FwLmMtMTYzNC1cXG5tbS96c3dhcC5jOjE2MzU6XFx0XFx0aWYgKCF6c3dhcF9zdG9yZV9wYWdlKHBhZ2UsIG9iamNnLCBwb29sKSlcXG5tbS96c3dhcC5jLTE2MzYtXFx0XFx0XFx0Z290byBwdXRfcG9vbDtcXG4tLVxcbm1tL3pzd2FwLmM9MTgxNT1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG5tbS96c3dhcC5jLTE4MTYte1xcbm1tL3pzd2FwLmM6MTgxNzpcXHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE4MTgtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS96c3dhcC5jPTE4MjI9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxubW0venN3YXAuYy0xODIzLXtcXG5tbS96c3dhcC5jOjE4MjQ6XFx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xODI1LVxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYz01Mj1zdGF0aWMgaW50IHJlYWRfbWluX2ZyZWVfa2Ioc2l6ZV90ICp2YWx1ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMtNTYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYzo1NzpzdGF0aWMgaW50IGdldF96c3dhcF9zdG9yZWRfcGFnZXMoc2l6ZV90ICp2YWx1ZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jLTU4LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmM9NTU4PXN0YXRpYyBpbnQgdGVzdF9ub19rbWVtX2J5cGFzcyhjb25zdCBjaGFyICpyb290KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYy02MjQtXFx0XFx0ZnJlZSh0cmlnZ2VyX2FsbG9jYXRpb24pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmM6NjI1OlxcdFxcdGlmIChnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKFxcdTAwMjZzdG9yZWRfcGFnZXMpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMtNjI2LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NzoyMi4zMzE2MTg3ODNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAzNzEzNDExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgU3dhcCBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgc3dhcCBpbXBsZW1lbnRhdGlvbiBoZXJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgenN3YXBfc3RvcmVgIGlzIGEgZ2xvYmFsbHkgYWNjZXNzaWJsZSBmdW5jdGlvbiwgYW5kIGl0J3MgY2FsbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgc3dhcF93cml0ZW91dGAuIE9uIHRoZSBvdGhlciBoYW5kLCBgc3dhcGluX3N5bmNgIGlzIGFsc28gZ2xvYmFsLCBhbmQgaXRzIGludm9jYXRpb24gaXMgdHJpZ2dlcmVkIHRocm91Z2ggYGRvX3N3YXBfcGFnZWAg4oCTIHNwZWNpZmljYWxseSwgdGhyb3VnaCB0aGF0IGBzd2FwaW5fcmVhZGFoZWFkYCBwYXRoLiBOb3csIEkgd2FudCB0byBkcmlsbCBkb3duIGZ1cnRoZXIgaW50byB0aGUgbWVjaGFuaWNzIG9mIGBzd2FwaW5fc3luY2AuIFRpbWUgdG8gY2hlY2sgb3V0IGBtbS9zd2FwX3N0YXRlLmNgIGZvciB0aGUgZGV0YWlsZWQgbG9naWMgb2YgdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDYxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTc6MzAuMzY4NzU1MzA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA4ODkwMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBpbl9zeW5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTQ4ODE9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00OTcwLVxcdFxcdGlmIChkYXRhX3JhY2Uoc2ktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1dQX1NZTkNIUk9OT1VTX0lPKSlcXG5tbS9tZW1vcnkuYzo0OTcxOlxcdFxcdFxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxcbm1tL21lbW9yeS5jLTQ5NzItXFx0XFx0XFx0XFx0XFx0ICAgIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHZtZikgfCBCSVQoMCksXFxuLS1cXG5tbS9zaG1lbS5jPTIwNDM9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMDU3LVxcdG1wb2wgPSBzaG1lbV9nZXRfcGdvZmZfcG9saWN5KGluZm8sIGluZGV4LCBvcmRlciwgXFx1MDAyNmlseCk7XFxubW0vc2htZW0uYzoyMDU4OlxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIGdmcCwgQklUKG9yZGVyKSwgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3NobWVtLmMtMjA1OS1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vc3dhcC5oPTMzMj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsXFxubW0vc3dhcC5oLTMzMy1cXHRcXHRzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vc3dhcC5oOjMzNDpzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcXG5tbS9zd2FwLmgtMzM1LVxcdFxcdFxcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuLS1cXG5tbS9zd2FwLmg9NDA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IHN3cCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9zd2FwLmgtNDEzLVxcbm1tL3N3YXAuaDo0MTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKFxcbm1tL3N3YXAuaC00MTUtXFx0c3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY1Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjg3LS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo2ODg6ICogc3dhcGluX3N5bmMgLSBzd2FwLWluIG9uZSBvciBtdWx0aXBsZSBlbnRyaWVzIHNraXBwaW5nIHJlYWRhaGVhZC5cXG5tbS9zd2FwX3N0YXRlLmMtNjg5LSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcwMi0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NzAzOnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxubW0vc3dhcF9zdGF0ZS5jLTcwNC1cXHRcXHRcXHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU3OjMxLjg3NzY1MjMzNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTk0MDkxNDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBNb2RpZmllZCBTd2FwIGFuZCBac3dhcCBGdW5jdGlvbmFsaXR5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIEknbSBzZWVpbmcgY2hhbmdlcyByZWxhdGVkIHRvIHN3YXAgYW5kIHpzd2FwLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB3b3JraW5nc2V0cyBhbmQgdGhlIHN3YXAgY2FjaGUuXG5cbkluaXRpYWxseSwgSSBpZGVudGlmaWVkIHNldmVyYWwgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCBmb2N1cyBwb2ludHM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBvZiB0aGUgbW9kaWZpZWQgbG9naWMuXG5cbkkndmUgbm90ZWQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYHN3YXBpbl9zeW5jYCwgYHpzd2FwX3N0b3JlYCwgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIChmb3JtZXJseSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApLiBBbHNvLCBgd29ya2luZ3NldF9yZWZhdWx0YCBoYXMgYmVlbiBjaGFuZ2VkLiBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgYXJlIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zLlxuXG5Ob3csIEknbSBjaGVja2luZyB3aGljaCBvZiB0aGVzZSBhcmUgc3RhdGljLCBiZWNhdXNlIEkga25vdyB0aGF0IGltcGFjdHMgZnV6emluZy4gU28sIEkgY29uZmlybWVkIHRoYXQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlIGZ1bmN0aW9uczogYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYHN3YXBpbl9zeW5jYCwgYW5kIGB6c3dhcF9zdG9yZWAgYXJlIHN0YXRpYy4gVGhlcmVmb3JlLCB0aGV5IGFyZSBhbGwgc3VpdGFibGUgZm9yIGluY2x1c2lvbiBpbiB0aGUgRm9jdXNTeW1ib2xzIGxpc3QuXG5cbkkgaGFkIHRvIHJlbW92ZSBgZG9fc3dhcF9wYWdlYCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AgZnJvbSBteSBsaXN0LiBUaG9zZSBhcmUgaG90IHBhdGhzLCBhbmQgSSB3YW50IHRvIGF2b2lkIHRoZW0uIFNpbWlsYXJseSwgYHpzd2FwX3N0b3JlYCBpcyBhbHNvIGEgaG90IHBhdGgsIGJ1dCBpdCBpcyB0aGUgbWFpbiB6c3dhcCBlbnRyeSBwb2ludC5cblxuSSBhbSBjaGVja2luZyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGFuZCBgX19zd2FwX2NhY2hlX2FsbG9jYC4gVGhvc2UgYXJlIHN0YXRpYy4gVGhleSBhcmUgbm90IHN1aXRhYmxlIHRvIGluY2x1ZGUgaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LlxuXG5TbywgdGhlIGRlZmluaXRpdmUgbGlzdCBmb3IgYEZvY3VzU3ltYm9sc2A6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgLlxuXG5Gcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSd2ZSBjb25maXJtZWQgdGhhdCBlbmFibGluZyBgWlNXQVBgLCBgU1dBUGAsIGFuZCBgWlNXQVBfREVGQVVMVF9PTmAgaXMgd2hhdCBJIG5lZWQuIGBaU1dBUGAgaXMgdGhlIG1vc3QgaW1wb3J0YW50IGNvbmZpZywgYW5kIHRoZSBvdGhlcnMgYXJlIGRlcGVuZGVuY2llcy5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBob3cgenN3YXAgYW5kIHN3YXAgaW50ZXJhY3QsIHBhcnRpY3VsYXJseSB3aXRoIGhvdyB0aGV5IG1hbmFnZSB3b3JraW5nc2V0IHJlZmF1bHRzIGFuZCB3cml0ZWJhY2sgYnVmZmVycy4gTmV3IGZ1bmN0aW9ucyBhcmUgYWRkZWQsIGFuZCBleGlzdGluZyBvbmVzIGFyZSBtb2RpZmllZCB0byBlbnN1cmUgdGhhdCBzaGFkb3dzIGFyZSBwcmVzZXJ2ZWQgYW5kIHJlc3RvcmVkIGluIHN3YXAgY2FjaGUgb3BlcmF0aW9ucy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDEyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1Nzo0Ny44MTg1Njg3NDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTg3MTU2MzAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBXT1JLSU5HU0VUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1Nzo0OS4yNzcyODk2NzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNTEyNTk4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBtbS93b3JraW5nc2V0LmNgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gRmlyc3QsIGxldCdzIGdldCBhIGhhbmRsZSBvbiB0aGUgYG1tL3dvcmtpbmdzZXQuY2AgbW9kdWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIG1vZHVsZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIHBhZ2UgdGFibGUgc3RydWN0dXJlcywgdGhlIHBoeXNpY2FsIG1lbW9yeSBhbGxvY2F0b3IsIE5VTUEgY29uc2lkZXJhdGlvbnMsIG9yIHBlcmhhcHMgaW50ZXJhY3Rpb25zIHdpdGggc3BlY2lmaWMgQ1BVIGZlYXR1cmVzPyBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgZGVidWdnaW5nIGVmZm9ydHMuIFNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgSSBuZWVkIHRvIGNvbnN1bHQgYW55IG90aGVyIG1vZHVsZXMgb3IgdGhlaXIgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBlbnN1cmUgSSBkbyBub3QgYnJlYWsgdGhpbmdzIHdpdGggY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MDMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODowMC40Mjg1NTE2MThaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjMxMzY4NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid29ya2luZ3NldFxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTYtXFx0XFx0XFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU3OlxcdFxcdFxcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxcXFxubW0vTWFrZWZpbGUtNTgtXFx0XFx0XFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vICQobW11LXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU4OjAyLjI1MTY5NjA0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzMwNzk0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgZG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29tcHVsc29yeSBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIGB3b3JraW5nc2V0Lm9gIGlzICphbHdheXMqIGdldHRpbmcgY29tcGlsZWQuIFRoYXQncyBhIGJpdCBvZGQsIHVzdWFsbHkgSSdkIGV4cGVjdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkuIFNpbmNlIHRoZSBjb21waWxhdGlvbiBpcyBhbHdheXMgaGFwcGVuaW5nLCBJJ20gdGhpbmtpbmcgbWF5YmUgaXQncyBjb25uZWN0ZWQgdG8gYSBjb3JlIG9yIGZ1bmRhbWVudGFsIGZlYXR1cmUuIFdoYXQncyB0aGUgbW9zdCBsaWtlbHkgc3VzcGVjdD8gQWgsIEkgc2hvdWxkIGNoZWNrIHRoZSBgQ09ORklHX01FTUNHYCBzZXR0aW5nIGZpcnN0LiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBtZW1vcnkgY2dyb3VwcyBjb3VsZCBiZSBpbmZsdWVuY2luZyB0aGluZ3MuIEknbGwgc2VlIGlmIGB3b3JraW5nc2V0Lm9gIGlzIHNvbWVob3cgdGllZCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgYSBjb250YWluZXIuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MzksIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODowNy4wODQ3Nzg5MTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjgwOTYyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY3PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzYtXFxuaW5pdC9LY29uZmlnOjEwNzc6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzgtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4NS1cXG5pbml0L0tjb25maWc6MTA4Njpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg3LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkyLVxcbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk0LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk5LVxcbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAxLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU4OjA4LjU1Mjg4MTI5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTcyNjIzMjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFJlZmluZW1lbnRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGNvbmZpZ3VyZSB0aGlzIHN5c3RlbS4gYE1FTUNHYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGZvciB0cmFja2luZyBtZW1vcnkgY2dyb3VwcyBhbmQgaGFuZGxpbmcgd29ya2luZ3NldCByZWZhdWx0cy4gVGhhdCdzIGEga2V5IGNvbnNpZGVyYXRpb24uIFNpbmNlIGB3b3JraW5nc2V0LmNgIGlzIGFsd2F5cyBjb21waWxlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbWFuYWdpbmcgaXRzIGludGVyYWN0aW9ucyBlZmZlY3RpdmVseS5cblxuSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gaW5jbHVkZSBgWlNXQVBgLCBgU1dBUGAsIGFuZCBgWlNXQVBfREVGQVVMVF9PTmAuIEkgY2hlY2tlZCBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IGBaU1dBUF9ERUZBVUxUX09OYCBpcyBhIHZhbGlkIGNvbmZpZyBvcHRpb24sIHNvIHRoYXQncyBnb29kLlxuXG5JJ20gcmUtZXZhbHVhdGluZyBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIFdoaWxlIGl0IG1pZ2h0IG5vdCBiZSBzdHJpY3RseSAqbmVjZXNzYXJ5KiBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFuYWx5c2lzLCBJJ2xsIGtlZXAgaXQgaW4gbWluZC5cblxuTm93LCBmb3IgdGhlIGtleSBmb2N1cyBzeW1ib2xzIOKAkyBJJ3ZlIGZpbmFsaXplZCB0aGVzZTpcblxuKiAgIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYFxuKiAgIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgXG4qICAgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2BcbiogICBgd29ya2luZ3NldF9yZWZhdWx0YFxuKiAgIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgXG4qICAgYHN3YXBpbl9zeW5jYFxuXG5JIHdhcyBpbml0aWFsbHkgb24gdGhlIGZlbmNlIGFib3V0IGB6c3dhcF9zdG9yZWAuIEl0J3MgYSBiaXQgZ2VuZXJpYyBhbmQgcG90ZW50aWFsbHkgYSB2ZXJ5IGhvdCBmdW5jdGlvbiwgYnV0IGl0J3MgYmVlbiBtb2RpZmllZCwgc28gaXQgd2FycmFudHMgaW5jbHVzaW9uLiBJJ2xsIGFkZCBpdCB0byB0aGUgZmluYWwgbGlzdC5cblxuQWxyaWdodCwgd2l0aCB0aGVzZSBzZXR0aW5ncywgSSdtIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTU5LCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODoyMC4yNzkxMTY0OTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzI2MDcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyXCIsXG4gICAgXCJ6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NcIixcbiAgICBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRcIixcbiAgICBcInN3YXBpbl9zeW5jXCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB6c3dhcCBhbmQgc3dhcCBjYWNoZSBsb2dpYyB0byBwcm9wZXJseSBoYW5kbGUgd29ya2luZ3NldCByZWZhdWx0cyBmb3IgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcnMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjaGVjayBpZiBhIGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciBhbmQgdG8gbG9va3VwIGFuZCBjbGVhciBzaGFkb3dzLCBhbmQgbW9kaWZpZXMgdGhlIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiBhbmQgZGVsZXRpb24gcGF0aHMgdG8gcHJlc2VydmUgYW5kIHJlc3RvcmUgc2hhZG93cy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHdpdGggZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyXCIsXG4gICAgXCJ6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NcIixcbiAgICBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRcIixcbiAgICBcInN3YXBpbl9zeW5jXCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB6c3dhcCBhbmQgc3dhcCBjYWNoZSBsb2dpYyB0byBwcm9wZXJseSBoYW5kbGUgd29ya2luZ3NldCByZWZhdWx0cyBmb3IgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcnMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjaGVjayBpZiBhIGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciBhbmQgdG8gbG9va3VwIGFuZCBjbGVhciBzaGFkb3dzLCBhbmQgbW9kaWZpZXMgdGhlIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiBhbmQgZGVsZXRpb24gcGF0aHMgdG8gcHJlc2VydmUgYW5kIHJlc3RvcmUgc2hhZG93cy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHdpdGggZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU4OjIwLjM1MjM4NDczOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MDA1ODQ0MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODoyMC4zNTI4ODA0MjlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA4MDAwODMzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2FjaGUgYW5kIHpzd2FwIGxvZ2ljIHRvIHByZXNlcnZlIHdvcmtpbmdzZXQgc2hhZG93IGVudHJpZXMgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgeGFycmF5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzI4OGE5MTA1OWNkZGE3NjA3NzYyODMyM2I2OTAyMzVjM2M4OWM0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE4OjUzOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5pbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG4gYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbiBcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xuQEAgLTY5LDYgKzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqL1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAzOGIxMTY1MjEyYzk0Li5jMTkxODg3YzFmZWRhIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTM4LDYgKzM4LDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4rdm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKiBtbS9mb2xpby5jICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggYzZhOTI0MmQxYjViZC4uNzcxMTk3YjNmY2M1YyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4OTQsNiArNDg5NCw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcbiBcdHB0ZV90ICpwdGVwO1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC01MDE4LDYgKzUwMTksMTAgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gb3V0X3BhZ2U7XG4gXHR9XG4gXG4rXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xuK1xuIFx0LypcbiBcdCAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZlxuIFx0ICogZm9saW8tXHUwMDNlaW5kZXggb2Ygbm9uLWtzbSBmb2xpb3Mgd291bGQgYmUgbm9ubGluZWFyIGluc2lkZSB0aGVcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTk5NjY1YTNkNmU3Yi4uMWVmNmNjNzY2MDVlNSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0yMjY2LDYgKzIyNjYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4gXHRpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjtcbiBcdHBnb2ZmX3Qgb2Zmc2V0O1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0Vk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7XG4gXHRpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTtcbkBAIC0yMzc3LDYgKzIzNzgsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdCAqL1xuIFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHRpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHtcbiBcdFx0ZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xuIFx0XHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA5MGE1NTFhODhkZjYzLi44Njc5Y2I2MTI2OGU1IDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0zMTIsOSArMzEyLDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuK1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li5kZjllMDQ1MmYxOWI5IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcF9vcHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzd2FwLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuICNpbmNsdWRlIFwic3dhcF90YWJsZS5oXCJcbiAjaW5jbHVkZSBcInN3YXAuaFwiXG5AQCAtMjYzLDEyICsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0dW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDtcbiBcdGJvb2wgZm9saW9fc3dhcHBlZCA9IGZhbHNlLCBuZWVkX2ZyZWUgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHR2b2lkICpzaGFkb3dfcGFya2VkO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiBcbitcdC8qXG4rXHQgKiBBIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgcGFya2VkIHRoZSBzbG90J3Mgb3JpZ2luYWwgc2hhZG93IGluIHRoZVxuK1x0ICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLlxuK1x0ICovXG4rXHRzaGFkb3dfcGFya2VkID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbitcdGlmIChzaGFkb3dfcGFya2VkKVxuK1x0XHRzaGFkb3cgPSBzaGFkb3dfcGFya2VkO1xuK1xuIFx0c2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7XG4gXHRjaV9zdGFydCA9IHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSk7XG4gXHRjaV9lbmQgPSBjaV9zdGFydCArIG5yX3BhZ2VzO1xuQEAgLTQ4MywxOSArNDkzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuKyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXG5AQCAtNTA3LDEzICs1MTMsMTcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cbiAgKlxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4rICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXG4rICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXG4rICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNjQ0LDE3ICs2NTQsMjcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxuIFx0XHRwZ29mZl90IGlseCwgYm9vbCByZWFkYWhlYWQpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuK1x0XHQvKlxuK1x0XHQgKiBDYXB0dXJlIHRoZSBzbG90J3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxuK1x0XHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xuK1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oY3R4LCBmb2xpbyk7XG4gXHRpZiAocmVhZGFoZWFkKSB7XG4gXHRcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xuQEAgLTY4NSwxNyArNzA1LDI3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4ge1xuIFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4rXHRcdC8qXG4rXHRcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4rXHRcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZvbGlvO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oXHUwMDI2Y3R4LCBmb2xpbyk7XG4gXHRzd2FwX3JlYWRfc3VibWl0KFx1MDAyNmN0eCk7XG4gXHRyZXR1cm4gZm9saW87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNzNhODFiNGEzZTE2NC4uOTkwNTc1M2I3YTEwYyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQ4LDYgKzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzd2FwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG5AQCAtNzMzLDcgKzczNCw4IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbiBcdFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gXG4tXHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXG4rXHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXG4gXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbiBcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIFx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDdhYzJiODhjODBhZTUuLmUyMDNkNjMxZjYxYjggMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTUzNiwxNiArNTM2LDggQEAgYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuIFx0cmV0dXJuIHJlZmF1bHRfZGlzdGFuY2UgXHUwMDNjPSB3b3JraW5nc2V0X3NpemU7XG4gfVxuIFxuLS8qKlxuLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxuLSAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxuLSAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby5cbi0gKlxuLSAqIENhbGN1bGF0ZXMgYW5kIGV2YWx1YXRlcyB0aGUgcmVmYXVsdCBkaXN0YW5jZSBvZiB0aGUgcHJldmlvdXNseVxuLSAqIGV2aWN0ZWQgZm9saW8gaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5vZGUgYW5kIHRoZSBtZW1jZyB3aG9zZSBtZW1vcnlcbi0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLlxuLSAqL1xuLXZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbitzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csXG4rXHRcdFx0XHQgYm9vbCBscnVfbWFuYWdlZClcbiB7XG4gXHRib29sIGZpbGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5AQCAtNTc3LDcgKzU2OSwxNiBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpZiAoIXdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoc2hhZG93LCBmaWxlLCBcdTAwMjZ3b3JraW5nc2V0LCB0cnVlKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbitcdC8qXG4rXHQgKiBBbiBMUlUtbWFuYWdlZCBmb2xpbyBtYXkgc2l0IGluIGEgcGVyLUNQVSBiYXRjaCwgd2hpY2ggY2Fubm90IGJlXG4rXHQgKiBkZXRlcm1pbmVkIGhlcmU6IHNldHRpbmcgdGhlIGZsYWcgd291bGQgcmFjZSB0aGUgZHJhaW4gYW5kIGxlYXZlIGl0XG4rXHQgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlXG4rXHQgKiBhY3RpdmF0aW9uIGZvciBzdWNoIGEgZm9saW8uXG4rXHQgKi9cbitcdGlmIChscnVfbWFuYWdlZClcbitcdFx0Zm9saW9fYWN0aXZhdGUoZm9saW8pO1xuK1x0ZWxzZVxuK1x0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiBcdHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KGxydXZlYywgbnIpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSArIGZpbGUsIG5yKTtcbiBcbkBAIC01OTAsNiArNTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiB9XG4gXG4rLyoqXG4rICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4rICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4rICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuKyAqXG4rICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4rICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuKyAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4rICpcbisgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIG5vdCBvbiB0aGUgTFJVIHlldCwgdGhlIGNhbGxlciBhZGRzXG4rICogaXQgd2l0aCBmb2xpb19hZGRfbHJ1KCkgYWZ0ZXJ3YXJkcy5cbisgKi9cbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4re1xuK1x0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgZmFsc2UpO1xuK31cbitcbisvKipcbisgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcbisgKiBldmljdGVkIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgTFJVLlxuKyAqIEBmb2xpbzogVGhlIGZvbGlvIHRoZSBldmljdGlvbiBpcyByZWZhdWx0ZWQgaW50by5cbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4rICpcbisgKiBMaWtlIHdvcmtpbmdzZXRfcmVmYXVsdCgpLCBidXQgZm9yIGEgZm9saW8gdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBhZGRlZFxuKyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXG4rICogcmF0aGVyIHRoYW4gYnkgc2V0dGluZyBQR19hY3RpdmUuXG4rICpcbisgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlVcbisgKiBiYXRjaCBjYW5ub3QgYmUgbW92ZWQgeWV0IGFuZCBpcyBsZWZ0IGluYWN0aXZlLlxuKyAqXG4rICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuXG4rICovXG4rdm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuK3tcbitcdF9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIHRydWUpO1xuK31cbitcbiAvKipcbiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uXG4gICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uYzFhNzhlZGZhMGI4NyAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC05NzIsNiArOTcyLDc5IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiB3cml0ZWJhY2sgY29kZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4rXG4rI2RlZmluZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XIHhhX21rX3ZhbHVlKDApXG4rXG4rLyoqXG4rICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/XG4rICogQGZvbGlvOiB0aGUgZm9saW8gYmVpbmcgZXhhbWluZWQgKHR5cGljYWxseSBhIHN3YXAgY2FjaGUgZm9saW8gdW5kZXIgcmVjbGFpbSlcbisgKlxuKyAqIEEgZm9saW8gaXMgYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHdoZW4gZXZlcnkgb25lIG9mIGl0cyBzd2FwIG9mZnNldHMgaG9sZHNcbisgKiBhIHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93IChhIHJlYWwgc2hhZG93IG9yIHRoZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XXG4rICogc2VudGluZWwpIGluIHRoZSB6c3dhcCB0cmVlIHJhdGhlciB0aGFuIGEgbGl2ZSB6c3dhcCBlbnRyeS5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBAZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyLCBpbiB3aGljaCBjYXNlIHRoZSByZWNsYWltIHBhdGhcbisgKiBtdXN0IG5vdCBtaW50IGEgZnJlc2ggd29ya2luZ3NldCBzaGFkb3cgZm9yIGl0LlxuKyAqL1xuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XG4rXG4rXHRcdGlmICgheGFfaXNfdmFsdWUoeGFfbG9hZChzd2FwX3pzd2FwX3RyZWUoZSksIG9mZnNldCArIGkpKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyoqXG4rICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbydzIHBhcmtlZCBzaGFkb3cocylcbisgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpXG4rICpcbisgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJ3Mgc3dhcCBvZmZzZXQocykgZnJvbSB0aGVcbisgKiB6c3dhcCB0cmVlLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgcHJlc2VydmVkIHdvcmtpbmdzZXQgc2hhZG93LCBvciBOVUxMIGlmIHRoZSBzbG90KHMpIGhhZCBubyBzaGFkb3dcbisgKiAoc2VudGluZWwgb25seSkgb3Igbm90aGluZyBwYXJrZWQuIFRoZSBjYWxsZXIgZWl0aGVyIHJlc3RvcmVzIHRoZSByZXR1cm5lZFxuKyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0b1xuKyAqIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCgpIChidWZmZXIgY29uc3VtZWQgYnkgYSBzd2FwaW4pOyBjbGVhcmluZ1xuKyAqIGhlcmUgZW5zdXJlcyB0aGUgdHdvIHBhdGhzIG5ldmVyIGRvdWJsZS1jb3VudC5cbisgKi9cbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xuK1x0XHRzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpO1xuK1x0XHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCArIGkpO1xuK1xuK1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCArIGkpO1xuK1x0XHRpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpXG4rXHRcdFx0c2hhZG93ID0gcGFya2VkO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNoYWRvdztcbit9XG4rXG4gLypcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcbkBAIC05ODcsMTIgKzEwNjAsMTQgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdFx0XHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXG4ge1xuK1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbiBcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XG4gXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4rXHR2b2lkICpzaGFkb3c7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXG5AQCAtMTAwMCw5ICsxMDc1LDExIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRpZiAoIXNpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbitcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7XG4rXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuLVx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4tXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4rXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuK1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDE0LDYgKzEwOTEsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0ICovXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXG4gXHQvKlxuIFx0ICogZm9saW8gaXMgbG9ja2VkLCBhbmQgdGhlIHN3YXBjYWNoZSBpcyBub3cgc2VjdXJlZCBhZ2FpbnN0XG5AQCAtMTAzNSw3ICsxMTEzLDEyIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbitcdC8qXG4rXHQgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6XG4rXHQgKiB0aGUgc3dhcCB0YWJsZSBtYXJrcyBhIHN3YXBwZWQgb3V0IHNsb3Qgd2l0aCB4YV9ta192YWx1ZSgwKSBhbmQgaG9sZHNcbitcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXG4rXHQgKi9cbitcdHhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTtcbiBcbiBcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpXG5AQCAtMTA1NSw3ICsxMTM4LDE1IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuLVx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCdzIHNoYWRvdyBhbmQgbm90aGluZ1xuK1x0XHQgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzXG4rXHRcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxuK1x0XHQgKi9cbitcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7XG4rXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcbitcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4rXHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHR9XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuQEAgLTE0OTgsNiArMTU4OSwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XG4gXG4rXHQvKlxuK1x0ICogQSB3cml0ZWJhY2sgYnVmZmVyIHdob3NlIElPIGZhaWxlZCBpcyByZWRpcnRpZWQgYW5kIGxlZnQgaW4gdGhlXG4rXHQgKiBzd2FwIGNhY2hlLCBzbyByZWNsYWltIHdyaXRlcyBpdCBvdXQgYWdhaW4uIFdyaXRlYmFjayBhbHJlYWR5XG4rXHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxuK1x0ICogY29tcHJlc3NpbmcgaXQgYmFjayBpbnRvIHpzd2FwLiBUaGlzIGFsc28gbGVhdmVzIHRoZSBzaGFkb3dcbitcdCAqIHBhcmtlZCBmb3IgdGhlIGJ1ZmZlciBpbiBwbGFjZSwgc28gaXQgaXMgc3RpbGwgcmVzdG9yZWQgaW50b1xuK1x0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxuK1x0ICovXG4rXHRpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghenN3YXBfZW5hYmxlZClcbiBcdFx0Z290byBjaGVja19vbGQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODoyMC4zNTI4ODEyMTlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MDAwNjIxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ2hlY2s6IE5vIElzc3VlcyBEZXRlY3RlZCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgbWVtb3J5IG1hbmFnZW1lbnQgcGVyc3BlY3RpdmUuIFRoaXMgcGF0Y2ggaXMgc29sZWx5IGNvbmNlcm5lZCB3aXRoIHJlZmluaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHpzd2FwLCB0aGUgc3dhcCBjYWNoZSwgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdHMuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zLlxuXG5TbywgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBtb2RpZmljYXRpb25zIHRvIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gRXNzZW50aWFsbHksIGl0J3MgYWJvdXQgY29ycmVjdGx5IG1hbmFnaW5nIHNoYWRvdyBlbnRyaWVzIHdpdGhpbiB0aGUgd29ya2luZ3NldCBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBObyBuZXcgdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFkZGVkLCB3aGljaCBpcyBhIG1ham9yIHBvc2l0aXZlLlxuXG5JdCdzIGFsbCBhYm91dCBmYW1pbGlhciBzdHJ1Y3R1cmVzOiBgc3RydWN0IGZvbGlvYCwgYHN3cF9lbnRyeV90YCwgYHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mb2AsIGFuZCBzaGFkb3cgZW50cmllcyByZXByZXNlbnRlZCBhcyBgdm9pZCAqYCBwb2ludGVycyBzdG9yZWQgd2l0aGluIHhhcnJheXMuIFRoaXMgaXNuJ3QgZ3JvdW5kYnJlYWtpbmcsIGJ1dCB0aGUga2V5IGlzIGhvdyB0aGVzZSBzaGFkb3dzIGFyZSBoYW5kbGVkLlxuXG5UaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBzaGFkb3cgcG9pbnRlcnMuIFdlJ3JlIGVpdGhlciBnZXR0aW5nIHRoZW0gZnJvbSBgc3dhcF9jYWNoZV9nZXRfc2hhZG93YCBvciBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYC4gVGhlc2UgYXJlIGp1c3QgcG9pbnRlcnMsIGFuZCBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZC4gR2l2ZW4gdGhhdCwgd2l0aCBhIGdvb2QgS0FTQU4gcnVuIG9uIHRoZSB3aG9sZSBzeXN0ZW0sIHRoZSB1c3VhbCBidWdzIC0tIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlLCBkZXJlZmVyZW5jZXMsIGV0Yy4gLS0gYXJlIGhhbmRsZWQuXG5cblRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBub3IgbmV3IGJ1ZmZlcnMgYWxsb2NhdGVkIGFuZCBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBwdXJlbHkgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJuYWwsIGZvY3VzaW5nIG9uIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGFuZCB0aGUgZXhpc3Rpbmcgc3dhcCBjYWNoZS96c3dhcCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0NCwiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODozMS4xNTI5NDY2NTdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2FjaGUgYW5kIHpzd2FwIGxvZ2ljIHRvIHByZXNlcnZlIHdvcmtpbmdzZXQgc2hhZG93IGVudHJpZXMgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgeGFycmF5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBjYWNoZSBhbmQgenN3YXAgbG9naWMgdG8gcHJlc2VydmUgd29ya2luZ3NldCBzaGFkb3cgZW50cmllcyBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24sIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCB4YXJyYXkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhdkth[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 18:52:06 +0000 UTC FinishedAt: 2026-08-25 18:58:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP", "ZSWAP_DEFAULT_ON" ], "series_id": "63f99ba3-437d-41d9-b576-02efff1014ad" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_folio_is_writeback_buffer", "zswap_lookup_and_clear_shadows", "__swap_cache_alloc_folio", "workingset_refault", "workingset_refault_lru_managed", "swapin_sync", "zswap_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXImIzM0OywKICAgICYjMzQ7enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkJiMzNDssCiAgICAmIzM0O3N3YXBpbl9zeW5jJiMzNDssCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBjYWNoZSBhbmQgenN3YXAgbG9naWMgdG8gcHJlc2VydmUgd29ya2luZ3NldCBzaGFkb3cgZW50cmllcyBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24sIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCB4YXJyYXkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIGFuZCBzd2FwIGNhY2hlIGxvZ2ljIHRvIHByb3Blcmx5IGhhbmRsZSB3b3JraW5nc2V0IHJlZmF1bHRzIGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNoZWNrIGlmIGEgZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyIGFuZCB0byBsb29rdXAgYW5kIGNsZWFyIHNoYWRvd3MsIGFuZCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCBkZWxldGlvbiBwYXRocyB0byBwcmVzZXJ2ZSBhbmQgcmVzdG9yZSBzaGFkb3dzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2Ugd2l0aCBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMyODhhOTEwNTljZGRhNzYwNzc2MjgzMjNiNjkwMjM1YzNjODljNDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxODo1MzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTEuLmRmYjcxNTMyMzZmNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuQEAgLTM1LDYgJiM0MzszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG4gYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuIFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5AQCAtNjksNiAmIzQzOzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMzhiMTE2NTIxMmM5NC4uYzE5MTg4N2MxZmVkYSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0zOCw2ICYjNDM7MzgsNyBAQCB2b2lkIHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4gdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbiYjNDM7dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKiBtbS9mb2xpby5jICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggYzZhOTI0MmQxYjViZC4uNzcxMTk3YjNmY2M1YyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4OTQsNiAmIzQzOzQ4OTQsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XG4gXHRwdGVfdCAqcHRlcDtcbiYjNDM7XHR2b2lkICpzaGFkb3c7XG4gXG4gXHRpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTUwMTgsNiAmIzQzOzUwMTksMTAgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gb3V0X3BhZ2U7XG4gXHR9XG4gXG4mIzQzO1x0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbiYjNDM7XHRpZiAoc2hhZG93KVxuJiM0MztcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBLU00gc29tZXRpbWVzIGhhcyB0byBjb3B5IG9uIHJlYWQgZmF1bHRzLCBmb3IgZXhhbXBsZSwgaWZcbiBcdCAqIGZvbGlvLVx1MDAzZWluZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IDU5OTY2NWEzZDZlN2IuLjFlZjZjYzc2NjA1ZTUgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtMjI2Niw2ICYjNDM7MjI2Niw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbiBcdGludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyO1xuIFx0cGdvZmZfdCBvZmZzZXQ7XG4mIzQzO1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0Vk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7XG4gXHRpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTtcbkBAIC0yMzc3LDYgJiM0MzsyMzc4LDEwIEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHQgKi9cbiBcdGFyY2hfc3dhcF9yZXN0b3JlKGZvbGlvX3N3YXAoc3dhcCwgZm9saW8pLCBmb2xpbyk7XG4gXG4mIzQzO1x0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbiYjNDM7XHRpZiAoc2hhZG93KVxuJiM0MztcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xuJiM0MztcbiBcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xuIFx0XHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXHUwMDI2Zm9saW8sIGdmcCwgaW5mbywgaW5kZXgsIHZtYSk7XG4gXHRcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDkwYTU1MWE4OGRmNjMuLjg2NzljYjYxMjY4ZTUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTMxMiw5ICYjNDM7MzEyLDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li5kZjllMDQ1MmYxOWI5IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0yNCw2ICYjNDM7MjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzd2FwLmhcJiMzNDtcbkBAIC0yNjMsMTIgJiM0MzsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0dW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDtcbiBcdGJvb2wgZm9saW9fc3dhcHBlZCA9IGZhbHNlLCBuZWVkX2ZyZWUgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0dm9pZCAqc2hhZG93X3BhcmtlZDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgcGFya2VkIHRoZSBzbG90JiMzOTtzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcbiYjNDM7XHQgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4mIzQzO1x0aWYgKHNoYWRvd19wYXJrZWQpXG4mIzQzO1x0XHRzaGFkb3cgPSBzaGFkb3dfcGFya2VkO1xuJiM0MztcbiBcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xuIFx0Y2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpO1xuIFx0Y2lfZW5kID0gY2lfc3RhcnQgJiM0MzsgbnJfcGFnZXM7XG5AQCAtNDgzLDE5ICYjNDM7NDkzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuICAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4gICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcbiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVyb1xuQEAgLTUwNywxMyAmIzQzOzUxMywxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxuICAqXG4mIzQzOyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4mIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZVxuJiM0MzsgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cbiYjNDM7ICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuJiM0MztcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNjQ0LDE3ICYjNDM7NjU0LDI3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcbiBcdFx0cGdvZmZfdCBpbHgsIGJvb2wgcmVhZGFoZWFkKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2FwdHVyZSB0aGUgc2xvdCYjMzk7cyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4mIzQzO1x0XHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuJiM0MztcdGlmIChzaGFkb3cpXG4mIzQzO1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGN0eCwgZm9saW8pO1xuIFx0aWYgKHJlYWRhaGVhZCkge1xuIFx0XHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcbkBAIC02ODUsMTcgJiM0Mzs3MDUsMjcgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiB7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2FwdHVyZSB0aGUgc2xvdCYjMzk7cyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4mIzQzO1x0XHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4mIzQzO1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbiYjNDM7XHRpZiAoc2hhZG93KVxuJiM0MztcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuJiM0MztcbiYjNDM7XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA3M2E4MWI0YTNlMTY0Li45OTA1NzUzYjdhMTBjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuQEAgLTczMyw3ICYjNDM7NzM0LDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiYjNDM7XHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxuIFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4gXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbiBcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCA3YWMyYjg4YzgwYWU1Li5lMjAzZDYzMWY2MWI4IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01MzYsMTYgJiM0Mzs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHRyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcbiB9XG4gXG4tLyoqXG4tICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4tICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuLSAqXG4tICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4tICovXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuJiM0MztzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csXG4mIzQzO1x0XHRcdFx0IGJvb2wgbHJ1X21hbmFnZWQpXG4ge1xuIFx0Ym9vbCBmaWxlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuQEAgLTU3Nyw3ICYjNDM7NTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQW4gTFJVLW1hbmFnZWQgZm9saW8gbWF5IHNpdCBpbiBhIHBlci1DUFUgYmF0Y2gsIHdoaWNoIGNhbm5vdCBiZVxuJiM0MztcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcbiYjNDM7XHQgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlXG4mIzQzO1x0ICogYWN0aXZhdGlvbiBmb3Igc3VjaCBhIGZvbGlvLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChscnVfbWFuYWdlZClcbiYjNDM7XHRcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiBcdHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KGxydXZlYywgbnIpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7XG4gXG5AQCAtNTkwLDYgJiM0Mzs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxuJiM0MzsgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbiYjNDM7ICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcbiYjNDM7ICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuJiM0MzsgKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIG5vdCBvbiB0aGUgTFJVIHlldCwgdGhlIGNhbGxlciBhZGRzXG4mIzQzOyAqIGl0IHdpdGggZm9saW9fYWRkX2xydSgpIGFmdGVyd2FyZHMuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4mIzQzO3tcbiYjNDM7XHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcbiYjNDM7ICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS5cbiYjNDM7ICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxuJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4mIzQzOyAqXG4mIzQzOyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG4mIzQzOyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXG4mIzQzOyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlVcbiYjNDM7ICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4mIzQzO3tcbiYjNDM7XHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uXG4gICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uYzFhNzhlZGZhMGI4NyAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC05NzIsNiAmIzQzOzk3Miw3OSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogd3JpdGViYWNrIGNvZGVcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XIHhhX21rX3ZhbHVlKDApXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/XG4mIzQzOyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4mIzQzOyAqXG4mIzQzOyAqIEEgZm9saW8gaXMgYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHdoZW4gZXZlcnkgb25lIG9mIGl0cyBzd2FwIG9mZnNldHMgaG9sZHNcbiYjNDM7ICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV1xuJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoXG4mIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4mIzQzOyAqL1xuJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICYjNDM7IGkpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJiMzOTtzIHBhcmtlZCBzaGFkb3cocylcbiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KVxuJiM0MzsgKlxuJiM0MzsgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJiMzOTtzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlXG4mIzQzOyAqIHpzd2FwIHRyZWUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93XG4mIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXG4mIzQzOyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0b1xuJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoKSAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmdcbiYjNDM7ICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4mIzQzO1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4mIzQzO1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCAmIzQzOyBpKTtcbiYjNDM7XHRcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XG4mIzQzO1x0XHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCAmIzQzOyBpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICYjNDM7IGkpO1xuJiM0MztcdFx0aWYgKHBhcmtlZCAhPSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XKVxuJiM0MztcdFx0XHRzaGFkb3cgPSBwYXJrZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2hhZG93O1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQXR0ZW1wdHMgdG8gZnJlZSBhbiBlbnRyeSBieSBhZGRpbmcgYSBmb2xpbyB0byB0aGUgc3dhcCBjYWNoZSxcbiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhXG5AQCAtOTg3LDEyICYjNDM7MTA2MCwxNCBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiB7XG4mIzQzO1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbiBcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XG4gXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4mIzQzO1x0dm9pZCAqc2hhZG93O1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuQEAgLTEwMDAsOSAmIzQzOzEwNzUsMTEgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdGlmICghc2kpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuJiM0MztcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7XG4mIzQzO1xuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuJiM0MztcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4mIzQzO1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDE0LDYgJiM0MzsxMDkxLDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdCAqL1xuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbiYjNDM7XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcbiBcdC8qXG4gXHQgKiBmb2xpbyBpcyBsb2NrZWQsIGFuZCB0aGUgc3dhcGNhY2hlIGlzIG5vdyBzZWN1cmVkIGFnYWluc3RcbkBAIC0xMDM1LDcgJiM0MzsxMTEzLDEyIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgc2xvdCB3aXRoIG5vIHNoYWRvdyBhbHJlYWR5IHJlYWRzIGJhY2sgYXMgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVzpcbiYjNDM7XHQgKiB0aGUgc3dhcCB0YWJsZSBtYXJrcyBhIHN3YXBwZWQgb3V0IHNsb3Qgd2l0aCB4YV9ta192YWx1ZSgwKSBhbmQgaG9sZHNcbiYjNDM7XHQgKiB0aGUgc2hhZG93LCB3aGVuIHRoZXJlIGlzIG9uZSwgaW4gdGhhdCBzYW1lIHZhbHVlLlxuJiM0MztcdCAqL1xuJiM0MztcdHhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTtcbiBcbiBcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpXG5AQCAtMTA1NSw3ICYjNDM7MTEzOCwxNSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFxuIG91dDpcbiBcdGlmIChyZXQpIHtcbi1cdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCYjMzk7cyBzaGFkb3cgYW5kIG5vdGhpbmdcbiYjNDM7XHRcdCAqIGhhcyBiZWVuIHBhcmtlZCBmb3IgaXQgeWV0LCBzbyByZXN0b3JlIGl0IGFzIHRoZSBmb2xpbyBsZWF2ZXNcbiYjNDM7XHRcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKHN3cGVudHJ5KSwgb2Zmc2V0KTtcbiYjNDM7XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcbiYjNDM7XHRcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuJiM0MztcdFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdH1cbiBcdGZvbGlvX3B1dChmb2xpbyk7XG5AQCAtMTQ5OCw2ICYjNDM7MTU4OSwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGVcbiYjNDM7XHQgKiBzd2FwIGNhY2hlLCBzbyByZWNsYWltIHdyaXRlcyBpdCBvdXQgYWdhaW4uIFdyaXRlYmFjayBhbHJlYWR5XG4mIzQzO1x0ICogZGVjaWRlZCB0aGlzIGRhdGEgYmVsb25ncyBvbiBkaXNrLCBzbyBzZW5kIGl0IHRoZXJlIGluc3RlYWQgb2ZcbiYjNDM7XHQgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvd1xuJiM0MztcdCAqIHBhcmtlZCBmb3IgdGhlIGJ1ZmZlciBpbiBwbGFjZSwgc28gaXQgaXMgc3RpbGwgcmVzdG9yZWQgaW50b1xuJiM0MztcdCAqIHRoZSBzbG90IG9uY2UgdGhlIGZvbGlvIGxlYXZlcyB0aGUgc3dhcCBjYWNoZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKCF6c3dhcF9lbmFibGVkKVxuIFx0XHRnb3RvIGNoZWNrX29sZDtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MmIzM0OywKICAgICYjMzQ7X19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQmIzM0OywKICAgICYjMzQ7c3dhcGluX3N5bmMmIzM0OywKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHpzd2FwIGFuZCBzd2FwIGNhY2hlIGxvZ2ljIHRvIHByb3Blcmx5IGhhbmRsZSB3b3JraW5nc2V0IHJlZmF1bHRzIGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNoZWNrIGlmIGEgZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyIGFuZCB0byBsb29rdXAgYW5kIGNsZWFyIHNoYWRvd3MsIGFuZCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBhbGxvY2F0aW9uIGFuZCBkZWxldGlvbiBwYXRocyB0byBwcmVzZXJ2ZSBhbmQgcmVzdG9yZSBzaGFkb3dzLiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2Ugd2l0aCBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMyODhhOTEwNTljZGRhNzYwNzc2MjgzMjNiNjkwMjM1YzNjODljNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxODo1MzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaAppbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC96c3dhcC5oCkBAIC0zNSw2ICYjNDM7MzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7CiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTsKIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTsKJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogI2Vsc2UKIAogc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTsKQEAgLTY5LDYgJiM0Mzs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi8KZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM4YjExNjUyMTJjOTQuLmMxOTE4ODdjMWZlZGEgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMzgsNiAmIzQzOzM4LDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7CiYjNDM7dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTsKIHZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiAvKiBtbS9mb2xpby5jICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGM2YTkyNDJkMWI1YmQuLjc3MTE5N2IzZmNjNWMgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00ODk0LDYgJiM0Mzs0ODk0LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJdW5zaWduZWQgbG9uZyBwYWdlX2lkeDsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiAJcHRlX3QgKnB0ZXA7CiYjNDM7CXZvaWQgKnNoYWRvdzsKIAogCWlmICghcHRlX3VubWFwX3NhbWUodm1mKSkKIAkJZ290byBvdXQ7CkBAIC01MDE4LDYgJiM0Mzs1MDE5LDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlnb3RvIG91dF9wYWdlOwogCX0KIAomIzQzOwlzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCS8qCiAJICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmCiAJICogZm9saW8tJmd0O2luZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA1OTk2NjVhM2Q2ZTdiLi4xZWY2Y2M3NjYwNWU1IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTIyNjYsNiAmIzQzOzIyNjYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMOwogCWludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyOwogCXBnb2ZmX3Qgb2Zmc2V0OwomIzQzOwl2b2lkICpzaGFkb3c7CiAKIAlWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTsKIAlpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTsKQEAgLTIzNzcsNiAmIzQzOzIzNzgsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAkgKi8KIAlhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pOwogCiYjNDM7CXNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJaWYgKHNobWVtX3Nob3VsZF9yZXBsYWNlX2ZvbGlvKGZvbGlvLCBnZnApKSB7CiAJCWVycm9yID0gc2htZW1fcmVwbGFjZV9mb2xpbygmYW1wO2ZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpOwogCQlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggOTBhNTUxYTg4ZGY2My4uODY3OWNiNjEyNjhlNSAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzEyLDkgJiM0MzszMTIsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwogLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqLwogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IGI3NmViM2Q4NzZmZDcuLmRmOWUwNDUyZjE5YjkgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTI0LDYgJiM0MzsyNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2htZW1fZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjdGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zd2FwX29wcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcF90YWJsZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcC5oJiMzNDsKQEAgLTI2MywxMiAmIzQzOzI2NCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJdW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDsKIAlib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJdm9pZCAqc2hhZG93X3BhcmtlZDsKIAogCVZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7CiAKJiM0MzsJLyoKJiM0MzsJICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCYjMzk7cyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlCiYjNDM7CSAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi4KJiM0MzsJICovCiYjNDM7CXNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93X3BhcmtlZCkKJiM0MzsJCXNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7CiYjNDM7CiAJc2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7CiAJY2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpOwogCWNpX2VuZCA9IGNpX3N0YXJ0ICYjNDM7IG5yX3BhZ2VzOwpAQCAtNDgzLDE5ICYjNDM7NDkzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCiAJLyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovCiAJbWVtY2cxX3N3YXBpbihmb2xpbyk7Ci0JaWYgKHNoYWRvdykKLQkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwogCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CiAKLQkvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqLwotCWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXJldHVybiBmb2xpbzsKIH0KIAogLyoqCi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgogICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3QKICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVybwpAQCAtNTA3LDEzICYjNDM7NTEzLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieQogICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLgogICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlcgomIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZQomIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy4KICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwCiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLgogICovCi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC02NDQsMTcgJiM0Mzs2NTQsMjcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LAogCQlwZ29mZl90IGlseCwgYm9vbCByZWFkYWhlYWQpCiB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKIAl9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTsKIAogCWlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXN3YXBfcmVhZF9mb2xpbyhjdHgsIGZvbGlvKTsKIAlpZiAocmVhZGFoZWFkKSB7CiAJCWZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pOwpAQCAtNjg1LDE3ICYjNDM7NzA1LDI3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsCiB7CiAJc3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXZvaWQgKnNoYWRvdyA9IE5VTEw7CiAKIAlkbyB7CiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oJmFtcDtjdHgsIGZvbGlvKTsKIAlzd2FwX3JlYWRfc3VibWl0KCZhbXA7Y3R4KTsKIAlyZXR1cm4gZm9saW87CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDczYTgxYjRhM2UxNjQuLjk5MDU3NTNiN2ExMGMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00OCw2ICYjNDM7NDgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZXdhbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwpAQCAtNzMzLDcgJiM0Mzs3MzQsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewogCQlzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tJmd0O3N3YXA7CiAKLQkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiYjNDM7CQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKIAkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwogCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCA3YWMyYjg4YzgwYWU1Li5lMjAzZDYzMWY2MWI4IDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC01MzYsMTYgJiM0Mzs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsCiAJcmV0dXJuIHJlZmF1bHRfZGlzdGFuY2UgJmx0Oz0gd29ya2luZ3NldF9zaXplOwogfQogCi0vKioKLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLgotICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uCi0gKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCi0gKgotICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5Ci0gKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5Ci0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLgotICovCi12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiYjNDM7c3RhdGljIHZvaWQgX193b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93LAomIzQzOwkJCQkgYm9vbCBscnVfbWFuYWdlZCkKIHsKIAlib29sIGZpbGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpAQCAtNTc3LDcgJiM0Mzs1NjksMTYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCWlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsICZhbXA7d29ya2luZ3NldCwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwogCi0JZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CS8qCiYjNDM7CSAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmUKJiM0MzsJICogZGV0ZXJtaW5lZCBoZXJlOiBzZXR0aW5nIHRoZSBmbGFnIHdvdWxkIHJhY2UgdGhlIGRyYWluIGFuZCBsZWF2ZSBpdAomIzQzOwkgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlCiYjNDM7CSAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby4KJiM0MzsJICovCiYjNDM7CWlmIChscnVfbWFuYWdlZCkKJiM0MzsJCWZvbGlvX2FjdGl2YXRlKGZvbGlvKTsKJiM0MzsJZWxzZQomIzQzOwkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiAJd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7CiAKQEAgLTU5MCw2ICYjNDM7NTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby4KJiM0MzsgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby4KJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCiYjNDM7ICoKJiM0MzsgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHkKJiM0MzsgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5CiYjNDM7ICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHMKJiM0MzsgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkIC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5CiYjNDM7ICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS4KJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpbyB0aGUgZXZpY3Rpb24gaXMgcmVmYXVsdGVkIGludG8uCiYjNDM7ICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLgomIzQzOyAqCiYjNDM7ICogTGlrZSB3b3JraW5nc2V0X3JlZmF1bHQoKSwgYnV0IGZvciBhIGZvbGlvIHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgYWRkZWQKJiM0MzsgKiB0byB0aGUgTFJVLCB3aGljaCBoYXMgdG8gYmUgYWN0aXZhdGVkIGJ5IG1vdmluZyBpdCBiZXR3ZWVuIHRoZSBsaXN0cwomIzQzOyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLgomIzQzOyAqCiYjNDM7ICogVGhlIGFjdGl2YXRpb24gaXMgYmVzdCBlZmZvcnQ6IGEgZm9saW8gc3RpbGwgc2l0dGluZyBpbiBhIHBlci1DUFUgTFJVCiYjNDM7ICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgYWxyZWFkeSBhZGRlZCB0byB0aGUgTFJVLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIHRydWUpOwomIzQzO30KJiM0MzsKIC8qKgogICogd29ya2luZ3NldF9hY3RpdmF0aW9uIC0gbm90ZSBhIHBhZ2UgYWN0aXZhdGlvbgogICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC4KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLmMxYTc4ZWRmYTBiODcgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtOTcyLDYgJiM0Mzs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiB3cml0ZWJhY2sgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMCkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj8KJiM0MzsgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKQomIzQzOyAqCiYjNDM7ICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkcwomIzQzOyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cKJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aAomIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgJiM0MzsgaSkpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbyYjMzk7cyBwYXJrZWQgc2hhZG93KHMpCiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KQomIzQzOyAqCiYjNDM7ICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbyYjMzk7cyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZQomIzQzOyAqIHpzd2FwIHRyZWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvdwomIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkCiYjNDM7ICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nCiYjNDM7ICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LgomIzQzOyAqLwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tJmd0O3N3YXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpOwomIzQzOwkJdm9pZCAqcGFya2VkID0geGFfbG9hZCh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpCiYjNDM7CQkJc2hhZG93ID0gcGFya2VkOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaGFkb3c7CiYjNDM7fQomIzQzOwogLyoKICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsCiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhCkBAIC05ODcsMTIgJiM0MzsxMDYwLDE0IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCQkJIHN3cF9lbnRyeV90IHN3cGVudHJ5KQogewomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwogCXN0cnVjdCB4YXJyYXkgKnRyZWU7CiAJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cGVudHJ5KTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7CiAJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpOwogCXN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTsKJiM0MzsJdm9pZCAqc2hhZG93OwogCWludCByZXQgPSAwOwogCiAJLyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi8KQEAgLTEwMDAsOSAmIzQzOzEwNzUsMTEgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAlpZiAoIXNpKQogCQlyZXR1cm4gLUVFWElTVDsKIAomIzQzOwlzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwZW50cnkpOwomIzQzOwogCW1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0JZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCi0JCQkJICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwomIzQzOwlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAomIzQzOwkJCQkJIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwogCXB1dF9zd2FwX2RldmljZShzaSk7CiAKIAkvKgpAQCAtMTAxNCw2ICYjNDM7MTA5MSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJICovCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAKIAkvKgogCSAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdApAQCAtMTAzNSw3ICYjNDM7MTExMywxMiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlnb3RvIG91dDsKIAl9CiAKLQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQpOwomIzQzOwkvKgomIzQzOwkgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6CiYjNDM7CSAqIHRoZSBzd2FwIHRhYmxlIG1hcmtzIGEgc3dhcHBlZCBvdXQgc2xvdCB3aXRoIHhhX21rX3ZhbHVlKDApIGFuZCBob2xkcwomIzQzOwkgKiB0aGUgc2hhZG93LCB3aGVuIHRoZXJlIGlzIG9uZSwgaW4gdGhhdCBzYW1lIHZhbHVlLgomIzQzOwkgKi8KJiM0MzsJeGFfc3RvcmUodHJlZSwgb2Zmc2V0LCBzaGFkb3csIEdGUF9LRVJORUwpOwogCiAJY291bnRfdm1fZXZlbnQoWlNXUFdCKTsKIAlpZiAoZW50cnktJmd0O29iamNnKQpAQCAtMTA1NSw3ICYjNDM7MTEzOCwxNSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCiBvdXQ6CiAJaWYgKHJldCkgewotCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGFsbG9jYXRpb24gYWJvdmUgb3Zlcndyb3RlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBhbmQgbm90aGluZwomIzQzOwkJICogaGFzIGJlZW4gcGFya2VkIGZvciBpdCB5ZXQsIHNvIHJlc3RvcmUgaXQgYXMgdGhlIGZvbGlvIGxlYXZlcwomIzQzOwkJICogdGhlIHN3YXAgY2FjaGUsIG9yIHRoZSBldmljdGlvbiBpdCByZWNvcmRzIGlzIGxvc3QuCiYjNDM7CQkgKi8KJiM0MzsJCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oc3dwZW50cnkpLCBvZmZzZXQpOwomIzQzOwkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3cGVudHJ5LCBzaGFkb3cpOwomIzQzOwkJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiYjNDM7CQlmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCQlmb2xpb191bmxvY2soZm9saW8pOwogCX0KIAlmb2xpb19wdXQoZm9saW8pOwpAQCAtMTQ5OCw2ICYjNDM7MTU4OSwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJVk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpOwogCVZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGUKJiM0MzsJICogc3dhcCBjYWNoZSwgc28gcmVjbGFpbSB3cml0ZXMgaXQgb3V0IGFnYWluLiBXcml0ZWJhY2sgYWxyZWFkeQomIzQzOwkgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZgomIzQzOwkgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvdwomIzQzOwkgKiBwYXJrZWQgZm9yIHRoZSBidWZmZXIgaW4gcGxhY2UsIHNvIGl0IGlzIHN0aWxsIHJlc3RvcmVkIGludG8KJiM0MzsJICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWlmICghenN3YXBfZW5hYmxlZCkKIAkJZ290byBjaGVja19vbGQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBac3dhcCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIGl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGFyZWFzOiB6c3dhcCwgdGhlIHN3YXAgY2FjaGUsIGFuZCBob3cgdGhlIHdvcmtpbmdzZXQgcmVmYXVsdHMuIFRoaXMgbG9va3MgbGlrZSBhIGZhaXJseSBzaWduaWZpY2FudCBtb2RpZmljYXRpb24gdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gR2l2ZW4gdGhlIHNjb3BlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVyZSYjMzk7cyBzb21lIHBvdGVudGlhbCBmb3IgZnVuY3Rpb25hbCBpbXBhY3QsIGFuZCBob25lc3RseSwgZnV6emluZyBpcyBnb2luZyB0byBiZSBlc3NlbnRpYWwgaGVyZS4KCkkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgYXJlYXMuIEZyb20gdGhlIGRpZmYsIEkgc2VlIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQ6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgX19zd2FwX2NhY2hlX2FsbG9jYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gLCBgc3dhcGluX3N5bmNgLCBgX19yZW1vdmVfbWFwcGluZ2AsIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGFuZCBgenN3YXBfc3RvcmVgLgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBmb2N1c2luZyBvbiB0aGUgbmV3IHN0dWZmLCBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLiBJIGNhbiBzZWUgZnJvbSB0aGUgZmlsZSBwYXRocyB0aGF0IHRoZXNlIGFyZSBib3RoIGRlZmluZWQgaW4gYG1tL3pzd2FwLmNgLCBhbmQgdGhleSYjMzk7cmUgYm90aCBnbG9iYWwuIE5leHQsIGxldCYjMzk7cyBsb29rIGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBgc3dhcGluX3N5bmNgLCBhbHNvIGluIHRoYXQgZmlsZS4gVGhlbiBgbW0vd29ya2luZ3NldC5jYCBpcyBnb2luZyB0byBjb250YWluIGB3b3JraW5nc2V0X3JlZmF1bHRgIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYC4gRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGB6c3dhcF9zdG9yZWAgaW4gYG1tL3pzd2FwLmNgLgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IGBkb19zd2FwX3BhZ2VgIGFuZCBgc2htZW1fc3dhcGluX2ZvbGlvYCBhcmUgaG90IHBhdGhzLCBzbyBpdCBtaWdodCBiZSB3aXNlIHRvIGJlIGV4dHJhIGNhcmVmdWwgdGhlcmUgZHVyaW5nIHRlc3RpbmcsIGFuZCBtYXliZSBhdm9pZCB0aGVtIGFzIGluaXRpYWwgZnV6emluZyB0YXJnZXRzLgoKT2J2aW91c2x5LCBgQ09ORklHX1pTV0FQYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoaXMgdG8gZXZlbiBjb21waWxlLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1NXQVBgIGlzIGFsc28gZW5hYmxlZC4KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB1c2Ugc29tZSB0YXJnZXRlZCB0b29scyB0byB2ZXJpZnkgdGhpcyBvbmUsIHNvIEkgd2lsbCBwcmVwYXJlIHRob3NlIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3pzd2FwLmg9Mzc9Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oOjM4OmJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zOS12b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTY5PXN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oLTczLVxuaW5jbHVkZS9saW51eC96c3dhcC5oOjc0OnN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNzUte1xuLS1cbm1tL3Ztc2Nhbi5jPTY4Mz1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtNzM3LVx0XHRpZiAocmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmM6NzM4Olx0XHQgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxubW0vdm1zY2FuLmMtNzM5LVx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4tLVxubW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtOTc4LS8qKlxubW0venN3YXAuYzo5Nzk6ICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/XG5tbS96c3dhcC5jLTk4MC0gKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKVxuLS1cbm1tL3pzd2FwLmMtOTg4LSAqL1xubW0venN3YXAuYzo5ODk6Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS96c3dhcC5jLTk5MC17XG4tLVxubW0venN3YXAuYz0xNTc5PWJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTE1OTktXHQgKi9cbm1tL3pzd2FwLmM6MTYwMDpcdGlmICh6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbm1tL3pzd2FwLmMtMTYwMS1cdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjYzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlOiBac3dhcCBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYXJvdW5kIGBDT05GSUdfWlNXQVBgLiBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgWnN3YXAgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbSwgcGFydGljdWxhcmx5IGl0cyByZXNwb25zaXZlbmVzcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGtub3cgaG93IHpzd2FwIGlzIGltcGFjdGluZyB0aGUgb3ZlcmFsbCBJL08gcHJvZmlsZS4gTXkgaW1tZWRpYXRlIG1lbnRhbCBjaGVja2xpc3QgaW5jbHVkZXM6IGlzIGl0IHNldCB0byAmIzM5O3kmIzM5OywgJiMzOTttJiMzOTssIG9yIHVuZGVmaW5lZD8gQSBzaW1wbGUgYGdyZXBgIG9yIGxvb2tpbmcgYXQgdGhlIGFwcHJvcHJpYXRlIGAuY29uZmlnYCBmaWxlIHdpbGwgcXVpY2tseSB0ZWxsIG1lLiBEZXBlbmRpbmcgb24gdGhlIHNldHRpbmcsIEkga25vdyBteSBuZXh0IHN0ZXBzIHdpbGwgY2hhbmdlLiBJZiBpdCYjMzk7cyBlbmFibGVkLCBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIHRoZSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMgbGlrZSBgenN3YXAubWF4X3Bvb2xfcGVyY2VudGAsIGFuZCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLCBhcyB0aG9zZSBoYXZlIGJpZyBlZmZlY3RzLiBJZiBpdCYjMzk7cyBkaXNhYmxlZCwgSSYjMzk7bGwgY29uc2lkZXIgd2h5IOKAkyBpcyBpdCBhIGRlbGliZXJhdGUgY2hvaWNlIHRvIGZhdm9yIHN3YXAgdG8gZGlzaywgb3IgbWF5YmUgdGhlcmUgYXJlIHJlc291cmNlIGxpbWl0YXRpb25zIHRoYXQgcHJlY2x1ZGUgWnN3YXAmIzM5O3MgdXNhZ2U/IEkmIzM5O2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIHdvcmtsb2FkIGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBoYXJkd2FyZSBpbiBvcmRlciB0byBldmFsdWF0ZSBpdHMgYXBwcm9wcmlhdGVuZXNzLiBJIG5lZWQgdG8gaGF2ZSBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB6c3dhcCBpbiBvcmRlciB0byBlbnN1cmUgdGhlIGJlc3QgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxuLS1cbm1tL0tjb25maWctMjEtXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxubW0vS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctNDQtXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTQ2LVx0Ym9vbCBcJiMzNDtTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTc2LVxubW0vS2NvbmZpZzo3Nzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0RFRkxBVEVcbm1tL0tjb25maWctNzgtXHRib29sIFwmIzM0O0RlZmxhdGVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyLVxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xubW0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OC1cbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcbm1tL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQtXG5tbS9LY29uZmlnOjk1OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0XG5tbS9LY29uZmlnLTk2LVx0Ym9vbCBcJiMzNDtMWjRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwMC1cbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcbm1tL0tjb25maWctMTAyLVx0Ym9vbCBcJiMzNDtMWjRIQ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTA2LVxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXG5tbS9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxubW0vS2NvbmZpZy0xMTMtXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMDYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFpTV0FQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtaU1dBUCwmIzM0OyByaWdodD8gR290dGEgc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBtbS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgbGl2ZSwgc28gaXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgdGhlICYjMzQ7WlNXQVAmIzM0OyBvcHRpb24mIzM5O3MgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHBvdGVudGlhbGx5IGFueSBhc3NvY2lhdGVkIHN1Yi1vcHRpb25zIG9yIGhlbHAgdGV4dC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc3RhdGU6IGlzIGl0IGVuYWJsZWQgYnkgZGVmYXVsdCwgZG9lcyBpdCByZXF1aXJlIG90aGVyIGZlYXR1cmVzIHRvIGJlIGVuYWJsZWQsIGFuZCBhcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zPyBVbmRlcnN0YW5kaW5nIHRoZSBgS2NvbmZpZ2AgZW50cnkgaXMgY3J1Y2lhbCBiZWZvcmUgSSBzdGFydCBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyIHdpdGggdGhlIGN1cnJlbnQga2VybmVsJiMzOTtzIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjI6XHRjb25maWcgWlNXQVBcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7Q29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1wmIzM0O1xuICAyNDpcdFx0ZGVwZW5kcyBvbiBTV0FQXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDI2Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcbiAgMjk6XHRcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXG4gIDMwOlx0XHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXG4gIDMxOlx0XHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxuICAzMjpcdFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXG4gIDMzOlx0XHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG4gIDM2Olx0XHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIFpTV0FQXG4gIDM4Olx0XHRoZWxwXG4gIDM5Olx0XHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcbiAgNDA6XHRcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXG4gIDQxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgWlNXQVAgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgYFpTV0FQYCB0aGluZy4gSXQgY2xlYXJseSByZWxpZXMgb24gYFNXQVBgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGluY2x1ZGUgYm90aCBgWlNXQVBgIGFuZCBgU1dBUGAgaW4gYEVuYWJsZUNvbmZpZ3NgLiBBbmQsIHRoaW5raW5nIGFib3V0IGEgZ29vZCB1c2VyIGV4cGVyaWVuY2UsIEkmIzM5O2xsIGxpa2VseSBhZGQgYFpTV0FQX0RFRkFVTFRfT05gIGFzIHdlbGwuIEVuYWJsaW5nIGl0IGJ5IGRlZmF1bHQganVzdCBmZWVscyByaWdodC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBwYXkgYXR0ZW50aW9uIHRvLiBGcm9tIG15IHByZXZpb3VzIGV4cGVyaWVuY2UgYW5kIGtub3dsZWRnZSwgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgY29yZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHNjcnV0aW5pemUgY2xvc2VseTogYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBhbmQgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAuCgpJ4oCZbGwgc3RhcnQgd2l0aCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGFjY2Vzc2libGUgYW5kIGV4cG9ydGVkIGFzIGl0IGlzIGNydWNpYWwgaW4gdGhlIG92ZXJhbGwgcHJvY2Vzcy4gVGltZSB0byBsb29rIGludG8gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGNvbmZpcm0gaXRzIHZpc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MzE0PXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmg6MzE1OnN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9zd2FwLmgtMzE2LVx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NDE5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MDMtLyoqXG5tbS9zd2FwX3N0YXRlLmM6NTA0OiAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtNTA1LSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUyMy0gKi9cbm1tL3N3YXBfc3RhdGUuYzo1MjQ6c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxubW0vc3dhcF9zdGF0ZS5jLTUyNS1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTY1Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY2Ny1cdFx0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTtcbm1tL3N3YXBfc3RhdGUuYzo2Njg6XHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbm1tL3N3YXBfc3RhdGUuYy02NjktXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NzAzPXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTcxOC1cdFx0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTtcbm1tL3N3YXBfc3RhdGUuYzo3MTk6XHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xubW0vc3dhcF9zdGF0ZS5jLTcyMC1cdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuLS1cbm1tL3pzd2FwLmM9MTA2MD1zdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuLS1cbm1tL3pzd2FwLmMtMTA4MC1cdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5tbS96c3dhcC5jOjEwODE6XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxubW0venN3YXAuYy0xMDgyLVx0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzQyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2FwIENhY2hlIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgcGFnZXMgZ2V0IGludG8gdGhlIHN3YXAgY2FjaGUgYW5kIHdoZXJlIHRoZSBhbGxvY2F0aW9uIGhhcHBlbnMuIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIHRoZSBjYWxsIHNpdGVzIGFyZSBhIG1peCBvZiB0aGluZ3MuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIHN0YW5kYXJkIHN3YXAtaW4gcGF0aC4gSSYjMzk7bSBhbHNvIHNlZWluZyBpdCYjMzk7cyB1c2VkIGJ5IGBzd2FwaW5fc3luY2AsIHdoaWNoIEkga25vdyBpcyBhIGdsb2JhbCBmdW5jdGlvbiwgaW5kaWNhdGluZyB0aGlzIGlzIGEgc3luY2hyb25pemF0aW9uIHBvaW50IGZvciBzd2FwIG9wZXJhdGlvbnMgYWNyb3NzIHRoZSBzeXN0ZW0uIEFuZCB0aGVyZSYjMzk7cyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgc3VnZ2VzdGluZyB0aGlzIGZ1bmN0aW9uIGhhcyByZWxldmFuY2UgaW4gY29tcHJlc3NlZCBzd2FwIGFzIHdlbGwuCgpHaXZlbiB0aGUgcG90ZW50aWFsIHN5c3RlbS13aWRlIGltcGxpY2F0aW9ucyBvZiBgc3dhcGluX3N5bmNgLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuIEkgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gZGlnIGludG8gdGhlIHdvcmtpbmdzZXQgbWFuYWdlbWVudC4gVGhhdCBpcywgSSBzaG91bGQgY2hlY2sgaG93IGB3b3JraW5nc2V0X3JlZmF1bHRgIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCBpbnRlcmFjdCB3aXRoIHRoaXMgYWxsb2NhdGlvbiBwYXRoLiBUaGVzZSBhcmUgYWxzbyBnbG9iYWwgZnVuY3Rpb25zLCB3aGljaCBtZWFucyB0aGVpciBiZWhhdmlvciBpcyByZWxldmFudCB0byB0aGUgc3lzdGVtJiMzOTtzIG92ZXJhbGwgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzd2FwcGluZyBpbXBhY3RzIHRoZSB3b3JraW5nc2V0IGFuZCBob3cgdGhlIExSVSBpcyBtYW5hZ2VkIGluIHJlbGF0aW9uIHRvIHRoaXMuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0PTE0MjY9VGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTYzNy1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoxNjM4Olx0ICB3b3JraW5nc2V0X3JlZmF1bHRfYW5vblxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTE2MzktXHRcdE51bWJlciBvZiByZWZhdWx0cyBvZiBwcmV2aW91c2x5IGV2aWN0ZWQgYW5vbnltb3VzIHBhZ2VzLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTE2NDAtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3Q6MTY0MTpcdCAgd29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xNjQyLVx0XHROdW1iZXIgb2YgcmVmYXVsdHMgb2YgcHJldmlvdXNseSBldmljdGVkIGZpbGUgcGFnZXMuXG4tLVxubW0vZmlsZW1hcC5jPTk1NT1pbnQgZmlsZW1hcF9hZGRfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZmlsZW1hcC5jLTk4Ni1cdFx0aWYgKCEoZ2ZwIFx1MDAyNiBfX0dGUF9XUklURSkgXHUwMDI2XHUwMDI2IHNoYWRvdylcbm1tL2ZpbGVtYXAuYzo5ODc6XHRcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xubW0vZmlsZW1hcC5jLTk4OC1cdFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4tLVxubW0vaW50ZXJuYWwuaD0zOD12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9pbnRlcm5hbC5oLTM5LVx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG5tbS9pbnRlcm5hbC5oOjQwOnZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG5tbS9pbnRlcm5hbC5oOjQxOnZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG5tbS9pbnRlcm5hbC5oLTQyLXZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMTkzPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMjAyLVx0XCYjMzQ7d3JpdGViYWNrXCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjIyMDM6XHRcJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfYW5vblwmIzM0Oyxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjA0Olx0XCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmMtMjIwNS0jaWZkZWYgQ09ORklHX1NXQVBcbi0tXG5tbS9tZW1jb250cm9sLmM9MTU5MT1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9zdGF0IG1lbW9yeV9zdGF0c1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xNjI5LVx0LyogVGhlIG1lbW9yeSBldmVudHMgKi9cbm1tL21lbWNvbnRyb2wuYzoxNjMwOlx0eyBcJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfYW5vblwmIzM0OyxcdFdPUktJTkdTRVRfUkVGQVVMVF9BTk9OXHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTYzMTpcdHsgXCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcJiMzNDssXHRXT1JLSU5HU0VUX1JFRkFVTFRfRklMRVx0XHR9LFxubW0vbWVtY29udHJvbC5jLTE2MzItXHR7IFwmIzM0O3dvcmtpbmdzZXRfYWN0aXZhdGVfYW5vblwmIzM0OyxcdFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTlx0fSxcbi0tXG5tbS9tZW1vcnkuYz00ODgxPXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUwMjMtXHRpZiAoc2hhZG93KVxubW0vbWVtb3J5LmM6NTAyNDpcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xubW0vbWVtb3J5LmMtNTAyNS1cbi0tXG5tbS9zaG1lbS5jPTIyNTQ9c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTIzODItXHRpZiAoc2hhZG93KVxubW0vc2htZW0uYzoyMzgzOlx0XHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XG5tbS9zaG1lbS5jLTIzODQtXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTY1Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY3NC1cdGlmIChzaGFkb3cpXG5tbS9zd2FwX3N0YXRlLmM6Njc1Olx0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG5tbS9zd2FwX3N0YXRlLmMtNjc2LVxuLS1cbm1tL3N3YXBfc3RhdGUuYz03MDM9c3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNzI1LVx0aWYgKHNoYWRvdylcbm1tL3N3YXBfc3RhdGUuYzo3MjY6XHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbm1tL3N3YXBfc3RhdGUuYy03MjctXG4tLVxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xMjQzLVx0W0koV09SS0lOR1NFVF9OT0RFUyldXHRcdFx0PSBcJiMzNDt3b3JraW5nc2V0X25vZGVzXCYjMzQ7LFxubW0vdm1zdGF0LmM6MTI0NDpcdFtJKFdPUktJTkdTRVRfUkVGQVVMVF9BTk9OKV1cdFx0PSBcJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfYW5vblwmIzM0Oyxcbm1tL3Ztc3RhdC5jOjEyNDU6XHRbSShXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSldXHRcdD0gXCYjMzQ7d29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcJiMzNDssXG5tbS92bXN0YXQuYy0xMjQ2LVx0W0koV09SS0lOR1NFVF9BQ1RJVkFURV9BTk9OKV1cdFx0PSBcJiMzNDt3b3JraW5nc2V0X2FjdGl2YXRlX2Fub25cJiMzNDssXG4tLVxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTUzOC1cbm1tL3dvcmtpbmdzZXQuYzo1Mzk6c3RhdGljIHZvaWQgX193b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93LFxubW0vd29ya2luZ3NldC5jLTU0MC1cdFx0XHRcdCBib29sIGxydV9tYW5hZ2VkKVxuLS1cbm1tL3dvcmtpbmdzZXQuYy01OTQtLyoqXG5tbS93b3JraW5nc2V0LmM6NTk1OiAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxubW0vd29ya2luZ3NldC5jLTU5Ni0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbi0tXG5tbS93b3JraW5nc2V0LmMtNjA1LSAqL1xubW0vd29ya2luZ3NldC5jOjYwNjp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNjA3LXtcbm1tL3dvcmtpbmdzZXQuYzo2MDg6XHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG5tbS93b3JraW5nc2V0LmMtNjA5LX1cbi0tXG5tbS93b3JraW5nc2V0LmMtNjExLS8qKlxubW0vd29ya2luZ3NldC5jOjYxMjogKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcbm1tL3dvcmtpbmdzZXQuYy02MTMtICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS5cbi0tXG5tbS93b3JraW5nc2V0LmMtNjE2LSAqXG5tbS93b3JraW5nc2V0LmM6NjE3OiAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG5tbS93b3JraW5nc2V0LmMtNjE4LSAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXG4tLVxubW0vd29ya2luZ3NldC5jLTYyNS0gKi9cbm1tL3dvcmtpbmdzZXQuYzo2MjY6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxubW0vd29ya2luZ3NldC5jLTYyNy17XG5tbS93b3JraW5nc2V0LmM6NjI4Olx0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XG5tbS93b3JraW5nc2V0LmMtNjI5LX1cbi0tXG5tbS96c3dhcC5jPTk4OT1ib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTEwMTgtICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvXG5tbS96c3dhcC5jOjEwMTk6ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nXG5tbS96c3dhcC5jLTEwMjAtICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA1MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IG5vdGljaW5nIGEgcGF0dGVybi4gU2V2ZXJhbCBmdW5jdGlvbnMg4oCTIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgIOKAkyBhcmUgYWxsIGdsb2JhbCBpbiBzY29wZS4gVGhpcyByYWlzZXMgYSBmZXcgaW1tZWRpYXRlIHF1ZXN0aW9ucyBpbiBteSBtaW5kLCBtb3N0bHkgYWJvdXQgdGhlaXIgaW50ZW5kZWQgdXNhZ2UgYW5kIHdoZXRoZXIgdGhleSByZXByZXNlbnQgYSBnb29kIGVuY2Fwc3VsYXRpb24gb2YgZnVuY3Rpb24uIE15IG5leHQgdGhvdWdodCBpcywgbGV0JiMzOTtzIHplcm8gaW4gb24gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMga2V5IGZ1bmN0aW9uIGlzIGJlaW5nIGV4cG9ydGVkLCB3aGljaCBjb3VsZCBnaXZlIG1lIG1vcmUgaW5zaWdodCBpbnRvIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM4MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyBTY29wZSBhbmQgU3luY2hyb25pemF0aW9uKioKCkhtbSwgaW50ZXJlc3RpbmcuIFRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCBpc24mIzM5O3QgKmV4cGxpY2l0bHkqIGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgY2xlYXJseSBhY2Nlc3NpYmxlIGdsb2JhbGx5LiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGNvbmNlcm4sIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBJbXBsaWNpdCBnbG9iYWwgdmFyaWFibGVzIGNhbiBiZSB0cmlja3kgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgZGVidWdnaW5nLCBlc3BlY2lhbGx5IGluIGEgbGFyZ2UgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCYjMzk7cyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LiBJcyB0aGlzIGJ5IGRlc2lnbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgb3IgYSBsZWdhY3kgYXJ0aWZhY3Q/IElzIGl0IGEgcG90ZW50aWFsIHNvdXJjZSBvZiB1bmludGVuZGVkIHNpZGUgZWZmZWN0cz8KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3dhcGluX3N5bmNgIGZ1bmN0aW9uLiBJdCBzZWVtcyBjcml0aWNhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IGZ1bmN0aW9uLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc3luY2hyb25pemF0aW9uIG9yIGRhdGEgdHJhbnNmZXIgbG9naWMgcmVsYXRlZCB0byB0aGlzIGdsb2JhbCB2YXJpYWJsZSBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBjb2hlcmVuY2UgbW9kZWwgaGVyZS4gVW5kZXJzdGFuZGluZyB0aGlzIHJvdXRpbmUgd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgZGVzaWduIGNob2ljZXMgc3Vycm91bmRpbmcgdGhlIHZhcmlhYmxlJiMzOTtzIHNjb3BlLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBjb250ZXh0IHN3aXRjaGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnN3YXBpbl9zeW5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NjUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYHpzd2FwX3N0b3JlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIG1lbnRpb24gb2YgYHpzd2FwX3N0b3JlYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGxpa2VseSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBleGFtaW5hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSwgaG93IGl0JiMzOTtzIGJlaGF2aW5nLCBhbmQgd2hhdCBzcGVjaWZpYyBhc3BlY3RzIHJlcXVpcmUgdGhlIG1vc3Qgc2NydXRpbnksIGdpdmVuIHRoZSBjdXJyZW50IGlzc3VlIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qenN3YXBfc3RvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgzMAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgd29ya2luZ3NldF9yZWZhdWx0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBjaGVjayBgd29ya2luZ3NldF9yZWZhdWx0YC4mIzM0OyBJdCYjMzk7cyBhIGtleSBtZXRyaWMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBhbnkgcG90ZW50aWFsIGFub21hbGllcy4gTXkgbWluZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGF0IGNvdWxkIGJlIGNhdXNpbmcgZmx1Y3R1YXRpb25zLCB3aGF0IHRoZSB0eXBpY2FsIGJhc2VsaW5lcyBsb29rIGxpa2UgaW4gdGhpcyBlbnZpcm9ubWVudCwgYW5kIGFueSBwb3RlbnRpYWwgY29ycmVsYXRpb25zIHdpdGggb3RoZXIgcGVyZm9ybWFuY2UgaW5kaWNhdG9ycyBJJiMzOTttIHRyYWNraW5nLiBJcyBpdCBoaWdoZXIgdGhhbiBleHBlY3RlZD8gTG93ZXI/IEFuZCBjcml0aWNhbGx5LCB3aGF0IGFyZSB0aGUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gZWZmZWN0cywgb3IgdGhlIGxpa2VseSByb290IGNhdXNlcyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIGl0PyBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKndvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDQ2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBvYnZpb3VzbHksIGJ1dCB3aGF0IHNwZWNpZmljYWxseSBhbSBJIHRyeWluZyB0byBwYXJzZSBoZXJlPyBJdCYjMzk7cyBsaWtlbHkgYSBib29sZWFuIGZ1bmN0aW9uIG9yIG1hY3JvLCBhbmQgdGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0cyBwdXJwb3NlIGlzIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIGZvbGlvLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHpzd2FwYCwgcmVwcmVzZW50cyBhIHdyaXRlYmFjayBidWZmZXIuCgpTbywgdGhlIGltcGxpY2l0IHF1ZXN0aW9uIGluIG15IGhlYWQgaXM6ICppcyB0aGlzIGZvbGlvIGN1cnJlbnRseSB1bmRlcmdvaW5nIGEgd3JpdGViYWNrIG9wZXJhdGlvbiwgYW5kIHRoZXJlZm9yZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBzdWNoIHdpdGhpbiB6c3dhcCYjMzk7cyBtYW5hZ2VtZW50IHJvdXRpbmVzPyogVGhpcyBkaXN0aW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzLiBJZiBpdCYjMzk7cyBhIHdyaXRlYmFjayBidWZmZXIsIGNlcnRhaW4gb3B0aW1pemF0aW9ucyBhbmQgY29uc2lkZXJhdGlvbnMgcHJvYmFibHkgYXBwbHksIHZlcnN1cyBhIGZvbGlvIHNpbXBseSBoZWxkIHdpdGhpbiBhIHpzd2FwIGNhY2hlIHdhaXRpbmcgdG8gYmUgcGFnZWQgb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHdyaXRlYmFjayBvcGVyYXRpb25zIGNhbiBiZSBhc3luY2hyb25vdXMgYW5kIHRoZWlyIHN0YXR1cyBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoaXMgcmV0dXJucyB0cnVlLCB3aGF0IHRoYXQgaW1wbGllcyBhYm91dCB0aGUgZm9saW8mIzM5O3Mgc3RhdGUsIGFuZCBob3cgYHpzd2FwYCBsZXZlcmFnZXMgdGhpcyBpbmZvcm1hdGlvbi4gRnJvbSBoZXJlLCBJIGNhbiBleGFtaW5lIGl0cyBpbXBsZW1lbnRhdGlvbiwgbG9vayBhdCBpdHMgY2FsbGVycywgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBjb2RlIHVzZXMgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBrZXJuZWwgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBTeXprYWxsZXIgVGFyZ2V0cyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgZm9yIGFyZWFzIHRoYXQgbWlnaHQgYmUgZXhwbG9pdGFibGUgdGhyb3VnaCBzeXprYWxsZXIuIFRoZSBrZXkgaGVyZSBpcyBnbG9iYWwgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBzcGVjaWZpY2FsbHkgJiMzNDtleHBvcnRlZCYjMzQ7IGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZSwgYnV0IGFyZSBzdGlsbCBnbG9iYWxseSB2aXNpYmxlIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzIGZvciBzeXprYWxsZXIgZnV6emluZy4KCk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHpzd2FwX3N0b3JlYCBpbiBgbW0venN3YXAuY2AuIFpzd2FwLCB3aXRoIGl0cyBtZW1vcnkgY29tcHJlc3Npb24gYW5kIHN3YXBwaW5nIGZ1bmN0aW9uYWxpdHksIGlzIGNvbXBsZXggYW5kIGluaGVyZW50bHkgaW52b2x2ZXMgaW50ZXJhY3Rpb24gd2l0aCBhIGxvdCBvZiBvdGhlciBzdWJzeXN0ZW1zLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmaW5kaW5nIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUsIGJlaGF2aW9yIHRocm91Z2ggZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzd2FwX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvbWVtaW5mby5jPTM0PXN0YXRpYyBpbnQgbWVtaW5mb19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmZzL3Byb2MvbWVtaW5mby5jLTkzLVx0c2VxX3ByaW50ZihtLCAgXCYjMzQ7WnN3YXBwZWQ6ICAgICAgICU4bHUga0JcXG5cJiMzNDssXG5mcy9wcm9jL21lbWluZm8uYzo5NDpcdFx0ICAgKHVuc2lnbmVkIGxvbmcpYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ6c3dhcF9zdG9yZWRfcGFnZXMpIFx1MDAzY1x1MDAzY1xuZnMvcHJvYy9tZW1pbmZvLmMtOTUtXHRcdCAgIChQQUdFX1NISUZUIC0gMTApKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9OD1zdHJ1Y3QgbHJ1dmVjO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTktXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6MTA6ZXh0ZXJuIGF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX3BhZ2VzO1xuaW5jbHVkZS9saW51eC96c3dhcC5oLTExLVxuLS1cbmluY2x1ZGUvbGludXgvenN3YXAuaD0yNz11bnNpZ25lZCBsb25nIHpzd2FwX3RvdGFsX3BhZ2VzKHZvaWQpO1xuaW5jbHVkZS9saW51eC96c3dhcC5oOjI4OmJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtMjktaW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC96c3dhcC5oPTQyPXN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNDMtXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6NDQ6c3RhdGljIGlubGluZSBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNDUte1xuLS1cbm1tL3BhZ2VfaW8uYz0yMDQ9aW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vcGFnZV9pby5jLTIzNy1cbm1tL3BhZ2VfaW8uYzoyMzg6XHRpZiAoenN3YXBfc3RvcmUoZm9saW8pKSB7XG5tbS9wYWdlX2lvLmMtMjM5LVx0XHRjb3VudF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLCBNVEhQX1NUQVRfWlNXUE9VVCk7XG4tLVxubW0venN3YXAuYy00Ni0vKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cbm1tL3pzd2FwLmM6NDc6YXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xubW0venN3YXAuYy00OC0vKiBUaGUgbnVtYmVyIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgaW4genN3YXAgKi9cbm1tL3pzd2FwLmM6NDk6c3RhdGljIGF0b21pY19sb25nX3QgenN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcbm1tL3pzd2FwLmMtNTAtXG4tLVxubW0venN3YXAuYz03NjU9c3RhdGljIHZvaWQgenN3YXBfZW50cnlfZnJlZShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuLS1cbm1tL3pzd2FwLmMtNzc0LVx0aWYgKGVudHJ5LVx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXG5tbS96c3dhcC5jOjc3NTpcdFx0YXRvbWljX2xvbmdfZGVjKFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XG5tbS96c3dhcC5jLTc3Ni1cdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xubW0venN3YXAuYzo3Nzc6XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcbm1tL3pzd2FwLmMtNzc4LX1cbi0tXG5tbS96c3dhcC5jPTEwMjI9dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy0xMDU0LSAqIHRvIHRoZSBzd2FwIGRldmljZS4gIFdlIGFyZSBiYXNpY2FsbHkgcmVzdW1pbmcgdGhlIHNhbWUgc3dhcFxubW0venN3YXAuYzoxMDU1OiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcbm1tL3pzd2FwLmMtMTA1Ni0gKiBpbiB0aGUgZmlyc3QgcGxhY2UuICBBZnRlciB0aGUgZm9saW8gaGFzIGJlZW4gZGVjb21wcmVzc2VkIGludG9cbi0tXG5tbS96c3dhcC5jPTEyODM9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTEzMTctXHRcdG5yX2JhY2tpbmcgPSB6c3dhcF90b3RhbF9wYWdlcygpO1xubW0venN3YXAuYzoxMzE4Olx0XHRucl9zdG9yZWQgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG5tbS96c3dhcC5jLTEzMTktXHR9XG4tLVxubW0venN3YXAuYz0xNDA4PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbm1tL3pzd2FwLmMtMTQ5OC1cbm1tL3pzd2FwLmM6MTQ5OTpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0venN3YXAuYy0xNTAwLVx0XHRcdCAgICAgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuLS1cbm1tL3pzd2FwLmMtMTUzNy1cdCAqIG5vIGZ1cnRoZXIgcG9zc2liaWxpdHkgb2YgZmFpbHVyZS4gR3JhYiByZWZzIHRvIHRoZSBwb29sIGFuZCBvYmpjZyxcbm1tL3pzd2FwLmM6MTUzODpcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxubW0venN3YXAuYy0xNTM5LVx0ICogVGhlIG9wcG9zaXRlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQgYnkgenN3YXBfZW50cnlfZnJlZSgpXG4tLVxubW0venN3YXAuYy0xNTQ2LVx0fVxubW0venN3YXAuYzoxNTQ3Olx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG5tbS96c3dhcC5jLTE1NDgtXHRpZiAoZW50cnktXHUwMDNlbGVuZ3RoID09IFBBR0VfU0laRSlcbm1tL3pzd2FwLmM6MTU0OTpcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XG5tbS96c3dhcC5jLTE1NTAtXG4tLVxubW0venN3YXAuYy0xNTc4LVxubW0venN3YXAuYzoxNTc5OmJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtMTU4MC17XG4tLVxubW0venN3YXAuYy0xNjM0LVxubW0venN3YXAuYzoxNjM1Olx0XHRpZiAoIXpzd2FwX3N0b3JlX3BhZ2UocGFnZSwgb2JqY2csIHBvb2wpKVxubW0venN3YXAuYy0xNjM2LVx0XHRcdGdvdG8gcHV0X3Bvb2w7XG4tLVxubW0venN3YXAuYz0xODE1PXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxubW0venN3YXAuYy0xODE2LXtcbm1tL3pzd2FwLmM6MTgxNzpcdCp2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcyk7XG5tbS96c3dhcC5jLTE4MTgtXHRyZXR1cm4gMDtcbi0tXG5tbS96c3dhcC5jPTE4MjI9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXG5tbS96c3dhcC5jLTE4MjMte1xubW0venN3YXAuYzoxODI0Olx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2enN3YXBfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKTtcbm1tL3pzd2FwLmMtMTgyNS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmM9NTI9c3RhdGljIGludCByZWFkX21pbl9mcmVlX2tiKHNpemVfdCAqdmFsdWUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYy01Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmM6NTc6c3RhdGljIGludCBnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKHNpemVfdCAqdmFsdWUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jLTU4LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jPTU1OD1zdGF0aWMgaW50IHRlc3Rfbm9fa21lbV9ieXBhc3MoY29uc3QgY2hhciAqcm9vdClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jLTYyNC1cdFx0ZnJlZSh0cmlnZ2VyX2FsbG9jYXRpb24pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYzo2MjU6XHRcdGlmIChnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKFx1MDAyNnN0b3JlZF9wYWdlcykpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jLTYyNi1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NjEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipUcmFjaW5nIHRoZSBTd2FwIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIHN3YXAgaW1wbGVtZW50YXRpb24gaGVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYHpzd2FwX3N0b3JlYCBpcyBhIGdsb2JhbGx5IGFjY2Vzc2libGUgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBzd2FwX3dyaXRlb3V0YC4gT24gdGhlIG90aGVyIGhhbmQsIGBzd2FwaW5fc3luY2AgaXMgYWxzbyBnbG9iYWwsIGFuZCBpdHMgaW52b2NhdGlvbiBpcyB0cmlnZ2VyZWQgdGhyb3VnaCBgZG9fc3dhcF9wYWdlYCDigJMgc3BlY2lmaWNhbGx5LCB0aHJvdWdoIHRoYXQgYHN3YXBpbl9yZWFkYWhlYWRgIHBhdGguIE5vdywgSSB3YW50IHRvIGRyaWxsIGRvd24gZnVydGhlciBpbnRvIHRoZSBtZWNoYW5pY3Mgb2YgYHN3YXBpbl9zeW5jYC4gVGltZSB0byBjaGVjayBvdXQgYG1tL3N3YXBfc3RhdGUuY2AgZm9yIHRoZSBkZXRhaWxlZCBsb2dpYyBvZiB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwaW5fc3luYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz00ODgxPXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ5NzAtXHRcdGlmIChkYXRhX3JhY2Uoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykpXG5tbS9tZW1vcnkuYzo0OTcxOlx0XHRcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxubW0vbWVtb3J5LmMtNDk3Mi1cdFx0XHRcdFx0ICAgIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHZtZikgfCBCSVQoMCksXG4tLVxubW0vc2htZW0uYz0yMDQzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBfYWxsb2NfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9zaG1lbS5jLTIwNTctXHRtcG9sID0gc2htZW1fZ2V0X3Bnb2ZmX3BvbGljeShpbmZvLCBpbmRleCwgb3JkZXIsIFx1MDAyNmlseCk7XG5tbS9zaG1lbS5jOjIwNTg6XHRmb2xpbyA9IHN3YXBpbl9zeW5jKGVudHJ5LCBnZnAsIEJJVChvcmRlciksIHZtZiwgbXBvbCwgaWx4KTtcbm1tL3NobWVtLmMtMjA1OS1cdG1wb2xfY29uZF9wdXQobXBvbCk7XG4tLVxubW0vc3dhcC5oPTMzMj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsXG5tbS9zd2FwLmgtMzMzLVx0XHRzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5tbS9zd2FwLmg6MzM0OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxubW0vc3dhcC5oLTMzNS1cdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuLS1cbm1tL3N3YXAuaD00MDg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3Qgc3dwLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwLmgtNDEzLVxubW0vc3dhcC5oOjQxNDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoXG5tbS9zd2FwLmgtNDE1LVx0c3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz02NTI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxuLS1cbm1tL3N3YXBfc3RhdGUuYy02ODctLyoqXG5tbS9zd2FwX3N0YXRlLmM6Njg4OiAqIHN3YXBpbl9zeW5jIC0gc3dhcC1pbiBvbmUgb3IgbXVsdGlwbGUgZW50cmllcyBza2lwcGluZyByZWFkYWhlYWQuXG5tbS9zd2FwX3N0YXRlLmMtNjg5LSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuLS1cbm1tL3N3YXBfc3RhdGUuYy03MDItICovXG5tbS9zd2FwX3N0YXRlLmM6NzAzOnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG5tbS9zd2FwX3N0YXRlLmMtNzA0LVx0XHRcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0MTIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE1vZGlmaWVkIFN3YXAgYW5kIFpzd2FwIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gc3dhcCBhbmQgenN3YXAsIHNwZWNpZmljYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHdvcmtpbmdzZXRzIGFuZCB0aGUgc3dhcCBjYWNoZS4KCkluaXRpYWxseSwgSSBpZGVudGlmaWVkIHNldmVyYWwgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCBmb2N1cyBwb2ludHM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBvZiB0aGUgbW9kaWZpZWQgbG9naWMuCgpJJiMzOTt2ZSBub3RlZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgc3dhcGluX3N5bmNgLCBgenN3YXBfc3RvcmVgLCBhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgKGZvcm1lcmx5IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCkuIEFsc28sIGB3b3JraW5nc2V0X3JlZmF1bHRgIGhhcyBiZWVuIGNoYW5nZWQuIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgLCBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhcmUgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnMuCgpOb3csIEkmIzM5O20gY2hlY2tpbmcgd2hpY2ggb2YgdGhlc2UgYXJlIHN0YXRpYywgYmVjYXVzZSBJIGtub3cgdGhhdCBpbXBhY3RzIGZ1enppbmcuIFNvLCBJIGNvbmZpcm1lZCB0aGF0IG5vbmUgb2YgdGhlIGNhbmRpZGF0ZSBmdW5jdGlvbnM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgIGFyZSBzdGF0aWMuIFRoZXJlZm9yZSwgdGhleSBhcmUgYWxsIHN1aXRhYmxlIGZvciBpbmNsdXNpb24gaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LgoKSSBoYWQgdG8gcmVtb3ZlIGBkb19zd2FwX3BhZ2VgIGFuZCBgc2htZW1fc3dhcGluX2ZvbGlvYCBmcm9tIG15IGxpc3QuIFRob3NlIGFyZSBob3QgcGF0aHMsIGFuZCBJIHdhbnQgdG8gYXZvaWQgdGhlbS4gU2ltaWxhcmx5LCBgenN3YXBfc3RvcmVgIGlzIGFsc28gYSBob3QgcGF0aCwgYnV0IGl0IGlzIHRoZSBtYWluIHpzd2FwIGVudHJ5IHBvaW50LgoKSSBhbSBjaGVja2luZyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGFuZCBgX19zd2FwX2NhY2hlX2FsbG9jYC4gVGhvc2UgYXJlIHN0YXRpYy4gVGhleSBhcmUgbm90IHN1aXRhYmxlIHRvIGluY2x1ZGUgaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LgoKU28sIHRoZSBkZWZpbml0aXZlIGxpc3QgZm9yIGBGb2N1c1N5bWJvbHNgOiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgLCBgc3dhcGluX3N5bmNgLCBhbmQgYHpzd2FwX3N0b3JlYC4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBlbmFibGluZyBgWlNXQVBgLCBgU1dBUGAsIGFuZCBgWlNXQVBfREVGQVVMVF9PTmAgaXMgd2hhdCBJIG5lZWQuIGBaU1dBUGAgaXMgdGhlIG1vc3QgaW1wb3J0YW50IGNvbmZpZywgYW5kIHRoZSBvdGhlcnMgYXJlIGRlcGVuZGVuY2llcy4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gaG93IHpzd2FwIGFuZCBzd2FwIGludGVyYWN0LCBwYXJ0aWN1bGFybHkgd2l0aCBob3cgdGhleSBtYW5hZ2Ugd29ya2luZ3NldCByZWZhdWx0cyBhbmQgd3JpdGViYWNrIGJ1ZmZlcnMuIE5ldyBmdW5jdGlvbnMgYXJlIGFkZGVkLCBhbmQgZXhpc3Rpbmcgb25lcyBhcmUgbW9kaWZpZWQgdG8gZW5zdXJlIHRoYXQgc2hhZG93cyBhcmUgcHJlc2VydmVkIGFuZCByZXN0b3JlZCBpbiBzd2FwIGNhY2hlIG9wZXJhdGlvbnMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgc3RhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBXT1JLSU5HU0VUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbW0vd29ya2luZ3NldC5jYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBGaXJzdCwgbGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB0aGUgYG1tL3dvcmtpbmdzZXQuY2AgbW9kdWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIG1vZHVsZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIHBhZ2UgdGFibGUgc3RydWN0dXJlcywgdGhlIHBoeXNpY2FsIG1lbW9yeSBhbGxvY2F0b3IsIE5VTUEgY29uc2lkZXJhdGlvbnMsIG9yIHBlcmhhcHMgaW50ZXJhY3Rpb25zIHdpdGggc3BlY2lmaWMgQ1BVIGZlYXR1cmVzPyBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgZGVidWdnaW5nIGVmZm9ydHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byBjb25zdWx0IGFueSBvdGhlciBtb2R1bGVzIG9yIHRoZWlyIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbiB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgZW5zdXJlIEkgZG8gbm90IGJyZWFrIHRoaW5ncyB3aXRoIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dvcmtpbmdzZXRcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTU2LVx0XHRcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXG5tbS9NYWtlZmlsZTo1NzpcdFx0XHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcbm1tL01ha2VmaWxlLTU4LVx0XHRcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTczOQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudCBkb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgQ29tcHVsc29yeSBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBgd29ya2luZ3NldC5vYCBpcyAqYWx3YXlzKiBnZXR0aW5nIGNvbXBpbGVkLiBUaGF0JiMzOTtzIGEgYml0IG9kZCwgdXN1YWxseSBJJiMzOTtkIGV4cGVjdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkuIFNpbmNlIHRoZSBjb21waWxhdGlvbiBpcyBhbHdheXMgaGFwcGVuaW5nLCBJJiMzOTttIHRoaW5raW5nIG1heWJlIGl0JiMzOTtzIGNvbm5lY3RlZCB0byBhIGNvcmUgb3IgZnVuZGFtZW50YWwgZmVhdHVyZS4gV2hhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgc3VzcGVjdD8gQWgsIEkgc2hvdWxkIGNoZWNrIHRoZSBgQ09ORklHX01FTUNHYCBzZXR0aW5nIGZpcnN0LiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBtZW1vcnkgY2dyb3VwcyBjb3VsZCBiZSBpbmZsdWVuY2luZyB0aGluZ3MuIEkmIzM5O2xsIHNlZSBpZiBgd29ya2luZ3NldC5vYCBpcyBzb21laG93IHRpZWQgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGEgY29udGFpbmVyLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Nz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Ni1cbmluaXQvS2NvbmZpZzoxMDc3OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzgtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODUtXG5pbml0L0tjb25maWc6MTA4Njpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODctXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTItXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDk0LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk5LVxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwMS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE1OQoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBSZWZpbmVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGNvbmZpZ3VyZSB0aGlzIHN5c3RlbS4gYE1FTUNHYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGZvciB0cmFja2luZyBtZW1vcnkgY2dyb3VwcyBhbmQgaGFuZGxpbmcgd29ya2luZ3NldCByZWZhdWx0cy4gVGhhdCYjMzk7cyBhIGtleSBjb25zaWRlcmF0aW9uLiBTaW5jZSBgd29ya2luZ3NldC5jYCBpcyBhbHdheXMgY29tcGlsZWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBtYW5hZ2luZyBpdHMgaW50ZXJhY3Rpb25zIGVmZmVjdGl2ZWx5LgoKSSYjMzk7bSBkZWZpbml0ZWx5IGdvaW5nIHRvIGluY2x1ZGUgYFpTV0FQYCwgYFNXQVBgLCBhbmQgYFpTV0FQX0RFRkFVTFRfT05gLiBJIGNoZWNrZWQgYG1tL0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdCBgWlNXQVBfREVGQVVMVF9PTmAgaXMgYSB2YWxpZCBjb25maWcgb3B0aW9uLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpJJiMzOTttIHJlLWV2YWx1YXRpbmcgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gLiBXaGlsZSBpdCBtaWdodCBub3QgYmUgc3RyaWN0bHkgKm5lY2Vzc2FyeSogZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcywgSSYjMzk7bGwga2VlcCBpdCBpbiBtaW5kLgoKTm93LCBmb3IgdGhlIGtleSBmb2N1cyBzeW1ib2xzIOKAkyBJJiMzOTt2ZSBmaW5hbGl6ZWQgdGhlc2U6CgoqICAgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgCiogICBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYAoqICAgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AKKiAgIGB3b3JraW5nc2V0X3JlZmF1bHRgCiogICBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYAoqICAgYHN3YXBpbl9zeW5jYAoKSSB3YXMgaW5pdGlhbGx5IG9uIHRoZSBmZW5jZSBhYm91dCBgenN3YXBfc3RvcmVgLiBJdCYjMzk7cyBhIGJpdCBnZW5lcmljIGFuZCBwb3RlbnRpYWxseSBhIHZlcnkgaG90IGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgc28gaXQgd2FycmFudHMgaW5jbHVzaW9uLiBJJiMzOTtsbCBhZGQgaXQgdG8gdGhlIGZpbmFsIGxpc3QuCgpBbHJpZ2h0LCB3aXRoIHRoZXNlIHNldHRpbmdzLCBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCYjMzQ7LAogICAgJiMzNDtzd2FwaW5fc3luYyYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgenN3YXAgYW5kIHN3YXAgY2FjaGUgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgcmVmYXVsdHMgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgaWYgYSBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIgYW5kIHRvIGxvb2t1cCBhbmQgY2xlYXIgc2hhZG93cywgYW5kIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIGRlbGV0aW9uIHBhdGhzIHRvIHByZXNlcnZlIGFuZCByZXN0b3JlIHNoYWRvd3MuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCYjMzQ7LAogICAgJiMzNDtzd2FwaW5fc3luYyYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgenN3YXAgYW5kIHN3YXAgY2FjaGUgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgcmVmYXVsdHMgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgaWYgYSBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIgYW5kIHRvIGxvb2t1cCBhbmQgY2xlYXIgc2hhZG93cywgYW5kIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIGRlbGV0aW9uIHBhdGhzIHRvIHByZXNlcnZlIGFuZCByZXN0b3JlIHNoYWRvd3MuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxODo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2FjaGUgYW5kIHpzd2FwIGxvZ2ljIHRvIHByZXNlcnZlIHdvcmtpbmdzZXQgc2hhZG93IGVudHJpZXMgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgeGFycmF5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMyODhhOTEwNTljZGRhNzYwNzc2MjgzMjNiNjkwMjM1YzNjODljNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxODo1MzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaAppbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC96c3dhcC5oCkBAIC0zNSw2ICYjNDM7MzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7CiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIGJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTsKIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTsKJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogI2Vsc2UKIAogc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTsKQEAgLTY5LDYgJiM0Mzs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi8KZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM4YjExNjUyMTJjOTQuLmMxOTE4ODdjMWZlZGEgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMzgsNiAmIzQzOzM4LDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7CiYjNDM7dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTsKIHZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiAvKiBtbS9mb2xpby5jICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGM2YTkyNDJkMWI1YmQuLjc3MTE5N2IzZmNjNWMgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00ODk0LDYgJiM0Mzs0ODk0LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJdW5zaWduZWQgbG9uZyBwYWdlX2lkeDsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiAJcHRlX3QgKnB0ZXA7CiYjNDM7CXZvaWQgKnNoYWRvdzsKIAogCWlmICghcHRlX3VubWFwX3NhbWUodm1mKSkKIAkJZ290byBvdXQ7CkBAIC01MDE4LDYgJiM0Mzs1MDE5LDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlnb3RvIG91dF9wYWdlOwogCX0KIAomIzQzOwlzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCS8qCiAJICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmCiAJICogZm9saW8tJmd0O2luZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA1OTk2NjVhM2Q2ZTdiLi4xZWY2Y2M3NjYwNWU1IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTIyNjYsNiAmIzQzOzIyNjYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMOwogCWludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyOwogCXBnb2ZmX3Qgb2Zmc2V0OwomIzQzOwl2b2lkICpzaGFkb3c7CiAKIAlWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTsKIAlpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTsKQEAgLTIzNzcsNiAmIzQzOzIzNzgsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAkgKi8KIAlhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pOwogCiYjNDM7CXNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJaWYgKHNobWVtX3Nob3VsZF9yZXBsYWNlX2ZvbGlvKGZvbGlvLCBnZnApKSB7CiAJCWVycm9yID0gc2htZW1fcmVwbGFjZV9mb2xpbygmYW1wO2ZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpOwogCQlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggOTBhNTUxYTg4ZGY2My4uODY3OWNiNjEyNjhlNSAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzEyLDkgJiM0MzszMTIsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKJiM0MztzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwogLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqLwogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IGI3NmViM2Q4NzZmZDcuLmRmOWUwNDUyZjE5YjkgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTI0LDYgJiM0MzsyNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2htZW1fZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjdGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zd2FwX29wcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcF90YWJsZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcC5oJiMzNDsKQEAgLTI2MywxMiAmIzQzOzI2NCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJdW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDsKIAlib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJdm9pZCAqc2hhZG93X3BhcmtlZDsKIAogCVZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7CiAKJiM0MzsJLyoKJiM0MzsJICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCYjMzk7cyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlCiYjNDM7CSAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi4KJiM0MzsJICovCiYjNDM7CXNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93X3BhcmtlZCkKJiM0MzsJCXNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7CiYjNDM7CiAJc2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7CiAJY2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpOwogCWNpX2VuZCA9IGNpX3N0YXJ0ICYjNDM7IG5yX3BhZ2VzOwpAQCAtNDgzLDE5ICYjNDM7NDkzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCiAJLyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovCiAJbWVtY2cxX3N3YXBpbihmb2xpbyk7Ci0JaWYgKHNoYWRvdykKLQkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwogCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CiAKLQkvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqLwotCWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXJldHVybiBmb2xpbzsKIH0KIAogLyoqCi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgogICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3QKICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVybwpAQCAtNTA3LDEzICYjNDM7NTEzLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieQogICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLgogICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlcgomIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZQomIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy4KICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwCiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLgogICovCi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC02NDQsMTcgJiM0Mzs2NTQsMjcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LAogCQlwZ29mZl90IGlseCwgYm9vbCByZWFkYWhlYWQpCiB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKIAl9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTsKIAogCWlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXN3YXBfcmVhZF9mb2xpbyhjdHgsIGZvbGlvKTsKIAlpZiAocmVhZGFoZWFkKSB7CiAJCWZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pOwpAQCAtNjg1LDE3ICYjNDM7NzA1LDI3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsCiB7CiAJc3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXZvaWQgKnNoYWRvdyA9IE5VTEw7CiAKIAlkbyB7CiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oJmFtcDtjdHgsIGZvbGlvKTsKIAlzd2FwX3JlYWRfc3VibWl0KCZhbXA7Y3R4KTsKIAlyZXR1cm4gZm9saW87CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDczYTgxYjRhM2UxNjQuLjk5MDU3NTNiN2ExMGMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00OCw2ICYjNDM7NDgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZXdhbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwpAQCAtNzMzLDcgJiM0Mzs3MzQsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewogCQlzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tJmd0O3N3YXA7CiAKLQkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiYjNDM7CQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKIAkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwogCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCA3YWMyYjg4YzgwYWU1Li5lMjAzZDYzMWY2MWI4IDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC01MzYsMTYgJiM0Mzs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsCiAJcmV0dXJuIHJlZmF1bHRfZGlzdGFuY2UgJmx0Oz0gd29ya2luZ3NldF9zaXplOwogfQogCi0vKioKLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLgotICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uCi0gKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCi0gKgotICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5Ci0gKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5Ci0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLgotICovCi12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiYjNDM7c3RhdGljIHZvaWQgX193b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93LAomIzQzOwkJCQkgYm9vbCBscnVfbWFuYWdlZCkKIHsKIAlib29sIGZpbGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpAQCAtNTc3LDcgJiM0Mzs1NjksMTYgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCWlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsICZhbXA7d29ya2luZ3NldCwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwogCi0JZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CS8qCiYjNDM7CSAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmUKJiM0MzsJICogZGV0ZXJtaW5lZCBoZXJlOiBzZXR0aW5nIHRoZSBmbGFnIHdvdWxkIHJhY2UgdGhlIGRyYWluIGFuZCBsZWF2ZSBpdAomIzQzOwkgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlCiYjNDM7CSAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby4KJiM0MzsJICovCiYjNDM7CWlmIChscnVfbWFuYWdlZCkKJiM0MzsJCWZvbGlvX2FjdGl2YXRlKGZvbGlvKTsKJiM0MzsJZWxzZQomIzQzOwkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiAJd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7CiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7CiAKQEAgLTU5MCw2ICYjNDM7NTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby4KJiM0MzsgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby4KJiM0MzsgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uCiYjNDM7ICoKJiM0MzsgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHkKJiM0MzsgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5CiYjNDM7ICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHMKJiM0MzsgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkIC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5CiYjNDM7ICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS4KJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpbyB0aGUgZXZpY3Rpb24gaXMgcmVmYXVsdGVkIGludG8uCiYjNDM7ICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLgomIzQzOyAqCiYjNDM7ICogTGlrZSB3b3JraW5nc2V0X3JlZmF1bHQoKSwgYnV0IGZvciBhIGZvbGlvIHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgYWRkZWQKJiM0MzsgKiB0byB0aGUgTFJVLCB3aGljaCBoYXMgdG8gYmUgYWN0aXZhdGVkIGJ5IG1vdmluZyBpdCBiZXR3ZWVuIHRoZSBsaXN0cwomIzQzOyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLgomIzQzOyAqCiYjNDM7ICogVGhlIGFjdGl2YXRpb24gaXMgYmVzdCBlZmZvcnQ6IGEgZm9saW8gc3RpbGwgc2l0dGluZyBpbiBhIHBlci1DUFUgTFJVCiYjNDM7ICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgYWxyZWFkeSBhZGRlZCB0byB0aGUgTFJVLgomIzQzOyAqLwomIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKJiM0Mzt7CiYjNDM7CV9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIHRydWUpOwomIzQzO30KJiM0MzsKIC8qKgogICogd29ya2luZ3NldF9hY3RpdmF0aW9uIC0gbm90ZSBhIHBhZ2UgYWN0aXZhdGlvbgogICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC4KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLmMxYTc4ZWRmYTBiODcgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtOTcyLDYgJiM0Mzs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiB3cml0ZWJhY2sgY29kZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMCkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj8KJiM0MzsgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKQomIzQzOyAqCiYjNDM7ICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkcwomIzQzOyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cKJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aAomIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgJiM0MzsgaSkpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbyYjMzk7cyBwYXJrZWQgc2hhZG93KHMpCiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KQomIzQzOyAqCiYjNDM7ICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbyYjMzk7cyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZQomIzQzOyAqIHpzd2FwIHRyZWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvdwomIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkCiYjNDM7ICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvCiYjNDM7ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nCiYjNDM7ICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LgomIzQzOyAqLwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tJmd0O3N3YXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpOwomIzQzOwkJdm9pZCAqcGFya2VkID0geGFfbG9hZCh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpCiYjNDM7CQkJc2hhZG93ID0gcGFya2VkOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaGFkb3c7CiYjNDM7fQomIzQzOwogLyoKICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsCiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhCkBAIC05ODcsMTIgJiM0MzsxMDYwLDE0IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCQkJIHN3cF9lbnRyeV90IHN3cGVudHJ5KQogewomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwogCXN0cnVjdCB4YXJyYXkgKnRyZWU7CiAJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cGVudHJ5KTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7CiAJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpOwogCXN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTsKJiM0MzsJdm9pZCAqc2hhZG93OwogCWludCByZXQgPSAwOwogCiAJLyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi8KQEAgLTEwMDAsOSAmIzQzOzEwNzUsMTEgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAlpZiAoIXNpKQogCQlyZXR1cm4gLUVFWElTVDsKIAomIzQzOwlzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwZW50cnkpOwomIzQzOwogCW1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0JZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCi0JCQkJICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwomIzQzOwlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAomIzQzOwkJCQkJIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwogCXB1dF9zd2FwX2RldmljZShzaSk7CiAKIAkvKgpAQCAtMTAxNCw2ICYjNDM7MTA5MSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJICovCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBQVFJfRVJSKGZvbGlvKTsKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAKIAkvKgogCSAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdApAQCAtMTAzNSw3ICYjNDM7MTExMywxMiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlnb3RvIG91dDsKIAl9CiAKLQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQpOwomIzQzOwkvKgomIzQzOwkgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6CiYjNDM7CSAqIHRoZSBzd2FwIHRhYmxlIG1hcmtzIGEgc3dhcHBlZCBvdXQgc2xvdCB3aXRoIHhhX21rX3ZhbHVlKDApIGFuZCBob2xkcwomIzQzOwkgKiB0aGUgc2hhZG93LCB3aGVuIHRoZXJlIGlzIG9uZSwgaW4gdGhhdCBzYW1lIHZhbHVlLgomIzQzOwkgKi8KJiM0MzsJeGFfc3RvcmUodHJlZSwgb2Zmc2V0LCBzaGFkb3csIEdGUF9LRVJORUwpOwogCiAJY291bnRfdm1fZXZlbnQoWlNXUFdCKTsKIAlpZiAoZW50cnktJmd0O29iamNnKQpAQCAtMTA1NSw3ICYjNDM7MTEzOCwxNSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCiBvdXQ6CiAJaWYgKHJldCkgewotCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGFsbG9jYXRpb24gYWJvdmUgb3Zlcndyb3RlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBhbmQgbm90aGluZwomIzQzOwkJICogaGFzIGJlZW4gcGFya2VkIGZvciBpdCB5ZXQsIHNvIHJlc3RvcmUgaXQgYXMgdGhlIGZvbGlvIGxlYXZlcwomIzQzOwkJICogdGhlIHN3YXAgY2FjaGUsIG9yIHRoZSBldmljdGlvbiBpdCByZWNvcmRzIGlzIGxvc3QuCiYjNDM7CQkgKi8KJiM0MzsJCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oc3dwZW50cnkpLCBvZmZzZXQpOwomIzQzOwkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3cGVudHJ5LCBzaGFkb3cpOwomIzQzOwkJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiYjNDM7CQlmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCQlmb2xpb191bmxvY2soZm9saW8pOwogCX0KIAlmb2xpb19wdXQoZm9saW8pOwpAQCAtMTQ5OCw2ICYjNDM7MTU4OSwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJVk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpOwogCVZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGUKJiM0MzsJICogc3dhcCBjYWNoZSwgc28gcmVjbGFpbSB3cml0ZXMgaXQgb3V0IGFnYWluLiBXcml0ZWJhY2sgYWxyZWFkeQomIzQzOwkgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZgomIzQzOwkgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvdwomIzQzOwkgKiBwYXJrZWQgZm9yIHRoZSBidWZmZXIgaW4gcGxhY2UsIHNvIGl0IGlzIHN0aWxsIHJlc3RvcmVkIGludG8KJiM0MzsJICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCWlmICghenN3YXBfZW5hYmxlZCkKIAkJZ290byBjaGVja19vbGQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDQKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogNDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIENoZWNrOiBObyBJc3N1ZXMgRGV0ZWN0ZWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgbWVtb3J5IG1hbmFnZW1lbnQgcGVyc3BlY3RpdmUuIFRoaXMgcGF0Y2ggaXMgc29sZWx5IGNvbmNlcm5lZCB3aXRoIHJlZmluaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHpzd2FwLCB0aGUgc3dhcCBjYWNoZSwgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdHMuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucy4KClNvLCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIG1vZGlmaWNhdGlvbnMgdG8gYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWJvdXQgY29ycmVjdGx5IG1hbmFnaW5nIHNoYWRvdyBlbnRyaWVzIHdpdGhpbiB0aGUgd29ya2luZ3NldCBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBObyBuZXcgdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFkZGVkLCB3aGljaCBpcyBhIG1ham9yIHBvc2l0aXZlLgoKSXQmIzM5O3MgYWxsIGFib3V0IGZhbWlsaWFyIHN0cnVjdHVyZXM6IGBzdHJ1Y3QgZm9saW9gLCBgc3dwX2VudHJ5X3RgLCBgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvYCwgYW5kIHNoYWRvdyBlbnRyaWVzIHJlcHJlc2VudGVkIGFzIGB2b2lkICpgIHBvaW50ZXJzIHN0b3JlZCB3aXRoaW4geGFycmF5cy4gVGhpcyBpc24mIzM5O3QgZ3JvdW5kYnJlYWtpbmcsIGJ1dCB0aGUga2V5IGlzIGhvdyB0aGVzZSBzaGFkb3dzIGFyZSBoYW5kbGVkLgoKVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2Ugc2hhZG93IHBvaW50ZXJzLiBXZSYjMzk7cmUgZWl0aGVyIGdldHRpbmcgdGhlbSBmcm9tIGBzd2FwX2NhY2hlX2dldF9zaGFkb3dgIG9yIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLiBUaGVzZSBhcmUganVzdCBwb2ludGVycywgYW5kIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLiBHaXZlbiB0aGF0LCB3aXRoIGEgZ29vZCBLQVNBTiBydW4gb24gdGhlIHdob2xlIHN5c3RlbSwgdGhlIHVzdWFsIGJ1Z3MgLS0gb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGRlcmVmZXJlbmNlcywgZXRjLiAtLSBhcmUgaGFuZGxlZC4KClRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZSwgbm9yIG5ldyBidWZmZXJzIGFsbG9jYXRlZCBhbmQgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IGNvbmNsdWRlIHRoYXQgYE5lZWRzS01TQU4gPSBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IG1lbW9yeSBtYW5hZ2VtZW50IGludGVybmFsLCBmb2N1c2luZyBvbiBwb2ludGVyIG1hbmlwdWxhdGlvbiBhbmQgdGhlIGV4aXN0aW5nIHN3YXAgY2FjaGUvenN3YXAgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2FjaGUgYW5kIHpzd2FwIGxvZ2ljIHRvIHByZXNlcnZlIHdvcmtpbmdzZXQgc2hhZG93IGVudHJpZXMgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgeGFycmF5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzd2FwIGNhY2hlIGFuZCB6c3dhcCBsb2dpYyB0byBwcmVzZXJ2ZSB3b3JraW5nc2V0IHNoYWRvdyBlbnRyaWVzIGR1cmluZyB6c3dhcCB3cml0ZWJhY2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgYnVmZmVycyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiwgZm9saW8gc3RhdGUgbWFuYWdlbWVudCwgYW5kIHhhcnJheSBvcGVyYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1Mzo0MC4zNzc2MzY2ODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA3NzUzNDEzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyXCIsXG4gICAgXCJ6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NcIixcbiAgICBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRcIixcbiAgICBcInN3YXBpbl9zeW5jXCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBjYWNoZSBhbmQgenN3YXAgbG9naWMgdG8gcHJlc2VydmUgd29ya2luZ3NldCBzaGFkb3cgZW50cmllcyBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24sIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCB4YXJyYXkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgenN3YXAgYW5kIHN3YXAgY2FjaGUgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgcmVmYXVsdHMgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgaWYgYSBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIgYW5kIHRvIGxvb2t1cCBhbmQgY2xlYXIgc2hhZG93cywgYW5kIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIGRlbGV0aW9uIHBhdGhzIHRvIHByZXNlcnZlIGFuZCByZXN0b3JlIHNoYWRvd3MuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1Mzo0MC4zNzc2NDA5MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjE3Mzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMyODhhOTEwNTljZGRhNzYwNzc2MjgzMjNiNjkwMjM1YzNjODljNDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTg6NTM6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5AQCAtMzUsNiArMzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XFxuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbHNlXFxuIFxcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xcbkBAIC02OSw2ICs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXFxuaW5kZXggMzhiMTE2NTIxMmM5NC4uYzE5MTg4N2MxZmVkYSAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0zOCw2ICszOCw3IEBAIHZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xcbiB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuIC8qIG1tL2ZvbGlvLmMgKi9cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IGM2YTkyNDJkMWI1YmQuLjc3MTE5N2IzZmNjNWMgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC00ODk0LDYgKzQ4OTQsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xcbiBcXHRwdGVfdCAqcHRlcDtcXG4rXFx0dm9pZCAqc2hhZG93O1xcbiBcXG4gXFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtNTAxOCw2ICs1MDE5LDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXHRcXHRnb3RvIG91dF9wYWdlO1xcbiBcXHR9XFxuIFxcbitcXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBLU00gc29tZXRpbWVzIGhhcyB0byBjb3B5IG9uIHJlYWQgZmF1bHRzLCBmb3IgZXhhbXBsZSwgaWZcXG4gXFx0ICogZm9saW8tXFx1MDAzZWluZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlXFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggNTk5NjY1YTNkNmU3Yi4uMWVmNmNjNzY2MDVlNSAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0yMjY2LDYgKzIyNjYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcXG4gXFx0aW50IGVycm9yLCBucl9wYWdlcywgb3JkZXI7XFxuIFxcdHBnb2ZmX3Qgb2Zmc2V0O1xcbitcXHR2b2lkICpzaGFkb3c7XFxuIFxcbiBcXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcXG4gXFx0aW5kZXhfZW50cnkgPSByYWRpeF90b19zd3BfZW50cnkoKmZvbGlvcCk7XFxuQEAgLTIzNzcsNiArMjM3OCwxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHQgKi9cXG4gXFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcXG4gXFxuK1xcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XFxuK1xcdGlmIChzaGFkb3cpXFxuK1xcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcXG4rXFxuIFxcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xcbiBcXHRcXHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xcbiBcXHRcXHRpZiAoZXJyb3IpXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IDkwYTU1MWE4OGRmNjMuLjg2NzljYjYxMjY4ZTUgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5oXFxuKysrIGIvbW0vc3dhcC5oXFxuQEAgLTMxMiw5ICszMTIsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi9cXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xcbmluZGV4IGI3NmViM2Q4NzZmZDcuLmRmOWUwNDUyZjE5YjkgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXFxuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXFxuQEAgLTI0LDYgKzI0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjdGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXAuaFxcXCJcXG5AQCAtMjYzLDEyICsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xcbiBcXHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCdzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGVcXG4rXFx0ICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLlxcbitcXHQgKi9cXG4rXFx0c2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XFxuK1xcdGlmIChzaGFkb3dfcGFya2VkKVxcbitcXHRcXHRzaGFkb3cgPSBzaGFkb3dfcGFya2VkO1xcbitcXG4gXFx0c2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7XFxuIFxcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcXG4gXFx0Y2lfZW5kID0gY2lfc3RhcnQgKyBucl9wYWdlcztcXG5AQCAtNDgzLDE5ICs0OTMsMTUgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcbiBcXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cXG4gXFx0bWVtY2cxX3N3YXBpbihmb2xpbyk7XFxuLVxcdGlmIChzaGFkb3cpXFxuLVxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG4gXFxuIFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcXG4gXFxuLVxcdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXFxuLVxcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbiBcXHRyZXR1cm4gZm9saW87XFxuIH1cXG4gXFxuIC8qKlxcbi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG4rICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcXG4gICogQGdmcDogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3NcXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cXG5AQCAtNTA3LDEzICs1MTMsMTcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuICAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnlcXG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxcbiAgKlxcbisgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlclxcbisgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWVcXG4rICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXFxuKyAqXFxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLlxcbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxcbiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLlxcbiAgKi9cXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4tXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxcbiB7XFxuIFxcdGludCBvcmRlciwgZXJyO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKnJldDtcXG5AQCAtNjQ0LDE3ICs2NTQsMjcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxcbiBcXHRcXHRwZ29mZl90IGlseCwgYm9vbCByZWFkYWhlYWQpXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0dm9pZCAqc2hhZG93ID0gTlVMTDtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XFxuIFxcdFxcdGlmIChmb2xpbylcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbi1cXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBDYXB0dXJlIHRoZSBzbG90J3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxcbitcXHRcXHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xcbitcXHRcXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XFxuIFxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbiBcXG4gXFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKGN0eCwgZm9saW8pO1xcbiBcXHRpZiAocmVhZGFoZWFkKSB7XFxuIFxcdFxcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xcbkBAIC02ODUsMTcgKzcwNSwyNyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbiB7XFxuIFxcdHN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0dm9pZCAqc2hhZG93ID0gTlVMTDtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XFxuIFxcdFxcdGlmIChmb2xpbylcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbi1cXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXFxuK1xcdFxcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XFxuK1xcdFxcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbiBcXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4gXFxuIFxcdGlmIChJU19FUlIoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gZm9saW87XFxuIFxcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKFxcdTAwMjZjdHgsIGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX3N1Ym1pdChcXHUwMDI2Y3R4KTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggNzNhODFiNGEzZTE2NC4uOTkwNTc1M2I3YTEwYyAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTQ4LDYgKzQ4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmludGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RheC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvenN3YXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZXdhbGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcXHUwMDNlXFxuQEAgLTczMyw3ICs3MzQsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4gXFx0XFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbiBcXG4tXFx0XFx0aWYgKHJlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxcbitcXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcXG4gXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4gXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbiBcXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXFxuaW5kZXggN2FjMmI4OGM4MGFlNS4uZTIwM2Q2MzFmNjFiOCAxMDA2NDRcXG4tLS0gYS9tbS93b3JraW5nc2V0LmNcXG4rKysgYi9tbS93b3JraW5nc2V0LmNcXG5AQCAtNTM2LDE2ICs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuIFxcdHJldHVybiByZWZhdWx0X2Rpc3RhbmNlIFxcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxcbi0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxcbi0gKlxcbi0gKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcXG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxcbi0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLlxcbi0gKi9cXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbitzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csXFxuK1xcdFxcdFxcdFxcdCBib29sIGxydV9tYW5hZ2VkKVxcbiB7XFxuIFxcdGJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbkBAIC01NzcsNyArNTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0aWYgKCF3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgZmlsZSwgXFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbitcXHQvKlxcbitcXHQgKiBBbiBMUlUtbWFuYWdlZCBmb2xpbyBtYXkgc2l0IGluIGEgcGVyLUNQVSBiYXRjaCwgd2hpY2ggY2Fubm90IGJlXFxuK1xcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcXG4rXFx0ICogZGlzYWdyZWVpbmcgd2l0aCB0aGUgbGlzdC4gZm9saW9fYWN0aXZhdGUoKSBpcyBzYWZlLCBidXQgbWlzc2VzIHRoZVxcbitcXHQgKiBhY3RpdmF0aW9uIGZvciBzdWNoIGEgZm9saW8uXFxuK1xcdCAqL1xcbitcXHRpZiAobHJ1X21hbmFnZWQpXFxuK1xcdFxcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcXG4gXFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0JBU0UgKyBmaWxlLCBucik7XFxuIFxcbkBAIC01OTAsNiArNTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbiB9XFxuIFxcbisvKipcXG4rICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXFxuKyAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxcbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXFxuKyAqXFxuKyAqIENhbGN1bGF0ZXMgYW5kIGV2YWx1YXRlcyB0aGUgcmVmYXVsdCBkaXN0YW5jZSBvZiB0aGUgcHJldmlvdXNseVxcbisgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5XFxuKyAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXFxuKyAqXFxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHNcXG4rICogaXQgd2l0aCBmb2xpb19hZGRfbHJ1KCkgYWZ0ZXJ3YXJkcy5cXG4rICovXFxuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4re1xcbitcXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcXG4rICogZXZpY3RlZCBmb2xpbyB0aGF0IGlzIGFscmVhZHkgb24gdGhlIExSVS5cXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxcbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXFxuKyAqXFxuKyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXFxuKyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXFxuKyAqIHJhdGhlciB0aGFuIGJ5IHNldHRpbmcgUEdfYWN0aXZlLlxcbisgKlxcbisgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlVcXG4rICogYmF0Y2ggY2Fubm90IGJlIG1vdmVkIHlldCBhbmQgaXMgbGVmdCBpbmFjdGl2ZS5cXG4rICpcXG4rICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuXFxuKyAqL1xcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuK3tcXG4rXFx0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uXFxuICAqIEBmb2xpbzogRm9saW8gdGhhdCBpcyBiZWluZyBhY3RpdmF0ZWQuXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggMzdmMzRlNDA2YzhlMy4uYzFhNzhlZGZhMGI4NyAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC05NzIsNiArOTcyLDc5IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqIHdyaXRlYmFjayBjb2RlXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuK1xcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcXG4rXFxuKy8qKlxcbisgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cXG4rICogQGZvbGlvOiB0aGUgZm9saW8gYmVpbmcgZXhhbWluZWQgKHR5cGljYWxseSBhIHN3YXAgY2FjaGUgZm9saW8gdW5kZXIgcmVjbGFpbSlcXG4rICpcXG4rICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkc1xcbisgKiBhIHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93IChhIHJlYWwgc2hhZG93IG9yIHRoZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XXFxuKyAqIHNlbnRpbmVsKSBpbiB0aGUgenN3YXAgdHJlZSByYXRoZXIgdGhhbiBhIGxpdmUgenN3YXAgZW50cnkuXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiBAZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyLCBpbiB3aGljaCBjYXNlIHRoZSByZWNsYWltIHBhdGhcXG4rICogbXVzdCBub3QgbWludCBhIGZyZXNoIHdvcmtpbmdzZXQgc2hhZG93IGZvciBpdC5cXG4rICovXFxuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcXG4rXFx0XFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgKyBpKTtcXG4rXFxuK1xcdFxcdGlmICgheGFfaXNfdmFsdWUoeGFfbG9hZChzd2FwX3pzd2FwX3RyZWUoZSksIG9mZnNldCArIGkpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyAtIHJldHJpZXZlIGFuZCBjbGVhciBAZm9saW8ncyBwYXJrZWQgc2hhZG93KHMpXFxuKyAqIEBmb2xpbzogdGhlIHdyaXRlYmFjayBidWZmZXIgZm9saW8gKG9yIHRoZSBzd2FwaW4gZm9saW8gdGhhdCBjb25zdW1lZCBpdClcXG4rICpcXG4rICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbydzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlXFxuKyAqIHpzd2FwIHRyZWUuXFxuKyAqXFxuKyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93XFxuKyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXFxuKyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0b1xcbisgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoKSAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmdcXG4rICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxcbisgKi9cXG4rdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbitcXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcbitcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XFxuK1xcdFxcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XFxuK1xcdFxcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XFxuK1xcdFxcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICsgaSk7XFxuK1xcbitcXHRcXHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQgKyBpKTtcXG4rXFx0XFx0aWYgKHBhcmtlZCAhPSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XKVxcbitcXHRcXHRcXHRzaGFkb3cgPSBwYXJrZWQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaGFkb3c7XFxuK31cXG4rXFxuIC8qXFxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcXG5AQCAtOTg3LDEyICsxMDYwLDE0IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0XFx0XFx0IHN3cF9lbnRyeV90IHN3cGVudHJ5KVxcbiB7XFxuK1xcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuIFxcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XFxuIFxcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3BlbnRyeSk7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuIFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XFxuIFxcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcXG4gXFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xcbitcXHR2b2lkICpzaGFkb3c7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cXG5AQCAtMTAwMCw5ICsxMDc1LDExIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcdGlmICghc2kpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXG4rXFx0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cGVudHJ5KTtcXG4rXFxuIFxcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxuLVxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XFxuK1xcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxuK1xcdFxcdFxcdFxcdFxcdCBOT19JTlRFUkxFQVZFX0lOREVYKTtcXG4gXFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEwMTQsNiArMTA5MSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcdCAqL1xcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIGZvbGlvIGlzIGxvY2tlZCwgYW5kIHRoZSBzd2FwY2FjaGUgaXMgbm93IHNlY3VyZWQgYWdhaW5zdFxcbkBAIC0xMDM1LDcgKzExMTMsMTIgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCk7XFxuK1xcdC8qXFxuK1xcdCAqIEEgc2xvdCB3aXRoIG5vIHNoYWRvdyBhbHJlYWR5IHJlYWRzIGJhY2sgYXMgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVzpcXG4rXFx0ICogdGhlIHN3YXAgdGFibGUgbWFya3MgYSBzd2FwcGVkIG91dCBzbG90IHdpdGggeGFfbWtfdmFsdWUoMCkgYW5kIGhvbGRzXFxuK1xcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXFxuK1xcdCAqL1xcbitcXHR4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7XFxuIFxcbiBcXHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xcbiBcXHRpZiAoZW50cnktXFx1MDAzZW9iamNnKVxcbkBAIC0xMDU1LDcgKzExMzgsMTUgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFxuIG91dDpcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCdzIHNoYWRvdyBhbmQgbm90aGluZ1xcbitcXHRcXHQgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzXFxuK1xcdFxcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7XFxuK1xcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcXG4rXFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuK1xcdFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdH1cXG4gXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5AQCAtMTQ5OCw2ICsxNTg5LDE3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGVcXG4rXFx0ICogc3dhcCBjYWNoZSwgc28gcmVjbGFpbSB3cml0ZXMgaXQgb3V0IGFnYWluLiBXcml0ZWJhY2sgYWxyZWFkeVxcbitcXHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxcbitcXHQgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvd1xcbitcXHQgKiBwYXJrZWQgZm9yIHRoZSBidWZmZXIgaW4gcGxhY2UsIHNvIGl0IGlzIHN0aWxsIHJlc3RvcmVkIGludG9cXG4rXFx0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRpZiAoIXpzd2FwX2VuYWJsZWQpXFxuIFxcdFxcdGdvdG8gY2hlY2tfb2xkO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTM6NDAuODIwNjE2NjM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjc5NTMxNzY0MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUF9ERUZBVUxUX09OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlclwiLFxuICAgIFwienN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkXCIsXG4gICAgXCJzd2FwaW5fc3luY1wiLFxuICAgIFwienN3YXBfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgenN3YXAgYW5kIHN3YXAgY2FjaGUgbG9naWMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgcmVmYXVsdHMgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgaWYgYSBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIgYW5kIHRvIGxvb2t1cCBhbmQgY2xlYXIgc2hhZG93cywgYW5kIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGFsbG9jYXRpb24gYW5kIGRlbGV0aW9uIHBhdGhzIHRvIHByZXNlcnZlIGFuZCByZXN0b3JlIHNoYWRvd3MuIFRoaXMgaXMgYSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZSB3aXRoIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMjg4YTkxMDU5Y2RkYTc2MDc3NjI4MzIzYjY5MDIzNWMzYzg5YzQ0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTg6NTM6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTEuLmRmYjcxNTMyMzZmNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuQEAgLTM1LDYgKzM1LDggQEAgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xuIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIGJvb2wgenN3YXBfaXNfZW5hYmxlZCh2b2lkKTtcbiBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7XG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuIFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5AQCAtNjksNiArNzEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLmMxOTE4ODdjMWZlZGEgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMzgsNiArMzgsNyBAQCB2b2lkIHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4gdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xuIHZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIC8qIG1tL2ZvbGlvLmMgKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBjNmE5MjQyZDFiNWJkLi43NzExOTdiM2ZjYzVjIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNDg5NCw2ICs0ODk0LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuIFx0cHRlX3QgKnB0ZXA7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTUwMTgsNiArNTAxOSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBvdXRfcGFnZTtcbiBcdH1cbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHQvKlxuIFx0ICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmXG4gXHQgKiBmb2xpby1cdTAwM2VpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZVxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA1OTk2NjVhM2Q2ZTdiLi4xZWY2Y2M3NjYwNWU1IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTIyNjYsNiArMjI2Niw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbiBcdGludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyO1xuIFx0cGdvZmZfdCBvZmZzZXQ7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcbiBcdGluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApO1xuQEAgLTIzNzcsNiArMjM3OCwxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0ICovXG4gXHRhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbitcdGlmIChzaGFkb3cpXG4rXHRcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcbitcbiBcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xuIFx0XHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXHUwMDI2Zm9saW8sIGdmcCwgaW5mbywgaW5kZXgsIHZtYSk7XG4gXHRcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDkwYTU1MWE4OGRmNjMuLjg2NzljYjYxMjY4ZTUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMxMiw5ICszMTIsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IGI3NmViM2Q4NzZmZDcuLmRmOWUwNDUyZjE5YjkgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTI0LDYgKzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FwX29wcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJzd2FwX3RhYmxlLmhcIlxuICNpbmNsdWRlIFwic3dhcC5oXCJcbkBAIC0yNjMsMTIgKzI2NCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xuIFx0Ym9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0LypcbitcdCAqIEEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciBwYXJrZWQgdGhlIHNsb3QncyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlXG4rXHQgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uXG4rXHQgKi9cbitcdHNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvd19wYXJrZWQpXG4rXHRcdHNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7XG4rXG4gXHRzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTtcbiBcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcbiBcdGNpX2VuZCA9IGNpX3N0YXJ0ICsgbnJfcGFnZXM7XG5AQCAtNDgzLDE5ICs0OTMsMTUgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXG4gXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cbiBcdG1lbWNnMV9zd2FwaW4oZm9saW8pO1xuLVx0aWYgKHNoYWRvdylcbi1cdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuIFxuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcbiBcbi1cdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXG4tXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4gLyoqXG4tICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4rICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cbkBAIC01MDcsMTMgKzUxMywxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxuICAqXG4rICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXJcbisgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWVcbisgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cbisgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLlxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXG4gICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4ge1xuIFx0aW50IG9yZGVyLCBlcnI7XG4gXHRzdHJ1Y3QgZm9saW8gKnJldDtcbkBAIC02NDQsMTcgKzY1NCwyNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXG4gXHRcdHBnb2ZmX3QgaWx4LCBib29sIHJlYWRhaGVhZClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4rXHRcdC8qXG4rXHRcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4rXHRcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhjdHgsIGZvbGlvKTtcbiBcdGlmIChyZWFkYWhlYWQpIHtcbiBcdFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XG5AQCAtNjg1LDE3ICs3MDUsMjcgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiB7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbitcdFx0LypcbitcdFx0ICogQ2FwdHVyZSB0aGUgc2xvdCdzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCxcbitcdFx0ICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LlxuK1x0XHQgKi9cbitcdFx0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTtcbitcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcdHJldHVybiBmb2xpbztcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA3M2E4MWI0YTNlMTY0Li45OTA1NzUzYjdhMTBjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbkBAIC03MzMsNyArNzM0LDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbitcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIFx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4gXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggN2FjMmI4OGM4MGFlNS4uZTIwM2Q2MzFmNjFiOCAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTM2LDE2ICs1MzYsOCBAQCBib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4gXHRyZXR1cm4gcmVmYXVsdF9kaXN0YW5jZSBcdTAwM2M9IHdvcmtpbmdzZXRfc2l6ZTtcbiB9XG4gXG4tLyoqXG4tICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4tICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4tICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuLSAqXG4tICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4tICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuLSAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4tICovXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuK3N0YXRpYyB2b2lkIF9fd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyxcbitcdFx0XHRcdCBib29sIGxydV9tYW5hZ2VkKVxuIHtcbiBcdGJvb2wgZmlsZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbkBAIC01NzcsNyArNTY5LDE2IEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdGlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsIFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0LypcbitcdCAqIEFuIExSVS1tYW5hZ2VkIGZvbGlvIG1heSBzaXQgaW4gYSBwZXItQ1BVIGJhdGNoLCB3aGljaCBjYW5ub3QgYmVcbitcdCAqIGRldGVybWluZWQgaGVyZTogc2V0dGluZyB0aGUgZmxhZyB3b3VsZCByYWNlIHRoZSBkcmFpbiBhbmQgbGVhdmUgaXRcbitcdCAqIGRpc2FncmVlaW5nIHdpdGggdGhlIGxpc3QuIGZvbGlvX2FjdGl2YXRlKCkgaXMgc2FmZSwgYnV0IG1pc3NlcyB0aGVcbitcdCAqIGFjdGl2YXRpb24gZm9yIHN1Y2ggYSBmb2xpby5cbitcdCAqL1xuK1x0aWYgKGxydV9tYW5hZ2VkKVxuK1x0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuIFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgZmlsZSwgbnIpO1xuIFxuQEAgLTU5MCw2ICs1OTEsNDMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIH1cbiBcbisvKipcbisgKiB3b3JraW5nc2V0X3JlZmF1bHQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHkgZXZpY3RlZCBmb2xpby5cbisgKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4rICpcbisgKiBDYWxjdWxhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHJlZmF1bHQgZGlzdGFuY2Ugb2YgdGhlIHByZXZpb3VzbHlcbisgKiBldmljdGVkIGZvbGlvIGluIHRoZSBjb250ZXh0IG9mIHRoZSBub2RlIGFuZCB0aGUgbWVtY2cgd2hvc2UgbWVtb3J5XG4rICogcHJlc3N1cmUgY2F1c2VkIHRoZSBldmljdGlvbi5cbisgKlxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZCBhbmQgbm90IG9uIHRoZSBMUlUgeWV0LCB0aGUgY2FsbGVyIGFkZHNcbisgKiBpdCB3aXRoIGZvbGlvX2FkZF9scnUoKSBhZnRlcndhcmRzLlxuKyAqL1xuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbit7XG4rXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XG4rfVxuK1xuKy8qKlxuKyAqIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseVxuKyAqIGV2aWN0ZWQgZm9saW8gdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBMUlUuXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdGhlIGV2aWN0aW9uIGlzIHJlZmF1bHRlZCBpbnRvLlxuKyAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby5cbisgKlxuKyAqIExpa2Ugd29ya2luZ3NldF9yZWZhdWx0KCksIGJ1dCBmb3IgYSBmb2xpbyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGFkZGVkXG4rICogdG8gdGhlIExSVSwgd2hpY2ggaGFzIHRvIGJlIGFjdGl2YXRlZCBieSBtb3ZpbmcgaXQgYmV0d2VlbiB0aGUgbGlzdHNcbisgKiByYXRoZXIgdGhhbiBieSBzZXR0aW5nIFBHX2FjdGl2ZS5cbisgKlxuKyAqIFRoZSBhY3RpdmF0aW9uIGlzIGJlc3QgZWZmb3J0OiBhIGZvbGlvIHN0aWxsIHNpdHRpbmcgaW4gYSBwZXItQ1BVIExSVVxuKyAqIGJhdGNoIGNhbm5vdCBiZSBtb3ZlZCB5ZXQgYW5kIGlzIGxlZnQgaW5hY3RpdmUuXG4rICpcbisgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIGFscmVhZHkgYWRkZWQgdG8gdGhlIExSVS5cbisgKi9cbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4re1xuK1x0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XG4rfVxuK1xuIC8qKlxuICAqIHdvcmtpbmdzZXRfYWN0aXZhdGlvbiAtIG5vdGUgYSBwYWdlIGFjdGl2YXRpb25cbiAgKiBAZm9saW86IEZvbGlvIHRoYXQgaXMgYmVpbmcgYWN0aXZhdGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi5jMWE3OGVkZmEwYjg3IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk3Miw2ICs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcbitcbisvKipcbisgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cbisgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKVxuKyAqXG4rICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkc1xuKyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1dcbisgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aFxuKyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4rICovXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXHUwMDNlc3dhcDtcbitcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgKyBpKTtcbitcbitcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICsgaSkpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKipcbisgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJ3MgcGFya2VkIHNoYWRvdyhzKVxuKyAqIEBmb2xpbzogdGhlIHdyaXRlYmFjayBidWZmZXIgZm9saW8gKG9yIHRoZSBzd2FwaW4gZm9saW8gdGhhdCBjb25zdW1lZCBpdClcbisgKlxuKyAqIFJlbW92ZSBhbnkgcGFya2VkIHdyaXRlYmFjayBzaGFkb3dzIGZvciBAZm9saW8ncyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZVxuKyAqIHpzd2FwIHRyZWUuXG4rICpcbisgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvd1xuKyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkXG4rICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvXG4rICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nXG4rICogaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIgZG91YmxlLWNvdW50LlxuKyAqL1xuK3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4rXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XG4rXHRcdHN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7XG4rXHRcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXG4rXHRcdGlmICgheGFfaXNfdmFsdWUocGFya2VkKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICsgaSk7XG4rXHRcdGlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVylcbitcdFx0XHRzaGFkb3cgPSBwYXJrZWQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gc2hhZG93O1xuK31cbitcbiAvKlxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXG4gICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYVxuQEAgLTk4NywxMiArMTA2MCwxNCBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbiB7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuIFx0c3RydWN0IHhhcnJheSAqdHJlZTtcbiBcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3BlbnRyeSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiBcdHN0cnVjdCBzd2FwX2lvX2N0eCBjdHggPSB7fTtcbitcdHZvaWQgKnNoYWRvdztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbkBAIC0xMDAwLDkgKzEwNzUsMTEgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdGlmICghc2kpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuK1x0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cGVudHJ5KTtcbitcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4tXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbi1cdFx0XHRcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcbitcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4rXHRcdFx0XHRcdCBOT19JTlRFUkxFQVZFX0lOREVYKTtcbiBcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHQvKlxuQEAgLTEwMTQsNiArMTA5MSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHQgKi9cbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcbiBcdC8qXG4gXHQgKiBmb2xpbyBpcyBsb2NrZWQsIGFuZCB0aGUgc3dhcGNhY2hlIGlzIG5vdyBzZWN1cmVkIGFnYWluc3RcbkBAIC0xMDM1LDcgKzExMTMsMTIgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuK1x0LypcbitcdCAqIEEgc2xvdCB3aXRoIG5vIHNoYWRvdyBhbHJlYWR5IHJlYWRzIGJhY2sgYXMgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVzpcbitcdCAqIHRoZSBzd2FwIHRhYmxlIG1hcmtzIGEgc3dhcHBlZCBvdXQgc2xvdCB3aXRoIHhhX21rX3ZhbHVlKDApIGFuZCBob2xkc1xuK1x0ICogdGhlIHNoYWRvdywgd2hlbiB0aGVyZSBpcyBvbmUsIGluIHRoYXQgc2FtZSB2YWx1ZS5cbitcdCAqL1xuK1x0eGFfc3RvcmUodHJlZSwgb2Zmc2V0LCBzaGFkb3csIEdGUF9LRVJORUwpO1xuIFxuIFx0Y291bnRfdm1fZXZlbnQoWlNXUFdCKTtcbiBcdGlmIChlbnRyeS1cdTAwM2VvYmpjZylcbkBAIC0xMDU1LDcgKzExMzgsMTUgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcbiBvdXQ6XG4gXHRpZiAocmV0KSB7XG4tXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbitcdFx0LypcbitcdFx0ICogVGhlIGFsbG9jYXRpb24gYWJvdmUgb3Zlcndyb3RlIHRoZSBzbG90J3Mgc2hhZG93IGFuZCBub3RoaW5nXG4rXHRcdCAqIGhhcyBiZWVuIHBhcmtlZCBmb3IgaXQgeWV0LCBzbyByZXN0b3JlIGl0IGFzIHRoZSBmb2xpbyBsZWF2ZXNcbitcdFx0ICogdGhlIHN3YXAgY2FjaGUsIG9yIHRoZSBldmljdGlvbiBpdCByZWNvcmRzIGlzIGxvc3QuXG4rXHRcdCAqL1xuK1x0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKHN3cGVudHJ5KSwgb2Zmc2V0KTtcbitcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3cGVudHJ5LCBzaGFkb3cpO1xuK1x0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbitcdFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdH1cbiBcdGZvbGlvX3B1dChmb2xpbyk7XG5AQCAtMTQ5OCw2ICsxNTg5LDE3IEBAIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbiBcdFZNX1dBUk5fT05fT05DRSghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKTtcbiBcbitcdC8qXG4rXHQgKiBBIHdyaXRlYmFjayBidWZmZXIgd2hvc2UgSU8gZmFpbGVkIGlzIHJlZGlydGllZCBhbmQgbGVmdCBpbiB0aGVcbitcdCAqIHN3YXAgY2FjaGUsIHNvIHJlY2xhaW0gd3JpdGVzIGl0IG91dCBhZ2Fpbi4gV3JpdGViYWNrIGFscmVhZHlcbitcdCAqIGRlY2lkZWQgdGhpcyBkYXRhIGJlbG9uZ3Mgb24gZGlzaywgc28gc2VuZCBpdCB0aGVyZSBpbnN0ZWFkIG9mXG4rXHQgKiBjb21wcmVzc2luZyBpdCBiYWNrIGludG8genN3YXAuIFRoaXMgYWxzbyBsZWF2ZXMgdGhlIHNoYWRvd1xuK1x0ICogcGFya2VkIGZvciB0aGUgYnVmZmVyIGluIHBsYWNlLCBzbyBpdCBpcyBzdGlsbCByZXN0b3JlZCBpbnRvXG4rXHQgKiB0aGUgc2xvdCBvbmNlIHRoZSBmb2xpbyBsZWF2ZXMgdGhlIHN3YXAgY2FjaGUuXG4rXHQgKi9cbitcdGlmICh6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0aWYgKCF6c3dhcF9lbmFibGVkKVxuIFx0XHRnb3RvIGNoZWNrX29sZDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjUzOjQwLjgyMDYxNzg2N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MzA1MjA2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnN3YXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgaXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBjcml0aWNhbCBhcmVhczogenN3YXAsIHRoZSBzd2FwIGNhY2hlLCBhbmQgaG93IHRoZSB3b3JraW5nc2V0IHJlZmF1bHRzLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIEdpdmVuIHRoZSBzY29wZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVyZSdzIHNvbWUgcG90ZW50aWFsIGZvciBmdW5jdGlvbmFsIGltcGFjdCwgYW5kIGhvbmVzdGx5LCBmdXp6aW5nIGlzIGdvaW5nIHRvIGJlIGVzc2VudGlhbCBoZXJlLlxuXG5JIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGFyZWFzLiBGcm9tIHRoZSBkaWZmLCBJIHNlZSB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9hbGxvY2AsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYHN3YXBpbl9zeW5jYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBhbmQgYHpzd2FwX3N0b3JlYC5cblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBuZXcgc3R1ZmYsIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AuIEkgY2FuIHNlZSBmcm9tIHRoZSBmaWxlIHBhdGhzIHRoYXQgdGhlc2UgYXJlIGJvdGggZGVmaW5lZCBpbiBgbW0venN3YXAuY2AsIGFuZCB0aGV5J3JlIGJvdGggZ2xvYmFsLiBOZXh0LCBsZXQncyBsb29rIGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBgc3dhcGluX3N5bmNgLCBhbHNvIGluIHRoYXQgZmlsZS4gVGhlbiBgbW0vd29ya2luZ3NldC5jYCBpcyBnb2luZyB0byBjb250YWluIGB3b3JraW5nc2V0X3JlZmF1bHRgIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYC4gRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGB6c3dhcF9zdG9yZWAgaW4gYG1tL3pzd2FwLmNgLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCBgZG9fc3dhcF9wYWdlYCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AgYXJlIGhvdCBwYXRocywgc28gaXQgbWlnaHQgYmUgd2lzZSB0byBiZSBleHRyYSBjYXJlZnVsIHRoZXJlIGR1cmluZyB0ZXN0aW5nLCBhbmQgbWF5YmUgYXZvaWQgdGhlbSBhcyBpbml0aWFsIGZ1enppbmcgdGFyZ2V0cy5cblxuT2J2aW91c2x5LCBgQ09ORklHX1pTV0FQYCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoaXMgdG8gZXZlbiBjb21waWxlLCBhbmQgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfU1dBUGAgaXMgYWxzbyBlbmFibGVkLlxuXG5JJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHVzZSBzb21lIHRhcmdldGVkIHRvb2xzIHRvIHZlcmlmeSB0aGlzIG9uZSwgc28gSSB3aWxsIHByZXBhcmUgdGhvc2UgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjUzOjUwLjY1MTE0MTI4OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjczODc2NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC96c3dhcC5oPTM3PWJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6Mzg6Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC0zOS12b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9Njk9c3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaC03My1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg6NzQ6c3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNzUte1xcbi0tXFxubW0vdm1zY2FuLmM9NjgzPXN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTczNy1cXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzo3Mzg6XFx0XFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcXG5tbS92bXNjYW4uYy03MzktXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4tLVxcbm1tL3pzd2FwLmM9OTI0PXN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtOTc4LS8qKlxcbm1tL3pzd2FwLmM6OTc5OiAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyP1xcbm1tL3pzd2FwLmMtOTgwLSAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXFxuLS1cXG5tbS96c3dhcC5jLTk4OC0gKi9cXG5tbS96c3dhcC5jOjk4OTpib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTk5MC17XFxuLS1cXG5tbS96c3dhcC5jPTE1Nzk9Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xNTk5LVxcdCAqL1xcbm1tL3pzd2FwLmM6MTYwMDpcXHRpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXFxubW0venN3YXAuYy0xNjAxLVxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTM6NTIuMzI1MDIyMjgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY1MDQ0Mjc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlOiBac3dhcCBDaGVjayoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFyb3VuZCBgQ09ORklHX1pTV0FQYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIFpzd2FwIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0sIHBhcnRpY3VsYXJseSBpdHMgcmVzcG9uc2l2ZW5lc3MgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBrbm93IGhvdyB6c3dhcCBpcyBpbXBhY3RpbmcgdGhlIG92ZXJhbGwgSS9PIHByb2ZpbGUuIE15IGltbWVkaWF0ZSBtZW50YWwgY2hlY2tsaXN0IGluY2x1ZGVzOiBpcyBpdCBzZXQgdG8gJ3knLCAnbScsIG9yIHVuZGVmaW5lZD8gQSBzaW1wbGUgYGdyZXBgIG9yIGxvb2tpbmcgYXQgdGhlIGFwcHJvcHJpYXRlIGAuY29uZmlnYCBmaWxlIHdpbGwgcXVpY2tseSB0ZWxsIG1lLiBEZXBlbmRpbmcgb24gdGhlIHNldHRpbmcsIEkga25vdyBteSBuZXh0IHN0ZXBzIHdpbGwgY2hhbmdlLiBJZiBpdCdzIGVuYWJsZWQsIEknbGwgd2FudCB0byBjaGVjayB0aGUgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzIGxpa2UgYHpzd2FwLm1heF9wb29sX3BlcmNlbnRgLCBhbmQgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgYXMgdGhvc2UgaGF2ZSBiaWcgZWZmZWN0cy4gSWYgaXQncyBkaXNhYmxlZCwgSSdsbCBjb25zaWRlciB3aHkg4oCTIGlzIGl0IGEgZGVsaWJlcmF0ZSBjaG9pY2UgdG8gZmF2b3Igc3dhcCB0byBkaXNrLCBvciBtYXliZSB0aGVyZSBhcmUgcmVzb3VyY2UgbGltaXRhdGlvbnMgdGhhdCBwcmVjbHVkZSBac3dhcCdzIHVzYWdlPyBJJ2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIHdvcmtsb2FkIGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBoYXJkd2FyZSBpbiBvcmRlciB0byBldmFsdWF0ZSBpdHMgYXBwcm9wcmlhdGVuZXNzLiBJIG5lZWQgdG8gaGF2ZSBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB6c3dhcCBpbiBvcmRlciB0byBlbnN1cmUgdGhlIGJlc3QgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI2MywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjUzOjU5Ljk3NTQ2NzQxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ3ODc3MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDowMS43MjMzNTU0MTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDE5NTcxOTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIFpTV0FQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiWlNXQVAsXCIgcmlnaHQ/IEdvdHRhIHNlZSBob3cgdGhhdCdzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBsaXZlLCBzbyBpdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIHRoZSBcIlpTV0FQXCIgb3B0aW9uJ3MgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHBvdGVudGlhbGx5IGFueSBhc3NvY2lhdGVkIHN1Yi1vcHRpb25zIG9yIGhlbHAgdGV4dC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc3RhdGU6IGlzIGl0IGVuYWJsZWQgYnkgZGVmYXVsdCwgZG9lcyBpdCByZXF1aXJlIG90aGVyIGZlYXR1cmVzIHRvIGJlIGVuYWJsZWQsIGFuZCBhcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zPyBVbmRlcnN0YW5kaW5nIHRoZSBgS2NvbmZpZ2AgZW50cnkgaXMgY3J1Y2lhbCBiZWZvcmUgSSBzdGFydCBkaXZpbmcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRpbWUgdG8gZ2V0IGZhbWlsaWFyIHdpdGggdGhlIGN1cnJlbnQga2VybmVsJ3MgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTA2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTQ6MTEuMTQyOTI5NzU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMjpcXHRjb25maWcgWlNXQVBcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFNXQVBcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDI2OlxcdFxcdHNlbGVjdCBaU01BTExPQ1xcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xcbiAgMjk6XFx0XFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cXG4gIDMwOlxcdFxcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cXG4gIDMxOlxcdFxcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXFxuICAzMjpcXHRcXHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcXG4gIDMzOlxcdFxcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxuICAzNjpcXHRcXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxcbiAgNDA6XFx0XFx0ICBhdCBib290LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNhYmxlZC5cXG4gIDQxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDoxMS4xNDMwMjMzMTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzcyNTY3Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFpTV0FQIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBgWlNXQVBgIHRoaW5nLiBJdCBjbGVhcmx5IHJlbGllcyBvbiBgU1dBUGAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaW5jbHVkZSBib3RoIGBaU1dBUGAgYW5kIGBTV0FQYCBpbiBgRW5hYmxlQ29uZmlnc2AuIEFuZCwgdGhpbmtpbmcgYWJvdXQgYSBnb29kIHVzZXIgZXhwZXJpZW5jZSwgSSdsbCBsaWtlbHkgYWRkIGBaU1dBUF9ERUZBVUxUX09OYCBhcyB3ZWxsLiBFbmFibGluZyBpdCBieSBkZWZhdWx0IGp1c3QgZmVlbHMgcmlnaHQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBwYXkgYXR0ZW50aW9uIHRvLiBGcm9tIG15IHByZXZpb3VzIGV4cGVyaWVuY2UgYW5kIGtub3dsZWRnZSwgSSd2ZSBpZGVudGlmaWVkIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBjbG9zZWx5OiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYC5cblxuSeKAmWxsIHN0YXJ0IHdpdGggYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCdzIGFjY2Vzc2libGUgYW5kIGV4cG9ydGVkIGFzIGl0IGlzIGNydWNpYWwgaW4gdGhlIG92ZXJhbGwgcHJvY2Vzcy4gVGltZSB0byBsb29rIGludG8gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGNvbmZpcm0gaXRzIHZpc2liaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjE1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTQ6MjAuNTE1NTk0NTEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEzNzM5ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwLmg9MzE0PXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oOjMxNTpzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbm1tL3N3YXAuaC0zMTYtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz00MTk9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTAzLS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo1MDQ6ICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtNTA1LSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTIzLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzo1MjQ6c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbm1tL3N3YXBfc3RhdGUuYy01MjUtXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz02NTI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTY2Ny1cXHRcXHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xcbm1tL3N3YXBfc3RhdGUuYzo2Njg6XFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy02NjktXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NzAzPXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNzE4LVxcdFxcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XFxubW0vc3dhcF9zdGF0ZS5jOjcxOTpcXHRcXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcXG5tbS9zd2FwX3N0YXRlLmMtNzIwLVxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbi0tXFxubW0venN3YXAuYz0xMDYwPXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwODAtXFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG5tbS96c3dhcC5jOjEwODE6XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG5tbS96c3dhcC5jLTEwODItXFx0XFx0XFx0XFx0XFx0IE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDoyMi4wMjkzNDA4MDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzczMjg1MzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBDYWNoZSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBwYWdlcyBnZXQgaW50byB0aGUgc3dhcCBjYWNoZSBhbmQgd2hlcmUgdGhlIGFsbG9jYXRpb24gaGFwcGVucy4gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgdGhlIGNhbGwgc2l0ZXMgYXJlIGEgbWl4IG9mIHRoaW5ncy4gSXQncyBjYWxsZWQgZnJvbSBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBzdGFuZGFyZCBzd2FwLWluIHBhdGguIEknbSBhbHNvIHNlZWluZyBpdCdzIHVzZWQgYnkgYHN3YXBpbl9zeW5jYCwgd2hpY2ggSSBrbm93IGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCBpbmRpY2F0aW5nIHRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24gcG9pbnQgZm9yIHN3YXAgb3BlcmF0aW9ucyBhY3Jvc3MgdGhlIHN5c3RlbS4gQW5kIHRoZXJlJ3MgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIHN1Z2dlc3RpbmcgdGhpcyBmdW5jdGlvbiBoYXMgcmVsZXZhbmNlIGluIGNvbXByZXNzZWQgc3dhcCBhcyB3ZWxsLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIHN5c3RlbS13aWRlIGltcGxpY2F0aW9ucyBvZiBgc3dhcGluX3N5bmNgLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IuIEkgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gZGlnIGludG8gdGhlIHdvcmtpbmdzZXQgbWFuYWdlbWVudC4gVGhhdCBpcywgSSBzaG91bGQgY2hlY2sgaG93IGB3b3JraW5nc2V0X3JlZmF1bHRgIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCBpbnRlcmFjdCB3aXRoIHRoaXMgYWxsb2NhdGlvbiBwYXRoLiBUaGVzZSBhcmUgYWxzbyBnbG9iYWwgZnVuY3Rpb25zLCB3aGljaCBtZWFucyB0aGVpciBiZWhhdmlvciBpcyByZWxldmFudCB0byB0aGUgc3lzdGVtJ3Mgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHN3YXBwaW5nIGltcGFjdHMgdGhlIHdvcmtpbmdzZXQgYW5kIGhvdyB0aGUgTFJVIGlzIG1hbmFnZWQgaW4gcmVsYXRpb24gdG8gdGhpcy4gSSdsbCBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NDIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTQ6MjkuNzYyMTk3NzM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5ODU1NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3Q9MTQyNj1UaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTE2MzctXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0OjE2Mzg6XFx0ICB3b3JraW5nc2V0X3JlZmF1bHRfYW5vblxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xNjM5LVxcdFxcdE51bWJlciBvZiByZWZhdWx0cyBvZiBwcmV2aW91c2x5IGV2aWN0ZWQgYW5vbnltb3VzIHBhZ2VzLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xNjQwLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoxNjQxOlxcdCAgd29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTY0Mi1cXHRcXHROdW1iZXIgb2YgcmVmYXVsdHMgb2YgcHJldmlvdXNseSBldmljdGVkIGZpbGUgcGFnZXMuXFxuLS1cXG5tbS9maWxlbWFwLmM9OTU1PWludCBmaWxlbWFwX2FkZF9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy05ODYtXFx0XFx0aWYgKCEoZ2ZwIFxcdTAwMjYgX19HRlBfV1JJVEUpIFxcdTAwMjZcXHUwMDI2IHNoYWRvdylcXG5tbS9maWxlbWFwLmM6OTg3OlxcdFxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG5tbS9maWxlbWFwLmMtOTg4LVxcdFxcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbi0tXFxubW0vaW50ZXJuYWwuaD0zOD12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaW50ZXJuYWwuaC0zOS1cXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xcbm1tL2ludGVybmFsLmg6NDA6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcXG5tbS9pbnRlcm5hbC5oOjQxOnZvaWQgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XFxubW0vaW50ZXJuYWwuaC00Mi12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yMTkzPXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTIyMDItXFx0XFxcIndyaXRlYmFja1xcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjIyMDM6XFx0XFxcIndvcmtpbmdzZXRfcmVmYXVsdF9hbm9uXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MjIwNDpcXHRcXFwid29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjA1LSNpZmRlZiBDT05GSUdfU1dBUFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjI5LVxcdC8qIFRoZSBtZW1vcnkgZXZlbnRzICovXFxubW0vbWVtY29udHJvbC5jOjE2MzA6XFx0eyBcXFwid29ya2luZ3NldF9yZWZhdWx0X2Fub25cXFwiLFxcdFdPUktJTkdTRVRfUkVGQVVMVF9BTk9OXFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTYzMTpcXHR7IFxcXCJ3b3JraW5nc2V0X3JlZmF1bHRfZmlsZVxcXCIsXFx0V09SS0lOR1NFVF9SRUZBVUxUX0ZJTEVcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYy0xNjMyLVxcdHsgXFxcIndvcmtpbmdzZXRfYWN0aXZhdGVfYW5vblxcXCIsXFx0V09SS0lOR1NFVF9BQ1RJVkFURV9BTk9OXFx0fSxcXG4tLVxcbm1tL21lbW9yeS5jPTQ4ODE9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MDIzLVxcdGlmIChzaGFkb3cpXFxubW0vbWVtb3J5LmM6NTAyNDpcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XFxubW0vbWVtb3J5LmMtNTAyNS1cXG4tLVxcbm1tL3NobWVtLmM9MjI1ND1zdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yMzgyLVxcdGlmIChzaGFkb3cpXFxubW0vc2htZW0uYzoyMzgzOlxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZChmb2xpbywgc2hhZG93KTtcXG5tbS9zaG1lbS5jLTIzODQtXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NjUyPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy02NzQtXFx0aWYgKHNoYWRvdylcXG5tbS9zd2FwX3N0YXRlLmM6Njc1OlxcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG5tbS9zd2FwX3N0YXRlLmMtNjc2LVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTcwMz1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcyNS1cXHRpZiAoc2hhZG93KVxcbm1tL3N3YXBfc3RhdGUuYzo3MjY6XFx0XFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcbm1tL3N3YXBfc3RhdGUuYy03MjctXFxuLS1cXG5tbS92bXN0YXQuYz0xMTk5PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTI0My1cXHRbSShXT1JLSU5HU0VUX05PREVTKV1cXHRcXHRcXHQ9IFxcXCJ3b3JraW5nc2V0X25vZGVzXFxcIixcXG5tbS92bXN0YXQuYzoxMjQ0OlxcdFtJKFdPUktJTkdTRVRfUkVGQVVMVF9BTk9OKV1cXHRcXHQ9IFxcXCJ3b3JraW5nc2V0X3JlZmF1bHRfYW5vblxcXCIsXFxubW0vdm1zdGF0LmM6MTI0NTpcXHRbSShXT1JLSU5HU0VUX1JFRkFVTFRfRklMRSldXFx0XFx0PSBcXFwid29ya2luZ3NldF9yZWZhdWx0X2ZpbGVcXFwiLFxcbm1tL3Ztc3RhdC5jLTEyNDYtXFx0W0koV09SS0lOR1NFVF9BQ1RJVkFURV9BTk9OKV1cXHRcXHQ9IFxcXCJ3b3JraW5nc2V0X2FjdGl2YXRlX2Fub25cXFwiLFxcbi0tXFxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNTM4LVxcbm1tL3dvcmtpbmdzZXQuYzo1Mzk6c3RhdGljIHZvaWQgX193b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93LFxcbm1tL3dvcmtpbmdzZXQuYy01NDAtXFx0XFx0XFx0XFx0IGJvb2wgbHJ1X21hbmFnZWQpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNTk0LS8qKlxcbm1tL3dvcmtpbmdzZXQuYzo1OTU6ICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXFxubW0vd29ya2luZ3NldC5jLTU5Ni0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy02MDUtICovXFxubW0vd29ya2luZ3NldC5jOjYwNjp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxubW0vd29ya2luZ3NldC5jLTYwNy17XFxubW0vd29ya2luZ3NldC5jOjYwODpcXHRfX3dvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93LCBmYWxzZSk7XFxubW0vd29ya2luZ3NldC5jLTYwOS19XFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNjExLS8qKlxcbm1tL3dvcmtpbmdzZXQuYzo2MTI6ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkIC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5XFxubW0vd29ya2luZ3NldC5jLTYxMy0gKiBldmljdGVkIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgTFJVLlxcbi0tXFxubW0vd29ya2luZ3NldC5jLTYxNi0gKlxcbm1tL3dvcmtpbmdzZXQuYzo2MTc6ICogTGlrZSB3b3JraW5nc2V0X3JlZmF1bHQoKSwgYnV0IGZvciBhIGZvbGlvIHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgYWRkZWRcXG5tbS93b3JraW5nc2V0LmMtNjE4LSAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNjI1LSAqL1xcbm1tL3dvcmtpbmdzZXQuYzo2MjY6dm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbm1tL3dvcmtpbmdzZXQuYy02Mjcte1xcbm1tL3dvcmtpbmdzZXQuYzo2Mjg6XFx0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgdHJ1ZSk7XFxubW0vd29ya2luZ3NldC5jLTYyOS19XFxuLS1cXG5tbS96c3dhcC5jPTk4OT1ib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3pzd2FwLmMtMTAxOC0gKiBzaGFkb3cgaW50byB0aGUgc3dhcCBzbG90IChidWZmZXIgZHJvcHBlZCkgb3IgZmVlZHMgaXQgdG9cXG5tbS96c3dhcC5jOjEwMTk6ICogd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKCkgKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nXFxubW0venN3YXAuYy0xMDIwLSAqIGhlcmUgZW5zdXJlcyB0aGUgdHdvIHBhdGhzIG5ldmVyIGRvdWJsZS1jb3VudC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTQ6MzEuMzIyMDU5ODI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjQwMzAwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgbm90aWNpbmcgYSBwYXR0ZXJuLiBTZXZlcmFsIGZ1bmN0aW9ucyDigJMgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgLCBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYHN3YXBpbl9zeW5jYCwgYW5kIGB6c3dhcF9zdG9yZWAg4oCTIGFyZSBhbGwgZ2xvYmFsIGluIHNjb3BlLiBUaGlzIHJhaXNlcyBhIGZldyBpbW1lZGlhdGUgcXVlc3Rpb25zIGluIG15IG1pbmQsIG1vc3RseSBhYm91dCB0aGVpciBpbnRlbmRlZCB1c2FnZSBhbmQgd2hldGhlciB0aGV5IHJlcHJlc2VudCBhIGdvb2QgZW5jYXBzdWxhdGlvbiBvZiBmdW5jdGlvbi4gTXkgbmV4dCB0aG91Z2h0IGlzLCBsZXQncyB6ZXJvIGluIG9uIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGtleSBmdW5jdGlvbiBpcyBiZWluZyBleHBvcnRlZCwgd2hpY2ggY291bGQgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU0OjM2LjU4NjA5MTcwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MzY4ODU2NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDozOC42NTk3ODcyOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0MjY5NjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIFNjb3BlIGFuZCBTeW5jaHJvbml6YXRpb24qKlxuXG5IbW0sIGludGVyZXN0aW5nLiBUaGUgY29kZSBJJ20gbG9va2luZyBhdCBpc24ndCAqZXhwbGljaXRseSogZXhwb3J0ZWQsIGJ1dCBpdCdzIGNsZWFybHkgYWNjZXNzaWJsZSBnbG9iYWxseS4gVGhhdCdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGNvbmNlcm4sIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBJbXBsaWNpdCBnbG9iYWwgdmFyaWFibGVzIGNhbiBiZSB0cmlja3kgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgZGVidWdnaW5nLCBlc3BlY2lhbGx5IGluIGEgbGFyZ2UgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIHN0cnVjdHVyZWQgdGhpcyB3YXkuIElzIHRoaXMgYnkgZGVzaWduIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBvciBhIGxlZ2FjeSBhcnRpZmFjdD8gSXMgaXQgYSBwb3RlbnRpYWwgc291cmNlIG9mIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzP1xuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc3dhcGluX3N5bmNgIGZ1bmN0aW9uLiBJdCBzZWVtcyBjcml0aWNhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IGZ1bmN0aW9uLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc3luY2hyb25pemF0aW9uIG9yIGRhdGEgdHJhbnNmZXIgbG9naWMgcmVsYXRlZCB0byB0aGlzIGdsb2JhbCB2YXJpYWJsZSBpcyBpbXBsZW1lbnRlZC4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBjb2hlcmVuY2UgbW9kZWwgaGVyZS4gVW5kZXJzdGFuZGluZyB0aGlzIHJvdXRpbmUgd2lsbCBsaWtlbHkgc2hlZCBsaWdodCBvbiB0aGUgZGVzaWduIGNob2ljZXMgc3Vycm91bmRpbmcgdGhlIHZhcmlhYmxlJ3Mgc2NvcGUuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgY29udGV4dCBzd2l0Y2hlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzODMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDo0NS44MDI0ODYxMzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjMyNzI0MDIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnN3YXBpbl9zeW5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NDo0Ny44NjU3NjQ1MzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5OTgwNjI0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGB6c3dhcF9zdG9yZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIG1lbnRpb24gb2YgYHpzd2FwX3N0b3JlYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIGxpa2VseSB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGV4YW1pbmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlLCBob3cgaXQncyBiZWhhdmluZywgYW5kIHdoYXQgc3BlY2lmaWMgYXNwZWN0cyByZXF1aXJlIHRoZSBtb3N0IHNjcnV0aW55LCBnaXZlbiB0aGUgY3VycmVudCBpc3N1ZSBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY2NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU1OjQ0Ljg2MzgyODgwM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NTQ5MTEwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qenN3YXBfc3RvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU1OjQ3LjA0OTMyNTE0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAxMzk4NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgd29ya2luZ3NldF9yZWZhdWx0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY2hlY2sgYHdvcmtpbmdzZXRfcmVmYXVsdGAuXCIgSXQncyBhIGtleSBtZXRyaWMsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBhbnkgcG90ZW50aWFsIGFub21hbGllcy4gTXkgbWluZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucy4gSSdtIHRoaW5raW5nIGFib3V0IHdoYXQgY291bGQgYmUgY2F1c2luZyBmbHVjdHVhdGlvbnMsIHdoYXQgdGhlIHR5cGljYWwgYmFzZWxpbmVzIGxvb2sgbGlrZSBpbiB0aGlzIGVudmlyb25tZW50LCBhbmQgYW55IHBvdGVudGlhbCBjb3JyZWxhdGlvbnMgd2l0aCBvdGhlciBwZXJmb3JtYW5jZSBpbmRpY2F0b3JzIEknbSB0cmFja2luZy4gSXMgaXQgaGlnaGVyIHRoYW4gZXhwZWN0ZWQ/IExvd2VyPyBBbmQgY3JpdGljYWxseSwgd2hhdCBhcmUgdGhlIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGVmZmVjdHMsIG9yIHRoZSBsaWtlbHkgcm9vdCBjYXVzZXMgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyBpdD8gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MzAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NTo1Mi4zNTA3MjU5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MDkxMjMxNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qd29ya2luZ3NldF9yZWZhdWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NTo1NC41MzE2NDUxMTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg2MDc3MzA4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYC4gSXQncyBhIGtleSBmdW5jdGlvbiwgb2J2aW91c2x5LCBidXQgd2hhdCBzcGVjaWZpY2FsbHkgYW0gSSB0cnlpbmcgdG8gcGFyc2UgaGVyZT8gSXQncyBsaWtlbHkgYSBib29sZWFuIGZ1bmN0aW9uIG9yIG1hY3JvLCBhbmQgdGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0cyBwdXJwb3NlIGlzIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIGZvbGlvLCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHpzd2FwYCwgcmVwcmVzZW50cyBhIHdyaXRlYmFjayBidWZmZXIuXG5cblNvLCB0aGUgaW1wbGljaXQgcXVlc3Rpb24gaW4gbXkgaGVhZCBpczogKmlzIHRoaXMgZm9saW8gY3VycmVudGx5IHVuZGVyZ29pbmcgYSB3cml0ZWJhY2sgb3BlcmF0aW9uLCBhbmQgdGhlcmVmb3JlIHNob3VsZCBiZSB0cmVhdGVkIGFzIHN1Y2ggd2l0aGluIHpzd2FwJ3MgbWFuYWdlbWVudCByb3V0aW5lcz8qIFRoaXMgZGlzdGluY3Rpb24gaXMgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcy4gSWYgaXQncyBhIHdyaXRlYmFjayBidWZmZXIsIGNlcnRhaW4gb3B0aW1pemF0aW9ucyBhbmQgY29uc2lkZXJhdGlvbnMgcHJvYmFibHkgYXBwbHksIHZlcnN1cyBhIGZvbGlvIHNpbXBseSBoZWxkIHdpdGhpbiBhIHpzd2FwIGNhY2hlIHdhaXRpbmcgdG8gYmUgcGFnZWQgb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHdyaXRlYmFjayBvcGVyYXRpb25zIGNhbiBiZSBhc3luY2hyb25vdXMgYW5kIHRoZWlyIHN0YXR1cyBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoaXMgcmV0dXJucyB0cnVlLCB3aGF0IHRoYXQgaW1wbGllcyBhYm91dCB0aGUgZm9saW8ncyBzdGF0ZSwgYW5kIGhvdyBgenN3YXBgIGxldmVyYWdlcyB0aGlzIGluZm9ybWF0aW9uLiBGcm9tIGhlcmUsIEkgY2FuIGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uLCBsb29rIGF0IGl0cyBjYWxsZXJzLCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgdXNlcyB0aGlzIGNydWNpYWwgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTc6MDMuMTM5Mzc5Mjg2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk4Nzk2MjA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NzowNS4zMzgyMTEwMjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU0MDIxNDAxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEga2VybmVsIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBTeXprYWxsZXIgVGFyZ2V0cyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGZvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIGV4cGxvaXRhYmxlIHRocm91Z2ggc3l6a2FsbGVyLiBUaGUga2V5IGhlcmUgaXMgZ2xvYmFsIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCBzcGVjaWZpY2FsbHkgXCJleHBvcnRlZFwiIGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZSwgYnV0IGFyZSBzdGlsbCBnbG9iYWxseSB2aXNpYmxlIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzIGZvciBzeXprYWxsZXIgZnV6emluZy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgenN3YXBfc3RvcmVgIGluIGBtbS96c3dhcC5jYC4gWnN3YXAsIHdpdGggaXRzIG1lbW9yeSBjb21wcmVzc2lvbiBhbmQgc3dhcHBpbmcgZnVuY3Rpb25hbGl0eSwgaXMgY29tcGxleCBhbmQgaW5oZXJlbnRseSBpbnZvbHZlcyBpbnRlcmFjdGlvbiB3aXRoIGEgbG90IG9mIG90aGVyIHN1YnN5c3RlbXMuIFRoaXMgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZpbmRpbmcgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSwgYmVoYXZpb3IgdGhyb3VnaCBmdXp6aW5nLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzkxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTc6MjAuNzQwMzU0MjIzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkxMjU1MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX3N0b3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvbWVtaW5mby5jPTM0PXN0YXRpYyBpbnQgbWVtaW5mb19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuZnMvcHJvYy9tZW1pbmZvLmMtOTMtXFx0c2VxX3ByaW50ZihtLCAgXFxcIlpzd2FwcGVkOiAgICAgICAlOGx1IGtCXFxcXG5cXFwiLFxcbmZzL3Byb2MvbWVtaW5mby5jOjk0OlxcdFxcdCAgICh1bnNpZ25lZCBsb25nKWF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9wYWdlcykgXFx1MDAzY1xcdTAwM2NcXG5mcy9wcm9jL21lbWluZm8uYy05NS1cXHRcXHQgICAoUEFHRV9TSElGVCAtIDEwKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmg9OD1zdHJ1Y3QgbHJ1dmVjO1xcbmluY2x1ZGUvbGludXgvenN3YXAuaC05LVxcbmluY2x1ZGUvbGludXgvenN3YXAuaDoxMDpleHRlcm4gYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXM7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTExLVxcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oPTI3PXVuc2lnbmVkIGxvbmcgenN3YXBfdG90YWxfcGFnZXModm9pZCk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oOjI4OmJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTI5LWludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC96c3dhcC5oPTQyPXN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XFxuaW5jbHVkZS9saW51eC96c3dhcC5oLTQzLVxcbmluY2x1ZGUvbGludXgvenN3YXAuaDo0NDpzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfc3RvcmUoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L3pzd2FwLmgtNDUte1xcbi0tXFxubW0vcGFnZV9pby5jPTIwND1pbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0yMzctXFxubW0vcGFnZV9pby5jOjIzODpcXHRpZiAoenN3YXBfc3RvcmUoZm9saW8pKSB7XFxubW0vcGFnZV9pby5jLTIzOS1cXHRcXHRjb3VudF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLCBNVEhQX1NUQVRfWlNXUE9VVCk7XFxuLS1cXG5tbS96c3dhcC5jLTQ2LS8qIFRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHN0b3JlZCBpbiB6c3dhcCAqL1xcbm1tL3pzd2FwLmM6NDc6YXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNDgtLyogVGhlIG51bWJlciBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyBjdXJyZW50bHkgc3RvcmVkIGluIHpzd2FwICovXFxubW0venN3YXAuYzo0OTpzdGF0aWMgYXRvbWljX2xvbmdfdCB6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbm1tL3pzd2FwLmMtNTAtXFxuLS1cXG5tbS96c3dhcC5jPTc2NT1zdGF0aWMgdm9pZCB6c3dhcF9lbnRyeV9mcmVlKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTc3NC1cXHRpZiAoZW50cnktXFx1MDAzZWxlbmd0aCA9PSBQQUdFX1NJWkUpXFxubW0venN3YXAuYzo3NzU6XFx0XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZ6c3dhcF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMpO1xcbm1tL3pzd2FwLmMtNzc2LVxcdHpzd2FwX2VudHJ5X2NhY2hlX2ZyZWUoZW50cnkpO1xcbm1tL3pzd2FwLmM6Nzc3OlxcdGF0b21pY19sb25nX2RlYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTc3OC19XFxuLS1cXG5tbS96c3dhcC5jPTEwMjI9dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTEwNTQtICogdG8gdGhlIHN3YXAgZGV2aWNlLiAgV2UgYXJlIGJhc2ljYWxseSByZXN1bWluZyB0aGUgc2FtZSBzd2FwXFxubW0venN3YXAuYzoxMDU1OiAqIHdyaXRlYmFjayBwYXRoIHRoYXQgd2FzIGludGVyY2VwdGVkIHdpdGggdGhlIHpzd2FwX3N0b3JlKClcXG5tbS96c3dhcC5jLTEwNTYtICogaW4gdGhlIGZpcnN0IHBsYWNlLiAgQWZ0ZXIgdGhlIGZvbGlvIGhhcyBiZWVuIGRlY29tcHJlc3NlZCBpbnRvXFxuLS1cXG5tbS96c3dhcC5jPTEyODM9c3RhdGljIHVuc2lnbmVkIGxvbmcgenN3YXBfc2hyaW5rZXJfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3pzd2FwLmMtMTMxNy1cXHRcXHRucl9iYWNraW5nID0genN3YXBfdG90YWxfcGFnZXMoKTtcXG5tbS96c3dhcC5jOjEzMTg6XFx0XFx0bnJfc3RvcmVkID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTEzMTktXFx0fVxcbi0tXFxubW0venN3YXAuYz0xNDA4PXN0YXRpYyB2b2lkIHNocmlua193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxubW0venN3YXAuYy0xNDk4LVxcbm1tL3pzd2FwLmM6MTQ5OTpzdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3pzd2FwLmMtMTUwMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4tLVxcbm1tL3pzd2FwLmMtMTUzNy1cXHQgKiBubyBmdXJ0aGVyIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEdyYWIgcmVmcyB0byB0aGUgcG9vbCBhbmQgb2JqY2csXFxubW0venN3YXAuYzoxNTM4OlxcdCAqIGNoYXJnZSB6c3dhcCBtZW1vcnksIGFuZCBpbmNyZW1lbnQgenN3YXBfc3RvcmVkX3BhZ2VzLlxcbm1tL3pzd2FwLmMtMTUzOS1cXHQgKiBUaGUgb3Bwb3NpdGUgYWN0aW9ucyB3aWxsIGJlIHBlcmZvcm1lZCBieSB6c3dhcF9lbnRyeV9mcmVlKClcXG4tLVxcbm1tL3pzd2FwLmMtMTU0Ni1cXHR9XFxubW0venN3YXAuYzoxNTQ3OlxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE1NDgtXFx0aWYgKGVudHJ5LVxcdTAwM2VsZW5ndGggPT0gUEFHRV9TSVpFKVxcbm1tL3pzd2FwLmM6MTU0OTpcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xNTUwLVxcbi0tXFxubW0venN3YXAuYy0xNTc4LVxcbm1tL3pzd2FwLmM6MTU3OTpib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNTgwLXtcXG4tLVxcbm1tL3pzd2FwLmMtMTYzNC1cXG5tbS96c3dhcC5jOjE2MzU6XFx0XFx0aWYgKCF6c3dhcF9zdG9yZV9wYWdlKHBhZ2UsIG9iamNnLCBwb29sKSlcXG5tbS96c3dhcC5jLTE2MzYtXFx0XFx0XFx0Z290byBwdXRfcG9vbDtcXG4tLVxcbm1tL3pzd2FwLmM9MTgxNT1zdGF0aWMgaW50IGRlYnVnZnNfZ2V0X3N0b3JlZF9wYWdlcyh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG5tbS96c3dhcC5jLTE4MTYte1xcbm1tL3pzd2FwLmM6MTgxNzpcXHQqdmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2enN3YXBfc3RvcmVkX3BhZ2VzKTtcXG5tbS96c3dhcC5jLTE4MTgtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS96c3dhcC5jPTE4MjI9c3RhdGljIGludCBkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXModm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxubW0venN3YXAuYy0xODIzLXtcXG5tbS96c3dhcC5jOjE4MjQ6XFx0KnZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnpzd2FwX3N0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlcyk7XFxubW0venN3YXAuYy0xODI1LVxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYz01Mj1zdGF0aWMgaW50IHJlYWRfbWluX2ZyZWVfa2Ioc2l6ZV90ICp2YWx1ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMtNTYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYzo1NzpzdGF0aWMgaW50IGdldF96c3dhcF9zdG9yZWRfcGFnZXMoc2l6ZV90ICp2YWx1ZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF96c3dhcC5jLTU4LXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmM9NTU4PXN0YXRpYyBpbnQgdGVzdF9ub19rbWVtX2J5cGFzcyhjb25zdCBjaGFyICpyb290KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfenN3YXAuYy02MjQtXFx0XFx0ZnJlZSh0cmlnZ2VyX2FsbG9jYXRpb24pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmM6NjI1OlxcdFxcdGlmIChnZXRfenN3YXBfc3RvcmVkX3BhZ2VzKFxcdTAwMjZzdG9yZWRfcGFnZXMpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X3pzd2FwLmMtNjI2LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1NzoyMi4zMzE2MTg3ODNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAzNzEzNDExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgU3dhcCBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgc3dhcCBpbXBsZW1lbnRhdGlvbiBoZXJlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgenN3YXBfc3RvcmVgIGlzIGEgZ2xvYmFsbHkgYWNjZXNzaWJsZSBmdW5jdGlvbiwgYW5kIGl0J3MgY2FsbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgc3dhcF93cml0ZW91dGAuIE9uIHRoZSBvdGhlciBoYW5kLCBgc3dhcGluX3N5bmNgIGlzIGFsc28gZ2xvYmFsLCBhbmQgaXRzIGludm9jYXRpb24gaXMgdHJpZ2dlcmVkIHRocm91Z2ggYGRvX3N3YXBfcGFnZWAg4oCTIHNwZWNpZmljYWxseSwgdGhyb3VnaCB0aGF0IGBzd2FwaW5fcmVhZGFoZWFkYCBwYXRoLiBOb3csIEkgd2FudCB0byBkcmlsbCBkb3duIGZ1cnRoZXIgaW50byB0aGUgbWVjaGFuaWNzIG9mIGBzd2FwaW5fc3luY2AuIFRpbWUgdG8gY2hlY2sgb3V0IGBtbS9zd2FwX3N0YXRlLmNgIGZvciB0aGUgZGV0YWlsZWQgbG9naWMgb2YgdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDYxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTg6NTc6MzAuMzY4NzU1MzA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA4ODkwMTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBpbl9zeW5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS5jPTQ4ODE9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00OTcwLVxcdFxcdGlmIChkYXRhX3JhY2Uoc2ktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1dQX1NZTkNIUk9OT1VTX0lPKSlcXG5tbS9tZW1vcnkuYzo0OTcxOlxcdFxcdFxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIEdGUF9ISUdIVVNFUl9NT1ZBQkxFLFxcbm1tL21lbW9yeS5jLTQ5NzItXFx0XFx0XFx0XFx0XFx0ICAgIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHZtZikgfCBCSVQoMCksXFxuLS1cXG5tbS9zaG1lbS5jPTIwNDM9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMDU3LVxcdG1wb2wgPSBzaG1lbV9nZXRfcGdvZmZfcG9saWN5KGluZm8sIGluZGV4LCBvcmRlciwgXFx1MDAyNmlseCk7XFxubW0vc2htZW0uYzoyMDU4OlxcdGZvbGlvID0gc3dhcGluX3N5bmMoZW50cnksIGdmcCwgQklUKG9yZGVyKSwgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3NobWVtLmMtMjA1OS1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vc3dhcC5oPTMzMj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsXFxubW0vc3dhcC5oLTMzMy1cXHRcXHRzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vc3dhcC5oOjMzNDpzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBmbGFnLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcXG5tbS9zd2FwLmgtMzM1LVxcdFxcdFxcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuLS1cXG5tbS9zd2FwLmg9NDA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IHN3cCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9zd2FwLmgtNDEzLVxcbm1tL3N3YXAuaDo0MTQ6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKFxcbm1tL3N3YXAuaC00MTUtXFx0c3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGZsYWcsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY1Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjg3LS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo2ODg6ICogc3dhcGluX3N5bmMgLSBzd2FwLWluIG9uZSBvciBtdWx0aXBsZSBlbnRyaWVzIHNraXBwaW5nIHJlYWRhaGVhZC5cXG5tbS9zd2FwX3N0YXRlLmMtNjg5LSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcwMi0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NzAzOnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxubW0vc3dhcF9zdGF0ZS5jLTcwNC1cXHRcXHRcXHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU3OjMxLjg3NzY1MjMzNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTk0MDkxNDQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBNb2RpZmllZCBTd2FwIGFuZCBac3dhcCBGdW5jdGlvbmFsaXR5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIEknbSBzZWVpbmcgY2hhbmdlcyByZWxhdGVkIHRvIHN3YXAgYW5kIHpzd2FwLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB3b3JraW5nc2V0cyBhbmQgdGhlIHN3YXAgY2FjaGUuXG5cbkluaXRpYWxseSwgSSBpZGVudGlmaWVkIHNldmVyYWwgZnVuY3Rpb25zIGFzIHBvdGVudGlhbCBmb2N1cyBwb2ludHM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgLiBUaGVzZSBzZWVtIHRvIHJlcHJlc2VudCB0aGUgY29yZSBvZiB0aGUgbW9kaWZpZWQgbG9naWMuXG5cbkkndmUgbm90ZWQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYHN3YXBpbl9zeW5jYCwgYHpzd2FwX3N0b3JlYCwgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIChmb3JtZXJseSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2ApLiBBbHNvLCBgd29ya2luZ3NldF9yZWZhdWx0YCBoYXMgYmVlbiBjaGFuZ2VkLiBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgYXJlIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zLlxuXG5Ob3csIEknbSBjaGVja2luZyB3aGljaCBvZiB0aGVzZSBhcmUgc3RhdGljLCBiZWNhdXNlIEkga25vdyB0aGF0IGltcGFjdHMgZnV6emluZy4gU28sIEkgY29uZmlybWVkIHRoYXQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlIGZ1bmN0aW9uczogYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgLCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGB3b3JraW5nc2V0X3JlZmF1bHRgLCBgd29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkYCwgYHN3YXBpbl9zeW5jYCwgYW5kIGB6c3dhcF9zdG9yZWAgYXJlIHN0YXRpYy4gVGhlcmVmb3JlLCB0aGV5IGFyZSBhbGwgc3VpdGFibGUgZm9yIGluY2x1c2lvbiBpbiB0aGUgRm9jdXNTeW1ib2xzIGxpc3QuXG5cbkkgaGFkIHRvIHJlbW92ZSBgZG9fc3dhcF9wYWdlYCBhbmQgYHNobWVtX3N3YXBpbl9mb2xpb2AgZnJvbSBteSBsaXN0LiBUaG9zZSBhcmUgaG90IHBhdGhzLCBhbmQgSSB3YW50IHRvIGF2b2lkIHRoZW0uIFNpbWlsYXJseSwgYHpzd2FwX3N0b3JlYCBpcyBhbHNvIGEgaG90IHBhdGgsIGJ1dCBpdCBpcyB0aGUgbWFpbiB6c3dhcCBlbnRyeSBwb2ludC5cblxuSSBhbSBjaGVja2luZyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGFuZCBgX19zd2FwX2NhY2hlX2FsbG9jYC4gVGhvc2UgYXJlIHN0YXRpYy4gVGhleSBhcmUgbm90IHN1aXRhYmxlIHRvIGluY2x1ZGUgaW4gdGhlIEZvY3VzU3ltYm9scyBsaXN0LlxuXG5TbywgdGhlIGRlZmluaXRpdmUgbGlzdCBmb3IgYEZvY3VzU3ltYm9sc2A6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZGAsIGBzd2FwaW5fc3luY2AsIGFuZCBgenN3YXBfc3RvcmVgLlxuXG5Gcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSd2ZSBjb25maXJtZWQgdGhhdCBlbmFibGluZyBgWlNXQVBgLCBgU1dBUGAsIGFuZCBgWlNXQVBfREVGQVVMVF9PTmAgaXMgd2hhdCBJIG5lZWQuIGBaU1dBUGAgaXMgdGhlIG1vc3QgaW1wb3J0YW50IGNvbmZpZywgYW5kIHRoZSBvdGhlcnMgYXJlIGRlcGVuZGVuY2llcy5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byBob3cgenN3YXAgYW5kIHN3YXAgaW50ZXJhY3QsIHBhcnRpY3VsYXJseSB3aXRoIGhvdyB0aGV5IG1hbmFnZSB3b3JraW5nc2V0IHJlZmF1bHRzIGFuZCB3cml0ZWJhY2sgYnVmZmVycy4gTmV3IGZ1bmN0aW9ucyBhcmUgYWRkZWQsIGFuZCBleGlzdGluZyBvbmVzIGFyZSBtb2RpZmllZCB0byBlbnN1cmUgdGhhdCBzaGFkb3dzIGFyZSBwcmVzZXJ2ZWQgYW5kIHJlc3RvcmVkIGluIHN3YXAgY2FjaGUgb3BlcmF0aW9ucy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBzdGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDEyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1Nzo0Ny44MTg1Njg3NDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTg3MTU2MzAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBXT1JLSU5HU0VUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1Nzo0OS4yNzcyODk2NzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNTEyNTk4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBtbS93b3JraW5nc2V0LmNgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gRmlyc3QsIGxldCdzIGdldCBhIGhhbmRsZSBvbiB0aGUgYG1tL3dvcmtpbmdzZXQuY2AgbW9kdWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIG1vZHVsZSBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcmUgd2UgdGFsa2luZyBhYm91dCBjb3JlIHBhZ2UgdGFibGUgc3RydWN0dXJlcywgdGhlIHBoeXNpY2FsIG1lbW9yeSBhbGxvY2F0b3IsIE5VTUEgY29uc2lkZXJhdGlvbnMsIG9yIHBlcmhhcHMgaW50ZXJhY3Rpb25zIHdpdGggc3BlY2lmaWMgQ1BVIGZlYXR1cmVzPyBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgZGVidWdnaW5nIGVmZm9ydHMuIFNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgSSBuZWVkIHRvIGNvbnN1bHQgYW55IG90aGVyIG1vZHVsZXMgb3IgdGhlaXIgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uIHRvIGdldCBhIGZ1bGwgcGljdHVyZS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBlbnN1cmUgSSBkbyBub3QgYnJlYWsgdGhpbmdzIHdpdGggY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MDMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODowMC40Mjg1NTE2MThaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjMxMzY4NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid29ya2luZ3NldFxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTYtXFx0XFx0XFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU3OlxcdFxcdFxcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxcXFxubW0vTWFrZWZpbGUtNTgtXFx0XFx0XFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vICQobW11LXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU4OjAyLjI1MTY5NjA0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzMwNzk0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQgZG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29tcHVsc29yeSBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIGB3b3JraW5nc2V0Lm9gIGlzICphbHdheXMqIGdldHRpbmcgY29tcGlsZWQuIFRoYXQncyBhIGJpdCBvZGQsIHVzdWFsbHkgSSdkIGV4cGVjdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkuIFNpbmNlIHRoZSBjb21waWxhdGlvbiBpcyBhbHdheXMgaGFwcGVuaW5nLCBJJ20gdGhpbmtpbmcgbWF5YmUgaXQncyBjb25uZWN0ZWQgdG8gYSBjb3JlIG9yIGZ1bmRhbWVudGFsIGZlYXR1cmUuIFdoYXQncyB0aGUgbW9zdCBsaWtlbHkgc3VzcGVjdD8gQWgsIEkgc2hvdWxkIGNoZWNrIHRoZSBgQ09ORklHX01FTUNHYCBzZXR0aW5nIGZpcnN0LiBUaGF0IHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBtZW1vcnkgY2dyb3VwcyBjb3VsZCBiZSBpbmZsdWVuY2luZyB0aGluZ3MuIEknbGwgc2VlIGlmIGB3b3JraW5nc2V0Lm9gIGlzIHNvbWVob3cgdGllZCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgYSBjb250YWluZXIuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MzksIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODowNy4wODQ3Nzg5MTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjgwOTYyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY3PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzYtXFxuaW5pdC9LY29uZmlnOjEwNzc6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzgtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4NS1cXG5pbml0L0tjb25maWc6MTA4Njpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg3LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkyLVxcbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk0LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk5LVxcbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAxLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU4OjA4LjU1Mjg4MTI5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTcyNjIzMjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFJlZmluZW1lbnRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGNvbmZpZ3VyZSB0aGlzIHN5c3RlbS4gYE1FTUNHYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGZvciB0cmFja2luZyBtZW1vcnkgY2dyb3VwcyBhbmQgaGFuZGxpbmcgd29ya2luZ3NldCByZWZhdWx0cy4gVGhhdCdzIGEga2V5IGNvbnNpZGVyYXRpb24uIFNpbmNlIGB3b3JraW5nc2V0LmNgIGlzIGFsd2F5cyBjb21waWxlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbWFuYWdpbmcgaXRzIGludGVyYWN0aW9ucyBlZmZlY3RpdmVseS5cblxuSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gaW5jbHVkZSBgWlNXQVBgLCBgU1dBUGAsIGFuZCBgWlNXQVBfREVGQVVMVF9PTmAuIEkgY2hlY2tlZCBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0IGBaU1dBUF9ERUZBVUxUX09OYCBpcyBhIHZhbGlkIGNvbmZpZyBvcHRpb24sIHNvIHRoYXQncyBnb29kLlxuXG5JJ20gcmUtZXZhbHVhdGluZyBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIFdoaWxlIGl0IG1pZ2h0IG5vdCBiZSBzdHJpY3RseSAqbmVjZXNzYXJ5KiBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFuYWx5c2lzLCBJJ2xsIGtlZXAgaXQgaW4gbWluZC5cblxuTm93LCBmb3IgdGhlIGtleSBmb2N1cyBzeW1ib2xzIOKAkyBJJ3ZlIGZpbmFsaXplZCB0aGVzZTpcblxuKiAgIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYFxuKiAgIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgXG4qICAgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2BcbiogICBgd29ya2luZ3NldF9yZWZhdWx0YFxuKiAgIGB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRgXG4qICAgYHN3YXBpbl9zeW5jYFxuXG5JIHdhcyBpbml0aWFsbHkgb24gdGhlIGZlbmNlIGFib3V0IGB6c3dhcF9zdG9yZWAuIEl0J3MgYSBiaXQgZ2VuZXJpYyBhbmQgcG90ZW50aWFsbHkgYSB2ZXJ5IGhvdCBmdW5jdGlvbiwgYnV0IGl0J3MgYmVlbiBtb2RpZmllZCwgc28gaXQgd2FycmFudHMgaW5jbHVzaW9uLiBJJ2xsIGFkZCBpdCB0byB0aGUgZmluYWwgbGlzdC5cblxuQWxyaWdodCwgd2l0aCB0aGVzZSBzZXR0aW5ncywgSSdtIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTU5LCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODoyMC4yNzkxMTY0OTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzI2MDcxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyXCIsXG4gICAgXCJ6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NcIixcbiAgICBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRcIixcbiAgICBcInN3YXBpbl9zeW5jXCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB6c3dhcCBhbmQgc3dhcCBjYWNoZSBsb2dpYyB0byBwcm9wZXJseSBoYW5kbGUgd29ya2luZ3NldCByZWZhdWx0cyBmb3IgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcnMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjaGVjayBpZiBhIGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciBhbmQgdG8gbG9va3VwIGFuZCBjbGVhciBzaGFkb3dzLCBhbmQgbW9kaWZpZXMgdGhlIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiBhbmQgZGVsZXRpb24gcGF0aHMgdG8gcHJlc2VydmUgYW5kIHJlc3RvcmUgc2hhZG93cy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHdpdGggZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyXCIsXG4gICAgXCJ6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NcIixcbiAgICBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwid29ya2luZ3NldF9yZWZhdWx0XCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWRcIixcbiAgICBcInN3YXBpbl9zeW5jXCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB6c3dhcCBhbmQgc3dhcCBjYWNoZSBsb2dpYyB0byBwcm9wZXJseSBoYW5kbGUgd29ya2luZ3NldCByZWZhdWx0cyBmb3IgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcnMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjaGVjayBpZiBhIGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciBhbmQgdG8gbG9va3VwIGFuZCBjbGVhciBzaGFkb3dzLCBhbmQgbW9kaWZpZXMgdGhlIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiBhbmQgZGVsZXRpb24gcGF0aHMgdG8gcHJlc2VydmUgYW5kIHJlc3RvcmUgc2hhZG93cy4gVGhpcyBpcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlIHdpdGggZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE4OjU4OjIwLjM1MjM4NDczOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MDA1ODQ0MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODoyMC4zNTI4ODA0MjlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA4MDAwODMzODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2FjaGUgYW5kIHpzd2FwIGxvZ2ljIHRvIHByZXNlcnZlIHdvcmtpbmdzZXQgc2hhZG93IGVudHJpZXMgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgeGFycmF5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzI4OGE5MTA1OWNkZGE3NjA3NzYyODMyM2I2OTAyMzVjM2M4OWM0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE4OjUzOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5pbmRleCAzMGMxOTNhMTIwN2UxLi5kZmI3MTUzMjM2ZjVjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG4gYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gI2Vsc2VcbiBcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xuQEAgLTY5LDYgKzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqL1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAzOGIxMTY1MjEyYzk0Li5jMTkxODg3YzFmZWRhIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTM4LDYgKzM4LDcgQEAgdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4rdm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbiB2b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKiBtbS9mb2xpby5jICovXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggYzZhOTI0MmQxYjViZC4uNzcxMTk3YjNmY2M1YyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4OTQsNiArNDg5NCw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcbiBcdHB0ZV90ICpwdGVwO1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0aWYgKCFwdGVfdW5tYXBfc2FtZSh2bWYpKVxuIFx0XHRnb3RvIG91dDtcbkBAIC01MDE4LDYgKzUwMTksMTAgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gb3V0X3BhZ2U7XG4gXHR9XG4gXG4rXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0X2xydV9tYW5hZ2VkKGZvbGlvLCBzaGFkb3cpO1xuK1xuIFx0LypcbiBcdCAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZlxuIFx0ICogZm9saW8tXHUwMDNlaW5kZXggb2Ygbm9uLWtzbSBmb2xpb3Mgd291bGQgYmUgbm9ubGluZWFyIGluc2lkZSB0aGVcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTk5NjY1YTNkNmU3Yi4uMWVmNmNjNzY2MDVlNSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0yMjY2LDYgKzIyNjYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XG4gXHRpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjtcbiBcdHBnb2ZmX3Qgb2Zmc2V0O1xuK1x0dm9pZCAqc2hhZG93O1xuIFxuIFx0Vk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7XG4gXHRpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTtcbkBAIC0yMzc3LDYgKzIzNzgsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdCAqL1xuIFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHRpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHtcbiBcdFx0ZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKFx1MDAyNmZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpO1xuIFx0XHRpZiAoZXJyb3IpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA5MGE1NTFhODhkZjYzLi44Njc5Y2I2MTI2OGU1IDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0zMTIsOSArMzEyLDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuK1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li5kZjllMDQ1MmYxOWI5IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcF9vcHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzd2FwLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuICNpbmNsdWRlIFwic3dhcF90YWJsZS5oXCJcbiAjaW5jbHVkZSBcInN3YXAuaFwiXG5AQCAtMjYzLDEyICsyNjQsMjEgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0dW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDtcbiBcdGJvb2wgZm9saW9fc3dhcHBlZCA9IGZhbHNlLCBuZWVkX2ZyZWUgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHR2b2lkICpzaGFkb3dfcGFya2VkO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiBcbitcdC8qXG4rXHQgKiBBIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgcGFya2VkIHRoZSBzbG90J3Mgb3JpZ2luYWwgc2hhZG93IGluIHRoZVxuK1x0ICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLlxuK1x0ICovXG4rXHRzaGFkb3dfcGFya2VkID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbitcdGlmIChzaGFkb3dfcGFya2VkKVxuK1x0XHRzaGFkb3cgPSBzaGFkb3dfcGFya2VkO1xuK1xuIFx0c2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7XG4gXHRjaV9zdGFydCA9IHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSk7XG4gXHRjaV9lbmQgPSBjaV9zdGFydCArIG5yX3BhZ2VzO1xuQEAgLTQ4MywxOSArNDkzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuKyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXG5AQCAtNTA3LDEzICs1MTMsMTcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cbiAgKlxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4rICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXG4rICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXG4rICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNjQ0LDE3ICs2NTQsMjcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxuIFx0XHRwZ29mZl90IGlseCwgYm9vbCByZWFkYWhlYWQpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuK1x0XHQvKlxuK1x0XHQgKiBDYXB0dXJlIHRoZSBzbG90J3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxuK1x0XHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xuK1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oY3R4LCBmb2xpbyk7XG4gXHRpZiAocmVhZGFoZWFkKSB7XG4gXHRcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xuQEAgLTY4NSwxNyArNzA1LDI3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4ge1xuIFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4rXHRcdC8qXG4rXHRcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4rXHRcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4rXHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZvbGlvO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oXHUwMDI2Y3R4LCBmb2xpbyk7XG4gXHRzd2FwX3JlYWRfc3VibWl0KFx1MDAyNmN0eCk7XG4gXHRyZXR1cm4gZm9saW87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNzNhODFiNGEzZTE2NC4uOTkwNTc1M2I3YTEwYyAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQ4LDYgKzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzd2FwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2V3YWxrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG5AQCAtNzMzLDcgKzczNCw4IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbiBcdFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gXG4tXHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXG4rXHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXG4gXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbiBcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIFx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDdhYzJiODhjODBhZTUuLmUyMDNkNjMxZjYxYjggMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTUzNiwxNiArNTM2LDggQEAgYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuIFx0cmV0dXJuIHJlZmF1bHRfZGlzdGFuY2UgXHUwMDNjPSB3b3JraW5nc2V0X3NpemU7XG4gfVxuIFxuLS8qKlxuLSAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxuLSAqIEBmb2xpbzogVGhlIGZyZXNobHkgYWxsb2NhdGVkIHJlcGxhY2VtZW50IGZvbGlvLlxuLSAqIEBzaGFkb3c6IFNoYWRvdyBlbnRyeSBvZiB0aGUgZXZpY3RlZCBmb2xpby5cbi0gKlxuLSAqIENhbGN1bGF0ZXMgYW5kIGV2YWx1YXRlcyB0aGUgcmVmYXVsdCBkaXN0YW5jZSBvZiB0aGUgcHJldmlvdXNseVxuLSAqIGV2aWN0ZWQgZm9saW8gaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5vZGUgYW5kIHRoZSBtZW1jZyB3aG9zZSBtZW1vcnlcbi0gKiBwcmVzc3VyZSBjYXVzZWQgdGhlIGV2aWN0aW9uLlxuLSAqL1xuLXZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbitzdGF0aWMgdm9pZCBfX3dvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3csXG4rXHRcdFx0XHQgYm9vbCBscnVfbWFuYWdlZClcbiB7XG4gXHRib29sIGZpbGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5AQCAtNTc3LDcgKzU2OSwxNiBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpZiAoIXdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoc2hhZG93LCBmaWxlLCBcdTAwMjZ3b3JraW5nc2V0LCB0cnVlKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbitcdC8qXG4rXHQgKiBBbiBMUlUtbWFuYWdlZCBmb2xpbyBtYXkgc2l0IGluIGEgcGVyLUNQVSBiYXRjaCwgd2hpY2ggY2Fubm90IGJlXG4rXHQgKiBkZXRlcm1pbmVkIGhlcmU6IHNldHRpbmcgdGhlIGZsYWcgd291bGQgcmFjZSB0aGUgZHJhaW4gYW5kIGxlYXZlIGl0XG4rXHQgKiBkaXNhZ3JlZWluZyB3aXRoIHRoZSBsaXN0LiBmb2xpb19hY3RpdmF0ZSgpIGlzIHNhZmUsIGJ1dCBtaXNzZXMgdGhlXG4rXHQgKiBhY3RpdmF0aW9uIGZvciBzdWNoIGEgZm9saW8uXG4rXHQgKi9cbitcdGlmIChscnVfbWFuYWdlZClcbitcdFx0Zm9saW9fYWN0aXZhdGUoZm9saW8pO1xuK1x0ZWxzZVxuK1x0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiBcdHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KGxydXZlYywgbnIpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSArIGZpbGUsIG5yKTtcbiBcbkBAIC01OTAsNiArNTkxLDQzIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiB9XG4gXG4rLyoqXG4rICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXG4rICogQGZvbGlvOiBUaGUgZnJlc2hseSBhbGxvY2F0ZWQgcmVwbGFjZW1lbnQgZm9saW8uXG4rICogQHNoYWRvdzogU2hhZG93IGVudHJ5IG9mIHRoZSBldmljdGVkIGZvbGlvLlxuKyAqXG4rICogQ2FsY3VsYXRlcyBhbmQgZXZhbHVhdGVzIHRoZSByZWZhdWx0IGRpc3RhbmNlIG9mIHRoZSBwcmV2aW91c2x5XG4rICogZXZpY3RlZCBmb2xpbyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbm9kZSBhbmQgdGhlIG1lbWNnIHdob3NlIG1lbW9yeVxuKyAqIHByZXNzdXJlIGNhdXNlZCB0aGUgZXZpY3Rpb24uXG4rICpcbisgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQgYW5kIG5vdCBvbiB0aGUgTFJVIHlldCwgdGhlIGNhbGxlciBhZGRzXG4rICogaXQgd2l0aCBmb2xpb19hZGRfbHJ1KCkgYWZ0ZXJ3YXJkcy5cbisgKi9cbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4re1xuK1x0X193b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdywgZmFsc2UpO1xuK31cbitcbisvKipcbisgKiB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQgLSBFdmFsdWF0ZSB0aGUgcmVmYXVsdCBvZiBhIHByZXZpb3VzbHlcbisgKiBldmljdGVkIGZvbGlvIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgTFJVLlxuKyAqIEBmb2xpbzogVGhlIGZvbGlvIHRoZSBldmljdGlvbiBpcyByZWZhdWx0ZWQgaW50by5cbisgKiBAc2hhZG93OiBTaGFkb3cgZW50cnkgb2YgdGhlIGV2aWN0ZWQgZm9saW8uXG4rICpcbisgKiBMaWtlIHdvcmtpbmdzZXRfcmVmYXVsdCgpLCBidXQgZm9yIGEgZm9saW8gdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBhZGRlZFxuKyAqIHRvIHRoZSBMUlUsIHdoaWNoIGhhcyB0byBiZSBhY3RpdmF0ZWQgYnkgbW92aW5nIGl0IGJldHdlZW4gdGhlIGxpc3RzXG4rICogcmF0aGVyIHRoYW4gYnkgc2V0dGluZyBQR19hY3RpdmUuXG4rICpcbisgKiBUaGUgYWN0aXZhdGlvbiBpcyBiZXN0IGVmZm9ydDogYSBmb2xpbyBzdGlsbCBzaXR0aW5nIGluIGEgcGVyLUNQVSBMUlVcbisgKiBiYXRjaCBjYW5ub3QgYmUgbW92ZWQgeWV0IGFuZCBpcyBsZWZ0IGluYWN0aXZlLlxuKyAqXG4rICogQ29udGV4dDogQGZvbGlvIG11c3QgYmUgbG9ja2VkIGFuZCBhbHJlYWR5IGFkZGVkIHRvIHRoZSBMUlUuXG4rICovXG4rdm9pZCB3b3JraW5nc2V0X3JlZmF1bHRfbHJ1X21hbmFnZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuK3tcbitcdF9fd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3csIHRydWUpO1xuK31cbitcbiAvKipcbiAgKiB3b3JraW5nc2V0X2FjdGl2YXRpb24gLSBub3RlIGEgcGFnZSBhY3RpdmF0aW9uXG4gICogQGZvbGlvOiBGb2xpbyB0aGF0IGlzIGJlaW5nIGFjdGl2YXRlZC5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uYzFhNzhlZGZhMGI4NyAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC05NzIsNiArOTcyLDc5IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiB3cml0ZWJhY2sgY29kZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4rXG4rI2RlZmluZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XIHhhX21rX3ZhbHVlKDApXG4rXG4rLyoqXG4rICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/XG4rICogQGZvbGlvOiB0aGUgZm9saW8gYmVpbmcgZXhhbWluZWQgKHR5cGljYWxseSBhIHN3YXAgY2FjaGUgZm9saW8gdW5kZXIgcmVjbGFpbSlcbisgKlxuKyAqIEEgZm9saW8gaXMgYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHdoZW4gZXZlcnkgb25lIG9mIGl0cyBzd2FwIG9mZnNldHMgaG9sZHNcbisgKiBhIHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93IChhIHJlYWwgc2hhZG93IG9yIHRoZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XXG4rICogc2VudGluZWwpIGluIHRoZSB6c3dhcCB0cmVlIHJhdGhlciB0aGFuIGEgbGl2ZSB6c3dhcCBlbnRyeS5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiBAZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyLCBpbiB3aGljaCBjYXNlIHRoZSByZWNsYWltIHBhdGhcbisgKiBtdXN0IG5vdCBtaW50IGEgZnJlc2ggd29ya2luZ3NldCBzaGFkb3cgZm9yIGl0LlxuKyAqL1xuK2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICsgaSk7XG4rXG4rXHRcdGlmICgheGFfaXNfdmFsdWUoeGFfbG9hZChzd2FwX3pzd2FwX3RyZWUoZSksIG9mZnNldCArIGkpKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyoqXG4rICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbydzIHBhcmtlZCBzaGFkb3cocylcbisgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpXG4rICpcbisgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJ3Mgc3dhcCBvZmZzZXQocykgZnJvbSB0aGVcbisgKiB6c3dhcCB0cmVlLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgcHJlc2VydmVkIHdvcmtpbmdzZXQgc2hhZG93LCBvciBOVUxMIGlmIHRoZSBzbG90KHMpIGhhZCBubyBzaGFkb3dcbisgKiAoc2VudGluZWwgb25seSkgb3Igbm90aGluZyBwYXJrZWQuIFRoZSBjYWxsZXIgZWl0aGVyIHJlc3RvcmVzIHRoZSByZXR1cm5lZFxuKyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0b1xuKyAqIHdvcmtpbmdzZXRfcmVmYXVsdF9scnVfbWFuYWdlZCgpIChidWZmZXIgY29uc3VtZWQgYnkgYSBzd2FwaW4pOyBjbGVhcmluZ1xuKyAqIGhlcmUgZW5zdXJlcyB0aGUgdHdvIHBhdGhzIG5ldmVyIGRvdWJsZS1jb3VudC5cbisgKi9cbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xuK1x0XHRzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpO1xuK1x0XHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCArIGkpO1xuK1xuK1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCArIGkpO1xuK1x0XHRpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpXG4rXHRcdFx0c2hhZG93ID0gcGFya2VkO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNoYWRvdztcbit9XG4rXG4gLypcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcbkBAIC05ODcsMTIgKzEwNjAsMTQgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdFx0XHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXG4ge1xuK1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbiBcdHN0cnVjdCB4YXJyYXkgKnRyZWU7XG4gXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwZW50cnkpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XG4rXHR2b2lkICpzaGFkb3c7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXG5AQCAtMTAwMCw5ICsxMDc1LDExIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRpZiAoIXNpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbitcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7XG4rXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuLVx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4tXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4rXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuK1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDE0LDYgKzEwOTEsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0ICovXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXG4gXHQvKlxuIFx0ICogZm9saW8gaXMgbG9ja2VkLCBhbmQgdGhlIHN3YXBjYWNoZSBpcyBub3cgc2VjdXJlZCBhZ2FpbnN0XG5AQCAtMTAzNSw3ICsxMTEzLDEyIEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcbitcdC8qXG4rXHQgKiBBIHNsb3Qgd2l0aCBubyBzaGFkb3cgYWxyZWFkeSByZWFkcyBiYWNrIGFzIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c6XG4rXHQgKiB0aGUgc3dhcCB0YWJsZSBtYXJrcyBhIHN3YXBwZWQgb3V0IHNsb3Qgd2l0aCB4YV9ta192YWx1ZSgwKSBhbmQgaG9sZHNcbitcdCAqIHRoZSBzaGFkb3csIHdoZW4gdGhlcmUgaXMgb25lLCBpbiB0aGF0IHNhbWUgdmFsdWUuXG4rXHQgKi9cbitcdHhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTtcbiBcbiBcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XG4gXHRpZiAoZW50cnktXHUwMDNlb2JqY2cpXG5AQCAtMTA1NSw3ICsxMTM4LDE1IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuLVx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBhbGxvY2F0aW9uIGFib3ZlIG92ZXJ3cm90ZSB0aGUgc2xvdCdzIHNoYWRvdyBhbmQgbm90aGluZ1xuK1x0XHQgKiBoYXMgYmVlbiBwYXJrZWQgZm9yIGl0IHlldCwgc28gcmVzdG9yZSBpdCBhcyB0aGUgZm9saW8gbGVhdmVzXG4rXHRcdCAqIHRoZSBzd2FwIGNhY2hlLCBvciB0aGUgZXZpY3Rpb24gaXQgcmVjb3JkcyBpcyBsb3N0LlxuK1x0XHQgKi9cbitcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhzd3BlbnRyeSksIG9mZnNldCk7XG4rXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd3BlbnRyeSwgc2hhZG93KTtcbitcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4rXHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHR9XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuQEAgLTE0OTgsNiArMTU4OSwxNyBAQCBib29sIHpzd2FwX3N0b3JlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSk7XG4gXG4rXHQvKlxuK1x0ICogQSB3cml0ZWJhY2sgYnVmZmVyIHdob3NlIElPIGZhaWxlZCBpcyByZWRpcnRpZWQgYW5kIGxlZnQgaW4gdGhlXG4rXHQgKiBzd2FwIGNhY2hlLCBzbyByZWNsYWltIHdyaXRlcyBpdCBvdXQgYWdhaW4uIFdyaXRlYmFjayBhbHJlYWR5XG4rXHQgKiBkZWNpZGVkIHRoaXMgZGF0YSBiZWxvbmdzIG9uIGRpc2ssIHNvIHNlbmQgaXQgdGhlcmUgaW5zdGVhZCBvZlxuK1x0ICogY29tcHJlc3NpbmcgaXQgYmFjayBpbnRvIHpzd2FwLiBUaGlzIGFsc28gbGVhdmVzIHRoZSBzaGFkb3dcbitcdCAqIHBhcmtlZCBmb3IgdGhlIGJ1ZmZlciBpbiBwbGFjZSwgc28gaXQgaXMgc3RpbGwgcmVzdG9yZWQgaW50b1xuK1x0ICogdGhlIHNsb3Qgb25jZSB0aGUgZm9saW8gbGVhdmVzIHRoZSBzd2FwIGNhY2hlLlxuK1x0ICovXG4rXHRpZiAoenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihmb2xpbykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmICghenN3YXBfZW5hYmxlZClcbiBcdFx0Z290byBjaGVja19vbGQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODoyMC4zNTI4ODEyMTlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MDAwNjIxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQ2hlY2s6IE5vIElzc3VlcyBEZXRlY3RlZCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgbWVtb3J5IG1hbmFnZW1lbnQgcGVyc3BlY3RpdmUuIFRoaXMgcGF0Y2ggaXMgc29sZWx5IGNvbmNlcm5lZCB3aXRoIHJlZmluaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHpzd2FwLCB0aGUgc3dhcCBjYWNoZSwgYW5kIHdvcmtpbmdzZXQgcmVmYXVsdHMuIE15IGZvY3VzIGlzIG9uIGVuc3VyaW5nIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zLlxuXG5TbywgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBtb2RpZmljYXRpb25zIHRvIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gRXNzZW50aWFsbHksIGl0J3MgYWJvdXQgY29ycmVjdGx5IG1hbmFnaW5nIHNoYWRvdyBlbnRyaWVzIHdpdGhpbiB0aGUgd29ya2luZ3NldCBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBObyBuZXcgdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFkZGVkLCB3aGljaCBpcyBhIG1ham9yIHBvc2l0aXZlLlxuXG5JdCdzIGFsbCBhYm91dCBmYW1pbGlhciBzdHJ1Y3R1cmVzOiBgc3RydWN0IGZvbGlvYCwgYHN3cF9lbnRyeV90YCwgYHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mb2AsIGFuZCBzaGFkb3cgZW50cmllcyByZXByZXNlbnRlZCBhcyBgdm9pZCAqYCBwb2ludGVycyBzdG9yZWQgd2l0aGluIHhhcnJheXMuIFRoaXMgaXNuJ3QgZ3JvdW5kYnJlYWtpbmcsIGJ1dCB0aGUga2V5IGlzIGhvdyB0aGVzZSBzaGFkb3dzIGFyZSBoYW5kbGVkLlxuXG5UaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBzaGFkb3cgcG9pbnRlcnMuIFdlJ3JlIGVpdGhlciBnZXR0aW5nIHRoZW0gZnJvbSBgc3dhcF9jYWNoZV9nZXRfc2hhZG93YCBvciBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYC4gVGhlc2UgYXJlIGp1c3QgcG9pbnRlcnMsIGFuZCBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZC4gR2l2ZW4gdGhhdCwgd2l0aCBhIGdvb2QgS0FTQU4gcnVuIG9uIHRoZSB3aG9sZSBzeXN0ZW0sIHRoZSB1c3VhbCBidWdzIC0tIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlLCBkZXJlZmVyZW5jZXMsIGV0Yy4gLS0gYXJlIGhhbmRsZWQuXG5cblRoZXJlJ3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBub3IgbmV3IGJ1ZmZlcnMgYWxsb2NhdGVkIGFuZCBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBwdXJlbHkgbWVtb3J5IG1hbmFnZW1lbnQgaW50ZXJuYWwsIGZvY3VzaW5nIG9uIHBvaW50ZXIgbWFuaXB1bGF0aW9uIGFuZCB0aGUgZXhpc3Rpbmcgc3dhcCBjYWNoZS96c3dhcCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0NCwiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxODo1ODozMS4xNTI5NDY2NTdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgY2FjaGUgYW5kIHpzd2FwIGxvZ2ljIHRvIHByZXNlcnZlIHdvcmtpbmdzZXQgc2hhZG93IGVudHJpZXMgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBidWZmZXJzIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgeGFycmF5IG9wZXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBjYWNoZSBhbmQgenN3YXAgbG9naWMgdG8gcHJlc2VydmUgd29ya2luZ3NldCBzaGFkb3cgZW50cmllcyBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGJ1ZmZlcnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24sIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCB4YXJyYXkgb3BlcmF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhdkth[1] Phase: Succeeded StartedAt: 2026-08-25 18:58:43 +0000 UTC FinishedAt: 2026-08-25 18:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 18:58:43 +0000 UTC FinishedAt: 2026-08-25 18:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2] Phase: Succeeded StartedAt: 2026-08-25 18:58:43 +0000 UTC FinishedAt: 2026-08-25 22:45:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 18:58:43 +0000 UTC FinishedAt: 2026-08-25 22:45:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 18:58:43 +0000 UTC FinishedAt: 2026-08-25 18:58:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 18:58:43 +0000 UTC FinishedAt: 2026-08-25 18:58:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-convert-artifact-2933059322/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 18:58:53 +0000 UTC FinishedAt: 2026-08-25 19:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 18:58:53 +0000 UTC FinishedAt: 2026-08-25 19:14:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dbfcdce5-10ad-42fb-a259-ffbe335d91e6,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-workflowhdkth/series-workflowhdkth-convert-artifact-2933059322/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "cf9c0a14-94f6-4f8c-9b16-46a22ceffd6c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-build-action-972865448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 18:58:53 +0000 UTC FinishedAt: 2026-08-25 19:14:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dbfcdce5-10ad-42fb-a259-ffbe335d91e6,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-workflowhdkth/series-workflowhdkth-convert-artifact-2933059322/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "cf9c0a14-94f6-4f8c-9b16-46a22ceffd6c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-build-action-972865448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 19:14:43 +0000 UTC FinishedAt: 2026-08-25 19:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 19:14:43 +0000 UTC FinishedAt: 2026-08-25 19:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 19:14:43 +0000 UTC FinishedAt: 2026-08-25 19:14:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 19:14:43 +0000 UTC FinishedAt: 2026-08-25 19:14:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-convert-artifact-3296858453/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 19:14:53 +0000 UTC FinishedAt: 2026-08-25 19:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 19:14:53 +0000 UTC FinishedAt: 2026-08-25 19:16:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cf9c0a14-94f6-4f8c-9b16-46a22ceffd6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-build-action-972865448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 19:16:55 +0000 UTC FinishedAt: 2026-08-25 19:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 19:16:55 +0000 UTC FinishedAt: 2026-08-25 19:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 19:16:55 +0000 UTC FinishedAt: 2026-08-25 19:36:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 19:16:55 +0000 UTC FinishedAt: 2026-08-25 19:36:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dbfcdce5-10ad-42fb-a259-ffbe335d91e6,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-workflowhdkth/series-workflowhdkth-convert-artifact-3296858453/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f7aa8fd5-11c9-4d3f-ad85-e894711236c3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-build-action-577975009/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 19:16:55 +0000 UTC FinishedAt: 2026-08-25 19:36:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dbfcdce5-10ad-42fb-a259-ffbe335d91e6,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-workflowhdkth/series-workflowhdkth-convert-artifact-3296858453/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f7aa8fd5-11c9-4d3f-ad85-e894711236c3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-build-action-577975009/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 19:36:32 +0000 UTC FinishedAt: 2026-08-25 19:36:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 19:36:32 +0000 UTC FinishedAt: 2026-08-25 19:36:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 19:36:32 +0000 UTC FinishedAt: 2026-08-25 19:38:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 19:36:32 +0000 UTC FinishedAt: 2026-08-25 19:38:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f7aa8fd5-11c9-4d3f-ad85-e894711236c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-build-action-577975009/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 19:38:33 +0000 UTC FinishedAt: 2026-08-25 22:45:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 19:38:33 +0000 UTC FinishedAt: 2026-08-25 22:45:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*cf9c0a14-94f6-4f8c-9b16-46a22ceffd6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f7aa8fd5-11c9-4d3f-ad85-e894711236c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-build-action-972865448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-build-action-577975009/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 19:38:33 +0000 UTC FinishedAt: 2026-08-25 19:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 19:38:33 +0000 UTC FinishedAt: 2026-08-25 19:38:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-convert-artifact-2218472250/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 19:38:33 +0000 UTC FinishedAt: 2026-08-25 19:38:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 19:38:33 +0000 UTC FinishedAt: 2026-08-25 19:38:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 19:38:33 +0000 UTC FinishedAt: 2026-08-25 19:38:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 19:38:57 +0000 UTC FinishedAt: 2026-08-25 22:45:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhdkth[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","__swap_cache_alloc_folio","workingset_refault","workingset_refault_lru_managed","swapin_sync","zswap_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1a46b1e97bde62afa7d925bb0dcd9f9748a1d7c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP","ZSWAP_DEFAULT_ON"],"series_id":"63f99ba3-437d-41d9-b576-02efff1014ad","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 19:38:57 +0000 UTC FinishedAt: 2026-08-25 22:45:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cf9c0a14-94f6-4f8c-9b16-46a22ceffd6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f7aa8fd5-11c9-4d3f-ad85-e894711236c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-build-action-972865448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-build-action-577975009/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhdkth/series-workflowhdkth-convert-artifact-2218472250/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,}