Name: series-workflowvtdrz Phase: Succeeded StartedAt: 2026-09-08 16:04:22 +0000 UTC FinishedAt: 2026-09-08 20:24:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[0] Phase: Succeeded StartedAt: 2026-09-08 16:04:22 +0000 UTC FinishedAt: 2026-09-08 16:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 16:04:22 +0000 UTC FinishedAt: 2026-09-08 16:42:57 +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": "a4803d8ba53a9243696a4e90246446d7f3982b6f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "DEBUG_VM" ], "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": "a4803d8ba53a9243696a4e90246446d7f3982b6f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "DEBUG_VM" ], "series_id": "fc62b367-5a9a-4389-a979-02364e76cdb2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_reset_partially_mapped", "__folio_freeze_and_split_unmapped", "__folio_unqueue_deferred_split", "folio_split_unmapped", "split_folio_to_list", "deferred_split_folio", "deferred_split_scan" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0X3VubWFwcGVkJiMzNDssCiAgICAmIzM0O3NwbGl0X2ZvbGlvX3RvX2xpc3QmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmbGFncywgZGVidWcgYXNzZXJ0aW9ucywgYW5kIHN0YXRpc3RpY3MgZm9yIGh1Z2UvbXVsdGktc2l6ZSBhbm9ueW1vdXMgZm9saW9zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgYWRkZWQgYXNzZXJ0aW9ucyBvciByZWZjb3VudGluZyBsb2dpYyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmbGFnIGFuZCBtVEhQIHN0YXQgYWNjb3VudGluZyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYW5kIGludHJvZHVjZXMgbmV3IFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBpbiBtbS9odWdlX21lbW9yeS5jIChfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQgYW5kIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIG1hbmFnaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUC9tVEhQKSBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWVzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBhbmQgYXNzZXJ0aW9uIHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5OTcyY2U0OTllZDg4MDY5NjI1OGM0ODdkY2ZhOWNkZjdhMWI3NzczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNjo0MDo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZGQ2NmM2YWQ1YWYxMy4uZmFlOTU5NjMzMjc5YiAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTcyLDYgJiM0MzszOTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm9saW9fY2FjaGVfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0LyogRm9saW8gbXVzdCBiZSBmcm96ZW4uICovXG4mIzQzO1x0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPcmRlci0xIGZvbGlvcyBoYXZlIG5vIF9kZWZlcnJlZF9saXN0LiBUaGUgZmxhZyBpcyBvbmx5IGV2ZXIgc2V0XG4mIzQzO1x0ICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLlxuJiM0MztcdCAqL1xuJiM0MztcdFZNX1dBUk5fT05fRk9MSU8oIWxpc3RfZW1wdHkoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpLCBmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuJiM0MztcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuJiM0MztcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXG5AQCAtMzk4MCw3ICYjNDM7Mzk5OSw2IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4ge1xuIFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbiBcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcbi1cdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbkBAIC0zOTk4LDExICYjNDM7NDAxNiw3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbiBcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4mIzQzO1x0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbiBcbiBcdFx0aWYgKG1hcHBpbmcpIHtcbiBcdFx0XHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtNDUxNiwxMSAmIzQzOzQ1MzAsNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFx1MDAyNm1lbWNnLCBcdTAwMjZmbGFncyk7XG4gXHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4tXHRcdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHRcdH1cbiYjNDM7XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFx0XHR1bnF1ZXVlZCA9IHRydWU7XG4gXHR9XG4gXHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtERUJVR19WTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQmIzM0OywKICAgICYjMzQ7X19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkJiMzNDssCiAgICAmIzM0O19fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICAgJiMzNDtmb2xpb19zcGxpdF91bm1hcHBlZCYjMzQ7LAogICAgJiMzNDtzcGxpdF9mb2xpb190b19saXN0JiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X2ZvbGlvJiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmbGFnIGFuZCBtVEhQIHN0YXQgYWNjb3VudGluZyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYW5kIGludHJvZHVjZXMgbmV3IFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBpbiBtbS9odWdlX21lbW9yeS5jIChfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQgYW5kIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIG1hbmFnaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUC9tVEhQKSBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWVzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBhbmQgYXNzZXJ0aW9uIHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5OTcyY2U0OTllZDg4MDY5NjI1OGM0ODdkY2ZhOWNkZjdhMWI3NzczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxNjo0MDo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGRkNjZjNmFkNWFmMTMuLmZhZTk1OTYzMzI3OWIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMzk3Miw2ICYjNDM7Mzk3MiwyNSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZvbGlvX2NhY2hlX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwkvKiBGb2xpbyBtdXN0IGJlIGZyb3plbi4gKi8KJiM0MzsJVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7CiYjNDM7CiYjNDM7CWlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT3JkZXItMSBmb2xpb3MgaGF2ZSBubyBfZGVmZXJyZWRfbGlzdC4gVGhlIGZsYWcgaXMgb25seSBldmVyIHNldAomIzQzOwkgKiBvbiBmb2xpb3MgdGhhdCBkbywgc28gdGhlIGxpc3QgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIgdGhlIGZsYWcuCiYjNDM7CSAqLwomIzQzOwlWTV9XQVJOX09OX0ZPTElPKCFsaXN0X2VtcHR5KCZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0KSwgZm9saW8pOwomIzQzOwomIzQzOwlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKJiM0MzsJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCiYjNDM7CQkgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwKIAkJCQkJICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLAogCQkJCQkgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSwKQEAgLTM5ODAsNyAmIzQzOzM5OTksNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogewogCXN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7CiAJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0OwotCWludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgJmFtcDsmYW1wOyBlbmQpOwpAQCAtMzk5OCwxMSAmIzQzOzQwMTYsNyBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogCQkgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuCiAJCSAqIENsZWFyIGl0IGhlcmU6IHRoZSBmbGFnIGRvZXMgbm90IHN1cnZpdmUgdGhlIHNwbGl0LgogCQkgKi8KLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChvbGRfb3JkZXIsCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAogCQlpZiAobWFwcGluZykgewogCQkJaW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwpAQCAtNDUxNiwxMSAmIzQzOzQ1MzAsNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwogCWxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZSgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSwgbmlkLCAmYW1wO21lbWNnLCAmYW1wO2ZsYWdzKTsKIAlpZiAoX19saXN0X2xydV9kZWwoJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QsIG5pZCkpIHsKLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAkJdW5xdWV1ZWQgPSB0cnVlOwogCX0KIAlsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsICZhbXA7ZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUsIGFuZCB0aGUgZ29hbCBpcyBhIHByZXR0eSBzdGFuZGFyZCBvbmU6IGRldGVybWluZSBpZiBpdCYjMzk7cyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgY2hhbmdlZCwgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgb3IgJiMzNDtmb2N1cyBzeW1ib2xzJiMzNDsgdG8gdGFyZ2V0LCBhbmQgdGhlbiBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHRob3NlIHNlY3Rpb25zIG9mIGNvZGUuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIGRldmVsb3BlciBRQSBhbmQgaW5pdGlhbCBjb2RlIGFuYWx5c2lzIOKAkyB0aGUga2luZCBvZiB0cmlhZ2UgSSBkZWFsIHdpdGggcmVndWxhcmx5LiBTZXZlcml0eS13aXNlLCBJJiMzOTtkIHNheSB0aGlzIGlzIHByZXR0eSBsb3csIG5vbi1jcml0aWNhbCwgb3IgZXZlbiBiZW5pZ24gYXQgdGhpcyBzdGFnZS4KCkZpcnN0IHRoaW5ncyBmaXJzdDogdGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIEh1Z2UgcGFnZXMgYXJlIGEga25vd24gYXJlYSB3aGVyZSBpc3N1ZXMgY2FuIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gc3lzdGVtIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHksIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpcyBhbHdheXMgYSBjb21wbGV4IGJlYXN0LgoKVGhlIHBhdGNoIGl0c2VsZiBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHRoZXNlIGZ1bmN0aW9uczoKCiogICBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKWAKKiAgIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoLi4uKWAKKiAgIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylgCgpOb3csIHRoZSBmdW4gYmVnaW5zLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYGdyZXBwZXJgIG9yIHBlcmhhcHMganVzdCBgcmVhZC1maWxlYCB0byBleHBsb3JlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gc2VxdWVuY2UsIGFuZCB3aGF0IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgZXhpc3QuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHBhdGhzIHRoYXQgYXJlIG9mIGludGVyZXN0IHRvIHN5emthbGxlci4KClVsdGltYXRlbHksIEkgd2lsbCBhbHNvIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBlbmFibGUgdGhlIGNvZGUgdG91Y2hlZCBieSB0aGlzIHBhdGNoLCBpbiBvcmRlciB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGZ1enouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszOTcwOlx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcbjM5NzE6XHRcdFx0cmV0dXJuIDA7XG4zOTcyOlx0XHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuMzk3MzpcdH1cbjM5NzQ6XHRcbjM5NzU6XHRzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4zOTc2Olx0e1xuMzk3NzpcdFx0LyogRm9saW8gbXVzdCBiZSBmcm96ZW4uICovXG4zOTc4Olx0XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbjM5Nzk6XHRcbjM5ODA6XHRcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbjM5ODE6XHRcdFx0cmV0dXJuO1xuMzk4MjpcdFxuMzk4MzpcdFx0LypcbjM5ODQ6XHRcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbjM5ODU6XHRcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbjM5ODY6XHRcdCAqL1xuMzk4NzpcdFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbjM5ODg6XHRcbjM5ODk6XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuMzk5MDpcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4zOTkxOlx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbjM5OTI6XHR9XG4zOTkzOlx0XG4zOTk0Olx0c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbjM5OTU6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuMzk5NjpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbjM5OTc6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBlbnVtIHNwbGl0X3R5cGUgc3BsaXRfdHlwZSxcbjM5OTg6XHRcdFx0XHRcdFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxuMzk5OTpcdHtcbjQwMDA6XHRcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG40MDAxOlx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG40MDAyOlx0XHRpbnQgcmV0ID0gMDtcbjQwMDM6XHRcbjQwMDQ6XHRcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbjQwMDU6XHRcbjQwMDY6XHRcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICYjNDM7IDEpKSB7XG40MDA3Olx0XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xuNDAwODpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG40MDA5Olx0XG40MDEwOlx0XHRcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xuNDAxMTpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbjQwMTI6XHRcbjQwMTM6XHRcdFx0LypcbjQwMTQ6XHRcdFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxuNDAxNTpcdFx0XHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXG40MDE2Olx0XHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbjQwMTc6XHRcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG40MDE4Olx0XHRcdCAqL1xuNDAxOTpcdFx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQwMjA6XHRcbjQwMjE6XHRcdFx0aWYgKG1hcHBpbmcpIHtcbjQwMjI6XHRcdFx0XHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG40MDIzOlx0XG40MDI0Olx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjQwMjU6XHRcdFx0XHQgICAgbmV3X29yZGVyIFx1MDAzYyBIUEFHRV9QTURfT1JERVIpIHtcbjQwMjY6XHRcdFx0XHRcdGlmIChmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XG40MDI3Olx0XHRcdFx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbyxcbjQwMjg6XHRcdFx0XHRcdFx0XHRcdE5SX1NITUVNX1RIUFMsIC1ucik7XG40MDI5Olx0XHRcdFx0XHR9IGVsc2Uge1xuNDAzMDpcdFx0XHRcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXG40MDMxOlx0XHRcdFx0XHRcdFx0XHROUl9GSUxFX1RIUFMsIC1ucik7XG40MDMyOlx0XHRcdFx0XHR9XG40MDMzOlx0XHRcdFx0fVxuNDAzNDpcdFx0XHR9XG40MDM1Olx0XG40MDM2Olx0XHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbjQwMzc6XHRcdFx0XHRpZiAobWFwcGluZykge1xuNDAzODpcdFx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKG1hcHBpbmcsIGZvbGlvKTtcbjQwMzk6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEh1Z2UgUGFnZSBJc3N1ZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHN1c3BlY3RlZCBodWdlIHBhZ2UgaXNzdWUgYW5kIEkmIzM5O3ZlIGdvdCBhIGh1bmNoIHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2Ygd2hhdCB3ZSYjMzk7cmUgc2VlaW5nLCBJIHRoaW5rIGl0JiMzOTtzIHdvcnRoIGEgY2xvc2UgZXhhbWluYXRpb24gb2YgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgd2l0aGluIHRoZSBgbW0vaHVnZV9tZW1vcnkuY2AgZmlsZS4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdW5xdWV1aW5nIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2ZWQgaW4gZGVmZXJyZWQgc3BsaXRzLCBhcmUgb2Z0ZW4gY3JpdGljYWwgcG9pbnRzIHdoZXJlIGZyYWdtZW50YXRpb24gb3IgaW5jb3JyZWN0IGFjY291bnRpbmcgY291bGQgaW50cm9kdWNlIHRoZSBraW5kIG9mIGJlaGF2aW9yIHdlJiMzOTtyZSBvYnNlcnZpbmcuIEl0JiMzOTtzIGEgcHJpbWUgc3VzcGVjdCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHN1YnRsZSBidWdzIHJlbGF0ZWQgdG8gaG93IHRoZSBodWdlIHBhZ2Ugc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBkdXJpbmcgc3BsaXQgb3BlcmF0aW9ucy4gVGhpcyBhcmVhIGlzIGtub3duIGZvciBiZWluZyB0cmlja3ksIHNvIGl0JiMzOTtzIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUuIEkmIzM5O20gZm9jdXNpbmcgdGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHRoZSBzcGxpdHRpbmcgb2YgdGhlIGh1Z2UgcGFnZXMgd2hpY2ggaXMgYSBjb21tb24gcGxhY2UgdG8gaGF2ZSBpc3N1ZXMgd2l0aCBpbiBjb21wbGV4IG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDUxMDpcdCAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xuNDUxMTpcdCAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XG40NTEyOlx0ICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSYjMzk7cyB1bmxvY2tlZFxuNDUxMzpcdCAqIG9uLXN0YWNrIGxpc3QuXG40NTE0Olx0ICpcbjQ1MTU6XHQgKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJiMzOTtzIG1lbWNnOiBpdCBpcyB0aGVyZWZvcmVcbjQ1MTY6XHQgKiBpbXBvcnRhbnQgdG8gdW5xdWV1ZSBkZWZlcnJlZCBzcGxpdCBiZWZvcmUgY2hhbmdpbmcgZm9saW8gbWVtY2cuXG40NTE3Olx0ICovXG40NTE4Olx0Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbjQ1MTk6XHR7XG40NTIwOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG40NTIxOlx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG40NTIyOlx0XHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbjQ1MjM6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG40NTI0Olx0XHRib29sIHVucXVldWVkID0gZmFsc2U7XG40NTI1Olx0XG40NTI2Olx0XHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XG40NTI3Olx0XHRXQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKTtcbjQ1Mjg6XHRcbjQ1Mjk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjQ1MzA6XHRcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuNDUzMTpcdFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xuNDUzMjpcdFx0aWYgKF9fbGlzdF9scnVfZGVsKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xuNDUzMzpcdFx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQ1MzQ6XHRcdFx0dW5xdWV1ZWQgPSB0cnVlO1xuNDUzNTpcdFx0fVxuNDUzNjpcdFx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcdTAwMjZmbGFncyk7XG40NTM3Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjQ1Mzg6XHRcbjQ1Mzk6XHRcdHJldHVybiB1bnF1ZXVlZDtcdC8qIHVzZWZ1bCBmb3IgZGVidWcgd2FybmluZ3MgKi9cbjQ1NDA6XHR9XG40NTQxOlx0XG40NTQyOlx0LyogcGFydGlhbGx5X21hcHBlZD1mYWxzZSB3b24mIzM5O3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXG40NTQzOlx0dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXG40NTQ0Olx0e1xuNDU0NTpcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xuNDU0NjpcdFx0aW50IG5pZDtcbjQ1NDc6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjQ1NDg6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG40NTQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI1NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRm9saW8gUmVzZXQgYW5kIERlZmVycmVkIFNwbGl0dGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgaW50cm9kdWNlcyBzb21lIHJ1bnRpbWUgYXNzZXJ0aW9ucy4gSSBzZWUgYFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pYCBhbmQgYFZNX1dBUk5fT05fRk9MSU8oIWxpc3RfZW1wdHkoJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QpLCBmb2xpbylgLiBOb3RoaW5nIHN1cnByaXNpbmcgdGhlcmUuIFRoZSBjb21tZW50IHNwZWNpZmljYWxseSBoaWdobGlnaHRzIHRoYXQgb3JkZXItMSBmb2xpb3MgZG9uJiMzOTt0IHVzZSBgX2RlZmVycmVkX2xpc3RgLCBhbmQgdGhlIGZsYWcgaXMgc2V0ICpvbmx5KiB3aGVuIHRoZSBsaXN0IGlzIGluIHVzZSwgd2hpY2ggaXMgd2h5IHRoZSBjaGVjayBpcyBtYWRlLiBUaGF0IG1ha2VzIHNlbnNlIGZyb20gYSBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGFuZCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAuICBTcGVjaWZpY2FsbHksIGluIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLCBgX19saXN0X2xydV9kZWxgIHJlbW92ZXMgdGhlIGZvbGlvIGZyb20gdGhlIGRlZmVycmVkIGxpc3QuIFRoZSBxdWVzdGlvbiBpczogV2hhdCBkb2VzIHRoYXQgbGlzdCBkZWxldGlvbiBhY3R1YWxseSBkbz8gRG9lcyBpdCByZWluaXRpYWxpemUgdGhlIGxpc3QgaGVhZCBvciBqdXN0IHJlbW92ZSBpdD8gIEkgbmVlZCB0byBjaGVjayBob3cgYF9fbGlzdF9scnVfZGVsYCB3b3JrcywgYmVjYXVzZSBJIG5lZWQgdG8ga25vdyBpZiB0aGUgdW5kZXJseWluZyBsaXN0IG9wZXJhdGlvbiBpcyBhIGBsaXN0X2RlbGAgb3IgYSBgbGlzdF9kZWxfaW5pdGAuIFRoaXMgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzdGF0ZSBvZiB0aGUgZm9saW8gYWZ0ZXIgYmVpbmcgdW5xdWV1ZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBfX2xpc3RfbHJ1X2RlbGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19saXN0X2xydV9kZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9saXN0X2xydS5oPTE0OD1ib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTE0OS1cdFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDoxNTA6Ym9vbCBfX2xpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC0xNTEtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDUxOD1ib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUzMS1cdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXHUwMDI2bWVtY2csIFx1MDAyNmZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUzMjpcdGlmIChfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzMy1cdFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tLVxubW0vbGlzdF9scnUuYz0yMDg9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkKTtcbm1tL2xpc3RfbHJ1LmMtMjA5LVxubW0vbGlzdF9scnUuYzoyMTA6Ym9vbCBfX2xpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbm1tL2xpc3RfbHJ1LmMtMjExLVx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZClcbi0tXG5tbS9saXN0X2xydS5jPTI2NT1ib29sIGxpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTI3MS1cdGwgPSBsaXN0X2xydV9sb2NrKGxydSwgbmlkLCBcdTAwMjZtZW1jZyk7XG5tbS9saXN0X2xydS5jOjI3MjpcdHJldCA9IF9fbGlzdF9scnVfZGVsKGxydSwgbCwgaXRlbSwgbmlkKTtcbm1tL2xpc3RfbHJ1LmMtMjczLVx0bGlzdF9scnVfdW5sb2NrKGwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0OTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbW0vbGlzdF9scnUuY2AgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vbGlzdF9scnUuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIxMC4gVGhhdCBwYXJ0aWN1bGFyIHNwb3QgaXMgbGlrZWx5IHdoZXJlIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgcmVzaWRlcywgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRoZSBtYW5hZ2VtZW50IG9mIHRoZSBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIGxpc3QuIEkmIzM5O20gZ3Vlc3NpbmcgaXQgbWlnaHQgaW52b2x2ZSBpbnNlcnRpb24sIGRlbGV0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYWNjZXNzIG9mIGVsZW1lbnRzIHdpdGhpbiB0aGUgbGlzdCwgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSByZXZlYWxzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIGluIHRoZSBhbGdvcml0aG1zIHVzZWQsIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgYW5kIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbWVtb3J5IHN1YnN5c3RlbXMuIExpbmUgMjEwIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBidXQgSSYjMzk7bGwgYmUgcHJlcGFyZWQgdG8gZm9sbG93IHRoZSB0aHJlYWRzIG9mIGxvZ2ljIHdoZXJldmVyIHRoZXkgbGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRib29sIF9fbGlzdF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuIDIxMTpcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZClcbiAyMTI6XHR7XG4gMjEzOlx0XHRpZiAoIWxpc3RfZW1wdHkoaXRlbSkpIHtcbiAyMTQ6XHRcdFx0bGlzdF9kZWxfaW5pdChpdGVtKTtcbiAyMTU6XHRcdFx0bC1cdTAwM2Vucl9pdGVtcy0tO1xuIDIxNjpcdFx0XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2bHJ1LVx1MDAzZW5vZGVbbmlkXS5ucl9pdGVtcyk7XG4gMjE3Olx0XHRcdHJldHVybiB0cnVlO1xuIDIxODpcdFx0fVxuIDIxOTpcdFx0cmV0dXJuIGZhbHNlO1xuIDIyMDpcdH1cbiAyMjE6XHRcbiAyMjI6XHQvKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBtZW1jZyBsaWZldGltZS4gKi9cbiAyMjM6XHRib29sIGxpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcbiAyMjQ6XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gMjI1Olx0e1xuIDIyNjpcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcbiAyMjc6XHRcdGJvb2wgcmV0O1xuIDIyODpcdFxuIDIyOTpcdFx0bCA9IGxpc3RfbHJ1X2xvY2sobHJ1LCBuaWQsIFx1MDAyNm1lbWNnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA1NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWVwIERpdmUgaW50byBGb2xpbyBSZWZjb3VudHMgYW5kIERlZmVycmVkIFNwbGl0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHJlYWN0aW9uIGhlcmUgaXMgdG8gemVybyBpbiBvbiB0aGVzZSByZWZjb3VudCBvcGVyYXRpb25zIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aXRoaW4gdGhlIGZvbGlvIGxpZmVjeWNsZS4gSSYjMzk7bSBzZWVpbmcgYSBjb2RlIHBhdGggaW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgd2hlcmUgdGhlcmUgc2VlbXMgdG8gYmUgYSBzdWJ0bGUgZGFuY2Ugd2l0aCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uY2VybmVkIGJlY2F1c2UgSSBzZWUgYSBwb3RlbnRpYWwgcmFjZS4gSXMgdGhlIGZvbGlvIHRydWx5IGZyb3plbiAqYmVmb3JlKiB3ZSBjYWxsIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYD8gVGhlIGNvZGUgc3VnZ2VzdHMgdGhlIHJlZmNvdW50IGlzIHNldCB0byB6ZXJvIGR1ZSB0byBgZm9saW9fcmVmX2ZyZWV6ZWAuCgpUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEkga25vdyBgZm9saW9fcmVmX2ZyZWV6ZWAgc2V0cyB0aGUgcmVmY291bnQgdG8gemVyby4gU28gd2hlbiB0aGF0IGNoZWNrIGhhcHBlbnMsIGBmb2xpb19yZWZfY291bnQoZm9saW8pYCBpcyBnb2luZyB0byBiZSB6ZXJvLiBUaGUgYFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pYCBjaGVjayAqc2hvdWxkKiBiZSB3YXJuaW5nLgoKVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbi4gTGV0JiMzOTtzIGxvb2sgYXQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuICBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgYFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtgIGF0IGxpbmUgNDUyNi4gU28gdGhlIHJlZmNvdW50IGlzIHplcm8uIEFnYWluLCB0aGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgcG9pbnQuIFRoaXMgaXMgdGhlIHN0YXRlIG9mIHRoZSBgZm9saW9gIHdoZW4gd2UmIzM5O3JlIHB1bGxpbmcgaXQgZnJvbSB0aGUgZGVmZXJyZWQgcXVldWUuIFRoZSBmYWN0IHRoYXQgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgICphbHNvKiBpbmNsdWRlcyBhbiBhc3NlcnRpb24gd2l0aCBgVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbylgIGlzIGEgcmVhbGx5IGNydWNpYWwgcG9pbnQuCgpXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGhlcmUsIHNwZWNpZmljYWxseSBodWdlIHBhZ2VzIGFuZCB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUuIGBtbS9odWdlX21lbW9yeS5jYCBpcyBpbnZvbHZlZCwgYW5kIHRoYXQmIzM5O3MgY3JpdGljYWwgYmVjYXVzZSBUSFAvbVRIUCBzcGxpdHRpbmcgaXMgaGFwcGVuaW5nIGhlcmUuIEFuZCB0aGF0JiMzOTtzIGFsbCBvdmVyIHRoZSBwbGFjZSEgV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdXNlcnNwYWNlIGludGVyYWN0aW9ucyB0aHJvdWdoIHN5c2NhbGxzLiAgYG1hZHZpc2VgLCBgc3BsaXRfaHVnZV9wYWdlYCwgbWVtb3J5IGFsbG9jYXRpb24sIHVubWFwcGluZywgbXByb3RlY3QsIHByb2Nlc3MgZXhpdCwgcmVjbGFpbSDigJMgYWxsIG9mIGl0IHRvdWNoZXMgdGhpcyBjb2RlLgoKSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBtbS9odWdlX21lbW9yeS5jYCBpcyBjb21waWxlZCBhbmQgbGlua2VkIGluIG15IEtjb25maWcuIEkgd2FudCB0byBiZSBjZXJ0YWluIHRoaXMgaXNuJiMzOTt0IGNvbmRpdGlvbmFsLCBiZWNhdXNlIGlmIGl0IGlzLCB0aGlzIHdob2xlIGRpc2N1c3Npb24gY2hhbmdlcywgYnV0IGJhc2VkIG9uIGFsbCBvZiB0aGUgZnVuY3Rpb25zIHVzZWQsIEkgd291bGQgZXhwZWN0IHRoYXQgdGhpcyBjb2RlIGlzIGNvbXBpbGVkIGluISBUaGUgaW1wbGljYXRpb25zIG9mIGV2ZW4gYSBzdWJ0bGUgYnVnIGluIHRoaXMgYXJlYSBhcmUgc2V2ZXJlLCByYW5naW5nIGZyb20gbWVtb3J5IGNvcnJ1cHRpb24gdG8gZGVuaWFsIG9mIHNlcnZpY2UuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZXNlIGludGVyYWN0aW9ucywgYW5kLCBnaXZlbiB0aGUgcmVmY291bnQgbWFuaXB1bGF0aW9ucywgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NraW5nIGlzIGFpci10aWdodC4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIGNvbnN1bWVycyBvZiBgZm9saW9gIGFyZSBhd2FyZSBvZiB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvbWUgd2l0aCB0aGlzIHVwZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnlcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAxPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDMtb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6CgoqKkNoZWNraW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIGVudHJ5IGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMsIHdoaWNoIGlzIHRoZSBjYW5vbmljYWwgcGxhY2UgZm9yIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGFueSBvdGhlciByZWxldmFudCBvcHRpb25zIGRpcmVjdGx5IGxpbmtlZCB0byBpdC4gVGhpcyB3aWxsIHByb3ZpZGUgYSBmaXJtIGZvdW5kYXRpb24gZm9yIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3Igb3B0aW1pemF0aW9uIGluIHRoaXMgYXJlYS4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3MsIHN0YXJ0IHdpdGggdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgyNz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgyOS1cbm1tL0tjb25maWc6ODMwOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODMxLVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBwcmV2aW91cyBkZWJ1Z2dpbmcgc3RlcHMgYW5kIGtub3dsZWRnZSBvZiB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtcywgSSBoYXZlIGEgaHVuY2ggYWJvdXQgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3Igb3B0aW9uLiBUbyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgbWFpbiBLY29uZmlnIGZpbGUgZm9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1tL0tjb25maWdgIGFyb3VuZCBsaW5lIDgzMC4gR2l2ZW4gdGhlIGNvbXBsZXhpdGllcywgdGhpcyBsb2NhdGlvbiBzaG91bGQgaG9sZCB0aGUgZGV0YWlscy4gVGhpcyBzaG91bGQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24gaW50byB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzIHRoYXQgdWx0aW1hdGVseSBzaGFwZSB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZ3Jhc3Agd2hldGhlciBhbnkgcmVsZXZhbnQgZWxlbWVudHMgYXJlIGF2YWlsYWJsZSBmb3IgbXkgcHVycG9zZXMsIGFuZCB0cmFjZSBhbnkgZGVwZW5kZW5jaWVzIGlmIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MjU6XHRcdCAgbWVtb3J5IGNvbnN0cmFpbmVkLlxuIDgyNjpcdFxuIDgyNzpcdGNvbmZpZyBNTV9JRFxuIDgyODpcdFx0ZGVmX2Jvb2wgblxuIDgyOTpcdFxuIDgzMDpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MzE6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDgzMjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODMzOlx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDgzNDpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDgzNTpcdFx0c2VsZWN0IE1NX0lEXG4gODM2Olx0XHRoZWxwXG4gODM3Olx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4Mzg6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDgzOTpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NDA6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NDE6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg0MjpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODQzOlx0XG4gODQ0Olx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg0NTpcdFxuIDg0NjpcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODQ3Olx0XG4gODQ4Olx0Y2hvaWNlXG4gODQ5Olx0XHRwcm9tcHQgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1wmIzM0O1xuIDg1MDpcdFx0ZGVmYXVsdCBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbiA4NTE6XHRcdGhlbHBcbiA4NTI6XHRcdCAgU2VsZWN0cyB0aGUgc3lzZnMgZGVmYXVsdHMgZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQuXG4gODUzOlx0XG4gODU0Olx0XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjQ1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2UgTWVtb3J5IFNwbGl0dGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWlucyBhcm91bmQgbWVtb3J5IHNwbGl0dGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgaHVnZSBtZW1vcnkgY29kZSAoYG1tL2h1Z2VfbWVtb3J5LmNgKS4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICp0cmlnZ2VyKiBvciBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRlZmVycmVkIHNwbGl0dGluZyBvZiBodWdlIHBhZ2VzLiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBkZWZlcnJlZCB1bnF1ZXVpbmcgcHJvY2Vzcy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBzcGxpdHRpbmcgaHVnZSBwYWdlcywgc28gSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGNhbGxlcnMgb2YgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gS25vd2luZyB3aG8gY2FsbHMgdGhvc2Ugd2lsbCBzaGVkIGxpZ2h0IG9uIHdoYXQgdHJpZ2dlcnMgYSBzcGxpdCBhbmQgd2hlbiB0aGUga2VybmVsIGRlY2lkZXMgdGhhdCBhIGh1Z2UgcGFnZSByZWFsbHkgbmVlZHMgdG8gYmUgYnJva2VuIGRvd24uIFRoYXQgc2hvdWxkIHRlbGwgbWUgc29tZXRoaW5nIGFib3V0IGhvdyB0byBpbXByb3ZlIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zOTc1PXN0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5OTMtXG5tbS9odWdlX21lbW9yeS5jOjM5OTQ6c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzk5NS1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDE0Nz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzYtXG5tbS9odWdlX21lbW9yeS5jOjQyNzc6XHRyZXQgPSBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFx1MDAyNnhhcywgbWFwcGluZyxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI3OC1cdFx0XHRcdFx0XHR0cnVlLCBsaXN0LCBzcGxpdF90eXBlLCBlbmQsIFx1MDAyNm5yX3NobWVtX2Ryb3BwZWQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDM2NT1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzNzctXHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xubW0vaHVnZV9tZW1vcnkuYzo0Mzc4Olx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIE5VTEwsXG5tbS9odWdlX21lbW9yeS5jLTQzNzktXHRcdFx0XHRcdFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4OTYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVHJhY2luZyB0aGUgQ2FsbGVycyBvZiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIHBhdGggdGhhdCBsZWFkcyB0byBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqY2FsbGVkKiBmcm9tPyBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBjYWxsIHNpdGVzLiBJIGtub3cgdGhpcyBsaWtlbHkgaW52b2x2ZXMgYSBkZWVwZXIgZGl2ZSwgbWF5YmUgY29kZSBzZWFyY2hpbmcgb3IgdXNpbmcgYSBkZWJ1Z2dlciB0byBzdGVwIHRocm91Z2ggZXhlY3V0aW9uLCBkZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRoZSBjb250ZXh0IGFyb3VuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGJlIGVzc2VudGlhbCB0byBkZWNpcGhlcmluZyB0aGUgbGFyZ2VyIGZ1bmN0aW9uYWxpdHkgdGhpcyBpcyBpbnZvbHZlZCBpbi4gVGhhdCYjMzk7bGwgYWxsb3cgbWUgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgZnVuY3Rpb24mIzM5O3Mgcm9sZSBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz00NDk5PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTA0LS8qXG5tbS9odWdlX21lbW9yeS5jOjQ1MDU6ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwNi0gKiB0aGUgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlubGluZSB3cmFwcGVyIGluIG1tL2ludGVybmFsLmhcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MTctICovXG5tbS9odWdlX21lbW9yeS5jOjQ1MTg6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxOS17XG4tLVxubW0vaW50ZXJuYWwuaD03MjI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vaW50ZXJuYWwuaC03MzMtXG5tbS9pbnRlcm5hbC5oOjczNDpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2ludGVybmFsLmgtNzM1LXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaW50ZXJuYWwuaC03NDctXG5tbS9pbnRlcm5hbC5oOjc0ODpcdHJldHVybiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vaW50ZXJuYWwuaC03NDktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ1NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBDYWxsIFNpdGVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGV4YWN0bHkgaXMgYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGJlaW5nIGludm9rZWQ/JiMzNDsgVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCBpcyBjcnVjaWFsIGZvciBncmFzcGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCB3aXRoaW4gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBnYWluIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgd29ya2Zsb3cgdGhhdCByZWxpZXMgb24gaXQuIFBpbnBvaW50aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSB0dW5pbmcsIGJ1ZyBmaXhpbmcsIG9yIHNpbXBseSB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgbW9kdWxlJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXAsIG9yIG15IElERSYjMzk7cyBjYWxsIGhpZXJhcmNoeSBmZWF0dXJlLCBhbmQgZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZm9saW8uYz05MT12b2lkIF9fZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0xMDMtXHRwYWdlX2NhY2hlX3JlbGVhc2UoZm9saW8pO1xubW0vZm9saW8uYzoxMDQ6XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ZvbGlvLmMtMTA1LVx0bWVtX2Nncm91cF91bmNoYXJnZShmb2xpbyk7XG4tLVxubW0vZm9saW8uYz0xNTI9c3RhdGljIHZvaWQgZm9saW9fYmF0Y2hfbW92ZV9scnUoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gsIG1vdmVfZm5fdCBtb3ZlX2ZuKVxuLS1cbm1tL2ZvbGlvLmMtMTg2LVx0XHRcdF9fZm9saW9fY2xlYXJfdW5ldmljdGFibGUoZm9saW8pO1xubW0vZm9saW8uYzoxODc6XHRcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9mb2xpby5jLTE4OC1cdFx0XHRmYmF0Y2gtXHUwMDNlZm9saW9zW2ldID0gTlVMTDtcbi0tXG5tbS9mb2xpby5jPTk4ND12b2lkIGZvbGlvc19wdXRfcmVmcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcywgdW5zaWduZWQgaW50ICpyZWZzKVxuLS1cbm1tL2ZvbGlvLmMtMTAyMi1cdFx0fVxubW0vZm9saW8uYzoxMDIzOlx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ZvbGlvLmMtMTAyNC1cdFx0X19wYWdlX2NhY2hlX3JlbGVhc2UoZm9saW8sIFx1MDAyNmxydXZlYywgXHUwMDI2ZmxhZ3MpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mzk5ND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDAxMC1cdFx0LyogVGFrZSBvZmYgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovXG5tbS9odWdlX21lbW9yeS5jOjQwMTE6XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYy00MDEyLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OT1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUwNC0vKlxubW0vaHVnZV9tZW1vcnkuYzo0NTA1OiAqIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlzIG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHk6XG5tbS9odWdlX21lbW9yeS5jOjQ1MDY6ICogdGhlIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpbmxpbmUgd3JhcHBlciBpbiBtbS9pbnRlcm5hbC5oXG5tbS9odWdlX21lbW9yeS5jLTQ1MDctICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3Jcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MDktICpcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxMDogKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMS0gKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNy0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDUxODpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00NTE5LXtcbi0tXG5tbS9pbnRlcm5hbC5oPTcyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9pbnRlcm5hbC5oLTczMy1cbm1tL2ludGVybmFsLmg6NzM0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaW50ZXJuYWwuaDo3MzU6c3RhdGljIGlubGluZSBib29sIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ludGVybmFsLmgtNzM2LXtcbi0tXG5tbS9pbnRlcm5hbC5oLTc0Ny1cbm1tL2ludGVybmFsLmg6NzQ4Olx0cmV0dXJuIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9pbnRlcm5hbC5oLTc0OS19XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTI2OT12b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMzA0LVxubW0vbWVtY29udHJvbC12MS5jOjMwNTpcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vbWVtY29udHJvbC12MS5jLTMwNi1cdGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAwO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MzkxPXN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NDI4LVxubW0vbWVtY29udHJvbC5jOjU0Mjk6XHRcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKSk7XG5tbS9tZW1jb250cm9sLmMtNTQzMC1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTU2OD12b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MDktXHQvKiBXYXJuaW5nIHNob3VsZCBuZXZlciBoYXBwZW4sIHNvIGRvbiYjMzk7dCB3b3JyeSBhYm91dCByZWZjb3VudCBub24tMCAqL1xubW0vbWVtY29udHJvbC5jOjU2MTA6XHRXQVJOX09OX09OQ0UoZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChvbGQpKTtcbm1tL21lbWNvbnRyb2wuYy01NjExLVx0b2xkLVx1MDAzZW1lbWNnX2RhdGEgPSAwO1xuLS1cbm1tL21pZ3JhdGUuYz01ODM9c3RhdGljIGludCBfX2ZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNTk3LVx0XHRcdFx0cmV0dXJuIC1FQUdBSU47XG5tbS9taWdyYXRlLmM6NTk4Olx0XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vbWlncmF0ZS5jLTU5OS1cdFx0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIGV4cGVjdGVkX2NvdW50KTtcbi0tXG5tbS9taWdyYXRlLmMtNjMwLVx0LyogVGFrZSBvZmYgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cbm1tL21pZ3JhdGUuYzo2MzE6XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL21pZ3JhdGUuYy02MzItXG4tLVxubW0vdm1zY2FuLmM9MTA4MT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTUzNC1cbm1tL3Ztc2Nhbi5jOjE1MzU6XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vdm1zY2FuLmMtMTUzNi1cdFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcdTAwMjZmcmVlX2ZvbGlvcywgZm9saW8pID09IDApIHtcbi0tXG5tbS92bXNjYW4uYz0xODk0PXN0YXRpYyB1bnNpZ25lZCBpbnQgbW92ZV9mb2xpb3NfdG9fbHJ1KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vdm1zY2FuLmMtMTkyOS1cbm1tL3Ztc2Nhbi5jOjE5MzA6XHRcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS92bXNjYW4uYy0xOTMxLVx0XHRcdGlmIChmb2xpb19iYXRjaF9hZGQoXHUwMDI2ZnJlZV9mb2xpb3MsIGZvbGlvKSA9PSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjM3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGb2N1cyBTeW1ib2xzIGluIHRoZSBIdWdlIE1lbW9yeSBTdWJzeXN0ZW0qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMg4oCTIGF2b2lkIHRoZSBub2lzZSwgYWltIGZvciB0aGUgc2lnbmFsLiBTbywgSSBzaG91bGRuJiMzOTt0IGxpc3QgZXZlcnkgc2luZ2xlIG1lbW9yeSBhbGxvY2F0b3IgY2FsbCwgYnV0IGluc3RlYWQsIHplcm8gaW4gb24gdGhlICpzcGVjaWZpYyogZnVuY3Rpb25zIHRoYXQgYXJlIGltcGxlbWVudGluZyBvciBkaXJlY3RseSB0cmlnZ2VyaW5nIHRoZSBodWdlIHBhZ2Ugc3BsaXR0aW5nIGxvZ2ljLCBvciB0aG9zZSB0aGF0IGFyZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBmZWF0dXJlLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpSaWdodCwgc28gZm9yIHRoZSBgbW0vaHVnZV9tZW1vcnkuY2AgZmlsZSwgdGhlIGluaXRpYWwgbGlzdCBnaXZlcyB1czoKCiogICBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YAoqICAgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgICh3aGljaCBpcyBzdGF0aWMgYnV0LCBpbXBvcnRhbnRseSwgaW5saW5lZC9zdGF0aWMgd2l0aGluIHRoaXMgZmlsZSBhbmQgY2FsbGVkIGJ5IHR3byBrZXkgZnVuY3Rpb25zKQoqICAgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAKKiAgIEFuZCB0aGVuLCB0aGUgbm9uLXN0YXRpYyBvbmVzIHJlbGF0ZWQgdG8gc3BsaXR0aW5nOiBgc3BsaXRfZm9saW9fdG9fbGlzdGAsIGBmb2xpb19zcGxpdF91bm1hcHBlZGAsIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLgoKVGhhdCBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBjaGVjayB0byBiZSBzdXJlLCBzbywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc3BsaXRfZm9saW9fdG9fbGlzdGAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCwgdG8gYmUgc3VyZSBvZiB0aGUgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NzU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG5tbS9odWdlX21lbW9yeS5jLTc2LVx0XHRcdFx0XHQgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xubW0vaHVnZV9tZW1vcnkuYzo3NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxubW0vaHVnZV9tZW1vcnkuYy03OC1cdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA3OS1cdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVx1MDAzZWNvdW50X29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9jb3VudDtcbm1tL2h1Z2VfbWVtb3J5LmM6MTA4MDpcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XG5tbS9odWdlX21lbW9yeS5jLTEwODEtXHRzaHJpbmtlcl9yZWdpc3RlcihkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTk0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MDEzLVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0MDE0Olx0XHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XG5tbS9odWdlX21lbW9yeS5jLTQwMTUtXHRcdCAqIHNwbGl0cyBpdCwgc28gdGhlIHVucXVldWUgYWJvdmUgZmluZHMgYW4gZW1wdHkgbGlzdCBhbmRcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0OTk9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MTEtICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxMjogKiBfZGVmZXJyZWRfbGlzdCBtaWdodCBiZSBpbiB1c2Ugb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpJiMzOTtzIHVubG9ja2VkXG5tbS9odWdlX21lbW9yeS5jLTQ1MTMtICogb24tc3RhY2sgbGlzdC5cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ2Mjg9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjQyLVxubW0vaHVnZV9tZW1vcnkuYzo0NjQzOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG5tbS9odWdlX21lbW9yeS5jLTQ2NDQtXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4tLVxubW0vbWlncmF0ZS5jPTE4MTE9c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4tLVxubW0vbWlncmF0ZS5jLTE4NTctXHRcdFx0ICogT25seSBjaGVjayBpdCB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIGxpc3QuXG5tbS9taWdyYXRlLmM6MTg1ODpcdFx0XHQgKiBTaW5jZSB0aGUgZm9saW8gY2FuIGJlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKVxubW0vbWlncmF0ZS5jLTE4NTktXHRcdFx0ICogbG9jYWwgbGlzdCBhbmQgcmVtb3ZpbmcgaXQgY2FuIGNhdXNlIHRoZSBsb2NhbCBsaXN0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTE1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgIGFuZCBpdHMgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uJiMzOTtzIHVzYWdl4oCUYSBxdWljayBzY2FuIGZvciBpdHMgY2FsbGVycyBpcyBpbiBvcmRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgbm90IGp1c3QgKndoYXQqIHRoaXMgZnVuY3Rpb24gZG9lcyBidXQgYWxzbyAqaG93KiBpdCYjMzk7cyBpbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGBzcGxpdF9mb2xpb190b19saXN0YCBpcyB1c2VkLiBXaGF0IGFzc3VtcHRpb25zIGFyZSBiYWtlZCBpbnRvIGl0cyBkZXNpZ24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIGFkZXF1YXRlbHkgYWRkcmVzc2VkIGluIHRoZSBjYWxsaW5nIGNvZGU/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBmbG93IGFuZCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24uIFRoaXMgYWxzbyBzZXJ2ZXMgdGhlIHB1cnBvc2Ugb2YgZmlndXJpbmcgb3V0IHdoZXJlIHRvIHN0YXJ0IGludmVzdGlnYXRpbmcsIGFuZCB3aGF0IHBvc3NpYmxlIGlzc3VlcyBtYXkgYXJpc2UuIFRoaXMgc2hvdWxkIHF1aWNrbHkgdW5jb3ZlciBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncyBvciBhcmVhcyByZXF1aXJpbmcgYSBkZWVwZXIgZGl2ZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwbGl0X2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDM2NT1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0MzEtICovXG5tbS9odWdlX21lbW9yeS5jOjQ0MzI6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQ0MzMtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDQ5LSAqIEl0IGhhcyB0aGUgc2FtZSBwcmVyZXF1aXNpdGVzIGFuZCByZXR1cm5zIGFzXG5tbS9odWdlX21lbW9yeS5jOjQ0NTA6ICogc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKS5cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ1MS0gKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OT1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZV9tZW1vcnkuYy00NTAwLXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwMTpcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LCAwKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMi19XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NjQzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NzA1LSNpZmRlZiBDT05GSUdfREVCVUdfRlNcbm1tL2h1Z2VfbWVtb3J5LmM6NDcwNjpzdGF0aWMgdm9pZCBzcGxpdF9odWdlX3BhZ2VzX2FsbCh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy00NzA3LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ3NTY9c3RhdGljIGlubGluZSBib29sIHZtYV9ub3Rfc3VpdGFibGVfZm9yX3RocF9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3NjktXG5tbS9odWdlX21lbW9yeS5jOjQ3NzA6c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxubW0vaHVnZV9tZW1vcnkuYy00NzcxLVx0XHRcdFx0dW5zaWduZWQgbG9uZyB2YWRkcl9lbmQsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODM5LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0ODQwOlx0XHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxubW0vaHVnZV9tZW1vcnkuYy00ODQxLVx0XHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4ODYtXG5tbS9odWdlX21lbW9yeS5jOjQ4ODc6c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg4OC1cdFx0XHRcdHBnb2ZmX3Qgb2ZmX2VuZCwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ5NTYtXG5tbS9odWdlX21lbW9yeS5jOjQ5NTc6c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbm1tL2h1Z2VfbWVtb3J5LmMtNDk1OC1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9wcylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwMDQtXHRcdH1cbm1tL2h1Z2VfbWVtb3J5LmM6NTAwNTpcdFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGZpbGVfcGF0aCwgb2ZmX3N0YXJ0LCBvZmZfZW5kLFxubW0vaHVnZV9tZW1vcnkuYy01MDA2LVx0XHRcdFx0bmV3X29yZGVyLCBpbl9mb2xpb19vZmZzZXQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTAxNS1cdGlmIChyZXQgPT0gMSBcdTAwMjZcdTAwMjYgcGlkID09IDEpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NTAxNjpcdFx0c3BsaXRfaHVnZV9wYWdlc19hbGwoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNTAxNy1cdFx0cmV0ID0gc3RybGVuKGlucHV0X2J1Zik7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy01MDIzLVxubW0vaHVnZV9tZW1vcnkuYzo1MDI0Olx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19waWQocGlkLCB2YWRkcl9zdGFydCwgdmFkZHJfZW5kLCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTUwMjUtXHRcdFx0aW5fZm9saW9fb2Zmc2V0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwMzMtXG5tbS9odWdlX21lbW9yeS5jOjUwMzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xubW0vaHVnZV9tZW1vcnkuYy01MDM1LVx0Lm93bmVyXHQgPSBUSElTX01PRFVMRSxcbm1tL2h1Z2VfbWVtb3J5LmM6NTAzNjpcdC53cml0ZVx0ID0gc3BsaXRfaHVnZV9wYWdlc193cml0ZSxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzNy19O1xubW0vaHVnZV9tZW1vcnkuYy01MDM4LVxubW0vaHVnZV9tZW1vcnkuYzo1MDM5OnN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy01MDQwLXtcbm1tL2h1Z2VfbWVtb3J5LmM6NTA0MTpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c3BsaXRfaHVnZV9wYWdlc1wmIzM0OywgMDIwMCwgTlVMTCwgTlVMTCxcbm1tL2h1Z2VfbWVtb3J5LmM6NTA0MjpcdFx0XHQgICAgXHUwMDI2c3BsaXRfaHVnZV9wYWdlc19mb3BzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0My1cdHJldHVybiAwO1xubW0vaHVnZV9tZW1vcnkuYy01MDQ0LX1cbm1tL2h1Z2VfbWVtb3J5LmM6NTA0NTpsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG5tbS9odWdlX21lbW9yeS5jLTUwNDYtI2VuZGlmXG4tLVxubW0vaHVnZXRsYi5jPTM5NTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXG4tLVxubW0vaHVnZXRsYi5jLTM5OTUtXHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBpKTtcbm1tL2h1Z2V0bGIuYzozOTk2Olx0XHRcdC8qIENhcmVmdWw6IHNlZSBfX3NwbGl0X2h1Z2VfcGFnZV90YWlsKCkgKi9cbm1tL2h1Z2V0bGIuYy0zOTk3LVx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKXBhZ2U7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTY4Nz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9pc29sYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy03NzktXHRcdCAqIGZvbGlvIGNhbiYjMzk7dCBiZSBmcmVlZCBmcm9tIHVuZGVyIHVzLiBOT1RFOiBmb2xpbyBsb2NrXG5tbS9raHVnZXBhZ2VkLmM6NzgwOlx0XHQgKiBpcyBuZWVkZWQgdG8gc2VyaWFsaXplIGFnYWluc3Qgc3BsaXRfaHVnZV9wYWdlKClcbm1tL2todWdlcGFnZWQuYy03ODEtXHRcdCAqIHdoZW4gaW52b2tlZCBmcm9tIHRoZSBWTS5cbi0tXG5tbS9rc20uYz0xNDk3PXN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX29uZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2tzbS5jLTE1MTktXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbm1tL2tzbS5jOjE1MjA6XHRcdGlmIChzcGxpdF9odWdlX3BhZ2UocGFnZSkpXG5tbS9rc20uYy0xNTIxLVx0XHRcdGdvdG8gb3V0X3VubG9jaztcbi0tXG5tbS9rc20uYz0yMjc3PXN0YXRpYyB2b2lkIGNtcF9hbmRfbWVyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbi0tXG5tbS9rc20uYy0yMzY0LVx0XHQgKiBmb2xpbywgdGhlbiB3ZSBhY3R1YWxseSBlbmRlZCB1cCBpbmNyZWFzaW5nIHRoZSByZWZlcmVuY2Vcbm1tL2tzbS5jOjIzNjU6XHRcdCAqIGNvdW50IG9mIHRoZSBzYW1lIGZvbGlvIHR3aWNlLCBhbmQgc3BsaXRfaHVnZV9wYWdlIGZhaWxlZC5cbm1tL2tzbS5jLTIzNjYtXHRcdCAqXG5tbS9rc20uYy0yMzY3LVx0XHQgKiBIZXJlIHdlIHNldCBhIGZsYWcgaWYgdGhhdCBoYXBwZW5lZCwgYW5kIHdlIHVzZSBpdCBsYXRlciB0b1xubW0va3NtLmM6MjM2ODpcdFx0ICogdHJ5IHNwbGl0X2h1Z2VfcGFnZSBhZ2Fpbi4gU2luY2Ugd2UgY2FsbCBmb2xpb19wdXQoKSByaWdodFxubW0va3NtLmMtMjM2OS1cdFx0ICogYWZ0ZXJ3YXJkcywgdGhlIHJlZmVyZW5jZSBjb3VudCB3aWxsIGJlIGNvcnJlY3QgYW5kXG5tbS9rc20uYzoyMzcwOlx0XHQgKiBzcGxpdF9odWdlX3BhZ2Ugc2hvdWxkIHN1Y2NlZWQuXG5tbS9rc20uYy0yMzcxLVx0XHQgKi9cbi0tXG5tbS9rc20uYy0yNDEwLVx0XHRcdFx0cmV0dXJuO1xubW0va3NtLmM6MjQxMTpcdFx0XHRzcGxpdF9odWdlX3BhZ2UocGFnZSk7XG5tbS9rc20uYy0yNDEyLVx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE3MTM9c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzE4LVx0bG9ja19wYWdlKHBhZ2UpO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzE5Olx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3MjAtXHR1bmxvY2tfcGFnZShwYWdlKTtcbi0tXG5tbS9zaG1lbS5jPTM4MjI9c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5tbS9zaG1lbS5jLTM5MTItXHQgKiBpbmZvLVx1MDAzZWZhbGxvY2VuZCBpcyBvbmx5IHJlbGV2YW50IHdoZW4gaHVnZSBwYWdlcyBtaWdodCBiZVxubW0vc2htZW0uYzozOTEzOlx0ICogaW52b2x2ZWQ6IHRvIHByZXZlbnQgc3BsaXRfaHVnZV9wYWdlKCkgZnJlZWluZyBmYWxsb2NhdGVkXG5tbS9zaG1lbS5jLTM5MTQtXHQgKiBwYWdlcyB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgY29tbWl0dGVkIGJleW9uZCBpX3NpemUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTgyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB3ZSBoYXZlIGBXb3J0aEZ1enppbmdgLCBhbmQgdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBwcmV0dHkgY2xlYXIuIFRoZSBjb3JlIHN1YnN5c3RlbSBpcyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGBtbS9odWdlX21lbW9yeS5jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB0b3VjaGluZyBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgaW50ZXJlc3RpbmcuIE5ldyBoZWxwZXIgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIHdpdGggdGhlc2UgYXNzZXJ0aW9ucyBgVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbylgIGFuZCBgVk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eSgmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCksIGZvbGlvKWAgc3VnZ2VzdHMgdGhlIGRldmVsb3BlciBpcyBjb25jZXJuZWQgYWJvdXQgc3VidGxlIHN0YXRlcy4gVGhlIHJlYWNoYWJpbGl0eSB2aWEgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgYW5kIFRIUC9tVEhQIG9wZXJhdGlvbnMsIGRlZmVycmVkIHNwbGl0IHF1ZXVlcywgc2hyaW5rZXIsIG1hZHZpc2UsIGFuZCBgc3BsaXRfaHVnZV9wYWdlYCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSwgZXNwZWNpYWxseSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICoqRGVmaW5pdGVseSBgV29ydGhGdXp6aW5nOiB0cnVlYCoqLiBObyBxdWVzdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYEVuYWJsZUNvbmZpZ3NgLiBXZSBhbHJlYWR5IGtub3cgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb21waWxlcyBgbW0vaHVnZV9tZW1vcnkuY2AsIHdoaWNoIGlzIGdyZWF0LCBidXQgd2Ugd2FudCB0byBrbm93IHdoYXQgdHJpZ2dlcnMgdGhpcyBgVk1fV0FSTl9PTl9GT0xJT2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBDT05GSUdfREVCVUdfVk1gIG9yIGBDT05GSUdfREVCVUdfVk1fUEdGTEFHU2AgYWZmZWN0IHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgY2hlY2tzLiBXYWl0LCBJIHJlbWVtYmVyOyBgVk1fV0FSTl9PTl9GT0xJT2AgaXMgZ3VhcmRlZCBieSBgQ09ORklHX0RFQlVHX1ZNYCwgSSBzaG91bGQgZ28gY2hlY2sgdGhlIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tZGVidWcuaD0xOD12b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xuLS1cbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTY5LX0pXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaDo3MDojZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pXHRcdCh7XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTcxLVx0aW50IF9fcmV0X3dhcm4gPSAhIShjb25kKTtcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC0xMzUtI2RlZmluZSBWTV9XQVJOX09OX09OQ0VfUEFHRShjb25kLCBwYWdlKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oOjEzNjojZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtMTM3LSNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGNvbmQsIGZvbGlvKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IERlYnVnZ2luZyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBtZW1vcnkgaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBpbmNsdWRlL2xpbnV4L21tZGVidWcuaGAuIEl0JiMzOTtzIGEgc3RhbmRhcmQgcGxhY2UgZm9yIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1ZyBkZWZpbml0aW9ucywgYW5kIHRoZSBjb250ZXh0IG9mdGVuIGdpdmVzIGluc2lnaHQgaW50byB0aGUgbGV2ZWwgb2YgdHJhY2luZyBhbmQgZXJyb3IgcmVwb3J0aW5nIGNvbmZpZ3VyZWQgZm9yIHRoZSBNTSBzdWJzeXN0ZW0uCgpJJiMzOTttIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lcyAyMCB0aHJvdWdoIDc1LiBUaGF0IHJhbmdlIHByb2JhYmx5IGNvbnRhaW5zIGtleSBtYWNybyBkZWZpbml0aW9ucywgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIChgI2lmZGVmYCwgYCNkZWZpbmVgLCBgI3VuZGVmYCksIGFuZCBwb3RlbnRpYWxseSBzb21lIGlubGluZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBkZWJ1Z2dpbmcuIEkgZXhwZWN0IHRvIGZpbmQgZmxhZ3MgZm9yIHR1cm5pbmcgb24gb3Igb2ZmIHZhcmlvdXMgbWVtb3J5IGRlYnVnZ2luZyBmZWF0dXJlcyBsaWtlIHBhZ2UgYWxsb2NhdGlvbiB0cmFjaW5nLCBzbGFiIGRlYnVnZ2luZywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIGluc3RydW1lbnRhdGlvbiByZWxhdGVkIHRvIHNwZWNpZmljIG1lbW9yeSB6b25lcyBvciBhbGxvY2F0aW9uIG9yZGVycy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbWFjcm9zIHRoYXQsIHdoZW4gZW5hYmxlZCwgbWlnaHQgbGVhZCBtZSB0byB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVhayBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZWZpbmVzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hhdCBkZWJ1ZyBvcHRpb25zIGFyZSBjdXJyZW50bHkgYWN0aXZlIGFuZCBob3cgdGhleSYjMzk7cmUgYWZmZWN0aW5nIHRoZSBrZXJuZWwmIzM5O3MgYmVoYXZpb3IgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGRvbWFpbi4gVWx0aW1hdGVseSwgaXQgc2hvdWxkIGFsbG93IG1lIHRvIG5hcnJvdyBteSBmb2N1cyBvciByZWZpbmUgbXkgc2VhcmNoIGNyaXRlcmlhIGZvciB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tZGVidWcuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0I2lmbmRlZiBMSU5VWF9NTV9ERUJVR19IXG4gICAzOlx0I2RlZmluZSBMSU5VWF9NTV9ERUJVR19IIDFcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0c3RydWN0IHBhZ2U7XG4gICA5Olx0c3RydWN0IHZtX2FyZWFfc3RydWN0O1xuICAxMDpcdHN0cnVjdCBtbV9zdHJ1Y3Q7XG4gIDExOlx0c3RydWN0IHZtYV9pdGVyYXRvcjtcbiAgMTI6XHRzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdDtcbiAgMTM6XHRcbiAgMTQ6XHR2b2lkIGR1bXBfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgY29uc3QgY2hhciAqcmVhc29uKTtcbiAgMTU6XHR2b2lkIGR1bXBfdm1hKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiAgMTY6XHR2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuICAxNzpcdHZvaWQgZHVtcF92bWcoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZywgY29uc3QgY2hhciAqcmVhc29uKTtcbiAgMTg6XHR2b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xuICAxOTpcdFxuICAyMDpcdCNpZmRlZiBDT05GSUdfREVCVUdfVk1cbiAgMjE6XHQjZGVmaW5lIFZNX0JVR19PTihjb25kKSBCVUdfT04oY29uZClcbiAgMjI6XHQjZGVmaW5lIFZNX0JVR19PTl9QQUdFKGNvbmQsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gIDIzOlx0XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDI0Olx0XHRcdGlmICh1bmxpa2VseShjb25kKSkge1x0XHRcdFx0XHRcXFxuICAyNTpcdFx0XHRcdGR1bXBfcGFnZShwYWdlLCBcJiMzNDtWTV9CVUdfT05fUEFHRShcJiMzNDsgX19zdHJpbmdpZnkoY29uZClcJiMzNDspXCYjMzQ7KTtcXFxuICAyNjpcdFx0XHRcdEJVRygpO1x0XHRcdFx0XHRcdFxcXG4gIDI3Olx0XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gIDI4Olx0XHR9IHdoaWxlICgwKVxuICAyOTpcdCNkZWZpbmUgVk1fQlVHX09OX0ZPTElPKGNvbmQsIGZvbGlvKVx0XHRcdFx0XHRcXFxuICAzMDpcdFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuICAzMTpcdFx0XHRpZiAodW5saWtlbHkoY29uZCkpIHtcdFx0XHRcdFx0XFxcbiAgMzI6XHRcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Vk1fQlVHX09OX0ZPTElPKFwmIzM0OyBfX3N0cmluZ2lmeShjb25kKVwmIzM0OylcJiMzNDspO1xcXG4gIDMzOlx0XHRcdFx0QlVHKCk7XHRcdFx0XHRcdFx0XFxcbiAgMzQ6XHRcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiAgMzU6XHRcdH0gd2hpbGUgKDApXG4gIDM2Olx0I2RlZmluZSBWTV9CVUdfT05fVk1BKGNvbmQsIHZtYSlcdFx0XHRcdFx0XFxcbiAgMzc6XHRcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMzg6XHRcdFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XHRcdFx0XHRcdFxcXG4gIDM5Olx0XHRcdFx0ZHVtcF92bWEodm1hKTtcdFx0XHRcdFx0XFxcbiAgNDA6XHRcdFx0XHRCVUcoKTtcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgzNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEltcGFjdCBvZiBERUJVR19WTSBvbiBIdWdlIFBhZ2UgQmVoYXZpb3IqKgoKT2theSwgc28gSSBzZWUgdGhhdCBlbmFibGluZyBgREVCVUdfVk1gIGFsc28gYWN0aXZhdGVzIGBWTV9XQVJOX09OX0ZPTElPYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IHRoaXMgaW1wYWN0cyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBodWdlIHBhZ2VzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGNvZGUgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgYmVoYXZpb3IsIHNvIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJJiMzOTtsbCBzY291ciB0aGF0IGZpbGUgKGBtbS9odWdlX21lbW9yeS5jYCkgZm9yIGFueSBgI2lmZGVmYCBibG9ja3Mgb3Igc2ltaWxhciBjb25zdHJ1Y3RzIHRoYXQgc3Vycm91bmQgdGhlIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoaXMgd2lsbCBoZWxwIG1lIG1hcCB0aGUgaW50ZXJhY3Rpb25zIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NjE9dW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyBfX3JlYWRfbW9zdGx5ID1cbm1tL2h1Z2VfbWVtb3J5LmM6NjI6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL2h1Z2VfbWVtb3J5LmMtNjMtXHQoMVx1MDAzY1x1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxubW0vaHVnZV9tZW1vcnkuYy02NC0jZW5kaWZcbm1tL2h1Z2VfbWVtb3J5LmM6NjU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9odWdlX21lbW9yeS5jLTY2LVx0KDFcdTAwM2NcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTgzPXVuc2lnbmVkIGxvbmcgaHVnZV96ZXJvX3BmbiBfX3JlYWRfbW9zdGx5ID0gSFVHRV9aRVJPX1VOU0VUX1BGTjtcbm1tL2h1Z2VfbWVtb3J5LmM6ODQ6I2lmbmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbm1tL2h1Z2VfbWVtb3J5LmMtODUtc3RhdGljIGF0b21pY190IGh1Z2VfemVyb19yZWZjb3VudDtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI3Mz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI4Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6Mjg4OiNpZmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbm1tL2h1Z2VfbWVtb3J5LmMtMjg5LXN0YXRpYyBpbnQgX19pbml0IGh1Z2VfemVyb19pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MTY9dm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDIyLVxubW0vaHVnZV9tZW1vcnkuYzo0MjM6I2lmZGVmIENPTkZJR19TWVNGU1xubW0vaHVnZV9tZW1vcnkuYy00MjQtc3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjYxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpodWdlcGFnZV9hdHRyW10gPSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy02NjUtXHRcdTAwMjZocGFnZV9wbWRfc2l6ZV9hdHRyLmF0dHIsXG5tbS9odWdlX21lbW9yeS5jOjY2NjojaWZkZWYgQ09ORklHX1NITUVNXG5tbS9odWdlX21lbW9yeS5jLTY2Ny1cdFx1MDAyNnNobWVtX2VuYWJsZWRfYXR0ci5hdHRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NzYyPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmaWxlX2N0cmxfYXR0cnNbXSA9IHtcbm1tL2h1Z2VfbWVtb3J5LmM6NzYzOiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtNzY0LVx0XHUwMDI2dGhwc2l6ZV9zaG1lbV9lbmFibGVkX2F0dHIuYXR0cixcbi0tXG5tbS9odWdlX21lbW9yeS5jPTgyMj1ERUZJTkVfTVRIUF9TVEFUX0FUVFIoc3dwb3V0X2ZhbGxiYWNrLCBNVEhQX1NUQVRfU1dQT1VUX0ZBTExCQUNLKTtcbm1tL2h1Z2VfbWVtb3J5LmM6ODIzOiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtODI0LURFRklORV9NVEhQX1NUQVRfQVRUUihzaG1lbV9hbGxvYywgTVRIUF9TVEFUX1NITUVNX0FMTE9DKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTgzOD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYW5vbl9zdGF0c19hdHRyc1tdID0ge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtODQxLVx0XHUwMDI2YW5vbl9mYXVsdF9mYWxsYmFja19jaGFyZ2VfYXR0ci5hdHRyLFxubW0vaHVnZV9tZW1vcnkuYzo4NDI6I2lmbmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtODQzLVx0XHUwMDI2enN3cG91dF9hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz04NjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfc3RhdHNfYXR0cnNbXSA9IHtcbm1tL2h1Z2VfbWVtb3J5LmM6ODY1OiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtODY2LVx0XHUwMDI2c2htZW1fYWxsb2NfYXR0ci5hdHRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9ODc4PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphbnlfc3RhdHNfYXR0cnNbXSA9IHtcbm1tL2h1Z2VfbWVtb3J5LmM6ODc5OiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtODgwLVx0XHUwMDI2enN3cG91dF9hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xNzUxPUVYUE9SVF9TWU1CT0xfR1BMKHZtZl9pbnNlcnRfZm9saW9fcG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTc1Mi1cbm1tL2h1Z2VfbWVtb3J5LmM6MTc1MzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL2h1Z2VfbWVtb3J5LmMtMTc1NC1zdGF0aWMgcHVkX3QgbWF5YmVfcHVkX21rd3JpdGUocHVkX3QgcHVkLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE5NTI9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMDYzLVxubW0vaHVnZV9tZW1vcnkuYzoyMDY0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vaHVnZV9tZW1vcnkuYy0yMDY1LXZvaWQgdG91Y2hfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNTUzPWJvb2wgemFwX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU5Mi1cbm1tL2h1Z2VfbWVtb3J5LmM6MjU5MzojaWZuZGVmIHBtZF9tb3ZlX211c3Rfd2l0aGRyYXdcbm1tL2h1Z2VfbWVtb3J5LmMtMjU5NC1zdGF0aWMgaW5saW5lIGludCBwbWRfbW92ZV9tdXN0X3dpdGhkcmF3KHNwaW5sb2NrX3QgKm5ld19wbWRfcHRsLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjc0MT1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg0OC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mjg0OTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL2h1Z2VfbWVtb3J5LmMtMjg1MC1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg4OC1cbm1tL2h1Z2VfbWVtb3J5LmM6Mjg4OTojaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXG5tbS9odWdlX21lbW9yeS5jLTI4OTAtLypcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMwNDA9c3BpbmxvY2tfdCAqX19wdWRfdHJhbnNfaHVnZV9sb2NrKHB1ZF90ICpwdWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzA1MC1cbm1tL2h1Z2VfbWVtb3J5LmM6MzA1MTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL2h1Z2VfbWVtb3J5LmMtMzA1Mi1pbnQgemFwX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY5Mj1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzQ0LVx0XHRcdFx0ICgxTCBcdTAwM2NcdTAwM2MgUEdfdW5ldmljdGFibGUpIHxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc0NTojaWZkZWYgQ09ORklHX0FSQ0hfVVNFU19QR19BUkNIXzJcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0Ni1cdFx0XHRcdCAoMUwgXHUwMDNjXHUwMDNjIFBHX2FyY2hfMikgfFxubW0vaHVnZV9tZW1vcnkuYy0zNzQ3LSNlbmRpZlxubW0vaHVnZV9tZW1vcnkuYzozNzQ4OiNpZmRlZiBDT05GSUdfQVJDSF9VU0VTX1BHX0FSQ0hfM1xubW0vaHVnZV9tZW1vcnkuYy0zNzQ5LVx0XHRcdFx0ICgxTCBcdTAwM2NcdTAwM2MgUEdfYXJjaF8zKSB8XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzk0LVx0XHRcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jOjM3OTU6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vaHVnZV9tZW1vcnkuYy0zNzk2LVx0XHRuZXdfZm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IGZvbGlvLVx1MDAzZW1lbWNnX2RhdGE7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NjQzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NzA0LVxubW0vaHVnZV9tZW1vcnkuYzo0NzA1OiNpZmRlZiBDT05GSUdfREVCVUdfRlNcbm1tL2h1Z2VfbWVtb3J5LmMtNDcwNi1zdGF0aWMgdm9pZCBzcGxpdF9odWdlX3BhZ2VzX2FsbCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NTA0NT1sYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy01MDQ3LVxubW0vaHVnZV9tZW1vcnkuYzo1MDQ4OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0OS1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE5MgoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiA2MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZvbGlvIFNwbGl0dGluZyBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBjb2RlIGNoYW5nZXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBvciBtb2RpZmllZCBpbiByZWxhdGlvbiB0byB0aGUgYEZvY3VzU3ltYm9sc2AuIFNvLCBsZXQmIzM5O3Mgc2VlLCB3ZSBoYXZlIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCwgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgdGhhdCBhcmUgbmV3IG9yIGFsdGVyZWQuIFRoZW4gdGhlcmUgYXJlIHRoZSBub24tc3RhdGljIGNhbGxlcnM6IGBzcGxpdF9mb2xpb190b19saXN0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGFuZCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLgoKUmlnaHQsIGxldCYjMzk7cyBjb25maXJtIHRoZSBzdGF0aWMgdnMuIG5vbi1zdGF0aWMgc3RhdHVzIG9mIHRob3NlIGZ1bmN0aW9ucywgbWFraW5nIHN1cmUgdGhhdCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBpcyBpbmRlZWQgbm9uLXN0YXRpYywgd2hpY2ggaXMgY29uZmlybWVkIG9uIGxpbmUgNDUxOCBhbmQgZGVjbGFyZWQgaW4gYG1tL2ludGVybmFsLmhgLiBDb25maXJtZWQgdGhhdCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBgc3BsaXRfZm9saW9fdG9fbGlzdGAsIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYW5kIGBkZWZlcnJlZF9zcGxpdF9mb2xpb2AgYXJlIG5vbi1zdGF0aWMgYXMgd2VsbCwgd2hpbGUgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCBhcmUgc3RhdGljLgoKQWxyaWdodCwgdGhhdCYjMzk7cyBkb25lLiBMZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBmb2N1cyBpcyBvbiB0aGUgcmlnaHQgZnVuY3Rpb25zOiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAsIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgLCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLgoKTm93LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIG9idmlvdXMgcmVhc29ucywgYW5kIGBERUJVR19WTWAgdG8gZW5hYmxlIHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucy4gR29vZCwgZ29vZC4KCk9rYXksIGxldCYjMzk7cyBzdW1tYXJpemUgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgcmVmYWN0b3JpbmcgdGhlIGBQR19wYXJ0aWFsbHlfbWFwcGVkYCBmbGFnIGNsZWFyaW5nIGFuZCBjb3JyZXNwb25kaW5nIG1USFAgc3RhdCBkZWNyZW1lbnQgbG9naWMgaW4gVEhQIGZvbGlvcyBpbnRvIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKWAuIENydWNpYWxseSwgaXQgaW50cm9kdWNlcyBuZXcgcnVudGltZSBhc3NlcnRpb25zLCB0aG9zZSBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoaXMgaGl0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIFRIUCAoYW5kIG1USFApIHNwbGl0dGluZyBhbmQgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlcy4gVGhlIGtleSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoZSBuZWVkIGZvciB0aG9yb3VnaCBmdXp6aW5nLiBUaGVzZSBhc3NlcnRpb25zIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBuZWVkIHRvIGhvbGQgdGhyb3VnaCBhbGwgZm9saW8gbGlmZWN5Y2xlcywgbWVtb3J5IHJlY2xhaW0vc2hyaW5rZXJzLCBhbmQgc3BsaXQgb3BlcmF0aW9ucywgYW5kIGFsbCBjb25jdXJyZW5jeSBhc3BlY3RzLiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3VidGxlIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIHJlY29yZCB0aGVzZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVCVUdfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkJiMzNDssCiAgICAmIzM0O19fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZCYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7c3BsaXRfZm9saW9fdG9fbGlzdCYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9mb2xpbyYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZmxhZyBhbmQgbVRIUCBzdGF0IGFjY291bnRpbmcgaW50byBhIGhlbHBlciBmdW5jdGlvbiBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKCksIGFuZCBpbnRyb2R1Y2VzIG5ldyBWTV9XQVJOX09OX0ZPTElPIGFzc2VydGlvbnMgaW4gbW0vaHVnZV9tZW1vcnkuYyAoX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkIGFuZCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBtYW5hZ2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFAvbVRIUCkgYW5kIGRlZmVycmVkIHNwbGl0IHF1ZXVlcywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgYW5kIGFzc2VydGlvbiB2aW9sYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtERUJVR19WTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQmIzM0OywKICAgICYjMzQ7X19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkJiMzNDssCiAgICAmIzM0O19fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICAgJiMzNDtmb2xpb19zcGxpdF91bm1hcHBlZCYjMzQ7LAogICAgJiMzNDtzcGxpdF9mb2xpb190b19saXN0JiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X2ZvbGlvJiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmbGFnIGFuZCBtVEhQIHN0YXQgYWNjb3VudGluZyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYW5kIGludHJvZHVjZXMgbmV3IFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBpbiBtbS9odWdlX21lbW9yeS5jIChfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQgYW5kIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIG1hbmFnaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUC9tVEhQKSBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWVzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBhbmQgYXNzZXJ0aW9uIHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNsZWFyaW5nIG9mIHRoZSBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQgc3RhdGlzdGljIHVwZGF0ZSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYWRkaW5nIFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucy5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgZmxhZ3MsIGRlYnVnIGFzc2VydGlvbnMsIGFuZCBzdGF0aXN0aWNzIGZvciBodWdlL211bHRpLXNpemUgYW5vbnltb3VzIGZvbGlvcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgY29weSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBkYXRhIGJ1ZmZlcnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhlIGFkZGVkIGFzc2VydGlvbnMgb3IgcmVmY291bnRpbmcgbG9naWMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5OTcyY2U0OTllZDg4MDY5NjI1OGM0ODdkY2ZhOWNkZjdhMWI3NzczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxNjo0MDo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGRkNjZjNmFkNWFmMTMuLmZhZTk1OTYzMzI3OWIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMzk3Miw2ICYjNDM7Mzk3MiwyNSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZvbGlvX2NhY2hlX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwkvKiBGb2xpbyBtdXN0IGJlIGZyb3plbi4gKi8KJiM0MzsJVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7CiYjNDM7CiYjNDM7CWlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT3JkZXItMSBmb2xpb3MgaGF2ZSBubyBfZGVmZXJyZWRfbGlzdC4gVGhlIGZsYWcgaXMgb25seSBldmVyIHNldAomIzQzOwkgKiBvbiBmb2xpb3MgdGhhdCBkbywgc28gdGhlIGxpc3QgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIgdGhlIGZsYWcuCiYjNDM7CSAqLwomIzQzOwlWTV9XQVJOX09OX0ZPTElPKCFsaXN0X2VtcHR5KCZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0KSwgZm9saW8pOwomIzQzOwomIzQzOwlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKJiM0MzsJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCiYjNDM7CQkgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwKIAkJCQkJICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLAogCQkJCQkgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSwKQEAgLTM5ODAsNyAmIzQzOzM5OTksNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogewogCXN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7CiAJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0OwotCWludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgJmFtcDsmYW1wOyBlbmQpOwpAQCAtMzk5OCwxMSAmIzQzOzQwMTYsNyBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogCQkgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuCiAJCSAqIENsZWFyIGl0IGhlcmU6IHRoZSBmbGFnIGRvZXMgbm90IHN1cnZpdmUgdGhlIHNwbGl0LgogCQkgKi8KLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChvbGRfb3JkZXIsCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAogCQlpZiAobWFwcGluZykgewogCQkJaW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwpAQCAtNDUxNiwxMSAmIzQzOzQ1MzAsNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwogCWxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZSgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSwgbmlkLCAmYW1wO21lbWNnLCAmYW1wO2ZsYWdzKTsKIAlpZiAoX19saXN0X2xydV9kZWwoJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QsIG5pZCkpIHsKLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAkJdW5xdWV1ZWQgPSB0cnVlOwogCX0KIAlsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsICZhbXA7ZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNQoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiAxNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgUmVmYWN0b3IqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLCBhaW1pbmcgdG8gY29uc29saWRhdGUgdGhlIGxvZ2ljIGZvciBjbGVhcmluZyB0aGUgYFBHX3BhcnRpYWxseV9tYXBwZWRgIGZsYWcgYW5kIGRlY3JlbWVudGluZyB0aGUgYE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRURgIHN0YXQgY291bnRlci4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIGhlbHBlciBmdW5jdGlvbiBpcyB0aGUga2V5IGNoYW5nZSBoZXJlLiBUaGUgZGlmZiBtYWtlcyBpdCBtdWNoIGNsZWFyZXIgdG8gc2VlIHRoYXQgdGhlIGNvZGUgdXNlZCB0byBiZSBpbiB0d28gcGxhY2VzIGFuZCBpcyBub3cgaW4gb25lLgoKTXkgZmlyc3QgdGhvdWdodCwgYXMgYWx3YXlzLCBpcyB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgZXNwZWNpYWxseSBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIG15IHN0YW5kYXJkIGFwcHJvYWNoOgotICAgRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8uCi0gICBEb2VzIGl0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCBvcGVyYXRlcyBvbiBgc3RydWN0IGZvbGlvYCBmbGFncywgcmVmY291bnRzLCBhbmQgbGlzdCBwb2ludGVycy4KLSAgIERvZXMgaXQgY2hhbmdlIGJ1ZmZlciBzaXplcyBvciBtZW1vcnkgY29weSBsZW5ndGhzPyBOby4KLSAgIERvZXMgaXQgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLgotICAgSXMgdGhlcmUgYW55IEtNU0FOIHJlbGV2YW5jZT8gTm8uCgpUaGUgcGF0Y2ggc2VlbXMgcmVsYXRpdmVseSBzYWZlIGluIHRoaXMgcmVnYXJkLiBUaGlzIHJlZmFjdG9yIGFwcGVhcnMgdG8gZm9jdXMgb24gbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgd2l0aGluIHRoZSBgZm9saW9gIHN0cnVjdHVyZSBpdHNlbGYuIE5vIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFRoYXQmIzM5O3MgZ29vZC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGlzc3VlcyBoaWRpbmcgaW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgb3IgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIExldCYjMzk7cyBjb25maXJtIGFnYWluIGluIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLiBPa2F5LCB0aGVyZSYjMzk7cyBhIGBWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtgIHdpdGhpbiB0aGUgbmV3IGZ1bmN0aW9uLCB3aGljaCBpcyBhIGtleSBzYW5pdHkgY2hlY2suCgpNeSBhbmFseXNpcyBwb2ludHMgdG8gYSByZWZhY3RvcmluZyBvZiBhIGNyaXRpY2FsIHBhdGgsIHdoaWNoIG1lYW5zIEkgaGF2ZSB0byBiZSBleHRyZW1lbHkgbWV0aWN1bG91cy4gSSBtdXN0IGVuc3VyZSB0aGUgcmVmYWN0b3JpbmcgaGFzIG5vdCBpbnRyb2R1Y2VkIGFueSBkYXRhIHJhY2VzIG9yIGNoYW5nZWQgdGhlIG92ZXJhbGwgbG9ja2luZyBzY2hlbWUuIEl0IGFsc28gbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgY2hlY2sgaXMgY29ycmVjdC4gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gbWUgdGhhdCBrZXJuZWwgY29kZSBpcyB3ZWxsLWFzc2VydGVkLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuIFRoaXMgaXMgYSBjbGVhbiByZWZhY3Rvci4gSSBhbSBjb25maWRlbnQuIFJlYWR5IHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmbGFncywgZGVidWcgYXNzZXJ0aW9ucywgYW5kIHN0YXRpc3RpY3MgZm9yIGh1Z2UvbXVsdGktc2l6ZSBhbm9ueW1vdXMgZm9saW9zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgYWRkZWQgYXNzZXJ0aW9ucyBvciByZWZjb3VudGluZyBsb2dpYyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmbGFncywgZGVidWcgYXNzZXJ0aW9ucywgYW5kIHN0YXRpc3RpY3MgZm9yIGh1Z2UvbXVsdGktc2l6ZSBhbm9ueW1vdXMgZm9saW9zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgYWRkZWQgYXNzZXJ0aW9ucyBvciByZWZjb3VudGluZyBsb2dpYyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MDAuMDEwNjAxOTc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NTEzMDI3ODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJERUJVR19WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZFwiLFxuICAgIFwiX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCIsXG4gICAgXCJmb2xpb19zcGxpdF91bm1hcHBlZFwiLFxuICAgIFwic3BsaXRfZm9saW9fdG9fbGlzdFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLCBkZWJ1ZyBhc3NlcnRpb25zLCBhbmQgc3RhdGlzdGljcyBmb3IgaHVnZS9tdWx0aS1zaXplIGFub255bW91cyBmb2xpb3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBhZGRlZCBhc3NlcnRpb25zIG9yIHJlZmNvdW50aW5nIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZmxhZyBhbmQgbVRIUCBzdGF0IGFjY291bnRpbmcgaW50byBhIGhlbHBlciBmdW5jdGlvbiBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKCksIGFuZCBpbnRyb2R1Y2VzIG5ldyBWTV9XQVJOX09OX0ZPTElPIGFzc2VydGlvbnMgaW4gbW0vaHVnZV9tZW1vcnkuYyAoX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkIGFuZCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBtYW5hZ2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFAvbVRIUCkgYW5kIGRlZmVycmVkIHNwbGl0IHF1ZXVlcywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgYW5kIGFzc2VydGlvbiB2aW9sYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTowMC4wMTA2MTg0NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MzM1MTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk5NzJjZTQ5OWVkODgwNjk2MjU4YzQ4N2RjZmE5Y2RmN2ExYjc3NzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNjo0MDo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IGRkNjZjNmFkNWFmMTMuLmZhZTk1OTYzMzI3OWIgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMzk3Miw2ICszOTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm9saW9fY2FjaGVfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHQvKiBGb2xpbyBtdXN0IGJlIGZyb3plbi4gKi9cXG4rXFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuK1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcXG4rXFx0ICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLlxcbitcXHQgKi9cXG4rXFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pO1xcbitcXG4rXFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuK1xcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbitcXHRcXHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXFxuQEAgLTM5ODAsNyArMzk5OSw2IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG4gXFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xcbi1cXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcXHUwMDI2XFx1MDAyNiBlbmQpO1xcbkBAIC0zOTk4LDExICs0MDE2LDcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cXG4gXFx0XFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxcbiBcXHRcXHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbi1cXHRcXHRcXHRtb2RfbXRocF9zdGF0KG9sZF9vcmRlcixcXG4tXFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbiBcXG4gXFx0XFx0aWYgKG1hcHBpbmcpIHtcXG4gXFx0XFx0XFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbkBAIC00NTE2LDExICs0NTMwLDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuIFxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG4gXFx0aWYgKF9fbGlzdF9scnVfZGVsKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xcbi1cXHRcXHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xcbi1cXHRcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4tXFx0XFx0XFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXFxuLVxcdFxcdFxcdFxcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4gXFx0XFx0dW5xdWV1ZWQgPSB0cnVlO1xcbiBcXHR9XFxuIFxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MDAuNjc0NjQ4MDAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5NDUxMzk5NDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiREVCVUdfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkXCIsXG4gICAgXCJfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcInNwbGl0X2ZvbGlvX3RvX2xpc3RcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X2ZvbGlvXCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmbGFnIGFuZCBtVEhQIHN0YXQgYWNjb3VudGluZyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYW5kIGludHJvZHVjZXMgbmV3IFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBpbiBtbS9odWdlX21lbW9yeS5jIChfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQgYW5kIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIG1hbmFnaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUC9tVEhQKSBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWVzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBhbmQgYXNzZXJ0aW9uIHZpb2xhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTk3MmNlNDk5ZWQ4ODA2OTYyNThjNDg3ZGNmYTljZGY3YTFiNzc3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTY6NDA6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZGQ2NmM2YWQ1YWYxMy4uZmFlOTU5NjMzMjc5YiAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTcyLDYgKzM5NzIsMjUgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHQvKiBGb2xpbyBtdXN0IGJlIGZyb3plbi4gKi9cbitcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuK1xuK1x0aWYgKCFmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogT3JkZXItMSBmb2xpb3MgaGF2ZSBubyBfZGVmZXJyZWRfbGlzdC4gVGhlIGZsYWcgaXMgb25seSBldmVyIHNldFxuK1x0ICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLlxuK1x0ICovXG4rXHRWTV9XQVJOX09OX0ZPTElPKCFsaXN0X2VtcHR5KFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pO1xuK1xuK1x0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4rXHRtb2RfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSxcbitcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuK31cbitcbiBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHhhX3N0YXRlICp4YXMsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGJvb2wgZG9fbHJ1LFxuQEAgLTM5ODAsNyArMzk5OSw2IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4ge1xuIFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbiBcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcbi1cdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbkBAIC0zOTk4LDExICs0MDE2LDcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cbiBcdFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxuIFx0XHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cbiBcdFx0ICovXG4tXHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdFx0bW9kX210aHBfc3RhdChvbGRfb3JkZXIsXG4tXHRcdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHRcdH1cbitcdFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4gXG4gXHRcdGlmIChtYXBwaW5nKSB7XG4gXHRcdFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuQEAgLTQ1MTYsMTEgKzQ1MzAsNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFx1MDAyNm1lbWNnLCBcdTAwMjZmbGFncyk7XG4gXHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4tXHRcdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHRcdH1cbitcdFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4gXHRcdHVucXVldWVkID0gdHJ1ZTtcbiBcdH1cbiBcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXHUwMDI2ZmxhZ3MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MDAuNjc0NjYwOTgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1NTE4NjA4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyB3aXRoIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUsIGFuZCB0aGUgZ29hbCBpcyBhIHByZXR0eSBzdGFuZGFyZCBvbmU6IGRldGVybWluZSBpZiBpdCdzIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZyB3aXRoIHN5emthbGxlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGNoYW5nZWQsIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIFwiZm9jdXMgc3ltYm9sc1wiIHRvIHRhcmdldCwgYW5kIHRoZW4gbmFpbCBkb3duIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0aG9zZSBzZWN0aW9ucyBvZiBjb2RlLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBkZXZlbG9wZXIgUUEgYW5kIGluaXRpYWwgY29kZSBhbmFseXNpcyDigJMgdGhlIGtpbmQgb2YgdHJpYWdlIEkgZGVhbCB3aXRoIHJlZ3VsYXJseS4gU2V2ZXJpdHktd2lzZSwgSSdkIHNheSB0aGlzIGlzIHByZXR0eSBsb3csIG5vbi1jcml0aWNhbCwgb3IgZXZlbiBiZW5pZ24gYXQgdGhpcyBzdGFnZS5cblxuRmlyc3QgdGhpbmdzIGZpcnN0OiB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gSHVnZSBwYWdlcyBhcmUgYSBrbm93biBhcmVhIHdoZXJlIGlzc3VlcyBjYW4gaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiBzeXN0ZW0gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGFsd2F5cyBhIGNvbXBsZXggYmVhc3QuXG5cblRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBvciBtb2RpZmllcyB0aGVzZSBmdW5jdGlvbnM6XG5cbiogICBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKWBcbiogICBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKC4uLilgXG4qICAgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKWBcblxuTm93LCB0aGUgZnVuIGJlZ2lucy4gVGltZSB0byBkaWcgaW50byB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYGdyZXBwZXJgIG9yIHBlcmhhcHMganVzdCBgcmVhZC1maWxlYCB0byBleHBsb3JlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gc2VxdWVuY2UsIGFuZCB3aGF0IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgZXhpc3QuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHBhdGhzIHRoYXQgYXJlIG9mIGludGVyZXN0IHRvIHN5emthbGxlci5cblxuVWx0aW1hdGVseSwgSSB3aWxsIGFsc28gbmVlZCB0byBpZGVudGlmeSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgY29kZSB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2gsIGluIG9yZGVyIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gZnV6ei5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQxOjIwLjIyNjUyNjY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA5ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk3MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk3MDpcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxcbjM5NzE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzk3MjpcXHRcXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjM5NzM6XFx0fVxcbjM5NzQ6XFx0XFxuMzk3NTpcXHRzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMzk3NjpcXHR7XFxuMzk3NzpcXHRcXHQvKiBGb2xpbyBtdXN0IGJlIGZyb3plbi4gKi9cXG4zOTc4OlxcdFxcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xcbjM5Nzk6XFx0XFxuMzk4MDpcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpXFxuMzk4MTpcXHRcXHRcXHRyZXR1cm47XFxuMzk4MjpcXHRcXG4zOTgzOlxcdFxcdC8qXFxuMzk4NDpcXHRcXHQgKiBPcmRlci0xIGZvbGlvcyBoYXZlIG5vIF9kZWZlcnJlZF9saXN0LiBUaGUgZmxhZyBpcyBvbmx5IGV2ZXIgc2V0XFxuMzk4NTpcXHRcXHQgKiBvbiBmb2xpb3MgdGhhdCBkbywgc28gdGhlIGxpc3QgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIgdGhlIGZsYWcuXFxuMzk4NjpcXHRcXHQgKi9cXG4zOTg3OlxcdFxcdFZNX1dBUk5fT05fRk9MSU8oIWxpc3RfZW1wdHkoXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcXG4zOTg4OlxcdFxcbjM5ODk6XFx0XFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuMzk5MDpcXHRcXHRtb2RfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSxcXG4zOTkxOlxcdFxcdFxcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcXG4zOTkyOlxcdH1cXG4zOTkzOlxcdFxcbjM5OTQ6XFx0c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4zOTk1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4zOTk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGJvb2wgZG9fbHJ1LFxcbjM5OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBlbnVtIHNwbGl0X3R5cGUgc3BsaXRfdHlwZSxcXG4zOTk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGdvZmZfdCBlbmQsIGludCAqbnJfc2htZW1fZHJvcHBlZClcXG4zOTk5OlxcdHtcXG40MDAwOlxcdFxcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XFxuNDAwMTpcXHRcXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XFxuNDAwMjpcXHRcXHRpbnQgcmV0ID0gMDtcXG40MDAzOlxcdFxcbjQwMDQ6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFtYXBwaW5nIFxcdTAwMjZcXHUwMDI2IGVuZCk7XFxuNDAwNTpcXHRcXG40MDA2OlxcdFxcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICsgMSkpIHtcXG40MDA3OlxcdFxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xcbjQwMDg6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjQwMDk6XFx0XFxuNDAxMDpcXHRcXHRcXHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG40MDExOlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbjQwMTI6XFx0XFxuNDAxMzpcXHRcXHRcXHQvKlxcbjQwMTQ6XFx0XFx0XFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxcbjQwMTU6XFx0XFx0XFx0ICogc3BsaXRzIGl0LCBzbyB0aGUgdW5xdWV1ZSBhYm92ZSBmaW5kcyBhbiBlbXB0eSBsaXN0IGFuZFxcbjQwMTY6XFx0XFx0XFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxcbjQwMTc6XFx0XFx0XFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXFxuNDAxODpcXHRcXHRcXHQgKi9cXG40MDE5OlxcdFxcdFxcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbjQwMjA6XFx0XFxuNDAyMTpcXHRcXHRcXHRpZiAobWFwcGluZykge1xcbjQwMjI6XFx0XFx0XFx0XFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjQwMjM6XFx0XFxuNDAyNDpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuNDAyNTpcXHRcXHRcXHRcXHQgICAgbmV3X29yZGVyIFxcdTAwM2MgSFBBR0VfUE1EX09SREVSKSB7XFxuNDAyNjpcXHRcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSkge1xcbjQwMjc6XFx0XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLFxcbjQwMjg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TlJfU0hNRU1fVEhQUywgLW5yKTtcXG40MDI5OlxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuNDAzMDpcXHRcXHRcXHRcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXFxuNDAzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHROUl9GSUxFX1RIUFMsIC1ucik7XFxuNDAzMjpcXHRcXHRcXHRcXHRcXHR9XFxuNDAzMzpcXHRcXHRcXHRcXHR9XFxuNDAzNDpcXHRcXHRcXHR9XFxuNDAzNTpcXHRcXG40MDM2OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG40MDM3OlxcdFxcdFxcdFxcdGlmIChtYXBwaW5nKSB7XFxuNDAzODpcXHRcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8obWFwcGluZywgZm9saW8pO1xcbjQwMzk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQxOjIwLjIyNjg0MTIxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0NjU4NzM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBIdWdlIFBhZ2UgSXNzdWUqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgc3VzcGVjdGVkIGh1Z2UgcGFnZSBpc3N1ZSBhbmQgSSd2ZSBnb3QgYSBodW5jaCB3aGVyZSB0byBzdGFydCBsb29raW5nLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHdoYXQgd2UncmUgc2VlaW5nLCBJIHRoaW5rIGl0J3Mgd29ydGggYSBjbG9zZSBleGFtaW5hdGlvbiBvZiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCB3aXRoaW4gdGhlIGBtbS9odWdlX21lbW9yeS5jYCBmaWxlLiBNeSByZWFzb25pbmcgaXMgdGhhdCB1bnF1ZXVpbmcgb3BlcmF0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBpbnZvbHZlZCBpbiBkZWZlcnJlZCBzcGxpdHMsIGFyZSBvZnRlbiBjcml0aWNhbCBwb2ludHMgd2hlcmUgZnJhZ21lbnRhdGlvbiBvciBpbmNvcnJlY3QgYWNjb3VudGluZyBjb3VsZCBpbnRyb2R1Y2UgdGhlIGtpbmQgb2YgYmVoYXZpb3Igd2UncmUgb2JzZXJ2aW5nLiBJdCdzIGEgcHJpbWUgc3VzcGVjdCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHN1YnRsZSBidWdzIHJlbGF0ZWQgdG8gaG93IHRoZSBodWdlIHBhZ2Ugc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBkdXJpbmcgc3BsaXQgb3BlcmF0aW9ucy4gVGhpcyBhcmVhIGlzIGtub3duIGZvciBiZWluZyB0cmlja3ksIHNvIGl0J3MgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29kZS4gSSdtIGZvY3VzaW5nIHRoZXJlIGJlY2F1c2UgaXQgZGVhbHMgd2l0aCB0aGUgc3BsaXR0aW5nIG9mIHRoZSBodWdlIHBhZ2VzIHdoaWNoIGlzIGEgY29tbW9uIHBsYWNlIHRvIGhhdmUgaXNzdWVzIHdpdGggaW4gY29tcGxleCBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MjIuNjczNDMwNTA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDUxMDpcXHQgKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcXG40NTExOlxcdCAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XFxuNDUxMjpcXHQgKiBfZGVmZXJyZWRfbGlzdCBtaWdodCBiZSBpbiB1c2Ugb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpJ3MgdW5sb2NrZWRcXG40NTEzOlxcdCAqIG9uLXN0YWNrIGxpc3QuXFxuNDUxNDpcXHQgKlxcbjQ1MTU6XFx0ICogVGhlIGxpc3RfbHJ1IHN1Ymxpc3QgaXMgZGV0ZXJtaW5lZCBieSBmb2xpbydzIG1lbWNnOiBpdCBpcyB0aGVyZWZvcmVcXG40NTE2OlxcdCAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cXG40NTE3OlxcdCAqL1xcbjQ1MTg6XFx0Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG40NTE5OlxcdHtcXG40NTIwOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG40NTIxOlxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcXG40NTIyOlxcdFxcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xcbjQ1MjM6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTI0OlxcdFxcdGJvb2wgdW5xdWV1ZWQgPSBmYWxzZTtcXG40NTI1OlxcdFxcbjQ1MjY6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbjQ1Mjc6XFx0XFx0V0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKTtcXG40NTI4OlxcdFxcbjQ1Mjk6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1MzA6XFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuNDUzMTpcXHRcXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcXHUwMDI2bWVtY2csIFxcdTAwMjZmbGFncyk7XFxuNDUzMjpcXHRcXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxuNDUzMzpcXHRcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG40NTM0OlxcdFxcdFxcdHVucXVldWVkID0gdHJ1ZTtcXG40NTM1OlxcdFxcdH1cXG40NTM2OlxcdFxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG40NTM3OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjQ1Mzg6XFx0XFxuNDUzOTpcXHRcXHRyZXR1cm4gdW5xdWV1ZWQ7XFx0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xcbjQ1NDA6XFx0fVxcbjQ1NDE6XFx0XFxuNDU0MjpcXHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbid0IGNsZWFyIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyAqL1xcbjQ1NDM6XFx0dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuNDU0NDpcXHR7XFxuNDU0NTpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XFxuNDU0NjpcXHRcXHRpbnQgbmlkO1xcbjQ1NDc6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQ1NDg6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MToyMi42NzM2MTk0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk4MzMxODIxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRm9saW8gUmVzZXQgYW5kIERlZmVycmVkIFNwbGl0dGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIGludHJvZHVjZXMgc29tZSBydW50aW1lIGFzc2VydGlvbnMuIEkgc2VlIGBWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKWAgYW5kIGBWTV9XQVJOX09OX0ZPTElPKCFsaXN0X2VtcHR5KFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pYC4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLiBUaGUgY29tbWVudCBzcGVjaWZpY2FsbHkgaGlnaGxpZ2h0cyB0aGF0IG9yZGVyLTEgZm9saW9zIGRvbid0IHVzZSBgX2RlZmVycmVkX2xpc3RgLCBhbmQgdGhlIGZsYWcgaXMgc2V0ICpvbmx5KiB3aGVuIHRoZSBsaXN0IGlzIGluIHVzZSwgd2hpY2ggaXMgd2h5IHRoZSBjaGVjayBpcyBtYWRlLiBUaGF0IG1ha2VzIHNlbnNlIGZyb20gYSBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBhbmQgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgLiAgU3BlY2lmaWNhbGx5LCBpbiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYF9fbGlzdF9scnVfZGVsYCByZW1vdmVzIHRoZSBmb2xpbyBmcm9tIHRoZSBkZWZlcnJlZCBsaXN0LiBUaGUgcXVlc3Rpb24gaXM6IFdoYXQgZG9lcyB0aGF0IGxpc3QgZGVsZXRpb24gYWN0dWFsbHkgZG8/IERvZXMgaXQgcmVpbml0aWFsaXplIHRoZSBsaXN0IGhlYWQgb3IganVzdCByZW1vdmUgaXQ/ICBJIG5lZWQgdG8gY2hlY2sgaG93IGBfX2xpc3RfbHJ1X2RlbGAgd29ya3MsIGJlY2F1c2UgSSBuZWVkIHRvIGtub3cgaWYgdGhlIHVuZGVybHlpbmcgbGlzdCBvcGVyYXRpb24gaXMgYSBgbGlzdF9kZWxgIG9yIGEgYGxpc3RfZGVsX2luaXRgLiBUaGlzIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3RhdGUgb2YgdGhlIGZvbGlvIGFmdGVyIGJlaW5nIHVucXVldWVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgX19saXN0X2xydV9kZWxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MjUuNjU2OTQwMjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNDgxODUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2xpc3RfbHJ1X2RlbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9MTQ4PWJvb2wgX19saXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTE0OS1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDoxNTA6Ym9vbCBfX2xpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtMTUxLVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTE4PWJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1MzEtXFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXFx1MDAyNm1lbWNnLCBcXHUwMDI2ZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUzMjpcXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy00NTMzLVxcdFxcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbi0tXFxubW0vbGlzdF9scnUuYz0yMDg9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkKTtcXG5tbS9saXN0X2xydS5jLTIwOS1cXG5tbS9saXN0X2xydS5jOjIxMDpib29sIF9fbGlzdF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbm1tL2xpc3RfbHJ1LmMtMjExLVxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBpbnQgbmlkKVxcbi0tXFxubW0vbGlzdF9scnUuYz0yNjU9Ym9vbCBsaXN0X2xydV9kZWwoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTI3MS1cXHRsID0gbGlzdF9scnVfbG9jayhscnUsIG5pZCwgXFx1MDAyNm1lbWNnKTtcXG5tbS9saXN0X2xydS5jOjI3MjpcXHRyZXQgPSBfX2xpc3RfbHJ1X2RlbChscnUsIGwsIGl0ZW0sIG5pZCk7XFxubW0vbGlzdF9scnUuYy0yNzMtXFx0bGlzdF9scnVfdW5sb2NrKGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MToyOC4zODE3NjM0MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MjE1MTk0Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbW0vbGlzdF9scnUuY2AgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9saXN0X2xydS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjEwLiBUaGF0IHBhcnRpY3VsYXIgc3BvdCBpcyBsaWtlbHkgd2hlcmUgc29tZSBpbnRlcmVzdGluZyBsb2dpYyByZXNpZGVzLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIG1hbmFnZW1lbnQgb2YgdGhlIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgbGlzdC4gSSdtIGd1ZXNzaW5nIGl0IG1pZ2h0IGludm9sdmUgaW5zZXJ0aW9uLCBkZWxldGlvbiwgb3IgcGVyaGFwcyBldmVuIGFjY2VzcyBvZiBlbGVtZW50cyB3aXRoaW4gdGhlIGxpc3QsIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSByZXZlYWxzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgaW4gdGhlIGFsZ29yaXRobXMgdXNlZCwgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBhbmQgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtZW1vcnkgc3Vic3lzdGVtcy4gTGluZSAyMTAgaXMgbXkgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJJ2xsIGJlIHByZXBhcmVkIHRvIGZvbGxvdyB0aGUgdGhyZWFkcyBvZiBsb2dpYyB3aGVyZXZlciB0aGV5IGxlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0OTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTozNi41OTY5NjI2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRib29sIF9fbGlzdF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbiAyMTE6XFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpXFxuIDIxMjpcXHR7XFxuIDIxMzpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoaXRlbSkpIHtcXG4gMjE0OlxcdFxcdFxcdGxpc3RfZGVsX2luaXQoaXRlbSk7XFxuIDIxNTpcXHRcXHRcXHRsLVxcdTAwM2Vucl9pdGVtcy0tO1xcbiAyMTY6XFx0XFx0XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZscnUtXFx1MDAzZW5vZGVbbmlkXS5ucl9pdGVtcyk7XFxuIDIxNzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjE4OlxcdFxcdH1cXG4gMjE5OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjIwOlxcdH1cXG4gMjIxOlxcdFxcbiAyMjI6XFx0LyogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgbWVtY2cgbGlmZXRpbWUuICovXFxuIDIyMzpcXHRib29sIGxpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcXG4gMjI0OlxcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAyMjU6XFx0e1xcbiAyMjY6XFx0XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcXG4gMjI3OlxcdFxcdGJvb2wgcmV0O1xcbiAyMjg6XFx0XFxuIDIyOTpcXHRcXHRsID0gbGlzdF9scnVfbG9jayhscnUsIG5pZCwgXFx1MDAyNm1lbWNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MzYuNTk3MDY1MTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIyNTEyMzk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWVwIERpdmUgaW50byBGb2xpbyBSZWZjb3VudHMgYW5kIERlZmVycmVkIFNwbGl0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCByZWFjdGlvbiBoZXJlIGlzIHRvIHplcm8gaW4gb24gdGhlc2UgcmVmY291bnQgb3BlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2l0aGluIHRoZSBmb2xpbyBsaWZlY3ljbGUuIEknbSBzZWVpbmcgYSBjb2RlIHBhdGggaW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgd2hlcmUgdGhlcmUgc2VlbXMgdG8gYmUgYSBzdWJ0bGUgZGFuY2Ugd2l0aCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAuIEknbSBpbW1lZGlhdGVseSBjb25jZXJuZWQgYmVjYXVzZSBJIHNlZSBhIHBvdGVudGlhbCByYWNlLiBJcyB0aGUgZm9saW8gdHJ1bHkgZnJvemVuICpiZWZvcmUqIHdlIGNhbGwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgPyBUaGUgY29kZSBzdWdnZXN0cyB0aGUgcmVmY291bnQgaXMgc2V0IHRvIHplcm8gZHVlIHRvIGBmb2xpb19yZWZfZnJlZXplYC5cblxuVGhhdCdzIGEgcmVkIGZsYWcuIEkga25vdyBgZm9saW9fcmVmX2ZyZWV6ZWAgc2V0cyB0aGUgcmVmY291bnQgdG8gemVyby4gU28gd2hlbiB0aGF0IGNoZWNrIGhhcHBlbnMsIGBmb2xpb19yZWZfY291bnQoZm9saW8pYCBpcyBnb2luZyB0byBiZSB6ZXJvLiBUaGUgYFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pYCBjaGVjayAqc2hvdWxkKiBiZSB3YXJuaW5nLlxuXG5UaGlzIGlzIHdoZXJlIEkgbmVlZCB0byByZWFsbHkgZGlnIGluLiBMZXQncyBsb29rIGF0IGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLiAgSSBpbW1lZGlhdGVseSBzZWUgdGhlIGBXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7YCBhdCBsaW5lIDQ1MjYuIFNvIHRoZSByZWZjb3VudCBpcyB6ZXJvLiBBZ2FpbiwgdGhpcyBpcyBhIHZlcnkgaW1wb3J0YW50IHBvaW50LiBUaGlzIGlzIHRoZSBzdGF0ZSBvZiB0aGUgYGZvbGlvYCB3aGVuIHdlJ3JlIHB1bGxpbmcgaXQgZnJvbSB0aGUgZGVmZXJyZWQgcXVldWUuIFRoZSBmYWN0IHRoYXQgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgICphbHNvKiBpbmNsdWRlcyBhbiBhc3NlcnRpb24gd2l0aCBgVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbylgIGlzIGEgcmVhbGx5IGNydWNpYWwgcG9pbnQuXG5cbldlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBoZXJlLCBzcGVjaWZpY2FsbHkgaHVnZSBwYWdlcyBhbmQgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgaW52b2x2ZWQsIGFuZCB0aGF0J3MgY3JpdGljYWwgYmVjYXVzZSBUSFAvbVRIUCBzcGxpdHRpbmcgaXMgaGFwcGVuaW5nIGhlcmUuIEFuZCB0aGF0J3MgYWxsIG92ZXIgdGhlIHBsYWNlISBXZSdyZSB0YWxraW5nIGFib3V0IHVzZXJzcGFjZSBpbnRlcmFjdGlvbnMgdGhyb3VnaCBzeXNjYWxscy4gIGBtYWR2aXNlYCwgYHNwbGl0X2h1Z2VfcGFnZWAsIG1lbW9yeSBhbGxvY2F0aW9uLCB1bm1hcHBpbmcsIG1wcm90ZWN0LCBwcm9jZXNzIGV4aXQsIHJlY2xhaW0g4oCTIGFsbCBvZiBpdCB0b3VjaGVzIHRoaXMgY29kZS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBtbS9odWdlX21lbW9yeS5jYCBpcyBjb21waWxlZCBhbmQgbGlua2VkIGluIG15IEtjb25maWcuIEkgd2FudCB0byBiZSBjZXJ0YWluIHRoaXMgaXNuJ3QgY29uZGl0aW9uYWwsIGJlY2F1c2UgaWYgaXQgaXMsIHRoaXMgd2hvbGUgZGlzY3Vzc2lvbiBjaGFuZ2VzLCBidXQgYmFzZWQgb24gYWxsIG9mIHRoZSBmdW5jdGlvbnMgdXNlZCwgSSB3b3VsZCBleHBlY3QgdGhhdCB0aGlzIGNvZGUgaXMgY29tcGlsZWQgaW4hIFRoZSBpbXBsaWNhdGlvbnMgb2YgZXZlbiBhIHN1YnRsZSBidWcgaW4gdGhpcyBhcmVhIGFyZSBzZXZlcmUsIHJhbmdpbmcgZnJvbSBtZW1vcnkgY29ycnVwdGlvbiB0byBkZW5pYWwgb2Ygc2VydmljZS4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlc2UgaW50ZXJhY3Rpb25zLCBhbmQsIGdpdmVuIHRoZSByZWZjb3VudCBtYW5pcHVsYXRpb25zLCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9ja2luZyBpcyBhaXItdGlnaHQuIEkgd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGF0IGFsbCBjb25zdW1lcnMgb2YgYGZvbGlvYCBhcmUgYXdhcmUgb2YgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb21lIHdpdGggdGhpcyB1cGRhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTo0MS44MjIxOTQ4NjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTQ5Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMT1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMjpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAzLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQxOjQxLjkwMDc1MTAzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQzMzI3MTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSB0aGlua2VyOlxuXG4qKkNoZWNraW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG1tL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBlbnRyeSBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCB3aGljaCBpcyB0aGUgY2Fub25pY2FsIHBsYWNlIGZvciBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgb3B0aW9ucyBkaXJlY3RseSBsaW5rZWQgdG8gaXQuIFRoaXMgd2lsbCBwcm92aWRlIGEgZmlybSBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9yIG9wdGltaXphdGlvbiBpbiB0aGlzIGFyZWEuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzLCBzdGFydCB3aXRoIHRoZSBzb3VyY2UuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTo0My42NDQwODE1NjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTE4MTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyNz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODI5LVxcbm1tL0tjb25maWc6ODMwOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMS1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTo0My43NzkyNjg1NjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUyOTg2MjE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyBzcGVjaWZpYyBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEJhc2VkIG9uIG15IHByZXZpb3VzIGRlYnVnZ2luZyBzdGVwcyBhbmQga25vd2xlZGdlIG9mIHRoZSByZWxldmFudCBzdWJzeXN0ZW1zLCBJIGhhdmUgYSBodW5jaCBhYm91dCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBvcHRpb24uIFRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUsIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgdGhlIG1haW4gS2NvbmZpZyBmaWxlIGZvciB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGludG8gYG1tL0tjb25maWdgIGFyb3VuZCBsaW5lIDgzMC4gR2l2ZW4gdGhlIGNvbXBsZXhpdGllcywgdGhpcyBsb2NhdGlvbiBzaG91bGQgaG9sZCB0aGUgZGV0YWlscy4gVGhpcyBzaG91bGQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24gaW50byB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzIHRoYXQgdWx0aW1hdGVseSBzaGFwZSB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZ3Jhc3Agd2hldGhlciBhbnkgcmVsZXZhbnQgZWxlbWVudHMgYXJlIGF2YWlsYWJsZSBmb3IgbXkgcHVycG9zZXMsIGFuZCB0cmFjZSBhbnkgZGVwZW5kZW5jaWVzIGlmIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQxOjQ2LjMwOTEzMzc3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MjU6XFx0XFx0ICBtZW1vcnkgY29uc3RyYWluZWQuXFxuIDgyNjpcXHRcXG4gODI3OlxcdGNvbmZpZyBNTV9JRFxcbiA4Mjg6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4Mjk6XFx0XFxuIDgzMDpcXHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDgzMTpcXHRcXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbiA4MzI6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gODMzOlxcdFxcdHNlbGVjdCBDT01QQUNUSU9OXFxuIDgzNDpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuIDgzNTpcXHRcXHRzZWxlY3QgTU1fSURcXG4gODM2OlxcdFxcdGhlbHBcXG4gODM3OlxcdFxcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxcbiA4Mzg6XFx0XFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXFxuIDgzOTpcXHRcXHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxcbiA4NDA6XFx0XFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxcbiA4NDE6XFx0XFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXFxuIDg0MjpcXHRcXHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cXG4gODQzOlxcdFxcbiA4NDQ6XFx0XFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cXG4gODQ1OlxcdFxcbiA4NDY6XFx0aWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODQ3OlxcdFxcbiA4NDg6XFx0Y2hvaWNlXFxuIDg0OTpcXHRcXHRwcm9tcHQgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcXFwiXFxuIDg1MDpcXHRcXHRkZWZhdWx0IFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbiA4NTE6XFx0XFx0aGVscFxcbiA4NTI6XFx0XFx0ICBTZWxlY3RzIHRoZSBzeXNmcyBkZWZhdWx0cyBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydC5cXG4gODUzOlxcdFxcbiA4NTQ6XFx0XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTo0Ni4zMDkyOTE2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMwMTEwNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlIE1lbW9yeSBTcGxpdHRpbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW5zIGFyb3VuZCBtZW1vcnkgc3BsaXR0aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBodWdlIG1lbW9yeSBjb2RlIChgbW0vaHVnZV9tZW1vcnkuY2ApLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgKnRyaWdnZXIqIG9yIGFyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIGh1Z2UgcGFnZXMuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGJlY2F1c2UgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBkZWZlcnJlZCB1bnF1ZXVpbmcgcHJvY2Vzcy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBzcGxpdHRpbmcgaHVnZSBwYWdlcywgc28gSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGNhbGxlcnMgb2YgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gS25vd2luZyB3aG8gY2FsbHMgdGhvc2Ugd2lsbCBzaGVkIGxpZ2h0IG9uIHdoYXQgdHJpZ2dlcnMgYSBzcGxpdCBhbmQgd2hlbiB0aGUga2VybmVsIGRlY2lkZXMgdGhhdCBhIGh1Z2UgcGFnZSByZWFsbHkgbmVlZHMgdG8gYmUgYnJva2VuIGRvd24uIFRoYXQgc2hvdWxkIHRlbGwgbWUgc29tZXRoaW5nIGFib3V0IGhvdyB0byBpbXByb3ZlIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI0NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6NDguMjM5NDA2NTA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg3Nzg0MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTM5NzU9c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTkzLVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk5NDpzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk5NS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHhhX3N0YXRlICp4YXMsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQxNDc9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzYtXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc3OlxcdHJldCA9IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNnhhcywgbWFwcGluZyxcXG5tbS9odWdlX21lbW9yeS5jLTQyNzgtXFx0XFx0XFx0XFx0XFx0XFx0dHJ1ZSwgbGlzdCwgc3BsaXRfdHlwZSwgZW5kLCBcXHUwMDI2bnJfc2htZW1fZHJvcHBlZCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQzNjU9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzNzctXFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcXG5tbS9odWdlX21lbW9yeS5jOjQzNzg6XFx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jLTQzNzktXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6NTAuNzI3MjAxMTg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NjE2MDY2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBwYXRoIHRoYXQgbGVhZHMgdG8gYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKmNhbGxlZCogZnJvbT8gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBjYWxsIHNpdGVzLiBJIGtub3cgdGhpcyBsaWtlbHkgaW52b2x2ZXMgYSBkZWVwZXIgZGl2ZSwgbWF5YmUgY29kZSBzZWFyY2hpbmcgb3IgdXNpbmcgYSBkZWJ1Z2dlciB0byBzdGVwIHRocm91Z2ggZXhlY3V0aW9uLCBkZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRoZSBjb250ZXh0IGFyb3VuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGJlIGVzc2VudGlhbCB0byBkZWNpcGhlcmluZyB0aGUgbGFyZ2VyIGZ1bmN0aW9uYWxpdHkgdGhpcyBpcyBpbnZvbHZlZCBpbi4gVGhhdCdsbCBhbGxvdyBtZSB0byBwcm9wZXJseSB1bmRlcnN0YW5kIHRoZSBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBmdW5jdGlvbidzIHJvbGUgaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTo1Ni4zODg4MTA4NjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTUwODIxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OT1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTA0LS8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NTA1OiAqIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlzIG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHk6XFxubW0vaHVnZV9tZW1vcnkuYy00NTA2LSAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTE3LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxODpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxOS17XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTcyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL2ludGVybmFsLmgtNzMzLVxcbm1tL2ludGVybmFsLmg6NzM0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmgtNzM1LXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTc0Ny1cXG5tbS9pbnRlcm5hbC5oOjc0ODpcXHRyZXR1cm4gX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9pbnRlcm5hbC5oLTc0OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQxOjU4Ljg4Mzg5NzkyMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjU0MTkxMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgQ2FsbCBTaXRlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgZXhhY3RseSBpcyBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgYmVpbmcgaW52b2tlZD9cIiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIGlzIGNydWNpYWwgZm9yIGdyYXNwaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHdpdGhpbiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIGdhaW4gYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCB3b3JrZmxvdyB0aGF0IHJlbGllcyBvbiBpdC4gUGlucG9pbnRpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgd2hldGhlciBpdCdzIHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2UgdHVuaW5nLCBidWcgZml4aW5nLCBvciBzaW1wbHkgdW5kZXJzdGFuZGluZyBhIHNwZWNpZmljIG1vZHVsZSdzIGJlaGF2aW9yLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXAsIG9yIG15IElERSdzIGNhbGwgaGllcmFyY2h5IGZlYXR1cmUsIGFuZCBnZXQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjowNC4xMzgwOTIwNDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjEyNDQ3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9mb2xpby5jPTkxPXZvaWQgX19mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtMTAzLVxcdHBhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbyk7XFxubW0vZm9saW8uYzoxMDQ6XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vZm9saW8uYy0xMDUtXFx0bWVtX2Nncm91cF91bmNoYXJnZShmb2xpbyk7XFxuLS1cXG5tbS9mb2xpby5jPTE1Mj1zdGF0aWMgdm9pZCBmb2xpb19iYXRjaF9tb3ZlX2xydShzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgbW92ZV9mbl90IG1vdmVfZm4pXFxuLS1cXG5tbS9mb2xpby5jLTE4Ni1cXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX3VuZXZpY3RhYmxlKGZvbGlvKTtcXG5tbS9mb2xpby5jOjE4NzpcXHRcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9mb2xpby5jLTE4OC1cXHRcXHRcXHRmYmF0Y2gtXFx1MDAzZWZvbGlvc1tpXSA9IE5VTEw7XFxuLS1cXG5tbS9mb2xpby5jPTk4ND12b2lkIGZvbGlvc19wdXRfcmVmcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcywgdW5zaWduZWQgaW50ICpyZWZzKVxcbi0tXFxubW0vZm9saW8uYy0xMDIyLVxcdFxcdH1cXG5tbS9mb2xpby5jOjEwMjM6XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vZm9saW8uYy0xMDI0LVxcdFxcdF9fcGFnZV9jYWNoZV9yZWxlYXNlKGZvbGlvLCBcXHUwMDI2bHJ1dmVjLCBcXHUwMDI2ZmxhZ3MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zOTk0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQwMTAtXFx0XFx0LyogVGFrZSBvZmYgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MDExOlxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDAxMi1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OT1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTA0LS8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NTA1OiAqIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlzIG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHk6XFxubW0vaHVnZV9tZW1vcnkuYzo0NTA2OiAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwNy0gKiBsaW1pdHMgaXRzIGNhbGxzIHRvIHRob3NlIGZvbGlvcyB3aGljaCBtYXkgaGF2ZSBhIF9kZWZlcnJlZF9saXN0IGZvclxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTA5LSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0NTEwOiAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMS0gKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTE3LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxODpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxOS17XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTcyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL2ludGVybmFsLmgtNzMzLVxcbm1tL2ludGVybmFsLmg6NzM0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmg6NzM1OnN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaW50ZXJuYWwuaC03MzYte1xcbi0tXFxubW0vaW50ZXJuYWwuaC03NDctXFxubW0vaW50ZXJuYWwuaDo3NDg6XFx0cmV0dXJuIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vaW50ZXJuYWwuaC03NDktfVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI2OT12b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0zMDQtXFxubW0vbWVtY29udHJvbC12MS5jOjMwNTpcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMzA2LVxcdGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gMDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MzkxPXN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0MjgtXFxubW0vbWVtY29udHJvbC5jOjU0Mjk6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pKTtcXG5tbS9tZW1jb250cm9sLmMtNTQzMC1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTU2OD12b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYwOS1cXHQvKiBXYXJuaW5nIHNob3VsZCBuZXZlciBoYXBwZW4sIHNvIGRvbid0IHdvcnJ5IGFib3V0IHJlZmNvdW50IG5vbi0wICovXFxubW0vbWVtY29udHJvbC5jOjU2MTA6XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQob2xkKSk7XFxubW0vbWVtY29udHJvbC5jLTU2MTEtXFx0b2xkLVxcdTAwM2VtZW1jZ19kYXRhID0gMDtcXG4tLVxcbm1tL21pZ3JhdGUuYz01ODM9c3RhdGljIGludCBfX2ZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21pZ3JhdGUuYy01OTctXFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxubW0vbWlncmF0ZS5jOjU5ODpcXHRcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9taWdyYXRlLmMtNTk5LVxcdFxcdFxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgZXhwZWN0ZWRfY291bnQpO1xcbi0tXFxubW0vbWlncmF0ZS5jLTYzMC1cXHQvKiBUYWtlIG9mZiBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xcbm1tL21pZ3JhdGUuYzo2MzE6XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vbWlncmF0ZS5jLTYzMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwODE9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTUzNC1cXG5tbS92bXNjYW4uYzoxNTM1OlxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTE1MzYtXFx0XFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcXHUwMDI2ZnJlZV9mb2xpb3MsIGZvbGlvKSA9PSAwKSB7XFxuLS1cXG5tbS92bXNjYW4uYz0xODk0PXN0YXRpYyB1bnNpZ25lZCBpbnQgbW92ZV9mb2xpb3NfdG9fbHJ1KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0xOTI5LVxcbm1tL3Ztc2Nhbi5jOjE5MzA6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vdm1zY2FuLmMtMTkzMS1cXHRcXHRcXHRpZiAoZm9saW9fYmF0Y2hfYWRkKFxcdTAwMjZmcmVlX2ZvbGlvcywgZm9saW8pID09IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDI6MDYuNzU5NTU2MTQyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NjQ2MDI3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZvY3VzIFN5bWJvbHMgaW4gdGhlIEh1Z2UgTWVtb3J5IFN1YnN5c3RlbSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBGb2N1c1N5bWJvbHMgZ3VpZGVsaW5lcyDigJMgYXZvaWQgdGhlIG5vaXNlLCBhaW0gZm9yIHRoZSBzaWduYWwuIFNvLCBJIHNob3VsZG4ndCBsaXN0IGV2ZXJ5IHNpbmdsZSBtZW1vcnkgYWxsb2NhdG9yIGNhbGwsIGJ1dCBpbnN0ZWFkLCB6ZXJvIGluIG9uIHRoZSAqc3BlY2lmaWMqIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbXBsZW1lbnRpbmcgb3IgZGlyZWN0bHkgdHJpZ2dlcmluZyB0aGUgaHVnZSBwYWdlIHNwbGl0dGluZyBsb2dpYywgb3IgdGhvc2UgdGhhdCBhcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgZmVhdHVyZS4gVGhhdCdzIHRoZSBrZXkuXG5cblJpZ2h0LCBzbyBmb3IgdGhlIGBtbS9odWdlX21lbW9yeS5jYCBmaWxlLCB0aGUgaW5pdGlhbCBsaXN0IGdpdmVzIHVzOlxuXG4qICAgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGBcbiogICBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgKHdoaWNoIGlzIHN0YXRpYyBidXQsIGltcG9ydGFudGx5LCBpbmxpbmVkL3N0YXRpYyB3aXRoaW4gdGhpcyBmaWxlIGFuZCBjYWxsZWQgYnkgdHdvIGtleSBmdW5jdGlvbnMpXG4qICAgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGBcbiogICBBbmQgdGhlbiwgdGhlIG5vbi1zdGF0aWMgb25lcyByZWxhdGVkIHRvIHNwbGl0dGluZzogYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYC5cblxuVGhhdCBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBjaGVjayB0byBiZSBzdXJlLCBzbywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBzcGxpdF9mb2xpb190b19saXN0YCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLCB0byBiZSBzdXJlIG9mIHRoZSBsaXN0LiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIzNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjowOS43MjQxNjI2NTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDc2MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmVycmVkX3NwbGl0X3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz03NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG5tbS9odWdlX21lbW9yeS5jLTc2LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XFxubW0vaHVnZV9tZW1vcnkuYzo3NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNzgtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEwNzktXFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZWNvdW50X29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9jb3VudDtcXG5tbS9odWdlX21lbW9yeS5jOjEwODA6XFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XFxubW0vaHVnZV9tZW1vcnkuYy0xMDgxLVxcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mzk5ND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MDEzLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0MDE0OlxcdFxcdCAqIGRlZmVycmVkX3NwbGl0X3NjYW4oKSB0YWtlcyB0aGUgZm9saW8gb2ZmIHRoZSBxdWV1ZSBiZWZvcmUgaXRcXG5tbS9odWdlX21lbW9yeS5jLTQwMTUtXFx0XFx0ICogc3BsaXRzIGl0LCBzbyB0aGUgdW5xdWV1ZSBhYm92ZSBmaW5kcyBhbiBlbXB0eSBsaXN0IGFuZFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDk5PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1MTEtICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG5tbS9odWdlX21lbW9yeS5jOjQ1MTI6ICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSdzIHVubG9ja2VkXFxubW0vaHVnZV9tZW1vcnkuYy00NTEzLSAqIG9uLXN0YWNrIGxpc3QuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2Mjg9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2NDItXFxubW0vaHVnZV9tZW1vcnkuYzo0NjQzOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxubW0vaHVnZV9tZW1vcnkuYy00NjQ0LVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS9taWdyYXRlLmM9MTgxMT1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xODU3LVxcdFxcdFxcdCAqIE9ubHkgY2hlY2sgaXQgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBsaXN0Llxcbm1tL21pZ3JhdGUuYzoxODU4OlxcdFxcdFxcdCAqIFNpbmNlIHRoZSBmb2xpbyBjYW4gYmUgb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpXFxubW0vbWlncmF0ZS5jLTE4NTktXFx0XFx0XFx0ICogbG9jYWwgbGlzdCBhbmQgcmVtb3ZpbmcgaXQgY2FuIGNhdXNlIHRoZSBsb2NhbCBsaXN0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQyOjA5LjgwMTI0MzczMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTY5MjI0MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgc3BsaXRfZm9saW9fdG9fbGlzdGAgYW5kIGl0cyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGBzcGxpdF9mb2xpb190b19saXN0YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBmdW5jdGlvbidzIHVzYWdl4oCUYSBxdWljayBzY2FuIGZvciBpdHMgY2FsbGVycyBpcyBpbiBvcmRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgbm90IGp1c3QgKndoYXQqIHRoaXMgZnVuY3Rpb24gZG9lcyBidXQgYWxzbyAqaG93KiBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbSBsb29raW5nIGZvciB0aGUgY29udGV4dCBpbiB3aGljaCBgc3BsaXRfZm9saW9fdG9fbGlzdGAgaXMgdXNlZC4gV2hhdCBhc3N1bXB0aW9ucyBhcmUgYmFrZWQgaW50byBpdHMgZGVzaWduPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgaGF2ZW4ndCBiZWVuIGFkZXF1YXRlbHkgYWRkcmVzc2VkIGluIHRoZSBjYWxsaW5nIGNvZGU/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBmbG93IGFuZCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24uIFRoaXMgYWxzbyBzZXJ2ZXMgdGhlIHB1cnBvc2Ugb2YgZmlndXJpbmcgb3V0IHdoZXJlIHRvIHN0YXJ0IGludmVzdGlnYXRpbmcsIGFuZCB3aGF0IHBvc3NpYmxlIGlzc3VlcyBtYXkgYXJpc2UuIFRoaXMgc2hvdWxkIHF1aWNrbHkgdW5jb3ZlciBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncyBvciBhcmVhcyByZXF1aXJpbmcgYSBkZWVwZXIgZGl2ZS4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQyOjE0LjM3MDQ3MDg0N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MTk3ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2h1Z2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQzNjU9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0MzEtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NDMyOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzMy1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NDktICogSXQgaGFzIHRoZSBzYW1lIHByZXJlcXVpc2l0ZXMgYW5kIHJldHVybnMgYXNcXG5tbS9odWdlX21lbW9yeS5jOjQ0NTA6ICogc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKS5cXG5tbS9odWdlX21lbW9yeS5jLTQ0NTEtICpcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OT1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMC17XFxubW0vaHVnZV9tZW1vcnkuYzo0NTAxOlxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIDApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMi19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2NDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDcwNS0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0vaHVnZV9tZW1vcnkuYzo0NzA2OnN0YXRpYyB2b2lkIHNwbGl0X2h1Z2VfcGFnZXNfYWxsKHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy00NzA3LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc1Nj1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX25vdF9zdWl0YWJsZV9mb3JfdGhwX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzY5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDc3MDpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXFxubW0vaHVnZV9tZW1vcnkuYy00NzcxLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgdmFkZHJfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODM5LVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0ODQwOlxcdFxcdCAqIEZvciBmb2xpb3Mgd2l0aCBwcml2YXRlLCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpXFxubW0vaHVnZV9tZW1vcnkuYy00ODQxLVxcdFxcdCAqIHdpbGwgdHJ5IHRvIGRyb3AgaXQgYmVmb3JlIHNwbGl0IGFuZCB0aGVuIGNoZWNrIGlmIHRoZSBmb2xpb1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODg2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDg4NzpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg4OC1cXHRcXHRcXHRcXHRwZ29mZl90IG9mZl9lbmQsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ5NTYtXFxubW0vaHVnZV9tZW1vcnkuYzo0OTU3OnN0YXRpYyBzc2l6ZV90IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxubW0vaHVnZV9tZW1vcnkuYy00OTU4LVxcdFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9wcylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAwNC1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzo1MDA1OlxcdFxcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShmaWxlX3BhdGgsIG9mZl9zdGFydCwgb2ZmX2VuZCxcXG5tbS9odWdlX21lbW9yeS5jLTUwMDYtXFx0XFx0XFx0XFx0bmV3X29yZGVyLCBpbl9mb2xpb19vZmZzZXQpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy01MDE1LVxcdGlmIChyZXQgPT0gMSBcXHUwMDI2XFx1MDAyNiBwaWQgPT0gMSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NTAxNjpcXHRcXHRzcGxpdF9odWdlX3BhZ2VzX2FsbCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTAxNy1cXHRcXHRyZXQgPSBzdHJsZW4oaW5wdXRfYnVmKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAyMy1cXG5tbS9odWdlX21lbW9yeS5jOjUwMjQ6XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19waWQocGlkLCB2YWRkcl9zdGFydCwgdmFkZHJfZW5kLCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy01MDI1LVxcdFxcdFxcdGluX2ZvbGlvX29mZnNldCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUwMzMtXFxubW0vaHVnZV9tZW1vcnkuYzo1MDM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwbGl0X2h1Z2VfcGFnZXNfZm9wcyA9IHtcXG5tbS9odWdlX21lbW9yeS5jLTUwMzUtXFx0Lm93bmVyXFx0ID0gVEhJU19NT0RVTEUsXFxubW0vaHVnZV9tZW1vcnkuYzo1MDM2OlxcdC53cml0ZVxcdCA9IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUsXFxubW0vaHVnZV9tZW1vcnkuYy01MDM3LX07XFxubW0vaHVnZV9tZW1vcnkuYy01MDM4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NTAzOTpzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnModm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTUwNDAte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NTA0MTpcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzcGxpdF9odWdlX3BhZ2VzXFxcIiwgMDIwMCwgTlVMTCwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jOjUwNDI6XFx0XFx0XFx0ICAgIFxcdTAwMjZzcGxpdF9odWdlX3BhZ2VzX2ZvcHMpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0My1cXHRyZXR1cm4gMDtcXG5tbS9odWdlX21lbW9yeS5jLTUwNDQtfVxcbm1tL2h1Z2VfbWVtb3J5LmM6NTA0NTpsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XFxubW0vaHVnZV9tZW1vcnkuYy01MDQ2LSNlbmRpZlxcbi0tXFxubW0vaHVnZXRsYi5jPTM5NTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXFxuLS1cXG5tbS9odWdldGxiLmMtMzk5NS1cXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIGkpO1xcbm1tL2h1Z2V0bGIuYzozOTk2OlxcdFxcdFxcdC8qIENhcmVmdWw6IHNlZSBfX3NwbGl0X2h1Z2VfcGFnZV90YWlsKCkgKi9cXG5tbS9odWdldGxiLmMtMzk5Ny1cXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyA9IChzdHJ1Y3QgZm9saW8gKilwYWdlO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTY4Nz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9pc29sYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTc3OS1cXHRcXHQgKiBmb2xpbyBjYW4ndCBiZSBmcmVlZCBmcm9tIHVuZGVyIHVzLiBOT1RFOiBmb2xpbyBsb2NrXFxubW0va2h1Z2VwYWdlZC5jOjc4MDpcXHRcXHQgKiBpcyBuZWVkZWQgdG8gc2VyaWFsaXplIGFnYWluc3Qgc3BsaXRfaHVnZV9wYWdlKClcXG5tbS9raHVnZXBhZ2VkLmMtNzgxLVxcdFxcdCAqIHdoZW4gaW52b2tlZCBmcm9tIHRoZSBWTS5cXG4tLVxcbm1tL2tzbS5jPTE0OTc9c3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9rc20uYy0xNTE5LVxcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbm1tL2tzbS5jOjE1MjA6XFx0XFx0aWYgKHNwbGl0X2h1Z2VfcGFnZShwYWdlKSlcXG5tbS9rc20uYy0xNTIxLVxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4tLVxcbm1tL2tzbS5jPTIyNzc9c3RhdGljIHZvaWQgY21wX2FuZF9tZXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxcbi0tXFxubW0va3NtLmMtMjM2NC1cXHRcXHQgKiBmb2xpbywgdGhlbiB3ZSBhY3R1YWxseSBlbmRlZCB1cCBpbmNyZWFzaW5nIHRoZSByZWZlcmVuY2VcXG5tbS9rc20uYzoyMzY1OlxcdFxcdCAqIGNvdW50IG9mIHRoZSBzYW1lIGZvbGlvIHR3aWNlLCBhbmQgc3BsaXRfaHVnZV9wYWdlIGZhaWxlZC5cXG5tbS9rc20uYy0yMzY2LVxcdFxcdCAqXFxubW0va3NtLmMtMjM2Ny1cXHRcXHQgKiBIZXJlIHdlIHNldCBhIGZsYWcgaWYgdGhhdCBoYXBwZW5lZCwgYW5kIHdlIHVzZSBpdCBsYXRlciB0b1xcbm1tL2tzbS5jOjIzNjg6XFx0XFx0ICogdHJ5IHNwbGl0X2h1Z2VfcGFnZSBhZ2Fpbi4gU2luY2Ugd2UgY2FsbCBmb2xpb19wdXQoKSByaWdodFxcbm1tL2tzbS5jLTIzNjktXFx0XFx0ICogYWZ0ZXJ3YXJkcywgdGhlIHJlZmVyZW5jZSBjb3VudCB3aWxsIGJlIGNvcnJlY3QgYW5kXFxubW0va3NtLmM6MjM3MDpcXHRcXHQgKiBzcGxpdF9odWdlX3BhZ2Ugc2hvdWxkIHN1Y2NlZWQuXFxubW0va3NtLmMtMjM3MS1cXHRcXHQgKi9cXG4tLVxcbm1tL2tzbS5jLTI0MTAtXFx0XFx0XFx0XFx0cmV0dXJuO1xcbm1tL2tzbS5jOjI0MTE6XFx0XFx0XFx0c3BsaXRfaHVnZV9wYWdlKHBhZ2UpO1xcbm1tL2tzbS5jLTI0MTItXFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNzEzPXN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzE4LVxcdGxvY2tfcGFnZShwYWdlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3MTk6XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzIwLVxcdHVubG9ja19wYWdlKHBhZ2UpO1xcbi0tXFxubW0vc2htZW0uYz0zODIyPXN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5tbS9zaG1lbS5jLTM5MTItXFx0ICogaW5mby1cXHUwMDNlZmFsbG9jZW5kIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBodWdlIHBhZ2VzIG1pZ2h0IGJlXFxubW0vc2htZW0uYzozOTEzOlxcdCAqIGludm9sdmVkOiB0byBwcmV2ZW50IHNwbGl0X2h1Z2VfcGFnZSgpIGZyZWVpbmcgZmFsbG9jYXRlZFxcbm1tL3NobWVtLmMtMzkxNC1cXHQgKiBwYWdlcyB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgY29tbWl0dGVkIGJleW9uZCBpX3NpemUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQyOjE0LjQ4NzY3Mzg0NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjUyNjY4NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgd2UgaGF2ZSBgV29ydGhGdXp6aW5nYCwgYW5kIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcHJldHR5IGNsZWFyLiBUaGUgY29yZSBzdWJzeXN0ZW0gaXMgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBgbW0vaHVnZV9tZW1vcnkuY2AuIFRoZSBmYWN0IHRoYXQgaXQncyB0b3VjaGluZyBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgaW50ZXJlc3RpbmcuIE5ldyBoZWxwZXIgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIHdpdGggdGhlc2UgYXNzZXJ0aW9ucyBgVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbylgIGFuZCBgVk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKWAgc3VnZ2VzdHMgdGhlIGRldmVsb3BlciBpcyBjb25jZXJuZWQgYWJvdXQgc3VidGxlIHN0YXRlcy4gVGhlIHJlYWNoYWJpbGl0eSB2aWEgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgYW5kIFRIUC9tVEhQIG9wZXJhdGlvbnMsIGRlZmVycmVkIHNwbGl0IHF1ZXVlcywgc2hyaW5rZXIsIG1hZHZpc2UsIGFuZCBgc3BsaXRfaHVnZV9wYWdlYCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSwgZXNwZWNpYWxseSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICoqRGVmaW5pdGVseSBgV29ydGhGdXp6aW5nOiB0cnVlYCoqLiBObyBxdWVzdGlvbi5cblxuTm93LCBsZXQncyBsb29rIGF0IGBFbmFibGVDb25maWdzYC4gV2UgYWxyZWFkeSBrbm93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29tcGlsZXMgYG1tL2h1Z2VfbWVtb3J5LmNgLCB3aGljaCBpcyBncmVhdCwgYnV0IHdlIHdhbnQgdG8ga25vdyB3aGF0IHRyaWdnZXJzIHRoaXMgYFZNX1dBUk5fT05fRk9MSU9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgQ09ORklHX0RFQlVHX1ZNYCBvciBgQ09ORklHX0RFQlVHX1ZNX1BHRkxBR1NgIGFmZmVjdCB0aGUgYFZNX1dBUk5fT05fRk9MSU9gIGNoZWNrcy4gV2FpdCwgSSByZW1lbWJlcjsgYFZNX1dBUk5fT05fRk9MSU9gIGlzIGd1YXJkZWQgYnkgYENPTkZJR19ERUJVR19WTWAsIEkgc2hvdWxkIGdvIGNoZWNrIHRoZSBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk4MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjoxNy43NDAzNDU1MjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTcxMzMxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBWTV9XQVJOX09OX0ZPTElPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oPTE4PXZvaWQgdm1hX2l0ZXJfZHVtcF90cmVlKGNvbnN0IHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC02OS19KVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oOjcwOiNkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyhjb25kLCBmb2xpbylcXHRcXHQoe1xcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC03MS1cXHRpbnQgX19yZXRfd2FybiA9ICEhKGNvbmQpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzNS0jZGVmaW5lIFZNX1dBUk5fT05fT05DRV9QQUdFKGNvbmQsIHBhZ2UpICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oOjEzNjojZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzNy0jZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbykgIEJVSUxEX0JVR19PTl9JTlZBTElEKGNvbmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQyOjIwLjM1NzQ4NzgxOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg1OTI3ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IERlYnVnZ2luZyoqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgbWVtb3J5IGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgaW5jbHVkZS9saW51eC9tbWRlYnVnLmhgLiBJdCdzIGEgc3RhbmRhcmQgcGxhY2UgZm9yIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1ZyBkZWZpbml0aW9ucywgYW5kIHRoZSBjb250ZXh0IG9mdGVuIGdpdmVzIGluc2lnaHQgaW50byB0aGUgbGV2ZWwgb2YgdHJhY2luZyBhbmQgZXJyb3IgcmVwb3J0aW5nIGNvbmZpZ3VyZWQgZm9yIHRoZSBNTSBzdWJzeXN0ZW0uXG5cbkknbSBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgMjAgdGhyb3VnaCA3NS4gVGhhdCByYW5nZSBwcm9iYWJseSBjb250YWlucyBrZXkgbWFjcm8gZGVmaW5pdGlvbnMsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcyAoYCNpZmRlZmAsIGAjZGVmaW5lYCwgYCN1bmRlZmApLCBhbmQgcG90ZW50aWFsbHkgc29tZSBpbmxpbmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZGVidWdnaW5nLiBJIGV4cGVjdCB0byBmaW5kIGZsYWdzIGZvciB0dXJuaW5nIG9uIG9yIG9mZiB2YXJpb3VzIG1lbW9yeSBkZWJ1Z2dpbmcgZmVhdHVyZXMgbGlrZSBwYWdlIGFsbG9jYXRpb24gdHJhY2luZywgc2xhYiBkZWJ1Z2dpbmcsIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSBpbnN0cnVtZW50YXRpb24gcmVsYXRlZCB0byBzcGVjaWZpYyBtZW1vcnkgem9uZXMgb3IgYWxsb2NhdGlvbiBvcmRlcnMuIEknbGwgYmUgbG9va2luZyBmb3IgbWFjcm9zIHRoYXQsIHdoZW4gZW5hYmxlZCwgbWlnaHQgbGVhZCBtZSB0byB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVhayBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5LiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlZmluZXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IGRlYnVnIG9wdGlvbnMgYXJlIGN1cnJlbnRseSBhY3RpdmUgYW5kIGhvdyB0aGV5J3JlIGFmZmVjdGluZyB0aGUga2VybmVsJ3MgYmVoYXZpb3IgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGRvbWFpbi4gVWx0aW1hdGVseSwgaXQgc2hvdWxkIGFsbG93IG1lIHRvIG5hcnJvdyBteSBmb2N1cyBvciByZWZpbmUgbXkgc2VhcmNoIGNyaXRlcmlhIGZvciB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjoyMi43NDM0MjAzMjlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgTElOVVhfTU1fREVCVUdfSFxcbiAgIDM6XFx0I2RlZmluZSBMSU5VWF9NTV9ERUJVR19IIDFcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHRzdHJ1Y3QgcGFnZTtcXG4gICA5OlxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdDtcXG4gIDEwOlxcdHN0cnVjdCBtbV9zdHJ1Y3Q7XFxuICAxMTpcXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yO1xcbiAgMTI6XFx0c3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3Q7XFxuICAxMzpcXHRcXG4gIDE0OlxcdHZvaWQgZHVtcF9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBjaGFyICpyZWFzb24pO1xcbiAgMTU6XFx0dm9pZCBkdW1wX3ZtYShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuICAxNjpcXHR2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbiAgMTc6XFx0dm9pZCBkdW1wX3ZtZyhjb25zdCBzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nLCBjb25zdCBjaGFyICpyZWFzb24pO1xcbiAgMTg6XFx0dm9pZCB2bWFfaXRlcl9kdW1wX3RyZWUoY29uc3Qgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pKTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0I2lmZGVmIENPTkZJR19ERUJVR19WTVxcbiAgMjE6XFx0I2RlZmluZSBWTV9CVUdfT04oY29uZCkgQlVHX09OKGNvbmQpXFxuICAyMjpcXHQjZGVmaW5lIFZNX0JVR19PTl9QQUdFKGNvbmQsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjM6XFx0XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI0OlxcdFxcdFxcdGlmICh1bmxpa2VseShjb25kKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI1OlxcdFxcdFxcdFxcdGR1bXBfcGFnZShwYWdlLCBcXFwiVk1fQlVHX09OX1BBR0UoXFxcIiBfX3N0cmluZ2lmeShjb25kKVxcXCIpXFxcIik7XFxcXFxcbiAgMjY6XFx0XFx0XFx0XFx0QlVHKCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjc6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI4OlxcdFxcdH0gd2hpbGUgKDApXFxuICAyOTpcXHQjZGVmaW5lIFZNX0JVR19PTl9GT0xJTyhjb25kLCBmb2xpbylcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMDpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzI6XFx0XFx0XFx0XFx0ZHVtcF9wYWdlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgXFxcIlZNX0JVR19PTl9GT0xJTyhcXFwiIF9fc3RyaW5naWZ5KGNvbmQpXFxcIilcXFwiKTtcXFxcXFxuICAzMzpcXHRcXHRcXHRcXHRCVUcoKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzNDpcXHRcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzU6XFx0XFx0fSB3aGlsZSAoMClcXG4gIDM2OlxcdCNkZWZpbmUgVk1fQlVHX09OX1ZNQShjb25kLCB2bWEpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzc6XFx0XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDM4OlxcdFxcdFxcdGlmICh1bmxpa2VseShjb25kKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDM5OlxcdFxcdFxcdFxcdGR1bXBfdm1hKHZtYSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDA6XFx0XFx0XFx0XFx0QlVHKCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjoyMi43NDM1NDc5NDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyMTAyNTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBhY3Qgb2YgREVCVUdfVk0gb24gSHVnZSBQYWdlIEJlaGF2aW9yKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBlbmFibGluZyBgREVCVUdfVk1gIGFsc28gYWN0aXZhdGVzIGBWTV9XQVJOX09OX0ZPTElPYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IHRoaXMgaW1wYWN0cyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBodWdlIHBhZ2VzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGNvZGUgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgYmVoYXZpb3IsIHNvIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJJ2xsIHNjb3VyIHRoYXQgZmlsZSAoYG1tL2h1Z2VfbWVtb3J5LmNgKSBmb3IgYW55IGAjaWZkZWZgIGJsb2NrcyBvciBzaW1pbGFyIGNvbnN0cnVjdHMgdGhhdCBzdXJyb3VuZCB0aGUgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gVGhpcyB3aWxsIGhlbHAgbWUgbWFwIHRoZSBpbnRlcmFjdGlvbnMgaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgzNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDI6MjQuNzY0NTc3NDU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc1MDYxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTYxPXVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgX19yZWFkX21vc3RseSA9XFxubW0vaHVnZV9tZW1vcnkuYzo2MjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNjMtXFx0KDFcXHUwMDNjXFx1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxcbm1tL2h1Z2VfbWVtb3J5LmMtNjQtI2VuZGlmXFxubW0vaHVnZV9tZW1vcnkuYzo2NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9odWdlX21lbW9yeS5jLTY2LVxcdCgxXFx1MDAzY1xcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9ODM9dW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSBIVUdFX1pFUk9fVU5TRVRfUEZOO1xcbm1tL2h1Z2VfbWVtb3J5LmM6ODQ6I2lmbmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG5tbS9odWdlX21lbW9yeS5jLTg1LXN0YXRpYyBhdG9taWNfdCBodWdlX3plcm9fcmVmY291bnQ7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI3Mz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdlX3plcm9fZm9saW8odm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mjg4OiNpZmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG5tbS9odWdlX21lbW9yeS5jLTI4OS1zdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MTY9dm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjItXFxubW0vaHVnZV9tZW1vcnkuYzo0MjM6I2lmZGVmIENPTkZJR19TWVNGU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDI0LXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NjYxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpodWdlcGFnZV9hdHRyW10gPSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTY2NS1cXHRcXHUwMDI2aHBhZ2VfcG1kX3NpemVfYXR0ci5hdHRyLFxcbm1tL2h1Z2VfbWVtb3J5LmM6NjY2OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTY2Ny1cXHRcXHUwMDI2c2htZW1fZW5hYmxlZF9hdHRyLmF0dHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTc2Mj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZmlsZV9jdHJsX2F0dHJzW10gPSB7XFxubW0vaHVnZV9tZW1vcnkuYzo3NjM6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtNzY0LVxcdFxcdTAwMjZ0aHBzaXplX3NobWVtX2VuYWJsZWRfYXR0ci5hdHRyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz04MjI9REVGSU5FX01USFBfU1RBVF9BVFRSKHN3cG91dF9mYWxsYmFjaywgTVRIUF9TVEFUX1NXUE9VVF9GQUxMQkFDSyk7XFxubW0vaHVnZV9tZW1vcnkuYzo4MjM6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtODI0LURFRklORV9NVEhQX1NUQVRfQVRUUihzaG1lbV9hbGxvYywgTVRIUF9TVEFUX1NITUVNX0FMTE9DKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9ODM4PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphbm9uX3N0YXRzX2F0dHJzW10gPSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTg0MS1cXHRcXHUwMDI2YW5vbl9mYXVsdF9mYWxsYmFja19jaGFyZ2VfYXR0ci5hdHRyLFxcbm1tL2h1Z2VfbWVtb3J5LmM6ODQyOiNpZm5kZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy04NDMtXFx0XFx1MDAyNnpzd3BvdXRfYXR0ci5hdHRyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz04NjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfc3RhdHNfYXR0cnNbXSA9IHtcXG5tbS9odWdlX21lbW9yeS5jOjg2NTojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy04NjYtXFx0XFx1MDAyNnNobWVtX2FsbG9jX2F0dHIuYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9ODc4PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphbnlfc3RhdHNfYXR0cnNbXSA9IHtcXG5tbS9odWdlX21lbW9yeS5jOjg3OTojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy04ODAtXFx0XFx1MDAyNnpzd3BvdXRfYXR0ci5hdHRyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNzUxPUVYUE9SVF9TWU1CT0xfR1BMKHZtZl9pbnNlcnRfZm9saW9fcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jLTE3NTItXFxubW0vaHVnZV9tZW1vcnkuYzoxNzUzOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTc1NC1zdGF0aWMgcHVkX3QgbWF5YmVfcHVkX21rd3JpdGUocHVkX3QgcHVkLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTk1Mj1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjA2My1cXG5tbS9odWdlX21lbW9yeS5jOjIwNjQ6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vaHVnZV9tZW1vcnkuYy0yMDY1LXZvaWQgdG91Y2hfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI1NTM9Ym9vbCB6YXBfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI1OTItXFxubW0vaHVnZV9tZW1vcnkuYzoyNTkzOiNpZm5kZWYgcG1kX21vdmVfbXVzdF93aXRoZHJhd1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjU5NC1zdGF0aWMgaW5saW5lIGludCBwbWRfbW92ZV9tdXN0X3dpdGhkcmF3KHNwaW5sb2NrX3QgKm5ld19wbWRfcHRsLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNzQxPWludCBjaGFuZ2VfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI4NDgtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyODQ5OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg1MC1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yODg4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mjg4OTojaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXFxubW0vaHVnZV9tZW1vcnkuYy0yODkwLS8qXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwNDA9c3BpbmxvY2tfdCAqX19wdWRfdHJhbnNfaHVnZV9sb2NrKHB1ZF90ICpwdWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMDUwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzA1MTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5tbS9odWdlX21lbW9yeS5jLTMwNTItaW50IHphcF9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzY5Mj1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3NDQtXFx0XFx0XFx0XFx0ICgxTCBcXHUwMDNjXFx1MDAzYyBQR191bmV2aWN0YWJsZSkgfFxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc0NTojaWZkZWYgQ09ORklHX0FSQ0hfVVNFU19QR19BUkNIXzJcXG5tbS9odWdlX21lbW9yeS5jLTM3NDYtXFx0XFx0XFx0XFx0ICgxTCBcXHUwMDNjXFx1MDAzYyBQR19hcmNoXzIpIHxcXG5tbS9odWdlX21lbW9yeS5jLTM3NDctI2VuZGlmXFxubW0vaHVnZV9tZW1vcnkuYzozNzQ4OiNpZmRlZiBDT05GSUdfQVJDSF9VU0VTX1BHX0FSQ0hfM1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0OS1cXHRcXHRcXHRcXHQgKDFMIFxcdTAwM2NcXHUwMDNjIFBHX2FyY2hfMykgfFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzk0LVxcdFxcdFxcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzozNzk1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9odWdlX21lbW9yeS5jLTM3OTYtXFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gZm9saW8tXFx1MDAzZW1lbWNnX2RhdGE7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2NDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDcwNC1cXG5tbS9odWdlX21lbW9yeS5jOjQ3MDU6I2lmZGVmIENPTkZJR19ERUJVR19GU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDcwNi1zdGF0aWMgdm9pZCBzcGxpdF9odWdlX3BhZ2VzX2FsbCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz01MDQ1PWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0Ny1cXG5tbS9odWdlX21lbW9yeS5jOjUwNDg6I2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0OS1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjoyNC44ODIwOTAwNzNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxNjM4MTUyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZvbGlvIFNwbGl0dGluZyBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgY29kZSBjaGFuZ2VzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgb3IgbW9kaWZpZWQgaW4gcmVsYXRpb24gdG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBTbywgbGV0J3Mgc2VlLCB3ZSBoYXZlIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCwgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgdGhhdCBhcmUgbmV3IG9yIGFsdGVyZWQuIFRoZW4gdGhlcmUgYXJlIHRoZSBub24tc3RhdGljIGNhbGxlcnM6IGBzcGxpdF9mb2xpb190b19saXN0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGFuZCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLlxuXG5SaWdodCwgbGV0J3MgY29uZmlybSB0aGUgc3RhdGljIHZzLiBub24tc3RhdGljIHN0YXR1cyBvZiB0aG9zZSBmdW5jdGlvbnMsIG1ha2luZyBzdXJlIHRoYXQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgaXMgaW5kZWVkIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGNvbmZpcm1lZCBvbiBsaW5lIDQ1MTggYW5kIGRlY2xhcmVkIGluIGBtbS9pbnRlcm5hbC5oYC4gQ29uZmlybWVkIHRoYXQgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAsIGFuZCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gIGFyZSBub24tc3RhdGljIGFzIHdlbGwsIHdoaWxlIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgYXJlIHN0YXRpYy5cblxuQWxyaWdodCwgdGhhdCdzIGRvbmUuIExldCdzIG1ha2Ugc3VyZSBvdXIgZm9jdXMgaXMgb24gdGhlIHJpZ2h0IGZ1bmN0aW9uczogYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgLCBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCwgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAsIGBmb2xpb19zcGxpdF91bm1hcHBlZGAsIGBzcGxpdF9mb2xpb190b19saXN0YCwgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYC5cblxuTm93LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIG9idmlvdXMgcmVhc29ucywgYW5kIGBERUJVR19WTWAgdG8gZW5hYmxlIHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucy4gR29vZCwgZ29vZC5cblxuT2theSwgbGV0J3Mgc3VtbWFyaXplIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gRXNzZW50aWFsbHksIGl0J3MgcmVmYWN0b3JpbmcgdGhlIGBQR19wYXJ0aWFsbHlfbWFwcGVkYCBmbGFnIGNsZWFyaW5nIGFuZCBjb3JyZXNwb25kaW5nIG1USFAgc3RhdCBkZWNyZW1lbnQgbG9naWMgaW4gVEhQIGZvbGlvcyBpbnRvIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKWAuIENydWNpYWxseSwgaXQgaW50cm9kdWNlcyBuZXcgcnVudGltZSBhc3NlcnRpb25zLCB0aG9zZSBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoaXMgaGl0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIFRIUCAoYW5kIG1USFApIHNwbGl0dGluZyBhbmQgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlcy4gVGhlIGtleSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoZSBuZWVkIGZvciB0aG9yb3VnaCBmdXp6aW5nLiBUaGVzZSBhc3NlcnRpb25zIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBuZWVkIHRvIGhvbGQgdGhyb3VnaCBhbGwgZm9saW8gbGlmZWN5Y2xlcywgbWVtb3J5IHJlY2xhaW0vc2hyaW5rZXJzLCBhbmQgc3BsaXQgb3BlcmF0aW9ucywgYW5kIGFsbCBjb25jdXJyZW5jeSBhc3BlY3RzLiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCB0aGF0IHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdWJ0bGUgaXNzdWVzLlxuXG5Ob3csIGxldCdzIHJlY29yZCB0aGVzZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE5MiwiT3V0cHV0VG9rZW5zIjoyMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDI6MzUuMDQ1OTA4MjI2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNzI5ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiREVCVUdfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkXCIsXG4gICAgXCJfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcInNwbGl0X2ZvbGlvX3RvX2xpc3RcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X2ZvbGlvXCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmbGFnIGFuZCBtVEhQIHN0YXQgYWNjb3VudGluZyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYW5kIGludHJvZHVjZXMgbmV3IFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBpbiBtbS9odWdlX21lbW9yeS5jIChfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQgYW5kIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIG1hbmFnaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUC9tVEhQKSBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWVzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBhbmQgYXNzZXJ0aW9uIHZpb2xhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFQlVHX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZFwiLFxuICAgIFwiX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkXCIsXG4gICAgXCJfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRcIixcbiAgICBcImZvbGlvX3NwbGl0X3VubWFwcGVkXCIsXG4gICAgXCJzcGxpdF9mb2xpb190b19saXN0XCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9mb2xpb1wiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfc2NhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZmxhZyBhbmQgbVRIUCBzdGF0IGFjY291bnRpbmcgaW50byBhIGhlbHBlciBmdW5jdGlvbiBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKCksIGFuZCBpbnRyb2R1Y2VzIG5ldyBWTV9XQVJOX09OX0ZPTElPIGFzc2VydGlvbnMgaW4gbW0vaHVnZV9tZW1vcnkuYyAoX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkIGFuZCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBtYW5hZ2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFAvbVRIUCkgYW5kIGRlZmVycmVkIHNwbGl0IHF1ZXVlcywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgYW5kIGFzc2VydGlvbiB2aW9sYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjozNS4xODg2NDY1NzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzM0OTY3NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDI6MzUuMTg5MjUxNDMzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEzMzQzNTcxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLCBkZWJ1ZyBhc3NlcnRpb25zLCBhbmQgc3RhdGlzdGljcyBmb3IgaHVnZS9tdWx0aS1zaXplIGFub255bW91cyBmb2xpb3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBhZGRlZCBhc3NlcnRpb25zIG9yIHJlZmNvdW50aW5nIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk5NzJjZTQ5OWVkODgwNjk2MjU4YzQ4N2RjZmE5Y2RmN2ExYjc3NzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE2OjQwOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGRkNjZjNmFkNWFmMTMuLmZhZTk1OTYzMzI3OWIgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMzk3Miw2ICszOTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm9saW9fY2FjaGVfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0LyogRm9saW8gbXVzdCBiZSBmcm96ZW4uICovXG4rXHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbitcbitcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbitcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbitcdCAqL1xuK1x0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbitcbitcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuK1x0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4rXHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbit9XG4rXG4gc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbkBAIC0zOTgwLDcgKzM5OTksNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgblxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4tXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXHUwMDI2XHUwMDI2IGVuZCk7XG5AQCAtMzk5OCwxMSArNDAxNiw3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbiBcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFxuIFx0XHRpZiAobWFwcGluZykge1xuIFx0XHRcdGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbkBAIC00NTE2LDExICs0NTMwLDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuIFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKF9fbGlzdF9scnVfZGVsKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFx0XHR1bnF1ZXVlZCA9IHRydWU7XG4gXHR9XG4gXHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQyOjM1LjE4OTI1MjY4M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTMzNDMxMjk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcsIGFpbWluZyB0byBjb25zb2xpZGF0ZSB0aGUgbG9naWMgZm9yIGNsZWFyaW5nIHRoZSBgUEdfcGFydGlhbGx5X21hcHBlZGAgZmxhZyBhbmQgZGVjcmVtZW50aW5nIHRoZSBgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRGAgc3RhdCBjb3VudGVyLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgaGVscGVyIGZ1bmN0aW9uIGlzIHRoZSBrZXkgY2hhbmdlIGhlcmUuIFRoZSBkaWZmIG1ha2VzIGl0IG11Y2ggY2xlYXJlciB0byBzZWUgdGhhdCB0aGUgY29kZSB1c2VkIHRvIGJlIGluIHR3byBwbGFjZXMgYW5kIGlzIG5vdyBpbiBvbmUuXG5cbk15IGZpcnN0IHRob3VnaHQsIGFzIGFsd2F5cywgaXMgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGVzcGVjaWFsbHkgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIG15IHN0YW5kYXJkIGFwcHJvYWNoOlxuLSAgIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLlxuLSAgIERvZXMgaXQgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIGl0IG9wZXJhdGVzIG9uIGBzdHJ1Y3QgZm9saW9gIGZsYWdzLCByZWZjb3VudHMsIGFuZCBsaXN0IHBvaW50ZXJzLlxuLSAgIERvZXMgaXQgY2hhbmdlIGJ1ZmZlciBzaXplcyBvciBtZW1vcnkgY29weSBsZW5ndGhzPyBOby5cbi0gICBEb2VzIGl0IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby5cbi0gICBJcyB0aGVyZSBhbnkgS01TQU4gcmVsZXZhbmNlPyBOby5cblxuVGhlIHBhdGNoIHNlZW1zIHJlbGF0aXZlbHkgc2FmZSBpbiB0aGlzIHJlZ2FyZC4gVGhpcyByZWZhY3RvciBhcHBlYXJzIHRvIGZvY3VzIG9uIG1haW50YWluaW5nIGRhdGEgaW50ZWdyaXR5IHdpdGhpbiB0aGUgYGZvbGlvYCBzdHJ1Y3R1cmUgaXRzZWxmLiBObyB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBUaGF0J3MgZ29vZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaXNzdWVzIGhpZGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBvciBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gTGV0J3MgY29uZmlybSBhZ2FpbiBpbiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gT2theSwgdGhlcmUncyBhIGBWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtgIHdpdGhpbiB0aGUgbmV3IGZ1bmN0aW9uLCB3aGljaCBpcyBhIGtleSBzYW5pdHkgY2hlY2suXG5cbk15IGFuYWx5c2lzIHBvaW50cyB0byBhIHJlZmFjdG9yaW5nIG9mIGEgY3JpdGljYWwgcGF0aCwgd2hpY2ggbWVhbnMgSSBoYXZlIHRvIGJlIGV4dHJlbWVseSBtZXRpY3Vsb3VzLiBJIG11c3QgZW5zdXJlIHRoZSByZWZhY3RvcmluZyBoYXMgbm90IGludHJvZHVjZWQgYW55IGRhdGEgcmFjZXMgb3IgY2hhbmdlZCB0aGUgb3ZlcmFsbCBsb2NraW5nIHNjaGVtZS4gSXQgYWxzbyBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBWTV9XQVJOX09OX0ZPTElPYCBjaGVjayBpcyBjb3JyZWN0LiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0byBtZSB0aGF0IGtlcm5lbCBjb2RlIGlzIHdlbGwtYXNzZXJ0ZWQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBUaGlzIGlzIGEgY2xlYW4gcmVmYWN0b3IuIEkgYW0gY29uZmlkZW50LiBSZWFkeSB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA1LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0Mjo0Ni41MjM1Njg5NjZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLCBkZWJ1ZyBhc3NlcnRpb25zLCBhbmQgc3RhdGlzdGljcyBmb3IgaHVnZS9tdWx0aS1zaXplIGFub255bW91cyBmb2xpb3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBhZGRlZCBhc3NlcnRpb25zIG9yIHJlZmNvdW50aW5nIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLCBkZWJ1ZyBhc3NlcnRpb25zLCBhbmQgc3RhdGlzdGljcyBmb3IgaHVnZS9tdWx0aS1zaXplIGFub255bW91cyBmb2xpb3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBhZGRlZCBhc3NlcnRpb25zIG9yIHJlZmNvdW50aW5nIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtdrz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 16:04:22 +0000 UTC FinishedAt: 2026-09-08 16:42:47 +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": "a4803d8ba53a9243696a4e90246446d7f3982b6f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "DEBUG_VM" ], "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": "a4803d8ba53a9243696a4e90246446d7f3982b6f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "DEBUG_VM" ], "series_id": "fc62b367-5a9a-4389-a979-02364e76cdb2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_reset_partially_mapped", "__folio_freeze_and_split_unmapped", "__folio_unqueue_deferred_split", "folio_split_unmapped", "split_folio_to_list", "deferred_split_folio", "deferred_split_scan" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0X3VubWFwcGVkJiMzNDssCiAgICAmIzM0O3NwbGl0X2ZvbGlvX3RvX2xpc3QmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmbGFncywgZGVidWcgYXNzZXJ0aW9ucywgYW5kIHN0YXRpc3RpY3MgZm9yIGh1Z2UvbXVsdGktc2l6ZSBhbm9ueW1vdXMgZm9saW9zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgYWRkZWQgYXNzZXJ0aW9ucyBvciByZWZjb3VudGluZyBsb2dpYyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmbGFnIGFuZCBtVEhQIHN0YXQgYWNjb3VudGluZyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYW5kIGludHJvZHVjZXMgbmV3IFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBpbiBtbS9odWdlX21lbW9yeS5jIChfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQgYW5kIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIG1hbmFnaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUC9tVEhQKSBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWVzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBhbmQgYXNzZXJ0aW9uIHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5OTcyY2U0OTllZDg4MDY5NjI1OGM0ODdkY2ZhOWNkZjdhMWI3NzczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNjo0MDo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZGQ2NmM2YWQ1YWYxMy4uZmFlOTU5NjMzMjc5YiAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTcyLDYgJiM0MzszOTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm9saW9fY2FjaGVfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0LyogRm9saW8gbXVzdCBiZSBmcm96ZW4uICovXG4mIzQzO1x0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPcmRlci0xIGZvbGlvcyBoYXZlIG5vIF9kZWZlcnJlZF9saXN0LiBUaGUgZmxhZyBpcyBvbmx5IGV2ZXIgc2V0XG4mIzQzO1x0ICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLlxuJiM0MztcdCAqL1xuJiM0MztcdFZNX1dBUk5fT05fRk9MSU8oIWxpc3RfZW1wdHkoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpLCBmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuJiM0MztcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuJiM0MztcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXG5AQCAtMzk4MCw3ICYjNDM7Mzk5OSw2IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4ge1xuIFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbiBcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcbi1cdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbkBAIC0zOTk4LDExICYjNDM7NDAxNiw3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbiBcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4mIzQzO1x0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbiBcbiBcdFx0aWYgKG1hcHBpbmcpIHtcbiBcdFx0XHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtNDUxNiwxMSAmIzQzOzQ1MzAsNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFx1MDAyNm1lbWNnLCBcdTAwMjZmbGFncyk7XG4gXHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4tXHRcdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHRcdH1cbiYjNDM7XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFx0XHR1bnF1ZXVlZCA9IHRydWU7XG4gXHR9XG4gXHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtERUJVR19WTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQmIzM0OywKICAgICYjMzQ7X19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkJiMzNDssCiAgICAmIzM0O19fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICAgJiMzNDtmb2xpb19zcGxpdF91bm1hcHBlZCYjMzQ7LAogICAgJiMzNDtzcGxpdF9mb2xpb190b19saXN0JiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X2ZvbGlvJiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmbGFnIGFuZCBtVEhQIHN0YXQgYWNjb3VudGluZyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYW5kIGludHJvZHVjZXMgbmV3IFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBpbiBtbS9odWdlX21lbW9yeS5jIChfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQgYW5kIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIG1hbmFnaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUC9tVEhQKSBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWVzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBhbmQgYXNzZXJ0aW9uIHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5OTcyY2U0OTllZDg4MDY5NjI1OGM0ODdkY2ZhOWNkZjdhMWI3NzczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxNjo0MDo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGRkNjZjNmFkNWFmMTMuLmZhZTk1OTYzMzI3OWIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMzk3Miw2ICYjNDM7Mzk3MiwyNSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZvbGlvX2NhY2hlX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwkvKiBGb2xpbyBtdXN0IGJlIGZyb3plbi4gKi8KJiM0MzsJVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7CiYjNDM7CiYjNDM7CWlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT3JkZXItMSBmb2xpb3MgaGF2ZSBubyBfZGVmZXJyZWRfbGlzdC4gVGhlIGZsYWcgaXMgb25seSBldmVyIHNldAomIzQzOwkgKiBvbiBmb2xpb3MgdGhhdCBkbywgc28gdGhlIGxpc3QgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIgdGhlIGZsYWcuCiYjNDM7CSAqLwomIzQzOwlWTV9XQVJOX09OX0ZPTElPKCFsaXN0X2VtcHR5KCZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0KSwgZm9saW8pOwomIzQzOwomIzQzOwlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKJiM0MzsJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCiYjNDM7CQkgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwKIAkJCQkJICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLAogCQkJCQkgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSwKQEAgLTM5ODAsNyAmIzQzOzM5OTksNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogewogCXN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7CiAJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0OwotCWludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgJmFtcDsmYW1wOyBlbmQpOwpAQCAtMzk5OCwxMSAmIzQzOzQwMTYsNyBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogCQkgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuCiAJCSAqIENsZWFyIGl0IGhlcmU6IHRoZSBmbGFnIGRvZXMgbm90IHN1cnZpdmUgdGhlIHNwbGl0LgogCQkgKi8KLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChvbGRfb3JkZXIsCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAogCQlpZiAobWFwcGluZykgewogCQkJaW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwpAQCAtNDUxNiwxMSAmIzQzOzQ1MzAsNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwogCWxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZSgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSwgbmlkLCAmYW1wO21lbWNnLCAmYW1wO2ZsYWdzKTsKIAlpZiAoX19saXN0X2xydV9kZWwoJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QsIG5pZCkpIHsKLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAkJdW5xdWV1ZWQgPSB0cnVlOwogCX0KIAlsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsICZhbXA7ZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTkzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUsIGFuZCB0aGUgZ29hbCBpcyBhIHByZXR0eSBzdGFuZGFyZCBvbmU6IGRldGVybWluZSBpZiBpdCYjMzk7cyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgY2hhbmdlZCwgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgb3IgJiMzNDtmb2N1cyBzeW1ib2xzJiMzNDsgdG8gdGFyZ2V0LCBhbmQgdGhlbiBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHRob3NlIHNlY3Rpb25zIG9mIGNvZGUuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIGRldmVsb3BlciBRQSBhbmQgaW5pdGlhbCBjb2RlIGFuYWx5c2lzIOKAkyB0aGUga2luZCBvZiB0cmlhZ2UgSSBkZWFsIHdpdGggcmVndWxhcmx5LiBTZXZlcml0eS13aXNlLCBJJiMzOTtkIHNheSB0aGlzIGlzIHByZXR0eSBsb3csIG5vbi1jcml0aWNhbCwgb3IgZXZlbiBiZW5pZ24gYXQgdGhpcyBzdGFnZS4KCkZpcnN0IHRoaW5ncyBmaXJzdDogdGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIEh1Z2UgcGFnZXMgYXJlIGEga25vd24gYXJlYSB3aGVyZSBpc3N1ZXMgY2FuIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gc3lzdGVtIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHksIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpcyBhbHdheXMgYSBjb21wbGV4IGJlYXN0LgoKVGhlIHBhdGNoIGl0c2VsZiBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHRoZXNlIGZ1bmN0aW9uczoKCiogICBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKWAKKiAgIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoLi4uKWAKKiAgIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylgCgpOb3csIHRoZSBmdW4gYmVnaW5zLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYGdyZXBwZXJgIG9yIHBlcmhhcHMganVzdCBgcmVhZC1maWxlYCB0byBleHBsb3JlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gc2VxdWVuY2UsIGFuZCB3aGF0IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgZXhpc3QuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHBhdGhzIHRoYXQgYXJlIG9mIGludGVyZXN0IHRvIHN5emthbGxlci4KClVsdGltYXRlbHksIEkgd2lsbCBhbHNvIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBlbmFibGUgdGhlIGNvZGUgdG91Y2hlZCBieSB0aGlzIHBhdGNoLCBpbiBvcmRlciB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGZ1enouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszOTcwOlx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcbjM5NzE6XHRcdFx0cmV0dXJuIDA7XG4zOTcyOlx0XHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuMzk3MzpcdH1cbjM5NzQ6XHRcbjM5NzU6XHRzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4zOTc2Olx0e1xuMzk3NzpcdFx0LyogRm9saW8gbXVzdCBiZSBmcm96ZW4uICovXG4zOTc4Olx0XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbjM5Nzk6XHRcbjM5ODA6XHRcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbjM5ODE6XHRcdFx0cmV0dXJuO1xuMzk4MjpcdFxuMzk4MzpcdFx0LypcbjM5ODQ6XHRcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbjM5ODU6XHRcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbjM5ODY6XHRcdCAqL1xuMzk4NzpcdFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbjM5ODg6XHRcbjM5ODk6XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuMzk5MDpcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4zOTkxOlx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbjM5OTI6XHR9XG4zOTkzOlx0XG4zOTk0Olx0c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbjM5OTU6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuMzk5NjpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbjM5OTc6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBlbnVtIHNwbGl0X3R5cGUgc3BsaXRfdHlwZSxcbjM5OTg6XHRcdFx0XHRcdFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxuMzk5OTpcdHtcbjQwMDA6XHRcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG40MDAxOlx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG40MDAyOlx0XHRpbnQgcmV0ID0gMDtcbjQwMDM6XHRcbjQwMDQ6XHRcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbjQwMDU6XHRcbjQwMDY6XHRcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICYjNDM7IDEpKSB7XG40MDA3Olx0XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xuNDAwODpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG40MDA5Olx0XG40MDEwOlx0XHRcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xuNDAxMTpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbjQwMTI6XHRcbjQwMTM6XHRcdFx0LypcbjQwMTQ6XHRcdFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxuNDAxNTpcdFx0XHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXG40MDE2Olx0XHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbjQwMTc6XHRcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG40MDE4Olx0XHRcdCAqL1xuNDAxOTpcdFx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQwMjA6XHRcbjQwMjE6XHRcdFx0aWYgKG1hcHBpbmcpIHtcbjQwMjI6XHRcdFx0XHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG40MDIzOlx0XG40MDI0Olx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjQwMjU6XHRcdFx0XHQgICAgbmV3X29yZGVyIFx1MDAzYyBIUEFHRV9QTURfT1JERVIpIHtcbjQwMjY6XHRcdFx0XHRcdGlmIChmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XG40MDI3Olx0XHRcdFx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbyxcbjQwMjg6XHRcdFx0XHRcdFx0XHRcdE5SX1NITUVNX1RIUFMsIC1ucik7XG40MDI5Olx0XHRcdFx0XHR9IGVsc2Uge1xuNDAzMDpcdFx0XHRcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXG40MDMxOlx0XHRcdFx0XHRcdFx0XHROUl9GSUxFX1RIUFMsIC1ucik7XG40MDMyOlx0XHRcdFx0XHR9XG40MDMzOlx0XHRcdFx0fVxuNDAzNDpcdFx0XHR9XG40MDM1Olx0XG40MDM2Olx0XHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbjQwMzc6XHRcdFx0XHRpZiAobWFwcGluZykge1xuNDAzODpcdFx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKG1hcHBpbmcsIGZvbGlvKTtcbjQwMzk6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEh1Z2UgUGFnZSBJc3N1ZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHN1c3BlY3RlZCBodWdlIHBhZ2UgaXNzdWUgYW5kIEkmIzM5O3ZlIGdvdCBhIGh1bmNoIHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmcuIEdpdmVuIHRoZSBuYXR1cmUgb2Ygd2hhdCB3ZSYjMzk7cmUgc2VlaW5nLCBJIHRoaW5rIGl0JiMzOTtzIHdvcnRoIGEgY2xvc2UgZXhhbWluYXRpb24gb2YgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgd2l0aGluIHRoZSBgbW0vaHVnZV9tZW1vcnkuY2AgZmlsZS4gTXkgcmVhc29uaW5nIGlzIHRoYXQgdW5xdWV1aW5nIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2ZWQgaW4gZGVmZXJyZWQgc3BsaXRzLCBhcmUgb2Z0ZW4gY3JpdGljYWwgcG9pbnRzIHdoZXJlIGZyYWdtZW50YXRpb24gb3IgaW5jb3JyZWN0IGFjY291bnRpbmcgY291bGQgaW50cm9kdWNlIHRoZSBraW5kIG9mIGJlaGF2aW9yIHdlJiMzOTtyZSBvYnNlcnZpbmcuIEl0JiMzOTtzIGEgcHJpbWUgc3VzcGVjdCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHN1YnRsZSBidWdzIHJlbGF0ZWQgdG8gaG93IHRoZSBodWdlIHBhZ2Ugc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBkdXJpbmcgc3BsaXQgb3BlcmF0aW9ucy4gVGhpcyBhcmVhIGlzIGtub3duIGZvciBiZWluZyB0cmlja3ksIHNvIGl0JiMzOTtzIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUuIEkmIzM5O20gZm9jdXNpbmcgdGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHRoZSBzcGxpdHRpbmcgb2YgdGhlIGh1Z2UgcGFnZXMgd2hpY2ggaXMgYSBjb21tb24gcGxhY2UgdG8gaGF2ZSBpc3N1ZXMgd2l0aCBpbiBjb21wbGV4IG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDUxMDpcdCAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xuNDUxMTpcdCAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XG40NTEyOlx0ICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSYjMzk7cyB1bmxvY2tlZFxuNDUxMzpcdCAqIG9uLXN0YWNrIGxpc3QuXG40NTE0Olx0ICpcbjQ1MTU6XHQgKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJiMzOTtzIG1lbWNnOiBpdCBpcyB0aGVyZWZvcmVcbjQ1MTY6XHQgKiBpbXBvcnRhbnQgdG8gdW5xdWV1ZSBkZWZlcnJlZCBzcGxpdCBiZWZvcmUgY2hhbmdpbmcgZm9saW8gbWVtY2cuXG40NTE3Olx0ICovXG40NTE4Olx0Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbjQ1MTk6XHR7XG40NTIwOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG40NTIxOlx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG40NTIyOlx0XHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbjQ1MjM6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG40NTI0Olx0XHRib29sIHVucXVldWVkID0gZmFsc2U7XG40NTI1Olx0XG40NTI2Olx0XHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XG40NTI3Olx0XHRXQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKTtcbjQ1Mjg6XHRcbjQ1Mjk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjQ1MzA6XHRcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuNDUzMTpcdFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xuNDUzMjpcdFx0aWYgKF9fbGlzdF9scnVfZGVsKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xuNDUzMzpcdFx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQ1MzQ6XHRcdFx0dW5xdWV1ZWQgPSB0cnVlO1xuNDUzNTpcdFx0fVxuNDUzNjpcdFx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcdTAwMjZmbGFncyk7XG40NTM3Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjQ1Mzg6XHRcbjQ1Mzk6XHRcdHJldHVybiB1bnF1ZXVlZDtcdC8qIHVzZWZ1bCBmb3IgZGVidWcgd2FybmluZ3MgKi9cbjQ1NDA6XHR9XG40NTQxOlx0XG40NTQyOlx0LyogcGFydGlhbGx5X21hcHBlZD1mYWxzZSB3b24mIzM5O3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXG40NTQzOlx0dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXG40NTQ0Olx0e1xuNDU0NTpcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xuNDU0NjpcdFx0aW50IG5pZDtcbjQ1NDc6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjQ1NDg6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG40NTQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI1NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRm9saW8gUmVzZXQgYW5kIERlZmVycmVkIFNwbGl0dGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgaW50cm9kdWNlcyBzb21lIHJ1bnRpbWUgYXNzZXJ0aW9ucy4gSSBzZWUgYFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pYCBhbmQgYFZNX1dBUk5fT05fRk9MSU8oIWxpc3RfZW1wdHkoJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QpLCBmb2xpbylgLiBOb3RoaW5nIHN1cnByaXNpbmcgdGhlcmUuIFRoZSBjb21tZW50IHNwZWNpZmljYWxseSBoaWdobGlnaHRzIHRoYXQgb3JkZXItMSBmb2xpb3MgZG9uJiMzOTt0IHVzZSBgX2RlZmVycmVkX2xpc3RgLCBhbmQgdGhlIGZsYWcgaXMgc2V0ICpvbmx5KiB3aGVuIHRoZSBsaXN0IGlzIGluIHVzZSwgd2hpY2ggaXMgd2h5IHRoZSBjaGVjayBpcyBtYWRlLiBUaGF0IG1ha2VzIHNlbnNlIGZyb20gYSBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGFuZCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAuICBTcGVjaWZpY2FsbHksIGluIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLCBgX19saXN0X2xydV9kZWxgIHJlbW92ZXMgdGhlIGZvbGlvIGZyb20gdGhlIGRlZmVycmVkIGxpc3QuIFRoZSBxdWVzdGlvbiBpczogV2hhdCBkb2VzIHRoYXQgbGlzdCBkZWxldGlvbiBhY3R1YWxseSBkbz8gRG9lcyBpdCByZWluaXRpYWxpemUgdGhlIGxpc3QgaGVhZCBvciBqdXN0IHJlbW92ZSBpdD8gIEkgbmVlZCB0byBjaGVjayBob3cgYF9fbGlzdF9scnVfZGVsYCB3b3JrcywgYmVjYXVzZSBJIG5lZWQgdG8ga25vdyBpZiB0aGUgdW5kZXJseWluZyBsaXN0IG9wZXJhdGlvbiBpcyBhIGBsaXN0X2RlbGAgb3IgYSBgbGlzdF9kZWxfaW5pdGAuIFRoaXMgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzdGF0ZSBvZiB0aGUgZm9saW8gYWZ0ZXIgYmVpbmcgdW5xdWV1ZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBfX2xpc3RfbHJ1X2RlbGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19saXN0X2xydV9kZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9saXN0X2xydS5oPTE0OD1ib29sIF9fbGlzdF9scnVfYWRkKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTE0OS1cdFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDoxNTA6Ym9vbCBfX2xpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaC0xNTEtXHRcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDUxOD1ib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUzMS1cdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXHUwMDI2bWVtY2csIFx1MDAyNmZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUzMjpcdGlmIChfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzMy1cdFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tLVxubW0vbGlzdF9scnUuYz0yMDg9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkKTtcbm1tL2xpc3RfbHJ1LmMtMjA5LVxubW0vbGlzdF9scnUuYzoyMTA6Ym9vbCBfX2xpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbm1tL2xpc3RfbHJ1LmMtMjExLVx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZClcbi0tXG5tbS9saXN0X2xydS5jPTI2NT1ib29sIGxpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTI3MS1cdGwgPSBsaXN0X2xydV9sb2NrKGxydSwgbmlkLCBcdTAwMjZtZW1jZyk7XG5tbS9saXN0X2xydS5jOjI3MjpcdHJldCA9IF9fbGlzdF9scnVfZGVsKGxydSwgbCwgaXRlbSwgbmlkKTtcbm1tL2xpc3RfbHJ1LmMtMjczLVx0bGlzdF9scnVfdW5sb2NrKGwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0OTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbW0vbGlzdF9scnUuY2AgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vbGlzdF9scnUuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDIxMC4gVGhhdCBwYXJ0aWN1bGFyIHNwb3QgaXMgbGlrZWx5IHdoZXJlIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgcmVzaWRlcywgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRoZSBtYW5hZ2VtZW50IG9mIHRoZSBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIGxpc3QuIEkmIzM5O20gZ3Vlc3NpbmcgaXQgbWlnaHQgaW52b2x2ZSBpbnNlcnRpb24sIGRlbGV0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYWNjZXNzIG9mIGVsZW1lbnRzIHdpdGhpbiB0aGUgbGlzdCwgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSByZXZlYWxzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIGluIHRoZSBhbGdvcml0aG1zIHVzZWQsIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgYW5kIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbWVtb3J5IHN1YnN5c3RlbXMuIExpbmUgMjEwIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBidXQgSSYjMzk7bGwgYmUgcHJlcGFyZWQgdG8gZm9sbG93IHRoZSB0aHJlYWRzIG9mIGxvZ2ljIHdoZXJldmVyIHRoZXkgbGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9saXN0X2xydS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRib29sIF9fbGlzdF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxuIDIxMTpcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZClcbiAyMTI6XHR7XG4gMjEzOlx0XHRpZiAoIWxpc3RfZW1wdHkoaXRlbSkpIHtcbiAyMTQ6XHRcdFx0bGlzdF9kZWxfaW5pdChpdGVtKTtcbiAyMTU6XHRcdFx0bC1cdTAwM2Vucl9pdGVtcy0tO1xuIDIxNjpcdFx0XHRhdG9taWNfbG9uZ19kZWMoXHUwMDI2bHJ1LVx1MDAzZW5vZGVbbmlkXS5ucl9pdGVtcyk7XG4gMjE3Olx0XHRcdHJldHVybiB0cnVlO1xuIDIxODpcdFx0fVxuIDIxOTpcdFx0cmV0dXJuIGZhbHNlO1xuIDIyMDpcdH1cbiAyMjE6XHRcbiAyMjI6XHQvKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBtZW1jZyBsaWZldGltZS4gKi9cbiAyMjM6XHRib29sIGxpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcbiAyMjQ6XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gMjI1Olx0e1xuIDIyNjpcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcbiAyMjc6XHRcdGJvb2wgcmV0O1xuIDIyODpcdFxuIDIyOTpcdFx0bCA9IGxpc3RfbHJ1X2xvY2sobHJ1LCBuaWQsIFx1MDAyNm1lbWNnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA1NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWVwIERpdmUgaW50byBGb2xpbyBSZWZjb3VudHMgYW5kIERlZmVycmVkIFNwbGl0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHJlYWN0aW9uIGhlcmUgaXMgdG8gemVybyBpbiBvbiB0aGVzZSByZWZjb3VudCBvcGVyYXRpb25zIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aXRoaW4gdGhlIGZvbGlvIGxpZmVjeWNsZS4gSSYjMzk7bSBzZWVpbmcgYSBjb2RlIHBhdGggaW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgd2hlcmUgdGhlcmUgc2VlbXMgdG8gYmUgYSBzdWJ0bGUgZGFuY2Ugd2l0aCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uY2VybmVkIGJlY2F1c2UgSSBzZWUgYSBwb3RlbnRpYWwgcmFjZS4gSXMgdGhlIGZvbGlvIHRydWx5IGZyb3plbiAqYmVmb3JlKiB3ZSBjYWxsIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYD8gVGhlIGNvZGUgc3VnZ2VzdHMgdGhlIHJlZmNvdW50IGlzIHNldCB0byB6ZXJvIGR1ZSB0byBgZm9saW9fcmVmX2ZyZWV6ZWAuCgpUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEkga25vdyBgZm9saW9fcmVmX2ZyZWV6ZWAgc2V0cyB0aGUgcmVmY291bnQgdG8gemVyby4gU28gd2hlbiB0aGF0IGNoZWNrIGhhcHBlbnMsIGBmb2xpb19yZWZfY291bnQoZm9saW8pYCBpcyBnb2luZyB0byBiZSB6ZXJvLiBUaGUgYFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pYCBjaGVjayAqc2hvdWxkKiBiZSB3YXJuaW5nLgoKVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbi4gTGV0JiMzOTtzIGxvb2sgYXQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuICBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgYFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtgIGF0IGxpbmUgNDUyNi4gU28gdGhlIHJlZmNvdW50IGlzIHplcm8uIEFnYWluLCB0aGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgcG9pbnQuIFRoaXMgaXMgdGhlIHN0YXRlIG9mIHRoZSBgZm9saW9gIHdoZW4gd2UmIzM5O3JlIHB1bGxpbmcgaXQgZnJvbSB0aGUgZGVmZXJyZWQgcXVldWUuIFRoZSBmYWN0IHRoYXQgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgICphbHNvKiBpbmNsdWRlcyBhbiBhc3NlcnRpb24gd2l0aCBgVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbylgIGlzIGEgcmVhbGx5IGNydWNpYWwgcG9pbnQuCgpXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGhlcmUsIHNwZWNpZmljYWxseSBodWdlIHBhZ2VzIGFuZCB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUuIGBtbS9odWdlX21lbW9yeS5jYCBpcyBpbnZvbHZlZCwgYW5kIHRoYXQmIzM5O3MgY3JpdGljYWwgYmVjYXVzZSBUSFAvbVRIUCBzcGxpdHRpbmcgaXMgaGFwcGVuaW5nIGhlcmUuIEFuZCB0aGF0JiMzOTtzIGFsbCBvdmVyIHRoZSBwbGFjZSEgV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdXNlcnNwYWNlIGludGVyYWN0aW9ucyB0aHJvdWdoIHN5c2NhbGxzLiAgYG1hZHZpc2VgLCBgc3BsaXRfaHVnZV9wYWdlYCwgbWVtb3J5IGFsbG9jYXRpb24sIHVubWFwcGluZywgbXByb3RlY3QsIHByb2Nlc3MgZXhpdCwgcmVjbGFpbSDigJMgYWxsIG9mIGl0IHRvdWNoZXMgdGhpcyBjb2RlLgoKSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBtbS9odWdlX21lbW9yeS5jYCBpcyBjb21waWxlZCBhbmQgbGlua2VkIGluIG15IEtjb25maWcuIEkgd2FudCB0byBiZSBjZXJ0YWluIHRoaXMgaXNuJiMzOTt0IGNvbmRpdGlvbmFsLCBiZWNhdXNlIGlmIGl0IGlzLCB0aGlzIHdob2xlIGRpc2N1c3Npb24gY2hhbmdlcywgYnV0IGJhc2VkIG9uIGFsbCBvZiB0aGUgZnVuY3Rpb25zIHVzZWQsIEkgd291bGQgZXhwZWN0IHRoYXQgdGhpcyBjb2RlIGlzIGNvbXBpbGVkIGluISBUaGUgaW1wbGljYXRpb25zIG9mIGV2ZW4gYSBzdWJ0bGUgYnVnIGluIHRoaXMgYXJlYSBhcmUgc2V2ZXJlLCByYW5naW5nIGZyb20gbWVtb3J5IGNvcnJ1cHRpb24gdG8gZGVuaWFsIG9mIHNlcnZpY2UuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZXNlIGludGVyYWN0aW9ucywgYW5kLCBnaXZlbiB0aGUgcmVmY291bnQgbWFuaXB1bGF0aW9ucywgSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NraW5nIGlzIGFpci10aWdodC4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIGNvbnN1bWVycyBvZiBgZm9saW9gIGFyZSBhd2FyZSBvZiB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvbWUgd2l0aCB0aGlzIHVwZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnlcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAxPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDMtb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6CgoqKkNoZWNraW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIGVudHJ5IGZvciB0cmFuc3BhcmVudCBodWdlcGFnZXMsIHdoaWNoIGlzIHRoZSBjYW5vbmljYWwgcGxhY2UgZm9yIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGFueSBvdGhlciByZWxldmFudCBvcHRpb25zIGRpcmVjdGx5IGxpbmtlZCB0byBpdC4gVGhpcyB3aWxsIHByb3ZpZGUgYSBmaXJtIGZvdW5kYXRpb24gZm9yIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3Igb3B0aW1pemF0aW9uIGluIHRoaXMgYXJlYS4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3MsIHN0YXJ0IHdpdGggdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgyNz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgyOS1cbm1tL0tjb25maWc6ODMwOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODMxLVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCYXNlZCBvbiBteSBwcmV2aW91cyBkZWJ1Z2dpbmcgc3RlcHMgYW5kIGtub3dsZWRnZSBvZiB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtcywgSSBoYXZlIGEgaHVuY2ggYWJvdXQgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3Igb3B0aW9uLiBUbyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgbWFpbiBLY29uZmlnIGZpbGUgZm9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1tL0tjb25maWdgIGFyb3VuZCBsaW5lIDgzMC4gR2l2ZW4gdGhlIGNvbXBsZXhpdGllcywgdGhpcyBsb2NhdGlvbiBzaG91bGQgaG9sZCB0aGUgZGV0YWlscy4gVGhpcyBzaG91bGQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24gaW50byB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzIHRoYXQgdWx0aW1hdGVseSBzaGFwZSB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZ3Jhc3Agd2hldGhlciBhbnkgcmVsZXZhbnQgZWxlbWVudHMgYXJlIGF2YWlsYWJsZSBmb3IgbXkgcHVycG9zZXMsIGFuZCB0cmFjZSBhbnkgZGVwZW5kZW5jaWVzIGlmIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MjU6XHRcdCAgbWVtb3J5IGNvbnN0cmFpbmVkLlxuIDgyNjpcdFxuIDgyNzpcdGNvbmZpZyBNTV9JRFxuIDgyODpcdFx0ZGVmX2Jvb2wgblxuIDgyOTpcdFxuIDgzMDpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MzE6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDgzMjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODMzOlx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDgzNDpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDgzNTpcdFx0c2VsZWN0IE1NX0lEXG4gODM2Olx0XHRoZWxwXG4gODM3Olx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4Mzg6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDgzOTpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NDA6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NDE6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg0MjpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODQzOlx0XG4gODQ0Olx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg0NTpcdFxuIDg0NjpcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODQ3Olx0XG4gODQ4Olx0Y2hvaWNlXG4gODQ5Olx0XHRwcm9tcHQgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1wmIzM0O1xuIDg1MDpcdFx0ZGVmYXVsdCBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbiA4NTE6XHRcdGhlbHBcbiA4NTI6XHRcdCAgU2VsZWN0cyB0aGUgc3lzZnMgZGVmYXVsdHMgZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQuXG4gODUzOlx0XG4gODU0Olx0XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjQ1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2UgTWVtb3J5IFNwbGl0dGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGNoYWlucyBhcm91bmQgbWVtb3J5IHNwbGl0dGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgaHVnZSBtZW1vcnkgY29kZSAoYG1tL2h1Z2VfbWVtb3J5LmNgKS4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICp0cmlnZ2VyKiBvciBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRlZmVycmVkIHNwbGl0dGluZyBvZiBodWdlIHBhZ2VzLiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBkZWZlcnJlZCB1bnF1ZXVpbmcgcHJvY2Vzcy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBzcGxpdHRpbmcgaHVnZSBwYWdlcywgc28gSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGNhbGxlcnMgb2YgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gS25vd2luZyB3aG8gY2FsbHMgdGhvc2Ugd2lsbCBzaGVkIGxpZ2h0IG9uIHdoYXQgdHJpZ2dlcnMgYSBzcGxpdCBhbmQgd2hlbiB0aGUga2VybmVsIGRlY2lkZXMgdGhhdCBhIGh1Z2UgcGFnZSByZWFsbHkgbmVlZHMgdG8gYmUgYnJva2VuIGRvd24uIFRoYXQgc2hvdWxkIHRlbGwgbWUgc29tZXRoaW5nIGFib3V0IGhvdyB0byBpbXByb3ZlIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zOTc1PXN0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5OTMtXG5tbS9odWdlX21lbW9yeS5jOjM5OTQ6c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzk5NS1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDE0Nz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzYtXG5tbS9odWdlX21lbW9yeS5jOjQyNzc6XHRyZXQgPSBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFx1MDAyNnhhcywgbWFwcGluZyxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI3OC1cdFx0XHRcdFx0XHR0cnVlLCBsaXN0LCBzcGxpdF90eXBlLCBlbmQsIFx1MDAyNm5yX3NobWVtX2Ryb3BwZWQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDM2NT1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzNzctXHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xubW0vaHVnZV9tZW1vcnkuYzo0Mzc4Olx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIE5VTEwsXG5tbS9odWdlX21lbW9yeS5jLTQzNzktXHRcdFx0XHRcdFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4OTYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqVHJhY2luZyB0aGUgQ2FsbGVycyBvZiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhlY3V0aW9uIHBhdGggdGhhdCBsZWFkcyB0byBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqY2FsbGVkKiBmcm9tPyBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBjYWxsIHNpdGVzLiBJIGtub3cgdGhpcyBsaWtlbHkgaW52b2x2ZXMgYSBkZWVwZXIgZGl2ZSwgbWF5YmUgY29kZSBzZWFyY2hpbmcgb3IgdXNpbmcgYSBkZWJ1Z2dlciB0byBzdGVwIHRocm91Z2ggZXhlY3V0aW9uLCBkZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRoZSBjb250ZXh0IGFyb3VuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGJlIGVzc2VudGlhbCB0byBkZWNpcGhlcmluZyB0aGUgbGFyZ2VyIGZ1bmN0aW9uYWxpdHkgdGhpcyBpcyBpbnZvbHZlZCBpbi4gVGhhdCYjMzk7bGwgYWxsb3cgbWUgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgZnVuY3Rpb24mIzM5O3Mgcm9sZSBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz00NDk5PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTA0LS8qXG5tbS9odWdlX21lbW9yeS5jOjQ1MDU6ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwNi0gKiB0aGUgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlubGluZSB3cmFwcGVyIGluIG1tL2ludGVybmFsLmhcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MTctICovXG5tbS9odWdlX21lbW9yeS5jOjQ1MTg6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxOS17XG4tLVxubW0vaW50ZXJuYWwuaD03MjI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vaW50ZXJuYWwuaC03MzMtXG5tbS9pbnRlcm5hbC5oOjczNDpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2ludGVybmFsLmgtNzM1LXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaW50ZXJuYWwuaC03NDctXG5tbS9pbnRlcm5hbC5oOjc0ODpcdHJldHVybiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vaW50ZXJuYWwuaC03NDktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ1NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBDYWxsIFNpdGVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGV4YWN0bHkgaXMgYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGJlaW5nIGludm9rZWQ/JiMzNDsgVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCBpcyBjcnVjaWFsIGZvciBncmFzcGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCB3aXRoaW4gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBnYWluIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgd29ya2Zsb3cgdGhhdCByZWxpZXMgb24gaXQuIFBpbnBvaW50aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSB0dW5pbmcsIGJ1ZyBmaXhpbmcsIG9yIHNpbXBseSB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgbW9kdWxlJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXAsIG9yIG15IElERSYjMzk7cyBjYWxsIGhpZXJhcmNoeSBmZWF0dXJlLCBhbmQgZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZm9saW8uYz05MT12b2lkIF9fZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0xMDMtXHRwYWdlX2NhY2hlX3JlbGVhc2UoZm9saW8pO1xubW0vZm9saW8uYzoxMDQ6XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ZvbGlvLmMtMTA1LVx0bWVtX2Nncm91cF91bmNoYXJnZShmb2xpbyk7XG4tLVxubW0vZm9saW8uYz0xNTI9c3RhdGljIHZvaWQgZm9saW9fYmF0Y2hfbW92ZV9scnUoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gsIG1vdmVfZm5fdCBtb3ZlX2ZuKVxuLS1cbm1tL2ZvbGlvLmMtMTg2LVx0XHRcdF9fZm9saW9fY2xlYXJfdW5ldmljdGFibGUoZm9saW8pO1xubW0vZm9saW8uYzoxODc6XHRcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9mb2xpby5jLTE4OC1cdFx0XHRmYmF0Y2gtXHUwMDNlZm9saW9zW2ldID0gTlVMTDtcbi0tXG5tbS9mb2xpby5jPTk4ND12b2lkIGZvbGlvc19wdXRfcmVmcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcywgdW5zaWduZWQgaW50ICpyZWZzKVxuLS1cbm1tL2ZvbGlvLmMtMTAyMi1cdFx0fVxubW0vZm9saW8uYzoxMDIzOlx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ZvbGlvLmMtMTAyNC1cdFx0X19wYWdlX2NhY2hlX3JlbGVhc2UoZm9saW8sIFx1MDAyNmxydXZlYywgXHUwMDI2ZmxhZ3MpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mzk5ND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDAxMC1cdFx0LyogVGFrZSBvZmYgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovXG5tbS9odWdlX21lbW9yeS5jOjQwMTE6XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYy00MDEyLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OT1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUwNC0vKlxubW0vaHVnZV9tZW1vcnkuYzo0NTA1OiAqIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlzIG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHk6XG5tbS9odWdlX21lbW9yeS5jOjQ1MDY6ICogdGhlIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpbmxpbmUgd3JhcHBlciBpbiBtbS9pbnRlcm5hbC5oXG5tbS9odWdlX21lbW9yeS5jLTQ1MDctICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3Jcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MDktICpcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxMDogKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMS0gKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNy0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDUxODpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00NTE5LXtcbi0tXG5tbS9pbnRlcm5hbC5oPTcyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9pbnRlcm5hbC5oLTczMy1cbm1tL2ludGVybmFsLmg6NzM0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaW50ZXJuYWwuaDo3MzU6c3RhdGljIGlubGluZSBib29sIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ludGVybmFsLmgtNzM2LXtcbi0tXG5tbS9pbnRlcm5hbC5oLTc0Ny1cbm1tL2ludGVybmFsLmg6NzQ4Olx0cmV0dXJuIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9pbnRlcm5hbC5oLTc0OS19XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTI2OT12b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMzA0LVxubW0vbWVtY29udHJvbC12MS5jOjMwNTpcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vbWVtY29udHJvbC12MS5jLTMwNi1cdGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAwO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MzkxPXN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NDI4LVxubW0vbWVtY29udHJvbC5jOjU0Mjk6XHRcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKSk7XG5tbS9tZW1jb250cm9sLmMtNTQzMC1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTU2OD12b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MDktXHQvKiBXYXJuaW5nIHNob3VsZCBuZXZlciBoYXBwZW4sIHNvIGRvbiYjMzk7dCB3b3JyeSBhYm91dCByZWZjb3VudCBub24tMCAqL1xubW0vbWVtY29udHJvbC5jOjU2MTA6XHRXQVJOX09OX09OQ0UoZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChvbGQpKTtcbm1tL21lbWNvbnRyb2wuYy01NjExLVx0b2xkLVx1MDAzZW1lbWNnX2RhdGEgPSAwO1xuLS1cbm1tL21pZ3JhdGUuYz01ODM9c3RhdGljIGludCBfX2ZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNTk3LVx0XHRcdFx0cmV0dXJuIC1FQUdBSU47XG5tbS9taWdyYXRlLmM6NTk4Olx0XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vbWlncmF0ZS5jLTU5OS1cdFx0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIGV4cGVjdGVkX2NvdW50KTtcbi0tXG5tbS9taWdyYXRlLmMtNjMwLVx0LyogVGFrZSBvZmYgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cbm1tL21pZ3JhdGUuYzo2MzE6XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL21pZ3JhdGUuYy02MzItXG4tLVxubW0vdm1zY2FuLmM9MTA4MT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTUzNC1cbm1tL3Ztc2Nhbi5jOjE1MzU6XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vdm1zY2FuLmMtMTUzNi1cdFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcdTAwMjZmcmVlX2ZvbGlvcywgZm9saW8pID09IDApIHtcbi0tXG5tbS92bXNjYW4uYz0xODk0PXN0YXRpYyB1bnNpZ25lZCBpbnQgbW92ZV9mb2xpb3NfdG9fbHJ1KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vdm1zY2FuLmMtMTkyOS1cbm1tL3Ztc2Nhbi5jOjE5MzA6XHRcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS92bXNjYW4uYy0xOTMxLVx0XHRcdGlmIChmb2xpb19iYXRjaF9hZGQoXHUwMDI2ZnJlZV9mb2xpb3MsIGZvbGlvKSA9PSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjM3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGb2N1cyBTeW1ib2xzIGluIHRoZSBIdWdlIE1lbW9yeSBTdWJzeXN0ZW0qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMg4oCTIGF2b2lkIHRoZSBub2lzZSwgYWltIGZvciB0aGUgc2lnbmFsLiBTbywgSSBzaG91bGRuJiMzOTt0IGxpc3QgZXZlcnkgc2luZ2xlIG1lbW9yeSBhbGxvY2F0b3IgY2FsbCwgYnV0IGluc3RlYWQsIHplcm8gaW4gb24gdGhlICpzcGVjaWZpYyogZnVuY3Rpb25zIHRoYXQgYXJlIGltcGxlbWVudGluZyBvciBkaXJlY3RseSB0cmlnZ2VyaW5nIHRoZSBodWdlIHBhZ2Ugc3BsaXR0aW5nIGxvZ2ljLCBvciB0aG9zZSB0aGF0IGFyZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBmZWF0dXJlLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpSaWdodCwgc28gZm9yIHRoZSBgbW0vaHVnZV9tZW1vcnkuY2AgZmlsZSwgdGhlIGluaXRpYWwgbGlzdCBnaXZlcyB1czoKCiogICBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YAoqICAgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgICh3aGljaCBpcyBzdGF0aWMgYnV0LCBpbXBvcnRhbnRseSwgaW5saW5lZC9zdGF0aWMgd2l0aGluIHRoaXMgZmlsZSBhbmQgY2FsbGVkIGJ5IHR3byBrZXkgZnVuY3Rpb25zKQoqICAgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAKKiAgIEFuZCB0aGVuLCB0aGUgbm9uLXN0YXRpYyBvbmVzIHJlbGF0ZWQgdG8gc3BsaXR0aW5nOiBgc3BsaXRfZm9saW9fdG9fbGlzdGAsIGBmb2xpb19zcGxpdF91bm1hcHBlZGAsIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLgoKVGhhdCBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBjaGVjayB0byBiZSBzdXJlLCBzbywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc3BsaXRfZm9saW9fdG9fbGlzdGAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCwgdG8gYmUgc3VyZSBvZiB0aGUgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NzU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG5tbS9odWdlX21lbW9yeS5jLTc2LVx0XHRcdFx0XHQgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xubW0vaHVnZV9tZW1vcnkuYzo3NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxubW0vaHVnZV9tZW1vcnkuYy03OC1cdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA2ND1zdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA3OS1cdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVx1MDAzZWNvdW50X29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9jb3VudDtcbm1tL2h1Z2VfbWVtb3J5LmM6MTA4MDpcdGRlZmVycmVkX3NwbGl0X3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XG5tbS9odWdlX21lbW9yeS5jLTEwODEtXHRzaHJpbmtlcl9yZWdpc3RlcihkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTk0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MDEzLVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0MDE0Olx0XHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XG5tbS9odWdlX21lbW9yeS5jLTQwMTUtXHRcdCAqIHNwbGl0cyBpdCwgc28gdGhlIHVucXVldWUgYWJvdmUgZmluZHMgYW4gZW1wdHkgbGlzdCBhbmRcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0OTk9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MTEtICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxMjogKiBfZGVmZXJyZWRfbGlzdCBtaWdodCBiZSBpbiB1c2Ugb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpJiMzOTtzIHVubG9ja2VkXG5tbS9odWdlX21lbW9yeS5jLTQ1MTMtICogb24tc3RhY2sgbGlzdC5cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ2Mjg9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjQyLVxubW0vaHVnZV9tZW1vcnkuYzo0NjQzOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG5tbS9odWdlX21lbW9yeS5jLTQ2NDQtXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4tLVxubW0vbWlncmF0ZS5jPTE4MTE9c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4tLVxubW0vbWlncmF0ZS5jLTE4NTctXHRcdFx0ICogT25seSBjaGVjayBpdCB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIGxpc3QuXG5tbS9taWdyYXRlLmM6MTg1ODpcdFx0XHQgKiBTaW5jZSB0aGUgZm9saW8gY2FuIGJlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKVxubW0vbWlncmF0ZS5jLTE4NTktXHRcdFx0ICogbG9jYWwgbGlzdCBhbmQgcmVtb3ZpbmcgaXQgY2FuIGNhdXNlIHRoZSBsb2NhbCBsaXN0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTE1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgIGFuZCBpdHMgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uJiMzOTtzIHVzYWdl4oCUYSBxdWljayBzY2FuIGZvciBpdHMgY2FsbGVycyBpcyBpbiBvcmRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgbm90IGp1c3QgKndoYXQqIHRoaXMgZnVuY3Rpb24gZG9lcyBidXQgYWxzbyAqaG93KiBpdCYjMzk7cyBpbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGBzcGxpdF9mb2xpb190b19saXN0YCBpcyB1c2VkLiBXaGF0IGFzc3VtcHRpb25zIGFyZSBiYWtlZCBpbnRvIGl0cyBkZXNpZ24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgdGhhdCBoYXZlbiYjMzk7dCBiZWVuIGFkZXF1YXRlbHkgYWRkcmVzc2VkIGluIHRoZSBjYWxsaW5nIGNvZGU/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBmbG93IGFuZCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24uIFRoaXMgYWxzbyBzZXJ2ZXMgdGhlIHB1cnBvc2Ugb2YgZmlndXJpbmcgb3V0IHdoZXJlIHRvIHN0YXJ0IGludmVzdGlnYXRpbmcsIGFuZCB3aGF0IHBvc3NpYmxlIGlzc3VlcyBtYXkgYXJpc2UuIFRoaXMgc2hvdWxkIHF1aWNrbHkgdW5jb3ZlciBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncyBvciBhcmVhcyByZXF1aXJpbmcgYSBkZWVwZXIgZGl2ZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwbGl0X2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDM2NT1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0MzEtICovXG5tbS9odWdlX21lbW9yeS5jOjQ0MzI6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQ0MzMtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDQ5LSAqIEl0IGhhcyB0aGUgc2FtZSBwcmVyZXF1aXNpdGVzIGFuZCByZXR1cm5zIGFzXG5tbS9odWdlX21lbW9yeS5jOjQ0NTA6ICogc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKS5cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ1MS0gKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OT1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZV9tZW1vcnkuYy00NTAwLXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwMTpcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LCAwKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMi19XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NjQzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NzA1LSNpZmRlZiBDT05GSUdfREVCVUdfRlNcbm1tL2h1Z2VfbWVtb3J5LmM6NDcwNjpzdGF0aWMgdm9pZCBzcGxpdF9odWdlX3BhZ2VzX2FsbCh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy00NzA3LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ3NTY9c3RhdGljIGlubGluZSBib29sIHZtYV9ub3Rfc3VpdGFibGVfZm9yX3RocF9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3NjktXG5tbS9odWdlX21lbW9yeS5jOjQ3NzA6c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxubW0vaHVnZV9tZW1vcnkuYy00NzcxLVx0XHRcdFx0dW5zaWduZWQgbG9uZyB2YWRkcl9lbmQsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODM5LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0ODQwOlx0XHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxubW0vaHVnZV9tZW1vcnkuYy00ODQxLVx0XHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4ODYtXG5tbS9odWdlX21lbW9yeS5jOjQ4ODc6c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX2luX2ZpbGUoY29uc3QgY2hhciAqZmlsZV9wYXRoLCBwZ29mZl90IG9mZl9zdGFydCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg4OC1cdFx0XHRcdHBnb2ZmX3Qgb2ZmX2VuZCwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ5NTYtXG5tbS9odWdlX21lbW9yeS5jOjQ5NTc6c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbm1tL2h1Z2VfbWVtb3J5LmMtNDk1OC1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9wcylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwMDQtXHRcdH1cbm1tL2h1Z2VfbWVtb3J5LmM6NTAwNTpcdFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGZpbGVfcGF0aCwgb2ZmX3N0YXJ0LCBvZmZfZW5kLFxubW0vaHVnZV9tZW1vcnkuYy01MDA2LVx0XHRcdFx0bmV3X29yZGVyLCBpbl9mb2xpb19vZmZzZXQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTAxNS1cdGlmIChyZXQgPT0gMSBcdTAwMjZcdTAwMjYgcGlkID09IDEpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NTAxNjpcdFx0c3BsaXRfaHVnZV9wYWdlc19hbGwoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNTAxNy1cdFx0cmV0ID0gc3RybGVuKGlucHV0X2J1Zik7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy01MDIzLVxubW0vaHVnZV9tZW1vcnkuYzo1MDI0Olx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19waWQocGlkLCB2YWRkcl9zdGFydCwgdmFkZHJfZW5kLCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTUwMjUtXHRcdFx0aW5fZm9saW9fb2Zmc2V0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwMzMtXG5tbS9odWdlX21lbW9yeS5jOjUwMzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xubW0vaHVnZV9tZW1vcnkuYy01MDM1LVx0Lm93bmVyXHQgPSBUSElTX01PRFVMRSxcbm1tL2h1Z2VfbWVtb3J5LmM6NTAzNjpcdC53cml0ZVx0ID0gc3BsaXRfaHVnZV9wYWdlc193cml0ZSxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzNy19O1xubW0vaHVnZV9tZW1vcnkuYy01MDM4LVxubW0vaHVnZV9tZW1vcnkuYzo1MDM5OnN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy01MDQwLXtcbm1tL2h1Z2VfbWVtb3J5LmM6NTA0MTpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c3BsaXRfaHVnZV9wYWdlc1wmIzM0OywgMDIwMCwgTlVMTCwgTlVMTCxcbm1tL2h1Z2VfbWVtb3J5LmM6NTA0MjpcdFx0XHQgICAgXHUwMDI2c3BsaXRfaHVnZV9wYWdlc19mb3BzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0My1cdHJldHVybiAwO1xubW0vaHVnZV9tZW1vcnkuYy01MDQ0LX1cbm1tL2h1Z2VfbWVtb3J5LmM6NTA0NTpsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG5tbS9odWdlX21lbW9yeS5jLTUwNDYtI2VuZGlmXG4tLVxubW0vaHVnZXRsYi5jPTM5NTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXG4tLVxubW0vaHVnZXRsYi5jLTM5OTUtXHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBpKTtcbm1tL2h1Z2V0bGIuYzozOTk2Olx0XHRcdC8qIENhcmVmdWw6IHNlZSBfX3NwbGl0X2h1Z2VfcGFnZV90YWlsKCkgKi9cbm1tL2h1Z2V0bGIuYy0zOTk3LVx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKXBhZ2U7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTY4Nz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9pc29sYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy03NzktXHRcdCAqIGZvbGlvIGNhbiYjMzk7dCBiZSBmcmVlZCBmcm9tIHVuZGVyIHVzLiBOT1RFOiBmb2xpbyBsb2NrXG5tbS9raHVnZXBhZ2VkLmM6NzgwOlx0XHQgKiBpcyBuZWVkZWQgdG8gc2VyaWFsaXplIGFnYWluc3Qgc3BsaXRfaHVnZV9wYWdlKClcbm1tL2todWdlcGFnZWQuYy03ODEtXHRcdCAqIHdoZW4gaW52b2tlZCBmcm9tIHRoZSBWTS5cbi0tXG5tbS9rc20uYz0xNDk3PXN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX29uZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2tzbS5jLTE1MTktXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbm1tL2tzbS5jOjE1MjA6XHRcdGlmIChzcGxpdF9odWdlX3BhZ2UocGFnZSkpXG5tbS9rc20uYy0xNTIxLVx0XHRcdGdvdG8gb3V0X3VubG9jaztcbi0tXG5tbS9rc20uYz0yMjc3PXN0YXRpYyB2b2lkIGNtcF9hbmRfbWVyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbi0tXG5tbS9rc20uYy0yMzY0LVx0XHQgKiBmb2xpbywgdGhlbiB3ZSBhY3R1YWxseSBlbmRlZCB1cCBpbmNyZWFzaW5nIHRoZSByZWZlcmVuY2Vcbm1tL2tzbS5jOjIzNjU6XHRcdCAqIGNvdW50IG9mIHRoZSBzYW1lIGZvbGlvIHR3aWNlLCBhbmQgc3BsaXRfaHVnZV9wYWdlIGZhaWxlZC5cbm1tL2tzbS5jLTIzNjYtXHRcdCAqXG5tbS9rc20uYy0yMzY3LVx0XHQgKiBIZXJlIHdlIHNldCBhIGZsYWcgaWYgdGhhdCBoYXBwZW5lZCwgYW5kIHdlIHVzZSBpdCBsYXRlciB0b1xubW0va3NtLmM6MjM2ODpcdFx0ICogdHJ5IHNwbGl0X2h1Z2VfcGFnZSBhZ2Fpbi4gU2luY2Ugd2UgY2FsbCBmb2xpb19wdXQoKSByaWdodFxubW0va3NtLmMtMjM2OS1cdFx0ICogYWZ0ZXJ3YXJkcywgdGhlIHJlZmVyZW5jZSBjb3VudCB3aWxsIGJlIGNvcnJlY3QgYW5kXG5tbS9rc20uYzoyMzcwOlx0XHQgKiBzcGxpdF9odWdlX3BhZ2Ugc2hvdWxkIHN1Y2NlZWQuXG5tbS9rc20uYy0yMzcxLVx0XHQgKi9cbi0tXG5tbS9rc20uYy0yNDEwLVx0XHRcdFx0cmV0dXJuO1xubW0va3NtLmM6MjQxMTpcdFx0XHRzcGxpdF9odWdlX3BhZ2UocGFnZSk7XG5tbS9rc20uYy0yNDEyLVx0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE3MTM9c3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzE4LVx0bG9ja19wYWdlKHBhZ2UpO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzE5Olx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3MjAtXHR1bmxvY2tfcGFnZShwYWdlKTtcbi0tXG5tbS9zaG1lbS5jPTM4MjI9c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5tbS9zaG1lbS5jLTM5MTItXHQgKiBpbmZvLVx1MDAzZWZhbGxvY2VuZCBpcyBvbmx5IHJlbGV2YW50IHdoZW4gaHVnZSBwYWdlcyBtaWdodCBiZVxubW0vc2htZW0uYzozOTEzOlx0ICogaW52b2x2ZWQ6IHRvIHByZXZlbnQgc3BsaXRfaHVnZV9wYWdlKCkgZnJlZWluZyBmYWxsb2NhdGVkXG5tbS9zaG1lbS5jLTM5MTQtXHQgKiBwYWdlcyB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgY29tbWl0dGVkIGJleW9uZCBpX3NpemUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTgyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB3ZSBoYXZlIGBXb3J0aEZ1enppbmdgLCBhbmQgdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBwcmV0dHkgY2xlYXIuIFRoZSBjb3JlIHN1YnN5c3RlbSBpcyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGBtbS9odWdlX21lbW9yeS5jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB0b3VjaGluZyBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgaW50ZXJlc3RpbmcuIE5ldyBoZWxwZXIgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIHdpdGggdGhlc2UgYXNzZXJ0aW9ucyBgVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbylgIGFuZCBgVk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eSgmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCksIGZvbGlvKWAgc3VnZ2VzdHMgdGhlIGRldmVsb3BlciBpcyBjb25jZXJuZWQgYWJvdXQgc3VidGxlIHN0YXRlcy4gVGhlIHJlYWNoYWJpbGl0eSB2aWEgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgYW5kIFRIUC9tVEhQIG9wZXJhdGlvbnMsIGRlZmVycmVkIHNwbGl0IHF1ZXVlcywgc2hyaW5rZXIsIG1hZHZpc2UsIGFuZCBgc3BsaXRfaHVnZV9wYWdlYCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSwgZXNwZWNpYWxseSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICoqRGVmaW5pdGVseSBgV29ydGhGdXp6aW5nOiB0cnVlYCoqLiBObyBxdWVzdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYEVuYWJsZUNvbmZpZ3NgLiBXZSBhbHJlYWR5IGtub3cgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb21waWxlcyBgbW0vaHVnZV9tZW1vcnkuY2AsIHdoaWNoIGlzIGdyZWF0LCBidXQgd2Ugd2FudCB0byBrbm93IHdoYXQgdHJpZ2dlcnMgdGhpcyBgVk1fV0FSTl9PTl9GT0xJT2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBDT05GSUdfREVCVUdfVk1gIG9yIGBDT05GSUdfREVCVUdfVk1fUEdGTEFHU2AgYWZmZWN0IHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgY2hlY2tzLiBXYWl0LCBJIHJlbWVtYmVyOyBgVk1fV0FSTl9PTl9GT0xJT2AgaXMgZ3VhcmRlZCBieSBgQ09ORklHX0RFQlVHX1ZNYCwgSSBzaG91bGQgZ28gY2hlY2sgdGhlIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tZGVidWcuaD0xOD12b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xuLS1cbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTY5LX0pXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaDo3MDojZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pXHRcdCh7XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTcxLVx0aW50IF9fcmV0X3dhcm4gPSAhIShjb25kKTtcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC0xMzUtI2RlZmluZSBWTV9XQVJOX09OX09OQ0VfUEFHRShjb25kLCBwYWdlKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oOjEzNjojZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtMTM3LSNkZWZpbmUgVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGNvbmQsIGZvbGlvKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IERlYnVnZ2luZyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBtZW1vcnkgaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBpbmNsdWRlL2xpbnV4L21tZGVidWcuaGAuIEl0JiMzOTtzIGEgc3RhbmRhcmQgcGxhY2UgZm9yIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1ZyBkZWZpbml0aW9ucywgYW5kIHRoZSBjb250ZXh0IG9mdGVuIGdpdmVzIGluc2lnaHQgaW50byB0aGUgbGV2ZWwgb2YgdHJhY2luZyBhbmQgZXJyb3IgcmVwb3J0aW5nIGNvbmZpZ3VyZWQgZm9yIHRoZSBNTSBzdWJzeXN0ZW0uCgpJJiMzOTttIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBsaW5lcyAyMCB0aHJvdWdoIDc1LiBUaGF0IHJhbmdlIHByb2JhYmx5IGNvbnRhaW5zIGtleSBtYWNybyBkZWZpbml0aW9ucywgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIChgI2lmZGVmYCwgYCNkZWZpbmVgLCBgI3VuZGVmYCksIGFuZCBwb3RlbnRpYWxseSBzb21lIGlubGluZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBkZWJ1Z2dpbmcuIEkgZXhwZWN0IHRvIGZpbmQgZmxhZ3MgZm9yIHR1cm5pbmcgb24gb3Igb2ZmIHZhcmlvdXMgbWVtb3J5IGRlYnVnZ2luZyBmZWF0dXJlcyBsaWtlIHBhZ2UgYWxsb2NhdGlvbiB0cmFjaW5nLCBzbGFiIGRlYnVnZ2luZywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIGluc3RydW1lbnRhdGlvbiByZWxhdGVkIHRvIHNwZWNpZmljIG1lbW9yeSB6b25lcyBvciBhbGxvY2F0aW9uIG9yZGVycy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbWFjcm9zIHRoYXQsIHdoZW4gZW5hYmxlZCwgbWlnaHQgbGVhZCBtZSB0byB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVhayBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeS4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZWZpbmVzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hhdCBkZWJ1ZyBvcHRpb25zIGFyZSBjdXJyZW50bHkgYWN0aXZlIGFuZCBob3cgdGhleSYjMzk7cmUgYWZmZWN0aW5nIHRoZSBrZXJuZWwmIzM5O3MgYmVoYXZpb3IgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGRvbWFpbi4gVWx0aW1hdGVseSwgaXQgc2hvdWxkIGFsbG93IG1lIHRvIG5hcnJvdyBteSBmb2N1cyBvciByZWZpbmUgbXkgc2VhcmNoIGNyaXRlcmlhIGZvciB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tZGVidWcuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0I2lmbmRlZiBMSU5VWF9NTV9ERUJVR19IXG4gICAzOlx0I2RlZmluZSBMSU5VWF9NTV9ERUJVR19IIDFcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0c3RydWN0IHBhZ2U7XG4gICA5Olx0c3RydWN0IHZtX2FyZWFfc3RydWN0O1xuICAxMDpcdHN0cnVjdCBtbV9zdHJ1Y3Q7XG4gIDExOlx0c3RydWN0IHZtYV9pdGVyYXRvcjtcbiAgMTI6XHRzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdDtcbiAgMTM6XHRcbiAgMTQ6XHR2b2lkIGR1bXBfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgY29uc3QgY2hhciAqcmVhc29uKTtcbiAgMTU6XHR2b2lkIGR1bXBfdm1hKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiAgMTY6XHR2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuICAxNzpcdHZvaWQgZHVtcF92bWcoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZywgY29uc3QgY2hhciAqcmVhc29uKTtcbiAgMTg6XHR2b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xuICAxOTpcdFxuICAyMDpcdCNpZmRlZiBDT05GSUdfREVCVUdfVk1cbiAgMjE6XHQjZGVmaW5lIFZNX0JVR19PTihjb25kKSBCVUdfT04oY29uZClcbiAgMjI6XHQjZGVmaW5lIFZNX0JVR19PTl9QQUdFKGNvbmQsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gIDIzOlx0XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDI0Olx0XHRcdGlmICh1bmxpa2VseShjb25kKSkge1x0XHRcdFx0XHRcXFxuICAyNTpcdFx0XHRcdGR1bXBfcGFnZShwYWdlLCBcJiMzNDtWTV9CVUdfT05fUEFHRShcJiMzNDsgX19zdHJpbmdpZnkoY29uZClcJiMzNDspXCYjMzQ7KTtcXFxuICAyNjpcdFx0XHRcdEJVRygpO1x0XHRcdFx0XHRcdFxcXG4gIDI3Olx0XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gIDI4Olx0XHR9IHdoaWxlICgwKVxuICAyOTpcdCNkZWZpbmUgVk1fQlVHX09OX0ZPTElPKGNvbmQsIGZvbGlvKVx0XHRcdFx0XHRcXFxuICAzMDpcdFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuICAzMTpcdFx0XHRpZiAodW5saWtlbHkoY29uZCkpIHtcdFx0XHRcdFx0XFxcbiAgMzI6XHRcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Vk1fQlVHX09OX0ZPTElPKFwmIzM0OyBfX3N0cmluZ2lmeShjb25kKVwmIzM0OylcJiMzNDspO1xcXG4gIDMzOlx0XHRcdFx0QlVHKCk7XHRcdFx0XHRcdFx0XFxcbiAgMzQ6XHRcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiAgMzU6XHRcdH0gd2hpbGUgKDApXG4gIDM2Olx0I2RlZmluZSBWTV9CVUdfT05fVk1BKGNvbmQsIHZtYSlcdFx0XHRcdFx0XFxcbiAgMzc6XHRcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMzg6XHRcdFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XHRcdFx0XHRcdFxcXG4gIDM5Olx0XHRcdFx0ZHVtcF92bWEodm1hKTtcdFx0XHRcdFx0XFxcbiAgNDA6XHRcdFx0XHRCVUcoKTtcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgzNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEltcGFjdCBvZiBERUJVR19WTSBvbiBIdWdlIFBhZ2UgQmVoYXZpb3IqKgoKT2theSwgc28gSSBzZWUgdGhhdCBlbmFibGluZyBgREVCVUdfVk1gIGFsc28gYWN0aXZhdGVzIGBWTV9XQVJOX09OX0ZPTElPYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IHRoaXMgaW1wYWN0cyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBodWdlIHBhZ2VzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGNvZGUgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgYmVoYXZpb3IsIHNvIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJJiMzOTtsbCBzY291ciB0aGF0IGZpbGUgKGBtbS9odWdlX21lbW9yeS5jYCkgZm9yIGFueSBgI2lmZGVmYCBibG9ja3Mgb3Igc2ltaWxhciBjb25zdHJ1Y3RzIHRoYXQgc3Vycm91bmQgdGhlIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRoaXMgd2lsbCBoZWxwIG1lIG1hcCB0aGUgaW50ZXJhY3Rpb25zIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NjE9dW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyBfX3JlYWRfbW9zdGx5ID1cbm1tL2h1Z2VfbWVtb3J5LmM6NjI6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL2h1Z2VfbWVtb3J5LmMtNjMtXHQoMVx1MDAzY1x1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxubW0vaHVnZV9tZW1vcnkuYy02NC0jZW5kaWZcbm1tL2h1Z2VfbWVtb3J5LmM6NjU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9odWdlX21lbW9yeS5jLTY2LVx0KDFcdTAwM2NcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTgzPXVuc2lnbmVkIGxvbmcgaHVnZV96ZXJvX3BmbiBfX3JlYWRfbW9zdGx5ID0gSFVHRV9aRVJPX1VOU0VUX1BGTjtcbm1tL2h1Z2VfbWVtb3J5LmM6ODQ6I2lmbmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbm1tL2h1Z2VfbWVtb3J5LmMtODUtc3RhdGljIGF0b21pY190IGh1Z2VfemVyb19yZWZjb3VudDtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI3Mz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdlX3plcm9fZm9saW8odm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI4Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6Mjg4OiNpZmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbm1tL2h1Z2VfbWVtb3J5LmMtMjg5LXN0YXRpYyBpbnQgX19pbml0IGh1Z2VfemVyb19pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MTY9dm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDIyLVxubW0vaHVnZV9tZW1vcnkuYzo0MjM6I2lmZGVmIENPTkZJR19TWVNGU1xubW0vaHVnZV9tZW1vcnkuYy00MjQtc3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjYxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpodWdlcGFnZV9hdHRyW10gPSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy02NjUtXHRcdTAwMjZocGFnZV9wbWRfc2l6ZV9hdHRyLmF0dHIsXG5tbS9odWdlX21lbW9yeS5jOjY2NjojaWZkZWYgQ09ORklHX1NITUVNXG5tbS9odWdlX21lbW9yeS5jLTY2Ny1cdFx1MDAyNnNobWVtX2VuYWJsZWRfYXR0ci5hdHRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NzYyPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmaWxlX2N0cmxfYXR0cnNbXSA9IHtcbm1tL2h1Z2VfbWVtb3J5LmM6NzYzOiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtNzY0LVx0XHUwMDI2dGhwc2l6ZV9zaG1lbV9lbmFibGVkX2F0dHIuYXR0cixcbi0tXG5tbS9odWdlX21lbW9yeS5jPTgyMj1ERUZJTkVfTVRIUF9TVEFUX0FUVFIoc3dwb3V0X2ZhbGxiYWNrLCBNVEhQX1NUQVRfU1dQT1VUX0ZBTExCQUNLKTtcbm1tL2h1Z2VfbWVtb3J5LmM6ODIzOiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtODI0LURFRklORV9NVEhQX1NUQVRfQVRUUihzaG1lbV9hbGxvYywgTVRIUF9TVEFUX1NITUVNX0FMTE9DKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTgzOD1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYW5vbl9zdGF0c19hdHRyc1tdID0ge1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtODQxLVx0XHUwMDI2YW5vbl9mYXVsdF9mYWxsYmFja19jaGFyZ2VfYXR0ci5hdHRyLFxubW0vaHVnZV9tZW1vcnkuYzo4NDI6I2lmbmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtODQzLVx0XHUwMDI2enN3cG91dF9hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz04NjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfc3RhdHNfYXR0cnNbXSA9IHtcbm1tL2h1Z2VfbWVtb3J5LmM6ODY1OiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtODY2LVx0XHUwMDI2c2htZW1fYWxsb2NfYXR0ci5hdHRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9ODc4PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphbnlfc3RhdHNfYXR0cnNbXSA9IHtcbm1tL2h1Z2VfbWVtb3J5LmM6ODc5OiNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmMtODgwLVx0XHUwMDI2enN3cG91dF9hdHRyLmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xNzUxPUVYUE9SVF9TWU1CT0xfR1BMKHZtZl9pbnNlcnRfZm9saW9fcG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTc1Mi1cbm1tL2h1Z2VfbWVtb3J5LmM6MTc1MzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL2h1Z2VfbWVtb3J5LmMtMTc1NC1zdGF0aWMgcHVkX3QgbWF5YmVfcHVkX21rd3JpdGUocHVkX3QgcHVkLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE5NTI9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMDYzLVxubW0vaHVnZV9tZW1vcnkuYzoyMDY0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vaHVnZV9tZW1vcnkuYy0yMDY1LXZvaWQgdG91Y2hfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNTUzPWJvb2wgemFwX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU5Mi1cbm1tL2h1Z2VfbWVtb3J5LmM6MjU5MzojaWZuZGVmIHBtZF9tb3ZlX211c3Rfd2l0aGRyYXdcbm1tL2h1Z2VfbWVtb3J5LmMtMjU5NC1zdGF0aWMgaW5saW5lIGludCBwbWRfbW92ZV9tdXN0X3dpdGhkcmF3KHNwaW5sb2NrX3QgKm5ld19wbWRfcHRsLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjc0MT1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg0OC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mjg0OTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL2h1Z2VfbWVtb3J5LmMtMjg1MC1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg4OC1cbm1tL2h1Z2VfbWVtb3J5LmM6Mjg4OTojaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXG5tbS9odWdlX21lbW9yeS5jLTI4OTAtLypcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMwNDA9c3BpbmxvY2tfdCAqX19wdWRfdHJhbnNfaHVnZV9sb2NrKHB1ZF90ICpwdWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzA1MC1cbm1tL2h1Z2VfbWVtb3J5LmM6MzA1MTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL2h1Z2VfbWVtb3J5LmMtMzA1Mi1pbnQgemFwX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzY5Mj1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzQ0LVx0XHRcdFx0ICgxTCBcdTAwM2NcdTAwM2MgUEdfdW5ldmljdGFibGUpIHxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc0NTojaWZkZWYgQ09ORklHX0FSQ0hfVVNFU19QR19BUkNIXzJcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0Ni1cdFx0XHRcdCAoMUwgXHUwMDNjXHUwMDNjIFBHX2FyY2hfMikgfFxubW0vaHVnZV9tZW1vcnkuYy0zNzQ3LSNlbmRpZlxubW0vaHVnZV9tZW1vcnkuYzozNzQ4OiNpZmRlZiBDT05GSUdfQVJDSF9VU0VTX1BHX0FSQ0hfM1xubW0vaHVnZV9tZW1vcnkuYy0zNzQ5LVx0XHRcdFx0ICgxTCBcdTAwM2NcdTAwM2MgUEdfYXJjaF8zKSB8XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNzk0LVx0XHRcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jOjM3OTU6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vaHVnZV9tZW1vcnkuYy0zNzk2LVx0XHRuZXdfZm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IGZvbGlvLVx1MDAzZW1lbWNnX2RhdGE7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NjQzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NzA0LVxubW0vaHVnZV9tZW1vcnkuYzo0NzA1OiNpZmRlZiBDT05GSUdfREVCVUdfRlNcbm1tL2h1Z2VfbWVtb3J5LmMtNDcwNi1zdGF0aWMgdm9pZCBzcGxpdF9odWdlX3BhZ2VzX2FsbCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NTA0NT1sYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy01MDQ3LVxubW0vaHVnZV9tZW1vcnkuYzo1MDQ4OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0OS1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE5MgoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiA2MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZvbGlvIFNwbGl0dGluZyBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBjb2RlIGNoYW5nZXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBvciBtb2RpZmllZCBpbiByZWxhdGlvbiB0byB0aGUgYEZvY3VzU3ltYm9sc2AuIFNvLCBsZXQmIzM5O3Mgc2VlLCB3ZSBoYXZlIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCwgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgdGhhdCBhcmUgbmV3IG9yIGFsdGVyZWQuIFRoZW4gdGhlcmUgYXJlIHRoZSBub24tc3RhdGljIGNhbGxlcnM6IGBzcGxpdF9mb2xpb190b19saXN0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGFuZCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLgoKUmlnaHQsIGxldCYjMzk7cyBjb25maXJtIHRoZSBzdGF0aWMgdnMuIG5vbi1zdGF0aWMgc3RhdHVzIG9mIHRob3NlIGZ1bmN0aW9ucywgbWFraW5nIHN1cmUgdGhhdCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBpcyBpbmRlZWQgbm9uLXN0YXRpYywgd2hpY2ggaXMgY29uZmlybWVkIG9uIGxpbmUgNDUxOCBhbmQgZGVjbGFyZWQgaW4gYG1tL2ludGVybmFsLmhgLiBDb25maXJtZWQgdGhhdCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBgc3BsaXRfZm9saW9fdG9fbGlzdGAsIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYW5kIGBkZWZlcnJlZF9zcGxpdF9mb2xpb2AgYXJlIG5vbi1zdGF0aWMgYXMgd2VsbCwgd2hpbGUgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCBhcmUgc3RhdGljLgoKQWxyaWdodCwgdGhhdCYjMzk7cyBkb25lLiBMZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBmb2N1cyBpcyBvbiB0aGUgcmlnaHQgZnVuY3Rpb25zOiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAsIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgLCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLgoKTm93LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIG9idmlvdXMgcmVhc29ucywgYW5kIGBERUJVR19WTWAgdG8gZW5hYmxlIHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucy4gR29vZCwgZ29vZC4KCk9rYXksIGxldCYjMzk7cyBzdW1tYXJpemUgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgcmVmYWN0b3JpbmcgdGhlIGBQR19wYXJ0aWFsbHlfbWFwcGVkYCBmbGFnIGNsZWFyaW5nIGFuZCBjb3JyZXNwb25kaW5nIG1USFAgc3RhdCBkZWNyZW1lbnQgbG9naWMgaW4gVEhQIGZvbGlvcyBpbnRvIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKWAuIENydWNpYWxseSwgaXQgaW50cm9kdWNlcyBuZXcgcnVudGltZSBhc3NlcnRpb25zLCB0aG9zZSBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoaXMgaGl0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIFRIUCAoYW5kIG1USFApIHNwbGl0dGluZyBhbmQgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlcy4gVGhlIGtleSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoZSBuZWVkIGZvciB0aG9yb3VnaCBmdXp6aW5nLiBUaGVzZSBhc3NlcnRpb25zIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBuZWVkIHRvIGhvbGQgdGhyb3VnaCBhbGwgZm9saW8gbGlmZWN5Y2xlcywgbWVtb3J5IHJlY2xhaW0vc2hyaW5rZXJzLCBhbmQgc3BsaXQgb3BlcmF0aW9ucywgYW5kIGFsbCBjb25jdXJyZW5jeSBhc3BlY3RzLiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3VidGxlIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIHJlY29yZCB0aGVzZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7REVCVUdfVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkJiMzNDssCiAgICAmIzM0O19fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZCYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7c3BsaXRfZm9saW9fdG9fbGlzdCYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9mb2xpbyYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZmxhZyBhbmQgbVRIUCBzdGF0IGFjY291bnRpbmcgaW50byBhIGhlbHBlciBmdW5jdGlvbiBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKCksIGFuZCBpbnRyb2R1Y2VzIG5ldyBWTV9XQVJOX09OX0ZPTElPIGFzc2VydGlvbnMgaW4gbW0vaHVnZV9tZW1vcnkuYyAoX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkIGFuZCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBtYW5hZ2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFAvbVRIUCkgYW5kIGRlZmVycmVkIHNwbGl0IHF1ZXVlcywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgYW5kIGFzc2VydGlvbiB2aW9sYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtERUJVR19WTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQmIzM0OywKICAgICYjMzQ7X19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkJiMzNDssCiAgICAmIzM0O19fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICAgJiMzNDtmb2xpb19zcGxpdF91bm1hcHBlZCYjMzQ7LAogICAgJiMzNDtzcGxpdF9mb2xpb190b19saXN0JiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X2ZvbGlvJiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmbGFnIGFuZCBtVEhQIHN0YXQgYWNjb3VudGluZyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYW5kIGludHJvZHVjZXMgbmV3IFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBpbiBtbS9odWdlX21lbW9yeS5jIChfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQgYW5kIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIG1hbmFnaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUC9tVEhQKSBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWVzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBhbmQgYXNzZXJ0aW9uIHZpb2xhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNsZWFyaW5nIG9mIHRoZSBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQgc3RhdGlzdGljIHVwZGF0ZSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYWRkaW5nIFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucy5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgZmxhZ3MsIGRlYnVnIGFzc2VydGlvbnMsIGFuZCBzdGF0aXN0aWNzIGZvciBodWdlL211bHRpLXNpemUgYW5vbnltb3VzIGZvbGlvcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgY29weSBhbnkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBkYXRhIGJ1ZmZlcnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhlIGFkZGVkIGFzc2VydGlvbnMgb3IgcmVmY291bnRpbmcgbG9naWMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5OTcyY2U0OTllZDg4MDY5NjI1OGM0ODdkY2ZhOWNkZjdhMWI3NzczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxNjo0MDo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGRkNjZjNmFkNWFmMTMuLmZhZTk1OTYzMzI3OWIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMzk3Miw2ICYjNDM7Mzk3MiwyNSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZvbGlvX2NhY2hlX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwkvKiBGb2xpbyBtdXN0IGJlIGZyb3plbi4gKi8KJiM0MzsJVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7CiYjNDM7CiYjNDM7CWlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT3JkZXItMSBmb2xpb3MgaGF2ZSBubyBfZGVmZXJyZWRfbGlzdC4gVGhlIGZsYWcgaXMgb25seSBldmVyIHNldAomIzQzOwkgKiBvbiBmb2xpb3MgdGhhdCBkbywgc28gdGhlIGxpc3QgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIgdGhlIGZsYWcuCiYjNDM7CSAqLwomIzQzOwlWTV9XQVJOX09OX0ZPTElPKCFsaXN0X2VtcHR5KCZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0KSwgZm9saW8pOwomIzQzOwomIzQzOwlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKJiM0MzsJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCiYjNDM7CQkgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwKIAkJCQkJICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLAogCQkJCQkgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSwKQEAgLTM5ODAsNyAmIzQzOzM5OTksNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogewogCXN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7CiAJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0OwotCWludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgJmFtcDsmYW1wOyBlbmQpOwpAQCAtMzk5OCwxMSAmIzQzOzQwMTYsNyBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogCQkgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuCiAJCSAqIENsZWFyIGl0IGhlcmU6IHRoZSBmbGFnIGRvZXMgbm90IHN1cnZpdmUgdGhlIHNwbGl0LgogCQkgKi8KLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChvbGRfb3JkZXIsCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAogCQlpZiAobWFwcGluZykgewogCQkJaW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwpAQCAtNDUxNiwxMSAmIzQzOzQ1MzAsNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwogCWxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZSgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSwgbmlkLCAmYW1wO21lbWNnLCAmYW1wO2ZsYWdzKTsKIAlpZiAoX19saXN0X2xydV9kZWwoJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QsIG5pZCkpIHsKLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAkJdW5xdWV1ZWQgPSB0cnVlOwogCX0KIAlsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsICZhbXA7ZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNQoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiAxNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgUmVmYWN0b3IqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLCBhaW1pbmcgdG8gY29uc29saWRhdGUgdGhlIGxvZ2ljIGZvciBjbGVhcmluZyB0aGUgYFBHX3BhcnRpYWxseV9tYXBwZWRgIGZsYWcgYW5kIGRlY3JlbWVudGluZyB0aGUgYE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRURgIHN0YXQgY291bnRlci4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIGhlbHBlciBmdW5jdGlvbiBpcyB0aGUga2V5IGNoYW5nZSBoZXJlLiBUaGUgZGlmZiBtYWtlcyBpdCBtdWNoIGNsZWFyZXIgdG8gc2VlIHRoYXQgdGhlIGNvZGUgdXNlZCB0byBiZSBpbiB0d28gcGxhY2VzIGFuZCBpcyBub3cgaW4gb25lLgoKTXkgZmlyc3QgdGhvdWdodCwgYXMgYWx3YXlzLCBpcyB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgZXNwZWNpYWxseSBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIG15IHN0YW5kYXJkIGFwcHJvYWNoOgotICAgRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8uCi0gICBEb2VzIGl0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCBvcGVyYXRlcyBvbiBgc3RydWN0IGZvbGlvYCBmbGFncywgcmVmY291bnRzLCBhbmQgbGlzdCBwb2ludGVycy4KLSAgIERvZXMgaXQgY2hhbmdlIGJ1ZmZlciBzaXplcyBvciBtZW1vcnkgY29weSBsZW5ndGhzPyBOby4KLSAgIERvZXMgaXQgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLgotICAgSXMgdGhlcmUgYW55IEtNU0FOIHJlbGV2YW5jZT8gTm8uCgpUaGUgcGF0Y2ggc2VlbXMgcmVsYXRpdmVseSBzYWZlIGluIHRoaXMgcmVnYXJkLiBUaGlzIHJlZmFjdG9yIGFwcGVhcnMgdG8gZm9jdXMgb24gbWFpbnRhaW5pbmcgZGF0YSBpbnRlZ3JpdHkgd2l0aGluIHRoZSBgZm9saW9gIHN0cnVjdHVyZSBpdHNlbGYuIE5vIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFRoYXQmIzM5O3MgZ29vZC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGlzc3VlcyBoaWRpbmcgaW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgb3IgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIExldCYjMzk7cyBjb25maXJtIGFnYWluIGluIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLiBPa2F5LCB0aGVyZSYjMzk7cyBhIGBWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtgIHdpdGhpbiB0aGUgbmV3IGZ1bmN0aW9uLCB3aGljaCBpcyBhIGtleSBzYW5pdHkgY2hlY2suCgpNeSBhbmFseXNpcyBwb2ludHMgdG8gYSByZWZhY3RvcmluZyBvZiBhIGNyaXRpY2FsIHBhdGgsIHdoaWNoIG1lYW5zIEkgaGF2ZSB0byBiZSBleHRyZW1lbHkgbWV0aWN1bG91cy4gSSBtdXN0IGVuc3VyZSB0aGUgcmVmYWN0b3JpbmcgaGFzIG5vdCBpbnRyb2R1Y2VkIGFueSBkYXRhIHJhY2VzIG9yIGNoYW5nZWQgdGhlIG92ZXJhbGwgbG9ja2luZyBzY2hlbWUuIEl0IGFsc28gbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgY2hlY2sgaXMgY29ycmVjdC4gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gbWUgdGhhdCBrZXJuZWwgY29kZSBpcyB3ZWxsLWFzc2VydGVkLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuIFRoaXMgaXMgYSBjbGVhbiByZWZhY3Rvci4gSSBhbSBjb25maWRlbnQuIFJlYWR5IHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmbGFncywgZGVidWcgYXNzZXJ0aW9ucywgYW5kIHN0YXRpc3RpY3MgZm9yIGh1Z2UvbXVsdGktc2l6ZSBhbm9ueW1vdXMgZm9saW9zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgYWRkZWQgYXNzZXJ0aW9ucyBvciByZWZjb3VudGluZyBsb2dpYyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBmbGFncywgZGVidWcgYXNzZXJ0aW9ucywgYW5kIHN0YXRpc3RpY3MgZm9yIGh1Z2UvbXVsdGktc2l6ZSBhbm9ueW1vdXMgZm9saW9zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBjb3B5IGFueSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgYWRkZWQgYXNzZXJ0aW9ucyBvciByZWZjb3VudGluZyBsb2dpYyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MDAuMDEwNjAxOTc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NTEzMDI3ODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJERUJVR19WTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZFwiLFxuICAgIFwiX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCIsXG4gICAgXCJmb2xpb19zcGxpdF91bm1hcHBlZFwiLFxuICAgIFwic3BsaXRfZm9saW9fdG9fbGlzdFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLCBkZWJ1ZyBhc3NlcnRpb25zLCBhbmQgc3RhdGlzdGljcyBmb3IgaHVnZS9tdWx0aS1zaXplIGFub255bW91cyBmb2xpb3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBhZGRlZCBhc3NlcnRpb25zIG9yIHJlZmNvdW50aW5nIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZmxhZyBhbmQgbVRIUCBzdGF0IGFjY291bnRpbmcgaW50byBhIGhlbHBlciBmdW5jdGlvbiBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKCksIGFuZCBpbnRyb2R1Y2VzIG5ldyBWTV9XQVJOX09OX0ZPTElPIGFzc2VydGlvbnMgaW4gbW0vaHVnZV9tZW1vcnkuYyAoX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkIGFuZCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBtYW5hZ2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFAvbVRIUCkgYW5kIGRlZmVycmVkIHNwbGl0IHF1ZXVlcywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgYW5kIGFzc2VydGlvbiB2aW9sYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTowMC4wMTA2MTg0NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MzM1MTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk5NzJjZTQ5OWVkODgwNjk2MjU4YzQ4N2RjZmE5Y2RmN2ExYjc3NzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNjo0MDo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IGRkNjZjNmFkNWFmMTMuLmZhZTk1OTYzMzI3OWIgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMzk3Miw2ICszOTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm9saW9fY2FjaGVfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHQvKiBGb2xpbyBtdXN0IGJlIGZyb3plbi4gKi9cXG4rXFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuK1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcXG4rXFx0ICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLlxcbitcXHQgKi9cXG4rXFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pO1xcbitcXG4rXFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuK1xcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbitcXHRcXHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXFxuQEAgLTM5ODAsNyArMzk5OSw2IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG4gXFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xcbi1cXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcXHUwMDI2XFx1MDAyNiBlbmQpO1xcbkBAIC0zOTk4LDExICs0MDE2LDcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cXG4gXFx0XFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxcbiBcXHRcXHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbi1cXHRcXHRcXHRtb2RfbXRocF9zdGF0KG9sZF9vcmRlcixcXG4tXFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbiBcXG4gXFx0XFx0aWYgKG1hcHBpbmcpIHtcXG4gXFx0XFx0XFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbkBAIC00NTE2LDExICs0NTMwLDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuIFxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG4gXFx0aWYgKF9fbGlzdF9scnVfZGVsKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xcbi1cXHRcXHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xcbi1cXHRcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4tXFx0XFx0XFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXFxuLVxcdFxcdFxcdFxcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4gXFx0XFx0dW5xdWV1ZWQgPSB0cnVlO1xcbiBcXHR9XFxuIFxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MDAuNjc0NjQ4MDAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5NDUxMzk5NDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiREVCVUdfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkXCIsXG4gICAgXCJfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcInNwbGl0X2ZvbGlvX3RvX2xpc3RcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X2ZvbGlvXCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmbGFnIGFuZCBtVEhQIHN0YXQgYWNjb3VudGluZyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYW5kIGludHJvZHVjZXMgbmV3IFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBpbiBtbS9odWdlX21lbW9yeS5jIChfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQgYW5kIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIG1hbmFnaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUC9tVEhQKSBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWVzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBhbmQgYXNzZXJ0aW9uIHZpb2xhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTk3MmNlNDk5ZWQ4ODA2OTYyNThjNDg3ZGNmYTljZGY3YTFiNzc3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTY6NDA6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZGQ2NmM2YWQ1YWYxMy4uZmFlOTU5NjMzMjc5YiAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTcyLDYgKzM5NzIsMjUgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHQvKiBGb2xpbyBtdXN0IGJlIGZyb3plbi4gKi9cbitcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xuK1xuK1x0aWYgKCFmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKlxuK1x0ICogT3JkZXItMSBmb2xpb3MgaGF2ZSBubyBfZGVmZXJyZWRfbGlzdC4gVGhlIGZsYWcgaXMgb25seSBldmVyIHNldFxuK1x0ICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLlxuK1x0ICovXG4rXHRWTV9XQVJOX09OX0ZPTElPKCFsaXN0X2VtcHR5KFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pO1xuK1xuK1x0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4rXHRtb2RfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSxcbitcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuK31cbitcbiBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHhhX3N0YXRlICp4YXMsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGJvb2wgZG9fbHJ1LFxuQEAgLTM5ODAsNyArMzk5OSw2IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4ge1xuIFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbiBcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcbi1cdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbkBAIC0zOTk4LDExICs0MDE2LDcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cbiBcdFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxuIFx0XHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cbiBcdFx0ICovXG4tXHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdFx0bW9kX210aHBfc3RhdChvbGRfb3JkZXIsXG4tXHRcdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHRcdH1cbitcdFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4gXG4gXHRcdGlmIChtYXBwaW5nKSB7XG4gXHRcdFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuQEAgLTQ1MTYsMTEgKzQ1MzAsNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFx1MDAyNm1lbWNnLCBcdTAwMjZmbGFncyk7XG4gXHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4tXHRcdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHRcdH1cbitcdFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4gXHRcdHVucXVldWVkID0gdHJ1ZTtcbiBcdH1cbiBcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXHUwMDI2ZmxhZ3MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MDAuNjc0NjYwOTgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk1NTE4NjA4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyB3aXRoIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUsIGFuZCB0aGUgZ29hbCBpcyBhIHByZXR0eSBzdGFuZGFyZCBvbmU6IGRldGVybWluZSBpZiBpdCdzIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZyB3aXRoIHN5emthbGxlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGNoYW5nZWQsIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIFwiZm9jdXMgc3ltYm9sc1wiIHRvIHRhcmdldCwgYW5kIHRoZW4gbmFpbCBkb3duIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB0aG9zZSBzZWN0aW9ucyBvZiBjb2RlLiBUaGlzIGlzIGFsbCBzdGFuZGFyZCBkZXZlbG9wZXIgUUEgYW5kIGluaXRpYWwgY29kZSBhbmFseXNpcyDigJMgdGhlIGtpbmQgb2YgdHJpYWdlIEkgZGVhbCB3aXRoIHJlZ3VsYXJseS4gU2V2ZXJpdHktd2lzZSwgSSdkIHNheSB0aGlzIGlzIHByZXR0eSBsb3csIG5vbi1jcml0aWNhbCwgb3IgZXZlbiBiZW5pZ24gYXQgdGhpcyBzdGFnZS5cblxuRmlyc3QgdGhpbmdzIGZpcnN0OiB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1tL2h1Z2VfbWVtb3J5LmNgLiBUaGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gSHVnZSBwYWdlcyBhcmUgYSBrbm93biBhcmVhIHdoZXJlIGlzc3VlcyBjYW4gaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiBzeXN0ZW0gcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGFsd2F5cyBhIGNvbXBsZXggYmVhc3QuXG5cblRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBvciBtb2RpZmllcyB0aGVzZSBmdW5jdGlvbnM6XG5cbiogICBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKWBcbiogICBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKC4uLilgXG4qICAgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKWBcblxuTm93LCB0aGUgZnVuIGJlZ2lucy4gVGltZSB0byBkaWcgaW50byB0aGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVzZSBlaXRoZXIgYGdyZXBwZXJgIG9yIHBlcmhhcHMganVzdCBgcmVhZC1maWxlYCB0byBleHBsb3JlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4gc2VxdWVuY2UsIGFuZCB3aGF0IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgZXhpc3QuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHBhdGhzIHRoYXQgYXJlIG9mIGludGVyZXN0IHRvIHN5emthbGxlci5cblxuVWx0aW1hdGVseSwgSSB3aWxsIGFsc28gbmVlZCB0byBpZGVudGlmeSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgY29kZSB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2gsIGluIG9yZGVyIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gZnV6ei5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQxOjIwLjIyNjUyNjY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA5ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzk3MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzk3MDpcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxcbjM5NzE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzk3MjpcXHRcXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjM5NzM6XFx0fVxcbjM5NzQ6XFx0XFxuMzk3NTpcXHRzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMzk3NjpcXHR7XFxuMzk3NzpcXHRcXHQvKiBGb2xpbyBtdXN0IGJlIGZyb3plbi4gKi9cXG4zOTc4OlxcdFxcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pO1xcbjM5Nzk6XFx0XFxuMzk4MDpcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpXFxuMzk4MTpcXHRcXHRcXHRyZXR1cm47XFxuMzk4MjpcXHRcXG4zOTgzOlxcdFxcdC8qXFxuMzk4NDpcXHRcXHQgKiBPcmRlci0xIGZvbGlvcyBoYXZlIG5vIF9kZWZlcnJlZF9saXN0LiBUaGUgZmxhZyBpcyBvbmx5IGV2ZXIgc2V0XFxuMzk4NTpcXHRcXHQgKiBvbiBmb2xpb3MgdGhhdCBkbywgc28gdGhlIGxpc3QgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIgdGhlIGZsYWcuXFxuMzk4NjpcXHRcXHQgKi9cXG4zOTg3OlxcdFxcdFZNX1dBUk5fT05fRk9MSU8oIWxpc3RfZW1wdHkoXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcXG4zOTg4OlxcdFxcbjM5ODk6XFx0XFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuMzk5MDpcXHRcXHRtb2RfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSxcXG4zOTkxOlxcdFxcdFxcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcXG4zOTkyOlxcdH1cXG4zOTkzOlxcdFxcbjM5OTQ6XFx0c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4zOTk1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4zOTk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGJvb2wgZG9fbHJ1LFxcbjM5OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBlbnVtIHNwbGl0X3R5cGUgc3BsaXRfdHlwZSxcXG4zOTk4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcGdvZmZfdCBlbmQsIGludCAqbnJfc2htZW1fZHJvcHBlZClcXG4zOTk5OlxcdHtcXG40MDAwOlxcdFxcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XFxuNDAwMTpcXHRcXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XFxuNDAwMjpcXHRcXHRpbnQgcmV0ID0gMDtcXG40MDAzOlxcdFxcbjQwMDQ6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFtYXBwaW5nIFxcdTAwMjZcXHUwMDI2IGVuZCk7XFxuNDAwNTpcXHRcXG40MDA2OlxcdFxcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICsgMSkpIHtcXG40MDA3OlxcdFxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xcbjQwMDg6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjQwMDk6XFx0XFxuNDAxMDpcXHRcXHRcXHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG40MDExOlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbjQwMTI6XFx0XFxuNDAxMzpcXHRcXHRcXHQvKlxcbjQwMTQ6XFx0XFx0XFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxcbjQwMTU6XFx0XFx0XFx0ICogc3BsaXRzIGl0LCBzbyB0aGUgdW5xdWV1ZSBhYm92ZSBmaW5kcyBhbiBlbXB0eSBsaXN0IGFuZFxcbjQwMTY6XFx0XFx0XFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxcbjQwMTc6XFx0XFx0XFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXFxuNDAxODpcXHRcXHRcXHQgKi9cXG40MDE5OlxcdFxcdFxcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbjQwMjA6XFx0XFxuNDAyMTpcXHRcXHRcXHRpZiAobWFwcGluZykge1xcbjQwMjI6XFx0XFx0XFx0XFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjQwMjM6XFx0XFxuNDAyNDpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuNDAyNTpcXHRcXHRcXHRcXHQgICAgbmV3X29yZGVyIFxcdTAwM2MgSFBBR0VfUE1EX09SREVSKSB7XFxuNDAyNjpcXHRcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSkge1xcbjQwMjc6XFx0XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLFxcbjQwMjg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TlJfU0hNRU1fVEhQUywgLW5yKTtcXG40MDI5OlxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuNDAzMDpcXHRcXHRcXHRcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXFxuNDAzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHROUl9GSUxFX1RIUFMsIC1ucik7XFxuNDAzMjpcXHRcXHRcXHRcXHRcXHR9XFxuNDAzMzpcXHRcXHRcXHRcXHR9XFxuNDAzNDpcXHRcXHRcXHR9XFxuNDAzNTpcXHRcXG40MDM2OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG40MDM3OlxcdFxcdFxcdFxcdGlmIChtYXBwaW5nKSB7XFxuNDAzODpcXHRcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8obWFwcGluZywgZm9saW8pO1xcbjQwMzk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQxOjIwLjIyNjg0MTIxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0NjU4NzM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBIdWdlIFBhZ2UgSXNzdWUqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgc3VzcGVjdGVkIGh1Z2UgcGFnZSBpc3N1ZSBhbmQgSSd2ZSBnb3QgYSBodW5jaCB3aGVyZSB0byBzdGFydCBsb29raW5nLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHdoYXQgd2UncmUgc2VlaW5nLCBJIHRoaW5rIGl0J3Mgd29ydGggYSBjbG9zZSBleGFtaW5hdGlvbiBvZiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCB3aXRoaW4gdGhlIGBtbS9odWdlX21lbW9yeS5jYCBmaWxlLiBNeSByZWFzb25pbmcgaXMgdGhhdCB1bnF1ZXVpbmcgb3BlcmF0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBpbnZvbHZlZCBpbiBkZWZlcnJlZCBzcGxpdHMsIGFyZSBvZnRlbiBjcml0aWNhbCBwb2ludHMgd2hlcmUgZnJhZ21lbnRhdGlvbiBvciBpbmNvcnJlY3QgYWNjb3VudGluZyBjb3VsZCBpbnRyb2R1Y2UgdGhlIGtpbmQgb2YgYmVoYXZpb3Igd2UncmUgb2JzZXJ2aW5nLiBJdCdzIGEgcHJpbWUgc3VzcGVjdCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHN1YnRsZSBidWdzIHJlbGF0ZWQgdG8gaG93IHRoZSBodWdlIHBhZ2Ugc3RydWN0dXJlcyBhcmUgbWFuYWdlZCBkdXJpbmcgc3BsaXQgb3BlcmF0aW9ucy4gVGhpcyBhcmVhIGlzIGtub3duIGZvciBiZWluZyB0cmlja3ksIHNvIGl0J3MgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHRyYWNpbmcgdGhyb3VnaCB0aGUgY29kZS4gSSdtIGZvY3VzaW5nIHRoZXJlIGJlY2F1c2UgaXQgZGVhbHMgd2l0aCB0aGUgc3BsaXR0aW5nIG9mIHRoZSBodWdlIHBhZ2VzIHdoaWNoIGlzIGEgY29tbW9uIHBsYWNlIHRvIGhhdmUgaXNzdWVzIHdpdGggaW4gY29tcGxleCBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MjIuNjczNDMwNTA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDUxMDpcXHQgKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcXG40NTExOlxcdCAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XFxuNDUxMjpcXHQgKiBfZGVmZXJyZWRfbGlzdCBtaWdodCBiZSBpbiB1c2Ugb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpJ3MgdW5sb2NrZWRcXG40NTEzOlxcdCAqIG9uLXN0YWNrIGxpc3QuXFxuNDUxNDpcXHQgKlxcbjQ1MTU6XFx0ICogVGhlIGxpc3RfbHJ1IHN1Ymxpc3QgaXMgZGV0ZXJtaW5lZCBieSBmb2xpbydzIG1lbWNnOiBpdCBpcyB0aGVyZWZvcmVcXG40NTE2OlxcdCAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cXG40NTE3OlxcdCAqL1xcbjQ1MTg6XFx0Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG40NTE5OlxcdHtcXG40NTIwOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG40NTIxOlxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcXG40NTIyOlxcdFxcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xcbjQ1MjM6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTI0OlxcdFxcdGJvb2wgdW5xdWV1ZWQgPSBmYWxzZTtcXG40NTI1OlxcdFxcbjQ1MjY6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbjQ1Mjc6XFx0XFx0V0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKTtcXG40NTI4OlxcdFxcbjQ1Mjk6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1MzA6XFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuNDUzMTpcXHRcXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcXHUwMDI2bWVtY2csIFxcdTAwMjZmbGFncyk7XFxuNDUzMjpcXHRcXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxuNDUzMzpcXHRcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG40NTM0OlxcdFxcdFxcdHVucXVldWVkID0gdHJ1ZTtcXG40NTM1OlxcdFxcdH1cXG40NTM2OlxcdFxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG40NTM3OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjQ1Mzg6XFx0XFxuNDUzOTpcXHRcXHRyZXR1cm4gdW5xdWV1ZWQ7XFx0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xcbjQ1NDA6XFx0fVxcbjQ1NDE6XFx0XFxuNDU0MjpcXHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbid0IGNsZWFyIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyAqL1xcbjQ1NDM6XFx0dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuNDU0NDpcXHR7XFxuNDU0NTpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XFxuNDU0NjpcXHRcXHRpbnQgbmlkO1xcbjQ1NDc6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQ1NDg6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MToyMi42NzM2MTk0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk4MzMxODIxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRm9saW8gUmVzZXQgYW5kIERlZmVycmVkIFNwbGl0dGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIGludHJvZHVjZXMgc29tZSBydW50aW1lIGFzc2VydGlvbnMuIEkgc2VlIGBWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKWAgYW5kIGBWTV9XQVJOX09OX0ZPTElPKCFsaXN0X2VtcHR5KFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pYC4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLiBUaGUgY29tbWVudCBzcGVjaWZpY2FsbHkgaGlnaGxpZ2h0cyB0aGF0IG9yZGVyLTEgZm9saW9zIGRvbid0IHVzZSBgX2RlZmVycmVkX2xpc3RgLCBhbmQgdGhlIGZsYWcgaXMgc2V0ICpvbmx5KiB3aGVuIHRoZSBsaXN0IGlzIGluIHVzZSwgd2hpY2ggaXMgd2h5IHRoZSBjaGVjayBpcyBtYWRlLiBUaGF0IG1ha2VzIHNlbnNlIGZyb20gYSBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBhbmQgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgLiAgU3BlY2lmaWNhbGx5LCBpbiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYF9fbGlzdF9scnVfZGVsYCByZW1vdmVzIHRoZSBmb2xpbyBmcm9tIHRoZSBkZWZlcnJlZCBsaXN0LiBUaGUgcXVlc3Rpb24gaXM6IFdoYXQgZG9lcyB0aGF0IGxpc3QgZGVsZXRpb24gYWN0dWFsbHkgZG8/IERvZXMgaXQgcmVpbml0aWFsaXplIHRoZSBsaXN0IGhlYWQgb3IganVzdCByZW1vdmUgaXQ/ICBJIG5lZWQgdG8gY2hlY2sgaG93IGBfX2xpc3RfbHJ1X2RlbGAgd29ya3MsIGJlY2F1c2UgSSBuZWVkIHRvIGtub3cgaWYgdGhlIHVuZGVybHlpbmcgbGlzdCBvcGVyYXRpb24gaXMgYSBgbGlzdF9kZWxgIG9yIGEgYGxpc3RfZGVsX2luaXRgLiBUaGlzIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3RhdGUgb2YgdGhlIGZvbGlvIGFmdGVyIGJlaW5nIHVucXVldWVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgX19saXN0X2xydV9kZWxgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjU3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MjUuNjU2OTQwMjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNDgxODUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2xpc3RfbHJ1X2RlbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xpc3RfbHJ1Lmg9MTQ4PWJvb2wgX19saXN0X2xydV9hZGQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXFxuaW5jbHVkZS9saW51eC9saXN0X2xydS5oLTE0OS1cXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbmluY2x1ZGUvbGludXgvbGlzdF9scnUuaDoxNTA6Ym9vbCBfX2xpc3RfbHJ1X2RlbChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG5pbmNsdWRlL2xpbnV4L2xpc3RfbHJ1LmgtMTUxLVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTE4PWJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1MzEtXFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXFx1MDAyNm1lbWNnLCBcXHUwMDI2ZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUzMjpcXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy00NTMzLVxcdFxcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbi0tXFxubW0vbGlzdF9scnUuYz0yMDg9RVhQT1JUX1NZTUJPTF9HUEwobGlzdF9scnVfYWRkKTtcXG5tbS9saXN0X2xydS5jLTIwOS1cXG5tbS9saXN0X2xydS5jOjIxMDpib29sIF9fbGlzdF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbm1tL2xpc3RfbHJ1LmMtMjExLVxcdFxcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBpbnQgbmlkKVxcbi0tXFxubW0vbGlzdF9scnUuYz0yNjU9Ym9vbCBsaXN0X2xydV9kZWwoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTI3MS1cXHRsID0gbGlzdF9scnVfbG9jayhscnUsIG5pZCwgXFx1MDAyNm1lbWNnKTtcXG5tbS9saXN0X2xydS5jOjI3MjpcXHRyZXQgPSBfX2xpc3RfbHJ1X2RlbChscnUsIGwsIGl0ZW0sIG5pZCk7XFxubW0vbGlzdF9scnUuYy0yNzMtXFx0bGlzdF9scnVfdW5sb2NrKGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MToyOC4zODE3NjM0MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MjE1MTk0Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbW0vbGlzdF9scnUuY2AgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9saXN0X2xydS5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjEwLiBUaGF0IHBhcnRpY3VsYXIgc3BvdCBpcyBsaWtlbHkgd2hlcmUgc29tZSBpbnRlcmVzdGluZyBsb2dpYyByZXNpZGVzLCBwcm9iYWJseSBkZWFsaW5nIHdpdGggdGhlIG1hbmFnZW1lbnQgb2YgdGhlIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgbGlzdC4gSSdtIGd1ZXNzaW5nIGl0IG1pZ2h0IGludm9sdmUgaW5zZXJ0aW9uLCBkZWxldGlvbiwgb3IgcGVyaGFwcyBldmVuIGFjY2VzcyBvZiBlbGVtZW50cyB3aXRoaW4gdGhlIGxpc3QsIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSByZXZlYWxzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgaW4gdGhlIGFsZ29yaXRobXMgdXNlZCwgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBhbmQgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtZW1vcnkgc3Vic3lzdGVtcy4gTGluZSAyMTAgaXMgbXkgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJJ2xsIGJlIHByZXBhcmVkIHRvIGZvbGxvdyB0aGUgdGhyZWFkcyBvZiBsb2dpYyB3aGVyZXZlciB0aGV5IGxlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0OTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTozNi41OTY5NjI2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9saXN0X2xydS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRib29sIF9fbGlzdF9scnVfZGVsKHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbiAyMTE6XFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIGludCBuaWQpXFxuIDIxMjpcXHR7XFxuIDIxMzpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoaXRlbSkpIHtcXG4gMjE0OlxcdFxcdFxcdGxpc3RfZGVsX2luaXQoaXRlbSk7XFxuIDIxNTpcXHRcXHRcXHRsLVxcdTAwM2Vucl9pdGVtcy0tO1xcbiAyMTY6XFx0XFx0XFx0YXRvbWljX2xvbmdfZGVjKFxcdTAwMjZscnUtXFx1MDAzZW5vZGVbbmlkXS5ucl9pdGVtcyk7XFxuIDIxNzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjE4OlxcdFxcdH1cXG4gMjE5OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjIwOlxcdH1cXG4gMjIxOlxcdFxcbiAyMjI6XFx0LyogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgbWVtY2cgbGlmZXRpbWUuICovXFxuIDIyMzpcXHRib29sIGxpc3RfbHJ1X2FkZChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgaW50IG5pZCxcXG4gMjI0OlxcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAyMjU6XFx0e1xcbiAyMjY6XFx0XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbDtcXG4gMjI3OlxcdFxcdGJvb2wgcmV0O1xcbiAyMjg6XFx0XFxuIDIyOTpcXHRcXHRsID0gbGlzdF9scnVfbG9jayhscnUsIG5pZCwgXFx1MDAyNm1lbWNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6MzYuNTk3MDY1MTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIyNTEyMzk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWVwIERpdmUgaW50byBGb2xpbyBSZWZjb3VudHMgYW5kIERlZmVycmVkIFNwbGl0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCByZWFjdGlvbiBoZXJlIGlzIHRvIHplcm8gaW4gb24gdGhlc2UgcmVmY291bnQgb3BlcmF0aW9ucyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2l0aGluIHRoZSBmb2xpbyBsaWZlY3ljbGUuIEknbSBzZWVpbmcgYSBjb2RlIHBhdGggaW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgd2hlcmUgdGhlcmUgc2VlbXMgdG8gYmUgYSBzdWJ0bGUgZGFuY2Ugd2l0aCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAuIEknbSBpbW1lZGlhdGVseSBjb25jZXJuZWQgYmVjYXVzZSBJIHNlZSBhIHBvdGVudGlhbCByYWNlLiBJcyB0aGUgZm9saW8gdHJ1bHkgZnJvemVuICpiZWZvcmUqIHdlIGNhbGwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgPyBUaGUgY29kZSBzdWdnZXN0cyB0aGUgcmVmY291bnQgaXMgc2V0IHRvIHplcm8gZHVlIHRvIGBmb2xpb19yZWZfZnJlZXplYC5cblxuVGhhdCdzIGEgcmVkIGZsYWcuIEkga25vdyBgZm9saW9fcmVmX2ZyZWV6ZWAgc2V0cyB0aGUgcmVmY291bnQgdG8gemVyby4gU28gd2hlbiB0aGF0IGNoZWNrIGhhcHBlbnMsIGBmb2xpb19yZWZfY291bnQoZm9saW8pYCBpcyBnb2luZyB0byBiZSB6ZXJvLiBUaGUgYFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pYCBjaGVjayAqc2hvdWxkKiBiZSB3YXJuaW5nLlxuXG5UaGlzIGlzIHdoZXJlIEkgbmVlZCB0byByZWFsbHkgZGlnIGluLiBMZXQncyBsb29rIGF0IGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLiAgSSBpbW1lZGlhdGVseSBzZWUgdGhlIGBXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7YCBhdCBsaW5lIDQ1MjYuIFNvIHRoZSByZWZjb3VudCBpcyB6ZXJvLiBBZ2FpbiwgdGhpcyBpcyBhIHZlcnkgaW1wb3J0YW50IHBvaW50LiBUaGlzIGlzIHRoZSBzdGF0ZSBvZiB0aGUgYGZvbGlvYCB3aGVuIHdlJ3JlIHB1bGxpbmcgaXQgZnJvbSB0aGUgZGVmZXJyZWQgcXVldWUuIFRoZSBmYWN0IHRoYXQgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgICphbHNvKiBpbmNsdWRlcyBhbiBhc3NlcnRpb24gd2l0aCBgVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbylgIGlzIGEgcmVhbGx5IGNydWNpYWwgcG9pbnQuXG5cbldlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBoZXJlLCBzcGVjaWZpY2FsbHkgaHVnZSBwYWdlcyBhbmQgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgaW52b2x2ZWQsIGFuZCB0aGF0J3MgY3JpdGljYWwgYmVjYXVzZSBUSFAvbVRIUCBzcGxpdHRpbmcgaXMgaGFwcGVuaW5nIGhlcmUuIEFuZCB0aGF0J3MgYWxsIG92ZXIgdGhlIHBsYWNlISBXZSdyZSB0YWxraW5nIGFib3V0IHVzZXJzcGFjZSBpbnRlcmFjdGlvbnMgdGhyb3VnaCBzeXNjYWxscy4gIGBtYWR2aXNlYCwgYHNwbGl0X2h1Z2VfcGFnZWAsIG1lbW9yeSBhbGxvY2F0aW9uLCB1bm1hcHBpbmcsIG1wcm90ZWN0LCBwcm9jZXNzIGV4aXQsIHJlY2xhaW0g4oCTIGFsbCBvZiBpdCB0b3VjaGVzIHRoaXMgY29kZS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBtbS9odWdlX21lbW9yeS5jYCBpcyBjb21waWxlZCBhbmQgbGlua2VkIGluIG15IEtjb25maWcuIEkgd2FudCB0byBiZSBjZXJ0YWluIHRoaXMgaXNuJ3QgY29uZGl0aW9uYWwsIGJlY2F1c2UgaWYgaXQgaXMsIHRoaXMgd2hvbGUgZGlzY3Vzc2lvbiBjaGFuZ2VzLCBidXQgYmFzZWQgb24gYWxsIG9mIHRoZSBmdW5jdGlvbnMgdXNlZCwgSSB3b3VsZCBleHBlY3QgdGhhdCB0aGlzIGNvZGUgaXMgY29tcGlsZWQgaW4hIFRoZSBpbXBsaWNhdGlvbnMgb2YgZXZlbiBhIHN1YnRsZSBidWcgaW4gdGhpcyBhcmVhIGFyZSBzZXZlcmUsIHJhbmdpbmcgZnJvbSBtZW1vcnkgY29ycnVwdGlvbiB0byBkZW5pYWwgb2Ygc2VydmljZS4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlc2UgaW50ZXJhY3Rpb25zLCBhbmQsIGdpdmVuIHRoZSByZWZjb3VudCBtYW5pcHVsYXRpb25zLCBJJ20gZ29pbmcgdG8gaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9ja2luZyBpcyBhaXItdGlnaHQuIEkgd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGF0IGFsbCBjb25zdW1lcnMgb2YgYGZvbGlvYCBhcmUgYXdhcmUgb2YgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb21lIHdpdGggdGhpcyB1cGRhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTo0MS44MjIxOTQ4NjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTQ5Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfbWVtb3J5XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMT1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMjpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAzLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQxOjQxLjkwMDc1MTAzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQzMzI3MTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSB0aGlua2VyOlxuXG4qKkNoZWNraW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG1tL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBlbnRyeSBmb3IgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLCB3aGljaCBpcyB0aGUgY2Fub25pY2FsIHBsYWNlIGZvciBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbnMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgb3B0aW9ucyBkaXJlY3RseSBsaW5rZWQgdG8gaXQuIFRoaXMgd2lsbCBwcm92aWRlIGEgZmlybSBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9yIG9wdGltaXphdGlvbiBpbiB0aGlzIGFyZWEuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzLCBzdGFydCB3aXRoIHRoZSBzb3VyY2UuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTo0My42NDQwODE1NjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTE4MTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyNz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODI5LVxcbm1tL0tjb25maWc6ODMwOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMS1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTo0My43NzkyNjg1NjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUyOTg2MjE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyBzcGVjaWZpYyBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEJhc2VkIG9uIG15IHByZXZpb3VzIGRlYnVnZ2luZyBzdGVwcyBhbmQga25vd2xlZGdlIG9mIHRoZSByZWxldmFudCBzdWJzeXN0ZW1zLCBJIGhhdmUgYSBodW5jaCBhYm91dCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBvcHRpb24uIFRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUsIEknbSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgdGhlIG1haW4gS2NvbmZpZyBmaWxlIGZvciB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGludG8gYG1tL0tjb25maWdgIGFyb3VuZCBsaW5lIDgzMC4gR2l2ZW4gdGhlIGNvbXBsZXhpdGllcywgdGhpcyBsb2NhdGlvbiBzaG91bGQgaG9sZCB0aGUgZGV0YWlscy4gVGhpcyBzaG91bGQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24gaW50byB0aGUgY29uZGl0aW9uYWwgbG9naWMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgdmFsdWVzIHRoYXQgdWx0aW1hdGVseSBzaGFwZSB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZ3Jhc3Agd2hldGhlciBhbnkgcmVsZXZhbnQgZWxlbWVudHMgYXJlIGF2YWlsYWJsZSBmb3IgbXkgcHVycG9zZXMsIGFuZCB0cmFjZSBhbnkgZGVwZW5kZW5jaWVzIGlmIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQxOjQ2LjMwOTEzMzc3OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MjU6XFx0XFx0ICBtZW1vcnkgY29uc3RyYWluZWQuXFxuIDgyNjpcXHRcXG4gODI3OlxcdGNvbmZpZyBNTV9JRFxcbiA4Mjg6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4Mjk6XFx0XFxuIDgzMDpcXHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDgzMTpcXHRcXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbiA4MzI6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gODMzOlxcdFxcdHNlbGVjdCBDT01QQUNUSU9OXFxuIDgzNDpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuIDgzNTpcXHRcXHRzZWxlY3QgTU1fSURcXG4gODM2OlxcdFxcdGhlbHBcXG4gODM3OlxcdFxcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxcbiA4Mzg6XFx0XFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXFxuIDgzOTpcXHRcXHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxcbiA4NDA6XFx0XFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxcbiA4NDE6XFx0XFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXFxuIDg0MjpcXHRcXHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cXG4gODQzOlxcdFxcbiA4NDQ6XFx0XFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cXG4gODQ1OlxcdFxcbiA4NDY6XFx0aWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODQ3OlxcdFxcbiA4NDg6XFx0Y2hvaWNlXFxuIDg0OTpcXHRcXHRwcm9tcHQgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcXFwiXFxuIDg1MDpcXHRcXHRkZWZhdWx0IFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbiA4NTE6XFx0XFx0aGVscFxcbiA4NTI6XFx0XFx0ICBTZWxlY3RzIHRoZSBzeXNmcyBkZWZhdWx0cyBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydC5cXG4gODUzOlxcdFxcbiA4NTQ6XFx0XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTo0Ni4zMDkyOTE2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMwMTEwNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlIE1lbW9yeSBTcGxpdHRpbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW5zIGFyb3VuZCBtZW1vcnkgc3BsaXR0aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBodWdlIG1lbW9yeSBjb2RlIChgbW0vaHVnZV9tZW1vcnkuY2ApLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgKnRyaWdnZXIqIG9yIGFyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgZGVmZXJyZWQgc3BsaXR0aW5nIG9mIGh1Z2UgcGFnZXMuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGJlY2F1c2UgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBkZWZlcnJlZCB1bnF1ZXVpbmcgcHJvY2Vzcy4gSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBzcGxpdHRpbmcgaHVnZSBwYWdlcywgc28gSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGNhbGxlcnMgb2YgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gS25vd2luZyB3aG8gY2FsbHMgdGhvc2Ugd2lsbCBzaGVkIGxpZ2h0IG9uIHdoYXQgdHJpZ2dlcnMgYSBzcGxpdCBhbmQgd2hlbiB0aGUga2VybmVsIGRlY2lkZXMgdGhhdCBhIGh1Z2UgcGFnZSByZWFsbHkgbmVlZHMgdG8gYmUgYnJva2VuIGRvd24uIFRoYXQgc2hvdWxkIHRlbGwgbWUgc29tZXRoaW5nIGFib3V0IGhvdyB0byBpbXByb3ZlIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI0NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6NDguMjM5NDA2NTA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg3Nzg0MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTM5NzU9c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTkzLVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk5NDpzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk5NS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHhhX3N0YXRlICp4YXMsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQxNDc9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzYtXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc3OlxcdHJldCA9IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNnhhcywgbWFwcGluZyxcXG5tbS9odWdlX21lbW9yeS5jLTQyNzgtXFx0XFx0XFx0XFx0XFx0XFx0dHJ1ZSwgbGlzdCwgc3BsaXRfdHlwZSwgZW5kLCBcXHUwMDI2bnJfc2htZW1fZHJvcHBlZCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQzNjU9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzNzctXFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcXG5tbS9odWdlX21lbW9yeS5jOjQzNzg6XFx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jLTQzNzktXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDE6NTAuNzI3MjAxMTg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NjE2MDY2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBwYXRoIHRoYXQgbGVhZHMgdG8gYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKmNhbGxlZCogZnJvbT8gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBjYWxsIHNpdGVzLiBJIGtub3cgdGhpcyBsaWtlbHkgaW52b2x2ZXMgYSBkZWVwZXIgZGl2ZSwgbWF5YmUgY29kZSBzZWFyY2hpbmcgb3IgdXNpbmcgYSBkZWJ1Z2dlciB0byBzdGVwIHRocm91Z2ggZXhlY3V0aW9uLCBkZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRoZSBjb250ZXh0IGFyb3VuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGJlIGVzc2VudGlhbCB0byBkZWNpcGhlcmluZyB0aGUgbGFyZ2VyIGZ1bmN0aW9uYWxpdHkgdGhpcyBpcyBpbnZvbHZlZCBpbi4gVGhhdCdsbCBhbGxvdyBtZSB0byBwcm9wZXJseSB1bmRlcnN0YW5kIHRoZSBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBmdW5jdGlvbidzIHJvbGUgaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MTo1Ni4zODg4MTA4NjNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTUwODIxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OT1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTA0LS8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NTA1OiAqIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlzIG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHk6XFxubW0vaHVnZV9tZW1vcnkuYy00NTA2LSAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTE3LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxODpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxOS17XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTcyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL2ludGVybmFsLmgtNzMzLVxcbm1tL2ludGVybmFsLmg6NzM0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmgtNzM1LXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTc0Ny1cXG5tbS9pbnRlcm5hbC5oOjc0ODpcXHRyZXR1cm4gX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9pbnRlcm5hbC5oLTc0OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQxOjU4Ljg4Mzg5NzkyMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjU0MTkxMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgQ2FsbCBTaXRlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgZXhhY3RseSBpcyBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgYmVpbmcgaW52b2tlZD9cIiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIGlzIGNydWNpYWwgZm9yIGdyYXNwaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHdpdGhpbiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIGdhaW4gYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCB3b3JrZmxvdyB0aGF0IHJlbGllcyBvbiBpdC4gUGlucG9pbnRpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgd2hldGhlciBpdCdzIHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2UgdHVuaW5nLCBidWcgZml4aW5nLCBvciBzaW1wbHkgdW5kZXJzdGFuZGluZyBhIHNwZWNpZmljIG1vZHVsZSdzIGJlaGF2aW9yLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXAsIG9yIG15IElERSdzIGNhbGwgaGllcmFyY2h5IGZlYXR1cmUsIGFuZCBnZXQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjowNC4xMzgwOTIwNDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjEyNDQ3MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9mb2xpby5jPTkxPXZvaWQgX19mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtMTAzLVxcdHBhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbyk7XFxubW0vZm9saW8uYzoxMDQ6XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vZm9saW8uYy0xMDUtXFx0bWVtX2Nncm91cF91bmNoYXJnZShmb2xpbyk7XFxuLS1cXG5tbS9mb2xpby5jPTE1Mj1zdGF0aWMgdm9pZCBmb2xpb19iYXRjaF9tb3ZlX2xydShzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgbW92ZV9mbl90IG1vdmVfZm4pXFxuLS1cXG5tbS9mb2xpby5jLTE4Ni1cXHRcXHRcXHRfX2ZvbGlvX2NsZWFyX3VuZXZpY3RhYmxlKGZvbGlvKTtcXG5tbS9mb2xpby5jOjE4NzpcXHRcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9mb2xpby5jLTE4OC1cXHRcXHRcXHRmYmF0Y2gtXFx1MDAzZWZvbGlvc1tpXSA9IE5VTEw7XFxuLS1cXG5tbS9mb2xpby5jPTk4ND12b2lkIGZvbGlvc19wdXRfcmVmcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcywgdW5zaWduZWQgaW50ICpyZWZzKVxcbi0tXFxubW0vZm9saW8uYy0xMDIyLVxcdFxcdH1cXG5tbS9mb2xpby5jOjEwMjM6XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vZm9saW8uYy0xMDI0LVxcdFxcdF9fcGFnZV9jYWNoZV9yZWxlYXNlKGZvbGlvLCBcXHUwMDI2bHJ1dmVjLCBcXHUwMDI2ZmxhZ3MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zOTk0PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQwMTAtXFx0XFx0LyogVGFrZSBvZmYgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MDExOlxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDAxMi1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OT1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTA0LS8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NTA1OiAqIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlzIG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHk6XFxubW0vaHVnZV9tZW1vcnkuYzo0NTA2OiAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwNy0gKiBsaW1pdHMgaXRzIGNhbGxzIHRvIHRob3NlIGZvbGlvcyB3aGljaCBtYXkgaGF2ZSBhIF9kZWZlcnJlZF9saXN0IGZvclxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTA5LSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0NTEwOiAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMS0gKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTE3LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxODpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxOS17XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTcyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL2ludGVybmFsLmgtNzMzLVxcbm1tL2ludGVybmFsLmg6NzM0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmg6NzM1OnN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaW50ZXJuYWwuaC03MzYte1xcbi0tXFxubW0vaW50ZXJuYWwuaC03NDctXFxubW0vaW50ZXJuYWwuaDo3NDg6XFx0cmV0dXJuIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vaW50ZXJuYWwuaC03NDktfVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI2OT12b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0zMDQtXFxubW0vbWVtY29udHJvbC12MS5jOjMwNTpcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMzA2LVxcdGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gMDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MzkxPXN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0MjgtXFxubW0vbWVtY29udHJvbC5jOjU0Mjk6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pKTtcXG5tbS9tZW1jb250cm9sLmMtNTQzMC1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTU2OD12b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYwOS1cXHQvKiBXYXJuaW5nIHNob3VsZCBuZXZlciBoYXBwZW4sIHNvIGRvbid0IHdvcnJ5IGFib3V0IHJlZmNvdW50IG5vbi0wICovXFxubW0vbWVtY29udHJvbC5jOjU2MTA6XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQob2xkKSk7XFxubW0vbWVtY29udHJvbC5jLTU2MTEtXFx0b2xkLVxcdTAwM2VtZW1jZ19kYXRhID0gMDtcXG4tLVxcbm1tL21pZ3JhdGUuYz01ODM9c3RhdGljIGludCBfX2ZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21pZ3JhdGUuYy01OTctXFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxubW0vbWlncmF0ZS5jOjU5ODpcXHRcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9taWdyYXRlLmMtNTk5LVxcdFxcdFxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgZXhwZWN0ZWRfY291bnQpO1xcbi0tXFxubW0vbWlncmF0ZS5jLTYzMC1cXHQvKiBUYWtlIG9mZiBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xcbm1tL21pZ3JhdGUuYzo2MzE6XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vbWlncmF0ZS5jLTYzMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwODE9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTUzNC1cXG5tbS92bXNjYW4uYzoxNTM1OlxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTE1MzYtXFx0XFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcXHUwMDI2ZnJlZV9mb2xpb3MsIGZvbGlvKSA9PSAwKSB7XFxuLS1cXG5tbS92bXNjYW4uYz0xODk0PXN0YXRpYyB1bnNpZ25lZCBpbnQgbW92ZV9mb2xpb3NfdG9fbHJ1KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0xOTI5LVxcbm1tL3Ztc2Nhbi5jOjE5MzA6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vdm1zY2FuLmMtMTkzMS1cXHRcXHRcXHRpZiAoZm9saW9fYmF0Y2hfYWRkKFxcdTAwMjZmcmVlX2ZvbGlvcywgZm9saW8pID09IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDI6MDYuNzU5NTU2MTQyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NjQ2MDI3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZvY3VzIFN5bWJvbHMgaW4gdGhlIEh1Z2UgTWVtb3J5IFN1YnN5c3RlbSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBGb2N1c1N5bWJvbHMgZ3VpZGVsaW5lcyDigJMgYXZvaWQgdGhlIG5vaXNlLCBhaW0gZm9yIHRoZSBzaWduYWwuIFNvLCBJIHNob3VsZG4ndCBsaXN0IGV2ZXJ5IHNpbmdsZSBtZW1vcnkgYWxsb2NhdG9yIGNhbGwsIGJ1dCBpbnN0ZWFkLCB6ZXJvIGluIG9uIHRoZSAqc3BlY2lmaWMqIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbXBsZW1lbnRpbmcgb3IgZGlyZWN0bHkgdHJpZ2dlcmluZyB0aGUgaHVnZSBwYWdlIHNwbGl0dGluZyBsb2dpYywgb3IgdGhvc2UgdGhhdCBhcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgZmVhdHVyZS4gVGhhdCdzIHRoZSBrZXkuXG5cblJpZ2h0LCBzbyBmb3IgdGhlIGBtbS9odWdlX21lbW9yeS5jYCBmaWxlLCB0aGUgaW5pdGlhbCBsaXN0IGdpdmVzIHVzOlxuXG4qICAgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGBcbiogICBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgKHdoaWNoIGlzIHN0YXRpYyBidXQsIGltcG9ydGFudGx5LCBpbmxpbmVkL3N0YXRpYyB3aXRoaW4gdGhpcyBmaWxlIGFuZCBjYWxsZWQgYnkgdHdvIGtleSBmdW5jdGlvbnMpXG4qICAgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGBcbiogICBBbmQgdGhlbiwgdGhlIG5vbi1zdGF0aWMgb25lcyByZWxhdGVkIHRvIHNwbGl0dGluZzogYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYC5cblxuVGhhdCBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgd2FudCB0byBjaGVjayB0byBiZSBzdXJlLCBzbywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBzcGxpdF9mb2xpb190b19saXN0YCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLCB0byBiZSBzdXJlIG9mIHRoZSBsaXN0LiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIzNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjowOS43MjQxNjI2NTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDc2MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmVycmVkX3NwbGl0X3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz03NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG5tbS9odWdlX21lbW9yeS5jLTc2LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XFxubW0vaHVnZV9tZW1vcnkuYzo3NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNzgtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMDY0PXN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEwNzktXFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZWNvdW50X29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9jb3VudDtcXG5tbS9odWdlX21lbW9yeS5jOjEwODA6XFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XFxubW0vaHVnZV9tZW1vcnkuYy0xMDgxLVxcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mzk5ND1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MDEzLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0MDE0OlxcdFxcdCAqIGRlZmVycmVkX3NwbGl0X3NjYW4oKSB0YWtlcyB0aGUgZm9saW8gb2ZmIHRoZSBxdWV1ZSBiZWZvcmUgaXRcXG5tbS9odWdlX21lbW9yeS5jLTQwMTUtXFx0XFx0ICogc3BsaXRzIGl0LCBzbyB0aGUgdW5xdWV1ZSBhYm92ZSBmaW5kcyBhbiBlbXB0eSBsaXN0IGFuZFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDk5PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1MTEtICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG5tbS9odWdlX21lbW9yeS5jOjQ1MTI6ICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSdzIHVubG9ja2VkXFxubW0vaHVnZV9tZW1vcnkuYy00NTEzLSAqIG9uLXN0YWNrIGxpc3QuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2Mjg9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2NDItXFxubW0vaHVnZV9tZW1vcnkuYzo0NjQzOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxubW0vaHVnZV9tZW1vcnkuYy00NjQ0LVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS9taWdyYXRlLmM9MTgxMT1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xODU3LVxcdFxcdFxcdCAqIE9ubHkgY2hlY2sgaXQgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBsaXN0Llxcbm1tL21pZ3JhdGUuYzoxODU4OlxcdFxcdFxcdCAqIFNpbmNlIHRoZSBmb2xpbyBjYW4gYmUgb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpXFxubW0vbWlncmF0ZS5jLTE4NTktXFx0XFx0XFx0ICogbG9jYWwgbGlzdCBhbmQgcmVtb3ZpbmcgaXQgY2FuIGNhdXNlIHRoZSBsb2NhbCBsaXN0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQyOjA5LjgwMTI0MzczMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTY5MjI0MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgc3BsaXRfZm9saW9fdG9fbGlzdGAgYW5kIGl0cyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGBzcGxpdF9mb2xpb190b19saXN0YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBmdW5jdGlvbidzIHVzYWdl4oCUYSBxdWljayBzY2FuIGZvciBpdHMgY2FsbGVycyBpcyBpbiBvcmRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgbm90IGp1c3QgKndoYXQqIHRoaXMgZnVuY3Rpb24gZG9lcyBidXQgYWxzbyAqaG93KiBpdCdzIGludGVncmF0ZWQgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbSBsb29raW5nIGZvciB0aGUgY29udGV4dCBpbiB3aGljaCBgc3BsaXRfZm9saW9fdG9fbGlzdGAgaXMgdXNlZC4gV2hhdCBhc3N1bXB0aW9ucyBhcmUgYmFrZWQgaW50byBpdHMgZGVzaWduPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgaGF2ZW4ndCBiZWVuIGFkZXF1YXRlbHkgYWRkcmVzc2VkIGluIHRoZSBjYWxsaW5nIGNvZGU/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1hcCBvZiB0aGUgZGF0YSBmbG93IGFuZCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24uIFRoaXMgYWxzbyBzZXJ2ZXMgdGhlIHB1cnBvc2Ugb2YgZmlndXJpbmcgb3V0IHdoZXJlIHRvIHN0YXJ0IGludmVzdGlnYXRpbmcsIGFuZCB3aGF0IHBvc3NpYmxlIGlzc3VlcyBtYXkgYXJpc2UuIFRoaXMgc2hvdWxkIHF1aWNrbHkgdW5jb3ZlciBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncyBvciBhcmVhcyByZXF1aXJpbmcgYSBkZWVwZXIgZGl2ZS4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQyOjE0LjM3MDQ3MDg0N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MTk3ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2h1Z2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQzNjU9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0MzEtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NDMyOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzMy1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NDktICogSXQgaGFzIHRoZSBzYW1lIHByZXJlcXVpc2l0ZXMgYW5kIHJldHVybnMgYXNcXG5tbS9odWdlX21lbW9yeS5jOjQ0NTA6ICogc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKS5cXG5tbS9odWdlX21lbW9yeS5jLTQ0NTEtICpcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OT1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMC17XFxubW0vaHVnZV9tZW1vcnkuYzo0NTAxOlxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIDApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMi19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2NDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDcwNS0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0vaHVnZV9tZW1vcnkuYzo0NzA2OnN0YXRpYyB2b2lkIHNwbGl0X2h1Z2VfcGFnZXNfYWxsKHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy00NzA3LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc1Nj1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX25vdF9zdWl0YWJsZV9mb3JfdGhwX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzY5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDc3MDpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXFxubW0vaHVnZV9tZW1vcnkuYy00NzcxLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgdmFkZHJfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODM5LVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0ODQwOlxcdFxcdCAqIEZvciBmb2xpb3Mgd2l0aCBwcml2YXRlLCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpXFxubW0vaHVnZV9tZW1vcnkuYy00ODQxLVxcdFxcdCAqIHdpbGwgdHJ5IHRvIGRyb3AgaXQgYmVmb3JlIHNwbGl0IGFuZCB0aGVuIGNoZWNrIGlmIHRoZSBmb2xpb1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODg2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDg4NzpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg4OC1cXHRcXHRcXHRcXHRwZ29mZl90IG9mZl9lbmQsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ5NTYtXFxubW0vaHVnZV9tZW1vcnkuYzo0OTU3OnN0YXRpYyBzc2l6ZV90IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxubW0vaHVnZV9tZW1vcnkuYy00OTU4LVxcdFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9wcylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAwNC1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzo1MDA1OlxcdFxcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShmaWxlX3BhdGgsIG9mZl9zdGFydCwgb2ZmX2VuZCxcXG5tbS9odWdlX21lbW9yeS5jLTUwMDYtXFx0XFx0XFx0XFx0bmV3X29yZGVyLCBpbl9mb2xpb19vZmZzZXQpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy01MDE1LVxcdGlmIChyZXQgPT0gMSBcXHUwMDI2XFx1MDAyNiBwaWQgPT0gMSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NTAxNjpcXHRcXHRzcGxpdF9odWdlX3BhZ2VzX2FsbCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTAxNy1cXHRcXHRyZXQgPSBzdHJsZW4oaW5wdXRfYnVmKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAyMy1cXG5tbS9odWdlX21lbW9yeS5jOjUwMjQ6XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19waWQocGlkLCB2YWRkcl9zdGFydCwgdmFkZHJfZW5kLCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy01MDI1LVxcdFxcdFxcdGluX2ZvbGlvX29mZnNldCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUwMzMtXFxubW0vaHVnZV9tZW1vcnkuYzo1MDM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwbGl0X2h1Z2VfcGFnZXNfZm9wcyA9IHtcXG5tbS9odWdlX21lbW9yeS5jLTUwMzUtXFx0Lm93bmVyXFx0ID0gVEhJU19NT0RVTEUsXFxubW0vaHVnZV9tZW1vcnkuYzo1MDM2OlxcdC53cml0ZVxcdCA9IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUsXFxubW0vaHVnZV9tZW1vcnkuYy01MDM3LX07XFxubW0vaHVnZV9tZW1vcnkuYy01MDM4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NTAzOTpzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnModm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTUwNDAte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NTA0MTpcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzcGxpdF9odWdlX3BhZ2VzXFxcIiwgMDIwMCwgTlVMTCwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jOjUwNDI6XFx0XFx0XFx0ICAgIFxcdTAwMjZzcGxpdF9odWdlX3BhZ2VzX2ZvcHMpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0My1cXHRyZXR1cm4gMDtcXG5tbS9odWdlX21lbW9yeS5jLTUwNDQtfVxcbm1tL2h1Z2VfbWVtb3J5LmM6NTA0NTpsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XFxubW0vaHVnZV9tZW1vcnkuYy01MDQ2LSNlbmRpZlxcbi0tXFxubW0vaHVnZXRsYi5jPTM5NTk9c3RhdGljIGxvbmcgZGVtb3RlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqc3JjLCBzdHJ1Y3QgaHN0YXRlICpkc3QsXFxuLS1cXG5tbS9odWdldGxiLmMtMzk5NS1cXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIGkpO1xcbm1tL2h1Z2V0bGIuYzozOTk2OlxcdFxcdFxcdC8qIENhcmVmdWw6IHNlZSBfX3NwbGl0X2h1Z2VfcGFnZV90YWlsKCkgKi9cXG5tbS9odWdldGxiLmMtMzk5Ny1cXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyA9IChzdHJ1Y3QgZm9saW8gKilwYWdlO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTY4Nz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9pc29sYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTc3OS1cXHRcXHQgKiBmb2xpbyBjYW4ndCBiZSBmcmVlZCBmcm9tIHVuZGVyIHVzLiBOT1RFOiBmb2xpbyBsb2NrXFxubW0va2h1Z2VwYWdlZC5jOjc4MDpcXHRcXHQgKiBpcyBuZWVkZWQgdG8gc2VyaWFsaXplIGFnYWluc3Qgc3BsaXRfaHVnZV9wYWdlKClcXG5tbS9raHVnZXBhZ2VkLmMtNzgxLVxcdFxcdCAqIHdoZW4gaW52b2tlZCBmcm9tIHRoZSBWTS5cXG4tLVxcbm1tL2tzbS5jPTE0OTc9c3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9rc20uYy0xNTE5LVxcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbm1tL2tzbS5jOjE1MjA6XFx0XFx0aWYgKHNwbGl0X2h1Z2VfcGFnZShwYWdlKSlcXG5tbS9rc20uYy0xNTIxLVxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4tLVxcbm1tL2tzbS5jPTIyNzc9c3RhdGljIHZvaWQgY21wX2FuZF9tZXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxcbi0tXFxubW0va3NtLmMtMjM2NC1cXHRcXHQgKiBmb2xpbywgdGhlbiB3ZSBhY3R1YWxseSBlbmRlZCB1cCBpbmNyZWFzaW5nIHRoZSByZWZlcmVuY2VcXG5tbS9rc20uYzoyMzY1OlxcdFxcdCAqIGNvdW50IG9mIHRoZSBzYW1lIGZvbGlvIHR3aWNlLCBhbmQgc3BsaXRfaHVnZV9wYWdlIGZhaWxlZC5cXG5tbS9rc20uYy0yMzY2LVxcdFxcdCAqXFxubW0va3NtLmMtMjM2Ny1cXHRcXHQgKiBIZXJlIHdlIHNldCBhIGZsYWcgaWYgdGhhdCBoYXBwZW5lZCwgYW5kIHdlIHVzZSBpdCBsYXRlciB0b1xcbm1tL2tzbS5jOjIzNjg6XFx0XFx0ICogdHJ5IHNwbGl0X2h1Z2VfcGFnZSBhZ2Fpbi4gU2luY2Ugd2UgY2FsbCBmb2xpb19wdXQoKSByaWdodFxcbm1tL2tzbS5jLTIzNjktXFx0XFx0ICogYWZ0ZXJ3YXJkcywgdGhlIHJlZmVyZW5jZSBjb3VudCB3aWxsIGJlIGNvcnJlY3QgYW5kXFxubW0va3NtLmM6MjM3MDpcXHRcXHQgKiBzcGxpdF9odWdlX3BhZ2Ugc2hvdWxkIHN1Y2NlZWQuXFxubW0va3NtLmMtMjM3MS1cXHRcXHQgKi9cXG4tLVxcbm1tL2tzbS5jLTI0MTAtXFx0XFx0XFx0XFx0cmV0dXJuO1xcbm1tL2tzbS5jOjI0MTE6XFx0XFx0XFx0c3BsaXRfaHVnZV9wYWdlKHBhZ2UpO1xcbm1tL2tzbS5jLTI0MTItXFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNzEzPXN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzE4LVxcdGxvY2tfcGFnZShwYWdlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3MTk6XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzIwLVxcdHVubG9ja19wYWdlKHBhZ2UpO1xcbi0tXFxubW0vc2htZW0uYz0zODIyPXN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5tbS9zaG1lbS5jLTM5MTItXFx0ICogaW5mby1cXHUwMDNlZmFsbG9jZW5kIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBodWdlIHBhZ2VzIG1pZ2h0IGJlXFxubW0vc2htZW0uYzozOTEzOlxcdCAqIGludm9sdmVkOiB0byBwcmV2ZW50IHNwbGl0X2h1Z2VfcGFnZSgpIGZyZWVpbmcgZmFsbG9jYXRlZFxcbm1tL3NobWVtLmMtMzkxNC1cXHQgKiBwYWdlcyB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgY29tbWl0dGVkIGJleW9uZCBpX3NpemUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQyOjE0LjQ4NzY3Mzg0NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjUyNjY4NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgd2UgaGF2ZSBgV29ydGhGdXp6aW5nYCwgYW5kIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcHJldHR5IGNsZWFyLiBUaGUgY29yZSBzdWJzeXN0ZW0gaXMgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBgbW0vaHVnZV9tZW1vcnkuY2AuIFRoZSBmYWN0IHRoYXQgaXQncyB0b3VjaGluZyBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgaW50ZXJlc3RpbmcuIE5ldyBoZWxwZXIgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIHdpdGggdGhlc2UgYXNzZXJ0aW9ucyBgVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbylgIGFuZCBgVk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKWAgc3VnZ2VzdHMgdGhlIGRldmVsb3BlciBpcyBjb25jZXJuZWQgYWJvdXQgc3VidGxlIHN0YXRlcy4gVGhlIHJlYWNoYWJpbGl0eSB2aWEgbWVtb3J5IG1hbmFnZW1lbnQgc3lzY2FsbHMgYW5kIFRIUC9tVEhQIG9wZXJhdGlvbnMsIGRlZmVycmVkIHNwbGl0IHF1ZXVlcywgc2hyaW5rZXIsIG1hZHZpc2UsIGFuZCBgc3BsaXRfaHVnZV9wYWdlYCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSwgZXNwZWNpYWxseSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICoqRGVmaW5pdGVseSBgV29ydGhGdXp6aW5nOiB0cnVlYCoqLiBObyBxdWVzdGlvbi5cblxuTm93LCBsZXQncyBsb29rIGF0IGBFbmFibGVDb25maWdzYC4gV2UgYWxyZWFkeSBrbm93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29tcGlsZXMgYG1tL2h1Z2VfbWVtb3J5LmNgLCB3aGljaCBpcyBncmVhdCwgYnV0IHdlIHdhbnQgdG8ga25vdyB3aGF0IHRyaWdnZXJzIHRoaXMgYFZNX1dBUk5fT05fRk9MSU9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgQ09ORklHX0RFQlVHX1ZNYCBvciBgQ09ORklHX0RFQlVHX1ZNX1BHRkxBR1NgIGFmZmVjdCB0aGUgYFZNX1dBUk5fT05fRk9MSU9gIGNoZWNrcy4gV2FpdCwgSSByZW1lbWJlcjsgYFZNX1dBUk5fT05fRk9MSU9gIGlzIGd1YXJkZWQgYnkgYENPTkZJR19ERUJVR19WTWAsIEkgc2hvdWxkIGdvIGNoZWNrIHRoZSBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk4MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjoxNy43NDAzNDU1MjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTcxMzMxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBWTV9XQVJOX09OX0ZPTElPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oPTE4PXZvaWQgdm1hX2l0ZXJfZHVtcF90cmVlKGNvbnN0IHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC02OS19KVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oOjcwOiNkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyhjb25kLCBmb2xpbylcXHRcXHQoe1xcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC03MS1cXHRpbnQgX19yZXRfd2FybiA9ICEhKGNvbmQpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzNS0jZGVmaW5lIFZNX1dBUk5fT05fT05DRV9QQUdFKGNvbmQsIHBhZ2UpICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oOjEzNjojZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzNy0jZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbykgIEJVSUxEX0JVR19PTl9JTlZBTElEKGNvbmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQyOjIwLjM1NzQ4NzgxOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg1OTI3ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IERlYnVnZ2luZyoqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgbWVtb3J5IGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgaW5jbHVkZS9saW51eC9tbWRlYnVnLmhgLiBJdCdzIGEgc3RhbmRhcmQgcGxhY2UgZm9yIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1ZyBkZWZpbml0aW9ucywgYW5kIHRoZSBjb250ZXh0IG9mdGVuIGdpdmVzIGluc2lnaHQgaW50byB0aGUgbGV2ZWwgb2YgdHJhY2luZyBhbmQgZXJyb3IgcmVwb3J0aW5nIGNvbmZpZ3VyZWQgZm9yIHRoZSBNTSBzdWJzeXN0ZW0uXG5cbkknbSBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgMjAgdGhyb3VnaCA3NS4gVGhhdCByYW5nZSBwcm9iYWJseSBjb250YWlucyBrZXkgbWFjcm8gZGVmaW5pdGlvbnMsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcyAoYCNpZmRlZmAsIGAjZGVmaW5lYCwgYCN1bmRlZmApLCBhbmQgcG90ZW50aWFsbHkgc29tZSBpbmxpbmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZGVidWdnaW5nLiBJIGV4cGVjdCB0byBmaW5kIGZsYWdzIGZvciB0dXJuaW5nIG9uIG9yIG9mZiB2YXJpb3VzIG1lbW9yeSBkZWJ1Z2dpbmcgZmVhdHVyZXMgbGlrZSBwYWdlIGFsbG9jYXRpb24gdHJhY2luZywgc2xhYiBkZWJ1Z2dpbmcsIG9yIHBvdGVudGlhbGx5IGV2ZW4gc29tZSBpbnN0cnVtZW50YXRpb24gcmVsYXRlZCB0byBzcGVjaWZpYyBtZW1vcnkgem9uZXMgb3IgYWxsb2NhdGlvbiBvcmRlcnMuIEknbGwgYmUgbG9va2luZyBmb3IgbWFjcm9zIHRoYXQsIHdoZW4gZW5hYmxlZCwgbWlnaHQgbGVhZCBtZSB0byB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVhayBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5LiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlZmluZXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IGRlYnVnIG9wdGlvbnMgYXJlIGN1cnJlbnRseSBhY3RpdmUgYW5kIGhvdyB0aGV5J3JlIGFmZmVjdGluZyB0aGUga2VybmVsJ3MgYmVoYXZpb3IgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGRvbWFpbi4gVWx0aW1hdGVseSwgaXQgc2hvdWxkIGFsbG93IG1lIHRvIG5hcnJvdyBteSBmb2N1cyBvciByZWZpbmUgbXkgc2VhcmNoIGNyaXRlcmlhIGZvciB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MDAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjoyMi43NDM0MjAzMjlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4gICAyOlxcdCNpZm5kZWYgTElOVVhfTU1fREVCVUdfSFxcbiAgIDM6XFx0I2RlZmluZSBMSU5VWF9NTV9ERUJVR19IIDFcXG4gICA0OlxcdFxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHRzdHJ1Y3QgcGFnZTtcXG4gICA5OlxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdDtcXG4gIDEwOlxcdHN0cnVjdCBtbV9zdHJ1Y3Q7XFxuICAxMTpcXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yO1xcbiAgMTI6XFx0c3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3Q7XFxuICAxMzpcXHRcXG4gIDE0OlxcdHZvaWQgZHVtcF9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLCBjb25zdCBjaGFyICpyZWFzb24pO1xcbiAgMTU6XFx0dm9pZCBkdW1wX3ZtYShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuICAxNjpcXHR2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbiAgMTc6XFx0dm9pZCBkdW1wX3ZtZyhjb25zdCBzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nLCBjb25zdCBjaGFyICpyZWFzb24pO1xcbiAgMTg6XFx0dm9pZCB2bWFfaXRlcl9kdW1wX3RyZWUoY29uc3Qgc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pKTtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0I2lmZGVmIENPTkZJR19ERUJVR19WTVxcbiAgMjE6XFx0I2RlZmluZSBWTV9CVUdfT04oY29uZCkgQlVHX09OKGNvbmQpXFxuICAyMjpcXHQjZGVmaW5lIFZNX0JVR19PTl9QQUdFKGNvbmQsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjM6XFx0XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI0OlxcdFxcdFxcdGlmICh1bmxpa2VseShjb25kKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI1OlxcdFxcdFxcdFxcdGR1bXBfcGFnZShwYWdlLCBcXFwiVk1fQlVHX09OX1BBR0UoXFxcIiBfX3N0cmluZ2lmeShjb25kKVxcXCIpXFxcIik7XFxcXFxcbiAgMjY6XFx0XFx0XFx0XFx0QlVHKCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjc6XFx0XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDI4OlxcdFxcdH0gd2hpbGUgKDApXFxuICAyOTpcXHQjZGVmaW5lIFZNX0JVR19PTl9GT0xJTyhjb25kLCBmb2xpbylcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMDpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzI6XFx0XFx0XFx0XFx0ZHVtcF9wYWdlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgXFxcIlZNX0JVR19PTl9GT0xJTyhcXFwiIF9fc3RyaW5naWZ5KGNvbmQpXFxcIilcXFwiKTtcXFxcXFxuICAzMzpcXHRcXHRcXHRcXHRCVUcoKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzNDpcXHRcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzU6XFx0XFx0fSB3aGlsZSAoMClcXG4gIDM2OlxcdCNkZWZpbmUgVk1fQlVHX09OX1ZNQShjb25kLCB2bWEpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzc6XFx0XFx0ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDM4OlxcdFxcdFxcdGlmICh1bmxpa2VseShjb25kKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDM5OlxcdFxcdFxcdFxcdGR1bXBfdm1hKHZtYSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNDA6XFx0XFx0XFx0XFx0QlVHKCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjoyMi43NDM1NDc5NDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyMTAyNTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBJbXBhY3Qgb2YgREVCVUdfVk0gb24gSHVnZSBQYWdlIEJlaGF2aW9yKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBlbmFibGluZyBgREVCVUdfVk1gIGFsc28gYWN0aXZhdGVzIGBWTV9XQVJOX09OX0ZPTElPYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IHRoaXMgaW1wYWN0cyB0aGUgaW50ZXJhY3Rpb24gd2l0aCBodWdlIHBhZ2VzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGNvZGUgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgYmVoYXZpb3IsIHNvIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJJ2xsIHNjb3VyIHRoYXQgZmlsZSAoYG1tL2h1Z2VfbWVtb3J5LmNgKSBmb3IgYW55IGAjaWZkZWZgIGJsb2NrcyBvciBzaW1pbGFyIGNvbnN0cnVjdHMgdGhhdCBzdXJyb3VuZCB0aGUgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gVGhpcyB3aWxsIGhlbHAgbWUgbWFwIHRoZSBpbnRlcmFjdGlvbnMgaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgzNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDI6MjQuNzY0NTc3NDU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc1MDYxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTYxPXVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgX19yZWFkX21vc3RseSA9XFxubW0vaHVnZV9tZW1vcnkuYzo2MjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNjMtXFx0KDFcXHUwMDNjXFx1MDAzY1RSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcpfFxcbm1tL2h1Z2VfbWVtb3J5LmMtNjQtI2VuZGlmXFxubW0vaHVnZV9tZW1vcnkuYzo2NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9odWdlX21lbW9yeS5jLTY2LVxcdCgxXFx1MDAzY1xcdTAwM2NUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHKXxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9ODM9dW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSBIVUdFX1pFUk9fVU5TRVRfUEZOO1xcbm1tL2h1Z2VfbWVtb3J5LmM6ODQ6I2lmbmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG5tbS9odWdlX21lbW9yeS5jLTg1LXN0YXRpYyBhdG9taWNfdCBodWdlX3plcm9fcmVmY291bnQ7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI3Mz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdlX3plcm9fZm9saW8odm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mjg4OiNpZmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG5tbS9odWdlX21lbW9yeS5jLTI4OS1zdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MTY9dm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MjItXFxubW0vaHVnZV9tZW1vcnkuYzo0MjM6I2lmZGVmIENPTkZJR19TWVNGU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDI0LXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NjYxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpodWdlcGFnZV9hdHRyW10gPSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTY2NS1cXHRcXHUwMDI2aHBhZ2VfcG1kX3NpemVfYXR0ci5hdHRyLFxcbm1tL2h1Z2VfbWVtb3J5LmM6NjY2OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9odWdlX21lbW9yeS5jLTY2Ny1cXHRcXHUwMDI2c2htZW1fZW5hYmxlZF9hdHRyLmF0dHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTc2Mj1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZmlsZV9jdHJsX2F0dHJzW10gPSB7XFxubW0vaHVnZV9tZW1vcnkuYzo3NjM6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtNzY0LVxcdFxcdTAwMjZ0aHBzaXplX3NobWVtX2VuYWJsZWRfYXR0ci5hdHRyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz04MjI9REVGSU5FX01USFBfU1RBVF9BVFRSKHN3cG91dF9mYWxsYmFjaywgTVRIUF9TVEFUX1NXUE9VVF9GQUxMQkFDSyk7XFxubW0vaHVnZV9tZW1vcnkuYzo4MjM6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmMtODI0LURFRklORV9NVEhQX1NUQVRfQVRUUihzaG1lbV9hbGxvYywgTVRIUF9TVEFUX1NITUVNX0FMTE9DKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9ODM4PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphbm9uX3N0YXRzX2F0dHJzW10gPSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTg0MS1cXHRcXHUwMDI2YW5vbl9mYXVsdF9mYWxsYmFja19jaGFyZ2VfYXR0ci5hdHRyLFxcbm1tL2h1Z2VfbWVtb3J5LmM6ODQyOiNpZm5kZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy04NDMtXFx0XFx1MDAyNnpzd3BvdXRfYXR0ci5hdHRyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz04NjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfc3RhdHNfYXR0cnNbXSA9IHtcXG5tbS9odWdlX21lbW9yeS5jOjg2NTojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy04NjYtXFx0XFx1MDAyNnNobWVtX2FsbG9jX2F0dHIuYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9ODc4PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphbnlfc3RhdHNfYXR0cnNbXSA9IHtcXG5tbS9odWdlX21lbW9yeS5jOjg3OTojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vaHVnZV9tZW1vcnkuYy04ODAtXFx0XFx1MDAyNnpzd3BvdXRfYXR0ci5hdHRyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNzUxPUVYUE9SVF9TWU1CT0xfR1BMKHZtZl9pbnNlcnRfZm9saW9fcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jLTE3NTItXFxubW0vaHVnZV9tZW1vcnkuYzoxNzUzOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTc1NC1zdGF0aWMgcHVkX3QgbWF5YmVfcHVkX21rd3JpdGUocHVkX3QgcHVkLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTk1Mj1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjA2My1cXG5tbS9odWdlX21lbW9yeS5jOjIwNjQ6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vaHVnZV9tZW1vcnkuYy0yMDY1LXZvaWQgdG91Y2hfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI1NTM9Ym9vbCB6YXBfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI1OTItXFxubW0vaHVnZV9tZW1vcnkuYzoyNTkzOiNpZm5kZWYgcG1kX21vdmVfbXVzdF93aXRoZHJhd1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjU5NC1zdGF0aWMgaW5saW5lIGludCBwbWRfbW92ZV9tdXN0X3dpdGhkcmF3KHNwaW5sb2NrX3QgKm5ld19wbWRfcHRsLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNzQxPWludCBjaGFuZ2VfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI4NDgtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyODQ5OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg1MC1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yODg4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mjg4OTojaWZkZWYgQ09ORklHX1VTRVJGQVVMVEZEXFxubW0vaHVnZV9tZW1vcnkuYy0yODkwLS8qXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwNDA9c3BpbmxvY2tfdCAqX19wdWRfdHJhbnNfaHVnZV9sb2NrKHB1ZF90ICpwdWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMDUwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzA1MTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5tbS9odWdlX21lbW9yeS5jLTMwNTItaW50IHphcF9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzY5Mj1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM3NDQtXFx0XFx0XFx0XFx0ICgxTCBcXHUwMDNjXFx1MDAzYyBQR191bmV2aWN0YWJsZSkgfFxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc0NTojaWZkZWYgQ09ORklHX0FSQ0hfVVNFU19QR19BUkNIXzJcXG5tbS9odWdlX21lbW9yeS5jLTM3NDYtXFx0XFx0XFx0XFx0ICgxTCBcXHUwMDNjXFx1MDAzYyBQR19hcmNoXzIpIHxcXG5tbS9odWdlX21lbW9yeS5jLTM3NDctI2VuZGlmXFxubW0vaHVnZV9tZW1vcnkuYzozNzQ4OiNpZmRlZiBDT05GSUdfQVJDSF9VU0VTX1BHX0FSQ0hfM1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0OS1cXHRcXHRcXHRcXHQgKDFMIFxcdTAwM2NcXHUwMDNjIFBHX2FyY2hfMykgfFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzk0LVxcdFxcdFxcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYzozNzk1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9odWdlX21lbW9yeS5jLTM3OTYtXFx0XFx0bmV3X2ZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gZm9saW8tXFx1MDAzZW1lbWNnX2RhdGE7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2NDM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDcwNC1cXG5tbS9odWdlX21lbW9yeS5jOjQ3MDU6I2lmZGVmIENPTkZJR19ERUJVR19GU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDcwNi1zdGF0aWMgdm9pZCBzcGxpdF9odWdlX3BhZ2VzX2FsbCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz01MDQ1PWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0Ny1cXG5tbS9odWdlX21lbW9yeS5jOjUwNDg6I2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0OS1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjoyNC44ODIwOTAwNzNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxNjM4MTUyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZvbGlvIFNwbGl0dGluZyBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgY29kZSBjaGFuZ2VzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgb3IgbW9kaWZpZWQgaW4gcmVsYXRpb24gdG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBTbywgbGV0J3Mgc2VlLCB3ZSBoYXZlIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCwgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgdGhhdCBhcmUgbmV3IG9yIGFsdGVyZWQuIFRoZW4gdGhlcmUgYXJlIHRoZSBub24tc3RhdGljIGNhbGxlcnM6IGBzcGxpdF9mb2xpb190b19saXN0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAsIGFuZCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLlxuXG5SaWdodCwgbGV0J3MgY29uZmlybSB0aGUgc3RhdGljIHZzLiBub24tc3RhdGljIHN0YXR1cyBvZiB0aG9zZSBmdW5jdGlvbnMsIG1ha2luZyBzdXJlIHRoYXQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgaXMgaW5kZWVkIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGNvbmZpcm1lZCBvbiBsaW5lIDQ1MTggYW5kIGRlY2xhcmVkIGluIGBtbS9pbnRlcm5hbC5oYC4gQ29uZmlybWVkIHRoYXQgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAsIGFuZCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gIGFyZSBub24tc3RhdGljIGFzIHdlbGwsIHdoaWxlIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgYXJlIHN0YXRpYy5cblxuQWxyaWdodCwgdGhhdCdzIGRvbmUuIExldCdzIG1ha2Ugc3VyZSBvdXIgZm9jdXMgaXMgb24gdGhlIHJpZ2h0IGZ1bmN0aW9uczogYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgLCBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCwgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAsIGBmb2xpb19zcGxpdF91bm1hcHBlZGAsIGBzcGxpdF9mb2xpb190b19saXN0YCwgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYC5cblxuTm93LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZm9yIG9idmlvdXMgcmVhc29ucywgYW5kIGBERUJVR19WTWAgdG8gZW5hYmxlIHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucy4gR29vZCwgZ29vZC5cblxuT2theSwgbGV0J3Mgc3VtbWFyaXplIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gRXNzZW50aWFsbHksIGl0J3MgcmVmYWN0b3JpbmcgdGhlIGBQR19wYXJ0aWFsbHlfbWFwcGVkYCBmbGFnIGNsZWFyaW5nIGFuZCBjb3JyZXNwb25kaW5nIG1USFAgc3RhdCBkZWNyZW1lbnQgbG9naWMgaW4gVEhQIGZvbGlvcyBpbnRvIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKWAuIENydWNpYWxseSwgaXQgaW50cm9kdWNlcyBuZXcgcnVudGltZSBhc3NlcnRpb25zLCB0aG9zZSBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoaXMgaGl0cyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIFRIUCAoYW5kIG1USFApIHNwbGl0dGluZyBhbmQgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlcy4gVGhlIGtleSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoZSBuZWVkIGZvciB0aG9yb3VnaCBmdXp6aW5nLiBUaGVzZSBhc3NlcnRpb25zIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucyBuZWVkIHRvIGhvbGQgdGhyb3VnaCBhbGwgZm9saW8gbGlmZWN5Y2xlcywgbWVtb3J5IHJlY2xhaW0vc2hyaW5rZXJzLCBhbmQgc3BsaXQgb3BlcmF0aW9ucywgYW5kIGFsbCBjb25jdXJyZW5jeSBhc3BlY3RzLiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCB0aGF0IHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdWJ0bGUgaXNzdWVzLlxuXG5Ob3csIGxldCdzIHJlY29yZCB0aGVzZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE5MiwiT3V0cHV0VG9rZW5zIjoyMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDI6MzUuMDQ1OTA4MjI2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNzI5ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiREVCVUdfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkXCIsXG4gICAgXCJfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcInNwbGl0X2ZvbGlvX3RvX2xpc3RcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X2ZvbGlvXCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmbGFnIGFuZCBtVEhQIHN0YXQgYWNjb3VudGluZyBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSwgYW5kIGludHJvZHVjZXMgbmV3IFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBpbiBtbS9odWdlX21lbW9yeS5jIChfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQgYW5kIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIG1hbmFnaW5nIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUC9tVEhQKSBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWVzLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBhbmQgYXNzZXJ0aW9uIHZpb2xhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFQlVHX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZFwiLFxuICAgIFwiX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkXCIsXG4gICAgXCJfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRcIixcbiAgICBcImZvbGlvX3NwbGl0X3VubWFwcGVkXCIsXG4gICAgXCJzcGxpdF9mb2xpb190b19saXN0XCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9mb2xpb1wiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfc2NhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZmxhZyBhbmQgbVRIUCBzdGF0IGFjY291bnRpbmcgaW50byBhIGhlbHBlciBmdW5jdGlvbiBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKCksIGFuZCBpbnRyb2R1Y2VzIG5ldyBWTV9XQVJOX09OX0ZPTElPIGFzc2VydGlvbnMgaW4gbW0vaHVnZV9tZW1vcnkuYyAoX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkIGFuZCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBtYW5hZ2luZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFAvbVRIUCkgYW5kIGRlZmVycmVkIHNwbGl0IHF1ZXVlcywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgYW5kIGFzc2VydGlvbiB2aW9sYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0MjozNS4xODg2NDY1NzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzM0OTY3NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6NDI6MzUuMTg5MjUxNDMzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEzMzQzNTcxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLCBkZWJ1ZyBhc3NlcnRpb25zLCBhbmQgc3RhdGlzdGljcyBmb3IgaHVnZS9tdWx0aS1zaXplIGFub255bW91cyBmb2xpb3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBhZGRlZCBhc3NlcnRpb25zIG9yIHJlZmNvdW50aW5nIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk5NzJjZTQ5OWVkODgwNjk2MjU4YzQ4N2RjZmE5Y2RmN2ExYjc3NzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE2OjQwOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGRkNjZjNmFkNWFmMTMuLmZhZTk1OTYzMzI3OWIgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMzk3Miw2ICszOTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm9saW9fY2FjaGVfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0LyogRm9saW8gbXVzdCBiZSBmcm96ZW4uICovXG4rXHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbitcbitcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbitcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbitcdCAqL1xuK1x0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbitcbitcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuK1x0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4rXHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbit9XG4rXG4gc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbkBAIC0zOTgwLDcgKzM5OTksNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgblxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4tXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXHUwMDI2XHUwMDI2IGVuZCk7XG5AQCAtMzk5OCwxMSArNDAxNiw3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbiBcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFxuIFx0XHRpZiAobWFwcGluZykge1xuIFx0XHRcdGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbkBAIC00NTE2LDExICs0NTMwLDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuIFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKF9fbGlzdF9scnVfZGVsKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFx0XHR1bnF1ZXVlZCA9IHRydWU7XG4gXHR9XG4gXHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjQyOjM1LjE4OTI1MjY4M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTMzNDMxMjk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcsIGFpbWluZyB0byBjb25zb2xpZGF0ZSB0aGUgbG9naWMgZm9yIGNsZWFyaW5nIHRoZSBgUEdfcGFydGlhbGx5X21hcHBlZGAgZmxhZyBhbmQgZGVjcmVtZW50aW5nIHRoZSBgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRGAgc3RhdCBjb3VudGVyLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgaGVscGVyIGZ1bmN0aW9uIGlzIHRoZSBrZXkgY2hhbmdlIGhlcmUuIFRoZSBkaWZmIG1ha2VzIGl0IG11Y2ggY2xlYXJlciB0byBzZWUgdGhhdCB0aGUgY29kZSB1c2VkIHRvIGJlIGluIHR3byBwbGFjZXMgYW5kIGlzIG5vdyBpbiBvbmUuXG5cbk15IGZpcnN0IHRob3VnaHQsIGFzIGFsd2F5cywgaXMgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGVzcGVjaWFsbHkgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGlzIG15IHN0YW5kYXJkIGFwcHJvYWNoOlxuLSAgIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLlxuLSAgIERvZXMgaXQgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIGl0IG9wZXJhdGVzIG9uIGBzdHJ1Y3QgZm9saW9gIGZsYWdzLCByZWZjb3VudHMsIGFuZCBsaXN0IHBvaW50ZXJzLlxuLSAgIERvZXMgaXQgY2hhbmdlIGJ1ZmZlciBzaXplcyBvciBtZW1vcnkgY29weSBsZW5ndGhzPyBOby5cbi0gICBEb2VzIGl0IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby5cbi0gICBJcyB0aGVyZSBhbnkgS01TQU4gcmVsZXZhbmNlPyBOby5cblxuVGhlIHBhdGNoIHNlZW1zIHJlbGF0aXZlbHkgc2FmZSBpbiB0aGlzIHJlZ2FyZC4gVGhpcyByZWZhY3RvciBhcHBlYXJzIHRvIGZvY3VzIG9uIG1haW50YWluaW5nIGRhdGEgaW50ZWdyaXR5IHdpdGhpbiB0aGUgYGZvbGlvYCBzdHJ1Y3R1cmUgaXRzZWxmLiBObyB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBUaGF0J3MgZ29vZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaXNzdWVzIGhpZGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBvciBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gTGV0J3MgY29uZmlybSBhZ2FpbiBpbiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gT2theSwgdGhlcmUncyBhIGBWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtgIHdpdGhpbiB0aGUgbmV3IGZ1bmN0aW9uLCB3aGljaCBpcyBhIGtleSBzYW5pdHkgY2hlY2suXG5cbk15IGFuYWx5c2lzIHBvaW50cyB0byBhIHJlZmFjdG9yaW5nIG9mIGEgY3JpdGljYWwgcGF0aCwgd2hpY2ggbWVhbnMgSSBoYXZlIHRvIGJlIGV4dHJlbWVseSBtZXRpY3Vsb3VzLiBJIG11c3QgZW5zdXJlIHRoZSByZWZhY3RvcmluZyBoYXMgbm90IGludHJvZHVjZWQgYW55IGRhdGEgcmFjZXMgb3IgY2hhbmdlZCB0aGUgb3ZlcmFsbCBsb2NraW5nIHNjaGVtZS4gSXQgYWxzbyBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBWTV9XQVJOX09OX0ZPTElPYCBjaGVjayBpcyBjb3JyZWN0LiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0byBtZSB0aGF0IGtlcm5lbCBjb2RlIGlzIHdlbGwtYXNzZXJ0ZWQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBUaGlzIGlzIGEgY2xlYW4gcmVmYWN0b3IuIEkgYW0gY29uZmlkZW50LiBSZWFkeSB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA1LCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjo0Mjo0Ni41MjM1Njg5NjZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLCBkZWJ1ZyBhc3NlcnRpb25zLCBhbmQgc3RhdGlzdGljcyBmb3IgaHVnZS9tdWx0aS1zaXplIGFub255bW91cyBmb2xpb3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBhZGRlZCBhc3NlcnRpb25zIG9yIHJlZmNvdW50aW5nIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBzdGF0aXN0aWMgdXBkYXRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGZsYWdzLCBkZWJ1ZyBhc3NlcnRpb25zLCBhbmQgc3RhdGlzdGljcyBmb3IgaHVnZS9tdWx0aS1zaXplIGFub255bW91cyBmb2xpb3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGNvcHkgYW55IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBhZGRlZCBhc3NlcnRpb25zIG9yIHJlZmNvdW50aW5nIGxvZ2ljIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtdrz[1] Phase: Succeeded StartedAt: 2026-09-08 16:42:57 +0000 UTC FinishedAt: 2026-09-08 16:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 16:42:57 +0000 UTC FinishedAt: 2026-09-08 16:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2] Phase: Succeeded StartedAt: 2026-09-08 16:42:57 +0000 UTC FinishedAt: 2026-09-08 20:24:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:42:57 +0000 UTC FinishedAt: 2026-09-08 20:24:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:42:57 +0000 UTC FinishedAt: 2026-09-08 16:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:42:57 +0000 UTC FinishedAt: 2026-09-08 16:43:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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-workflowvtdrz/series-workflowvtdrz-convert-artifact-1109017910/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:43:07 +0000 UTC FinishedAt: 2026-09-08 16:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:43:07 +0000 UTC FinishedAt: 2026-09-08 16:59:11 +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:*d1099cce-641a-4bd2-a7ac-dc78997fbf6c,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-workflowvtdrz/series-workflowvtdrz-convert-artifact-1109017910/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": "ffd52674-278b-4713-b263-8f491c6f4c83", "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-workflowvtdrz/series-workflowvtdrz-build-action-1030450252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:43:07 +0000 UTC FinishedAt: 2026-09-08 16:59:01 +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:*d1099cce-641a-4bd2-a7ac-dc78997fbf6c,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-workflowvtdrz/series-workflowvtdrz-convert-artifact-1109017910/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": "ffd52674-278b-4713-b263-8f491c6f4c83", "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-workflowvtdrz/series-workflowvtdrz-build-action-1030450252/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:59:11 +0000 UTC FinishedAt: 2026-09-08 16:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:59:11 +0000 UTC FinishedAt: 2026-09-08 16:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:59:11 +0000 UTC FinishedAt: 2026-09-08 16:59:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:59:11 +0000 UTC FinishedAt: 2026-09-08 16:59:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-workflowvtdrz/series-workflowvtdrz-convert-artifact-3006618057/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:59:21 +0000 UTC FinishedAt: 2026-09-08 17:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 16:59:21 +0000 UTC FinishedAt: 2026-09-08 17:01:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ffd52674-278b-4713-b263-8f491c6f4c83,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-workflowvtdrz/series-workflowvtdrz-build-action-1030450252/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-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:01:22 +0000 UTC FinishedAt: 2026-09-08 17:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:01:22 +0000 UTC FinishedAt: 2026-09-08 17:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:01:22 +0000 UTC FinishedAt: 2026-09-08 17:17:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:01:22 +0000 UTC FinishedAt: 2026-09-08 17:17:25 +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:*d1099cce-641a-4bd2-a7ac-dc78997fbf6c,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-workflowvtdrz/series-workflowvtdrz-convert-artifact-3006618057/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": "19c008ee-2027-45ca-bf96-b671f1a26f3c", "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-workflowvtdrz/series-workflowvtdrz-build-action-624617637/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:01:22 +0000 UTC FinishedAt: 2026-09-08 17:17:16 +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:*d1099cce-641a-4bd2-a7ac-dc78997fbf6c,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-workflowvtdrz/series-workflowvtdrz-convert-artifact-3006618057/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": "19c008ee-2027-45ca-bf96-b671f1a26f3c", "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-workflowvtdrz/series-workflowvtdrz-build-action-624617637/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:17:25 +0000 UTC FinishedAt: 2026-09-08 17:17:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:17:25 +0000 UTC FinishedAt: 2026-09-08 17:17:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:17:25 +0000 UTC FinishedAt: 2026-09-08 17:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:17:25 +0000 UTC FinishedAt: 2026-09-08 17:19:17 +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:*19c008ee-2027-45ca-bf96-b671f1a26f3c,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-workflowvtdrz/series-workflowvtdrz-build-action-624617637/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-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:19:26 +0000 UTC FinishedAt: 2026-09-08 20:24:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:19:26 +0000 UTC FinishedAt: 2026-09-08 20:24:11 +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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"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:*ffd52674-278b-4713-b263-8f491c6f4c83,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19c008ee-2027-45ca-bf96-b671f1a26f3c,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-workflowvtdrz/series-workflowvtdrz-build-action-1030450252/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-workflowvtdrz/series-workflowvtdrz-build-action-624617637/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:19:26 +0000 UTC FinishedAt: 2026-09-08 17:19:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:19:26 +0000 UTC FinishedAt: 2026-09-08 17:19:31 +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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"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-workflowvtdrz/series-workflowvtdrz-convert-artifact-547642398/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:19:26 +0000 UTC FinishedAt: 2026-09-08 17:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:19:26 +0000 UTC FinishedAt: 2026-09-08 17:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:19:26 +0000 UTC FinishedAt: 2026-09-08 17:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:19:36 +0000 UTC FinishedAt: 2026-09-08 20:24:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvtdrz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"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":["folio_reset_partially_mapped","__folio_freeze_and_split_unmapped","__folio_unqueue_deferred_split","folio_split_unmapped","split_folio_to_list","deferred_split_folio","deferred_split_scan"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a4803d8ba53a9243696a4e90246446d7f3982b6f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","DEBUG_VM"],"series_id":"fc62b367-5a9a-4389-a979-02364e76cdb2","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-09-08 17:19:36 +0000 UTC FinishedAt: 2026-09-08 20:24:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ffd52674-278b-4713-b263-8f491c6f4c83,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19c008ee-2027-45ca-bf96-b671f1a26f3c,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-workflowvtdrz/series-workflowvtdrz-build-action-1030450252/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-workflowvtdrz/series-workflowvtdrz-build-action-624617637/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-workflowvtdrz/series-workflowvtdrz-convert-artifact-547642398/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,}