Name: series-workflow4lngq Phase: Succeeded StartedAt: 2026-09-07 22:12:36 +0000 UTC FinishedAt: 2026-09-08 02:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[0] Phase: Succeeded StartedAt: 2026-09-07 22:12:36 +0000 UTC FinishedAt: 2026-09-07 22:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 22:12:36 +0000 UTC FinishedAt: 2026-09-07 22:47:17 +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": "9d7afd05-1d53-4cc7-b5c4-dab091298559" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__folio_unqueue_deferred_split", "__split_huge_page_to_list_to_order", "split_huge_page_to_list_to_order", "folio_split_unmapped", "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBtZXRyaWMgZGVjcmVtZW50IGludG8gYSBzaGFyZWQgaGVscGVyIGZ1bmN0aW9uIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKClgLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zIGZvciBmb2xpbyByZWZjb3VudCBhbmQgZGVmZXJyZWQgbGlzdCBzdGF0ZS5cblxuVGhpcyBpcyBhbiBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCByZWZhY3RvcmluZyB0b3VjaGluZyBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIHN0YXRpc3RpY3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgYm91bmRzL2xlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIChzdWNoIGFzIHN0YXRlIGFzc2VydGlvbiBmYWlsdXJlcyBvciBtZW1vcnkgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MgYW5kIEtBU0FOLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSBpbiBtbS9odWdlX21lbW9yeS5jLCB3aGljaCBhZGRzIG5ldyBydW50aW1lIGFzc2VydGlvbiBjaGVja3MgKFZNX1dBUk5fT05fRk9MSU8gZm9yIHJlZmNvdW50IGFuZCBlbXB0eSBkZWZlcnJlZCBsaXN0KSBhbmQgdXBkYXRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBwYXJ0aWFsbHkgbWFwcGVkIGh1Z2UgZm9saW9zIGR1cmluZyBkZWZlcnJlZCBzcGxpdCB1bnF1ZXVpbmcgYW5kIGh1Z2UgcGFnZSB1bm1hcHBlZCBmcmVlemUtYW5kLXNwbGl0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBlbnN1cmUgdGhlIGludmFyaWFudHMgaG9sZCBhY3Jvc3MgVEhQIHNwbGl0dGluZyBhbmQgcmVjbGFtYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmOTUzMTBjMTA0ZWQyMjJlNzdmMzA4NzFiZTg0YzUzODAyNmU5OWU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMjo0NjoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZGQ2NmM2YWQ1YWYxMy4uMjNlZjIyYzJiNWRiMyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTcyLDYgJiM0MzszOTcyLDI0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm9saW9fY2FjaGVfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPcmRlci0xIGZvbGlvcyBoYXZlIG5vIF9kZWZlcnJlZF9saXN0LiBUaGUgZmxhZyBpcyBvbmx5IGV2ZXIgc2V0XG4mIzQzO1x0ICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLlxuJiM0MztcdCAqL1xuJiM0MztcdFZNX1dBUk5fT05fRk9MSU8oIWxpc3RfZW1wdHkoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpLCBmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuJiM0MztcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuJiM0MztcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXG5AQCAtMzk4MCw3ICYjNDM7Mzk5OCw2IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4ge1xuIFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbiBcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcbi1cdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbkBAIC0zOTk4LDExICYjNDM7NDAxNSw3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbiBcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4mIzQzO1x0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbiBcbiBcdFx0aWYgKG1hcHBpbmcpIHtcbiBcdFx0XHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtNDUxNiwxMSAmIzQzOzQ1MjksNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFx1MDAyNm1lbWNnLCBcdTAwMjZmbGFncyk7XG4gXHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4tXHRcdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHRcdH1cbiYjNDM7XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFx0XHR1bnF1ZXVlZCA9IHRydWU7XG4gXHR9XG4gXHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtERUJVR19WTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICAgJiMzNDtfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyJiMzNDssCiAgICAmIzM0O3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyJiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0X3VubWFwcGVkJiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X2ZvbGlvJiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKCkgaW4gbW0vaHVnZV9tZW1vcnkuYywgd2hpY2ggYWRkcyBuZXcgcnVudGltZSBhc3NlcnRpb24gY2hlY2tzIChWTV9XQVJOX09OX0ZPTElPIGZvciByZWZjb3VudCBhbmQgZW1wdHkgZGVmZXJyZWQgbGlzdCkgYW5kIHVwZGF0ZXMgc3RhdGUgbWFuYWdlbWVudCBmb3IgcGFydGlhbGx5IG1hcHBlZCBodWdlIGZvbGlvcyBkdXJpbmcgZGVmZXJyZWQgc3BsaXQgdW5xdWV1aW5nIGFuZCBodWdlIHBhZ2UgdW5tYXBwZWQgZnJlZXplLWFuZC1zcGxpdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gZW5zdXJlIHRoZSBpbnZhcmlhbnRzIGhvbGQgYWNyb3NzIFRIUCBzcGxpdHRpbmcgYW5kIHJlY2xhbWF0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjk1MzEwYzEwNGVkMjIyZTc3ZjMwODcxYmU4NGM1MzgwMjZlOTllOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMjI6NDY6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCBkZDY2YzZhZDVhZjEzLi4yM2VmMjJjMmI1ZGIzIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTM5NzIsNiAmIzQzOzM5NzIsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7CiYjNDM7CiYjNDM7CWlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT3JkZXItMSBmb2xpb3MgaGF2ZSBubyBfZGVmZXJyZWRfbGlzdC4gVGhlIGZsYWcgaXMgb25seSBldmVyIHNldAomIzQzOwkgKiBvbiBmb2xpb3MgdGhhdCBkbywgc28gdGhlIGxpc3QgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIgdGhlIGZsYWcuCiYjNDM7CSAqLwomIzQzOwlWTV9XQVJOX09OX0ZPTElPKCFsaXN0X2VtcHR5KCZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0KSwgZm9saW8pOwomIzQzOwomIzQzOwlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKJiM0MzsJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCiYjNDM7CQkgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwKIAkJCQkJICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLAogCQkJCQkgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSwKQEAgLTM5ODAsNyAmIzQzOzM5OTgsNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogewogCXN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7CiAJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0OwotCWludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgJmFtcDsmYW1wOyBlbmQpOwpAQCAtMzk5OCwxMSAmIzQzOzQwMTUsNyBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogCQkgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuCiAJCSAqIENsZWFyIGl0IGhlcmU6IHRoZSBmbGFnIGRvZXMgbm90IHN1cnZpdmUgdGhlIHNwbGl0LgogCQkgKi8KLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChvbGRfb3JkZXIsCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAogCQlpZiAobWFwcGluZykgewogCQkJaW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwpAQCAtNDUxNiwxMSAmIzQzOzQ1MjksNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwogCWxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZSgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSwgbmlkLCAmYW1wO21lbWNnLCAmYW1wO2ZsYWdzKTsKIAlpZiAoX19saXN0X2xydV9kZWwoJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QsIG5pZCkpIHsKLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAkJdW5xdWV1ZWQgPSB0cnVlOwogCX0KIAlsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsICZhbXA7ZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZSBNZW1vcnkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBpdCYjMzk7cyBmb2N1c2VkIG9uIGBtbS9odWdlX21lbW9yeS5jYCwgd2hpY2ggYWx3YXlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylgLCBiZWluZyBpbnRyb2R1Y2VkLiBJIGltbWVkaWF0ZWx5IG5vdGljZSB0aGUgYFZNX1dBUk5fT05fRk9MSU9gIGNhbGxzLiBBbHdheXMgZ29vZCB0byBzZWUgdGhvc2Ugc2FuaXR5IGNoZWNrcyDigJMgYGZvbGlvX3JlZl9jb3VudChmb2xpbylgIGFuZCBgIWxpc3RfZW1wdHkoJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QpYC4gVGhlc2UgYXJlIGltcG9ydGFudCB0byBjYXRjaCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG1pc3VzZSBvZiB0aGUgZm9saW8gc3RydWN0dXJlLiBUaGUgaW50ZW50IGlzIGNsZWFyOiB0byBlbnN1cmUgd2UmIzM5O3JlIG5vdCB0b3VjaGluZyBhIGZvbGlvIHRoYXQmIzM5O3Mgc3RpbGwgaW4gdXNlIG9yIGF3YWl0aW5nIGRlZmVycmVkIGFjdGlvbnMgd2hlbiB3ZSByZXNldCB0aGUgcGFydGlhbGx5IG1hcHBlZCBmbGFnLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgcmVwbGFjZW1lbnQgb2YgZGlyZWN0IGNsZWFyaW5nIG9mIGBwYXJ0aWFsbHlfbWFwcGVkYCBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgd2l0aCBhIGNhbGwgdG8gdGhpcyBuZXcgaGVscGVyLiBUaGF04oCZcyBwcm9iYWJseSBhIGdvb2QgbW92ZSBmb3IgZW5jYXBzdWxhdGlvbiBhbmQgcG90ZW50aWFsIGZ1dHVyZSBtYWludGFpbmFiaWxpdHkuIEl0IHN1Z2dlc3RzIGEgcmVmYWN0b3JpbmcgdG8gY2VudHJhbGl6ZSB0aGUgbG9naWMgcmVsYXRlZCB0byB0aGlzIGBwYXJ0aWFsbHlfbWFwcGVkYCBmbGFnLCB3aGljaCBpcyBhIGNvbW1vbiBwcmFjdGljZSBpbiB0aGlzIHR5cGUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzLiBUbyBwcm9wZXJseSBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgcmVhc29uaW5nLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSYjMzk7bGwgZWl0aGVyIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHJlbGV2YW50IHVzZXMgb3IganVzdCByZWFkIHRocm91Z2ggdGhlIGNvZGUgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhpcyBpcyBhIGNydWNpYWwgc3RlcCBpbiB0aGUgZm9saW8gc3BsaXQvdW5tYXBwaW5nIHByb2Nlc3NlcywgcHJvYmFibHkgcmVsYXRlZCB0byBodWdlIHBhZ2VzIGFuZCBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM5Njg9c3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzQtXG5tbS9odWdlX21lbW9yeS5jOjM5NzU6c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy0zOTc2LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5OTM9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMTctXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MDE4Olx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDAxOS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1MTc9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MzEtXHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG5tbS9odWdlX21lbW9yeS5jOjQ1MzI6XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYy00NTMzLVx0XHR1bnF1ZXVlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgYXJvdW5kIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gVGhlc2UgYXJlIGtleSBmdW5jdGlvbnMsIHNvIHVuZGVyc3RhbmRpbmcgdGhlaXIgY2FsbGVycyBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhleSYjMzk7cmUgdXNlZCBpcyBwYXJhbW91bnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hhdCBjb25maWd1cmF0aW9ucyB0cmlnZ2VyIHRoZWlyIHVzZS4gSSBiZXQgdGhlcmUgYXJlIHNvbWUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBjaGVjaywgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHBlcmhhcHMgdGhpbmdzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBvciBvdGhlciByZWxhdGVkIHNldHRpbmdzLiBLbm93aW5nICp3aGVyZSogdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIHdpZGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSB3aWxsIHJlYWxseSBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IGl0IGFsbCBoYW5ncyB0b2dldGhlci4gSSBuZWVkIHRvIGxvb2sgYXQgdGhhdCBjYWxsIGdyYXBoLCBzZWUgd2hhdCYjMzk7cyBwYXNzaW5nIGluLCBhbmQgcGllY2UgdG9nZXRoZXIgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyB0aGF0IGxlYWRzIHRvIHRoZWlyIGV4ZWN1dGlvbi4gVGhpcyBpcyBnb2luZyB0byBiZSBhIGdvb2Qgd2F5IHRvIGZpZ3VyZSBvdXQgaG93IHRvIGRlYnVnIHRoZXNlIHJvdXRpbmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NzA6XHRcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxuMzk3MTpcdFx0XHRyZXR1cm4gMDtcbjM5NzI6XHRcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4zOTczOlx0fVxuMzk3NDpcdFxuMzk3NTpcdHN0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbjM5NzY6XHR7XG4zOTc3Olx0XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbjM5Nzg6XHRcbjM5Nzk6XHRcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbjM5ODA6XHRcdFx0cmV0dXJuO1xuMzk4MTpcdFxuMzk4MjpcdFx0LypcbjM5ODM6XHRcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbjM5ODQ6XHRcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbjM5ODU6XHRcdCAqL1xuMzk4NjpcdFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbjM5ODc6XHRcbjM5ODg6XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuMzk4OTpcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4zOTkwOlx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbjM5OTE6XHR9XG4zOTkyOlx0XG4zOTkzOlx0c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbjM5OTQ6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuMzk5NTpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbjM5OTY6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBlbnVtIHNwbGl0X3R5cGUgc3BsaXRfdHlwZSxcbjM5OTc6XHRcdFx0XHRcdFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxuMzk5ODpcdHtcbjM5OTk6XHRcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG40MDAwOlx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG40MDAxOlx0XHRpbnQgcmV0ID0gMDtcbjQwMDI6XHRcbjQwMDM6XHRcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbjQwMDQ6XHRcbjQwMDU6XHRcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICYjNDM7IDEpKSB7XG40MDA2Olx0XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xuNDAwNzpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG40MDA4Olx0XG40MDA5Olx0XHRcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xuNDAxMDpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbjQwMTE6XHRcbjQwMTI6XHRcdFx0LypcbjQwMTM6XHRcdFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxuNDAxNDpcdFx0XHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXG40MDE1Olx0XHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbjQwMTY6XHRcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG40MDE3Olx0XHRcdCAqL1xuNDAxODpcdFx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQwMTk6XHRcbjQwMjA6XHRcdFx0aWYgKG1hcHBpbmcpIHtcbjQwMjE6XHRcdFx0XHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG40MDIyOlx0XG40MDIzOlx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjQwMjQ6XHRcdFx0XHQgICAgbmV3X29yZGVyIFx1MDAzYyBIUEFHRV9QTURfT1JERVIpIHtcbjQwMjU6XHRcdFx0XHRcdGlmIChmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XG40MDI2Olx0XHRcdFx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbyxcbjQwMjc6XHRcdFx0XHRcdFx0XHRcdE5SX1NITUVNX1RIUFMsIC1ucik7XG40MDI4Olx0XHRcdFx0XHR9IGVsc2Uge1xuNDAyOTpcdFx0XHRcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXG40MDMwOlx0XHRcdFx0XHRcdFx0XHROUl9GSUxFX1RIUFMsIC1ucik7XG40MDMxOlx0XHRcdFx0XHR9XG40MDMyOlx0XHRcdFx0fVxuNDAzMzpcdFx0XHR9XG40MDM0Olx0XG40MDM1Olx0XHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbjQwMzY6XHRcdFx0XHRpZiAobWFwcGluZykge1xuNDAzNzpcdFx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKG1hcHBpbmcsIGZvbGlvKTtcbjQwMzg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDAzOTpcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AqKgoKT2theSwgc28gd2UgbmVlZCB0byB6b29tIGluIG9uIGBtbS9odWdlX21lbW9yeS5jYC4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMgcHJvamVjdCwgYSBmb2N1c2VkIGFwcHJvYWNoIGlzIGFsd2F5cyB0aGUgYmVzdCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdCBpcyBiZXR3ZWVuIGxpbmVzIDQ1MTUgYW5kIDQ1NTAuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgbGl2ZXMuIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgZGlnZ2luZy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiB0aG9zZSBsaW5lcyB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIGludGVyYWN0aW9uIGhhcHBlbmluZy4gSG9wZWZ1bGx5LCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFuZCBjb21tZW50cyBhcmUgaGVscGZ1bC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHNlY3Rpb24gZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBpc3N1ZSBvciBpZiBpdCByZXF1aXJlcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDUxNTpcdCAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cbjQ1MTY6XHQgKi9cbjQ1MTc6XHRib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuNDUxODpcdHtcbjQ1MTk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjQ1MjA6XHRcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcbjQ1MjE6XHRcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xuNDUyMjpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjQ1MjM6XHRcdGJvb2wgdW5xdWV1ZWQgPSBmYWxzZTtcbjQ1MjQ6XHRcbjQ1MjU6XHRcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcbjQ1MjY6XHRcdFdBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xuNDUyNzpcdFxuNDUyODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuNDUyOTpcdFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG40NTMwOlx0XHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFx1MDAyNm1lbWNnLCBcdTAwMjZmbGFncyk7XG40NTMxOlx0XHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG40NTMyOlx0XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuNDUzMzpcdFx0XHR1bnF1ZXVlZCA9IHRydWU7XG40NTM0Olx0XHR9XG40NTM1Olx0XHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbjQ1MzY6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDUzNzpcdFxuNDUzODpcdFx0cmV0dXJuIHVucXVldWVkO1x0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xuNDUzOTpcdH1cbjQ1NDA6XHRcbjQ1NDE6XHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbiYjMzk7dCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cbjQ1NDI6XHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbjQ1NDM6XHR7XG40NTQ0Olx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG40NTQ1Olx0XHRpbnQgbmlkO1xuNDU0NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDU0NzpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjQ1NDg6XHRcbjQ1NDk6XHRcdC8qXG40NTUwOlx0XHQgKiBPcmRlciAxIGZvbGlvcyBoYXZlIG5vIHNwYWNlIGZvciBhIGRlZmVycmVkIGxpc3QsIGJ1dCB3ZSBhbHNvXG40NTUxOlx0XHQgKiB3b24mIzM5O3Qgd2FzdGUgbXVjaCBtZW1vcnkgYnkgbm90IGFkZGluZyB0aGVtIHRvIHRoZSBkZWZlcnJlZCBsaXN0LlxuNDU1MjpcdFx0ICovXG40NTUzOlx0XHRpZiAoZm9saW9fb3JkZXIoZm9saW8pIFx1MDAzYz0gMSlcbjQ1NTQ6XHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgYW5hbHlzaXMsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB3b3JraW5nIHdpdGggaHVnZSBtZW1vcnksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyBgbW0vaHVnZV9tZW1vcnkuY2AuIE15IGZpcnN0IHN0b3AgaXMgZ29pbmcgdG8gYmUgdGhlIEtjb25maWcgZmlsZXMuIEkga25vdyB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSByZWxpZXMgaGVhdmlseSBvbiB0aG9zZSB0byBkZXRlcm1pbmUgd2hhdCBnZXRzIGNvbXBpbGVkLCBhbmQgdGhlIG9wdGlvbnMgdGhhdCBhcmUgZXhwb3NlZCB0byB1c2Vycy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggS2NvbmZpZyBvcHRpb25zLCBpZiBhbnksIGRpcmVjdGx5IGdvdmVybiB0aGUgaW5jbHVzaW9uIG9mIHRoYXQgc3BlY2lmaWMgc291cmNlIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMuCgpOZXh0LCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeS4gS2NvbmZpZyB0ZWxscyB1cyAqd2hhdCogb3B0aW9ucyBleGlzdCwgYnV0IHRoZSBNYWtlZmlsZSB0ZWxscyB1cyAqaG93KiB0aG9zZSBvcHRpb25zIGFyZSBhcHBsaWVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHNlZSB0aGUgY29tcGlsYXRpb24gcnVsZXMgYW5kIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHdpdGhpbiB0aGF0IE1ha2VmaWxlIHRoYXQgcmVsYXRlIHRvIGBodWdlX21lbW9yeS5jYC4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGJ1aWxkLXRpbWUgcmVsYXRpb25zaGlwcyBhbmQgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZpbGUgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgYnVpbGQgZGVwZW5kZW5jeSBjaGFpbiBhbmQgaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgcHJlcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnlcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMT1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMjpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAzLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTU4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgbWFpbiBrbm9iLCB0aGUgY29yZSBjb25maWd1cmF0aW9uIGl0ZW0gZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEJ1dCwgYXMgYWx3YXlzLCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gV2hhdCBlbHNlIGlzIGVudGFuZ2xlZCB3aXRoIHRoaXM/IFdoZXJlIGRvZXMgaXQgcmVzaWRlIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBoaWVyYXJjaHk/IEkgbmVlZCB0byBjaGVjayBgbW0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgYW55IGRlcGVuZGVuY2llcywgbWF5YmUgZXZlbiBzb21lIGNvbmRpdGlvbmFsIHNldHRpbmdzIG9yIGZlYXR1cmVzIHRoYXQgdGllIGluIHdpdGggYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBleHBlY3QgdGhlcmUgdG8gYmUgYSBmZXcgbGV2ZXJzIGFuZCBkaWFscyBhdCBwbGF5IHRvIGNvbnRyb2wgVEhQIGJlaGF2aW9yIGVmZmVjdGl2ZWx5LiBVbmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUsIGFsbCB0aGUgcmVsYXRlZCBjb25maWcgb3B0aW9ucywgaXMga2V5IHRvIHR1bmluZyB0aGlzIGFyZWEgcHJvcGVybHkuIFRpbWUgdG8gc3RhcnQgcmVhZGluZyB0aHJvdWdoIHRoYXQgS2NvbmZpZyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04Mjc9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MjktXG5tbS9LY29uZmlnOjgzMDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzMS1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODQ4PWNob2ljZVxuLS1cbm1tL0tjb25maWctODUzLVxubW0vS2NvbmZpZzo4NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg1NS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2MC1cbm1tL0tjb25maWc6ODYxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODYyLVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2OS1cbm1tL0tjb25maWc6ODcwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3MS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODc3PWNob2ljZVxuLS1cbm1tL0tjb25maWctODg2LVxubW0vS2NvbmZpZzo4ODc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04ODgtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg5Ni1cbm1tL0tjb25maWc6ODk3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg5OC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwNC1cbm1tL0tjb25maWc6OTA1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTA2LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTItXG5tbS9LY29uZmlnOjkxMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTQtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05MjI9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzEtXG5tbS9LY29uZmlnOjkzMjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzMy1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQwLVxubW0vS2NvbmZpZzo5NDE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQyLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ4LVxubW0vS2NvbmZpZzo5NDk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTAtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1Ni1cbm1tL0tjb25maWc6OTU3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk1OC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIFJvbGUgb2YgREVCVUdfVk0gaW4gVk1fV0FSTl9PTl9GT0xJTyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYERFQlVHX1ZNYCBhbmQgYFZNX1dBUk5fT05fRk9MSU9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGBERUJVR19WTWAgaXMgYSBwcmVyZXF1aXNpdGUgb3IgYSBjb25kaXRpb25hbCBmYWN0b3IgaW4gdGhlIGJlaGF2aW9yIG9mIGBWTV9XQVJOX09OX0ZPTElPYC4gSXQmIzM5O3MgYSBiaXQgb2YgYSBodW5jaCwgYnV0IHRoZXNlIHR5cGVzIG9mIGRlYnVnIG9wdGlvbnMgb2Z0ZW4gYWZmZWN0IHdhcm5pbmcgb3IgZXJyb3IgYmVoYXZpb3JzLCBzbyBpdCYjMzk7cyBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuCgpJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgVk1fV0FSTl9PTl9GT0xJT2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIG1hY3JvIHRvIGRldGVybWluZSBpZiB0aGUgYERFQlVHX1ZNYCBmbGFnIGlzIHVzZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBkZWZpbml0aW9uLiBJZiBzbywgaXQgd291bGQgZXhwbGFpbiB0aGUgcmVsYXRpb25zaGlwIGFuZCBob3cgdG8gcHJvY2VlZCwgb3RoZXJ3aXNlLCBJIGNhbiBpbnZlc3RpZ2F0ZSBvdGhlciBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW1kZWJ1Zy5oPTE4PXZvaWQgdm1hX2l0ZXJfZHVtcF90cmVlKGNvbnN0IHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSk7XG4tLVxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtNjktfSlcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oOjcwOiNkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyhjb25kLCBmb2xpbylcdFx0KHtcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtNzEtXHRpbnQgX19yZXRfd2FybiA9ICEhKGNvbmQpO1x0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzNS0jZGVmaW5lIFZNX1dBUk5fT05fT05DRV9QQUdFKGNvbmQsIHBhZ2UpICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmg6MTM2OiNkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyhjb25kLCBmb2xpbykgIEJVSUxEX0JVR19PTl9JTlZBTElEKGNvbmQpXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC0xMzctI2RlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjIwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBtbWRlYnVnLmhgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgY2VydGFpbiBkZWJ1Z2dpbmcgZmxhZ3MgYW5kIG1hY3JvcyBhcmUgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiBgaW5jbHVkZS9saW51eC9tbWRlYnVnLmhgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZXMgNjAgdGhyb3VnaCA3NS4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHJldmlzaXQgdGhvc2UgY29yZSBkZWJ1ZyBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWxseSBjYXRjaCBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9ibGVtIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9uIG9yIHVzZSBvZiBrZXkgZGVidWcgZmxhZ3Mgb3IgbWFjcm9zIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiBvciBvdGhlciBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGRlYnVnZ2luZyBmYWNpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW1kZWJ1Zy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFwmIzM0Oy5kYXRhLi5vbmNlXCYjMzQ7KSBfX3dhcm5lZDtcdFx0XHRcXFxuICA2MTpcdFx0aW50IF9fcmV0X3dhcm5fb25jZSA9ICEhKGNvbmQpO1x0XHRcdFx0XHRcXFxuICA2MjpcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDYzOlx0XHRpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbmNlIFx1MDAyNlx1MDAyNiAhX193YXJuZWQpKSB7XHRcdFx0XFxcbiAgNjQ6XHRcdFx0ZHVtcF9wYWdlKHBhZ2UsIFwmIzM0O1ZNX1dBUk5fT05fT05DRV9QQUdFKFwmIzM0OyBfX3N0cmluZ2lmeShjb25kKVwmIzM0OylcJiMzNDspO1xcXG4gIDY1Olx0XHRcdF9fd2FybmVkID0gdHJ1ZTtcdFx0XHRcdFx0XFxcbiAgNjY6XHRcdFx0V0FSTl9PTigxKTtcdFx0XHRcdFx0XHRcXFxuICA2NzpcdFx0fVx0XHRcdFx0XHRcdFx0XHRcXFxuICA2ODpcdFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbmNlKTtcdFx0XHRcdFx0XFxcbiAgNjk6XHR9KVxuICA3MDpcdCNkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyhjb25kLCBmb2xpbylcdFx0KHtcdFx0XHRcXFxuICA3MTpcdFx0aW50IF9fcmV0X3dhcm4gPSAhIShjb25kKTtcdFx0XHRcdFx0XFxcbiAgNzI6XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICA3MzpcdFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm4pKSB7XHRcdFx0XHRcdFxcXG4gIDc0Olx0XHRcdGR1bXBfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBcJiMzNDtWTV9XQVJOX09OX0ZPTElPKFwmIzM0OyBfX3N0cmluZ2lmeShjb25kKVwmIzM0OylcJiMzNDspO1xcXG4gIDc1Olx0XHRcdFdBUk5fT04oMSk7XHRcdFx0XHRcdFx0XFxcbiAgNzY6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiAgNzc6XHRcdHVubGlrZWx5KF9fcmV0X3dhcm4pO1x0XHRcdFx0XHRcdFxcXG4gIDc4Olx0fSlcbiAgNzk6XHQjZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbylcdCh7XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgbW1kZWJ1Zy5oYCDigJMgR290dGEgVW5kZXJzdGFuZCBUaGlzIEd1YXJkKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoYXQgYGlmZGVmYCBndWFyZCBpbiBgbW1kZWJ1Zy5oYC4gSXQmIzM5O3MgY3J1Y2lhbCwgb2J2aW91c2x5LiBJJiMzOTttIGJldHRpbmcgdGhpcyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZWJ1Z2dpbmcgZmVhdHVyZXMgaW4gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gYXJlIGNvbnRyb2xsZWQgYXQgY29tcGlsZSB0aW1lLiBXaGF0IHNwZWNpZmljIGZlYXR1cmVzIGRvZXMgaXQgZW5hYmxlL2Rpc2FibGU/IFdoYXQgZGVmaW5lcyBhcmUgY2hlY2tlZD8gSXMgaXQgYSBzaW5nbGUsIG92ZXJhcmNoaW5nIGZsYWcsIG9yIGEgbW9yZSBncmFudWxhciBhcHByb2FjaCwgdGFyZ2V0aW5nIHNwZWNpZmljIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXRpZXM/IFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcmUgYmVpbmcgdXNlZCwgYW5kIHRoZWlyIGltcGFjdC4gSG93IGRvZXMgdGhpcyBndWFyZCBhZmZlY3QgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHdoYXQgZXhhY3RseSBpcyBiZWluZyBpbmNsdWRlZCBvciBleGNsdWRlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZWNoYW5pc20gY29tcGxldGVseSB0byBlZmZlY3RpdmVseSB0cm91Ymxlc2hvb3QsIG9wdGltaXplLCBvciBleHRlbmQgdGhpcyBtZW1vcnkgbWFuYWdlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tZGVidWcuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0I2lmbmRlZiBMSU5VWF9NTV9ERUJVR19IXG4gICAzOlx0I2RlZmluZSBMSU5VWF9NTV9ERUJVR19IIDFcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0c3RydWN0IHBhZ2U7XG4gICA5Olx0c3RydWN0IHZtX2FyZWFfc3RydWN0O1xuICAxMDpcdHN0cnVjdCBtbV9zdHJ1Y3Q7XG4gIDExOlx0c3RydWN0IHZtYV9pdGVyYXRvcjtcbiAgMTI6XHRzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdDtcbiAgMTM6XHRcbiAgMTQ6XHR2b2lkIGR1bXBfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgY29uc3QgY2hhciAqcmVhc29uKTtcbiAgMTU6XHR2b2lkIGR1bXBfdm1hKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiAgMTY6XHR2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuICAxNzpcdHZvaWQgZHVtcF92bWcoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZywgY29uc3QgY2hhciAqcmVhc29uKTtcbiAgMTg6XHR2b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xuICAxOTpcdFxuICAyMDpcdCNpZmRlZiBDT05GSUdfREVCVUdfVk1cbiAgMjE6XHQjZGVmaW5lIFZNX0JVR19PTihjb25kKSBCVUdfT04oY29uZClcbiAgMjI6XHQjZGVmaW5lIFZNX0JVR19PTl9QQUdFKGNvbmQsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gIDIzOlx0XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDI0Olx0XHRcdGlmICh1bmxpa2VseShjb25kKSkge1x0XHRcdFx0XHRcXFxuICAyNTpcdFx0XHRcdGR1bXBfcGFnZShwYWdlLCBcJiMzNDtWTV9CVUdfT05fUEFHRShcJiMzNDsgX19zdHJpbmdpZnkoY29uZClcJiMzNDspXCYjMzQ7KTtcXFxuICAyNjpcdFx0XHRcdEJVRygpO1x0XHRcdFx0XHRcdFxcXG4gIDI3Olx0XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gIDI4Olx0XHR9IHdoaWxlICgwKVxuICAyOTpcdCNkZWZpbmUgVk1fQlVHX09OX0ZPTElPKGNvbmQsIGZvbGlvKVx0XHRcdFx0XHRcXFxuICAzMDpcdFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuICAzMTpcdFx0XHRpZiAodW5saWtlbHkoY29uZCkpIHtcdFx0XHRcdFx0XFxcbiAgMzI6XHRcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Vk1fQlVHX09OX0ZPTElPKFwmIzM0OyBfX3N0cmluZ2lmeShjb25kKVwmIzM0OylcJiMzNDspO1xcXG4gIDMzOlx0XHRcdFx0QlVHKCk7XHRcdFx0XHRcdFx0XFxcbiAgMzQ6XHRcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiAgMzU6XHRcdH0gd2hpbGUgKDApXG4gIDM2Olx0I2RlZmluZSBWTV9CVUdfT05fVk1BKGNvbmQsIHZtYSlcdFx0XHRcdFx0XFxcbiAgMzc6XHRcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMzg6XHRcdFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XHRcdFx0XHRcdFxcXG4gIDM5Olx0XHRcdFx0ZHVtcF92bWEodm1hKTtcdFx0XHRcdFx0XFxcbiAgNDA6XHRcdFx0XHRCVUcoKTtcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA0MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogSHVnZSBQYWdlIFNwbGl0IExvZ2ljKioKCk9rYXksIHNvIGBDT05GSUdfREVCVUdfVk1gIGVuYWJsZXMgYFZNX1dBUk5fT05fRk9MSU9gLCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29tcGlsZXMgYG1tL2h1Z2VfbWVtb3J5LmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IHRoZSBlZmZvcnQ/CgpMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjogbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nLCBCUEYsIHNjaGVkdWxlciwgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLCAqYW5kKiBhbnkgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9ucyBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIHNlZSBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgYWRkcyBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucyByZWxhdGVkIHRvIGZvbGlvIHJlZiBjb3VudHMgYW5kIGRlZmVycmVkIGxpc3RzLiBDcml0aWNhbGx5LCB0aGVzZSBhc3NlcnRpb25zIGFyZSAqaW4qIHRoZSB0cmFuc3BhcmVudCBodWdlcGFnZSAoVEhQKSAvIG1USFAgc3BsaXQgcGF0aCB3aXRoaW4gYG1tL2AuIFNwZWNpZmljYWxseSwgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGFyZSBpbnZvbHZlZC4gVGhpcyBzY3JlYW1zICYjMzQ7cmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OyBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB0aGUgbmV4dCBzdGVwLiBMZXQmIzM5O3Mgb3B0aW1pemUgb3VyIGZ1enppbmcgYnkgZm9jdXNpbmcgb24gc3BlY2lmaWMsIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGZpbmQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cy4gTGV0JiMzOTtzIGRyaWxsIGludG8gdGhlIGtleSBmdW5jdGlvbnMgY2hhbmdlZCBvciBjYWxsZWQ6CgoqICAgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgKGlzIHN0YXRpYyksIHNvIGxldCYjMzk7cyBjaGVjayBpdHMgY2FsbGVycyBvciByZWxhdGVkIHNwbGl0IGZ1bmN0aW9ucy4KKiAgIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgCiogICBgZGVmZXJyZWRfc3BsaXRfc2NhbmAKKiAgIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAKKiAgIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCAoc3RhdGljLCBzbywgaW5saW5lZD8pCgpJIG5lZWQgdG8gc2VlIHdoZXJlIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBhcmUgY2FsbGVkLCBib3RoIGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgcG90ZW50aWFsbHkgZWxzZXdoZXJlLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZHxfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zOTc1PXN0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5OTItXG5tbS9odWdlX21lbW9yeS5jOjM5OTM6c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzk5NC1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDE0Nj1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtXG5tbS9odWdlX21lbW9yeS5jOjQyNzY6XHRyZXQgPSBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFx1MDAyNnhhcywgbWFwcGluZyxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny1cdFx0XHRcdFx0XHR0cnVlLCBsaXN0LCBzcGxpdF90eXBlLCBlbmQsIFx1MDAyNm5yX3NobWVtX2Ryb3BwZWQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDM2ND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzNzYtXHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xubW0vaHVnZV9tZW1vcnkuYzo0Mzc3Olx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIE5VTEwsXG5tbS9odWdlX21lbW9yeS5jLTQzNzgtXHRcdFx0XHRcdFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0OTg9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MDMtLypcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwNDogKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5OlxubW0vaHVnZV9tZW1vcnkuYy00NTA1LSAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNi0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDUxNzpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00NTE4LXtcbi0tXG5tbS9pbnRlcm5hbC5oPTcyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9pbnRlcm5hbC5oLTczMy1cbm1tL2ludGVybmFsLmg6NzM0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaW50ZXJuYWwuaC03MzUtc3RhdGljIGlubGluZSBib29sIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9pbnRlcm5hbC5oLTc0Ny1cbm1tL2ludGVybmFsLmg6NzQ4Olx0cmV0dXJuIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9pbnRlcm5hbC5oLTc0OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGwgU2l0ZXMgb2YgYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBXaGF0JiMzOTtzIHRyaWdnZXJpbmcgaXQ/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXMgaXQgcGFydCBvZiBhIGhvdCBwYXRoLCBvciBzb21ldGhpbmcgbW9yZSBhbmNpbGxhcnk/IEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBkaWN0YXRlIGhvdyB0byBhcHByb2FjaCBhbnkgYW5hbHlzaXMgb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuIFNvLCB0aGUgZmlyc3Qgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZvbGlvLmM9OTE9dm9pZCBfX2ZvbGlvX3B1dChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMTAzLVx0cGFnZV9jYWNoZV9yZWxlYXNlKGZvbGlvKTtcbm1tL2ZvbGlvLmM6MTA0Olx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9mb2xpby5jLTEwNS1cdG1lbV9jZ3JvdXBfdW5jaGFyZ2UoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9MTUyPXN0YXRpYyB2b2lkIGZvbGlvX2JhdGNoX21vdmVfbHJ1KHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoLCBtb3ZlX2ZuX3QgbW92ZV9mbilcbi0tXG5tbS9mb2xpby5jLTE4Ni1cdFx0XHRfX2ZvbGlvX2NsZWFyX3VuZXZpY3RhYmxlKGZvbGlvKTtcbm1tL2ZvbGlvLmM6MTg3Olx0XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vZm9saW8uYy0xODgtXHRcdFx0ZmJhdGNoLVx1MDAzZWZvbGlvc1tpXSA9IE5VTEw7XG4tLVxubW0vZm9saW8uYz05ODQ9dm9pZCBmb2xpb3NfcHV0X3JlZnMoc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MsIHVuc2lnbmVkIGludCAqcmVmcylcbi0tXG5tbS9mb2xpby5jLTEwMjItXHRcdH1cbm1tL2ZvbGlvLmM6MTAyMzpcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9mb2xpby5jLTEwMjQtXHRcdF9fcGFnZV9jYWNoZV9yZWxlYXNlKGZvbGlvLCBcdTAwMjZscnV2ZWMsIFx1MDAyNmZsYWdzKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5OTM9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMDktXHRcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MDEwOlx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDAxMS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0OTg9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MDMtLypcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwNDogKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5OlxubW0vaHVnZV9tZW1vcnkuYzo0NTA1OiAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxubW0vaHVnZV9tZW1vcnkuYy00NTA2LSAqIGxpbWl0cyBpdHMgY2FsbHMgdG8gdGhvc2UgZm9saW9zIHdoaWNoIG1heSBoYXZlIGEgX2RlZmVycmVkX2xpc3QgZm9yXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTA4LSAqXG5tbS9odWdlX21lbW9yeS5jOjQ1MDk6ICogSXQgaXMgdW5zYWZlIHRvIGNhbGwgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIHVudGlsIGZvbGlvIHJlZmNvdW50IGlzXG5tbS9odWdlX21lbW9yeS5jLTQ1MTAtICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MTYtICovXG5tbS9odWdlX21lbW9yeS5jOjQ1MTc6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxOC17XG4tLVxubW0vaW50ZXJuYWwuaD03MjI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vaW50ZXJuYWwuaC03MzMtXG5tbS9pbnRlcm5hbC5oOjczNDpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2ludGVybmFsLmg6NzM1OnN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9pbnRlcm5hbC5oLTczNi17XG4tLVxubW0vaW50ZXJuYWwuaC03NDctXG5tbS9pbnRlcm5hbC5oOjc0ODpcdHJldHVybiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vaW50ZXJuYWwuaC03NDktfVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNjk9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTMwNC1cbm1tL21lbWNvbnRyb2wtdjEuYzozMDU6XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0zMDYtXHRmb2xpby1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTM5MT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1Zylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQyOC1cbm1tL21lbWNvbnRyb2wuYzo1NDI5Olx0XHRXQVJOX09OX09OQ0UoZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbykpO1xubW0vbWVtY29udHJvbC5jLTU0MzAtXHR9XG4tLVxubW0vbWVtY29udHJvbC5jPTU1Njg9dm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjA5LVx0LyogV2FybmluZyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBzbyBkb24mIzM5O3Qgd29ycnkgYWJvdXQgcmVmY291bnQgbm9uLTAgKi9cbm1tL21lbWNvbnRyb2wuYzo1NjEwOlx0V0FSTl9PTl9PTkNFKGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQob2xkKSk7XG5tbS9tZW1jb250cm9sLmMtNTYxMS1cdG9sZC1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbi0tXG5tbS9taWdyYXRlLmM9NTgzPXN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vbWlncmF0ZS5jLTU5Ny1cdFx0XHRcdHJldHVybiAtRUFHQUlOO1xubW0vbWlncmF0ZS5jOjU5ODpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL21pZ3JhdGUuYy01OTktXHRcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCBleHBlY3RlZF9jb3VudCk7XG4tLVxubW0vbWlncmF0ZS5jLTYzMC1cdC8qIFRha2Ugb2ZmIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovXG5tbS9taWdyYXRlLmM6NjMxOlx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9taWdyYXRlLmMtNjMyLVxuLS1cbm1tL3Ztc2Nhbi5jPTEwODE9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTE1MzQtXG5tbS92bXNjYW4uYzoxNTM1Olx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTE1MzYtXHRcdGlmIChmb2xpb19iYXRjaF9hZGQoXHUwMDI2ZnJlZV9mb2xpb3MsIGZvbGlvKSA9PSAwKSB7XG4tLVxubW0vdm1zY2FuLmM9MTg5ND1zdGF0aWMgdW5zaWduZWQgaW50IG1vdmVfZm9saW9zX3RvX2xydShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL3Ztc2Nhbi5jLTE5MjktXG5tbS92bXNjYW4uYzoxOTMwOlx0XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vdm1zY2FuLmMtMTkzMS1cdFx0XHRpZiAoZm9saW9fYmF0Y2hfYWRkKFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgSHVnZSBQYWdlIFNwbGl0dGluZyBMb2dpYyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGh1Z2UgcGFnZXMgYXJlIGJlaW5nIHNwbGl0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoYXQgc3BsaXR0aW5nIHByb2Nlc3MuIEkgc2VlIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIOKAkyB0aGF0JiMzOTtzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgZGVjbGFyZWQgaW4gYG1tL2ludGVybmFsLmhgLCBzbyBJIHNob3VsZCBwcm9iYWJseSBiZSBhd2FyZSBvZiB0aGF0IGRlY2xhcmF0aW9uIGFzIHdlbGwuIEkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlIHdoaWNoIHBlcmZvcm0gdGhlIHNwbGl0dGluZyBvcGVyYXRpb24/IFBlcmhhcHMgc29tZXRoaW5nIGxpa2UgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZS4gVGltZSB0byBlaXRoZXIgbG9vayBhdCB3aGF0IGNhbGxzIGl0IG9yIGZpbmQgb3RoZXIgcmVsYXRlZCBzeW1ib2xzIGluIGBodWdlX21lbW9yeS5jYC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlfHNwbGl0X2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTE0MDE9dm9pZCBtYXBfYW5vbl9mb2xpb19wbWRfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQxMS1cdHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwgaGFkZHIsIHBtZCk7XG5tbS9odWdlX21lbW9yeS5jOjE0MTI6XHRkZWZlcnJlZF9zcGxpdF9mb2xpbyhmb2xpbywgZmFsc2UpO1xubW0vaHVnZV9tZW1vcnkuYy0xNDEzLX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTI0MDI9Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNDQ4LVx0XHRzcGluX3VubG9jayhwdGwpO1xubW0vaHVnZV9tZW1vcnkuYzoyNDQ5Olx0XHRzcGxpdF9mb2xpbyhmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jLTI0NTAtXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjM5PXN0YXRpYyB2b2lkIHJlbWFwX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBuciwgaW50IGZsYWdzKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzY1NC1cbm1tL2h1Z2VfbWVtb3J5LmM6MzY1NTpzdGF0aWMgdm9pZCBscnVfYWRkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLFxubW0vaHVnZV9tZW1vcnkuYy0zNjU2LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjgwPXN0YXRpYyBib29sIHBhZ2VfcmFuZ2VfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNjkxLSAqL1xubW0vaHVnZV9tZW1vcnkuYzozNjkyOnN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzY5My1cdFx0aW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM4MzItICogMS4gdW5pZm9ybSBzcGxpdDogQHhhcyBpcyBzcGxpdCB3aXRoIG5vIGV4cGVjdGF0aW9uIG9mIGZhaWx1cmUgYW5kIGEgc2luZ2xlXG5tbS9odWdlX21lbW9yeS5jOjM4MzM6ICogICAgX19zcGxpdF9mb2xpb190b19vcmRlcigpIGlzIGNhbGxlZCB0byBzcGxpdCB0aGUgQGZvbGlvIGludG8gQG5ld19vcmRlclxubW0vaHVnZV9tZW1vcnkuYy0zODM0LSAqICAgIGFsb25nIHdpdGggc3RhdHMgdXBkYXRlLlxubW0vaHVnZV9tZW1vcnkuYy0zODM1LSAqIDIuIG5vbi11bmlmb3JtIHNwbGl0OiBmb2xpb19vcmRlciAtIEBuZXdfb3JkZXIgY2FsbHMgdG9cbm1tL2h1Z2VfbWVtb3J5LmM6MzgzNjogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgYXJlIGV4cGVjdGVkIHRvIGJlIG1hZGUgaW4gYSBmb3IgbG9vcCB0byBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYy0zODM3LSAqICAgIHRoZSBAZm9saW8gdG8gb25lIGxvd2VyIG9yZGVyIGF0IGEgdGltZS4gVGhlIGZvbGlvIGNvbnRhaW5pbmcgQHNwbGl0X2F0XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zODQ5PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzg5NC1cdFx0cGdhbGxvY190YWdfc3BsaXQoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYzozODk1Olx0XHRfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzg5Ni1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5OTM9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwNzAtXHRcdFx0aWYgKGRvX2xydSlcbm1tL2h1Z2VfbWVtb3J5LmM6NDA3MTpcdFx0XHRcdGxydV9hZGRfc3BsaXRfZm9saW8oZm9saW8sIG5ld19mb2xpbywgbHJ1dmVjLCBsaXN0KTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3Mi1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQzNjQ9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDMwLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0NDMxOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00NDMyLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0OC0gKiBJdCBoYXMgdGhlIHNhbWUgcHJlcmVxdWlzaXRlcyBhbmQgcmV0dXJucyBhc1xubW0vaHVnZV9tZW1vcnkuYzo0NDQ5OiAqIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKCkuXG5tbS9odWdlX21lbW9yeS5jLTQ0NTAtICpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0ODE9dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0OTctXG5tbS9odWdlX21lbW9yeS5jOjQ0OTg6aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ5OS17XG5tbS9odWdlX21lbW9yeS5jOjQ1MDA6XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCwgMCk7XG5tbS9odWdlX21lbW9yeS5jLTQ1MDEtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDUxNz1ib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU0MS0vKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbiYjMzk7dCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDU0Mjp2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbm1tL2h1Z2VfbWVtb3J5LmMtNDU0My17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NjQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjcyLVx0XHRcdGdvdG8gcmVxdWV1ZTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDY3MzpcdFx0aWYgKCFzcGxpdF9mb2xpbyhmb2xpbykpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtNDY3NC1cdFx0XHRkaWRfc3BsaXQgPSB0cnVlO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDY4MS1cdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6NDY4MjpcdFx0ICogSWYgdGhwX3VuZGVydXNlZCgpIHJldHVybnMgZmFsc2UsIG9yIGlmIHNwbGl0X2ZvbGlvKClcbm1tL2h1Z2VfbWVtb3J5LmM6NDY4MzpcdFx0ICogc3VjY2VlZHMsIG9yIGlmIHNwbGl0X2ZvbGlvKCkgZmFpbHMgaW4gdGhlIGNhc2UgaXQgd2FzXG5tbS9odWdlX21lbW9yeS5jLTQ2ODQtXHRcdCAqIHVuZGVydXNlZCwgdGhlbiBjb25zaWRlciBpdCB1c2VkIGFuZCBkb24mIzM5O3QgYWRkIGl0IGJhY2sgdG9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3MDQtI2lmZGVmIENPTkZJR19ERUJVR19GU1xubW0vaHVnZV9tZW1vcnkuYzo0NzA1OnN0YXRpYyB2b2lkIHNwbGl0X2h1Z2VfcGFnZXNfYWxsKHZvaWQpXG5tbS9odWdlX21lbW9yeS5jLTQ3MDYte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDc0MS1cdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDc0MjpcdFx0XHRpZiAoIXNwbGl0X2ZvbGlvKGZvbGlvKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDc0My1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ3NTU9c3RhdGljIGlubGluZSBib29sIHZtYV9ub3Rfc3VpdGFibGVfZm9yX3RocF9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3NjgtXG5tbS9odWdlX21lbW9yeS5jOjQ3Njk6c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxubW0vaHVnZV9tZW1vcnkuYy00NzcwLVx0XHRcdFx0dW5zaWduZWQgbG9uZyB2YWRkcl9lbmQsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODM4LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0ODM5Olx0XHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxubW0vaHVnZV9tZW1vcnkuYy00ODQwLVx0XHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4NTYtXHRcdCAgICBpbl9mb2xpb19vZmZzZXQgXHUwMDNlPSBmb2xpb19ucl9wYWdlcyhmb2xpbykpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NDg1NzpcdFx0XHRpZiAoIXNwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCB0YXJnZXRfb3JkZXIpKVxubW0vaHVnZV9tZW1vcnkuYy00ODU4LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDg4NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDg4NjpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxubW0vaHVnZV9tZW1vcnkuYy00ODg3LVx0XHRcdFx0cGdvZmZfdCBvZmZfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDkzMi1cdFx0aWYgKGluX2ZvbGlvX29mZnNldCBcdTAwM2MgMCB8fCBpbl9mb2xpb19vZmZzZXQgXHUwMDNlPSBucl9wYWdlcykge1xubW0vaHVnZV9tZW1vcnkuYzo0OTMzOlx0XHRcdGlmICghc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIHRhcmdldF9vcmRlcikpXG5tbS9odWdlX21lbW9yeS5jLTQ5MzQtXHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00OTU1LVxubW0vaHVnZV9tZW1vcnkuYzo0OTU2OnN0YXRpYyBzc2l6ZV90IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG5tbS9odWdlX21lbW9yeS5jLTQ5NTctXHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcHMpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy01MDAzLVx0XHR9XG5tbS9odWdlX21lbW9yeS5jOjUwMDQ6XHRcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShmaWxlX3BhdGgsIG9mZl9zdGFydCwgb2ZmX2VuZCxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAwNS1cdFx0XHRcdG5ld19vcmRlciwgaW5fZm9saW9fb2Zmc2V0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwMTQtXHRpZiAocmV0ID09IDEgXHUwMDI2XHUwMDI2IHBpZCA9PSAxKSB7XG5tbS9odWdlX21lbW9yeS5jOjUwMTU6XHRcdHNwbGl0X2h1Z2VfcGFnZXNfYWxsKCk7XG5tbS9odWdlX21lbW9yeS5jLTUwMTYtXHRcdHJldCA9IHN0cmxlbihpbnB1dF9idWYpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTAyMi1cbm1tL2h1Z2VfbWVtb3J5LmM6NTAyMzpcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKHBpZCwgdmFkZHJfc3RhcnQsIHZhZGRyX2VuZCwgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy01MDI0LVx0XHRcdGluX2ZvbGlvX29mZnNldCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy01MDMyLVxubW0vaHVnZV9tZW1vcnkuYzo1MDMzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwbGl0X2h1Z2VfcGFnZXNfZm9wcyA9IHtcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzNC1cdC5vd25lclx0ID0gVEhJU19NT0RVTEUsXG5tbS9odWdlX21lbW9yeS5jOjUwMzU6XHQud3JpdGVcdCA9IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUsXG5tbS9odWdlX21lbW9yeS5jLTUwMzYtfTtcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzNy1cbm1tL2h1Z2VfbWVtb3J5LmM6NTAzODpzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnModm9pZClcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzOS17XG5tbS9odWdlX21lbW9yeS5jOjUwNDA6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3NwbGl0X2h1Z2VfcGFnZXNcJiMzNDssIDAyMDAsIE5VTEwsIE5VTEwsXG5tbS9odWdlX21lbW9yeS5jOjUwNDE6XHRcdFx0ICAgIFx1MDAyNnNwbGl0X2h1Z2VfcGFnZXNfZm9wcyk7XG5tbS9odWdlX21lbW9yeS5jLTUwNDItXHRyZXR1cm4gMDtcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0My19XG5tbS9odWdlX21lbW9yeS5jOjUwNDQ6bGF0ZV9pbml0Y2FsbChzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnMpO1xubW0vaHVnZV9tZW1vcnkuYy01MDQ1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU5NwoJCQkJCQkJb3V0cHV0OiAyMTIKCQkJCQkJCXRob3VnaHRzOiA0ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IG1tL2h1Z2VfbWVtb3J5LmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBkaXZpbmcgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgZm9saW8gc3BsaXR0aW5nLiBJIHNlZSBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQ6IGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCwgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBnaXZlbiBpdHMgY2FsbGVyczogYF9fZm9saW9fc3BsaXRgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBhbmQgdGhlIHZhcmlvdXMgZm9ybXMgb2YgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gQWxzbyB0aGUgYGRlZmVycmVkX3NwbGl0X3NjYW5gIGFuZCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gIGFyZSBvbiBteSByYWRhci4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O3ZlIGdvdCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLiBZZXMsIHRoZXNlIGFyZSBleGFjdGx5IHdoYXQgSSYjMzk7ZCBleHBlY3QuIFRoZXkmIzM5O3JlIHRhcmdldGVkIGF0IFRIUCBhbmQgZm9saW8gc3BsaXR0aW5nLCBkZWFsaW5nIHdpdGggZGVmZXJyZWQgb3BlcmF0aW9ucywgd2hpY2ggYXJlIGdyZWF0IGZvciBmb2N1c2VkIGZ1enppbmcuIFRoZXkgYXJlbiYjMzk7dCBnZW5lcmljLCB3aWRlc3ByZWFkIGZ1bmN0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgZWZmaWNpZW50IHRlc3RpbmcuCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIHdlJiMzOTtsbCBuZWVkIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIG9idmlvdXNseSwgYW5kLCBmb3Igcm9idXN0IGVycm9yIGNoZWNraW5nLCB3ZSBzaG91bGQgZW5hYmxlIGBERUJVR19WTWAgdG8gZW5zdXJlIHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucyBhcmUgYWN0aXZlLgoKT2theSwgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIGEgcXVpY2sgY2hlY2tsaXN0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBiZWVuIG1pc3NlZC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVCVUdfVk1gLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBhbGwgdGhlcmUuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IGl0JiMzOTtzIFRIUC9mb2xpbyBzcGxpdHRpbmcgd2l0aCBkZWZlcnJlZCBvcGVyYXRpb25zIGFuZCB0YXJnZXRlZCBmdW5jdGlvbnMuIEFsbCBjaGVja2VkIGFuZCB2ZXJpZmllZC4gVGltZSB0byBmaW5hbGl6ZSB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSBpbiBtbS9odWdlX21lbW9yeS5jLCB3aGljaCBhZGRzIG5ldyBydW50aW1lIGFzc2VydGlvbiBjaGVja3MgKFZNX1dBUk5fT05fRk9MSU8gZm9yIHJlZmNvdW50IGFuZCBlbXB0eSBkZWZlcnJlZCBsaXN0KSBhbmQgdXBkYXRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBwYXJ0aWFsbHkgbWFwcGVkIGh1Z2UgZm9saW9zIGR1cmluZyBkZWZlcnJlZCBzcGxpdCB1bnF1ZXVpbmcgYW5kIGh1Z2UgcGFnZSB1bm1hcHBlZCBmcmVlemUtYW5kLXNwbGl0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBlbnN1cmUgdGhlIGludmFyaWFudHMgaG9sZCBhY3Jvc3MgVEhQIHNwbGl0dGluZyBhbmQgcmVjbGFtYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSBpbiBtbS9odWdlX21lbW9yeS5jLCB3aGljaCBhZGRzIG5ldyBydW50aW1lIGFzc2VydGlvbiBjaGVja3MgKFZNX1dBUk5fT05fRk9MSU8gZm9yIHJlZmNvdW50IGFuZCBlbXB0eSBkZWZlcnJlZCBsaXN0KSBhbmQgdXBkYXRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBwYXJ0aWFsbHkgbWFwcGVkIGh1Z2UgZm9saW9zIGR1cmluZyBkZWZlcnJlZCBzcGxpdCB1bnF1ZXVpbmcgYW5kIGh1Z2UgcGFnZSB1bm1hcHBlZCBmcmVlemUtYW5kLXNwbGl0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBlbnN1cmUgdGhlIGludmFyaWFudHMgaG9sZCBhY3Jvc3MgVEhQIHNwbGl0dGluZyBhbmQgcmVjbGFtYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNsZWFyaW5nIG9mIHRoZSBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQgbWV0cmljIGRlY3JlbWVudCBpbnRvIGEgc2hhcmVkIGhlbHBlciBmdW5jdGlvbiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpYCwgYWRkaW5nIFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBmb3IgZm9saW8gcmVmY291bnQgYW5kIGRlZmVycmVkIGxpc3Qgc3RhdGUuXG5cblRoaXMgaXMgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgdG91Y2hpbmcgc3RydWN0IGZvbGlvIGZsYWdzIGFuZCBzdGF0aXN0aWNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGJvdW5kcy9sZW5ndGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBzdGF0ZSBhc3NlcnRpb24gZmFpbHVyZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzIGFuZCBLQVNBTi4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5NTMxMGMxMDRlZDIyMmU3N2YzMDg3MWJlODRjNTM4MDI2ZTk5ZTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDIyOjQ2OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggZGQ2NmM2YWQ1YWYxMy4uMjNlZjIyYzJiNWRiMyAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0zOTcyLDYgJiM0MzszOTcyLDI0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm9saW9fY2FjaGVfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CVZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pOwomIzQzOwomIzQzOwlpZiAoIWZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXQKJiM0MzsJICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLgomIzQzOwkgKi8KJiM0MzsJVk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eSgmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTsKJiM0MzsKJiM0MzsJZm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7CiYjNDM7CW1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLAomIzQzOwkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsCiAJCQkJCSAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcywKIAkJCQkJICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsCkBAIC0zOTgwLDcgJiM0MzszOTk4LDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIHsKIAlzdHJ1Y3QgZm9saW8gKmVuZF9mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pOwogCXN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDsKLQlpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwogCWludCByZXQgPSAwOwogCiAJVk1fV0FSTl9PTl9PTkNFKCFtYXBwaW5nICZhbXA7JmFtcDsgZW5kKTsKQEAgLTM5OTgsMTEgJiM0Mzs0MDE1LDcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIAkJICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LgogCQkgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC4KIAkJICovCi0JCWlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7Ci0JCQlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKLQkJCW1vZF9tdGhwX3N0YXQob2xkX29yZGVyLAotCQkJCSAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTsKLQkJfQomIzQzOwkJZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7CiAKIAkJaWYgKG1hcHBpbmcpIHsKIAkJCWludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKQEAgLTQ1MTYsMTEgJiM0Mzs0NTI5LDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbykKIAltZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTsKIAlscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgJmFtcDttZW1jZywgJmFtcDtmbGFncyk7CiAJaWYgKF9fbGlzdF9scnVfZGVsKCZhbXA7ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsICZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0LCBuaWQpKSB7Ci0JCWlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7Ci0JCQlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKLQkJCW1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLAotCQkJCSAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTsKLQkJfQomIzQzOwkJZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7CiAJCXVucXVldWVkID0gdHJ1ZTsKIAl9CiAJbGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCAmYW1wO2ZsYWdzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3OTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlIE1lbW9yeSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGBtbS9odWdlX21lbW9yeS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylgLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCwgYXMgdGhpcyBpcyBhIHZlcnkgc3BlY2lhbGl6ZWQgYXJlYS4gVGhlIGNvZGUgc25pcHBldCBjbGVhcmx5IHNob3dzIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlOiB0byBoYW5kbGUgdGhlIHNjZW5hcmlvIHdoZXJlIGEgYGZvbGlvYCBpcyBwYXJ0aWFsbHkgbWFwcGVkLiBUaGUgZnVuY3Rpb24gZmlyc3QgYXNzZXJ0cyBzb21lIGNvbmRpdGlvbnMsIGxpa2UgdGhlIHJlZiBjb3VudCBhbmQgZGVmZXJyZWQgbGlzdCwgYmVmb3JlIGNsZWFyaW5nIHRoZSBgX3BhcnRpYWxseV9tYXBwZWRgIGZsYWcgYW5kIGRlY3JlbWVudGluZyBhIHJlbGF0ZWQgc3RhdGlzdGljLgoKVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFR3byBkdXBsaWNhdGUgYmxvY2tzIG9mIGNvZGUgdGhhdCBjaGVjayBhbmQgY2xlYXIgdGhlIGBfcGFydGlhbGx5X21hcHBlZGAgZmxhZywgYWxvbmcgd2l0aCB0aGUgc3RhdGlzdGljIG1vZGlmaWNhdGlvbiwgYXJlIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIHRoaXMgbmV3IGhlbHBlciBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIGNsYXNzaWMgcmVmYWN0b3JpbmcgdG8gaW1wcm92ZSBjb2RlIHJlYWRhYmlsaXR5IGFuZCByZWR1Y2UgcmVkdW5kYW5jeSDigJMgYSBnb29kIHByYWN0aWNlLCBvZiBjb3Vyc2UuCgpOb3csIGJlZm9yZSBJIGRlbHZlIGludG8gYSBsaW5lLWJ5LWxpbmUgYW5hbHlzaXMgb2YgYFZNX1dBUk5fT05fRk9MSU9gLCB3aGljaCBJIHNob3VsZCB1bmRlcnN0YW5kIGFueXdheSBhbmQgdGhlIGBtb2RfbXRocF9zdGF0YCBvcGVyYXRpb25zLCBJIHdhbnQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgZ2V0IGEgYnJvYWRlciBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFVuZGVyc3RhbmRpbmcgdGhlIGxhcmdlciBwaWN0dXJlIHdpbGwgaGVscCBtZSBncmFzcCB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYW55IHN1YnRsZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZWVtaW5nbHkgaXNvbGF0ZWQgY2hhbmdlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGh1Z2UgcGFnZXMgYW5kIHRoZWlyIG1hcHBpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZW52aXJvbm1lbnQgaXMgbGlrZSBiZWZvcmUgd2UgZnVsbHkgZXZhbHVhdGUgdGhlIHByb3Bvc2VkIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM5Njg9c3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzQtXG5tbS9odWdlX21lbW9yeS5jOjM5NzU6c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy0zOTc2LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5OTM9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMTctXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MDE4Olx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDAxOS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1MTc9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MzEtXHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG5tbS9odWdlX21lbW9yeS5jOjQ1MzI6XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYy00NTMzLVx0XHR1bnF1ZXVlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBjb2RlIGFyb3VuZCB0aG9zZSBmdW5jdGlvbnM6CgoqKkRpdmluZyBpbnRvIEZvbGlvIEZyZWV6aW5nIGFuZCBTcGxpdHRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaW1wbGljYXRpb25zIG9mIHRoaXMgZm9saW8gZnJlZXppbmcgYW5kIHVubWFwcGluZyBwcm9jZXNzLiBJJiMzOTttIHRyeWluZyB0byBwaWN0dXJlIGhvdyB0aGUgc3lzdGVtIGlzIGhhbmRsaW5nIHRoZSB0cmFuc2l0aW9uIG9mIGEgcG90ZW50aWFsbHkgbGFyZ2UsIHVubWFwcGVkIGZvbGlvLiBJIHN1c3BlY3QgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgaXMgdGhlIGNvcmUgb2YgdGhlIHdvcmssIHByb2JhYmx5IHRha2luZyBhbiB1bm1hcHBlZCBmb2xpbyBhbmQgZWl0aGVyIGZyZWV6aW5nIGl0IChwZXJoYXBzIGZvciBsYXRlciB1c2Ugb3IgbWFwcGluZykgb3Igc3BsaXR0aW5nIGl0IHVwIGlmIGl0JiMzOTtzIHRvbyBsYXJnZSwgYW5kIHF1ZXVpbmcgdXAgdGhlIHJlc3VsdGluZyBzZWdtZW50cy4gVGhlbiwgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgbXVzdCBiZSB0aGUgY2xlYW51cCBjcmV3LCBwcm9jZXNzaW5nIHRob3NlIHF1ZXVlZCwgc3BsaXQgZm9saW8gcGFydHMuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBlaXRoZXIgbWFwcGluZyBvciBkaXNjYXJkaW5nIHRob3NlIHBpZWNlcy4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aGUgdW5tYXBwaW5nIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHRhYmxlcywgd2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgaW4gcGxhY2UsIGFuZCB3aGF0IGhhcHBlbnMgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgaW4gdGhlIHByb2Nlc3MuIEl0JiMzOTtzIGNyaXRpY2FsIHRvIGRldGVybWluZSB3aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGNvdWxkIGFyaXNlIGFuZCBob3cgdGhlIGNvZGUgbWl0aWdhdGVzIHRob3NlLiBVbmRlcnN0YW5kaW5nIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRpb25zIGlzIGtleSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkZWZlcnJlZCBhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NzA6XHRcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxuMzk3MTpcdFx0XHRyZXR1cm4gMDtcbjM5NzI6XHRcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4zOTczOlx0fVxuMzk3NDpcdFxuMzk3NTpcdHN0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbjM5NzY6XHR7XG4zOTc3Olx0XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbjM5Nzg6XHRcbjM5Nzk6XHRcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbjM5ODA6XHRcdFx0cmV0dXJuO1xuMzk4MTpcdFxuMzk4MjpcdFx0LypcbjM5ODM6XHRcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbjM5ODQ6XHRcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbjM5ODU6XHRcdCAqL1xuMzk4NjpcdFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbjM5ODc6XHRcbjM5ODg6XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuMzk4OTpcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4zOTkwOlx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbjM5OTE6XHR9XG4zOTkyOlx0XG4zOTkzOlx0c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbjM5OTQ6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuMzk5NTpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbjM5OTY6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBlbnVtIHNwbGl0X3R5cGUgc3BsaXRfdHlwZSxcbjM5OTc6XHRcdFx0XHRcdFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxuMzk5ODpcdHtcbjM5OTk6XHRcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG40MDAwOlx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG40MDAxOlx0XHRpbnQgcmV0ID0gMDtcbjQwMDI6XHRcbjQwMDM6XHRcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbjQwMDQ6XHRcbjQwMDU6XHRcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICYjNDM7IDEpKSB7XG40MDA2Olx0XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xuNDAwNzpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG40MDA4Olx0XG40MDA5Olx0XHRcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xuNDAxMDpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbjQwMTE6XHRcbjQwMTI6XHRcdFx0LypcbjQwMTM6XHRcdFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxuNDAxNDpcdFx0XHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXG40MDE1Olx0XHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbjQwMTY6XHRcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG40MDE3Olx0XHRcdCAqL1xuNDAxODpcdFx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQwMTk6XHRcbjQwMjA6XHRcdFx0aWYgKG1hcHBpbmcpIHtcbjQwMjE6XHRcdFx0XHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG40MDIyOlx0XG40MDIzOlx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjQwMjQ6XHRcdFx0XHQgICAgbmV3X29yZGVyIFx1MDAzYyBIUEFHRV9QTURfT1JERVIpIHtcbjQwMjU6XHRcdFx0XHRcdGlmIChmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XG40MDI2Olx0XHRcdFx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbyxcbjQwMjc6XHRcdFx0XHRcdFx0XHRcdE5SX1NITUVNX1RIUFMsIC1ucik7XG40MDI4Olx0XHRcdFx0XHR9IGVsc2Uge1xuNDAyOTpcdFx0XHRcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgaWYgSSBhbSB0aGUgb25lIHRoaW5raW5nIGl0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipGb2N1c2VkIFJldmlldyBvZiBTcGVjaWZpYyBDb2RlIExpbmVzKioKCkFscmlnaHQsIEkgbmVlZCB0byB6b29tIGluIG9uIGEgcGFydGljdWxhciBzZWN0aW9uLiBHaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBpc3N1ZSwgSSB3YW50IHRvIHRob3JvdWdobHkgZXhhbWluZSBsaW5lcyA0NTE1IHRocm91Z2ggNDU0NS4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHN1YnRsZSBpbnRlcmFjdGlvbiBvciBhIHBvdGVudGlhbCBlZGdlIGNhc2UgdHJpZ2dlcmVkIGJ5IHRoZSBzdXJyb3VuZGluZyBsb2dpYywgYW5kIHRoZXNlIGxpbmVzIGZhbGwgd2l0aGluIHRoZSBhcmVhIEkmIzM5O20gbW9zdCBpbnRlcmVzdGVkIGluLiBUaGlzIHRhcmdldGVkIHJldmlldyB3aWxsIGFsbG93IG1lIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGxpbmVzIGFyZSBpbmRlZWQgY29udHJpYnV0aW5nIHRvIHRoZSBjdXJyZW50IGlzc3VlLCBvciBpZiB0aGV5IGNhbiBiZSBxdWlja2x5IGRpc2NvdW50ZWQgZnJvbSBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHNhdmluZyBtZSB0aW1lIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDUxNTpcdCAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cbjQ1MTY6XHQgKi9cbjQ1MTc6XHRib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuNDUxODpcdHtcbjQ1MTk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjQ1MjA6XHRcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcbjQ1MjE6XHRcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xuNDUyMjpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjQ1MjM6XHRcdGJvb2wgdW5xdWV1ZWQgPSBmYWxzZTtcbjQ1MjQ6XHRcbjQ1MjU6XHRcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcbjQ1MjY6XHRcdFdBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xuNDUyNzpcdFxuNDUyODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuNDUyOTpcdFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG40NTMwOlx0XHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFx1MDAyNm1lbWNnLCBcdTAwMjZmbGFncyk7XG40NTMxOlx0XHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG40NTMyOlx0XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuNDUzMzpcdFx0XHR1bnF1ZXVlZCA9IHRydWU7XG40NTM0Olx0XHR9XG40NTM1Olx0XHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbjQ1MzY6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDUzNzpcdFxuNDUzODpcdFx0cmV0dXJuIHVucXVldWVkO1x0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xuNDUzOTpcdH1cbjQ1NDA6XHRcbjQ1NDE6XHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbiYjMzk7dCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cbjQ1NDI6XHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbjQ1NDM6XHR7XG40NTQ0Olx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG40NTQ1Olx0XHRpbnQgbmlkO1xuNDU0NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDU0NzpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjQ1NDg6XHRcbjQ1NDk6XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5ODMKCQkJCQkJCW91dHB1dDogMTg1CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZHlpbmcgdXAgc29tZSBjb2RlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSByZXBldGl0aXZlIGxvZ2ljIHRoYXQgY2hlY2tzLCBjbGVhcnMgdGhlIGBQR19wYXJ0aWFsbHlfbWFwcGVkYCBmbGFnIG9uIGEgZm9saW8sIGFuZCBkZWNyZW1lbnRzIHRoZSBgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRGAgc3RhdGlzdGljLiBUaGlzIGlzIGJlaW5nIHB1bGxlZCBpbnRvIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgLiBHb29kLCBnb29kLCBjb25zb2xpZGF0aW9uIGlzIGFsd2F5cyBhIHBsdXMuCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uIOKAkyBkb2VzIHRoaXMgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBiZSBzdXJlIG9mIGJlZm9yZSBzaWduaW5nIG9mZi4gVGhleSYjMzk7dmUgYWRkZWQgc29tZSBkZWJ1Z2dpbmcgYXNzZXJ0aW9uczogYFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pYCBhbmQgYFZNX1dBUk5fT05fRk9MSU8oIWxpc3RfZW1wdHkoJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QpLCBmb2xpbylgLiBUaGVzZSBhcmUgZ29vZCwgYWRkZWQgc2FmZXR5IG5ldHMuIExldCYjMzk7cyBzZWUuLi4KClRoaW5raW5nIGl0IHRocm91Z2guLi4gTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBiZWluZyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHJlbGllZi4gTm8gbmV3IHN0cnVjdCBmaWVsZHMgYXJlIGJlaW5nIGFkZGVkLCBtZWFuaW5nIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIHRob3NlLiBBbmQgY3JpdGljYWxseSwgbm8gZGF0YSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhpcyBpcyBhbGwgb3BlcmF0aW5nIG9uIGV4aXN0aW5nLCBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgdHJhY2tlZCBgc3RydWN0IGZvbGlvc2Ag4oCTIHRob3NlIHBhZ2UgZGVzY3JpcHRvcnMgYWxyZWFkeSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBXZSYjMzk7cmUgKm1hbmlwdWxhdGluZyogZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBub3QgY3JlYXRpbmcgYW55dGhpbmcgbmV3IGZyb20gc2NyYXRjaC4gQW5kLCB0aGVyZSBhcmVuJiMzOTt0IGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IHJlbHkgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBhbnl0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIGFzc2VydGlvbnMsIG9yIGlmIHRoZXJlJiMzOTtzIGxpc3QgY29ycnVwdGlvbiwgd2UmIzM5O2xsIGhpdCBkZWJ1ZyBjaGVja3MsIEtBU0FOLCBvciBsb2NrZGVwIOKAkyBhbGwgb2Ygd2hpY2ggYXJlIGRlc2lnbmVkIHRvIGNhdGNoIHRoaXMgc29ydCBvZiB0aGluZyBlYXJseS4KClRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bSBjb25maWRlbnQgdGhpcyByZWZhY3RvcmluZyAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXNuJiMzOTt0IHJlcXVpcmVkIGluIHRoaXMgY2FzZSwgYmFzZWQgb24gdGhpcyBhbmFseXNpcy4gQWxyaWdodCwgSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIHRoaXMuIFRpbWUgdG8gbWFrZSB0aGF0IGBzZXQtcmVzdWx0c2AgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnIGFuZCB0aGUgY29ycmVzcG9uZGluZyBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVEIG1ldHJpYyBkZWNyZW1lbnQgaW50byBhIHNoYXJlZCBoZWxwZXIgZnVuY3Rpb24gYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKWAsIGFkZGluZyBWTV9XQVJOX09OX0ZPTElPIGFzc2VydGlvbnMgZm9yIGZvbGlvIHJlZmNvdW50IGFuZCBkZWZlcnJlZCBsaXN0IHN0YXRlLlxuXG5UaGlzIGlzIGFuIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHJlZmFjdG9yaW5nIHRvdWNoaW5nIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgc3RhdGlzdGljcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZHMvbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgc3RhdGUgYXNzZXJ0aW9uIGZhaWx1cmVzIG9yIG1lbW9yeSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGNoZWNrcyBhbmQgS0FTQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNsZWFyaW5nIG9mIHRoZSBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQgbWV0cmljIGRlY3JlbWVudCBpbnRvIGEgc2hhcmVkIGhlbHBlciBmdW5jdGlvbiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpYCwgYWRkaW5nIFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBmb3IgZm9saW8gcmVmY291bnQgYW5kIGRlZmVycmVkIGxpc3Qgc3RhdGUuXG5cblRoaXMgaXMgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgdG91Y2hpbmcgc3RydWN0IGZvbGlvIGZsYWdzIGFuZCBzdGF0aXN0aWNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGJvdW5kcy9sZW5ndGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBzdGF0ZSBhc3NlcnRpb24gZmFpbHVyZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzIGFuZCBLQVNBTi4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MTkuNzg0NTAxNjA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyOTgxMzI2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFQlVHX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCIsXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlclwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X2ZvbGlvXCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9zY2FuXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNsZWFyaW5nIG9mIHRoZSBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQgbWV0cmljIGRlY3JlbWVudCBpbnRvIGEgc2hhcmVkIGhlbHBlciBmdW5jdGlvbiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpYCwgYWRkaW5nIFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBmb3IgZm9saW8gcmVmY291bnQgYW5kIGRlZmVycmVkIGxpc3Qgc3RhdGUuXFxuXFxuVGhpcyBpcyBhbiBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCByZWZhY3RvcmluZyB0b3VjaGluZyBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIHN0YXRpc3RpY3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgYm91bmRzL2xlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIChzdWNoIGFzIHN0YXRlIGFzc2VydGlvbiBmYWlsdXJlcyBvciBtZW1vcnkgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MgYW5kIEtBU0FOLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpIGluIG1tL2h1Z2VfbWVtb3J5LmMsIHdoaWNoIGFkZHMgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9uIGNoZWNrcyAoVk1fV0FSTl9PTl9GT0xJTyBmb3IgcmVmY291bnQgYW5kIGVtcHR5IGRlZmVycmVkIGxpc3QpIGFuZCB1cGRhdGVzIHN0YXRlIG1hbmFnZW1lbnQgZm9yIHBhcnRpYWxseSBtYXBwZWQgaHVnZSBmb2xpb3MgZHVyaW5nIGRlZmVycmVkIHNwbGl0IHVucXVldWluZyBhbmQgaHVnZSBwYWdlIHVubWFwcGVkIGZyZWV6ZS1hbmQtc3BsaXQgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgaW52YXJpYW50cyBob2xkIGFjcm9zcyBUSFAgc3BsaXR0aW5nIGFuZCByZWNsYW1hdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MTkuNzg0NTA2NjA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njk4OTc2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOTUzMTBjMTA0ZWQyMjJlNzdmMzA4NzFiZTg0YzUzODAyNmU5OWU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMjI6NDY6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBkZDY2YzZhZDVhZjEzLi4yM2VmMjJjMmI1ZGIzIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTM5NzIsNiArMzk3MiwyNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZvbGlvX2NhY2hlX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuK1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcXG4rXFx0ICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLlxcbitcXHQgKi9cXG4rXFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pO1xcbitcXG4rXFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuK1xcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbitcXHRcXHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXFxuQEAgLTM5ODAsNyArMzk5OCw2IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG4gXFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xcbi1cXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcXHUwMDI2XFx1MDAyNiBlbmQpO1xcbkBAIC0zOTk4LDExICs0MDE1LDcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cXG4gXFx0XFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxcbiBcXHRcXHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbi1cXHRcXHRcXHRtb2RfbXRocF9zdGF0KG9sZF9vcmRlcixcXG4tXFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbiBcXG4gXFx0XFx0aWYgKG1hcHBpbmcpIHtcXG4gXFx0XFx0XFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbkBAIC00NTE2LDExICs0NTI5LDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuIFxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG4gXFx0aWYgKF9fbGlzdF9scnVfZGVsKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xcbi1cXHRcXHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xcbi1cXHRcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4tXFx0XFx0XFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXFxuLVxcdFxcdFxcdFxcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4gXFx0XFx0dW5xdWV1ZWQgPSB0cnVlO1xcbiBcXHR9XFxuIFxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MjAuMzU1NDI1NjE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzM0MDQxMDI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiREVCVUdfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRcIixcbiAgICBcIl9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJcIixcbiAgICBcInNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJmb2xpb19zcGxpdF91bm1hcHBlZFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSBpbiBtbS9odWdlX21lbW9yeS5jLCB3aGljaCBhZGRzIG5ldyBydW50aW1lIGFzc2VydGlvbiBjaGVja3MgKFZNX1dBUk5fT05fRk9MSU8gZm9yIHJlZmNvdW50IGFuZCBlbXB0eSBkZWZlcnJlZCBsaXN0KSBhbmQgdXBkYXRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBwYXJ0aWFsbHkgbWFwcGVkIGh1Z2UgZm9saW9zIGR1cmluZyBkZWZlcnJlZCBzcGxpdCB1bnF1ZXVpbmcgYW5kIGh1Z2UgcGFnZSB1bm1hcHBlZCBmcmVlemUtYW5kLXNwbGl0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBlbnN1cmUgdGhlIGludmFyaWFudHMgaG9sZCBhY3Jvc3MgVEhQIHNwbGl0dGluZyBhbmQgcmVjbGFtYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjk1MzEwYzEwNGVkMjIyZTc3ZjMwODcxYmU4NGM1MzgwMjZlOTllOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjI6NDY6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZGQ2NmM2YWQ1YWYxMy4uMjNlZjIyYzJiNWRiMyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTcyLDYgKzM5NzIsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbitcbitcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbitcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbitcdCAqL1xuK1x0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbitcbitcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuK1x0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4rXHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbit9XG4rXG4gc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbkBAIC0zOTgwLDcgKzM5OTgsNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgblxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4tXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXHUwMDI2XHUwMDI2IGVuZCk7XG5AQCAtMzk5OCwxMSArNDAxNSw3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbiBcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFxuIFx0XHRpZiAobWFwcGluZykge1xuIFx0XHRcdGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbkBAIC00NTE2LDExICs0NTI5LDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuIFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKF9fbGlzdF9scnVfZGVsKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFx0XHR1bnF1ZXVlZCA9IHRydWU7XG4gXHR9XG4gXHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjIwLjM1NTQyODAxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzNTAyNDc5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdlIE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBpdCdzIGZvY3VzZWQgb24gYG1tL2h1Z2VfbWVtb3J5LmNgLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKWAsIGJlaW5nIGludHJvZHVjZWQuIEkgaW1tZWRpYXRlbHkgbm90aWNlIHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgY2FsbHMuIEFsd2F5cyBnb29kIHRvIHNlZSB0aG9zZSBzYW5pdHkgY2hlY2tzIOKAkyBgZm9saW9fcmVmX2NvdW50KGZvbGlvKWAgYW5kIGAhbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdClgLiBUaGVzZSBhcmUgaW1wb3J0YW50IHRvIGNhdGNoIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbWlzdXNlIG9mIHRoZSBmb2xpbyBzdHJ1Y3R1cmUuIFRoZSBpbnRlbnQgaXMgY2xlYXI6IHRvIGVuc3VyZSB3ZSdyZSBub3QgdG91Y2hpbmcgYSBmb2xpbyB0aGF0J3Mgc3RpbGwgaW4gdXNlIG9yIGF3YWl0aW5nIGRlZmVycmVkIGFjdGlvbnMgd2hlbiB3ZSByZXNldCB0aGUgcGFydGlhbGx5IG1hcHBlZCBmbGFnLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSByZXBsYWNlbWVudCBvZiBkaXJlY3QgY2xlYXJpbmcgb2YgYHBhcnRpYWxseV9tYXBwZWRgIGluIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCB3aXRoIGEgY2FsbCB0byB0aGlzIG5ldyBoZWxwZXIuIFRoYXTigJlzIHByb2JhYmx5IGEgZ29vZCBtb3ZlIGZvciBlbmNhcHN1bGF0aW9uIGFuZCBwb3RlbnRpYWwgZnV0dXJlIG1haW50YWluYWJpbGl0eS4gSXQgc3VnZ2VzdHMgYSByZWZhY3RvcmluZyB0byBjZW50cmFsaXplIHRoZSBsb2dpYyByZWxhdGVkIHRvIHRoaXMgYHBhcnRpYWxseV9tYXBwZWRgIGZsYWcsIHdoaWNoIGlzIGEgY29tbW9uIHByYWN0aWNlIGluIHRoaXMgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcy4gVG8gcHJvcGVybHkgYXNzZXNzIHRoZSBpbXBhY3QgYW5kIHJlYXNvbmluZywgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSdsbCBlaXRoZXIgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgcmVsZXZhbnQgdXNlcyBvciBqdXN0IHJlYWQgdGhyb3VnaCB0aGUgY29kZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGluIHRoZSBmb2xpbyBzcGxpdC91bm1hcHBpbmcgcHJvY2Vzc2VzLCBwcm9iYWJseSByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgYW5kIHBhZ2UgdGFibGUgbWFuYWdlbWVudC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjoyNi43MDU2Nzc3ODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyNDIyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9Mzk2OD1zdGF0aWMgdW5zaWduZWQgaW50IGZvbGlvX2NhY2hlX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTc0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NTpzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy0zOTc2LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mzk5Mz1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MDE3LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDAxODpcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTQwMTktXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1MTc9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzMS1cXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTMyOlxcdFxcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzMy1cXHRcXHR1bnF1ZXVlZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjI2Ljc3OTkyNDMwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODUxODQ2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIGFyb3VuZCBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGNhbGxlcnMgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkncmUgdXNlZCBpcyBwYXJhbW91bnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hhdCBjb25maWd1cmF0aW9ucyB0cmlnZ2VyIHRoZWlyIHVzZS4gSSBiZXQgdGhlcmUgYXJlIHNvbWUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBjaGVjaywgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHBlcmhhcHMgdGhpbmdzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBvciBvdGhlciByZWxhdGVkIHNldHRpbmdzLiBLbm93aW5nICp3aGVyZSogdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIHdpZGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSB3aWxsIHJlYWxseSBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IGl0IGFsbCBoYW5ncyB0b2dldGhlci4gSSBuZWVkIHRvIGxvb2sgYXQgdGhhdCBjYWxsIGdyYXBoLCBzZWUgd2hhdCdzIHBhc3NpbmcgaW4sIGFuZCBwaWVjZSB0b2dldGhlciB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIHRoYXQgbGVhZHMgdG8gdGhlaXIgZXhlY3V0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgZ29vZCB3YXkgdG8gZmlndXJlIG91dCBob3cgdG8gZGVidWcgdGhlc2Ugcm91dGluZXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjoyOS4xNjUxMTMyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NzAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5NzA6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcXG4zOTcxOlxcdFxcdFxcdHJldHVybiAwO1xcbjM5NzI6XFx0XFx0cmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4zOTczOlxcdH1cXG4zOTc0OlxcdFxcbjM5NzU6XFx0c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjM5NzY6XFx0e1xcbjM5Nzc6XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuMzk3ODpcXHRcXG4zOTc5OlxcdFxcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcXG4zOTgwOlxcdFxcdFxcdHJldHVybjtcXG4zOTgxOlxcdFxcbjM5ODI6XFx0XFx0LypcXG4zOTgzOlxcdFxcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcXG4zOTg0OlxcdFxcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cXG4zOTg1OlxcdFxcdCAqL1xcbjM5ODY6XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pO1xcbjM5ODc6XFx0XFxuMzk4ODpcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4zOTg5OlxcdFxcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbjM5OTA6XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbjM5OTE6XFx0fVxcbjM5OTI6XFx0XFxuMzk5MzpcXHRzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbjM5OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbjM5OTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXFxuMzk5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlLFxcbjM5OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxcbjM5OTg6XFx0e1xcbjM5OTk6XFx0XFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG40MDAwOlxcdFxcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcXG40MDAxOlxcdFxcdGludCByZXQgPSAwO1xcbjQwMDI6XFx0XFxuNDAwMzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgZW5kKTtcXG40MDA0OlxcdFxcbjQwMDU6XFx0XFx0aWYgKGZvbGlvX3JlZl9mcmVlemUoZm9saW8sIGZvbGlvX2NhY2hlX3JlZl9jb3VudChmb2xpbykgKyAxKSkge1xcbjQwMDY6XFx0XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSA9IE5VTEw7XFxuNDAwNzpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuNDAwODpcXHRcXG40MDA5OlxcdFxcdFxcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xcbjQwMTA6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxuNDAxMTpcXHRcXG40MDEyOlxcdFxcdFxcdC8qXFxuNDAxMzpcXHRcXHRcXHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XFxuNDAxNDpcXHRcXHRcXHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXFxuNDAxNTpcXHRcXHRcXHQgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuXFxuNDAxNjpcXHRcXHRcXHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cXG40MDE3OlxcdFxcdFxcdCAqL1xcbjQwMTg6XFx0XFx0XFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuNDAxOTpcXHRcXG40MDIwOlxcdFxcdFxcdGlmIChtYXBwaW5nKSB7XFxuNDAyMTpcXHRcXHRcXHRcXHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuNDAyMjpcXHRcXG40MDIzOlxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG40MDI0OlxcdFxcdFxcdFxcdCAgICBuZXdfb3JkZXIgXFx1MDAzYyBIUEFHRV9QTURfT1JERVIpIHtcXG40MDI1OlxcdFxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XFxuNDAyNjpcXHRcXHRcXHRcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXFxuNDAyNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHROUl9TSE1FTV9USFBTLCAtbnIpO1xcbjQwMjg6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG40MDI5OlxcdFxcdFxcdFxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbyxcXG40MDMwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdE5SX0ZJTEVfVEhQUywgLW5yKTtcXG40MDMxOlxcdFxcdFxcdFxcdFxcdH1cXG40MDMyOlxcdFxcdFxcdFxcdH1cXG40MDMzOlxcdFxcdFxcdH1cXG40MDM0OlxcdFxcbjQwMzU6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbjQwMzY6XFx0XFx0XFx0XFx0aWYgKG1hcHBpbmcpIHtcXG40MDM3OlxcdFxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhtYXBwaW5nLCBmb2xpbyk7XFxuNDAzODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40MDM5OlxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MjkuMTY1MzgxMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzcyNzM2MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9odWdlX21lbW9yeS5jYCoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gem9vbSBpbiBvbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEdpdmVuIHRoZSBzY29wZSBvZiB0aGlzIHByb2plY3QsIGEgZm9jdXNlZCBhcHByb2FjaCBpcyBhbHdheXMgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIHNlZS4uLiB0aGUgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdCBpcyBiZXR3ZWVuIGxpbmVzIDQ1MTUgYW5kIDQ1NTAuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgbGl2ZXMuIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgZGlnZ2luZy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2l0aGluIHRob3NlIGxpbmVzIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgaW50ZXJhY3Rpb24gaGFwcGVuaW5nLiBIb3BlZnVsbHksIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIGNvbW1lbnRzIGFyZSBoZWxwZnVsLiBMZXQncyBzZWUgaWYgdGhpcyBzZWN0aW9uIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgaXNzdWUgb3IgaWYgaXQgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gcmVsYXRlZCBmdW5jdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozMC45MzgxMjEzNTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTk1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTE1OlxcdCAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cXG40NTE2OlxcdCAqL1xcbjQ1MTc6XFx0Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG40NTE4OlxcdHtcXG40NTE5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG40NTIwOlxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcXG40NTIxOlxcdFxcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xcbjQ1MjI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTIzOlxcdFxcdGJvb2wgdW5xdWV1ZWQgPSBmYWxzZTtcXG40NTI0OlxcdFxcbjQ1MjU6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbjQ1MjY6XFx0XFx0V0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKTtcXG40NTI3OlxcdFxcbjQ1Mjg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1Mjk6XFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuNDUzMDpcXHRcXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcXHUwMDI2bWVtY2csIFxcdTAwMjZmbGFncyk7XFxuNDUzMTpcXHRcXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxuNDUzMjpcXHRcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG40NTMzOlxcdFxcdFxcdHVucXVldWVkID0gdHJ1ZTtcXG40NTM0OlxcdFxcdH1cXG40NTM1OlxcdFxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG40NTM2OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjQ1Mzc6XFx0XFxuNDUzODpcXHRcXHRyZXR1cm4gdW5xdWV1ZWQ7XFx0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xcbjQ1Mzk6XFx0fVxcbjQ1NDA6XFx0XFxuNDU0MTpcXHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbid0IGNsZWFyIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyAqL1xcbjQ1NDI6XFx0dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuNDU0MzpcXHR7XFxuNDU0NDpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XFxuNDU0NTpcXHRcXHRpbnQgbmlkO1xcbjQ1NDY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQ1NDc6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTQ4OlxcdFxcbjQ1NDk6XFx0XFx0LypcXG40NTUwOlxcdFxcdCAqIE9yZGVyIDEgZm9saW9zIGhhdmUgbm8gc3BhY2UgZm9yIGEgZGVmZXJyZWQgbGlzdCwgYnV0IHdlIGFsc29cXG40NTUxOlxcdFxcdCAqIHdvbid0IHdhc3RlIG11Y2ggbWVtb3J5IGJ5IG5vdCBhZGRpbmcgdGhlbSB0byB0aGUgZGVmZXJyZWQgbGlzdC5cXG40NTUyOlxcdFxcdCAqL1xcbjQ1NTM6XFx0XFx0aWYgKGZvbGlvX29yZGVyKGZvbGlvKSBcXHUwMDNjPSAxKVxcbjQ1NTQ6XFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozMC45MzgzODM3MDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjY1MTE1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpcywgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIHdvcmtpbmcgd2l0aCBodWdlIG1lbW9yeSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBhZmZlY3RzIGBtbS9odWdlX21lbW9yeS5jYC4gTXkgZmlyc3Qgc3RvcCBpcyBnb2luZyB0byBiZSB0aGUgS2NvbmZpZyBmaWxlcy4gSSBrbm93IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIHJlbGllcyBoZWF2aWx5IG9uIHRob3NlIHRvIGRldGVybWluZSB3aGF0IGdldHMgY29tcGlsZWQsIGFuZCB0aGUgb3B0aW9ucyB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXJzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMsIGlmIGFueSwgZGlyZWN0bHkgZ292ZXJuIHRoZSBpbmNsdXNpb24gb2YgdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcy5cblxuTmV4dCwgSSdsbCBzd2l0Y2ggZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeS4gS2NvbmZpZyB0ZWxscyB1cyAqd2hhdCogb3B0aW9ucyBleGlzdCwgYnV0IHRoZSBNYWtlZmlsZSB0ZWxscyB1cyAqaG93KiB0aG9zZSBvcHRpb25zIGFyZSBhcHBsaWVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHNlZSB0aGUgY29tcGlsYXRpb24gcnVsZXMgYW5kIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHdpdGhpbiB0aGF0IE1ha2VmaWxlIHRoYXQgcmVsYXRlIHRvIGBodWdlX21lbW9yeS5jYC4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGJ1aWxkLXRpbWUgcmVsYXRpb25zaGlwcyBhbmQgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZpbGUgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgYnVpbGQgZGVwZW5kZW5jeSBjaGFpbiBhbmQgaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgcHJlcmVxdWlzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MzMuMjAzNTAxMTQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzQwNzgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAxPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDMtb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MzMuMjk2OTEzOTgxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODA4NDI1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBtYWluIGtub2IsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaXRlbSBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKS4gQnV0LCBhcyBhbHdheXMsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBXaGF0IGVsc2UgaXMgZW50YW5nbGVkIHdpdGggdGhpcz8gV2hlcmUgZG9lcyBpdCByZXNpZGUgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGhpZXJhcmNoeT8gSSBuZWVkIHRvIGNoZWNrIGBtbS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBhbnkgZGVwZW5kZW5jaWVzLCBtYXliZSBldmVuIHNvbWUgY29uZGl0aW9uYWwgc2V0dGluZ3Mgb3IgZmVhdHVyZXMgdGhhdCB0aWUgaW4gd2l0aCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGV4cGVjdCB0aGVyZSB0byBiZSBhIGZldyBsZXZlcnMgYW5kIGRpYWxzIGF0IHBsYXkgdG8gY29udHJvbCBUSFAgYmVoYXZpb3IgZWZmZWN0aXZlbHkuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSwgYWxsIHRoZSByZWxhdGVkIGNvbmZpZyBvcHRpb25zLCBpcyBrZXkgdG8gdHVuaW5nIHRoaXMgYXJlYSBwcm9wZXJseS4gVGltZSB0byBzdGFydCByZWFkaW5nIHRocm91Z2ggdGhhdCBLY29uZmlnIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozNS4xNzc3NTkyODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMzY4NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04Mjc9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgyOS1cXG5tbS9LY29uZmlnOjgzMDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzEtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODQ4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTMtXFxubW0vS2NvbmZpZzo4NTQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU1LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODYwLVxcbm1tL0tjb25maWc6ODYxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjItXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODY5LVxcbm1tL0tjb25maWc6ODcwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04Nzc9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg4Ni1cXG5tbS9LY29uZmlnOjg4NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODg4LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OTYtXFxubW0vS2NvbmZpZzo4OTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04OTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDQtXFxubW0vS2NvbmZpZzo5MDU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkwNi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTIyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzEtXFxubW0vS2NvbmZpZzo5MzI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzMy1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQwLVxcbm1tL0tjb25maWc6OTQxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQyLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ4LVxcbm1tL0tjb25maWc6OTQ5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTAtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjM1LjI3MDEzMzA3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgwMTU1ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBSb2xlIG9mIERFQlVHX1ZNIGluIFZNX1dBUk5fT05fRk9MSU8qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYERFQlVHX1ZNYCBhbmQgYFZNX1dBUk5fT05fRk9MSU9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGBERUJVR19WTWAgaXMgYSBwcmVyZXF1aXNpdGUgb3IgYSBjb25kaXRpb25hbCBmYWN0b3IgaW4gdGhlIGJlaGF2aW9yIG9mIGBWTV9XQVJOX09OX0ZPTElPYC4gSXQncyBhIGJpdCBvZiBhIGh1bmNoLCBidXQgdGhlc2UgdHlwZXMgb2YgZGVidWcgb3B0aW9ucyBvZnRlbiBhZmZlY3Qgd2FybmluZyBvciBlcnJvciBiZWhhdmlvcnMsIHNvIGl0J3MgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LlxuXG5JJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBWTV9XQVJOX09OX0ZPTElPYC4gSSBuZWVkIHRvIHJldmlldyB0aGUgbWFjcm8gdG8gZGV0ZXJtaW5lIGlmIHRoZSBgREVCVUdfVk1gIGZsYWcgaXMgdXNlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGRlZmluaXRpb24uIElmIHNvLCBpdCB3b3VsZCBleHBsYWluIHRoZSByZWxhdGlvbnNoaXAgYW5kIGhvdyB0byBwcm9jZWVkLCBvdGhlcndpc2UsIEkgY2FuIGludmVzdGlnYXRlIG90aGVyIHBvc3NpYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozNy4xNTAyOTI5MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDg4MDUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgVk1fV0FSTl9PTl9GT0xJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tZGVidWcuaD0xOD12b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtNjktfSlcXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaDo3MDojZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pXFx0XFx0KHtcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtNzEtXFx0aW50IF9fcmV0X3dhcm4gPSAhIShjb25kKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC0xMzUtI2RlZmluZSBWTV9XQVJOX09OX09OQ0VfUEFHRShjb25kLCBwYWdlKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaDoxMzY6I2RlZmluZSBWTV9XQVJOX09OX0ZPTElPKGNvbmQsIGZvbGlvKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC0xMzctI2RlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozNy4zNzUxODA5MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyMjUyOTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBtbWRlYnVnLmhgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBjZXJ0YWluIGRlYnVnZ2luZyBmbGFncyBhbmQgbWFjcm9zIGFyZSBpbXBsZW1lbnRlZC4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBhIHNwZWNpZmljIHNlY3Rpb24gb2YgYGluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oYC4gSSdtIGdvaW5nIHRvIGp1bXAgdG8gbGluZXMgNjAgdGhyb3VnaCA3NS4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHJldmlzaXQgdGhvc2UgY29yZSBkZWJ1ZyBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWxseSBjYXRjaCBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9ibGVtIEknbSBpbnZlc3RpZ2F0aW5nLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlZmluaXRpb24gb3IgdXNlIG9mIGtleSBkZWJ1ZyBmbGFncyBvciBtYWNyb3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uIG9yIG90aGVyIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIGZhY2lsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozOS4wOTc3MTM5MjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tbWRlYnVnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFxcXCIuZGF0YS4ub25jZVxcXCIpIF9fd2FybmVkO1xcdFxcdFxcdFxcXFxcXG4gIDYxOlxcdFxcdGludCBfX3JldF93YXJuX29uY2UgPSAhIShjb25kKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2MzpcXHRcXHRpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbmNlIFxcdTAwMjZcXHUwMDI2ICFfX3dhcm5lZCkpIHtcXHRcXHRcXHRcXFxcXFxuICA2NDpcXHRcXHRcXHRkdW1wX3BhZ2UocGFnZSwgXFxcIlZNX1dBUk5fT05fT05DRV9QQUdFKFxcXCIgX19zdHJpbmdpZnkoY29uZClcXFwiKVxcXCIpO1xcXFxcXG4gIDY1OlxcdFxcdFxcdF9fd2FybmVkID0gdHJ1ZTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2NjpcXHRcXHRcXHRXQVJOX09OKDEpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDY3OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2ODpcXHRcXHR1bmxpa2VseShfX3JldF93YXJuX29uY2UpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDY5OlxcdH0pXFxuICA3MDpcXHQjZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pXFx0XFx0KHtcXHRcXHRcXHRcXFxcXFxuICA3MTpcXHRcXHRpbnQgX19yZXRfd2FybiA9ICEhKGNvbmQpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDcyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDczOlxcdFxcdGlmICh1bmxpa2VseShfX3JldF93YXJuKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc0OlxcdFxcdFxcdGR1bXBfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIFxcXCJWTV9XQVJOX09OX0ZPTElPKFxcXCIgX19zdHJpbmdpZnkoY29uZClcXFwiKVxcXCIpO1xcXFxcXG4gIDc1OlxcdFxcdFxcdFdBUk5fT04oMSk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNzY6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc3OlxcdFxcdHVubGlrZWx5KF9fcmV0X3dhcm4pO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc4OlxcdH0pXFxuICA3OTpcXHQjZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbylcXHQoe1xcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MzkuMDk3Nzc0OTI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzA0ODA4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBgbW1kZWJ1Zy5oYCDigJMgR290dGEgVW5kZXJzdGFuZCBUaGlzIEd1YXJkKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoYXQgYGlmZGVmYCBndWFyZCBpbiBgbW1kZWJ1Zy5oYC4gSXQncyBjcnVjaWFsLCBvYnZpb3VzbHkuIEknbSBiZXR0aW5nIHRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGVidWdnaW5nIGZlYXR1cmVzIGluIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIGFyZSBjb250cm9sbGVkIGF0IGNvbXBpbGUgdGltZS4gV2hhdCBzcGVjaWZpYyBmZWF0dXJlcyBkb2VzIGl0IGVuYWJsZS9kaXNhYmxlPyBXaGF0IGRlZmluZXMgYXJlIGNoZWNrZWQ/IElzIGl0IGEgc2luZ2xlLCBvdmVyYXJjaGluZyBmbGFnLCBvciBhIG1vcmUgZ3JhbnVsYXIgYXBwcm9hY2gsIHRhcmdldGluZyBzcGVjaWZpYyBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0aWVzPyBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJlIGJlaW5nIHVzZWQsIGFuZCB0aGVpciBpbXBhY3QuIEhvdyBkb2VzIHRoaXMgZ3VhcmQgYWZmZWN0IHRoZSBidWlsZCBwcm9jZXNzIGFuZCB3aGF0IGV4YWN0bHkgaXMgYmVpbmcgaW5jbHVkZWQgb3IgZXhjbHVkZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbWVjaGFuaXNtIGNvbXBsZXRlbHkgdG8gZWZmZWN0aXZlbHkgdHJvdWJsZXNob290LCBvcHRpbWl6ZSwgb3IgZXh0ZW5kIHRoaXMgbWVtb3J5IG1hbmFnZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjQwLjk2ODI1ODY1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tbWRlYnVnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbiAgIDI6XFx0I2lmbmRlZiBMSU5VWF9NTV9ERUJVR19IXFxuICAgMzpcXHQjZGVmaW5lIExJTlVYX01NX0RFQlVHX0ggMVxcbiAgIDQ6XFx0XFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5naWZ5LmhcXHUwMDNlXFxuICAgNzpcXHRcXG4gICA4OlxcdHN0cnVjdCBwYWdlO1xcbiAgIDk6XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0O1xcbiAgMTA6XFx0c3RydWN0IG1tX3N0cnVjdDtcXG4gIDExOlxcdHN0cnVjdCB2bWFfaXRlcmF0b3I7XFxuICAxMjpcXHRzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdDtcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0dm9pZCBkdW1wX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IGNoYXIgKnJlYXNvbik7XFxuICAxNTpcXHR2b2lkIGR1bXBfdm1hKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4gIDE2OlxcdHZvaWQgZHVtcF9tbShjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuICAxNzpcXHR2b2lkIGR1bXBfdm1nKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcsIGNvbnN0IGNoYXIgKnJlYXNvbik7XFxuICAxODpcXHR2b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xcbiAgMTk6XFx0XFxuICAyMDpcXHQjaWZkZWYgQ09ORklHX0RFQlVHX1ZNXFxuICAyMTpcXHQjZGVmaW5lIFZNX0JVR19PTihjb25kKSBCVUdfT04oY29uZClcXG4gIDIyOlxcdCNkZWZpbmUgVk1fQlVHX09OX1BBR0UoY29uZCwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAyMzpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjU6XFx0XFx0XFx0XFx0ZHVtcF9wYWdlKHBhZ2UsIFxcXCJWTV9CVUdfT05fUEFHRShcXFwiIF9fc3RyaW5naWZ5KGNvbmQpXFxcIilcXFwiKTtcXFxcXFxuICAyNjpcXHRcXHRcXHRcXHRCVUcoKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAyNzpcXHRcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjg6XFx0XFx0fSB3aGlsZSAoMClcXG4gIDI5OlxcdCNkZWZpbmUgVk1fQlVHX09OX0ZPTElPKGNvbmQsIGZvbGlvKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDMwOlxcdFxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMTpcXHRcXHRcXHRpZiAodW5saWtlbHkoY29uZCkpIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMjpcXHRcXHRcXHRcXHRkdW1wX3BhZ2UoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBcXFwiVk1fQlVHX09OX0ZPTElPKFxcXCIgX19zdHJpbmdpZnkoY29uZClcXFwiKVxcXCIpO1xcXFxcXG4gIDMzOlxcdFxcdFxcdFxcdEJVRygpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDM0OlxcdFxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzNTpcXHRcXHR9IHdoaWxlICgwKVxcbiAgMzY6XFx0I2RlZmluZSBWTV9CVUdfT05fVk1BKGNvbmQsIHZtYSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzNzpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzk6XFx0XFx0XFx0XFx0ZHVtcF92bWEodm1hKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA0MDpcXHRcXHRcXHRcXHRCVUcoKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjQwLjk2ODM2MjY2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzQ4MDA0NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBIdWdlIFBhZ2UgU3BsaXQgTG9naWMqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0RFQlVHX1ZNYCBlbmFibGVzIGBWTV9XQVJOX09OX0ZPTElPYCwgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGNvbXBpbGVzIGBtbS9odWdlX21lbW9yeS5jYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IHRoZSBlZmZvcnQ/XG5cbkxldCdzIGJyZWFrIGl0IGRvd246IG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZywgQlBGLCBzY2hlZHVsZXIsIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZywgKmFuZCogYW55IG5ldyBydW50aW1lIGFzc2VydGlvbnMgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSBzZWUgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIGFkZHMgYFZNX1dBUk5fT05fRk9MSU9gIGFzc2VydGlvbnMgcmVsYXRlZCB0byBmb2xpbyByZWYgY291bnRzIGFuZCBkZWZlcnJlZCBsaXN0cy4gQ3JpdGljYWxseSwgdGhlc2UgYXNzZXJ0aW9ucyBhcmUgKmluKiB0aGUgdHJhbnNwYXJlbnQgaHVnZXBhZ2UgKFRIUCkgLyBtVEhQIHNwbGl0IHBhdGggd2l0aGluIGBtbS9gLiBTcGVjaWZpY2FsbHksIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBhcmUgaW52b2x2ZWQuIFRoaXMgc2NyZWFtcyBcInJlYWNoYWJsZSBhbmQgZnV6emFibGUuXCIgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCB0aGUgbmV4dCBzdGVwLiBMZXQncyBvcHRpbWl6ZSBvdXIgZnV6emluZyBieSBmb2N1c2luZyBvbiBzcGVjaWZpYywgbm9uLXViaXF1aXRvdXMgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZmluZCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLiBMZXQncyBkcmlsbCBpbnRvIHRoZSBrZXkgZnVuY3Rpb25zIGNoYW5nZWQgb3IgY2FsbGVkOlxuXG4qICAgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgKGlzIHN0YXRpYyksIHNvIGxldCdzIGNoZWNrIGl0cyBjYWxsZXJzIG9yIHJlbGF0ZWQgc3BsaXQgZnVuY3Rpb25zLlxuKiAgIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgXG4qICAgYGRlZmVycmVkX3NwbGl0X3NjYW5gXG4qICAgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYFxuKiAgIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCAoc3RhdGljLCBzbywgaW5saW5lZD8pXG5cbkkgbmVlZCB0byBzZWUgd2hlcmUgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGFyZSBjYWxsZWQsIGJvdGggaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBwb3RlbnRpYWxseSBlbHNld2hlcmUuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNDIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0Njo0NC43MTYzNzAzNTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTc0ODMyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWR8X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTM5NzU9c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTkyLVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk5MzpzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk5NC1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHhhX3N0YXRlICp4YXMsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQxNDY9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OlxcdHJldCA9IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNnhhcywgbWFwcGluZyxcXG5tbS9odWdlX21lbW9yeS5jLTQyNzctXFx0XFx0XFx0XFx0XFx0XFx0dHJ1ZSwgbGlzdCwgc3BsaXRfdHlwZSwgZW5kLCBcXHUwMDI2bnJfc2htZW1fZHJvcHBlZCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQzNjQ9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzNzYtXFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcXG5tbS9odWdlX21lbW9yeS5jOjQzNzc6XFx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jLTQzNzgtXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OD1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTAzLS8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NTA0OiAqIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlzIG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHk6XFxubW0vaHVnZV9tZW1vcnkuYy00NTA1LSAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTE2LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxNzpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxOC17XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTcyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL2ludGVybmFsLmgtNzMzLVxcbm1tL2ludGVybmFsLmg6NzM0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmgtNzM1LXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTc0Ny1cXG5tbS9pbnRlcm5hbC5oOjc0ODpcXHRyZXR1cm4gX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9pbnRlcm5hbC5oLTc0OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjQ0Ljk5NjEyMzYyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODkzNTk2MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBXaGF0J3MgdHJpZ2dlcmluZyBpdD8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJcyBpdCBwYXJ0IG9mIGEgaG90IHBhdGgsIG9yIHNvbWV0aGluZyBtb3JlIGFuY2lsbGFyeT8gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aWxsIGRpY3RhdGUgaG93IHRvIGFwcHJvYWNoIGFueSBhbmFseXNpcyBvciBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucy4gU28sIHRoZSBmaXJzdCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6NDYuODg5NzIxODYyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzMTkyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZm9saW8uYz05MT12b2lkIF9fZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTEwMy1cXHRwYWdlX2NhY2hlX3JlbGVhc2UoZm9saW8pO1xcbm1tL2ZvbGlvLmM6MTA0OlxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ZvbGlvLmMtMTA1LVxcdG1lbV9jZ3JvdXBfdW5jaGFyZ2UoZm9saW8pO1xcbi0tXFxubW0vZm9saW8uYz0xNTI9c3RhdGljIHZvaWQgZm9saW9fYmF0Y2hfbW92ZV9scnUoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gsIG1vdmVfZm5fdCBtb3ZlX2ZuKVxcbi0tXFxubW0vZm9saW8uYy0xODYtXFx0XFx0XFx0X19mb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XFxubW0vZm9saW8uYzoxODc6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vZm9saW8uYy0xODgtXFx0XFx0XFx0ZmJhdGNoLVxcdTAwM2Vmb2xpb3NbaV0gPSBOVUxMO1xcbi0tXFxubW0vZm9saW8uYz05ODQ9dm9pZCBmb2xpb3NfcHV0X3JlZnMoc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MsIHVuc2lnbmVkIGludCAqcmVmcylcXG4tLVxcbm1tL2ZvbGlvLmMtMTAyMi1cXHRcXHR9XFxubW0vZm9saW8uYzoxMDIzOlxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ZvbGlvLmMtMTAyNC1cXHRcXHRfX3BhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbywgXFx1MDAyNmxydXZlYywgXFx1MDAyNmZsYWdzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mzk5Mz1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MDA5LVxcdFxcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDAxMDpcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTQwMTEtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0OTg9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMy0vKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwNDogKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5Olxcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwNTogKiB0aGUgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlubGluZSB3cmFwcGVyIGluIG1tL2ludGVybmFsLmhcXG5tbS9odWdlX21lbW9yeS5jLTQ1MDYtICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwOC0gKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwOTogKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcXG5tbS9odWdlX21lbW9yeS5jLTQ1MTAtICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNi0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQ1MTc6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdlX21lbW9yeS5jLTQ1MTgte1xcbi0tXFxubW0vaW50ZXJuYWwuaD03MjI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTczMy1cXG5tbS9pbnRlcm5hbC5oOjczNDpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9pbnRlcm5hbC5oOjczNTpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ludGVybmFsLmgtNzM2LXtcXG4tLVxcbm1tL2ludGVybmFsLmgtNzQ3LVxcbm1tL2ludGVybmFsLmg6NzQ4OlxcdHJldHVybiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ludGVybmFsLmgtNzQ5LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNjk9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMzA0LVxcbm1tL21lbWNvbnRyb2wtdjEuYzozMDU6XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vbWVtY29udHJvbC12MS5jLTMwNi1cXHRmb2xpby1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTM5MT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDI4LVxcbm1tL21lbWNvbnRyb2wuYzo1NDI5OlxcdFxcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTU0MzAtXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1Njg9dm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MDktXFx0LyogV2FybmluZyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBzbyBkb24ndCB3b3JyeSBhYm91dCByZWZjb3VudCBub24tMCAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NjEwOlxcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KG9sZCkpO1xcbm1tL21lbWNvbnRyb2wuYy01NjExLVxcdG9sZC1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuLS1cXG5tbS9taWdyYXRlLmM9NTgzPXN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtNTk3LVxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbm1tL21pZ3JhdGUuYzo1OTg6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vbWlncmF0ZS5jLTU5OS1cXHRcXHRcXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIGV4cGVjdGVkX2NvdW50KTtcXG4tLVxcbm1tL21pZ3JhdGUuYy02MzAtXFx0LyogVGFrZSBvZmYgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG5tbS9taWdyYXRlLmM6NjMxOlxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL21pZ3JhdGUuYy02MzItXFxuLS1cXG5tbS92bXNjYW4uYz0xMDgxPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE1MzQtXFxubW0vdm1zY2FuLmM6MTUzNTpcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS92bXNjYW4uYy0xNTM2LVxcdFxcdGlmIChmb2xpb19iYXRjaF9hZGQoXFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xcbi0tXFxubW0vdm1zY2FuLmM9MTg5ND1zdGF0aWMgdW5zaWduZWQgaW50IG1vdmVfZm9saW9zX3RvX2xydShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vdm1zY2FuLmMtMTkyOS1cXG5tbS92bXNjYW4uYzoxOTMwOlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTE5MzEtXFx0XFx0XFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcXHUwMDI2ZnJlZV9mb2xpb3MsIGZvbGlvKSA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjQ2Ljk5NTA1MDgzMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU4MzY0NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIEh1Z2UgUGFnZSBTcGxpdHRpbmcgTG9naWMqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGh1Z2UgcGFnZXMgYXJlIGJlaW5nIHNwbGl0IHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhhdCBzcGxpdHRpbmcgcHJvY2Vzcy4gSSBzZWUgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAg4oCTIHRoYXQncyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEl0J3MgZGVmaW5lZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGFuZCBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IGJlIGF3YXJlIG9mIHRoYXQgZGVjbGFyYXRpb24gYXMgd2VsbC4gSSdtIHRoaW5raW5nLCBhcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSB3aGljaCBwZXJmb3JtIHRoZSBzcGxpdHRpbmcgb3BlcmF0aW9uPyBQZXJoYXBzIHNvbWV0aGluZyBsaWtlIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmA/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UuIFRpbWUgdG8gZWl0aGVyIGxvb2sgYXQgd2hhdCBjYWxscyBpdCBvciBmaW5kIG90aGVyIHJlbGF0ZWQgc3ltYm9scyBpbiBgaHVnZV9tZW1vcnkuY2AuIEknbGwgc3RhcnQgd2l0aCB0aGUgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0Njo0OS4yNTM0MTg1NTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDk2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2h1Z2VfcGFnZXxzcGxpdF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTQwMT12b2lkIG1hcF9hbm9uX2ZvbGlvX3BtZF9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0MTEtXFx0dXBkYXRlX21tdV9jYWNoZV9wbWQodm1hLCBoYWRkciwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjE0MTI6XFx0ZGVmZXJyZWRfc3BsaXRfZm9saW8oZm9saW8sIGZhbHNlKTtcXG5tbS9odWdlX21lbW9yeS5jLTE0MTMtfVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNDAyPWJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDQ4LVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxubW0vaHVnZV9tZW1vcnkuYzoyNDQ5OlxcdFxcdHNwbGl0X2ZvbGlvKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTI0NTAtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzYzOT1zdGF0aWMgdm9pZCByZW1hcF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgbnIsIGludCBmbGFncylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY1NC1cXG5tbS9odWdlX21lbW9yeS5jOjM2NTU6c3RhdGljIHZvaWQgbHJ1X2FkZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcXG5tbS9odWdlX21lbW9yeS5jLTM2NTYtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNjgwPXN0YXRpYyBib29sIHBhZ2VfcmFuZ2VfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM2OTEtICovXFxubW0vaHVnZV9tZW1vcnkuYzozNjkyOnN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTM2OTMtXFx0XFx0aW50IG5ld19vcmRlcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzgzMi0gKiAxLiB1bmlmb3JtIHNwbGl0OiBAeGFzIGlzIHNwbGl0IHdpdGggbm8gZXhwZWN0YXRpb24gb2YgZmFpbHVyZSBhbmQgYSBzaW5nbGVcXG5tbS9odWdlX21lbW9yeS5jOjM4MzM6ICogICAgX19zcGxpdF9mb2xpb190b19vcmRlcigpIGlzIGNhbGxlZCB0byBzcGxpdCB0aGUgQGZvbGlvIGludG8gQG5ld19vcmRlclxcbm1tL2h1Z2VfbWVtb3J5LmMtMzgzNC0gKiAgICBhbG9uZyB3aXRoIHN0YXRzIHVwZGF0ZS5cXG5tbS9odWdlX21lbW9yeS5jLTM4MzUtICogMi4gbm9uLXVuaWZvcm0gc3BsaXQ6IGZvbGlvX29yZGVyIC0gQG5ld19vcmRlciBjYWxscyB0b1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzgzNjogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgYXJlIGV4cGVjdGVkIHRvIGJlIG1hZGUgaW4gYSBmb3IgbG9vcCB0byBzcGxpdFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzgzNy0gKiAgICB0aGUgQGZvbGlvIHRvIG9uZSBsb3dlciBvcmRlciBhdCBhIHRpbWUuIFRoZSBmb2xpbyBjb250YWluaW5nIEBzcGxpdF9hdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zODQ5PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zODk0LVxcdFxcdHBnYWxsb2NfdGFnX3NwbGl0KGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jOjM4OTU6XFx0XFx0X19zcGxpdF9mb2xpb190b19vcmRlcihmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zODk2LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zOTkzPXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQwNzAtXFx0XFx0XFx0aWYgKGRvX2xydSlcXG5tbS9odWdlX21lbW9yeS5jOjQwNzE6XFx0XFx0XFx0XFx0bHJ1X2FkZF9zcGxpdF9mb2xpbyhmb2xpbywgbmV3X2ZvbGlvLCBscnV2ZWMsIGxpc3QpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3Mi1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDM2ND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzMC0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQ0MzE6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00NDMyLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0OC0gKiBJdCBoYXMgdGhlIHNhbWUgcHJlcmVxdWlzaXRlcyBhbmQgcmV0dXJucyBhc1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0OTogKiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ1MC0gKlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDgxPXVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0OTctXFxubW0vaHVnZV9tZW1vcnkuYzo0NDk4OmludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxubW0vaHVnZV9tZW1vcnkuYy00NDk5LXtcXG5tbS9odWdlX21lbW9yeS5jOjQ1MDA6XFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgbGlzdCwgMCk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTAxLX1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDUxNz1ib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTQxLS8qIHBhcnRpYWxseV9tYXBwZWQ9ZmFsc2Ugd29uJ3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NTQyOnZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU0My17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2NDI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY3Mi1cXHRcXHRcXHRnb3RvIHJlcXVldWU7XFxubW0vaHVnZV9tZW1vcnkuYzo0NjczOlxcdFxcdGlmICghc3BsaXRfZm9saW8oZm9saW8pKSB7XFxubW0vaHVnZV9tZW1vcnkuYy00Njc0LVxcdFxcdFxcdGRpZF9zcGxpdCA9IHRydWU7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2ODEtXFx0XFx0LypcXG5tbS9odWdlX21lbW9yeS5jOjQ2ODI6XFx0XFx0ICogSWYgdGhwX3VuZGVydXNlZCgpIHJldHVybnMgZmFsc2UsIG9yIGlmIHNwbGl0X2ZvbGlvKClcXG5tbS9odWdlX21lbW9yeS5jOjQ2ODM6XFx0XFx0ICogc3VjY2VlZHMsIG9yIGlmIHNwbGl0X2ZvbGlvKCkgZmFpbHMgaW4gdGhlIGNhc2UgaXQgd2FzXFxubW0vaHVnZV9tZW1vcnkuYy00Njg0LVxcdFxcdCAqIHVuZGVydXNlZCwgdGhlbiBjb25zaWRlciBpdCB1c2VkIGFuZCBkb24ndCBhZGQgaXQgYmFjayB0b1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzA0LSNpZmRlZiBDT05GSUdfREVCVUdfRlNcXG5tbS9odWdlX21lbW9yeS5jOjQ3MDU6c3RhdGljIHZvaWQgc3BsaXRfaHVnZV9wYWdlc19hbGwodm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTQ3MDYte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzQxLVxcdFxcdFxcdG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDc0MjpcXHRcXHRcXHRpZiAoIXNwbGl0X2ZvbGlvKGZvbGlvKSlcXG5tbS9odWdlX21lbW9yeS5jLTQ3NDMtXFx0XFx0XFx0XFx0c3BsaXQrKztcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc1NT1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX25vdF9zdWl0YWJsZV9mb3JfdGhwX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzY4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDc2OTpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXFxubW0vaHVnZV9tZW1vcnkuYy00NzcwLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgdmFkZHJfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODM4LVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0ODM5OlxcdFxcdCAqIEZvciBmb2xpb3Mgd2l0aCBwcml2YXRlLCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpXFxubW0vaHVnZV9tZW1vcnkuYy00ODQwLVxcdFxcdCAqIHdpbGwgdHJ5IHRvIGRyb3AgaXQgYmVmb3JlIHNwbGl0IGFuZCB0aGVuIGNoZWNrIGlmIHRoZSBmb2xpb1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODU2LVxcdFxcdCAgICBpbl9mb2xpb19vZmZzZXQgXFx1MDAzZT0gZm9saW9fbnJfcGFnZXMoZm9saW8pKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo0ODU3OlxcdFxcdFxcdGlmICghc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIHRhcmdldF9vcmRlcikpXFxubW0vaHVnZV9tZW1vcnkuYy00ODU4LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4ODUtXFxubW0vaHVnZV9tZW1vcnkuYzo0ODg2OnN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwgcGdvZmZfdCBvZmZfc3RhcnQsXFxubW0vaHVnZV9tZW1vcnkuYy00ODg3LVxcdFxcdFxcdFxcdHBnb2ZmX3Qgb2ZmX2VuZCwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDkzMi1cXHRcXHRpZiAoaW5fZm9saW9fb2Zmc2V0IFxcdTAwM2MgMCB8fCBpbl9mb2xpb19vZmZzZXQgXFx1MDAzZT0gbnJfcGFnZXMpIHtcXG5tbS9odWdlX21lbW9yeS5jOjQ5MzM6XFx0XFx0XFx0aWYgKCFzcGxpdF9mb2xpb190b19vcmRlcihmb2xpbywgdGFyZ2V0X29yZGVyKSlcXG5tbS9odWdlX21lbW9yeS5jLTQ5MzQtXFx0XFx0XFx0XFx0c3BsaXQrKztcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk1NS1cXG5tbS9odWdlX21lbW9yeS5jOjQ5NTY6c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG5tbS9odWdlX21lbW9yeS5jLTQ5NTctXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3BzKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy01MDAzLVxcdFxcdH1cXG5tbS9odWdlX21lbW9yeS5jOjUwMDQ6XFx0XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGZpbGVfcGF0aCwgb2ZmX3N0YXJ0LCBvZmZfZW5kLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAwNS1cXHRcXHRcXHRcXHRuZXdfb3JkZXIsIGluX2ZvbGlvX29mZnNldCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUwMTQtXFx0aWYgKHJldCA9PSAxIFxcdTAwMjZcXHUwMDI2IHBpZCA9PSAxKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo1MDE1OlxcdFxcdHNwbGl0X2h1Z2VfcGFnZXNfYWxsKCk7XFxubW0vaHVnZV9tZW1vcnkuYy01MDE2LVxcdFxcdHJldCA9IHN0cmxlbihpbnB1dF9idWYpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy01MDIyLVxcbm1tL2h1Z2VfbWVtb3J5LmM6NTAyMzpcXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VzX3BpZChwaWQsIHZhZGRyX3N0YXJ0LCB2YWRkcl9lbmQsIG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTUwMjQtXFx0XFx0XFx0aW5fZm9saW9fb2Zmc2V0KTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzMi1cXG5tbS9odWdlX21lbW9yeS5jOjUwMzM6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzNC1cXHQub3duZXJcXHQgPSBUSElTX01PRFVMRSxcXG5tbS9odWdlX21lbW9yeS5jOjUwMzU6XFx0LndyaXRlXFx0ID0gc3BsaXRfaHVnZV9wYWdlc193cml0ZSxcXG5tbS9odWdlX21lbW9yeS5jLTUwMzYtfTtcXG5tbS9odWdlX21lbW9yeS5jLTUwMzctXFxubW0vaHVnZV9tZW1vcnkuYzo1MDM4OnN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyh2b2lkKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzOS17XFxubW0vaHVnZV9tZW1vcnkuYzo1MDQwOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNwbGl0X2h1Z2VfcGFnZXNcXFwiLCAwMjAwLCBOVUxMLCBOVUxMLFxcbm1tL2h1Z2VfbWVtb3J5LmM6NTA0MTpcXHRcXHRcXHQgICAgXFx1MDAyNnNwbGl0X2h1Z2VfcGFnZXNfZm9wcyk7XFxubW0vaHVnZV9tZW1vcnkuYy01MDQyLVxcdHJldHVybiAwO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0My19XFxubW0vaHVnZV9tZW1vcnkuYzo1MDQ0OmxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG5tbS9odWdlX21lbW9yeS5jLTUwNDUtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjQ5LjMxMDkyMDQzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTg1MzUxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IG1tL2h1Z2VfbWVtb3J5LmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZGl2aW5nIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIGZvbGlvIHNwbGl0dGluZy4gSSBzZWUgYSBmZXcga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkOiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAsIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgLCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgZ2l2ZW4gaXRzIGNhbGxlcnM6IGBfX2ZvbGlvX3NwbGl0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYW5kIHRoZSB2YXJpb3VzIGZvcm1zIG9mIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuIEFsc28gdGhlIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBhbmQgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCBhcmUgb24gbXkgcmFkYXIuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgZm9jdXMgc3ltYm9scy4gSSd2ZSBnb3QgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAsIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAsIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYC4gWWVzLCB0aGVzZSBhcmUgZXhhY3RseSB3aGF0IEknZCBleHBlY3QuIFRoZXkncmUgdGFyZ2V0ZWQgYXQgVEhQIGFuZCBmb2xpbyBzcGxpdHRpbmcsIGRlYWxpbmcgd2l0aCBkZWZlcnJlZCBvcGVyYXRpb25zLCB3aGljaCBhcmUgZ3JlYXQgZm9yIGZvY3VzZWQgZnV6emluZy4gVGhleSBhcmVuJ3QgZ2VuZXJpYywgd2lkZXNwcmVhZCBmdW5jdGlvbnMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGVmZmljaWVudCB0ZXN0aW5nLlxuXG5SZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIHdlJ2xsIG5lZWQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgb2J2aW91c2x5LCBhbmQsIGZvciByb2J1c3QgZXJyb3IgY2hlY2tpbmcsIHdlIHNob3VsZCBlbmFibGUgYERFQlVHX1ZNYCB0byBlbnN1cmUgdGhlIGBWTV9XQVJOX09OX0ZPTElPYCBhc3NlcnRpb25zIGFyZSBhY3RpdmUuXG5cbk9rYXksIGxldCdzIHJ1biB0aHJvdWdoIGEgcXVpY2sgY2hlY2tsaXN0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBiZWVuIG1pc3NlZC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVCVUdfVk1gLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBhbGwgdGhlcmUuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IGl0J3MgVEhQL2ZvbGlvIHNwbGl0dGluZyB3aXRoIGRlZmVycmVkIG9wZXJhdGlvbnMgYW5kIHRhcmdldGVkIGZ1bmN0aW9ucy4gQWxsIGNoZWNrZWQgYW5kIHZlcmlmaWVkLiBUaW1lIHRvIGZpbmFsaXplIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5NywiT3V0cHV0VG9rZW5zIjoyMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6NTMuNTY5NDU5MjcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MzczMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiREVCVUdfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRcIixcbiAgICBcIl9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJcIixcbiAgICBcInNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJmb2xpb19zcGxpdF91bm1hcHBlZFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSBpbiBtbS9odWdlX21lbW9yeS5jLCB3aGljaCBhZGRzIG5ldyBydW50aW1lIGFzc2VydGlvbiBjaGVja3MgKFZNX1dBUk5fT05fRk9MSU8gZm9yIHJlZmNvdW50IGFuZCBlbXB0eSBkZWZlcnJlZCBsaXN0KSBhbmQgdXBkYXRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBwYXJ0aWFsbHkgbWFwcGVkIGh1Z2UgZm9saW9zIGR1cmluZyBkZWZlcnJlZCBzcGxpdCB1bnF1ZXVpbmcgYW5kIGh1Z2UgcGFnZSB1bm1hcHBlZCBmcmVlemUtYW5kLXNwbGl0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBlbnN1cmUgdGhlIGludmFyaWFudHMgaG9sZCBhY3Jvc3MgVEhQIHNwbGl0dGluZyBhbmQgcmVjbGFtYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFQlVHX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCIsXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlclwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X2ZvbGlvXCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKCkgaW4gbW0vaHVnZV9tZW1vcnkuYywgd2hpY2ggYWRkcyBuZXcgcnVudGltZSBhc3NlcnRpb24gY2hlY2tzIChWTV9XQVJOX09OX0ZPTElPIGZvciByZWZjb3VudCBhbmQgZW1wdHkgZGVmZXJyZWQgbGlzdCkgYW5kIHVwZGF0ZXMgc3RhdGUgbWFuYWdlbWVudCBmb3IgcGFydGlhbGx5IG1hcHBlZCBodWdlIGZvbGlvcyBkdXJpbmcgZGVmZXJyZWQgc3BsaXQgdW5xdWV1aW5nIGFuZCBodWdlIHBhZ2UgdW5tYXBwZWQgZnJlZXplLWFuZC1zcGxpdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gZW5zdXJlIHRoZSBpbnZhcmlhbnRzIGhvbGQgYWNyb3NzIFRIUCBzcGxpdHRpbmcgYW5kIHJlY2xhbWF0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0Njo1My42OTU4MzkxNDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzg2Nzg2NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6NTMuNjk2Mjg4MTcyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTIzODYzMzMwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBtZXRyaWMgZGVjcmVtZW50IGludG8gYSBzaGFyZWQgaGVscGVyIGZ1bmN0aW9uIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKClgLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zIGZvciBmb2xpbyByZWZjb3VudCBhbmQgZGVmZXJyZWQgbGlzdCBzdGF0ZS5cXG5cXG5UaGlzIGlzIGFuIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHJlZmFjdG9yaW5nIHRvdWNoaW5nIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgc3RhdGlzdGljcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZHMvbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgc3RhdGUgYXNzZXJ0aW9uIGZhaWx1cmVzIG9yIG1lbW9yeSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGNoZWNrcyBhbmQgS0FTQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjk1MzEwYzEwNGVkMjIyZTc3ZjMwODcxYmU4NGM1MzgwMjZlOTllOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjI6NDY6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZGQ2NmM2YWQ1YWYxMy4uMjNlZjIyYzJiNWRiMyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTcyLDYgKzM5NzIsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbitcbitcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbitcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbitcdCAqL1xuK1x0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbitcbitcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuK1x0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4rXHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbit9XG4rXG4gc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbkBAIC0zOTgwLDcgKzM5OTgsNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgblxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4tXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXHUwMDI2XHUwMDI2IGVuZCk7XG5AQCAtMzk5OCwxMSArNDAxNSw3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbiBcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFxuIFx0XHRpZiAobWFwcGluZykge1xuIFx0XHRcdGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbkBAIC00NTE2LDExICs0NTI5LDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuIFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKF9fbGlzdF9scnVfZGVsKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFx0XHR1bnF1ZXVlZCA9IHRydWU7XG4gXHR9XG4gXHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjUzLjY5NjI5MDM0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjgyNDg1MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBNZW1vcnkgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pYC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QsIGFzIHRoaXMgaXMgYSB2ZXJ5IHNwZWNpYWxpemVkIGFyZWEuIFRoZSBjb2RlIHNuaXBwZXQgY2xlYXJseSBzaG93cyB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlOiB0byBoYW5kbGUgdGhlIHNjZW5hcmlvIHdoZXJlIGEgYGZvbGlvYCBpcyBwYXJ0aWFsbHkgbWFwcGVkLiBUaGUgZnVuY3Rpb24gZmlyc3QgYXNzZXJ0cyBzb21lIGNvbmRpdGlvbnMsIGxpa2UgdGhlIHJlZiBjb3VudCBhbmQgZGVmZXJyZWQgbGlzdCwgYmVmb3JlIGNsZWFyaW5nIHRoZSBgX3BhcnRpYWxseV9tYXBwZWRgIGZsYWcgYW5kIGRlY3JlbWVudGluZyBhIHJlbGF0ZWQgc3RhdGlzdGljLlxuXG5UaGUgc2Vjb25kIHBhcnQgb2YgdGhlIHBhdGNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVHdvIGR1cGxpY2F0ZSBibG9ja3Mgb2YgY29kZSB0aGF0IGNoZWNrIGFuZCBjbGVhciB0aGUgYF9wYXJ0aWFsbHlfbWFwcGVkYCBmbGFnLCBhbG9uZyB3aXRoIHRoZSBzdGF0aXN0aWMgbW9kaWZpY2F0aW9uLCBhcmUgcmVwbGFjZWQgYnkgY2FsbHMgdG8gdGhpcyBuZXcgaGVscGVyIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgY2xhc3NpYyByZWZhY3RvcmluZyB0byBpbXByb3ZlIGNvZGUgcmVhZGFiaWxpdHkgYW5kIHJlZHVjZSByZWR1bmRhbmN5IOKAkyBhIGdvb2QgcHJhY3RpY2UsIG9mIGNvdXJzZS5cblxuTm93LCBiZWZvcmUgSSBkZWx2ZSBpbnRvIGEgbGluZS1ieS1saW5lIGFuYWx5c2lzIG9mIGBWTV9XQVJOX09OX0ZPTElPYCwgd2hpY2ggSSBzaG91bGQgdW5kZXJzdGFuZCBhbnl3YXkgYW5kIHRoZSBgbW9kX210aHBfc3RhdGAgb3BlcmF0aW9ucywgSSB3YW50IHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIGdldCBhIGJyb2FkZXIgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFVuZGVyc3RhbmRpbmcgdGhlIGxhcmdlciBwaWN0dXJlIHdpbGwgaGVscCBtZSBncmFzcCB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYW55IHN1YnRsZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZWVtaW5nbHkgaXNvbGF0ZWQgY2hhbmdlLiBJdCdzIGNydWNpYWwgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgZXhpc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBhcm91bmQgaHVnZSBwYWdlcyBhbmQgdGhlaXIgbWFwcGluZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGVudmlyb25tZW50IGlzIGxpa2UgYmVmb3JlIHdlIGZ1bGx5IGV2YWx1YXRlIHRoZSBwcm9wb3NlZCBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0Njo1Ny4zNzg3Nzg5MThaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MzE1NDI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTM5Njg9c3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3NC1cXG5tbS9odWdlX21lbW9yeS5jOjM5NzU6c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3Ni17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM5OTM9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDAxNy1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjQwMTg6XFx0XFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYy00MDE5LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTE3PWJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1MzEtXFx0aWYgKF9fbGlzdF9scnVfZGVsKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUzMjpcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1MzMtXFx0XFx0dW5xdWV1ZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0Njo1Ny43NjE5Mzk5MDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0NDYwNzUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGNvZGUgYXJvdW5kIHRob3NlIGZ1bmN0aW9uczpcblxuKipEaXZpbmcgaW50byBGb2xpbyBGcmVlemluZyBhbmQgU3BsaXR0aW5nKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucyBvZiB0aGlzIGZvbGlvIGZyZWV6aW5nIGFuZCB1bm1hcHBpbmcgcHJvY2Vzcy4gSSdtIHRyeWluZyB0byBwaWN0dXJlIGhvdyB0aGUgc3lzdGVtIGlzIGhhbmRsaW5nIHRoZSB0cmFuc2l0aW9uIG9mIGEgcG90ZW50aWFsbHkgbGFyZ2UsIHVubWFwcGVkIGZvbGlvLiBJIHN1c3BlY3QgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgaXMgdGhlIGNvcmUgb2YgdGhlIHdvcmssIHByb2JhYmx5IHRha2luZyBhbiB1bm1hcHBlZCBmb2xpbyBhbmQgZWl0aGVyIGZyZWV6aW5nIGl0IChwZXJoYXBzIGZvciBsYXRlciB1c2Ugb3IgbWFwcGluZykgb3Igc3BsaXR0aW5nIGl0IHVwIGlmIGl0J3MgdG9vIGxhcmdlLCBhbmQgcXVldWluZyB1cCB0aGUgcmVzdWx0aW5nIHNlZ21lbnRzLiBUaGVuLCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBtdXN0IGJlIHRoZSBjbGVhbnVwIGNyZXcsIHByb2Nlc3NpbmcgdGhvc2UgcXVldWVkLCBzcGxpdCBmb2xpbyBwYXJ0cy4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgZWl0aGVyIG1hcHBpbmcgb3IgZGlzY2FyZGluZyB0aG9zZSBwaWVjZXMuIEkgd2FudCB0byBjaGVjayBob3cgdGhlIHVubWFwcGluZyBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZXMsIHdoYXQga2luZCBvZiBsb2NraW5nIGlzIGluIHBsYWNlLCBhbmQgd2hhdCBoYXBwZW5zIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGluIHRoZSBwcm9jZXNzLiBJdCdzIGNyaXRpY2FsIHRvIGRldGVybWluZSB3aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGNvdWxkIGFyaXNlIGFuZCBob3cgdGhlIGNvZGUgbWl0aWdhdGVzIHRob3NlLiBVbmRlcnN0YW5kaW5nIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRpb25zIGlzIGtleSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkZWZlcnJlZCBhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDc6MDAuMDA2NTQ5OTEyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5NzA6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcXG4zOTcxOlxcdFxcdFxcdHJldHVybiAwO1xcbjM5NzI6XFx0XFx0cmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4zOTczOlxcdH1cXG4zOTc0OlxcdFxcbjM5NzU6XFx0c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjM5NzY6XFx0e1xcbjM5Nzc6XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuMzk3ODpcXHRcXG4zOTc5OlxcdFxcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcXG4zOTgwOlxcdFxcdFxcdHJldHVybjtcXG4zOTgxOlxcdFxcbjM5ODI6XFx0XFx0LypcXG4zOTgzOlxcdFxcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcXG4zOTg0OlxcdFxcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cXG4zOTg1OlxcdFxcdCAqL1xcbjM5ODY6XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pO1xcbjM5ODc6XFx0XFxuMzk4ODpcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4zOTg5OlxcdFxcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbjM5OTA6XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbjM5OTE6XFx0fVxcbjM5OTI6XFx0XFxuMzk5MzpcXHRzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbjM5OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbjM5OTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXFxuMzk5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlLFxcbjM5OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxcbjM5OTg6XFx0e1xcbjM5OTk6XFx0XFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG40MDAwOlxcdFxcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcXG40MDAxOlxcdFxcdGludCByZXQgPSAwO1xcbjQwMDI6XFx0XFxuNDAwMzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgZW5kKTtcXG40MDA0OlxcdFxcbjQwMDU6XFx0XFx0aWYgKGZvbGlvX3JlZl9mcmVlemUoZm9saW8sIGZvbGlvX2NhY2hlX3JlZl9jb3VudChmb2xpbykgKyAxKSkge1xcbjQwMDY6XFx0XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSA9IE5VTEw7XFxuNDAwNzpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuNDAwODpcXHRcXG40MDA5OlxcdFxcdFxcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xcbjQwMTA6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxuNDAxMTpcXHRcXG40MDEyOlxcdFxcdFxcdC8qXFxuNDAxMzpcXHRcXHRcXHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XFxuNDAxNDpcXHRcXHRcXHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXFxuNDAxNTpcXHRcXHRcXHQgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuXFxuNDAxNjpcXHRcXHRcXHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cXG40MDE3OlxcdFxcdFxcdCAqL1xcbjQwMTg6XFx0XFx0XFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuNDAxOTpcXHRcXG40MDIwOlxcdFxcdFxcdGlmIChtYXBwaW5nKSB7XFxuNDAyMTpcXHRcXHRcXHRcXHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuNDAyMjpcXHRcXG40MDIzOlxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG40MDI0OlxcdFxcdFxcdFxcdCAgICBuZXdfb3JkZXIgXFx1MDAzYyBIUEFHRV9QTURfT1JERVIpIHtcXG40MDI1OlxcdFxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XFxuNDAyNjpcXHRcXHRcXHRcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXFxuNDAyNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHROUl9TSE1FTV9USFBTLCAtbnIpO1xcbjQwMjg6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG40MDI5OlxcdFxcdFxcdFxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDc6MDAuMDA2OTQ2MjYyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0ODQ1MTM5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgaWYgSSBhbSB0aGUgb25lIHRoaW5raW5nIGl0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkZvY3VzZWQgUmV2aWV3IG9mIFNwZWNpZmljIENvZGUgTGluZXMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBhIHBhcnRpY3VsYXIgc2VjdGlvbi4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgaXNzdWUsIEkgd2FudCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgbGluZXMgNDUxNSB0aHJvdWdoIDQ1NDUuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgYSBzdWJ0bGUgaW50ZXJhY3Rpb24gb3IgYSBwb3RlbnRpYWwgZWRnZSBjYXNlIHRyaWdnZXJlZCBieSB0aGUgc3Vycm91bmRpbmcgbG9naWMsIGFuZCB0aGVzZSBsaW5lcyBmYWxsIHdpdGhpbiB0aGUgYXJlYSBJJ20gbW9zdCBpbnRlcmVzdGVkIGluLiBUaGlzIHRhcmdldGVkIHJldmlldyB3aWxsIGFsbG93IG1lIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGxpbmVzIGFyZSBpbmRlZWQgY29udHJpYnV0aW5nIHRvIHRoZSBjdXJyZW50IGlzc3VlLCBvciBpZiB0aGV5IGNhbiBiZSBxdWlja2x5IGRpc2NvdW50ZWQgZnJvbSBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHNhdmluZyBtZSB0aW1lIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ3OjAxLjQ5MTQ2MjkzMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTE4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTE1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTE1OlxcdCAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cXG40NTE2OlxcdCAqL1xcbjQ1MTc6XFx0Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG40NTE4OlxcdHtcXG40NTE5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG40NTIwOlxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcXG40NTIxOlxcdFxcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xcbjQ1MjI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTIzOlxcdFxcdGJvb2wgdW5xdWV1ZWQgPSBmYWxzZTtcXG40NTI0OlxcdFxcbjQ1MjU6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbjQ1MjY6XFx0XFx0V0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKTtcXG40NTI3OlxcdFxcbjQ1Mjg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1Mjk6XFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuNDUzMDpcXHRcXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcXHUwMDI2bWVtY2csIFxcdTAwMjZmbGFncyk7XFxuNDUzMTpcXHRcXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxuNDUzMjpcXHRcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG40NTMzOlxcdFxcdFxcdHVucXVldWVkID0gdHJ1ZTtcXG40NTM0OlxcdFxcdH1cXG40NTM1OlxcdFxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG40NTM2OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjQ1Mzc6XFx0XFxuNDUzODpcXHRcXHRyZXR1cm4gdW5xdWV1ZWQ7XFx0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xcbjQ1Mzk6XFx0fVxcbjQ1NDA6XFx0XFxuNDU0MTpcXHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbid0IGNsZWFyIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyAqL1xcbjQ1NDI6XFx0dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuNDU0MzpcXHR7XFxuNDU0NDpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XFxuNDU0NTpcXHRcXHRpbnQgbmlkO1xcbjQ1NDY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQ1NDc6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTQ4OlxcdFxcbjQ1NDk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDc6MDEuNDkxODU2NTAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1OTA3Mzg0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZHlpbmcgdXAgc29tZSBjb2RlLiBTcGVjaWZpY2FsbHksIGl0J3MgcmVmYWN0b3JpbmcgdGhlIHJlcGV0aXRpdmUgbG9naWMgdGhhdCBjaGVja3MsIGNsZWFycyB0aGUgYFBHX3BhcnRpYWxseV9tYXBwZWRgIGZsYWcgb24gYSBmb2xpbywgYW5kIGRlY3JlbWVudHMgdGhlIGBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVEYCBzdGF0aXN0aWMuIFRoaXMgaXMgYmVpbmcgcHVsbGVkIGludG8gYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAuIEdvb2QsIGdvb2QsIGNvbnNvbGlkYXRpb24gaXMgYWx3YXlzIGEgcGx1cy5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbiDigJMgZG9lcyB0aGlzIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBiZSBzdXJlIG9mIGJlZm9yZSBzaWduaW5nIG9mZi4gVGhleSd2ZSBhZGRlZCBzb21lIGRlYnVnZ2luZyBhc3NlcnRpb25zOiBgVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbylgIGFuZCBgVk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKWAuIFRoZXNlIGFyZSBnb29kLCBhZGRlZCBzYWZldHkgbmV0cy4gTGV0J3Mgc2VlLi4uXG5cblRoaW5raW5nIGl0IHRocm91Z2guLi4gTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBiZWluZyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHJlbGllZi4gTm8gbmV3IHN0cnVjdCBmaWVsZHMgYXJlIGJlaW5nIGFkZGVkLCBtZWFuaW5nIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgaW4gdGhvc2UuIEFuZCBjcml0aWNhbGx5LCBubyBkYXRhIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGFsbCBvcGVyYXRpbmcgb24gZXhpc3RpbmcsIGFscmVhZHkgYWxsb2NhdGVkIGFuZCB0cmFja2VkIGBzdHJ1Y3QgZm9saW9zYCDigJMgdGhvc2UgcGFnZSBkZXNjcmlwdG9ycyBhbHJlYWR5IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFdlJ3JlICptYW5pcHVsYXRpbmcqIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcywgbm90IGNyZWF0aW5nIGFueXRoaW5nIG5ldyBmcm9tIHNjcmF0Y2guIEFuZCwgdGhlcmUgYXJlbid0IGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IHJlbHkgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBhbnl0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIGFzc2VydGlvbnMsIG9yIGlmIHRoZXJlJ3MgbGlzdCBjb3JydXB0aW9uLCB3ZSdsbCBoaXQgZGVidWcgY2hlY2tzLCBLQVNBTiwgb3IgbG9ja2RlcCDigJMgYWxsIG9mIHdoaWNoIGFyZSBkZXNpZ25lZCB0byBjYXRjaCB0aGlzIHNvcnQgb2YgdGhpbmcgZWFybHkuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgSSdtIGNvbmZpZGVudCB0aGlzIHJlZmFjdG9yaW5nICpkb2Vzbid0KiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzbid0IHJlcXVpcmVkIGluIHRoaXMgY2FzZSwgYmFzZWQgb24gdGhpcyBhbmFseXNpcy4gQWxyaWdodCwgSSdtIGNvbWZvcnRhYmxlIHdpdGggdGhpcy4gVGltZSB0byBtYWtlIHRoYXQgYHNldC1yZXN1bHRzYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTgzLCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ3OjA2LjA4MjU5Njg5OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnIGFuZCB0aGUgY29ycmVzcG9uZGluZyBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVEIG1ldHJpYyBkZWNyZW1lbnQgaW50byBhIHNoYXJlZCBoZWxwZXIgZnVuY3Rpb24gYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKWAsIGFkZGluZyBWTV9XQVJOX09OX0ZPTElPIGFzc2VydGlvbnMgZm9yIGZvbGlvIHJlZmNvdW50IGFuZCBkZWZlcnJlZCBsaXN0IHN0YXRlLlxcblxcblRoaXMgaXMgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgdG91Y2hpbmcgc3RydWN0IGZvbGlvIGZsYWdzIGFuZCBzdGF0aXN0aWNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGJvdW5kcy9sZW5ndGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBzdGF0ZSBhc3NlcnRpb24gZmFpbHVyZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzIGFuZCBLQVNBTi4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNsZWFyaW5nIG9mIHRoZSBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQgbWV0cmljIGRlY3JlbWVudCBpbnRvIGEgc2hhcmVkIGhlbHBlciBmdW5jdGlvbiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpYCwgYWRkaW5nIFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBmb3IgZm9saW8gcmVmY291bnQgYW5kIGRlZmVycmVkIGxpc3Qgc3RhdGUuXFxuXFxuVGhpcyBpcyBhbiBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCByZWZhY3RvcmluZyB0b3VjaGluZyBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIHN0YXRpc3RpY3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgYm91bmRzL2xlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIChzdWNoIGFzIHN0YXRlIGFzc2VydGlvbiBmYWlsdXJlcyBvciBtZW1vcnkgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MgYW5kIEtBU0FOLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4lngq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 22:12:36 +0000 UTC FinishedAt: 2026-09-07 22:47:07 +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": "9d7afd05-1d53-4cc7-b5c4-dab091298559" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__folio_unqueue_deferred_split", "__split_huge_page_to_list_to_order", "split_huge_page_to_list_to_order", "folio_split_unmapped", "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBtZXRyaWMgZGVjcmVtZW50IGludG8gYSBzaGFyZWQgaGVscGVyIGZ1bmN0aW9uIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKClgLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zIGZvciBmb2xpbyByZWZjb3VudCBhbmQgZGVmZXJyZWQgbGlzdCBzdGF0ZS5cblxuVGhpcyBpcyBhbiBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCByZWZhY3RvcmluZyB0b3VjaGluZyBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIHN0YXRpc3RpY3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgYm91bmRzL2xlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIChzdWNoIGFzIHN0YXRlIGFzc2VydGlvbiBmYWlsdXJlcyBvciBtZW1vcnkgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MgYW5kIEtBU0FOLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSBpbiBtbS9odWdlX21lbW9yeS5jLCB3aGljaCBhZGRzIG5ldyBydW50aW1lIGFzc2VydGlvbiBjaGVja3MgKFZNX1dBUk5fT05fRk9MSU8gZm9yIHJlZmNvdW50IGFuZCBlbXB0eSBkZWZlcnJlZCBsaXN0KSBhbmQgdXBkYXRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBwYXJ0aWFsbHkgbWFwcGVkIGh1Z2UgZm9saW9zIGR1cmluZyBkZWZlcnJlZCBzcGxpdCB1bnF1ZXVpbmcgYW5kIGh1Z2UgcGFnZSB1bm1hcHBlZCBmcmVlemUtYW5kLXNwbGl0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBlbnN1cmUgdGhlIGludmFyaWFudHMgaG9sZCBhY3Jvc3MgVEhQIHNwbGl0dGluZyBhbmQgcmVjbGFtYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmOTUzMTBjMTA0ZWQyMjJlNzdmMzA4NzFiZTg0YzUzODAyNmU5OWU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAyMjo0NjoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZGQ2NmM2YWQ1YWYxMy4uMjNlZjIyYzJiNWRiMyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTcyLDYgJiM0MzszOTcyLDI0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm9saW9fY2FjaGVfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPcmRlci0xIGZvbGlvcyBoYXZlIG5vIF9kZWZlcnJlZF9saXN0LiBUaGUgZmxhZyBpcyBvbmx5IGV2ZXIgc2V0XG4mIzQzO1x0ICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLlxuJiM0MztcdCAqL1xuJiM0MztcdFZNX1dBUk5fT05fRk9MSU8oIWxpc3RfZW1wdHkoXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QpLCBmb2xpbyk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuJiM0MztcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuJiM0MztcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXG5AQCAtMzk4MCw3ICYjNDM7Mzk5OCw2IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4ge1xuIFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbiBcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcbi1cdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbkBAIC0zOTk4LDExICYjNDM7NDAxNSw3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbiBcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4mIzQzO1x0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbiBcbiBcdFx0aWYgKG1hcHBpbmcpIHtcbiBcdFx0XHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5AQCAtNDUxNiwxMSAmIzQzOzQ1MjksNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4gXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFx1MDAyNm1lbWNnLCBcdTAwMjZmbGFncyk7XG4gXHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG4tXHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4tXHRcdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHRcdH1cbiYjNDM7XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFx0XHR1bnF1ZXVlZCA9IHRydWU7XG4gXHR9XG4gXHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtERUJVR19WTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICAgJiMzNDtfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyJiMzNDssCiAgICAmIzM0O3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyJiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0X3VubWFwcGVkJiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X2ZvbGlvJiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKCkgaW4gbW0vaHVnZV9tZW1vcnkuYywgd2hpY2ggYWRkcyBuZXcgcnVudGltZSBhc3NlcnRpb24gY2hlY2tzIChWTV9XQVJOX09OX0ZPTElPIGZvciByZWZjb3VudCBhbmQgZW1wdHkgZGVmZXJyZWQgbGlzdCkgYW5kIHVwZGF0ZXMgc3RhdGUgbWFuYWdlbWVudCBmb3IgcGFydGlhbGx5IG1hcHBlZCBodWdlIGZvbGlvcyBkdXJpbmcgZGVmZXJyZWQgc3BsaXQgdW5xdWV1aW5nIGFuZCBodWdlIHBhZ2UgdW5tYXBwZWQgZnJlZXplLWFuZC1zcGxpdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gZW5zdXJlIHRoZSBpbnZhcmlhbnRzIGhvbGQgYWNyb3NzIFRIUCBzcGxpdHRpbmcgYW5kIHJlY2xhbWF0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjk1MzEwYzEwNGVkMjIyZTc3ZjMwODcxYmU4NGM1MzgwMjZlOTllOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMjI6NDY6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCBkZDY2YzZhZDVhZjEzLi4yM2VmMjJjMmI1ZGIzIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTM5NzIsNiAmIzQzOzM5NzIsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIAlyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7CiYjNDM7CiYjNDM7CWlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT3JkZXItMSBmb2xpb3MgaGF2ZSBubyBfZGVmZXJyZWRfbGlzdC4gVGhlIGZsYWcgaXMgb25seSBldmVyIHNldAomIzQzOwkgKiBvbiBmb2xpb3MgdGhhdCBkbywgc28gdGhlIGxpc3QgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIgdGhlIGZsYWcuCiYjNDM7CSAqLwomIzQzOwlWTV9XQVJOX09OX0ZPTElPKCFsaXN0X2VtcHR5KCZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0KSwgZm9saW8pOwomIzQzOwomIzQzOwlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKJiM0MzsJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCiYjNDM7CQkgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwKIAkJCQkJICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLAogCQkJCQkgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSwKQEAgLTM5ODAsNyAmIzQzOzM5OTgsNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogewogCXN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7CiAJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0OwotCWludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgJmFtcDsmYW1wOyBlbmQpOwpAQCAtMzk5OCwxMSAmIzQzOzQwMTUsNyBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbgogCQkgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuCiAJCSAqIENsZWFyIGl0IGhlcmU6IHRoZSBmbGFnIGRvZXMgbm90IHN1cnZpdmUgdGhlIHNwbGl0LgogCQkgKi8KLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChvbGRfb3JkZXIsCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAogCQlpZiAobWFwcGluZykgewogCQkJaW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwpAQCAtNDUxNiwxMSAmIzQzOzQ1MjksNyBAQCBib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCW1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwogCWxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZSgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSwgbmlkLCAmYW1wO21lbWNnLCAmYW1wO2ZsYWdzKTsKIAlpZiAoX19saXN0X2xydV9kZWwoJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QsIG5pZCkpIHsKLQkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJbW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksCi0JCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCQl9CiYjNDM7CQlmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKIAkJdW5xdWV1ZWQgPSB0cnVlOwogCX0KIAlsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsICZhbXA7ZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZSBNZW1vcnkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBpdCYjMzk7cyBmb2N1c2VkIG9uIGBtbS9odWdlX21lbW9yeS5jYCwgd2hpY2ggYWx3YXlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylgLCBiZWluZyBpbnRyb2R1Y2VkLiBJIGltbWVkaWF0ZWx5IG5vdGljZSB0aGUgYFZNX1dBUk5fT05fRk9MSU9gIGNhbGxzLiBBbHdheXMgZ29vZCB0byBzZWUgdGhvc2Ugc2FuaXR5IGNoZWNrcyDigJMgYGZvbGlvX3JlZl9jb3VudChmb2xpbylgIGFuZCBgIWxpc3RfZW1wdHkoJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QpYC4gVGhlc2UgYXJlIGltcG9ydGFudCB0byBjYXRjaCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG1pc3VzZSBvZiB0aGUgZm9saW8gc3RydWN0dXJlLiBUaGUgaW50ZW50IGlzIGNsZWFyOiB0byBlbnN1cmUgd2UmIzM5O3JlIG5vdCB0b3VjaGluZyBhIGZvbGlvIHRoYXQmIzM5O3Mgc3RpbGwgaW4gdXNlIG9yIGF3YWl0aW5nIGRlZmVycmVkIGFjdGlvbnMgd2hlbiB3ZSByZXNldCB0aGUgcGFydGlhbGx5IG1hcHBlZCBmbGFnLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgcmVwbGFjZW1lbnQgb2YgZGlyZWN0IGNsZWFyaW5nIG9mIGBwYXJ0aWFsbHlfbWFwcGVkYCBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgd2l0aCBhIGNhbGwgdG8gdGhpcyBuZXcgaGVscGVyLiBUaGF04oCZcyBwcm9iYWJseSBhIGdvb2QgbW92ZSBmb3IgZW5jYXBzdWxhdGlvbiBhbmQgcG90ZW50aWFsIGZ1dHVyZSBtYWludGFpbmFiaWxpdHkuIEl0IHN1Z2dlc3RzIGEgcmVmYWN0b3JpbmcgdG8gY2VudHJhbGl6ZSB0aGUgbG9naWMgcmVsYXRlZCB0byB0aGlzIGBwYXJ0aWFsbHlfbWFwcGVkYCBmbGFnLCB3aGljaCBpcyBhIGNvbW1vbiBwcmFjdGljZSBpbiB0aGlzIHR5cGUgb2YgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzLiBUbyBwcm9wZXJseSBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgcmVhc29uaW5nLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSYjMzk7bGwgZWl0aGVyIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHJlbGV2YW50IHVzZXMgb3IganVzdCByZWFkIHRocm91Z2ggdGhlIGNvZGUgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhpcyBpcyBhIGNydWNpYWwgc3RlcCBpbiB0aGUgZm9saW8gc3BsaXQvdW5tYXBwaW5nIHByb2Nlc3NlcywgcHJvYmFibHkgcmVsYXRlZCB0byBodWdlIHBhZ2VzIGFuZCBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM5Njg9c3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzQtXG5tbS9odWdlX21lbW9yeS5jOjM5NzU6c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy0zOTc2LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5OTM9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMTctXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MDE4Olx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDAxOS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1MTc9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MzEtXHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG5tbS9odWdlX21lbW9yeS5jOjQ1MzI6XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYy00NTMzLVx0XHR1bnF1ZXVlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgYXJvdW5kIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gVGhlc2UgYXJlIGtleSBmdW5jdGlvbnMsIHNvIHVuZGVyc3RhbmRpbmcgdGhlaXIgY2FsbGVycyBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhleSYjMzk7cmUgdXNlZCBpcyBwYXJhbW91bnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hhdCBjb25maWd1cmF0aW9ucyB0cmlnZ2VyIHRoZWlyIHVzZS4gSSBiZXQgdGhlcmUgYXJlIHNvbWUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBjaGVjaywgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHBlcmhhcHMgdGhpbmdzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBvciBvdGhlciByZWxhdGVkIHNldHRpbmdzLiBLbm93aW5nICp3aGVyZSogdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIHdpZGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSB3aWxsIHJlYWxseSBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IGl0IGFsbCBoYW5ncyB0b2dldGhlci4gSSBuZWVkIHRvIGxvb2sgYXQgdGhhdCBjYWxsIGdyYXBoLCBzZWUgd2hhdCYjMzk7cyBwYXNzaW5nIGluLCBhbmQgcGllY2UgdG9nZXRoZXIgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyB0aGF0IGxlYWRzIHRvIHRoZWlyIGV4ZWN1dGlvbi4gVGhpcyBpcyBnb2luZyB0byBiZSBhIGdvb2Qgd2F5IHRvIGZpZ3VyZSBvdXQgaG93IHRvIGRlYnVnIHRoZXNlIHJvdXRpbmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NzA6XHRcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxuMzk3MTpcdFx0XHRyZXR1cm4gMDtcbjM5NzI6XHRcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4zOTczOlx0fVxuMzk3NDpcdFxuMzk3NTpcdHN0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbjM5NzY6XHR7XG4zOTc3Olx0XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbjM5Nzg6XHRcbjM5Nzk6XHRcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbjM5ODA6XHRcdFx0cmV0dXJuO1xuMzk4MTpcdFxuMzk4MjpcdFx0LypcbjM5ODM6XHRcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbjM5ODQ6XHRcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbjM5ODU6XHRcdCAqL1xuMzk4NjpcdFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbjM5ODc6XHRcbjM5ODg6XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuMzk4OTpcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4zOTkwOlx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbjM5OTE6XHR9XG4zOTkyOlx0XG4zOTkzOlx0c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbjM5OTQ6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuMzk5NTpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbjM5OTY6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBlbnVtIHNwbGl0X3R5cGUgc3BsaXRfdHlwZSxcbjM5OTc6XHRcdFx0XHRcdFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxuMzk5ODpcdHtcbjM5OTk6XHRcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG40MDAwOlx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG40MDAxOlx0XHRpbnQgcmV0ID0gMDtcbjQwMDI6XHRcbjQwMDM6XHRcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbjQwMDQ6XHRcbjQwMDU6XHRcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICYjNDM7IDEpKSB7XG40MDA2Olx0XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xuNDAwNzpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG40MDA4Olx0XG40MDA5Olx0XHRcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xuNDAxMDpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbjQwMTE6XHRcbjQwMTI6XHRcdFx0LypcbjQwMTM6XHRcdFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxuNDAxNDpcdFx0XHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXG40MDE1Olx0XHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbjQwMTY6XHRcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG40MDE3Olx0XHRcdCAqL1xuNDAxODpcdFx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQwMTk6XHRcbjQwMjA6XHRcdFx0aWYgKG1hcHBpbmcpIHtcbjQwMjE6XHRcdFx0XHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG40MDIyOlx0XG40MDIzOlx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjQwMjQ6XHRcdFx0XHQgICAgbmV3X29yZGVyIFx1MDAzYyBIUEFHRV9QTURfT1JERVIpIHtcbjQwMjU6XHRcdFx0XHRcdGlmIChmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XG40MDI2Olx0XHRcdFx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbyxcbjQwMjc6XHRcdFx0XHRcdFx0XHRcdE5SX1NITUVNX1RIUFMsIC1ucik7XG40MDI4Olx0XHRcdFx0XHR9IGVsc2Uge1xuNDAyOTpcdFx0XHRcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXG40MDMwOlx0XHRcdFx0XHRcdFx0XHROUl9GSUxFX1RIUFMsIC1ucik7XG40MDMxOlx0XHRcdFx0XHR9XG40MDMyOlx0XHRcdFx0fVxuNDAzMzpcdFx0XHR9XG40MDM0Olx0XG40MDM1Olx0XHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbjQwMzY6XHRcdFx0XHRpZiAobWFwcGluZykge1xuNDAzNzpcdFx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKG1hcHBpbmcsIGZvbGlvKTtcbjQwMzg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDAzOTpcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AqKgoKT2theSwgc28gd2UgbmVlZCB0byB6b29tIGluIG9uIGBtbS9odWdlX21lbW9yeS5jYC4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoaXMgcHJvamVjdCwgYSBmb2N1c2VkIGFwcHJvYWNoIGlzIGFsd2F5cyB0aGUgYmVzdCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdCBpcyBiZXR3ZWVuIGxpbmVzIDQ1MTUgYW5kIDQ1NTAuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgbGl2ZXMuIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgZGlnZ2luZy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiB0aG9zZSBsaW5lcyB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIGludGVyYWN0aW9uIGhhcHBlbmluZy4gSG9wZWZ1bGx5LCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFuZCBjb21tZW50cyBhcmUgaGVscGZ1bC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHNlY3Rpb24gZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSBpc3N1ZSBvciBpZiBpdCByZXF1aXJlcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byByZWxhdGVkIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDUxNTpcdCAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cbjQ1MTY6XHQgKi9cbjQ1MTc6XHRib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuNDUxODpcdHtcbjQ1MTk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjQ1MjA6XHRcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcbjQ1MjE6XHRcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xuNDUyMjpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjQ1MjM6XHRcdGJvb2wgdW5xdWV1ZWQgPSBmYWxzZTtcbjQ1MjQ6XHRcbjQ1MjU6XHRcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcbjQ1MjY6XHRcdFdBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xuNDUyNzpcdFxuNDUyODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuNDUyOTpcdFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG40NTMwOlx0XHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFx1MDAyNm1lbWNnLCBcdTAwMjZmbGFncyk7XG40NTMxOlx0XHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG40NTMyOlx0XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuNDUzMzpcdFx0XHR1bnF1ZXVlZCA9IHRydWU7XG40NTM0Olx0XHR9XG40NTM1Olx0XHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbjQ1MzY6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDUzNzpcdFxuNDUzODpcdFx0cmV0dXJuIHVucXVldWVkO1x0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xuNDUzOTpcdH1cbjQ1NDA6XHRcbjQ1NDE6XHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbiYjMzk7dCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cbjQ1NDI6XHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbjQ1NDM6XHR7XG40NTQ0Olx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG40NTQ1Olx0XHRpbnQgbmlkO1xuNDU0NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDU0NzpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjQ1NDg6XHRcbjQ1NDk6XHRcdC8qXG40NTUwOlx0XHQgKiBPcmRlciAxIGZvbGlvcyBoYXZlIG5vIHNwYWNlIGZvciBhIGRlZmVycmVkIGxpc3QsIGJ1dCB3ZSBhbHNvXG40NTUxOlx0XHQgKiB3b24mIzM5O3Qgd2FzdGUgbXVjaCBtZW1vcnkgYnkgbm90IGFkZGluZyB0aGVtIHRvIHRoZSBkZWZlcnJlZCBsaXN0LlxuNDU1MjpcdFx0ICovXG40NTUzOlx0XHRpZiAoZm9saW9fb3JkZXIoZm9saW8pIFx1MDAzYz0gMSlcbjQ1NTQ6XHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgYW5hbHlzaXMsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSB3b3JraW5nIHdpdGggaHVnZSBtZW1vcnksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyBgbW0vaHVnZV9tZW1vcnkuY2AuIE15IGZpcnN0IHN0b3AgaXMgZ29pbmcgdG8gYmUgdGhlIEtjb25maWcgZmlsZXMuIEkga25vdyB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSByZWxpZXMgaGVhdmlseSBvbiB0aG9zZSB0byBkZXRlcm1pbmUgd2hhdCBnZXRzIGNvbXBpbGVkLCBhbmQgdGhlIG9wdGlvbnMgdGhhdCBhcmUgZXhwb3NlZCB0byB1c2Vycy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggS2NvbmZpZyBvcHRpb25zLCBpZiBhbnksIGRpcmVjdGx5IGdvdmVybiB0aGUgaW5jbHVzaW9uIG9mIHRoYXQgc3BlY2lmaWMgc291cmNlIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMuCgpOZXh0LCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeS4gS2NvbmZpZyB0ZWxscyB1cyAqd2hhdCogb3B0aW9ucyBleGlzdCwgYnV0IHRoZSBNYWtlZmlsZSB0ZWxscyB1cyAqaG93KiB0aG9zZSBvcHRpb25zIGFyZSBhcHBsaWVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHNlZSB0aGUgY29tcGlsYXRpb24gcnVsZXMgYW5kIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHdpdGhpbiB0aGF0IE1ha2VmaWxlIHRoYXQgcmVsYXRlIHRvIGBodWdlX21lbW9yeS5jYC4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGJ1aWxkLXRpbWUgcmVsYXRpb25zaGlwcyBhbmQgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZpbGUgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgYnVpbGQgZGVwZW5kZW5jeSBjaGFpbiBhbmQgaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgcHJlcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnlcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMT1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMjpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAzLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTU4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUgbWFpbiBrbm9iLCB0aGUgY29yZSBjb25maWd1cmF0aW9uIGl0ZW0gZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEJ1dCwgYXMgYWx3YXlzLCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gV2hhdCBlbHNlIGlzIGVudGFuZ2xlZCB3aXRoIHRoaXM/IFdoZXJlIGRvZXMgaXQgcmVzaWRlIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBoaWVyYXJjaHk/IEkgbmVlZCB0byBjaGVjayBgbW0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgYW55IGRlcGVuZGVuY2llcywgbWF5YmUgZXZlbiBzb21lIGNvbmRpdGlvbmFsIHNldHRpbmdzIG9yIGZlYXR1cmVzIHRoYXQgdGllIGluIHdpdGggYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBleHBlY3QgdGhlcmUgdG8gYmUgYSBmZXcgbGV2ZXJzIGFuZCBkaWFscyBhdCBwbGF5IHRvIGNvbnRyb2wgVEhQIGJlaGF2aW9yIGVmZmVjdGl2ZWx5LiBVbmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUsIGFsbCB0aGUgcmVsYXRlZCBjb25maWcgb3B0aW9ucywgaXMga2V5IHRvIHR1bmluZyB0aGlzIGFyZWEgcHJvcGVybHkuIFRpbWUgdG8gc3RhcnQgcmVhZGluZyB0aHJvdWdoIHRoYXQgS2NvbmZpZyBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04Mjc9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MjktXG5tbS9LY29uZmlnOjgzMDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzMS1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODQ4PWNob2ljZVxuLS1cbm1tL0tjb25maWctODUzLVxubW0vS2NvbmZpZzo4NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg1NS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2MC1cbm1tL0tjb25maWc6ODYxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODYyLVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2OS1cbm1tL0tjb25maWc6ODcwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3MS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODc3PWNob2ljZVxuLS1cbm1tL0tjb25maWctODg2LVxubW0vS2NvbmZpZzo4ODc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04ODgtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg5Ni1cbm1tL0tjb25maWc6ODk3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg5OC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwNC1cbm1tL0tjb25maWc6OTA1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTA2LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTItXG5tbS9LY29uZmlnOjkxMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTQtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05MjI9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzEtXG5tbS9LY29uZmlnOjkzMjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzMy1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQwLVxubW0vS2NvbmZpZzo5NDE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQyLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ4LVxubW0vS2NvbmZpZzo5NDk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTAtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1Ni1cbm1tL0tjb25maWc6OTU3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk1OC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIFJvbGUgb2YgREVCVUdfVk0gaW4gVk1fV0FSTl9PTl9GT0xJTyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYERFQlVHX1ZNYCBhbmQgYFZNX1dBUk5fT05fRk9MSU9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGBERUJVR19WTWAgaXMgYSBwcmVyZXF1aXNpdGUgb3IgYSBjb25kaXRpb25hbCBmYWN0b3IgaW4gdGhlIGJlaGF2aW9yIG9mIGBWTV9XQVJOX09OX0ZPTElPYC4gSXQmIzM5O3MgYSBiaXQgb2YgYSBodW5jaCwgYnV0IHRoZXNlIHR5cGVzIG9mIGRlYnVnIG9wdGlvbnMgb2Z0ZW4gYWZmZWN0IHdhcm5pbmcgb3IgZXJyb3IgYmVoYXZpb3JzLCBzbyBpdCYjMzk7cyBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuCgpJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgVk1fV0FSTl9PTl9GT0xJT2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIG1hY3JvIHRvIGRldGVybWluZSBpZiB0aGUgYERFQlVHX1ZNYCBmbGFnIGlzIHVzZWQgZGlyZWN0bHkgd2l0aGluIHRoZSBkZWZpbml0aW9uLiBJZiBzbywgaXQgd291bGQgZXhwbGFpbiB0aGUgcmVsYXRpb25zaGlwIGFuZCBob3cgdG8gcHJvY2VlZCwgb3RoZXJ3aXNlLCBJIGNhbiBpbnZlc3RpZ2F0ZSBvdGhlciBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW1kZWJ1Zy5oPTE4PXZvaWQgdm1hX2l0ZXJfZHVtcF90cmVlKGNvbnN0IHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSk7XG4tLVxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtNjktfSlcbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oOjcwOiNkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyhjb25kLCBmb2xpbylcdFx0KHtcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtNzEtXHRpbnQgX19yZXRfd2FybiA9ICEhKGNvbmQpO1x0XHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oLTEzNS0jZGVmaW5lIFZNX1dBUk5fT05fT05DRV9QQUdFKGNvbmQsIHBhZ2UpICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmg6MTM2OiNkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyhjb25kLCBmb2xpbykgIEJVSUxEX0JVR19PTl9JTlZBTElEKGNvbmQpXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC0xMzctI2RlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjIwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBtbWRlYnVnLmhgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgY2VydGFpbiBkZWJ1Z2dpbmcgZmxhZ3MgYW5kIG1hY3JvcyBhcmUgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgc3BlY2lmaWMgc2VjdGlvbiBvZiBgaW5jbHVkZS9saW51eC9tbWRlYnVnLmhgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZXMgNjAgdGhyb3VnaCA3NS4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHJldmlzaXQgdGhvc2UgY29yZSBkZWJ1ZyBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWxseSBjYXRjaCBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9ibGVtIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9uIG9yIHVzZSBvZiBrZXkgZGVidWcgZmxhZ3Mgb3IgbWFjcm9zIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiBvciBvdGhlciBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGRlYnVnZ2luZyBmYWNpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW1kZWJ1Zy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFwmIzM0Oy5kYXRhLi5vbmNlXCYjMzQ7KSBfX3dhcm5lZDtcdFx0XHRcXFxuICA2MTpcdFx0aW50IF9fcmV0X3dhcm5fb25jZSA9ICEhKGNvbmQpO1x0XHRcdFx0XHRcXFxuICA2MjpcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDYzOlx0XHRpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbmNlIFx1MDAyNlx1MDAyNiAhX193YXJuZWQpKSB7XHRcdFx0XFxcbiAgNjQ6XHRcdFx0ZHVtcF9wYWdlKHBhZ2UsIFwmIzM0O1ZNX1dBUk5fT05fT05DRV9QQUdFKFwmIzM0OyBfX3N0cmluZ2lmeShjb25kKVwmIzM0OylcJiMzNDspO1xcXG4gIDY1Olx0XHRcdF9fd2FybmVkID0gdHJ1ZTtcdFx0XHRcdFx0XFxcbiAgNjY6XHRcdFx0V0FSTl9PTigxKTtcdFx0XHRcdFx0XHRcXFxuICA2NzpcdFx0fVx0XHRcdFx0XHRcdFx0XHRcXFxuICA2ODpcdFx0dW5saWtlbHkoX19yZXRfd2Fybl9vbmNlKTtcdFx0XHRcdFx0XFxcbiAgNjk6XHR9KVxuICA3MDpcdCNkZWZpbmUgVk1fV0FSTl9PTl9GT0xJTyhjb25kLCBmb2xpbylcdFx0KHtcdFx0XHRcXFxuICA3MTpcdFx0aW50IF9fcmV0X3dhcm4gPSAhIShjb25kKTtcdFx0XHRcdFx0XFxcbiAgNzI6XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuICA3MzpcdFx0aWYgKHVubGlrZWx5KF9fcmV0X3dhcm4pKSB7XHRcdFx0XHRcdFxcXG4gIDc0Olx0XHRcdGR1bXBfcGFnZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBcJiMzNDtWTV9XQVJOX09OX0ZPTElPKFwmIzM0OyBfX3N0cmluZ2lmeShjb25kKVwmIzM0OylcJiMzNDspO1xcXG4gIDc1Olx0XHRcdFdBUk5fT04oMSk7XHRcdFx0XHRcdFx0XFxcbiAgNzY6XHRcdH1cdFx0XHRcdFx0XHRcdFx0XFxcbiAgNzc6XHRcdHVubGlrZWx5KF9fcmV0X3dhcm4pO1x0XHRcdFx0XHRcdFxcXG4gIDc4Olx0fSlcbiAgNzk6XHQjZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbylcdCh7XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgbW1kZWJ1Zy5oYCDigJMgR290dGEgVW5kZXJzdGFuZCBUaGlzIEd1YXJkKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoYXQgYGlmZGVmYCBndWFyZCBpbiBgbW1kZWJ1Zy5oYC4gSXQmIzM5O3MgY3J1Y2lhbCwgb2J2aW91c2x5LiBJJiMzOTttIGJldHRpbmcgdGhpcyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZWJ1Z2dpbmcgZmVhdHVyZXMgaW4gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gYXJlIGNvbnRyb2xsZWQgYXQgY29tcGlsZSB0aW1lLiBXaGF0IHNwZWNpZmljIGZlYXR1cmVzIGRvZXMgaXQgZW5hYmxlL2Rpc2FibGU/IFdoYXQgZGVmaW5lcyBhcmUgY2hlY2tlZD8gSXMgaXQgYSBzaW5nbGUsIG92ZXJhcmNoaW5nIGZsYWcsIG9yIGEgbW9yZSBncmFudWxhciBhcHByb2FjaCwgdGFyZ2V0aW5nIHNwZWNpZmljIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXRpZXM/IFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcmUgYmVpbmcgdXNlZCwgYW5kIHRoZWlyIGltcGFjdC4gSG93IGRvZXMgdGhpcyBndWFyZCBhZmZlY3QgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHdoYXQgZXhhY3RseSBpcyBiZWluZyBpbmNsdWRlZCBvciBleGNsdWRlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZWNoYW5pc20gY29tcGxldGVseSB0byBlZmZlY3RpdmVseSB0cm91Ymxlc2hvb3QsIG9wdGltaXplLCBvciBleHRlbmQgdGhpcyBtZW1vcnkgbWFuYWdlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tZGVidWcuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4gICAyOlx0I2lmbmRlZiBMSU5VWF9NTV9ERUJVR19IXG4gICAzOlx0I2RlZmluZSBMSU5VWF9NTV9ERUJVR19IIDFcbiAgIDQ6XHRcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ2lmeS5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0c3RydWN0IHBhZ2U7XG4gICA5Olx0c3RydWN0IHZtX2FyZWFfc3RydWN0O1xuICAxMDpcdHN0cnVjdCBtbV9zdHJ1Y3Q7XG4gIDExOlx0c3RydWN0IHZtYV9pdGVyYXRvcjtcbiAgMTI6XHRzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdDtcbiAgMTM6XHRcbiAgMTQ6XHR2b2lkIGR1bXBfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSwgY29uc3QgY2hhciAqcmVhc29uKTtcbiAgMTU6XHR2b2lkIGR1bXBfdm1hKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiAgMTY6XHR2b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuICAxNzpcdHZvaWQgZHVtcF92bWcoY29uc3Qgc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZywgY29uc3QgY2hhciAqcmVhc29uKTtcbiAgMTg6XHR2b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xuICAxOTpcdFxuICAyMDpcdCNpZmRlZiBDT05GSUdfREVCVUdfVk1cbiAgMjE6XHQjZGVmaW5lIFZNX0JVR19PTihjb25kKSBCVUdfT04oY29uZClcbiAgMjI6XHQjZGVmaW5lIFZNX0JVR19PTl9QQUdFKGNvbmQsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gIDIzOlx0XHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4gIDI0Olx0XHRcdGlmICh1bmxpa2VseShjb25kKSkge1x0XHRcdFx0XHRcXFxuICAyNTpcdFx0XHRcdGR1bXBfcGFnZShwYWdlLCBcJiMzNDtWTV9CVUdfT05fUEFHRShcJiMzNDsgX19zdHJpbmdpZnkoY29uZClcJiMzNDspXCYjMzQ7KTtcXFxuICAyNjpcdFx0XHRcdEJVRygpO1x0XHRcdFx0XHRcdFxcXG4gIDI3Olx0XHRcdH1cdFx0XHRcdFx0XHRcdFxcXG4gIDI4Olx0XHR9IHdoaWxlICgwKVxuICAyOTpcdCNkZWZpbmUgVk1fQlVHX09OX0ZPTElPKGNvbmQsIGZvbGlvKVx0XHRcdFx0XHRcXFxuICAzMDpcdFx0ZG8ge1x0XHRcdFx0XHRcdFx0XHRcXFxuICAzMTpcdFx0XHRpZiAodW5saWtlbHkoY29uZCkpIHtcdFx0XHRcdFx0XFxcbiAgMzI6XHRcdFx0XHRkdW1wX3BhZ2UoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgXCYjMzQ7Vk1fQlVHX09OX0ZPTElPKFwmIzM0OyBfX3N0cmluZ2lmeShjb25kKVwmIzM0OylcJiMzNDspO1xcXG4gIDMzOlx0XHRcdFx0QlVHKCk7XHRcdFx0XHRcdFx0XFxcbiAgMzQ6XHRcdFx0fVx0XHRcdFx0XHRcdFx0XFxcbiAgMzU6XHRcdH0gd2hpbGUgKDApXG4gIDM2Olx0I2RlZmluZSBWTV9CVUdfT05fVk1BKGNvbmQsIHZtYSlcdFx0XHRcdFx0XFxcbiAgMzc6XHRcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAgMzg6XHRcdFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XHRcdFx0XHRcdFxcXG4gIDM5Olx0XHRcdFx0ZHVtcF92bWEodm1hKTtcdFx0XHRcdFx0XFxcbiAgNDA6XHRcdFx0XHRCVUcoKTtcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA0MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogSHVnZSBQYWdlIFNwbGl0IExvZ2ljKioKCk9rYXksIHNvIGBDT05GSUdfREVCVUdfVk1gIGVuYWJsZXMgYFZNX1dBUk5fT05fRk9MSU9gLCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29tcGlsZXMgYG1tL2h1Z2VfbWVtb3J5LmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IHRoZSBlZmZvcnQ/CgpMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjogbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nLCBCUEYsIHNjaGVkdWxlciwgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLCAqYW5kKiBhbnkgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9ucyBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIHNlZSBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAgYWRkcyBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucyByZWxhdGVkIHRvIGZvbGlvIHJlZiBjb3VudHMgYW5kIGRlZmVycmVkIGxpc3RzLiBDcml0aWNhbGx5LCB0aGVzZSBhc3NlcnRpb25zIGFyZSAqaW4qIHRoZSB0cmFuc3BhcmVudCBodWdlcGFnZSAoVEhQKSAvIG1USFAgc3BsaXQgcGF0aCB3aXRoaW4gYG1tL2AuIFNwZWNpZmljYWxseSwgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGFyZSBpbnZvbHZlZC4gVGhpcyBzY3JlYW1zICYjMzQ7cmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OyBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB0aGUgbmV4dCBzdGVwLiBMZXQmIzM5O3Mgb3B0aW1pemUgb3VyIGZ1enppbmcgYnkgZm9jdXNpbmcgb24gc3BlY2lmaWMsIG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGZpbmQgdGhlIHJpZ2h0IGVudHJ5IHBvaW50cy4gTGV0JiMzOTtzIGRyaWxsIGludG8gdGhlIGtleSBmdW5jdGlvbnMgY2hhbmdlZCBvciBjYWxsZWQ6CgoqICAgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgKGlzIHN0YXRpYyksIHNvIGxldCYjMzk7cyBjaGVjayBpdHMgY2FsbGVycyBvciByZWxhdGVkIHNwbGl0IGZ1bmN0aW9ucy4KKiAgIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgCiogICBgZGVmZXJyZWRfc3BsaXRfc2NhbmAKKiAgIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAKKiAgIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCAoc3RhdGljLCBzbywgaW5saW5lZD8pCgpJIG5lZWQgdG8gc2VlIHdoZXJlIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBhcmUgY2FsbGVkLCBib3RoIGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgcG90ZW50aWFsbHkgZWxzZXdoZXJlLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZHxfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0zOTc1PXN0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5OTItXG5tbS9odWdlX21lbW9yeS5jOjM5OTM6c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzk5NC1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDE0Nj1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtXG5tbS9odWdlX21lbW9yeS5jOjQyNzY6XHRyZXQgPSBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFx1MDAyNnhhcywgbWFwcGluZyxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny1cdFx0XHRcdFx0XHR0cnVlLCBsaXN0LCBzcGxpdF90eXBlLCBlbmQsIFx1MDAyNm5yX3NobWVtX2Ryb3BwZWQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDM2ND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzNzYtXHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xubW0vaHVnZV9tZW1vcnkuYzo0Mzc3Olx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIE5VTEwsXG5tbS9odWdlX21lbW9yeS5jLTQzNzgtXHRcdFx0XHRcdFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0OTg9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MDMtLypcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwNDogKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5OlxubW0vaHVnZV9tZW1vcnkuYy00NTA1LSAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNi0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDUxNzpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00NTE4LXtcbi0tXG5tbS9pbnRlcm5hbC5oPTcyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9pbnRlcm5hbC5oLTczMy1cbm1tL2ludGVybmFsLmg6NzM0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vaW50ZXJuYWwuaC03MzUtc3RhdGljIGlubGluZSBib29sIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9pbnRlcm5hbC5oLTc0Ny1cbm1tL2ludGVybmFsLmg6NzQ4Olx0cmV0dXJuIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9pbnRlcm5hbC5oLTc0OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGwgU2l0ZXMgb2YgYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBXaGF0JiMzOTtzIHRyaWdnZXJpbmcgaXQ/IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXMgaXQgcGFydCBvZiBhIGhvdCBwYXRoLCBvciBzb21ldGhpbmcgbW9yZSBhbmNpbGxhcnk/IEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBkaWN0YXRlIGhvdyB0byBhcHByb2FjaCBhbnkgYW5hbHlzaXMgb3IgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuIFNvLCB0aGUgZmlyc3Qgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZvbGlvLmM9OTE9dm9pZCBfX2ZvbGlvX3B1dChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMTAzLVx0cGFnZV9jYWNoZV9yZWxlYXNlKGZvbGlvKTtcbm1tL2ZvbGlvLmM6MTA0Olx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9mb2xpby5jLTEwNS1cdG1lbV9jZ3JvdXBfdW5jaGFyZ2UoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9MTUyPXN0YXRpYyB2b2lkIGZvbGlvX2JhdGNoX21vdmVfbHJ1KHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoLCBtb3ZlX2ZuX3QgbW92ZV9mbilcbi0tXG5tbS9mb2xpby5jLTE4Ni1cdFx0XHRfX2ZvbGlvX2NsZWFyX3VuZXZpY3RhYmxlKGZvbGlvKTtcbm1tL2ZvbGlvLmM6MTg3Olx0XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vZm9saW8uYy0xODgtXHRcdFx0ZmJhdGNoLVx1MDAzZWZvbGlvc1tpXSA9IE5VTEw7XG4tLVxubW0vZm9saW8uYz05ODQ9dm9pZCBmb2xpb3NfcHV0X3JlZnMoc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MsIHVuc2lnbmVkIGludCAqcmVmcylcbi0tXG5tbS9mb2xpby5jLTEwMjItXHRcdH1cbm1tL2ZvbGlvLmM6MTAyMzpcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9mb2xpby5jLTEwMjQtXHRcdF9fcGFnZV9jYWNoZV9yZWxlYXNlKGZvbGlvLCBcdTAwMjZscnV2ZWMsIFx1MDAyNmZsYWdzKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5OTM9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMDktXHRcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MDEwOlx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDAxMS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0OTg9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MDMtLypcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwNDogKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5OlxubW0vaHVnZV9tZW1vcnkuYzo0NTA1OiAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxubW0vaHVnZV9tZW1vcnkuYy00NTA2LSAqIGxpbWl0cyBpdHMgY2FsbHMgdG8gdGhvc2UgZm9saW9zIHdoaWNoIG1heSBoYXZlIGEgX2RlZmVycmVkX2xpc3QgZm9yXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTA4LSAqXG5tbS9odWdlX21lbW9yeS5jOjQ1MDk6ICogSXQgaXMgdW5zYWZlIHRvIGNhbGwgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIHVudGlsIGZvbGlvIHJlZmNvdW50IGlzXG5tbS9odWdlX21lbW9yeS5jLTQ1MTAtICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MTYtICovXG5tbS9odWdlX21lbW9yeS5jOjQ1MTc6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxOC17XG4tLVxubW0vaW50ZXJuYWwuaD03MjI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vaW50ZXJuYWwuaC03MzMtXG5tbS9pbnRlcm5hbC5oOjczNDpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2ludGVybmFsLmg6NzM1OnN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9pbnRlcm5hbC5oLTczNi17XG4tLVxubW0vaW50ZXJuYWwuaC03NDctXG5tbS9pbnRlcm5hbC5oOjc0ODpcdHJldHVybiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vaW50ZXJuYWwuaC03NDktfVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNjk9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTMwNC1cbm1tL21lbWNvbnRyb2wtdjEuYzozMDU6XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0zMDYtXHRmb2xpby1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTM5MT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1Zylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQyOC1cbm1tL21lbWNvbnRyb2wuYzo1NDI5Olx0XHRXQVJOX09OX09OQ0UoZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbykpO1xubW0vbWVtY29udHJvbC5jLTU0MzAtXHR9XG4tLVxubW0vbWVtY29udHJvbC5jPTU1Njg9dm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjA5LVx0LyogV2FybmluZyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBzbyBkb24mIzM5O3Qgd29ycnkgYWJvdXQgcmVmY291bnQgbm9uLTAgKi9cbm1tL21lbWNvbnRyb2wuYzo1NjEwOlx0V0FSTl9PTl9PTkNFKGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQob2xkKSk7XG5tbS9tZW1jb250cm9sLmMtNTYxMS1cdG9sZC1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbi0tXG5tbS9taWdyYXRlLmM9NTgzPXN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vbWlncmF0ZS5jLTU5Ny1cdFx0XHRcdHJldHVybiAtRUFHQUlOO1xubW0vbWlncmF0ZS5jOjU5ODpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL21pZ3JhdGUuYy01OTktXHRcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCBleHBlY3RlZF9jb3VudCk7XG4tLVxubW0vbWlncmF0ZS5jLTYzMC1cdC8qIFRha2Ugb2ZmIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovXG5tbS9taWdyYXRlLmM6NjMxOlx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9taWdyYXRlLmMtNjMyLVxuLS1cbm1tL3Ztc2Nhbi5jPTEwODE9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTE1MzQtXG5tbS92bXNjYW4uYzoxNTM1Olx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTE1MzYtXHRcdGlmIChmb2xpb19iYXRjaF9hZGQoXHUwMDI2ZnJlZV9mb2xpb3MsIGZvbGlvKSA9PSAwKSB7XG4tLVxubW0vdm1zY2FuLmM9MTg5ND1zdGF0aWMgdW5zaWduZWQgaW50IG1vdmVfZm9saW9zX3RvX2xydShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL3Ztc2Nhbi5jLTE5MjktXG5tbS92bXNjYW4uYzoxOTMwOlx0XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vdm1zY2FuLmMtMTkzMS1cdFx0XHRpZiAoZm9saW9fYmF0Y2hfYWRkKFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgSHVnZSBQYWdlIFNwbGl0dGluZyBMb2dpYyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGh1Z2UgcGFnZXMgYXJlIGJlaW5nIHNwbGl0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoYXQgc3BsaXR0aW5nIHByb2Nlc3MuIEkgc2VlIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIOKAkyB0aGF0JiMzOTtzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgZGVjbGFyZWQgaW4gYG1tL2ludGVybmFsLmhgLCBzbyBJIHNob3VsZCBwcm9iYWJseSBiZSBhd2FyZSBvZiB0aGF0IGRlY2xhcmF0aW9uIGFzIHdlbGwuIEkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlIHdoaWNoIHBlcmZvcm0gdGhlIHNwbGl0dGluZyBvcGVyYXRpb24/IFBlcmhhcHMgc29tZXRoaW5nIGxpa2UgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZS4gVGltZSB0byBlaXRoZXIgbG9vayBhdCB3aGF0IGNhbGxzIGl0IG9yIGZpbmQgb3RoZXIgcmVsYXRlZCBzeW1ib2xzIGluIGBodWdlX21lbW9yeS5jYC4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgY2FsbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlfHNwbGl0X2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTE0MDE9dm9pZCBtYXBfYW5vbl9mb2xpb19wbWRfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTQxMS1cdHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwgaGFkZHIsIHBtZCk7XG5tbS9odWdlX21lbW9yeS5jOjE0MTI6XHRkZWZlcnJlZF9zcGxpdF9mb2xpbyhmb2xpbywgZmFsc2UpO1xubW0vaHVnZV9tZW1vcnkuYy0xNDEzLX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTI0MDI9Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNDQ4LVx0XHRzcGluX3VubG9jayhwdGwpO1xubW0vaHVnZV9tZW1vcnkuYzoyNDQ5Olx0XHRzcGxpdF9mb2xpbyhmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jLTI0NTAtXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjM5PXN0YXRpYyB2b2lkIHJlbWFwX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBuciwgaW50IGZsYWdzKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzY1NC1cbm1tL2h1Z2VfbWVtb3J5LmM6MzY1NTpzdGF0aWMgdm9pZCBscnVfYWRkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLFxubW0vaHVnZV9tZW1vcnkuYy0zNjU2LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNjgwPXN0YXRpYyBib29sIHBhZ2VfcmFuZ2VfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNjkxLSAqL1xubW0vaHVnZV9tZW1vcnkuYzozNjkyOnN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzY5My1cdFx0aW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM4MzItICogMS4gdW5pZm9ybSBzcGxpdDogQHhhcyBpcyBzcGxpdCB3aXRoIG5vIGV4cGVjdGF0aW9uIG9mIGZhaWx1cmUgYW5kIGEgc2luZ2xlXG5tbS9odWdlX21lbW9yeS5jOjM4MzM6ICogICAgX19zcGxpdF9mb2xpb190b19vcmRlcigpIGlzIGNhbGxlZCB0byBzcGxpdCB0aGUgQGZvbGlvIGludG8gQG5ld19vcmRlclxubW0vaHVnZV9tZW1vcnkuYy0zODM0LSAqICAgIGFsb25nIHdpdGggc3RhdHMgdXBkYXRlLlxubW0vaHVnZV9tZW1vcnkuYy0zODM1LSAqIDIuIG5vbi11bmlmb3JtIHNwbGl0OiBmb2xpb19vcmRlciAtIEBuZXdfb3JkZXIgY2FsbHMgdG9cbm1tL2h1Z2VfbWVtb3J5LmM6MzgzNjogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgYXJlIGV4cGVjdGVkIHRvIGJlIG1hZGUgaW4gYSBmb3IgbG9vcCB0byBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYy0zODM3LSAqICAgIHRoZSBAZm9saW8gdG8gb25lIGxvd2VyIG9yZGVyIGF0IGEgdGltZS4gVGhlIGZvbGlvIGNvbnRhaW5pbmcgQHNwbGl0X2F0XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zODQ5PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzg5NC1cdFx0cGdhbGxvY190YWdfc3BsaXQoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYzozODk1Olx0XHRfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzg5Ni1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5OTM9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwNzAtXHRcdFx0aWYgKGRvX2xydSlcbm1tL2h1Z2VfbWVtb3J5LmM6NDA3MTpcdFx0XHRcdGxydV9hZGRfc3BsaXRfZm9saW8oZm9saW8sIG5ld19mb2xpbywgbHJ1dmVjLCBsaXN0KTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3Mi1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQzNjQ9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDMwLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0NDMxOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00NDMyLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0OC0gKiBJdCBoYXMgdGhlIHNhbWUgcHJlcmVxdWlzaXRlcyBhbmQgcmV0dXJucyBhc1xubW0vaHVnZV9tZW1vcnkuYzo0NDQ5OiAqIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKCkuXG5tbS9odWdlX21lbW9yeS5jLTQ0NTAtICpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0ODE9dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0OTctXG5tbS9odWdlX21lbW9yeS5jOjQ0OTg6aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ5OS17XG5tbS9odWdlX21lbW9yeS5jOjQ1MDA6XHRyZXR1cm4gc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgbGlzdCwgMCk7XG5tbS9odWdlX21lbW9yeS5jLTQ1MDEtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDUxNz1ib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU0MS0vKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbiYjMzk7dCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDU0Mjp2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbm1tL2h1Z2VfbWVtb3J5LmMtNDU0My17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NjQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjcyLVx0XHRcdGdvdG8gcmVxdWV1ZTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDY3MzpcdFx0aWYgKCFzcGxpdF9mb2xpbyhmb2xpbykpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtNDY3NC1cdFx0XHRkaWRfc3BsaXQgPSB0cnVlO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDY4MS1cdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6NDY4MjpcdFx0ICogSWYgdGhwX3VuZGVydXNlZCgpIHJldHVybnMgZmFsc2UsIG9yIGlmIHNwbGl0X2ZvbGlvKClcbm1tL2h1Z2VfbWVtb3J5LmM6NDY4MzpcdFx0ICogc3VjY2VlZHMsIG9yIGlmIHNwbGl0X2ZvbGlvKCkgZmFpbHMgaW4gdGhlIGNhc2UgaXQgd2FzXG5tbS9odWdlX21lbW9yeS5jLTQ2ODQtXHRcdCAqIHVuZGVydXNlZCwgdGhlbiBjb25zaWRlciBpdCB1c2VkIGFuZCBkb24mIzM5O3QgYWRkIGl0IGJhY2sgdG9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3MDQtI2lmZGVmIENPTkZJR19ERUJVR19GU1xubW0vaHVnZV9tZW1vcnkuYzo0NzA1OnN0YXRpYyB2b2lkIHNwbGl0X2h1Z2VfcGFnZXNfYWxsKHZvaWQpXG5tbS9odWdlX21lbW9yeS5jLTQ3MDYte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDc0MS1cdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDc0MjpcdFx0XHRpZiAoIXNwbGl0X2ZvbGlvKGZvbGlvKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDc0My1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ3NTU9c3RhdGljIGlubGluZSBib29sIHZtYV9ub3Rfc3VpdGFibGVfZm9yX3RocF9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ3NjgtXG5tbS9odWdlX21lbW9yeS5jOjQ3Njk6c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxubW0vaHVnZV9tZW1vcnkuYy00NzcwLVx0XHRcdFx0dW5zaWduZWQgbG9uZyB2YWRkcl9lbmQsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODM4LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzo0ODM5Olx0XHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxubW0vaHVnZV9tZW1vcnkuYy00ODQwLVx0XHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4NTYtXHRcdCAgICBpbl9mb2xpb19vZmZzZXQgXHUwMDNlPSBmb2xpb19ucl9wYWdlcyhmb2xpbykpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NDg1NzpcdFx0XHRpZiAoIXNwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCB0YXJnZXRfb3JkZXIpKVxubW0vaHVnZV9tZW1vcnkuYy00ODU4LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDg4NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDg4NjpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxubW0vaHVnZV9tZW1vcnkuYy00ODg3LVx0XHRcdFx0cGdvZmZfdCBvZmZfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDkzMi1cdFx0aWYgKGluX2ZvbGlvX29mZnNldCBcdTAwM2MgMCB8fCBpbl9mb2xpb19vZmZzZXQgXHUwMDNlPSBucl9wYWdlcykge1xubW0vaHVnZV9tZW1vcnkuYzo0OTMzOlx0XHRcdGlmICghc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIHRhcmdldF9vcmRlcikpXG5tbS9odWdlX21lbW9yeS5jLTQ5MzQtXHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00OTU1LVxubW0vaHVnZV9tZW1vcnkuYzo0OTU2OnN0YXRpYyBzc2l6ZV90IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG5tbS9odWdlX21lbW9yeS5jLTQ5NTctXHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcHMpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy01MDAzLVx0XHR9XG5tbS9odWdlX21lbW9yeS5jOjUwMDQ6XHRcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShmaWxlX3BhdGgsIG9mZl9zdGFydCwgb2ZmX2VuZCxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAwNS1cdFx0XHRcdG5ld19vcmRlciwgaW5fZm9saW9fb2Zmc2V0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwMTQtXHRpZiAocmV0ID09IDEgXHUwMDI2XHUwMDI2IHBpZCA9PSAxKSB7XG5tbS9odWdlX21lbW9yeS5jOjUwMTU6XHRcdHNwbGl0X2h1Z2VfcGFnZXNfYWxsKCk7XG5tbS9odWdlX21lbW9yeS5jLTUwMTYtXHRcdHJldCA9IHN0cmxlbihpbnB1dF9idWYpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTAyMi1cbm1tL2h1Z2VfbWVtb3J5LmM6NTAyMzpcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKHBpZCwgdmFkZHJfc3RhcnQsIHZhZGRyX2VuZCwgbmV3X29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy01MDI0LVx0XHRcdGluX2ZvbGlvX29mZnNldCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy01MDMyLVxubW0vaHVnZV9tZW1vcnkuYzo1MDMzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwbGl0X2h1Z2VfcGFnZXNfZm9wcyA9IHtcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzNC1cdC5vd25lclx0ID0gVEhJU19NT0RVTEUsXG5tbS9odWdlX21lbW9yeS5jOjUwMzU6XHQud3JpdGVcdCA9IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUsXG5tbS9odWdlX21lbW9yeS5jLTUwMzYtfTtcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzNy1cbm1tL2h1Z2VfbWVtb3J5LmM6NTAzODpzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnModm9pZClcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzOS17XG5tbS9odWdlX21lbW9yeS5jOjUwNDA6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3NwbGl0X2h1Z2VfcGFnZXNcJiMzNDssIDAyMDAsIE5VTEwsIE5VTEwsXG5tbS9odWdlX21lbW9yeS5jOjUwNDE6XHRcdFx0ICAgIFx1MDAyNnNwbGl0X2h1Z2VfcGFnZXNfZm9wcyk7XG5tbS9odWdlX21lbW9yeS5jLTUwNDItXHRyZXR1cm4gMDtcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0My19XG5tbS9odWdlX21lbW9yeS5jOjUwNDQ6bGF0ZV9pbml0Y2FsbChzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnMpO1xubW0vaHVnZV9tZW1vcnkuYy01MDQ1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU5NwoJCQkJCQkJb3V0cHV0OiAyMTIKCQkJCQkJCXRob3VnaHRzOiA0ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IG1tL2h1Z2VfbWVtb3J5LmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBkaXZpbmcgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgZm9saW8gc3BsaXR0aW5nLiBJIHNlZSBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQ6IGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCwgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBnaXZlbiBpdHMgY2FsbGVyczogYF9fZm9saW9fc3BsaXRgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBhbmQgdGhlIHZhcmlvdXMgZm9ybXMgb2YgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYC4gQWxzbyB0aGUgYGRlZmVycmVkX3NwbGl0X3NjYW5gIGFuZCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gIGFyZSBvbiBteSByYWRhci4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGZvY3VzIHN5bWJvbHMuIEkmIzM5O3ZlIGdvdCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLiBZZXMsIHRoZXNlIGFyZSBleGFjdGx5IHdoYXQgSSYjMzk7ZCBleHBlY3QuIFRoZXkmIzM5O3JlIHRhcmdldGVkIGF0IFRIUCBhbmQgZm9saW8gc3BsaXR0aW5nLCBkZWFsaW5nIHdpdGggZGVmZXJyZWQgb3BlcmF0aW9ucywgd2hpY2ggYXJlIGdyZWF0IGZvciBmb2N1c2VkIGZ1enppbmcuIFRoZXkgYXJlbiYjMzk7dCBnZW5lcmljLCB3aWRlc3ByZWFkIGZ1bmN0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgZWZmaWNpZW50IHRlc3RpbmcuCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIHdlJiMzOTtsbCBuZWVkIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIG9idmlvdXNseSwgYW5kLCBmb3Igcm9idXN0IGVycm9yIGNoZWNraW5nLCB3ZSBzaG91bGQgZW5hYmxlIGBERUJVR19WTWAgdG8gZW5zdXJlIHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgYXNzZXJ0aW9ucyBhcmUgYWN0aXZlLgoKT2theSwgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIGEgcXVpY2sgY2hlY2tsaXN0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBiZWVuIG1pc3NlZC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVCVUdfVk1gLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBhbGwgdGhlcmUuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IGl0JiMzOTtzIFRIUC9mb2xpbyBzcGxpdHRpbmcgd2l0aCBkZWZlcnJlZCBvcGVyYXRpb25zIGFuZCB0YXJnZXRlZCBmdW5jdGlvbnMuIEFsbCBjaGVja2VkIGFuZCB2ZXJpZmllZC4gVGltZSB0byBmaW5hbGl6ZSB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSBpbiBtbS9odWdlX21lbW9yeS5jLCB3aGljaCBhZGRzIG5ldyBydW50aW1lIGFzc2VydGlvbiBjaGVja3MgKFZNX1dBUk5fT05fRk9MSU8gZm9yIHJlZmNvdW50IGFuZCBlbXB0eSBkZWZlcnJlZCBsaXN0KSBhbmQgdXBkYXRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBwYXJ0aWFsbHkgbWFwcGVkIGh1Z2UgZm9saW9zIGR1cmluZyBkZWZlcnJlZCBzcGxpdCB1bnF1ZXVpbmcgYW5kIGh1Z2UgcGFnZSB1bm1hcHBlZCBmcmVlemUtYW5kLXNwbGl0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBlbnN1cmUgdGhlIGludmFyaWFudHMgaG9sZCBhY3Jvc3MgVEhQIHNwbGl0dGluZyBhbmQgcmVjbGFtYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0RFQlVHX1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSBpbiBtbS9odWdlX21lbW9yeS5jLCB3aGljaCBhZGRzIG5ldyBydW50aW1lIGFzc2VydGlvbiBjaGVja3MgKFZNX1dBUk5fT05fRk9MSU8gZm9yIHJlZmNvdW50IGFuZCBlbXB0eSBkZWZlcnJlZCBsaXN0KSBhbmQgdXBkYXRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBwYXJ0aWFsbHkgbWFwcGVkIGh1Z2UgZm9saW9zIGR1cmluZyBkZWZlcnJlZCBzcGxpdCB1bnF1ZXVpbmcgYW5kIGh1Z2UgcGFnZSB1bm1hcHBlZCBmcmVlemUtYW5kLXNwbGl0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBlbnN1cmUgdGhlIGludmFyaWFudHMgaG9sZCBhY3Jvc3MgVEhQIHNwbGl0dGluZyBhbmQgcmVjbGFtYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNsZWFyaW5nIG9mIHRoZSBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQgbWV0cmljIGRlY3JlbWVudCBpbnRvIGEgc2hhcmVkIGhlbHBlciBmdW5jdGlvbiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpYCwgYWRkaW5nIFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBmb3IgZm9saW8gcmVmY291bnQgYW5kIGRlZmVycmVkIGxpc3Qgc3RhdGUuXG5cblRoaXMgaXMgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgdG91Y2hpbmcgc3RydWN0IGZvbGlvIGZsYWdzIGFuZCBzdGF0aXN0aWNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGJvdW5kcy9sZW5ndGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBzdGF0ZSBhc3NlcnRpb24gZmFpbHVyZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzIGFuZCBLQVNBTi4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY5NTMxMGMxMDRlZDIyMmU3N2YzMDg3MWJlODRjNTM4MDI2ZTk5ZTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDIyOjQ2OjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggZGQ2NmM2YWQ1YWYxMy4uMjNlZjIyYzJiNWRiMyAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0zOTcyLDYgJiM0MzszOTcyLDI0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm9saW9fY2FjaGVfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CVZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pOwomIzQzOwomIzQzOwlpZiAoIWZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXQKJiM0MzsJICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLgomIzQzOwkgKi8KJiM0MzsJVk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eSgmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTsKJiM0MzsKJiM0MzsJZm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7CiYjNDM7CW1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLAomIzQzOwkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsCiAJCQkJCSAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcywKIAkJCQkJICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsCkBAIC0zOTgwLDcgJiM0MzszOTk4LDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIHsKIAlzdHJ1Y3QgZm9saW8gKmVuZF9mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pOwogCXN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDsKLQlpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwogCWludCByZXQgPSAwOwogCiAJVk1fV0FSTl9PTl9PTkNFKCFtYXBwaW5nICZhbXA7JmFtcDsgZW5kKTsKQEAgLTM5OTgsMTEgJiM0Mzs0MDE1LDcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIAkJICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LgogCQkgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC4KIAkJICovCi0JCWlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7Ci0JCQlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKLQkJCW1vZF9tdGhwX3N0YXQob2xkX29yZGVyLAotCQkJCSAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTsKLQkJfQomIzQzOwkJZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7CiAKIAkJaWYgKG1hcHBpbmcpIHsKIAkJCWludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKQEAgLTQ1MTYsMTEgJiM0Mzs0NTI5LDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbykKIAltZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTsKIAlscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgJmFtcDttZW1jZywgJmFtcDtmbGFncyk7CiAJaWYgKF9fbGlzdF9scnVfZGVsKCZhbXA7ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsICZhbXA7Zm9saW8tJmd0O19kZWZlcnJlZF9saXN0LCBuaWQpKSB7Ci0JCWlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7Ci0JCQlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKLQkJCW1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLAotCQkJCSAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTsKLQkJfQomIzQzOwkJZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7CiAJCXVucXVldWVkID0gdHJ1ZTsKIAl9CiAJbGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCAmYW1wO2ZsYWdzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3OTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlIE1lbW9yeSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGBtbS9odWdlX21lbW9yeS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylgLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCwgYXMgdGhpcyBpcyBhIHZlcnkgc3BlY2lhbGl6ZWQgYXJlYS4gVGhlIGNvZGUgc25pcHBldCBjbGVhcmx5IHNob3dzIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlOiB0byBoYW5kbGUgdGhlIHNjZW5hcmlvIHdoZXJlIGEgYGZvbGlvYCBpcyBwYXJ0aWFsbHkgbWFwcGVkLiBUaGUgZnVuY3Rpb24gZmlyc3QgYXNzZXJ0cyBzb21lIGNvbmRpdGlvbnMsIGxpa2UgdGhlIHJlZiBjb3VudCBhbmQgZGVmZXJyZWQgbGlzdCwgYmVmb3JlIGNsZWFyaW5nIHRoZSBgX3BhcnRpYWxseV9tYXBwZWRgIGZsYWcgYW5kIGRlY3JlbWVudGluZyBhIHJlbGF0ZWQgc3RhdGlzdGljLgoKVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFR3byBkdXBsaWNhdGUgYmxvY2tzIG9mIGNvZGUgdGhhdCBjaGVjayBhbmQgY2xlYXIgdGhlIGBfcGFydGlhbGx5X21hcHBlZGAgZmxhZywgYWxvbmcgd2l0aCB0aGUgc3RhdGlzdGljIG1vZGlmaWNhdGlvbiwgYXJlIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIHRoaXMgbmV3IGhlbHBlciBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyBhIGNsYXNzaWMgcmVmYWN0b3JpbmcgdG8gaW1wcm92ZSBjb2RlIHJlYWRhYmlsaXR5IGFuZCByZWR1Y2UgcmVkdW5kYW5jeSDigJMgYSBnb29kIHByYWN0aWNlLCBvZiBjb3Vyc2UuCgpOb3csIGJlZm9yZSBJIGRlbHZlIGludG8gYSBsaW5lLWJ5LWxpbmUgYW5hbHlzaXMgb2YgYFZNX1dBUk5fT05fRk9MSU9gLCB3aGljaCBJIHNob3VsZCB1bmRlcnN0YW5kIGFueXdheSBhbmQgdGhlIGBtb2RfbXRocF9zdGF0YCBvcGVyYXRpb25zLCBJIHdhbnQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgZ2V0IGEgYnJvYWRlciBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFVuZGVyc3RhbmRpbmcgdGhlIGxhcmdlciBwaWN0dXJlIHdpbGwgaGVscCBtZSBncmFzcCB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYW55IHN1YnRsZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZWVtaW5nbHkgaXNvbGF0ZWQgY2hhbmdlLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGh1Z2UgcGFnZXMgYW5kIHRoZWlyIG1hcHBpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZW52aXJvbm1lbnQgaXMgbGlrZSBiZWZvcmUgd2UgZnVsbHkgZXZhbHVhdGUgdGhlIHByb3Bvc2VkIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM5Njg9c3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5NzQtXG5tbS9odWdlX21lbW9yeS5jOjM5NzU6c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy0zOTc2LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5OTM9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMTctXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MDE4Olx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDAxOS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1MTc9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MzEtXHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG5tbS9odWdlX21lbW9yeS5jOjQ1MzI6XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYy00NTMzLVx0XHR1bnF1ZXVlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBjb2RlIGFyb3VuZCB0aG9zZSBmdW5jdGlvbnM6CgoqKkRpdmluZyBpbnRvIEZvbGlvIEZyZWV6aW5nIGFuZCBTcGxpdHRpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaW1wbGljYXRpb25zIG9mIHRoaXMgZm9saW8gZnJlZXppbmcgYW5kIHVubWFwcGluZyBwcm9jZXNzLiBJJiMzOTttIHRyeWluZyB0byBwaWN0dXJlIGhvdyB0aGUgc3lzdGVtIGlzIGhhbmRsaW5nIHRoZSB0cmFuc2l0aW9uIG9mIGEgcG90ZW50aWFsbHkgbGFyZ2UsIHVubWFwcGVkIGZvbGlvLiBJIHN1c3BlY3QgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgaXMgdGhlIGNvcmUgb2YgdGhlIHdvcmssIHByb2JhYmx5IHRha2luZyBhbiB1bm1hcHBlZCBmb2xpbyBhbmQgZWl0aGVyIGZyZWV6aW5nIGl0IChwZXJoYXBzIGZvciBsYXRlciB1c2Ugb3IgbWFwcGluZykgb3Igc3BsaXR0aW5nIGl0IHVwIGlmIGl0JiMzOTtzIHRvbyBsYXJnZSwgYW5kIHF1ZXVpbmcgdXAgdGhlIHJlc3VsdGluZyBzZWdtZW50cy4gVGhlbiwgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgbXVzdCBiZSB0aGUgY2xlYW51cCBjcmV3LCBwcm9jZXNzaW5nIHRob3NlIHF1ZXVlZCwgc3BsaXQgZm9saW8gcGFydHMuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBlaXRoZXIgbWFwcGluZyBvciBkaXNjYXJkaW5nIHRob3NlIHBpZWNlcy4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aGUgdW5tYXBwaW5nIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHRhYmxlcywgd2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgaW4gcGxhY2UsIGFuZCB3aGF0IGhhcHBlbnMgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgaW4gdGhlIHByb2Nlc3MuIEl0JiMzOTtzIGNyaXRpY2FsIHRvIGRldGVybWluZSB3aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGNvdWxkIGFyaXNlIGFuZCBob3cgdGhlIGNvZGUgbWl0aWdhdGVzIHRob3NlLiBVbmRlcnN0YW5kaW5nIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRpb25zIGlzIGtleSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkZWZlcnJlZCBhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5NzA6XHRcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxuMzk3MTpcdFx0XHRyZXR1cm4gMDtcbjM5NzI6XHRcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4zOTczOlx0fVxuMzk3NDpcdFxuMzk3NTpcdHN0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbjM5NzY6XHR7XG4zOTc3Olx0XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbjM5Nzg6XHRcbjM5Nzk6XHRcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbjM5ODA6XHRcdFx0cmV0dXJuO1xuMzk4MTpcdFxuMzk4MjpcdFx0LypcbjM5ODM6XHRcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbjM5ODQ6XHRcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbjM5ODU6XHRcdCAqL1xuMzk4NjpcdFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbjM5ODc6XHRcbjM5ODg6XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuMzk4OTpcdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4zOTkwOlx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbjM5OTE6XHR9XG4zOTkyOlx0XG4zOTkzOlx0c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbjM5OTQ6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuMzk5NTpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbjM5OTY6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBlbnVtIHNwbGl0X3R5cGUgc3BsaXRfdHlwZSxcbjM5OTc6XHRcdFx0XHRcdFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxuMzk5ODpcdHtcbjM5OTk6XHRcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG40MDAwOlx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG40MDAxOlx0XHRpbnQgcmV0ID0gMDtcbjQwMDI6XHRcbjQwMDM6XHRcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbjQwMDQ6XHRcbjQwMDU6XHRcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICYjNDM7IDEpKSB7XG40MDA2Olx0XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xuNDAwNzpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG40MDA4Olx0XG40MDA5Olx0XHRcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xuNDAxMDpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbjQwMTE6XHRcbjQwMTI6XHRcdFx0LypcbjQwMTM6XHRcdFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxuNDAxNDpcdFx0XHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXG40MDE1Olx0XHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbjQwMTY6XHRcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG40MDE3Olx0XHRcdCAqL1xuNDAxODpcdFx0XHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQwMTk6XHRcbjQwMjA6XHRcdFx0aWYgKG1hcHBpbmcpIHtcbjQwMjE6XHRcdFx0XHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG40MDIyOlx0XG40MDIzOlx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjQwMjQ6XHRcdFx0XHQgICAgbmV3X29yZGVyIFx1MDAzYyBIUEFHRV9QTURfT1JERVIpIHtcbjQwMjU6XHRcdFx0XHRcdGlmIChmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XG40MDI2Olx0XHRcdFx0XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbyxcbjQwMjc6XHRcdFx0XHRcdFx0XHRcdE5SX1NITUVNX1RIUFMsIC1ucik7XG40MDI4Olx0XHRcdFx0XHR9IGVsc2Uge1xuNDAyOTpcdFx0XHRcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgaWYgSSBhbSB0aGUgb25lIHRoaW5raW5nIGl0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipGb2N1c2VkIFJldmlldyBvZiBTcGVjaWZpYyBDb2RlIExpbmVzKioKCkFscmlnaHQsIEkgbmVlZCB0byB6b29tIGluIG9uIGEgcGFydGljdWxhciBzZWN0aW9uLiBHaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBpc3N1ZSwgSSB3YW50IHRvIHRob3JvdWdobHkgZXhhbWluZSBsaW5lcyA0NTE1IHRocm91Z2ggNDU0NS4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBhIHN1YnRsZSBpbnRlcmFjdGlvbiBvciBhIHBvdGVudGlhbCBlZGdlIGNhc2UgdHJpZ2dlcmVkIGJ5IHRoZSBzdXJyb3VuZGluZyBsb2dpYywgYW5kIHRoZXNlIGxpbmVzIGZhbGwgd2l0aGluIHRoZSBhcmVhIEkmIzM5O20gbW9zdCBpbnRlcmVzdGVkIGluLiBUaGlzIHRhcmdldGVkIHJldmlldyB3aWxsIGFsbG93IG1lIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGxpbmVzIGFyZSBpbmRlZWQgY29udHJpYnV0aW5nIHRvIHRoZSBjdXJyZW50IGlzc3VlLCBvciBpZiB0aGV5IGNhbiBiZSBxdWlja2x5IGRpc2NvdW50ZWQgZnJvbSBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHNhdmluZyBtZSB0aW1lIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDUxNTpcdCAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cbjQ1MTY6XHQgKi9cbjQ1MTc6XHRib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuNDUxODpcdHtcbjQ1MTk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjQ1MjA6XHRcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcbjQ1MjE6XHRcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xuNDUyMjpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjQ1MjM6XHRcdGJvb2wgdW5xdWV1ZWQgPSBmYWxzZTtcbjQ1MjQ6XHRcbjQ1MjU6XHRcdFdBUk5fT05fT05DRShmb2xpb19yZWZfY291bnQoZm9saW8pKTtcbjQ1MjY6XHRcdFdBUk5fT05fT05DRSghbWVtX2Nncm91cF9kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xuNDUyNzpcdFxuNDUyODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuNDUyOTpcdFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG40NTMwOlx0XHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFx1MDAyNm1lbWNnLCBcdTAwMjZmbGFncyk7XG40NTMxOlx0XHRpZiAoX19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XG40NTMyOlx0XHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuNDUzMzpcdFx0XHR1bnF1ZXVlZCA9IHRydWU7XG40NTM0Olx0XHR9XG40NTM1Olx0XHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbjQ1MzY6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDUzNzpcdFxuNDUzODpcdFx0cmV0dXJuIHVucXVldWVkO1x0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xuNDUzOTpcdH1cbjQ1NDA6XHRcbjQ1NDE6XHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbiYjMzk7dCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cbjQ1NDI6XHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbjQ1NDM6XHR7XG40NTQ0Olx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG40NTQ1Olx0XHRpbnQgbmlkO1xuNDU0NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDU0NzpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjQ1NDg6XHRcbjQ1NDk6XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5ODMKCQkJCQkJCW91dHB1dDogMTg1CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZHlpbmcgdXAgc29tZSBjb2RlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSByZXBldGl0aXZlIGxvZ2ljIHRoYXQgY2hlY2tzLCBjbGVhcnMgdGhlIGBQR19wYXJ0aWFsbHlfbWFwcGVkYCBmbGFnIG9uIGEgZm9saW8sIGFuZCBkZWNyZW1lbnRzIHRoZSBgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRGAgc3RhdGlzdGljLiBUaGlzIGlzIGJlaW5nIHB1bGxlZCBpbnRvIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgLiBHb29kLCBnb29kLCBjb25zb2xpZGF0aW9uIGlzIGFsd2F5cyBhIHBsdXMuCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uIOKAkyBkb2VzIHRoaXMgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBiZSBzdXJlIG9mIGJlZm9yZSBzaWduaW5nIG9mZi4gVGhleSYjMzk7dmUgYWRkZWQgc29tZSBkZWJ1Z2dpbmcgYXNzZXJ0aW9uczogYFZNX1dBUk5fT05fRk9MSU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pYCBhbmQgYFZNX1dBUk5fT05fRk9MSU8oIWxpc3RfZW1wdHkoJmFtcDtmb2xpby0mZ3Q7X2RlZmVycmVkX2xpc3QpLCBmb2xpbylgLiBUaGVzZSBhcmUgZ29vZCwgYWRkZWQgc2FmZXR5IG5ldHMuIExldCYjMzk7cyBzZWUuLi4KClRoaW5raW5nIGl0IHRocm91Z2guLi4gTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBiZWluZyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHJlbGllZi4gTm8gbmV3IHN0cnVjdCBmaWVsZHMgYXJlIGJlaW5nIGFkZGVkLCBtZWFuaW5nIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIHRob3NlLiBBbmQgY3JpdGljYWxseSwgbm8gZGF0YSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhpcyBpcyBhbGwgb3BlcmF0aW5nIG9uIGV4aXN0aW5nLCBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgdHJhY2tlZCBgc3RydWN0IGZvbGlvc2Ag4oCTIHRob3NlIHBhZ2UgZGVzY3JpcHRvcnMgYWxyZWFkeSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBXZSYjMzk7cmUgKm1hbmlwdWxhdGluZyogZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBub3QgY3JlYXRpbmcgYW55dGhpbmcgbmV3IGZyb20gc2NyYXRjaC4gQW5kLCB0aGVyZSBhcmVuJiMzOTt0IGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IHJlbHkgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBhbnl0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIGFzc2VydGlvbnMsIG9yIGlmIHRoZXJlJiMzOTtzIGxpc3QgY29ycnVwdGlvbiwgd2UmIzM5O2xsIGhpdCBkZWJ1ZyBjaGVja3MsIEtBU0FOLCBvciBsb2NrZGVwIOKAkyBhbGwgb2Ygd2hpY2ggYXJlIGRlc2lnbmVkIHRvIGNhdGNoIHRoaXMgc29ydCBvZiB0aGluZyBlYXJseS4KClRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bSBjb25maWRlbnQgdGhpcyByZWZhY3RvcmluZyAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXNuJiMzOTt0IHJlcXVpcmVkIGluIHRoaXMgY2FzZSwgYmFzZWQgb24gdGhpcyBhbmFseXNpcy4gQWxyaWdodCwgSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIHRoaXMuIFRpbWUgdG8gbWFrZSB0aGF0IGBzZXQtcmVzdWx0c2AgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnIGFuZCB0aGUgY29ycmVzcG9uZGluZyBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVEIG1ldHJpYyBkZWNyZW1lbnQgaW50byBhIHNoYXJlZCBoZWxwZXIgZnVuY3Rpb24gYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKWAsIGFkZGluZyBWTV9XQVJOX09OX0ZPTElPIGFzc2VydGlvbnMgZm9yIGZvbGlvIHJlZmNvdW50IGFuZCBkZWZlcnJlZCBsaXN0IHN0YXRlLlxuXG5UaGlzIGlzIGFuIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHJlZmFjdG9yaW5nIHRvdWNoaW5nIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgc3RhdGlzdGljcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZHMvbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgc3RhdGUgYXNzZXJ0aW9uIGZhaWx1cmVzIG9yIG1lbW9yeSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGNoZWNrcyBhbmQgS0FTQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNsZWFyaW5nIG9mIHRoZSBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQgbWV0cmljIGRlY3JlbWVudCBpbnRvIGEgc2hhcmVkIGhlbHBlciBmdW5jdGlvbiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpYCwgYWRkaW5nIFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBmb3IgZm9saW8gcmVmY291bnQgYW5kIGRlZmVycmVkIGxpc3Qgc3RhdGUuXG5cblRoaXMgaXMgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgdG91Y2hpbmcgc3RydWN0IGZvbGlvIGZsYWdzIGFuZCBzdGF0aXN0aWNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGJvdW5kcy9sZW5ndGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBzdGF0ZSBhc3NlcnRpb24gZmFpbHVyZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzIGFuZCBLQVNBTi4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MTkuNzg0NTAxNjA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyOTgxMzI2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFQlVHX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCIsXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlclwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X2ZvbGlvXCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9zY2FuXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNsZWFyaW5nIG9mIHRoZSBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQgbWV0cmljIGRlY3JlbWVudCBpbnRvIGEgc2hhcmVkIGhlbHBlciBmdW5jdGlvbiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpYCwgYWRkaW5nIFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBmb3IgZm9saW8gcmVmY291bnQgYW5kIGRlZmVycmVkIGxpc3Qgc3RhdGUuXFxuXFxuVGhpcyBpcyBhbiBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCByZWZhY3RvcmluZyB0b3VjaGluZyBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIHN0YXRpc3RpY3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgYm91bmRzL2xlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIChzdWNoIGFzIHN0YXRlIGFzc2VydGlvbiBmYWlsdXJlcyBvciBtZW1vcnkgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MgYW5kIEtBU0FOLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpIGluIG1tL2h1Z2VfbWVtb3J5LmMsIHdoaWNoIGFkZHMgbmV3IHJ1bnRpbWUgYXNzZXJ0aW9uIGNoZWNrcyAoVk1fV0FSTl9PTl9GT0xJTyBmb3IgcmVmY291bnQgYW5kIGVtcHR5IGRlZmVycmVkIGxpc3QpIGFuZCB1cGRhdGVzIHN0YXRlIG1hbmFnZW1lbnQgZm9yIHBhcnRpYWxseSBtYXBwZWQgaHVnZSBmb2xpb3MgZHVyaW5nIGRlZmVycmVkIHNwbGl0IHVucXVldWluZyBhbmQgaHVnZSBwYWdlIHVubWFwcGVkIGZyZWV6ZS1hbmQtc3BsaXQgb3BlcmF0aW9ucy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgd2FycmFudCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgaW52YXJpYW50cyBob2xkIGFjcm9zcyBUSFAgc3BsaXR0aW5nIGFuZCByZWNsYW1hdGlvbiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MTkuNzg0NTA2NjA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njk4OTc2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmOTUzMTBjMTA0ZWQyMjJlNzdmMzA4NzFiZTg0YzUzODAyNmU5OWU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMjI6NDY6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBkZDY2YzZhZDVhZjEzLi4yM2VmMjJjMmI1ZGIzIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTM5NzIsNiArMzk3MiwyNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZvbGlvX2NhY2hlX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuK1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcXG4rXFx0ICogb24gZm9saW9zIHRoYXQgZG8sIHNvIHRoZSBsaXN0IGNhbiBiZSBjaGVja2VkIGFmdGVyIHRoZSBmbGFnLlxcbitcXHQgKi9cXG4rXFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pO1xcbitcXG4rXFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuK1xcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbitcXHRcXHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXFxuQEAgLTM5ODAsNyArMzk5OCw2IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG4gXFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xcbi1cXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcXHUwMDI2XFx1MDAyNiBlbmQpO1xcbkBAIC0zOTk4LDExICs0MDE1LDcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cXG4gXFx0XFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxcbiBcXHRcXHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuLVxcdFxcdFxcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbi1cXHRcXHRcXHRtb2RfbXRocF9zdGF0KG9sZF9vcmRlcixcXG4tXFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbiBcXG4gXFx0XFx0aWYgKG1hcHBpbmcpIHtcXG4gXFx0XFx0XFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbkBAIC00NTE2LDExICs0NTI5LDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuIFxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG4gXFx0aWYgKF9fbGlzdF9scnVfZGVsKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xcbi1cXHRcXHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xcbi1cXHRcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4tXFx0XFx0XFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXFxuLVxcdFxcdFxcdFxcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4gXFx0XFx0dW5xdWV1ZWQgPSB0cnVlO1xcbiBcXHR9XFxuIFxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MjAuMzU1NDI1NjE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzM0MDQxMDI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiREVCVUdfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRcIixcbiAgICBcIl9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJcIixcbiAgICBcInNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJmb2xpb19zcGxpdF91bm1hcHBlZFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSBpbiBtbS9odWdlX21lbW9yeS5jLCB3aGljaCBhZGRzIG5ldyBydW50aW1lIGFzc2VydGlvbiBjaGVja3MgKFZNX1dBUk5fT05fRk9MSU8gZm9yIHJlZmNvdW50IGFuZCBlbXB0eSBkZWZlcnJlZCBsaXN0KSBhbmQgdXBkYXRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBwYXJ0aWFsbHkgbWFwcGVkIGh1Z2UgZm9saW9zIGR1cmluZyBkZWZlcnJlZCBzcGxpdCB1bnF1ZXVpbmcgYW5kIGh1Z2UgcGFnZSB1bm1hcHBlZCBmcmVlemUtYW5kLXNwbGl0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBlbnN1cmUgdGhlIGludmFyaWFudHMgaG9sZCBhY3Jvc3MgVEhQIHNwbGl0dGluZyBhbmQgcmVjbGFtYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjk1MzEwYzEwNGVkMjIyZTc3ZjMwODcxYmU4NGM1MzgwMjZlOTllOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjI6NDY6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZGQ2NmM2YWQ1YWYxMy4uMjNlZjIyYzJiNWRiMyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTcyLDYgKzM5NzIsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbitcbitcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbitcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbitcdCAqL1xuK1x0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbitcbitcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuK1x0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4rXHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbit9XG4rXG4gc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbkBAIC0zOTgwLDcgKzM5OTgsNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgblxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4tXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXHUwMDI2XHUwMDI2IGVuZCk7XG5AQCAtMzk5OCwxMSArNDAxNSw3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbiBcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFxuIFx0XHRpZiAobWFwcGluZykge1xuIFx0XHRcdGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbkBAIC00NTE2LDExICs0NTI5LDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuIFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKF9fbGlzdF9scnVfZGVsKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFx0XHR1bnF1ZXVlZCA9IHRydWU7XG4gXHR9XG4gXHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjIwLjM1NTQyODAxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzNTAyNDc5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdlIE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBpdCdzIGZvY3VzZWQgb24gYG1tL2h1Z2VfbWVtb3J5LmNgLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKWAsIGJlaW5nIGludHJvZHVjZWQuIEkgaW1tZWRpYXRlbHkgbm90aWNlIHRoZSBgVk1fV0FSTl9PTl9GT0xJT2AgY2FsbHMuIEFsd2F5cyBnb29kIHRvIHNlZSB0aG9zZSBzYW5pdHkgY2hlY2tzIOKAkyBgZm9saW9fcmVmX2NvdW50KGZvbGlvKWAgYW5kIGAhbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdClgLiBUaGVzZSBhcmUgaW1wb3J0YW50IHRvIGNhdGNoIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbWlzdXNlIG9mIHRoZSBmb2xpbyBzdHJ1Y3R1cmUuIFRoZSBpbnRlbnQgaXMgY2xlYXI6IHRvIGVuc3VyZSB3ZSdyZSBub3QgdG91Y2hpbmcgYSBmb2xpbyB0aGF0J3Mgc3RpbGwgaW4gdXNlIG9yIGF3YWl0aW5nIGRlZmVycmVkIGFjdGlvbnMgd2hlbiB3ZSByZXNldCB0aGUgcGFydGlhbGx5IG1hcHBlZCBmbGFnLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSByZXBsYWNlbWVudCBvZiBkaXJlY3QgY2xlYXJpbmcgb2YgYHBhcnRpYWxseV9tYXBwZWRgIGluIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCB3aXRoIGEgY2FsbCB0byB0aGlzIG5ldyBoZWxwZXIuIFRoYXTigJlzIHByb2JhYmx5IGEgZ29vZCBtb3ZlIGZvciBlbmNhcHN1bGF0aW9uIGFuZCBwb3RlbnRpYWwgZnV0dXJlIG1haW50YWluYWJpbGl0eS4gSXQgc3VnZ2VzdHMgYSByZWZhY3RvcmluZyB0byBjZW50cmFsaXplIHRoZSBsb2dpYyByZWxhdGVkIHRvIHRoaXMgYHBhcnRpYWxseV9tYXBwZWRgIGZsYWcsIHdoaWNoIGlzIGEgY29tbW9uIHByYWN0aWNlIGluIHRoaXMgdHlwZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcy4gVG8gcHJvcGVybHkgYXNzZXNzIHRoZSBpbXBhY3QgYW5kIHJlYXNvbmluZywgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSdsbCBlaXRoZXIgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgcmVsZXZhbnQgdXNlcyBvciBqdXN0IHJlYWQgdGhyb3VnaCB0aGUgY29kZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGlzIGlzIGEgY3J1Y2lhbCBzdGVwIGluIHRoZSBmb2xpbyBzcGxpdC91bm1hcHBpbmcgcHJvY2Vzc2VzLCBwcm9iYWJseSByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgYW5kIHBhZ2UgdGFibGUgbWFuYWdlbWVudC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjoyNi43MDU2Nzc3ODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyNDIyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9Mzk2OD1zdGF0aWMgdW5zaWduZWQgaW50IGZvbGlvX2NhY2hlX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTc0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk3NTpzdGF0aWMgdm9pZCBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy0zOTc2LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mzk5Mz1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MDE3LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDAxODpcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTQwMTktXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1MTc9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzMS1cXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTMyOlxcdFxcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzMy1cXHRcXHR1bnF1ZXVlZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjI2Ljc3OTkyNDMwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODUxODQ2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIGFyb3VuZCBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGNhbGxlcnMgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkncmUgdXNlZCBpcyBwYXJhbW91bnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hhdCBjb25maWd1cmF0aW9ucyB0cmlnZ2VyIHRoZWlyIHVzZS4gSSBiZXQgdGhlcmUgYXJlIHNvbWUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBjaGVjaywgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHBlcmhhcHMgdGhpbmdzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBvciBvdGhlciByZWxhdGVkIHNldHRpbmdzLiBLbm93aW5nICp3aGVyZSogdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIHdpZGVyIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSB3aWxsIHJlYWxseSBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb2YgaG93IGl0IGFsbCBoYW5ncyB0b2dldGhlci4gSSBuZWVkIHRvIGxvb2sgYXQgdGhhdCBjYWxsIGdyYXBoLCBzZWUgd2hhdCdzIHBhc3NpbmcgaW4sIGFuZCBwaWVjZSB0b2dldGhlciB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIHRoYXQgbGVhZHMgdG8gdGhlaXIgZXhlY3V0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGEgZ29vZCB3YXkgdG8gZmlndXJlIG91dCBob3cgdG8gZGVidWcgdGhlc2Ugcm91dGluZXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjoyOS4xNjUxMTMyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NzAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5NzA6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcXG4zOTcxOlxcdFxcdFxcdHJldHVybiAwO1xcbjM5NzI6XFx0XFx0cmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4zOTczOlxcdH1cXG4zOTc0OlxcdFxcbjM5NzU6XFx0c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjM5NzY6XFx0e1xcbjM5Nzc6XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuMzk3ODpcXHRcXG4zOTc5OlxcdFxcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcXG4zOTgwOlxcdFxcdFxcdHJldHVybjtcXG4zOTgxOlxcdFxcbjM5ODI6XFx0XFx0LypcXG4zOTgzOlxcdFxcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcXG4zOTg0OlxcdFxcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cXG4zOTg1OlxcdFxcdCAqL1xcbjM5ODY6XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pO1xcbjM5ODc6XFx0XFxuMzk4ODpcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4zOTg5OlxcdFxcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbjM5OTA6XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbjM5OTE6XFx0fVxcbjM5OTI6XFx0XFxuMzk5MzpcXHRzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbjM5OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbjM5OTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXFxuMzk5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlLFxcbjM5OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxcbjM5OTg6XFx0e1xcbjM5OTk6XFx0XFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG40MDAwOlxcdFxcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcXG40MDAxOlxcdFxcdGludCByZXQgPSAwO1xcbjQwMDI6XFx0XFxuNDAwMzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgZW5kKTtcXG40MDA0OlxcdFxcbjQwMDU6XFx0XFx0aWYgKGZvbGlvX3JlZl9mcmVlemUoZm9saW8sIGZvbGlvX2NhY2hlX3JlZl9jb3VudChmb2xpbykgKyAxKSkge1xcbjQwMDY6XFx0XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSA9IE5VTEw7XFxuNDAwNzpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuNDAwODpcXHRcXG40MDA5OlxcdFxcdFxcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xcbjQwMTA6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxuNDAxMTpcXHRcXG40MDEyOlxcdFxcdFxcdC8qXFxuNDAxMzpcXHRcXHRcXHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XFxuNDAxNDpcXHRcXHRcXHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXFxuNDAxNTpcXHRcXHRcXHQgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuXFxuNDAxNjpcXHRcXHRcXHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cXG40MDE3OlxcdFxcdFxcdCAqL1xcbjQwMTg6XFx0XFx0XFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuNDAxOTpcXHRcXG40MDIwOlxcdFxcdFxcdGlmIChtYXBwaW5nKSB7XFxuNDAyMTpcXHRcXHRcXHRcXHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuNDAyMjpcXHRcXG40MDIzOlxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG40MDI0OlxcdFxcdFxcdFxcdCAgICBuZXdfb3JkZXIgXFx1MDAzYyBIUEFHRV9QTURfT1JERVIpIHtcXG40MDI1OlxcdFxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XFxuNDAyNjpcXHRcXHRcXHRcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXFxuNDAyNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHROUl9TSE1FTV9USFBTLCAtbnIpO1xcbjQwMjg6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG40MDI5OlxcdFxcdFxcdFxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbyxcXG40MDMwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdE5SX0ZJTEVfVEhQUywgLW5yKTtcXG40MDMxOlxcdFxcdFxcdFxcdFxcdH1cXG40MDMyOlxcdFxcdFxcdFxcdH1cXG40MDMzOlxcdFxcdFxcdH1cXG40MDM0OlxcdFxcbjQwMzU6XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbjQwMzY6XFx0XFx0XFx0XFx0aWYgKG1hcHBpbmcpIHtcXG40MDM3OlxcdFxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhtYXBwaW5nLCBmb2xpbyk7XFxuNDAzODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40MDM5OlxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MjkuMTY1MzgxMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzcyNzM2MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9odWdlX21lbW9yeS5jYCoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gem9vbSBpbiBvbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEdpdmVuIHRoZSBzY29wZSBvZiB0aGlzIHByb2plY3QsIGEgZm9jdXNlZCBhcHByb2FjaCBpcyBhbHdheXMgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIHNlZS4uLiB0aGUgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdCBpcyBiZXR3ZWVuIGxpbmVzIDQ1MTUgYW5kIDQ1NTAuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgbGl2ZXMuIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgZGlnZ2luZy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2l0aGluIHRob3NlIGxpbmVzIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgaW50ZXJhY3Rpb24gaGFwcGVuaW5nLiBIb3BlZnVsbHksIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIGNvbW1lbnRzIGFyZSBoZWxwZnVsLiBMZXQncyBzZWUgaWYgdGhpcyBzZWN0aW9uIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgaXNzdWUgb3IgaWYgaXQgcmVxdWlyZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gcmVsYXRlZCBmdW5jdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozMC45MzgxMjEzNTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTk1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTE1OlxcdCAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cXG40NTE2OlxcdCAqL1xcbjQ1MTc6XFx0Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG40NTE4OlxcdHtcXG40NTE5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG40NTIwOlxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcXG40NTIxOlxcdFxcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xcbjQ1MjI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTIzOlxcdFxcdGJvb2wgdW5xdWV1ZWQgPSBmYWxzZTtcXG40NTI0OlxcdFxcbjQ1MjU6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbjQ1MjY6XFx0XFx0V0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKTtcXG40NTI3OlxcdFxcbjQ1Mjg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1Mjk6XFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuNDUzMDpcXHRcXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcXHUwMDI2bWVtY2csIFxcdTAwMjZmbGFncyk7XFxuNDUzMTpcXHRcXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxuNDUzMjpcXHRcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG40NTMzOlxcdFxcdFxcdHVucXVldWVkID0gdHJ1ZTtcXG40NTM0OlxcdFxcdH1cXG40NTM1OlxcdFxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG40NTM2OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjQ1Mzc6XFx0XFxuNDUzODpcXHRcXHRyZXR1cm4gdW5xdWV1ZWQ7XFx0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xcbjQ1Mzk6XFx0fVxcbjQ1NDA6XFx0XFxuNDU0MTpcXHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbid0IGNsZWFyIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyAqL1xcbjQ1NDI6XFx0dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuNDU0MzpcXHR7XFxuNDU0NDpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XFxuNDU0NTpcXHRcXHRpbnQgbmlkO1xcbjQ1NDY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQ1NDc6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTQ4OlxcdFxcbjQ1NDk6XFx0XFx0LypcXG40NTUwOlxcdFxcdCAqIE9yZGVyIDEgZm9saW9zIGhhdmUgbm8gc3BhY2UgZm9yIGEgZGVmZXJyZWQgbGlzdCwgYnV0IHdlIGFsc29cXG40NTUxOlxcdFxcdCAqIHdvbid0IHdhc3RlIG11Y2ggbWVtb3J5IGJ5IG5vdCBhZGRpbmcgdGhlbSB0byB0aGUgZGVmZXJyZWQgbGlzdC5cXG40NTUyOlxcdFxcdCAqL1xcbjQ1NTM6XFx0XFx0aWYgKGZvbGlvX29yZGVyKGZvbGlvKSBcXHUwMDNjPSAxKVxcbjQ1NTQ6XFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozMC45MzgzODM3MDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjY1MTE1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpcywgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIHdvcmtpbmcgd2l0aCBodWdlIG1lbW9yeSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBhZmZlY3RzIGBtbS9odWdlX21lbW9yeS5jYC4gTXkgZmlyc3Qgc3RvcCBpcyBnb2luZyB0byBiZSB0aGUgS2NvbmZpZyBmaWxlcy4gSSBrbm93IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIHJlbGllcyBoZWF2aWx5IG9uIHRob3NlIHRvIGRldGVybWluZSB3aGF0IGdldHMgY29tcGlsZWQsIGFuZCB0aGUgb3B0aW9ucyB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXJzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMsIGlmIGFueSwgZGlyZWN0bHkgZ292ZXJuIHRoZSBpbmNsdXNpb24gb2YgdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcy5cblxuTmV4dCwgSSdsbCBzd2l0Y2ggZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeS4gS2NvbmZpZyB0ZWxscyB1cyAqd2hhdCogb3B0aW9ucyBleGlzdCwgYnV0IHRoZSBNYWtlZmlsZSB0ZWxscyB1cyAqaG93KiB0aG9zZSBvcHRpb25zIGFyZSBhcHBsaWVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHNlZSB0aGUgY29tcGlsYXRpb24gcnVsZXMgYW5kIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHdpdGhpbiB0aGF0IE1ha2VmaWxlIHRoYXQgcmVsYXRlIHRvIGBodWdlX21lbW9yeS5jYC4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGJ1aWxkLXRpbWUgcmVsYXRpb25zaGlwcyBhbmQgdGhlIHByZWNpc2UgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZpbGUgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byB0cmFjZSB0aGUgYnVpbGQgZGVwZW5kZW5jeSBjaGFpbiBhbmQgaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgcHJlcmVxdWlzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MzMuMjAzNTAxMTQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzQwNzgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAxPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDMtb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MzMuMjk2OTEzOTgxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODA4NDI1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBtYWluIGtub2IsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaXRlbSBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKS4gQnV0LCBhcyBhbHdheXMsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBXaGF0IGVsc2UgaXMgZW50YW5nbGVkIHdpdGggdGhpcz8gV2hlcmUgZG9lcyBpdCByZXNpZGUgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGhpZXJhcmNoeT8gSSBuZWVkIHRvIGNoZWNrIGBtbS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBhbnkgZGVwZW5kZW5jaWVzLCBtYXliZSBldmVuIHNvbWUgY29uZGl0aW9uYWwgc2V0dGluZ3Mgb3IgZmVhdHVyZXMgdGhhdCB0aWUgaW4gd2l0aCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGV4cGVjdCB0aGVyZSB0byBiZSBhIGZldyBsZXZlcnMgYW5kIGRpYWxzIGF0IHBsYXkgdG8gY29udHJvbCBUSFAgYmVoYXZpb3IgZWZmZWN0aXZlbHkuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSwgYWxsIHRoZSByZWxhdGVkIGNvbmZpZyBvcHRpb25zLCBpcyBrZXkgdG8gdHVuaW5nIHRoaXMgYXJlYSBwcm9wZXJseS4gVGltZSB0byBzdGFydCByZWFkaW5nIHRocm91Z2ggdGhhdCBLY29uZmlnIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozNS4xNzc3NTkyODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMzY4NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04Mjc9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgyOS1cXG5tbS9LY29uZmlnOjgzMDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzEtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODQ4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTMtXFxubW0vS2NvbmZpZzo4NTQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU1LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODYwLVxcbm1tL0tjb25maWc6ODYxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjItXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODY5LVxcbm1tL0tjb25maWc6ODcwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04Nzc9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg4Ni1cXG5tbS9LY29uZmlnOjg4NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODg4LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OTYtXFxubW0vS2NvbmZpZzo4OTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04OTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDQtXFxubW0vS2NvbmZpZzo5MDU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkwNi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTIyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzEtXFxubW0vS2NvbmZpZzo5MzI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzMy1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQwLVxcbm1tL0tjb25maWc6OTQxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQyLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ4LVxcbm1tL0tjb25maWc6OTQ5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTAtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjM1LjI3MDEzMzA3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgwMTU1ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBSb2xlIG9mIERFQlVHX1ZNIGluIFZNX1dBUk5fT05fRk9MSU8qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYERFQlVHX1ZNYCBhbmQgYFZNX1dBUk5fT05fRk9MSU9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGBERUJVR19WTWAgaXMgYSBwcmVyZXF1aXNpdGUgb3IgYSBjb25kaXRpb25hbCBmYWN0b3IgaW4gdGhlIGJlaGF2aW9yIG9mIGBWTV9XQVJOX09OX0ZPTElPYC4gSXQncyBhIGJpdCBvZiBhIGh1bmNoLCBidXQgdGhlc2UgdHlwZXMgb2YgZGVidWcgb3B0aW9ucyBvZnRlbiBhZmZlY3Qgd2FybmluZyBvciBlcnJvciBiZWhhdmlvcnMsIHNvIGl0J3MgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LlxuXG5JJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBWTV9XQVJOX09OX0ZPTElPYC4gSSBuZWVkIHRvIHJldmlldyB0aGUgbWFjcm8gdG8gZGV0ZXJtaW5lIGlmIHRoZSBgREVCVUdfVk1gIGZsYWcgaXMgdXNlZCBkaXJlY3RseSB3aXRoaW4gdGhlIGRlZmluaXRpb24uIElmIHNvLCBpdCB3b3VsZCBleHBsYWluIHRoZSByZWxhdGlvbnNoaXAgYW5kIGhvdyB0byBwcm9jZWVkLCBvdGhlcndpc2UsIEkgY2FuIGludmVzdGlnYXRlIG90aGVyIHBvc3NpYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozNy4xNTAyOTI5MDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDg4MDUwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgVk1fV0FSTl9PTl9GT0xJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tZGVidWcuaD0xOD12b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtNjktfSlcXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaDo3MDojZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pXFx0XFx0KHtcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9tbWRlYnVnLmgtNzEtXFx0aW50IF9fcmV0X3dhcm4gPSAhIShjb25kKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC0xMzUtI2RlZmluZSBWTV9XQVJOX09OX09OQ0VfUEFHRShjb25kLCBwYWdlKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaDoxMzY6I2RlZmluZSBWTV9XQVJOX09OX0ZPTElPKGNvbmQsIGZvbGlvKSAgQlVJTERfQlVHX09OX0lOVkFMSUQoY29uZClcXG5pbmNsdWRlL2xpbnV4L21tZGVidWcuaC0xMzctI2RlZmluZSBWTV9XQVJOX09OX09OQ0VfRk9MSU8oY29uZCwgZm9saW8pICBCVUlMRF9CVUdfT05fSU5WQUxJRChjb25kKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozNy4zNzUxODA5MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcyMjUyOTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBtbWRlYnVnLmhgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBjZXJ0YWluIGRlYnVnZ2luZyBmbGFncyBhbmQgbWFjcm9zIGFyZSBpbXBsZW1lbnRlZC4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBhIHNwZWNpZmljIHNlY3Rpb24gb2YgYGluY2x1ZGUvbGludXgvbW1kZWJ1Zy5oYC4gSSdtIGdvaW5nIHRvIGp1bXAgdG8gbGluZXMgNjAgdGhyb3VnaCA3NS4gVGhhdCBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHJldmlzaXQgdGhvc2UgY29yZSBkZWJ1ZyBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWxseSBjYXRjaCBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgY3VycmVudCBwcm9ibGVtIEknbSBpbnZlc3RpZ2F0aW5nLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGRlZmluaXRpb24gb3IgdXNlIG9mIGtleSBkZWJ1ZyBmbGFncyBvciBtYWNyb3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uIG9yIG90aGVyIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIGZhY2lsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0NjozOS4wOTc3MTM5MjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tbWRlYnVnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFx0c3RhdGljIGJvb2wgX19zZWN0aW9uKFxcXCIuZGF0YS4ub25jZVxcXCIpIF9fd2FybmVkO1xcdFxcdFxcdFxcXFxcXG4gIDYxOlxcdFxcdGludCBfX3JldF93YXJuX29uY2UgPSAhIShjb25kKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2MzpcXHRcXHRpZiAodW5saWtlbHkoX19yZXRfd2Fybl9vbmNlIFxcdTAwMjZcXHUwMDI2ICFfX3dhcm5lZCkpIHtcXHRcXHRcXHRcXFxcXFxuICA2NDpcXHRcXHRcXHRkdW1wX3BhZ2UocGFnZSwgXFxcIlZNX1dBUk5fT05fT05DRV9QQUdFKFxcXCIgX19zdHJpbmdpZnkoY29uZClcXFwiKVxcXCIpO1xcXFxcXG4gIDY1OlxcdFxcdFxcdF9fd2FybmVkID0gdHJ1ZTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2NjpcXHRcXHRcXHRXQVJOX09OKDEpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDY3OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA2ODpcXHRcXHR1bmxpa2VseShfX3JldF93YXJuX29uY2UpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDY5OlxcdH0pXFxuICA3MDpcXHQjZGVmaW5lIFZNX1dBUk5fT05fRk9MSU8oY29uZCwgZm9saW8pXFx0XFx0KHtcXHRcXHRcXHRcXFxcXFxuICA3MTpcXHRcXHRpbnQgX19yZXRfd2FybiA9ICEhKGNvbmQpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDcyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDczOlxcdFxcdGlmICh1bmxpa2VseShfX3JldF93YXJuKSkge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc0OlxcdFxcdFxcdGR1bXBfcGFnZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIFxcXCJWTV9XQVJOX09OX0ZPTElPKFxcXCIgX19zdHJpbmdpZnkoY29uZClcXFwiKVxcXCIpO1xcXFxcXG4gIDc1OlxcdFxcdFxcdFdBUk5fT04oMSk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgNzY6XFx0XFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc3OlxcdFxcdHVubGlrZWx5KF9fcmV0X3dhcm4pO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDc4OlxcdH0pXFxuICA3OTpcXHQjZGVmaW5lIFZNX1dBUk5fT05fT05DRV9GT0xJTyhjb25kLCBmb2xpbylcXHQoe1xcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6MzkuMDk3Nzc0OTI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzA0ODA4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBgbW1kZWJ1Zy5oYCDigJMgR290dGEgVW5kZXJzdGFuZCBUaGlzIEd1YXJkKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoYXQgYGlmZGVmYCBndWFyZCBpbiBgbW1kZWJ1Zy5oYC4gSXQncyBjcnVjaWFsLCBvYnZpb3VzbHkuIEknbSBiZXR0aW5nIHRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGVidWdnaW5nIGZlYXR1cmVzIGluIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIGFyZSBjb250cm9sbGVkIGF0IGNvbXBpbGUgdGltZS4gV2hhdCBzcGVjaWZpYyBmZWF0dXJlcyBkb2VzIGl0IGVuYWJsZS9kaXNhYmxlPyBXaGF0IGRlZmluZXMgYXJlIGNoZWNrZWQ/IElzIGl0IGEgc2luZ2xlLCBvdmVyYXJjaGluZyBmbGFnLCBvciBhIG1vcmUgZ3JhbnVsYXIgYXBwcm9hY2gsIHRhcmdldGluZyBzcGVjaWZpYyBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0aWVzPyBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJlIGJlaW5nIHVzZWQsIGFuZCB0aGVpciBpbXBhY3QuIEhvdyBkb2VzIHRoaXMgZ3VhcmQgYWZmZWN0IHRoZSBidWlsZCBwcm9jZXNzIGFuZCB3aGF0IGV4YWN0bHkgaXMgYmVpbmcgaW5jbHVkZWQgb3IgZXhjbHVkZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbWVjaGFuaXNtIGNvbXBsZXRlbHkgdG8gZWZmZWN0aXZlbHkgdHJvdWJsZXNob290LCBvcHRpbWl6ZSwgb3IgZXh0ZW5kIHRoaXMgbWVtb3J5IG1hbmFnZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjQwLjk2ODI1ODY1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tbWRlYnVnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbiAgIDI6XFx0I2lmbmRlZiBMSU5VWF9NTV9ERUJVR19IXFxuICAgMzpcXHQjZGVmaW5lIExJTlVYX01NX0RFQlVHX0ggMVxcbiAgIDQ6XFx0XFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5naWZ5LmhcXHUwMDNlXFxuICAgNzpcXHRcXG4gICA4OlxcdHN0cnVjdCBwYWdlO1xcbiAgIDk6XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0O1xcbiAgMTA6XFx0c3RydWN0IG1tX3N0cnVjdDtcXG4gIDExOlxcdHN0cnVjdCB2bWFfaXRlcmF0b3I7XFxuICAxMjpcXHRzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdDtcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0dm9pZCBkdW1wX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IGNoYXIgKnJlYXNvbik7XFxuICAxNTpcXHR2b2lkIGR1bXBfdm1hKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4gIDE2OlxcdHZvaWQgZHVtcF9tbShjb25zdCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuICAxNzpcXHR2b2lkIGR1bXBfdm1nKGNvbnN0IHN0cnVjdCB2bWFfbWVyZ2Vfc3RydWN0ICp2bWcsIGNvbnN0IGNoYXIgKnJlYXNvbik7XFxuICAxODpcXHR2b2lkIHZtYV9pdGVyX2R1bXBfdHJlZShjb25zdCBzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkpO1xcbiAgMTk6XFx0XFxuICAyMDpcXHQjaWZkZWYgQ09ORklHX0RFQlVHX1ZNXFxuICAyMTpcXHQjZGVmaW5lIFZNX0JVR19PTihjb25kKSBCVUdfT04oY29uZClcXG4gIDIyOlxcdCNkZWZpbmUgVk1fQlVHX09OX1BBR0UoY29uZCwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAyMzpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjU6XFx0XFx0XFx0XFx0ZHVtcF9wYWdlKHBhZ2UsIFxcXCJWTV9CVUdfT05fUEFHRShcXFwiIF9fc3RyaW5naWZ5KGNvbmQpXFxcIilcXFwiKTtcXFxcXFxuICAyNjpcXHRcXHRcXHRcXHRCVUcoKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAyNzpcXHRcXHRcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMjg6XFx0XFx0fSB3aGlsZSAoMClcXG4gIDI5OlxcdCNkZWZpbmUgVk1fQlVHX09OX0ZPTElPKGNvbmQsIGZvbGlvKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDMwOlxcdFxcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMTpcXHRcXHRcXHRpZiAodW5saWtlbHkoY29uZCkpIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzMjpcXHRcXHRcXHRcXHRkdW1wX3BhZ2UoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBcXFwiVk1fQlVHX09OX0ZPTElPKFxcXCIgX19zdHJpbmdpZnkoY29uZClcXFwiKVxcXCIpO1xcXFxcXG4gIDMzOlxcdFxcdFxcdFxcdEJVRygpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gIDM0OlxcdFxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzNTpcXHRcXHR9IHdoaWxlICgwKVxcbiAgMzY6XFx0I2RlZmluZSBWTV9CVUdfT05fVk1BKGNvbmQsIHZtYSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICAzNzpcXHRcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGNvbmQpKSB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAgMzk6XFx0XFx0XFx0XFx0ZHVtcF92bWEodm1hKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuICA0MDpcXHRcXHRcXHRcXHRCVUcoKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjQwLjk2ODM2MjY2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzQ4MDA0NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBIdWdlIFBhZ2UgU3BsaXQgTG9naWMqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0RFQlVHX1ZNYCBlbmFibGVzIGBWTV9XQVJOX09OX0ZPTElPYCwgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGNvbXBpbGVzIGBtbS9odWdlX21lbW9yeS5jYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyB3YXJyYW50IHRoZSBlZmZvcnQ/XG5cbkxldCdzIGJyZWFrIGl0IGRvd246IG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZywgQlBGLCBzY2hlZHVsZXIsIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZywgKmFuZCogYW55IG5ldyBydW50aW1lIGFzc2VydGlvbnMgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSBzZWUgYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWRgIGFkZHMgYFZNX1dBUk5fT05fRk9MSU9gIGFzc2VydGlvbnMgcmVsYXRlZCB0byBmb2xpbyByZWYgY291bnRzIGFuZCBkZWZlcnJlZCBsaXN0cy4gQ3JpdGljYWxseSwgdGhlc2UgYXNzZXJ0aW9ucyBhcmUgKmluKiB0aGUgdHJhbnNwYXJlbnQgaHVnZXBhZ2UgKFRIUCkgLyBtVEhQIHNwbGl0IHBhdGggd2l0aGluIGBtbS9gLiBTcGVjaWZpY2FsbHksIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBhcmUgaW52b2x2ZWQuIFRoaXMgc2NyZWFtcyBcInJlYWNoYWJsZSBhbmQgZnV6emFibGUuXCIgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCB0aGUgbmV4dCBzdGVwLiBMZXQncyBvcHRpbWl6ZSBvdXIgZnV6emluZyBieSBmb2N1c2luZyBvbiBzcGVjaWZpYywgbm9uLXViaXF1aXRvdXMgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZmluZCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLiBMZXQncyBkcmlsbCBpbnRvIHRoZSBrZXkgZnVuY3Rpb25zIGNoYW5nZWQgb3IgY2FsbGVkOlxuXG4qICAgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgKGlzIHN0YXRpYyksIHNvIGxldCdzIGNoZWNrIGl0cyBjYWxsZXJzIG9yIHJlbGF0ZWQgc3BsaXQgZnVuY3Rpb25zLlxuKiAgIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgXG4qICAgYGRlZmVycmVkX3NwbGl0X3NjYW5gXG4qICAgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYFxuKiAgIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkYCAoc3RhdGljLCBzbywgaW5saW5lZD8pXG5cbkkgbmVlZCB0byBzZWUgd2hlcmUgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGFyZSBjYWxsZWQsIGJvdGggaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBwb3RlbnRpYWxseSBlbHNld2hlcmUuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNDIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0Njo0NC43MTYzNzAzNTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTc0ODMyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWR8X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTM5NzU9c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTkyLVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk5MzpzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk5NC1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHhhX3N0YXRlICp4YXMsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQxNDY9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OlxcdHJldCA9IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNnhhcywgbWFwcGluZyxcXG5tbS9odWdlX21lbW9yeS5jLTQyNzctXFx0XFx0XFx0XFx0XFx0XFx0dHJ1ZSwgbGlzdCwgc3BsaXRfdHlwZSwgZW5kLCBcXHUwMDI2bnJfc2htZW1fZHJvcHBlZCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQzNjQ9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzNzYtXFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcXG5tbS9odWdlX21lbW9yeS5jOjQzNzc6XFx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jLTQzNzgtXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQ5OD1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTAzLS8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NTA0OiAqIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlzIG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHk6XFxubW0vaHVnZV9tZW1vcnkuYy00NTA1LSAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTE2LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUxNzpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxOC17XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTcyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL2ludGVybmFsLmgtNzMzLVxcbm1tL2ludGVybmFsLmg6NzM0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2ludGVybmFsLmgtNzM1LXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTc0Ny1cXG5tbS9pbnRlcm5hbC5oOjc0ODpcXHRyZXR1cm4gX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9pbnRlcm5hbC5oLTc0OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjQ0Ljk5NjEyMzYyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODkzNTk2MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBXaGF0J3MgdHJpZ2dlcmluZyBpdD8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJcyBpdCBwYXJ0IG9mIGEgaG90IHBhdGgsIG9yIHNvbWV0aGluZyBtb3JlIGFuY2lsbGFyeT8gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aWxsIGRpY3RhdGUgaG93IHRvIGFwcHJvYWNoIGFueSBhbmFseXNpcyBvciBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucy4gU28sIHRoZSBmaXJzdCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzA1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6NDYuODg5NzIxODYyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzMTkyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZm9saW8uYz05MT12b2lkIF9fZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTEwMy1cXHRwYWdlX2NhY2hlX3JlbGVhc2UoZm9saW8pO1xcbm1tL2ZvbGlvLmM6MTA0OlxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ZvbGlvLmMtMTA1LVxcdG1lbV9jZ3JvdXBfdW5jaGFyZ2UoZm9saW8pO1xcbi0tXFxubW0vZm9saW8uYz0xNTI9c3RhdGljIHZvaWQgZm9saW9fYmF0Y2hfbW92ZV9scnUoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gsIG1vdmVfZm5fdCBtb3ZlX2ZuKVxcbi0tXFxubW0vZm9saW8uYy0xODYtXFx0XFx0XFx0X19mb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XFxubW0vZm9saW8uYzoxODc6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vZm9saW8uYy0xODgtXFx0XFx0XFx0ZmJhdGNoLVxcdTAwM2Vmb2xpb3NbaV0gPSBOVUxMO1xcbi0tXFxubW0vZm9saW8uYz05ODQ9dm9pZCBmb2xpb3NfcHV0X3JlZnMoc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MsIHVuc2lnbmVkIGludCAqcmVmcylcXG4tLVxcbm1tL2ZvbGlvLmMtMTAyMi1cXHRcXHR9XFxubW0vZm9saW8uYzoxMDIzOlxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ZvbGlvLmMtMTAyNC1cXHRcXHRfX3BhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbywgXFx1MDAyNmxydXZlYywgXFx1MDAyNmZsYWdzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mzk5Mz1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00MDA5LVxcdFxcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDAxMDpcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTQwMTEtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0OTg9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwMy0vKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwNDogKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5Olxcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwNTogKiB0aGUgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlubGluZSB3cmFwcGVyIGluIG1tL2ludGVybmFsLmhcXG5tbS9odWdlX21lbW9yeS5jLTQ1MDYtICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUwOC0gKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDUwOTogKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcXG5tbS9odWdlX21lbW9yeS5jLTQ1MTAtICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNi0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQ1MTc6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdlX21lbW9yeS5jLTQ1MTgte1xcbi0tXFxubW0vaW50ZXJuYWwuaD03MjI9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTczMy1cXG5tbS9pbnRlcm5hbC5oOjczNDpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9pbnRlcm5hbC5oOjczNTpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ludGVybmFsLmgtNzM2LXtcXG4tLVxcbm1tL2ludGVybmFsLmgtNzQ3LVxcbm1tL2ludGVybmFsLmg6NzQ4OlxcdHJldHVybiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ludGVybmFsLmgtNzQ5LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNjk9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMzA0LVxcbm1tL21lbWNvbnRyb2wtdjEuYzozMDU6XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vbWVtY29udHJvbC12MS5jLTMwNi1cXHRmb2xpby1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTM5MT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDI4LVxcbm1tL21lbWNvbnRyb2wuYzo1NDI5OlxcdFxcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTU0MzAtXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1Njg9dm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MDktXFx0LyogV2FybmluZyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBzbyBkb24ndCB3b3JyeSBhYm91dCByZWZjb3VudCBub24tMCAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NjEwOlxcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KG9sZCkpO1xcbm1tL21lbWNvbnRyb2wuYy01NjExLVxcdG9sZC1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuLS1cXG5tbS9taWdyYXRlLmM9NTgzPXN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtNTk3LVxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbm1tL21pZ3JhdGUuYzo1OTg6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vbWlncmF0ZS5jLTU5OS1cXHRcXHRcXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIGV4cGVjdGVkX2NvdW50KTtcXG4tLVxcbm1tL21pZ3JhdGUuYy02MzAtXFx0LyogVGFrZSBvZmYgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG5tbS9taWdyYXRlLmM6NjMxOlxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL21pZ3JhdGUuYy02MzItXFxuLS1cXG5tbS92bXNjYW4uYz0xMDgxPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE1MzQtXFxubW0vdm1zY2FuLmM6MTUzNTpcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS92bXNjYW4uYy0xNTM2LVxcdFxcdGlmIChmb2xpb19iYXRjaF9hZGQoXFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xcbi0tXFxubW0vdm1zY2FuLmM9MTg5ND1zdGF0aWMgdW5zaWduZWQgaW50IG1vdmVfZm9saW9zX3RvX2xydShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vdm1zY2FuLmMtMTkyOS1cXG5tbS92bXNjYW4uYzoxOTMwOlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTE5MzEtXFx0XFx0XFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcXHUwMDI2ZnJlZV9mb2xpb3MsIGZvbGlvKSA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjQ2Ljk5NTA1MDgzMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU4MzY0NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIEh1Z2UgUGFnZSBTcGxpdHRpbmcgTG9naWMqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGh1Z2UgcGFnZXMgYXJlIGJlaW5nIHNwbGl0IHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB0aGUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhhdCBzcGxpdHRpbmcgcHJvY2Vzcy4gSSBzZWUgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAg4oCTIHRoYXQncyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYywgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEl0J3MgZGVmaW5lZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGFuZCBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IGJlIGF3YXJlIG9mIHRoYXQgZGVjbGFyYXRpb24gYXMgd2VsbC4gSSdtIHRoaW5raW5nLCBhcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSB3aGljaCBwZXJmb3JtIHRoZSBzcGxpdHRpbmcgb3BlcmF0aW9uPyBQZXJoYXBzIHNvbWV0aGluZyBsaWtlIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmA/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UuIFRpbWUgdG8gZWl0aGVyIGxvb2sgYXQgd2hhdCBjYWxscyBpdCBvciBmaW5kIG90aGVyIHJlbGF0ZWQgc3ltYm9scyBpbiBgaHVnZV9tZW1vcnkuY2AuIEknbGwgc3RhcnQgd2l0aCB0aGUgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0Njo0OS4yNTM0MTg1NTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDk2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2h1Z2VfcGFnZXxzcGxpdF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MTQwMT12b2lkIG1hcF9hbm9uX2ZvbGlvX3BtZF9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0MTEtXFx0dXBkYXRlX21tdV9jYWNoZV9wbWQodm1hLCBoYWRkciwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjE0MTI6XFx0ZGVmZXJyZWRfc3BsaXRfZm9saW8oZm9saW8sIGZhbHNlKTtcXG5tbS9odWdlX21lbW9yeS5jLTE0MTMtfVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNDAyPWJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDQ4LVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxubW0vaHVnZV9tZW1vcnkuYzoyNDQ5OlxcdFxcdHNwbGl0X2ZvbGlvKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTI0NTAtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzYzOT1zdGF0aWMgdm9pZCByZW1hcF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgbnIsIGludCBmbGFncylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY1NC1cXG5tbS9odWdlX21lbW9yeS5jOjM2NTU6c3RhdGljIHZvaWQgbHJ1X2FkZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcXG5tbS9odWdlX21lbW9yeS5jLTM2NTYtXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNjgwPXN0YXRpYyBib29sIHBhZ2VfcmFuZ2VfaGFzX2h3cG9pc29uZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM2OTEtICovXFxubW0vaHVnZV9tZW1vcnkuYzozNjkyOnN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTM2OTMtXFx0XFx0aW50IG5ld19vcmRlcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzgzMi0gKiAxLiB1bmlmb3JtIHNwbGl0OiBAeGFzIGlzIHNwbGl0IHdpdGggbm8gZXhwZWN0YXRpb24gb2YgZmFpbHVyZSBhbmQgYSBzaW5nbGVcXG5tbS9odWdlX21lbW9yeS5jOjM4MzM6ICogICAgX19zcGxpdF9mb2xpb190b19vcmRlcigpIGlzIGNhbGxlZCB0byBzcGxpdCB0aGUgQGZvbGlvIGludG8gQG5ld19vcmRlclxcbm1tL2h1Z2VfbWVtb3J5LmMtMzgzNC0gKiAgICBhbG9uZyB3aXRoIHN0YXRzIHVwZGF0ZS5cXG5tbS9odWdlX21lbW9yeS5jLTM4MzUtICogMi4gbm9uLXVuaWZvcm0gc3BsaXQ6IGZvbGlvX29yZGVyIC0gQG5ld19vcmRlciBjYWxscyB0b1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzgzNjogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgYXJlIGV4cGVjdGVkIHRvIGJlIG1hZGUgaW4gYSBmb3IgbG9vcCB0byBzcGxpdFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzgzNy0gKiAgICB0aGUgQGZvbGlvIHRvIG9uZSBsb3dlciBvcmRlciBhdCBhIHRpbWUuIFRoZSBmb2xpbyBjb250YWluaW5nIEBzcGxpdF9hdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zODQ5PXN0YXRpYyBpbnQgX19zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zODk0LVxcdFxcdHBnYWxsb2NfdGFnX3NwbGl0KGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jOjM4OTU6XFx0XFx0X19zcGxpdF9mb2xpb190b19vcmRlcihmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zODk2LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zOTkzPXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQwNzAtXFx0XFx0XFx0aWYgKGRvX2xydSlcXG5tbS9odWdlX21lbW9yeS5jOjQwNzE6XFx0XFx0XFx0XFx0bHJ1X2FkZF9zcGxpdF9mb2xpbyhmb2xpbywgbmV3X2ZvbGlvLCBscnV2ZWMsIGxpc3QpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3Mi1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDM2ND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzMC0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQ0MzE6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00NDMyLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0OC0gKiBJdCBoYXMgdGhlIHNhbWUgcHJlcmVxdWlzaXRlcyBhbmQgcmV0dXJucyBhc1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0OTogKiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ1MC0gKlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDgxPXVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0OTctXFxubW0vaHVnZV9tZW1vcnkuYzo0NDk4OmludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxubW0vaHVnZV9tZW1vcnkuYy00NDk5LXtcXG5tbS9odWdlX21lbW9yeS5jOjQ1MDA6XFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgbGlzdCwgMCk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTAxLX1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDUxNz1ib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTQxLS8qIHBhcnRpYWxseV9tYXBwZWQ9ZmFsc2Ugd29uJ3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NTQyOnZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU0My17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2NDI9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY3Mi1cXHRcXHRcXHRnb3RvIHJlcXVldWU7XFxubW0vaHVnZV9tZW1vcnkuYzo0NjczOlxcdFxcdGlmICghc3BsaXRfZm9saW8oZm9saW8pKSB7XFxubW0vaHVnZV9tZW1vcnkuYy00Njc0LVxcdFxcdFxcdGRpZF9zcGxpdCA9IHRydWU7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2ODEtXFx0XFx0LypcXG5tbS9odWdlX21lbW9yeS5jOjQ2ODI6XFx0XFx0ICogSWYgdGhwX3VuZGVydXNlZCgpIHJldHVybnMgZmFsc2UsIG9yIGlmIHNwbGl0X2ZvbGlvKClcXG5tbS9odWdlX21lbW9yeS5jOjQ2ODM6XFx0XFx0ICogc3VjY2VlZHMsIG9yIGlmIHNwbGl0X2ZvbGlvKCkgZmFpbHMgaW4gdGhlIGNhc2UgaXQgd2FzXFxubW0vaHVnZV9tZW1vcnkuYy00Njg0LVxcdFxcdCAqIHVuZGVydXNlZCwgdGhlbiBjb25zaWRlciBpdCB1c2VkIGFuZCBkb24ndCBhZGQgaXQgYmFjayB0b1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzA0LSNpZmRlZiBDT05GSUdfREVCVUdfRlNcXG5tbS9odWdlX21lbW9yeS5jOjQ3MDU6c3RhdGljIHZvaWQgc3BsaXRfaHVnZV9wYWdlc19hbGwodm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTQ3MDYte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzQxLVxcdFxcdFxcdG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDc0MjpcXHRcXHRcXHRpZiAoIXNwbGl0X2ZvbGlvKGZvbGlvKSlcXG5tbS9odWdlX21lbW9yeS5jLTQ3NDMtXFx0XFx0XFx0XFx0c3BsaXQrKztcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc1NT1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX25vdF9zdWl0YWJsZV9mb3JfdGhwX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NzY4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDc2OTpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXFxubW0vaHVnZV9tZW1vcnkuYy00NzcwLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgdmFkZHJfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODM4LVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0ODM5OlxcdFxcdCAqIEZvciBmb2xpb3Mgd2l0aCBwcml2YXRlLCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpXFxubW0vaHVnZV9tZW1vcnkuYy00ODQwLVxcdFxcdCAqIHdpbGwgdHJ5IHRvIGRyb3AgaXQgYmVmb3JlIHNwbGl0IGFuZCB0aGVuIGNoZWNrIGlmIHRoZSBmb2xpb1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODU2LVxcdFxcdCAgICBpbl9mb2xpb19vZmZzZXQgXFx1MDAzZT0gZm9saW9fbnJfcGFnZXMoZm9saW8pKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo0ODU3OlxcdFxcdFxcdGlmICghc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIHRhcmdldF9vcmRlcikpXFxubW0vaHVnZV9tZW1vcnkuYy00ODU4LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4ODUtXFxubW0vaHVnZV9tZW1vcnkuYzo0ODg2OnN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwgcGdvZmZfdCBvZmZfc3RhcnQsXFxubW0vaHVnZV9tZW1vcnkuYy00ODg3LVxcdFxcdFxcdFxcdHBnb2ZmX3Qgb2ZmX2VuZCwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDkzMi1cXHRcXHRpZiAoaW5fZm9saW9fb2Zmc2V0IFxcdTAwM2MgMCB8fCBpbl9mb2xpb19vZmZzZXQgXFx1MDAzZT0gbnJfcGFnZXMpIHtcXG5tbS9odWdlX21lbW9yeS5jOjQ5MzM6XFx0XFx0XFx0aWYgKCFzcGxpdF9mb2xpb190b19vcmRlcihmb2xpbywgdGFyZ2V0X29yZGVyKSlcXG5tbS9odWdlX21lbW9yeS5jLTQ5MzQtXFx0XFx0XFx0XFx0c3BsaXQrKztcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk1NS1cXG5tbS9odWdlX21lbW9yeS5jOjQ5NTY6c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG5tbS9odWdlX21lbW9yeS5jLTQ5NTctXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3BzKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy01MDAzLVxcdFxcdH1cXG5tbS9odWdlX21lbW9yeS5jOjUwMDQ6XFx0XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGZpbGVfcGF0aCwgb2ZmX3N0YXJ0LCBvZmZfZW5kLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAwNS1cXHRcXHRcXHRcXHRuZXdfb3JkZXIsIGluX2ZvbGlvX29mZnNldCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTUwMTQtXFx0aWYgKHJldCA9PSAxIFxcdTAwMjZcXHUwMDI2IHBpZCA9PSAxKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo1MDE1OlxcdFxcdHNwbGl0X2h1Z2VfcGFnZXNfYWxsKCk7XFxubW0vaHVnZV9tZW1vcnkuYy01MDE2LVxcdFxcdHJldCA9IHN0cmxlbihpbnB1dF9idWYpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy01MDIyLVxcbm1tL2h1Z2VfbWVtb3J5LmM6NTAyMzpcXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VzX3BpZChwaWQsIHZhZGRyX3N0YXJ0LCB2YWRkcl9lbmQsIG5ld19vcmRlcixcXG5tbS9odWdlX21lbW9yeS5jLTUwMjQtXFx0XFx0XFx0aW5fZm9saW9fb2Zmc2V0KTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzMi1cXG5tbS9odWdlX21lbW9yeS5jOjUwMzM6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzNC1cXHQub3duZXJcXHQgPSBUSElTX01PRFVMRSxcXG5tbS9odWdlX21lbW9yeS5jOjUwMzU6XFx0LndyaXRlXFx0ID0gc3BsaXRfaHVnZV9wYWdlc193cml0ZSxcXG5tbS9odWdlX21lbW9yeS5jLTUwMzYtfTtcXG5tbS9odWdlX21lbW9yeS5jLTUwMzctXFxubW0vaHVnZV9tZW1vcnkuYzo1MDM4OnN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyh2b2lkKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAzOS17XFxubW0vaHVnZV9tZW1vcnkuYzo1MDQwOlxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNwbGl0X2h1Z2VfcGFnZXNcXFwiLCAwMjAwLCBOVUxMLCBOVUxMLFxcbm1tL2h1Z2VfbWVtb3J5LmM6NTA0MTpcXHRcXHRcXHQgICAgXFx1MDAyNnNwbGl0X2h1Z2VfcGFnZXNfZm9wcyk7XFxubW0vaHVnZV9tZW1vcnkuYy01MDQyLVxcdHJldHVybiAwO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTA0My19XFxubW0vaHVnZV9tZW1vcnkuYzo1MDQ0OmxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG5tbS9odWdlX21lbW9yeS5jLTUwNDUtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjQ5LjMxMDkyMDQzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTg1MzUxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IG1tL2h1Z2VfbWVtb3J5LmMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZGl2aW5nIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIGZvbGlvIHNwbGl0dGluZy4gSSBzZWUgYSBmZXcga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkOiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAsIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgLCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgZ2l2ZW4gaXRzIGNhbGxlcnM6IGBfX2ZvbGlvX3NwbGl0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYW5kIHRoZSB2YXJpb3VzIGZvcm1zIG9mIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuIEFsc28gdGhlIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBhbmQgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCBhcmUgb24gbXkgcmFkYXIuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgZm9jdXMgc3ltYm9scy4gSSd2ZSBnb3QgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAsIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAsIGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYC4gWWVzLCB0aGVzZSBhcmUgZXhhY3RseSB3aGF0IEknZCBleHBlY3QuIFRoZXkncmUgdGFyZ2V0ZWQgYXQgVEhQIGFuZCBmb2xpbyBzcGxpdHRpbmcsIGRlYWxpbmcgd2l0aCBkZWZlcnJlZCBvcGVyYXRpb25zLCB3aGljaCBhcmUgZ3JlYXQgZm9yIGZvY3VzZWQgZnV6emluZy4gVGhleSBhcmVuJ3QgZ2VuZXJpYywgd2lkZXNwcmVhZCBmdW5jdGlvbnMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGVmZmljaWVudCB0ZXN0aW5nLlxuXG5SZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIHdlJ2xsIG5lZWQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgb2J2aW91c2x5LCBhbmQsIGZvciByb2J1c3QgZXJyb3IgY2hlY2tpbmcsIHdlIHNob3VsZCBlbmFibGUgYERFQlVHX1ZNYCB0byBlbnN1cmUgdGhlIGBWTV9XQVJOX09OX0ZPTElPYCBhc3NlcnRpb25zIGFyZSBhY3RpdmUuXG5cbk9rYXksIGxldCdzIHJ1biB0aHJvdWdoIGEgcXVpY2sgY2hlY2tsaXN0IHRvIG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBiZWVuIG1pc3NlZC4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUuIFRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgREVCVUdfVk1gLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBhbGwgdGhlcmUuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IGl0J3MgVEhQL2ZvbGlvIHNwbGl0dGluZyB3aXRoIGRlZmVycmVkIG9wZXJhdGlvbnMgYW5kIHRhcmdldGVkIGZ1bmN0aW9ucy4gQWxsIGNoZWNrZWQgYW5kIHZlcmlmaWVkLiBUaW1lIHRvIGZpbmFsaXplIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5NywiT3V0cHV0VG9rZW5zIjoyMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6NTMuNTY5NDU5MjcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MzczMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiREVCVUdfVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRcIixcbiAgICBcIl9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJcIixcbiAgICBcInNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJmb2xpb19zcGxpdF91bm1hcHBlZFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIixcbiAgICBcImRlZmVycmVkX3NwbGl0X3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKSBpbiBtbS9odWdlX21lbW9yeS5jLCB3aGljaCBhZGRzIG5ldyBydW50aW1lIGFzc2VydGlvbiBjaGVja3MgKFZNX1dBUk5fT05fRk9MSU8gZm9yIHJlZmNvdW50IGFuZCBlbXB0eSBkZWZlcnJlZCBsaXN0KSBhbmQgdXBkYXRlcyBzdGF0ZSBtYW5hZ2VtZW50IGZvciBwYXJ0aWFsbHkgbWFwcGVkIGh1Z2UgZm9saW9zIGR1cmluZyBkZWZlcnJlZCBzcGxpdCB1bnF1ZXVpbmcgYW5kIGh1Z2UgcGFnZSB1bm1hcHBlZCBmcmVlemUtYW5kLXNwbGl0IG9wZXJhdGlvbnMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHdhcnJhbnQgZnV6emluZyB0byBlbnN1cmUgdGhlIGludmFyaWFudHMgaG9sZCBhY3Jvc3MgVEhQIHNwbGl0dGluZyBhbmQgcmVjbGFtYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkRFQlVHX1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCIsXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlclwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcImRlZmVycmVkX3NwbGl0X2ZvbGlvXCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKCkgaW4gbW0vaHVnZV9tZW1vcnkuYywgd2hpY2ggYWRkcyBuZXcgcnVudGltZSBhc3NlcnRpb24gY2hlY2tzIChWTV9XQVJOX09OX0ZPTElPIGZvciByZWZjb3VudCBhbmQgZW1wdHkgZGVmZXJyZWQgbGlzdCkgYW5kIHVwZGF0ZXMgc3RhdGUgbWFuYWdlbWVudCBmb3IgcGFydGlhbGx5IG1hcHBlZCBodWdlIGZvbGlvcyBkdXJpbmcgZGVmZXJyZWQgc3BsaXQgdW5xdWV1aW5nIGFuZCBodWdlIHBhZ2UgdW5tYXBwZWQgZnJlZXplLWFuZC1zcGxpdCBvcGVyYXRpb25zLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCB3YXJyYW50IGZ1enppbmcgdG8gZW5zdXJlIHRoZSBpbnZhcmlhbnRzIGhvbGQgYWNyb3NzIFRIUCBzcGxpdHRpbmcgYW5kIHJlY2xhbWF0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0Njo1My42OTU4MzkxNDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzg2Nzg2NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDY6NTMuNjk2Mjg4MTcyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTIzODYzMzMwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2xlYXJpbmcgb2YgdGhlIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCBtZXRyaWMgZGVjcmVtZW50IGludG8gYSBzaGFyZWQgaGVscGVyIGZ1bmN0aW9uIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKClgLCBhZGRpbmcgVk1fV0FSTl9PTl9GT0xJTyBhc3NlcnRpb25zIGZvciBmb2xpbyByZWZjb3VudCBhbmQgZGVmZXJyZWQgbGlzdCBzdGF0ZS5cXG5cXG5UaGlzIGlzIGFuIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHJlZmFjdG9yaW5nIHRvdWNoaW5nIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgc3RhdGlzdGljcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBib3VuZHMvbGVuZ3Rocy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgc3RhdGUgYXNzZXJ0aW9uIGZhaWx1cmVzIG9yIG1lbW9yeSBjb3JydXB0aW9uKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGNoZWNrcyBhbmQgS0FTQU4uIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjk1MzEwYzEwNGVkMjIyZTc3ZjMwODcxYmU4NGM1MzgwMjZlOTllOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjI6NDY6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggZGQ2NmM2YWQ1YWYxMy4uMjNlZjIyYzJiNWRiMyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTcyLDYgKzM5NzIsMjQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbitcbitcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcbitcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cbitcdCAqL1xuK1x0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKTtcbitcbitcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuK1x0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4rXHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbit9XG4rXG4gc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBib29sIGRvX2xydSxcbkBAIC0zOTgwLDcgKzM5OTgsNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgblxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4tXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXHUwMDI2XHUwMDI2IGVuZCk7XG5AQCAtMzk5OCwxMSArNDAxNSw3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbiBcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFxuIFx0XHRpZiAobWFwcGluZykge1xuIFx0XHRcdGludCBuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbkBAIC00NTE2LDExICs0NTI5LDcgQEAgYm9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuIFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKF9fbGlzdF9scnVfZGVsKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xuLVx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuLVx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHR9XG4rXHRcdGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuIFx0XHR1bnF1ZXVlZCA9IHRydWU7XG4gXHR9XG4gXHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ2OjUzLjY5NjI5MDM0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjgyNDg1MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBNZW1vcnkgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCB0YXJnZXRpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGBmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pYC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QsIGFzIHRoaXMgaXMgYSB2ZXJ5IHNwZWNpYWxpemVkIGFyZWEuIFRoZSBjb2RlIHNuaXBwZXQgY2xlYXJseSBzaG93cyB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlOiB0byBoYW5kbGUgdGhlIHNjZW5hcmlvIHdoZXJlIGEgYGZvbGlvYCBpcyBwYXJ0aWFsbHkgbWFwcGVkLiBUaGUgZnVuY3Rpb24gZmlyc3QgYXNzZXJ0cyBzb21lIGNvbmRpdGlvbnMsIGxpa2UgdGhlIHJlZiBjb3VudCBhbmQgZGVmZXJyZWQgbGlzdCwgYmVmb3JlIGNsZWFyaW5nIHRoZSBgX3BhcnRpYWxseV9tYXBwZWRgIGZsYWcgYW5kIGRlY3JlbWVudGluZyBhIHJlbGF0ZWQgc3RhdGlzdGljLlxuXG5UaGUgc2Vjb25kIHBhcnQgb2YgdGhlIHBhdGNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVHdvIGR1cGxpY2F0ZSBibG9ja3Mgb2YgY29kZSB0aGF0IGNoZWNrIGFuZCBjbGVhciB0aGUgYF9wYXJ0aWFsbHlfbWFwcGVkYCBmbGFnLCBhbG9uZyB3aXRoIHRoZSBzdGF0aXN0aWMgbW9kaWZpY2F0aW9uLCBhcmUgcmVwbGFjZWQgYnkgY2FsbHMgdG8gdGhpcyBuZXcgaGVscGVyIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgY2xhc3NpYyByZWZhY3RvcmluZyB0byBpbXByb3ZlIGNvZGUgcmVhZGFiaWxpdHkgYW5kIHJlZHVjZSByZWR1bmRhbmN5IOKAkyBhIGdvb2QgcHJhY3RpY2UsIG9mIGNvdXJzZS5cblxuTm93LCBiZWZvcmUgSSBkZWx2ZSBpbnRvIGEgbGluZS1ieS1saW5lIGFuYWx5c2lzIG9mIGBWTV9XQVJOX09OX0ZPTElPYCwgd2hpY2ggSSBzaG91bGQgdW5kZXJzdGFuZCBhbnl3YXkgYW5kIHRoZSBgbW9kX210aHBfc3RhdGAgb3BlcmF0aW9ucywgSSB3YW50IHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIGdldCBhIGJyb2FkZXIgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFVuZGVyc3RhbmRpbmcgdGhlIGxhcmdlciBwaWN0dXJlIHdpbGwgaGVscCBtZSBncmFzcCB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgYW55IHN1YnRsZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZWVtaW5nbHkgaXNvbGF0ZWQgY2hhbmdlLiBJdCdzIGNydWNpYWwgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgZXhpc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBhcm91bmQgaHVnZSBwYWdlcyBhbmQgdGhlaXIgbWFwcGluZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGVudmlyb25tZW50IGlzIGxpa2UgYmVmb3JlIHdlIGZ1bGx5IGV2YWx1YXRlIHRoZSBwcm9wb3NlZCBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0Njo1Ny4zNzg3Nzg5MThaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MzE1NDI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTM5Njg9c3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3NC1cXG5tbS9odWdlX21lbW9yeS5jOjM5NzU6c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk3Ni17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM5OTM9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDAxNy1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjQwMTg6XFx0XFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYy00MDE5LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTE3PWJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1MzEtXFx0aWYgKF9fbGlzdF9scnVfZGVsKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCwgbmlkKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDUzMjpcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1MzMtXFx0XFx0dW5xdWV1ZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMjo0Njo1Ny43NjE5Mzk5MDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0NDYwNzUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGNvZGUgYXJvdW5kIHRob3NlIGZ1bmN0aW9uczpcblxuKipEaXZpbmcgaW50byBGb2xpbyBGcmVlemluZyBhbmQgU3BsaXR0aW5nKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgYW5kIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGltcGxpY2F0aW9ucyBvZiB0aGlzIGZvbGlvIGZyZWV6aW5nIGFuZCB1bm1hcHBpbmcgcHJvY2Vzcy4gSSdtIHRyeWluZyB0byBwaWN0dXJlIGhvdyB0aGUgc3lzdGVtIGlzIGhhbmRsaW5nIHRoZSB0cmFuc2l0aW9uIG9mIGEgcG90ZW50aWFsbHkgbGFyZ2UsIHVubWFwcGVkIGZvbGlvLiBJIHN1c3BlY3QgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgaXMgdGhlIGNvcmUgb2YgdGhlIHdvcmssIHByb2JhYmx5IHRha2luZyBhbiB1bm1hcHBlZCBmb2xpbyBhbmQgZWl0aGVyIGZyZWV6aW5nIGl0IChwZXJoYXBzIGZvciBsYXRlciB1c2Ugb3IgbWFwcGluZykgb3Igc3BsaXR0aW5nIGl0IHVwIGlmIGl0J3MgdG9vIGxhcmdlLCBhbmQgcXVldWluZyB1cCB0aGUgcmVzdWx0aW5nIHNlZ21lbnRzLiBUaGVuLCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCBtdXN0IGJlIHRoZSBjbGVhbnVwIGNyZXcsIHByb2Nlc3NpbmcgdGhvc2UgcXVldWVkLCBzcGxpdCBmb2xpbyBwYXJ0cy4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgZWl0aGVyIG1hcHBpbmcgb3IgZGlzY2FyZGluZyB0aG9zZSBwaWVjZXMuIEkgd2FudCB0byBjaGVjayBob3cgdGhlIHVubWFwcGluZyBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZXMsIHdoYXQga2luZCBvZiBsb2NraW5nIGlzIGluIHBsYWNlLCBhbmQgd2hhdCBoYXBwZW5zIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGluIHRoZSBwcm9jZXNzLiBJdCdzIGNyaXRpY2FsIHRvIGRldGVybWluZSB3aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGNvdWxkIGFyaXNlIGFuZCBob3cgdGhlIGNvZGUgbWl0aWdhdGVzIHRob3NlLiBVbmRlcnN0YW5kaW5nIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRpb25zIGlzIGtleSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkZWZlcnJlZCBhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDc6MDAuMDA2NTQ5OTEyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM5NzA6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcXG4zOTcxOlxcdFxcdFxcdHJldHVybiAwO1xcbjM5NzI6XFx0XFx0cmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4zOTczOlxcdH1cXG4zOTc0OlxcdFxcbjM5NzU6XFx0c3RhdGljIHZvaWQgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjM5NzY6XFx0e1xcbjM5Nzc6XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuMzk3ODpcXHRcXG4zOTc5OlxcdFxcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSlcXG4zOTgwOlxcdFxcdFxcdHJldHVybjtcXG4zOTgxOlxcdFxcbjM5ODI6XFx0XFx0LypcXG4zOTgzOlxcdFxcdCAqIE9yZGVyLTEgZm9saW9zIGhhdmUgbm8gX2RlZmVycmVkX2xpc3QuIFRoZSBmbGFnIGlzIG9ubHkgZXZlciBzZXRcXG4zOTg0OlxcdFxcdCAqIG9uIGZvbGlvcyB0aGF0IGRvLCBzbyB0aGUgbGlzdCBjYW4gYmUgY2hlY2tlZCBhZnRlciB0aGUgZmxhZy5cXG4zOTg1OlxcdFxcdCAqL1xcbjM5ODY6XFx0XFx0Vk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KSwgZm9saW8pO1xcbjM5ODc6XFx0XFxuMzk4ODpcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4zOTg5OlxcdFxcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbjM5OTA6XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbjM5OTE6XFx0fVxcbjM5OTI6XFx0XFxuMzk5MzpcXHRzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbjM5OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbjM5OTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXFxuMzk5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlLFxcbjM5OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxcbjM5OTg6XFx0e1xcbjM5OTk6XFx0XFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG40MDAwOlxcdFxcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcXG40MDAxOlxcdFxcdGludCByZXQgPSAwO1xcbjQwMDI6XFx0XFxuNDAwMzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgZW5kKTtcXG40MDA0OlxcdFxcbjQwMDU6XFx0XFx0aWYgKGZvbGlvX3JlZl9mcmVlemUoZm9saW8sIGZvbGlvX2NhY2hlX3JlZl9jb3VudChmb2xpbykgKyAxKSkge1xcbjQwMDY6XFx0XFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSA9IE5VTEw7XFxuNDAwNzpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuNDAwODpcXHRcXG40MDA5OlxcdFxcdFxcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xcbjQwMTA6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxuNDAxMTpcXHRcXG40MDEyOlxcdFxcdFxcdC8qXFxuNDAxMzpcXHRcXHRcXHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XFxuNDAxNDpcXHRcXHRcXHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXFxuNDAxNTpcXHRcXHRcXHQgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuXFxuNDAxNjpcXHRcXHRcXHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cXG40MDE3OlxcdFxcdFxcdCAqL1xcbjQwMTg6XFx0XFx0XFx0Zm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuNDAxOTpcXHRcXG40MDIwOlxcdFxcdFxcdGlmIChtYXBwaW5nKSB7XFxuNDAyMTpcXHRcXHRcXHRcXHRpbnQgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuNDAyMjpcXHRcXG40MDIzOlxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG40MDI0OlxcdFxcdFxcdFxcdCAgICBuZXdfb3JkZXIgXFx1MDAzYyBIUEFHRV9QTURfT1JERVIpIHtcXG40MDI1OlxcdFxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pKSB7XFxuNDAyNjpcXHRcXHRcXHRcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXFxuNDAyNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHROUl9TSE1FTV9USFBTLCAtbnIpO1xcbjQwMjg6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG40MDI5OlxcdFxcdFxcdFxcdFxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDc6MDAuMDA2OTQ2MjYyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0ODQ1MTM5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgaWYgSSBhbSB0aGUgb25lIHRoaW5raW5nIGl0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkZvY3VzZWQgUmV2aWV3IG9mIFNwZWNpZmljIENvZGUgTGluZXMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBhIHBhcnRpY3VsYXIgc2VjdGlvbi4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgaXNzdWUsIEkgd2FudCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgbGluZXMgNDUxNSB0aHJvdWdoIDQ1NDUuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgYSBzdWJ0bGUgaW50ZXJhY3Rpb24gb3IgYSBwb3RlbnRpYWwgZWRnZSBjYXNlIHRyaWdnZXJlZCBieSB0aGUgc3Vycm91bmRpbmcgbG9naWMsIGFuZCB0aGVzZSBsaW5lcyBmYWxsIHdpdGhpbiB0aGUgYXJlYSBJJ20gbW9zdCBpbnRlcmVzdGVkIGluLiBUaGlzIHRhcmdldGVkIHJldmlldyB3aWxsIGFsbG93IG1lIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGxpbmVzIGFyZSBpbmRlZWQgY29udHJpYnV0aW5nIHRvIHRoZSBjdXJyZW50IGlzc3VlLCBvciBpZiB0aGV5IGNhbiBiZSBxdWlja2x5IGRpc2NvdW50ZWQgZnJvbSBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHNhdmluZyBtZSB0aW1lIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ3OjAxLjQ5MTQ2MjkzMVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTE4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTE1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTE1OlxcdCAqIGltcG9ydGFudCB0byB1bnF1ZXVlIGRlZmVycmVkIHNwbGl0IGJlZm9yZSBjaGFuZ2luZyBmb2xpbyBtZW1jZy5cXG40NTE2OlxcdCAqL1xcbjQ1MTc6XFx0Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG40NTE4OlxcdHtcXG40NTE5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG40NTIwOlxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcXG40NTIxOlxcdFxcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xcbjQ1MjI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTIzOlxcdFxcdGJvb2wgdW5xdWV1ZWQgPSBmYWxzZTtcXG40NTI0OlxcdFxcbjQ1MjU6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xcbjQ1MjY6XFx0XFx0V0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21lbWNnX2NoYXJnZWQoZm9saW8pKTtcXG40NTI3OlxcdFxcbjQ1Mjg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1Mjk6XFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuNDUzMDpcXHRcXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcXHUwMDI2bWVtY2csIFxcdTAwMjZmbGFncyk7XFxuNDUzMTpcXHRcXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxuNDUzMjpcXHRcXHRcXHRmb2xpb19yZXNldF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG40NTMzOlxcdFxcdFxcdHVucXVldWVkID0gdHJ1ZTtcXG40NTM0OlxcdFxcdH1cXG40NTM1OlxcdFxcdGxpc3RfbHJ1X3VubG9ja19pcnFyZXN0b3JlKGxydSwgXFx1MDAyNmZsYWdzKTtcXG40NTM2OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjQ1Mzc6XFx0XFxuNDUzODpcXHRcXHRyZXR1cm4gdW5xdWV1ZWQ7XFx0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xcbjQ1Mzk6XFx0fVxcbjQ1NDA6XFx0XFxuNDU0MTpcXHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbid0IGNsZWFyIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyAqL1xcbjQ1NDI6XFx0dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuNDU0MzpcXHR7XFxuNDU0NDpcXHRcXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XFxuNDU0NTpcXHRcXHRpbnQgbmlkO1xcbjQ1NDY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQ1NDc6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG40NTQ4OlxcdFxcbjQ1NDk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjI6NDc6MDEuNDkxODU2NTAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1OTA3Mzg0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZHlpbmcgdXAgc29tZSBjb2RlLiBTcGVjaWZpY2FsbHksIGl0J3MgcmVmYWN0b3JpbmcgdGhlIHJlcGV0aXRpdmUgbG9naWMgdGhhdCBjaGVja3MsIGNsZWFycyB0aGUgYFBHX3BhcnRpYWxseV9tYXBwZWRgIGZsYWcgb24gYSBmb2xpbywgYW5kIGRlY3JlbWVudHMgdGhlIGBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVEYCBzdGF0aXN0aWMuIFRoaXMgaXMgYmVpbmcgcHVsbGVkIGludG8gYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZGAuIEdvb2QsIGdvb2QsIGNvbnNvbGlkYXRpb24gaXMgYWx3YXlzIGEgcGx1cy5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbiDigJMgZG9lcyB0aGlzIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBiZSBzdXJlIG9mIGJlZm9yZSBzaWduaW5nIG9mZi4gVGhleSd2ZSBhZGRlZCBzb21lIGRlYnVnZ2luZyBhc3NlcnRpb25zOiBgVk1fV0FSTl9PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbylgIGFuZCBgVk1fV0FSTl9PTl9GT0xJTyghbGlzdF9lbXB0eShcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCksIGZvbGlvKWAuIFRoZXNlIGFyZSBnb29kLCBhZGRlZCBzYWZldHkgbmV0cy4gTGV0J3Mgc2VlLi4uXG5cblRoaW5raW5nIGl0IHRocm91Z2guLi4gTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBiZWluZyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHJlbGllZi4gTm8gbmV3IHN0cnVjdCBmaWVsZHMgYXJlIGJlaW5nIGFkZGVkLCBtZWFuaW5nIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgaW4gdGhvc2UuIEFuZCBjcml0aWNhbGx5LCBubyBkYXRhIGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGFsbCBvcGVyYXRpbmcgb24gZXhpc3RpbmcsIGFscmVhZHkgYWxsb2NhdGVkIGFuZCB0cmFja2VkIGBzdHJ1Y3QgZm9saW9zYCDigJMgdGhvc2UgcGFnZSBkZXNjcmlwdG9ycyBhbHJlYWR5IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFdlJ3JlICptYW5pcHVsYXRpbmcqIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcywgbm90IGNyZWF0aW5nIGFueXRoaW5nIG5ldyBmcm9tIHNjcmF0Y2guIEFuZCwgdGhlcmUgYXJlbid0IGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IHJlbHkgb24gdW5pbml0aWFsaXplZCBkYXRhLiBJZiBhbnl0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIGFzc2VydGlvbnMsIG9yIGlmIHRoZXJlJ3MgbGlzdCBjb3JydXB0aW9uLCB3ZSdsbCBoaXQgZGVidWcgY2hlY2tzLCBLQVNBTiwgb3IgbG9ja2RlcCDigJMgYWxsIG9mIHdoaWNoIGFyZSBkZXNpZ25lZCB0byBjYXRjaCB0aGlzIHNvcnQgb2YgdGhpbmcgZWFybHkuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgSSdtIGNvbmZpZGVudCB0aGlzIHJlZmFjdG9yaW5nICpkb2Vzbid0KiBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzbid0IHJlcXVpcmVkIGluIHRoaXMgY2FzZSwgYmFzZWQgb24gdGhpcyBhbmFseXNpcy4gQWxyaWdodCwgSSdtIGNvbWZvcnRhYmxlIHdpdGggdGhpcy4gVGltZSB0byBtYWtlIHRoYXQgYHNldC1yZXN1bHRzYCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTgzLCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIyOjQ3OjA2LjA4MjU5Njg5OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjbGVhcmluZyBvZiB0aGUgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnIGFuZCB0aGUgY29ycmVzcG9uZGluZyBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVEIG1ldHJpYyBkZWNyZW1lbnQgaW50byBhIHNoYXJlZCBoZWxwZXIgZnVuY3Rpb24gYGZvbGlvX3Jlc2V0X3BhcnRpYWxseV9tYXBwZWQoKWAsIGFkZGluZyBWTV9XQVJOX09OX0ZPTElPIGFzc2VydGlvbnMgZm9yIGZvbGlvIHJlZmNvdW50IGFuZCBkZWZlcnJlZCBsaXN0IHN0YXRlLlxcblxcblRoaXMgaXMgYW4gaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgcmVmYWN0b3JpbmcgdG91Y2hpbmcgc3RydWN0IGZvbGlvIGZsYWdzIGFuZCBzdGF0aXN0aWNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIGJvdW5kcy9sZW5ndGhzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBzdGF0ZSBhc3NlcnRpb24gZmFpbHVyZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgY2hlY2tzIGFuZCBLQVNBTi4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNsZWFyaW5nIG9mIHRoZSBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQgbWV0cmljIGRlY3JlbWVudCBpbnRvIGEgc2hhcmVkIGhlbHBlciBmdW5jdGlvbiBgZm9saW9fcmVzZXRfcGFydGlhbGx5X21hcHBlZCgpYCwgYWRkaW5nIFZNX1dBUk5fT05fRk9MSU8gYXNzZXJ0aW9ucyBmb3IgZm9saW8gcmVmY291bnQgYW5kIGRlZmVycmVkIGxpc3Qgc3RhdGUuXFxuXFxuVGhpcyBpcyBhbiBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCByZWZhY3RvcmluZyB0b3VjaGluZyBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIHN0YXRpc3RpY3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgYm91bmRzL2xlbmd0aHMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIChzdWNoIGFzIHN0YXRlIGFzc2VydGlvbiBmYWlsdXJlcyBvciBtZW1vcnkgY29ycnVwdGlvbikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBjaGVja3MgYW5kIEtBU0FOLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4lngq[1] Phase: Succeeded StartedAt: 2026-09-07 22:47:17 +0000 UTC FinishedAt: 2026-09-07 22:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 22:47:17 +0000 UTC FinishedAt: 2026-09-07 22:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[2] Phase: Succeeded StartedAt: 2026-09-07 22:47:17 +0000 UTC FinishedAt: 2026-09-08 02:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 22:47:17 +0000 UTC FinishedAt: 2026-09-08 02:27:00 +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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 22:47:17 +0000 UTC FinishedAt: 2026-09-07 22:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 22:47:17 +0000 UTC FinishedAt: 2026-09-07 22:47:21 +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-workflow4lngq/series-workflow4lngq-convert-artifact-300260928/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 22:47:27 +0000 UTC FinishedAt: 2026-09-07 23:03:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 22:47:27 +0000 UTC FinishedAt: 2026-09-07 23:03:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*379f3031-e165-4ec2-a1da-a3697a8c04d1,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-workflow4lngq/series-workflow4lngq-convert-artifact-300260928/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": "325c56a5-3abc-4bf1-bd6e-4c48a02c1ff3", "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-workflow4lngq/series-workflow4lngq-build-action-3059254790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 22:47:27 +0000 UTC FinishedAt: 2026-09-07 23:03:48 +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:*379f3031-e165-4ec2-a1da-a3697a8c04d1,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-workflow4lngq/series-workflow4lngq-convert-artifact-300260928/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": "325c56a5-3abc-4bf1-bd6e-4c48a02c1ff3", "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-workflow4lngq/series-workflow4lngq-build-action-3059254790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:03:58 +0000 UTC FinishedAt: 2026-09-07 23:03:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:03:58 +0000 UTC FinishedAt: 2026-09-07 23:03:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:03:58 +0000 UTC FinishedAt: 2026-09-07 23:04:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:03:58 +0000 UTC FinishedAt: 2026-09-07 23:04:03 +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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-workflow4lngq/series-workflow4lngq-convert-artifact-2825748967/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:04:08 +0000 UTC FinishedAt: 2026-09-07 23:05:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:04:08 +0000 UTC FinishedAt: 2026-09-07 23:05:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*325c56a5-3abc-4bf1-bd6e-4c48a02c1ff3,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-workflow4lngq/series-workflow4lngq-build-action-3059254790/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-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:05:48 +0000 UTC FinishedAt: 2026-09-07 23:05:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:05:48 +0000 UTC FinishedAt: 2026-09-07 23:05:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:05:48 +0000 UTC FinishedAt: 2026-09-07 23:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:05:48 +0000 UTC FinishedAt: 2026-09-07 23:22:18 +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:*379f3031-e165-4ec2-a1da-a3697a8c04d1,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-workflow4lngq/series-workflow4lngq-convert-artifact-2825748967/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": "ae3ccda6-5a2a-469f-be23-93f99d7e24e3", "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-workflow4lngq/series-workflow4lngq-build-action-2402957675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:05:48 +0000 UTC FinishedAt: 2026-09-07 23:22:08 +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:*379f3031-e165-4ec2-a1da-a3697a8c04d1,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-workflow4lngq/series-workflow4lngq-convert-artifact-2825748967/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": "ae3ccda6-5a2a-469f-be23-93f99d7e24e3", "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-workflow4lngq/series-workflow4lngq-build-action-2402957675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:22:18 +0000 UTC FinishedAt: 2026-09-07 23:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:22:18 +0000 UTC FinishedAt: 2026-09-07 23:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:22:18 +0000 UTC FinishedAt: 2026-09-07 23:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:22:18 +0000 UTC FinishedAt: 2026-09-07 23:24:00 +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:*ae3ccda6-5a2a-469f-be23-93f99d7e24e3,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-workflow4lngq/series-workflow4lngq-build-action-2402957675/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-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:24:09 +0000 UTC FinishedAt: 2026-09-08 02:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:24:09 +0000 UTC FinishedAt: 2026-09-08 02:27:00 +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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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:*325c56a5-3abc-4bf1-bd6e-4c48a02c1ff3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae3ccda6-5a2a-469f-be23-93f99d7e24e3,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-workflow4lngq/series-workflow4lngq-build-action-3059254790/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-workflow4lngq/series-workflow4lngq-build-action-2402957675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:24:09 +0000 UTC FinishedAt: 2026-09-07 23:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:24:09 +0000 UTC FinishedAt: 2026-09-07 23:24:14 +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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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-workflow4lngq/series-workflow4lngq-convert-artifact-4244196160/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:24:09 +0000 UTC FinishedAt: 2026-09-07 23:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:24:09 +0000 UTC FinishedAt: 2026-09-07 23:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:24:09 +0000 UTC FinishedAt: 2026-09-07 23:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:24:19 +0000 UTC FinishedAt: 2026-09-08 02:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4lngq[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_unqueue_deferred_split","__split_huge_page_to_list_to_order","split_huge_page_to_list_to_order","folio_split_unmapped","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":"9d7afd05-1d53-4cc7-b5c4-dab091298559","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-07 23:24:19 +0000 UTC FinishedAt: 2026-09-08 02:26:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*325c56a5-3abc-4bf1-bd6e-4c48a02c1ff3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae3ccda6-5a2a-469f-be23-93f99d7e24e3,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-workflow4lngq/series-workflow4lngq-build-action-3059254790/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-workflow4lngq/series-workflow4lngq-build-action-2402957675/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-workflow4lngq/series-workflow4lngq-convert-artifact-4244196160/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,}