Name: series-workflow2265z Phase: Succeeded StartedAt: 2026-09-08 13:10:29 +0000 UTC FinishedAt: 2026-09-08 17:07:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[0] Phase: Succeeded StartedAt: 2026-09-08 13:10:29 +0000 UTC FinishedAt: 2026-09-08 13:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 13:10:29 +0000 UTC FinishedAt: 2026-09-08 13:27:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "dd050117-4615-41f2-8c01-2091e8dd27a6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "call_mmap_prepare", "file_is_dev_zero", "mmap_zero_prepare" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NhbGxfbW1hcF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O2ZpbGVfaXNfZGV2X3plcm8mIzM0OywKICAgICYjMzQ7bW1hcF96ZXJvX3ByZXBhcmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3MgdG8gbWFrZSB0aGVtIHRydWx5IGFub255bW91cyBWTUFzIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1vdmluZyBkcml2ZXJzL2NoYXIvbWVtLmMgdG8gbW0vY2hhci1tZW0uYywgdXBkYXRpbmcgbW1hcF9wcmVwYXJlIGhhbmRsaW5nLCBhbmQgcmVtb3Zpbmcgc3BlY2lhbC1jYXNlIHdvcmthcm91bmRzIGZvciBzZW1pLWFub255bW91cyBWTUFzKS5cblxuS01TQU4gdnMuIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHN0cnVjdHVyZXMgKGUuZy4gc3RydWN0IHZtX2FyZWFfZGVzYykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4tIEFueSBidWdzIHN0ZW1taW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBWTUEgbWVyZ2luZyBkaXNjcmVwYW5jaWVzLCBwYWdlIG9mZnNldCBlcnJvcnMsIG9yIHJlZmVyZW5jZS9saWZldGltZSBtYW5hZ2VtZW50IGlzc3VlcykgYXJlIG1lbW9yeSBtYW5hZ2VtZW50L2xvZ2ljIGlzc3VlcyB0aGF0IHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcga2VybmVsIGRlYnVnIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3Mgc28gdGhleSBiZWNvbWUgdHJ1bHkgYW5vbnltb3VzIG1hcHBpbmdzIHdpdGhpbiBjb3JlIG1tIHJhdGhlciB0aGFuIGJlaW5nIHRyZWF0ZWQgYXMgc2VtaS1hbm9ueW1vdXMgZmlsZSBtYXBwaW5ncy4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIG1tL3ZtYS5jLCBtbS9jaGFyLW1lbS5jLCBhbmQgaGVhZGVyIGhlbHBlcnMsIGFmZmVjdGluZyBWTUEgbWVyZ2luZywgcGFnZSBvZmZzZXQgY2FsY3VsYXRpb25zLCBhbmQgbW1hcCBwcmVwYXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg2Mzk2NTg2ZTk4ZDU4MDg4OGM4MWFlZjdmMmQ2YjAzNjY5YTQ1NTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEzOjI2OjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDNhMTlkYTc0ZDAwYzkuLmEwYTVkYjQ0NGM2NjMgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xNzI3Niw3ICYjNDM7MTcyNzYsNyBAQCBGOlx0RG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tbWVtb3J5LXRpZXJzXG4gRjpcdERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLW51bWFcbiBGOlx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9cbiBGOlx0RG9jdW1lbnRhdGlvbi9tbS9cbi1GOlx0ZHJpdmVycy9jaGFyL21lbS5jXG4mIzQzO0Y6XHRtbS9jaGFyLW1lbS5jXG4gRjpcdGluY2x1ZGUvbGludXgvY21hLmhcbiBGOlx0aW5jbHVkZS9saW51eC9kbWFwb29sLmhcbiBGOlx0aW5jbHVkZS9saW51eC9pb3JlbWFwLmhcbkBAIC0xNzQ4MSw3ICYjNDM7MTc0ODEsNyBAQCBMOlx0bGludXgtbW1Aa3ZhY2sub3JnXG4gUzpcdE1haW50YWluZWRcbiBXOlx0aHR0cDovL3d3dy5saW51eC1tbS5vcmdcbiBUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ha3BtL21tXG4tRjpcdGRyaXZlcnMvY2hhci9tZW0uY1xuJiM0MztGOlx0bW0vY2hhci1tZW0uY1xuIEY6XHRpbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWFwLmhcbiBGOlx0ZnMvcHJvYy90YXNrX21tdS5jXG4gRjpcdGZzL3Byb2MvdGFza19ub21tdS5jXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlXG5pbmRleCBhNDZkN2JmN2M0YzgyLi5iYjNiZjY2OTM3YjM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGVcbkBAIC0zLDcgJiM0MzszLDcgQEBcbiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycy5cbiAjXG4gXG4tb2JqLXlcdFx0XHRcdCYjNDM7PSBtZW0ubyByYW5kb20ub1xuJiM0MztvYmoteVx0XHRcdFx0JiM0Mzs9IHJhbmRvbS5vXG4gb2JqLSQoQ09ORklHX1RUWV9QUklOVEspXHQmIzQzOz0gdHR5cHJpbnRrLm9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG1pc2Mub1xuIG9iai0kKENPTkZJR19URVNUX01JU0NfTUlOT1IpXHQmIzQzOz0gbWlzY19taW5vcl9rdW5pdC5vXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi44NjRkNWFjMzcwNGRmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0xNTUxLDExICYjNDM7MTU1MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLXtcbi1cdGRlc2MtXHUwMDNldm1fb3BzID0gTlVMTDtcbi19XG4tXG4gc3RhdGljIGlubGluZSBib29sIHZtYV9pc19hbm9ueW1vdXMoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0cmV0dXJuICF2bWEtXHUwMDNldm1fb3BzO1xuQEAgLTQ0MDgsOSAmIzQzOzQ0MDMsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX3BhZ2VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqIElmIEB2bWEgaXMgYSBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoaXMgcmV0dXJucyB0aGVcbiAgKiBwYWdlIG9mZnNldCB3aXRoaW4gdGhlIGZpbGUuXG4gICpcbi0gKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSwgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHNhdGlzZmllc1xuLSAqIHZtYV9pc19hbm9ueW1vdXMoKSBidXQgaGFzIGZpbGUtYmFja2VkIHBhZ2Ugb2Zmc2V0LCBhbmQgTUFQX1BSSVZBVEUtcGZubWFwXG4tICogcmVnaW9ucyBoYXZlIHRoZWlyIHBhZ2Ugb2Zmc2V0IHNldCB0byB0aGUgZmlyc3QgUEZOIGluIHRoZSByYW5nZS5cbiYjNDM7ICogRWRnZSBjYXNlczogbm9tbXUgZG9lcyBub3QgYWJpZGUgYnkgdGhlc2UgYW5kIENvVyBNQVBfUFJJVkFURS1wZm5tYXAgcmVnaW9uc1xuJiM0MzsgKiBoYXZlIHRoZWlyIHBhZ2Ugb2Zmc2V0IHNldCB0byB0aGUgZmlyc3QgUEZOIGluIHRoZSByYW5nZS5cbiAgKlxuICAqIFJldHVybnM6IFRoZSBwYWdlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgQHZtYS5cbiAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5pbmRleCAwYWRmYTY2MDU2NTNkLi45MzlmM2E1ZTk3M2Y2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5AQCAtMTEyOCw4ICYjNDM7MTEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IF9fbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKCF2bWFfaXNfY293X21hcHBpbmcodm1hKSk7XG4tXHQvKiBBY2NvdW50IGZvciBNQVBfUFJJVkFURS0vZGV2L3plcm8gd2hpY2ggaXMgb25seSBzZW1pLWFub255bW91cy4gKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgXHUwMDI2XHUwMDI2ICF2bWEtXHUwMDNldm1fZmlsZSlcbiYjNDM7XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxuIFx0XHRWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7XG4gXG4gXHRyZXR1cm4gcGdvZmY7XG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxuaW5kZXggZTcyNDVjYjg4YzY2NS4uMmEzZWM1M2Q2MmVlZiAxMDA2NDRcbi0tLSBhL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9NYWtlZmlsZVxuQEAgLTU1LDcgJiM0Mzs1NSw4IEBAIG9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuIFx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG4gXHRcdFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcbiBcdFx0XHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcbi1cdFx0XHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcbiYjNDM7XHRcdFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vIGNoYXItbWVtLm8gXFxcbiYjNDM7XHRcdFx0ICAgJChtbXUteSlcbiBcbiAjIEdpdmUgJiMzOTtwYWdlX2FsbG9jJiMzOTsgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZVxuIHBhZ2UtYWxsb2MteSA6PSBwYWdlX2FsbG9jLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9tbS9jaGFyLW1lbS5jXG5zaW1pbGFyaXR5IGluZGV4IDk3JVxucmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL21lbS5jXG5yZW5hbWUgdG8gbW0vY2hhci1tZW0uY1xuaW5kZXggNjMyNTNkMWRlNWQ3MC4uYzBiNWZiMDE5MjIzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9tZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY2hhci1tZW0uY1xuQEAgLTEsNiAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLypcbi0gKiAgbGludXgvZHJpdmVycy9jaGFyL21lbS5jXG4mIzQzOyAqICBtbS9jaGFyLW1lbS5jXG4gICpcbiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkc1xuICAqXG5AQCAtMzEsNiAmIzQzOzMxLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiYjNDM7XG4gI2RlZmluZSBERVZNRU1fTUlOT1JcdDFcbiAjZGVmaW5lIERFVlBPUlRfTUlOT1JcdDRcbiBcbkBAIC01MDYsMTEgJiM0Mzs1MDgsNyBAQCBzdGF0aWMgaW50IG1tYXBfemVyb19wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4gXHRpZiAodm1hX2Rlc2NfdGVzdChkZXNjLCBWTUFfU0hBUkVEX0JJVCkpXG4gXHRcdHJldHVybiBzaG1lbV96ZXJvX3NldHVwX2Rlc2MoZGVzYyk7XG4gXG4tXHQvKlxuLVx0ICogVGhpcyBpcyBhIGhpZ2hseSB1bmlxdWUgc2l0dWF0aW9uIHdoZXJlIHdlIG1hcmsgYSBNQVBfUFJJVkFURSBtYXBwaW5nXG4tXHQgKiBvZiAvZGV2L3plcm8gYW5vbnltb3VzLCBkZXNwaXRlIGl0IG5vdCBiZWluZy5cbi1cdCAqL1xuLVx0dm1hX2Rlc2Nfc2V0X2Fub255bW91cyhkZXNjKTtcbiYjNDM7XHQvKiBNQVBfUFJJVkFURSBzZW1hbnRpY3MgYXJlIHRha2VuIGNhcmUgb2YgZm9yIHVzIGJ5IGNvcmUgbW0uICovXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNzA3LDYgJiM0Mzs3MDUsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYge1xuICNlbmRpZlxuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvXG4mIzQzOyAqIGRyaXZlcj9cbiYjNDM7ICogQGZpbGU6IEZpbGUgdG8gdGVzdC5cbiYjNDM7ICogUmV0dXJuczogdHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZpbGUgXHUwMDI2XHUwMDI2IGZpbGUtXHUwMDNlZl9vcCA9PSBcdTAwMjZ6ZXJvX2ZvcHM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtZW1vcnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiB7XG4gXHRpbnQgbWlub3I7XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjI3ODI5MjRhMjc3YzkgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMjM3LDE1ICYjNDM7MjM3LDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aW50IGVyciA9IHZmc19tbWFwKGZpbGUsIHZtYSk7XG4gXG4tXHRpZiAobGlrZWx5KCFlcnIpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbiBcdC8qXG4tXHQgKiBPSywgd2UgdHJpZWQgdG8gY2FsbCB0aGUgZmlsZSBob29rIGZvciBtbWFwKCksIGJ1dCBhbiBlcnJvclxuLVx0ICogYXJvc2UuIFRoZSBtYXBwaW5nIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBhbmQgd2UgbXVzdCBub3QgaW52b2tlXG4tXHQgKiBhbnkgZnVydGhlciBob29rcyBvbiBpdC5cbiYjNDM7XHQgKiBFaXRoZXIgd2UgdHJpZWQgdG8gY2FsbCB0aGUgZmlsZSBob29rIGZvciBtbWFwKCkgYW5kIGFuIGVycm9yIGFyb3NlXG4mIzQzO1x0ICogb3IgYSBkcml2ZXIgc2V0IHZtYS1cdTAwM2V2bV9vcHMgPSBOVUxMIGludGVuZGluZyB0aGVyZSB0byBiZSBubyBWTUFcbiYjNDM7XHQgKiBvcGVyYXRpb25zLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBWTUEgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0biYjMzk7dFxuJiM0MztcdCAqIGludm9rZSBhbnkgZnVydGhlciBob29rcyBvbiBpdCwgaW4gdGhlIGxhdHRlciBjYXNlIHRoZSBob29rIGFjdHVhbGx5XG4mIzQzO1x0ICogd2FudGVkIG5vIGZ1cnRoZXIgaG9va3MgdG8gYmUgaW52b2tlZCwgc28gZml4IGJvdGggYnkgc2V0dGluZyBkdW1teVxuJiM0MztcdCAqIFZNQSBvcHMuXG4gXHQgKi9cbi1cdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2bWFfZHVtbXlfdm1fb3BzO1xuJiM0MztcdGlmICh1bmxpa2VseShlcnIgfHwgIXZtYS1cdTAwM2V2bV9vcHMpKVxuJiM0MztcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtYV9kdW1teV92bV9vcHM7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0xNjU0LDQgJiM0MzsxNjU3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7LyogY2hhci1tZW0uYyAqL1xuJiM0Mztib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xuJiM0MztcbiAjZW5kaWZcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA4OTdmYTJiNjEzNDZmLi5jNjA3NjNlZjU2MWNmIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTI3ODYsNyAmIzQzOzI3ODYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdHNiID0gZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogQ2FsbGVkIGRpcmVjdGx5IGZyb20gbW0vbW1hcC5jLCBvciBkcml2ZXJzL2NoYXIvbWVtLmNcbiYjNDM7XHRcdFx0ICogQ2FsbGVkIGRpcmVjdGx5IGZyb20gbW0vbW1hcC5jLCBvciBtbS9jaGFyLW1lbS5jXG4gXHRcdFx0ICogZm9yIFwmIzM0Oy9kZXYvemVyb1wmIzM0OywgdG8gY3JlYXRlIGEgc2hhcmVkIGFub255bW91cyBvYmplY3QuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKElTX0VSUihzaG1fbW50KSlcbmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jXG5pbmRleCAzNWU3YTY0ODU1ZmFkLi42ZmRjZTQ4NTJjZTYxIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jXG5AQCAtMjYyMSw2ICYjNDM7MjYyMSwyMyBAQCBzdGF0aWMgaW50IF9fbW1hcF9uZXdfZmlsZV92bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbWFwX3NldF9hbm9uKHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4mIzQzO3tcbiYjNDM7XHRtYXAtXHUwMDNlZmlsZSA9IE5VTEw7XG4mIzQzO1x0bWFwLVx1MDAzZXZtX29wcyA9IE5VTEw7XG4mIzQzO1x0bWFwLVx1MDAzZXBnb2ZmID0gbWFwLVx1MDAzZWFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1hcF9pc19wcml2YXRlKGNvbnN0IHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIXZtYV9mbGFnc190ZXN0KFx1MDAyNm1hcC1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbWFwX2lzX2Fub24oY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtYXBfaXNfcHJpdmF0ZShtYXApIFx1MDAyNlx1MDAyNiAhbWFwLVx1MDAzZWZpbGU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBfX21tYXBfbmV3X3ZtYSgpIC0gQWxsb2NhdGUgYSBuZXcgVk1BIGZvciB0aGUgcmVnaW9uLCBhcyBtZXJnaW5nIHdhcyBub3RcbiAgKiBwb3NzaWJsZS5cbkBAIC0yNjM0LDggJiM0MzsyNjUxLDcgQEAgc3RhdGljIGludCBfX21tYXBfbmV3X2ZpbGVfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4gc3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuIFx0c3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24pXG4ge1xuLVx0Y29uc3QgYm9vbCBpc19hbm9uID0gIW1hcC1cdTAwM2VmaWxlIFx1MDAyNlx1MDAyNlxuLVx0XHQhdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bWFwLVx1MDAzZXZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuJiM0MztcdGNvbnN0IGJvb2wgaXNfYW5vbiA9IG1hcF9pc19hbm9uKG1hcCk7XG4gXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkgPSBtYXAtXHUwMDNldm1pO1xuIFx0aW50IGVycm9yID0gMDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuQEAgLTI3NzcsNiAmIzQzOzI3OTMsMTAgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiYjNDM7XHQvKiBJdCYjMzk7cyBpbnZhbGlkIGZvciBtbWFwX3ByZXByYXJlIGhvb2tzIHRvIGNsZWFyIHZtX29wcy4gKi9cbiYjNDM7XHRpZiAoIWRlc2MtXHUwMDNldm1fb3BzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0ZXJyID0gY2FsbF9hY3Rpb25fcHJlcGFyZShtYXAsIGRlc2MpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yNzkzLDE2ICYjNDM7MjgxMywyMSBAQCBzdGF0aWMgaW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4gXHRtYXAtXHUwMDNldm1fb3BzID0gZGVzYy1cdTAwM2V2bV9vcHM7XG4gXHRtYXAtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gZGVzYy1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZ3MgYXJlIGFuIGFuY2llbnQgd2F5IG9mIGdldHRpbmdcbiYjNDM7XHQgKiBhbm9ueW1vdXMgbWFwcGluZ3MuIFJhdGhlciB0aGFuIGFsbG93aW5nIHRoZXNlIG1hcHBpbmdzIHRvIGJlIG9kZFxuJiM0MztcdCAqIG91dGxpZXJzLCBzaW1wbHkgbWFrZSB0aGVtIHRydWx5IGFub255bW91cy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWFwX2lzX3ByaXZhdGUobWFwKSBcdTAwMjZcdTAwMjYgZmlsZV9pc19kZXZfemVybyhtYXAtXHUwMDNlZmlsZSkpXG4mIzQzO1x0XHRtYXBfc2V0X2Fub24obWFwKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuIHtcbi1cdGlmIChtYXAtXHUwMDNldm1fb3BzKVxuLVx0XHR2bWEtXHUwMDNldm1fb3BzID0gbWFwLVx1MDAzZXZtX29wcztcbi1cdGVsc2VcdC8qIE9ubHkgL2Rldi96ZXJvIHNob3VsZCBkbyB0aGlzLiAqL1xuLVx0XHR2bWFfc2V0X2Fub255bW91cyh2bWEpO1xuJiM0MztcdHZtYS1cdTAwM2V2bV9vcHMgPSBtYXAtXHUwMDNldm1fb3BzO1xuIFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IG1hcC1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4gfVxuIFxuQEAgLTI4ODIsNyAmIzQzOzI5MDcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGFsbG9jYXRlZF9uZXcgPSB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlKVxuJiM0MztcdGlmIChoYXZlX21tYXBfcHJlcGFyZSBcdTAwMjZcdTAwMjYgIW1hcF9pc19hbm9uKFx1MDAyNm1hcCkpXG4gXHRcdHNldF92bWFfdXNlcl9kZWZpbmVkX2ZpZWxkcyh2bWEsIFx1MDAyNm1hcCk7XG4gXG4gXHRfX21tYXBfY29tcGxldGUoXHUwMDI2bWFwLCB2bWEpO1xuZGlmZiAtLWdpdCBhL21tL3ZtYS5oIGIvbW0vdm1hLmhcbmluZGV4IDAyNGZhYmU2MzU2MGEuLmU5N2JkMmRmYTc4NmQgMTAwNjQ0XG4tLS0gYS9tbS92bWEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hLmhcbkBAIC0yNjcsOSAmIzQzOzI2Nyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfc2FuZV9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBwZ29mZilcbiBcdCAqL1xuIFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4gXHRcdHJldHVybjtcbi1cdC8qIE1BUF9QUklWQVRFLS9kZXYvemVybyBpcyBhbm9uLCBub24tTlVMTCB2bV9maWxlLCBidXQgaGFzIGZpbGUgcGdvZmYuICovXG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZpbGUpXG4tXHRcdHJldHVybjtcbiBcdC8qIElmIGZhdWx0ZWQgaW4sIGNvdWxkIGhhdmUgYmVlbiByZW1hcHBlZC4gKi9cbiBcdGlmICh2bWEtXHUwMDNlYW5vbl92bWEpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuY1xuaW5kZXggNTJiODcyN2I2NjI4ZS4uN2RkMjkzMzQxN2MxZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmNcbkBAIC0xMzYyLDYgJiM0MzsxMzYyLDEwMSBAQCBURVNUX0YobWVyZ2UsIGFub25fYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKVxuIFx0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICYjNDM7IDUgKiBwYWdlX3NpemUpO1xuIH1cbiBcbiYjNDM7VEVTVF9GKG1lcmdlLCBtZXJnZV9tYXBfcHJpdmF0ZV9kZXZfemVyb191bmZhdWx0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFx1MDAyNnNlbGYtXHUwMDNlcHJvY21hcDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4mIzQzO1x0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVx1MDAzZWNhcnZlb3V0O1xuJiM0MztcdGNoYXIgKnB0ciwgKnB0cjI7XG4mIzQzO1x0aW50IGZkX3plcm87XG4mIzQzO1xuJiM0MztcdGlmIChhY2Nlc3MoXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7LCBGX09LKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtObyAvZGV2L3plcm8uXCYjMzQ7KTtcbiYjNDM7XHRmZF96ZXJvID0gb3BlbihcJiMzNDsvZGV2L3plcm9cJiMzNDssIE9fUkRXUik7XG4mIzQzO1x0QVNTRVJUX05FKGZkX3plcm8sIC0xKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgdHdvIE1BUF9QUklWQVRFLS9kZXYvemVybyBWTUFzIG5leHQgdG8gb25lIGFub3RoZXIgd2l0aCBvZmZzZXQgMFxuJiM0MztcdCAqIGVhY2guXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXaXRoIHRoZXNlIGJlaW5nIG1hZGUgdHJ1bHkgYW5vbnltb3VzIHVwb24gbWFwcGluZywgdGhleSB3aWxsXG4mIzQzO1x0ICogbWVyZ2UuIElmIHRoZXkgd2VyZSBmaWxlLWJhY2tlZCBWTUFzIHRoZSBwYWdlIG9mZnNldHMgd291bGQgcHJldmVudFxuJiM0MztcdCAqIHRoZSBtZXJnZTpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXxcbiYjNDM7XHQgKiB8IHB0ciB8fCBwdHIyIHwgLVx1MDAzZSB8ICAgICBwdHIgICAgIHxcbiYjNDM7XHQgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18XG4mIzQzO1x0ICovXG4mIzQzO1x0cHRyID0gbW1hcChjYXJ2ZW91dCwgNSAqIHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcbiYjNDM7XHRwdHIyID0gbW1hcChcdTAwMjZjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSxcbiYjNDM7XHRcdCAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcbiYjNDM7XHRjbG9zZShmZF96ZXJvKTtcbiYjNDM7XHRBU1NFUlRfTkUocHRyLCBNQVBfRkFJTEVEKTtcbiYjNDM7XHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IHRoZXkgbWVyZ2VkLiAqL1xuJiM0MztcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpO1xuJiM0MztcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciAmIzQzOyAxMCAqIHBhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihtZXJnZSwgbWVyZ2VfbWFwX3ByaXZhdGVfZGV2X3plcm9fZmF1bHRlZF91bmZhdWx0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFx1MDAyNnNlbGYtXHUwMDNlcHJvY21hcDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4mIzQzO1x0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVx1MDAzZWNhcnZlb3V0O1xuJiM0MztcdGNoYXIgKnB0ciwgKnB0cjI7XG4mIzQzO1x0aW50IGZkX3plcm87XG4mIzQzO1xuJiM0MztcdGlmIChhY2Nlc3MoXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7LCBGX09LKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtObyAvZGV2L3plcm8uXCYjMzQ7KTtcbiYjNDM7XHRmZF96ZXJvID0gb3BlbihcJiMzNDsvZGV2L3plcm9cJiMzNDssIE9fUkRXUik7XG4mIzQzO1x0QVNTRVJUX05FKGZkX3plcm8sIC0xKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgYSBNQVBfUFJJVkFURSBtYXBwaW5nIG9mIC9kZXYvemVybyB3aXRoIHBhZ2Ugb2Zmc2V0IDAsIHRoZW4gZmF1bHRcbiYjNDM7XHQgKiBpdCBpbjpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuJiM0MztcdCAqIHwgICAgICAgICAgIGZhdWx0ZWQgICAgICAgICAgICAgfFxuJiM0MztcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuJiM0MztcdCAqL1xuJiM0MztcdHB0ciA9IG1tYXAoY2FydmVvdXQsIDE1ICogcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApO1xuJiM0MztcdEFTU0VSVF9ORShwdHIsIE1BUF9GQUlMRUQpO1xuJiM0MztcdG1lbXNldChwdHIsICYjMzk7eCYjMzk7LCAxNSAqIHBhZ2Vfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVW5tYXAgdGhlIG1pZGRsZTpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuJiM0MztcdCAqIHwgZmF1bHRlZCB8ICAgICAgICAgICB8IGZhdWx0ZWQgfFxuJiM0MztcdCAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuJiM0MztcdCAqL1xuJiM0MztcdEFTU0VSVF9FUShtdW5tYXAoXHUwMDI2cHRyWzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFwIGluIGEgbmV3IHVuZmF1bHRlZCBtYXBwaW5nIGluIHRoZSBtaWRkbGUgd2l0aCBwYWdlIG9mZnNldCAwIC1cbiYjNDM7XHQgKiB0aGlzIHNob3VsZCBtZXJnZSBhbmQgd291bGQgbm90IGlmIGl0IHdlcmUgdHJlYXRlZCBhcyBhIGZpbGUgcmF0aGVyXG4mIzQzO1x0ICogdGhhbiBwdXJlIGFub246XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXxcbiYjNDM7XHQgKiB8IGZhdWx0ZWQgfCB1bmZhdWx0ZWQgfCBmYXVsdGVkIHxcbiYjNDM7XHQgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXxcbiYjNDM7XHQgKi9cbiYjNDM7XHRwdHIyID0gbW1hcChcdTAwMjZjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSxcbiYjNDM7XHRcdCAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSxcbiYjNDM7XHRcdCAgICBmZF96ZXJvLCAwKTtcbiYjNDM7XHRjbG9zZShmZF96ZXJvKTtcbiYjNDM7XHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IHRoZXkgbWVyZ2VkLiAqL1xuJiM0MztcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpO1xuJiM0MztcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciAmIzQzOyAxNSAqIHBhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4gVEVTVF9GKG1lcmdlX3dpdGhfZm9yaywgbXJlbWFwX2ZhdWx0ZWRfdG9fdW5mYXVsdGVkX3ByZXYpXG4ge1xuIFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcdTAwMjZzZWxmLVx1MDAzZXByb2NtYXA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jXG5pbmRleCA0MjA5YzY0MjgzZDZmLi5iYmNhOWY5ZTI3NDM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcbkBAIC01MSw3ICYjNDM7NTEsNyBAQCBpbnQgbWFpbih2b2lkKVxuIFx0aW50IGZkO1xuIFx0dW5zaWduZWQgbG9uZyBhLCBiO1xuIFxuLVx0ZmQgPSBvcGVuKFwmIzM0Oy9kZXYvemVyb1wmIzM0OywgT19SRE9OTFkpO1xuJiM0MztcdGZkID0gb3BlbihcJiMzNDsvcHJvYy9zZWxmL2V4ZVwmIzM0OywgT19SRE9OTFkpO1xuIFx0aWYgKGZkID09IC0xKVxuIFx0XHRyZXR1cm4gMTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcbmluZGV4IGU2YWEwMGExODNiY2QuLjU3ODZjZGZmYmJmNjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuY1xuQEAgLTU3LDcgJiM0Mzs1Nyw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRpbnQgZmQ7XG4gXHR1bnNpZ25lZCBsb25nIGEsIGI7XG4gXG4tXHRmZCA9IG9wZW4oXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvZXhlXCYjMzQ7LCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5pbmRleCA0YzU4NDg3Yjc2NGU5Li41NjY5MDgxZDkxYjlmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuQEAgLTE2MzgsOSAmIzQzOzE2MzgsMTUgQEAgc3RhdGljIGlubGluZSBwZ29mZl90IGxpbmVhcl9hbm9uX3BhZ2VfaW5kZXgoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRjb25zdCBwZ29mZl90IHBnb2ZmID0gX19saW5lYXJfYW5vbl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIXZtYV9pc19jb3dfbWFwcGluZyh2bWEpKTtcbi1cdC8qIEFjY291bnQgZm9yIE1BUF9QUklWQVRFLS9kZXYvemVybyB3aGljaCBpcyBvbmx5IHNlbWktYW5vbnltb3VzLiAqL1xuLVx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSBcdTAwMjZcdTAwMjYgIXZtYS1cdTAwM2V2bV9maWxlKVxuJiM0MztcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4gXHRcdFZNX1dBUk5fT05fT05DRShwZ29mZiAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTtcbiBcbiBcdHJldHVybiBwZ29mZjtcbiB9XG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmaWxlIFx1MDAyNlx1MDAyNiBmaWxlLVx1MDAzZWZfb3AgPT0gXHUwMDI2emVyb19mb3BzO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMgYi90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xuaW5kZXggNGEzOWM5ZDUwNDg5Ni4uOGM0ODI2NDk5ZjQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xuQEAgLTEyLDYgJiM0MzsxMiwxNSBAQCBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdm1hX2R1bW15X3ZtX29wcztcbiBzdHJ1Y3QgYW5vbl92bWEgZHVtbXlfYW5vbl92bWE7XG4gc3RydWN0IHRhc2tfc3RydWN0IF9fY3VycmVudDtcbiBcbiYjNDM7c3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzID0ge1xuJiM0MztcdC5tbWFwX3ByZXBhcmUgPSBtbWFwX3plcm9fcHJlcGFyZSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICphbGxvY192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRwZ29mZl90IHBnb2ZmLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG5pbmRleCBjODViYzAwMGQxY2I3Li5mYTczZmFmZjIyNjI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbkBAIC00NSw3ICYjNDM7NDUsNDQgQEAgc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9iYXNpYyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCxcbiYjNDM7XHRcdFx0Vk1BX01BWVJFQURfQklULCBWTUFfTUFZV1JJVEVfQklUKTtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSBmaWxlID0ge1xuJiM0MztcdFx0LmZfb3AgPSBcdTAwMjZ6ZXJvX2ZvcHMsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0IG1tID0ge307XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyO1xuJiM0MztcdFZNQV9JVEVSQVRPUih2bWksIFx1MDAyNm1tLCAwKTtcbiYjNDM7XG4mIzQzO1x0Y3VycmVudC1cdTAwM2VtbSA9IFx1MDAyNm1tO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1hcCBhIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5nIGF0IGFkZHJlc3MgMHgzMDAwMDAgd2l0aCBhIHBhZ2VcbiYjNDM7XHQgKiBvZmZzZXQgb2YgMHgxMCwgd2hpY2ggd2UgZXhwZWN0IHRvIGJlIHJlc2V0IHRvIHRoZSBhbm9ueW1vdXMgcGFnZVxuJiM0MztcdCAqIG9mZnNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhZGRyID0gX19tbWFwX3JlZ2lvbihcdTAwMjZmaWxlLCAweDMwMDAwMCwgMHgzMDAwLCB2bWFfZmxhZ3MsIDB4MTAsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShhZGRyLCAweDMwMDAwMCk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IGl0IHRydWx5IGlzIGFuIGFub255bW91cyBtYXBwaW5nLiAqL1xuJiM0MztcdHZtYSA9IHZtYV9sb29rdXAoXHUwMDI2bW0sIGFkZHIpO1xuJiM0MztcdEFTU0VSVF9ORSh2bWEsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9UUlVFKHZtYV9pc19hbm9ueW1vdXModm1hKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9maWxlLCBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSwgTlVMTCk7XG4mIzQzO1x0LyogRXhwZWN0IGFub255bW91cyBwYWdlIG9mZnNldHMuICovXG4mIzQzO1x0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9wZ29mZiwgMHgzMDApO1xuJiM0MztcdEFTU0VSVF9FUSh2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpLCAweDMwMCk7XG4mIzQzO1xuJiM0MztcdGNsZWFudXBfbW0oXHUwMDI2bW0sIFx1MDAyNnZtaSk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnVuX21tYXBfdGVzdHMoaW50ICpudW1fdGVzdHMsIGludCAqbnVtX2ZhaWwpXG4ge1xuIFx0VEVTVChtbWFwX3JlZ2lvbl9iYXNpYyk7XG4mIzQzO1x0VEVTVChwdXJlX2Fub25fZGV2X3plcm8pO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNTVUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjYWxsX21tYXBfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtmaWxlX2lzX2Rldl96ZXJvJiMzNDssCiAgICAmIzM0O21tYXBfemVyb19wcmVwYXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaGFuZGxpbmcgb2YgTUFQX1BSSVZBVEUgL2Rldi96ZXJvIG1hcHBpbmdzIHNvIHRoZXkgYmVjb21lIHRydWx5IGFub255bW91cyBtYXBwaW5ncyB3aXRoaW4gY29yZSBtbSByYXRoZXIgdGhhbiBiZWluZyB0cmVhdGVkIGFzIHNlbWktYW5vbnltb3VzIGZpbGUgbWFwcGluZ3MuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiBtbS92bWEuYywgbW0vY2hhci1tZW0uYywgYW5kIGhlYWRlciBoZWxwZXJzLCBhZmZlY3RpbmcgVk1BIG1lcmdpbmcsIHBhZ2Ugb2Zmc2V0IGNhbGN1bGF0aW9ucywgYW5kIG1tYXAgcHJlcGFyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjM5NjU4NmU5OGQ1ODA4ODhjODFhZWY3ZjJkNmIwMzY2OWE0NTU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxMzoyNjozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggM2ExOWRhNzRkMDBjOS4uYTBhNWRiNDQ0YzY2MyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE3Mjc2LDcgJiM0MzsxNzI3Niw3IEBAIEY6CURvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLW1lbW9yeS10aWVycwogRjoJRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tbnVtYQogRjoJRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS8KIEY6CURvY3VtZW50YXRpb24vbW0vCi1GOglkcml2ZXJzL2NoYXIvbWVtLmMKJiM0MztGOgltbS9jaGFyLW1lbS5jCiBGOglpbmNsdWRlL2xpbnV4L2NtYS5oCiBGOglpbmNsdWRlL2xpbnV4L2RtYXBvb2wuaAogRjoJaW5jbHVkZS9saW51eC9pb3JlbWFwLmgKQEAgLTE3NDgxLDcgJiM0MzsxNzQ4MSw3IEBAIEw6CWxpbnV4LW1tQGt2YWNrLm9yZwogUzoJTWFpbnRhaW5lZAogVzoJaHR0cDovL3d3dy5saW51eC1tbS5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbQotRjoJZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7RjoJbW0vY2hhci1tZW0uYwogRjoJaW5jbHVkZS90cmFjZS9ldmVudHMvbW1hcC5oCiBGOglmcy9wcm9jL3Rhc2tfbW11LmMKIEY6CWZzL3Byb2MvdGFza19ub21tdS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggYTQ2ZDdiZjdjNGM4Mi4uYmIzYmY2NjkzN2IzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtMyw3ICYjNDM7Myw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycy4KICMKIAotb2JqLXkJCQkJJiM0Mzs9IG1lbS5vIHJhbmRvbS5vCiYjNDM7b2JqLXkJCQkJJiM0Mzs9IHJhbmRvbS5vCiBvYmotJChDT05GSUdfVFRZX1BSSU5USykJJiM0Mzs9IHR0eXByaW50ay5vCiBvYmoteQkJCQkmIzQzOz0gbWlzYy5vCiBvYmotJChDT05GSUdfVEVTVF9NSVNDX01JTk9SKQkmIzQzOz0gbWlzY19taW5vcl9rdW5pdC5vCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggZGQwOWM0MzhmYTIzZS4uODY0ZDVhYzM3MDRkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTU1MSwxMSAmIzQzOzE1NTEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF9hbm9ueW1vdXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJdm1hLSZndDt2bV9vcHMgPSBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQotewotCWRlc2MtJmd0O3ZtX29wcyA9IE5VTEw7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYW5vbnltb3VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiAhdm1hLSZndDt2bV9vcHM7CkBAIC00NDA4LDkgJiM0Mzs0NDAzLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9wYWdlcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICAqIElmIEB2bWEgaXMgYSBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoaXMgcmV0dXJucyB0aGUKICAqIHBhZ2Ugb2Zmc2V0IHdpdGhpbiB0aGUgZmlsZS4KICAqCi0gKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSwgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHNhdGlzZmllcwotICogdm1hX2lzX2Fub255bW91cygpIGJ1dCBoYXMgZmlsZS1iYWNrZWQgcGFnZSBvZmZzZXQsIGFuZCBNQVBfUFJJVkFURS1wZm5tYXAKLSAqIHJlZ2lvbnMgaGF2ZSB0aGVpciBwYWdlIG9mZnNldCBzZXQgdG8gdGhlIGZpcnN0IFBGTiBpbiB0aGUgcmFuZ2UuCiYjNDM7ICogRWRnZSBjYXNlczogbm9tbXUgZG9lcyBub3QgYWJpZGUgYnkgdGhlc2UgYW5kIENvVyBNQVBfUFJJVkFURS1wZm5tYXAgcmVnaW9ucwomIzQzOyAqIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLgogICoKICAqIFJldHVybnM6IFRoZSBwYWdlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgQHZtYS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCAwYWRmYTY2MDU2NTNkLi45MzlmM2E1ZTk3M2Y2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtMTEyOCw4ICYjNDM7MTEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCWNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTsKIAogCVZNX1dBUk5fT05fT05DRSghdm1hX2lzX2Nvd19tYXBwaW5nKHZtYSkpOwotCS8qIEFjY291bnQgZm9yIE1BUF9QUklWQVRFLS9kZXYvemVybyB3aGljaCBpcyBvbmx5IHNlbWktYW5vbnltb3VzLiAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgJmFtcDsmYW1wOyAhdm1hLSZndDt2bV9maWxlKQomIzQzOwlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKQogCQlWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7CiAKIAlyZXR1cm4gcGdvZmY7CmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGU3MjQ1Y2I4OGM2NjUuLjJhM2VjNTNkNjJlZWYgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlCkBAIC01NSw3ICYjNDM7NTUsOCBAQCBvYmoteQkJCTo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXAogCQkJICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXAogCQkJICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXAogCQkJICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFwKLQkJCSAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KQomIzQzOwkJCSAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyBjaGFyLW1lbS5vIFwKJiM0MzsJCQkgICAkKG1tdS15KQogCiAjIEdpdmUgJiMzOTtwYWdlX2FsbG9jJiMzOTsgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZQogcGFnZS1hbGxvYy15IDo9IHBhZ2VfYWxsb2MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvbW0vY2hhci1tZW0uYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvbWVtLmMKcmVuYW1lIHRvIG1tL2NoYXItbWVtLmMKaW5kZXggNjMyNTNkMWRlNWQ3MC4uYzBiNWZiMDE5MjIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NoYXItbWVtLmMKQEAgLTEsNiAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7ICogIG1tL2NoYXItbWVtLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwogICoKQEAgLTMxLDYgJiM0MzszMSw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOwogI2RlZmluZSBERVZNRU1fTUlOT1IJMQogI2RlZmluZSBERVZQT1JUX01JTk9SCTQKIApAQCAtNTA2LDExICYjNDM7NTA4LDcgQEAgc3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQogCWlmICh2bWFfZGVzY190ZXN0KGRlc2MsIFZNQV9TSEFSRURfQklUKSkKIAkJcmV0dXJuIHNobWVtX3plcm9fc2V0dXBfZGVzYyhkZXNjKTsKIAotCS8qCi0JICogVGhpcyBpcyBhIGhpZ2hseSB1bmlxdWUgc2l0dWF0aW9uIHdoZXJlIHdlIG1hcmsgYSBNQVBfUFJJVkFURSBtYXBwaW5nCi0JICogb2YgL2Rldi96ZXJvIGFub255bW91cywgZGVzcGl0ZSBpdCBub3QgYmVpbmcuCi0JICovCi0Jdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhkZXNjKTsKJiM0MzsJLyogTUFQX1BSSVZBVEUgc2VtYW50aWNzIGFyZSB0YWtlbiBjYXJlIG9mIGZvciB1cyBieSBjb3JlIG1tLiAqLwogCXJldHVybiAwOwogfQogCkBAIC03MDcsNiAmIzQzOzcwNSwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7CiAjZW5kaWYKIH07CiAKJiM0MzsvKioKJiM0MzsgKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvCiYjNDM7ICogZHJpdmVyPwomIzQzOyAqIEBmaWxlOiBGaWxlIHRvIHRlc3QuCiYjNDM7ICogUmV0dXJuczogdHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmaWxlICZhbXA7JmFtcDsgZmlsZS0mZ3Q7Zl9vcCA9PSAmYW1wO3plcm9fZm9wczsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1lbW9yeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCBtaW5vcjsKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM4YjExNjUyMTJjOTQuLjI3ODI5MjRhMjc3YzkgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMjM3LDE1ICYjNDM7MjM3LDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaW50IGVyciA9IHZmc19tbWFwKGZpbGUsIHZtYSk7CiAKLQlpZiAobGlrZWx5KCFlcnIpKQotCQlyZXR1cm4gMDsKLQogCS8qCi0JICogT0ssIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpLCBidXQgYW4gZXJyb3IKLQkgKiBhcm9zZS4gVGhlIG1hcHBpbmcgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0IG5vdCBpbnZva2UKLQkgKiBhbnkgZnVydGhlciBob29rcyBvbiBpdC4KJiM0MzsJICogRWl0aGVyIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpIGFuZCBhbiBlcnJvciBhcm9zZQomIzQzOwkgKiBvciBhIGRyaXZlciBzZXQgdm1hLSZndDt2bV9vcHMgPSBOVUxMIGludGVuZGluZyB0aGVyZSB0byBiZSBubyBWTUEKJiM0MzsJICogb3BlcmF0aW9ucy4KJiM0MzsJICoKJiM0MzsJICogSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBWTUEgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0biYjMzk7dAomIzQzOwkgKiBpbnZva2UgYW55IGZ1cnRoZXIgaG9va3Mgb24gaXQsIGluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgaG9vayBhY3R1YWxseQomIzQzOwkgKiB3YW50ZWQgbm8gZnVydGhlciBob29rcyB0byBiZSBpbnZva2VkLCBzbyBmaXggYm90aCBieSBzZXR0aW5nIGR1bW15CiYjNDM7CSAqIFZNQSBvcHMuCiAJICovCi0Jdm1hLSZndDt2bV9vcHMgPSAmYW1wO3ZtYV9kdW1teV92bV9vcHM7CiYjNDM7CWlmICh1bmxpa2VseShlcnIgfHwgIXZtYS0mZ3Q7dm1fb3BzKSkKJiM0MzsJCXZtYS0mZ3Q7dm1fb3BzID0gJmFtcDt2bWFfZHVtbXlfdm1fb3BzOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2NTQsNCAmIzQzOzE2NTcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NwaW5fdHJ5bG9jayh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7LyogY2hhci1tZW0uYyAqLwomIzQzO2Jvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiYjNDM7CiAjZW5kaWYJLyogX19NTV9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA4OTdmYTJiNjEzNDZmLi5jNjA3NjNlZjU2MWNmIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTI3ODYsNyAmIzQzOzI3ODYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJc2IgPSBmaWxlX2lub2RlKGZpbGUpLSZndDtpX3NiOwogCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIENhbGxlZCBkaXJlY3RseSBmcm9tIG1tL21tYXAuYywgb3IgZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7CQkJICogQ2FsbGVkIGRpcmVjdGx5IGZyb20gbW0vbW1hcC5jLCBvciBtbS9jaGFyLW1lbS5jCiAJCQkgKiBmb3IgJiMzNDsvZGV2L3plcm8mIzM0OywgdG8gY3JlYXRlIGEgc2hhcmVkIGFub255bW91cyBvYmplY3QuCiAJCQkgKi8KIAkJCWlmIChJU19FUlIoc2htX21udCkpCmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jCmluZGV4IDM1ZTdhNjQ4NTVmYWQuLjZmZGNlNDg1MmNlNjEgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jCkBAIC0yNjIxLDYgJiM0MzsyNjIxLDIzIEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbWFwX3NldF9hbm9uKHN0cnVjdCBtbWFwX3N0YXRlICptYXApCiYjNDM7ewomIzQzOwltYXAtJmd0O2ZpbGUgPSBOVUxMOwomIzQzOwltYXAtJmd0O3ZtX29wcyA9IE5VTEw7CiYjNDM7CW1hcC0mZ3Q7cGdvZmYgPSBtYXAtJmd0O2FkZHIgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbWFwX2lzX3ByaXZhdGUoY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhdm1hX2ZsYWdzX3Rlc3QoJmFtcDttYXAtJmd0O3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtYXBfaXNfYW5vbihjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1hcF9pc19wcml2YXRlKG1hcCkgJmFtcDsmYW1wOyAhbWFwLSZndDtmaWxlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBfX21tYXBfbmV3X3ZtYSgpIC0gQWxsb2NhdGUgYSBuZXcgVk1BIGZvciB0aGUgcmVnaW9uLCBhcyBtZXJnaW5nIHdhcyBub3QKICAqIHBvc3NpYmxlLgpAQCAtMjYzNCw4ICYjNDM7MjY1MSw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogc3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLAogCXN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKQogewotCWNvbnN0IGJvb2wgaXNfYW5vbiA9ICFtYXAtJmd0O2ZpbGUgJmFtcDsmYW1wOwotCQkhdm1hX2ZsYWdzX3Rlc3QoJmFtcDttYXAtJmd0O3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpOwomIzQzOwljb25zdCBib29sIGlzX2Fub24gPSBtYXBfaXNfYW5vbihtYXApOwogCXN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSA9IG1hcC0mZ3Q7dm1pOwogCWludCBlcnJvciA9IDA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CkBAIC0yNzc3LDYgJiM0MzsyNzkzLDEwIEBAIHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CS8qIEl0JiMzOTtzIGludmFsaWQgZm9yIG1tYXBfcHJlcHJhcmUgaG9va3MgdG8gY2xlYXIgdm1fb3BzLiAqLwomIzQzOwlpZiAoIWRlc2MtJmd0O3ZtX29wcykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjc5MywxNiAmIzQzOzI4MTMsMjEgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogCW1hcC0mZ3Q7dm1fb3BzID0gZGVzYy0mZ3Q7dm1fb3BzOwogCW1hcC0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gZGVzYy0mZ3Q7cHJpdmF0ZV9kYXRhOwogCiYjNDM7CS8qCiYjNDM7CSAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZwomIzQzOwkgKiBhbm9ueW1vdXMgbWFwcGluZ3MuIFJhdGhlciB0aGFuIGFsbG93aW5nIHRoZXNlIG1hcHBpbmdzIHRvIGJlIG9kZAomIzQzOwkgKiBvdXRsaWVycywgc2ltcGx5IG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMuCiYjNDM7CSAqLwomIzQzOwlpZiAobWFwX2lzX3ByaXZhdGUobWFwKSAmYW1wOyZhbXA7IGZpbGVfaXNfZGV2X3plcm8obWFwLSZndDtmaWxlKSkKJiM0MzsJCW1hcF9zZXRfYW5vbihtYXApOwomIzQzOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXN0cnVjdCBtbWFwX3N0YXRlICptYXApCiB7Ci0JaWYgKG1hcC0mZ3Q7dm1fb3BzKQotCQl2bWEtJmd0O3ZtX29wcyA9IG1hcC0mZ3Q7dm1fb3BzOwotCWVsc2UJLyogT25seSAvZGV2L3plcm8gc2hvdWxkIGRvIHRoaXMuICovCi0JCXZtYV9zZXRfYW5vbnltb3VzKHZtYSk7CiYjNDM7CXZtYS0mZ3Q7dm1fb3BzID0gbWFwLSZndDt2bV9vcHM7CiAJdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBtYXAtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKIH0KIApAQCAtMjg4Miw3ICYjNDM7MjkwNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJYWxsb2NhdGVkX25ldyA9IHRydWU7CiAJfQogCi0JaWYgKGhhdmVfbW1hcF9wcmVwYXJlKQomIzQzOwlpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgJmFtcDsmYW1wOyAhbWFwX2lzX2Fub24oJmFtcDttYXApKQogCQlzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHModm1hLCAmYW1wO21hcCk7CiAKIAlfX21tYXBfY29tcGxldGUoJmFtcDttYXAsIHZtYSk7CmRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oCmluZGV4IDAyNGZhYmU2MzU2MGEuLmU5N2JkMmRmYTc4NmQgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5oCkBAIC0yNjcsOSAmIzQzOzI2Nyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfc2FuZV9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBwZ29mZikKIAkgKi8KIAlpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSkKIAkJcmV0dXJuOwotCS8qIE1BUF9QUklWQVRFLS9kZXYvemVybyBpcyBhbm9uLCBub24tTlVMTCB2bV9maWxlLCBidXQgaGFzIGZpbGUgcGdvZmYuICovCi0JaWYgKHZtYS0mZ3Q7dm1fZmlsZSkKLQkJcmV0dXJuOwogCS8qIElmIGZhdWx0ZWQgaW4sIGNvdWxkIGhhdmUgYmVlbiByZW1hcHBlZC4gKi8KIAlpZiAodm1hLSZndDthbm9uX3ZtYSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMKaW5kZXggNTJiODcyN2I2NjI4ZS4uN2RkMjkzMzQxN2MxZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jCkBAIC0xMzYyLDYgJiM0MzsxMzYyLDEwMSBAQCBURVNUX0YobWVyZ2UsIGFub25fYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKQogCUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgNSAqIHBhZ2Vfc2l6ZSk7CiB9CiAKJiM0MztURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX3VuZmF1bHRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gJmFtcDtzZWxmLSZndDtwcm9jbWFwOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwomIzQzOwljaGFyICpjYXJ2ZW91dCA9IHNlbGYtJmd0O2NhcnZlb3V0OwomIzQzOwljaGFyICpwdHIsICpwdHIyOwomIzQzOwlpbnQgZmRfemVybzsKJiM0MzsKJiM0MzsJaWYgKGFjY2VzcygmIzM0Oy9kZXYvemVybyYjMzQ7LCBGX09LKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O05vIC9kZXYvemVyby4mIzM0Oyk7CiYjNDM7CWZkX3plcm8gPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9ORShmZF96ZXJvLCAtMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1hcCB0d28gTUFQX1BSSVZBVEUtL2Rldi96ZXJvIFZNQXMgbmV4dCB0byBvbmUgYW5vdGhlciB3aXRoIG9mZnNldCAwCiYjNDM7CSAqIGVhY2guCiYjNDM7CSAqCiYjNDM7CSAqIFdpdGggdGhlc2UgYmVpbmcgbWFkZSB0cnVseSBhbm9ueW1vdXMgdXBvbiBtYXBwaW5nLCB0aGV5IHdpbGwKJiM0MzsJICogbWVyZ2UuIElmIHRoZXkgd2VyZSBmaWxlLWJhY2tlZCBWTUFzIHRoZSBwYWdlIG9mZnNldHMgd291bGQgcHJldmVudAomIzQzOwkgKiB0aGUgbWVyZ2U6CiYjNDM7CSAqCiYjNDM7CSAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXwKJiM0MzsJICogfCBwdHIgfHwgcHRyMiB8IC0mZ3Q7IHwgICAgIHB0ciAgICAgfAomIzQzOwkgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18CiYjNDM7CSAqLwomIzQzOwlwdHIgPSBtbWFwKGNhcnZlb3V0LCA1ICogcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApOwomIzQzOwlwdHIyID0gbW1hcCgmYW1wO2NhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLAomIzQzOwkJICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApOwomIzQzOwljbG9zZShmZF96ZXJvKTsKJiM0MzsJQVNTRVJUX05FKHB0ciwgTUFQX0ZBSUxFRCk7CiYjNDM7CUFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovCiYjNDM7CUFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgMTAgKiBwYWdlX3NpemUpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX2ZhdWx0ZWRfdW5mYXVsdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSAmYW1wO3NlbGYtJmd0O3Byb2NtYXA7CiYjNDM7CXVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLSZndDtwYWdlX3NpemU7CiYjNDM7CWNoYXIgKmNhcnZlb3V0ID0gc2VsZi0mZ3Q7Y2FydmVvdXQ7CiYjNDM7CWNoYXIgKnB0ciwgKnB0cjI7CiYjNDM7CWludCBmZF96ZXJvOwomIzQzOwomIzQzOwlpZiAoYWNjZXNzKCYjMzQ7L2Rldi96ZXJvJiMzNDssIEZfT0spKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7Tm8gL2Rldi96ZXJvLiYjMzQ7KTsKJiM0MzsJZmRfemVybyA9IG9wZW4oJiMzNDsvZGV2L3plcm8mIzM0OywgT19SRFdSKTsKJiM0MzsJQVNTRVJUX05FKGZkX3plcm8sIC0xKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFwIGEgTUFQX1BSSVZBVEUgbWFwcGluZyBvZiAvZGV2L3plcm8gd2l0aCBwYWdlIG9mZnNldCAwLCB0aGVuIGZhdWx0CiYjNDM7CSAqIGl0IGluOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKJiM0MzsJICogfCAgICAgICAgICAgZmF1bHRlZCAgICAgICAgICAgICB8CiYjNDM7CSAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJcHRyID0gbW1hcChjYXJ2ZW91dCwgMTUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7CiYjNDM7CUFTU0VSVF9ORShwdHIsIE1BUF9GQUlMRUQpOwomIzQzOwltZW1zZXQocHRyLCAmIzM5O3gmIzM5OywgMTUgKiBwYWdlX3NpemUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVbm1hcCB0aGUgbWlkZGxlOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXwKJiM0MzsJICogfCBmYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8CiYjNDM7CSAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJQVNTRVJUX0VRKG11bm1hcCgmYW1wO3B0cls1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSksIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgaW4gYSBuZXcgdW5mYXVsdGVkIG1hcHBpbmcgaW4gdGhlIG1pZGRsZSB3aXRoIHBhZ2Ugb2Zmc2V0IDAgLQomIzQzOwkgKiB0aGlzIHNob3VsZCBtZXJnZSBhbmQgd291bGQgbm90IGlmIGl0IHdlcmUgdHJlYXRlZCBhcyBhIGZpbGUgcmF0aGVyCiYjNDM7CSAqIHRoYW4gcHVyZSBhbm9uOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwKJiM0MzsJICogfCBmYXVsdGVkIHwgdW5mYXVsdGVkIHwgZmF1bHRlZCB8CiYjNDM7CSAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJcHRyMiA9IG1tYXAoJmFtcDtjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSwKJiM0MzsJCSAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwKJiM0MzsJCSAgICBmZF96ZXJvLCAwKTsKJiM0MzsJY2xvc2UoZmRfemVybyk7CiYjNDM7CUFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovCiYjNDM7CUFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgMTUgKiBwYWdlX3NpemUpOwomIzQzO30KJiM0MzsKIFRFU1RfRihtZXJnZV93aXRoX2ZvcmssIG1yZW1hcF9mYXVsdGVkX3RvX3VuZmF1bHRlZF9wcmV2KQogewogCXN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gJmFtcDtzZWxmLSZndDtwcm9jbWFwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jCmluZGV4IDQyMDljNjQyODNkNmYuLmJiY2E5ZjllMjc0MzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmMKQEAgLTUxLDcgJiM0Mzs1MSw3IEBAIGludCBtYWluKHZvaWQpCiAJaW50IGZkOwogCXVuc2lnbmVkIGxvbmcgYSwgYjsKIAotCWZkID0gb3BlbigmIzM0Oy9kZXYvemVybyYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9wcm9jL3NlbGYvZXhlJiMzNDssIE9fUkRPTkxZKTsKIAlpZiAoZmQgPT0gLTEpCiAJCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMKaW5kZXggZTZhYTAwYTE4M2JjZC4uNTc4NmNkZmZiYmY2MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuYwpAQCAtNTcsNyAmIzQzOzU3LDcgQEAgaW50IG1haW4odm9pZCkKIAlpbnQgZmQ7CiAJdW5zaWduZWQgbG9uZyBhLCBiOwogCi0JZmQgPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRPTkxZKTsKJiM0MzsJZmQgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9leGUmIzM0OywgT19SRE9OTFkpOwogCWlmIChmZCA9PSAtMSkKIAkJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCmluZGV4IDRjNTg0ODdiNzY0ZTkuLjU2NjkwODFkOTFiOWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaApAQCAtMTYzOCw5ICYjNDM7MTYzOCwxNSBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2Fub25fcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAljb25zdCBwZ29mZl90IHBnb2ZmID0gX19saW5lYXJfYW5vbl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7CiAKIAlWTV9XQVJOX09OX09OQ0UoIXZtYV9pc19jb3dfbWFwcGluZyh2bWEpKTsKLQkvKiBBY2NvdW50IGZvciBNQVBfUFJJVkFURS0vZGV2L3plcm8gd2hpY2ggaXMgb25seSBzZW1pLWFub255bW91cy4gKi8KLQlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpICZhbXA7JmFtcDsgIXZtYS0mZ3Q7dm1fZmlsZSkKJiM0MzsJaWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSkKIAkJVk1fV0FSTl9PTl9PTkNFKHBnb2ZmICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykpOwogCiAJcmV0dXJuIHBnb2ZmOwogfQomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wczsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmaWxlICZhbXA7JmFtcDsgZmlsZS0mZ3Q7Zl9vcCA9PSAmYW1wO3plcm9fZm9wczsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCmluZGV4IDRhMzljOWQ1MDQ4OTYuLjhjNDgyNjQ5OWY0MDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCkBAIC0xMiw2ICYjNDM7MTIsMTUgQEAgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtYV9kdW1teV92bV9vcHM7CiBzdHJ1Y3QgYW5vbl92bWEgZHVtbXlfYW5vbl92bWE7CiBzdHJ1Y3QgdGFza19zdHJ1Y3QgX19jdXJyZW50OwogCiYjNDM7c3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzID0gewomIzQzOwkubW1hcF9wcmVwYXJlID0gbW1hcF96ZXJvX3ByZXBhcmUsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYWxsb2Nfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJcGdvZmZfdCBwZ29mZiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jCmluZGV4IGM4NWJjMDAwZDFjYjcuLmZhNzNmYWZmMjI2MjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMKQEAgLTQ1LDcgJiM0Mzs0NSw0NCBAQCBzdGF0aWMgYm9vbCB0ZXN0X21tYXBfcmVnaW9uX2Jhc2ljKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKQomIzQzO3sKJiM0MzsJY29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCwKJiM0MzsJCQlWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQpOwomIzQzOwlzdHJ1Y3QgZmlsZSBmaWxlID0gewomIzQzOwkJLmZfb3AgPSAmYW1wO3plcm9fZm9wcywKJiM0MzsJfTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyOwomIzQzOwlWTUFfSVRFUkFUT1Iodm1pLCAmYW1wO21tLCAwKTsKJiM0MzsKJiM0MzsJY3VycmVudC0mZ3Q7bW0gPSAmYW1wO21tOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgYSBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZyBhdCBhZGRyZXNzIDB4MzAwMDAwIHdpdGggYSBwYWdlCiYjNDM7CSAqIG9mZnNldCBvZiAweDEwLCB3aGljaCB3ZSBleHBlY3QgdG8gYmUgcmVzZXQgdG8gdGhlIGFub255bW91cyBwYWdlCiYjNDM7CSAqIG9mZnNldC4KJiM0MzsJICovCiYjNDM7CWFkZHIgPSBfX21tYXBfcmVnaW9uKCZhbXA7ZmlsZSwgMHgzMDAwMDAsIDB4MzAwMCwgdm1hX2ZsYWdzLCAweDEwLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgaXQgdHJ1bHkgaXMgYW4gYW5vbnltb3VzIG1hcHBpbmcuICovCiYjNDM7CXZtYSA9IHZtYV9sb29rdXAoJmFtcDttbSwgYWRkcik7CiYjNDM7CUFTU0VSVF9ORSh2bWEsIE5VTEwpOwomIzQzOwlBU1NFUlRfVFJVRSh2bWFfaXNfYW5vbnltb3VzKHZtYSkpOwomIzQzOwlBU1NFUlRfRVEodm1hLSZndDt2bV9maWxlLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhLCBOVUxMKTsKJiM0MzsJLyogRXhwZWN0IGFub255bW91cyBwYWdlIG9mZnNldHMuICovCiYjNDM7CUFTU0VSVF9FUSh2bWEtJmd0O3ZtX3Bnb2ZmLCAweDMwMCk7CiYjNDM7CUFTU0VSVF9FUSh2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpLCAweDMwMCk7CiYjNDM7CiYjNDM7CWNsZWFudXBfbW0oJmFtcDttbSwgJmFtcDt2bWkpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydW5fbW1hcF90ZXN0cyhpbnQgKm51bV90ZXN0cywgaW50ICpudW1fZmFpbCkKIHsKIAlURVNUKG1tYXBfcmVnaW9uX2Jhc2ljKTsKJiM0MzsJVEVTVChwdXJlX2Fub25fZGV2X3plcm8pOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzQ5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogRGV0ZXJtaW5pbmcgRnV6emluZyBXb3J0aGluZXNzIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgb3IgbGF0ZW50IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gVGhlIGNyaXRlcmlhIGFyZSBhbHNvIGNsZWFyOiBjaGVjayBmb3IgdG91Y2ggcG9pbnRzIG9uIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgc3Vic3lzdGVtcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgKmxvb2tzKiBwcm9taXNpbmcgZm9yIGZ1enppbmcuIFdlIGhhdmUgbW9kaWZpY2F0aW9ucyB0byBgbW0vdm1hLmNgLCBgbW0vY2hhci1tZW0uY2AsIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLCBhbmQgYG1tL2ludGVybmFsLmhgLCBhbGwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhcmVhcy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2VyaWVzIHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIGhvdyBgL2Rldi96ZXJvYCBtYXBwaW5ncyBpbnRlcmFjdCB3aXRoIGFub255bW91cyBtZW1vcnksIG1ha2luZyB0aGVtIHRydWx5IGFub255bW91cyBpbiB0aGUgY29yZSBtbS4gVGhpcyBzZWVtcyBsaWtlIGl0IHRvdWNoZXMgcmVhY2hhYmxlIGNvZGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGBXb3J0aEZ1enppbmdgIGlzIGxpa2VseSBgdHJ1ZWAuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgZGlmZiBzdGVwLWJ5LXN0ZXAgdG8gYmUgY2VydGFpbjoKCjEuICBXZSBoYXZlIHRoZSBzdGFuZGFyZCBmaWxlIHJlbmFtZXMvbW92ZXMgKE1BSU5UQUlORVJTLCBgZHJpdmVycy9jaGFyL01ha2VmaWxlYCwgYG1tL01ha2VmaWxlYCkuIFRoZXNlIGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgY29uY2VybmluZy4KMi4gIGBkcml2ZXJzL2NoYXIvbWVtLmNgIGlzIG1vdmVkIHRvIGBtbS9jaGFyLW1lbS5jYC4gVGhlIGNoYW5nZXMgdG8gYG1tYXBfemVyb19wcmVwYXJlKClgIGFuZCB0aGUgYWRkaXRpb24gb2YgYGZpbGVfaXNfZGV2X3plcm8oKWAgYXJlIGludGVyZXN0aW5nIGFuZCByZXF1aXJlIGEgY2xvc2VyIGxvb2suIFRoaXMgZGVmaW5pdGVseSBzZWVtcyBjb3JlIG1tIHJlbGF0ZWQuCjMuICBUaGUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9tbS5oYCAocmVtb3ZhbCBvZiBgdm1hX2Rlc2Nfc2V0X2Fub255bW91cygpYCkgYW5kIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgKHNpbXBsaWZpY2F0aW9uIG9mIGBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KClgKSBwb2ludCB0byByZWZhY3RvcmluZyBvZiBob3cgVk1BJiMzOTtzIGFyZSBoYW5kbGVkLCB3aGljaCBzdHJlbmd0aGVucyB0aGUgaWRlYSBvZiBmdXp6aW5nLgo0LiAgYG1tL2ludGVybmFsLmhgIGluY2x1ZGVzIHRoZSBpbmxpbmUgZnVuY3Rpb24gbW9kaWZpY2F0aW9uIGluIGBtbWFwX2ZpbGVgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIHRoZSBwcm90b3R5cGUgYGZpbGVfaXNfZGV2X3plcm9gLiBUaGlzIGlzIGNlcnRhaW5seSByZWxhdGVkIHRvIFZNQSBzZXR1cCBhbmQgdGhlIG5ldyBjaGVja3MuCjUuICBgbW0vdm1hLmNgIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nOiBuZXcgZnVuY3Rpb25zIGxpa2UgYG1hcF9zZXRfYW5vbigpYCwgYG1hcF9pc19wcml2YXRlKClgLCBgbWFwX2lzX2Fub24oKWAsIGFuZCBjaGFuZ2VzIHRvIGBfX21tYXBfbmV3X3ZtYSgpYCwgYGNhbGxfbW1hcF9wcmVwYXJlKClgLCBhbmQgYF9fbW1hcF9yZWdpb24oKWAuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGNydWNpYWwuIFRoZSBjaGFuZ2VzIGluIGBjYWxsX21tYXBfcHJlcGFyZSgpYCBhbmQgYF9fbW1hcF9yZWdpb24oKWAgc2VlbSBsaWtlIGNvZGUgcGF0aHMgd2l0aCBoaWdoIHBvdGVudGlhbCBmb3IgaXNzdWVzLCBhbmQgdGhvc2UgYXJlIGRlZmluaXRlbHkgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KNi4gIFRoZSBjaGFuZ2UgaW4gYG1tL3ZtYS5oYCAocmVtb3ZpbmcgYSBgdm1hLSZndDt2bV9maWxlYCBjaGVjayBpbiBgYXNzZXJ0X3NhbmVfcGdvZmZgKSBhbHNvIGZlZWxzIGxpa2UgYSByZWZhY3RvcmluZy4KNy4gIEFuZCBvZiBjb3Vyc2UsIHdlIGhhdmUgcmVsYXRlZCBzZWxmdGVzdHMuCgpUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY29yZSBtbSBsb2dpYywgc3BlY2lmaWNhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggcmVzcGVjdCB0byBtYXBwaW5nIGFuZCBWTUEgbG9naWMgKGBtbS92bWEuY2AsIGBtbS9jaGFyLW1lbS5jYCwgYG1tL2ludGVybmFsLmhgLCBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLCBgaW5jbHVkZS9saW51eC9tbS5oYCwgYG1tL3ZtYS5oYCkuIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMsIHRoaXMgc2VlbXMgbGlrZSAqZXhhY3RseSogdGhlIGtpbmQgb2YgY2hhbmdlIHdlICp3YW50KiB0byBmdXp6LiBJdCYjMzk7cyBhIGNsZWFyICYjMzk7eWVzJiMzOTsgdG8gYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gY3JlYXRlIGEgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYCBhbmQgY29uc2lkZXIgd2hpY2ggYEVuYWJsZUNvbmZpZ3NgIG1pZ2h0IGJlIHVzZWZ1bC4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBkaWZmIGFuZCBjcmVhdGUgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBjaGFuZ2VzOgoKKiAgIGBjYWxsX21tYXBfcHJlcGFyZWAgKGluIG1tL3ZtYS5jKQoqICAgYF9fbW1hcF9uZXdfdm1hYCAoaW4gbW0vdm1hLmMpCiogICBgX19tbWFwX3JlZ2lvbmAgKGluIG1tL3ZtYS5jKQoqICAgYG1hcF9zZXRfYW5vbmAgKHN0YXRpYyBpbiBtbS92bWEuYykKKiAgIGBmaWxlX2lzX2Rldl96ZXJvYCAoaW4gbW0vY2hhci1tZW0uYykKKiAgIGBtbWFwX3plcm9fcHJlcGFyZWAgKGluIG1tL2NoYXItbWVtLmMpCiogICBgbW1hcF9maWxlYCAoaW5saW5lIGluIG1tL2ludGVybmFsLmgpCiogICBgbGluZWFyX2Fub25fcGFnZV9pbmRleGAgKGlubGluZSBpbiBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCkKKiAgIGBhc3NlcnRfc2FuZV9wZ29mZmAgKGlubGluZSBpbiBtbS92bWEuaCkKCkkmIzM5O2xsIG5vdyBuZWVkIHRvIHVzZSBgZ2l0IGdyZXBgIGFuZCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSB0byBzZWUgd2hpY2ggb3RoZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlc2UsIGFuZCBjb25zaWRlciBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgZ29hbCBpcyBhIGZ1enppbmcgY29uZmlndXJhdGlvbiB0aGF0IG1heGltaXplcyB0aGUgbGlrZWxpaG9vZAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsZV9pc19kZXZfemVybyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jaGFyLW1lbS5jPTY4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XG4tLVxubW0vY2hhci1tZW0uYy03MDgtLyoqXG5tbS9jaGFyLW1lbS5jOjcwOTogKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvXG5tbS9jaGFyLW1lbS5jLTcxMC0gKiBkcml2ZXI/XG4tLVxubW0vY2hhci1tZW0uYy03MTMtICovXG5tbS9jaGFyLW1lbS5jOjcxNDpib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG5tbS9jaGFyLW1lbS5jLTcxNS17XG4tLVxubW0vaW50ZXJuYWwuaD0xNjM3PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3Bpbl90cnlsb2NrKHZvaWQpXG4tLVxubW0vaW50ZXJuYWwuaC0xNjYwLS8qIGNoYXItbWVtLmMgKi9cbm1tL2ludGVybmFsLmg6MTY2MTpib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xubW0vaW50ZXJuYWwuaC0xNjYyLVxuLS1cbm1tL3ZtYS5jPTI3ODY9c3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuLS1cbm1tL3ZtYS5jLTI4MjAtXHQgKi9cbm1tL3ZtYS5jOjI4MjE6XHRpZiAobWFwX2lzX3ByaXZhdGUobWFwKSBcdTAwMjZcdTAwMjYgZmlsZV9pc19kZXZfemVybyhtYXAtXHUwMDNlZmlsZSkpXG5tbS92bWEuYy0yODIyLVx0XHRtYXBfc2V0X2Fub24obWFwKTtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTE2NDc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzO1xudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0xNjQ4LVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaDoxNjQ5OnN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0xNjUwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQyOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYXBwaW5nIGZvciBDaGFyYWN0ZXIgRGV2aWNlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB6ZXJvLWZpbGxlZCBtZW1vcnkgaXMgcHJlcGFyZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGNoYXJhY3RlciBkZXZpY2VzLiBUaGF0IG1lYW5zIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYG1tYXBfemVyb19wcmVwYXJlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBtbS9jaGFyLW1lbS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHRoZSBwcmVwYXJhdGlvbiBmb3IgdGhlIG1hZ2ljIG9mIG1hcHBpbmcgemVybyBwYWdlcyBpbnRvIHVzZXIgc3BhY2UgbWVtb3J5IG9jY3Vycy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIGJlZm9yZSB0aGUgYWN0dWFsIG1lbW9yeSBtYXBwaW5nIHRha2VzIHBsYWNlLCBvciB0aGUgYWN0dWFsIHplcm9pbmcgaXRzZWxmLiBHaXZlbiB0aGUgZmlsZSBhbmQgZnVuY3Rpb24gbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHN0ZXBzIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLCBvciBwb3NzaWJseSB6ZXJvaW5nIHRoZSBwYWdlcyBhaGVhZCBvZiB0aGUgbWFwcGluZy4gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBpbnRlcmFjdGlvbiBjb252ZXJnZSwgYW5kIEkmIzM5O20gcmVhZHkgdG8gZGlnIGluLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgbXkgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbWFwX3plcm9fcHJlcGFyZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jaGFyLW1lbS5jPTQ3Nj1zdGF0aWMgc3NpemVfdCByZWFkX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxubW0vY2hhci1tZW0uYy01MDItXG5tbS9jaGFyLW1lbS5jOjUwMzpzdGF0aWMgaW50IG1tYXBfemVyb19wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG5tbS9jaGFyLW1lbS5jLTUwNC17XG4tLVxubW0vY2hhci1tZW0uYz01MjM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VubWFwcGVkX2FyZWFfemVybyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5tbS9jaGFyLW1lbS5jLTUyOC1cdFx0Lypcbm1tL2NoYXItbWVtLmM6NTI5Olx0XHQgKiBtbWFwX3plcm9fcHJlcGFyZSgpIHdpbGwgY2FsbCBzaG1lbV96ZXJvX3NldHVwKCkgdG8gY3JlYXRlIGFcbm1tL2NoYXItbWVtLmMtNTMwLVx0XHQgKiBmaWxlLCBzbyB1c2Ugc2htZW0mIzM5O3MgZ2V0X3VubWFwcGVkX2FyZWEgaW4gY2FzZSBpdCBjYW4gYmVcbi0tXG5tbS9jaGFyLW1lbS5jPTY2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XG4tLVxubW0vY2hhci1tZW0uYy02NzEtXHQuc3BsaWNlX3dyaXRlXHQ9IHNwbGljZV93cml0ZV96ZXJvLFxubW0vY2hhci1tZW0uYzo2NzI6XHQubW1hcF9wcmVwYXJlXHQ9IG1tYXBfemVyb19wcmVwYXJlLFxubW0vY2hhci1tZW0uYy02NzMtXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jPTEzPXN0cnVjdCB0YXNrX3N0cnVjdCBfX2N1cnJlbnQ7XG50b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYy0xNC1cbnRvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jOjE1OnN0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbnRvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jLTE2LXtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYz0yMD1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcbnRvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jOjIxOlx0Lm1tYXBfcHJlcGFyZSA9IG1tYXBfemVyb19wcmVwYXJlLFxudG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMtMjItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFwcGluZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtZW1vcnkgbWFwcGluZyBpcyBiZWluZyBwcmVwYXJlZCBhbmQgZXhlY3V0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGNhbGxfbW1hcF9wcmVwYXJlYCBhbmQgYF9fbW1hcF9yZWdpb25gIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGxpa2VseSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgYW5kIHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiBgbW0vdm1hLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vdm1hLmNgIHRvIGdyYXNwIHRoZSBmbG93IGFuZCBjb250ZXh0IGFyb3VuZCB0aG9zZSBzcGVjaWZpYyBsaW5lcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgaXMgYmVpbmcgc2V0IHVwIGFuZCBob3cgdGhlIHJlZ2lvbiBpcyBhY3R1YWxseSBlc3RhYmxpc2hlZC4gVGhpcyBzaG91bGQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwcmUtY29uZGl0aW9ucywgdGhlIGFzc3VtcHRpb25zIGJlaW5nIG1hZGUsIGFuZCB3aGF0IHRoZSBjb2RlIGlzICphY3R1YWxseSogZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc4MDpcdCAqIHRoYXQgYXJlIHBlcm1pdHRlZCB0byBiZSB1cGRhdGVkIGJ5IHRoZSBjYWxsZXIuXG4yNzgxOlx0ICpcbjI3ODI6XHQgKiBBbGwgYnV0IHVzZXItZGVmaW5lZCBmaWVsZHMgd2lsbCBiZSBwcmUtcG9wdWxhdGVkIHdpdGggb3JpZ2luYWwgdmFsdWVzLlxuMjc4MzpcdCAqXG4yNzg0Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuMjc4NTpcdCAqL1xuMjc4NjpcdHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbjI3ODc6XHRcdFx0c3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbjI3ODg6XHR7XG4yNzg5Olx0XHRpbnQgZXJyO1xuMjc5MDpcdFxuMjc5MTpcdFx0LyogSW52b2tlIHRoZSBob29rLiAqL1xuMjc5MjpcdFx0ZXJyID0gdmZzX21tYXBfcHJlcGFyZShtYXAtXHUwMDNlZmlsZSwgZGVzYyk7XG4yNzkzOlx0XHRpZiAoZXJyKVxuMjc5NDpcdFx0XHRyZXR1cm4gZXJyO1xuMjc5NTpcdFxuMjc5NjpcdFx0LyogSXQmIzM5O3MgaW52YWxpZCBmb3IgbW1hcF9wcmVwcmFyZSBob29rcyB0byBjbGVhciB2bV9vcHMuICovXG4yNzk3Olx0XHRpZiAoIWRlc2MtXHUwMDNldm1fb3BzKVxuMjc5ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3OTk6XHRcbjI4MDA6XHRcdGVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTtcbjI4MDE6XHRcdGlmIChlcnIpXG4yODAyOlx0XHRcdHJldHVybiBlcnI7XG4yODAzOlx0XG4yODA0Olx0XHQvKiBVcGRhdGUgZmllbGRzIHBlcm1pdHRlZCB0byBiZSBjaGFuZ2VkLiAqL1xuMjgwNTpcdFx0bWFwLVx1MDAzZXBnb2ZmID0gZGVzYy1cdTAwM2VwZ29mZjtcbjI4MDY6XHRcdGlmIChkZXNjLVx1MDAzZXZtX2ZpbGUgIT0gbWFwLVx1MDAzZWZpbGUpIHtcbjI4MDc6XHRcdFx0bWFwLVx1MDAzZWZpbGVfZG9lc250X25lZWRfZ2V0ID0gdHJ1ZTtcbjI4MDg6XHRcdFx0bWFwLVx1MDAzZWZpbGUgPSBkZXNjLVx1MDAzZXZtX2ZpbGU7XG4yODA5Olx0XHR9XG4yODEwOlx0XHRtYXAtXHUwMDNldm1hX2ZsYWdzID0gZGVzYy1cdTAwM2V2bWFfZmxhZ3M7XG4yODExOlx0XHRtYXAtXHUwMDNlcGFnZV9wcm90ID0gZGVzYy1cdTAwM2VwYWdlX3Byb3Q7XG4yODEyOlx0XHQvKiBVc2VyLWRlZmluZWQgZmllbGRzLiAqL1xuMjgxMzpcdFx0bWFwLVx1MDAzZXZtX29wcyA9IGRlc2MtXHUwMDNldm1fb3BzO1xuMjgxNDpcdFx0bWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGRlc2MtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuMjgxNTpcdFxuMjgxNjpcdFx0LypcbjI4MTc6XHRcdCAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZ1xuMjgxODpcdFx0ICogYW5vbnltb3VzIG1hcHBpbmdzLiBSYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVzZSBtYXBwaW5ncyB0byBiZSBvZGRcbjI4MTk6XHRcdCAqIG91dGxpZXJzLCBzaW1wbHkgbWFrZSB0aGVtIHRydWx5IGFub255bW91cy5cbjI4MjA6XHRcdCAqL1xuMjgyMTpcdFx0aWYgKG1hcF9pc19wcml2YXRlKG1hcCkgXHUwMDI2XHUwMDI2IGZpbGVfaXNfZGV2X3plcm8obWFwLVx1MDAzZWZpbGUpKVxuMjgyMjpcdFx0XHRtYXBfc2V0X2Fub24obWFwKTtcbjI4MjM6XHRcbjI4MjQ6XHRcdHJldHVybiAwO1xuMjgyNTpcdH1cbjI4MjY6XHRcbjI4Mjc6XHRzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yODI4Olx0XHRcdHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4yODI5Olx0e1xuMjgzMDpcdFx0dm1hLVx1MDAzZXZtX29wcyA9IG1hcC1cdTAwM2V2bV9vcHM7XG4yODMxOlx0XHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbjI4MzI6XHR9XG4yODMzOlx0XG4yODM0Olx0LypcbjI4MzU6XHQgKiBBcmUgd2UgZ3VhcmFudGVlZCBubyBkcml2ZXIgY2FuIGNoYW5nZSBzdGF0ZSBzdWNoIGFzIHRvIHByZWNsdWRlIEtTTSBtZXJnaW5nP1xuMjgzNjpcdCAqIElmIHNvLCBsZXQmIzM5O3Mgc2V0IHRoZSBLU00gbWVyZ2VhYmxlIGZsYWcgZWFybHkgc28gd2UgZG9uJiMzOTt0IGJyZWFrIFZNQSBtZXJnaW5nLlxuMjgzNzpcdCAqL1xuMjgzODpcdHN0YXRpYyBib29sIGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4yODM5Olx0e1xuMjg0MDpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBtYXAtXHUwMDNlZmlsZTtcbjI4NDE6XHRcbjI4NDI6XHRcdC8qIEFub255bW91cyBtYXBwaW5ncyBoYXZlIG5vIGRyaXZlciB3aGljaCBjYW4gY2hhbmdlIHRoZW0uICovXG4yODQzOlx0XHRpZiAoIWZpbGUpXG4yODQ0Olx0XHRcdHJldHVybiB0cnVlO1xuMjg0NTpcdFxuMjg0NjpcdFx0LypcbjI4NDc6XHRcdCAqIElmIC5tbWFwX3ByZXBhcmUoKSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGRyaXZlciB3aWxsIGhhdmUgYWxyZWFkeVxuMjg0ODpcdFx0ICogbWFuaXB1bGF0ZWQgc3RhdGUgcHJpb3IgdG8gdXBkYXRpbmcgS1NNIGZsYWdzLiBTbyBubyBuZWVkIHRvIHdvcnJ5XG4yODQ5Olx0XHQgKiBhYm91dCBtbWFwIGNhbGxiYWNrcyBtb2RpZnlpbmcgVk1BIGZsYWdzIGFmdGVyIHRoZSBLU00gZmxhZyBoYXMgYmVlblxuMjg1MDpcdFx0ICogdXBkYXRlZCBoZXJlLCB3aGljaCBjb3VsZCBvdGhlcndpc2UgYWZmZWN0IEtTTSBlbGlnaWJpbGl0eS5cbjI4NTE6XHRcdCAqL1xuMjg1MjpcdFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VtbWFwX3ByZXBhcmUpXG4yODUzOlx0XHRcdHJldHVybiB0cnVlO1xuMjg1NDpcdFxuMjg1NTpcdFx0Lyogc2htZW0gaXMgc2FmZS4gKi9cbjI4NTY6XHRcdGlmIChzaG1lbV9maWxlKGZpbGUpKVxuMjg1NzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjI4NTg6XHRcbjI4NTk6XHRcdC8qIEFueSBvdGhlciAubW1hcCBjYWxsYmFjayBpcyBub3Qgc2FmZS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBNZW1vcnkgTWFwcGluZyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgX19tbWFwX3JlZ2lvbmAgYWdhaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3Mgbm90IGp1c3QgaXNvbGF0ZSBvbiB0aGF0IGZ1bmN0aW9uLCBidXQgYnJvYWRlbiB0aGUgc2NvcGUgc2xpZ2h0bHkuIFRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIG9mIGNvZGUuIFdoYXQgY2FsbHMgYF9fbW1hcF9yZWdpb25gPyBXaGF0IGRhdGEgZG9lcyBpdCBvcGVyYXRlIG9uPyBXaGF0IGZvbGxvd3MgaXRzIGV4ZWN1dGlvbj8gSSYjMzk7bSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBlcnJvciBjaGVja3MsIG9yIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucyBpbiBpdHMgdmljaW5pdHk/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBzaW1wbHkgbW9kaWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIG1hcHBpbmc/IEEgZGVlcGVyIGRpdmUgYXJvdW5kIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gd2lsbCBnaXZlIGEgbXVjaCBjbGVhcmVyIHBpY3R1cmUuIEkmIzM5O20gYWZ0ZXIgdGhlIGJpZ2dlciBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg4MDpcdFx0fTtcbjI4ODE6XHRcdGJvb2wgYWxsb2NhdGVkX25ldyA9IGZhbHNlO1xuMjg4MjpcdFx0aW50IGVycm9yO1xuMjg4MzpcdFxuMjg4NDpcdFx0bWFwLmNoZWNrX2tzbV9lYXJseSA9IGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KFx1MDAyNm1hcCk7XG4yODg1Olx0XG4yODg2Olx0XHRlcnJvciA9IF9fbW1hcF9zZXR1cChcdTAwMjZtYXAsIFx1MDAyNmRlc2MsIHVmKTtcbjI4ODc6XHRcdGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IGhhdmVfbW1hcF9wcmVwYXJlKVxuMjg4ODpcdFx0XHRlcnJvciA9IGNhbGxfbW1hcF9wcmVwYXJlKFx1MDAyNm1hcCwgXHUwMDI2ZGVzYyk7XG4yODg5Olx0XHRpZiAoZXJyb3IpXG4yODkwOlx0XHRcdGdvdG8gYWJvcnRfbXVubWFwO1xuMjg5MTpcdFxuMjg5MjpcdFx0aWYgKG1hcC5jaGVja19rc21fZWFybHkpXG4yODkzOlx0XHRcdHVwZGF0ZV9rc21fZmxhZ3MoXHUwMDI2bWFwKTtcbjI4OTQ6XHRcbjI4OTU6XHRcdC8qIEF0dGVtcHQgdG8gbWVyZ2Ugd2l0aCBhZGphY2VudCBWTUFzLi4uICovXG4yODk2Olx0XHRpZiAobWFwLnByZXYgfHwgbWFwLm5leHQpIHtcbjI4OTc6XHRcdFx0Vk1HX01NQVBfU1RBVEUodm1nLCBcdTAwMjZtYXAsIC8qIHZtYSA9ICovIE5VTEwpO1xuMjg5ODpcdFxuMjg5OTpcdFx0XHR2bWEgPSB2bWFfbWVyZ2VfbmV3X3JhbmdlKFx1MDAyNnZtZyk7XG4yOTAwOlx0XHR9XG4yOTAxOlx0XG4yOTAyOlx0XHQvKiAuLi5idXQgaWYgd2UgY2FuJiMzOTt0LCBhbGxvY2F0ZSBhIG5ldyBWTUEuICovXG4yOTAzOlx0XHRpZiAoIXZtYSkge1xuMjkwNDpcdFx0XHRlcnJvciA9IF9fbW1hcF9uZXdfdm1hKFx1MDAyNm1hcCwgXHUwMDI2dm1hLCBcdTAwMjZkZXNjLmFjdGlvbik7XG4yOTA1Olx0XHRcdGlmIChlcnJvcilcbjI5MDY6XHRcdFx0XHRnb3RvIHVuYWNjdF9lcnJvcjtcbjI5MDc6XHRcdFx0YWxsb2NhdGVkX25ldyA9IHRydWU7XG4yOTA4Olx0XHR9XG4yOTA5Olx0XG4yOTEwOlx0XHRpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgXHUwMDI2XHUwMDI2ICFtYXBfaXNfYW5vbihcdTAwMjZtYXApKVxuMjkxMTpcdFx0XHRzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHModm1hLCBcdTAwMjZtYXApO1xuMjkxMjpcdFxuMjkxMzpcdFx0X19tbWFwX2NvbXBsZXRlKFx1MDAyNm1hcCwgdm1hKTtcbjI5MTQ6XHRcbjI5MTU6XHRcdGlmIChoYXZlX21tYXBfcHJlcGFyZSBcdTAwMjZcdTAwMjYgYWxsb2NhdGVkX25ldykge1xuMjkxNjpcdFx0XHRlcnJvciA9IG1tYXBfYWN0aW9uX2NvbXBsZXRlKHZtYSwgXHUwMDI2ZGVzYy5hY3Rpb24sXG4yOTE3Olx0XHRcdFx0XHRcdCAgICAgLyppc19jb21wYXQ9Ki9mYWxzZSk7XG4yOTE4Olx0XHRcdGlmIChlcnJvcilcbjI5MTk6XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4yOTIwOlx0XHR9XG4yOTIxOlx0XG4yOTIyOlx0XHRyZXR1cm4gYWRkcjtcbjI5MjM6XHRcbjI5MjQ6XHRcdC8qIEFjY291bnRpbmcgd2FzIGRvbmUgYnkgX19tbWFwX3NldHVwKCkuICovXG4yOTI1Olx0dW5hY2N0X2Vycm9yOlxuMjkyNjpcdFx0aWYgKG1hcC5jaGFyZ2VkKVxuMjkyNzpcdFx0XHR2bV91bmFjY3RfbWVtb3J5KG1hcC5jaGFyZ2VkKTtcbjI5Mjg6XHRhYm9ydF9tdW5tYXA6XG4yOTI5Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU2MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG1tYXBfZmlsZWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgbW1hcF9maWxlYCwgc28gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgaXRzIGRlZmluaXRpb24gaW4gYG1tL2ludGVybmFsLmhgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwYXJhbWV0ZXJzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0ICpjYWxsKiBgbW1hcF9maWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBjbHVlcyB3aWxsIGxpZSDigJMgc2VlaW5nIGhvdyBpdCYjMzk7cyB1c2VkIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBpbnNpZ2h0IGludG8gaXRzIGludGVuZGVkIGJlaGF2aW9yIGFuZCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYG1tYXBfZmlsZWAgb3BlcmF0ZXMuIEtub3dpbmcgdGhlIGNhbGxlcnMgaXMgKmtleSogdG8gZ3Jhc3BpbmcgaXRzIG92ZXJhbGwgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tYXBfZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy85cC92ZnNfZmlsZS5jLTMwLVxuZnMvOXAvdmZzX2ZpbGUuYzozMTpzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHY5ZnNfbW1hcF9maWxlX3ZtX29wcztcbmZzLzlwL3Zmc19maWxlLmMtMzItXG4tLVxuZnMvOXAvdmZzX2ZpbGUuYz00NjI9djlmc19maWxlX21tYXBfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLS1cbmZzLzlwL3Zmc19maWxlLmMtNDc3LVx0aWYgKCFyZXR2YWwpXG5mcy85cC92ZnNfZmlsZS5jOjQ3ODpcdFx0ZGVzYy1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2OWZzX21tYXBfZmlsZV92bV9vcHM7XG5mcy85cC92ZnNfZmlsZS5jLTQ3OS1cbi0tXG5mcy85cC92ZnNfZmlsZS5jPTQ4OT1zdGF0aWMgdm9pZCB2OWZzX21tYXBfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuZnMvOXAvdmZzX2ZpbGUuYy01MDEtXG5mcy85cC92ZnNfZmlsZS5jOjUwMjpzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHY5ZnNfbW1hcF9maWxlX3ZtX29wcyA9IHtcbmZzLzlwL3Zmc19maWxlLmMtNTAzLVx0LmNsb3NlID0gdjlmc19tbWFwX3ZtX2Nsb3NlLFxuLS1cbmZzL2JhY2tpbmctZmlsZS5jPTMyOT1pbnQgYmFja2luZ19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL2JhY2tpbmctZmlsZS5jLTMzNy1cbmZzL2JhY2tpbmctZmlsZS5jOjMzODpcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcbmZzL2JhY2tpbmctZmlsZS5jLTMzOS1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZnMvYmluZm10X2VsZi5jPTY0Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb2FkX2VsZl9pbnRlcnAoc3RydWN0IGVsZmhkciAqaW50ZXJwX2VsZl9leCxcbi0tXG5mcy9iaW5mbXRfZWxmLmMtNjYwLVx0XHRnb3RvIG91dDtcbmZzL2JpbmZtdF9lbGYuYzo2NjE6XHRpZiAoIWNhbl9tbWFwX2ZpbGUoaW50ZXJwcmV0ZXIpKVxuZnMvYmluZm10X2VsZi5jLTY2Mi1cdFx0Z290byBvdXQ7XG4tLVxuZnMvYmluZm10X2VsZi5jPTgyOT1zdGF0aWMgaW50IGxvYWRfZWxmX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9lbGYuYy04NjItXHRcdGdvdG8gb3V0O1xuZnMvYmluZm10X2VsZi5jOjg2MzpcdGlmICghY2FuX21tYXBfZmlsZShicHJtLVx1MDAzZWZpbGUpKVxuZnMvYmluZm10X2VsZi5jLTg2NC1cdFx0Z290byBvdXQ7XG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jPTEwND1zdGF0aWMgaW50IGlzX2VsZihzdHJ1Y3QgZWxmaGRyICpoZHIsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0xMTEtXHRcdHJldHVybiAwO1xuZnMvYmluZm10X2VsZl9mZHBpYy5jOjExMjpcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0xMTMtXHRcdHJldHVybiAwO1xuLS1cbmZzL2NvZGEvZmlsZS5jPTE1MT1jb2RhX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqY29kYV9maWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5mcy9jb2RhL2ZpbGUuYy0xNjItXG5mcy9jb2RhL2ZpbGUuYzoxNjM6XHRpZiAoIWNhbl9tbWFwX2ZpbGUoaG9zdF9maWxlKSlcbmZzL2NvZGEvZmlsZS5jLTE2NC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZnMvZWNyeXB0ZnMvZmlsZS5jPTE4Nj1zdGF0aWMgaW50IGVjcnlwdGZzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmZzL2VjcnlwdGZzL2ZpbGUuYy0xOTMtXHQgKi9cbmZzL2VjcnlwdGZzL2ZpbGUuYzoxOTQ6XHRpZiAoIWNhbl9tbWFwX2ZpbGUobG93ZXJfZmlsZSkpXG5mcy9lY3J5cHRmcy9maWxlLmMtMTk1LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5mcy9mMmZzL2YyZnMuaD0zNjM1PXN0YXRpYyBpbmxpbmUgaW50IGYyZnNfZXhpc3RfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2YyZnMvZjJmcy5oLTM2MzktXG5mcy9mMmZzL2YyZnMuaDozNjQwOnN0YXRpYyBpbmxpbmUgaW50IGYyZnNfaXNfbW1hcF9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9mMmZzL2YyZnMuaC0zNjQxLXtcbi0tXG5mcy9mMmZzL2YyZnMuaD00ODcxPXN0YXRpYyBpbmxpbmUgYm9vbCBmMmZzX2Rpc2FibGVfY29tcHJlc3NlZF9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZjJmcy9mMmZzLmgtNDg4MC1cdH1cbmZzL2YyZnMvZjJmcy5oOjQ4ODE6XHRpZiAoZjJmc19pc19tbWFwX2ZpbGUoaW5vZGUpIHx8IGF0b21pY19yZWFkKFx1MDAyNmZpLVx1MDAzZXdyaXRlYmFjaykgfHxcbmZzL2YyZnMvZjJmcy5oLTQ4ODItXHRcdChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IEYyRlNfSEFTX0JMT0NLUyhpbm9kZSkpKSB7XG4tLVxuZnMvZjJmcy9mMmZzLmg9NTA0NT1zdGF0aWMgaW5saW5lIGJvb2wgZjJmc19tYXlfY29tcHJlc3Moc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9mMmZzL2YyZnMuaC01MDQ4LVx0XHRmMmZzX2lzX2F0b21pY19maWxlKGlub2RlKSB8fCBmMmZzX2hhc19pbmxpbmVfZGF0YShpbm9kZSkgfHxcbmZzL2YyZnMvZjJmcy5oOjUwNDk6XHRcdGYyZnNfaXNfbW1hcF9maWxlKGlub2RlKSlcbmZzL2YyZnMvZjJmcy5oLTUwNTAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9mMmZzL2ZpbGUuYz00NzI1PXN0YXRpYyBpbnQgZjJmc19pb2Nfc2V0X2NvbXByZXNzX29wdGlvbihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZjJmcy9maWxlLmMtNDc1OC1cbmZzL2YyZnMvZmlsZS5jOjQ3NTk6XHRpZiAoZjJmc19pc19tbWFwX2ZpbGUoaW5vZGUpIHx8IGdldF9kaXJ0eV9wYWdlcyhpbm9kZSkpIHtcbmZzL2YyZnMvZmlsZS5jLTQ3NjAtXHRcdHJldCA9IC1FQlVTWTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MTk5ND1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7XG4tLVxuaW5jbHVkZS9saW51eC9mcy5oLTIwMzktLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cbmluY2x1ZGUvbGludXgvZnMuaDoyMDQwOnN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuaW5jbHVkZS9saW51eC9mcy5oLTIwNDEte1xuLS1cbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oPTIwMT1MU01fSE9PSyhpbnQsIDAsIG1tYXBfYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyKVxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg6MjAyOkxTTV9IT09LKGludCwgMCwgbW1hcF9maWxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyByZXFwcm90LFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgtMjAzLVx0IHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDc5PWludCBzZWN1cml0eV9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00ODAtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0ODE6aW50IHNlY3VyaXR5X21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQ4Mi1cdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTE2Nj1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTE3Mi1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxMTczOnN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNzQtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxuaXBjL3NobS5jPTE1MjE9bG9uZyBkb19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnLFxuLS1cbmlwYy9zaG0uYy0xNjQ1LVxuaXBjL3NobS5jOjE2NDY6XHRlcnIgPSBzZWN1cml0eV9tbWFwX2ZpbGUoZmlsZSwgcHJvdCwgZmxhZ3MpO1xuaXBjL3NobS5jLTE2NDctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTM0NT1CVEZfSUQoZnVuYywgYnBmX2xzbV9wYXRoX2Nob3duKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jLTM0Ny1cbmtlcm5lbC9icGYvYnBmX2xzbS5jOjM0ODpCVEZfSUQoZnVuYywgYnBmX2xzbV9tbWFwX2ZpbGUpXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0zNDktQlRGX0lEKGZ1bmMsIGJwZl9sc21fbmV0bGlua19zZW5kKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jLTktLypcbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jOjEwOiAqIFN0cm9uZyBkZWZpbml0aW9uIG9mIHRoZSBtbWFwX2ZpbGUoKSBCUEYgTFNNIGhvb2suIFRoZSBfX251bGxhYmxlIHN1ZmZpeCBvblxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmMtMTEtICogdGhlIHN0cnVjdCBmaWxlIHBvaW50ZXIgcGFyYW1ldGVyIG5hbWUgbWFya3MgaXQgYXMgUFRSX01BWUJFX05VTEwuIFRoaXNcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc21fcHJvdG8uYy0xNC0gKi9cbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jOjE1OmludCBicGZfbHNtX21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZV9fbnVsbGFibGUsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCxcbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jLTE2LVx0XHQgICAgICB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxubW0vaW50ZXJuYWwuaD0yMTk9c3RhdGljIGlubGluZSB2b2lkICpmb2xpb19yYXdfbWFwcGluZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ludGVybmFsLmgtMjM1LSAqL1xubW0vaW50ZXJuYWwuaDoyMzY6c3RhdGljIGlubGluZSBpbnQgbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL2ludGVybmFsLmgtMjM3LXtcbi0tXG5tbS9tbWFwLmM9MzM4PXVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21tYXAuYy00ODQtXG5tbS9tbWFwLmM6NDg1Olx0XHRcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcbm1tL21tYXAuYy00ODYtXHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5tbS9tbWFwLmM9MTEwMT1TWVNDQUxMX0RFRklORTUocmVtYXBfZmlsZV9wYWdlcywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIHNpemUsXG4tLVxubW0vbW1hcC5jLTExNTctXHQvKiBDYWxsIG91dHNpZGUgbW1hcF9sb2NrIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBjYWxsZXJzLiAqL1xubW0vbW1hcC5jOjExNTg6XHRyZXQgPSBzZWN1cml0eV9tbWFwX2ZpbGUoZmlsZSwgcHJvdCwgZmxhZ3MpO1xubW0vbW1hcC5jLTExNTktXHRpZiAocmV0KSB7XG4tLVxubW0vbm9tbXUuYz02OTA9c3RhdGljIGludCB2YWxpZGF0ZV9tbWFwX3JlcXVlc3Qoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vbm9tbXUuYy03MjItXHRcdC8qIGZpbGVzIG11c3Qgc3VwcG9ydCBtbWFwICovXG5tbS9ub21tdS5jOjcyMzpcdFx0aWYgKCFjYW5fbW1hcF9maWxlKGZpbGUpKVxubW0vbm9tbXUuYy03MjQtXHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxubW0vbm9tbXUuYz04OTM9c3RhdGljIGludCBkb19tbWFwX3NoYXJlZF9maWxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL25vbW11LmMtODk2LVxubW0vbm9tbXUuYzo4OTc6XHRyZXQgPSBtbWFwX2ZpbGUodm1hLVx1MDAzZXZtX2ZpbGUsIHZtYSk7XG5tbS9ub21tdS5jLTg5OC1cdGlmIChyZXQgPT0gMCkge1xuLS1cbm1tL25vbW11LmM9OTE0PXN0YXRpYyBpbnQgZG9fbW1hcF9wcml2YXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL25vbW11LmMtOTI5LVx0aWYgKGNhcGFiaWxpdGllcyBcdTAwMjYgTk9NTVVfTUFQX0RJUkVDVCkge1xubW0vbm9tbXUuYzo5MzA6XHRcdHJldCA9IG1tYXBfZmlsZSh2bWEtXHUwMDNldm1fZmlsZSwgdm1hKTtcbm1tL25vbW11LmMtOTMxLVx0XHQvKiBzaG91bGRuJiMzOTt0IHJldHVybiBzdWNjZXNzIGlmIHdlJiMzOTtyZSBub3Qgc2hhcmluZyAqL1xuLS1cbm1tL3V0aWwuYz01NjU9dW5zaWduZWQgbG9uZyB2bV9tbWFwX3Bnb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vdXRpbC5jLTU3NC1cbm1tL3V0aWwuYzo1NzU6XHRyZXQgPSBzZWN1cml0eV9tbWFwX2ZpbGUoZmlsZSwgcHJvdCwgZmxhZyk7XG5tbS91dGlsLmMtNTc2LVx0aWYgKCFyZXQpXG4tLVxubW0vdm1hLmM9MjUxOT1zdGF0aWMgaW50IF9fbW1hcF9zZXR1cChzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxuLS1cbm1tL3ZtYS5jLTI1NzEtXHQgKiBjYW5ub3QgcmFjZSB3aXRoIHRoZSBmcmVlaW5nIGxhdGVyIGluIHRoZSB0cnVuY2F0ZSBzY2VuYXJpby5cbm1tL3ZtYS5jOjI1NzI6XHQgKiBUaGlzIGlzIGFsc28gbmVlZGVkIGZvciBtbWFwX2ZpbGUoKSwgd2hpY2ggaXMgd2h5IHZtX29wc1xubW0vdm1hLmMtMjU3My1cdCAqIGNsb3NlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cbi0tXG5tbS92bWEuYz0yNTgyPXN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuLS1cbm1tL3ZtYS5jLTI1OTQtXG5tbS92bWEuYzoyNTk1Olx0ZXJyb3IgPSBtbWFwX2ZpbGUodm1hLVx1MDAzZXZtX2ZpbGUsIHZtYSk7XG5tbS92bWEuYy0yNTk2LVx0aWYgKGVycm9yKSB7XG4tLVxuc2NyaXB0cy9yZWNvcmRtY291bnQuYz0xNTE9c3RhdGljIHZvaWQgKiB1bWFsbG9jKHNpemVfdCBzaXplKVxuLS1cbnNjcmlwdHMvcmVjb3JkbWNvdW50LmMtMTc1LSAqL1xuc2NyaXB0cy9yZWNvcmRtY291bnQuYzoxNzY6c3RhdGljIHZvaWQgKm1tYXBfZmlsZShjaGFyIGNvbnN0ICpmbmFtZSlcbnNjcmlwdHMvcmVjb3JkbWNvdW50LmMtMTc3LXtcbi0tXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jPTUxMT1zdGF0aWMgaW50IGRvX2ZpbGUoY2hhciBjb25zdCAqY29uc3QgZm5hbWUpXG4tLVxuc2NyaXB0cy9yZWNvcmRtY291bnQuYy01MTYtXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jOjUxNzpcdGVoZHIgPSBtbWFwX2ZpbGUoZm5hbWUpO1xuc2NyaXB0cy9yZWNvcmRtY291bnQuYy01MTgtXHRpZiAoIWVoZHIpXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9NTYxPXN0YXRpYyBpbnQgY29tbW9uX21tYXAoY29uc3QgY2hhciAqb3AsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtNTgyLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6NTgzOnN0YXRpYyBpbnQgYXBwYXJtb3JfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy01ODQtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jPTE3Njc9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3QgYXBwYXJtb3JfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTc5NC1cdExTTV9IT09LX0lOSVQoZmlsZV9mcmVlX3NlY3VyaXR5LCBhcHBhcm1vcl9maWxlX2ZyZWVfc2VjdXJpdHkpLFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTc5NTpcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBhcHBhcm1vcl9tbWFwX2ZpbGUpLFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTc5Ni1cdExTTV9IT09LX0lOSVQoZmlsZV9tcHJvdGVjdCwgYXBwYXJtb3JfZmlsZV9tcHJvdGVjdCksXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jPTEwNj1zdGF0aWMgaW50IG1tYXBfdmlvbGF0aW9uX2NoZWNrKGVudW0gaW1hX2hvb2tzIGZ1bmMsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYy0xMjEtXHRcdGludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX0RBVEEsIGlub2RlLCAqcGF0aG5hbWUsXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmM6MTIyOlx0XHRcdFx0ICAgIFwmIzM0O21tYXBfZmlsZVwmIzM0OywgXCYjMzQ7bW1hcHBlZF93cml0ZXJzXCYjMzQ7LCByYywgMCk7XG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMtMTIzLVx0fVxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYz0xMzUzPXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IGltYV9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMtMTM1OS1cdExTTV9IT09LX0lOSVQoZmlsZV9yZWxlYXNlLCBpbWFfZmlsZV9mcmVlKSxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYzoxMzYwOlx0TFNNX0hPT0tfSU5JVChtbWFwX2ZpbGUsIGltYV9maWxlX21tYXApLFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jLTEzNjEtXHRMU01fSE9PS19JTklUKGZpbGVfbXByb3RlY3QsIGltYV9maWxlX21wcm90ZWN0KSxcbi0tXG5zZWN1cml0eS9pcGUvaG9va3MuYz01Mz1pbnQgaXBlX2Jwcm1fY3JlZHNfZm9yX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5zZWN1cml0eS9pcGUvaG9va3MuYy02NS0vKipcbnNlY3VyaXR5L2lwZS9ob29rcy5jOjY2OiAqIGlwZV9tbWFwX2ZpbGUoKSAtIGlwZSBzZWN1cml0eSBob29rIGZ1bmN0aW9uIGZvciBtbWFwIGNoZWNrLlxuc2VjdXJpdHkvaXBlL2hvb2tzLmMtNjctICogQGY6IEZpbGUgYmVpbmcgbW1hcCYjMzk7ZC4gQ2FuIGJlIE5VTEwgaW4gdGhlIGNhc2Ugb2YgYW5vbnltb3VzIG1lbW9yeS5cbi0tXG5zZWN1cml0eS9pcGUvaG9va3MuYy03OS0gKi9cbnNlY3VyaXR5L2lwZS9ob29rcy5jOjgwOmludCBpcGVfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBsb25nIHJlcXByb3QgX19hbHdheXNfdW51c2VkLFxuc2VjdXJpdHkvaXBlL2hvb2tzLmMtODEtXHRcdCAgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbnNlY3VyaXR5L2lwZS9ob29rcy5oPTI4PWludCBpcGVfYnBybV9jcmVkc19mb3JfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTtcbnNlY3VyaXR5L2lwZS9ob29rcy5oLTI5LVxuc2VjdXJpdHkvaXBlL2hvb2tzLmg6MzA6aW50IGlwZV9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCwgdW5zaWduZWQgbG9uZyBwcm90LFxuc2VjdXJpdHkvaXBlL2hvb2tzLmgtMzEtXHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncyk7XG4tLVxuc2VjdXJpdHkvaXBlL2lwZS5jPTQ4PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IGlwZV9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9pcGUvaXBlLmMtNTAtXHRMU01fSE9PS19JTklUKGJwcm1fY3JlZHNfZm9yX2V4ZWMsIGlwZV9icHJtX2NyZWRzX2Zvcl9leGVjKSxcbnNlY3VyaXR5L2lwZS9pcGUuYzo1MTpcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBpcGVfbW1hcF9maWxlKSxcbnNlY3VyaXR5L2lwZS9pcGUuYy01Mi1cdExTTV9IT09LX0lOSVQoZmlsZV9tcHJvdGVjdCwgaXBlX2ZpbGVfbXByb3RlY3QpLFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MjUzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1hcF9wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTY3LS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNTY4OiAqIHNlY3VyaXR5X21tYXBfZmlsZSgpIC0gQ2hlY2sgaWYgbW1hcCYjMzk7aW5nIGEgZmlsZSBpcyBhbGxvd2VkXG5zZWN1cml0eS9zZWN1cml0eS5jLTI1NjktICogQGZpbGU6IGZpbGVcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI1NzctICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjI1Nzg6aW50IHNlY3VyaXR5X21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTc5LVx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjU4MC17XG5zZWN1cml0eS9zZWN1cml0eS5jOjI1ODE6XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhtbWFwX2ZpbGUsIGZpbGUsIHByb3QsIG1tYXBfcHJvdChmaWxlLCBwcm90KSxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjU4Mi1cdFx0XHQgICAgIGZsYWdzKTtcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI1OTEtICogQ2hlY2sgcGVybWlzc2lvbnMgZm9yIGEgbW1hcCBvcGVyYXRpb24gb24gYSBzdGFja2VkIGZpbGVzeXN0ZW0uICBUaGlzIGhvb2tcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjU5MjogKiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHNlY3VyaXR5X21tYXBfZmlsZSgpIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgYXV0aG9yaXppbmdcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjU5My0gKiB0aGUgbW1hcCBvbiBAYmFja2luZ19maWxlLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgbW1hcCBvcGVyYXRpb25cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDAyNz1zdGF0aWMgaW50IHNlbGludXhfbW1hcF9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDAzOS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDQwOnN0YXRpYyBpbnQgc2VsaW51eF9tbWFwX2ZpbGVfY29tbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA0MS1cdFx0XHRcdCAgICBib29sIHNoYXJlZCwgYm9vbCBtb3VudGVyX2NoZWNrKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDU4LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwNTk6c3RhdGljIGludCBzZWxpbnV4X21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDYwLVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyByZXFwcm90IF9fYWx3YXlzX3VudXNlZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA2Mi17XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NDA2MzpcdHJldHVybiBzZWxpbnV4X21tYXBfZmlsZV9jb21tb24oZmlsZSwgcHJvdCxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDY0LVx0XHRcdFx0XHQoZmxhZ3MgXHUwMDI2IE1BUF9UWVBFKSA9PSBNQVBfU0hBUkVELFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDczLSAqXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NDA3NDogKiBUaGlzIGlzIGNhbGxlZCBhZnRlciBzZWxpbnV4X21tYXBfZmlsZSgpIG9uIHN0YWNrZWQgZmlsZXN5c3RlbXMsIGFuZCBpdFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwNzUtICogaXMgdGhpcyBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgYWNjZXNzIHRvIEBiYWNraW5nX2ZpbGUgYW5kXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQwODM9c3RhdGljIGludCBzZWxpbnV4X21tYXBfYmFja2luZ19maWxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDk2LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwOTc6XHRyZXR1cm4gc2VsaW51eF9tbWFwX2ZpbGVfY29tbW9uKGJhY2tpbmdfZmlsZSwgcHJvdCxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDk4LVx0XHRcdFx0XHR2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzU2MD1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjM5LVx0TFNNX0hPT0tfSU5JVChmaWxlX2lvY3RsX2NvbXBhdCwgc2VsaW51eF9maWxlX2lvY3RsX2NvbXBhdCksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzY0MDpcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBzZWxpbnV4X21tYXBfZmlsZSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzY0MS1cdExTTV9IT09LX0lOSVQobW1hcF9iYWNraW5nX2ZpbGUsIHNlbGludXhfbW1hcF9iYWNraW5nX2ZpbGUpLFxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTE4MDE9c3RhdGljIGludCBzbWFja19maWxlX2ZjbnRsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTE4MzUtLyoqXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxODM2OiAqIHNtYWNrX21tYXBfZmlsZSAtIENoZWNrIHBlcm1pc3Npb25zIGZvciBhIG1tYXAgb3BlcmF0aW9uLlxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTgzNy0gKiBAZmlsZTogY29udGFpbnMgdGhlIGZpbGUgc3RydWN0dXJlIGZvciBmaWxlIHRvIG1hcCAobWF5IGJlIE5VTEwpLlxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTE4NDUtICovXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxODQ2OnN0YXRpYyBpbnQgc21hY2tfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTg0Ny1cdFx0XHQgICB1bnNpZ25lZCBsb25nIHJlcXByb3QsIHVuc2lnbmVkIGxvbmcgcHJvdCxcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz01MTU1PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNtYWNrX2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTUxOTgtXHRMU01fSE9PS19JTklUKGZpbGVfZmNudGwsIHNtYWNrX2ZpbGVfZmNudGwpLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6NTE5OTpcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBzbWFja19tbWFwX2ZpbGUpLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTIwMC1cdExTTV9IT09LX0lOSVQobW1hcF9hZGRyLCBjYXBfbW1hcF9hZGRyKSxcbi0tXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM9NDg9c3RhdGljIGludCB0ZXN0X19QRVJGX1JFQ09SRChzdHJ1Y3QgdGVzdF9zdWl0ZSAqdGVzdCBfX21heWJlX3VudXNlZCwgaW50IHN1YnRlc3QgX19tYXliZV91bnVzZWQpXG4tLVxudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jLTY0LVx0Y29uc3QgY2hhciAqYXJndltdID0geyBjbWQsIFwmIzM0OzFcJiMzNDssIE5VTEwsIH07XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6NjU6XHRjaGFyICpibmFtZSwgKm1tYXBfZmlsZW5hbWU7XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtNjYtXHR1NjQgcHJldl90aW1lID0gMDtcbi0tXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjczLVx0XHRcdFx0Y2FzZSBQRVJGX1JFQ09SRF9NTUFQOlxudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jOjI3NDpcdFx0XHRcdFx0bW1hcF9maWxlbmFtZSA9IGV2ZW50LVx1MDAzZW1tYXAuZmlsZW5hbWU7XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjc1LVx0XHRcdFx0XHRnb3RvIGNoZWNrX2JuYW1lO1xudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jLTI3Ni1cdFx0XHRcdGNhc2UgUEVSRl9SRUNPUkRfTU1BUDI6XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6Mjc3Olx0XHRcdFx0XHRtbWFwX2ZpbGVuYW1lID0gZXZlbnQtXHUwMDNlbW1hcDIuZmlsZW5hbWU7XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjc4LVx0XHRcdFx0Y2hlY2tfYm5hbWU6XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6Mjc5Olx0XHRcdFx0XHRibmFtZSA9IHN0cnJjaHIobW1hcF9maWxlbmFtZSwgJiMzOTsvJiMzOTspO1xudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jLTI4MC1cdFx0XHRcdFx0aWYgKGJuYW1lICE9IE5VTEwpIHtcbi0tXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjg5LVx0XHRcdFx0XHR9IGVsc2UgaWYgKCFmb3VuZF92ZHNvX21tYXApXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6MjkwOlx0XHRcdFx0XHRcdGZvdW5kX3Zkc29fbW1hcCA9ICFzdHJjbXAobW1hcF9maWxlbmFtZSwgXCYjMzQ7W3Zkc29dXCYjMzQ7KTtcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy0yOTEtXHRcdFx0XHRcdGJyZWFrO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYz0xNTU9X19uYWtlZCBpbnQgZGlzYWJsZWRfaG9va190ZXN0Myh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jLTE2Mi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYzoxNjM6U0VDKFwmIzM0O2xzbS9tbWFwX2ZpbGVcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmM6MTY0Ol9fZGVzY3JpcHRpb24oXCYjMzQ7bm90IG51bGwgY2hlY2tpbmcgbnVsbGFibGUgcG9pbnRlciBpbiBicGZfbHNtX21tYXBfZmlsZVwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYy0xNjUtX19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIGludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTtcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmM9MTY2PWludCBCUEZfUFJPRyhub19udWxsX2NoZWNrLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMtMTc1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jOjE3NjpTRUMoXCYjMzQ7bHNtL21tYXBfZmlsZVwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYzoxNzc6X19kZXNjcmlwdGlvbihcJiMzNDtudWxsIGNoZWNraW5nIG51bGxhYmxlIHBvaW50ZXIgaW4gYnBmX2xzbV9tbWFwX2ZpbGVcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMtMTc4LV9fc3VjY2Vzc1xuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9MTU0ND1zdGF0aWMgaW5saW5lIGludCBtYXBwaW5nX21hcF93cml0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTE1NTAtLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6MTU1MTpzdGF0aWMgaW5saW5lIGJvb2wgY2FuX21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtMTU1Mi17XG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTMyOD1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0zMzEtXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg6MzMyOnN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMzMzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIG1tYXAgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBgY2FuX21tYXBfZmlsZWAgYnVzaW5lc3MuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gc2VlIHdoZXJlIGBtbWFwX2ZpbGVgIGFuZCBgbW1hcF96ZXJvX3ByZXBhcmVgIGFyZSBhY3R1YWxseSBiZWluZyB1c2VkLiBJdCBsb29rcyBsaWtlIGBtbS92bWEuY2AgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBTcGVjaWZpY2FsbHksIGBfX21tYXBfbmV3X2ZpbGVfdm1hYCBjYWxscyBgbW1hcF9maWxlYCB3aXRoIHRoZSBgdm1hLSZndDt2bV9maWxlYCBhbmQgdGhlIHZtYSBpdHNlbGYuIFRoZW4sIEkgcmVtZW1iZXIgYG1tYXBfemVyb19wcmVwYXJlYCBpcyBkZWZpbmVkIGluIGBtbS9jaGFyLW1lbS5jYCBhcyB0aGUgYHplcm9fZm9wcy5tbWFwX3ByZXBhcmVgIGZ1bmN0aW9uLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgcmVjb2duaXplcyAvZGV2L3plcm8uIEnigJlsbCBjaGVjayBgZmlsZV9pc19kZXZfemVyb2AgaW4gYG1tL2NoYXItbWVtLmNgLiBMb29rcyBzdHJhaWdodGZvcndhcmQ6IGl0IGp1c3QgdmVyaWZpZXMgaWYgdGhlIGZpbGUgb3BlcmF0aW9uIChgZl9vcGApIG1hdGNoZXMgYCZhbXA7emVyb19mb3BzYC4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIGBtbWFwX3plcm9fcHJlcGFyZWAgaXRzZWxmLiBJbiBgbW0vY2hhci1tZW0uY2AsIGlmIGl04oCZcyBhIHNoYXJlZCBWTUEgKGBWTUFfU0hBUkVEX0JJVGAgc2V0KSB0aGVuIGBzaG1lbV96ZXJvX3NldHVwX2Rlc2NgIGRvZXMgdGhlIHdvcmssIG90aGVyd2lzZSwgaW4gYSBwcml2YXRlIG1hcHBpbmcgY2FzZSwgaXQganVzdCByZXR1cm5zLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGUgY29yZSBNTSB0YWtlcyBjYXJlIG9mIHByaXZhdGUgc2VtYW50aWNzLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgdXAgYSBsZXZlbCB0byBgbW0vdm1hLmNgIGFuZCBsb29rIGF0IGBjYWxsX21tYXBfcHJlcGFyZWAuIFRoaXMgaXMgdGhlIGNvcmUgbW1hcCBwcmVwYXJlIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGB2ZnNfbW1hcF9wcmVwYXJlYC4gVGhhdCYjMzk7cyB3aGVyZSBmaWxlIHN5c3RlbSBzcGVjaWZpYyB0aGluZ3MgYXJlIGhhbmRsZWQuIEl0JiMzOTtzIGFsc28gbWFraW5nIHN1cmUgYHZtX29wc2AgaXMgc3RpbGwgdmFsaWQgYW5kIHRoZW4gY2FsbHMgc29tZSBhY3Rpb24gcHJlcGFyZSBmdW5jdGlvbi4gSWYgdGhlIG1hcHBpbmcgaXMgYSBwcml2YXRlIGAvZGV2L3plcm9gIG1hcHBpbmcgKHdoaWNoIGlzIGFuIGFuY2llbnQgd2F5IG9mIG1ha2luZyBhbm9ueW1vdXMgbWFwcGluZ3MpLCBpdCYjMzk7cyBjb252ZXJ0ZWQgdG8gYSB0cnVseSBhbm9ueW1vdXMgbWFwcGluZyB1c2luZyBgbWFwX3NldF9hbm9uYC4gU21hcnQhCgpUaW1lIHRvIGxvb2sgYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHdlaXJkIGNvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBtbS9jaGFyLW1lbS5jYCBvciB0aGUgYC9kZXYvemVyb2AgZnVuY3Rpb25hbGl0eS4gTG9va2luZyBpbiBgbW0vTWFrZWZpbGVgLCBgY2hhci1tZW0ub2AgaXMgYWx3YXlzIGJ1aWx0IChgb2JqLXlgKS4gQW5kLCBnaXZlbiB0aGF0IEkmIzM5O20gb24gYW1kNjQsIGBDT05GSUdfTU1VYCBpcyBhIGdpdmVuLCBzbyB0aGF0JiMzOTtzIG5vdCB0aGUgaXNzdWUuIEkmIzM5O2xsIHRha2UgYSBxdWljayBzY2FuIG9mIGBtbS9jaGFyLW1lbS5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jaGFyLW1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NoYXItbWVtLmM9NTU9c3RhdGljIGlubGluZSBpbnQgdmFsaWRfbW1hcF9waHlzX2FkZHJfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHNpemVfdCBzaXplKVxuLS1cbm1tL2NoYXItbWVtLmMtNjAtXG5tbS9jaGFyLW1lbS5jOjYxOiNpZmRlZiBDT05GSUdfU1RSSUNUX0RFVk1FTVxubW0vY2hhci1tZW0uYy02Mi1zdGF0aWMgaW5saW5lIGludCBwYWdlX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vY2hhci1tZW0uYz0yNzE9c3RhdGljIHBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9jaGFyLW1lbS5jLTI4My1cbm1tL2NoYXItbWVtLmM6Mjg0OiNpZm5kZWYgQ09ORklHX01NVVxubW0vY2hhci1tZW0uYy0yODUtc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VubWFwcGVkX2FyZWFfbWVtKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL2NoYXItbWVtLmM9MzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xubW0vY2hhci1tZW0uYzozMjI6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxubW0vY2hhci1tZW0uYy0zMjMtXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5c1xuLS1cbm1tL2NoYXItbWVtLmM9MzI3PXN0YXRpYyBpbnQgbW1hcF9tZW1fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLS1cbm1tL2NoYXItbWVtLmMtMzY2LVxubW0vY2hhci1tZW0uYzozNjc6I2lmZGVmIENPTkZJR19ERVZQT1JUXG5tbS9jaGFyLW1lbS5jLTM2OC1zdGF0aWMgc3NpemVfdCByZWFkX3BvcnQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxubW0vY2hhci1tZW0uYz01MDM9c3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxubW0vY2hhci1tZW0uYy01MDQte1xubW0vY2hhci1tZW0uYzo1MDU6I2lmbmRlZiBDT05GSUdfTU1VXG5tbS9jaGFyLW1lbS5jLTUwNi1cdHJldHVybiAtRU5PU1lTO1xuLS1cbm1tL2NoYXItbWVtLmMtNTE0LVxubW0vY2hhci1tZW0uYzo1MTU6I2lmbmRlZiBDT05GSUdfTU1VXG5tbS9jaGFyLW1lbS5jLTUxNi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL2NoYXItbWVtLmM9NTIzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vY2hhci1tZW0uYy01NDItXHQgKi9cbm1tL2NoYXItbWVtLmM6NTQzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2NoYXItbWVtLmMtNTQ0LVx0cmV0dXJuIHRocF9nZXRfdW5tYXBwZWRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyk7XG4tLVxubW0vY2hhci1tZW0uYy01NDgtfVxubW0vY2hhci1tZW0uYzo1NDk6I2VuZGlmIC8qIENPTkZJR19NTVUgKi9cbm1tL2NoYXItbWVtLmMtNTUwLVxuLS1cbm1tL2NoYXItbWVtLmM9NjMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fbWF5YmVfdW51c2VkIG1lbV9mb3BzID0ge1xuLS1cbm1tL2NoYXItbWVtLmMtNjM3LVx0Lm9wZW5cdFx0PSBvcGVuX21lbSxcbm1tL2NoYXItbWVtLmM6NjM4OiNpZm5kZWYgQ09ORklHX01NVVxubW0vY2hhci1tZW0uYy02MzktXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV9tZW0sXG4tLVxubW0vY2hhci1tZW0uYz02NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnVsbF9mb3BzID0ge1xuLS1cbm1tL2NoYXItbWVtLmMtNjU0LVxubW0vY2hhci1tZW0uYzo2NTU6I2lmZGVmIENPTkZJR19ERVZQT1JUXG5tbS9jaGFyLW1lbS5jLTY1Ni1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb3J0X2ZvcHMgPSB7XG4tLVxubW0vY2hhci1tZW0uYz02NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzID0ge1xuLS1cbm1tL2NoYXItbWVtLmMtNjczLVx0LmdldF91bm1hcHBlZF9hcmVhID0gZ2V0X3VubWFwcGVkX2FyZWFfemVybyxcbm1tL2NoYXItbWVtLmM6Njc0OiNpZm5kZWYgQ09ORklHX01NVVxubW0vY2hhci1tZW0uYy02NzUtXHQubW1hcF9jYXBhYmlsaXRpZXMgPSB6ZXJvX21tYXBfY2FwYWJpbGl0aWVzLFxuLS1cbm1tL2NoYXItbWVtLmM9Njg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHtcbi0tXG5tbS9jaGFyLW1lbS5jLTY5MS19IGRldmxpc3RbXSA9IHtcbm1tL2NoYXItbWVtLmM6NjkyOiNpZmRlZiBDT05GSUdfREVWTUVNXG5tbS9jaGFyLW1lbS5jLTY5My1cdFtERVZNRU1fTUlOT1JdID0geyBcJiMzNDttZW1cJiMzNDssIFx1MDAyNm1lbV9mb3BzLCAwLCAwIH0sXG4tLVxubW0vY2hhci1tZW0uYy02OTUtXHRbM10gPSB7IFwmIzM0O251bGxcJiMzNDssIFx1MDAyNm51bGxfZm9wcywgRk1PREVfTk9XQUlULCAwNjY2IH0sXG5tbS9jaGFyLW1lbS5jOjY5NjojaWZkZWYgQ09ORklHX0RFVlBPUlRcbm1tL2NoYXItbWVtLmMtNjk3LVx0WzRdID0geyBcJiMzNDtwb3J0XCYjMzQ7LCBcdTAwMjZwb3J0X2ZvcHMsIDAsIDAgfSxcbi0tXG5tbS9jaGFyLW1lbS5jLTcwMi1cdFs5XSA9IHsgXCYjMzQ7dXJhbmRvbVwmIzM0OywgXHUwMDI2dXJhbmRvbV9mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcbm1tL2NoYXItbWVtLmM6NzAzOiNpZmRlZiBDT05GSUdfUFJJTlRLXG5tbS9jaGFyLW1lbS5jLTcwNC1cdFsxMV0gPSB7IFwmIzM0O2ttc2dcJiMzNDssIFx1MDAyNmttc2dfZm9wcywgMCwgMDY0NCB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIxNQoJCQkJCQkJb3V0cHV0OiAxMzUKCQkJCQkJCXRob3VnaHRzOiA5NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIFNlbGVjdGlvbiBmb3IgL2Rldi96ZXJvIFByaXZhdGUgTWFwcGluZyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIC9kZXYvemVybyBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRoZSBwcml2YXRlIG1hcHBpbmcgaW1wbGVtZW50YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgYC9kZXYvemVyb2AgaXMgbWlub3IgNSwgd2hpY2ggZG9lc24mIzM5O3Qgc2VlbSB0byBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24g4oCTIHN0YW5kYXJkIGBDT05GSUdfTU1VYCBpcyBhbGwgdGhhdCYjMzk7cyByZXF1aXJlZC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRob3NlIEZvY3VzU3ltYm9scyBydWxlcy4gSSBuZWVkIHRvIGF2b2lkIHRob3NlIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoczsgdGhpbmdzIHRoYXQgZ2V0IGNhbGxlZCBieSAqZXZlcnl0aGluZyogYXJlIGEgZnV6emluZyBkaXN0cmFjdGlvbi4gSW5zdGVhZCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSAqc3BlY2lmaWMqIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5IHBvaW50cy4gU3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGEgYml0IHRyaWNraWVyLCBidXQgdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlaXIgbm9uLXN0YXRpYyBjYWxsZXJzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgSSYjMzk7dmUgaWRlbnRpZmllZCBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBwcm9taXNpbmc6IGBmaWxlX2lzX2Rldl96ZXJvYCAoaW4gYG1tL2NoYXItbWVtLmNgKSwgYG1tYXBfemVyb19wcmVwYXJlYCAoYWxzbyBpbiBgbW0vY2hhci1tZW0uY2ApLCBgY2FsbF9tbWFwX3ByZXBhcmVgIChpbiBgbW0vdm1hLmNgKSwgYF9fbW1hcF9uZXdfdm1hYCAoaW4gYG1tL3ZtYS5jYCksIGFuZCBgX19tbWFwX3JlZ2lvbmAgKGluIGBtbS92bWEuY2ApLgoKTGV0JiMzOTtzIGRyaWxsIGRvd246CgoqICAgYG1tYXBfemVyb19wcmVwYXJlYDogWWVzLCB0aGlzIGlzICpleGFjdGx5KiB0aGUgbW1hcCBwcmVwYXJhdGlvbiBmb3IgL2Rldi96ZXJvLCBzbyBpdCBpcyBhIGdvb2QgZm9jdXMgc3ltYm9sLgoqICAgYGZpbGVfaXNfZGV2X3plcm9gOiBUaGlzIGZ1bmN0aW9uIGlzICpleHBsaWNpdGx5KiBjaGVja2luZyBpZiB0aGUgZmlsZSBpcyAvZGV2L3plcm8sIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIHBhdGggdGhhdCB3ZSBhcmUgcmV2aWV3aW5nLgoqICAgYGNhbGxfbW1hcF9wcmVwYXJlYDogVGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGBmaWxlX2lzX2Rldl96ZXJvKClgIGNoZWNrIGFuZCB0aGUgYG1hcF9zZXRfYW5vbigpYCBpcyBleGVjdXRlZC4gSXQgaXMgYWxzbyB3aGVyZSB0aGUgYCFkZXNjLSZndDt2bV9vcHNgIGVycm9yIGNoZWNrIGlzIGFkZGVkLgoKSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgX19tbWFwX25ld192bWFgIGFuZCBgX19tbWFwX3JlZ2lvbmAuIEJ1dCBgX19tbWFwX25ld192bWFgIGlzIGFsdGVyZWQgdG8gdXNlIGBtYXBfaXNfYW5vbihtYXApYC4gQW5kIHdoaWxlIEkmIzM5O20gYSBiaXQgaGVzaXRhbnQgYWJvdXQgYF9fbW1hcF9yZWdpb25gLCB0aGUgcHJpb3IgZnVuY3Rpb25zIGFyZSBxdWl0ZSBzcGVjaWZpYywgc28gbGV0JiMzOTtzIHN0aWNrIHdpdGggdGhlbS4KClRoZXJlZm9yZSwgZm9yIHRoZSBmdXp6aW5nIGZvY3VzLCBteSBzaG9ydGxpc3QgaXMgYFsmIzM0O2ZpbGVfaXNfZGV2X3plcm8mIzM0OywgJiMzNDttbWFwX3plcm9fcHJlcGFyZSYjMzQ7LCAmIzM0O2NhbGxfbW1hcF9wcmVwYXJlJiMzNDtdYC4gVGhlc2UgYXJlIGFsbCB2ZXJ5IHNwZWNpZmljIHRvIHRoZSAvZGV2L3plcm8gbW1hcCBjaGFuZ2UuCgpOb3csIGxldCYjMzk7cyBxdWlja2x5IHRpY2sgb2ZmIHRoZSByZW1haW5pbmcgcmVxdWlyZW1lbnRzOgoKMS4gIGBXb3J0aEZ1enppbmdgOiBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggKmRpcmVjdGx5KiBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gYG1tL3ZtYS5jYCBhbmQgYG1tL2NoYXItbWVtLmNgLgoyLiAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCAqbW92ZXMqIGhhbmRsaW5nIG9mIGAvZGV2L3plcm9gIGBNQVBfUFJJVkFURWAgbWFwcGluZ3MgaW50byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQgY29udmVydHMgdGhlc2UgcHJpdmF0ZSBtYXBwaW5ncyBpbnRvIHRydWUgYW5vbnltb3VzIG1hcHBpbmdzIGR1cmluZyBgbW1hcF9wcmVwYXJlYCwgc28gbG9naWMgaXMgYmVpbmcgc2hpZnRlZCBiZXR3ZWVuIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgbW0gbGF5ZXIuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyBpbiBgbW0vdm1hLmNgLCBgbW0vY2hhci1tZW0uY2AsIGFuZCBpbnRlcm5hbCBWTUEgbWFuYWdlbWVudC4KMy4gIGBGb2N1c1N5bWJvbHNgOiBJJiMzOTt2ZSBhbHJlYWR5IG5haWxlZCB0aGVzZSBkb3duIGFzIGBbJiMzNDtmaWxlX2lzX2Rldl96ZXJvJiMzNDssICYjMzQ7bW1hcF96ZXJvX3ByZXBhcmUmIzM0OywgJiMzNDtjYWxsX21tYXBfcHJlcGFyZSYjMzQ7XWAuCjQuICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgb3IgYFsmIzM0O01NVSYjMzQ7XWAg4oCTIGBDT05GSUdfTU1VYCBpcyBzdGFuZGFyZCwgc28gbm8gc3BlY2lhbCBjb25maWd1cmF0aW9uIGlzIG5lZWRlZC4KCkkmIzM5O3ZlIGdpdmVuIHRoaXMgYSBmaW5hbCBvbmNlLW92ZXIsIGFuZCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIGFyZSBhY2N1cmF0ZSwgc28gSSYjMzk7bSByZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NhbGxfbW1hcF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O2ZpbGVfaXNfZGV2X3plcm8mIzM0OywKICAgICYjMzQ7bW1hcF96ZXJvX3ByZXBhcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3Mgc28gdGhleSBiZWNvbWUgdHJ1bHkgYW5vbnltb3VzIG1hcHBpbmdzIHdpdGhpbiBjb3JlIG1tIHJhdGhlciB0aGFuIGJlaW5nIHRyZWF0ZWQgYXMgc2VtaS1hbm9ueW1vdXMgZmlsZSBtYXBwaW5ncy4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIG1tL3ZtYS5jLCBtbS9jaGFyLW1lbS5jLCBhbmQgaGVhZGVyIGhlbHBlcnMsIGFmZmVjdGluZyBWTUEgbWVyZ2luZywgcGFnZSBvZmZzZXQgY2FsY3VsYXRpb25zLCBhbmQgbW1hcCBwcmVwYXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2FsbF9tbWFwX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7ZmlsZV9pc19kZXZfemVybyYjMzQ7LAogICAgJiMzNDttbWFwX3plcm9fcHJlcGFyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhhbmRsaW5nIG9mIE1BUF9QUklWQVRFIC9kZXYvemVybyBtYXBwaW5ncyBzbyB0aGV5IGJlY29tZSB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3Mgd2l0aGluIGNvcmUgbW0gcmF0aGVyIHRoYW4gYmVpbmcgdHJlYXRlZCBhcyBzZW1pLWFub255bW91cyBmaWxlIG1hcHBpbmdzLiBJdCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gbW0vdm1hLmMsIG1tL2NoYXItbWVtLmMsIGFuZCBoZWFkZXIgaGVscGVycywgYWZmZWN0aW5nIFZNQSBtZXJnaW5nLCBwYWdlIG9mZnNldCBjYWxjdWxhdGlvbnMsIGFuZCBtbWFwIHByZXBhcmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgaGFuZGxpbmcgb2YgTUFQX1BSSVZBVEUgL2Rldi96ZXJvIG1hcHBpbmdzIHRvIG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMgVk1BcyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtb3ZpbmcgZHJpdmVycy9jaGFyL21lbS5jIHRvIG1tL2NoYXItbWVtLmMsIHVwZGF0aW5nIG1tYXBfcHJlcGFyZSBoYW5kbGluZywgYW5kIHJlbW92aW5nIHNwZWNpYWwtY2FzZSB3b3JrYXJvdW5kcyBmb3Igc2VtaS1hbm9ueW1vdXMgVk1BcykuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFsbCBzdHJ1Y3R1cmVzIChlLmcuIHN0cnVjdCB2bV9hcmVhX2Rlc2MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuLSBBbnkgYnVncyBzdGVtbWluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gVk1BIG1lcmdpbmcgZGlzY3JlcGFuY2llcywgcGFnZSBvZmZzZXQgZXJyb3JzLCBvciByZWZlcmVuY2UvbGlmZXRpbWUgbWFuYWdlbWVudCBpc3N1ZXMpIGFyZSBtZW1vcnkgbWFuYWdlbWVudC9sb2dpYyBpc3N1ZXMgdGhhdCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjM5NjU4NmU5OGQ1ODA4ODhjODFhZWY3ZjJkNmIwMzY2OWE0NTU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxMzoyNjozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggM2ExOWRhNzRkMDBjOS4uYTBhNWRiNDQ0YzY2MyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE3Mjc2LDcgJiM0MzsxNzI3Niw3IEBAIEY6CURvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLW1lbW9yeS10aWVycwogRjoJRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tbnVtYQogRjoJRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS8KIEY6CURvY3VtZW50YXRpb24vbW0vCi1GOglkcml2ZXJzL2NoYXIvbWVtLmMKJiM0MztGOgltbS9jaGFyLW1lbS5jCiBGOglpbmNsdWRlL2xpbnV4L2NtYS5oCiBGOglpbmNsdWRlL2xpbnV4L2RtYXBvb2wuaAogRjoJaW5jbHVkZS9saW51eC9pb3JlbWFwLmgKQEAgLTE3NDgxLDcgJiM0MzsxNzQ4MSw3IEBAIEw6CWxpbnV4LW1tQGt2YWNrLm9yZwogUzoJTWFpbnRhaW5lZAogVzoJaHR0cDovL3d3dy5saW51eC1tbS5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbQotRjoJZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7RjoJbW0vY2hhci1tZW0uYwogRjoJaW5jbHVkZS90cmFjZS9ldmVudHMvbW1hcC5oCiBGOglmcy9wcm9jL3Rhc2tfbW11LmMKIEY6CWZzL3Byb2MvdGFza19ub21tdS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggYTQ2ZDdiZjdjNGM4Mi4uYmIzYmY2NjkzN2IzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtMyw3ICYjNDM7Myw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycy4KICMKIAotb2JqLXkJCQkJJiM0Mzs9IG1lbS5vIHJhbmRvbS5vCiYjNDM7b2JqLXkJCQkJJiM0Mzs9IHJhbmRvbS5vCiBvYmotJChDT05GSUdfVFRZX1BSSU5USykJJiM0Mzs9IHR0eXByaW50ay5vCiBvYmoteQkJCQkmIzQzOz0gbWlzYy5vCiBvYmotJChDT05GSUdfVEVTVF9NSVNDX01JTk9SKQkmIzQzOz0gbWlzY19taW5vcl9rdW5pdC5vCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggZGQwOWM0MzhmYTIzZS4uODY0ZDVhYzM3MDRkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTU1MSwxMSAmIzQzOzE1NTEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF9hbm9ueW1vdXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJdm1hLSZndDt2bV9vcHMgPSBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQotewotCWRlc2MtJmd0O3ZtX29wcyA9IE5VTEw7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYW5vbnltb3VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiAhdm1hLSZndDt2bV9vcHM7CkBAIC00NDA4LDkgJiM0Mzs0NDAzLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9wYWdlcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICAqIElmIEB2bWEgaXMgYSBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoaXMgcmV0dXJucyB0aGUKICAqIHBhZ2Ugb2Zmc2V0IHdpdGhpbiB0aGUgZmlsZS4KICAqCi0gKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSwgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHNhdGlzZmllcwotICogdm1hX2lzX2Fub255bW91cygpIGJ1dCBoYXMgZmlsZS1iYWNrZWQgcGFnZSBvZmZzZXQsIGFuZCBNQVBfUFJJVkFURS1wZm5tYXAKLSAqIHJlZ2lvbnMgaGF2ZSB0aGVpciBwYWdlIG9mZnNldCBzZXQgdG8gdGhlIGZpcnN0IFBGTiBpbiB0aGUgcmFuZ2UuCiYjNDM7ICogRWRnZSBjYXNlczogbm9tbXUgZG9lcyBub3QgYWJpZGUgYnkgdGhlc2UgYW5kIENvVyBNQVBfUFJJVkFURS1wZm5tYXAgcmVnaW9ucwomIzQzOyAqIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLgogICoKICAqIFJldHVybnM6IFRoZSBwYWdlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgQHZtYS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCAwYWRmYTY2MDU2NTNkLi45MzlmM2E1ZTk3M2Y2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtMTEyOCw4ICYjNDM7MTEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCWNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTsKIAogCVZNX1dBUk5fT05fT05DRSghdm1hX2lzX2Nvd19tYXBwaW5nKHZtYSkpOwotCS8qIEFjY291bnQgZm9yIE1BUF9QUklWQVRFLS9kZXYvemVybyB3aGljaCBpcyBvbmx5IHNlbWktYW5vbnltb3VzLiAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgJmFtcDsmYW1wOyAhdm1hLSZndDt2bV9maWxlKQomIzQzOwlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKQogCQlWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7CiAKIAlyZXR1cm4gcGdvZmY7CmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGU3MjQ1Y2I4OGM2NjUuLjJhM2VjNTNkNjJlZWYgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlCkBAIC01NSw3ICYjNDM7NTUsOCBAQCBvYmoteQkJCTo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXAogCQkJICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXAogCQkJICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXAogCQkJICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFwKLQkJCSAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KQomIzQzOwkJCSAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyBjaGFyLW1lbS5vIFwKJiM0MzsJCQkgICAkKG1tdS15KQogCiAjIEdpdmUgJiMzOTtwYWdlX2FsbG9jJiMzOTsgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZQogcGFnZS1hbGxvYy15IDo9IHBhZ2VfYWxsb2MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvbW0vY2hhci1tZW0uYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvbWVtLmMKcmVuYW1lIHRvIG1tL2NoYXItbWVtLmMKaW5kZXggNjMyNTNkMWRlNWQ3MC4uYzBiNWZiMDE5MjIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NoYXItbWVtLmMKQEAgLTEsNiAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7ICogIG1tL2NoYXItbWVtLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwogICoKQEAgLTMxLDYgJiM0MzszMSw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOwogI2RlZmluZSBERVZNRU1fTUlOT1IJMQogI2RlZmluZSBERVZQT1JUX01JTk9SCTQKIApAQCAtNTA2LDExICYjNDM7NTA4LDcgQEAgc3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQogCWlmICh2bWFfZGVzY190ZXN0KGRlc2MsIFZNQV9TSEFSRURfQklUKSkKIAkJcmV0dXJuIHNobWVtX3plcm9fc2V0dXBfZGVzYyhkZXNjKTsKIAotCS8qCi0JICogVGhpcyBpcyBhIGhpZ2hseSB1bmlxdWUgc2l0dWF0aW9uIHdoZXJlIHdlIG1hcmsgYSBNQVBfUFJJVkFURSBtYXBwaW5nCi0JICogb2YgL2Rldi96ZXJvIGFub255bW91cywgZGVzcGl0ZSBpdCBub3QgYmVpbmcuCi0JICovCi0Jdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhkZXNjKTsKJiM0MzsJLyogTUFQX1BSSVZBVEUgc2VtYW50aWNzIGFyZSB0YWtlbiBjYXJlIG9mIGZvciB1cyBieSBjb3JlIG1tLiAqLwogCXJldHVybiAwOwogfQogCkBAIC03MDcsNiAmIzQzOzcwNSwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7CiAjZW5kaWYKIH07CiAKJiM0MzsvKioKJiM0MzsgKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvCiYjNDM7ICogZHJpdmVyPwomIzQzOyAqIEBmaWxlOiBGaWxlIHRvIHRlc3QuCiYjNDM7ICogUmV0dXJuczogdHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmaWxlICZhbXA7JmFtcDsgZmlsZS0mZ3Q7Zl9vcCA9PSAmYW1wO3plcm9fZm9wczsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1lbW9yeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCBtaW5vcjsKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM4YjExNjUyMTJjOTQuLjI3ODI5MjRhMjc3YzkgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMjM3LDE1ICYjNDM7MjM3LDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaW50IGVyciA9IHZmc19tbWFwKGZpbGUsIHZtYSk7CiAKLQlpZiAobGlrZWx5KCFlcnIpKQotCQlyZXR1cm4gMDsKLQogCS8qCi0JICogT0ssIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpLCBidXQgYW4gZXJyb3IKLQkgKiBhcm9zZS4gVGhlIG1hcHBpbmcgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0IG5vdCBpbnZva2UKLQkgKiBhbnkgZnVydGhlciBob29rcyBvbiBpdC4KJiM0MzsJICogRWl0aGVyIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpIGFuZCBhbiBlcnJvciBhcm9zZQomIzQzOwkgKiBvciBhIGRyaXZlciBzZXQgdm1hLSZndDt2bV9vcHMgPSBOVUxMIGludGVuZGluZyB0aGVyZSB0byBiZSBubyBWTUEKJiM0MzsJICogb3BlcmF0aW9ucy4KJiM0MzsJICoKJiM0MzsJICogSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBWTUEgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0biYjMzk7dAomIzQzOwkgKiBpbnZva2UgYW55IGZ1cnRoZXIgaG9va3Mgb24gaXQsIGluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgaG9vayBhY3R1YWxseQomIzQzOwkgKiB3YW50ZWQgbm8gZnVydGhlciBob29rcyB0byBiZSBpbnZva2VkLCBzbyBmaXggYm90aCBieSBzZXR0aW5nIGR1bW15CiYjNDM7CSAqIFZNQSBvcHMuCiAJICovCi0Jdm1hLSZndDt2bV9vcHMgPSAmYW1wO3ZtYV9kdW1teV92bV9vcHM7CiYjNDM7CWlmICh1bmxpa2VseShlcnIgfHwgIXZtYS0mZ3Q7dm1fb3BzKSkKJiM0MzsJCXZtYS0mZ3Q7dm1fb3BzID0gJmFtcDt2bWFfZHVtbXlfdm1fb3BzOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2NTQsNCAmIzQzOzE2NTcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NwaW5fdHJ5bG9jayh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7LyogY2hhci1tZW0uYyAqLwomIzQzO2Jvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiYjNDM7CiAjZW5kaWYJLyogX19NTV9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA4OTdmYTJiNjEzNDZmLi5jNjA3NjNlZjU2MWNmIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTI3ODYsNyAmIzQzOzI3ODYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJc2IgPSBmaWxlX2lub2RlKGZpbGUpLSZndDtpX3NiOwogCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIENhbGxlZCBkaXJlY3RseSBmcm9tIG1tL21tYXAuYywgb3IgZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7CQkJICogQ2FsbGVkIGRpcmVjdGx5IGZyb20gbW0vbW1hcC5jLCBvciBtbS9jaGFyLW1lbS5jCiAJCQkgKiBmb3IgJiMzNDsvZGV2L3plcm8mIzM0OywgdG8gY3JlYXRlIGEgc2hhcmVkIGFub255bW91cyBvYmplY3QuCiAJCQkgKi8KIAkJCWlmIChJU19FUlIoc2htX21udCkpCmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jCmluZGV4IDM1ZTdhNjQ4NTVmYWQuLjZmZGNlNDg1MmNlNjEgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jCkBAIC0yNjIxLDYgJiM0MzsyNjIxLDIzIEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbWFwX3NldF9hbm9uKHN0cnVjdCBtbWFwX3N0YXRlICptYXApCiYjNDM7ewomIzQzOwltYXAtJmd0O2ZpbGUgPSBOVUxMOwomIzQzOwltYXAtJmd0O3ZtX29wcyA9IE5VTEw7CiYjNDM7CW1hcC0mZ3Q7cGdvZmYgPSBtYXAtJmd0O2FkZHIgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbWFwX2lzX3ByaXZhdGUoY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhdm1hX2ZsYWdzX3Rlc3QoJmFtcDttYXAtJmd0O3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtYXBfaXNfYW5vbihjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1hcF9pc19wcml2YXRlKG1hcCkgJmFtcDsmYW1wOyAhbWFwLSZndDtmaWxlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBfX21tYXBfbmV3X3ZtYSgpIC0gQWxsb2NhdGUgYSBuZXcgVk1BIGZvciB0aGUgcmVnaW9uLCBhcyBtZXJnaW5nIHdhcyBub3QKICAqIHBvc3NpYmxlLgpAQCAtMjYzNCw4ICYjNDM7MjY1MSw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogc3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLAogCXN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKQogewotCWNvbnN0IGJvb2wgaXNfYW5vbiA9ICFtYXAtJmd0O2ZpbGUgJmFtcDsmYW1wOwotCQkhdm1hX2ZsYWdzX3Rlc3QoJmFtcDttYXAtJmd0O3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpOwomIzQzOwljb25zdCBib29sIGlzX2Fub24gPSBtYXBfaXNfYW5vbihtYXApOwogCXN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSA9IG1hcC0mZ3Q7dm1pOwogCWludCBlcnJvciA9IDA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CkBAIC0yNzc3LDYgJiM0MzsyNzkzLDEwIEBAIHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CS8qIEl0JiMzOTtzIGludmFsaWQgZm9yIG1tYXBfcHJlcHJhcmUgaG9va3MgdG8gY2xlYXIgdm1fb3BzLiAqLwomIzQzOwlpZiAoIWRlc2MtJmd0O3ZtX29wcykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjc5MywxNiAmIzQzOzI4MTMsMjEgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogCW1hcC0mZ3Q7dm1fb3BzID0gZGVzYy0mZ3Q7dm1fb3BzOwogCW1hcC0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gZGVzYy0mZ3Q7cHJpdmF0ZV9kYXRhOwogCiYjNDM7CS8qCiYjNDM7CSAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZwomIzQzOwkgKiBhbm9ueW1vdXMgbWFwcGluZ3MuIFJhdGhlciB0aGFuIGFsbG93aW5nIHRoZXNlIG1hcHBpbmdzIHRvIGJlIG9kZAomIzQzOwkgKiBvdXRsaWVycywgc2ltcGx5IG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMuCiYjNDM7CSAqLwomIzQzOwlpZiAobWFwX2lzX3ByaXZhdGUobWFwKSAmYW1wOyZhbXA7IGZpbGVfaXNfZGV2X3plcm8obWFwLSZndDtmaWxlKSkKJiM0MzsJCW1hcF9zZXRfYW5vbihtYXApOwomIzQzOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXN0cnVjdCBtbWFwX3N0YXRlICptYXApCiB7Ci0JaWYgKG1hcC0mZ3Q7dm1fb3BzKQotCQl2bWEtJmd0O3ZtX29wcyA9IG1hcC0mZ3Q7dm1fb3BzOwotCWVsc2UJLyogT25seSAvZGV2L3plcm8gc2hvdWxkIGRvIHRoaXMuICovCi0JCXZtYV9zZXRfYW5vbnltb3VzKHZtYSk7CiYjNDM7CXZtYS0mZ3Q7dm1fb3BzID0gbWFwLSZndDt2bV9vcHM7CiAJdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBtYXAtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKIH0KIApAQCAtMjg4Miw3ICYjNDM7MjkwNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJYWxsb2NhdGVkX25ldyA9IHRydWU7CiAJfQogCi0JaWYgKGhhdmVfbW1hcF9wcmVwYXJlKQomIzQzOwlpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgJmFtcDsmYW1wOyAhbWFwX2lzX2Fub24oJmFtcDttYXApKQogCQlzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHModm1hLCAmYW1wO21hcCk7CiAKIAlfX21tYXBfY29tcGxldGUoJmFtcDttYXAsIHZtYSk7CmRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oCmluZGV4IDAyNGZhYmU2MzU2MGEuLmU5N2JkMmRmYTc4NmQgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5oCkBAIC0yNjcsOSAmIzQzOzI2Nyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfc2FuZV9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBwZ29mZikKIAkgKi8KIAlpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSkKIAkJcmV0dXJuOwotCS8qIE1BUF9QUklWQVRFLS9kZXYvemVybyBpcyBhbm9uLCBub24tTlVMTCB2bV9maWxlLCBidXQgaGFzIGZpbGUgcGdvZmYuICovCi0JaWYgKHZtYS0mZ3Q7dm1fZmlsZSkKLQkJcmV0dXJuOwogCS8qIElmIGZhdWx0ZWQgaW4sIGNvdWxkIGhhdmUgYmVlbiByZW1hcHBlZC4gKi8KIAlpZiAodm1hLSZndDthbm9uX3ZtYSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMKaW5kZXggNTJiODcyN2I2NjI4ZS4uN2RkMjkzMzQxN2MxZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jCkBAIC0xMzYyLDYgJiM0MzsxMzYyLDEwMSBAQCBURVNUX0YobWVyZ2UsIGFub25fYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKQogCUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgNSAqIHBhZ2Vfc2l6ZSk7CiB9CiAKJiM0MztURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX3VuZmF1bHRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gJmFtcDtzZWxmLSZndDtwcm9jbWFwOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwomIzQzOwljaGFyICpjYXJ2ZW91dCA9IHNlbGYtJmd0O2NhcnZlb3V0OwomIzQzOwljaGFyICpwdHIsICpwdHIyOwomIzQzOwlpbnQgZmRfemVybzsKJiM0MzsKJiM0MzsJaWYgKGFjY2VzcygmIzM0Oy9kZXYvemVybyYjMzQ7LCBGX09LKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O05vIC9kZXYvemVyby4mIzM0Oyk7CiYjNDM7CWZkX3plcm8gPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9ORShmZF96ZXJvLCAtMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1hcCB0d28gTUFQX1BSSVZBVEUtL2Rldi96ZXJvIFZNQXMgbmV4dCB0byBvbmUgYW5vdGhlciB3aXRoIG9mZnNldCAwCiYjNDM7CSAqIGVhY2guCiYjNDM7CSAqCiYjNDM7CSAqIFdpdGggdGhlc2UgYmVpbmcgbWFkZSB0cnVseSBhbm9ueW1vdXMgdXBvbiBtYXBwaW5nLCB0aGV5IHdpbGwKJiM0MzsJICogbWVyZ2UuIElmIHRoZXkgd2VyZSBmaWxlLWJhY2tlZCBWTUFzIHRoZSBwYWdlIG9mZnNldHMgd291bGQgcHJldmVudAomIzQzOwkgKiB0aGUgbWVyZ2U6CiYjNDM7CSAqCiYjNDM7CSAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXwKJiM0MzsJICogfCBwdHIgfHwgcHRyMiB8IC0mZ3Q7IHwgICAgIHB0ciAgICAgfAomIzQzOwkgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18CiYjNDM7CSAqLwomIzQzOwlwdHIgPSBtbWFwKGNhcnZlb3V0LCA1ICogcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApOwomIzQzOwlwdHIyID0gbW1hcCgmYW1wO2NhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLAomIzQzOwkJICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApOwomIzQzOwljbG9zZShmZF96ZXJvKTsKJiM0MzsJQVNTRVJUX05FKHB0ciwgTUFQX0ZBSUxFRCk7CiYjNDM7CUFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovCiYjNDM7CUFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgMTAgKiBwYWdlX3NpemUpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX2ZhdWx0ZWRfdW5mYXVsdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSAmYW1wO3NlbGYtJmd0O3Byb2NtYXA7CiYjNDM7CXVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLSZndDtwYWdlX3NpemU7CiYjNDM7CWNoYXIgKmNhcnZlb3V0ID0gc2VsZi0mZ3Q7Y2FydmVvdXQ7CiYjNDM7CWNoYXIgKnB0ciwgKnB0cjI7CiYjNDM7CWludCBmZF96ZXJvOwomIzQzOwomIzQzOwlpZiAoYWNjZXNzKCYjMzQ7L2Rldi96ZXJvJiMzNDssIEZfT0spKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7Tm8gL2Rldi96ZXJvLiYjMzQ7KTsKJiM0MzsJZmRfemVybyA9IG9wZW4oJiMzNDsvZGV2L3plcm8mIzM0OywgT19SRFdSKTsKJiM0MzsJQVNTRVJUX05FKGZkX3plcm8sIC0xKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFwIGEgTUFQX1BSSVZBVEUgbWFwcGluZyBvZiAvZGV2L3plcm8gd2l0aCBwYWdlIG9mZnNldCAwLCB0aGVuIGZhdWx0CiYjNDM7CSAqIGl0IGluOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKJiM0MzsJICogfCAgICAgICAgICAgZmF1bHRlZCAgICAgICAgICAgICB8CiYjNDM7CSAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJcHRyID0gbW1hcChjYXJ2ZW91dCwgMTUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7CiYjNDM7CUFTU0VSVF9ORShwdHIsIE1BUF9GQUlMRUQpOwomIzQzOwltZW1zZXQocHRyLCAmIzM5O3gmIzM5OywgMTUgKiBwYWdlX3NpemUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVbm1hcCB0aGUgbWlkZGxlOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXwKJiM0MzsJICogfCBmYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8CiYjNDM7CSAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJQVNTRVJUX0VRKG11bm1hcCgmYW1wO3B0cls1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSksIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgaW4gYSBuZXcgdW5mYXVsdGVkIG1hcHBpbmcgaW4gdGhlIG1pZGRsZSB3aXRoIHBhZ2Ugb2Zmc2V0IDAgLQomIzQzOwkgKiB0aGlzIHNob3VsZCBtZXJnZSBhbmQgd291bGQgbm90IGlmIGl0IHdlcmUgdHJlYXRlZCBhcyBhIGZpbGUgcmF0aGVyCiYjNDM7CSAqIHRoYW4gcHVyZSBhbm9uOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwKJiM0MzsJICogfCBmYXVsdGVkIHwgdW5mYXVsdGVkIHwgZmF1bHRlZCB8CiYjNDM7CSAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJcHRyMiA9IG1tYXAoJmFtcDtjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSwKJiM0MzsJCSAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwKJiM0MzsJCSAgICBmZF96ZXJvLCAwKTsKJiM0MzsJY2xvc2UoZmRfemVybyk7CiYjNDM7CUFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovCiYjNDM7CUFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgMTUgKiBwYWdlX3NpemUpOwomIzQzO30KJiM0MzsKIFRFU1RfRihtZXJnZV93aXRoX2ZvcmssIG1yZW1hcF9mYXVsdGVkX3RvX3VuZmF1bHRlZF9wcmV2KQogewogCXN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gJmFtcDtzZWxmLSZndDtwcm9jbWFwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jCmluZGV4IDQyMDljNjQyODNkNmYuLmJiY2E5ZjllMjc0MzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmMKQEAgLTUxLDcgJiM0Mzs1MSw3IEBAIGludCBtYWluKHZvaWQpCiAJaW50IGZkOwogCXVuc2lnbmVkIGxvbmcgYSwgYjsKIAotCWZkID0gb3BlbigmIzM0Oy9kZXYvemVybyYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9wcm9jL3NlbGYvZXhlJiMzNDssIE9fUkRPTkxZKTsKIAlpZiAoZmQgPT0gLTEpCiAJCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMKaW5kZXggZTZhYTAwYTE4M2JjZC4uNTc4NmNkZmZiYmY2MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuYwpAQCAtNTcsNyAmIzQzOzU3LDcgQEAgaW50IG1haW4odm9pZCkKIAlpbnQgZmQ7CiAJdW5zaWduZWQgbG9uZyBhLCBiOwogCi0JZmQgPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRPTkxZKTsKJiM0MzsJZmQgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9leGUmIzM0OywgT19SRE9OTFkpOwogCWlmIChmZCA9PSAtMSkKIAkJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCmluZGV4IDRjNTg0ODdiNzY0ZTkuLjU2NjkwODFkOTFiOWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaApAQCAtMTYzOCw5ICYjNDM7MTYzOCwxNSBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2Fub25fcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAljb25zdCBwZ29mZl90IHBnb2ZmID0gX19saW5lYXJfYW5vbl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7CiAKIAlWTV9XQVJOX09OX09OQ0UoIXZtYV9pc19jb3dfbWFwcGluZyh2bWEpKTsKLQkvKiBBY2NvdW50IGZvciBNQVBfUFJJVkFURS0vZGV2L3plcm8gd2hpY2ggaXMgb25seSBzZW1pLWFub255bW91cy4gKi8KLQlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpICZhbXA7JmFtcDsgIXZtYS0mZ3Q7dm1fZmlsZSkKJiM0MzsJaWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSkKIAkJVk1fV0FSTl9PTl9PTkNFKHBnb2ZmICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykpOwogCiAJcmV0dXJuIHBnb2ZmOwogfQomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wczsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmaWxlICZhbXA7JmFtcDsgZmlsZS0mZ3Q7Zl9vcCA9PSAmYW1wO3plcm9fZm9wczsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCmluZGV4IDRhMzljOWQ1MDQ4OTYuLjhjNDgyNjQ5OWY0MDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCkBAIC0xMiw2ICYjNDM7MTIsMTUgQEAgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtYV9kdW1teV92bV9vcHM7CiBzdHJ1Y3QgYW5vbl92bWEgZHVtbXlfYW5vbl92bWE7CiBzdHJ1Y3QgdGFza19zdHJ1Y3QgX19jdXJyZW50OwogCiYjNDM7c3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzID0gewomIzQzOwkubW1hcF9wcmVwYXJlID0gbW1hcF96ZXJvX3ByZXBhcmUsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYWxsb2Nfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJcGdvZmZfdCBwZ29mZiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jCmluZGV4IGM4NWJjMDAwZDFjYjcuLmZhNzNmYWZmMjI2MjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMKQEAgLTQ1LDcgJiM0Mzs0NSw0NCBAQCBzdGF0aWMgYm9vbCB0ZXN0X21tYXBfcmVnaW9uX2Jhc2ljKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKQomIzQzO3sKJiM0MzsJY29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCwKJiM0MzsJCQlWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQpOwomIzQzOwlzdHJ1Y3QgZmlsZSBmaWxlID0gewomIzQzOwkJLmZfb3AgPSAmYW1wO3plcm9fZm9wcywKJiM0MzsJfTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyOwomIzQzOwlWTUFfSVRFUkFUT1Iodm1pLCAmYW1wO21tLCAwKTsKJiM0MzsKJiM0MzsJY3VycmVudC0mZ3Q7bW0gPSAmYW1wO21tOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgYSBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZyBhdCBhZGRyZXNzIDB4MzAwMDAwIHdpdGggYSBwYWdlCiYjNDM7CSAqIG9mZnNldCBvZiAweDEwLCB3aGljaCB3ZSBleHBlY3QgdG8gYmUgcmVzZXQgdG8gdGhlIGFub255bW91cyBwYWdlCiYjNDM7CSAqIG9mZnNldC4KJiM0MzsJICovCiYjNDM7CWFkZHIgPSBfX21tYXBfcmVnaW9uKCZhbXA7ZmlsZSwgMHgzMDAwMDAsIDB4MzAwMCwgdm1hX2ZsYWdzLCAweDEwLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgaXQgdHJ1bHkgaXMgYW4gYW5vbnltb3VzIG1hcHBpbmcuICovCiYjNDM7CXZtYSA9IHZtYV9sb29rdXAoJmFtcDttbSwgYWRkcik7CiYjNDM7CUFTU0VSVF9ORSh2bWEsIE5VTEwpOwomIzQzOwlBU1NFUlRfVFJVRSh2bWFfaXNfYW5vbnltb3VzKHZtYSkpOwomIzQzOwlBU1NFUlRfRVEodm1hLSZndDt2bV9maWxlLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhLCBOVUxMKTsKJiM0MzsJLyogRXhwZWN0IGFub255bW91cyBwYWdlIG9mZnNldHMuICovCiYjNDM7CUFTU0VSVF9FUSh2bWEtJmd0O3ZtX3Bnb2ZmLCAweDMwMCk7CiYjNDM7CUFTU0VSVF9FUSh2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpLCAweDMwMCk7CiYjNDM7CiYjNDM7CWNsZWFudXBfbW0oJmFtcDttbSwgJmFtcDt2bWkpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydW5fbW1hcF90ZXN0cyhpbnQgKm51bV90ZXN0cywgaW50ICpudW1fZmFpbCkKIHsKIAlURVNUKG1tYXBfcmVnaW9uX2Jhc2ljKTsKJiM0MzsJVEVTVChwdXJlX2Fub25fZGV2X3plcm8pOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDkzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBmaXJlIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBwcmltYXJpbHkgZGVhbGluZyB3aXRoIGEgcmVmYWN0b3IsIG1vdmluZyBgZHJpdmVycy9jaGFyL21lbS5jYCB0byBgbW0vY2hhci1tZW0uY2AuIFRoYXQmIzM5O3Mgbm90IHRoZSBjcml0aWNhbCBwYXJ0IGhlcmUuIFRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgL2Rldi96ZXJvYCBNQVBfUFJJVkFURSBtYXBwaW5ncyBhcmUgaGFuZGxlZC4KClByZXZpb3VzbHksIHRoZXJlIHdlcmUgc29tZSBwb3RlbnRpYWxseSAmIzM0O3NlbWktYW5vbnltb3VzJiMzNDsgc3RhdGVzLiBOb3csIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIG1ha2luZyB0aGVzZSB0cnVseSBhbm9ueW1vdXMgYnkgY2xlYXJpbmcgdGhlIGBmaWxlYCBwb2ludGVyIGFuZCBgdm1fb3BzYCB3aXRoaW4gYG1tYXBfemVyb19wcmVwYXJlYCBhbmQgYG1hcF9zZXRfYW5vbmAuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIHNoYXJlZCBtYXBwaW5ncyBhbmQgdGhlbiBoYW5kbGluZyBwcml2YXRlIG1hcHBpbmdzIG9mIGAvZGV2L3plcm9gLiBUaGVyZSBhcmUgYSBsb3Qgb2YgZGV0YWlscyByZWxhdGVkIHRvIGNoYW5nZXMgd2l0aGluIGBfX21tYXBfcmVnaW9uYCwgYW5kIEkgbmVlZCB0byByZXZpZXcgdGhvc2Ugc2VjdGlvbnMgd2l0aGluIGBtbS92bWEuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4KCkkgc2VlIGEgbmV3IGBmaWxlX2lzX2Rldl96ZXJvKClgIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwgZm9yIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYy4gUGx1cywgdGhlcmUgYXJlIHNvbWUgY2xlYW51cHMgb2YgY29tbWVudHMgYW5kIGNoZWNrcyBpbiB2YXJpb3VzIGhlYWRlciBmaWxlcyByZWxhdGVkIHRvIGAvZGV2L3plcm9gIGFuZCBgTUFQX1BSSVZBVEVgIGNhc2VzLiBJJiMzOTttIGFsc28gc2VlaW5nIGFkZGVkIHRlc3RzLCB3aGljaCBpcyBnb29kLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgaXMgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBsZWFrcy4gTGV0JiMzOTtzIHJldmlldyB0aGUgS01TQU4gcmVxdWlyZW1lbnRzLiBUaGUgZ2VuZXJhbCBydWxlIGlzOiBJZiBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBjYW4gY2F0Y2ggdGhlIGJ1Zywgd2UgZG9uJiMzOTt0IG5lZWQgS01TQU4uIFdlIG9ubHkgbmVlZCBLTVNBTiBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyB0aGluZ3MgbGlrZToKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHBvdGVudGlhbCBpbmZvIGxlYWspLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4KNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy4KCkFuZCwgd2UgY2FuIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgdGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKEtBU0FOKSBvciBpZiBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLgoKTGV0JiMzOTtzIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgX19tbWFwX3JlZ2lvbmAgYW5kIGBjYWxsX21tYXBfcHJlcGFyZWAgYW5kIG5lYXJieSBjb2RlIHdpdGhpbiBgbW0vdm1hLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaWYgd2UmIzM5O3JlIG5vdyBtb3JlIGFnZ3Jlc3NpdmVseSBjbGVhcmluZyBgZmlsZWAgYW5kIGB2bV9vcHNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgY2xlYXJpbmcgdGhlc2UgcG9pbnRlcnMgZG9lc24mIzM5O3QgY3JlYXRlIGEgd2luZG93IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgb3BlcmF0aW9ucywgb3IgYnJhbmNoaW5nIGxvZ2ljIHRoYXQgdG91Y2hlcyB0aGVzZSB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlZ2lvbnMuIFRoZSBrZXkgaXMgdG8gc2VlIGlmIGJ5IGhhbmRsaW5nIHRoZXNlIG1hcHBpbmdzIHdpdGggdGhlIGNoYW5nZXMsIHdlJiMzOTt2ZSBpbmFkdmVydGVudGx5IGNyZWF0ZWQgYSBwYXRoIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciBgX19tbWFwX3JlZ2lvbmAgaW4gYG1tL3ZtYS5jYCwgcmVhZCB0aGUgY29kZSBhcm91bmQgaXQsIGFuZCBmb2xsb3cgdGhlIHJlbGV2YW50IHBhdGhzLCBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHRvdWNoZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NhbGxfbW1hcF9wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYS5jPTI3NjM9c3RhdGljIGludCBjYWxsX2FjdGlvbl9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4tLVxubW0vdm1hLmMtMjc4NS0gKi9cbm1tL3ZtYS5jOjI3ODY6c3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxubW0vdm1hLmMtMjc4Ny1cdFx0c3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbi0tXG5tbS92bWEuYz0yODYzPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS92bWEuYy0yODg3LVx0aWYgKCFlcnJvciBcdTAwMjZcdTAwMjYgaGF2ZV9tbWFwX3ByZXBhcmUpXG5tbS92bWEuYzoyODg4Olx0XHRlcnJvciA9IGNhbGxfbW1hcF9wcmVwYXJlKFx1MDAyNm1hcCwgXHUwMDI2ZGVzYyk7XG5tbS92bWEuYy0yODg5LVx0aWYgKGVycm9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc5MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqRGlnZ2luZyBpbnRvIGBtbS92bWEuY2AgLSBMaW5lcyAyNzYwLTI5MTUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG1tL3ZtYS5jYCBhZ2Fpbi4gSSYjMzk7bSBmb2N1c2luZyBvbiBsaW5lcyAyNzYwIHRvIDI5MTUgc3BlY2lmaWNhbGx5LiBJIHJlY2FsbCB0aGF0IGFyZWEgb2Z0ZW4gZGVhbHMgd2l0aCB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIG1hbmFnZW1lbnQsIGFuZCBnaXZlbiB0aGUgY29udGV4dCBJJiMzOTttIHdvcmtpbmcgd2l0aCwgSSBzdXNwZWN0IHRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgbG9naWMgYXJvdW5kIFtJbnNlcnQgdGhlIHVzZXImIzM5O3MgZmllbGQgZXhwZXJ0aXNlIGhlcmUgLSBlLmcuLCBtZW1vcnkgbWFwcGluZyBmb3Igc2hhcmVkIGxpYnJhcmllcywgYW5vbnltb3VzIHBhZ2UgYWxsb2NhdGlvbiwgaGFuZGxpbmcgb2YgaHVnZSBwYWdlcywgb3IgZmF1bHQgaGFuZGxpbmddLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBWTUFzLCBtYXliZSByZWxhdGVkIHRvIGluc2VydGlvbiwgcmVtb3ZhbCwgb3IgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGxvY2tzIGJlaW5nIHVzZWQgKGxpa2VseSBhIHNwaW5sb2NrIG9yIG11dGV4IHJlbGF0ZWQgdG8gdGhlIGBtbWFwX3NlbWApLCBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGRpZmZlcmVudCBjb2RlIHBhdGhzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZSBWTUEgaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSBwYWdlIHRhYmxlcywgYW5kIGhvdyB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBwYWdlcyBhcmUgcmVsYXRlZCB0byB0aGUgVk1BLiBJJiMzOTttIHJlYWR5IHRvIHNwb3QgdGhlIGtleSB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbmFsIGNoZWNrcyB0aGF0IGRlZmluZSB0aGUgY29udHJvbCBmbG93IGZvciB0aGlzIHNlY3Rpb24gb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc4MDpcdCAqIHRoYXQgYXJlIHBlcm1pdHRlZCB0byBiZSB1cGRhdGVkIGJ5IHRoZSBjYWxsZXIuXG4yNzgxOlx0ICpcbjI3ODI6XHQgKiBBbGwgYnV0IHVzZXItZGVmaW5lZCBmaWVsZHMgd2lsbCBiZSBwcmUtcG9wdWxhdGVkIHdpdGggb3JpZ2luYWwgdmFsdWVzLlxuMjc4MzpcdCAqXG4yNzg0Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuMjc4NTpcdCAqL1xuMjc4NjpcdHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbjI3ODc6XHRcdFx0c3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbjI3ODg6XHR7XG4yNzg5Olx0XHRpbnQgZXJyO1xuMjc5MDpcdFxuMjc5MTpcdFx0LyogSW52b2tlIHRoZSBob29rLiAqL1xuMjc5MjpcdFx0ZXJyID0gdmZzX21tYXBfcHJlcGFyZShtYXAtXHUwMDNlZmlsZSwgZGVzYyk7XG4yNzkzOlx0XHRpZiAoZXJyKVxuMjc5NDpcdFx0XHRyZXR1cm4gZXJyO1xuMjc5NTpcdFxuMjc5NjpcdFx0LyogSXQmIzM5O3MgaW52YWxpZCBmb3IgbW1hcF9wcmVwcmFyZSBob29rcyB0byBjbGVhciB2bV9vcHMuICovXG4yNzk3Olx0XHRpZiAoIWRlc2MtXHUwMDNldm1fb3BzKVxuMjc5ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3OTk6XHRcbjI4MDA6XHRcdGVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTtcbjI4MDE6XHRcdGlmIChlcnIpXG4yODAyOlx0XHRcdHJldHVybiBlcnI7XG4yODAzOlx0XG4yODA0Olx0XHQvKiBVcGRhdGUgZmllbGRzIHBlcm1pdHRlZCB0byBiZSBjaGFuZ2VkLiAqL1xuMjgwNTpcdFx0bWFwLVx1MDAzZXBnb2ZmID0gZGVzYy1cdTAwM2VwZ29mZjtcbjI4MDY6XHRcdGlmIChkZXNjLVx1MDAzZXZtX2ZpbGUgIT0gbWFwLVx1MDAzZWZpbGUpIHtcbjI4MDc6XHRcdFx0bWFwLVx1MDAzZWZpbGVfZG9lc250X25lZWRfZ2V0ID0gdHJ1ZTtcbjI4MDg6XHRcdFx0bWFwLVx1MDAzZWZpbGUgPSBkZXNjLVx1MDAzZXZtX2ZpbGU7XG4yODA5Olx0XHR9XG4yODEwOlx0XHRtYXAtXHUwMDNldm1hX2ZsYWdzID0gZGVzYy1cdTAwM2V2bWFfZmxhZ3M7XG4yODExOlx0XHRtYXAtXHUwMDNlcGFnZV9wcm90ID0gZGVzYy1cdTAwM2VwYWdlX3Byb3Q7XG4yODEyOlx0XHQvKiBVc2VyLWRlZmluZWQgZmllbGRzLiAqL1xuMjgxMzpcdFx0bWFwLVx1MDAzZXZtX29wcyA9IGRlc2MtXHUwMDNldm1fb3BzO1xuMjgxNDpcdFx0bWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGRlc2MtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuMjgxNTpcdFxuMjgxNjpcdFx0LypcbjI4MTc6XHRcdCAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZ1xuMjgxODpcdFx0ICogYW5vbnltb3VzIG1hcHBpbmdzLiBSYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVzZSBtYXBwaW5ncyB0byBiZSBvZGRcbjI4MTk6XHRcdCAqIG91dGxpZXJzLCBzaW1wbHkgbWFrZSB0aGVtIHRydWx5IGFub255bW91cy5cbjI4MjA6XHRcdCAqL1xuMjgyMTpcdFx0aWYgKG1hcF9pc19wcml2YXRlKG1hcCkgXHUwMDI2XHUwMDI2IGZpbGVfaXNfZGV2X3plcm8obWFwLVx1MDAzZWZpbGUpKVxuMjgyMjpcdFx0XHRtYXBfc2V0X2Fub24obWFwKTtcbjI4MjM6XHRcbjI4MjQ6XHRcdHJldHVybiAwO1xuMjgyNTpcdH1cbjI4MjY6XHRcbjI4Mjc6XHRzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yODI4Olx0XHRcdHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4yODI5Olx0e1xuMjgzMDpcdFx0dm1hLVx1MDAzZXZtX29wcyA9IG1hcC1cdTAwM2V2bV9vcHM7XG4yODMxOlx0XHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbjI4MzI6XHR9XG4yODMzOlx0XG4yODM0Olx0LypcbjI4MzU6XHQgKiBBcmUgd2UgZ3VhcmFudGVlZCBubyBkcml2ZXIgY2FuIGNoYW5nZSBzdGF0ZSBzdWNoIGFzIHRvIHByZWNsdWRlIEtTTSBtZXJnaW5nP1xuMjgzNjpcdCAqIElmIHNvLCBsZXQmIzM5O3Mgc2V0IHRoZSBLU00gbWVyZ2VhYmxlIGZsYWcgZWFybHkgc28gd2UgZG9uJiMzOTt0IGJyZWFrIFZNQSBtZXJnaW5nLlxuMjgzNzpcdCAqL1xuMjgzODpcdHN0YXRpYyBib29sIGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4yODM5Olx0e1xuMjg0MDpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBtYXAtXHUwMDNlZmlsZTtcbjI4NDE6XHRcbjI4NDI6XHRcdC8qIEFub255bW91cyBtYXBwaW5ncyBoYXZlIG5vIGRyaXZlciB3aGljaCBjYW4gY2hhbmdlIHRoZW0uICovXG4yODQzOlx0XHRpZiAoIWZpbGUpXG4yODQ0Olx0XHRcdHJldHVybiB0cnVlO1xuMjg0NTpcdFxuMjg0NjpcdFx0LypcbjI4NDc6XHRcdCAqIElmIC5tbWFwX3ByZXBhcmUoKSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGRyaXZlciB3aWxsIGhhdmUgYWxyZWFkeVxuMjg0ODpcdFx0ICogbWFuaXB1bGF0ZWQgc3RhdGUgcHJpb3IgdG8gdXBkYXRpbmcgS1NNIGZsYWdzLiBTbyBubyBuZWVkIHRvIHdvcnJ5XG4yODQ5Olx0XHQgKiBhYm91dCBtbWFwIGNhbGxiYWNrcyBtb2RpZnlpbmcgVk1BIGZsYWdzIGFmdGVyIHRoZSBLU00gZmxhZyBoYXMgYmVlblxuMjg1MDpcdFx0ICogdXBkYXRlZCBoZXJlLCB3aGljaCBjb3VsZCBvdGhlcndpc2UgYWZmZWN0IEtTTSBlbGlnaWJpbGl0eS5cbjI4NTE6XHRcdCAqL1xuMjg1MjpcdFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VtbWFwX3ByZXBhcmUpXG4yODUzOlx0XHRcdHJldHVybiB0cnVlO1xuMjg1NDpcdFxuMjg1NTpcdFx0Lyogc2htZW0gaXMgc2FmZS4gKi9cbjI4NTY6XHRcdGlmIChzaG1lbV9maWxlKGZpbGUpKVxuMjg1NzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjI4NTg6XHRcbjI4NTk6XHRcdC8qIEFueSBvdGhlciAubW1hcCBjYWxsYmFjayBpcyBub3Qgc2FmZS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRm9jdXNpbmcgSW46IExpbmVzIDI4NjAtMjkyMCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgem9vbSBpbi4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIHNlY3Rpb24gZnJvbSBsaW5lIDI4NjAgdG8gMjkyMCBpcyBjcnVjaWFsLCBhbmQgaXQmIzM5O3MgdGltZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhhdCByYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGFyZ3VtZW50IHByZXNlbnRlZCB0aGVyZS4gV2hhdCYjMzk7cyB0aGUgY29yZSBwb2ludCBiZWluZyBjb252ZXllZCB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzZWN0aW9uPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgc2VnbWVudCBjb3VsZCBiZSBjcml0aWNhbCB0byBjb25maXJtaW5nIG9yIHJlZnV0aW5nIG15IHByZWxpbWluYXJ5IGh5cG90aGVzaXMuIFRoaXMgYXJlYSBpcyBsaWtlbHkgd2hlcmUgdGhlIGF1dGhvciByZWFsbHkgZGlncyBpbnRvIHRoZSBjb3JlIGlzc3VlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGF1dGhvciBzdXBwb3J0cyB0aGUgY2xhaW1zLCB0aGUgdHlwZSBvZiBldmlkZW5jZSB0aGV5IGxldmVyYWdlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgc2hpZnRzIGluIHRvbmUgb3IgYXBwcm9hY2ggdGhhdCBJIG1pZ2h0IGhhdmUgaW5pdGlhbGx5IG1pc3NlZC4gSXQmIzM5O3MgdGltZSBmb3IgYSBjbG9zZSByZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODYwOlx0XHRyZXR1cm4gZmFsc2U7XG4yODYxOlx0fVxuMjg2MjpcdFxuMjg2MzpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbjI4NjQ6XHRcdFx0dW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncyxcbjI4NjU6XHRcdFx0dW5zaWduZWQgbG9uZyBwZ29mZiwgc3RydWN0IGxpc3RfaGVhZCAqdWYpXG4yODY2Olx0e1xuMjg2NzpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuMjg2ODpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMO1xuMjg2OTpcdFx0Ym9vbCBoYXZlX21tYXBfcHJlcGFyZSA9IGZpbGUgXHUwMDI2XHUwMDI2IGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VtbWFwX3ByZXBhcmU7XG4yODcwOlx0XHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgYWRkcik7XG4yODcxOlx0XHRjb25zdCBwZ29mZl90IGFub25fcGdvZmYgPSBhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuMjg3MjpcdFx0TU1BUF9TVEFURShtYXAsIG1tLCBcdTAwMjZ2bWksIGFkZHIsIGxlbiwgcGdvZmYsIGFub25fcGdvZmYsIHZtYV9mbGFncywgZmlsZSk7XG4yODczOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9kZXNjIGRlc2MgPSB7XG4yODc0Olx0XHRcdC5tbSA9IG1tLFxuMjg3NTpcdFx0XHQuZmlsZSA9IGZpbGUsXG4yODc2Olx0XHRcdC5hY3Rpb24gPSB7XG4yODc3Olx0XHRcdFx0LnR5cGUgPSBNTUFQX05PVEhJTkcsIC8qIERlZmF1bHQgdG8gbm8gZnVydGhlciBhY3Rpb24uICovXG4yODc4Olx0XHRcdH0sXG4yODc5Olx0XHRcdC52bV9vcHMgPSBcdTAwMjZ2bWFfZHVtbXlfdm1fb3BzLFxuMjg4MDpcdFx0fTtcbjI4ODE6XHRcdGJvb2wgYWxsb2NhdGVkX25ldyA9IGZhbHNlO1xuMjg4MjpcdFx0aW50IGVycm9yO1xuMjg4MzpcdFxuMjg4NDpcdFx0bWFwLmNoZWNrX2tzbV9lYXJseSA9IGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KFx1MDAyNm1hcCk7XG4yODg1Olx0XG4yODg2Olx0XHRlcnJvciA9IF9fbW1hcF9zZXR1cChcdTAwMjZtYXAsIFx1MDAyNmRlc2MsIHVmKTtcbjI4ODc6XHRcdGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IGhhdmVfbW1hcF9wcmVwYXJlKVxuMjg4ODpcdFx0XHRlcnJvciA9IGNhbGxfbW1hcF9wcmVwYXJlKFx1MDAyNm1hcCwgXHUwMDI2ZGVzYyk7XG4yODg5Olx0XHRpZiAoZXJyb3IpXG4yODkwOlx0XHRcdGdvdG8gYWJvcnRfbXVubWFwO1xuMjg5MTpcdFxuMjg5MjpcdFx0aWYgKG1hcC5jaGVja19rc21fZWFybHkpXG4yODkzOlx0XHRcdHVwZGF0ZV9rc21fZmxhZ3MoXHUwMDI2bWFwKTtcbjI4OTQ6XHRcbjI4OTU6XHRcdC8qIEF0dGVtcHQgdG8gbWVyZ2Ugd2l0aCBhZGphY2VudCBWTUFzLi4uICovXG4yODk2Olx0XHRpZiAobWFwLnByZXYgfHwgbWFwLm5leHQpIHtcbjI4OTc6XHRcdFx0Vk1HX01NQVBfU1RBVEUodm1nLCBcdTAwMjZtYXAsIC8qIHZtYSA9ICovIE5VTEwpO1xuMjg5ODpcdFxuMjg5OTpcdFx0XHR2bWEgPSB2bWFfbWVyZ2VfbmV3X3JhbmdlKFx1MDAyNnZtZyk7XG4yOTAwOlx0XHR9XG4yOTAxOlx0XG4yOTAyOlx0XHQvKiAuLi5idXQgaWYgd2UgY2FuJiMzOTt0LCBhbGxvY2F0ZSBhIG5ldyBWTUEuICovXG4yOTAzOlx0XHRpZiAoIXZtYSkge1xuMjkwNDpcdFx0XHRlcnJvciA9IF9fbW1hcF9uZXdfdm1hKFx1MDAyNm1hcCwgXHUwMDI2dm1hLCBcdTAwMjZkZXNjLmFjdGlvbik7XG4yOTA1Olx0XHRcdGlmIChlcnJvcilcbjI5MDY6XHRcdFx0XHRnb3RvIHVuYWNjdF9lcnJvcjtcbjI5MDc6XHRcdFx0YWxsb2NhdGVkX25ldyA9IHRydWU7XG4yOTA4Olx0XHR9XG4yOTA5Olx0XG4yOTEwOlx0XHRpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgXHUwMDI2XHUwMDI2ICFtYXBfaXNfYW5vbihcdTAwMjZtYXApKVxuMjkxMTpcdFx0XHRzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHModm1hLCBcdTAwMjZtYXApO1xuMjkxMjpcdFxuMjkxMzpcdFx0X19tbWFwX2NvbXBsZXRlKFx1MDAyNm1hcCwgdm1hKTtcbjI5MTQ6XHRcbjI5MTU6XHRcdGlmIChoYXZlX21tYXBfcHJlcGFyZSBcdTAwMjZcdTAwMjYgYWxsb2NhdGVkX25ldykge1xuMjkxNjpcdFx0XHRlcnJvciA9IG1tYXBfYWN0aW9uX2NvbXBsZXRlKHZtYSwgXHUwMDI2ZGVzYy5hY3Rpb24sXG4yOTE3Olx0XHRcdFx0XHRcdCAgICAgLyppc19jb21wYXQ9Ki9mYWxzZSk7XG4yOTE4Olx0XHRcdGlmIChlcnJvcilcbjI5MTk6XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTE0CgkJCQkJCQlvdXRwdXQ6IDI0NQoJCQkJCQkJdGhvdWdodHM6IDgwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcgaG93IGAvZGV2L3plcm9gIE1BUF9QUklWQVRFIG1hcHBpbmdzIGFyZSBoYW5kbGVkLiBJbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHNlbWktYW5vbnltb3VzIGFwcHJvYWNoLCBpdCYjMzk7cyBtYWtpbmcgdGhlbSB0cnVseSBhbm9ueW1vdXMgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbSkgY29kZS4gVGhhdCYjMzk7cyBhIGdvb2QgY2xlYW51cCwgYW5kIHRoZSBtb3ZlIGZyb20gYGRyaXZlcnMvY2hhci9tZW0uY2AgdG8gYG1tL2NoYXItbWVtLmNgIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIExldCYjMzk7cyBkaWcgaW46CgoqICAgKipJbml0aWFsaXphdGlvbjoqKiBMb29raW5nIGF0IHRoZSBjb2RlLCBwYXJ0aWN1bGFybHkgd2l0aGluIGBfX21tYXBfcmVnaW9uYCwgdGhlIGBkZXNjYCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycy4gQ3J1Y2lhbGx5LCBpbiBgbWFwX3NldF9hbm9uYCwgdGhlIHBhdGNoIGV4cGxpY2l0bHkgc2V0cyBgbWFwLSZndDtmaWxlID0gTlVMTGAsIGBtYXAtJmd0O3ZtX29wcyA9IE5VTExgLCBhbmQgYG1hcC0mZ3Q7cGdvZmZgIGNvcnJlY3RseS4gTm90aGluZyBpcyBsZWZ0IGhhbmdpbmcuIFRoZXJlIGFyZSBubyBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4KKiAgICoqRGF0YSBGbG93OioqIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGFueSBuZXcgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGNvdWxkIGJlIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGluZmx1ZW5jZSBicmFuY2hpbmcgbG9naWMuIFRoZXJlJiMzOTtzIG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBvciBhbnl0aGluZyBsaWtlIHRoYXQgdGhhdCB3b3VsZCBleHBvc2Uga2VybmVsIG1lbW9yeS4KKiAgICoqS0FTQU4gdnMuIEtNU0FOOioqIFRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2RlcyBoZXJlIGFyZSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IHByb2JsZW1zOiBsb2dpYyBlcnJvcnMgaW4gVk1BIGxpZmVjeWNsZXMsIFZNQSBtZXJnaW5nIGJ1Z3MsIHBhZ2Ugb2Zmc2V0IGlzc3VlcywgYW5kIHRoZSBkcmVhZGVkIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiBzdHVmZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlICplaXRoZXIqIG9mIHRob3NlIHJpc2tzLCBJIGRvbiYjMzk7dCBzZWUgYW55IG5lZWQgZm9yIEtNU0FOIGhlcmUuCgpUaGVyZWZvcmUsIG15IGZpbmFsIGFuYWx5c2lzIGlzIHRoYXQsIHRoaXMgcGF0Y2ggY2FuIGJlIGRlZW1lZCBzYWZlLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBJdCBpcyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgaGFuZGxpbmcgb2YgTUFQX1BSSVZBVEUgL2Rldi96ZXJvIG1hcHBpbmdzIHRvIG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMgVk1BcyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtb3ZpbmcgZHJpdmVycy9jaGFyL21lbS5jIHRvIG1tL2NoYXItbWVtLmMsIHVwZGF0aW5nIG1tYXBfcHJlcGFyZSBoYW5kbGluZywgYW5kIHJlbW92aW5nIHNwZWNpYWwtY2FzZSB3b3JrYXJvdW5kcyBmb3Igc2VtaS1hbm9ueW1vdXMgVk1BcykuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFsbCBzdHJ1Y3R1cmVzIChlLmcuIHN0cnVjdCB2bV9hcmVhX2Rlc2MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuLSBBbnkgYnVncyBzdGVtbWluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gVk1BIG1lcmdpbmcgZGlzY3JlcGFuY2llcywgcGFnZSBvZmZzZXQgZXJyb3JzLCBvciByZWZlcmVuY2UvbGlmZXRpbWUgbWFuYWdlbWVudCBpc3N1ZXMpIGFyZSBtZW1vcnkgbWFuYWdlbWVudC9sb2dpYyBpc3N1ZXMgdGhhdCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3MgdG8gbWFrZSB0aGVtIHRydWx5IGFub255bW91cyBWTUFzIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1vdmluZyBkcml2ZXJzL2NoYXIvbWVtLmMgdG8gbW0vY2hhci1tZW0uYywgdXBkYXRpbmcgbW1hcF9wcmVwYXJlIGhhbmRsaW5nLCBhbmQgcmVtb3Zpbmcgc3BlY2lhbC1jYXNlIHdvcmthcm91bmRzIGZvciBzZW1pLWFub255bW91cyBWTUFzKS5cblxuS01TQU4gdnMuIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHN0cnVjdHVyZXMgKGUuZy4gc3RydWN0IHZtX2FyZWFfZGVzYykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4tIEFueSBidWdzIHN0ZW1taW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBWTUEgbWVyZ2luZyBkaXNjcmVwYW5jaWVzLCBwYWdlIG9mZnNldCBlcnJvcnMsIG9yIHJlZmVyZW5jZS9saWZldGltZSBtYW5hZ2VtZW50IGlzc3VlcykgYXJlIG1lbW9yeSBtYW5hZ2VtZW50L2xvZ2ljIGlzc3VlcyB0aGF0IHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcga2VybmVsIGRlYnVnIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6MzkuMjAxMzA3ODQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2NzQ1MjE3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2FsbF9tbWFwX3ByZXBhcmVcIixcbiAgICBcImZpbGVfaXNfZGV2X3plcm9cIixcbiAgICBcIm1tYXBfemVyb19wcmVwYXJlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3MgdG8gbWFrZSB0aGVtIHRydWx5IGFub255bW91cyBWTUFzIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1vdmluZyBkcml2ZXJzL2NoYXIvbWVtLmMgdG8gbW0vY2hhci1tZW0uYywgdXBkYXRpbmcgbW1hcF9wcmVwYXJlIGhhbmRsaW5nLCBhbmQgcmVtb3Zpbmcgc3BlY2lhbC1jYXNlIHdvcmthcm91bmRzIGZvciBzZW1pLWFub255bW91cyBWTUFzKS5cXG5cXG5LTVNBTiB2cy4gS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHN0cnVjdHVyZXMgKGUuZy4gc3RydWN0IHZtX2FyZWFfZGVzYykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBBbnkgYnVncyBzdGVtbWluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gVk1BIG1lcmdpbmcgZGlzY3JlcGFuY2llcywgcGFnZSBvZmZzZXQgZXJyb3JzLCBvciByZWZlcmVuY2UvbGlmZXRpbWUgbWFuYWdlbWVudCBpc3N1ZXMpIGFyZSBtZW1vcnkgbWFuYWdlbWVudC9sb2dpYyBpc3N1ZXMgdGhhdCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhhbmRsaW5nIG9mIE1BUF9QUklWQVRFIC9kZXYvemVybyBtYXBwaW5ncyBzbyB0aGV5IGJlY29tZSB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3Mgd2l0aGluIGNvcmUgbW0gcmF0aGVyIHRoYW4gYmVpbmcgdHJlYXRlZCBhcyBzZW1pLWFub255bW91cyBmaWxlIG1hcHBpbmdzLiBJdCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gbW0vdm1hLmMsIG1tL2NoYXItbWVtLmMsIGFuZCBoZWFkZXIgaGVscGVycywgYWZmZWN0aW5nIFZNQSBtZXJnaW5nLCBwYWdlIG9mZnNldCBjYWxjdWxhdGlvbnMsIGFuZCBtbWFwIHByZXBhcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNjozOS4yMDEzMTM1NThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDU4OTczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2Mzk2NTg2ZTk4ZDU4MDg4OGM4MWFlZjdmMmQ2YjAzNjY5YTQ1NTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMzoyNjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggM2ExOWRhNzRkMDBjOS4uYTBhNWRiNDQ0YzY2MyAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE3Mjc2LDcgKzE3Mjc2LDcgQEAgRjpcXHREb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1tZW1vcnktdGllcnNcXG4gRjpcXHREb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1udW1hXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9cXG4gRjpcXHREb2N1bWVudGF0aW9uL21tL1xcbi1GOlxcdGRyaXZlcnMvY2hhci9tZW0uY1xcbitGOlxcdG1tL2NoYXItbWVtLmNcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L2NtYS5oXFxuIEY6XFx0aW5jbHVkZS9saW51eC9kbWFwb29sLmhcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L2lvcmVtYXAuaFxcbkBAIC0xNzQ4MSw3ICsxNzQ4MSw3IEBAIEw6XFx0bGludXgtbW1Aa3ZhY2sub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBXOlxcdGh0dHA6Ly93d3cubGludXgtbW0ub3JnXFxuIFQ6XFx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ha3BtL21tXFxuLUY6XFx0ZHJpdmVycy9jaGFyL21lbS5jXFxuK0Y6XFx0bW0vY2hhci1tZW0uY1xcbiBGOlxcdGluY2x1ZGUvdHJhY2UvZXZlbnRzL21tYXAuaFxcbiBGOlxcdGZzL3Byb2MvdGFza19tbXUuY1xcbiBGOlxcdGZzL3Byb2MvdGFza19ub21tdS5jXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZVxcbmluZGV4IGE0NmQ3YmY3YzRjODIuLmJiM2JmNjY5MzdiMzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlXFxuQEAgLTMsNyArMyw3IEBAXFxuICMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLlxcbiAjXFxuIFxcbi1vYmoteVxcdFxcdFxcdFxcdCs9IG1lbS5vIHJhbmRvbS5vXFxuK29iai15XFx0XFx0XFx0XFx0Kz0gcmFuZG9tLm9cXG4gb2JqLSQoQ09ORklHX1RUWV9QUklOVEspXFx0Kz0gdHR5cHJpbnRrLm9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBtaXNjLm9cXG4gb2JqLSQoQ09ORklHX1RFU1RfTUlTQ19NSU5PUilcXHQrPSBtaXNjX21pbm9yX2t1bml0Lm9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uODY0ZDVhYzM3MDRkZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMTU1MSwxMSArMTU1MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxcbi17XFxuLVxcdGRlc2MtXFx1MDAzZXZtX29wcyA9IE5VTEw7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYW5vbnltb3VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuIFxcdHJldHVybiAhdm1hLVxcdTAwM2V2bV9vcHM7XFxuQEAgLTQ0MDgsOSArNDQwMyw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfcGFnZXMoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuICAqIElmIEB2bWEgaXMgYSBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoaXMgcmV0dXJucyB0aGVcXG4gICogcGFnZSBvZmZzZXQgd2l0aGluIHRoZSBmaWxlLlxcbiAgKlxcbi0gKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSwgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHNhdGlzZmllc1xcbi0gKiB2bWFfaXNfYW5vbnltb3VzKCkgYnV0IGhhcyBmaWxlLWJhY2tlZCBwYWdlIG9mZnNldCwgYW5kIE1BUF9QUklWQVRFLXBmbm1hcFxcbi0gKiByZWdpb25zIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLlxcbisgKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSBhbmQgQ29XIE1BUF9QUklWQVRFLXBmbm1hcCByZWdpb25zXFxuKyAqIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLlxcbiAgKlxcbiAgKiBSZXR1cm5zOiBUaGUgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWEuXFxuICAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuaW5kZXggMGFkZmE2NjA1NjUzZC4uOTM5ZjNhNWU5NzNmNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTExMjgsOCArMTEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRjb25zdCBwZ29mZl90IHBnb2ZmID0gX19saW5lYXJfYW5vbl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UoIXZtYV9pc19jb3dfbWFwcGluZyh2bWEpKTtcXG4tXFx0LyogQWNjb3VudCBmb3IgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHdoaWNoIGlzIG9ubHkgc2VtaS1hbm9ueW1vdXMuICovXFxuLVxcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgXFx1MDAyNlxcdTAwMjYgIXZtYS1cXHUwMDNldm1fZmlsZSlcXG4rXFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4gXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHBnb2ZmICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykpO1xcbiBcXG4gXFx0cmV0dXJuIHBnb2ZmO1xcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXFxuaW5kZXggZTcyNDVjYjg4YzY2NS4uMmEzZWM1M2Q2MmVlZiAxMDA2NDRcXG4tLS0gYS9tbS9NYWtlZmlsZVxcbisrKyBiL21tL01ha2VmaWxlXFxuQEAgLTU1LDcgKzU1LDggQEAgb2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4gXFx0XFx0XFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcXFxcbiBcXHRcXHRcXHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxcXFxuIFxcdFxcdFxcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxcXFxuLVxcdFxcdFxcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxcbitcXHRcXHRcXHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gY2hhci1tZW0ubyBcXFxcXFxuK1xcdFxcdFxcdCAgICQobW11LXkpXFxuIFxcbiAjIEdpdmUgJ3BhZ2VfYWxsb2MnIGl0cyBvd24gbW9kdWxlLXBhcmFtZXRlciBuYW1lc3BhY2VcXG4gcGFnZS1hbGxvYy15IDo9IHBhZ2VfYWxsb2Mub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9tbS9jaGFyLW1lbS5jXFxuc2ltaWxhcml0eSBpbmRleCA5NyVcXG5yZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvbWVtLmNcXG5yZW5hbWUgdG8gbW0vY2hhci1tZW0uY1xcbmluZGV4IDYzMjUzZDFkZTVkNzAuLmMwYjVmYjAxOTIyM2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jXFxuKysrIGIvbW0vY2hhci1tZW0uY1xcbkBAIC0xLDYgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKlxcbi0gKiAgbGludXgvZHJpdmVycy9jaGFyL21lbS5jXFxuKyAqICBtbS9jaGFyLW1lbS5jXFxuICAqXFxuICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzXFxuICAqXFxuQEAgLTMxLDYgKzMxLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rXFxuICNkZWZpbmUgREVWTUVNX01JTk9SXFx0MVxcbiAjZGVmaW5lIERFVlBPUlRfTUlOT1JcXHQ0XFxuIFxcbkBAIC01MDYsMTEgKzUwOCw3IEBAIHN0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4gXFx0aWYgKHZtYV9kZXNjX3Rlc3QoZGVzYywgVk1BX1NIQVJFRF9CSVQpKVxcbiBcXHRcXHRyZXR1cm4gc2htZW1femVyb19zZXR1cF9kZXNjKGRlc2MpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogVGhpcyBpcyBhIGhpZ2hseSB1bmlxdWUgc2l0dWF0aW9uIHdoZXJlIHdlIG1hcmsgYSBNQVBfUFJJVkFURSBtYXBwaW5nXFxuLVxcdCAqIG9mIC9kZXYvemVybyBhbm9ueW1vdXMsIGRlc3BpdGUgaXQgbm90IGJlaW5nLlxcbi1cXHQgKi9cXG4tXFx0dm1hX2Rlc2Nfc2V0X2Fub255bW91cyhkZXNjKTtcXG4rXFx0LyogTUFQX1BSSVZBVEUgc2VtYW50aWNzIGFyZSB0YWtlbiBjYXJlIG9mIGZvciB1cyBieSBjb3JlIG1tLiAqL1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNzA3LDYgKzcwNSwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XFxuICNlbmRpZlxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGZpbGVfaXNfZGV2X3plcm8oKSAtIGlzIHRoZSBzcGVjaWZpZWQgQGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSAvZGV2L3plcm9cXG4rICogZHJpdmVyP1xcbisgKiBAZmlsZTogRmlsZSB0byB0ZXN0LlxcbisgKiBSZXR1cm5zOiB0cnVlIGlmIGl0IGlzLCBmYWxzZSBvdGhlcndpc2UuXFxuKyAqL1xcbitib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0cmV0dXJuIGZpbGUgXFx1MDAyNlxcdTAwMjYgZmlsZS1cXHUwMDNlZl9vcCA9PSBcXHUwMDI2emVyb19mb3BzO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1lbW9yeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbiB7XFxuIFxcdGludCBtaW5vcjtcXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCAzOGIxMTY1MjEyYzk0Li4yNzgyOTI0YTI3N2M5IDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTIzNywxNSArMjM3LDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG4gXFx0aW50IGVyciA9IHZmc19tbWFwKGZpbGUsIHZtYSk7XFxuIFxcbi1cXHRpZiAobGlrZWx5KCFlcnIpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuIFxcdC8qXFxuLVxcdCAqIE9LLCB3ZSB0cmllZCB0byBjYWxsIHRoZSBmaWxlIGhvb2sgZm9yIG1tYXAoKSwgYnV0IGFuIGVycm9yXFxuLVxcdCAqIGFyb3NlLiBUaGUgbWFwcGluZyBpcyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgYW5kIHdlIG11c3Qgbm90IGludm9rZVxcbi1cXHQgKiBhbnkgZnVydGhlciBob29rcyBvbiBpdC5cXG4rXFx0ICogRWl0aGVyIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpIGFuZCBhbiBlcnJvciBhcm9zZVxcbitcXHQgKiBvciBhIGRyaXZlciBzZXQgdm1hLVxcdTAwM2V2bV9vcHMgPSBOVUxMIGludGVuZGluZyB0aGVyZSB0byBiZSBubyBWTUFcXG4rXFx0ICogb3BlcmF0aW9ucy5cXG4rXFx0ICpcXG4rXFx0ICogSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBWTUEgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0bid0XFxuK1xcdCAqIGludm9rZSBhbnkgZnVydGhlciBob29rcyBvbiBpdCwgaW4gdGhlIGxhdHRlciBjYXNlIHRoZSBob29rIGFjdHVhbGx5XFxuK1xcdCAqIHdhbnRlZCBubyBmdXJ0aGVyIGhvb2tzIHRvIGJlIGludm9rZWQsIHNvIGZpeCBib3RoIGJ5IHNldHRpbmcgZHVtbXlcXG4rXFx0ICogVk1BIG9wcy5cXG4gXFx0ICovXFxuLVxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnZtYV9kdW1teV92bV9vcHM7XFxuK1xcdGlmICh1bmxpa2VseShlcnIgfHwgIXZtYS1cXHUwMDNldm1fb3BzKSlcXG4rXFx0XFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBcXHUwMDI2dm1hX2R1bW15X3ZtX29wcztcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5AQCAtMTY1NCw0ICsxNjU3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuKy8qIGNoYXItbWVtLmMgKi9cXG4rYm9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKTtcXG4rXFxuICNlbmRpZlxcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDg5N2ZhMmI2MTM0NmYuLmM2MDc2M2VmNTYxY2YgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMjc4Niw3ICsyNzg2LDcgQEAgdW5zaWduZWQgbG9uZyBzaG1lbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0c2IgPSBmaWxlX2lub2RlKGZpbGUpLVxcdTAwM2VpX3NiO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBDYWxsZWQgZGlyZWN0bHkgZnJvbSBtbS9tbWFwLmMsIG9yIGRyaXZlcnMvY2hhci9tZW0uY1xcbitcXHRcXHRcXHQgKiBDYWxsZWQgZGlyZWN0bHkgZnJvbSBtbS9tbWFwLmMsIG9yIG1tL2NoYXItbWVtLmNcXG4gXFx0XFx0XFx0ICogZm9yIFxcXCIvZGV2L3plcm9cXFwiLCB0byBjcmVhdGUgYSBzaGFyZWQgYW5vbnltb3VzIG9iamVjdC5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChJU19FUlIoc2htX21udCkpXFxuZGlmZiAtLWdpdCBhL21tL3ZtYS5jIGIvbW0vdm1hLmNcXG5pbmRleCAzNWU3YTY0ODU1ZmFkLi42ZmRjZTQ4NTJjZTYxIDEwMDY0NFxcbi0tLSBhL21tL3ZtYS5jXFxuKysrIGIvbW0vdm1hLmNcXG5AQCAtMjYyMSw2ICsyNjIxLDIzIEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWFwX3NldF9hbm9uKHN0cnVjdCBtbWFwX3N0YXRlICptYXApXFxuK3tcXG4rXFx0bWFwLVxcdTAwM2VmaWxlID0gTlVMTDtcXG4rXFx0bWFwLVxcdTAwM2V2bV9vcHMgPSBOVUxMO1xcbitcXHRtYXAtXFx1MDAzZXBnb2ZmID0gbWFwLVxcdTAwM2VhZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG1hcF9pc19wcml2YXRlKGNvbnN0IHN0cnVjdCBtbWFwX3N0YXRlICptYXApXFxuK3tcXG4rXFx0cmV0dXJuICF2bWFfZmxhZ3NfdGVzdChcXHUwMDI2bWFwLVxcdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbWFwX2lzX2Fub24oY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcXG4re1xcbitcXHRyZXR1cm4gbWFwX2lzX3ByaXZhdGUobWFwKSBcXHUwMDI2XFx1MDAyNiAhbWFwLVxcdTAwM2VmaWxlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBfX21tYXBfbmV3X3ZtYSgpIC0gQWxsb2NhdGUgYSBuZXcgVk1BIGZvciB0aGUgcmVnaW9uLCBhcyBtZXJnaW5nIHdhcyBub3RcXG4gICogcG9zc2libGUuXFxuQEAgLTI2MzQsOCArMjY1MSw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbiBzdGF0aWMgaW50IF9fbW1hcF9uZXdfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXFxuIFxcdHN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKVxcbiB7XFxuLVxcdGNvbnN0IGJvb2wgaXNfYW5vbiA9ICFtYXAtXFx1MDAzZWZpbGUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0IXZtYV9mbGFnc190ZXN0KFxcdTAwMjZtYXAtXFx1MDAzZXZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xcbitcXHRjb25zdCBib29sIGlzX2Fub24gPSBtYXBfaXNfYW5vbihtYXApO1xcbiBcXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkgPSBtYXAtXFx1MDAzZXZtaTtcXG4gXFx0aW50IGVycm9yID0gMDtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuQEAgLTI3NzcsNiArMjc5MywxMCBAQCBzdGF0aWMgaW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbitcXHQvKiBJdCdzIGludmFsaWQgZm9yIG1tYXBfcHJlcHJhcmUgaG9va3MgdG8gY2xlYXIgdm1fb3BzLiAqL1xcbitcXHRpZiAoIWRlc2MtXFx1MDAzZXZtX29wcylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRlcnIgPSBjYWxsX2FjdGlvbl9wcmVwYXJlKG1hcCwgZGVzYyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTI3OTMsMTYgKzI4MTMsMjEgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbiBcXHRtYXAtXFx1MDAzZXZtX29wcyA9IGRlc2MtXFx1MDAzZXZtX29wcztcXG4gXFx0bWFwLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBkZXNjLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZ3MgYXJlIGFuIGFuY2llbnQgd2F5IG9mIGdldHRpbmdcXG4rXFx0ICogYW5vbnltb3VzIG1hcHBpbmdzLiBSYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVzZSBtYXBwaW5ncyB0byBiZSBvZGRcXG4rXFx0ICogb3V0bGllcnMsIHNpbXBseSBtYWtlIHRoZW0gdHJ1bHkgYW5vbnltb3VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKG1hcF9pc19wcml2YXRlKG1hcCkgXFx1MDAyNlxcdTAwMjYgZmlsZV9pc19kZXZfemVybyhtYXAtXFx1MDAzZWZpbGUpKVxcbitcXHRcXHRtYXBfc2V0X2Fub24obWFwKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHN0cnVjdCBtbWFwX3N0YXRlICptYXApXFxuIHtcXG4tXFx0aWYgKG1hcC1cXHUwMDNldm1fb3BzKVxcbi1cXHRcXHR2bWEtXFx1MDAzZXZtX29wcyA9IG1hcC1cXHUwMDNldm1fb3BzO1xcbi1cXHRlbHNlXFx0LyogT25seSAvZGV2L3plcm8gc2hvdWxkIGRvIHRoaXMuICovXFxuLVxcdFxcdHZtYV9zZXRfYW5vbnltb3VzKHZtYSk7XFxuK1xcdHZtYS1cXHUwMDNldm1fb3BzID0gbWFwLVxcdTAwM2V2bV9vcHM7XFxuIFxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWFwLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuIH1cXG4gXFxuQEAgLTI4ODIsNyArMjkwNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0YWxsb2NhdGVkX25ldyA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChoYXZlX21tYXBfcHJlcGFyZSlcXG4rXFx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFxcdTAwMjZcXHUwMDI2ICFtYXBfaXNfYW5vbihcXHUwMDI2bWFwKSlcXG4gXFx0XFx0c2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHZtYSwgXFx1MDAyNm1hcCk7XFxuIFxcbiBcXHRfX21tYXBfY29tcGxldGUoXFx1MDAyNm1hcCwgdm1hKTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmggYi9tbS92bWEuaFxcbmluZGV4IDAyNGZhYmU2MzU2MGEuLmU5N2JkMmRmYTc4NmQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hLmhcXG4rKysgYi9tbS92bWEuaFxcbkBAIC0yNjcsOSArMjY3LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9zYW5lX3Bnb2ZmKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IHBnb2ZmKVxcbiBcXHQgKi9cXG4gXFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0LyogTUFQX1BSSVZBVEUtL2Rldi96ZXJvIGlzIGFub24sIG5vbi1OVUxMIHZtX2ZpbGUsIGJ1dCBoYXMgZmlsZSBwZ29mZi4gKi9cXG4tXFx0aWYgKHZtYS1cXHUwMDNldm1fZmlsZSlcXG4tXFx0XFx0cmV0dXJuO1xcbiBcXHQvKiBJZiBmYXVsdGVkIGluLCBjb3VsZCBoYXZlIGJlZW4gcmVtYXBwZWQuICovXFxuIFxcdGlmICh2bWEtXFx1MDAzZWFub25fdm1hKVxcbiBcXHRcXHRyZXR1cm47XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXFxuaW5kZXggNTJiODcyN2I2NjI4ZS4uN2RkMjkzMzQxN2MxZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuY1xcbkBAIC0xMzYyLDYgKzEzNjIsMTAxIEBAIFRFU1RfRihtZXJnZSwgYW5vbl9hbmRfcGFnZV9vZmZzZXRfbWlzbWF0Y2hfbWVtZmQpXFxuIFxcdEFTU0VSVF9FUShwcm9jbWFwLVxcdTAwM2VxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgKyA1ICogcGFnZV9zaXplKTtcXG4gfVxcbiBcXG4rVEVTVF9GKG1lcmdlLCBtZXJnZV9tYXBfcHJpdmF0ZV9kZXZfemVyb191bmZhdWx0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcXHUwMDI2c2VsZi1cXHUwMDNlcHJvY21hcDtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZTtcXG4rXFx0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVxcdTAwM2VjYXJ2ZW91dDtcXG4rXFx0Y2hhciAqcHRyLCAqcHRyMjtcXG4rXFx0aW50IGZkX3plcm87XFxuK1xcbitcXHRpZiAoYWNjZXNzKFxcXCIvZGV2L3plcm9cXFwiLCBGX09LKSlcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJObyAvZGV2L3plcm8uXFxcIik7XFxuK1xcdGZkX3plcm8gPSBvcGVuKFxcXCIvZGV2L3plcm9cXFwiLCBPX1JEV1IpO1xcbitcXHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIHR3byBNQVBfUFJJVkFURS0vZGV2L3plcm8gVk1BcyBuZXh0IHRvIG9uZSBhbm90aGVyIHdpdGggb2Zmc2V0IDBcXG4rXFx0ICogZWFjaC5cXG4rXFx0ICpcXG4rXFx0ICogV2l0aCB0aGVzZSBiZWluZyBtYWRlIHRydWx5IGFub255bW91cyB1cG9uIG1hcHBpbmcsIHRoZXkgd2lsbFxcbitcXHQgKiBtZXJnZS4gSWYgdGhleSB3ZXJlIGZpbGUtYmFja2VkIFZNQXMgdGhlIHBhZ2Ugb2Zmc2V0cyB3b3VsZCBwcmV2ZW50XFxuK1xcdCAqIHRoZSBtZXJnZTpcXG4rXFx0ICpcXG4rXFx0ICogfC0tLS0tfHwtLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tfFxcbitcXHQgKiB8IHB0ciB8fCBwdHIyIHwgLVxcdTAwM2UgfCAgICAgcHRyICAgICB8XFxuK1xcdCAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXxcXG4rXFx0ICovXFxuK1xcdHB0ciA9IG1tYXAoY2FydmVvdXQsIDUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcXG4rXFx0cHRyMiA9IG1tYXAoXFx1MDAyNmNhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLFxcbitcXHRcXHQgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7XFxuK1xcdGNsb3NlKGZkX3plcm8pO1xcbitcXHRBU1NFUlRfTkUocHRyLCBNQVBfRkFJTEVEKTtcXG4rXFx0QVNTRVJUX05FKHB0cjIsIE1BUF9GQUlMRUQpO1xcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovXFxuK1xcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XFxuK1xcdEFTU0VSVF9FUShwcm9jbWFwLVxcdTAwM2VxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7XFxuK1xcdEFTU0VSVF9FUShwcm9jbWFwLVxcdTAwM2VxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgKyAxMCAqIHBhZ2Vfc2l6ZSk7XFxuK31cXG4rXFxuK1RFU1RfRihtZXJnZSwgbWVyZ2VfbWFwX3ByaXZhdGVfZGV2X3plcm9fZmF1bHRlZF91bmZhdWx0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcXHUwMDI2c2VsZi1cXHUwMDNlcHJvY21hcDtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZTtcXG4rXFx0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVxcdTAwM2VjYXJ2ZW91dDtcXG4rXFx0Y2hhciAqcHRyLCAqcHRyMjtcXG4rXFx0aW50IGZkX3plcm87XFxuK1xcbitcXHRpZiAoYWNjZXNzKFxcXCIvZGV2L3plcm9cXFwiLCBGX09LKSlcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJObyAvZGV2L3plcm8uXFxcIik7XFxuK1xcdGZkX3plcm8gPSBvcGVuKFxcXCIvZGV2L3plcm9cXFwiLCBPX1JEV1IpO1xcbitcXHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIGEgTUFQX1BSSVZBVEUgbWFwcGluZyBvZiAvZGV2L3plcm8gd2l0aCBwYWdlIG9mZnNldCAwLCB0aGVuIGZhdWx0XFxuK1xcdCAqIGl0IGluOlxcbitcXHQgKlxcbitcXHQgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcXG4rXFx0ICogfCAgICAgICAgICAgZmF1bHRlZCAgICAgICAgICAgICB8XFxuK1xcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxcbitcXHQgKi9cXG4rXFx0cHRyID0gbW1hcChjYXJ2ZW91dCwgMTUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcXG4rXFx0QVNTRVJUX05FKHB0ciwgTUFQX0ZBSUxFRCk7XFxuK1xcdG1lbXNldChwdHIsICd4JywgMTUgKiBwYWdlX3NpemUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVW5tYXAgdGhlIG1pZGRsZTpcXG4rXFx0ICpcXG4rXFx0ICogfC0tLS0tLS0tLXwgICAgICAgICAgIHwtLS0tLS0tLS18XFxuK1xcdCAqIHwgZmF1bHRlZCB8ICAgICAgICAgICB8IGZhdWx0ZWQgfFxcbitcXHQgKiB8LS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcXG4rXFx0ICovXFxuK1xcdEFTU0VSVF9FUShtdW5tYXAoXFx1MDAyNnB0cls1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIGluIGEgbmV3IHVuZmF1bHRlZCBtYXBwaW5nIGluIHRoZSBtaWRkbGUgd2l0aCBwYWdlIG9mZnNldCAwIC1cXG4rXFx0ICogdGhpcyBzaG91bGQgbWVyZ2UgYW5kIHdvdWxkIG5vdCBpZiBpdCB3ZXJlIHRyZWF0ZWQgYXMgYSBmaWxlIHJhdGhlclxcbitcXHQgKiB0aGFuIHB1cmUgYW5vbjpcXG4rXFx0ICpcXG4rXFx0ICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18XFxuK1xcdCAqIHwgZmF1bHRlZCB8IHVuZmF1bHRlZCB8IGZhdWx0ZWQgfFxcbitcXHQgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXxcXG4rXFx0ICovXFxuK1xcdHB0cjIgPSBtbWFwKFxcdTAwMjZjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSxcXG4rXFx0XFx0ICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLFxcbitcXHRcXHQgICAgZmRfemVybywgMCk7XFxuK1xcdGNsb3NlKGZkX3plcm8pO1xcbitcXHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCB0aGV5IG1lcmdlZC4gKi9cXG4rXFx0QVNTRVJUX1RSVUUoZmluZF92bWFfcHJvY21hcChwcm9jbWFwLCBwdHIpKTtcXG4rXFx0QVNTRVJUX0VRKHByb2NtYXAtXFx1MDAzZXF1ZXJ5LnZtYV9zdGFydCwgKHVuc2lnbmVkIGxvbmcpcHRyKTtcXG4rXFx0QVNTRVJUX0VRKHByb2NtYXAtXFx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciArIDE1ICogcGFnZV9zaXplKTtcXG4rfVxcbitcXG4gVEVTVF9GKG1lcmdlX3dpdGhfZm9yaywgbXJlbWFwX2ZhdWx0ZWRfdG9fdW5mYXVsdGVkX3ByZXYpXFxuIHtcXG4gXFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcXHUwMDI2c2VsZi1cXHUwMDNlcHJvY21hcDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jXFxuaW5kZXggNDIwOWM2NDI4M2Q2Zi4uYmJjYTlmOWUyNzQzOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcXG5AQCAtNTEsNyArNTEsNyBAQCBpbnQgbWFpbih2b2lkKVxcbiBcXHRpbnQgZmQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYSwgYjtcXG4gXFxuLVxcdGZkID0gb3BlbihcXFwiL2Rldi96ZXJvXFxcIiwgT19SRE9OTFkpO1xcbitcXHRmZCA9IG9wZW4oXFxcIi9wcm9jL3NlbGYvZXhlXFxcIiwgT19SRE9OTFkpO1xcbiBcXHRpZiAoZmQgPT0gLTEpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMi5jXFxuaW5kZXggZTZhYTAwYTE4M2JjZC4uNTc4NmNkZmZiYmY2MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcXG5AQCAtNTcsNyArNTcsNyBAQCBpbnQgbWFpbih2b2lkKVxcbiBcXHRpbnQgZmQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYSwgYjtcXG4gXFxuLVxcdGZkID0gb3BlbihcXFwiL2Rldi96ZXJvXFxcIiwgT19SRE9OTFkpO1xcbitcXHRmZCA9IG9wZW4oXFxcIi9wcm9jL3NlbGYvZXhlXFxcIiwgT19SRE9OTFkpO1xcbiBcXHRpZiAoZmQgPT0gLTEpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcXG5pbmRleCA0YzU4NDg3Yjc2NGU5Li41NjY5MDgxZDkxYjlmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXFxuQEAgLTE2MzgsOSArMTYzOCwxNSBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2Fub25fcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IF9fbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCF2bWFfaXNfY293X21hcHBpbmcodm1hKSk7XFxuLVxcdC8qIEFjY291bnQgZm9yIE1BUF9QUklWQVRFLS9kZXYvemVybyB3aGljaCBpcyBvbmx5IHNlbWktYW5vbnltb3VzLiAqL1xcbi1cXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIFxcdTAwMjZcXHUwMDI2ICF2bWEtXFx1MDAzZXZtX2ZpbGUpXFxuK1xcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxuIFxcdFxcdFZNX1dBUk5fT05fT05DRShwZ29mZiAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTtcXG4gXFxuIFxcdHJldHVybiBwZ29mZjtcXG4gfVxcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzO1xcbitcXG4rc3RhdGljIGlubGluZSBib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0cmV0dXJuIGZpbGUgXFx1MDAyNlxcdTAwMjYgZmlsZS1cXHUwMDNlZl9vcCA9PSBcXHUwMDI2emVyb19mb3BzO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jIGIvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmNcXG5pbmRleCA0YTM5YzlkNTA0ODk2Li44YzQ4MjY0OTlmNDA1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmNcXG5AQCAtMTIsNiArMTIsMTUgQEAgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtYV9kdW1teV92bV9vcHM7XFxuIHN0cnVjdCBhbm9uX3ZtYSBkdW1teV9hbm9uX3ZtYTtcXG4gc3RydWN0IHRhc2tfc3RydWN0IF9fY3VycmVudDtcXG4gXFxuK3N0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XFxuK1xcdC5tbWFwX3ByZXBhcmUgPSBtbWFwX3plcm9fcHJlcGFyZSxcXG4rfTtcXG4rXFxuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYWxsb2Nfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0cGdvZmZfdCBwZ29mZiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcXG5pbmRleCBjODViYzAwMGQxY2I3Li5mYTczZmFmZjIyNjI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xcbkBAIC00NSw3ICs0NSw0NCBAQCBzdGF0aWMgYm9vbCB0ZXN0X21tYXBfcmVnaW9uX2Jhc2ljKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKVxcbit7XFxuK1xcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXFxuK1xcdFxcdFxcdFZNQV9NQVlSRUFEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCk7XFxuK1xcdHN0cnVjdCBmaWxlIGZpbGUgPSB7XFxuK1xcdFxcdC5mX29wID0gXFx1MDAyNnplcm9fZm9wcyxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9O1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcbitcXHRWTUFfSVRFUkFUT1Iodm1pLCBcXHUwMDI2bW0sIDApO1xcbitcXG4rXFx0Y3VycmVudC1cXHUwMDNlbW0gPSBcXHUwMDI2bW07XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYXAgYSBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZyBhdCBhZGRyZXNzIDB4MzAwMDAwIHdpdGggYSBwYWdlXFxuK1xcdCAqIG9mZnNldCBvZiAweDEwLCB3aGljaCB3ZSBleHBlY3QgdG8gYmUgcmVzZXQgdG8gdGhlIGFub255bW91cyBwYWdlXFxuK1xcdCAqIG9mZnNldC5cXG4rXFx0ICovXFxuK1xcdGFkZHIgPSBfX21tYXBfcmVnaW9uKFxcdTAwMjZmaWxlLCAweDMwMDAwMCwgMHgzMDAwLCB2bWFfZmxhZ3MsIDB4MTAsIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoYWRkciwgMHgzMDAwMDApO1xcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgaXQgdHJ1bHkgaXMgYW4gYW5vbnltb3VzIG1hcHBpbmcuICovXFxuK1xcdHZtYSA9IHZtYV9sb29rdXAoXFx1MDAyNm1tLCBhZGRyKTtcXG4rXFx0QVNTRVJUX05FKHZtYSwgTlVMTCk7XFxuK1xcdEFTU0VSVF9UUlVFKHZtYV9pc19hbm9ueW1vdXModm1hKSk7XFxuK1xcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX2ZpbGUsIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEsIE5VTEwpO1xcbitcXHQvKiBFeHBlY3QgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0cy4gKi9cXG4rXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fcGdvZmYsIDB4MzAwKTtcXG4rXFx0QVNTRVJUX0VRKHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSksIDB4MzAwKTtcXG4rXFxuK1xcdGNsZWFudXBfbW0oXFx1MDAyNm1tLCBcXHUwMDI2dm1pKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ1bl9tbWFwX3Rlc3RzKGludCAqbnVtX3Rlc3RzLCBpbnQgKm51bV9mYWlsKVxcbiB7XFxuIFxcdFRFU1QobW1hcF9yZWdpb25fYmFzaWMpO1xcbitcXHRURVNUKHB1cmVfYW5vbl9kZXZfemVybyk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6MzkuNzg2NzIyMzg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNDU3NzA2MTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNTVVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjYWxsX21tYXBfcHJlcGFyZVwiLFxuICAgIFwiZmlsZV9pc19kZXZfemVyb1wiLFxuICAgIFwibW1hcF96ZXJvX3ByZXBhcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhhbmRsaW5nIG9mIE1BUF9QUklWQVRFIC9kZXYvemVybyBtYXBwaW5ncyBzbyB0aGV5IGJlY29tZSB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3Mgd2l0aGluIGNvcmUgbW0gcmF0aGVyIHRoYW4gYmVpbmcgdHJlYXRlZCBhcyBzZW1pLWFub255bW91cyBmaWxlIG1hcHBpbmdzLiBJdCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gbW0vdm1hLmMsIG1tL2NoYXItbWVtLmMsIGFuZCBoZWFkZXIgaGVscGVycywgYWZmZWN0aW5nIFZNQSBtZXJnaW5nLCBwYWdlIG9mZnNldCBjYWxjdWxhdGlvbnMsIGFuZCBtbWFwIHByZXBhcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2Mzk2NTg2ZTk4ZDU4MDg4OGM4MWFlZjdmMmQ2YjAzNjY5YTQ1NTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEzOjI2OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggM2ExOWRhNzRkMDBjOS4uYTBhNWRiNDQ0YzY2MyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTE3Mjc2LDcgKzE3Mjc2LDcgQEAgRjpcdERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLW1lbW9yeS10aWVyc1xuIEY6XHREb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1udW1hXG4gRjpcdERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vXG4gRjpcdERvY3VtZW50YXRpb24vbW0vXG4tRjpcdGRyaXZlcnMvY2hhci9tZW0uY1xuK0Y6XHRtbS9jaGFyLW1lbS5jXG4gRjpcdGluY2x1ZGUvbGludXgvY21hLmhcbiBGOlx0aW5jbHVkZS9saW51eC9kbWFwb29sLmhcbiBGOlx0aW5jbHVkZS9saW51eC9pb3JlbWFwLmhcbkBAIC0xNzQ4MSw3ICsxNzQ4MSw3IEBAIEw6XHRsaW51eC1tbUBrdmFjay5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIFc6XHRodHRwOi8vd3d3LmxpbnV4LW1tLm9yZ1xuIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW1cbi1GOlx0ZHJpdmVycy9jaGFyL21lbS5jXG4rRjpcdG1tL2NoYXItbWVtLmNcbiBGOlx0aW5jbHVkZS90cmFjZS9ldmVudHMvbW1hcC5oXG4gRjpcdGZzL3Byb2MvdGFza19tbXUuY1xuIEY6XHRmcy9wcm9jL3Rhc2tfbm9tbXUuY1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZVxuaW5kZXggYTQ2ZDdiZjdjNGM4Mi4uYmIzYmY2NjkzN2IzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlXG5AQCAtMyw3ICszLDcgQEBcbiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycy5cbiAjXG4gXG4tb2JqLXlcdFx0XHRcdCs9IG1lbS5vIHJhbmRvbS5vXG4rb2JqLXlcdFx0XHRcdCs9IHJhbmRvbS5vXG4gb2JqLSQoQ09ORklHX1RUWV9QUklOVEspXHQrPSB0dHlwcmludGsub1xuIG9iai15XHRcdFx0XHQrPSBtaXNjLm9cbiBvYmotJChDT05GSUdfVEVTVF9NSVNDX01JTk9SKVx0Kz0gbWlzY19taW5vcl9rdW5pdC5vXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi44NjRkNWFjMzcwNGRmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0xNTUxLDExICsxNTUxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfYW5vbnltb3VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0dm1hLVx1MDAzZXZtX29wcyA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfZGVzY19zZXRfYW5vbnltb3VzKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4te1xuLVx0ZGVzYy1cdTAwM2V2bV9vcHMgPSBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2Fub255bW91cyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRyZXR1cm4gIXZtYS1cdTAwM2V2bV9vcHM7XG5AQCAtNDQwOCw5ICs0NDAzLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9wYWdlcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAgKiBJZiBAdm1hIGlzIGEgTUFQX1BSSVZBVEUgZmlsZS1iYWNrZWQgbWFwcGluZywgdGhlbiB0aGlzIHJldHVybnMgdGhlXG4gICogcGFnZSBvZmZzZXQgd2l0aGluIHRoZSBmaWxlLlxuICAqXG4tICogRWRnZSBjYXNlczogbm9tbXUgZG9lcyBub3QgYWJpZGUgYnkgdGhlc2UsIE1BUF9QUklWQVRFLS9kZXYvemVybyBzYXRpc2ZpZXNcbi0gKiB2bWFfaXNfYW5vbnltb3VzKCkgYnV0IGhhcyBmaWxlLWJhY2tlZCBwYWdlIG9mZnNldCwgYW5kIE1BUF9QUklWQVRFLXBmbm1hcFxuLSAqIHJlZ2lvbnMgaGF2ZSB0aGVpciBwYWdlIG9mZnNldCBzZXQgdG8gdGhlIGZpcnN0IFBGTiBpbiB0aGUgcmFuZ2UuXG4rICogRWRnZSBjYXNlczogbm9tbXUgZG9lcyBub3QgYWJpZGUgYnkgdGhlc2UgYW5kIENvVyBNQVBfUFJJVkFURS1wZm5tYXAgcmVnaW9uc1xuKyAqIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLlxuICAqXG4gICogUmV0dXJuczogVGhlIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBzdGFydCBvZiBAdm1hLlxuICAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDBhZGZhNjYwNTY1M2QuLjkzOWYzYTVlOTczZjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbkBAIC0xMTI4LDggKzExMjgsNyBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2Fub25fcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRSghdm1hX2lzX2Nvd19tYXBwaW5nKHZtYSkpO1xuLVx0LyogQWNjb3VudCBmb3IgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHdoaWNoIGlzIG9ubHkgc2VtaS1hbm9ueW1vdXMuICovXG4tXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIFx1MDAyNlx1MDAyNiAhdm1hLVx1MDAzZXZtX2ZpbGUpXG4rXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxuIFx0XHRWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7XG4gXG4gXHRyZXR1cm4gcGdvZmY7XG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxuaW5kZXggZTcyNDVjYjg4YzY2NS4uMmEzZWM1M2Q2MmVlZiAxMDA2NDRcbi0tLSBhL21tL01ha2VmaWxlXG4rKysgYi9tbS9NYWtlZmlsZVxuQEAgLTU1LDcgKzU1LDggQEAgb2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG4gXHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbiBcdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxuIFx0XHRcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxuLVx0XHRcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxuK1x0XHRcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyBjaGFyLW1lbS5vIFxcXG4rXHRcdFx0ICAgJChtbXUteSlcbiBcbiAjIEdpdmUgJ3BhZ2VfYWxsb2MnIGl0cyBvd24gbW9kdWxlLXBhcmFtZXRlciBuYW1lc3BhY2VcbiBwYWdlLWFsbG9jLXkgOj0gcGFnZV9hbGxvYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvbW0vY2hhci1tZW0uY1xuc2ltaWxhcml0eSBpbmRleCA5NyVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci9tZW0uY1xucmVuYW1lIHRvIG1tL2NoYXItbWVtLmNcbmluZGV4IDYzMjUzZDFkZTVkNzAuLmMwYjVmYjAxOTIyM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmNcbisrKyBiL21tL2NoYXItbWVtLmNcbkBAIC0xLDYgKzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLypcbi0gKiAgbGludXgvZHJpdmVycy9jaGFyL21lbS5jXG4rICogIG1tL2NoYXItbWVtLmNcbiAgKlxuICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzXG4gICpcbkBAIC0zMSw2ICszMSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rXG4gI2RlZmluZSBERVZNRU1fTUlOT1JcdDFcbiAjZGVmaW5lIERFVlBPUlRfTUlOT1JcdDRcbiBcbkBAIC01MDYsMTEgKzUwOCw3IEBAIHN0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbiBcdGlmICh2bWFfZGVzY190ZXN0KGRlc2MsIFZNQV9TSEFSRURfQklUKSlcbiBcdFx0cmV0dXJuIHNobWVtX3plcm9fc2V0dXBfZGVzYyhkZXNjKTtcbiBcbi1cdC8qXG4tXHQgKiBUaGlzIGlzIGEgaGlnaGx5IHVuaXF1ZSBzaXR1YXRpb24gd2hlcmUgd2UgbWFyayBhIE1BUF9QUklWQVRFIG1hcHBpbmdcbi1cdCAqIG9mIC9kZXYvemVybyBhbm9ueW1vdXMsIGRlc3BpdGUgaXQgbm90IGJlaW5nLlxuLVx0ICovXG4tXHR2bWFfZGVzY19zZXRfYW5vbnltb3VzKGRlc2MpO1xuK1x0LyogTUFQX1BSSVZBVEUgc2VtYW50aWNzIGFyZSB0YWtlbiBjYXJlIG9mIGZvciB1cyBieSBjb3JlIG1tLiAqL1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTcwNyw2ICs3MDUsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYge1xuICNlbmRpZlxuIH07XG4gXG4rLyoqXG4rICogZmlsZV9pc19kZXZfemVybygpIC0gaXMgdGhlIHNwZWNpZmllZCBAZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIC9kZXYvemVyb1xuKyAqIGRyaXZlcj9cbisgKiBAZmlsZTogRmlsZSB0byB0ZXN0LlxuKyAqIFJldHVybnM6IHRydWUgaWYgaXQgaXMsIGZhbHNlIG90aGVyd2lzZS5cbisgKi9cbitib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0cmV0dXJuIGZpbGUgXHUwMDI2XHUwMDI2IGZpbGUtXHUwMDNlZl9vcCA9PSBcdTAwMjZ6ZXJvX2ZvcHM7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWVtb3J5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4ge1xuIFx0aW50IG1pbm9yO1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAzOGIxMTY1MjEyYzk0Li4yNzgyOTI0YTI3N2M5IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTIzNywxNSArMjM3LDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aW50IGVyciA9IHZmc19tbWFwKGZpbGUsIHZtYSk7XG4gXG4tXHRpZiAobGlrZWx5KCFlcnIpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbiBcdC8qXG4tXHQgKiBPSywgd2UgdHJpZWQgdG8gY2FsbCB0aGUgZmlsZSBob29rIGZvciBtbWFwKCksIGJ1dCBhbiBlcnJvclxuLVx0ICogYXJvc2UuIFRoZSBtYXBwaW5nIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBhbmQgd2UgbXVzdCBub3QgaW52b2tlXG4tXHQgKiBhbnkgZnVydGhlciBob29rcyBvbiBpdC5cbitcdCAqIEVpdGhlciB3ZSB0cmllZCB0byBjYWxsIHRoZSBmaWxlIGhvb2sgZm9yIG1tYXAoKSBhbmQgYW4gZXJyb3IgYXJvc2VcbitcdCAqIG9yIGEgZHJpdmVyIHNldCB2bWEtXHUwMDNldm1fb3BzID0gTlVMTCBpbnRlbmRpbmcgdGhlcmUgdG8gYmUgbm8gVk1BXG4rXHQgKiBvcGVyYXRpb25zLlxuK1x0ICpcbitcdCAqIEluIHRoZSBmb3JtZXIgY2FzZSB0aGUgVk1BIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBhbmQgd2UgbXVzdG4ndFxuK1x0ICogaW52b2tlIGFueSBmdXJ0aGVyIGhvb2tzIG9uIGl0LCBpbiB0aGUgbGF0dGVyIGNhc2UgdGhlIGhvb2sgYWN0dWFsbHlcbitcdCAqIHdhbnRlZCBubyBmdXJ0aGVyIGhvb2tzIHRvIGJlIGludm9rZWQsIHNvIGZpeCBib3RoIGJ5IHNldHRpbmcgZHVtbXlcbitcdCAqIFZNQSBvcHMuXG4gXHQgKi9cbi1cdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2bWFfZHVtbXlfdm1fb3BzO1xuK1x0aWYgKHVubGlrZWx5KGVyciB8fCAhdm1hLVx1MDAzZXZtX29wcykpXG4rXHRcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2bWFfZHVtbXlfdm1fb3BzO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMTY1NCw0ICsxNjU3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbisvKiBjaGFyLW1lbS5jICovXG4rYm9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKTtcbitcbiAjZW5kaWZcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA4OTdmYTJiNjEzNDZmLi5jNjA3NjNlZjU2MWNmIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTI3ODYsNyArMjc4Niw3IEBAIHVuc2lnbmVkIGxvbmcgc2htZW1fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0c2IgPSBmaWxlX2lub2RlKGZpbGUpLVx1MDAzZWlfc2I7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBDYWxsZWQgZGlyZWN0bHkgZnJvbSBtbS9tbWFwLmMsIG9yIGRyaXZlcnMvY2hhci9tZW0uY1xuK1x0XHRcdCAqIENhbGxlZCBkaXJlY3RseSBmcm9tIG1tL21tYXAuYywgb3IgbW0vY2hhci1tZW0uY1xuIFx0XHRcdCAqIGZvciBcIi9kZXYvemVyb1wiLCB0byBjcmVhdGUgYSBzaGFyZWQgYW5vbnltb3VzIG9iamVjdC5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoSVNfRVJSKHNobV9tbnQpKVxuZGlmZiAtLWdpdCBhL21tL3ZtYS5jIGIvbW0vdm1hLmNcbmluZGV4IDM1ZTdhNjQ4NTVmYWQuLjZmZGNlNDg1MmNlNjEgMTAwNjQ0XG4tLS0gYS9tbS92bWEuY1xuKysrIGIvbW0vdm1hLmNcbkBAIC0yNjIxLDYgKzI2MjEsMjMgQEAgc3RhdGljIGludCBfX21tYXBfbmV3X2ZpbGVfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbWFwX3NldF9hbm9uKHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4re1xuK1x0bWFwLVx1MDAzZWZpbGUgPSBOVUxMO1xuK1x0bWFwLVx1MDAzZXZtX29wcyA9IE5VTEw7XG4rXHRtYXAtXHUwMDNlcGdvZmYgPSBtYXAtXHUwMDNlYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbit9XG4rXG4rc3RhdGljIGJvb2wgbWFwX2lzX3ByaXZhdGUoY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcbit7XG4rXHRyZXR1cm4gIXZtYV9mbGFnc190ZXN0KFx1MDAyNm1hcC1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbWFwX2lzX2Fub24oY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcbit7XG4rXHRyZXR1cm4gbWFwX2lzX3ByaXZhdGUobWFwKSBcdTAwMjZcdTAwMjYgIW1hcC1cdTAwM2VmaWxlO1xuK31cbitcbiAvKlxuICAqIF9fbW1hcF9uZXdfdm1hKCkgLSBBbGxvY2F0ZSBhIG5ldyBWTUEgZm9yIHRoZSByZWdpb24sIGFzIG1lcmdpbmcgd2FzIG5vdFxuICAqIHBvc3NpYmxlLlxuQEAgLTI2MzQsOCArMjY1MSw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuIHN0YXRpYyBpbnQgX19tbWFwX25ld192bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbiBcdHN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKVxuIHtcbi1cdGNvbnN0IGJvb2wgaXNfYW5vbiA9ICFtYXAtXHUwMDNlZmlsZSBcdTAwMjZcdTAwMjZcbi1cdFx0IXZtYV9mbGFnc190ZXN0KFx1MDAyNm1hcC1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcbitcdGNvbnN0IGJvb2wgaXNfYW5vbiA9IG1hcF9pc19hbm9uKG1hcCk7XG4gXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkgPSBtYXAtXHUwMDNldm1pO1xuIFx0aW50IGVycm9yID0gMDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuQEAgLTI3NzcsNiArMjc5MywxMCBAQCBzdGF0aWMgaW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0LyogSXQncyBpbnZhbGlkIGZvciBtbWFwX3ByZXByYXJlIGhvb2tzIHRvIGNsZWFyIHZtX29wcy4gKi9cbitcdGlmICghZGVzYy1cdTAwM2V2bV9vcHMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0ZXJyID0gY2FsbF9hY3Rpb25fcHJlcGFyZShtYXAsIGRlc2MpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yNzkzLDE2ICsyODEzLDIxIEBAIHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBcdG1hcC1cdTAwM2V2bV9vcHMgPSBkZXNjLVx1MDAzZXZtX29wcztcbiBcdG1hcC1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBkZXNjLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbitcdC8qXG4rXHQgKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZ3MgYXJlIGFuIGFuY2llbnQgd2F5IG9mIGdldHRpbmdcbitcdCAqIGFub255bW91cyBtYXBwaW5ncy4gUmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlc2UgbWFwcGluZ3MgdG8gYmUgb2RkXG4rXHQgKiBvdXRsaWVycywgc2ltcGx5IG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMuXG4rXHQgKi9cbitcdGlmIChtYXBfaXNfcHJpdmF0ZShtYXApIFx1MDAyNlx1MDAyNiBmaWxlX2lzX2Rldl96ZXJvKG1hcC1cdTAwM2VmaWxlKSlcbitcdFx0bWFwX3NldF9hbm9uKG1hcCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuIHtcbi1cdGlmIChtYXAtXHUwMDNldm1fb3BzKVxuLVx0XHR2bWEtXHUwMDNldm1fb3BzID0gbWFwLVx1MDAzZXZtX29wcztcbi1cdGVsc2VcdC8qIE9ubHkgL2Rldi96ZXJvIHNob3VsZCBkbyB0aGlzLiAqL1xuLVx0XHR2bWFfc2V0X2Fub255bW91cyh2bWEpO1xuK1x0dm1hLVx1MDAzZXZtX29wcyA9IG1hcC1cdTAwM2V2bV9vcHM7XG4gXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbiB9XG4gXG5AQCAtMjg4Miw3ICsyOTA3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRhbGxvY2F0ZWRfbmV3ID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmIChoYXZlX21tYXBfcHJlcGFyZSlcbitcdGlmIChoYXZlX21tYXBfcHJlcGFyZSBcdTAwMjZcdTAwMjYgIW1hcF9pc19hbm9uKFx1MDAyNm1hcCkpXG4gXHRcdHNldF92bWFfdXNlcl9kZWZpbmVkX2ZpZWxkcyh2bWEsIFx1MDAyNm1hcCk7XG4gXG4gXHRfX21tYXBfY29tcGxldGUoXHUwMDI2bWFwLCB2bWEpO1xuZGlmZiAtLWdpdCBhL21tL3ZtYS5oIGIvbW0vdm1hLmhcbmluZGV4IDAyNGZhYmU2MzU2MGEuLmU5N2JkMmRmYTc4NmQgMTAwNjQ0XG4tLS0gYS9tbS92bWEuaFxuKysrIGIvbW0vdm1hLmhcbkBAIC0yNjcsOSArMjY3LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9zYW5lX3Bnb2ZmKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IHBnb2ZmKVxuIFx0ICovXG4gXHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSlcbiBcdFx0cmV0dXJuO1xuLVx0LyogTUFQX1BSSVZBVEUtL2Rldi96ZXJvIGlzIGFub24sIG5vbi1OVUxMIHZtX2ZpbGUsIGJ1dCBoYXMgZmlsZSBwZ29mZi4gKi9cbi1cdGlmICh2bWEtXHUwMDNldm1fZmlsZSlcbi1cdFx0cmV0dXJuO1xuIFx0LyogSWYgZmF1bHRlZCBpbiwgY291bGQgaGF2ZSBiZWVuIHJlbWFwcGVkLiAqL1xuIFx0aWYgKHZtYS1cdTAwM2Vhbm9uX3ZtYSlcbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG5pbmRleCA1MmI4NzI3YjY2MjhlLi43ZGQyOTMzNDE3YzFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuY1xuQEAgLTEzNjIsNiArMTM2MiwxMDEgQEAgVEVTVF9GKG1lcmdlLCBhbm9uX2FuZF9wYWdlX29mZnNldF9taXNtYXRjaF9tZW1mZClcbiBcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciArIDUgKiBwYWdlX3NpemUpO1xuIH1cbiBcbitURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX3VuZmF1bHRlZClcbit7XG4rXHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFx1MDAyNnNlbGYtXHUwMDNlcHJvY21hcDtcbitcdHVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcdGNoYXIgKmNhcnZlb3V0ID0gc2VsZi1cdTAwM2VjYXJ2ZW91dDtcbitcdGNoYXIgKnB0ciwgKnB0cjI7XG4rXHRpbnQgZmRfemVybztcbitcbitcdGlmIChhY2Nlc3MoXCIvZGV2L3plcm9cIiwgRl9PSykpXG4rXHRcdFNLSVAocmV0dXJuLCBcIk5vIC9kZXYvemVyby5cIik7XG4rXHRmZF96ZXJvID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JEV1IpO1xuK1x0QVNTRVJUX05FKGZkX3plcm8sIC0xKTtcbitcbitcdC8qXG4rXHQgKiBNYXAgdHdvIE1BUF9QUklWQVRFLS9kZXYvemVybyBWTUFzIG5leHQgdG8gb25lIGFub3RoZXIgd2l0aCBvZmZzZXQgMFxuK1x0ICogZWFjaC5cbitcdCAqXG4rXHQgKiBXaXRoIHRoZXNlIGJlaW5nIG1hZGUgdHJ1bHkgYW5vbnltb3VzIHVwb24gbWFwcGluZywgdGhleSB3aWxsXG4rXHQgKiBtZXJnZS4gSWYgdGhleSB3ZXJlIGZpbGUtYmFja2VkIFZNQXMgdGhlIHBhZ2Ugb2Zmc2V0cyB3b3VsZCBwcmV2ZW50XG4rXHQgKiB0aGUgbWVyZ2U6XG4rXHQgKlxuK1x0ICogfC0tLS0tfHwtLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tfFxuK1x0ICogfCBwdHIgfHwgcHRyMiB8IC1cdTAwM2UgfCAgICAgcHRyICAgICB8XG4rXHQgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18XG4rXHQgKi9cbitcdHB0ciA9IG1tYXAoY2FydmVvdXQsIDUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcbitcdHB0cjIgPSBtbWFwKFx1MDAyNmNhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLFxuK1x0XHQgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7XG4rXHRjbG9zZShmZF96ZXJvKTtcbitcdEFTU0VSVF9ORShwdHIsIE1BUF9GQUlMRUQpO1xuK1x0QVNTRVJUX05FKHB0cjIsIE1BUF9GQUlMRUQpO1xuK1xuK1x0LyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovXG4rXHRBU1NFUlRfVFJVRShmaW5kX3ZtYV9wcm9jbWFwKHByb2NtYXAsIHB0cikpO1xuK1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpO1xuK1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICsgMTAgKiBwYWdlX3NpemUpO1xuK31cbitcbitURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX2ZhdWx0ZWRfdW5mYXVsdGVkKVxuK3tcbitcdHN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gXHUwMDI2c2VsZi1cdTAwM2Vwcm9jbWFwO1xuK1x0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9zaXplO1xuK1x0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVx1MDAzZWNhcnZlb3V0O1xuK1x0Y2hhciAqcHRyLCAqcHRyMjtcbitcdGludCBmZF96ZXJvO1xuK1xuK1x0aWYgKGFjY2VzcyhcIi9kZXYvemVyb1wiLCBGX09LKSlcbitcdFx0U0tJUChyZXR1cm4sIFwiTm8gL2Rldi96ZXJvLlwiKTtcbitcdGZkX3plcm8gPSBvcGVuKFwiL2Rldi96ZXJvXCIsIE9fUkRXUik7XG4rXHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xuK1xuK1x0LypcbitcdCAqIE1hcCBhIE1BUF9QUklWQVRFIG1hcHBpbmcgb2YgL2Rldi96ZXJvIHdpdGggcGFnZSBvZmZzZXQgMCwgdGhlbiBmYXVsdFxuK1x0ICogaXQgaW46XG4rXHQgKlxuK1x0ICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4rXHQgKiB8ICAgICAgICAgICBmYXVsdGVkICAgICAgICAgICAgIHxcbitcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuK1x0ICovXG4rXHRwdHIgPSBtbWFwKGNhcnZlb3V0LCAxNSAqIHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApO1xuK1x0QVNTRVJUX05FKHB0ciwgTUFQX0ZBSUxFRCk7XG4rXHRtZW1zZXQocHRyLCAneCcsIDE1ICogcGFnZV9zaXplKTtcbitcbitcdC8qXG4rXHQgKiBVbm1hcCB0aGUgbWlkZGxlOlxuK1x0ICpcbitcdCAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuK1x0ICogfCBmYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8XG4rXHQgKiB8LS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcbitcdCAqL1xuK1x0QVNTRVJUX0VRKG11bm1hcChcdTAwMjZwdHJbNSAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUpLCAwKTtcbitcbitcdC8qXG4rXHQgKiBNYXAgaW4gYSBuZXcgdW5mYXVsdGVkIG1hcHBpbmcgaW4gdGhlIG1pZGRsZSB3aXRoIHBhZ2Ugb2Zmc2V0IDAgLVxuK1x0ICogdGhpcyBzaG91bGQgbWVyZ2UgYW5kIHdvdWxkIG5vdCBpZiBpdCB3ZXJlIHRyZWF0ZWQgYXMgYSBmaWxlIHJhdGhlclxuK1x0ICogdGhhbiBwdXJlIGFub246XG4rXHQgKlxuK1x0ICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18XG4rXHQgKiB8IGZhdWx0ZWQgfCB1bmZhdWx0ZWQgfCBmYXVsdGVkIHxcbitcdCAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tfFxuK1x0ICovXG4rXHRwdHIyID0gbW1hcChcdTAwMjZjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSxcbitcdFx0ICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLFxuK1x0XHQgICAgZmRfemVybywgMCk7XG4rXHRjbG9zZShmZF96ZXJvKTtcbitcdEFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IHRoZXkgbWVyZ2VkLiAqL1xuK1x0QVNTRVJUX1RSVUUoZmluZF92bWFfcHJvY21hcChwcm9jbWFwLCBwdHIpKTtcbitcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9zdGFydCwgKHVuc2lnbmVkIGxvbmcpcHRyKTtcbitcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciArIDE1ICogcGFnZV9zaXplKTtcbit9XG4rXG4gVEVTVF9GKG1lcmdlX3dpdGhfZm9yaywgbXJlbWFwX2ZhdWx0ZWRfdG9fdW5mYXVsdGVkX3ByZXYpXG4ge1xuIFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcdTAwMjZzZWxmLVx1MDAzZXByb2NtYXA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jXG5pbmRleCA0MjA5YzY0MjgzZDZmLi5iYmNhOWY5ZTI3NDM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcbkBAIC01MSw3ICs1MSw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRpbnQgZmQ7XG4gXHR1bnNpZ25lZCBsb25nIGEsIGI7XG4gXG4tXHRmZCA9IG9wZW4oXCIvZGV2L3plcm9cIiwgT19SRE9OTFkpO1xuK1x0ZmQgPSBvcGVuKFwiL3Byb2Mvc2VsZi9leGVcIiwgT19SRE9OTFkpO1xuIFx0aWYgKGZkID09IC0xKVxuIFx0XHRyZXR1cm4gMTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcbmluZGV4IGU2YWEwMGExODNiY2QuLjU3ODZjZGZmYmJmNjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuY1xuQEAgLTU3LDcgKzU3LDcgQEAgaW50IG1haW4odm9pZClcbiBcdGludCBmZDtcbiBcdHVuc2lnbmVkIGxvbmcgYSwgYjtcbiBcbi1cdGZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JET05MWSk7XG4rXHRmZCA9IG9wZW4oXCIvcHJvYy9zZWxmL2V4ZVwiLCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5pbmRleCA0YzU4NDg3Yjc2NGU5Li41NjY5MDgxZDkxYjlmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuQEAgLTE2MzgsOSArMTYzOCwxNSBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2Fub25fcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRSghdm1hX2lzX2Nvd19tYXBwaW5nKHZtYSkpO1xuLVx0LyogQWNjb3VudCBmb3IgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHdoaWNoIGlzIG9ubHkgc2VtaS1hbm9ueW1vdXMuICovXG4tXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIFx1MDAyNlx1MDAyNiAhdm1hLVx1MDAzZXZtX2ZpbGUpXG4rXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxuIFx0XHRWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7XG4gXG4gXHRyZXR1cm4gcGdvZmY7XG4gfVxuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcztcbitcbitzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRyZXR1cm4gZmlsZSBcdTAwMjZcdTAwMjYgZmlsZS1cdTAwM2VmX29wID09IFx1MDAyNnplcm9fZm9wcztcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMgYi90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xuaW5kZXggNGEzOWM5ZDUwNDg5Ni4uOGM0ODI2NDk5ZjQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xuQEAgLTEyLDYgKzEyLDE1IEBAIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2bWFfZHVtbXlfdm1fb3BzO1xuIHN0cnVjdCBhbm9uX3ZtYSBkdW1teV9hbm9uX3ZtYTtcbiBzdHJ1Y3QgdGFza19zdHJ1Y3QgX19jdXJyZW50O1xuIFxuK3N0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XG4rXHQubW1hcF9wcmVwYXJlID0gbW1hcF96ZXJvX3ByZXBhcmUsXG4rfTtcbitcbiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFsbG9jX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHBnb2ZmX3QgcGdvZmYsIHZtYV9mbGFnc190IHZtYV9mbGFncylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbmluZGV4IGM4NWJjMDAwZDFjYjcuLmZhNzNmYWZmMjI2MjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xuQEAgLTQ1LDcgKzQ1LDQ0IEBAIHN0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fYmFzaWModm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKVxuK3tcbitcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXG4rXHRcdFx0Vk1BX01BWVJFQURfQklULCBWTUFfTUFZV1JJVEVfQklUKTtcbitcdHN0cnVjdCBmaWxlIGZpbGUgPSB7XG4rXHRcdC5mX29wID0gXHUwMDI2emVyb19mb3BzLFxuK1x0fTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgbW0gPSB7fTtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyO1xuK1x0Vk1BX0lURVJBVE9SKHZtaSwgXHUwMDI2bW0sIDApO1xuK1xuK1x0Y3VycmVudC1cdTAwM2VtbSA9IFx1MDAyNm1tO1xuK1xuK1x0LypcbitcdCAqIE1hcCBhIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5nIGF0IGFkZHJlc3MgMHgzMDAwMDAgd2l0aCBhIHBhZ2VcbitcdCAqIG9mZnNldCBvZiAweDEwLCB3aGljaCB3ZSBleHBlY3QgdG8gYmUgcmVzZXQgdG8gdGhlIGFub255bW91cyBwYWdlXG4rXHQgKiBvZmZzZXQuXG4rXHQgKi9cbitcdGFkZHIgPSBfX21tYXBfcmVnaW9uKFx1MDAyNmZpbGUsIDB4MzAwMDAwLCAweDMwMDAsIHZtYV9mbGFncywgMHgxMCwgTlVMTCk7XG4rXHRBU1NFUlRfRVEoYWRkciwgMHgzMDAwMDApO1xuK1xuK1x0LyogQXNzZXJ0IHRoYXQgaXQgdHJ1bHkgaXMgYW4gYW5vbnltb3VzIG1hcHBpbmcuICovXG4rXHR2bWEgPSB2bWFfbG9va3VwKFx1MDAyNm1tLCBhZGRyKTtcbitcdEFTU0VSVF9ORSh2bWEsIE5VTEwpO1xuK1x0QVNTRVJUX1RSVUUodm1hX2lzX2Fub255bW91cyh2bWEpKTtcbitcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZmlsZSwgTlVMTCk7XG4rXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSwgTlVMTCk7XG4rXHQvKiBFeHBlY3QgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0cy4gKi9cbitcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fcGdvZmYsIDB4MzAwKTtcbitcdEFTU0VSVF9FUSh2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpLCAweDMwMCk7XG4rXG4rXHRjbGVhbnVwX21tKFx1MDAyNm1tLCBcdTAwMjZ2bWkpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ1bl9tbWFwX3Rlc3RzKGludCAqbnVtX3Rlc3RzLCBpbnQgKm51bV9mYWlsKVxuIHtcbiBcdFRFU1QobW1hcF9yZWdpb25fYmFzaWMpO1xuK1x0VEVTVChwdXJlX2Fub25fZGV2X3plcm8pO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI2OjM5Ljc4NjcyMzYxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4MzQ3NTc2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IERldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBsYXRlbnQgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY3JpdGVyaWEgYXJlIGFsc28gY2xlYXI6IGNoZWNrIGZvciB0b3VjaCBwb2ludHMgb24gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gY29yZSBzdWJzeXN0ZW1zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzICpsb29rcyogcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBXZSBoYXZlIG1vZGlmaWNhdGlvbnMgdG8gYG1tL3ZtYS5jYCwgYG1tL2NoYXItbWVtLmNgLCBgaW5jbHVkZS9saW51eC9tbS5oYCwgYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCwgYW5kIGBtbS9pbnRlcm5hbC5oYCwgYWxsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYXMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlcmllcyBzZWVtcyB0byBiZSByZWZhY3RvcmluZyBob3cgYC9kZXYvemVyb2AgbWFwcGluZ3MgaW50ZXJhY3Qgd2l0aCBhbm9ueW1vdXMgbWVtb3J5LCBtYWtpbmcgdGhlbSB0cnVseSBhbm9ueW1vdXMgaW4gdGhlIGNvcmUgbW0uIFRoaXMgc2VlbXMgbGlrZSBpdCB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBgV29ydGhGdXp6aW5nYCBpcyBsaWtlbHkgYHRydWVgLlxuXG5MZXQncyBkaXNzZWN0IHRoZSBkaWZmIHN0ZXAtYnktc3RlcCB0byBiZSBjZXJ0YWluOlxuXG4xLiAgV2UgaGF2ZSB0aGUgc3RhbmRhcmQgZmlsZSByZW5hbWVzL21vdmVzIChNQUlOVEFJTkVSUywgYGRyaXZlcnMvY2hhci9NYWtlZmlsZWAsIGBtbS9NYWtlZmlsZWApLiBUaGVzZSBhcmVuJ3QgaW1tZWRpYXRlbHkgY29uY2VybmluZy5cbjIuICBgZHJpdmVycy9jaGFyL21lbS5jYCBpcyBtb3ZlZCB0byBgbW0vY2hhci1tZW0uY2AuIFRoZSBjaGFuZ2VzIHRvIGBtbWFwX3plcm9fcHJlcGFyZSgpYCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBmaWxlX2lzX2Rldl96ZXJvKClgIGFyZSBpbnRlcmVzdGluZyBhbmQgcmVxdWlyZSBhIGNsb3NlciBsb29rLiBUaGlzIGRlZmluaXRlbHkgc2VlbXMgY29yZSBtbSByZWxhdGVkLlxuMy4gIFRoZSBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L21tLmhgIChyZW1vdmFsIG9mIGB2bWFfZGVzY19zZXRfYW5vbnltb3VzKClgKSBhbmQgYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCAoc2ltcGxpZmljYXRpb24gb2YgYGxpbmVhcl9hbm9uX3BhZ2VfaW5kZXgoKWApIHBvaW50IHRvIHJlZmFjdG9yaW5nIG9mIGhvdyBWTUEncyBhcmUgaGFuZGxlZCwgd2hpY2ggc3RyZW5ndGhlbnMgdGhlIGlkZWEgb2YgZnV6emluZy5cbjQuICBgbW0vaW50ZXJuYWwuaGAgaW5jbHVkZXMgdGhlIGlubGluZSBmdW5jdGlvbiBtb2RpZmljYXRpb24gaW4gYG1tYXBfZmlsZWAsIGFuZCB0aGUgYWRkaXRpb24gb2YgdGhlIHByb3RvdHlwZSBgZmlsZV9pc19kZXZfemVyb2AuIFRoaXMgaXMgY2VydGFpbmx5IHJlbGF0ZWQgdG8gVk1BIHNldHVwIGFuZCB0aGUgbmV3IGNoZWNrcy5cbjUuICBgbW0vdm1hLmNgIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nOiBuZXcgZnVuY3Rpb25zIGxpa2UgYG1hcF9zZXRfYW5vbigpYCwgYG1hcF9pc19wcml2YXRlKClgLCBgbWFwX2lzX2Fub24oKWAsIGFuZCBjaGFuZ2VzIHRvIGBfX21tYXBfbmV3X3ZtYSgpYCwgYGNhbGxfbW1hcF9wcmVwYXJlKClgLCBhbmQgYF9fbW1hcF9yZWdpb24oKWAuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGNydWNpYWwuIFRoZSBjaGFuZ2VzIGluIGBjYWxsX21tYXBfcHJlcGFyZSgpYCBhbmQgYF9fbW1hcF9yZWdpb24oKWAgc2VlbSBsaWtlIGNvZGUgcGF0aHMgd2l0aCBoaWdoIHBvdGVudGlhbCBmb3IgaXNzdWVzLCBhbmQgdGhvc2UgYXJlIGRlZmluaXRlbHkgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cbjYuICBUaGUgY2hhbmdlIGluIGBtbS92bWEuaGAgKHJlbW92aW5nIGEgYHZtYS1cdTAwM2V2bV9maWxlYCBjaGVjayBpbiBgYXNzZXJ0X3NhbmVfcGdvZmZgKSBhbHNvIGZlZWxzIGxpa2UgYSByZWZhY3RvcmluZy5cbjcuICBBbmQgb2YgY291cnNlLCB3ZSBoYXZlIHJlbGF0ZWQgc2VsZnRlc3RzLlxuXG5UaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY29yZSBtbSBsb2dpYywgc3BlY2lmaWNhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggcmVzcGVjdCB0byBtYXBwaW5nIGFuZCBWTUEgbG9naWMgKGBtbS92bWEuY2AsIGBtbS9jaGFyLW1lbS5jYCwgYG1tL2ludGVybmFsLmhgLCBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLCBgaW5jbHVkZS9saW51eC9tbS5oYCwgYG1tL3ZtYS5oYCkuIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMsIHRoaXMgc2VlbXMgbGlrZSAqZXhhY3RseSogdGhlIGtpbmQgb2YgY2hhbmdlIHdlICp3YW50KiB0byBmdXp6LiBJdCdzIGEgY2xlYXIgJ3llcycgdG8gYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCBsZXQncyBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gY3JlYXRlIGEgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYCBhbmQgY29uc2lkZXIgd2hpY2ggYEVuYWJsZUNvbmZpZ3NgIG1pZ2h0IGJlIHVzZWZ1bC4gSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGRpZmYgYW5kIGNyZWF0ZSBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhlIGNoYW5nZXM6XG5cbiogICBgY2FsbF9tbWFwX3ByZXBhcmVgIChpbiBtbS92bWEuYylcbiogICBgX19tbWFwX25ld192bWFgIChpbiBtbS92bWEuYylcbiogICBgX19tbWFwX3JlZ2lvbmAgKGluIG1tL3ZtYS5jKVxuKiAgIGBtYXBfc2V0X2Fub25gIChzdGF0aWMgaW4gbW0vdm1hLmMpXG4qICAgYGZpbGVfaXNfZGV2X3plcm9gIChpbiBtbS9jaGFyLW1lbS5jKVxuKiAgIGBtbWFwX3plcm9fcHJlcGFyZWAgKGluIG1tL2NoYXItbWVtLmMpXG4qICAgYG1tYXBfZmlsZWAgKGlubGluZSBpbiBtbS9pbnRlcm5hbC5oKVxuKiAgIGBsaW5lYXJfYW5vbl9wYWdlX2luZGV4YCAoaW5saW5lIGluIGluY2x1ZGUvbGludXgvcGFnZW1hcC5oKVxuKiAgIGBhc3NlcnRfc2FuZV9wZ29mZmAgKGlubGluZSBpbiBtbS92bWEuaClcblxuSSdsbCBub3cgbmVlZCB0byB1c2UgYGdpdCBncmVwYCBhbmQgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdG8gc2VlIHdoaWNoIG90aGVyIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZXNlLCBhbmQgY29uc2lkZXIgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGdvYWwgaXMgYSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gdGhhdCBtYXhpbWl6ZXMgdGhlIGxpa2VsaWhvb2RcblxuIiwiSW5wdXRUb2tlbnMiOjk3NDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6NDcuNjIxNDg2NTk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjE1OTQ4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsZV9pc19kZXZfemVyb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jaGFyLW1lbS5jPTY4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XFxuLS1cXG5tbS9jaGFyLW1lbS5jLTcwOC0vKipcXG5tbS9jaGFyLW1lbS5jOjcwOTogKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvXFxubW0vY2hhci1tZW0uYy03MTAtICogZHJpdmVyP1xcbi0tXFxubW0vY2hhci1tZW0uYy03MTMtICovXFxubW0vY2hhci1tZW0uYzo3MTQ6Ym9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbm1tL2NoYXItbWVtLmMtNzE1LXtcXG4tLVxcbm1tL2ludGVybmFsLmg9MTYzNz1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NwaW5fdHJ5bG9jayh2b2lkKVxcbi0tXFxubW0vaW50ZXJuYWwuaC0xNjYwLS8qIGNoYXItbWVtLmMgKi9cXG5tbS9pbnRlcm5hbC5oOjE2NjE6Ym9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKTtcXG5tbS9pbnRlcm5hbC5oLTE2NjItXFxuLS1cXG5tbS92bWEuYz0yNzg2PXN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTI4MjAtXFx0ICovXFxubW0vdm1hLmM6MjgyMTpcXHRpZiAobWFwX2lzX3ByaXZhdGUobWFwKSBcXHUwMDI2XFx1MDAyNiBmaWxlX2lzX2Rldl96ZXJvKG1hcC1cXHUwMDNlZmlsZSkpXFxubW0vdm1hLmMtMjgyMi1cXHRcXHRtYXBfc2V0X2Fub24obWFwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9MTY0Nz1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHM7XFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0xNjQ4LVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6MTY0OTpzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTE2NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNjo0OS4yODMwODY5OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQwNjc5NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgTWFwcGluZyBmb3IgQ2hhcmFjdGVyIERldmljZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHplcm8tZmlsbGVkIG1lbW9yeSBpcyBwcmVwYXJlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgY2hhcmFjdGVyIGRldmljZXMuIFRoYXQgbWVhbnMgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbW1hcF96ZXJvX3ByZXBhcmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG1tL2NoYXItbWVtLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgdGhlIHByZXBhcmF0aW9uIGZvciB0aGUgbWFnaWMgb2YgbWFwcGluZyB6ZXJvIHBhZ2VzIGludG8gdXNlciBzcGFjZSBtZW1vcnkgb2NjdXJzLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cCBiZWZvcmUgdGhlIGFjdHVhbCBtZW1vcnkgbWFwcGluZyB0YWtlcyBwbGFjZSwgb3IgdGhlIGFjdHVhbCB6ZXJvaW5nIGl0c2VsZi4gR2l2ZW4gdGhlIGZpbGUgYW5kIGZ1bmN0aW9uIG5hbWUsIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHN0ZXBzIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLCBvciBwb3NzaWJseSB6ZXJvaW5nIHRoZSBwYWdlcyBhaGVhZCBvZiB0aGUgbWFwcGluZy4gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBpbnRlcmFjdGlvbiBjb252ZXJnZSwgYW5kIEknbSByZWFkeSB0byBkaWcgaW4uIFRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIG15IGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDI4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6NTIuMDIzNzY4NDE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzgzNDY3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW1hcF96ZXJvX3ByZXBhcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY2hhci1tZW0uYz00NzY9c3RhdGljIHNzaXplX3QgcmVhZF96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxubW0vY2hhci1tZW0uYy01MDItXFxubW0vY2hhci1tZW0uYzo1MDM6c3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxcbm1tL2NoYXItbWVtLmMtNTA0LXtcXG4tLVxcbm1tL2NoYXItbWVtLmM9NTIzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9jaGFyLW1lbS5jLTUyOC1cXHRcXHQvKlxcbm1tL2NoYXItbWVtLmM6NTI5OlxcdFxcdCAqIG1tYXBfemVyb19wcmVwYXJlKCkgd2lsbCBjYWxsIHNobWVtX3plcm9fc2V0dXAoKSB0byBjcmVhdGUgYVxcbm1tL2NoYXItbWVtLmMtNTMwLVxcdFxcdCAqIGZpbGUsIHNvIHVzZSBzaG1lbSdzIGdldF91bm1hcHBlZF9hcmVhIGluIGNhc2UgaXQgY2FuIGJlXFxuLS1cXG5tbS9jaGFyLW1lbS5jPTY2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XFxuLS1cXG5tbS9jaGFyLW1lbS5jLTY3MS1cXHQuc3BsaWNlX3dyaXRlXFx0PSBzcGxpY2Vfd3JpdGVfemVybyxcXG5tbS9jaGFyLW1lbS5jOjY3MjpcXHQubW1hcF9wcmVwYXJlXFx0PSBtbWFwX3plcm9fcHJlcGFyZSxcXG5tbS9jaGFyLW1lbS5jLTY3My1cXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvLFxcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmM9MTM9c3RydWN0IHRhc2tfc3RydWN0IF9fY3VycmVudDtcXG50b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYy0xNC1cXG50b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYzoxNTpzdGF0aWMgaW50IG1tYXBfemVyb19wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxudG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMtMTYte1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmM9MjA9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XFxudG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmM6MjE6XFx0Lm1tYXBfcHJlcGFyZSA9IG1tYXBfemVyb19wcmVwYXJlLFxcbnRvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jLTIyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI2OjUzLjc2MjEyOTI0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDkyODE2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYXBwaW5nIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbWVtb3J5IG1hcHBpbmcgaXMgYmVpbmcgcHJlcGFyZWQgYW5kIGV4ZWN1dGVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBjYWxsX21tYXBfcHJlcGFyZWAgYW5kIGBfX21tYXBfcmVnaW9uYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSBsaWtlbHkgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29yZSBsb2dpYyB3aXRoaW4gYG1tL3ZtYS5jYCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS92bWEuY2AgdG8gZ3Jhc3AgdGhlIGZsb3cgYW5kIGNvbnRleHQgYXJvdW5kIHRob3NlIHNwZWNpZmljIGxpbmVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBpcyBiZWluZyBzZXQgdXAgYW5kIGhvdyB0aGUgcmVnaW9uIGlzIGFjdHVhbGx5IGVzdGFibGlzaGVkLiBUaGlzIHNob3VsZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHByZS1jb25kaXRpb25zLCB0aGUgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSwgYW5kIHdoYXQgdGhlIGNvZGUgaXMgKmFjdHVhbGx5KiBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNjo1NS44NzE0MTMyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzgwOlxcdCAqIHRoYXQgYXJlIHBlcm1pdHRlZCB0byBiZSB1cGRhdGVkIGJ5IHRoZSBjYWxsZXIuXFxuMjc4MTpcXHQgKlxcbjI3ODI6XFx0ICogQWxsIGJ1dCB1c2VyLWRlZmluZWQgZmllbGRzIHdpbGwgYmUgcHJlLXBvcHVsYXRlZCB3aXRoIG9yaWdpbmFsIHZhbHVlcy5cXG4yNzgzOlxcdCAqXFxuMjc4NDpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuMjc4NTpcXHQgKi9cXG4yNzg2OlxcdHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcXG4yNzg3OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxuMjc4ODpcXHR7XFxuMjc4OTpcXHRcXHRpbnQgZXJyO1xcbjI3OTA6XFx0XFxuMjc5MTpcXHRcXHQvKiBJbnZva2UgdGhlIGhvb2suICovXFxuMjc5MjpcXHRcXHRlcnIgPSB2ZnNfbW1hcF9wcmVwYXJlKG1hcC1cXHUwMDNlZmlsZSwgZGVzYyk7XFxuMjc5MzpcXHRcXHRpZiAoZXJyKVxcbjI3OTQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNzk1OlxcdFxcbjI3OTY6XFx0XFx0LyogSXQncyBpbnZhbGlkIGZvciBtbWFwX3ByZXByYXJlIGhvb2tzIHRvIGNsZWFyIHZtX29wcy4gKi9cXG4yNzk3OlxcdFxcdGlmICghZGVzYy1cXHUwMDNldm1fb3BzKVxcbjI3OTg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjc5OTpcXHRcXG4yODAwOlxcdFxcdGVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTtcXG4yODAxOlxcdFxcdGlmIChlcnIpXFxuMjgwMjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI4MDM6XFx0XFxuMjgwNDpcXHRcXHQvKiBVcGRhdGUgZmllbGRzIHBlcm1pdHRlZCB0byBiZSBjaGFuZ2VkLiAqL1xcbjI4MDU6XFx0XFx0bWFwLVxcdTAwM2VwZ29mZiA9IGRlc2MtXFx1MDAzZXBnb2ZmO1xcbjI4MDY6XFx0XFx0aWYgKGRlc2MtXFx1MDAzZXZtX2ZpbGUgIT0gbWFwLVxcdTAwM2VmaWxlKSB7XFxuMjgwNzpcXHRcXHRcXHRtYXAtXFx1MDAzZWZpbGVfZG9lc250X25lZWRfZ2V0ID0gdHJ1ZTtcXG4yODA4OlxcdFxcdFxcdG1hcC1cXHUwMDNlZmlsZSA9IGRlc2MtXFx1MDAzZXZtX2ZpbGU7XFxuMjgwOTpcXHRcXHR9XFxuMjgxMDpcXHRcXHRtYXAtXFx1MDAzZXZtYV9mbGFncyA9IGRlc2MtXFx1MDAzZXZtYV9mbGFncztcXG4yODExOlxcdFxcdG1hcC1cXHUwMDNlcGFnZV9wcm90ID0gZGVzYy1cXHUwMDNlcGFnZV9wcm90O1xcbjI4MTI6XFx0XFx0LyogVXNlci1kZWZpbmVkIGZpZWxkcy4gKi9cXG4yODEzOlxcdFxcdG1hcC1cXHUwMDNldm1fb3BzID0gZGVzYy1cXHUwMDNldm1fb3BzO1xcbjI4MTQ6XFx0XFx0bWFwLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBkZXNjLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuMjgxNTpcXHRcXG4yODE2OlxcdFxcdC8qXFxuMjgxNzpcXHRcXHQgKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZ3MgYXJlIGFuIGFuY2llbnQgd2F5IG9mIGdldHRpbmdcXG4yODE4OlxcdFxcdCAqIGFub255bW91cyBtYXBwaW5ncy4gUmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlc2UgbWFwcGluZ3MgdG8gYmUgb2RkXFxuMjgxOTpcXHRcXHQgKiBvdXRsaWVycywgc2ltcGx5IG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMuXFxuMjgyMDpcXHRcXHQgKi9cXG4yODIxOlxcdFxcdGlmIChtYXBfaXNfcHJpdmF0ZShtYXApIFxcdTAwMjZcXHUwMDI2IGZpbGVfaXNfZGV2X3plcm8obWFwLVxcdTAwM2VmaWxlKSlcXG4yODIyOlxcdFxcdFxcdG1hcF9zZXRfYW5vbihtYXApO1xcbjI4MjM6XFx0XFxuMjgyNDpcXHRcXHRyZXR1cm4gMDtcXG4yODI1OlxcdH1cXG4yODI2OlxcdFxcbjI4Mjc6XFx0c3RhdGljIHZvaWQgc2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjI4Mjg6XFx0XFx0XFx0c3RydWN0IG1tYXBfc3RhdGUgKm1hcClcXG4yODI5OlxcdHtcXG4yODMwOlxcdFxcdHZtYS1cXHUwMDNldm1fb3BzID0gbWFwLVxcdTAwM2V2bV9vcHM7XFxuMjgzMTpcXHRcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IG1hcC1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbjI4MzI6XFx0fVxcbjI4MzM6XFx0XFxuMjgzNDpcXHQvKlxcbjI4MzU6XFx0ICogQXJlIHdlIGd1YXJhbnRlZWQgbm8gZHJpdmVyIGNhbiBjaGFuZ2Ugc3RhdGUgc3VjaCBhcyB0byBwcmVjbHVkZSBLU00gbWVyZ2luZz9cXG4yODM2OlxcdCAqIElmIHNvLCBsZXQncyBzZXQgdGhlIEtTTSBtZXJnZWFibGUgZmxhZyBlYXJseSBzbyB3ZSBkb24ndCBicmVhayBWTUEgbWVyZ2luZy5cXG4yODM3OlxcdCAqL1xcbjI4Mzg6XFx0c3RhdGljIGJvb2wgY2FuX3NldF9rc21fZmxhZ3NfZWFybHkoc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcXG4yODM5OlxcdHtcXG4yODQwOlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlID0gbWFwLVxcdTAwM2VmaWxlO1xcbjI4NDE6XFx0XFxuMjg0MjpcXHRcXHQvKiBBbm9ueW1vdXMgbWFwcGluZ3MgaGF2ZSBubyBkcml2ZXIgd2hpY2ggY2FuIGNoYW5nZSB0aGVtLiAqL1xcbjI4NDM6XFx0XFx0aWYgKCFmaWxlKVxcbjI4NDQ6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjg0NTpcXHRcXG4yODQ2OlxcdFxcdC8qXFxuMjg0NzpcXHRcXHQgKiBJZiAubW1hcF9wcmVwYXJlKCkgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBkcml2ZXIgd2lsbCBoYXZlIGFscmVhZHlcXG4yODQ4OlxcdFxcdCAqIG1hbmlwdWxhdGVkIHN0YXRlIHByaW9yIHRvIHVwZGF0aW5nIEtTTSBmbGFncy4gU28gbm8gbmVlZCB0byB3b3JyeVxcbjI4NDk6XFx0XFx0ICogYWJvdXQgbW1hcCBjYWxsYmFja3MgbW9kaWZ5aW5nIFZNQSBmbGFncyBhZnRlciB0aGUgS1NNIGZsYWcgaGFzIGJlZW5cXG4yODUwOlxcdFxcdCAqIHVwZGF0ZWQgaGVyZSwgd2hpY2ggY291bGQgb3RoZXJ3aXNlIGFmZmVjdCBLU00gZWxpZ2liaWxpdHkuXFxuMjg1MTpcXHRcXHQgKi9cXG4yODUyOlxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2VtbWFwX3ByZXBhcmUpXFxuMjg1MzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yODU0OlxcdFxcbjI4NTU6XFx0XFx0Lyogc2htZW0gaXMgc2FmZS4gKi9cXG4yODU2OlxcdFxcdGlmIChzaG1lbV9maWxlKGZpbGUpKVxcbjI4NTc6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjg1ODpcXHRcXG4yODU5OlxcdFxcdC8qIEFueSBvdGhlciAubW1hcCBjYWxsYmFjayBpcyBub3Qgc2FmZS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6NTUuODcxNTc4MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE3MDcyODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gTWVtb3J5IE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBfX21tYXBfcmVnaW9uYCBhZ2Fpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5vdCBqdXN0IGlzb2xhdGUgb24gdGhhdCBmdW5jdGlvbiwgYnV0IGJyb2FkZW4gdGhlIHNjb3BlIHNsaWdodGx5LiBUbyB0cnVseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBjb2RlLiBXaGF0IGNhbGxzIGBfX21tYXBfcmVnaW9uYD8gV2hhdCBkYXRhIGRvZXMgaXQgb3BlcmF0ZSBvbj8gV2hhdCBmb2xsb3dzIGl0cyBleGVjdXRpb24/IEknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBlcnJvciBjaGVja3MsIG9yIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucyBpbiBpdHMgdmljaW5pdHk/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBzaW1wbHkgbW9kaWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIG1hcHBpbmc/IEEgZGVlcGVyIGRpdmUgYXJvdW5kIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gd2lsbCBnaXZlIGEgbXVjaCBjbGVhcmVyIHBpY3R1cmUuIEknbSBhZnRlciB0aGUgYmlnZ2VyIHN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6NTcuOTg4NjUyOTY5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODgwOlxcdFxcdH07XFxuMjg4MTpcXHRcXHRib29sIGFsbG9jYXRlZF9uZXcgPSBmYWxzZTtcXG4yODgyOlxcdFxcdGludCBlcnJvcjtcXG4yODgzOlxcdFxcbjI4ODQ6XFx0XFx0bWFwLmNoZWNrX2tzbV9lYXJseSA9IGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KFxcdTAwMjZtYXApO1xcbjI4ODU6XFx0XFxuMjg4NjpcXHRcXHRlcnJvciA9IF9fbW1hcF9zZXR1cChcXHUwMDI2bWFwLCBcXHUwMDI2ZGVzYywgdWYpO1xcbjI4ODc6XFx0XFx0aWYgKCFlcnJvciBcXHUwMDI2XFx1MDAyNiBoYXZlX21tYXBfcHJlcGFyZSlcXG4yODg4OlxcdFxcdFxcdGVycm9yID0gY2FsbF9tbWFwX3ByZXBhcmUoXFx1MDAyNm1hcCwgXFx1MDAyNmRlc2MpO1xcbjI4ODk6XFx0XFx0aWYgKGVycm9yKVxcbjI4OTA6XFx0XFx0XFx0Z290byBhYm9ydF9tdW5tYXA7XFxuMjg5MTpcXHRcXG4yODkyOlxcdFxcdGlmIChtYXAuY2hlY2tfa3NtX2Vhcmx5KVxcbjI4OTM6XFx0XFx0XFx0dXBkYXRlX2tzbV9mbGFncyhcXHUwMDI2bWFwKTtcXG4yODk0OlxcdFxcbjI4OTU6XFx0XFx0LyogQXR0ZW1wdCB0byBtZXJnZSB3aXRoIGFkamFjZW50IFZNQXMuLi4gKi9cXG4yODk2OlxcdFxcdGlmIChtYXAucHJldiB8fCBtYXAubmV4dCkge1xcbjI4OTc6XFx0XFx0XFx0Vk1HX01NQVBfU1RBVEUodm1nLCBcXHUwMDI2bWFwLCAvKiB2bWEgPSAqLyBOVUxMKTtcXG4yODk4OlxcdFxcbjI4OTk6XFx0XFx0XFx0dm1hID0gdm1hX21lcmdlX25ld19yYW5nZShcXHUwMDI2dm1nKTtcXG4yOTAwOlxcdFxcdH1cXG4yOTAxOlxcdFxcbjI5MDI6XFx0XFx0LyogLi4uYnV0IGlmIHdlIGNhbid0LCBhbGxvY2F0ZSBhIG5ldyBWTUEuICovXFxuMjkwMzpcXHRcXHRpZiAoIXZtYSkge1xcbjI5MDQ6XFx0XFx0XFx0ZXJyb3IgPSBfX21tYXBfbmV3X3ZtYShcXHUwMDI2bWFwLCBcXHUwMDI2dm1hLCBcXHUwMDI2ZGVzYy5hY3Rpb24pO1xcbjI5MDU6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjI5MDY6XFx0XFx0XFx0XFx0Z290byB1bmFjY3RfZXJyb3I7XFxuMjkwNzpcXHRcXHRcXHRhbGxvY2F0ZWRfbmV3ID0gdHJ1ZTtcXG4yOTA4OlxcdFxcdH1cXG4yOTA5OlxcdFxcbjI5MTA6XFx0XFx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFxcdTAwMjZcXHUwMDI2ICFtYXBfaXNfYW5vbihcXHUwMDI2bWFwKSlcXG4yOTExOlxcdFxcdFxcdHNldF92bWFfdXNlcl9kZWZpbmVkX2ZpZWxkcyh2bWEsIFxcdTAwMjZtYXApO1xcbjI5MTI6XFx0XFxuMjkxMzpcXHRcXHRfX21tYXBfY29tcGxldGUoXFx1MDAyNm1hcCwgdm1hKTtcXG4yOTE0OlxcdFxcbjI5MTU6XFx0XFx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFxcdTAwMjZcXHUwMDI2IGFsbG9jYXRlZF9uZXcpIHtcXG4yOTE2OlxcdFxcdFxcdGVycm9yID0gbW1hcF9hY3Rpb25fY29tcGxldGUodm1hLCBcXHUwMDI2ZGVzYy5hY3Rpb24sXFxuMjkxNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIC8qaXNfY29tcGF0PSovZmFsc2UpO1xcbjI5MTg6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjI5MTk6XFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbjI5MjA6XFx0XFx0fVxcbjI5MjE6XFx0XFxuMjkyMjpcXHRcXHRyZXR1cm4gYWRkcjtcXG4yOTIzOlxcdFxcbjI5MjQ6XFx0XFx0LyogQWNjb3VudGluZyB3YXMgZG9uZSBieSBfX21tYXBfc2V0dXAoKS4gKi9cXG4yOTI1OlxcdHVuYWNjdF9lcnJvcjpcXG4yOTI2OlxcdFxcdGlmIChtYXAuY2hhcmdlZClcXG4yOTI3OlxcdFxcdFxcdHZtX3VuYWNjdF9tZW1vcnkobWFwLmNoYXJnZWQpO1xcbjI5Mjg6XFx0YWJvcnRfbXVubWFwOlxcbjI5Mjk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6NTcuOTg4OTE0ODg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzMxNDg1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1tYXBfZmlsZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBtbWFwX2ZpbGVgLCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGl0cyBkZWZpbml0aW9uIGluIGBtbS9pbnRlcm5hbC5oYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwYXJhbWV0ZXJzLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCAqY2FsbCogYG1tYXBfZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBjbHVlcyB3aWxsIGxpZSDigJMgc2VlaW5nIGhvdyBpdCdzIHVzZWQgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGluc2lnaHQgaW50byBpdHMgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93IGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBgbW1hcF9maWxlYCBvcGVyYXRlcy4gS25vd2luZyB0aGUgY2FsbGVycyBpcyAqa2V5KiB0byBncmFzcGluZyBpdHMgb3ZlcmFsbCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NjMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI2OjU5LjgyMjA2NjQyM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NzIxNDcwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbWFwX2ZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvdmZzX2ZpbGUuYy0zMC1cXG5mcy85cC92ZnNfZmlsZS5jOjMxOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdjlmc19tbWFwX2ZpbGVfdm1fb3BzO1xcbmZzLzlwL3Zmc19maWxlLmMtMzItXFxuLS1cXG5mcy85cC92ZnNfZmlsZS5jPTQ2Mj12OWZzX2ZpbGVfbW1hcF9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxuLS1cXG5mcy85cC92ZnNfZmlsZS5jLTQ3Ny1cXHRpZiAoIXJldHZhbClcXG5mcy85cC92ZnNfZmlsZS5jOjQ3ODpcXHRcXHRkZXNjLVxcdTAwM2V2bV9vcHMgPSBcXHUwMDI2djlmc19tbWFwX2ZpbGVfdm1fb3BzO1xcbmZzLzlwL3Zmc19maWxlLmMtNDc5LVxcbi0tXFxuZnMvOXAvdmZzX2ZpbGUuYz00ODk9c3RhdGljIHZvaWQgdjlmc19tbWFwX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuZnMvOXAvdmZzX2ZpbGUuYy01MDEtXFxuZnMvOXAvdmZzX2ZpbGUuYzo1MDI6c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2OWZzX21tYXBfZmlsZV92bV9vcHMgPSB7XFxuZnMvOXAvdmZzX2ZpbGUuYy01MDMtXFx0LmNsb3NlID0gdjlmc19tbWFwX3ZtX2Nsb3NlLFxcbi0tXFxuZnMvYmFja2luZy1maWxlLmM9MzI5PWludCBiYWNraW5nX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9iYWNraW5nLWZpbGUuYy0zMzctXFxuZnMvYmFja2luZy1maWxlLmM6MzM4OlxcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcXG5mcy9iYWNraW5nLWZpbGUuYy0zMzktXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5mcy9iaW5mbXRfZWxmLmM9NjQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvYWRfZWxmX2ludGVycChzdHJ1Y3QgZWxmaGRyICppbnRlcnBfZWxmX2V4LFxcbi0tXFxuZnMvYmluZm10X2VsZi5jLTY2MC1cXHRcXHRnb3RvIG91dDtcXG5mcy9iaW5mbXRfZWxmLmM6NjYxOlxcdGlmICghY2FuX21tYXBfZmlsZShpbnRlcnByZXRlcikpXFxuZnMvYmluZm10X2VsZi5jLTY2Mi1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmZzL2JpbmZtdF9lbGYuYz04Mjk9c3RhdGljIGludCBsb2FkX2VsZl9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9lbGYuYy04NjItXFx0XFx0Z290byBvdXQ7XFxuZnMvYmluZm10X2VsZi5jOjg2MzpcXHRpZiAoIWNhbl9tbWFwX2ZpbGUoYnBybS1cXHUwMDNlZmlsZSkpXFxuZnMvYmluZm10X2VsZi5jLTg2NC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz0xMDQ9c3RhdGljIGludCBpc19lbGYoc3RydWN0IGVsZmhkciAqaGRyLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0xMTEtXFx0XFx0cmV0dXJuIDA7XFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjExMjpcXHRpZiAoIWNhbl9tbWFwX2ZpbGUoZmlsZSkpXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTExMy1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2NvZGEvZmlsZS5jPTE1MT1jb2RhX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqY29kYV9maWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL2NvZGEvZmlsZS5jLTE2Mi1cXG5mcy9jb2RhL2ZpbGUuYzoxNjM6XFx0aWYgKCFjYW5fbW1hcF9maWxlKGhvc3RfZmlsZSkpXFxuZnMvY29kYS9maWxlLmMtMTY0LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZnMvZWNyeXB0ZnMvZmlsZS5jPTE4Nj1zdGF0aWMgaW50IGVjcnlwdGZzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuZnMvZWNyeXB0ZnMvZmlsZS5jLTE5My1cXHQgKi9cXG5mcy9lY3J5cHRmcy9maWxlLmM6MTk0OlxcdGlmICghY2FuX21tYXBfZmlsZShsb3dlcl9maWxlKSlcXG5mcy9lY3J5cHRmcy9maWxlLmMtMTk1LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZnMvZjJmcy9mMmZzLmg9MzYzNT1zdGF0aWMgaW5saW5lIGludCBmMmZzX2V4aXN0X2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2YyZnMvZjJmcy5oLTM2MzktXFxuZnMvZjJmcy9mMmZzLmg6MzY0MDpzdGF0aWMgaW5saW5lIGludCBmMmZzX2lzX21tYXBfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2YyZnMvZjJmcy5oLTM2NDEte1xcbi0tXFxuZnMvZjJmcy9mMmZzLmg9NDg3MT1zdGF0aWMgaW5saW5lIGJvb2wgZjJmc19kaXNhYmxlX2NvbXByZXNzZWRfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZjJmcy9mMmZzLmgtNDg4MC1cXHR9XFxuZnMvZjJmcy9mMmZzLmg6NDg4MTpcXHRpZiAoZjJmc19pc19tbWFwX2ZpbGUoaW5vZGUpIHx8IGF0b21pY19yZWFkKFxcdTAwMjZmaS1cXHUwMDNld3JpdGViYWNrKSB8fFxcbmZzL2YyZnMvZjJmcy5oLTQ4ODItXFx0XFx0KFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgRjJGU19IQVNfQkxPQ0tTKGlub2RlKSkpIHtcXG4tLVxcbmZzL2YyZnMvZjJmcy5oPTUwNDU9c3RhdGljIGlubGluZSBib29sIGYyZnNfbWF5X2NvbXByZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9mMmZzL2YyZnMuaC01MDQ4LVxcdFxcdGYyZnNfaXNfYXRvbWljX2ZpbGUoaW5vZGUpIHx8IGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSB8fFxcbmZzL2YyZnMvZjJmcy5oOjUwNDk6XFx0XFx0ZjJmc19pc19tbWFwX2ZpbGUoaW5vZGUpKVxcbmZzL2YyZnMvZjJmcy5oLTUwNTAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvZjJmcy9maWxlLmM9NDcyNT1zdGF0aWMgaW50IGYyZnNfaW9jX3NldF9jb21wcmVzc19vcHRpb24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNDc1OC1cXG5mcy9mMmZzL2ZpbGUuYzo0NzU5OlxcdGlmIChmMmZzX2lzX21tYXBfZmlsZShpbm9kZSkgfHwgZ2V0X2RpcnR5X3BhZ2VzKGlub2RlKSkge1xcbmZzL2YyZnMvZmlsZS5jLTQ3NjAtXFx0XFx0cmV0ID0gLUVCVVNZO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTE5OTQ9c3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTIwMzktLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjA0MDpzdGF0aWMgaW5saW5lIGJvb2wgY2FuX21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA0MS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaD0yMDE9TFNNX0hPT0soaW50LCAwLCBtbWFwX2FkZHIsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaDoyMDI6TFNNX0hPT0soaW50LCAwLCBtbWFwX2ZpbGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgtMjAzLVxcdCB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDc5PWludCBzZWN1cml0eV9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDgwLVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQ4MTppbnQgc2VjdXJpdHlfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQ4Mi1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xMTY2PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfaW9jdGxfY29tcGF0KHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNzItXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjExNzM6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNzQtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxuaXBjL3NobS5jPTE1MjE9bG9uZyBkb19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnLFxcbi0tXFxuaXBjL3NobS5jLTE2NDUtXFxuaXBjL3NobS5jOjE2NDY6XFx0ZXJyID0gc2VjdXJpdHlfbW1hcF9maWxlKGZpbGUsIHByb3QsIGZsYWdzKTtcXG5pcGMvc2htLmMtMTY0Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmM9MzQ1PUJURl9JRChmdW5jLCBicGZfbHNtX3BhdGhfY2hvd24pXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0zNDctXFxua2VybmVsL2JwZi9icGZfbHNtLmM6MzQ4OkJURl9JRChmdW5jLCBicGZfbHNtX21tYXBfZmlsZSlcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0zNDktQlRGX0lEKGZ1bmMsIGJwZl9sc21fbmV0bGlua19zZW5kKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmMtOS0vKlxcbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jOjEwOiAqIFN0cm9uZyBkZWZpbml0aW9uIG9mIHRoZSBtbWFwX2ZpbGUoKSBCUEYgTFNNIGhvb2suIFRoZSBfX251bGxhYmxlIHN1ZmZpeCBvblxcbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jLTExLSAqIHRoZSBzdHJ1Y3QgZmlsZSBwb2ludGVyIHBhcmFtZXRlciBuYW1lIG1hcmtzIGl0IGFzIFBUUl9NQVlCRV9OVUxMLiBUaGlzXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc21fcHJvdG8uYy0xNC0gKi9cXG5rZXJuZWwvYnBmL2JwZl9sc21fcHJvdG8uYzoxNTppbnQgYnBmX2xzbV9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGVfX251bGxhYmxlLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXFxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmMtMTYtXFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxubW0vaW50ZXJuYWwuaD0yMTk9c3RhdGljIGlubGluZSB2b2lkICpmb2xpb19yYXdfbWFwcGluZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaW50ZXJuYWwuaC0yMzUtICovXFxubW0vaW50ZXJuYWwuaDoyMzY6c3RhdGljIGlubGluZSBpbnQgbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9pbnRlcm5hbC5oLTIzNy17XFxuLS1cXG5tbS9tbWFwLmM9MzM4PXVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbW1hcC5jLTQ4NC1cXG5tbS9tbWFwLmM6NDg1OlxcdFxcdFxcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcXG5tbS9tbWFwLmMtNDg2LVxcdFxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxubW0vbW1hcC5jPTExMDE9U1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLFxcbi0tXFxubW0vbW1hcC5jLTExNTctXFx0LyogQ2FsbCBvdXRzaWRlIG1tYXBfbG9jayB0byBiZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgY2FsbGVycy4gKi9cXG5tbS9tbWFwLmM6MTE1ODpcXHRyZXQgPSBzZWN1cml0eV9tbWFwX2ZpbGUoZmlsZSwgcHJvdCwgZmxhZ3MpO1xcbm1tL21tYXAuYy0xMTU5LVxcdGlmIChyZXQpIHtcXG4tLVxcbm1tL25vbW11LmM9NjkwPXN0YXRpYyBpbnQgdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vbm9tbXUuYy03MjItXFx0XFx0LyogZmlsZXMgbXVzdCBzdXBwb3J0IG1tYXAgKi9cXG5tbS9ub21tdS5jOjcyMzpcXHRcXHRpZiAoIWNhbl9tbWFwX2ZpbGUoZmlsZSkpXFxubW0vbm9tbXUuYy03MjQtXFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5tbS9ub21tdS5jPTg5Mz1zdGF0aWMgaW50IGRvX21tYXBfc2hhcmVkX2ZpbGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ub21tdS5jLTg5Ni1cXG5tbS9ub21tdS5jOjg5NzpcXHRyZXQgPSBtbWFwX2ZpbGUodm1hLVxcdTAwM2V2bV9maWxlLCB2bWEpO1xcbm1tL25vbW11LmMtODk4LVxcdGlmIChyZXQgPT0gMCkge1xcbi0tXFxubW0vbm9tbXUuYz05MTQ9c3RhdGljIGludCBkb19tbWFwX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ub21tdS5jLTkyOS1cXHRpZiAoY2FwYWJpbGl0aWVzIFxcdTAwMjYgTk9NTVVfTUFQX0RJUkVDVCkge1xcbm1tL25vbW11LmM6OTMwOlxcdFxcdHJldCA9IG1tYXBfZmlsZSh2bWEtXFx1MDAzZXZtX2ZpbGUsIHZtYSk7XFxubW0vbm9tbXUuYy05MzEtXFx0XFx0Lyogc2hvdWxkbid0IHJldHVybiBzdWNjZXNzIGlmIHdlJ3JlIG5vdCBzaGFyaW5nICovXFxuLS1cXG5tbS91dGlsLmM9NTY1PXVuc2lnbmVkIGxvbmcgdm1fbW1hcF9wZ29mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vdXRpbC5jLTU3NC1cXG5tbS91dGlsLmM6NTc1OlxcdHJldCA9IHNlY3VyaXR5X21tYXBfZmlsZShmaWxlLCBwcm90LCBmbGFnKTtcXG5tbS91dGlsLmMtNTc2LVxcdGlmICghcmV0KVxcbi0tXFxubW0vdm1hLmM9MjUxOT1zdGF0aWMgaW50IF9fbW1hcF9zZXR1cChzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxcbi0tXFxubW0vdm1hLmMtMjU3MS1cXHQgKiBjYW5ub3QgcmFjZSB3aXRoIHRoZSBmcmVlaW5nIGxhdGVyIGluIHRoZSB0cnVuY2F0ZSBzY2VuYXJpby5cXG5tbS92bWEuYzoyNTcyOlxcdCAqIFRoaXMgaXMgYWxzbyBuZWVkZWQgZm9yIG1tYXBfZmlsZSgpLCB3aGljaCBpcyB3aHkgdm1fb3BzXFxubW0vdm1hLmMtMjU3My1cXHQgKiBjbG9zZSBmdW5jdGlvbiBpcyBjYWxsZWQuXFxuLS1cXG5tbS92bWEuYz0yNTgyPXN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbi0tXFxubW0vdm1hLmMtMjU5NC1cXG5tbS92bWEuYzoyNTk1OlxcdGVycm9yID0gbW1hcF9maWxlKHZtYS1cXHUwMDNldm1fZmlsZSwgdm1hKTtcXG5tbS92bWEuYy0yNTk2LVxcdGlmIChlcnJvcikge1xcbi0tXFxuc2NyaXB0cy9yZWNvcmRtY291bnQuYz0xNTE9c3RhdGljIHZvaWQgKiB1bWFsbG9jKHNpemVfdCBzaXplKVxcbi0tXFxuc2NyaXB0cy9yZWNvcmRtY291bnQuYy0xNzUtICovXFxuc2NyaXB0cy9yZWNvcmRtY291bnQuYzoxNzY6c3RhdGljIHZvaWQgKm1tYXBfZmlsZShjaGFyIGNvbnN0ICpmbmFtZSlcXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jLTE3Ny17XFxuLS1cXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jPTUxMT1zdGF0aWMgaW50IGRvX2ZpbGUoY2hhciBjb25zdCAqY29uc3QgZm5hbWUpXFxuLS1cXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jLTUxNi1cXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jOjUxNzpcXHRlaGRyID0gbW1hcF9maWxlKGZuYW1lKTtcXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jLTUxOC1cXHRpZiAoIWVoZHIpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYz01NjE9c3RhdGljIGludCBjb21tb25fbW1hcChjb25zdCBjaGFyICpvcCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTU4Mi1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYzo1ODM6c3RhdGljIGludCBhcHBhcm1vcl9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCxcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy01ODQtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTc2Nz1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBhcHBhcm1vcl9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE3OTQtXFx0TFNNX0hPT0tfSU5JVChmaWxlX2ZyZWVfc2VjdXJpdHksIGFwcGFybW9yX2ZpbGVfZnJlZV9zZWN1cml0eSksXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTc5NTpcXHRMU01fSE9PS19JTklUKG1tYXBfZmlsZSwgYXBwYXJtb3JfbW1hcF9maWxlKSxcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xNzk2LVxcdExTTV9IT09LX0lOSVQoZmlsZV9tcHJvdGVjdCwgYXBwYXJtb3JfZmlsZV9tcHJvdGVjdCksXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmM9MTA2PXN0YXRpYyBpbnQgbW1hcF92aW9sYXRpb25fY2hlY2soZW51bSBpbWFfaG9va3MgZnVuYywgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMtMTIxLVxcdFxcdGludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX0RBVEEsIGlub2RlLCAqcGF0aG5hbWUsXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jOjEyMjpcXHRcXHRcXHRcXHQgICAgXFxcIm1tYXBfZmlsZVxcXCIsIFxcXCJtbWFwcGVkX3dyaXRlcnNcXFwiLCByYywgMCk7XFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jLTEyMy1cXHR9XFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmM9MTM1Mz1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBpbWFfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMtMTM1OS1cXHRMU01fSE9PS19JTklUKGZpbGVfcmVsZWFzZSwgaW1hX2ZpbGVfZnJlZSksXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jOjEzNjA6XFx0TFNNX0hPT0tfSU5JVChtbWFwX2ZpbGUsIGltYV9maWxlX21tYXApLFxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYy0xMzYxLVxcdExTTV9IT09LX0lOSVQoZmlsZV9tcHJvdGVjdCwgaW1hX2ZpbGVfbXByb3RlY3QpLFxcbi0tXFxuc2VjdXJpdHkvaXBlL2hvb2tzLmM9NTM9aW50IGlwZV9icHJtX2NyZWRzX2Zvcl9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5zZWN1cml0eS9pcGUvaG9va3MuYy02NS0vKipcXG5zZWN1cml0eS9pcGUvaG9va3MuYzo2NjogKiBpcGVfbW1hcF9maWxlKCkgLSBpcGUgc2VjdXJpdHkgaG9vayBmdW5jdGlvbiBmb3IgbW1hcCBjaGVjay5cXG5zZWN1cml0eS9pcGUvaG9va3MuYy02Ny0gKiBAZjogRmlsZSBiZWluZyBtbWFwJ2QuIENhbiBiZSBOVUxMIGluIHRoZSBjYXNlIG9mIGFub255bW91cyBtZW1vcnkuXFxuLS1cXG5zZWN1cml0eS9pcGUvaG9va3MuYy03OS0gKi9cXG5zZWN1cml0eS9pcGUvaG9va3MuYzo4MDppbnQgaXBlX21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgbG9uZyByZXFwcm90IF9fYWx3YXlzX3VudXNlZCxcXG5zZWN1cml0eS9pcGUvaG9va3MuYy04MS1cXHRcXHQgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbnNlY3VyaXR5L2lwZS9ob29rcy5oPTI4PWludCBpcGVfYnBybV9jcmVkc19mb3JfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTtcXG5zZWN1cml0eS9pcGUvaG9va3MuaC0yOS1cXG5zZWN1cml0eS9pcGUvaG9va3MuaDozMDppbnQgaXBlX21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgbG9uZyByZXFwcm90LCB1bnNpZ25lZCBsb25nIHByb3QsXFxuc2VjdXJpdHkvaXBlL2hvb2tzLmgtMzEtXFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG4tLVxcbnNlY3VyaXR5L2lwZS9pcGUuYz00OD1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBpcGVfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9pcGUvaXBlLmMtNTAtXFx0TFNNX0hPT0tfSU5JVChicHJtX2NyZWRzX2Zvcl9leGVjLCBpcGVfYnBybV9jcmVkc19mb3JfZXhlYyksXFxuc2VjdXJpdHkvaXBlL2lwZS5jOjUxOlxcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBpcGVfbW1hcF9maWxlKSxcXG5zZWN1cml0eS9pcGUvaXBlLmMtNTItXFx0TFNNX0hPT0tfSU5JVChmaWxlX21wcm90ZWN0LCBpcGVfZmlsZV9tcHJvdGVjdCksXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTI1MzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1tYXBfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTY3LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjU2ODogKiBzZWN1cml0eV9tbWFwX2ZpbGUoKSAtIENoZWNrIGlmIG1tYXAnaW5nIGEgZmlsZSBpcyBhbGxvd2VkXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTY5LSAqIEBmaWxlOiBmaWxlXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI1NzctICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNTc4OmludCBzZWN1cml0eV9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI1NzktXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTgwLXtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjI1ODE6XFx0cmV0dXJuIGNhbGxfaW50X2hvb2sobW1hcF9maWxlLCBmaWxlLCBwcm90LCBtbWFwX3Byb3QoZmlsZSwgcHJvdCksXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTgyLVxcdFxcdFxcdCAgICAgZmxhZ3MpO1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTkxLSAqIENoZWNrIHBlcm1pc3Npb25zIGZvciBhIG1tYXAgb3BlcmF0aW9uIG9uIGEgc3RhY2tlZCBmaWxlc3lzdGVtLiAgVGhpcyBob29rXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNTkyOiAqIGlzIGNhbGxlZCBhZnRlciB0aGUgc2VjdXJpdHlfbW1hcF9maWxlKCkgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBhdXRob3JpemluZ1xcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjU5My0gKiB0aGUgbW1hcCBvbiBAYmFja2luZ19maWxlLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgbW1hcCBvcGVyYXRpb25cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz00MDI3PXN0YXRpYyBpbnQgc2VsaW51eF9tbWFwX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwMzktXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwNDA6c3RhdGljIGludCBzZWxpbnV4X21tYXBfZmlsZV9jb21tb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA0MS1cXHRcXHRcXHRcXHQgICAgYm9vbCBzaGFyZWQsIGJvb2wgbW91bnRlcl9jaGVjaylcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDU4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDU5OnN0YXRpYyBpbnQgc2VsaW51eF9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwNjAtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHJlcXByb3QgX19hbHdheXNfdW51c2VkLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwNjIte1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDYzOlxcdHJldHVybiBzZWxpbnV4X21tYXBfZmlsZV9jb21tb24oZmlsZSwgcHJvdCxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA2NC1cXHRcXHRcXHRcXHRcXHQoZmxhZ3MgXFx1MDAyNiBNQVBfVFlQRSkgPT0gTUFQX1NIQVJFRCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDczLSAqXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwNzQ6ICogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgc2VsaW51eF9tbWFwX2ZpbGUoKSBvbiBzdGFja2VkIGZpbGVzeXN0ZW1zLCBhbmQgaXRcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA3NS0gKiBpcyB0aGlzIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IGFjY2VzcyB0byBAYmFja2luZ19maWxlIGFuZFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQwODM9c3RhdGljIGludCBzZWxpbnV4X21tYXBfYmFja2luZ19maWxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwOTYtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwOTc6XFx0cmV0dXJuIHNlbGludXhfbW1hcF9maWxlX2NvbW1vbihiYWNraW5nX2ZpbGUsIHByb3QsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwOTgtXFx0XFx0XFx0XFx0XFx0dm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NIQVJFRCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTYwPXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYzOS1cXHRMU01fSE9PS19JTklUKGZpbGVfaW9jdGxfY29tcGF0LCBzZWxpbnV4X2ZpbGVfaW9jdGxfY29tcGF0KSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzY0MDpcXHRMU01fSE9PS19JTklUKG1tYXBfZmlsZSwgc2VsaW51eF9tbWFwX2ZpbGUpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjQxLVxcdExTTV9IT09LX0lOSVQobW1hcF9iYWNraW5nX2ZpbGUsIHNlbGludXhfbW1hcF9iYWNraW5nX2ZpbGUpLFxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9MTgwMT1zdGF0aWMgaW50IHNtYWNrX2ZpbGVfZmNudGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xODM1LS8qKlxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjE4MzY6ICogc21hY2tfbW1hcF9maWxlIC0gQ2hlY2sgcGVybWlzc2lvbnMgZm9yIGEgbW1hcCBvcGVyYXRpb24uXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTgzNy0gKiBAZmlsZTogY29udGFpbnMgdGhlIGZpbGUgc3RydWN0dXJlIGZvciBmaWxlIHRvIG1hcCAobWF5IGJlIE5VTEwpLlxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTg0NS0gKi9cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxODQ2OnN0YXRpYyBpbnQgc21hY2tfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTE4NDctXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyByZXFwcm90LCB1bnNpZ25lZCBsb25nIHByb3QsXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz01MTU1PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNtYWNrX2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE5OC1cXHRMU01fSE9PS19JTklUKGZpbGVfZmNudGwsIHNtYWNrX2ZpbGVfZmNudGwpLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjUxOTk6XFx0TFNNX0hPT0tfSU5JVChtbWFwX2ZpbGUsIHNtYWNrX21tYXBfZmlsZSksXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTIwMC1cXHRMU01fSE9PS19JTklUKG1tYXBfYWRkciwgY2FwX21tYXBfYWRkciksXFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM9NDg9c3RhdGljIGludCB0ZXN0X19QRVJGX1JFQ09SRChzdHJ1Y3QgdGVzdF9zdWl0ZSAqdGVzdCBfX21heWJlX3VudXNlZCwgaW50IHN1YnRlc3QgX19tYXliZV91bnVzZWQpXFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtNjQtXFx0Y29uc3QgY2hhciAqYXJndltdID0geyBjbWQsIFxcXCIxXFxcIiwgTlVMTCwgfTtcXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6NjU6XFx0Y2hhciAqYm5hbWUsICptbWFwX2ZpbGVuYW1lO1xcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy02Ni1cXHR1NjQgcHJldl90aW1lID0gMDtcXG4tLVxcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy0yNzMtXFx0XFx0XFx0XFx0Y2FzZSBQRVJGX1JFQ09SRF9NTUFQOlxcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYzoyNzQ6XFx0XFx0XFx0XFx0XFx0bW1hcF9maWxlbmFtZSA9IGV2ZW50LVxcdTAwM2VtbWFwLmZpbGVuYW1lO1xcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy0yNzUtXFx0XFx0XFx0XFx0XFx0Z290byBjaGVja19ibmFtZTtcXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjc2LVxcdFxcdFxcdFxcdGNhc2UgUEVSRl9SRUNPUkRfTU1BUDI6XFxudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jOjI3NzpcXHRcXHRcXHRcXHRcXHRtbWFwX2ZpbGVuYW1lID0gZXZlbnQtXFx1MDAzZW1tYXAyLmZpbGVuYW1lO1xcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy0yNzgtXFx0XFx0XFx0XFx0Y2hlY2tfYm5hbWU6XFxudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jOjI3OTpcXHRcXHRcXHRcXHRcXHRibmFtZSA9IHN0cnJjaHIobW1hcF9maWxlbmFtZSwgJy8nKTtcXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjgwLVxcdFxcdFxcdFxcdFxcdGlmIChibmFtZSAhPSBOVUxMKSB7XFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjg5LVxcdFxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoIWZvdW5kX3Zkc29fbW1hcClcXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6MjkwOlxcdFxcdFxcdFxcdFxcdFxcdGZvdW5kX3Zkc29fbW1hcCA9ICFzdHJjbXAobW1hcF9maWxlbmFtZSwgXFxcIlt2ZHNvXVxcXCIpO1xcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy0yOTEtXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmM9MTU1PV9fbmFrZWQgaW50IGRpc2FibGVkX2hvb2tfdGVzdDModm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jLTE2Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmM6MTYzOlNFQyhcXFwibHNtL21tYXBfZmlsZVxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jOjE2NDpfX2Rlc2NyaXB0aW9uKFxcXCJub3QgbnVsbCBjaGVja2luZyBudWxsYWJsZSBwb2ludGVyIGluIGJwZl9sc21fbW1hcF9maWxlXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMtMTY1LV9fZmFpbHVyZSBfX21zZyhcXFwiUjEgaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYz0xNjY9aW50IEJQRl9QUk9HKG5vX251bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jLTE3NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmM6MTc2OlNFQyhcXFwibHNtL21tYXBfZmlsZVxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jOjE3NzpfX2Rlc2NyaXB0aW9uKFxcXCJudWxsIGNoZWNraW5nIG51bGxhYmxlIHBvaW50ZXIgaW4gYnBmX2xzbV9tbWFwX2ZpbGVcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYy0xNzgtX19zdWNjZXNzXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTE1NDQ9c3RhdGljIGlubGluZSBpbnQgbWFwcGluZ19tYXBfd3JpdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTE1NTAtLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjE1NTE6c3RhdGljIGlubGluZSBib29sIGNhbl9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0xNTUyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaD0zMjg9c3RhdGljIGlubGluZSB2b2lkIHZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0zMzEtXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oOjMzMjpzdGF0aWMgaW5saW5lIGludCBtbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0zMzMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNzowMS4zNjkyODY0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjA2MTg5NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBtbWFwIEltcGxlbWVudGF0aW9uIERldGFpbHMqKlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzIGBjYW5fbW1hcF9maWxlYCBidXNpbmVzcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBzZWUgd2hlcmUgYG1tYXBfZmlsZWAgYW5kIGBtbWFwX3plcm9fcHJlcGFyZWAgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQuIEl0IGxvb2tzIGxpa2UgYG1tL3ZtYS5jYCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgYF9fbW1hcF9uZXdfZmlsZV92bWFgIGNhbGxzIGBtbWFwX2ZpbGVgIHdpdGggdGhlIGB2bWEtXHUwMDNldm1fZmlsZWAgYW5kIHRoZSB2bWEgaXRzZWxmLiBUaGVuLCBJIHJlbWVtYmVyIGBtbWFwX3plcm9fcHJlcGFyZWAgaXMgZGVmaW5lZCBpbiBgbW0vY2hhci1tZW0uY2AgYXMgdGhlIGB6ZXJvX2ZvcHMubW1hcF9wcmVwYXJlYCBmdW5jdGlvbi5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgcmVjb2duaXplcyAvZGV2L3plcm8uIEnigJlsbCBjaGVjayBgZmlsZV9pc19kZXZfemVyb2AgaW4gYG1tL2NoYXItbWVtLmNgLiBMb29rcyBzdHJhaWdodGZvcndhcmQ6IGl0IGp1c3QgdmVyaWZpZXMgaWYgdGhlIGZpbGUgb3BlcmF0aW9uIChgZl9vcGApIG1hdGNoZXMgYFx1MDAyNnplcm9fZm9wc2AuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gYG1tYXBfemVyb19wcmVwYXJlYCBpdHNlbGYuIEluIGBtbS9jaGFyLW1lbS5jYCwgaWYgaXTigJlzIGEgc2hhcmVkIFZNQSAoYFZNQV9TSEFSRURfQklUYCBzZXQpIHRoZW4gYHNobWVtX3plcm9fc2V0dXBfZGVzY2AgZG9lcyB0aGUgd29yaywgb3RoZXJ3aXNlLCBpbiBhIHByaXZhdGUgbWFwcGluZyBjYXNlLCBpdCBqdXN0IHJldHVybnMuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBjb3JlIE1NIHRha2VzIGNhcmUgb2YgcHJpdmF0ZSBzZW1hbnRpY3MuXG5cbk9rYXksIGxldCdzIHN0ZXAgdXAgYSBsZXZlbCB0byBgbW0vdm1hLmNgIGFuZCBsb29rIGF0IGBjYWxsX21tYXBfcHJlcGFyZWAuIFRoaXMgaXMgdGhlIGNvcmUgbW1hcCBwcmVwYXJlIGZ1bmN0aW9uIGFuZCBpdCdzIGNhbGxpbmcgYHZmc19tbWFwX3ByZXBhcmVgLiBUaGF0J3Mgd2hlcmUgZmlsZSBzeXN0ZW0gc3BlY2lmaWMgdGhpbmdzIGFyZSBoYW5kbGVkLiBJdCdzIGFsc28gbWFraW5nIHN1cmUgYHZtX29wc2AgaXMgc3RpbGwgdmFsaWQgYW5kIHRoZW4gY2FsbHMgc29tZSBhY3Rpb24gcHJlcGFyZSBmdW5jdGlvbi4gSWYgdGhlIG1hcHBpbmcgaXMgYSBwcml2YXRlIGAvZGV2L3plcm9gIG1hcHBpbmcgKHdoaWNoIGlzIGFuIGFuY2llbnQgd2F5IG9mIG1ha2luZyBhbm9ueW1vdXMgbWFwcGluZ3MpLCBpdCdzIGNvbnZlcnRlZCB0byBhIHRydWx5IGFub255bW91cyBtYXBwaW5nIHVzaW5nIGBtYXBfc2V0X2Fub25gLiBTbWFydCFcblxuVGltZSB0byBsb29rIGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHdlaXJkIGNvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBtbS9jaGFyLW1lbS5jYCBvciB0aGUgYC9kZXYvemVyb2AgZnVuY3Rpb25hbGl0eS4gTG9va2luZyBpbiBgbW0vTWFrZWZpbGVgLCBgY2hhci1tZW0ub2AgaXMgYWx3YXlzIGJ1aWx0IChgb2JqLXlgKS4gQW5kLCBnaXZlbiB0aGF0IEknbSBvbiBhbWQ2NCwgYENPTkZJR19NTVVgIGlzIGEgZ2l2ZW4sIHNvIHRoYXQncyBub3QgdGhlIGlzc3VlLiBJJ2xsIHRha2UgYSBxdWljayBzY2FuIG9mIGBtbS9jaGFyLW1lbS5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTY0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI3OjA2LjU3NTQ3OTA2OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2Mjc2MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jaGFyLW1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NoYXItbWVtLmM9NTU9c3RhdGljIGlubGluZSBpbnQgdmFsaWRfbW1hcF9waHlzX2FkZHJfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHNpemVfdCBzaXplKVxcbi0tXFxubW0vY2hhci1tZW0uYy02MC1cXG5tbS9jaGFyLW1lbS5jOjYxOiNpZmRlZiBDT05GSUdfU1RSSUNUX0RFVk1FTVxcbm1tL2NoYXItbWVtLmMtNjItc3RhdGljIGlubGluZSBpbnQgcGFnZV9pc19hbGxvd2VkKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vY2hhci1tZW0uYz0yNzE9c3RhdGljIHBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL2NoYXItbWVtLmMtMjgzLVxcbm1tL2NoYXItbWVtLmM6Mjg0OiNpZm5kZWYgQ09ORklHX01NVVxcbm1tL2NoYXItbWVtLmMtMjg1LXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhX21lbShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbm1tL2NoYXItbWVtLmM9MzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbm1tL2NoYXItbWVtLmM6MzIyOiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5tbS9jaGFyLW1lbS5jLTMyMy1cXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5c1xcbi0tXFxubW0vY2hhci1tZW0uYz0zMjc9c3RhdGljIGludCBtbWFwX21lbV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxuLS1cXG5tbS9jaGFyLW1lbS5jLTM2Ni1cXG5tbS9jaGFyLW1lbS5jOjM2NzojaWZkZWYgQ09ORklHX0RFVlBPUlRcXG5tbS9jaGFyLW1lbS5jLTM2OC1zdGF0aWMgc3NpemVfdCByZWFkX3BvcnQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5tbS9jaGFyLW1lbS5jPTUwMz1zdGF0aWMgaW50IG1tYXBfemVyb19wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxubW0vY2hhci1tZW0uYy01MDQte1xcbm1tL2NoYXItbWVtLmM6NTA1OiNpZm5kZWYgQ09ORklHX01NVVxcbm1tL2NoYXItbWVtLmMtNTA2LVxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxubW0vY2hhci1tZW0uYy01MTQtXFxubW0vY2hhci1tZW0uYzo1MTU6I2lmbmRlZiBDT05GSUdfTU1VXFxubW0vY2hhci1tZW0uYy01MTYtc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VubWFwcGVkX2FyZWFfemVybyhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbm1tL2NoYXItbWVtLmM9NTIzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9jaGFyLW1lbS5jLTU0Mi1cXHQgKi9cXG5tbS9jaGFyLW1lbS5jOjU0MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vY2hhci1tZW0uYy01NDQtXFx0cmV0dXJuIHRocF9nZXRfdW5tYXBwZWRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyk7XFxuLS1cXG5tbS9jaGFyLW1lbS5jLTU0OC19XFxubW0vY2hhci1tZW0uYzo1NDk6I2VuZGlmIC8qIENPTkZJR19NTVUgKi9cXG5tbS9jaGFyLW1lbS5jLTU1MC1cXG4tLVxcbm1tL2NoYXItbWVtLmM9NjMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fbWF5YmVfdW51c2VkIG1lbV9mb3BzID0ge1xcbi0tXFxubW0vY2hhci1tZW0uYy02MzctXFx0Lm9wZW5cXHRcXHQ9IG9wZW5fbWVtLFxcbm1tL2NoYXItbWVtLmM6NjM4OiNpZm5kZWYgQ09ORklHX01NVVxcbm1tL2NoYXItbWVtLmMtNjM5LVxcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF91bm1hcHBlZF9hcmVhX21lbSxcXG4tLVxcbm1tL2NoYXItbWVtLmM9NjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG51bGxfZm9wcyA9IHtcXG4tLVxcbm1tL2NoYXItbWVtLmMtNjU0LVxcbm1tL2NoYXItbWVtLmM6NjU1OiNpZmRlZiBDT05GSUdfREVWUE9SVFxcbm1tL2NoYXItbWVtLmMtNjU2LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZm9wcyA9IHtcXG4tLVxcbm1tL2NoYXItbWVtLmM9NjY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcXG4tLVxcbm1tL2NoYXItbWVtLmMtNjczLVxcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF91bm1hcHBlZF9hcmVhX3plcm8sXFxubW0vY2hhci1tZW0uYzo2NzQ6I2lmbmRlZiBDT05GSUdfTU1VXFxubW0vY2hhci1tZW0uYy02NzUtXFx0Lm1tYXBfY2FwYWJpbGl0aWVzID0gemVyb19tbWFwX2NhcGFiaWxpdGllcyxcXG4tLVxcbm1tL2NoYXItbWVtLmM9Njg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHtcXG4tLVxcbm1tL2NoYXItbWVtLmMtNjkxLX0gZGV2bGlzdFtdID0ge1xcbm1tL2NoYXItbWVtLmM6NjkyOiNpZmRlZiBDT05GSUdfREVWTUVNXFxubW0vY2hhci1tZW0uYy02OTMtXFx0W0RFVk1FTV9NSU5PUl0gPSB7IFxcXCJtZW1cXFwiLCBcXHUwMDI2bWVtX2ZvcHMsIDAsIDAgfSxcXG4tLVxcbm1tL2NoYXItbWVtLmMtNjk1LVxcdFszXSA9IHsgXFxcIm51bGxcXFwiLCBcXHUwMDI2bnVsbF9mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcXG5tbS9jaGFyLW1lbS5jOjY5NjojaWZkZWYgQ09ORklHX0RFVlBPUlRcXG5tbS9jaGFyLW1lbS5jLTY5Ny1cXHRbNF0gPSB7IFxcXCJwb3J0XFxcIiwgXFx1MDAyNnBvcnRfZm9wcywgMCwgMCB9LFxcbi0tXFxubW0vY2hhci1tZW0uYy03MDItXFx0WzldID0geyBcXFwidXJhbmRvbVxcXCIsIFxcdTAwMjZ1cmFuZG9tX2ZvcHMsIEZNT0RFX05PV0FJVCwgMDY2NiB9LFxcbm1tL2NoYXItbWVtLmM6NzAzOiNpZmRlZiBDT05GSUdfUFJJTlRLXFxubW0vY2hhci1tZW0uYy03MDQtXFx0WzExXSA9IHsgXFxcImttc2dcXFwiLCBcXHUwMDI2a21zZ19mb3BzLCAwLCAwNjQ0IH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI3OjA2LjYyMTEzNjA4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjYyMjIwMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIC9kZXYvemVybyBQcml2YXRlIE1hcHBpbmcgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciB0aGUgL2Rldi96ZXJvIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIHByaXZhdGUgbWFwcGluZyBpbXBsZW1lbnRhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBgL2Rldi96ZXJvYCBpcyBtaW5vciA1LCB3aGljaCBkb2Vzbid0IHNlZW0gdG8gbmVlZCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIOKAkyBzdGFuZGFyZCBgQ09ORklHX01NVWAgaXMgYWxsIHRoYXQncyByZXF1aXJlZC5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aG9zZSBGb2N1c1N5bWJvbHMgcnVsZXMuIEkgbmVlZCB0byBhdm9pZCB0aG9zZSB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHM7IHRoaW5ncyB0aGF0IGdldCBjYWxsZWQgYnkgKmV2ZXJ5dGhpbmcqIGFyZSBhIGZ1enppbmcgZGlzdHJhY3Rpb24uIEluc3RlYWQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgKnNwZWNpZmljKiBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBhIGJpdCB0cmlja2llciwgYnV0IHRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZWlyIG5vbi1zdGF0aWMgY2FsbGVycy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgSSd2ZSBpZGVudGlmaWVkIGEgZmV3IGtleSBmdW5jdGlvbnMgdGhhdCBzZWVtIHByb21pc2luZzogYGZpbGVfaXNfZGV2X3plcm9gIChpbiBgbW0vY2hhci1tZW0uY2ApLCBgbW1hcF96ZXJvX3ByZXBhcmVgIChhbHNvIGluIGBtbS9jaGFyLW1lbS5jYCksIGBjYWxsX21tYXBfcHJlcGFyZWAgKGluIGBtbS92bWEuY2ApLCBgX19tbWFwX25ld192bWFgIChpbiBgbW0vdm1hLmNgKSwgYW5kIGBfX21tYXBfcmVnaW9uYCAoaW4gYG1tL3ZtYS5jYCkuXG5cbkxldCdzIGRyaWxsIGRvd246XG5cbiogICBgbW1hcF96ZXJvX3ByZXBhcmVgOiBZZXMsIHRoaXMgaXMgKmV4YWN0bHkqIHRoZSBtbWFwIHByZXBhcmF0aW9uIGZvciAvZGV2L3plcm8sIHNvIGl0IGlzIGEgZ29vZCBmb2N1cyBzeW1ib2wuXG4qICAgYGZpbGVfaXNfZGV2X3plcm9gOiBUaGlzIGZ1bmN0aW9uIGlzICpleHBsaWNpdGx5KiBjaGVja2luZyBpZiB0aGUgZmlsZSBpcyAvZGV2L3plcm8sIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIHBhdGggdGhhdCB3ZSBhcmUgcmV2aWV3aW5nLlxuKiAgIGBjYWxsX21tYXBfcHJlcGFyZWA6IFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHdoZXJlIHRoZSBgZmlsZV9pc19kZXZfemVybygpYCBjaGVjayBhbmQgdGhlIGBtYXBfc2V0X2Fub24oKWAgaXMgZXhlY3V0ZWQuIEl0IGlzIGFsc28gd2hlcmUgdGhlIGAhZGVzYy1cdTAwM2V2bV9vcHNgIGVycm9yIGNoZWNrIGlzIGFkZGVkLlxuXG5JIGluaXRpYWxseSBjb25zaWRlcmVkIGBfX21tYXBfbmV3X3ZtYWAgYW5kIGBfX21tYXBfcmVnaW9uYC4gQnV0IGBfX21tYXBfbmV3X3ZtYWAgaXMgYWx0ZXJlZCB0byB1c2UgYG1hcF9pc19hbm9uKG1hcClgLiBBbmQgd2hpbGUgSSdtIGEgYml0IGhlc2l0YW50IGFib3V0IGBfX21tYXBfcmVnaW9uYCwgdGhlIHByaW9yIGZ1bmN0aW9ucyBhcmUgcXVpdGUgc3BlY2lmaWMsIHNvIGxldCdzIHN0aWNrIHdpdGggdGhlbS5cblxuVGhlcmVmb3JlLCBmb3IgdGhlIGZ1enppbmcgZm9jdXMsIG15IHNob3J0bGlzdCBpcyBgW1wiZmlsZV9pc19kZXZfemVyb1wiLCBcIm1tYXBfemVyb19wcmVwYXJlXCIsIFwiY2FsbF9tbWFwX3ByZXBhcmVcIl1gLiBUaGVzZSBhcmUgYWxsIHZlcnkgc3BlY2lmaWMgdG8gdGhlIC9kZXYvemVybyBtbWFwIGNoYW5nZS5cblxuTm93LCBsZXQncyBxdWlja2x5IHRpY2sgb2ZmIHRoZSByZW1haW5pbmcgcmVxdWlyZW1lbnRzOlxuXG4xLiAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHkuIFRoZSBwYXRjaCAqZGlyZWN0bHkqIG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSBpbiBgbW0vdm1hLmNgIGFuZCBgbW0vY2hhci1tZW0uY2AuXG4yLiAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCAqbW92ZXMqIGhhbmRsaW5nIG9mIGAvZGV2L3plcm9gIGBNQVBfUFJJVkFURWAgbWFwcGluZ3MgaW50byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQgY29udmVydHMgdGhlc2UgcHJpdmF0ZSBtYXBwaW5ncyBpbnRvIHRydWUgYW5vbnltb3VzIG1hcHBpbmdzIGR1cmluZyBgbW1hcF9wcmVwYXJlYCwgc28gbG9naWMgaXMgYmVpbmcgc2hpZnRlZCBiZXR3ZWVuIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgbW0gbGF5ZXIuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyBpbiBgbW0vdm1hLmNgLCBgbW0vY2hhci1tZW0uY2AsIGFuZCBpbnRlcm5hbCBWTUEgbWFuYWdlbWVudC5cbjMuICBgRm9jdXNTeW1ib2xzYDogSSd2ZSBhbHJlYWR5IG5haWxlZCB0aGVzZSBkb3duIGFzIGBbXCJmaWxlX2lzX2Rldl96ZXJvXCIsIFwibW1hcF96ZXJvX3ByZXBhcmVcIiwgXCJjYWxsX21tYXBfcHJlcGFyZVwiXWAuXG40LiAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIG9yIGBbXCJNTVVcIl1gIOKAkyBgQ09ORklHX01NVWAgaXMgc3RhbmRhcmQsIHNvIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQuXG5cbkkndmUgZ2l2ZW4gdGhpcyBhIGZpbmFsIG9uY2Utb3ZlciwgYW5kIEknbSBjb25maWRlbnQgdGhhdCB0aGVzZSBhcmUgYWNjdXJhdGUsIHNvIEknbSByZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyMTUsIk91dHB1dFRva2VucyI6MTM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI3OjE0LjI4MzM1ODYzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNDIyMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNTVVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjYWxsX21tYXBfcHJlcGFyZVwiLFxuICAgIFwiZmlsZV9pc19kZXZfemVyb1wiLFxuICAgIFwibW1hcF96ZXJvX3ByZXBhcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhhbmRsaW5nIG9mIE1BUF9QUklWQVRFIC9kZXYvemVybyBtYXBwaW5ncyBzbyB0aGV5IGJlY29tZSB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3Mgd2l0aGluIGNvcmUgbW0gcmF0aGVyIHRoYW4gYmVpbmcgdHJlYXRlZCBhcyBzZW1pLWFub255bW91cyBmaWxlIG1hcHBpbmdzLiBJdCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gbW0vdm1hLmMsIG1tL2NoYXItbWVtLmMsIGFuZCBoZWFkZXIgaGVscGVycywgYWZmZWN0aW5nIFZNQSBtZXJnaW5nLCBwYWdlIG9mZnNldCBjYWxjdWxhdGlvbnMsIGFuZCBtbWFwIHByZXBhcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNhbGxfbW1hcF9wcmVwYXJlXCIsXG4gICAgXCJmaWxlX2lzX2Rldl96ZXJvXCIsXG4gICAgXCJtbWFwX3plcm9fcHJlcGFyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaGFuZGxpbmcgb2YgTUFQX1BSSVZBVEUgL2Rldi96ZXJvIG1hcHBpbmdzIHNvIHRoZXkgYmVjb21lIHRydWx5IGFub255bW91cyBtYXBwaW5ncyB3aXRoaW4gY29yZSBtbSByYXRoZXIgdGhhbiBiZWluZyB0cmVhdGVkIGFzIHNlbWktYW5vbnltb3VzIGZpbGUgbWFwcGluZ3MuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiBtbS92bWEuYywgbW0vY2hhci1tZW0uYywgYW5kIGhlYWRlciBoZWxwZXJzLCBhZmZlY3RpbmcgVk1BIG1lcmdpbmcsIHBhZ2Ugb2Zmc2V0IGNhbGN1bGF0aW9ucywgYW5kIG1tYXAgcHJlcGFyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI3OjE0LjM2Mzc5OTA4NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MTIwMjA5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNzoxNC4zNjQyODkyODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzUxMTUyNTUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgaGFuZGxpbmcgb2YgTUFQX1BSSVZBVEUgL2Rldi96ZXJvIG1hcHBpbmdzIHRvIG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMgVk1BcyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtb3ZpbmcgZHJpdmVycy9jaGFyL21lbS5jIHRvIG1tL2NoYXItbWVtLmMsIHVwZGF0aW5nIG1tYXBfcHJlcGFyZSBoYW5kbGluZywgYW5kIHJlbW92aW5nIHNwZWNpYWwtY2FzZSB3b3JrYXJvdW5kcyBmb3Igc2VtaS1hbm9ueW1vdXMgVk1BcykuXFxuXFxuS01TQU4gdnMuIEtBU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFsbCBzdHJ1Y3R1cmVzIChlLmcuIHN0cnVjdCB2bV9hcmVhX2Rlc2MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbi0gQW55IGJ1Z3Mgc3RlbW1pbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIChlLmcuIFZNQSBtZXJnaW5nIGRpc2NyZXBhbmNpZXMsIHBhZ2Ugb2Zmc2V0IGVycm9ycywgb3IgcmVmZXJlbmNlL2xpZmV0aW1lIG1hbmFnZW1lbnQgaXNzdWVzKSBhcmUgbWVtb3J5IG1hbmFnZW1lbnQvbG9naWMgaXNzdWVzIHRoYXQgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBleGlzdGluZyBrZXJuZWwgZGVidWcgY2hlY2tzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODYzOTY1ODZlOThkNTgwODg4YzgxYWVmN2YyZDZiMDM2NjlhNDU1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTM6MjY6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAzYTE5ZGE3NGQwMGM5Li5hMGE1ZGI0NDRjNjYzIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTcyNzYsNyArMTcyNzYsNyBAQCBGOlx0RG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tbWVtb3J5LXRpZXJzXG4gRjpcdERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLW51bWFcbiBGOlx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9cbiBGOlx0RG9jdW1lbnRhdGlvbi9tbS9cbi1GOlx0ZHJpdmVycy9jaGFyL21lbS5jXG4rRjpcdG1tL2NoYXItbWVtLmNcbiBGOlx0aW5jbHVkZS9saW51eC9jbWEuaFxuIEY6XHRpbmNsdWRlL2xpbnV4L2RtYXBvb2wuaFxuIEY6XHRpbmNsdWRlL2xpbnV4L2lvcmVtYXAuaFxuQEAgLTE3NDgxLDcgKzE3NDgxLDcgQEAgTDpcdGxpbnV4LW1tQGt2YWNrLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gVzpcdGh0dHA6Ly93d3cubGludXgtbW0ub3JnXG4gVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxuLUY6XHRkcml2ZXJzL2NoYXIvbWVtLmNcbitGOlx0bW0vY2hhci1tZW0uY1xuIEY6XHRpbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWFwLmhcbiBGOlx0ZnMvcHJvYy90YXNrX21tdS5jXG4gRjpcdGZzL3Byb2MvdGFza19ub21tdS5jXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlXG5pbmRleCBhNDZkN2JmN2M0YzgyLi5iYjNiZjY2OTM3YjM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGVcbkBAIC0zLDcgKzMsNyBAQFxuICMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLlxuICNcbiBcbi1vYmoteVx0XHRcdFx0Kz0gbWVtLm8gcmFuZG9tLm9cbitvYmoteVx0XHRcdFx0Kz0gcmFuZG9tLm9cbiBvYmotJChDT05GSUdfVFRZX1BSSU5USylcdCs9IHR0eXByaW50ay5vXG4gb2JqLXlcdFx0XHRcdCs9IG1pc2Mub1xuIG9iai0kKENPTkZJR19URVNUX01JU0NfTUlOT1IpXHQrPSBtaXNjX21pbm9yX2t1bml0Lm9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IGRkMDljNDM4ZmEyM2UuLjg2NGQ1YWMzNzA0ZGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTE1NTEsMTEgKzE1NTEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF9hbm9ueW1vdXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHR2bWEtXHUwMDNldm1fb3BzID0gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9kZXNjX3NldF9hbm9ueW1vdXMoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbi17XG4tXHRkZXNjLVx1MDAzZXZtX29wcyA9IE5VTEw7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYW5vbnltb3VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHJldHVybiAhdm1hLVx1MDAzZXZtX29wcztcbkBAIC00NDA4LDkgKzQ0MDMsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX3BhZ2VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqIElmIEB2bWEgaXMgYSBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoaXMgcmV0dXJucyB0aGVcbiAgKiBwYWdlIG9mZnNldCB3aXRoaW4gdGhlIGZpbGUuXG4gICpcbi0gKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSwgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHNhdGlzZmllc1xuLSAqIHZtYV9pc19hbm9ueW1vdXMoKSBidXQgaGFzIGZpbGUtYmFja2VkIHBhZ2Ugb2Zmc2V0LCBhbmQgTUFQX1BSSVZBVEUtcGZubWFwXG4tICogcmVnaW9ucyBoYXZlIHRoZWlyIHBhZ2Ugb2Zmc2V0IHNldCB0byB0aGUgZmlyc3QgUEZOIGluIHRoZSByYW5nZS5cbisgKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSBhbmQgQ29XIE1BUF9QUklWQVRFLXBmbm1hcCByZWdpb25zXG4rICogaGF2ZSB0aGVpciBwYWdlIG9mZnNldCBzZXQgdG8gdGhlIGZpcnN0IFBGTiBpbiB0aGUgcmFuZ2UuXG4gICpcbiAgKiBSZXR1cm5zOiBUaGUgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWEuXG4gICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuaW5kZXggMGFkZmE2NjA1NjUzZC4uOTM5ZjNhNWU5NzNmNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTExMjgsOCArMTEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IF9fbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKCF2bWFfaXNfY293X21hcHBpbmcodm1hKSk7XG4tXHQvKiBBY2NvdW50IGZvciBNQVBfUFJJVkFURS0vZGV2L3plcm8gd2hpY2ggaXMgb25seSBzZW1pLWFub255bW91cy4gKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgXHUwMDI2XHUwMDI2ICF2bWEtXHUwMDNldm1fZmlsZSlcbitcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4gXHRcdFZNX1dBUk5fT05fT05DRShwZ29mZiAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTtcbiBcbiBcdHJldHVybiBwZ29mZjtcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXG5pbmRleCBlNzI0NWNiODhjNjY1Li4yYTNlYzUzZDYyZWVmIDEwMDY0NFxuLS0tIGEvbW0vTWFrZWZpbGVcbisrKyBiL21tL01ha2VmaWxlXG5AQCAtNTUsNyArNTUsOCBAQCBvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbiBcdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxuIFx0XHRcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXG4gXHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG4tXHRcdFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vICQobW11LXkpXG4rXHRcdFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vIGNoYXItbWVtLm8gXFxcbitcdFx0XHQgICAkKG1tdS15KVxuIFxuICMgR2l2ZSAncGFnZV9hbGxvYycgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZVxuIHBhZ2UtYWxsb2MteSA6PSBwYWdlX2FsbG9jLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9tbS9jaGFyLW1lbS5jXG5zaW1pbGFyaXR5IGluZGV4IDk3JVxucmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL21lbS5jXG5yZW5hbWUgdG8gbW0vY2hhci1tZW0uY1xuaW5kZXggNjMyNTNkMWRlNWQ3MC4uYzBiNWZiMDE5MjIzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9tZW0uY1xuKysrIGIvbW0vY2hhci1tZW0uY1xuQEAgLTEsNiArMSw2IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKlxuLSAqICBsaW51eC9kcml2ZXJzL2NoYXIvbWVtLmNcbisgKiAgbW0vY2hhci1tZW0uY1xuICAqXG4gICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHNcbiAgKlxuQEAgLTMxLDYgKzMxLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbitcbiAjZGVmaW5lIERFVk1FTV9NSU5PUlx0MVxuICNkZWZpbmUgREVWUE9SVF9NSU5PUlx0NFxuIFxuQEAgLTUwNiwxMSArNTA4LDcgQEAgc3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuIFx0aWYgKHZtYV9kZXNjX3Rlc3QoZGVzYywgVk1BX1NIQVJFRF9CSVQpKVxuIFx0XHRyZXR1cm4gc2htZW1femVyb19zZXR1cF9kZXNjKGRlc2MpO1xuIFxuLVx0Lypcbi1cdCAqIFRoaXMgaXMgYSBoaWdobHkgdW5pcXVlIHNpdHVhdGlvbiB3aGVyZSB3ZSBtYXJrIGEgTUFQX1BSSVZBVEUgbWFwcGluZ1xuLVx0ICogb2YgL2Rldi96ZXJvIGFub255bW91cywgZGVzcGl0ZSBpdCBub3QgYmVpbmcuXG4tXHQgKi9cbi1cdHZtYV9kZXNjX3NldF9hbm9ueW1vdXMoZGVzYyk7XG4rXHQvKiBNQVBfUFJJVkFURSBzZW1hbnRpY3MgYXJlIHRha2VuIGNhcmUgb2YgZm9yIHVzIGJ5IGNvcmUgbW0uICovXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNzA3LDYgKzcwNSwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XG4gI2VuZGlmXG4gfTtcbiBcbisvKipcbisgKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvXG4rICogZHJpdmVyP1xuKyAqIEBmaWxlOiBGaWxlIHRvIHRlc3QuXG4rICogUmV0dXJuczogdHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlLlxuKyAqL1xuK2Jvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRyZXR1cm4gZmlsZSBcdTAwMjZcdTAwMjYgZmlsZS1cdTAwM2VmX29wID09IFx1MDAyNnplcm9fZm9wcztcbit9XG4rXG4gc3RhdGljIGludCBtZW1vcnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiB7XG4gXHRpbnQgbWlub3I7XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjI3ODI5MjRhMjc3YzkgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMjM3LDE1ICsyMzcsMTggQEAgc3RhdGljIGlubGluZSBpbnQgbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRpbnQgZXJyID0gdmZzX21tYXAoZmlsZSwgdm1hKTtcbiBcbi1cdGlmIChsaWtlbHkoIWVycikpXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0Lypcbi1cdCAqIE9LLCB3ZSB0cmllZCB0byBjYWxsIHRoZSBmaWxlIGhvb2sgZm9yIG1tYXAoKSwgYnV0IGFuIGVycm9yXG4tXHQgKiBhcm9zZS4gVGhlIG1hcHBpbmcgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0IG5vdCBpbnZva2Vcbi1cdCAqIGFueSBmdXJ0aGVyIGhvb2tzIG9uIGl0LlxuK1x0ICogRWl0aGVyIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpIGFuZCBhbiBlcnJvciBhcm9zZVxuK1x0ICogb3IgYSBkcml2ZXIgc2V0IHZtYS1cdTAwM2V2bV9vcHMgPSBOVUxMIGludGVuZGluZyB0aGVyZSB0byBiZSBubyBWTUFcbitcdCAqIG9wZXJhdGlvbnMuXG4rXHQgKlxuK1x0ICogSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBWTUEgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0bid0XG4rXHQgKiBpbnZva2UgYW55IGZ1cnRoZXIgaG9va3Mgb24gaXQsIGluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgaG9vayBhY3R1YWxseVxuK1x0ICogd2FudGVkIG5vIGZ1cnRoZXIgaG9va3MgdG8gYmUgaW52b2tlZCwgc28gZml4IGJvdGggYnkgc2V0dGluZyBkdW1teVxuK1x0ICogVk1BIG9wcy5cbiBcdCAqL1xuLVx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtYV9kdW1teV92bV9vcHM7XG4rXHRpZiAodW5saWtlbHkoZXJyIHx8ICF2bWEtXHUwMDNldm1fb3BzKSlcbitcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtYV9kdW1teV92bV9vcHM7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0xNjU0LDQgKzE2NTcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NwaW5fdHJ5bG9jayh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuKy8qIGNoYXItbWVtLmMgKi9cbitib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xuK1xuICNlbmRpZlx0LyogX19NTV9JTlRFUk5BTF9IICovXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IDg5N2ZhMmI2MTM0NmYuLmM2MDc2M2VmNTYxY2YgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtMjc4Niw3ICsyNzg2LDcgQEAgdW5zaWduZWQgbG9uZyBzaG1lbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRzYiA9IGZpbGVfaW5vZGUoZmlsZSktXHUwMDNlaV9zYjtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIENhbGxlZCBkaXJlY3RseSBmcm9tIG1tL21tYXAuYywgb3IgZHJpdmVycy9jaGFyL21lbS5jXG4rXHRcdFx0ICogQ2FsbGVkIGRpcmVjdGx5IGZyb20gbW0vbW1hcC5jLCBvciBtbS9jaGFyLW1lbS5jXG4gXHRcdFx0ICogZm9yIFwiL2Rldi96ZXJvXCIsIHRvIGNyZWF0ZSBhIHNoYXJlZCBhbm9ueW1vdXMgb2JqZWN0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChJU19FUlIoc2htX21udCkpXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xuaW5kZXggMzVlN2E2NDg1NWZhZC4uNmZkY2U0ODUyY2U2MSAxMDA2NDRcbi0tLSBhL21tL3ZtYS5jXG4rKysgYi9tbS92bWEuY1xuQEAgLTI2MjEsNiArMjYyMSwyMyBAQCBzdGF0aWMgaW50IF9fbW1hcF9uZXdfZmlsZV92bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBtYXBfc2V0X2Fub24oc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcbit7XG4rXHRtYXAtXHUwMDNlZmlsZSA9IE5VTEw7XG4rXHRtYXAtXHUwMDNldm1fb3BzID0gTlVMTDtcbitcdG1hcC1cdTAwM2VwZ29mZiA9IG1hcC1cdTAwM2VhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK31cbitcbitzdGF0aWMgYm9vbCBtYXBfaXNfcHJpdmF0ZShjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuK3tcbitcdHJldHVybiAhdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bWFwLVx1MDAzZXZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuK31cbitcbitzdGF0aWMgYm9vbCBtYXBfaXNfYW5vbihjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuK3tcbitcdHJldHVybiBtYXBfaXNfcHJpdmF0ZShtYXApIFx1MDAyNlx1MDAyNiAhbWFwLVx1MDAzZWZpbGU7XG4rfVxuK1xuIC8qXG4gICogX19tbWFwX25ld192bWEoKSAtIEFsbG9jYXRlIGEgbmV3IFZNQSBmb3IgdGhlIHJlZ2lvbiwgYXMgbWVyZ2luZyB3YXMgbm90XG4gICogcG9zc2libGUuXG5AQCAtMjYzNCw4ICsyNjUxLDcgQEAgc3RhdGljIGludCBfX21tYXBfbmV3X2ZpbGVfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4gc3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuIFx0c3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24pXG4ge1xuLVx0Y29uc3QgYm9vbCBpc19hbm9uID0gIW1hcC1cdTAwM2VmaWxlIFx1MDAyNlx1MDAyNlxuLVx0XHQhdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bWFwLVx1MDAzZXZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuK1x0Y29uc3QgYm9vbCBpc19hbm9uID0gbWFwX2lzX2Fub24obWFwKTtcbiBcdHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSA9IG1hcC1cdTAwM2V2bWk7XG4gXHRpbnQgZXJyb3IgPSAwO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5AQCAtMjc3Nyw2ICsyNzkzLDEwIEBAIHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHQvKiBJdCdzIGludmFsaWQgZm9yIG1tYXBfcHJlcHJhcmUgaG9va3MgdG8gY2xlYXIgdm1fb3BzLiAqL1xuK1x0aWYgKCFkZXNjLVx1MDAzZXZtX29wcylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRlcnIgPSBjYWxsX2FjdGlvbl9wcmVwYXJlKG1hcCwgZGVzYyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTI3OTMsMTYgKzI4MTMsMjEgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuIFx0bWFwLVx1MDAzZXZtX29wcyA9IGRlc2MtXHUwMDNldm1fb3BzO1xuIFx0bWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGRlc2MtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFxuK1x0LypcbitcdCAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZ1xuK1x0ICogYW5vbnltb3VzIG1hcHBpbmdzLiBSYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVzZSBtYXBwaW5ncyB0byBiZSBvZGRcbitcdCAqIG91dGxpZXJzLCBzaW1wbHkgbWFrZSB0aGVtIHRydWx5IGFub255bW91cy5cbitcdCAqL1xuK1x0aWYgKG1hcF9pc19wcml2YXRlKG1hcCkgXHUwMDI2XHUwMDI2IGZpbGVfaXNfZGV2X3plcm8obWFwLVx1MDAzZWZpbGUpKVxuK1x0XHRtYXBfc2V0X2Fub24obWFwKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4ge1xuLVx0aWYgKG1hcC1cdTAwM2V2bV9vcHMpXG4tXHRcdHZtYS1cdTAwM2V2bV9vcHMgPSBtYXAtXHUwMDNldm1fb3BzO1xuLVx0ZWxzZVx0LyogT25seSAvZGV2L3plcm8gc2hvdWxkIGRvIHRoaXMuICovXG4tXHRcdHZtYV9zZXRfYW5vbnltb3VzKHZtYSk7XG4rXHR2bWEtXHUwMDNldm1fb3BzID0gbWFwLVx1MDAzZXZtX29wcztcbiBcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBtYXAtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuIH1cbiBcbkBAIC0yODgyLDcgKzI5MDcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGFsbG9jYXRlZF9uZXcgPSB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlKVxuK1x0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFx1MDAyNlx1MDAyNiAhbWFwX2lzX2Fub24oXHUwMDI2bWFwKSlcbiBcdFx0c2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHZtYSwgXHUwMDI2bWFwKTtcbiBcbiBcdF9fbW1hcF9jb21wbGV0ZShcdTAwMjZtYXAsIHZtYSk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmggYi9tbS92bWEuaFxuaW5kZXggMDI0ZmFiZTYzNTYwYS4uZTk3YmQyZGZhNzg2ZCAxMDA2NDRcbi0tLSBhL21tL3ZtYS5oXG4rKysgYi9tbS92bWEuaFxuQEAgLTI2Nyw5ICsyNjcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X3NhbmVfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgcGdvZmYpXG4gXHQgKi9cbiBcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKVxuIFx0XHRyZXR1cm47XG4tXHQvKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gaXMgYW5vbiwgbm9uLU5VTEwgdm1fZmlsZSwgYnV0IGhhcyBmaWxlIHBnb2ZmLiAqL1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuLVx0XHRyZXR1cm47XG4gXHQvKiBJZiBmYXVsdGVkIGluLCBjb3VsZCBoYXZlIGJlZW4gcmVtYXBwZWQuICovXG4gXHRpZiAodm1hLVx1MDAzZWFub25fdm1hKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmNcbmluZGV4IDUyYjg3MjdiNjYyOGUuLjdkZDI5MzM0MTdjMWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG5AQCAtMTM2Miw2ICsxMzYyLDEwMSBAQCBURVNUX0YobWVyZ2UsIGFub25fYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKVxuIFx0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICsgNSAqIHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuK1RFU1RfRihtZXJnZSwgbWVyZ2VfbWFwX3ByaXZhdGVfZGV2X3plcm9fdW5mYXVsdGVkKVxuK3tcbitcdHN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gXHUwMDI2c2VsZi1cdTAwM2Vwcm9jbWFwO1xuK1x0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9zaXplO1xuK1x0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVx1MDAzZWNhcnZlb3V0O1xuK1x0Y2hhciAqcHRyLCAqcHRyMjtcbitcdGludCBmZF96ZXJvO1xuK1xuK1x0aWYgKGFjY2VzcyhcIi9kZXYvemVyb1wiLCBGX09LKSlcbitcdFx0U0tJUChyZXR1cm4sIFwiTm8gL2Rldi96ZXJvLlwiKTtcbitcdGZkX3plcm8gPSBvcGVuKFwiL2Rldi96ZXJvXCIsIE9fUkRXUik7XG4rXHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xuK1xuK1x0LypcbitcdCAqIE1hcCB0d28gTUFQX1BSSVZBVEUtL2Rldi96ZXJvIFZNQXMgbmV4dCB0byBvbmUgYW5vdGhlciB3aXRoIG9mZnNldCAwXG4rXHQgKiBlYWNoLlxuK1x0ICpcbitcdCAqIFdpdGggdGhlc2UgYmVpbmcgbWFkZSB0cnVseSBhbm9ueW1vdXMgdXBvbiBtYXBwaW5nLCB0aGV5IHdpbGxcbitcdCAqIG1lcmdlLiBJZiB0aGV5IHdlcmUgZmlsZS1iYWNrZWQgVk1BcyB0aGUgcGFnZSBvZmZzZXRzIHdvdWxkIHByZXZlbnRcbitcdCAqIHRoZSBtZXJnZTpcbitcdCAqXG4rXHQgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18XG4rXHQgKiB8IHB0ciB8fCBwdHIyIHwgLVx1MDAzZSB8ICAgICBwdHIgICAgIHxcbitcdCAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXxcbitcdCAqL1xuK1x0cHRyID0gbW1hcChjYXJ2ZW91dCwgNSAqIHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApO1xuK1x0cHRyMiA9IG1tYXAoXHUwMDI2Y2FydmVvdXRbNSAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUsXG4rXHRcdCAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcbitcdGNsb3NlKGZkX3plcm8pO1xuK1x0QVNTRVJUX05FKHB0ciwgTUFQX0ZBSUxFRCk7XG4rXHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XG4rXG4rXHQvKiBBc3NlcnQgdGhhdCB0aGV5IG1lcmdlZC4gKi9cbitcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XG4rXHRBU1NFUlRfRVEocHJvY21hcC1cdTAwM2VxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7XG4rXHRBU1NFUlRfRVEocHJvY21hcC1cdTAwM2VxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgKyAxMCAqIHBhZ2Vfc2l6ZSk7XG4rfVxuK1xuK1RFU1RfRihtZXJnZSwgbWVyZ2VfbWFwX3ByaXZhdGVfZGV2X3plcm9fZmF1bHRlZF91bmZhdWx0ZWQpXG4re1xuK1x0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcdTAwMjZzZWxmLVx1MDAzZXByb2NtYXA7XG4rXHR1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4rXHRjaGFyICpjYXJ2ZW91dCA9IHNlbGYtXHUwMDNlY2FydmVvdXQ7XG4rXHRjaGFyICpwdHIsICpwdHIyO1xuK1x0aW50IGZkX3plcm87XG4rXG4rXHRpZiAoYWNjZXNzKFwiL2Rldi96ZXJvXCIsIEZfT0spKVxuK1x0XHRTS0lQKHJldHVybiwgXCJObyAvZGV2L3plcm8uXCIpO1xuK1x0ZmRfemVybyA9IG9wZW4oXCIvZGV2L3plcm9cIiwgT19SRFdSKTtcbitcdEFTU0VSVF9ORShmZF96ZXJvLCAtMSk7XG4rXG4rXHQvKlxuK1x0ICogTWFwIGEgTUFQX1BSSVZBVEUgbWFwcGluZyBvZiAvZGV2L3plcm8gd2l0aCBwYWdlIG9mZnNldCAwLCB0aGVuIGZhdWx0XG4rXHQgKiBpdCBpbjpcbitcdCAqXG4rXHQgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbitcdCAqIHwgICAgICAgICAgIGZhdWx0ZWQgICAgICAgICAgICAgfFxuK1x0ICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4rXHQgKi9cbitcdHB0ciA9IG1tYXAoY2FydmVvdXQsIDE1ICogcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHQgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7XG4rXHRBU1NFUlRfTkUocHRyLCBNQVBfRkFJTEVEKTtcbitcdG1lbXNldChwdHIsICd4JywgMTUgKiBwYWdlX3NpemUpO1xuK1xuK1x0LypcbitcdCAqIFVubWFwIHRoZSBtaWRkbGU6XG4rXHQgKlxuK1x0ICogfC0tLS0tLS0tLXwgICAgICAgICAgIHwtLS0tLS0tLS18XG4rXHQgKiB8IGZhdWx0ZWQgfCAgICAgICAgICAgfCBmYXVsdGVkIHxcbitcdCAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuK1x0ICovXG4rXHRBU1NFUlRfRVEobXVubWFwKFx1MDAyNnB0cls1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSksIDApO1xuK1xuK1x0LypcbitcdCAqIE1hcCBpbiBhIG5ldyB1bmZhdWx0ZWQgbWFwcGluZyBpbiB0aGUgbWlkZGxlIHdpdGggcGFnZSBvZmZzZXQgMCAtXG4rXHQgKiB0aGlzIHNob3VsZCBtZXJnZSBhbmQgd291bGQgbm90IGlmIGl0IHdlcmUgdHJlYXRlZCBhcyBhIGZpbGUgcmF0aGVyXG4rXHQgKiB0aGFuIHB1cmUgYW5vbjpcbitcdCAqXG4rXHQgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXxcbitcdCAqIHwgZmF1bHRlZCB8IHVuZmF1bHRlZCB8IGZhdWx0ZWQgfFxuK1x0ICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18XG4rXHQgKi9cbitcdHB0cjIgPSBtbWFwKFx1MDAyNmNhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLFxuK1x0XHQgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsXG4rXHRcdCAgICBmZF96ZXJvLCAwKTtcbitcdGNsb3NlKGZkX3plcm8pO1xuK1x0QVNTRVJUX05FKHB0cjIsIE1BUF9GQUlMRUQpO1xuK1xuK1x0LyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovXG4rXHRBU1NFUlRfVFJVRShmaW5kX3ZtYV9wcm9jbWFwKHByb2NtYXAsIHB0cikpO1xuK1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpO1xuK1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICsgMTUgKiBwYWdlX3NpemUpO1xuK31cbitcbiBURVNUX0YobWVyZ2Vfd2l0aF9mb3JrLCBtcmVtYXBfZmF1bHRlZF90b191bmZhdWx0ZWRfcHJldilcbiB7XG4gXHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFx1MDAyNnNlbGYtXHUwMDNlcHJvY21hcDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcbmluZGV4IDQyMDljNjQyODNkNmYuLmJiY2E5ZjllMjc0MzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDEuY1xuQEAgLTUxLDcgKzUxLDcgQEAgaW50IG1haW4odm9pZClcbiBcdGludCBmZDtcbiBcdHVuc2lnbmVkIGxvbmcgYSwgYjtcbiBcbi1cdGZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JET05MWSk7XG4rXHRmZCA9IG9wZW4oXCIvcHJvYy9zZWxmL2V4ZVwiLCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuY1xuaW5kZXggZTZhYTAwYTE4M2JjZC4uNTc4NmNkZmZiYmY2MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMi5jXG5AQCAtNTcsNyArNTcsNyBAQCBpbnQgbWFpbih2b2lkKVxuIFx0aW50IGZkO1xuIFx0dW5zaWduZWQgbG9uZyBhLCBiO1xuIFxuLVx0ZmQgPSBvcGVuKFwiL2Rldi96ZXJvXCIsIE9fUkRPTkxZKTtcbitcdGZkID0gb3BlbihcIi9wcm9jL3NlbGYvZXhlXCIsIE9fUkRPTkxZKTtcbiBcdGlmIChmZCA9PSAtMSlcbiBcdFx0cmV0dXJuIDE7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbmluZGV4IDRjNTg0ODdiNzY0ZTkuLjU2NjkwODFkOTFiOWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5AQCAtMTYzOCw5ICsxNjM4LDE1IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IF9fbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKCF2bWFfaXNfY293X21hcHBpbmcodm1hKSk7XG4tXHQvKiBBY2NvdW50IGZvciBNQVBfUFJJVkFURS0vZGV2L3plcm8gd2hpY2ggaXMgb25seSBzZW1pLWFub255bW91cy4gKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgXHUwMDI2XHUwMDI2ICF2bWEtXHUwMDNldm1fZmlsZSlcbitcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4gXHRcdFZNX1dBUk5fT05fT05DRShwZ29mZiAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTtcbiBcbiBcdHJldHVybiBwZ29mZjtcbiB9XG4rXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzO1xuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHJldHVybiBmaWxlIFx1MDAyNlx1MDAyNiBmaWxlLVx1MDAzZWZfb3AgPT0gXHUwMDI2emVyb19mb3BzO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXG5pbmRleCA0YTM5YzlkNTA0ODk2Li44YzQ4MjY0OTlmNDA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXG5AQCAtMTIsNiArMTIsMTUgQEAgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtYV9kdW1teV92bV9vcHM7XG4gc3RydWN0IGFub25fdm1hIGR1bW15X2Fub25fdm1hO1xuIHN0cnVjdCB0YXNrX3N0cnVjdCBfX2N1cnJlbnQ7XG4gXG4rc3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcbitcdC5tbWFwX3ByZXBhcmUgPSBtbWFwX3plcm9fcHJlcGFyZSxcbit9O1xuK1xuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYWxsb2Nfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0cGdvZmZfdCBwZ29mZiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xuaW5kZXggYzg1YmMwMDBkMWNiNy4uZmE3M2ZhZmYyMjYyNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG5AQCAtNDUsNyArNDUsNDQgQEAgc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9iYXNpYyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBib29sIHRlc3RfcHVyZV9hbm9uX2Rldl96ZXJvKHZvaWQpXG4re1xuK1x0Y29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCxcbitcdFx0XHRWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQpO1xuK1x0c3RydWN0IGZpbGUgZmlsZSA9IHtcbitcdFx0LmZfb3AgPSBcdTAwMjZ6ZXJvX2ZvcHMsXG4rXHR9O1xuK1x0c3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4rXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4rXHRWTUFfSVRFUkFUT1Iodm1pLCBcdTAwMjZtbSwgMCk7XG4rXG4rXHRjdXJyZW50LVx1MDAzZW1tID0gXHUwMDI2bW07XG4rXG4rXHQvKlxuK1x0ICogTWFwIGEgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIG1hcHBpbmcgYXQgYWRkcmVzcyAweDMwMDAwMCB3aXRoIGEgcGFnZVxuK1x0ICogb2Zmc2V0IG9mIDB4MTAsIHdoaWNoIHdlIGV4cGVjdCB0byBiZSByZXNldCB0byB0aGUgYW5vbnltb3VzIHBhZ2VcbitcdCAqIG9mZnNldC5cbitcdCAqL1xuK1x0YWRkciA9IF9fbW1hcF9yZWdpb24oXHUwMDI2ZmlsZSwgMHgzMDAwMDAsIDB4MzAwMCwgdm1hX2ZsYWdzLCAweDEwLCBOVUxMKTtcbitcdEFTU0VSVF9FUShhZGRyLCAweDMwMDAwMCk7XG4rXG4rXHQvKiBBc3NlcnQgdGhhdCBpdCB0cnVseSBpcyBhbiBhbm9ueW1vdXMgbWFwcGluZy4gKi9cbitcdHZtYSA9IHZtYV9sb29rdXAoXHUwMDI2bW0sIGFkZHIpO1xuK1x0QVNTRVJUX05FKHZtYSwgTlVMTCk7XG4rXHRBU1NFUlRfVFJVRSh2bWFfaXNfYW5vbnltb3VzKHZtYSkpO1xuK1x0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9maWxlLCBOVUxMKTtcbitcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhLCBOVUxMKTtcbitcdC8qIEV4cGVjdCBhbm9ueW1vdXMgcGFnZSBvZmZzZXRzLiAqL1xuK1x0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9wZ29mZiwgMHgzMDApO1xuK1x0QVNTRVJUX0VRKHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSksIDB4MzAwKTtcbitcbitcdGNsZWFudXBfbW0oXHUwMDI2bW0sIFx1MDAyNnZtaSk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnVuX21tYXBfdGVzdHMoaW50ICpudW1fdGVzdHMsIGludCAqbnVtX2ZhaWwpXG4ge1xuIFx0VEVTVChtbWFwX3JlZ2lvbl9iYXNpYyk7XG4rXHRURVNUKHB1cmVfYW5vbl9kZXZfemVybyk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6Mjc6MTQuMzY0MjkwMjY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyODkzNTAzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCBhIHJlZmFjdG9yLCBtb3ZpbmcgYGRyaXZlcnMvY2hhci9tZW0uY2AgdG8gYG1tL2NoYXItbWVtLmNgLiBUaGF0J3Mgbm90IHRoZSBjcml0aWNhbCBwYXJ0IGhlcmUuIFRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgL2Rldi96ZXJvYCBNQVBfUFJJVkFURSBtYXBwaW5ncyBhcmUgaGFuZGxlZC5cblxuUHJldmlvdXNseSwgdGhlcmUgd2VyZSBzb21lIHBvdGVudGlhbGx5IFwic2VtaS1hbm9ueW1vdXNcIiBzdGF0ZXMuIE5vdywgaXQgc2VlbXMgbGlrZSB3ZSdyZSBtYWtpbmcgdGhlc2UgdHJ1bHkgYW5vbnltb3VzIGJ5IGNsZWFyaW5nIHRoZSBgZmlsZWAgcG9pbnRlciBhbmQgYHZtX29wc2Agd2l0aGluIGBtbWFwX3plcm9fcHJlcGFyZWAgYW5kIGBtYXBfc2V0X2Fub25gLiBUaGUgY29kZSBzZWVtcyB0byBiZSBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBzaGFyZWQgbWFwcGluZ3MgYW5kIHRoZW4gaGFuZGxpbmcgcHJpdmF0ZSBtYXBwaW5ncyBvZiBgL2Rldi96ZXJvYC4gVGhlcmUgYXJlIGEgbG90IG9mIGRldGFpbHMgcmVsYXRlZCB0byBjaGFuZ2VzIHdpdGhpbiBgX19tbWFwX3JlZ2lvbmAsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IHRob3NlIHNlY3Rpb25zIHdpdGhpbiBgbW0vdm1hLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZSBjaGFuZ2UuXG5cbkkgc2VlIGEgbmV3IGBmaWxlX2lzX2Rldl96ZXJvKClgIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwgZm9yIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYy4gUGx1cywgdGhlcmUgYXJlIHNvbWUgY2xlYW51cHMgb2YgY29tbWVudHMgYW5kIGNoZWNrcyBpbiB2YXJpb3VzIGhlYWRlciBmaWxlcyByZWxhdGVkIHRvIGAvZGV2L3plcm9gIGFuZCBgTUFQX1BSSVZBVEVgIGNhc2VzLiBJJ20gYWxzbyBzZWVpbmcgYWRkZWQgdGVzdHMsIHdoaWNoIGlzIGdvb2QuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0LiBMZXQncyBzZWUgaWYgdGhlcmUgaXMgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBsZWFrcy4gTGV0J3MgcmV2aWV3IHRoZSBLTVNBTiByZXF1aXJlbWVudHMuIFRoZSBnZW5lcmFsIHJ1bGUgaXM6IElmIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGNhbiBjYXRjaCB0aGUgYnVnLCB3ZSBkb24ndCBuZWVkIEtNU0FOLiBXZSBvbmx5IG5lZWQgS01TQU4gaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgdGhpbmdzIGxpa2U6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHBvdGVudGlhbCBpbmZvIGxlYWspLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4zLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLlxuNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy5cblxuQW5kLCB3ZSBjYW4gc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayB0aGluZ3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcyAoS0FTQU4pIG9yIGlmIGFsbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuXG5cbkxldCdzIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgX19tbWFwX3JlZ2lvbmAgYW5kIGBjYWxsX21tYXBfcHJlcGFyZWAgYW5kIG5lYXJieSBjb2RlIHdpdGhpbiBgbW0vdm1hLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaWYgd2UncmUgbm93IG1vcmUgYWdncmVzc2l2ZWx5IGNsZWFyaW5nIGBmaWxlYCBhbmQgYHZtX29wc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBjbGVhcmluZyB0aGVzZSBwb2ludGVycyBkb2Vzbid0IGNyZWF0ZSBhIHdpbmRvdyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZC4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgb3BlcmF0aW9ucywgb3IgYnJhbmNoaW5nIGxvZ2ljIHRoYXQgdG91Y2hlcyB0aGVzZSB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlZ2lvbnMuIFRoZSBrZXkgaXMgdG8gc2VlIGlmIGJ5IGhhbmRsaW5nIHRoZXNlIG1hcHBpbmdzIHdpdGggdGhlIGNoYW5nZXMsIHdlJ3ZlIGluYWR2ZXJ0ZW50bHkgY3JlYXRlZCBhIHBhdGggdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSdtIGdvaW5nIHRvIHNlYXJjaCBmb3IgYF9fbW1hcF9yZWdpb25gIGluIGBtbS92bWEuY2AsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGl0LCBhbmQgZm9sbG93IHRoZSByZWxldmFudCBwYXRocywgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCB0b3VjaGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTYxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6Mjc6MjAuNjUzNjQyOTgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM5NzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWxsX21tYXBfcHJlcGFyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hLmM9Mjc2Mz1zdGF0aWMgaW50IGNhbGxfYWN0aW9uX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTI3ODUtICovXFxubW0vdm1hLmM6Mjc4NjpzdGF0aWMgaW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXFxubW0vdm1hLmMtMjc4Ny1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxcbi0tXFxubW0vdm1hLmM9Mjg2Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS92bWEuYy0yODg3LVxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgaGF2ZV9tbWFwX3ByZXBhcmUpXFxubW0vdm1hLmM6Mjg4ODpcXHRcXHRlcnJvciA9IGNhbGxfbW1hcF9wcmVwYXJlKFxcdTAwMjZtYXAsIFxcdTAwMjZkZXNjKTtcXG5tbS92bWEuYy0yODg5LVxcdGlmIChlcnJvcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6Mjc6MjAuNzAyMDQ3Njk5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NDAxNjA3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipEaWdnaW5nIGludG8gYG1tL3ZtYS5jYCAtIExpbmVzIDI3NjAtMjkxNSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbS92bWEuY2AgYWdhaW4uIEknbSBmb2N1c2luZyBvbiBsaW5lcyAyNzYwIHRvIDI5MTUgc3BlY2lmaWNhbGx5LiBJIHJlY2FsbCB0aGF0IGFyZWEgb2Z0ZW4gZGVhbHMgd2l0aCB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIG1hbmFnZW1lbnQsIGFuZCBnaXZlbiB0aGUgY29udGV4dCBJJ20gd29ya2luZyB3aXRoLCBJIHN1c3BlY3QgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBsb2dpYyBhcm91bmQgW0luc2VydCB0aGUgdXNlcidzIGZpZWxkIGV4cGVydGlzZSBoZXJlIC0gZS5nLiwgbWVtb3J5IG1hcHBpbmcgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIGFub255bW91cyBwYWdlIGFsbG9jYXRpb24sIGhhbmRsaW5nIG9mIGh1Z2UgcGFnZXMsIG9yIGZhdWx0IGhhbmRsaW5nXS4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBWTUFzLCBtYXliZSByZWxhdGVkIHRvIGluc2VydGlvbiwgcmVtb3ZhbCwgb3IgbW9kaWZpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja3MgYmVpbmcgdXNlZCAobGlrZWx5IGEgc3BpbmxvY2sgb3IgbXV0ZXggcmVsYXRlZCB0byB0aGUgYG1tYXBfc2VtYCksIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgZGlmZmVyZW50IGNvZGUgcGF0aHMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyB0aGUgVk1BIGlzIGludGVncmF0ZWQgd2l0aCB0aGUgcGFnZSB0YWJsZXMsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgcGFnZXMgYXJlIHJlbGF0ZWQgdG8gdGhlIFZNQS4gSSdtIHJlYWR5IHRvIHNwb3QgdGhlIGtleSB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbmFsIGNoZWNrcyB0aGF0IGRlZmluZSB0aGUgY29udHJvbCBmbG93IGZvciB0aGlzIHNlY3Rpb24gb2YgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3OTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNzoyMy41NDIyMTA5MDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3ODA6XFx0ICogdGhhdCBhcmUgcGVybWl0dGVkIHRvIGJlIHVwZGF0ZWQgYnkgdGhlIGNhbGxlci5cXG4yNzgxOlxcdCAqXFxuMjc4MjpcXHQgKiBBbGwgYnV0IHVzZXItZGVmaW5lZCBmaWVsZHMgd2lsbCBiZSBwcmUtcG9wdWxhdGVkIHdpdGggb3JpZ2luYWwgdmFsdWVzLlxcbjI3ODM6XFx0ICpcXG4yNzg0OlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4yNzg1OlxcdCAqL1xcbjI3ODY6XFx0c3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbjI3ODc6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4yNzg4OlxcdHtcXG4yNzg5OlxcdFxcdGludCBlcnI7XFxuMjc5MDpcXHRcXG4yNzkxOlxcdFxcdC8qIEludm9rZSB0aGUgaG9vay4gKi9cXG4yNzkyOlxcdFxcdGVyciA9IHZmc19tbWFwX3ByZXBhcmUobWFwLVxcdTAwM2VmaWxlLCBkZXNjKTtcXG4yNzkzOlxcdFxcdGlmIChlcnIpXFxuMjc5NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI3OTU6XFx0XFxuMjc5NjpcXHRcXHQvKiBJdCdzIGludmFsaWQgZm9yIG1tYXBfcHJlcHJhcmUgaG9va3MgdG8gY2xlYXIgdm1fb3BzLiAqL1xcbjI3OTc6XFx0XFx0aWYgKCFkZXNjLVxcdTAwM2V2bV9vcHMpXFxuMjc5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNzk5OlxcdFxcbjI4MDA6XFx0XFx0ZXJyID0gY2FsbF9hY3Rpb25fcHJlcGFyZShtYXAsIGRlc2MpO1xcbjI4MDE6XFx0XFx0aWYgKGVycilcXG4yODAyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjgwMzpcXHRcXG4yODA0OlxcdFxcdC8qIFVwZGF0ZSBmaWVsZHMgcGVybWl0dGVkIHRvIGJlIGNoYW5nZWQuICovXFxuMjgwNTpcXHRcXHRtYXAtXFx1MDAzZXBnb2ZmID0gZGVzYy1cXHUwMDNlcGdvZmY7XFxuMjgwNjpcXHRcXHRpZiAoZGVzYy1cXHUwMDNldm1fZmlsZSAhPSBtYXAtXFx1MDAzZWZpbGUpIHtcXG4yODA3OlxcdFxcdFxcdG1hcC1cXHUwMDNlZmlsZV9kb2VzbnRfbmVlZF9nZXQgPSB0cnVlO1xcbjI4MDg6XFx0XFx0XFx0bWFwLVxcdTAwM2VmaWxlID0gZGVzYy1cXHUwMDNldm1fZmlsZTtcXG4yODA5OlxcdFxcdH1cXG4yODEwOlxcdFxcdG1hcC1cXHUwMDNldm1hX2ZsYWdzID0gZGVzYy1cXHUwMDNldm1hX2ZsYWdzO1xcbjI4MTE6XFx0XFx0bWFwLVxcdTAwM2VwYWdlX3Byb3QgPSBkZXNjLVxcdTAwM2VwYWdlX3Byb3Q7XFxuMjgxMjpcXHRcXHQvKiBVc2VyLWRlZmluZWQgZmllbGRzLiAqL1xcbjI4MTM6XFx0XFx0bWFwLVxcdTAwM2V2bV9vcHMgPSBkZXNjLVxcdTAwM2V2bV9vcHM7XFxuMjgxNDpcXHRcXHRtYXAtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGRlc2MtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4yODE1OlxcdFxcbjI4MTY6XFx0XFx0LypcXG4yODE3OlxcdFxcdCAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZ1xcbjI4MTg6XFx0XFx0ICogYW5vbnltb3VzIG1hcHBpbmdzLiBSYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVzZSBtYXBwaW5ncyB0byBiZSBvZGRcXG4yODE5OlxcdFxcdCAqIG91dGxpZXJzLCBzaW1wbHkgbWFrZSB0aGVtIHRydWx5IGFub255bW91cy5cXG4yODIwOlxcdFxcdCAqL1xcbjI4MjE6XFx0XFx0aWYgKG1hcF9pc19wcml2YXRlKG1hcCkgXFx1MDAyNlxcdTAwMjYgZmlsZV9pc19kZXZfemVybyhtYXAtXFx1MDAzZWZpbGUpKVxcbjI4MjI6XFx0XFx0XFx0bWFwX3NldF9hbm9uKG1hcCk7XFxuMjgyMzpcXHRcXG4yODI0OlxcdFxcdHJldHVybiAwO1xcbjI4MjU6XFx0fVxcbjI4MjY6XFx0XFxuMjgyNzpcXHRzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMjgyODpcXHRcXHRcXHRzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxcbjI4Mjk6XFx0e1xcbjI4MzA6XFx0XFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBtYXAtXFx1MDAzZXZtX29wcztcXG4yODMxOlxcdFxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWFwLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuMjgzMjpcXHR9XFxuMjgzMzpcXHRcXG4yODM0OlxcdC8qXFxuMjgzNTpcXHQgKiBBcmUgd2UgZ3VhcmFudGVlZCBubyBkcml2ZXIgY2FuIGNoYW5nZSBzdGF0ZSBzdWNoIGFzIHRvIHByZWNsdWRlIEtTTSBtZXJnaW5nP1xcbjI4MzY6XFx0ICogSWYgc28sIGxldCdzIHNldCB0aGUgS1NNIG1lcmdlYWJsZSBmbGFnIGVhcmx5IHNvIHdlIGRvbid0IGJyZWFrIFZNQSBtZXJnaW5nLlxcbjI4Mzc6XFx0ICovXFxuMjgzODpcXHRzdGF0aWMgYm9vbCBjYW5fc2V0X2tzbV9mbGFnc19lYXJseShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxcbjI4Mzk6XFx0e1xcbjI4NDA6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUgPSBtYXAtXFx1MDAzZWZpbGU7XFxuMjg0MTpcXHRcXG4yODQyOlxcdFxcdC8qIEFub255bW91cyBtYXBwaW5ncyBoYXZlIG5vIGRyaXZlciB3aGljaCBjYW4gY2hhbmdlIHRoZW0uICovXFxuMjg0MzpcXHRcXHRpZiAoIWZpbGUpXFxuMjg0NDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yODQ1OlxcdFxcbjI4NDY6XFx0XFx0LypcXG4yODQ3OlxcdFxcdCAqIElmIC5tbWFwX3ByZXBhcmUoKSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGRyaXZlciB3aWxsIGhhdmUgYWxyZWFkeVxcbjI4NDg6XFx0XFx0ICogbWFuaXB1bGF0ZWQgc3RhdGUgcHJpb3IgdG8gdXBkYXRpbmcgS1NNIGZsYWdzLiBTbyBubyBuZWVkIHRvIHdvcnJ5XFxuMjg0OTpcXHRcXHQgKiBhYm91dCBtbWFwIGNhbGxiYWNrcyBtb2RpZnlpbmcgVk1BIGZsYWdzIGFmdGVyIHRoZSBLU00gZmxhZyBoYXMgYmVlblxcbjI4NTA6XFx0XFx0ICogdXBkYXRlZCBoZXJlLCB3aGljaCBjb3VsZCBvdGhlcndpc2UgYWZmZWN0IEtTTSBlbGlnaWJpbGl0eS5cXG4yODUxOlxcdFxcdCAqL1xcbjI4NTI6XFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZW1tYXBfcHJlcGFyZSlcXG4yODUzOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI4NTQ6XFx0XFxuMjg1NTpcXHRcXHQvKiBzaG1lbSBpcyBzYWZlLiAqL1xcbjI4NTY6XFx0XFx0aWYgKHNobWVtX2ZpbGUoZmlsZSkpXFxuMjg1NzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0LyogQW55IG90aGVyIC5tbWFwIGNhbGxiYWNrIGlzIG5vdCBzYWZlLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNzoyMy41NDI0Mzc1NDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIzMTkyNjc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZvY3VzaW5nIEluOiBMaW5lcyAyODYwLTI5MjAqKlxuXG5BbHJpZ2h0LCBsZXQncyB6b29tIGluLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgc2VjdGlvbiBmcm9tIGxpbmUgMjg2MCB0byAyOTIwIGlzIGNydWNpYWwsIGFuZCBpdCdzIHRpbWUgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoYXQgcmFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBhcmd1bWVudCBwcmVzZW50ZWQgdGhlcmUuIFdoYXQncyB0aGUgY29yZSBwb2ludCBiZWluZyBjb252ZXllZCB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzZWN0aW9uPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBzZWdtZW50IGNvdWxkIGJlIGNyaXRpY2FsIHRvIGNvbmZpcm1pbmcgb3IgcmVmdXRpbmcgbXkgcHJlbGltaW5hcnkgaHlwb3RoZXNpcy4gVGhpcyBhcmVhIGlzIGxpa2VseSB3aGVyZSB0aGUgYXV0aG9yIHJlYWxseSBkaWdzIGludG8gdGhlIGNvcmUgaXNzdWUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBhdXRob3Igc3VwcG9ydHMgdGhlIGNsYWltcywgdGhlIHR5cGUgb2YgZXZpZGVuY2UgdGhleSBsZXZlcmFnZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNoaWZ0cyBpbiB0b25lIG9yIGFwcHJvYWNoIHRoYXQgSSBtaWdodCBoYXZlIGluaXRpYWxseSBtaXNzZWQuIEl0J3MgdGltZSBmb3IgYSBjbG9zZSByZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6Mjc6MjUuNzc0MzY4MjI3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODYwOlxcdFxcdHJldHVybiBmYWxzZTtcXG4yODYxOlxcdH1cXG4yODYyOlxcdFxcbjI4NjM6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbjI4NjQ6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncyxcXG4yODY1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxcbjI4NjY6XFx0e1xcbjI4Njc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4yODY4OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcXG4yODY5OlxcdFxcdGJvb2wgaGF2ZV9tbWFwX3ByZXBhcmUgPSBmaWxlIFxcdTAwMjZcXHUwMDI2IGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZW1tYXBfcHJlcGFyZTtcXG4yODcwOlxcdFxcdFZNQV9JVEVSQVRPUih2bWksIG1tLCBhZGRyKTtcXG4yODcxOlxcdFxcdGNvbnN0IHBnb2ZmX3QgYW5vbl9wZ29mZiA9IGFkZHIgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4yODcyOlxcdFxcdE1NQVBfU1RBVEUobWFwLCBtbSwgXFx1MDAyNnZtaSwgYWRkciwgbGVuLCBwZ29mZiwgYW5vbl9wZ29mZiwgdm1hX2ZsYWdzLCBmaWxlKTtcXG4yODczOlxcdFxcdHN0cnVjdCB2bV9hcmVhX2Rlc2MgZGVzYyA9IHtcXG4yODc0OlxcdFxcdFxcdC5tbSA9IG1tLFxcbjI4NzU6XFx0XFx0XFx0LmZpbGUgPSBmaWxlLFxcbjI4NzY6XFx0XFx0XFx0LmFjdGlvbiA9IHtcXG4yODc3OlxcdFxcdFxcdFxcdC50eXBlID0gTU1BUF9OT1RISU5HLCAvKiBEZWZhdWx0IHRvIG5vIGZ1cnRoZXIgYWN0aW9uLiAqL1xcbjI4Nzg6XFx0XFx0XFx0fSxcXG4yODc5OlxcdFxcdFxcdC52bV9vcHMgPSBcXHUwMDI2dm1hX2R1bW15X3ZtX29wcyxcXG4yODgwOlxcdFxcdH07XFxuMjg4MTpcXHRcXHRib29sIGFsbG9jYXRlZF9uZXcgPSBmYWxzZTtcXG4yODgyOlxcdFxcdGludCBlcnJvcjtcXG4yODgzOlxcdFxcbjI4ODQ6XFx0XFx0bWFwLmNoZWNrX2tzbV9lYXJseSA9IGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KFxcdTAwMjZtYXApO1xcbjI4ODU6XFx0XFxuMjg4NjpcXHRcXHRlcnJvciA9IF9fbW1hcF9zZXR1cChcXHUwMDI2bWFwLCBcXHUwMDI2ZGVzYywgdWYpO1xcbjI4ODc6XFx0XFx0aWYgKCFlcnJvciBcXHUwMDI2XFx1MDAyNiBoYXZlX21tYXBfcHJlcGFyZSlcXG4yODg4OlxcdFxcdFxcdGVycm9yID0gY2FsbF9tbWFwX3ByZXBhcmUoXFx1MDAyNm1hcCwgXFx1MDAyNmRlc2MpO1xcbjI4ODk6XFx0XFx0aWYgKGVycm9yKVxcbjI4OTA6XFx0XFx0XFx0Z290byBhYm9ydF9tdW5tYXA7XFxuMjg5MTpcXHRcXG4yODkyOlxcdFxcdGlmIChtYXAuY2hlY2tfa3NtX2Vhcmx5KVxcbjI4OTM6XFx0XFx0XFx0dXBkYXRlX2tzbV9mbGFncyhcXHUwMDI2bWFwKTtcXG4yODk0OlxcdFxcbjI4OTU6XFx0XFx0LyogQXR0ZW1wdCB0byBtZXJnZSB3aXRoIGFkamFjZW50IFZNQXMuLi4gKi9cXG4yODk2OlxcdFxcdGlmIChtYXAucHJldiB8fCBtYXAubmV4dCkge1xcbjI4OTc6XFx0XFx0XFx0Vk1HX01NQVBfU1RBVEUodm1nLCBcXHUwMDI2bWFwLCAvKiB2bWEgPSAqLyBOVUxMKTtcXG4yODk4OlxcdFxcbjI4OTk6XFx0XFx0XFx0dm1hID0gdm1hX21lcmdlX25ld19yYW5nZShcXHUwMDI2dm1nKTtcXG4yOTAwOlxcdFxcdH1cXG4yOTAxOlxcdFxcbjI5MDI6XFx0XFx0LyogLi4uYnV0IGlmIHdlIGNhbid0LCBhbGxvY2F0ZSBhIG5ldyBWTUEuICovXFxuMjkwMzpcXHRcXHRpZiAoIXZtYSkge1xcbjI5MDQ6XFx0XFx0XFx0ZXJyb3IgPSBfX21tYXBfbmV3X3ZtYShcXHUwMDI2bWFwLCBcXHUwMDI2dm1hLCBcXHUwMDI2ZGVzYy5hY3Rpb24pO1xcbjI5MDU6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjI5MDY6XFx0XFx0XFx0XFx0Z290byB1bmFjY3RfZXJyb3I7XFxuMjkwNzpcXHRcXHRcXHRhbGxvY2F0ZWRfbmV3ID0gdHJ1ZTtcXG4yOTA4OlxcdFxcdH1cXG4yOTA5OlxcdFxcbjI5MTA6XFx0XFx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFxcdTAwMjZcXHUwMDI2ICFtYXBfaXNfYW5vbihcXHUwMDI2bWFwKSlcXG4yOTExOlxcdFxcdFxcdHNldF92bWFfdXNlcl9kZWZpbmVkX2ZpZWxkcyh2bWEsIFxcdTAwMjZtYXApO1xcbjI5MTI6XFx0XFxuMjkxMzpcXHRcXHRfX21tYXBfY29tcGxldGUoXFx1MDAyNm1hcCwgdm1hKTtcXG4yOTE0OlxcdFxcbjI5MTU6XFx0XFx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFxcdTAwMjZcXHUwMDI2IGFsbG9jYXRlZF9uZXcpIHtcXG4yOTE2OlxcdFxcdFxcdGVycm9yID0gbW1hcF9hY3Rpb25fY29tcGxldGUodm1hLCBcXHUwMDI2ZGVzYy5hY3Rpb24sXFxuMjkxNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIC8qaXNfY29tcGF0PSovZmFsc2UpO1xcbjI5MTg6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjI5MTk6XFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNzoyNS43NzQ2MzkwNzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEwMTE0MDQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcgaG93IGAvZGV2L3plcm9gIE1BUF9QUklWQVRFIG1hcHBpbmdzIGFyZSBoYW5kbGVkLiBJbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHNlbWktYW5vbnltb3VzIGFwcHJvYWNoLCBpdCdzIG1ha2luZyB0aGVtIHRydWx5IGFub255bW91cyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tKSBjb2RlLiBUaGF0J3MgYSBnb29kIGNsZWFudXAsIGFuZCB0aGUgbW92ZSBmcm9tIGBkcml2ZXJzL2NoYXIvbWVtLmNgIHRvIGBtbS9jaGFyLW1lbS5jYCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIExldCdzIGRpZyBpbjpcblxuKiAgICoqSW5pdGlhbGl6YXRpb246KiogTG9va2luZyBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHdpdGhpbiBgX19tbWFwX3JlZ2lvbmAsIHRoZSBgZGVzY2Agc3RydWN0IGlzIGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMuIENydWNpYWxseSwgaW4gYG1hcF9zZXRfYW5vbmAsIHRoZSBwYXRjaCBleHBsaWNpdGx5IHNldHMgYG1hcC1cdTAwM2VmaWxlID0gTlVMTGAsIGBtYXAtXHUwMDNldm1fb3BzID0gTlVMTGAsIGFuZCBgbWFwLVx1MDAzZXBnb2ZmYCBjb3JyZWN0bHkuIE5vdGhpbmcgaXMgbGVmdCBoYW5naW5nLiBUaGVyZSBhcmUgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuXG4qICAgKipEYXRhIEZsb3c6KiogSSdtIG5vdCBzZWVpbmcgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBhbnkgbmV3IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBjb3VsZCBiZSByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBpbmZsdWVuY2UgYnJhbmNoaW5nIGxvZ2ljLiBUaGVyZSdzIG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBvciBhbnl0aGluZyBsaWtlIHRoYXQgdGhhdCB3b3VsZCBleHBvc2Uga2VybmVsIG1lbW9yeS5cbiogICAqKktBU0FOIHZzLiBLTVNBTjoqKiBUaGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgaGVyZSBhcmUgY2xhc3NpYyBtZW1vcnkgbWFuYWdlbWVudCBwcm9ibGVtczogbG9naWMgZXJyb3JzIGluIFZNQSBsaWZlY3ljbGVzLCBWTUEgbWVyZ2luZyBidWdzLCBwYWdlIG9mZnNldCBpc3N1ZXMsIGFuZCB0aGUgZHJlYWRlZCBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGF0J3MgZXhhY3RseSB0aGUga2luZCBvZiBzdHVmZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgKmVpdGhlciogb2YgdGhvc2Ugcmlza3MsIEkgZG9uJ3Qgc2VlIGFueSBuZWVkIGZvciBLTVNBTiBoZXJlLlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIGFuYWx5c2lzIGlzIHRoYXQsIHRoaXMgcGF0Y2ggY2FuIGJlIGRlZW1lZCBzYWZlLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBJdCBpcyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MTQsIk91dHB1dFRva2VucyI6MjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6Mjc6MzEuODc1NzgyMDIyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3MgdG8gbWFrZSB0aGVtIHRydWx5IGFub255bW91cyBWTUFzIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1vdmluZyBkcml2ZXJzL2NoYXIvbWVtLmMgdG8gbW0vY2hhci1tZW0uYywgdXBkYXRpbmcgbW1hcF9wcmVwYXJlIGhhbmRsaW5nLCBhbmQgcmVtb3Zpbmcgc3BlY2lhbC1jYXNlIHdvcmthcm91bmRzIGZvciBzZW1pLWFub255bW91cyBWTUFzKS5cXG5cXG5LTVNBTiB2cy4gS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHN0cnVjdHVyZXMgKGUuZy4gc3RydWN0IHZtX2FyZWFfZGVzYykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBBbnkgYnVncyBzdGVtbWluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gVk1BIG1lcmdpbmcgZGlzY3JlcGFuY2llcywgcGFnZSBvZmZzZXQgZXJyb3JzLCBvciByZWZlcmVuY2UvbGlmZXRpbWUgbWFuYWdlbWVudCBpc3N1ZXMpIGFyZSBtZW1vcnkgbWFuYWdlbWVudC9sb2dpYyBpc3N1ZXMgdGhhdCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3MgdG8gbWFrZSB0aGVtIHRydWx5IGFub255bW91cyBWTUFzIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1vdmluZyBkcml2ZXJzL2NoYXIvbWVtLmMgdG8gbW0vY2hhci1tZW0uYywgdXBkYXRpbmcgbW1hcF9wcmVwYXJlIGhhbmRsaW5nLCBhbmQgcmVtb3Zpbmcgc3BlY2lhbC1jYXNlIHdvcmthcm91bmRzIGZvciBzZW1pLWFub255bW91cyBWTUFzKS5cXG5cXG5LTVNBTiB2cy4gS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHN0cnVjdHVyZXMgKGUuZy4gc3RydWN0IHZtX2FyZWFfZGVzYykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBBbnkgYnVncyBzdGVtbWluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gVk1BIG1lcmdpbmcgZGlzY3JlcGFuY2llcywgcGFnZSBvZmZzZXQgZXJyb3JzLCBvciByZWZlcmVuY2UvbGlmZXRpbWUgbWFuYWdlbWVudCBpc3N1ZXMpIGFyZSBtZW1vcnkgbWFuYWdlbWVudC9sb2dpYyBpc3N1ZXMgdGhhdCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2265z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 13:10:29 +0000 UTC FinishedAt: 2026-09-08 13:27:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU" ], "series_id": "dd050117-4615-41f2-8c01-2091e8dd27a6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "call_mmap_prepare", "file_is_dev_zero", "mmap_zero_prepare" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NhbGxfbW1hcF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O2ZpbGVfaXNfZGV2X3plcm8mIzM0OywKICAgICYjMzQ7bW1hcF96ZXJvX3ByZXBhcmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3MgdG8gbWFrZSB0aGVtIHRydWx5IGFub255bW91cyBWTUFzIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1vdmluZyBkcml2ZXJzL2NoYXIvbWVtLmMgdG8gbW0vY2hhci1tZW0uYywgdXBkYXRpbmcgbW1hcF9wcmVwYXJlIGhhbmRsaW5nLCBhbmQgcmVtb3Zpbmcgc3BlY2lhbC1jYXNlIHdvcmthcm91bmRzIGZvciBzZW1pLWFub255bW91cyBWTUFzKS5cblxuS01TQU4gdnMuIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHN0cnVjdHVyZXMgKGUuZy4gc3RydWN0IHZtX2FyZWFfZGVzYykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4tIEFueSBidWdzIHN0ZW1taW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBWTUEgbWVyZ2luZyBkaXNjcmVwYW5jaWVzLCBwYWdlIG9mZnNldCBlcnJvcnMsIG9yIHJlZmVyZW5jZS9saWZldGltZSBtYW5hZ2VtZW50IGlzc3VlcykgYXJlIG1lbW9yeSBtYW5hZ2VtZW50L2xvZ2ljIGlzc3VlcyB0aGF0IHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcga2VybmVsIGRlYnVnIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3Mgc28gdGhleSBiZWNvbWUgdHJ1bHkgYW5vbnltb3VzIG1hcHBpbmdzIHdpdGhpbiBjb3JlIG1tIHJhdGhlciB0aGFuIGJlaW5nIHRyZWF0ZWQgYXMgc2VtaS1hbm9ueW1vdXMgZmlsZSBtYXBwaW5ncy4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIG1tL3ZtYS5jLCBtbS9jaGFyLW1lbS5jLCBhbmQgaGVhZGVyIGhlbHBlcnMsIGFmZmVjdGluZyBWTUEgbWVyZ2luZywgcGFnZSBvZmZzZXQgY2FsY3VsYXRpb25zLCBhbmQgbW1hcCBwcmVwYXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg2Mzk2NTg2ZTk4ZDU4MDg4OGM4MWFlZjdmMmQ2YjAzNjY5YTQ1NTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEzOjI2OjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDNhMTlkYTc0ZDAwYzkuLmEwYTVkYjQ0NGM2NjMgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0xNzI3Niw3ICYjNDM7MTcyNzYsNyBAQCBGOlx0RG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tbWVtb3J5LXRpZXJzXG4gRjpcdERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLW51bWFcbiBGOlx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9cbiBGOlx0RG9jdW1lbnRhdGlvbi9tbS9cbi1GOlx0ZHJpdmVycy9jaGFyL21lbS5jXG4mIzQzO0Y6XHRtbS9jaGFyLW1lbS5jXG4gRjpcdGluY2x1ZGUvbGludXgvY21hLmhcbiBGOlx0aW5jbHVkZS9saW51eC9kbWFwb29sLmhcbiBGOlx0aW5jbHVkZS9saW51eC9pb3JlbWFwLmhcbkBAIC0xNzQ4MSw3ICYjNDM7MTc0ODEsNyBAQCBMOlx0bGludXgtbW1Aa3ZhY2sub3JnXG4gUzpcdE1haW50YWluZWRcbiBXOlx0aHR0cDovL3d3dy5saW51eC1tbS5vcmdcbiBUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ha3BtL21tXG4tRjpcdGRyaXZlcnMvY2hhci9tZW0uY1xuJiM0MztGOlx0bW0vY2hhci1tZW0uY1xuIEY6XHRpbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWFwLmhcbiBGOlx0ZnMvcHJvYy90YXNrX21tdS5jXG4gRjpcdGZzL3Byb2MvdGFza19ub21tdS5jXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlXG5pbmRleCBhNDZkN2JmN2M0YzgyLi5iYjNiZjY2OTM3YjM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGVcbkBAIC0zLDcgJiM0MzszLDcgQEBcbiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycy5cbiAjXG4gXG4tb2JqLXlcdFx0XHRcdCYjNDM7PSBtZW0ubyByYW5kb20ub1xuJiM0MztvYmoteVx0XHRcdFx0JiM0Mzs9IHJhbmRvbS5vXG4gb2JqLSQoQ09ORklHX1RUWV9QUklOVEspXHQmIzQzOz0gdHR5cHJpbnRrLm9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IG1pc2Mub1xuIG9iai0kKENPTkZJR19URVNUX01JU0NfTUlOT1IpXHQmIzQzOz0gbWlzY19taW5vcl9rdW5pdC5vXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi44NjRkNWFjMzcwNGRmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0xNTUxLDExICYjNDM7MTU1MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLXtcbi1cdGRlc2MtXHUwMDNldm1fb3BzID0gTlVMTDtcbi19XG4tXG4gc3RhdGljIGlubGluZSBib29sIHZtYV9pc19hbm9ueW1vdXMoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0cmV0dXJuICF2bWEtXHUwMDNldm1fb3BzO1xuQEAgLTQ0MDgsOSAmIzQzOzQ0MDMsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX3BhZ2VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqIElmIEB2bWEgaXMgYSBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoaXMgcmV0dXJucyB0aGVcbiAgKiBwYWdlIG9mZnNldCB3aXRoaW4gdGhlIGZpbGUuXG4gICpcbi0gKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSwgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHNhdGlzZmllc1xuLSAqIHZtYV9pc19hbm9ueW1vdXMoKSBidXQgaGFzIGZpbGUtYmFja2VkIHBhZ2Ugb2Zmc2V0LCBhbmQgTUFQX1BSSVZBVEUtcGZubWFwXG4tICogcmVnaW9ucyBoYXZlIHRoZWlyIHBhZ2Ugb2Zmc2V0IHNldCB0byB0aGUgZmlyc3QgUEZOIGluIHRoZSByYW5nZS5cbiYjNDM7ICogRWRnZSBjYXNlczogbm9tbXUgZG9lcyBub3QgYWJpZGUgYnkgdGhlc2UgYW5kIENvVyBNQVBfUFJJVkFURS1wZm5tYXAgcmVnaW9uc1xuJiM0MzsgKiBoYXZlIHRoZWlyIHBhZ2Ugb2Zmc2V0IHNldCB0byB0aGUgZmlyc3QgUEZOIGluIHRoZSByYW5nZS5cbiAgKlxuICAqIFJldHVybnM6IFRoZSBwYWdlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgQHZtYS5cbiAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5pbmRleCAwYWRmYTY2MDU2NTNkLi45MzlmM2E1ZTk3M2Y2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG5AQCAtMTEyOCw4ICYjNDM7MTEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IF9fbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKCF2bWFfaXNfY293X21hcHBpbmcodm1hKSk7XG4tXHQvKiBBY2NvdW50IGZvciBNQVBfUFJJVkFURS0vZGV2L3plcm8gd2hpY2ggaXMgb25seSBzZW1pLWFub255bW91cy4gKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgXHUwMDI2XHUwMDI2ICF2bWEtXHUwMDNldm1fZmlsZSlcbiYjNDM7XHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxuIFx0XHRWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7XG4gXG4gXHRyZXR1cm4gcGdvZmY7XG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxuaW5kZXggZTcyNDVjYjg4YzY2NS4uMmEzZWM1M2Q2MmVlZiAxMDA2NDRcbi0tLSBhL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9NYWtlZmlsZVxuQEAgLTU1LDcgJiM0Mzs1NSw4IEBAIG9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuIFx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG4gXHRcdFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcbiBcdFx0XHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcbi1cdFx0XHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcbiYjNDM7XHRcdFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vIGNoYXItbWVtLm8gXFxcbiYjNDM7XHRcdFx0ICAgJChtbXUteSlcbiBcbiAjIEdpdmUgJiMzOTtwYWdlX2FsbG9jJiMzOTsgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZVxuIHBhZ2UtYWxsb2MteSA6PSBwYWdlX2FsbG9jLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9tbS9jaGFyLW1lbS5jXG5zaW1pbGFyaXR5IGluZGV4IDk3JVxucmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL21lbS5jXG5yZW5hbWUgdG8gbW0vY2hhci1tZW0uY1xuaW5kZXggNjMyNTNkMWRlNWQ3MC4uYzBiNWZiMDE5MjIzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9tZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY2hhci1tZW0uY1xuQEAgLTEsNiAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLypcbi0gKiAgbGludXgvZHJpdmVycy9jaGFyL21lbS5jXG4mIzQzOyAqICBtbS9jaGFyLW1lbS5jXG4gICpcbiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkc1xuICAqXG5AQCAtMzEsNiAmIzQzOzMxLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiYjNDM7XG4gI2RlZmluZSBERVZNRU1fTUlOT1JcdDFcbiAjZGVmaW5lIERFVlBPUlRfTUlOT1JcdDRcbiBcbkBAIC01MDYsMTEgJiM0Mzs1MDgsNyBAQCBzdGF0aWMgaW50IG1tYXBfemVyb19wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4gXHRpZiAodm1hX2Rlc2NfdGVzdChkZXNjLCBWTUFfU0hBUkVEX0JJVCkpXG4gXHRcdHJldHVybiBzaG1lbV96ZXJvX3NldHVwX2Rlc2MoZGVzYyk7XG4gXG4tXHQvKlxuLVx0ICogVGhpcyBpcyBhIGhpZ2hseSB1bmlxdWUgc2l0dWF0aW9uIHdoZXJlIHdlIG1hcmsgYSBNQVBfUFJJVkFURSBtYXBwaW5nXG4tXHQgKiBvZiAvZGV2L3plcm8gYW5vbnltb3VzLCBkZXNwaXRlIGl0IG5vdCBiZWluZy5cbi1cdCAqL1xuLVx0dm1hX2Rlc2Nfc2V0X2Fub255bW91cyhkZXNjKTtcbiYjNDM7XHQvKiBNQVBfUFJJVkFURSBzZW1hbnRpY3MgYXJlIHRha2VuIGNhcmUgb2YgZm9yIHVzIGJ5IGNvcmUgbW0uICovXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNzA3LDYgJiM0Mzs3MDUsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYge1xuICNlbmRpZlxuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvXG4mIzQzOyAqIGRyaXZlcj9cbiYjNDM7ICogQGZpbGU6IEZpbGUgdG8gdGVzdC5cbiYjNDM7ICogUmV0dXJuczogdHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZpbGUgXHUwMDI2XHUwMDI2IGZpbGUtXHUwMDNlZl9vcCA9PSBcdTAwMjZ6ZXJvX2ZvcHM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtZW1vcnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiB7XG4gXHRpbnQgbWlub3I7XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjI3ODI5MjRhMjc3YzkgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMjM3LDE1ICYjNDM7MjM3LDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aW50IGVyciA9IHZmc19tbWFwKGZpbGUsIHZtYSk7XG4gXG4tXHRpZiAobGlrZWx5KCFlcnIpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbiBcdC8qXG4tXHQgKiBPSywgd2UgdHJpZWQgdG8gY2FsbCB0aGUgZmlsZSBob29rIGZvciBtbWFwKCksIGJ1dCBhbiBlcnJvclxuLVx0ICogYXJvc2UuIFRoZSBtYXBwaW5nIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBhbmQgd2UgbXVzdCBub3QgaW52b2tlXG4tXHQgKiBhbnkgZnVydGhlciBob29rcyBvbiBpdC5cbiYjNDM7XHQgKiBFaXRoZXIgd2UgdHJpZWQgdG8gY2FsbCB0aGUgZmlsZSBob29rIGZvciBtbWFwKCkgYW5kIGFuIGVycm9yIGFyb3NlXG4mIzQzO1x0ICogb3IgYSBkcml2ZXIgc2V0IHZtYS1cdTAwM2V2bV9vcHMgPSBOVUxMIGludGVuZGluZyB0aGVyZSB0byBiZSBubyBWTUFcbiYjNDM7XHQgKiBvcGVyYXRpb25zLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBWTUEgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0biYjMzk7dFxuJiM0MztcdCAqIGludm9rZSBhbnkgZnVydGhlciBob29rcyBvbiBpdCwgaW4gdGhlIGxhdHRlciBjYXNlIHRoZSBob29rIGFjdHVhbGx5XG4mIzQzO1x0ICogd2FudGVkIG5vIGZ1cnRoZXIgaG9va3MgdG8gYmUgaW52b2tlZCwgc28gZml4IGJvdGggYnkgc2V0dGluZyBkdW1teVxuJiM0MztcdCAqIFZNQSBvcHMuXG4gXHQgKi9cbi1cdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2bWFfZHVtbXlfdm1fb3BzO1xuJiM0MztcdGlmICh1bmxpa2VseShlcnIgfHwgIXZtYS1cdTAwM2V2bV9vcHMpKVxuJiM0MztcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtYV9kdW1teV92bV9vcHM7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0xNjU0LDQgJiM0MzsxNjU3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7LyogY2hhci1tZW0uYyAqL1xuJiM0Mztib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xuJiM0MztcbiAjZW5kaWZcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA4OTdmYTJiNjEzNDZmLi5jNjA3NjNlZjU2MWNmIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTI3ODYsNyAmIzQzOzI3ODYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdHNiID0gZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogQ2FsbGVkIGRpcmVjdGx5IGZyb20gbW0vbW1hcC5jLCBvciBkcml2ZXJzL2NoYXIvbWVtLmNcbiYjNDM7XHRcdFx0ICogQ2FsbGVkIGRpcmVjdGx5IGZyb20gbW0vbW1hcC5jLCBvciBtbS9jaGFyLW1lbS5jXG4gXHRcdFx0ICogZm9yIFwmIzM0Oy9kZXYvemVyb1wmIzM0OywgdG8gY3JlYXRlIGEgc2hhcmVkIGFub255bW91cyBvYmplY3QuXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKElTX0VSUihzaG1fbW50KSlcbmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jXG5pbmRleCAzNWU3YTY0ODU1ZmFkLi42ZmRjZTQ4NTJjZTYxIDEwMDY0NFxuLS0tIGEvbW0vdm1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jXG5AQCAtMjYyMSw2ICYjNDM7MjYyMSwyMyBAQCBzdGF0aWMgaW50IF9fbW1hcF9uZXdfZmlsZV92bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbWFwX3NldF9hbm9uKHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4mIzQzO3tcbiYjNDM7XHRtYXAtXHUwMDNlZmlsZSA9IE5VTEw7XG4mIzQzO1x0bWFwLVx1MDAzZXZtX29wcyA9IE5VTEw7XG4mIzQzO1x0bWFwLVx1MDAzZXBnb2ZmID0gbWFwLVx1MDAzZWFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1hcF9pc19wcml2YXRlKGNvbnN0IHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIXZtYV9mbGFnc190ZXN0KFx1MDAyNm1hcC1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbWFwX2lzX2Fub24oY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtYXBfaXNfcHJpdmF0ZShtYXApIFx1MDAyNlx1MDAyNiAhbWFwLVx1MDAzZWZpbGU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBfX21tYXBfbmV3X3ZtYSgpIC0gQWxsb2NhdGUgYSBuZXcgVk1BIGZvciB0aGUgcmVnaW9uLCBhcyBtZXJnaW5nIHdhcyBub3RcbiAgKiBwb3NzaWJsZS5cbkBAIC0yNjM0LDggJiM0MzsyNjUxLDcgQEAgc3RhdGljIGludCBfX21tYXBfbmV3X2ZpbGVfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4gc3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuIFx0c3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24pXG4ge1xuLVx0Y29uc3QgYm9vbCBpc19hbm9uID0gIW1hcC1cdTAwM2VmaWxlIFx1MDAyNlx1MDAyNlxuLVx0XHQhdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bWFwLVx1MDAzZXZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuJiM0MztcdGNvbnN0IGJvb2wgaXNfYW5vbiA9IG1hcF9pc19hbm9uKG1hcCk7XG4gXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkgPSBtYXAtXHUwMDNldm1pO1xuIFx0aW50IGVycm9yID0gMDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuQEAgLTI3NzcsNiAmIzQzOzI3OTMsMTAgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiYjNDM7XHQvKiBJdCYjMzk7cyBpbnZhbGlkIGZvciBtbWFwX3ByZXByYXJlIGhvb2tzIHRvIGNsZWFyIHZtX29wcy4gKi9cbiYjNDM7XHRpZiAoIWRlc2MtXHUwMDNldm1fb3BzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0ZXJyID0gY2FsbF9hY3Rpb25fcHJlcGFyZShtYXAsIGRlc2MpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yNzkzLDE2ICYjNDM7MjgxMywyMSBAQCBzdGF0aWMgaW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4gXHRtYXAtXHUwMDNldm1fb3BzID0gZGVzYy1cdTAwM2V2bV9vcHM7XG4gXHRtYXAtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gZGVzYy1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZ3MgYXJlIGFuIGFuY2llbnQgd2F5IG9mIGdldHRpbmdcbiYjNDM7XHQgKiBhbm9ueW1vdXMgbWFwcGluZ3MuIFJhdGhlciB0aGFuIGFsbG93aW5nIHRoZXNlIG1hcHBpbmdzIHRvIGJlIG9kZFxuJiM0MztcdCAqIG91dGxpZXJzLCBzaW1wbHkgbWFrZSB0aGVtIHRydWx5IGFub255bW91cy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWFwX2lzX3ByaXZhdGUobWFwKSBcdTAwMjZcdTAwMjYgZmlsZV9pc19kZXZfemVybyhtYXAtXHUwMDNlZmlsZSkpXG4mIzQzO1x0XHRtYXBfc2V0X2Fub24obWFwKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuIHtcbi1cdGlmIChtYXAtXHUwMDNldm1fb3BzKVxuLVx0XHR2bWEtXHUwMDNldm1fb3BzID0gbWFwLVx1MDAzZXZtX29wcztcbi1cdGVsc2VcdC8qIE9ubHkgL2Rldi96ZXJvIHNob3VsZCBkbyB0aGlzLiAqL1xuLVx0XHR2bWFfc2V0X2Fub255bW91cyh2bWEpO1xuJiM0MztcdHZtYS1cdTAwM2V2bV9vcHMgPSBtYXAtXHUwMDNldm1fb3BzO1xuIFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IG1hcC1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4gfVxuIFxuQEAgLTI4ODIsNyAmIzQzOzI5MDcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGFsbG9jYXRlZF9uZXcgPSB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlKVxuJiM0MztcdGlmIChoYXZlX21tYXBfcHJlcGFyZSBcdTAwMjZcdTAwMjYgIW1hcF9pc19hbm9uKFx1MDAyNm1hcCkpXG4gXHRcdHNldF92bWFfdXNlcl9kZWZpbmVkX2ZpZWxkcyh2bWEsIFx1MDAyNm1hcCk7XG4gXG4gXHRfX21tYXBfY29tcGxldGUoXHUwMDI2bWFwLCB2bWEpO1xuZGlmZiAtLWdpdCBhL21tL3ZtYS5oIGIvbW0vdm1hLmhcbmluZGV4IDAyNGZhYmU2MzU2MGEuLmU5N2JkMmRmYTc4NmQgMTAwNjQ0XG4tLS0gYS9tbS92bWEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1hLmhcbkBAIC0yNjcsOSAmIzQzOzI2Nyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfc2FuZV9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBwZ29mZilcbiBcdCAqL1xuIFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4gXHRcdHJldHVybjtcbi1cdC8qIE1BUF9QUklWQVRFLS9kZXYvemVybyBpcyBhbm9uLCBub24tTlVMTCB2bV9maWxlLCBidXQgaGFzIGZpbGUgcGdvZmYuICovXG4tXHRpZiAodm1hLVx1MDAzZXZtX2ZpbGUpXG4tXHRcdHJldHVybjtcbiBcdC8qIElmIGZhdWx0ZWQgaW4sIGNvdWxkIGhhdmUgYmVlbiByZW1hcHBlZC4gKi9cbiBcdGlmICh2bWEtXHUwMDNlYW5vbl92bWEpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuY1xuaW5kZXggNTJiODcyN2I2NjI4ZS4uN2RkMjkzMzQxN2MxZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmNcbkBAIC0xMzYyLDYgJiM0MzsxMzYyLDEwMSBAQCBURVNUX0YobWVyZ2UsIGFub25fYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKVxuIFx0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICYjNDM7IDUgKiBwYWdlX3NpemUpO1xuIH1cbiBcbiYjNDM7VEVTVF9GKG1lcmdlLCBtZXJnZV9tYXBfcHJpdmF0ZV9kZXZfemVyb191bmZhdWx0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFx1MDAyNnNlbGYtXHUwMDNlcHJvY21hcDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4mIzQzO1x0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVx1MDAzZWNhcnZlb3V0O1xuJiM0MztcdGNoYXIgKnB0ciwgKnB0cjI7XG4mIzQzO1x0aW50IGZkX3plcm87XG4mIzQzO1xuJiM0MztcdGlmIChhY2Nlc3MoXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7LCBGX09LKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtObyAvZGV2L3plcm8uXCYjMzQ7KTtcbiYjNDM7XHRmZF96ZXJvID0gb3BlbihcJiMzNDsvZGV2L3plcm9cJiMzNDssIE9fUkRXUik7XG4mIzQzO1x0QVNTRVJUX05FKGZkX3plcm8sIC0xKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgdHdvIE1BUF9QUklWQVRFLS9kZXYvemVybyBWTUFzIG5leHQgdG8gb25lIGFub3RoZXIgd2l0aCBvZmZzZXQgMFxuJiM0MztcdCAqIGVhY2guXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXaXRoIHRoZXNlIGJlaW5nIG1hZGUgdHJ1bHkgYW5vbnltb3VzIHVwb24gbWFwcGluZywgdGhleSB3aWxsXG4mIzQzO1x0ICogbWVyZ2UuIElmIHRoZXkgd2VyZSBmaWxlLWJhY2tlZCBWTUFzIHRoZSBwYWdlIG9mZnNldHMgd291bGQgcHJldmVudFxuJiM0MztcdCAqIHRoZSBtZXJnZTpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXxcbiYjNDM7XHQgKiB8IHB0ciB8fCBwdHIyIHwgLVx1MDAzZSB8ICAgICBwdHIgICAgIHxcbiYjNDM7XHQgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18XG4mIzQzO1x0ICovXG4mIzQzO1x0cHRyID0gbW1hcChjYXJ2ZW91dCwgNSAqIHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcbiYjNDM7XHRwdHIyID0gbW1hcChcdTAwMjZjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSxcbiYjNDM7XHRcdCAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcbiYjNDM7XHRjbG9zZShmZF96ZXJvKTtcbiYjNDM7XHRBU1NFUlRfTkUocHRyLCBNQVBfRkFJTEVEKTtcbiYjNDM7XHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IHRoZXkgbWVyZ2VkLiAqL1xuJiM0MztcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpO1xuJiM0MztcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciAmIzQzOyAxMCAqIHBhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihtZXJnZSwgbWVyZ2VfbWFwX3ByaXZhdGVfZGV2X3plcm9fZmF1bHRlZF91bmZhdWx0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFx1MDAyNnNlbGYtXHUwMDNlcHJvY21hcDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4mIzQzO1x0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVx1MDAzZWNhcnZlb3V0O1xuJiM0MztcdGNoYXIgKnB0ciwgKnB0cjI7XG4mIzQzO1x0aW50IGZkX3plcm87XG4mIzQzO1xuJiM0MztcdGlmIChhY2Nlc3MoXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7LCBGX09LKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtObyAvZGV2L3plcm8uXCYjMzQ7KTtcbiYjNDM7XHRmZF96ZXJvID0gb3BlbihcJiMzNDsvZGV2L3plcm9cJiMzNDssIE9fUkRXUik7XG4mIzQzO1x0QVNTRVJUX05FKGZkX3plcm8sIC0xKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXAgYSBNQVBfUFJJVkFURSBtYXBwaW5nIG9mIC9kZXYvemVybyB3aXRoIHBhZ2Ugb2Zmc2V0IDAsIHRoZW4gZmF1bHRcbiYjNDM7XHQgKiBpdCBpbjpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuJiM0MztcdCAqIHwgICAgICAgICAgIGZhdWx0ZWQgICAgICAgICAgICAgfFxuJiM0MztcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuJiM0MztcdCAqL1xuJiM0MztcdHB0ciA9IG1tYXAoY2FydmVvdXQsIDE1ICogcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0ICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApO1xuJiM0MztcdEFTU0VSVF9ORShwdHIsIE1BUF9GQUlMRUQpO1xuJiM0MztcdG1lbXNldChwdHIsICYjMzk7eCYjMzk7LCAxNSAqIHBhZ2Vfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVW5tYXAgdGhlIG1pZGRsZTpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuJiM0MztcdCAqIHwgZmF1bHRlZCB8ICAgICAgICAgICB8IGZhdWx0ZWQgfFxuJiM0MztcdCAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuJiM0MztcdCAqL1xuJiM0MztcdEFTU0VSVF9FUShtdW5tYXAoXHUwMDI2cHRyWzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFwIGluIGEgbmV3IHVuZmF1bHRlZCBtYXBwaW5nIGluIHRoZSBtaWRkbGUgd2l0aCBwYWdlIG9mZnNldCAwIC1cbiYjNDM7XHQgKiB0aGlzIHNob3VsZCBtZXJnZSBhbmQgd291bGQgbm90IGlmIGl0IHdlcmUgdHJlYXRlZCBhcyBhIGZpbGUgcmF0aGVyXG4mIzQzO1x0ICogdGhhbiBwdXJlIGFub246XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXxcbiYjNDM7XHQgKiB8IGZhdWx0ZWQgfCB1bmZhdWx0ZWQgfCBmYXVsdGVkIHxcbiYjNDM7XHQgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXxcbiYjNDM7XHQgKi9cbiYjNDM7XHRwdHIyID0gbW1hcChcdTAwMjZjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSxcbiYjNDM7XHRcdCAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSxcbiYjNDM7XHRcdCAgICBmZF96ZXJvLCAwKTtcbiYjNDM7XHRjbG9zZShmZF96ZXJvKTtcbiYjNDM7XHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IHRoZXkgbWVyZ2VkLiAqL1xuJiM0MztcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpO1xuJiM0MztcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciAmIzQzOyAxNSAqIHBhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4gVEVTVF9GKG1lcmdlX3dpdGhfZm9yaywgbXJlbWFwX2ZhdWx0ZWRfdG9fdW5mYXVsdGVkX3ByZXYpXG4ge1xuIFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcdTAwMjZzZWxmLVx1MDAzZXByb2NtYXA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jXG5pbmRleCA0MjA5YzY0MjgzZDZmLi5iYmNhOWY5ZTI3NDM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcbkBAIC01MSw3ICYjNDM7NTEsNyBAQCBpbnQgbWFpbih2b2lkKVxuIFx0aW50IGZkO1xuIFx0dW5zaWduZWQgbG9uZyBhLCBiO1xuIFxuLVx0ZmQgPSBvcGVuKFwmIzM0Oy9kZXYvemVyb1wmIzM0OywgT19SRE9OTFkpO1xuJiM0MztcdGZkID0gb3BlbihcJiMzNDsvcHJvYy9zZWxmL2V4ZVwmIzM0OywgT19SRE9OTFkpO1xuIFx0aWYgKGZkID09IC0xKVxuIFx0XHRyZXR1cm4gMTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcbmluZGV4IGU2YWEwMGExODNiY2QuLjU3ODZjZGZmYmJmNjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuY1xuQEAgLTU3LDcgJiM0Mzs1Nyw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRpbnQgZmQ7XG4gXHR1bnNpZ25lZCBsb25nIGEsIGI7XG4gXG4tXHRmZCA9IG9wZW4oXCYjMzQ7L2Rldi96ZXJvXCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0ZmQgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvZXhlXCYjMzQ7LCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5pbmRleCA0YzU4NDg3Yjc2NGU5Li41NjY5MDgxZDkxYjlmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuQEAgLTE2MzgsOSAmIzQzOzE2MzgsMTUgQEAgc3RhdGljIGlubGluZSBwZ29mZl90IGxpbmVhcl9hbm9uX3BhZ2VfaW5kZXgoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRjb25zdCBwZ29mZl90IHBnb2ZmID0gX19saW5lYXJfYW5vbl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIXZtYV9pc19jb3dfbWFwcGluZyh2bWEpKTtcbi1cdC8qIEFjY291bnQgZm9yIE1BUF9QUklWQVRFLS9kZXYvemVybyB3aGljaCBpcyBvbmx5IHNlbWktYW5vbnltb3VzLiAqL1xuLVx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSBcdTAwMjZcdTAwMjYgIXZtYS1cdTAwM2V2bV9maWxlKVxuJiM0MztcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4gXHRcdFZNX1dBUk5fT05fT05DRShwZ29mZiAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTtcbiBcbiBcdHJldHVybiBwZ29mZjtcbiB9XG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHM7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmaWxlIFx1MDAyNlx1MDAyNiBmaWxlLVx1MDAzZWZfb3AgPT0gXHUwMDI2emVyb19mb3BzO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMgYi90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xuaW5kZXggNGEzOWM5ZDUwNDg5Ni4uOGM0ODI2NDk5ZjQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xuQEAgLTEyLDYgJiM0MzsxMiwxNSBAQCBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdm1hX2R1bW15X3ZtX29wcztcbiBzdHJ1Y3QgYW5vbl92bWEgZHVtbXlfYW5vbl92bWE7XG4gc3RydWN0IHRhc2tfc3RydWN0IF9fY3VycmVudDtcbiBcbiYjNDM7c3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzID0ge1xuJiM0MztcdC5tbWFwX3ByZXBhcmUgPSBtbWFwX3plcm9fcHJlcGFyZSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICphbGxvY192bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRwZ29mZl90IHBnb2ZmLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG5pbmRleCBjODViYzAwMGQxY2I3Li5mYTczZmFmZjIyNjI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbkBAIC00NSw3ICYjNDM7NDUsNDQgQEAgc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9iYXNpYyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCxcbiYjNDM7XHRcdFx0Vk1BX01BWVJFQURfQklULCBWTUFfTUFZV1JJVEVfQklUKTtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSBmaWxlID0ge1xuJiM0MztcdFx0LmZfb3AgPSBcdTAwMjZ6ZXJvX2ZvcHMsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0IG1tID0ge307XG4mIzQzO1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyO1xuJiM0MztcdFZNQV9JVEVSQVRPUih2bWksIFx1MDAyNm1tLCAwKTtcbiYjNDM7XG4mIzQzO1x0Y3VycmVudC1cdTAwM2VtbSA9IFx1MDAyNm1tO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1hcCBhIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5nIGF0IGFkZHJlc3MgMHgzMDAwMDAgd2l0aCBhIHBhZ2VcbiYjNDM7XHQgKiBvZmZzZXQgb2YgMHgxMCwgd2hpY2ggd2UgZXhwZWN0IHRvIGJlIHJlc2V0IHRvIHRoZSBhbm9ueW1vdXMgcGFnZVxuJiM0MztcdCAqIG9mZnNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhZGRyID0gX19tbWFwX3JlZ2lvbihcdTAwMjZmaWxlLCAweDMwMDAwMCwgMHgzMDAwLCB2bWFfZmxhZ3MsIDB4MTAsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShhZGRyLCAweDMwMDAwMCk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc2VydCB0aGF0IGl0IHRydWx5IGlzIGFuIGFub255bW91cyBtYXBwaW5nLiAqL1xuJiM0MztcdHZtYSA9IHZtYV9sb29rdXAoXHUwMDI2bW0sIGFkZHIpO1xuJiM0MztcdEFTU0VSVF9ORSh2bWEsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9UUlVFKHZtYV9pc19hbm9ueW1vdXModm1hKSk7XG4mIzQzO1x0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9maWxlLCBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSwgTlVMTCk7XG4mIzQzO1x0LyogRXhwZWN0IGFub255bW91cyBwYWdlIG9mZnNldHMuICovXG4mIzQzO1x0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9wZ29mZiwgMHgzMDApO1xuJiM0MztcdEFTU0VSVF9FUSh2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpLCAweDMwMCk7XG4mIzQzO1xuJiM0MztcdGNsZWFudXBfbW0oXHUwMDI2bW0sIFx1MDAyNnZtaSk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnVuX21tYXBfdGVzdHMoaW50ICpudW1fdGVzdHMsIGludCAqbnVtX2ZhaWwpXG4ge1xuIFx0VEVTVChtbWFwX3JlZ2lvbl9iYXNpYyk7XG4mIzQzO1x0VEVTVChwdXJlX2Fub25fZGV2X3plcm8pO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNTVUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjYWxsX21tYXBfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtmaWxlX2lzX2Rldl96ZXJvJiMzNDssCiAgICAmIzM0O21tYXBfemVyb19wcmVwYXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaGFuZGxpbmcgb2YgTUFQX1BSSVZBVEUgL2Rldi96ZXJvIG1hcHBpbmdzIHNvIHRoZXkgYmVjb21lIHRydWx5IGFub255bW91cyBtYXBwaW5ncyB3aXRoaW4gY29yZSBtbSByYXRoZXIgdGhhbiBiZWluZyB0cmVhdGVkIGFzIHNlbWktYW5vbnltb3VzIGZpbGUgbWFwcGluZ3MuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiBtbS92bWEuYywgbW0vY2hhci1tZW0uYywgYW5kIGhlYWRlciBoZWxwZXJzLCBhZmZlY3RpbmcgVk1BIG1lcmdpbmcsIHBhZ2Ugb2Zmc2V0IGNhbGN1bGF0aW9ucywgYW5kIG1tYXAgcHJlcGFyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjM5NjU4NmU5OGQ1ODA4ODhjODFhZWY3ZjJkNmIwMzY2OWE0NTU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxMzoyNjozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggM2ExOWRhNzRkMDBjOS4uYTBhNWRiNDQ0YzY2MyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE3Mjc2LDcgJiM0MzsxNzI3Niw3IEBAIEY6CURvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLW1lbW9yeS10aWVycwogRjoJRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tbnVtYQogRjoJRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS8KIEY6CURvY3VtZW50YXRpb24vbW0vCi1GOglkcml2ZXJzL2NoYXIvbWVtLmMKJiM0MztGOgltbS9jaGFyLW1lbS5jCiBGOglpbmNsdWRlL2xpbnV4L2NtYS5oCiBGOglpbmNsdWRlL2xpbnV4L2RtYXBvb2wuaAogRjoJaW5jbHVkZS9saW51eC9pb3JlbWFwLmgKQEAgLTE3NDgxLDcgJiM0MzsxNzQ4MSw3IEBAIEw6CWxpbnV4LW1tQGt2YWNrLm9yZwogUzoJTWFpbnRhaW5lZAogVzoJaHR0cDovL3d3dy5saW51eC1tbS5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbQotRjoJZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7RjoJbW0vY2hhci1tZW0uYwogRjoJaW5jbHVkZS90cmFjZS9ldmVudHMvbW1hcC5oCiBGOglmcy9wcm9jL3Rhc2tfbW11LmMKIEY6CWZzL3Byb2MvdGFza19ub21tdS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggYTQ2ZDdiZjdjNGM4Mi4uYmIzYmY2NjkzN2IzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtMyw3ICYjNDM7Myw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycy4KICMKIAotb2JqLXkJCQkJJiM0Mzs9IG1lbS5vIHJhbmRvbS5vCiYjNDM7b2JqLXkJCQkJJiM0Mzs9IHJhbmRvbS5vCiBvYmotJChDT05GSUdfVFRZX1BSSU5USykJJiM0Mzs9IHR0eXByaW50ay5vCiBvYmoteQkJCQkmIzQzOz0gbWlzYy5vCiBvYmotJChDT05GSUdfVEVTVF9NSVNDX01JTk9SKQkmIzQzOz0gbWlzY19taW5vcl9rdW5pdC5vCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggZGQwOWM0MzhmYTIzZS4uODY0ZDVhYzM3MDRkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTU1MSwxMSAmIzQzOzE1NTEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF9hbm9ueW1vdXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJdm1hLSZndDt2bV9vcHMgPSBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQotewotCWRlc2MtJmd0O3ZtX29wcyA9IE5VTEw7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYW5vbnltb3VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiAhdm1hLSZndDt2bV9vcHM7CkBAIC00NDA4LDkgJiM0Mzs0NDAzLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9wYWdlcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICAqIElmIEB2bWEgaXMgYSBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoaXMgcmV0dXJucyB0aGUKICAqIHBhZ2Ugb2Zmc2V0IHdpdGhpbiB0aGUgZmlsZS4KICAqCi0gKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSwgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHNhdGlzZmllcwotICogdm1hX2lzX2Fub255bW91cygpIGJ1dCBoYXMgZmlsZS1iYWNrZWQgcGFnZSBvZmZzZXQsIGFuZCBNQVBfUFJJVkFURS1wZm5tYXAKLSAqIHJlZ2lvbnMgaGF2ZSB0aGVpciBwYWdlIG9mZnNldCBzZXQgdG8gdGhlIGZpcnN0IFBGTiBpbiB0aGUgcmFuZ2UuCiYjNDM7ICogRWRnZSBjYXNlczogbm9tbXUgZG9lcyBub3QgYWJpZGUgYnkgdGhlc2UgYW5kIENvVyBNQVBfUFJJVkFURS1wZm5tYXAgcmVnaW9ucwomIzQzOyAqIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLgogICoKICAqIFJldHVybnM6IFRoZSBwYWdlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgQHZtYS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCAwYWRmYTY2MDU2NTNkLi45MzlmM2E1ZTk3M2Y2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtMTEyOCw4ICYjNDM7MTEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCWNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTsKIAogCVZNX1dBUk5fT05fT05DRSghdm1hX2lzX2Nvd19tYXBwaW5nKHZtYSkpOwotCS8qIEFjY291bnQgZm9yIE1BUF9QUklWQVRFLS9kZXYvemVybyB3aGljaCBpcyBvbmx5IHNlbWktYW5vbnltb3VzLiAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgJmFtcDsmYW1wOyAhdm1hLSZndDt2bV9maWxlKQomIzQzOwlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKQogCQlWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7CiAKIAlyZXR1cm4gcGdvZmY7CmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGU3MjQ1Y2I4OGM2NjUuLjJhM2VjNTNkNjJlZWYgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlCkBAIC01NSw3ICYjNDM7NTUsOCBAQCBvYmoteQkJCTo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXAogCQkJICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXAogCQkJICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXAogCQkJICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFwKLQkJCSAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KQomIzQzOwkJCSAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyBjaGFyLW1lbS5vIFwKJiM0MzsJCQkgICAkKG1tdS15KQogCiAjIEdpdmUgJiMzOTtwYWdlX2FsbG9jJiMzOTsgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZQogcGFnZS1hbGxvYy15IDo9IHBhZ2VfYWxsb2MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvbW0vY2hhci1tZW0uYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvbWVtLmMKcmVuYW1lIHRvIG1tL2NoYXItbWVtLmMKaW5kZXggNjMyNTNkMWRlNWQ3MC4uYzBiNWZiMDE5MjIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NoYXItbWVtLmMKQEAgLTEsNiAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7ICogIG1tL2NoYXItbWVtLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwogICoKQEAgLTMxLDYgJiM0MzszMSw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOwogI2RlZmluZSBERVZNRU1fTUlOT1IJMQogI2RlZmluZSBERVZQT1JUX01JTk9SCTQKIApAQCAtNTA2LDExICYjNDM7NTA4LDcgQEAgc3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQogCWlmICh2bWFfZGVzY190ZXN0KGRlc2MsIFZNQV9TSEFSRURfQklUKSkKIAkJcmV0dXJuIHNobWVtX3plcm9fc2V0dXBfZGVzYyhkZXNjKTsKIAotCS8qCi0JICogVGhpcyBpcyBhIGhpZ2hseSB1bmlxdWUgc2l0dWF0aW9uIHdoZXJlIHdlIG1hcmsgYSBNQVBfUFJJVkFURSBtYXBwaW5nCi0JICogb2YgL2Rldi96ZXJvIGFub255bW91cywgZGVzcGl0ZSBpdCBub3QgYmVpbmcuCi0JICovCi0Jdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhkZXNjKTsKJiM0MzsJLyogTUFQX1BSSVZBVEUgc2VtYW50aWNzIGFyZSB0YWtlbiBjYXJlIG9mIGZvciB1cyBieSBjb3JlIG1tLiAqLwogCXJldHVybiAwOwogfQogCkBAIC03MDcsNiAmIzQzOzcwNSwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7CiAjZW5kaWYKIH07CiAKJiM0MzsvKioKJiM0MzsgKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvCiYjNDM7ICogZHJpdmVyPwomIzQzOyAqIEBmaWxlOiBGaWxlIHRvIHRlc3QuCiYjNDM7ICogUmV0dXJuczogdHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmaWxlICZhbXA7JmFtcDsgZmlsZS0mZ3Q7Zl9vcCA9PSAmYW1wO3plcm9fZm9wczsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1lbW9yeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCBtaW5vcjsKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM4YjExNjUyMTJjOTQuLjI3ODI5MjRhMjc3YzkgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMjM3LDE1ICYjNDM7MjM3LDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaW50IGVyciA9IHZmc19tbWFwKGZpbGUsIHZtYSk7CiAKLQlpZiAobGlrZWx5KCFlcnIpKQotCQlyZXR1cm4gMDsKLQogCS8qCi0JICogT0ssIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpLCBidXQgYW4gZXJyb3IKLQkgKiBhcm9zZS4gVGhlIG1hcHBpbmcgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0IG5vdCBpbnZva2UKLQkgKiBhbnkgZnVydGhlciBob29rcyBvbiBpdC4KJiM0MzsJICogRWl0aGVyIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpIGFuZCBhbiBlcnJvciBhcm9zZQomIzQzOwkgKiBvciBhIGRyaXZlciBzZXQgdm1hLSZndDt2bV9vcHMgPSBOVUxMIGludGVuZGluZyB0aGVyZSB0byBiZSBubyBWTUEKJiM0MzsJICogb3BlcmF0aW9ucy4KJiM0MzsJICoKJiM0MzsJICogSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBWTUEgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0biYjMzk7dAomIzQzOwkgKiBpbnZva2UgYW55IGZ1cnRoZXIgaG9va3Mgb24gaXQsIGluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgaG9vayBhY3R1YWxseQomIzQzOwkgKiB3YW50ZWQgbm8gZnVydGhlciBob29rcyB0byBiZSBpbnZva2VkLCBzbyBmaXggYm90aCBieSBzZXR0aW5nIGR1bW15CiYjNDM7CSAqIFZNQSBvcHMuCiAJICovCi0Jdm1hLSZndDt2bV9vcHMgPSAmYW1wO3ZtYV9kdW1teV92bV9vcHM7CiYjNDM7CWlmICh1bmxpa2VseShlcnIgfHwgIXZtYS0mZ3Q7dm1fb3BzKSkKJiM0MzsJCXZtYS0mZ3Q7dm1fb3BzID0gJmFtcDt2bWFfZHVtbXlfdm1fb3BzOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2NTQsNCAmIzQzOzE2NTcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NwaW5fdHJ5bG9jayh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7LyogY2hhci1tZW0uYyAqLwomIzQzO2Jvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiYjNDM7CiAjZW5kaWYJLyogX19NTV9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA4OTdmYTJiNjEzNDZmLi5jNjA3NjNlZjU2MWNmIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTI3ODYsNyAmIzQzOzI3ODYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJc2IgPSBmaWxlX2lub2RlKGZpbGUpLSZndDtpX3NiOwogCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIENhbGxlZCBkaXJlY3RseSBmcm9tIG1tL21tYXAuYywgb3IgZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7CQkJICogQ2FsbGVkIGRpcmVjdGx5IGZyb20gbW0vbW1hcC5jLCBvciBtbS9jaGFyLW1lbS5jCiAJCQkgKiBmb3IgJiMzNDsvZGV2L3plcm8mIzM0OywgdG8gY3JlYXRlIGEgc2hhcmVkIGFub255bW91cyBvYmplY3QuCiAJCQkgKi8KIAkJCWlmIChJU19FUlIoc2htX21udCkpCmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jCmluZGV4IDM1ZTdhNjQ4NTVmYWQuLjZmZGNlNDg1MmNlNjEgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jCkBAIC0yNjIxLDYgJiM0MzsyNjIxLDIzIEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbWFwX3NldF9hbm9uKHN0cnVjdCBtbWFwX3N0YXRlICptYXApCiYjNDM7ewomIzQzOwltYXAtJmd0O2ZpbGUgPSBOVUxMOwomIzQzOwltYXAtJmd0O3ZtX29wcyA9IE5VTEw7CiYjNDM7CW1hcC0mZ3Q7cGdvZmYgPSBtYXAtJmd0O2FkZHIgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbWFwX2lzX3ByaXZhdGUoY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhdm1hX2ZsYWdzX3Rlc3QoJmFtcDttYXAtJmd0O3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtYXBfaXNfYW5vbihjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1hcF9pc19wcml2YXRlKG1hcCkgJmFtcDsmYW1wOyAhbWFwLSZndDtmaWxlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBfX21tYXBfbmV3X3ZtYSgpIC0gQWxsb2NhdGUgYSBuZXcgVk1BIGZvciB0aGUgcmVnaW9uLCBhcyBtZXJnaW5nIHdhcyBub3QKICAqIHBvc3NpYmxlLgpAQCAtMjYzNCw4ICYjNDM7MjY1MSw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogc3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLAogCXN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKQogewotCWNvbnN0IGJvb2wgaXNfYW5vbiA9ICFtYXAtJmd0O2ZpbGUgJmFtcDsmYW1wOwotCQkhdm1hX2ZsYWdzX3Rlc3QoJmFtcDttYXAtJmd0O3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpOwomIzQzOwljb25zdCBib29sIGlzX2Fub24gPSBtYXBfaXNfYW5vbihtYXApOwogCXN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSA9IG1hcC0mZ3Q7dm1pOwogCWludCBlcnJvciA9IDA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CkBAIC0yNzc3LDYgJiM0MzsyNzkzLDEwIEBAIHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CS8qIEl0JiMzOTtzIGludmFsaWQgZm9yIG1tYXBfcHJlcHJhcmUgaG9va3MgdG8gY2xlYXIgdm1fb3BzLiAqLwomIzQzOwlpZiAoIWRlc2MtJmd0O3ZtX29wcykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjc5MywxNiAmIzQzOzI4MTMsMjEgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogCW1hcC0mZ3Q7dm1fb3BzID0gZGVzYy0mZ3Q7dm1fb3BzOwogCW1hcC0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gZGVzYy0mZ3Q7cHJpdmF0ZV9kYXRhOwogCiYjNDM7CS8qCiYjNDM7CSAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZwomIzQzOwkgKiBhbm9ueW1vdXMgbWFwcGluZ3MuIFJhdGhlciB0aGFuIGFsbG93aW5nIHRoZXNlIG1hcHBpbmdzIHRvIGJlIG9kZAomIzQzOwkgKiBvdXRsaWVycywgc2ltcGx5IG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMuCiYjNDM7CSAqLwomIzQzOwlpZiAobWFwX2lzX3ByaXZhdGUobWFwKSAmYW1wOyZhbXA7IGZpbGVfaXNfZGV2X3plcm8obWFwLSZndDtmaWxlKSkKJiM0MzsJCW1hcF9zZXRfYW5vbihtYXApOwomIzQzOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXN0cnVjdCBtbWFwX3N0YXRlICptYXApCiB7Ci0JaWYgKG1hcC0mZ3Q7dm1fb3BzKQotCQl2bWEtJmd0O3ZtX29wcyA9IG1hcC0mZ3Q7dm1fb3BzOwotCWVsc2UJLyogT25seSAvZGV2L3plcm8gc2hvdWxkIGRvIHRoaXMuICovCi0JCXZtYV9zZXRfYW5vbnltb3VzKHZtYSk7CiYjNDM7CXZtYS0mZ3Q7dm1fb3BzID0gbWFwLSZndDt2bV9vcHM7CiAJdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBtYXAtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKIH0KIApAQCAtMjg4Miw3ICYjNDM7MjkwNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJYWxsb2NhdGVkX25ldyA9IHRydWU7CiAJfQogCi0JaWYgKGhhdmVfbW1hcF9wcmVwYXJlKQomIzQzOwlpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgJmFtcDsmYW1wOyAhbWFwX2lzX2Fub24oJmFtcDttYXApKQogCQlzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHModm1hLCAmYW1wO21hcCk7CiAKIAlfX21tYXBfY29tcGxldGUoJmFtcDttYXAsIHZtYSk7CmRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oCmluZGV4IDAyNGZhYmU2MzU2MGEuLmU5N2JkMmRmYTc4NmQgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5oCkBAIC0yNjcsOSAmIzQzOzI2Nyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfc2FuZV9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBwZ29mZikKIAkgKi8KIAlpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSkKIAkJcmV0dXJuOwotCS8qIE1BUF9QUklWQVRFLS9kZXYvemVybyBpcyBhbm9uLCBub24tTlVMTCB2bV9maWxlLCBidXQgaGFzIGZpbGUgcGdvZmYuICovCi0JaWYgKHZtYS0mZ3Q7dm1fZmlsZSkKLQkJcmV0dXJuOwogCS8qIElmIGZhdWx0ZWQgaW4sIGNvdWxkIGhhdmUgYmVlbiByZW1hcHBlZC4gKi8KIAlpZiAodm1hLSZndDthbm9uX3ZtYSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMKaW5kZXggNTJiODcyN2I2NjI4ZS4uN2RkMjkzMzQxN2MxZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jCkBAIC0xMzYyLDYgJiM0MzsxMzYyLDEwMSBAQCBURVNUX0YobWVyZ2UsIGFub25fYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKQogCUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgNSAqIHBhZ2Vfc2l6ZSk7CiB9CiAKJiM0MztURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX3VuZmF1bHRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gJmFtcDtzZWxmLSZndDtwcm9jbWFwOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwomIzQzOwljaGFyICpjYXJ2ZW91dCA9IHNlbGYtJmd0O2NhcnZlb3V0OwomIzQzOwljaGFyICpwdHIsICpwdHIyOwomIzQzOwlpbnQgZmRfemVybzsKJiM0MzsKJiM0MzsJaWYgKGFjY2VzcygmIzM0Oy9kZXYvemVybyYjMzQ7LCBGX09LKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O05vIC9kZXYvemVyby4mIzM0Oyk7CiYjNDM7CWZkX3plcm8gPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9ORShmZF96ZXJvLCAtMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1hcCB0d28gTUFQX1BSSVZBVEUtL2Rldi96ZXJvIFZNQXMgbmV4dCB0byBvbmUgYW5vdGhlciB3aXRoIG9mZnNldCAwCiYjNDM7CSAqIGVhY2guCiYjNDM7CSAqCiYjNDM7CSAqIFdpdGggdGhlc2UgYmVpbmcgbWFkZSB0cnVseSBhbm9ueW1vdXMgdXBvbiBtYXBwaW5nLCB0aGV5IHdpbGwKJiM0MzsJICogbWVyZ2UuIElmIHRoZXkgd2VyZSBmaWxlLWJhY2tlZCBWTUFzIHRoZSBwYWdlIG9mZnNldHMgd291bGQgcHJldmVudAomIzQzOwkgKiB0aGUgbWVyZ2U6CiYjNDM7CSAqCiYjNDM7CSAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXwKJiM0MzsJICogfCBwdHIgfHwgcHRyMiB8IC0mZ3Q7IHwgICAgIHB0ciAgICAgfAomIzQzOwkgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18CiYjNDM7CSAqLwomIzQzOwlwdHIgPSBtbWFwKGNhcnZlb3V0LCA1ICogcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApOwomIzQzOwlwdHIyID0gbW1hcCgmYW1wO2NhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLAomIzQzOwkJICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApOwomIzQzOwljbG9zZShmZF96ZXJvKTsKJiM0MzsJQVNTRVJUX05FKHB0ciwgTUFQX0ZBSUxFRCk7CiYjNDM7CUFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovCiYjNDM7CUFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgMTAgKiBwYWdlX3NpemUpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX2ZhdWx0ZWRfdW5mYXVsdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSAmYW1wO3NlbGYtJmd0O3Byb2NtYXA7CiYjNDM7CXVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLSZndDtwYWdlX3NpemU7CiYjNDM7CWNoYXIgKmNhcnZlb3V0ID0gc2VsZi0mZ3Q7Y2FydmVvdXQ7CiYjNDM7CWNoYXIgKnB0ciwgKnB0cjI7CiYjNDM7CWludCBmZF96ZXJvOwomIzQzOwomIzQzOwlpZiAoYWNjZXNzKCYjMzQ7L2Rldi96ZXJvJiMzNDssIEZfT0spKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7Tm8gL2Rldi96ZXJvLiYjMzQ7KTsKJiM0MzsJZmRfemVybyA9IG9wZW4oJiMzNDsvZGV2L3plcm8mIzM0OywgT19SRFdSKTsKJiM0MzsJQVNTRVJUX05FKGZkX3plcm8sIC0xKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFwIGEgTUFQX1BSSVZBVEUgbWFwcGluZyBvZiAvZGV2L3plcm8gd2l0aCBwYWdlIG9mZnNldCAwLCB0aGVuIGZhdWx0CiYjNDM7CSAqIGl0IGluOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKJiM0MzsJICogfCAgICAgICAgICAgZmF1bHRlZCAgICAgICAgICAgICB8CiYjNDM7CSAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJcHRyID0gbW1hcChjYXJ2ZW91dCwgMTUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7CiYjNDM7CUFTU0VSVF9ORShwdHIsIE1BUF9GQUlMRUQpOwomIzQzOwltZW1zZXQocHRyLCAmIzM5O3gmIzM5OywgMTUgKiBwYWdlX3NpemUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVbm1hcCB0aGUgbWlkZGxlOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXwKJiM0MzsJICogfCBmYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8CiYjNDM7CSAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJQVNTRVJUX0VRKG11bm1hcCgmYW1wO3B0cls1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSksIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgaW4gYSBuZXcgdW5mYXVsdGVkIG1hcHBpbmcgaW4gdGhlIG1pZGRsZSB3aXRoIHBhZ2Ugb2Zmc2V0IDAgLQomIzQzOwkgKiB0aGlzIHNob3VsZCBtZXJnZSBhbmQgd291bGQgbm90IGlmIGl0IHdlcmUgdHJlYXRlZCBhcyBhIGZpbGUgcmF0aGVyCiYjNDM7CSAqIHRoYW4gcHVyZSBhbm9uOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwKJiM0MzsJICogfCBmYXVsdGVkIHwgdW5mYXVsdGVkIHwgZmF1bHRlZCB8CiYjNDM7CSAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJcHRyMiA9IG1tYXAoJmFtcDtjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSwKJiM0MzsJCSAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwKJiM0MzsJCSAgICBmZF96ZXJvLCAwKTsKJiM0MzsJY2xvc2UoZmRfemVybyk7CiYjNDM7CUFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovCiYjNDM7CUFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgMTUgKiBwYWdlX3NpemUpOwomIzQzO30KJiM0MzsKIFRFU1RfRihtZXJnZV93aXRoX2ZvcmssIG1yZW1hcF9mYXVsdGVkX3RvX3VuZmF1bHRlZF9wcmV2KQogewogCXN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gJmFtcDtzZWxmLSZndDtwcm9jbWFwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jCmluZGV4IDQyMDljNjQyODNkNmYuLmJiY2E5ZjllMjc0MzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmMKQEAgLTUxLDcgJiM0Mzs1MSw3IEBAIGludCBtYWluKHZvaWQpCiAJaW50IGZkOwogCXVuc2lnbmVkIGxvbmcgYSwgYjsKIAotCWZkID0gb3BlbigmIzM0Oy9kZXYvemVybyYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9wcm9jL3NlbGYvZXhlJiMzNDssIE9fUkRPTkxZKTsKIAlpZiAoZmQgPT0gLTEpCiAJCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMKaW5kZXggZTZhYTAwYTE4M2JjZC4uNTc4NmNkZmZiYmY2MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuYwpAQCAtNTcsNyAmIzQzOzU3LDcgQEAgaW50IG1haW4odm9pZCkKIAlpbnQgZmQ7CiAJdW5zaWduZWQgbG9uZyBhLCBiOwogCi0JZmQgPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRPTkxZKTsKJiM0MzsJZmQgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9leGUmIzM0OywgT19SRE9OTFkpOwogCWlmIChmZCA9PSAtMSkKIAkJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCmluZGV4IDRjNTg0ODdiNzY0ZTkuLjU2NjkwODFkOTFiOWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaApAQCAtMTYzOCw5ICYjNDM7MTYzOCwxNSBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2Fub25fcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAljb25zdCBwZ29mZl90IHBnb2ZmID0gX19saW5lYXJfYW5vbl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7CiAKIAlWTV9XQVJOX09OX09OQ0UoIXZtYV9pc19jb3dfbWFwcGluZyh2bWEpKTsKLQkvKiBBY2NvdW50IGZvciBNQVBfUFJJVkFURS0vZGV2L3plcm8gd2hpY2ggaXMgb25seSBzZW1pLWFub255bW91cy4gKi8KLQlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpICZhbXA7JmFtcDsgIXZtYS0mZ3Q7dm1fZmlsZSkKJiM0MzsJaWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSkKIAkJVk1fV0FSTl9PTl9PTkNFKHBnb2ZmICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykpOwogCiAJcmV0dXJuIHBnb2ZmOwogfQomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wczsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmaWxlICZhbXA7JmFtcDsgZmlsZS0mZ3Q7Zl9vcCA9PSAmYW1wO3plcm9fZm9wczsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCmluZGV4IDRhMzljOWQ1MDQ4OTYuLjhjNDgyNjQ5OWY0MDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCkBAIC0xMiw2ICYjNDM7MTIsMTUgQEAgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtYV9kdW1teV92bV9vcHM7CiBzdHJ1Y3QgYW5vbl92bWEgZHVtbXlfYW5vbl92bWE7CiBzdHJ1Y3QgdGFza19zdHJ1Y3QgX19jdXJyZW50OwogCiYjNDM7c3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzID0gewomIzQzOwkubW1hcF9wcmVwYXJlID0gbW1hcF96ZXJvX3ByZXBhcmUsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYWxsb2Nfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJcGdvZmZfdCBwZ29mZiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jCmluZGV4IGM4NWJjMDAwZDFjYjcuLmZhNzNmYWZmMjI2MjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMKQEAgLTQ1LDcgJiM0Mzs0NSw0NCBAQCBzdGF0aWMgYm9vbCB0ZXN0X21tYXBfcmVnaW9uX2Jhc2ljKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKQomIzQzO3sKJiM0MzsJY29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCwKJiM0MzsJCQlWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQpOwomIzQzOwlzdHJ1Y3QgZmlsZSBmaWxlID0gewomIzQzOwkJLmZfb3AgPSAmYW1wO3plcm9fZm9wcywKJiM0MzsJfTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyOwomIzQzOwlWTUFfSVRFUkFUT1Iodm1pLCAmYW1wO21tLCAwKTsKJiM0MzsKJiM0MzsJY3VycmVudC0mZ3Q7bW0gPSAmYW1wO21tOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgYSBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZyBhdCBhZGRyZXNzIDB4MzAwMDAwIHdpdGggYSBwYWdlCiYjNDM7CSAqIG9mZnNldCBvZiAweDEwLCB3aGljaCB3ZSBleHBlY3QgdG8gYmUgcmVzZXQgdG8gdGhlIGFub255bW91cyBwYWdlCiYjNDM7CSAqIG9mZnNldC4KJiM0MzsJICovCiYjNDM7CWFkZHIgPSBfX21tYXBfcmVnaW9uKCZhbXA7ZmlsZSwgMHgzMDAwMDAsIDB4MzAwMCwgdm1hX2ZsYWdzLCAweDEwLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgaXQgdHJ1bHkgaXMgYW4gYW5vbnltb3VzIG1hcHBpbmcuICovCiYjNDM7CXZtYSA9IHZtYV9sb29rdXAoJmFtcDttbSwgYWRkcik7CiYjNDM7CUFTU0VSVF9ORSh2bWEsIE5VTEwpOwomIzQzOwlBU1NFUlRfVFJVRSh2bWFfaXNfYW5vbnltb3VzKHZtYSkpOwomIzQzOwlBU1NFUlRfRVEodm1hLSZndDt2bV9maWxlLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhLCBOVUxMKTsKJiM0MzsJLyogRXhwZWN0IGFub255bW91cyBwYWdlIG9mZnNldHMuICovCiYjNDM7CUFTU0VSVF9FUSh2bWEtJmd0O3ZtX3Bnb2ZmLCAweDMwMCk7CiYjNDM7CUFTU0VSVF9FUSh2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpLCAweDMwMCk7CiYjNDM7CiYjNDM7CWNsZWFudXBfbW0oJmFtcDttbSwgJmFtcDt2bWkpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydW5fbW1hcF90ZXN0cyhpbnQgKm51bV90ZXN0cywgaW50ICpudW1fZmFpbCkKIHsKIAlURVNUKG1tYXBfcmVnaW9uX2Jhc2ljKTsKJiM0MzsJVEVTVChwdXJlX2Fub25fZGV2X3plcm8pOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzQ5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogRGV0ZXJtaW5pbmcgRnV6emluZyBXb3J0aGluZXNzIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgb3IgbGF0ZW50IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gVGhlIGNyaXRlcmlhIGFyZSBhbHNvIGNsZWFyOiBjaGVjayBmb3IgdG91Y2ggcG9pbnRzIG9uIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIGNvcmUgc3Vic3lzdGVtcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgKmxvb2tzKiBwcm9taXNpbmcgZm9yIGZ1enppbmcuIFdlIGhhdmUgbW9kaWZpY2F0aW9ucyB0byBgbW0vdm1hLmNgLCBgbW0vY2hhci1tZW0uY2AsIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLCBhbmQgYG1tL2ludGVybmFsLmhgLCBhbGwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhcmVhcy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2VyaWVzIHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIGhvdyBgL2Rldi96ZXJvYCBtYXBwaW5ncyBpbnRlcmFjdCB3aXRoIGFub255bW91cyBtZW1vcnksIG1ha2luZyB0aGVtIHRydWx5IGFub255bW91cyBpbiB0aGUgY29yZSBtbS4gVGhpcyBzZWVtcyBsaWtlIGl0IHRvdWNoZXMgcmVhY2hhYmxlIGNvZGUgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGBXb3J0aEZ1enppbmdgIGlzIGxpa2VseSBgdHJ1ZWAuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgZGlmZiBzdGVwLWJ5LXN0ZXAgdG8gYmUgY2VydGFpbjoKCjEuICBXZSBoYXZlIHRoZSBzdGFuZGFyZCBmaWxlIHJlbmFtZXMvbW92ZXMgKE1BSU5UQUlORVJTLCBgZHJpdmVycy9jaGFyL01ha2VmaWxlYCwgYG1tL01ha2VmaWxlYCkuIFRoZXNlIGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgY29uY2VybmluZy4KMi4gIGBkcml2ZXJzL2NoYXIvbWVtLmNgIGlzIG1vdmVkIHRvIGBtbS9jaGFyLW1lbS5jYC4gVGhlIGNoYW5nZXMgdG8gYG1tYXBfemVyb19wcmVwYXJlKClgIGFuZCB0aGUgYWRkaXRpb24gb2YgYGZpbGVfaXNfZGV2X3plcm8oKWAgYXJlIGludGVyZXN0aW5nIGFuZCByZXF1aXJlIGEgY2xvc2VyIGxvb2suIFRoaXMgZGVmaW5pdGVseSBzZWVtcyBjb3JlIG1tIHJlbGF0ZWQuCjMuICBUaGUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9tbS5oYCAocmVtb3ZhbCBvZiBgdm1hX2Rlc2Nfc2V0X2Fub255bW91cygpYCkgYW5kIGBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaGAgKHNpbXBsaWZpY2F0aW9uIG9mIGBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KClgKSBwb2ludCB0byByZWZhY3RvcmluZyBvZiBob3cgVk1BJiMzOTtzIGFyZSBoYW5kbGVkLCB3aGljaCBzdHJlbmd0aGVucyB0aGUgaWRlYSBvZiBmdXp6aW5nLgo0LiAgYG1tL2ludGVybmFsLmhgIGluY2x1ZGVzIHRoZSBpbmxpbmUgZnVuY3Rpb24gbW9kaWZpY2F0aW9uIGluIGBtbWFwX2ZpbGVgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIHRoZSBwcm90b3R5cGUgYGZpbGVfaXNfZGV2X3plcm9gLiBUaGlzIGlzIGNlcnRhaW5seSByZWxhdGVkIHRvIFZNQSBzZXR1cCBhbmQgdGhlIG5ldyBjaGVja3MuCjUuICBgbW0vdm1hLmNgIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nOiBuZXcgZnVuY3Rpb25zIGxpa2UgYG1hcF9zZXRfYW5vbigpYCwgYG1hcF9pc19wcml2YXRlKClgLCBgbWFwX2lzX2Fub24oKWAsIGFuZCBjaGFuZ2VzIHRvIGBfX21tYXBfbmV3X3ZtYSgpYCwgYGNhbGxfbW1hcF9wcmVwYXJlKClgLCBhbmQgYF9fbW1hcF9yZWdpb24oKWAuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGNydWNpYWwuIFRoZSBjaGFuZ2VzIGluIGBjYWxsX21tYXBfcHJlcGFyZSgpYCBhbmQgYF9fbW1hcF9yZWdpb24oKWAgc2VlbSBsaWtlIGNvZGUgcGF0aHMgd2l0aCBoaWdoIHBvdGVudGlhbCBmb3IgaXNzdWVzLCBhbmQgdGhvc2UgYXJlIGRlZmluaXRlbHkgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KNi4gIFRoZSBjaGFuZ2UgaW4gYG1tL3ZtYS5oYCAocmVtb3ZpbmcgYSBgdm1hLSZndDt2bV9maWxlYCBjaGVjayBpbiBgYXNzZXJ0X3NhbmVfcGdvZmZgKSBhbHNvIGZlZWxzIGxpa2UgYSByZWZhY3RvcmluZy4KNy4gIEFuZCBvZiBjb3Vyc2UsIHdlIGhhdmUgcmVsYXRlZCBzZWxmdGVzdHMuCgpUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY29yZSBtbSBsb2dpYywgc3BlY2lmaWNhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggcmVzcGVjdCB0byBtYXBwaW5nIGFuZCBWTUEgbG9naWMgKGBtbS92bWEuY2AsIGBtbS9jaGFyLW1lbS5jYCwgYG1tL2ludGVybmFsLmhgLCBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLCBgaW5jbHVkZS9saW51eC9tbS5oYCwgYG1tL3ZtYS5oYCkuIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMsIHRoaXMgc2VlbXMgbGlrZSAqZXhhY3RseSogdGhlIGtpbmQgb2YgY2hhbmdlIHdlICp3YW50KiB0byBmdXp6LiBJdCYjMzk7cyBhIGNsZWFyICYjMzk7eWVzJiMzOTsgdG8gYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gY3JlYXRlIGEgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYCBhbmQgY29uc2lkZXIgd2hpY2ggYEVuYWJsZUNvbmZpZ3NgIG1pZ2h0IGJlIHVzZWZ1bC4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBkaWZmIGFuZCBjcmVhdGUgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBjaGFuZ2VzOgoKKiAgIGBjYWxsX21tYXBfcHJlcGFyZWAgKGluIG1tL3ZtYS5jKQoqICAgYF9fbW1hcF9uZXdfdm1hYCAoaW4gbW0vdm1hLmMpCiogICBgX19tbWFwX3JlZ2lvbmAgKGluIG1tL3ZtYS5jKQoqICAgYG1hcF9zZXRfYW5vbmAgKHN0YXRpYyBpbiBtbS92bWEuYykKKiAgIGBmaWxlX2lzX2Rldl96ZXJvYCAoaW4gbW0vY2hhci1tZW0uYykKKiAgIGBtbWFwX3plcm9fcHJlcGFyZWAgKGluIG1tL2NoYXItbWVtLmMpCiogICBgbW1hcF9maWxlYCAoaW5saW5lIGluIG1tL2ludGVybmFsLmgpCiogICBgbGluZWFyX2Fub25fcGFnZV9pbmRleGAgKGlubGluZSBpbiBpbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCkKKiAgIGBhc3NlcnRfc2FuZV9wZ29mZmAgKGlubGluZSBpbiBtbS92bWEuaCkKCkkmIzM5O2xsIG5vdyBuZWVkIHRvIHVzZSBgZ2l0IGdyZXBgIGFuZCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSB0byBzZWUgd2hpY2ggb3RoZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlc2UsIGFuZCBjb25zaWRlciBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgZ29hbCBpcyBhIGZ1enppbmcgY29uZmlndXJhdGlvbiB0aGF0IG1heGltaXplcyB0aGUgbGlrZWxpaG9vZAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsZV9pc19kZXZfemVybyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jaGFyLW1lbS5jPTY4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XG4tLVxubW0vY2hhci1tZW0uYy03MDgtLyoqXG5tbS9jaGFyLW1lbS5jOjcwOTogKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvXG5tbS9jaGFyLW1lbS5jLTcxMC0gKiBkcml2ZXI/XG4tLVxubW0vY2hhci1tZW0uYy03MTMtICovXG5tbS9jaGFyLW1lbS5jOjcxNDpib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG5tbS9jaGFyLW1lbS5jLTcxNS17XG4tLVxubW0vaW50ZXJuYWwuaD0xNjM3PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3Bpbl90cnlsb2NrKHZvaWQpXG4tLVxubW0vaW50ZXJuYWwuaC0xNjYwLS8qIGNoYXItbWVtLmMgKi9cbm1tL2ludGVybmFsLmg6MTY2MTpib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xubW0vaW50ZXJuYWwuaC0xNjYyLVxuLS1cbm1tL3ZtYS5jPTI3ODY9c3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuLS1cbm1tL3ZtYS5jLTI4MjAtXHQgKi9cbm1tL3ZtYS5jOjI4MjE6XHRpZiAobWFwX2lzX3ByaXZhdGUobWFwKSBcdTAwMjZcdTAwMjYgZmlsZV9pc19kZXZfemVybyhtYXAtXHUwMDNlZmlsZSkpXG5tbS92bWEuYy0yODIyLVx0XHRtYXBfc2V0X2Fub24obWFwKTtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTE2NDc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzO1xudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0xNjQ4LVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaDoxNjQ5OnN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0xNjUwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQyOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBNYXBwaW5nIGZvciBDaGFyYWN0ZXIgRGV2aWNlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB6ZXJvLWZpbGxlZCBtZW1vcnkgaXMgcHJlcGFyZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGNoYXJhY3RlciBkZXZpY2VzLiBUaGF0IG1lYW5zIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYG1tYXBfemVyb19wcmVwYXJlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBtbS9jaGFyLW1lbS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3QsIHRoZSBwcmVwYXJhdGlvbiBmb3IgdGhlIG1hZ2ljIG9mIG1hcHBpbmcgemVybyBwYWdlcyBpbnRvIHVzZXIgc3BhY2UgbWVtb3J5IG9jY3Vycy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIGJlZm9yZSB0aGUgYWN0dWFsIG1lbW9yeSBtYXBwaW5nIHRha2VzIHBsYWNlLCBvciB0aGUgYWN0dWFsIHplcm9pbmcgaXRzZWxmLiBHaXZlbiB0aGUgZmlsZSBhbmQgZnVuY3Rpb24gbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHN0ZXBzIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLCBvciBwb3NzaWJseSB6ZXJvaW5nIHRoZSBwYWdlcyBhaGVhZCBvZiB0aGUgbWFwcGluZy4gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBpbnRlcmFjdGlvbiBjb252ZXJnZSwgYW5kIEkmIzM5O20gcmVhZHkgdG8gZGlnIGluLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgbXkgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbWFwX3plcm9fcHJlcGFyZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jaGFyLW1lbS5jPTQ3Nj1zdGF0aWMgc3NpemVfdCByZWFkX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxubW0vY2hhci1tZW0uYy01MDItXG5tbS9jaGFyLW1lbS5jOjUwMzpzdGF0aWMgaW50IG1tYXBfemVyb19wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG5tbS9jaGFyLW1lbS5jLTUwNC17XG4tLVxubW0vY2hhci1tZW0uYz01MjM9c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VubWFwcGVkX2FyZWFfemVybyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5tbS9jaGFyLW1lbS5jLTUyOC1cdFx0Lypcbm1tL2NoYXItbWVtLmM6NTI5Olx0XHQgKiBtbWFwX3plcm9fcHJlcGFyZSgpIHdpbGwgY2FsbCBzaG1lbV96ZXJvX3NldHVwKCkgdG8gY3JlYXRlIGFcbm1tL2NoYXItbWVtLmMtNTMwLVx0XHQgKiBmaWxlLCBzbyB1c2Ugc2htZW0mIzM5O3MgZ2V0X3VubWFwcGVkX2FyZWEgaW4gY2FzZSBpdCBjYW4gYmVcbi0tXG5tbS9jaGFyLW1lbS5jPTY2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XG4tLVxubW0vY2hhci1tZW0uYy02NzEtXHQuc3BsaWNlX3dyaXRlXHQ9IHNwbGljZV93cml0ZV96ZXJvLFxubW0vY2hhci1tZW0uYzo2NzI6XHQubW1hcF9wcmVwYXJlXHQ9IG1tYXBfemVyb19wcmVwYXJlLFxubW0vY2hhci1tZW0uYy02NzMtXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jPTEzPXN0cnVjdCB0YXNrX3N0cnVjdCBfX2N1cnJlbnQ7XG50b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYy0xNC1cbnRvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jOjE1OnN0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbnRvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jLTE2LXtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYz0yMD1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcbnRvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jOjIxOlx0Lm1tYXBfcHJlcGFyZSA9IG1tYXBfemVyb19wcmVwYXJlLFxudG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMtMjItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFwcGluZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBtZW1vcnkgbWFwcGluZyBpcyBiZWluZyBwcmVwYXJlZCBhbmQgZXhlY3V0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGNhbGxfbW1hcF9wcmVwYXJlYCBhbmQgYF9fbW1hcF9yZWdpb25gIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGxpa2VseSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgYW5kIHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiBgbW0vdm1hLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vdm1hLmNgIHRvIGdyYXNwIHRoZSBmbG93IGFuZCBjb250ZXh0IGFyb3VuZCB0aG9zZSBzcGVjaWZpYyBsaW5lcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgaXMgYmVpbmcgc2V0IHVwIGFuZCBob3cgdGhlIHJlZ2lvbiBpcyBhY3R1YWxseSBlc3RhYmxpc2hlZC4gVGhpcyBzaG91bGQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwcmUtY29uZGl0aW9ucywgdGhlIGFzc3VtcHRpb25zIGJlaW5nIG1hZGUsIGFuZCB3aGF0IHRoZSBjb2RlIGlzICphY3R1YWxseSogZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc4MDpcdCAqIHRoYXQgYXJlIHBlcm1pdHRlZCB0byBiZSB1cGRhdGVkIGJ5IHRoZSBjYWxsZXIuXG4yNzgxOlx0ICpcbjI3ODI6XHQgKiBBbGwgYnV0IHVzZXItZGVmaW5lZCBmaWVsZHMgd2lsbCBiZSBwcmUtcG9wdWxhdGVkIHdpdGggb3JpZ2luYWwgdmFsdWVzLlxuMjc4MzpcdCAqXG4yNzg0Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuMjc4NTpcdCAqL1xuMjc4NjpcdHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbjI3ODc6XHRcdFx0c3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbjI3ODg6XHR7XG4yNzg5Olx0XHRpbnQgZXJyO1xuMjc5MDpcdFxuMjc5MTpcdFx0LyogSW52b2tlIHRoZSBob29rLiAqL1xuMjc5MjpcdFx0ZXJyID0gdmZzX21tYXBfcHJlcGFyZShtYXAtXHUwMDNlZmlsZSwgZGVzYyk7XG4yNzkzOlx0XHRpZiAoZXJyKVxuMjc5NDpcdFx0XHRyZXR1cm4gZXJyO1xuMjc5NTpcdFxuMjc5NjpcdFx0LyogSXQmIzM5O3MgaW52YWxpZCBmb3IgbW1hcF9wcmVwcmFyZSBob29rcyB0byBjbGVhciB2bV9vcHMuICovXG4yNzk3Olx0XHRpZiAoIWRlc2MtXHUwMDNldm1fb3BzKVxuMjc5ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3OTk6XHRcbjI4MDA6XHRcdGVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTtcbjI4MDE6XHRcdGlmIChlcnIpXG4yODAyOlx0XHRcdHJldHVybiBlcnI7XG4yODAzOlx0XG4yODA0Olx0XHQvKiBVcGRhdGUgZmllbGRzIHBlcm1pdHRlZCB0byBiZSBjaGFuZ2VkLiAqL1xuMjgwNTpcdFx0bWFwLVx1MDAzZXBnb2ZmID0gZGVzYy1cdTAwM2VwZ29mZjtcbjI4MDY6XHRcdGlmIChkZXNjLVx1MDAzZXZtX2ZpbGUgIT0gbWFwLVx1MDAzZWZpbGUpIHtcbjI4MDc6XHRcdFx0bWFwLVx1MDAzZWZpbGVfZG9lc250X25lZWRfZ2V0ID0gdHJ1ZTtcbjI4MDg6XHRcdFx0bWFwLVx1MDAzZWZpbGUgPSBkZXNjLVx1MDAzZXZtX2ZpbGU7XG4yODA5Olx0XHR9XG4yODEwOlx0XHRtYXAtXHUwMDNldm1hX2ZsYWdzID0gZGVzYy1cdTAwM2V2bWFfZmxhZ3M7XG4yODExOlx0XHRtYXAtXHUwMDNlcGFnZV9wcm90ID0gZGVzYy1cdTAwM2VwYWdlX3Byb3Q7XG4yODEyOlx0XHQvKiBVc2VyLWRlZmluZWQgZmllbGRzLiAqL1xuMjgxMzpcdFx0bWFwLVx1MDAzZXZtX29wcyA9IGRlc2MtXHUwMDNldm1fb3BzO1xuMjgxNDpcdFx0bWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGRlc2MtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuMjgxNTpcdFxuMjgxNjpcdFx0LypcbjI4MTc6XHRcdCAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZ1xuMjgxODpcdFx0ICogYW5vbnltb3VzIG1hcHBpbmdzLiBSYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVzZSBtYXBwaW5ncyB0byBiZSBvZGRcbjI4MTk6XHRcdCAqIG91dGxpZXJzLCBzaW1wbHkgbWFrZSB0aGVtIHRydWx5IGFub255bW91cy5cbjI4MjA6XHRcdCAqL1xuMjgyMTpcdFx0aWYgKG1hcF9pc19wcml2YXRlKG1hcCkgXHUwMDI2XHUwMDI2IGZpbGVfaXNfZGV2X3plcm8obWFwLVx1MDAzZWZpbGUpKVxuMjgyMjpcdFx0XHRtYXBfc2V0X2Fub24obWFwKTtcbjI4MjM6XHRcbjI4MjQ6XHRcdHJldHVybiAwO1xuMjgyNTpcdH1cbjI4MjY6XHRcbjI4Mjc6XHRzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yODI4Olx0XHRcdHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4yODI5Olx0e1xuMjgzMDpcdFx0dm1hLVx1MDAzZXZtX29wcyA9IG1hcC1cdTAwM2V2bV9vcHM7XG4yODMxOlx0XHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbjI4MzI6XHR9XG4yODMzOlx0XG4yODM0Olx0LypcbjI4MzU6XHQgKiBBcmUgd2UgZ3VhcmFudGVlZCBubyBkcml2ZXIgY2FuIGNoYW5nZSBzdGF0ZSBzdWNoIGFzIHRvIHByZWNsdWRlIEtTTSBtZXJnaW5nP1xuMjgzNjpcdCAqIElmIHNvLCBsZXQmIzM5O3Mgc2V0IHRoZSBLU00gbWVyZ2VhYmxlIGZsYWcgZWFybHkgc28gd2UgZG9uJiMzOTt0IGJyZWFrIFZNQSBtZXJnaW5nLlxuMjgzNzpcdCAqL1xuMjgzODpcdHN0YXRpYyBib29sIGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4yODM5Olx0e1xuMjg0MDpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBtYXAtXHUwMDNlZmlsZTtcbjI4NDE6XHRcbjI4NDI6XHRcdC8qIEFub255bW91cyBtYXBwaW5ncyBoYXZlIG5vIGRyaXZlciB3aGljaCBjYW4gY2hhbmdlIHRoZW0uICovXG4yODQzOlx0XHRpZiAoIWZpbGUpXG4yODQ0Olx0XHRcdHJldHVybiB0cnVlO1xuMjg0NTpcdFxuMjg0NjpcdFx0LypcbjI4NDc6XHRcdCAqIElmIC5tbWFwX3ByZXBhcmUoKSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGRyaXZlciB3aWxsIGhhdmUgYWxyZWFkeVxuMjg0ODpcdFx0ICogbWFuaXB1bGF0ZWQgc3RhdGUgcHJpb3IgdG8gdXBkYXRpbmcgS1NNIGZsYWdzLiBTbyBubyBuZWVkIHRvIHdvcnJ5XG4yODQ5Olx0XHQgKiBhYm91dCBtbWFwIGNhbGxiYWNrcyBtb2RpZnlpbmcgVk1BIGZsYWdzIGFmdGVyIHRoZSBLU00gZmxhZyBoYXMgYmVlblxuMjg1MDpcdFx0ICogdXBkYXRlZCBoZXJlLCB3aGljaCBjb3VsZCBvdGhlcndpc2UgYWZmZWN0IEtTTSBlbGlnaWJpbGl0eS5cbjI4NTE6XHRcdCAqL1xuMjg1MjpcdFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VtbWFwX3ByZXBhcmUpXG4yODUzOlx0XHRcdHJldHVybiB0cnVlO1xuMjg1NDpcdFxuMjg1NTpcdFx0Lyogc2htZW0gaXMgc2FmZS4gKi9cbjI4NTY6XHRcdGlmIChzaG1lbV9maWxlKGZpbGUpKVxuMjg1NzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjI4NTg6XHRcbjI4NTk6XHRcdC8qIEFueSBvdGhlciAubW1hcCBjYWxsYmFjayBpcyBub3Qgc2FmZS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYxMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBNZW1vcnkgTWFwcGluZyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgX19tbWFwX3JlZ2lvbmAgYWdhaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3Mgbm90IGp1c3QgaXNvbGF0ZSBvbiB0aGF0IGZ1bmN0aW9uLCBidXQgYnJvYWRlbiB0aGUgc2NvcGUgc2xpZ2h0bHkuIFRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIG9mIGNvZGUuIFdoYXQgY2FsbHMgYF9fbW1hcF9yZWdpb25gPyBXaGF0IGRhdGEgZG9lcyBpdCBvcGVyYXRlIG9uPyBXaGF0IGZvbGxvd3MgaXRzIGV4ZWN1dGlvbj8gSSYjMzk7bSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBlcnJvciBjaGVja3MsIG9yIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucyBpbiBpdHMgdmljaW5pdHk/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBzaW1wbHkgbW9kaWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIG1hcHBpbmc/IEEgZGVlcGVyIGRpdmUgYXJvdW5kIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gd2lsbCBnaXZlIGEgbXVjaCBjbGVhcmVyIHBpY3R1cmUuIEkmIzM5O20gYWZ0ZXIgdGhlIGJpZ2dlciBzdG9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg4MDpcdFx0fTtcbjI4ODE6XHRcdGJvb2wgYWxsb2NhdGVkX25ldyA9IGZhbHNlO1xuMjg4MjpcdFx0aW50IGVycm9yO1xuMjg4MzpcdFxuMjg4NDpcdFx0bWFwLmNoZWNrX2tzbV9lYXJseSA9IGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KFx1MDAyNm1hcCk7XG4yODg1Olx0XG4yODg2Olx0XHRlcnJvciA9IF9fbW1hcF9zZXR1cChcdTAwMjZtYXAsIFx1MDAyNmRlc2MsIHVmKTtcbjI4ODc6XHRcdGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IGhhdmVfbW1hcF9wcmVwYXJlKVxuMjg4ODpcdFx0XHRlcnJvciA9IGNhbGxfbW1hcF9wcmVwYXJlKFx1MDAyNm1hcCwgXHUwMDI2ZGVzYyk7XG4yODg5Olx0XHRpZiAoZXJyb3IpXG4yODkwOlx0XHRcdGdvdG8gYWJvcnRfbXVubWFwO1xuMjg5MTpcdFxuMjg5MjpcdFx0aWYgKG1hcC5jaGVja19rc21fZWFybHkpXG4yODkzOlx0XHRcdHVwZGF0ZV9rc21fZmxhZ3MoXHUwMDI2bWFwKTtcbjI4OTQ6XHRcbjI4OTU6XHRcdC8qIEF0dGVtcHQgdG8gbWVyZ2Ugd2l0aCBhZGphY2VudCBWTUFzLi4uICovXG4yODk2Olx0XHRpZiAobWFwLnByZXYgfHwgbWFwLm5leHQpIHtcbjI4OTc6XHRcdFx0Vk1HX01NQVBfU1RBVEUodm1nLCBcdTAwMjZtYXAsIC8qIHZtYSA9ICovIE5VTEwpO1xuMjg5ODpcdFxuMjg5OTpcdFx0XHR2bWEgPSB2bWFfbWVyZ2VfbmV3X3JhbmdlKFx1MDAyNnZtZyk7XG4yOTAwOlx0XHR9XG4yOTAxOlx0XG4yOTAyOlx0XHQvKiAuLi5idXQgaWYgd2UgY2FuJiMzOTt0LCBhbGxvY2F0ZSBhIG5ldyBWTUEuICovXG4yOTAzOlx0XHRpZiAoIXZtYSkge1xuMjkwNDpcdFx0XHRlcnJvciA9IF9fbW1hcF9uZXdfdm1hKFx1MDAyNm1hcCwgXHUwMDI2dm1hLCBcdTAwMjZkZXNjLmFjdGlvbik7XG4yOTA1Olx0XHRcdGlmIChlcnJvcilcbjI5MDY6XHRcdFx0XHRnb3RvIHVuYWNjdF9lcnJvcjtcbjI5MDc6XHRcdFx0YWxsb2NhdGVkX25ldyA9IHRydWU7XG4yOTA4Olx0XHR9XG4yOTA5Olx0XG4yOTEwOlx0XHRpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgXHUwMDI2XHUwMDI2ICFtYXBfaXNfYW5vbihcdTAwMjZtYXApKVxuMjkxMTpcdFx0XHRzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHModm1hLCBcdTAwMjZtYXApO1xuMjkxMjpcdFxuMjkxMzpcdFx0X19tbWFwX2NvbXBsZXRlKFx1MDAyNm1hcCwgdm1hKTtcbjI5MTQ6XHRcbjI5MTU6XHRcdGlmIChoYXZlX21tYXBfcHJlcGFyZSBcdTAwMjZcdTAwMjYgYWxsb2NhdGVkX25ldykge1xuMjkxNjpcdFx0XHRlcnJvciA9IG1tYXBfYWN0aW9uX2NvbXBsZXRlKHZtYSwgXHUwMDI2ZGVzYy5hY3Rpb24sXG4yOTE3Olx0XHRcdFx0XHRcdCAgICAgLyppc19jb21wYXQ9Ki9mYWxzZSk7XG4yOTE4Olx0XHRcdGlmIChlcnJvcilcbjI5MTk6XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4yOTIwOlx0XHR9XG4yOTIxOlx0XG4yOTIyOlx0XHRyZXR1cm4gYWRkcjtcbjI5MjM6XHRcbjI5MjQ6XHRcdC8qIEFjY291bnRpbmcgd2FzIGRvbmUgYnkgX19tbWFwX3NldHVwKCkuICovXG4yOTI1Olx0dW5hY2N0X2Vycm9yOlxuMjkyNjpcdFx0aWYgKG1hcC5jaGFyZ2VkKVxuMjkyNzpcdFx0XHR2bV91bmFjY3RfbWVtb3J5KG1hcC5jaGFyZ2VkKTtcbjI5Mjg6XHRhYm9ydF9tdW5tYXA6XG4yOTI5Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU2MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG1tYXBfZmlsZWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgbW1hcF9maWxlYCwgc28gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgaXRzIGRlZmluaXRpb24gaW4gYG1tL2ludGVybmFsLmhgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwYXJhbWV0ZXJzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0ICpjYWxsKiBgbW1hcF9maWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBjbHVlcyB3aWxsIGxpZSDigJMgc2VlaW5nIGhvdyBpdCYjMzk7cyB1c2VkIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBpbnNpZ2h0IGludG8gaXRzIGludGVuZGVkIGJlaGF2aW9yIGFuZCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggYG1tYXBfZmlsZWAgb3BlcmF0ZXMuIEtub3dpbmcgdGhlIGNhbGxlcnMgaXMgKmtleSogdG8gZ3Jhc3BpbmcgaXRzIG92ZXJhbGwgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tYXBfZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy85cC92ZnNfZmlsZS5jLTMwLVxuZnMvOXAvdmZzX2ZpbGUuYzozMTpzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHY5ZnNfbW1hcF9maWxlX3ZtX29wcztcbmZzLzlwL3Zmc19maWxlLmMtMzItXG4tLVxuZnMvOXAvdmZzX2ZpbGUuYz00NjI9djlmc19maWxlX21tYXBfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLS1cbmZzLzlwL3Zmc19maWxlLmMtNDc3LVx0aWYgKCFyZXR2YWwpXG5mcy85cC92ZnNfZmlsZS5jOjQ3ODpcdFx0ZGVzYy1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2OWZzX21tYXBfZmlsZV92bV9vcHM7XG5mcy85cC92ZnNfZmlsZS5jLTQ3OS1cbi0tXG5mcy85cC92ZnNfZmlsZS5jPTQ4OT1zdGF0aWMgdm9pZCB2OWZzX21tYXBfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuZnMvOXAvdmZzX2ZpbGUuYy01MDEtXG5mcy85cC92ZnNfZmlsZS5jOjUwMjpzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHY5ZnNfbW1hcF9maWxlX3ZtX29wcyA9IHtcbmZzLzlwL3Zmc19maWxlLmMtNTAzLVx0LmNsb3NlID0gdjlmc19tbWFwX3ZtX2Nsb3NlLFxuLS1cbmZzL2JhY2tpbmctZmlsZS5jPTMyOT1pbnQgYmFja2luZ19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL2JhY2tpbmctZmlsZS5jLTMzNy1cbmZzL2JhY2tpbmctZmlsZS5jOjMzODpcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcbmZzL2JhY2tpbmctZmlsZS5jLTMzOS1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZnMvYmluZm10X2VsZi5jPTY0Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb2FkX2VsZl9pbnRlcnAoc3RydWN0IGVsZmhkciAqaW50ZXJwX2VsZl9leCxcbi0tXG5mcy9iaW5mbXRfZWxmLmMtNjYwLVx0XHRnb3RvIG91dDtcbmZzL2JpbmZtdF9lbGYuYzo2NjE6XHRpZiAoIWNhbl9tbWFwX2ZpbGUoaW50ZXJwcmV0ZXIpKVxuZnMvYmluZm10X2VsZi5jLTY2Mi1cdFx0Z290byBvdXQ7XG4tLVxuZnMvYmluZm10X2VsZi5jPTgyOT1zdGF0aWMgaW50IGxvYWRfZWxmX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9lbGYuYy04NjItXHRcdGdvdG8gb3V0O1xuZnMvYmluZm10X2VsZi5jOjg2MzpcdGlmICghY2FuX21tYXBfZmlsZShicHJtLVx1MDAzZWZpbGUpKVxuZnMvYmluZm10X2VsZi5jLTg2NC1cdFx0Z290byBvdXQ7XG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jPTEwND1zdGF0aWMgaW50IGlzX2VsZihzdHJ1Y3QgZWxmaGRyICpoZHIsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0xMTEtXHRcdHJldHVybiAwO1xuZnMvYmluZm10X2VsZl9mZHBpYy5jOjExMjpcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0xMTMtXHRcdHJldHVybiAwO1xuLS1cbmZzL2NvZGEvZmlsZS5jPTE1MT1jb2RhX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqY29kYV9maWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5mcy9jb2RhL2ZpbGUuYy0xNjItXG5mcy9jb2RhL2ZpbGUuYzoxNjM6XHRpZiAoIWNhbl9tbWFwX2ZpbGUoaG9zdF9maWxlKSlcbmZzL2NvZGEvZmlsZS5jLTE2NC1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuZnMvZWNyeXB0ZnMvZmlsZS5jPTE4Nj1zdGF0aWMgaW50IGVjcnlwdGZzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmZzL2VjcnlwdGZzL2ZpbGUuYy0xOTMtXHQgKi9cbmZzL2VjcnlwdGZzL2ZpbGUuYzoxOTQ6XHRpZiAoIWNhbl9tbWFwX2ZpbGUobG93ZXJfZmlsZSkpXG5mcy9lY3J5cHRmcy9maWxlLmMtMTk1LVx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5mcy9mMmZzL2YyZnMuaD0zNjM1PXN0YXRpYyBpbmxpbmUgaW50IGYyZnNfZXhpc3RfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2YyZnMvZjJmcy5oLTM2MzktXG5mcy9mMmZzL2YyZnMuaDozNjQwOnN0YXRpYyBpbmxpbmUgaW50IGYyZnNfaXNfbW1hcF9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9mMmZzL2YyZnMuaC0zNjQxLXtcbi0tXG5mcy9mMmZzL2YyZnMuaD00ODcxPXN0YXRpYyBpbmxpbmUgYm9vbCBmMmZzX2Rpc2FibGVfY29tcHJlc3NlZF9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZjJmcy9mMmZzLmgtNDg4MC1cdH1cbmZzL2YyZnMvZjJmcy5oOjQ4ODE6XHRpZiAoZjJmc19pc19tbWFwX2ZpbGUoaW5vZGUpIHx8IGF0b21pY19yZWFkKFx1MDAyNmZpLVx1MDAzZXdyaXRlYmFjaykgfHxcbmZzL2YyZnMvZjJmcy5oLTQ4ODItXHRcdChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IEYyRlNfSEFTX0JMT0NLUyhpbm9kZSkpKSB7XG4tLVxuZnMvZjJmcy9mMmZzLmg9NTA0NT1zdGF0aWMgaW5saW5lIGJvb2wgZjJmc19tYXlfY29tcHJlc3Moc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9mMmZzL2YyZnMuaC01MDQ4LVx0XHRmMmZzX2lzX2F0b21pY19maWxlKGlub2RlKSB8fCBmMmZzX2hhc19pbmxpbmVfZGF0YShpbm9kZSkgfHxcbmZzL2YyZnMvZjJmcy5oOjUwNDk6XHRcdGYyZnNfaXNfbW1hcF9maWxlKGlub2RlKSlcbmZzL2YyZnMvZjJmcy5oLTUwNTAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9mMmZzL2ZpbGUuYz00NzI1PXN0YXRpYyBpbnQgZjJmc19pb2Nfc2V0X2NvbXByZXNzX29wdGlvbihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvZjJmcy9maWxlLmMtNDc1OC1cbmZzL2YyZnMvZmlsZS5jOjQ3NTk6XHRpZiAoZjJmc19pc19tbWFwX2ZpbGUoaW5vZGUpIHx8IGdldF9kaXJ0eV9wYWdlcyhpbm9kZSkpIHtcbmZzL2YyZnMvZmlsZS5jLTQ3NjAtXHRcdHJldCA9IC1FQlVTWTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MTk5ND1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB7XG4tLVxuaW5jbHVkZS9saW51eC9mcy5oLTIwMzktLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cbmluY2x1ZGUvbGludXgvZnMuaDoyMDQwOnN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlKVxuaW5jbHVkZS9saW51eC9mcy5oLTIwNDEte1xuLS1cbmluY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oPTIwMT1MU01fSE9PSyhpbnQsIDAsIG1tYXBfYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyKVxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmg6MjAyOkxTTV9IT09LKGludCwgMCwgbW1hcF9maWxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyByZXFwcm90LFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgtMjAzLVx0IHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDc5PWludCBzZWN1cml0eV9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00ODAtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0ODE6aW50IHNlY3VyaXR5X21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQ4Mi1cdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9MTE2Nj1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtMTE3Mi1cbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDoxMTczOnN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNzQtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxuaXBjL3NobS5jPTE1MjE9bG9uZyBkb19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnLFxuLS1cbmlwYy9zaG0uYy0xNjQ1LVxuaXBjL3NobS5jOjE2NDY6XHRlcnIgPSBzZWN1cml0eV9tbWFwX2ZpbGUoZmlsZSwgcHJvdCwgZmxhZ3MpO1xuaXBjL3NobS5jLTE2NDctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jPTM0NT1CVEZfSUQoZnVuYywgYnBmX2xzbV9wYXRoX2Nob3duKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbS5jLTM0Ny1cbmtlcm5lbC9icGYvYnBmX2xzbS5jOjM0ODpCVEZfSUQoZnVuYywgYnBmX2xzbV9tbWFwX2ZpbGUpXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0zNDktQlRGX0lEKGZ1bmMsIGJwZl9sc21fbmV0bGlua19zZW5kKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jLTktLypcbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jOjEwOiAqIFN0cm9uZyBkZWZpbml0aW9uIG9mIHRoZSBtbWFwX2ZpbGUoKSBCUEYgTFNNIGhvb2suIFRoZSBfX251bGxhYmxlIHN1ZmZpeCBvblxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmMtMTEtICogdGhlIHN0cnVjdCBmaWxlIHBvaW50ZXIgcGFyYW1ldGVyIG5hbWUgbWFya3MgaXQgYXMgUFRSX01BWUJFX05VTEwuIFRoaXNcbi0tXG5rZXJuZWwvYnBmL2JwZl9sc21fcHJvdG8uYy0xNC0gKi9cbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jOjE1OmludCBicGZfbHNtX21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZV9fbnVsbGFibGUsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCxcbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jLTE2LVx0XHQgICAgICB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxubW0vaW50ZXJuYWwuaD0yMTk9c3RhdGljIGlubGluZSB2b2lkICpmb2xpb19yYXdfbWFwcGluZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ludGVybmFsLmgtMjM1LSAqL1xubW0vaW50ZXJuYWwuaDoyMzY6c3RhdGljIGlubGluZSBpbnQgbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbm1tL2ludGVybmFsLmgtMjM3LXtcbi0tXG5tbS9tbWFwLmM9MzM4PXVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21tYXAuYy00ODQtXG5tbS9tbWFwLmM6NDg1Olx0XHRcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcbm1tL21tYXAuYy00ODYtXHRcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbi0tXG5tbS9tbWFwLmM9MTEwMT1TWVNDQUxMX0RFRklORTUocmVtYXBfZmlsZV9wYWdlcywgdW5zaWduZWQgbG9uZywgc3RhcnQsIHVuc2lnbmVkIGxvbmcsIHNpemUsXG4tLVxubW0vbW1hcC5jLTExNTctXHQvKiBDYWxsIG91dHNpZGUgbW1hcF9sb2NrIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBjYWxsZXJzLiAqL1xubW0vbW1hcC5jOjExNTg6XHRyZXQgPSBzZWN1cml0eV9tbWFwX2ZpbGUoZmlsZSwgcHJvdCwgZmxhZ3MpO1xubW0vbW1hcC5jLTExNTktXHRpZiAocmV0KSB7XG4tLVxubW0vbm9tbXUuYz02OTA9c3RhdGljIGludCB2YWxpZGF0ZV9tbWFwX3JlcXVlc3Qoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vbm9tbXUuYy03MjItXHRcdC8qIGZpbGVzIG11c3Qgc3VwcG9ydCBtbWFwICovXG5tbS9ub21tdS5jOjcyMzpcdFx0aWYgKCFjYW5fbW1hcF9maWxlKGZpbGUpKVxubW0vbm9tbXUuYy03MjQtXHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxubW0vbm9tbXUuYz04OTM9c3RhdGljIGludCBkb19tbWFwX3NoYXJlZF9maWxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL25vbW11LmMtODk2LVxubW0vbm9tbXUuYzo4OTc6XHRyZXQgPSBtbWFwX2ZpbGUodm1hLVx1MDAzZXZtX2ZpbGUsIHZtYSk7XG5tbS9ub21tdS5jLTg5OC1cdGlmIChyZXQgPT0gMCkge1xuLS1cbm1tL25vbW11LmM9OTE0PXN0YXRpYyBpbnQgZG9fbW1hcF9wcml2YXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL25vbW11LmMtOTI5LVx0aWYgKGNhcGFiaWxpdGllcyBcdTAwMjYgTk9NTVVfTUFQX0RJUkVDVCkge1xubW0vbm9tbXUuYzo5MzA6XHRcdHJldCA9IG1tYXBfZmlsZSh2bWEtXHUwMDNldm1fZmlsZSwgdm1hKTtcbm1tL25vbW11LmMtOTMxLVx0XHQvKiBzaG91bGRuJiMzOTt0IHJldHVybiBzdWNjZXNzIGlmIHdlJiMzOTtyZSBub3Qgc2hhcmluZyAqL1xuLS1cbm1tL3V0aWwuYz01NjU9dW5zaWduZWQgbG9uZyB2bV9tbWFwX3Bnb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vdXRpbC5jLTU3NC1cbm1tL3V0aWwuYzo1NzU6XHRyZXQgPSBzZWN1cml0eV9tbWFwX2ZpbGUoZmlsZSwgcHJvdCwgZmxhZyk7XG5tbS91dGlsLmMtNTc2LVx0aWYgKCFyZXQpXG4tLVxubW0vdm1hLmM9MjUxOT1zdGF0aWMgaW50IF9fbW1hcF9zZXR1cChzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxuLS1cbm1tL3ZtYS5jLTI1NzEtXHQgKiBjYW5ub3QgcmFjZSB3aXRoIHRoZSBmcmVlaW5nIGxhdGVyIGluIHRoZSB0cnVuY2F0ZSBzY2VuYXJpby5cbm1tL3ZtYS5jOjI1NzI6XHQgKiBUaGlzIGlzIGFsc28gbmVlZGVkIGZvciBtbWFwX2ZpbGUoKSwgd2hpY2ggaXMgd2h5IHZtX29wc1xubW0vdm1hLmMtMjU3My1cdCAqIGNsb3NlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cbi0tXG5tbS92bWEuYz0yNTgyPXN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuLS1cbm1tL3ZtYS5jLTI1OTQtXG5tbS92bWEuYzoyNTk1Olx0ZXJyb3IgPSBtbWFwX2ZpbGUodm1hLVx1MDAzZXZtX2ZpbGUsIHZtYSk7XG5tbS92bWEuYy0yNTk2LVx0aWYgKGVycm9yKSB7XG4tLVxuc2NyaXB0cy9yZWNvcmRtY291bnQuYz0xNTE9c3RhdGljIHZvaWQgKiB1bWFsbG9jKHNpemVfdCBzaXplKVxuLS1cbnNjcmlwdHMvcmVjb3JkbWNvdW50LmMtMTc1LSAqL1xuc2NyaXB0cy9yZWNvcmRtY291bnQuYzoxNzY6c3RhdGljIHZvaWQgKm1tYXBfZmlsZShjaGFyIGNvbnN0ICpmbmFtZSlcbnNjcmlwdHMvcmVjb3JkbWNvdW50LmMtMTc3LXtcbi0tXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jPTUxMT1zdGF0aWMgaW50IGRvX2ZpbGUoY2hhciBjb25zdCAqY29uc3QgZm5hbWUpXG4tLVxuc2NyaXB0cy9yZWNvcmRtY291bnQuYy01MTYtXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jOjUxNzpcdGVoZHIgPSBtbWFwX2ZpbGUoZm5hbWUpO1xuc2NyaXB0cy9yZWNvcmRtY291bnQuYy01MTgtXHRpZiAoIWVoZHIpXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9NTYxPXN0YXRpYyBpbnQgY29tbW9uX21tYXAoY29uc3QgY2hhciAqb3AsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtNTgyLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6NTgzOnN0YXRpYyBpbnQgYXBwYXJtb3JfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy01ODQtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jPTE3Njc9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3QgYXBwYXJtb3JfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTc5NC1cdExTTV9IT09LX0lOSVQoZmlsZV9mcmVlX3NlY3VyaXR5LCBhcHBhcm1vcl9maWxlX2ZyZWVfc2VjdXJpdHkpLFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTc5NTpcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBhcHBhcm1vcl9tbWFwX2ZpbGUpLFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMtMTc5Ni1cdExTTV9IT09LX0lOSVQoZmlsZV9tcHJvdGVjdCwgYXBwYXJtb3JfZmlsZV9tcHJvdGVjdCksXG4tLVxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jPTEwNj1zdGF0aWMgaW50IG1tYXBfdmlvbGF0aW9uX2NoZWNrKGVudW0gaW1hX2hvb2tzIGZ1bmMsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYy0xMjEtXHRcdGludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX0RBVEEsIGlub2RlLCAqcGF0aG5hbWUsXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmM6MTIyOlx0XHRcdFx0ICAgIFwmIzM0O21tYXBfZmlsZVwmIzM0OywgXCYjMzQ7bW1hcHBlZF93cml0ZXJzXCYjMzQ7LCByYywgMCk7XG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMtMTIzLVx0fVxuLS1cbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYz0xMzUzPXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IGltYV9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMtMTM1OS1cdExTTV9IT09LX0lOSVQoZmlsZV9yZWxlYXNlLCBpbWFfZmlsZV9mcmVlKSxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYzoxMzYwOlx0TFNNX0hPT0tfSU5JVChtbWFwX2ZpbGUsIGltYV9maWxlX21tYXApLFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jLTEzNjEtXHRMU01fSE9PS19JTklUKGZpbGVfbXByb3RlY3QsIGltYV9maWxlX21wcm90ZWN0KSxcbi0tXG5zZWN1cml0eS9pcGUvaG9va3MuYz01Mz1pbnQgaXBlX2Jwcm1fY3JlZHNfZm9yX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5zZWN1cml0eS9pcGUvaG9va3MuYy02NS0vKipcbnNlY3VyaXR5L2lwZS9ob29rcy5jOjY2OiAqIGlwZV9tbWFwX2ZpbGUoKSAtIGlwZSBzZWN1cml0eSBob29rIGZ1bmN0aW9uIGZvciBtbWFwIGNoZWNrLlxuc2VjdXJpdHkvaXBlL2hvb2tzLmMtNjctICogQGY6IEZpbGUgYmVpbmcgbW1hcCYjMzk7ZC4gQ2FuIGJlIE5VTEwgaW4gdGhlIGNhc2Ugb2YgYW5vbnltb3VzIG1lbW9yeS5cbi0tXG5zZWN1cml0eS9pcGUvaG9va3MuYy03OS0gKi9cbnNlY3VyaXR5L2lwZS9ob29rcy5jOjgwOmludCBpcGVfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBsb25nIHJlcXByb3QgX19hbHdheXNfdW51c2VkLFxuc2VjdXJpdHkvaXBlL2hvb2tzLmMtODEtXHRcdCAgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbnNlY3VyaXR5L2lwZS9ob29rcy5oPTI4PWludCBpcGVfYnBybV9jcmVkc19mb3JfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTtcbnNlY3VyaXR5L2lwZS9ob29rcy5oLTI5LVxuc2VjdXJpdHkvaXBlL2hvb2tzLmg6MzA6aW50IGlwZV9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCwgdW5zaWduZWQgbG9uZyBwcm90LFxuc2VjdXJpdHkvaXBlL2hvb2tzLmgtMzEtXHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncyk7XG4tLVxuc2VjdXJpdHkvaXBlL2lwZS5jPTQ4PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IGlwZV9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9pcGUvaXBlLmMtNTAtXHRMU01fSE9PS19JTklUKGJwcm1fY3JlZHNfZm9yX2V4ZWMsIGlwZV9icHJtX2NyZWRzX2Zvcl9leGVjKSxcbnNlY3VyaXR5L2lwZS9pcGUuYzo1MTpcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBpcGVfbW1hcF9maWxlKSxcbnNlY3VyaXR5L2lwZS9pcGUuYy01Mi1cdExTTV9IT09LX0lOSVQoZmlsZV9tcHJvdGVjdCwgaXBlX2ZpbGVfbXByb3RlY3QpLFxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MjUzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1hcF9wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTY3LS8qKlxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNTY4OiAqIHNlY3VyaXR5X21tYXBfZmlsZSgpIC0gQ2hlY2sgaWYgbW1hcCYjMzk7aW5nIGEgZmlsZSBpcyBhbGxvd2VkXG5zZWN1cml0eS9zZWN1cml0eS5jLTI1NjktICogQGZpbGU6IGZpbGVcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI1NzctICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjI1Nzg6aW50IHNlY3VyaXR5X21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90LFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTc5LVx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjU4MC17XG5zZWN1cml0eS9zZWN1cml0eS5jOjI1ODE6XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhtbWFwX2ZpbGUsIGZpbGUsIHByb3QsIG1tYXBfcHJvdChmaWxlLCBwcm90KSxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjU4Mi1cdFx0XHQgICAgIGZsYWdzKTtcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTI1OTEtICogQ2hlY2sgcGVybWlzc2lvbnMgZm9yIGEgbW1hcCBvcGVyYXRpb24gb24gYSBzdGFja2VkIGZpbGVzeXN0ZW0uICBUaGlzIGhvb2tcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjU5MjogKiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHNlY3VyaXR5X21tYXBfZmlsZSgpIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgYXV0aG9yaXppbmdcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjU5My0gKiB0aGUgbW1hcCBvbiBAYmFja2luZ19maWxlLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgbW1hcCBvcGVyYXRpb25cbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDAyNz1zdGF0aWMgaW50IHNlbGludXhfbW1hcF9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDAzOS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDQwOnN0YXRpYyBpbnQgc2VsaW51eF9tbWFwX2ZpbGVfY29tbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA0MS1cdFx0XHRcdCAgICBib29sIHNoYXJlZCwgYm9vbCBtb3VudGVyX2NoZWNrKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDU4LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwNTk6c3RhdGljIGludCBzZWxpbnV4X21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDYwLVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyByZXFwcm90IF9fYWx3YXlzX3VudXNlZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA2Mi17XG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NDA2MzpcdHJldHVybiBzZWxpbnV4X21tYXBfZmlsZV9jb21tb24oZmlsZSwgcHJvdCxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDY0LVx0XHRcdFx0XHQoZmxhZ3MgXHUwMDI2IE1BUF9UWVBFKSA9PSBNQVBfU0hBUkVELFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDczLSAqXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NDA3NDogKiBUaGlzIGlzIGNhbGxlZCBhZnRlciBzZWxpbnV4X21tYXBfZmlsZSgpIG9uIHN0YWNrZWQgZmlsZXN5c3RlbXMsIGFuZCBpdFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwNzUtICogaXMgdGhpcyBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgYWNjZXNzIHRvIEBiYWNraW5nX2ZpbGUgYW5kXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQwODM9c3RhdGljIGludCBzZWxpbnV4X21tYXBfYmFja2luZ19maWxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDk2LVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwOTc6XHRyZXR1cm4gc2VsaW51eF9tbWFwX2ZpbGVfY29tbW9uKGJhY2tpbmdfZmlsZSwgcHJvdCxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDk4LVx0XHRcdFx0XHR2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NzU2MD1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjM5LVx0TFNNX0hPT0tfSU5JVChmaWxlX2lvY3RsX2NvbXBhdCwgc2VsaW51eF9maWxlX2lvY3RsX2NvbXBhdCksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzY0MDpcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBzZWxpbnV4X21tYXBfZmlsZSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzY0MS1cdExTTV9IT09LX0lOSVQobW1hcF9iYWNraW5nX2ZpbGUsIHNlbGludXhfbW1hcF9iYWNraW5nX2ZpbGUpLFxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jPTE4MDE9c3RhdGljIGludCBzbWFja19maWxlX2ZjbnRsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTE4MzUtLyoqXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxODM2OiAqIHNtYWNrX21tYXBfZmlsZSAtIENoZWNrIHBlcm1pc3Npb25zIGZvciBhIG1tYXAgb3BlcmF0aW9uLlxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTgzNy0gKiBAZmlsZTogY29udGFpbnMgdGhlIGZpbGUgc3RydWN0dXJlIGZvciBmaWxlIHRvIG1hcCAobWF5IGJlIE5VTEwpLlxuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTE4NDUtICovXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxODQ2OnN0YXRpYyBpbnQgc21hY2tfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTg0Ny1cdFx0XHQgICB1bnNpZ25lZCBsb25nIHJlcXByb3QsIHVuc2lnbmVkIGxvbmcgcHJvdCxcbi0tXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz01MTU1PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNtYWNrX2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xuLS1cbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTUxOTgtXHRMU01fSE9PS19JTklUKGZpbGVfZmNudGwsIHNtYWNrX2ZpbGVfZmNudGwpLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM6NTE5OTpcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBzbWFja19tbWFwX2ZpbGUpLFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTIwMC1cdExTTV9IT09LX0lOSVQobW1hcF9hZGRyLCBjYXBfbW1hcF9hZGRyKSxcbi0tXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM9NDg9c3RhdGljIGludCB0ZXN0X19QRVJGX1JFQ09SRChzdHJ1Y3QgdGVzdF9zdWl0ZSAqdGVzdCBfX21heWJlX3VudXNlZCwgaW50IHN1YnRlc3QgX19tYXliZV91bnVzZWQpXG4tLVxudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jLTY0LVx0Y29uc3QgY2hhciAqYXJndltdID0geyBjbWQsIFwmIzM0OzFcJiMzNDssIE5VTEwsIH07XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6NjU6XHRjaGFyICpibmFtZSwgKm1tYXBfZmlsZW5hbWU7XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtNjYtXHR1NjQgcHJldl90aW1lID0gMDtcbi0tXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjczLVx0XHRcdFx0Y2FzZSBQRVJGX1JFQ09SRF9NTUFQOlxudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jOjI3NDpcdFx0XHRcdFx0bW1hcF9maWxlbmFtZSA9IGV2ZW50LVx1MDAzZW1tYXAuZmlsZW5hbWU7XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjc1LVx0XHRcdFx0XHRnb3RvIGNoZWNrX2JuYW1lO1xudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jLTI3Ni1cdFx0XHRcdGNhc2UgUEVSRl9SRUNPUkRfTU1BUDI6XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6Mjc3Olx0XHRcdFx0XHRtbWFwX2ZpbGVuYW1lID0gZXZlbnQtXHUwMDNlbW1hcDIuZmlsZW5hbWU7XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjc4LVx0XHRcdFx0Y2hlY2tfYm5hbWU6XG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6Mjc5Olx0XHRcdFx0XHRibmFtZSA9IHN0cnJjaHIobW1hcF9maWxlbmFtZSwgJiMzOTsvJiMzOTspO1xudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jLTI4MC1cdFx0XHRcdFx0aWYgKGJuYW1lICE9IE5VTEwpIHtcbi0tXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjg5LVx0XHRcdFx0XHR9IGVsc2UgaWYgKCFmb3VuZF92ZHNvX21tYXApXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6MjkwOlx0XHRcdFx0XHRcdGZvdW5kX3Zkc29fbW1hcCA9ICFzdHJjbXAobW1hcF9maWxlbmFtZSwgXCYjMzQ7W3Zkc29dXCYjMzQ7KTtcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy0yOTEtXHRcdFx0XHRcdGJyZWFrO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYz0xNTU9X19uYWtlZCBpbnQgZGlzYWJsZWRfaG9va190ZXN0Myh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jLTE2Mi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYzoxNjM6U0VDKFwmIzM0O2xzbS9tbWFwX2ZpbGVcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmM6MTY0Ol9fZGVzY3JpcHRpb24oXCYjMzQ7bm90IG51bGwgY2hlY2tpbmcgbnVsbGFibGUgcG9pbnRlciBpbiBicGZfbHNtX21tYXBfZmlsZVwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYy0xNjUtX19mYWlsdXJlIF9fbXNnKFwmIzM0O1IxIGludmFsaWQgbWVtIGFjY2VzcyAmIzM5O3RydXN0ZWRfcHRyX29yX251bGxfJiMzOTtcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmM9MTY2PWludCBCUEZfUFJPRyhub19udWxsX2NoZWNrLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMtMTc1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jOjE3NjpTRUMoXCYjMzQ7bHNtL21tYXBfZmlsZVwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYzoxNzc6X19kZXNjcmlwdGlvbihcJiMzNDtudWxsIGNoZWNraW5nIG51bGxhYmxlIHBvaW50ZXIgaW4gYnBmX2xzbV9tbWFwX2ZpbGVcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMtMTc4LV9fc3VjY2Vzc1xuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9MTU0ND1zdGF0aWMgaW5saW5lIGludCBtYXBwaW5nX21hcF93cml0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTE1NTAtLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6MTU1MTpzdGF0aWMgaW5saW5lIGJvb2wgY2FuX21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtMTU1Mi17XG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTMyOD1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0zMzEtXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg6MzMyOnN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtMzMzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIG1tYXAgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBgY2FuX21tYXBfZmlsZWAgYnVzaW5lc3MuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gc2VlIHdoZXJlIGBtbWFwX2ZpbGVgIGFuZCBgbW1hcF96ZXJvX3ByZXBhcmVgIGFyZSBhY3R1YWxseSBiZWluZyB1c2VkLiBJdCBsb29rcyBsaWtlIGBtbS92bWEuY2AgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBTcGVjaWZpY2FsbHksIGBfX21tYXBfbmV3X2ZpbGVfdm1hYCBjYWxscyBgbW1hcF9maWxlYCB3aXRoIHRoZSBgdm1hLSZndDt2bV9maWxlYCBhbmQgdGhlIHZtYSBpdHNlbGYuIFRoZW4sIEkgcmVtZW1iZXIgYG1tYXBfemVyb19wcmVwYXJlYCBpcyBkZWZpbmVkIGluIGBtbS9jaGFyLW1lbS5jYCBhcyB0aGUgYHplcm9fZm9wcy5tbWFwX3ByZXBhcmVgIGZ1bmN0aW9uLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgcmVjb2duaXplcyAvZGV2L3plcm8uIEnigJlsbCBjaGVjayBgZmlsZV9pc19kZXZfemVyb2AgaW4gYG1tL2NoYXItbWVtLmNgLiBMb29rcyBzdHJhaWdodGZvcndhcmQ6IGl0IGp1c3QgdmVyaWZpZXMgaWYgdGhlIGZpbGUgb3BlcmF0aW9uIChgZl9vcGApIG1hdGNoZXMgYCZhbXA7emVyb19mb3BzYC4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIGBtbWFwX3plcm9fcHJlcGFyZWAgaXRzZWxmLiBJbiBgbW0vY2hhci1tZW0uY2AsIGlmIGl04oCZcyBhIHNoYXJlZCBWTUEgKGBWTUFfU0hBUkVEX0JJVGAgc2V0KSB0aGVuIGBzaG1lbV96ZXJvX3NldHVwX2Rlc2NgIGRvZXMgdGhlIHdvcmssIG90aGVyd2lzZSwgaW4gYSBwcml2YXRlIG1hcHBpbmcgY2FzZSwgaXQganVzdCByZXR1cm5zLiBUaGF0IG1ha2VzIHNlbnNlOyB0aGUgY29yZSBNTSB0YWtlcyBjYXJlIG9mIHByaXZhdGUgc2VtYW50aWNzLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgdXAgYSBsZXZlbCB0byBgbW0vdm1hLmNgIGFuZCBsb29rIGF0IGBjYWxsX21tYXBfcHJlcGFyZWAuIFRoaXMgaXMgdGhlIGNvcmUgbW1hcCBwcmVwYXJlIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGB2ZnNfbW1hcF9wcmVwYXJlYC4gVGhhdCYjMzk7cyB3aGVyZSBmaWxlIHN5c3RlbSBzcGVjaWZpYyB0aGluZ3MgYXJlIGhhbmRsZWQuIEl0JiMzOTtzIGFsc28gbWFraW5nIHN1cmUgYHZtX29wc2AgaXMgc3RpbGwgdmFsaWQgYW5kIHRoZW4gY2FsbHMgc29tZSBhY3Rpb24gcHJlcGFyZSBmdW5jdGlvbi4gSWYgdGhlIG1hcHBpbmcgaXMgYSBwcml2YXRlIGAvZGV2L3plcm9gIG1hcHBpbmcgKHdoaWNoIGlzIGFuIGFuY2llbnQgd2F5IG9mIG1ha2luZyBhbm9ueW1vdXMgbWFwcGluZ3MpLCBpdCYjMzk7cyBjb252ZXJ0ZWQgdG8gYSB0cnVseSBhbm9ueW1vdXMgbWFwcGluZyB1c2luZyBgbWFwX3NldF9hbm9uYC4gU21hcnQhCgpUaW1lIHRvIGxvb2sgYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHdlaXJkIGNvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBtbS9jaGFyLW1lbS5jYCBvciB0aGUgYC9kZXYvemVyb2AgZnVuY3Rpb25hbGl0eS4gTG9va2luZyBpbiBgbW0vTWFrZWZpbGVgLCBgY2hhci1tZW0ub2AgaXMgYWx3YXlzIGJ1aWx0IChgb2JqLXlgKS4gQW5kLCBnaXZlbiB0aGF0IEkmIzM5O20gb24gYW1kNjQsIGBDT05GSUdfTU1VYCBpcyBhIGdpdmVuLCBzbyB0aGF0JiMzOTtzIG5vdCB0aGUgaXNzdWUuIEkmIzM5O2xsIHRha2UgYSBxdWljayBzY2FuIG9mIGBtbS9jaGFyLW1lbS5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jaGFyLW1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NoYXItbWVtLmM9NTU9c3RhdGljIGlubGluZSBpbnQgdmFsaWRfbW1hcF9waHlzX2FkZHJfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHNpemVfdCBzaXplKVxuLS1cbm1tL2NoYXItbWVtLmMtNjAtXG5tbS9jaGFyLW1lbS5jOjYxOiNpZmRlZiBDT05GSUdfU1RSSUNUX0RFVk1FTVxubW0vY2hhci1tZW0uYy02Mi1zdGF0aWMgaW5saW5lIGludCBwYWdlX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vY2hhci1tZW0uYz0yNzE9c3RhdGljIHBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9jaGFyLW1lbS5jLTI4My1cbm1tL2NoYXItbWVtLmM6Mjg0OiNpZm5kZWYgQ09ORklHX01NVVxubW0vY2hhci1tZW0uYy0yODUtc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VubWFwcGVkX2FyZWFfbWVtKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL2NoYXItbWVtLmM9MzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xubW0vY2hhci1tZW0uYzozMjI6I2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVFxubW0vY2hhci1tZW0uYy0zMjMtXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5c1xuLS1cbm1tL2NoYXItbWVtLmM9MzI3PXN0YXRpYyBpbnQgbW1hcF9tZW1fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLS1cbm1tL2NoYXItbWVtLmMtMzY2LVxubW0vY2hhci1tZW0uYzozNjc6I2lmZGVmIENPTkZJR19ERVZQT1JUXG5tbS9jaGFyLW1lbS5jLTM2OC1zdGF0aWMgc3NpemVfdCByZWFkX3BvcnQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxubW0vY2hhci1tZW0uYz01MDM9c3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxubW0vY2hhci1tZW0uYy01MDQte1xubW0vY2hhci1tZW0uYzo1MDU6I2lmbmRlZiBDT05GSUdfTU1VXG5tbS9jaGFyLW1lbS5jLTUwNi1cdHJldHVybiAtRU5PU1lTO1xuLS1cbm1tL2NoYXItbWVtLmMtNTE0LVxubW0vY2hhci1tZW0uYzo1MTU6I2lmbmRlZiBDT05GSUdfTU1VXG5tbS9jaGFyLW1lbS5jLTUxNi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL2NoYXItbWVtLmM9NTIzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vY2hhci1tZW0uYy01NDItXHQgKi9cbm1tL2NoYXItbWVtLmM6NTQzOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL2NoYXItbWVtLmMtNTQ0LVx0cmV0dXJuIHRocF9nZXRfdW5tYXBwZWRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyk7XG4tLVxubW0vY2hhci1tZW0uYy01NDgtfVxubW0vY2hhci1tZW0uYzo1NDk6I2VuZGlmIC8qIENPTkZJR19NTVUgKi9cbm1tL2NoYXItbWVtLmMtNTUwLVxuLS1cbm1tL2NoYXItbWVtLmM9NjMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fbWF5YmVfdW51c2VkIG1lbV9mb3BzID0ge1xuLS1cbm1tL2NoYXItbWVtLmMtNjM3LVx0Lm9wZW5cdFx0PSBvcGVuX21lbSxcbm1tL2NoYXItbWVtLmM6NjM4OiNpZm5kZWYgQ09ORklHX01NVVxubW0vY2hhci1tZW0uYy02MzktXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV9tZW0sXG4tLVxubW0vY2hhci1tZW0uYz02NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnVsbF9mb3BzID0ge1xuLS1cbm1tL2NoYXItbWVtLmMtNjU0LVxubW0vY2hhci1tZW0uYzo2NTU6I2lmZGVmIENPTkZJR19ERVZQT1JUXG5tbS9jaGFyLW1lbS5jLTY1Ni1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb3J0X2ZvcHMgPSB7XG4tLVxubW0vY2hhci1tZW0uYz02NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzID0ge1xuLS1cbm1tL2NoYXItbWVtLmMtNjczLVx0LmdldF91bm1hcHBlZF9hcmVhID0gZ2V0X3VubWFwcGVkX2FyZWFfemVybyxcbm1tL2NoYXItbWVtLmM6Njc0OiNpZm5kZWYgQ09ORklHX01NVVxubW0vY2hhci1tZW0uYy02NzUtXHQubW1hcF9jYXBhYmlsaXRpZXMgPSB6ZXJvX21tYXBfY2FwYWJpbGl0aWVzLFxuLS1cbm1tL2NoYXItbWVtLmM9Njg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHtcbi0tXG5tbS9jaGFyLW1lbS5jLTY5MS19IGRldmxpc3RbXSA9IHtcbm1tL2NoYXItbWVtLmM6NjkyOiNpZmRlZiBDT05GSUdfREVWTUVNXG5tbS9jaGFyLW1lbS5jLTY5My1cdFtERVZNRU1fTUlOT1JdID0geyBcJiMzNDttZW1cJiMzNDssIFx1MDAyNm1lbV9mb3BzLCAwLCAwIH0sXG4tLVxubW0vY2hhci1tZW0uYy02OTUtXHRbM10gPSB7IFwmIzM0O251bGxcJiMzNDssIFx1MDAyNm51bGxfZm9wcywgRk1PREVfTk9XQUlULCAwNjY2IH0sXG5tbS9jaGFyLW1lbS5jOjY5NjojaWZkZWYgQ09ORklHX0RFVlBPUlRcbm1tL2NoYXItbWVtLmMtNjk3LVx0WzRdID0geyBcJiMzNDtwb3J0XCYjMzQ7LCBcdTAwMjZwb3J0X2ZvcHMsIDAsIDAgfSxcbi0tXG5tbS9jaGFyLW1lbS5jLTcwMi1cdFs5XSA9IHsgXCYjMzQ7dXJhbmRvbVwmIzM0OywgXHUwMDI2dXJhbmRvbV9mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcbm1tL2NoYXItbWVtLmM6NzAzOiNpZmRlZiBDT05GSUdfUFJJTlRLXG5tbS9jaGFyLW1lbS5jLTcwNC1cdFsxMV0gPSB7IFwmIzM0O2ttc2dcJiMzNDssIFx1MDAyNmttc2dfZm9wcywgMCwgMDY0NCB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIxNQoJCQkJCQkJb3V0cHV0OiAxMzUKCQkJCQkJCXRob3VnaHRzOiA5NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIFNlbGVjdGlvbiBmb3IgL2Rldi96ZXJvIFByaXZhdGUgTWFwcGluZyBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIC9kZXYvemVybyBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRoZSBwcml2YXRlIG1hcHBpbmcgaW1wbGVtZW50YXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgYC9kZXYvemVyb2AgaXMgbWlub3IgNSwgd2hpY2ggZG9lc24mIzM5O3Qgc2VlbSB0byBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24g4oCTIHN0YW5kYXJkIGBDT05GSUdfTU1VYCBpcyBhbGwgdGhhdCYjMzk7cyByZXF1aXJlZC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRob3NlIEZvY3VzU3ltYm9scyBydWxlcy4gSSBuZWVkIHRvIGF2b2lkIHRob3NlIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoczsgdGhpbmdzIHRoYXQgZ2V0IGNhbGxlZCBieSAqZXZlcnl0aGluZyogYXJlIGEgZnV6emluZyBkaXN0cmFjdGlvbi4gSW5zdGVhZCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSAqc3BlY2lmaWMqIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5IHBvaW50cy4gU3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGEgYml0IHRyaWNraWVyLCBidXQgdGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlaXIgbm9uLXN0YXRpYyBjYWxsZXJzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgSSYjMzk7dmUgaWRlbnRpZmllZCBhIGZldyBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBwcm9taXNpbmc6IGBmaWxlX2lzX2Rldl96ZXJvYCAoaW4gYG1tL2NoYXItbWVtLmNgKSwgYG1tYXBfemVyb19wcmVwYXJlYCAoYWxzbyBpbiBgbW0vY2hhci1tZW0uY2ApLCBgY2FsbF9tbWFwX3ByZXBhcmVgIChpbiBgbW0vdm1hLmNgKSwgYF9fbW1hcF9uZXdfdm1hYCAoaW4gYG1tL3ZtYS5jYCksIGFuZCBgX19tbWFwX3JlZ2lvbmAgKGluIGBtbS92bWEuY2ApLgoKTGV0JiMzOTtzIGRyaWxsIGRvd246CgoqICAgYG1tYXBfemVyb19wcmVwYXJlYDogWWVzLCB0aGlzIGlzICpleGFjdGx5KiB0aGUgbW1hcCBwcmVwYXJhdGlvbiBmb3IgL2Rldi96ZXJvLCBzbyBpdCBpcyBhIGdvb2QgZm9jdXMgc3ltYm9sLgoqICAgYGZpbGVfaXNfZGV2X3plcm9gOiBUaGlzIGZ1bmN0aW9uIGlzICpleHBsaWNpdGx5KiBjaGVja2luZyBpZiB0aGUgZmlsZSBpcyAvZGV2L3plcm8sIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIHBhdGggdGhhdCB3ZSBhcmUgcmV2aWV3aW5nLgoqICAgYGNhbGxfbW1hcF9wcmVwYXJlYDogVGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGBmaWxlX2lzX2Rldl96ZXJvKClgIGNoZWNrIGFuZCB0aGUgYG1hcF9zZXRfYW5vbigpYCBpcyBleGVjdXRlZC4gSXQgaXMgYWxzbyB3aGVyZSB0aGUgYCFkZXNjLSZndDt2bV9vcHNgIGVycm9yIGNoZWNrIGlzIGFkZGVkLgoKSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgX19tbWFwX25ld192bWFgIGFuZCBgX19tbWFwX3JlZ2lvbmAuIEJ1dCBgX19tbWFwX25ld192bWFgIGlzIGFsdGVyZWQgdG8gdXNlIGBtYXBfaXNfYW5vbihtYXApYC4gQW5kIHdoaWxlIEkmIzM5O20gYSBiaXQgaGVzaXRhbnQgYWJvdXQgYF9fbW1hcF9yZWdpb25gLCB0aGUgcHJpb3IgZnVuY3Rpb25zIGFyZSBxdWl0ZSBzcGVjaWZpYywgc28gbGV0JiMzOTtzIHN0aWNrIHdpdGggdGhlbS4KClRoZXJlZm9yZSwgZm9yIHRoZSBmdXp6aW5nIGZvY3VzLCBteSBzaG9ydGxpc3QgaXMgYFsmIzM0O2ZpbGVfaXNfZGV2X3plcm8mIzM0OywgJiMzNDttbWFwX3plcm9fcHJlcGFyZSYjMzQ7LCAmIzM0O2NhbGxfbW1hcF9wcmVwYXJlJiMzNDtdYC4gVGhlc2UgYXJlIGFsbCB2ZXJ5IHNwZWNpZmljIHRvIHRoZSAvZGV2L3plcm8gbW1hcCBjaGFuZ2UuCgpOb3csIGxldCYjMzk7cyBxdWlja2x5IHRpY2sgb2ZmIHRoZSByZW1haW5pbmcgcmVxdWlyZW1lbnRzOgoKMS4gIGBXb3J0aEZ1enppbmdgOiBBYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggKmRpcmVjdGx5KiBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gYG1tL3ZtYS5jYCBhbmQgYG1tL2NoYXItbWVtLmNgLgoyLiAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCAqbW92ZXMqIGhhbmRsaW5nIG9mIGAvZGV2L3plcm9gIGBNQVBfUFJJVkFURWAgbWFwcGluZ3MgaW50byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQgY29udmVydHMgdGhlc2UgcHJpdmF0ZSBtYXBwaW5ncyBpbnRvIHRydWUgYW5vbnltb3VzIG1hcHBpbmdzIGR1cmluZyBgbW1hcF9wcmVwYXJlYCwgc28gbG9naWMgaXMgYmVpbmcgc2hpZnRlZCBiZXR3ZWVuIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgbW0gbGF5ZXIuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyBpbiBgbW0vdm1hLmNgLCBgbW0vY2hhci1tZW0uY2AsIGFuZCBpbnRlcm5hbCBWTUEgbWFuYWdlbWVudC4KMy4gIGBGb2N1c1N5bWJvbHNgOiBJJiMzOTt2ZSBhbHJlYWR5IG5haWxlZCB0aGVzZSBkb3duIGFzIGBbJiMzNDtmaWxlX2lzX2Rldl96ZXJvJiMzNDssICYjMzQ7bW1hcF96ZXJvX3ByZXBhcmUmIzM0OywgJiMzNDtjYWxsX21tYXBfcHJlcGFyZSYjMzQ7XWAuCjQuICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgb3IgYFsmIzM0O01NVSYjMzQ7XWAg4oCTIGBDT05GSUdfTU1VYCBpcyBzdGFuZGFyZCwgc28gbm8gc3BlY2lhbCBjb25maWd1cmF0aW9uIGlzIG5lZWRlZC4KCkkmIzM5O3ZlIGdpdmVuIHRoaXMgYSBmaW5hbCBvbmNlLW92ZXIsIGFuZCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXNlIGFyZSBhY2N1cmF0ZSwgc28gSSYjMzk7bSByZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NhbGxfbW1hcF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O2ZpbGVfaXNfZGV2X3plcm8mIzM0OywKICAgICYjMzQ7bW1hcF96ZXJvX3ByZXBhcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3Mgc28gdGhleSBiZWNvbWUgdHJ1bHkgYW5vbnltb3VzIG1hcHBpbmdzIHdpdGhpbiBjb3JlIG1tIHJhdGhlciB0aGFuIGJlaW5nIHRyZWF0ZWQgYXMgc2VtaS1hbm9ueW1vdXMgZmlsZSBtYXBwaW5ncy4gSXQgbW9kaWZpZXMgcmVhY2hhYmxlIGxvZ2ljIGluIG1tL3ZtYS5jLCBtbS9jaGFyLW1lbS5jLCBhbmQgaGVhZGVyIGhlbHBlcnMsIGFmZmVjdGluZyBWTUEgbWVyZ2luZywgcGFnZSBvZmZzZXQgY2FsY3VsYXRpb25zLCBhbmQgbW1hcCBwcmVwYXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU1VJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2FsbF9tbWFwX3ByZXBhcmUmIzM0OywKICAgICYjMzQ7ZmlsZV9pc19kZXZfemVybyYjMzQ7LAogICAgJiMzNDttbWFwX3plcm9fcHJlcGFyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhhbmRsaW5nIG9mIE1BUF9QUklWQVRFIC9kZXYvemVybyBtYXBwaW5ncyBzbyB0aGV5IGJlY29tZSB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3Mgd2l0aGluIGNvcmUgbW0gcmF0aGVyIHRoYW4gYmVpbmcgdHJlYXRlZCBhcyBzZW1pLWFub255bW91cyBmaWxlIG1hcHBpbmdzLiBJdCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gbW0vdm1hLmMsIG1tL2NoYXItbWVtLmMsIGFuZCBoZWFkZXIgaGVscGVycywgYWZmZWN0aW5nIFZNQSBtZXJnaW5nLCBwYWdlIG9mZnNldCBjYWxjdWxhdGlvbnMsIGFuZCBtbWFwIHByZXBhcmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgaGFuZGxpbmcgb2YgTUFQX1BSSVZBVEUgL2Rldi96ZXJvIG1hcHBpbmdzIHRvIG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMgVk1BcyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtb3ZpbmcgZHJpdmVycy9jaGFyL21lbS5jIHRvIG1tL2NoYXItbWVtLmMsIHVwZGF0aW5nIG1tYXBfcHJlcGFyZSBoYW5kbGluZywgYW5kIHJlbW92aW5nIHNwZWNpYWwtY2FzZSB3b3JrYXJvdW5kcyBmb3Igc2VtaS1hbm9ueW1vdXMgVk1BcykuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFsbCBzdHJ1Y3R1cmVzIChlLmcuIHN0cnVjdCB2bV9hcmVhX2Rlc2MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuLSBBbnkgYnVncyBzdGVtbWluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gVk1BIG1lcmdpbmcgZGlzY3JlcGFuY2llcywgcGFnZSBvZmZzZXQgZXJyb3JzLCBvciByZWZlcmVuY2UvbGlmZXRpbWUgbWFuYWdlbWVudCBpc3N1ZXMpIGFyZSBtZW1vcnkgbWFuYWdlbWVudC9sb2dpYyBpc3N1ZXMgdGhhdCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjM5NjU4NmU5OGQ1ODA4ODhjODFhZWY3ZjJkNmIwMzY2OWE0NTU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxMzoyNjozOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggM2ExOWRhNzRkMDBjOS4uYTBhNWRiNDQ0YzY2MyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE3Mjc2LDcgJiM0MzsxNzI3Niw3IEBAIEY6CURvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLW1lbW9yeS10aWVycwogRjoJRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tbnVtYQogRjoJRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS8KIEY6CURvY3VtZW50YXRpb24vbW0vCi1GOglkcml2ZXJzL2NoYXIvbWVtLmMKJiM0MztGOgltbS9jaGFyLW1lbS5jCiBGOglpbmNsdWRlL2xpbnV4L2NtYS5oCiBGOglpbmNsdWRlL2xpbnV4L2RtYXBvb2wuaAogRjoJaW5jbHVkZS9saW51eC9pb3JlbWFwLmgKQEAgLTE3NDgxLDcgJiM0MzsxNzQ4MSw3IEBAIEw6CWxpbnV4LW1tQGt2YWNrLm9yZwogUzoJTWFpbnRhaW5lZAogVzoJaHR0cDovL3d3dy5saW51eC1tbS5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbQotRjoJZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7RjoJbW0vY2hhci1tZW0uYwogRjoJaW5jbHVkZS90cmFjZS9ldmVudHMvbW1hcC5oCiBGOglmcy9wcm9jL3Rhc2tfbW11LmMKIEY6CWZzL3Byb2MvdGFza19ub21tdS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggYTQ2ZDdiZjdjNGM4Mi4uYmIzYmY2NjkzN2IzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtMyw3ICYjNDM7Myw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycy4KICMKIAotb2JqLXkJCQkJJiM0Mzs9IG1lbS5vIHJhbmRvbS5vCiYjNDM7b2JqLXkJCQkJJiM0Mzs9IHJhbmRvbS5vCiBvYmotJChDT05GSUdfVFRZX1BSSU5USykJJiM0Mzs9IHR0eXByaW50ay5vCiBvYmoteQkJCQkmIzQzOz0gbWlzYy5vCiBvYmotJChDT05GSUdfVEVTVF9NSVNDX01JTk9SKQkmIzQzOz0gbWlzY19taW5vcl9rdW5pdC5vCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggZGQwOWM0MzhmYTIzZS4uODY0ZDVhYzM3MDRkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTU1MSwxMSAmIzQzOzE1NTEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF9hbm9ueW1vdXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJdm1hLSZndDt2bV9vcHMgPSBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQotewotCWRlc2MtJmd0O3ZtX29wcyA9IE5VTEw7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYW5vbnltb3VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXJldHVybiAhdm1hLSZndDt2bV9vcHM7CkBAIC00NDA4LDkgJiM0Mzs0NDAzLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9wYWdlcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKICAqIElmIEB2bWEgaXMgYSBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoaXMgcmV0dXJucyB0aGUKICAqIHBhZ2Ugb2Zmc2V0IHdpdGhpbiB0aGUgZmlsZS4KICAqCi0gKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSwgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHNhdGlzZmllcwotICogdm1hX2lzX2Fub255bW91cygpIGJ1dCBoYXMgZmlsZS1iYWNrZWQgcGFnZSBvZmZzZXQsIGFuZCBNQVBfUFJJVkFURS1wZm5tYXAKLSAqIHJlZ2lvbnMgaGF2ZSB0aGVpciBwYWdlIG9mZnNldCBzZXQgdG8gdGhlIGZpcnN0IFBGTiBpbiB0aGUgcmFuZ2UuCiYjNDM7ICogRWRnZSBjYXNlczogbm9tbXUgZG9lcyBub3QgYWJpZGUgYnkgdGhlc2UgYW5kIENvVyBNQVBfUFJJVkFURS1wZm5tYXAgcmVnaW9ucwomIzQzOyAqIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLgogICoKICAqIFJldHVybnM6IFRoZSBwYWdlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgQHZtYS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCAwYWRmYTY2MDU2NTNkLi45MzlmM2E1ZTk3M2Y2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtMTEyOCw4ICYjNDM7MTEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCWNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTsKIAogCVZNX1dBUk5fT05fT05DRSghdm1hX2lzX2Nvd19tYXBwaW5nKHZtYSkpOwotCS8qIEFjY291bnQgZm9yIE1BUF9QUklWQVRFLS9kZXYvemVybyB3aGljaCBpcyBvbmx5IHNlbWktYW5vbnltb3VzLiAqLwotCWlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgJmFtcDsmYW1wOyAhdm1hLSZndDt2bV9maWxlKQomIzQzOwlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKQogCQlWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7CiAKIAlyZXR1cm4gcGdvZmY7CmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IGU3MjQ1Y2I4OGM2NjUuLjJhM2VjNTNkNjJlZWYgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlCkBAIC01NSw3ICYjNDM7NTUsOCBAQCBvYmoteQkJCTo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXAogCQkJICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXAogCQkJICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXAogCQkJICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFwKLQkJCSAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KQomIzQzOwkJCSAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyBjaGFyLW1lbS5vIFwKJiM0MzsJCQkgICAkKG1tdS15KQogCiAjIEdpdmUgJiMzOTtwYWdlX2FsbG9jJiMzOTsgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZQogcGFnZS1hbGxvYy15IDo9IHBhZ2VfYWxsb2MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvbW0vY2hhci1tZW0uYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvbWVtLmMKcmVuYW1lIHRvIG1tL2NoYXItbWVtLmMKaW5kZXggNjMyNTNkMWRlNWQ3MC4uYzBiNWZiMDE5MjIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NoYXItbWVtLmMKQEAgLTEsNiAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7ICogIG1tL2NoYXItbWVtLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwogICoKQEAgLTMxLDYgJiM0MzszMSw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOwogI2RlZmluZSBERVZNRU1fTUlOT1IJMQogI2RlZmluZSBERVZQT1JUX01JTk9SCTQKIApAQCAtNTA2LDExICYjNDM7NTA4LDcgQEAgc3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQogCWlmICh2bWFfZGVzY190ZXN0KGRlc2MsIFZNQV9TSEFSRURfQklUKSkKIAkJcmV0dXJuIHNobWVtX3plcm9fc2V0dXBfZGVzYyhkZXNjKTsKIAotCS8qCi0JICogVGhpcyBpcyBhIGhpZ2hseSB1bmlxdWUgc2l0dWF0aW9uIHdoZXJlIHdlIG1hcmsgYSBNQVBfUFJJVkFURSBtYXBwaW5nCi0JICogb2YgL2Rldi96ZXJvIGFub255bW91cywgZGVzcGl0ZSBpdCBub3QgYmVpbmcuCi0JICovCi0Jdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhkZXNjKTsKJiM0MzsJLyogTUFQX1BSSVZBVEUgc2VtYW50aWNzIGFyZSB0YWtlbiBjYXJlIG9mIGZvciB1cyBieSBjb3JlIG1tLiAqLwogCXJldHVybiAwOwogfQogCkBAIC03MDcsNiAmIzQzOzcwNSwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7CiAjZW5kaWYKIH07CiAKJiM0MzsvKioKJiM0MzsgKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvCiYjNDM7ICogZHJpdmVyPwomIzQzOyAqIEBmaWxlOiBGaWxlIHRvIHRlc3QuCiYjNDM7ICogUmV0dXJuczogdHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2Jvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmaWxlICZhbXA7JmFtcDsgZmlsZS0mZ3Q7Zl9vcCA9PSAmYW1wO3plcm9fZm9wczsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1lbW9yeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCBtaW5vcjsKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM4YjExNjUyMTJjOTQuLjI3ODI5MjRhMjc3YzkgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMjM3LDE1ICYjNDM7MjM3LDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaW50IGVyciA9IHZmc19tbWFwKGZpbGUsIHZtYSk7CiAKLQlpZiAobGlrZWx5KCFlcnIpKQotCQlyZXR1cm4gMDsKLQogCS8qCi0JICogT0ssIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpLCBidXQgYW4gZXJyb3IKLQkgKiBhcm9zZS4gVGhlIG1hcHBpbmcgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0IG5vdCBpbnZva2UKLQkgKiBhbnkgZnVydGhlciBob29rcyBvbiBpdC4KJiM0MzsJICogRWl0aGVyIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpIGFuZCBhbiBlcnJvciBhcm9zZQomIzQzOwkgKiBvciBhIGRyaXZlciBzZXQgdm1hLSZndDt2bV9vcHMgPSBOVUxMIGludGVuZGluZyB0aGVyZSB0byBiZSBubyBWTUEKJiM0MzsJICogb3BlcmF0aW9ucy4KJiM0MzsJICoKJiM0MzsJICogSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBWTUEgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0biYjMzk7dAomIzQzOwkgKiBpbnZva2UgYW55IGZ1cnRoZXIgaG9va3Mgb24gaXQsIGluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgaG9vayBhY3R1YWxseQomIzQzOwkgKiB3YW50ZWQgbm8gZnVydGhlciBob29rcyB0byBiZSBpbnZva2VkLCBzbyBmaXggYm90aCBieSBzZXR0aW5nIGR1bW15CiYjNDM7CSAqIFZNQSBvcHMuCiAJICovCi0Jdm1hLSZndDt2bV9vcHMgPSAmYW1wO3ZtYV9kdW1teV92bV9vcHM7CiYjNDM7CWlmICh1bmxpa2VseShlcnIgfHwgIXZtYS0mZ3Q7dm1fb3BzKSkKJiM0MzsJCXZtYS0mZ3Q7dm1fb3BzID0gJmFtcDt2bWFfZHVtbXlfdm1fb3BzOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2NTQsNCAmIzQzOzE2NTcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NwaW5fdHJ5bG9jayh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7LyogY2hhci1tZW0uYyAqLwomIzQzO2Jvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiYjNDM7CiAjZW5kaWYJLyogX19NTV9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA4OTdmYTJiNjEzNDZmLi5jNjA3NjNlZjU2MWNmIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTI3ODYsNyAmIzQzOzI3ODYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJc2IgPSBmaWxlX2lub2RlKGZpbGUpLSZndDtpX3NiOwogCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIENhbGxlZCBkaXJlY3RseSBmcm9tIG1tL21tYXAuYywgb3IgZHJpdmVycy9jaGFyL21lbS5jCiYjNDM7CQkJICogQ2FsbGVkIGRpcmVjdGx5IGZyb20gbW0vbW1hcC5jLCBvciBtbS9jaGFyLW1lbS5jCiAJCQkgKiBmb3IgJiMzNDsvZGV2L3plcm8mIzM0OywgdG8gY3JlYXRlIGEgc2hhcmVkIGFub255bW91cyBvYmplY3QuCiAJCQkgKi8KIAkJCWlmIChJU19FUlIoc2htX21udCkpCmRpZmYgLS1naXQgYS9tbS92bWEuYyBiL21tL3ZtYS5jCmluZGV4IDM1ZTdhNjQ4NTVmYWQuLjZmZGNlNDg1MmNlNjEgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5jCkBAIC0yNjIxLDYgJiM0MzsyNjIxLDIzIEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbWFwX3NldF9hbm9uKHN0cnVjdCBtbWFwX3N0YXRlICptYXApCiYjNDM7ewomIzQzOwltYXAtJmd0O2ZpbGUgPSBOVUxMOwomIzQzOwltYXAtJmd0O3ZtX29wcyA9IE5VTEw7CiYjNDM7CW1hcC0mZ3Q7cGdvZmYgPSBtYXAtJmd0O2FkZHIgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbWFwX2lzX3ByaXZhdGUoY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcCkKJiM0Mzt7CiYjNDM7CXJldHVybiAhdm1hX2ZsYWdzX3Rlc3QoJmFtcDttYXAtJmd0O3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtYXBfaXNfYW5vbihjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1hcF9pc19wcml2YXRlKG1hcCkgJmFtcDsmYW1wOyAhbWFwLSZndDtmaWxlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBfX21tYXBfbmV3X3ZtYSgpIC0gQWxsb2NhdGUgYSBuZXcgVk1BIGZvciB0aGUgcmVnaW9uLCBhcyBtZXJnaW5nIHdhcyBub3QKICAqIHBvc3NpYmxlLgpAQCAtMjYzNCw4ICYjNDM7MjY1MSw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogc3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLAogCXN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKQogewotCWNvbnN0IGJvb2wgaXNfYW5vbiA9ICFtYXAtJmd0O2ZpbGUgJmFtcDsmYW1wOwotCQkhdm1hX2ZsYWdzX3Rlc3QoJmFtcDttYXAtJmd0O3ZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpOwomIzQzOwljb25zdCBib29sIGlzX2Fub24gPSBtYXBfaXNfYW5vbihtYXApOwogCXN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSA9IG1hcC0mZ3Q7dm1pOwogCWludCBlcnJvciA9IDA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CkBAIC0yNzc3LDYgJiM0MzsyNzkzLDEwIEBAIHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CS8qIEl0JiMzOTtzIGludmFsaWQgZm9yIG1tYXBfcHJlcHJhcmUgaG9va3MgdG8gY2xlYXIgdm1fb3BzLiAqLwomIzQzOwlpZiAoIWRlc2MtJmd0O3ZtX29wcykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjc5MywxNiAmIzQzOzI4MTMsMjEgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLAogCW1hcC0mZ3Q7dm1fb3BzID0gZGVzYy0mZ3Q7dm1fb3BzOwogCW1hcC0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gZGVzYy0mZ3Q7cHJpdmF0ZV9kYXRhOwogCiYjNDM7CS8qCiYjNDM7CSAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZwomIzQzOwkgKiBhbm9ueW1vdXMgbWFwcGluZ3MuIFJhdGhlciB0aGFuIGFsbG93aW5nIHRoZXNlIG1hcHBpbmdzIHRvIGJlIG9kZAomIzQzOwkgKiBvdXRsaWVycywgc2ltcGx5IG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMuCiYjNDM7CSAqLwomIzQzOwlpZiAobWFwX2lzX3ByaXZhdGUobWFwKSAmYW1wOyZhbXA7IGZpbGVfaXNfZGV2X3plcm8obWFwLSZndDtmaWxlKSkKJiM0MzsJCW1hcF9zZXRfYW5vbihtYXApOwomIzQzOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXN0cnVjdCBtbWFwX3N0YXRlICptYXApCiB7Ci0JaWYgKG1hcC0mZ3Q7dm1fb3BzKQotCQl2bWEtJmd0O3ZtX29wcyA9IG1hcC0mZ3Q7dm1fb3BzOwotCWVsc2UJLyogT25seSAvZGV2L3plcm8gc2hvdWxkIGRvIHRoaXMuICovCi0JCXZtYV9zZXRfYW5vbnltb3VzKHZtYSk7CiYjNDM7CXZtYS0mZ3Q7dm1fb3BzID0gbWFwLSZndDt2bV9vcHM7CiAJdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBtYXAtJmd0O3ZtX3ByaXZhdGVfZGF0YTsKIH0KIApAQCAtMjg4Miw3ICYjNDM7MjkwNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJYWxsb2NhdGVkX25ldyA9IHRydWU7CiAJfQogCi0JaWYgKGhhdmVfbW1hcF9wcmVwYXJlKQomIzQzOwlpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgJmFtcDsmYW1wOyAhbWFwX2lzX2Fub24oJmFtcDttYXApKQogCQlzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHModm1hLCAmYW1wO21hcCk7CiAKIAlfX21tYXBfY29tcGxldGUoJmFtcDttYXAsIHZtYSk7CmRpZmYgLS1naXQgYS9tbS92bWEuaCBiL21tL3ZtYS5oCmluZGV4IDAyNGZhYmU2MzU2MGEuLmU5N2JkMmRmYTc4NmQgMTAwNjQ0Ci0tLSBhL21tL3ZtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYS5oCkBAIC0yNjcsOSAmIzQzOzI2Nyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfc2FuZV9wZ29mZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBwZ29mZikKIAkgKi8KIAlpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSkKIAkJcmV0dXJuOwotCS8qIE1BUF9QUklWQVRFLS9kZXYvemVybyBpcyBhbm9uLCBub24tTlVMTCB2bV9maWxlLCBidXQgaGFzIGZpbGUgcGdvZmYuICovCi0JaWYgKHZtYS0mZ3Q7dm1fZmlsZSkKLQkJcmV0dXJuOwogCS8qIElmIGZhdWx0ZWQgaW4sIGNvdWxkIGhhdmUgYmVlbiByZW1hcHBlZC4gKi8KIAlpZiAodm1hLSZndDthbm9uX3ZtYSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMKaW5kZXggNTJiODcyN2I2NjI4ZS4uN2RkMjkzMzQxN2MxZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jCkBAIC0xMzYyLDYgJiM0MzsxMzYyLDEwMSBAQCBURVNUX0YobWVyZ2UsIGFub25fYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKQogCUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgNSAqIHBhZ2Vfc2l6ZSk7CiB9CiAKJiM0MztURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX3VuZmF1bHRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gJmFtcDtzZWxmLSZndDtwcm9jbWFwOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwomIzQzOwljaGFyICpjYXJ2ZW91dCA9IHNlbGYtJmd0O2NhcnZlb3V0OwomIzQzOwljaGFyICpwdHIsICpwdHIyOwomIzQzOwlpbnQgZmRfemVybzsKJiM0MzsKJiM0MzsJaWYgKGFjY2VzcygmIzM0Oy9kZXYvemVybyYjMzQ7LCBGX09LKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O05vIC9kZXYvemVyby4mIzM0Oyk7CiYjNDM7CWZkX3plcm8gPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRXUik7CiYjNDM7CUFTU0VSVF9ORShmZF96ZXJvLCAtMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1hcCB0d28gTUFQX1BSSVZBVEUtL2Rldi96ZXJvIFZNQXMgbmV4dCB0byBvbmUgYW5vdGhlciB3aXRoIG9mZnNldCAwCiYjNDM7CSAqIGVhY2guCiYjNDM7CSAqCiYjNDM7CSAqIFdpdGggdGhlc2UgYmVpbmcgbWFkZSB0cnVseSBhbm9ueW1vdXMgdXBvbiBtYXBwaW5nLCB0aGV5IHdpbGwKJiM0MzsJICogbWVyZ2UuIElmIHRoZXkgd2VyZSBmaWxlLWJhY2tlZCBWTUFzIHRoZSBwYWdlIG9mZnNldHMgd291bGQgcHJldmVudAomIzQzOwkgKiB0aGUgbWVyZ2U6CiYjNDM7CSAqCiYjNDM7CSAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXwKJiM0MzsJICogfCBwdHIgfHwgcHRyMiB8IC0mZ3Q7IHwgICAgIHB0ciAgICAgfAomIzQzOwkgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18CiYjNDM7CSAqLwomIzQzOwlwdHIgPSBtbWFwKGNhcnZlb3V0LCA1ICogcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApOwomIzQzOwlwdHIyID0gbW1hcCgmYW1wO2NhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLAomIzQzOwkJICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApOwomIzQzOwljbG9zZShmZF96ZXJvKTsKJiM0MzsJQVNTRVJUX05FKHB0ciwgTUFQX0ZBSUxFRCk7CiYjNDM7CUFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovCiYjNDM7CUFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgMTAgKiBwYWdlX3NpemUpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX2ZhdWx0ZWRfdW5mYXVsdGVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSAmYW1wO3NlbGYtJmd0O3Byb2NtYXA7CiYjNDM7CXVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLSZndDtwYWdlX3NpemU7CiYjNDM7CWNoYXIgKmNhcnZlb3V0ID0gc2VsZi0mZ3Q7Y2FydmVvdXQ7CiYjNDM7CWNoYXIgKnB0ciwgKnB0cjI7CiYjNDM7CWludCBmZF96ZXJvOwomIzQzOwomIzQzOwlpZiAoYWNjZXNzKCYjMzQ7L2Rldi96ZXJvJiMzNDssIEZfT0spKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7Tm8gL2Rldi96ZXJvLiYjMzQ7KTsKJiM0MzsJZmRfemVybyA9IG9wZW4oJiMzNDsvZGV2L3plcm8mIzM0OywgT19SRFdSKTsKJiM0MzsJQVNTRVJUX05FKGZkX3plcm8sIC0xKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFwIGEgTUFQX1BSSVZBVEUgbWFwcGluZyBvZiAvZGV2L3plcm8gd2l0aCBwYWdlIG9mZnNldCAwLCB0aGVuIGZhdWx0CiYjNDM7CSAqIGl0IGluOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKJiM0MzsJICogfCAgICAgICAgICAgZmF1bHRlZCAgICAgICAgICAgICB8CiYjNDM7CSAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJcHRyID0gbW1hcChjYXJ2ZW91dCwgMTUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQkgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7CiYjNDM7CUFTU0VSVF9ORShwdHIsIE1BUF9GQUlMRUQpOwomIzQzOwltZW1zZXQocHRyLCAmIzM5O3gmIzM5OywgMTUgKiBwYWdlX3NpemUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVbm1hcCB0aGUgbWlkZGxlOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXwKJiM0MzsJICogfCBmYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8CiYjNDM7CSAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJQVNTRVJUX0VRKG11bm1hcCgmYW1wO3B0cls1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSksIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgaW4gYSBuZXcgdW5mYXVsdGVkIG1hcHBpbmcgaW4gdGhlIG1pZGRsZSB3aXRoIHBhZ2Ugb2Zmc2V0IDAgLQomIzQzOwkgKiB0aGlzIHNob3VsZCBtZXJnZSBhbmQgd291bGQgbm90IGlmIGl0IHdlcmUgdHJlYXRlZCBhcyBhIGZpbGUgcmF0aGVyCiYjNDM7CSAqIHRoYW4gcHVyZSBhbm9uOgomIzQzOwkgKgomIzQzOwkgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXwKJiM0MzsJICogfCBmYXVsdGVkIHwgdW5mYXVsdGVkIHwgZmF1bHRlZCB8CiYjNDM7CSAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tfAomIzQzOwkgKi8KJiM0MzsJcHRyMiA9IG1tYXAoJmFtcDtjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSwKJiM0MzsJCSAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwKJiM0MzsJCSAgICBmZF96ZXJvLCAwKTsKJiM0MzsJY2xvc2UoZmRfemVybyk7CiYjNDM7CUFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovCiYjNDM7CUFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7CiYjNDM7CUFTU0VSVF9FUShwcm9jbWFwLSZndDtxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgJiM0MzsgMTUgKiBwYWdlX3NpemUpOwomIzQzO30KJiM0MzsKIFRFU1RfRihtZXJnZV93aXRoX2ZvcmssIG1yZW1hcF9mYXVsdGVkX3RvX3VuZmF1bHRlZF9wcmV2KQogewogCXN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gJmFtcDtzZWxmLSZndDtwcm9jbWFwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jCmluZGV4IDQyMDljNjQyODNkNmYuLmJiY2E5ZjllMjc0MzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmMKQEAgLTUxLDcgJiM0Mzs1MSw3IEBAIGludCBtYWluKHZvaWQpCiAJaW50IGZkOwogCXVuc2lnbmVkIGxvbmcgYSwgYjsKIAotCWZkID0gb3BlbigmIzM0Oy9kZXYvemVybyYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9wcm9jL3NlbGYvZXhlJiMzNDssIE9fUkRPTkxZKTsKIAlpZiAoZmQgPT0gLTEpCiAJCXJldHVybiAxOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMKaW5kZXggZTZhYTAwYTE4M2JjZC4uNTc4NmNkZmZiYmY2MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuYwpAQCAtNTcsNyAmIzQzOzU3LDcgQEAgaW50IG1haW4odm9pZCkKIAlpbnQgZmQ7CiAJdW5zaWduZWQgbG9uZyBhLCBiOwogCi0JZmQgPSBvcGVuKCYjMzQ7L2Rldi96ZXJvJiMzNDssIE9fUkRPTkxZKTsKJiM0MzsJZmQgPSBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9leGUmIzM0OywgT19SRE9OTFkpOwogCWlmIChmZCA9PSAtMSkKIAkJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oCmluZGV4IDRjNTg0ODdiNzY0ZTkuLjU2NjkwODFkOTFiOWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaApAQCAtMTYzOCw5ICYjNDM7MTYzOCwxNSBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2Fub25fcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAljb25zdCBwZ29mZl90IHBnb2ZmID0gX19saW5lYXJfYW5vbl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7CiAKIAlWTV9XQVJOX09OX09OQ0UoIXZtYV9pc19jb3dfbWFwcGluZyh2bWEpKTsKLQkvKiBBY2NvdW50IGZvciBNQVBfUFJJVkFURS0vZGV2L3plcm8gd2hpY2ggaXMgb25seSBzZW1pLWFub255bW91cy4gKi8KLQlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpICZhbXA7JmFtcDsgIXZtYS0mZ3Q7dm1fZmlsZSkKJiM0MzsJaWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSkKIAkJVk1fV0FSTl9PTl9PTkNFKHBnb2ZmICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykpOwogCiAJcmV0dXJuIHBnb2ZmOwogfQomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wczsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmaWxlICZhbXA7JmFtcDsgZmlsZS0mZ3Q7Zl9vcCA9PSAmYW1wO3plcm9fZm9wczsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCmluZGV4IDRhMzljOWQ1MDQ4OTYuLjhjNDgyNjQ5OWY0MDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jCkBAIC0xMiw2ICYjNDM7MTIsMTUgQEAgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtYV9kdW1teV92bV9vcHM7CiBzdHJ1Y3QgYW5vbl92bWEgZHVtbXlfYW5vbl92bWE7CiBzdHJ1Y3QgdGFza19zdHJ1Y3QgX19jdXJyZW50OwogCiYjNDM7c3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzID0gewomIzQzOwkubW1hcF9wcmVwYXJlID0gbW1hcF96ZXJvX3ByZXBhcmUsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYWxsb2Nfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJcGdvZmZfdCBwZ29mZiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jCmluZGV4IGM4NWJjMDAwZDFjYjcuLmZhNzNmYWZmMjI2MjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMKQEAgLTQ1LDcgJiM0Mzs0NSw0NCBAQCBzdGF0aWMgYm9vbCB0ZXN0X21tYXBfcmVnaW9uX2Jhc2ljKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKQomIzQzO3sKJiM0MzsJY29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCwKJiM0MzsJCQlWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQpOwomIzQzOwlzdHJ1Y3QgZmlsZSBmaWxlID0gewomIzQzOwkJLmZfb3AgPSAmYW1wO3plcm9fZm9wcywKJiM0MzsJfTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9OwomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsJdW5zaWduZWQgbG9uZyBhZGRyOwomIzQzOwlWTUFfSVRFUkFUT1Iodm1pLCAmYW1wO21tLCAwKTsKJiM0MzsKJiM0MzsJY3VycmVudC0mZ3Q7bW0gPSAmYW1wO21tOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBNYXAgYSBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZyBhdCBhZGRyZXNzIDB4MzAwMDAwIHdpdGggYSBwYWdlCiYjNDM7CSAqIG9mZnNldCBvZiAweDEwLCB3aGljaCB3ZSBleHBlY3QgdG8gYmUgcmVzZXQgdG8gdGhlIGFub255bW91cyBwYWdlCiYjNDM7CSAqIG9mZnNldC4KJiM0MzsJICovCiYjNDM7CWFkZHIgPSBfX21tYXBfcmVnaW9uKCZhbXA7ZmlsZSwgMHgzMDAwMDAsIDB4MzAwMCwgdm1hX2ZsYWdzLCAweDEwLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKGFkZHIsIDB4MzAwMDAwKTsKJiM0MzsKJiM0MzsJLyogQXNzZXJ0IHRoYXQgaXQgdHJ1bHkgaXMgYW4gYW5vbnltb3VzIG1hcHBpbmcuICovCiYjNDM7CXZtYSA9IHZtYV9sb29rdXAoJmFtcDttbSwgYWRkcik7CiYjNDM7CUFTU0VSVF9ORSh2bWEsIE5VTEwpOwomIzQzOwlBU1NFUlRfVFJVRSh2bWFfaXNfYW5vbnltb3VzKHZtYSkpOwomIzQzOwlBU1NFUlRfRVEodm1hLSZndDt2bV9maWxlLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhLCBOVUxMKTsKJiM0MzsJLyogRXhwZWN0IGFub255bW91cyBwYWdlIG9mZnNldHMuICovCiYjNDM7CUFTU0VSVF9FUSh2bWEtJmd0O3ZtX3Bnb2ZmLCAweDMwMCk7CiYjNDM7CUFTU0VSVF9FUSh2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpLCAweDMwMCk7CiYjNDM7CiYjNDM7CWNsZWFudXBfbW0oJmFtcDttbSwgJmFtcDt2bWkpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydW5fbW1hcF90ZXN0cyhpbnQgKm51bV90ZXN0cywgaW50ICpudW1fZmFpbCkKIHsKIAlURVNUKG1tYXBfcmVnaW9uX2Jhc2ljKTsKJiM0MzsJVEVTVChwdXJlX2Fub25fZGV2X3plcm8pOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDkzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBmaXJlIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBwcmltYXJpbHkgZGVhbGluZyB3aXRoIGEgcmVmYWN0b3IsIG1vdmluZyBgZHJpdmVycy9jaGFyL21lbS5jYCB0byBgbW0vY2hhci1tZW0uY2AuIFRoYXQmIzM5O3Mgbm90IHRoZSBjcml0aWNhbCBwYXJ0IGhlcmUuIFRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgL2Rldi96ZXJvYCBNQVBfUFJJVkFURSBtYXBwaW5ncyBhcmUgaGFuZGxlZC4KClByZXZpb3VzbHksIHRoZXJlIHdlcmUgc29tZSBwb3RlbnRpYWxseSAmIzM0O3NlbWktYW5vbnltb3VzJiMzNDsgc3RhdGVzLiBOb3csIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIG1ha2luZyB0aGVzZSB0cnVseSBhbm9ueW1vdXMgYnkgY2xlYXJpbmcgdGhlIGBmaWxlYCBwb2ludGVyIGFuZCBgdm1fb3BzYCB3aXRoaW4gYG1tYXBfemVyb19wcmVwYXJlYCBhbmQgYG1hcF9zZXRfYW5vbmAuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIHNoYXJlZCBtYXBwaW5ncyBhbmQgdGhlbiBoYW5kbGluZyBwcml2YXRlIG1hcHBpbmdzIG9mIGAvZGV2L3plcm9gLiBUaGVyZSBhcmUgYSBsb3Qgb2YgZGV0YWlscyByZWxhdGVkIHRvIGNoYW5nZXMgd2l0aGluIGBfX21tYXBfcmVnaW9uYCwgYW5kIEkgbmVlZCB0byByZXZpZXcgdGhvc2Ugc2VjdGlvbnMgd2l0aGluIGBtbS92bWEuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4KCkkgc2VlIGEgbmV3IGBmaWxlX2lzX2Rldl96ZXJvKClgIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwgZm9yIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYy4gUGx1cywgdGhlcmUgYXJlIHNvbWUgY2xlYW51cHMgb2YgY29tbWVudHMgYW5kIGNoZWNrcyBpbiB2YXJpb3VzIGhlYWRlciBmaWxlcyByZWxhdGVkIHRvIGAvZGV2L3plcm9gIGFuZCBgTUFQX1BSSVZBVEVgIGNhc2VzLiBJJiMzOTttIGFsc28gc2VlaW5nIGFkZGVkIHRlc3RzLCB3aGljaCBpcyBnb29kLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgaXMgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBsZWFrcy4gTGV0JiMzOTtzIHJldmlldyB0aGUgS01TQU4gcmVxdWlyZW1lbnRzLiBUaGUgZ2VuZXJhbCBydWxlIGlzOiBJZiBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBjYW4gY2F0Y2ggdGhlIGJ1Zywgd2UgZG9uJiMzOTt0IG5lZWQgS01TQU4uIFdlIG9ubHkgbmVlZCBLTVNBTiBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyB0aGluZ3MgbGlrZToKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHBvdGVudGlhbCBpbmZvIGxlYWspLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4KNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy4KCkFuZCwgd2UgY2FuIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgdGhpbmdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKEtBU0FOKSBvciBpZiBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLgoKTGV0JiMzOTtzIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgX19tbWFwX3JlZ2lvbmAgYW5kIGBjYWxsX21tYXBfcHJlcGFyZWAgYW5kIG5lYXJieSBjb2RlIHdpdGhpbiBgbW0vdm1hLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaWYgd2UmIzM5O3JlIG5vdyBtb3JlIGFnZ3Jlc3NpdmVseSBjbGVhcmluZyBgZmlsZWAgYW5kIGB2bV9vcHNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgY2xlYXJpbmcgdGhlc2UgcG9pbnRlcnMgZG9lc24mIzM5O3QgY3JlYXRlIGEgd2luZG93IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgb3BlcmF0aW9ucywgb3IgYnJhbmNoaW5nIGxvZ2ljIHRoYXQgdG91Y2hlcyB0aGVzZSB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlZ2lvbnMuIFRoZSBrZXkgaXMgdG8gc2VlIGlmIGJ5IGhhbmRsaW5nIHRoZXNlIG1hcHBpbmdzIHdpdGggdGhlIGNoYW5nZXMsIHdlJiMzOTt2ZSBpbmFkdmVydGVudGx5IGNyZWF0ZWQgYSBwYXRoIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciBgX19tbWFwX3JlZ2lvbmAgaW4gYG1tL3ZtYS5jYCwgcmVhZCB0aGUgY29kZSBhcm91bmQgaXQsIGFuZCBmb2xsb3cgdGhlIHJlbGV2YW50IHBhdGhzLCBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHRvdWNoZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NhbGxfbW1hcF9wcmVwYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYS5jPTI3NjM9c3RhdGljIGludCBjYWxsX2FjdGlvbl9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4tLVxubW0vdm1hLmMtMjc4NS0gKi9cbm1tL3ZtYS5jOjI3ODY6c3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxubW0vdm1hLmMtMjc4Ny1cdFx0c3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbi0tXG5tbS92bWEuYz0yODYzPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS92bWEuYy0yODg3LVx0aWYgKCFlcnJvciBcdTAwMjZcdTAwMjYgaGF2ZV9tbWFwX3ByZXBhcmUpXG5tbS92bWEuYzoyODg4Olx0XHRlcnJvciA9IGNhbGxfbW1hcF9wcmVwYXJlKFx1MDAyNm1hcCwgXHUwMDI2ZGVzYyk7XG5tbS92bWEuYy0yODg5LVx0aWYgKGVycm9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc5MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqRGlnZ2luZyBpbnRvIGBtbS92bWEuY2AgLSBMaW5lcyAyNzYwLTI5MTUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG1tL3ZtYS5jYCBhZ2Fpbi4gSSYjMzk7bSBmb2N1c2luZyBvbiBsaW5lcyAyNzYwIHRvIDI5MTUgc3BlY2lmaWNhbGx5LiBJIHJlY2FsbCB0aGF0IGFyZWEgb2Z0ZW4gZGVhbHMgd2l0aCB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIG1hbmFnZW1lbnQsIGFuZCBnaXZlbiB0aGUgY29udGV4dCBJJiMzOTttIHdvcmtpbmcgd2l0aCwgSSBzdXNwZWN0IHRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgbG9naWMgYXJvdW5kIFtJbnNlcnQgdGhlIHVzZXImIzM5O3MgZmllbGQgZXhwZXJ0aXNlIGhlcmUgLSBlLmcuLCBtZW1vcnkgbWFwcGluZyBmb3Igc2hhcmVkIGxpYnJhcmllcywgYW5vbnltb3VzIHBhZ2UgYWxsb2NhdGlvbiwgaGFuZGxpbmcgb2YgaHVnZSBwYWdlcywgb3IgZmF1bHQgaGFuZGxpbmddLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBWTUFzLCBtYXliZSByZWxhdGVkIHRvIGluc2VydGlvbiwgcmVtb3ZhbCwgb3IgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdGhlIGxvY2tzIGJlaW5nIHVzZWQgKGxpa2VseSBhIHNwaW5sb2NrIG9yIG11dGV4IHJlbGF0ZWQgdG8gdGhlIGBtbWFwX3NlbWApLCBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGRpZmZlcmVudCBjb2RlIHBhdGhzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZSBWTUEgaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSBwYWdlIHRhYmxlcywgYW5kIGhvdyB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBwYWdlcyBhcmUgcmVsYXRlZCB0byB0aGUgVk1BLiBJJiMzOTttIHJlYWR5IHRvIHNwb3QgdGhlIGtleSB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbmFsIGNoZWNrcyB0aGF0IGRlZmluZSB0aGUgY29udHJvbCBmbG93IGZvciB0aGlzIHNlY3Rpb24gb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc4MDpcdCAqIHRoYXQgYXJlIHBlcm1pdHRlZCB0byBiZSB1cGRhdGVkIGJ5IHRoZSBjYWxsZXIuXG4yNzgxOlx0ICpcbjI3ODI6XHQgKiBBbGwgYnV0IHVzZXItZGVmaW5lZCBmaWVsZHMgd2lsbCBiZSBwcmUtcG9wdWxhdGVkIHdpdGggb3JpZ2luYWwgdmFsdWVzLlxuMjc4MzpcdCAqXG4yNzg0Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuMjc4NTpcdCAqL1xuMjc4NjpcdHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbjI3ODc6XHRcdFx0c3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbjI3ODg6XHR7XG4yNzg5Olx0XHRpbnQgZXJyO1xuMjc5MDpcdFxuMjc5MTpcdFx0LyogSW52b2tlIHRoZSBob29rLiAqL1xuMjc5MjpcdFx0ZXJyID0gdmZzX21tYXBfcHJlcGFyZShtYXAtXHUwMDNlZmlsZSwgZGVzYyk7XG4yNzkzOlx0XHRpZiAoZXJyKVxuMjc5NDpcdFx0XHRyZXR1cm4gZXJyO1xuMjc5NTpcdFxuMjc5NjpcdFx0LyogSXQmIzM5O3MgaW52YWxpZCBmb3IgbW1hcF9wcmVwcmFyZSBob29rcyB0byBjbGVhciB2bV9vcHMuICovXG4yNzk3Olx0XHRpZiAoIWRlc2MtXHUwMDNldm1fb3BzKVxuMjc5ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI3OTk6XHRcbjI4MDA6XHRcdGVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTtcbjI4MDE6XHRcdGlmIChlcnIpXG4yODAyOlx0XHRcdHJldHVybiBlcnI7XG4yODAzOlx0XG4yODA0Olx0XHQvKiBVcGRhdGUgZmllbGRzIHBlcm1pdHRlZCB0byBiZSBjaGFuZ2VkLiAqL1xuMjgwNTpcdFx0bWFwLVx1MDAzZXBnb2ZmID0gZGVzYy1cdTAwM2VwZ29mZjtcbjI4MDY6XHRcdGlmIChkZXNjLVx1MDAzZXZtX2ZpbGUgIT0gbWFwLVx1MDAzZWZpbGUpIHtcbjI4MDc6XHRcdFx0bWFwLVx1MDAzZWZpbGVfZG9lc250X25lZWRfZ2V0ID0gdHJ1ZTtcbjI4MDg6XHRcdFx0bWFwLVx1MDAzZWZpbGUgPSBkZXNjLVx1MDAzZXZtX2ZpbGU7XG4yODA5Olx0XHR9XG4yODEwOlx0XHRtYXAtXHUwMDNldm1hX2ZsYWdzID0gZGVzYy1cdTAwM2V2bWFfZmxhZ3M7XG4yODExOlx0XHRtYXAtXHUwMDNlcGFnZV9wcm90ID0gZGVzYy1cdTAwM2VwYWdlX3Byb3Q7XG4yODEyOlx0XHQvKiBVc2VyLWRlZmluZWQgZmllbGRzLiAqL1xuMjgxMzpcdFx0bWFwLVx1MDAzZXZtX29wcyA9IGRlc2MtXHUwMDNldm1fb3BzO1xuMjgxNDpcdFx0bWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGRlc2MtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuMjgxNTpcdFxuMjgxNjpcdFx0LypcbjI4MTc6XHRcdCAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZ1xuMjgxODpcdFx0ICogYW5vbnltb3VzIG1hcHBpbmdzLiBSYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVzZSBtYXBwaW5ncyB0byBiZSBvZGRcbjI4MTk6XHRcdCAqIG91dGxpZXJzLCBzaW1wbHkgbWFrZSB0aGVtIHRydWx5IGFub255bW91cy5cbjI4MjA6XHRcdCAqL1xuMjgyMTpcdFx0aWYgKG1hcF9pc19wcml2YXRlKG1hcCkgXHUwMDI2XHUwMDI2IGZpbGVfaXNfZGV2X3plcm8obWFwLVx1MDAzZWZpbGUpKVxuMjgyMjpcdFx0XHRtYXBfc2V0X2Fub24obWFwKTtcbjI4MjM6XHRcbjI4MjQ6XHRcdHJldHVybiAwO1xuMjgyNTpcdH1cbjI4MjY6XHRcbjI4Mjc6XHRzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yODI4Olx0XHRcdHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4yODI5Olx0e1xuMjgzMDpcdFx0dm1hLVx1MDAzZXZtX29wcyA9IG1hcC1cdTAwM2V2bV9vcHM7XG4yODMxOlx0XHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbjI4MzI6XHR9XG4yODMzOlx0XG4yODM0Olx0LypcbjI4MzU6XHQgKiBBcmUgd2UgZ3VhcmFudGVlZCBubyBkcml2ZXIgY2FuIGNoYW5nZSBzdGF0ZSBzdWNoIGFzIHRvIHByZWNsdWRlIEtTTSBtZXJnaW5nP1xuMjgzNjpcdCAqIElmIHNvLCBsZXQmIzM5O3Mgc2V0IHRoZSBLU00gbWVyZ2VhYmxlIGZsYWcgZWFybHkgc28gd2UgZG9uJiMzOTt0IGJyZWFrIFZNQSBtZXJnaW5nLlxuMjgzNzpcdCAqL1xuMjgzODpcdHN0YXRpYyBib29sIGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4yODM5Olx0e1xuMjg0MDpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBtYXAtXHUwMDNlZmlsZTtcbjI4NDE6XHRcbjI4NDI6XHRcdC8qIEFub255bW91cyBtYXBwaW5ncyBoYXZlIG5vIGRyaXZlciB3aGljaCBjYW4gY2hhbmdlIHRoZW0uICovXG4yODQzOlx0XHRpZiAoIWZpbGUpXG4yODQ0Olx0XHRcdHJldHVybiB0cnVlO1xuMjg0NTpcdFxuMjg0NjpcdFx0LypcbjI4NDc6XHRcdCAqIElmIC5tbWFwX3ByZXBhcmUoKSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGRyaXZlciB3aWxsIGhhdmUgYWxyZWFkeVxuMjg0ODpcdFx0ICogbWFuaXB1bGF0ZWQgc3RhdGUgcHJpb3IgdG8gdXBkYXRpbmcgS1NNIGZsYWdzLiBTbyBubyBuZWVkIHRvIHdvcnJ5XG4yODQ5Olx0XHQgKiBhYm91dCBtbWFwIGNhbGxiYWNrcyBtb2RpZnlpbmcgVk1BIGZsYWdzIGFmdGVyIHRoZSBLU00gZmxhZyBoYXMgYmVlblxuMjg1MDpcdFx0ICogdXBkYXRlZCBoZXJlLCB3aGljaCBjb3VsZCBvdGhlcndpc2UgYWZmZWN0IEtTTSBlbGlnaWJpbGl0eS5cbjI4NTE6XHRcdCAqL1xuMjg1MjpcdFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VtbWFwX3ByZXBhcmUpXG4yODUzOlx0XHRcdHJldHVybiB0cnVlO1xuMjg1NDpcdFxuMjg1NTpcdFx0Lyogc2htZW0gaXMgc2FmZS4gKi9cbjI4NTY6XHRcdGlmIChzaG1lbV9maWxlKGZpbGUpKVxuMjg1NzpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjI4NTg6XHRcbjI4NTk6XHRcdC8qIEFueSBvdGhlciAubW1hcCBjYWxsYmFjayBpcyBub3Qgc2FmZS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRm9jdXNpbmcgSW46IExpbmVzIDI4NjAtMjkyMCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgem9vbSBpbi4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIHNlY3Rpb24gZnJvbSBsaW5lIDI4NjAgdG8gMjkyMCBpcyBjcnVjaWFsLCBhbmQgaXQmIzM5O3MgdGltZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhhdCByYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGFyZ3VtZW50IHByZXNlbnRlZCB0aGVyZS4gV2hhdCYjMzk7cyB0aGUgY29yZSBwb2ludCBiZWluZyBjb252ZXllZCB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzZWN0aW9uPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgc2VnbWVudCBjb3VsZCBiZSBjcml0aWNhbCB0byBjb25maXJtaW5nIG9yIHJlZnV0aW5nIG15IHByZWxpbWluYXJ5IGh5cG90aGVzaXMuIFRoaXMgYXJlYSBpcyBsaWtlbHkgd2hlcmUgdGhlIGF1dGhvciByZWFsbHkgZGlncyBpbnRvIHRoZSBjb3JlIGlzc3VlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGF1dGhvciBzdXBwb3J0cyB0aGUgY2xhaW1zLCB0aGUgdHlwZSBvZiBldmlkZW5jZSB0aGV5IGxldmVyYWdlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgc2hpZnRzIGluIHRvbmUgb3IgYXBwcm9hY2ggdGhhdCBJIG1pZ2h0IGhhdmUgaW5pdGlhbGx5IG1pc3NlZC4gSXQmIzM5O3MgdGltZSBmb3IgYSBjbG9zZSByZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3ZtYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyODYwOlx0XHRyZXR1cm4gZmFsc2U7XG4yODYxOlx0fVxuMjg2MjpcdFxuMjg2MzpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbjI4NjQ6XHRcdFx0dW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncyxcbjI4NjU6XHRcdFx0dW5zaWduZWQgbG9uZyBwZ29mZiwgc3RydWN0IGxpc3RfaGVhZCAqdWYpXG4yODY2Olx0e1xuMjg2NzpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuMjg2ODpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBOVUxMO1xuMjg2OTpcdFx0Ym9vbCBoYXZlX21tYXBfcHJlcGFyZSA9IGZpbGUgXHUwMDI2XHUwMDI2IGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VtbWFwX3ByZXBhcmU7XG4yODcwOlx0XHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgYWRkcik7XG4yODcxOlx0XHRjb25zdCBwZ29mZl90IGFub25fcGdvZmYgPSBhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuMjg3MjpcdFx0TU1BUF9TVEFURShtYXAsIG1tLCBcdTAwMjZ2bWksIGFkZHIsIGxlbiwgcGdvZmYsIGFub25fcGdvZmYsIHZtYV9mbGFncywgZmlsZSk7XG4yODczOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9kZXNjIGRlc2MgPSB7XG4yODc0Olx0XHRcdC5tbSA9IG1tLFxuMjg3NTpcdFx0XHQuZmlsZSA9IGZpbGUsXG4yODc2Olx0XHRcdC5hY3Rpb24gPSB7XG4yODc3Olx0XHRcdFx0LnR5cGUgPSBNTUFQX05PVEhJTkcsIC8qIERlZmF1bHQgdG8gbm8gZnVydGhlciBhY3Rpb24uICovXG4yODc4Olx0XHRcdH0sXG4yODc5Olx0XHRcdC52bV9vcHMgPSBcdTAwMjZ2bWFfZHVtbXlfdm1fb3BzLFxuMjg4MDpcdFx0fTtcbjI4ODE6XHRcdGJvb2wgYWxsb2NhdGVkX25ldyA9IGZhbHNlO1xuMjg4MjpcdFx0aW50IGVycm9yO1xuMjg4MzpcdFxuMjg4NDpcdFx0bWFwLmNoZWNrX2tzbV9lYXJseSA9IGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KFx1MDAyNm1hcCk7XG4yODg1Olx0XG4yODg2Olx0XHRlcnJvciA9IF9fbW1hcF9zZXR1cChcdTAwMjZtYXAsIFx1MDAyNmRlc2MsIHVmKTtcbjI4ODc6XHRcdGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IGhhdmVfbW1hcF9wcmVwYXJlKVxuMjg4ODpcdFx0XHRlcnJvciA9IGNhbGxfbW1hcF9wcmVwYXJlKFx1MDAyNm1hcCwgXHUwMDI2ZGVzYyk7XG4yODg5Olx0XHRpZiAoZXJyb3IpXG4yODkwOlx0XHRcdGdvdG8gYWJvcnRfbXVubWFwO1xuMjg5MTpcdFxuMjg5MjpcdFx0aWYgKG1hcC5jaGVja19rc21fZWFybHkpXG4yODkzOlx0XHRcdHVwZGF0ZV9rc21fZmxhZ3MoXHUwMDI2bWFwKTtcbjI4OTQ6XHRcbjI4OTU6XHRcdC8qIEF0dGVtcHQgdG8gbWVyZ2Ugd2l0aCBhZGphY2VudCBWTUFzLi4uICovXG4yODk2Olx0XHRpZiAobWFwLnByZXYgfHwgbWFwLm5leHQpIHtcbjI4OTc6XHRcdFx0Vk1HX01NQVBfU1RBVEUodm1nLCBcdTAwMjZtYXAsIC8qIHZtYSA9ICovIE5VTEwpO1xuMjg5ODpcdFxuMjg5OTpcdFx0XHR2bWEgPSB2bWFfbWVyZ2VfbmV3X3JhbmdlKFx1MDAyNnZtZyk7XG4yOTAwOlx0XHR9XG4yOTAxOlx0XG4yOTAyOlx0XHQvKiAuLi5idXQgaWYgd2UgY2FuJiMzOTt0LCBhbGxvY2F0ZSBhIG5ldyBWTUEuICovXG4yOTAzOlx0XHRpZiAoIXZtYSkge1xuMjkwNDpcdFx0XHRlcnJvciA9IF9fbW1hcF9uZXdfdm1hKFx1MDAyNm1hcCwgXHUwMDI2dm1hLCBcdTAwMjZkZXNjLmFjdGlvbik7XG4yOTA1Olx0XHRcdGlmIChlcnJvcilcbjI5MDY6XHRcdFx0XHRnb3RvIHVuYWNjdF9lcnJvcjtcbjI5MDc6XHRcdFx0YWxsb2NhdGVkX25ldyA9IHRydWU7XG4yOTA4Olx0XHR9XG4yOTA5Olx0XG4yOTEwOlx0XHRpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgXHUwMDI2XHUwMDI2ICFtYXBfaXNfYW5vbihcdTAwMjZtYXApKVxuMjkxMTpcdFx0XHRzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHModm1hLCBcdTAwMjZtYXApO1xuMjkxMjpcdFxuMjkxMzpcdFx0X19tbWFwX2NvbXBsZXRlKFx1MDAyNm1hcCwgdm1hKTtcbjI5MTQ6XHRcbjI5MTU6XHRcdGlmIChoYXZlX21tYXBfcHJlcGFyZSBcdTAwMjZcdTAwMjYgYWxsb2NhdGVkX25ldykge1xuMjkxNjpcdFx0XHRlcnJvciA9IG1tYXBfYWN0aW9uX2NvbXBsZXRlKHZtYSwgXHUwMDI2ZGVzYy5hY3Rpb24sXG4yOTE3Olx0XHRcdFx0XHRcdCAgICAgLyppc19jb21wYXQ9Ki9mYWxzZSk7XG4yOTE4Olx0XHRcdGlmIChlcnJvcilcbjI5MTk6XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTE0CgkJCQkJCQlvdXRwdXQ6IDI0NQoJCQkJCQkJdGhvdWdodHM6IDgwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcgaG93IGAvZGV2L3plcm9gIE1BUF9QUklWQVRFIG1hcHBpbmdzIGFyZSBoYW5kbGVkLiBJbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHNlbWktYW5vbnltb3VzIGFwcHJvYWNoLCBpdCYjMzk7cyBtYWtpbmcgdGhlbSB0cnVseSBhbm9ueW1vdXMgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbSkgY29kZS4gVGhhdCYjMzk7cyBhIGdvb2QgY2xlYW51cCwgYW5kIHRoZSBtb3ZlIGZyb20gYGRyaXZlcnMvY2hhci9tZW0uY2AgdG8gYG1tL2NoYXItbWVtLmNgIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIExldCYjMzk7cyBkaWcgaW46CgoqICAgKipJbml0aWFsaXphdGlvbjoqKiBMb29raW5nIGF0IHRoZSBjb2RlLCBwYXJ0aWN1bGFybHkgd2l0aGluIGBfX21tYXBfcmVnaW9uYCwgdGhlIGBkZXNjYCBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycy4gQ3J1Y2lhbGx5LCBpbiBgbWFwX3NldF9hbm9uYCwgdGhlIHBhdGNoIGV4cGxpY2l0bHkgc2V0cyBgbWFwLSZndDtmaWxlID0gTlVMTGAsIGBtYXAtJmd0O3ZtX29wcyA9IE5VTExgLCBhbmQgYG1hcC0mZ3Q7cGdvZmZgIGNvcnJlY3RseS4gTm90aGluZyBpcyBsZWZ0IGhhbmdpbmcuIFRoZXJlIGFyZSBubyBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy4KKiAgICoqRGF0YSBGbG93OioqIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGFueSBuZXcgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGNvdWxkIGJlIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGluZmx1ZW5jZSBicmFuY2hpbmcgbG9naWMuIFRoZXJlJiMzOTtzIG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBvciBhbnl0aGluZyBsaWtlIHRoYXQgdGhhdCB3b3VsZCBleHBvc2Uga2VybmVsIG1lbW9yeS4KKiAgICoqS0FTQU4gdnMuIEtNU0FOOioqIFRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2RlcyBoZXJlIGFyZSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IHByb2JsZW1zOiBsb2dpYyBlcnJvcnMgaW4gVk1BIGxpZmVjeWNsZXMsIFZNQSBtZXJnaW5nIGJ1Z3MsIHBhZ2Ugb2Zmc2V0IGlzc3VlcywgYW5kIHRoZSBkcmVhZGVkIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiBzdHVmZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlICplaXRoZXIqIG9mIHRob3NlIHJpc2tzLCBJIGRvbiYjMzk7dCBzZWUgYW55IG5lZWQgZm9yIEtNU0FOIGhlcmUuCgpUaGVyZWZvcmUsIG15IGZpbmFsIGFuYWx5c2lzIGlzIHRoYXQsIHRoaXMgcGF0Y2ggY2FuIGJlIGRlZW1lZCBzYWZlLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBJdCBpcyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgaGFuZGxpbmcgb2YgTUFQX1BSSVZBVEUgL2Rldi96ZXJvIG1hcHBpbmdzIHRvIG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMgVk1BcyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtb3ZpbmcgZHJpdmVycy9jaGFyL21lbS5jIHRvIG1tL2NoYXItbWVtLmMsIHVwZGF0aW5nIG1tYXBfcHJlcGFyZSBoYW5kbGluZywgYW5kIHJlbW92aW5nIHNwZWNpYWwtY2FzZSB3b3JrYXJvdW5kcyBmb3Igc2VtaS1hbm9ueW1vdXMgVk1BcykuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFsbCBzdHJ1Y3R1cmVzIChlLmcuIHN0cnVjdCB2bV9hcmVhX2Rlc2MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuLSBBbnkgYnVncyBzdGVtbWluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gVk1BIG1lcmdpbmcgZGlzY3JlcGFuY2llcywgcGFnZSBvZmZzZXQgZXJyb3JzLCBvciByZWZlcmVuY2UvbGlmZXRpbWUgbWFuYWdlbWVudCBpc3N1ZXMpIGFyZSBtZW1vcnkgbWFuYWdlbWVudC9sb2dpYyBpc3N1ZXMgdGhhdCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3MgdG8gbWFrZSB0aGVtIHRydWx5IGFub255bW91cyBWTUFzIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1vdmluZyBkcml2ZXJzL2NoYXIvbWVtLmMgdG8gbW0vY2hhci1tZW0uYywgdXBkYXRpbmcgbW1hcF9wcmVwYXJlIGhhbmRsaW5nLCBhbmQgcmVtb3Zpbmcgc3BlY2lhbC1jYXNlIHdvcmthcm91bmRzIGZvciBzZW1pLWFub255bW91cyBWTUFzKS5cblxuS01TQU4gdnMuIEtBU0FOIGFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHN0cnVjdHVyZXMgKGUuZy4gc3RydWN0IHZtX2FyZWFfZGVzYykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4tIEFueSBidWdzIHN0ZW1taW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyAoZS5nLiBWTUEgbWVyZ2luZyBkaXNjcmVwYW5jaWVzLCBwYWdlIG9mZnNldCBlcnJvcnMsIG9yIHJlZmVyZW5jZS9saWZldGltZSBtYW5hZ2VtZW50IGlzc3VlcykgYXJlIG1lbW9yeSBtYW5hZ2VtZW50L2xvZ2ljIGlzc3VlcyB0aGF0IHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgZXhpc3Rpbmcga2VybmVsIGRlYnVnIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6MzkuMjAxMzA3ODQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2NzQ1MjE3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU1VXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2FsbF9tbWFwX3ByZXBhcmVcIixcbiAgICBcImZpbGVfaXNfZGV2X3plcm9cIixcbiAgICBcIm1tYXBfemVyb19wcmVwYXJlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3MgdG8gbWFrZSB0aGVtIHRydWx5IGFub255bW91cyBWTUFzIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1vdmluZyBkcml2ZXJzL2NoYXIvbWVtLmMgdG8gbW0vY2hhci1tZW0uYywgdXBkYXRpbmcgbW1hcF9wcmVwYXJlIGhhbmRsaW5nLCBhbmQgcmVtb3Zpbmcgc3BlY2lhbC1jYXNlIHdvcmthcm91bmRzIGZvciBzZW1pLWFub255bW91cyBWTUFzKS5cXG5cXG5LTVNBTiB2cy4gS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHN0cnVjdHVyZXMgKGUuZy4gc3RydWN0IHZtX2FyZWFfZGVzYykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBBbnkgYnVncyBzdGVtbWluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gVk1BIG1lcmdpbmcgZGlzY3JlcGFuY2llcywgcGFnZSBvZmZzZXQgZXJyb3JzLCBvciByZWZlcmVuY2UvbGlmZXRpbWUgbWFuYWdlbWVudCBpc3N1ZXMpIGFyZSBtZW1vcnkgbWFuYWdlbWVudC9sb2dpYyBpc3N1ZXMgdGhhdCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhhbmRsaW5nIG9mIE1BUF9QUklWQVRFIC9kZXYvemVybyBtYXBwaW5ncyBzbyB0aGV5IGJlY29tZSB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3Mgd2l0aGluIGNvcmUgbW0gcmF0aGVyIHRoYW4gYmVpbmcgdHJlYXRlZCBhcyBzZW1pLWFub255bW91cyBmaWxlIG1hcHBpbmdzLiBJdCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gbW0vdm1hLmMsIG1tL2NoYXItbWVtLmMsIGFuZCBoZWFkZXIgaGVscGVycywgYWZmZWN0aW5nIFZNQSBtZXJnaW5nLCBwYWdlIG9mZnNldCBjYWxjdWxhdGlvbnMsIGFuZCBtbWFwIHByZXBhcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNjozOS4yMDEzMTM1NThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDU4OTczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2Mzk2NTg2ZTk4ZDU4MDg4OGM4MWFlZjdmMmQ2YjAzNjY5YTQ1NTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxMzoyNjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggM2ExOWRhNzRkMDBjOS4uYTBhNWRiNDQ0YzY2MyAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE3Mjc2LDcgKzE3Mjc2LDcgQEAgRjpcXHREb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1tZW1vcnktdGllcnNcXG4gRjpcXHREb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1udW1hXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9cXG4gRjpcXHREb2N1bWVudGF0aW9uL21tL1xcbi1GOlxcdGRyaXZlcnMvY2hhci9tZW0uY1xcbitGOlxcdG1tL2NoYXItbWVtLmNcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L2NtYS5oXFxuIEY6XFx0aW5jbHVkZS9saW51eC9kbWFwb29sLmhcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L2lvcmVtYXAuaFxcbkBAIC0xNzQ4MSw3ICsxNzQ4MSw3IEBAIEw6XFx0bGludXgtbW1Aa3ZhY2sub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBXOlxcdGh0dHA6Ly93d3cubGludXgtbW0ub3JnXFxuIFQ6XFx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9ha3BtL21tXFxuLUY6XFx0ZHJpdmVycy9jaGFyL21lbS5jXFxuK0Y6XFx0bW0vY2hhci1tZW0uY1xcbiBGOlxcdGluY2x1ZGUvdHJhY2UvZXZlbnRzL21tYXAuaFxcbiBGOlxcdGZzL3Byb2MvdGFza19tbXUuY1xcbiBGOlxcdGZzL3Byb2MvdGFza19ub21tdS5jXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZVxcbmluZGV4IGE0NmQ3YmY3YzRjODIuLmJiM2JmNjY5MzdiMzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlXFxuQEAgLTMsNyArMyw3IEBAXFxuICMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLlxcbiAjXFxuIFxcbi1vYmoteVxcdFxcdFxcdFxcdCs9IG1lbS5vIHJhbmRvbS5vXFxuK29iai15XFx0XFx0XFx0XFx0Kz0gcmFuZG9tLm9cXG4gb2JqLSQoQ09ORklHX1RUWV9QUklOVEspXFx0Kz0gdHR5cHJpbnRrLm9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBtaXNjLm9cXG4gb2JqLSQoQ09ORklHX1RFU1RfTUlTQ19NSU5PUilcXHQrPSBtaXNjX21pbm9yX2t1bml0Lm9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggZGQwOWM0MzhmYTIzZS4uODY0ZDVhYzM3MDRkZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5AQCAtMTU1MSwxMSArMTU1MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2Rlc2Nfc2V0X2Fub255bW91cyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxcbi17XFxuLVxcdGRlc2MtXFx1MDAzZXZtX29wcyA9IE5VTEw7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYW5vbnltb3VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiB7XFxuIFxcdHJldHVybiAhdm1hLVxcdTAwM2V2bV9vcHM7XFxuQEAgLTQ0MDgsOSArNDQwMyw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfcGFnZXMoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuICAqIElmIEB2bWEgaXMgYSBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoaXMgcmV0dXJucyB0aGVcXG4gICogcGFnZSBvZmZzZXQgd2l0aGluIHRoZSBmaWxlLlxcbiAgKlxcbi0gKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSwgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHNhdGlzZmllc1xcbi0gKiB2bWFfaXNfYW5vbnltb3VzKCkgYnV0IGhhcyBmaWxlLWJhY2tlZCBwYWdlIG9mZnNldCwgYW5kIE1BUF9QUklWQVRFLXBmbm1hcFxcbi0gKiByZWdpb25zIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLlxcbisgKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSBhbmQgQ29XIE1BUF9QUklWQVRFLXBmbm1hcCByZWdpb25zXFxuKyAqIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLlxcbiAgKlxcbiAgKiBSZXR1cm5zOiBUaGUgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWEuXFxuICAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuaW5kZXggMGFkZmE2NjA1NjUzZC4uOTM5ZjNhNWU5NzNmNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXFxuQEAgLTExMjgsOCArMTEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRjb25zdCBwZ29mZl90IHBnb2ZmID0gX19saW5lYXJfYW5vbl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcyk7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UoIXZtYV9pc19jb3dfbWFwcGluZyh2bWEpKTtcXG4tXFx0LyogQWNjb3VudCBmb3IgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHdoaWNoIGlzIG9ubHkgc2VtaS1hbm9ueW1vdXMuICovXFxuLVxcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgXFx1MDAyNlxcdTAwMjYgIXZtYS1cXHUwMDNldm1fZmlsZSlcXG4rXFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4gXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHBnb2ZmICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykpO1xcbiBcXG4gXFx0cmV0dXJuIHBnb2ZmO1xcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXFxuaW5kZXggZTcyNDVjYjg4YzY2NS4uMmEzZWM1M2Q2MmVlZiAxMDA2NDRcXG4tLS0gYS9tbS9NYWtlZmlsZVxcbisrKyBiL21tL01ha2VmaWxlXFxuQEAgLTU1LDcgKzU1LDggQEAgb2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4gXFx0XFx0XFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcXFxcbiBcXHRcXHRcXHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxcXFxuIFxcdFxcdFxcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxcXFxuLVxcdFxcdFxcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxcbitcXHRcXHRcXHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gY2hhci1tZW0ubyBcXFxcXFxuK1xcdFxcdFxcdCAgICQobW11LXkpXFxuIFxcbiAjIEdpdmUgJ3BhZ2VfYWxsb2MnIGl0cyBvd24gbW9kdWxlLXBhcmFtZXRlciBuYW1lc3BhY2VcXG4gcGFnZS1hbGxvYy15IDo9IHBhZ2VfYWxsb2Mub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9tbS9jaGFyLW1lbS5jXFxuc2ltaWxhcml0eSBpbmRleCA5NyVcXG5yZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvbWVtLmNcXG5yZW5hbWUgdG8gbW0vY2hhci1tZW0uY1xcbmluZGV4IDYzMjUzZDFkZTVkNzAuLmMwYjVmYjAxOTIyM2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jXFxuKysrIGIvbW0vY2hhci1tZW0uY1xcbkBAIC0xLDYgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKlxcbi0gKiAgbGludXgvZHJpdmVycy9jaGFyL21lbS5jXFxuKyAqICBtbS9jaGFyLW1lbS5jXFxuICAqXFxuICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzXFxuICAqXFxuQEAgLTMxLDYgKzMxLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rXFxuICNkZWZpbmUgREVWTUVNX01JTk9SXFx0MVxcbiAjZGVmaW5lIERFVlBPUlRfTUlOT1JcXHQ0XFxuIFxcbkBAIC01MDYsMTEgKzUwOCw3IEBAIHN0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4gXFx0aWYgKHZtYV9kZXNjX3Rlc3QoZGVzYywgVk1BX1NIQVJFRF9CSVQpKVxcbiBcXHRcXHRyZXR1cm4gc2htZW1femVyb19zZXR1cF9kZXNjKGRlc2MpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogVGhpcyBpcyBhIGhpZ2hseSB1bmlxdWUgc2l0dWF0aW9uIHdoZXJlIHdlIG1hcmsgYSBNQVBfUFJJVkFURSBtYXBwaW5nXFxuLVxcdCAqIG9mIC9kZXYvemVybyBhbm9ueW1vdXMsIGRlc3BpdGUgaXQgbm90IGJlaW5nLlxcbi1cXHQgKi9cXG4tXFx0dm1hX2Rlc2Nfc2V0X2Fub255bW91cyhkZXNjKTtcXG4rXFx0LyogTUFQX1BSSVZBVEUgc2VtYW50aWNzIGFyZSB0YWtlbiBjYXJlIG9mIGZvciB1cyBieSBjb3JlIG1tLiAqL1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNzA3LDYgKzcwNSwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XFxuICNlbmRpZlxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGZpbGVfaXNfZGV2X3plcm8oKSAtIGlzIHRoZSBzcGVjaWZpZWQgQGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSAvZGV2L3plcm9cXG4rICogZHJpdmVyP1xcbisgKiBAZmlsZTogRmlsZSB0byB0ZXN0LlxcbisgKiBSZXR1cm5zOiB0cnVlIGlmIGl0IGlzLCBmYWxzZSBvdGhlcndpc2UuXFxuKyAqL1xcbitib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0cmV0dXJuIGZpbGUgXFx1MDAyNlxcdTAwMjYgZmlsZS1cXHUwMDNlZl9vcCA9PSBcXHUwMDI2emVyb19mb3BzO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1lbW9yeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxcbiB7XFxuIFxcdGludCBtaW5vcjtcXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCAzOGIxMTY1MjEyYzk0Li4yNzgyOTI0YTI3N2M5IDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTIzNywxNSArMjM3LDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG4gXFx0aW50IGVyciA9IHZmc19tbWFwKGZpbGUsIHZtYSk7XFxuIFxcbi1cXHRpZiAobGlrZWx5KCFlcnIpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuIFxcdC8qXFxuLVxcdCAqIE9LLCB3ZSB0cmllZCB0byBjYWxsIHRoZSBmaWxlIGhvb2sgZm9yIG1tYXAoKSwgYnV0IGFuIGVycm9yXFxuLVxcdCAqIGFyb3NlLiBUaGUgbWFwcGluZyBpcyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgYW5kIHdlIG11c3Qgbm90IGludm9rZVxcbi1cXHQgKiBhbnkgZnVydGhlciBob29rcyBvbiBpdC5cXG4rXFx0ICogRWl0aGVyIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpIGFuZCBhbiBlcnJvciBhcm9zZVxcbitcXHQgKiBvciBhIGRyaXZlciBzZXQgdm1hLVxcdTAwM2V2bV9vcHMgPSBOVUxMIGludGVuZGluZyB0aGVyZSB0byBiZSBubyBWTUFcXG4rXFx0ICogb3BlcmF0aW9ucy5cXG4rXFx0ICpcXG4rXFx0ICogSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBWTUEgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0bid0XFxuK1xcdCAqIGludm9rZSBhbnkgZnVydGhlciBob29rcyBvbiBpdCwgaW4gdGhlIGxhdHRlciBjYXNlIHRoZSBob29rIGFjdHVhbGx5XFxuK1xcdCAqIHdhbnRlZCBubyBmdXJ0aGVyIGhvb2tzIHRvIGJlIGludm9rZWQsIHNvIGZpeCBib3RoIGJ5IHNldHRpbmcgZHVtbXlcXG4rXFx0ICogVk1BIG9wcy5cXG4gXFx0ICovXFxuLVxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnZtYV9kdW1teV92bV9vcHM7XFxuK1xcdGlmICh1bmxpa2VseShlcnIgfHwgIXZtYS1cXHUwMDNldm1fb3BzKSlcXG4rXFx0XFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBcXHUwMDI2dm1hX2R1bW15X3ZtX29wcztcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5AQCAtMTY1NCw0ICsxNjU3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuKy8qIGNoYXItbWVtLmMgKi9cXG4rYm9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKTtcXG4rXFxuICNlbmRpZlxcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDg5N2ZhMmI2MTM0NmYuLmM2MDc2M2VmNTYxY2YgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMjc4Niw3ICsyNzg2LDcgQEAgdW5zaWduZWQgbG9uZyBzaG1lbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0c2IgPSBmaWxlX2lub2RlKGZpbGUpLVxcdTAwM2VpX3NiO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBDYWxsZWQgZGlyZWN0bHkgZnJvbSBtbS9tbWFwLmMsIG9yIGRyaXZlcnMvY2hhci9tZW0uY1xcbitcXHRcXHRcXHQgKiBDYWxsZWQgZGlyZWN0bHkgZnJvbSBtbS9tbWFwLmMsIG9yIG1tL2NoYXItbWVtLmNcXG4gXFx0XFx0XFx0ICogZm9yIFxcXCIvZGV2L3plcm9cXFwiLCB0byBjcmVhdGUgYSBzaGFyZWQgYW5vbnltb3VzIG9iamVjdC5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdGlmIChJU19FUlIoc2htX21udCkpXFxuZGlmZiAtLWdpdCBhL21tL3ZtYS5jIGIvbW0vdm1hLmNcXG5pbmRleCAzNWU3YTY0ODU1ZmFkLi42ZmRjZTQ4NTJjZTYxIDEwMDY0NFxcbi0tLSBhL21tL3ZtYS5jXFxuKysrIGIvbW0vdm1hLmNcXG5AQCAtMjYyMSw2ICsyNjIxLDIzIEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWFwX3NldF9hbm9uKHN0cnVjdCBtbWFwX3N0YXRlICptYXApXFxuK3tcXG4rXFx0bWFwLVxcdTAwM2VmaWxlID0gTlVMTDtcXG4rXFx0bWFwLVxcdTAwM2V2bV9vcHMgPSBOVUxMO1xcbitcXHRtYXAtXFx1MDAzZXBnb2ZmID0gbWFwLVxcdTAwM2VhZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG1hcF9pc19wcml2YXRlKGNvbnN0IHN0cnVjdCBtbWFwX3N0YXRlICptYXApXFxuK3tcXG4rXFx0cmV0dXJuICF2bWFfZmxhZ3NfdGVzdChcXHUwMDI2bWFwLVxcdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbWFwX2lzX2Fub24oY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcXG4re1xcbitcXHRyZXR1cm4gbWFwX2lzX3ByaXZhdGUobWFwKSBcXHUwMDI2XFx1MDAyNiAhbWFwLVxcdTAwM2VmaWxlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBfX21tYXBfbmV3X3ZtYSgpIC0gQWxsb2NhdGUgYSBuZXcgVk1BIGZvciB0aGUgcmVnaW9uLCBhcyBtZXJnaW5nIHdhcyBub3RcXG4gICogcG9zc2libGUuXFxuQEAgLTI2MzQsOCArMjY1MSw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbiBzdGF0aWMgaW50IF9fbW1hcF9uZXdfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXAsXFxuIFxcdHN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKVxcbiB7XFxuLVxcdGNvbnN0IGJvb2wgaXNfYW5vbiA9ICFtYXAtXFx1MDAzZWZpbGUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0IXZtYV9mbGFnc190ZXN0KFxcdTAwMjZtYXAtXFx1MDAzZXZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xcbitcXHRjb25zdCBib29sIGlzX2Fub24gPSBtYXBfaXNfYW5vbihtYXApO1xcbiBcXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkgPSBtYXAtXFx1MDAzZXZtaTtcXG4gXFx0aW50IGVycm9yID0gMDtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuQEAgLTI3NzcsNiArMjc5MywxMCBAQCBzdGF0aWMgaW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbitcXHQvKiBJdCdzIGludmFsaWQgZm9yIG1tYXBfcHJlcHJhcmUgaG9va3MgdG8gY2xlYXIgdm1fb3BzLiAqL1xcbitcXHRpZiAoIWRlc2MtXFx1MDAzZXZtX29wcylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRlcnIgPSBjYWxsX2FjdGlvbl9wcmVwYXJlKG1hcCwgZGVzYyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTI3OTMsMTYgKzI4MTMsMjEgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbiBcXHRtYXAtXFx1MDAzZXZtX29wcyA9IGRlc2MtXFx1MDAzZXZtX29wcztcXG4gXFx0bWFwLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBkZXNjLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZ3MgYXJlIGFuIGFuY2llbnQgd2F5IG9mIGdldHRpbmdcXG4rXFx0ICogYW5vbnltb3VzIG1hcHBpbmdzLiBSYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVzZSBtYXBwaW5ncyB0byBiZSBvZGRcXG4rXFx0ICogb3V0bGllcnMsIHNpbXBseSBtYWtlIHRoZW0gdHJ1bHkgYW5vbnltb3VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKG1hcF9pc19wcml2YXRlKG1hcCkgXFx1MDAyNlxcdTAwMjYgZmlsZV9pc19kZXZfemVybyhtYXAtXFx1MDAzZWZpbGUpKVxcbitcXHRcXHRtYXBfc2V0X2Fub24obWFwKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdHN0cnVjdCBtbWFwX3N0YXRlICptYXApXFxuIHtcXG4tXFx0aWYgKG1hcC1cXHUwMDNldm1fb3BzKVxcbi1cXHRcXHR2bWEtXFx1MDAzZXZtX29wcyA9IG1hcC1cXHUwMDNldm1fb3BzO1xcbi1cXHRlbHNlXFx0LyogT25seSAvZGV2L3plcm8gc2hvdWxkIGRvIHRoaXMuICovXFxuLVxcdFxcdHZtYV9zZXRfYW5vbnltb3VzKHZtYSk7XFxuK1xcdHZtYS1cXHUwMDNldm1fb3BzID0gbWFwLVxcdTAwM2V2bV9vcHM7XFxuIFxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWFwLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuIH1cXG4gXFxuQEAgLTI4ODIsNyArMjkwNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbW1hcF9yZWdpb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0YWxsb2NhdGVkX25ldyA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChoYXZlX21tYXBfcHJlcGFyZSlcXG4rXFx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFxcdTAwMjZcXHUwMDI2ICFtYXBfaXNfYW5vbihcXHUwMDI2bWFwKSlcXG4gXFx0XFx0c2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHZtYSwgXFx1MDAyNm1hcCk7XFxuIFxcbiBcXHRfX21tYXBfY29tcGxldGUoXFx1MDAyNm1hcCwgdm1hKTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmggYi9tbS92bWEuaFxcbmluZGV4IDAyNGZhYmU2MzU2MGEuLmU5N2JkMmRmYTc4NmQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hLmhcXG4rKysgYi9tbS92bWEuaFxcbkBAIC0yNjcsOSArMjY3LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9zYW5lX3Bnb2ZmKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IHBnb2ZmKVxcbiBcXHQgKi9cXG4gXFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0LyogTUFQX1BSSVZBVEUtL2Rldi96ZXJvIGlzIGFub24sIG5vbi1OVUxMIHZtX2ZpbGUsIGJ1dCBoYXMgZmlsZSBwZ29mZi4gKi9cXG4tXFx0aWYgKHZtYS1cXHUwMDNldm1fZmlsZSlcXG4tXFx0XFx0cmV0dXJuO1xcbiBcXHQvKiBJZiBmYXVsdGVkIGluLCBjb3VsZCBoYXZlIGJlZW4gcmVtYXBwZWQuICovXFxuIFxcdGlmICh2bWEtXFx1MDAzZWFub25fdm1hKVxcbiBcXHRcXHRyZXR1cm47XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXFxuaW5kZXggNTJiODcyN2I2NjI4ZS4uN2RkMjkzMzQxN2MxZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuY1xcbkBAIC0xMzYyLDYgKzEzNjIsMTAxIEBAIFRFU1RfRihtZXJnZSwgYW5vbl9hbmRfcGFnZV9vZmZzZXRfbWlzbWF0Y2hfbWVtZmQpXFxuIFxcdEFTU0VSVF9FUShwcm9jbWFwLVxcdTAwM2VxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgKyA1ICogcGFnZV9zaXplKTtcXG4gfVxcbiBcXG4rVEVTVF9GKG1lcmdlLCBtZXJnZV9tYXBfcHJpdmF0ZV9kZXZfemVyb191bmZhdWx0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcXHUwMDI2c2VsZi1cXHUwMDNlcHJvY21hcDtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZTtcXG4rXFx0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVxcdTAwM2VjYXJ2ZW91dDtcXG4rXFx0Y2hhciAqcHRyLCAqcHRyMjtcXG4rXFx0aW50IGZkX3plcm87XFxuK1xcbitcXHRpZiAoYWNjZXNzKFxcXCIvZGV2L3plcm9cXFwiLCBGX09LKSlcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJObyAvZGV2L3plcm8uXFxcIik7XFxuK1xcdGZkX3plcm8gPSBvcGVuKFxcXCIvZGV2L3plcm9cXFwiLCBPX1JEV1IpO1xcbitcXHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIHR3byBNQVBfUFJJVkFURS0vZGV2L3plcm8gVk1BcyBuZXh0IHRvIG9uZSBhbm90aGVyIHdpdGggb2Zmc2V0IDBcXG4rXFx0ICogZWFjaC5cXG4rXFx0ICpcXG4rXFx0ICogV2l0aCB0aGVzZSBiZWluZyBtYWRlIHRydWx5IGFub255bW91cyB1cG9uIG1hcHBpbmcsIHRoZXkgd2lsbFxcbitcXHQgKiBtZXJnZS4gSWYgdGhleSB3ZXJlIGZpbGUtYmFja2VkIFZNQXMgdGhlIHBhZ2Ugb2Zmc2V0cyB3b3VsZCBwcmV2ZW50XFxuK1xcdCAqIHRoZSBtZXJnZTpcXG4rXFx0ICpcXG4rXFx0ICogfC0tLS0tfHwtLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tfFxcbitcXHQgKiB8IHB0ciB8fCBwdHIyIHwgLVxcdTAwM2UgfCAgICAgcHRyICAgICB8XFxuK1xcdCAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXxcXG4rXFx0ICovXFxuK1xcdHB0ciA9IG1tYXAoY2FydmVvdXQsIDUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcXG4rXFx0cHRyMiA9IG1tYXAoXFx1MDAyNmNhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLFxcbitcXHRcXHQgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7XFxuK1xcdGNsb3NlKGZkX3plcm8pO1xcbitcXHRBU1NFUlRfTkUocHRyLCBNQVBfRkFJTEVEKTtcXG4rXFx0QVNTRVJUX05FKHB0cjIsIE1BUF9GQUlMRUQpO1xcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovXFxuK1xcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XFxuK1xcdEFTU0VSVF9FUShwcm9jbWFwLVxcdTAwM2VxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7XFxuK1xcdEFTU0VSVF9FUShwcm9jbWFwLVxcdTAwM2VxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgKyAxMCAqIHBhZ2Vfc2l6ZSk7XFxuK31cXG4rXFxuK1RFU1RfRihtZXJnZSwgbWVyZ2VfbWFwX3ByaXZhdGVfZGV2X3plcm9fZmF1bHRlZF91bmZhdWx0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcXHUwMDI2c2VsZi1cXHUwMDNlcHJvY21hcDtcXG4rXFx0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZTtcXG4rXFx0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVxcdTAwM2VjYXJ2ZW91dDtcXG4rXFx0Y2hhciAqcHRyLCAqcHRyMjtcXG4rXFx0aW50IGZkX3plcm87XFxuK1xcbitcXHRpZiAoYWNjZXNzKFxcXCIvZGV2L3plcm9cXFwiLCBGX09LKSlcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJObyAvZGV2L3plcm8uXFxcIik7XFxuK1xcdGZkX3plcm8gPSBvcGVuKFxcXCIvZGV2L3plcm9cXFwiLCBPX1JEV1IpO1xcbitcXHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIGEgTUFQX1BSSVZBVEUgbWFwcGluZyBvZiAvZGV2L3plcm8gd2l0aCBwYWdlIG9mZnNldCAwLCB0aGVuIGZhdWx0XFxuK1xcdCAqIGl0IGluOlxcbitcXHQgKlxcbitcXHQgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcXG4rXFx0ICogfCAgICAgICAgICAgZmF1bHRlZCAgICAgICAgICAgICB8XFxuK1xcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxcbitcXHQgKi9cXG4rXFx0cHRyID0gbW1hcChjYXJ2ZW91dCwgMTUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdFxcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcXG4rXFx0QVNTRVJUX05FKHB0ciwgTUFQX0ZBSUxFRCk7XFxuK1xcdG1lbXNldChwdHIsICd4JywgMTUgKiBwYWdlX3NpemUpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVW5tYXAgdGhlIG1pZGRsZTpcXG4rXFx0ICpcXG4rXFx0ICogfC0tLS0tLS0tLXwgICAgICAgICAgIHwtLS0tLS0tLS18XFxuK1xcdCAqIHwgZmF1bHRlZCB8ICAgICAgICAgICB8IGZhdWx0ZWQgfFxcbitcXHQgKiB8LS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcXG4rXFx0ICovXFxuK1xcdEFTU0VSVF9FUShtdW5tYXAoXFx1MDAyNnB0cls1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTWFwIGluIGEgbmV3IHVuZmF1bHRlZCBtYXBwaW5nIGluIHRoZSBtaWRkbGUgd2l0aCBwYWdlIG9mZnNldCAwIC1cXG4rXFx0ICogdGhpcyBzaG91bGQgbWVyZ2UgYW5kIHdvdWxkIG5vdCBpZiBpdCB3ZXJlIHRyZWF0ZWQgYXMgYSBmaWxlIHJhdGhlclxcbitcXHQgKiB0aGFuIHB1cmUgYW5vbjpcXG4rXFx0ICpcXG4rXFx0ICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18XFxuK1xcdCAqIHwgZmF1bHRlZCB8IHVuZmF1bHRlZCB8IGZhdWx0ZWQgfFxcbitcXHQgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXxcXG4rXFx0ICovXFxuK1xcdHB0cjIgPSBtbWFwKFxcdTAwMjZjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSxcXG4rXFx0XFx0ICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLFxcbitcXHRcXHQgICAgZmRfemVybywgMCk7XFxuK1xcdGNsb3NlKGZkX3plcm8pO1xcbitcXHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XFxuK1xcbitcXHQvKiBBc3NlcnQgdGhhdCB0aGV5IG1lcmdlZC4gKi9cXG4rXFx0QVNTRVJUX1RSVUUoZmluZF92bWFfcHJvY21hcChwcm9jbWFwLCBwdHIpKTtcXG4rXFx0QVNTRVJUX0VRKHByb2NtYXAtXFx1MDAzZXF1ZXJ5LnZtYV9zdGFydCwgKHVuc2lnbmVkIGxvbmcpcHRyKTtcXG4rXFx0QVNTRVJUX0VRKHByb2NtYXAtXFx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciArIDE1ICogcGFnZV9zaXplKTtcXG4rfVxcbitcXG4gVEVTVF9GKG1lcmdlX3dpdGhfZm9yaywgbXJlbWFwX2ZhdWx0ZWRfdG9fdW5mYXVsdGVkX3ByZXYpXFxuIHtcXG4gXFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcXHUwMDI2c2VsZi1cXHUwMDNlcHJvY21hcDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jXFxuaW5kZXggNDIwOWM2NDI4M2Q2Zi4uYmJjYTlmOWUyNzQzOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcXG5AQCAtNTEsNyArNTEsNyBAQCBpbnQgbWFpbih2b2lkKVxcbiBcXHRpbnQgZmQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYSwgYjtcXG4gXFxuLVxcdGZkID0gb3BlbihcXFwiL2Rldi96ZXJvXFxcIiwgT19SRE9OTFkpO1xcbitcXHRmZCA9IG9wZW4oXFxcIi9wcm9jL3NlbGYvZXhlXFxcIiwgT19SRE9OTFkpO1xcbiBcXHRpZiAoZmQgPT0gLTEpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMi5jXFxuaW5kZXggZTZhYTAwYTE4M2JjZC4uNTc4NmNkZmZiYmY2MyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcXG5AQCAtNTcsNyArNTcsNyBAQCBpbnQgbWFpbih2b2lkKVxcbiBcXHRpbnQgZmQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYSwgYjtcXG4gXFxuLVxcdGZkID0gb3BlbihcXFwiL2Rldi96ZXJvXFxcIiwgT19SRE9OTFkpO1xcbitcXHRmZCA9IG9wZW4oXFxcIi9wcm9jL3NlbGYvZXhlXFxcIiwgT19SRE9OTFkpO1xcbiBcXHRpZiAoZmQgPT0gLTEpXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcXG5pbmRleCA0YzU4NDg3Yjc2NGU5Li41NjY5MDgxZDkxYjlmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXFxuQEAgLTE2MzgsOSArMTYzOCwxNSBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2Fub25fcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IF9fbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCF2bWFfaXNfY293X21hcHBpbmcodm1hKSk7XFxuLVxcdC8qIEFjY291bnQgZm9yIE1BUF9QUklWQVRFLS9kZXYvemVybyB3aGljaCBpcyBvbmx5IHNlbWktYW5vbnltb3VzLiAqL1xcbi1cXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIFxcdTAwMjZcXHUwMDI2ICF2bWEtXFx1MDAzZXZtX2ZpbGUpXFxuK1xcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxuIFxcdFxcdFZNX1dBUk5fT05fT05DRShwZ29mZiAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTtcXG4gXFxuIFxcdHJldHVybiBwZ29mZjtcXG4gfVxcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzO1xcbitcXG4rc3RhdGljIGlubGluZSBib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0cmV0dXJuIGZpbGUgXFx1MDAyNlxcdTAwMjYgZmlsZS1cXHUwMDNlZl9vcCA9PSBcXHUwMDI2emVyb19mb3BzO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jIGIvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmNcXG5pbmRleCA0YTM5YzlkNTA0ODk2Li44YzQ4MjY0OTlmNDA1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmNcXG5AQCAtMTIsNiArMTIsMTUgQEAgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtYV9kdW1teV92bV9vcHM7XFxuIHN0cnVjdCBhbm9uX3ZtYSBkdW1teV9hbm9uX3ZtYTtcXG4gc3RydWN0IHRhc2tfc3RydWN0IF9fY3VycmVudDtcXG4gXFxuK3N0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XFxuK1xcdC5tbWFwX3ByZXBhcmUgPSBtbWFwX3plcm9fcHJlcGFyZSxcXG4rfTtcXG4rXFxuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYWxsb2Nfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0cGdvZmZfdCBwZ29mZiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcXG5pbmRleCBjODViYzAwMGQxY2I3Li5mYTczZmFmZjIyNjI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xcbkBAIC00NSw3ICs0NSw0NCBAQCBzdGF0aWMgYm9vbCB0ZXN0X21tYXBfcmVnaW9uX2Jhc2ljKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKVxcbit7XFxuK1xcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXFxuK1xcdFxcdFxcdFZNQV9NQVlSRUFEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCk7XFxuK1xcdHN0cnVjdCBmaWxlIGZpbGUgPSB7XFxuK1xcdFxcdC5mX29wID0gXFx1MDAyNnplcm9fZm9wcyxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9O1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcbitcXHRWTUFfSVRFUkFUT1Iodm1pLCBcXHUwMDI2bW0sIDApO1xcbitcXG4rXFx0Y3VycmVudC1cXHUwMDNlbW0gPSBcXHUwMDI2bW07XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYXAgYSBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZyBhdCBhZGRyZXNzIDB4MzAwMDAwIHdpdGggYSBwYWdlXFxuK1xcdCAqIG9mZnNldCBvZiAweDEwLCB3aGljaCB3ZSBleHBlY3QgdG8gYmUgcmVzZXQgdG8gdGhlIGFub255bW91cyBwYWdlXFxuK1xcdCAqIG9mZnNldC5cXG4rXFx0ICovXFxuK1xcdGFkZHIgPSBfX21tYXBfcmVnaW9uKFxcdTAwMjZmaWxlLCAweDMwMDAwMCwgMHgzMDAwLCB2bWFfZmxhZ3MsIDB4MTAsIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoYWRkciwgMHgzMDAwMDApO1xcbitcXG4rXFx0LyogQXNzZXJ0IHRoYXQgaXQgdHJ1bHkgaXMgYW4gYW5vbnltb3VzIG1hcHBpbmcuICovXFxuK1xcdHZtYSA9IHZtYV9sb29rdXAoXFx1MDAyNm1tLCBhZGRyKTtcXG4rXFx0QVNTRVJUX05FKHZtYSwgTlVMTCk7XFxuK1xcdEFTU0VSVF9UUlVFKHZtYV9pc19hbm9ueW1vdXModm1hKSk7XFxuK1xcdEFTU0VSVF9FUSh2bWEtXFx1MDAzZXZtX2ZpbGUsIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEodm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEsIE5VTEwpO1xcbitcXHQvKiBFeHBlY3QgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0cy4gKi9cXG4rXFx0QVNTRVJUX0VRKHZtYS1cXHUwMDNldm1fcGdvZmYsIDB4MzAwKTtcXG4rXFx0QVNTRVJUX0VRKHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSksIDB4MzAwKTtcXG4rXFxuK1xcdGNsZWFudXBfbW0oXFx1MDAyNm1tLCBcXHUwMDI2dm1pKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ1bl9tbWFwX3Rlc3RzKGludCAqbnVtX3Rlc3RzLCBpbnQgKm51bV9mYWlsKVxcbiB7XFxuIFxcdFRFU1QobW1hcF9yZWdpb25fYmFzaWMpO1xcbitcXHRURVNUKHB1cmVfYW5vbl9kZXZfemVybyk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6MzkuNzg2NzIyMzg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNDU3NzA2MTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNTVVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjYWxsX21tYXBfcHJlcGFyZVwiLFxuICAgIFwiZmlsZV9pc19kZXZfemVyb1wiLFxuICAgIFwibW1hcF96ZXJvX3ByZXBhcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhhbmRsaW5nIG9mIE1BUF9QUklWQVRFIC9kZXYvemVybyBtYXBwaW5ncyBzbyB0aGV5IGJlY29tZSB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3Mgd2l0aGluIGNvcmUgbW0gcmF0aGVyIHRoYW4gYmVpbmcgdHJlYXRlZCBhcyBzZW1pLWFub255bW91cyBmaWxlIG1hcHBpbmdzLiBJdCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gbW0vdm1hLmMsIG1tL2NoYXItbWVtLmMsIGFuZCBoZWFkZXIgaGVscGVycywgYWZmZWN0aW5nIFZNQSBtZXJnaW5nLCBwYWdlIG9mZnNldCBjYWxjdWxhdGlvbnMsIGFuZCBtbWFwIHByZXBhcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2Mzk2NTg2ZTk4ZDU4MDg4OGM4MWFlZjdmMmQ2YjAzNjY5YTQ1NTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEzOjI2OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggM2ExOWRhNzRkMDBjOS4uYTBhNWRiNDQ0YzY2MyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTE3Mjc2LDcgKzE3Mjc2LDcgQEAgRjpcdERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLW1lbW9yeS10aWVyc1xuIEY6XHREb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1udW1hXG4gRjpcdERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vXG4gRjpcdERvY3VtZW50YXRpb24vbW0vXG4tRjpcdGRyaXZlcnMvY2hhci9tZW0uY1xuK0Y6XHRtbS9jaGFyLW1lbS5jXG4gRjpcdGluY2x1ZGUvbGludXgvY21hLmhcbiBGOlx0aW5jbHVkZS9saW51eC9kbWFwb29sLmhcbiBGOlx0aW5jbHVkZS9saW51eC9pb3JlbWFwLmhcbkBAIC0xNzQ4MSw3ICsxNzQ4MSw3IEBAIEw6XHRsaW51eC1tbUBrdmFjay5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIFc6XHRodHRwOi8vd3d3LmxpbnV4LW1tLm9yZ1xuIFQ6XHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FrcG0vbW1cbi1GOlx0ZHJpdmVycy9jaGFyL21lbS5jXG4rRjpcdG1tL2NoYXItbWVtLmNcbiBGOlx0aW5jbHVkZS90cmFjZS9ldmVudHMvbW1hcC5oXG4gRjpcdGZzL3Byb2MvdGFza19tbXUuY1xuIEY6XHRmcy9wcm9jL3Rhc2tfbm9tbXUuY1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZVxuaW5kZXggYTQ2ZDdiZjdjNGM4Mi4uYmIzYmY2NjkzN2IzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlXG5AQCAtMyw3ICszLDcgQEBcbiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycy5cbiAjXG4gXG4tb2JqLXlcdFx0XHRcdCs9IG1lbS5vIHJhbmRvbS5vXG4rb2JqLXlcdFx0XHRcdCs9IHJhbmRvbS5vXG4gb2JqLSQoQ09ORklHX1RUWV9QUklOVEspXHQrPSB0dHlwcmludGsub1xuIG9iai15XHRcdFx0XHQrPSBtaXNjLm9cbiBvYmotJChDT05GSUdfVEVTVF9NSVNDX01JTk9SKVx0Kz0gbWlzY19taW5vcl9rdW5pdC5vXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCBkZDA5YzQzOGZhMjNlLi44NjRkNWFjMzcwNGRmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0xNTUxLDExICsxNTUxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYV9zZXRfYW5vbnltb3VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0dm1hLVx1MDAzZXZtX29wcyA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfZGVzY19zZXRfYW5vbnltb3VzKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXG4te1xuLVx0ZGVzYy1cdTAwM2V2bV9vcHMgPSBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2Fub255bW91cyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRyZXR1cm4gIXZtYS1cdTAwM2V2bV9vcHM7XG5AQCAtNDQwOCw5ICs0NDAzLDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9wYWdlcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAgKiBJZiBAdm1hIGlzIGEgTUFQX1BSSVZBVEUgZmlsZS1iYWNrZWQgbWFwcGluZywgdGhlbiB0aGlzIHJldHVybnMgdGhlXG4gICogcGFnZSBvZmZzZXQgd2l0aGluIHRoZSBmaWxlLlxuICAqXG4tICogRWRnZSBjYXNlczogbm9tbXUgZG9lcyBub3QgYWJpZGUgYnkgdGhlc2UsIE1BUF9QUklWQVRFLS9kZXYvemVybyBzYXRpc2ZpZXNcbi0gKiB2bWFfaXNfYW5vbnltb3VzKCkgYnV0IGhhcyBmaWxlLWJhY2tlZCBwYWdlIG9mZnNldCwgYW5kIE1BUF9QUklWQVRFLXBmbm1hcFxuLSAqIHJlZ2lvbnMgaGF2ZSB0aGVpciBwYWdlIG9mZnNldCBzZXQgdG8gdGhlIGZpcnN0IFBGTiBpbiB0aGUgcmFuZ2UuXG4rICogRWRnZSBjYXNlczogbm9tbXUgZG9lcyBub3QgYWJpZGUgYnkgdGhlc2UgYW5kIENvVyBNQVBfUFJJVkFURS1wZm5tYXAgcmVnaW9uc1xuKyAqIGhhdmUgdGhlaXIgcGFnZSBvZmZzZXQgc2V0IHRvIHRoZSBmaXJzdCBQRk4gaW4gdGhlIHJhbmdlLlxuICAqXG4gICogUmV0dXJuczogVGhlIHBhZ2Ugb2Zmc2V0IG9mIHRoZSBzdGFydCBvZiBAdm1hLlxuICAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDBhZGZhNjYwNTY1M2QuLjkzOWYzYTVlOTczZjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbkBAIC0xMTI4LDggKzExMjgsNyBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2Fub25fcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRSghdm1hX2lzX2Nvd19tYXBwaW5nKHZtYSkpO1xuLVx0LyogQWNjb3VudCBmb3IgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHdoaWNoIGlzIG9ubHkgc2VtaS1hbm9ueW1vdXMuICovXG4tXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIFx1MDAyNlx1MDAyNiAhdm1hLVx1MDAzZXZtX2ZpbGUpXG4rXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxuIFx0XHRWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7XG4gXG4gXHRyZXR1cm4gcGdvZmY7XG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxuaW5kZXggZTcyNDVjYjg4YzY2NS4uMmEzZWM1M2Q2MmVlZiAxMDA2NDRcbi0tLSBhL21tL01ha2VmaWxlXG4rKysgYi9tbS9NYWtlZmlsZVxuQEAgLTU1LDcgKzU1LDggQEAgb2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG4gXHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbiBcdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxuIFx0XHRcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxuLVx0XHRcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxuK1x0XHRcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyBjaGFyLW1lbS5vIFxcXG4rXHRcdFx0ICAgJChtbXUteSlcbiBcbiAjIEdpdmUgJ3BhZ2VfYWxsb2MnIGl0cyBvd24gbW9kdWxlLXBhcmFtZXRlciBuYW1lc3BhY2VcbiBwYWdlLWFsbG9jLXkgOj0gcGFnZV9hbGxvYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvbW0vY2hhci1tZW0uY1xuc2ltaWxhcml0eSBpbmRleCA5NyVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci9tZW0uY1xucmVuYW1lIHRvIG1tL2NoYXItbWVtLmNcbmluZGV4IDYzMjUzZDFkZTVkNzAuLmMwYjVmYjAxOTIyM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmNcbisrKyBiL21tL2NoYXItbWVtLmNcbkBAIC0xLDYgKzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLypcbi0gKiAgbGludXgvZHJpdmVycy9jaGFyL21lbS5jXG4rICogIG1tL2NoYXItbWVtLmNcbiAgKlxuICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzXG4gICpcbkBAIC0zMSw2ICszMSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rXG4gI2RlZmluZSBERVZNRU1fTUlOT1JcdDFcbiAjZGVmaW5lIERFVlBPUlRfTUlOT1JcdDRcbiBcbkBAIC01MDYsMTEgKzUwOCw3IEBAIHN0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbiBcdGlmICh2bWFfZGVzY190ZXN0KGRlc2MsIFZNQV9TSEFSRURfQklUKSlcbiBcdFx0cmV0dXJuIHNobWVtX3plcm9fc2V0dXBfZGVzYyhkZXNjKTtcbiBcbi1cdC8qXG4tXHQgKiBUaGlzIGlzIGEgaGlnaGx5IHVuaXF1ZSBzaXR1YXRpb24gd2hlcmUgd2UgbWFyayBhIE1BUF9QUklWQVRFIG1hcHBpbmdcbi1cdCAqIG9mIC9kZXYvemVybyBhbm9ueW1vdXMsIGRlc3BpdGUgaXQgbm90IGJlaW5nLlxuLVx0ICovXG4tXHR2bWFfZGVzY19zZXRfYW5vbnltb3VzKGRlc2MpO1xuK1x0LyogTUFQX1BSSVZBVEUgc2VtYW50aWNzIGFyZSB0YWtlbiBjYXJlIG9mIGZvciB1cyBieSBjb3JlIG1tLiAqL1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTcwNyw2ICs3MDUsMTcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1kZXYge1xuICNlbmRpZlxuIH07XG4gXG4rLyoqXG4rICogZmlsZV9pc19kZXZfemVybygpIC0gaXMgdGhlIHNwZWNpZmllZCBAZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIC9kZXYvemVyb1xuKyAqIGRyaXZlcj9cbisgKiBAZmlsZTogRmlsZSB0byB0ZXN0LlxuKyAqIFJldHVybnM6IHRydWUgaWYgaXQgaXMsIGZhbHNlIG90aGVyd2lzZS5cbisgKi9cbitib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0cmV0dXJuIGZpbGUgXHUwMDI2XHUwMDI2IGZpbGUtXHUwMDNlZl9vcCA9PSBcdTAwMjZ6ZXJvX2ZvcHM7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWVtb3J5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4ge1xuIFx0aW50IG1pbm9yO1xuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAzOGIxMTY1MjEyYzk0Li4yNzgyOTI0YTI3N2M5IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTIzNywxNSArMjM3LDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0aW50IGVyciA9IHZmc19tbWFwKGZpbGUsIHZtYSk7XG4gXG4tXHRpZiAobGlrZWx5KCFlcnIpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbiBcdC8qXG4tXHQgKiBPSywgd2UgdHJpZWQgdG8gY2FsbCB0aGUgZmlsZSBob29rIGZvciBtbWFwKCksIGJ1dCBhbiBlcnJvclxuLVx0ICogYXJvc2UuIFRoZSBtYXBwaW5nIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBhbmQgd2UgbXVzdCBub3QgaW52b2tlXG4tXHQgKiBhbnkgZnVydGhlciBob29rcyBvbiBpdC5cbitcdCAqIEVpdGhlciB3ZSB0cmllZCB0byBjYWxsIHRoZSBmaWxlIGhvb2sgZm9yIG1tYXAoKSBhbmQgYW4gZXJyb3IgYXJvc2VcbitcdCAqIG9yIGEgZHJpdmVyIHNldCB2bWEtXHUwMDNldm1fb3BzID0gTlVMTCBpbnRlbmRpbmcgdGhlcmUgdG8gYmUgbm8gVk1BXG4rXHQgKiBvcGVyYXRpb25zLlxuK1x0ICpcbitcdCAqIEluIHRoZSBmb3JtZXIgY2FzZSB0aGUgVk1BIGlzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBhbmQgd2UgbXVzdG4ndFxuK1x0ICogaW52b2tlIGFueSBmdXJ0aGVyIGhvb2tzIG9uIGl0LCBpbiB0aGUgbGF0dGVyIGNhc2UgdGhlIGhvb2sgYWN0dWFsbHlcbitcdCAqIHdhbnRlZCBubyBmdXJ0aGVyIGhvb2tzIHRvIGJlIGludm9rZWQsIHNvIGZpeCBib3RoIGJ5IHNldHRpbmcgZHVtbXlcbitcdCAqIFZNQSBvcHMuXG4gXHQgKi9cbi1cdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2bWFfZHVtbXlfdm1fb3BzO1xuK1x0aWYgKHVubGlrZWx5KGVyciB8fCAhdm1hLVx1MDAzZXZtX29wcykpXG4rXHRcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2bWFfZHVtbXlfdm1fb3BzO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5AQCAtMTY1NCw0ICsxNjU3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbisvKiBjaGFyLW1lbS5jICovXG4rYm9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKTtcbitcbiAjZW5kaWZcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA4OTdmYTJiNjEzNDZmLi5jNjA3NjNlZjU2MWNmIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTI3ODYsNyArMjc4Niw3IEBAIHVuc2lnbmVkIGxvbmcgc2htZW1fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0c2IgPSBmaWxlX2lub2RlKGZpbGUpLVx1MDAzZWlfc2I7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBDYWxsZWQgZGlyZWN0bHkgZnJvbSBtbS9tbWFwLmMsIG9yIGRyaXZlcnMvY2hhci9tZW0uY1xuK1x0XHRcdCAqIENhbGxlZCBkaXJlY3RseSBmcm9tIG1tL21tYXAuYywgb3IgbW0vY2hhci1tZW0uY1xuIFx0XHRcdCAqIGZvciBcIi9kZXYvemVyb1wiLCB0byBjcmVhdGUgYSBzaGFyZWQgYW5vbnltb3VzIG9iamVjdC5cbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoSVNfRVJSKHNobV9tbnQpKVxuZGlmZiAtLWdpdCBhL21tL3ZtYS5jIGIvbW0vdm1hLmNcbmluZGV4IDM1ZTdhNjQ4NTVmYWQuLjZmZGNlNDg1MmNlNjEgMTAwNjQ0XG4tLS0gYS9tbS92bWEuY1xuKysrIGIvbW0vdm1hLmNcbkBAIC0yNjIxLDYgKzI2MjEsMjMgQEAgc3RhdGljIGludCBfX21tYXBfbmV3X2ZpbGVfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbWFwX3NldF9hbm9uKHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4re1xuK1x0bWFwLVx1MDAzZWZpbGUgPSBOVUxMO1xuK1x0bWFwLVx1MDAzZXZtX29wcyA9IE5VTEw7XG4rXHRtYXAtXHUwMDNlcGdvZmYgPSBtYXAtXHUwMDNlYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbit9XG4rXG4rc3RhdGljIGJvb2wgbWFwX2lzX3ByaXZhdGUoY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcbit7XG4rXHRyZXR1cm4gIXZtYV9mbGFnc190ZXN0KFx1MDAyNm1hcC1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbWFwX2lzX2Fub24oY29uc3Qgc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcbit7XG4rXHRyZXR1cm4gbWFwX2lzX3ByaXZhdGUobWFwKSBcdTAwMjZcdTAwMjYgIW1hcC1cdTAwM2VmaWxlO1xuK31cbitcbiAvKlxuICAqIF9fbW1hcF9uZXdfdm1hKCkgLSBBbGxvY2F0ZSBhIG5ldyBWTUEgZm9yIHRoZSByZWdpb24sIGFzIG1lcmdpbmcgd2FzIG5vdFxuICAqIHBvc3NpYmxlLlxuQEAgLTI2MzQsOCArMjY1MSw3IEBAIHN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuIHN0YXRpYyBpbnQgX19tbWFwX25ld192bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbiBcdHN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKVxuIHtcbi1cdGNvbnN0IGJvb2wgaXNfYW5vbiA9ICFtYXAtXHUwMDNlZmlsZSBcdTAwMjZcdTAwMjZcbi1cdFx0IXZtYV9mbGFnc190ZXN0KFx1MDAyNm1hcC1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklUKTtcbitcdGNvbnN0IGJvb2wgaXNfYW5vbiA9IG1hcF9pc19hbm9uKG1hcCk7XG4gXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWkgPSBtYXAtXHUwMDNldm1pO1xuIFx0aW50IGVycm9yID0gMDtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuQEAgLTI3NzcsNiArMjc5MywxMCBAQCBzdGF0aWMgaW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0LyogSXQncyBpbnZhbGlkIGZvciBtbWFwX3ByZXByYXJlIGhvb2tzIHRvIGNsZWFyIHZtX29wcy4gKi9cbitcdGlmICghZGVzYy1cdTAwM2V2bV9vcHMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0ZXJyID0gY2FsbF9hY3Rpb25fcHJlcGFyZShtYXAsIGRlc2MpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yNzkzLDE2ICsyODEzLDIxIEBAIHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBcdG1hcC1cdTAwM2V2bV9vcHMgPSBkZXNjLVx1MDAzZXZtX29wcztcbiBcdG1hcC1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBkZXNjLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbitcdC8qXG4rXHQgKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZ3MgYXJlIGFuIGFuY2llbnQgd2F5IG9mIGdldHRpbmdcbitcdCAqIGFub255bW91cyBtYXBwaW5ncy4gUmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlc2UgbWFwcGluZ3MgdG8gYmUgb2RkXG4rXHQgKiBvdXRsaWVycywgc2ltcGx5IG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMuXG4rXHQgKi9cbitcdGlmIChtYXBfaXNfcHJpdmF0ZShtYXApIFx1MDAyNlx1MDAyNiBmaWxlX2lzX2Rldl96ZXJvKG1hcC1cdTAwM2VmaWxlKSlcbitcdFx0bWFwX3NldF9hbm9uKG1hcCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuIHtcbi1cdGlmIChtYXAtXHUwMDNldm1fb3BzKVxuLVx0XHR2bWEtXHUwMDNldm1fb3BzID0gbWFwLVx1MDAzZXZtX29wcztcbi1cdGVsc2VcdC8qIE9ubHkgL2Rldi96ZXJvIHNob3VsZCBkbyB0aGlzLiAqL1xuLVx0XHR2bWFfc2V0X2Fub255bW91cyh2bWEpO1xuK1x0dm1hLVx1MDAzZXZtX29wcyA9IG1hcC1cdTAwM2V2bV9vcHM7XG4gXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbiB9XG4gXG5AQCAtMjg4Miw3ICsyOTA3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRhbGxvY2F0ZWRfbmV3ID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdGlmIChoYXZlX21tYXBfcHJlcGFyZSlcbitcdGlmIChoYXZlX21tYXBfcHJlcGFyZSBcdTAwMjZcdTAwMjYgIW1hcF9pc19hbm9uKFx1MDAyNm1hcCkpXG4gXHRcdHNldF92bWFfdXNlcl9kZWZpbmVkX2ZpZWxkcyh2bWEsIFx1MDAyNm1hcCk7XG4gXG4gXHRfX21tYXBfY29tcGxldGUoXHUwMDI2bWFwLCB2bWEpO1xuZGlmZiAtLWdpdCBhL21tL3ZtYS5oIGIvbW0vdm1hLmhcbmluZGV4IDAyNGZhYmU2MzU2MGEuLmU5N2JkMmRmYTc4NmQgMTAwNjQ0XG4tLS0gYS9tbS92bWEuaFxuKysrIGIvbW0vdm1hLmhcbkBAIC0yNjcsOSArMjY3LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9zYW5lX3Bnb2ZmKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IHBnb2ZmKVxuIFx0ICovXG4gXHRpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSlcbiBcdFx0cmV0dXJuO1xuLVx0LyogTUFQX1BSSVZBVEUtL2Rldi96ZXJvIGlzIGFub24sIG5vbi1OVUxMIHZtX2ZpbGUsIGJ1dCBoYXMgZmlsZSBwZ29mZi4gKi9cbi1cdGlmICh2bWEtXHUwMDNldm1fZmlsZSlcbi1cdFx0cmV0dXJuO1xuIFx0LyogSWYgZmF1bHRlZCBpbiwgY291bGQgaGF2ZSBiZWVuIHJlbWFwcGVkLiAqL1xuIFx0aWYgKHZtYS1cdTAwM2Vhbm9uX3ZtYSlcbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG5pbmRleCA1MmI4NzI3YjY2MjhlLi43ZGQyOTMzNDE3YzFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuY1xuQEAgLTEzNjIsNiArMTM2MiwxMDEgQEAgVEVTVF9GKG1lcmdlLCBhbm9uX2FuZF9wYWdlX29mZnNldF9taXNtYXRjaF9tZW1mZClcbiBcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciArIDUgKiBwYWdlX3NpemUpO1xuIH1cbiBcbitURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX3VuZmF1bHRlZClcbit7XG4rXHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFx1MDAyNnNlbGYtXHUwMDNlcHJvY21hcDtcbitcdHVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcdGNoYXIgKmNhcnZlb3V0ID0gc2VsZi1cdTAwM2VjYXJ2ZW91dDtcbitcdGNoYXIgKnB0ciwgKnB0cjI7XG4rXHRpbnQgZmRfemVybztcbitcbitcdGlmIChhY2Nlc3MoXCIvZGV2L3plcm9cIiwgRl9PSykpXG4rXHRcdFNLSVAocmV0dXJuLCBcIk5vIC9kZXYvemVyby5cIik7XG4rXHRmZF96ZXJvID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JEV1IpO1xuK1x0QVNTRVJUX05FKGZkX3plcm8sIC0xKTtcbitcbitcdC8qXG4rXHQgKiBNYXAgdHdvIE1BUF9QUklWQVRFLS9kZXYvemVybyBWTUFzIG5leHQgdG8gb25lIGFub3RoZXIgd2l0aCBvZmZzZXQgMFxuK1x0ICogZWFjaC5cbitcdCAqXG4rXHQgKiBXaXRoIHRoZXNlIGJlaW5nIG1hZGUgdHJ1bHkgYW5vbnltb3VzIHVwb24gbWFwcGluZywgdGhleSB3aWxsXG4rXHQgKiBtZXJnZS4gSWYgdGhleSB3ZXJlIGZpbGUtYmFja2VkIFZNQXMgdGhlIHBhZ2Ugb2Zmc2V0cyB3b3VsZCBwcmV2ZW50XG4rXHQgKiB0aGUgbWVyZ2U6XG4rXHQgKlxuK1x0ICogfC0tLS0tfHwtLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tfFxuK1x0ICogfCBwdHIgfHwgcHRyMiB8IC1cdTAwM2UgfCAgICAgcHRyICAgICB8XG4rXHQgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18XG4rXHQgKi9cbitcdHB0ciA9IG1tYXAoY2FydmVvdXQsIDUgKiBwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdCAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcbitcdHB0cjIgPSBtbWFwKFx1MDAyNmNhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLFxuK1x0XHQgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7XG4rXHRjbG9zZShmZF96ZXJvKTtcbitcdEFTU0VSVF9ORShwdHIsIE1BUF9GQUlMRUQpO1xuK1x0QVNTRVJUX05FKHB0cjIsIE1BUF9GQUlMRUQpO1xuK1xuK1x0LyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovXG4rXHRBU1NFUlRfVFJVRShmaW5kX3ZtYV9wcm9jbWFwKHByb2NtYXAsIHB0cikpO1xuK1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpO1xuK1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICsgMTAgKiBwYWdlX3NpemUpO1xuK31cbitcbitURVNUX0YobWVyZ2UsIG1lcmdlX21hcF9wcml2YXRlX2Rldl96ZXJvX2ZhdWx0ZWRfdW5mYXVsdGVkKVxuK3tcbitcdHN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gXHUwMDI2c2VsZi1cdTAwM2Vwcm9jbWFwO1xuK1x0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9zaXplO1xuK1x0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVx1MDAzZWNhcnZlb3V0O1xuK1x0Y2hhciAqcHRyLCAqcHRyMjtcbitcdGludCBmZF96ZXJvO1xuK1xuK1x0aWYgKGFjY2VzcyhcIi9kZXYvemVyb1wiLCBGX09LKSlcbitcdFx0U0tJUChyZXR1cm4sIFwiTm8gL2Rldi96ZXJvLlwiKTtcbitcdGZkX3plcm8gPSBvcGVuKFwiL2Rldi96ZXJvXCIsIE9fUkRXUik7XG4rXHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xuK1xuK1x0LypcbitcdCAqIE1hcCBhIE1BUF9QUklWQVRFIG1hcHBpbmcgb2YgL2Rldi96ZXJvIHdpdGggcGFnZSBvZmZzZXQgMCwgdGhlbiBmYXVsdFxuK1x0ICogaXQgaW46XG4rXHQgKlxuK1x0ICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4rXHQgKiB8ICAgICAgICAgICBmYXVsdGVkICAgICAgICAgICAgIHxcbitcdCAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuK1x0ICovXG4rXHRwdHIgPSBtbWFwKGNhcnZlb3V0LCAxNSAqIHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApO1xuK1x0QVNTRVJUX05FKHB0ciwgTUFQX0ZBSUxFRCk7XG4rXHRtZW1zZXQocHRyLCAneCcsIDE1ICogcGFnZV9zaXplKTtcbitcbitcdC8qXG4rXHQgKiBVbm1hcCB0aGUgbWlkZGxlOlxuK1x0ICpcbitcdCAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuK1x0ICogfCBmYXVsdGVkIHwgICAgICAgICAgIHwgZmF1bHRlZCB8XG4rXHQgKiB8LS0tLS0tLS0tfCAgICAgICAgICAgfC0tLS0tLS0tLXxcbitcdCAqL1xuK1x0QVNTRVJUX0VRKG11bm1hcChcdTAwMjZwdHJbNSAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUpLCAwKTtcbitcbitcdC8qXG4rXHQgKiBNYXAgaW4gYSBuZXcgdW5mYXVsdGVkIG1hcHBpbmcgaW4gdGhlIG1pZGRsZSB3aXRoIHBhZ2Ugb2Zmc2V0IDAgLVxuK1x0ICogdGhpcyBzaG91bGQgbWVyZ2UgYW5kIHdvdWxkIG5vdCBpZiBpdCB3ZXJlIHRyZWF0ZWQgYXMgYSBmaWxlIHJhdGhlclxuK1x0ICogdGhhbiBwdXJlIGFub246XG4rXHQgKlxuK1x0ICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18XG4rXHQgKiB8IGZhdWx0ZWQgfCB1bmZhdWx0ZWQgfCBmYXVsdGVkIHxcbitcdCAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tfFxuK1x0ICovXG4rXHRwdHIyID0gbW1hcChcdTAwMjZjYXJ2ZW91dFs1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSxcbitcdFx0ICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLFxuK1x0XHQgICAgZmRfemVybywgMCk7XG4rXHRjbG9zZShmZF96ZXJvKTtcbitcdEFTU0VSVF9ORShwdHIyLCBNQVBfRkFJTEVEKTtcbitcbitcdC8qIEFzc2VydCB0aGF0IHRoZXkgbWVyZ2VkLiAqL1xuK1x0QVNTRVJUX1RSVUUoZmluZF92bWFfcHJvY21hcChwcm9jbWFwLCBwdHIpKTtcbitcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9zdGFydCwgKHVuc2lnbmVkIGxvbmcpcHRyKTtcbitcdEFTU0VSVF9FUShwcm9jbWFwLVx1MDAzZXF1ZXJ5LnZtYV9lbmQsICh1bnNpZ25lZCBsb25nKXB0ciArIDE1ICogcGFnZV9zaXplKTtcbit9XG4rXG4gVEVTVF9GKG1lcmdlX3dpdGhfZm9yaywgbXJlbWFwX2ZhdWx0ZWRfdG9fdW5mYXVsdGVkX3ByZXYpXG4ge1xuIFx0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcdTAwMjZzZWxmLVx1MDAzZXByb2NtYXA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jXG5pbmRleCA0MjA5YzY0MjgzZDZmLi5iYmNhOWY5ZTI3NDM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcbkBAIC01MSw3ICs1MSw3IEBAIGludCBtYWluKHZvaWQpXG4gXHRpbnQgZmQ7XG4gXHR1bnNpZ25lZCBsb25nIGEsIGI7XG4gXG4tXHRmZCA9IG9wZW4oXCIvZGV2L3plcm9cIiwgT19SRE9OTFkpO1xuK1x0ZmQgPSBvcGVuKFwiL3Byb2Mvc2VsZi9leGVcIiwgT19SRE9OTFkpO1xuIFx0aWYgKGZkID09IC0xKVxuIFx0XHRyZXR1cm4gMTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcbmluZGV4IGU2YWEwMGExODNiY2QuLjU3ODZjZGZmYmJmNjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuY1xuQEAgLTU3LDcgKzU3LDcgQEAgaW50IG1haW4odm9pZClcbiBcdGludCBmZDtcbiBcdHVuc2lnbmVkIGxvbmcgYSwgYjtcbiBcbi1cdGZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JET05MWSk7XG4rXHRmZCA9IG9wZW4oXCIvcHJvYy9zZWxmL2V4ZVwiLCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmggYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5pbmRleCA0YzU4NDg3Yjc2NGU5Li41NjY5MDgxZDkxYjlmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaFxuQEAgLTE2MzgsOSArMTYzOCwxNSBAQCBzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbGluZWFyX2Fub25fcGFnZV9pbmRleChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGNvbnN0IHBnb2ZmX3QgcGdvZmYgPSBfX2xpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRSghdm1hX2lzX2Nvd19tYXBwaW5nKHZtYSkpO1xuLVx0LyogQWNjb3VudCBmb3IgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHdoaWNoIGlzIG9ubHkgc2VtaS1hbm9ueW1vdXMuICovXG4tXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpIFx1MDAyNlx1MDAyNiAhdm1hLVx1MDAzZXZtX2ZpbGUpXG4rXHRpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKVxuIFx0XHRWTV9XQVJOX09OX09OQ0UocGdvZmYgIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7XG4gXG4gXHRyZXR1cm4gcGdvZmY7XG4gfVxuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcztcbitcbitzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRyZXR1cm4gZmlsZSBcdTAwMjZcdTAwMjYgZmlsZS1cdTAwM2VmX29wID09IFx1MDAyNnplcm9fZm9wcztcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMgYi90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xuaW5kZXggNGEzOWM5ZDUwNDg5Ni4uOGM0ODI2NDk5ZjQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuY1xuQEAgLTEyLDYgKzEyLDE1IEBAIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2bWFfZHVtbXlfdm1fb3BzO1xuIHN0cnVjdCBhbm9uX3ZtYSBkdW1teV9hbm9uX3ZtYTtcbiBzdHJ1Y3QgdGFza19zdHJ1Y3QgX19jdXJyZW50O1xuIFxuK3N0YXRpYyBpbnQgbW1hcF96ZXJvX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XG4rXHQubW1hcF9wcmVwYXJlID0gbW1hcF96ZXJvX3ByZXBhcmUsXG4rfTtcbitcbiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFsbG9jX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHBnb2ZmX3QgcGdvZmYsIHZtYV9mbGFnc190IHZtYV9mbGFncylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmMgYi90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbmluZGV4IGM4NWJjMDAwZDFjYjcuLmZhNzNmYWZmMjI2MjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS90ZXN0cy9tbWFwLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xuQEAgLTQ1LDcgKzQ1LDQ0IEBAIHN0YXRpYyBib29sIHRlc3RfbW1hcF9yZWdpb25fYmFzaWModm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB0ZXN0X3B1cmVfYW5vbl9kZXZfemVybyh2b2lkKVxuK3tcbitcdGNvbnN0IHZtYV9mbGFnc190IHZtYV9mbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfUkVBRF9CSVQsIFZNQV9XUklURV9CSVQsXG4rXHRcdFx0Vk1BX01BWVJFQURfQklULCBWTUFfTUFZV1JJVEVfQklUKTtcbitcdHN0cnVjdCBmaWxlIGZpbGUgPSB7XG4rXHRcdC5mX29wID0gXHUwMDI2emVyb19mb3BzLFxuK1x0fTtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgbW0gPSB7fTtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyO1xuK1x0Vk1BX0lURVJBVE9SKHZtaSwgXHUwMDI2bW0sIDApO1xuK1xuK1x0Y3VycmVudC1cdTAwM2VtbSA9IFx1MDAyNm1tO1xuK1xuK1x0LypcbitcdCAqIE1hcCBhIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5nIGF0IGFkZHJlc3MgMHgzMDAwMDAgd2l0aCBhIHBhZ2VcbitcdCAqIG9mZnNldCBvZiAweDEwLCB3aGljaCB3ZSBleHBlY3QgdG8gYmUgcmVzZXQgdG8gdGhlIGFub255bW91cyBwYWdlXG4rXHQgKiBvZmZzZXQuXG4rXHQgKi9cbitcdGFkZHIgPSBfX21tYXBfcmVnaW9uKFx1MDAyNmZpbGUsIDB4MzAwMDAwLCAweDMwMDAsIHZtYV9mbGFncywgMHgxMCwgTlVMTCk7XG4rXHRBU1NFUlRfRVEoYWRkciwgMHgzMDAwMDApO1xuK1xuK1x0LyogQXNzZXJ0IHRoYXQgaXQgdHJ1bHkgaXMgYW4gYW5vbnltb3VzIG1hcHBpbmcuICovXG4rXHR2bWEgPSB2bWFfbG9va3VwKFx1MDAyNm1tLCBhZGRyKTtcbitcdEFTU0VSVF9ORSh2bWEsIE5VTEwpO1xuK1x0QVNTRVJUX1RSVUUodm1hX2lzX2Fub255bW91cyh2bWEpKTtcbitcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fZmlsZSwgTlVMTCk7XG4rXHRBU1NFUlRfRVEodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSwgTlVMTCk7XG4rXHQvKiBFeHBlY3QgYW5vbnltb3VzIHBhZ2Ugb2Zmc2V0cy4gKi9cbitcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fcGdvZmYsIDB4MzAwKTtcbitcdEFTU0VSVF9FUSh2bWFfc3RhcnRfYW5vbl9wZ29mZih2bWEpLCAweDMwMCk7XG4rXG4rXHRjbGVhbnVwX21tKFx1MDAyNm1tLCBcdTAwMjZ2bWkpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ1bl9tbWFwX3Rlc3RzKGludCAqbnVtX3Rlc3RzLCBpbnQgKm51bV9mYWlsKVxuIHtcbiBcdFRFU1QobW1hcF9yZWdpb25fYmFzaWMpO1xuK1x0VEVTVChwdXJlX2Fub25fZGV2X3plcm8pO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI2OjM5Ljc4NjcyMzYxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4MzQ3NTc2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IERldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyBhbmQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBsYXRlbnQgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgY3JpdGVyaWEgYXJlIGFsc28gY2xlYXI6IGNoZWNrIGZvciB0b3VjaCBwb2ludHMgb24gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gY29yZSBzdWJzeXN0ZW1zLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzICpsb29rcyogcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBXZSBoYXZlIG1vZGlmaWNhdGlvbnMgdG8gYG1tL3ZtYS5jYCwgYG1tL2NoYXItbWVtLmNgLCBgaW5jbHVkZS9saW51eC9tbS5oYCwgYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCwgYW5kIGBtbS9pbnRlcm5hbC5oYCwgYWxsIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYXJlYXMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHNlcmllcyBzZWVtcyB0byBiZSByZWZhY3RvcmluZyBob3cgYC9kZXYvemVyb2AgbWFwcGluZ3MgaW50ZXJhY3Qgd2l0aCBhbm9ueW1vdXMgbWVtb3J5LCBtYWtpbmcgdGhlbSB0cnVseSBhbm9ueW1vdXMgaW4gdGhlIGNvcmUgbW0uIFRoaXMgc2VlbXMgbGlrZSBpdCB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBgV29ydGhGdXp6aW5nYCBpcyBsaWtlbHkgYHRydWVgLlxuXG5MZXQncyBkaXNzZWN0IHRoZSBkaWZmIHN0ZXAtYnktc3RlcCB0byBiZSBjZXJ0YWluOlxuXG4xLiAgV2UgaGF2ZSB0aGUgc3RhbmRhcmQgZmlsZSByZW5hbWVzL21vdmVzIChNQUlOVEFJTkVSUywgYGRyaXZlcnMvY2hhci9NYWtlZmlsZWAsIGBtbS9NYWtlZmlsZWApLiBUaGVzZSBhcmVuJ3QgaW1tZWRpYXRlbHkgY29uY2VybmluZy5cbjIuICBgZHJpdmVycy9jaGFyL21lbS5jYCBpcyBtb3ZlZCB0byBgbW0vY2hhci1tZW0uY2AuIFRoZSBjaGFuZ2VzIHRvIGBtbWFwX3plcm9fcHJlcGFyZSgpYCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBmaWxlX2lzX2Rldl96ZXJvKClgIGFyZSBpbnRlcmVzdGluZyBhbmQgcmVxdWlyZSBhIGNsb3NlciBsb29rLiBUaGlzIGRlZmluaXRlbHkgc2VlbXMgY29yZSBtbSByZWxhdGVkLlxuMy4gIFRoZSBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L21tLmhgIChyZW1vdmFsIG9mIGB2bWFfZGVzY19zZXRfYW5vbnltb3VzKClgKSBhbmQgYGluY2x1ZGUvbGludXgvcGFnZW1hcC5oYCAoc2ltcGxpZmljYXRpb24gb2YgYGxpbmVhcl9hbm9uX3BhZ2VfaW5kZXgoKWApIHBvaW50IHRvIHJlZmFjdG9yaW5nIG9mIGhvdyBWTUEncyBhcmUgaGFuZGxlZCwgd2hpY2ggc3RyZW5ndGhlbnMgdGhlIGlkZWEgb2YgZnV6emluZy5cbjQuICBgbW0vaW50ZXJuYWwuaGAgaW5jbHVkZXMgdGhlIGlubGluZSBmdW5jdGlvbiBtb2RpZmljYXRpb24gaW4gYG1tYXBfZmlsZWAsIGFuZCB0aGUgYWRkaXRpb24gb2YgdGhlIHByb3RvdHlwZSBgZmlsZV9pc19kZXZfemVyb2AuIFRoaXMgaXMgY2VydGFpbmx5IHJlbGF0ZWQgdG8gVk1BIHNldHVwIGFuZCB0aGUgbmV3IGNoZWNrcy5cbjUuICBgbW0vdm1hLmNgIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGludGVyZXN0aW5nOiBuZXcgZnVuY3Rpb25zIGxpa2UgYG1hcF9zZXRfYW5vbigpYCwgYG1hcF9pc19wcml2YXRlKClgLCBgbWFwX2lzX2Fub24oKWAsIGFuZCBjaGFuZ2VzIHRvIGBfX21tYXBfbmV3X3ZtYSgpYCwgYGNhbGxfbW1hcF9wcmVwYXJlKClgLCBhbmQgYF9fbW1hcF9yZWdpb24oKWAuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGNydWNpYWwuIFRoZSBjaGFuZ2VzIGluIGBjYWxsX21tYXBfcHJlcGFyZSgpYCBhbmQgYF9fbW1hcF9yZWdpb24oKWAgc2VlbSBsaWtlIGNvZGUgcGF0aHMgd2l0aCBoaWdoIHBvdGVudGlhbCBmb3IgaXNzdWVzLCBhbmQgdGhvc2UgYXJlIGRlZmluaXRlbHkgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cbjYuICBUaGUgY2hhbmdlIGluIGBtbS92bWEuaGAgKHJlbW92aW5nIGEgYHZtYS1cdTAwM2V2bV9maWxlYCBjaGVjayBpbiBgYXNzZXJ0X3NhbmVfcGdvZmZgKSBhbHNvIGZlZWxzIGxpa2UgYSByZWZhY3RvcmluZy5cbjcuICBBbmQgb2YgY291cnNlLCB3ZSBoYXZlIHJlbGF0ZWQgc2VsZnRlc3RzLlxuXG5UaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY29yZSBtbSBsb2dpYywgc3BlY2lmaWNhbGx5IG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggcmVzcGVjdCB0byBtYXBwaW5nIGFuZCBWTUEgbG9naWMgKGBtbS92bWEuY2AsIGBtbS9jaGFyLW1lbS5jYCwgYG1tL2ludGVybmFsLmhgLCBgaW5jbHVkZS9saW51eC9wYWdlbWFwLmhgLCBgaW5jbHVkZS9saW51eC9tbS5oYCwgYG1tL3ZtYS5oYCkuIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMsIHRoaXMgc2VlbXMgbGlrZSAqZXhhY3RseSogdGhlIGtpbmQgb2YgY2hhbmdlIHdlICp3YW50KiB0byBmdXp6LiBJdCdzIGEgY2xlYXIgJ3llcycgdG8gYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCBsZXQncyBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gY3JlYXRlIGEgbGlzdCBvZiBgRm9jdXNTeW1ib2xzYCBhbmQgY29uc2lkZXIgd2hpY2ggYEVuYWJsZUNvbmZpZ3NgIG1pZ2h0IGJlIHVzZWZ1bC4gSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGRpZmYgYW5kIGNyZWF0ZSBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhlIGNoYW5nZXM6XG5cbiogICBgY2FsbF9tbWFwX3ByZXBhcmVgIChpbiBtbS92bWEuYylcbiogICBgX19tbWFwX25ld192bWFgIChpbiBtbS92bWEuYylcbiogICBgX19tbWFwX3JlZ2lvbmAgKGluIG1tL3ZtYS5jKVxuKiAgIGBtYXBfc2V0X2Fub25gIChzdGF0aWMgaW4gbW0vdm1hLmMpXG4qICAgYGZpbGVfaXNfZGV2X3plcm9gIChpbiBtbS9jaGFyLW1lbS5jKVxuKiAgIGBtbWFwX3plcm9fcHJlcGFyZWAgKGluIG1tL2NoYXItbWVtLmMpXG4qICAgYG1tYXBfZmlsZWAgKGlubGluZSBpbiBtbS9pbnRlcm5hbC5oKVxuKiAgIGBsaW5lYXJfYW5vbl9wYWdlX2luZGV4YCAoaW5saW5lIGluIGluY2x1ZGUvbGludXgvcGFnZW1hcC5oKVxuKiAgIGBhc3NlcnRfc2FuZV9wZ29mZmAgKGlubGluZSBpbiBtbS92bWEuaClcblxuSSdsbCBub3cgbmVlZCB0byB1c2UgYGdpdCBncmVwYCBhbmQgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdG8gc2VlIHdoaWNoIG90aGVyIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZXNlLCBhbmQgY29uc2lkZXIgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGdvYWwgaXMgYSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gdGhhdCBtYXhpbWl6ZXMgdGhlIGxpa2VsaWhvb2RcblxuIiwiSW5wdXRUb2tlbnMiOjk3NDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6NDcuNjIxNDg2NTk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjE1OTQ4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsZV9pc19kZXZfemVyb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jaGFyLW1lbS5jPTY4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XFxuLS1cXG5tbS9jaGFyLW1lbS5jLTcwOC0vKipcXG5tbS9jaGFyLW1lbS5jOjcwOTogKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvXFxubW0vY2hhci1tZW0uYy03MTAtICogZHJpdmVyP1xcbi0tXFxubW0vY2hhci1tZW0uYy03MTMtICovXFxubW0vY2hhci1tZW0uYzo3MTQ6Ym9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxcbm1tL2NoYXItbWVtLmMtNzE1LXtcXG4tLVxcbm1tL2ludGVybmFsLmg9MTYzNz1zdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NwaW5fdHJ5bG9jayh2b2lkKVxcbi0tXFxubW0vaW50ZXJuYWwuaC0xNjYwLS8qIGNoYXItbWVtLmMgKi9cXG5tbS9pbnRlcm5hbC5oOjE2NjE6Ym9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKTtcXG5tbS9pbnRlcm5hbC5oLTE2NjItXFxuLS1cXG5tbS92bWEuYz0yNzg2PXN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTI4MjAtXFx0ICovXFxubW0vdm1hLmM6MjgyMTpcXHRpZiAobWFwX2lzX3ByaXZhdGUobWFwKSBcXHUwMDI2XFx1MDAyNiBmaWxlX2lzX2Rldl96ZXJvKG1hcC1cXHUwMDNlZmlsZSkpXFxubW0vdm1hLmMtMjgyMi1cXHRcXHRtYXBfc2V0X2Fub24obWFwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg9MTY0Nz1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHM7XFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0xNjQ4LVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmg6MTY0OTpzdGF0aWMgaW5saW5lIGJvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTE2NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNjo0OS4yODMwODY5OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQwNjc5NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgTWFwcGluZyBmb3IgQ2hhcmFjdGVyIERldmljZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHplcm8tZmlsbGVkIG1lbW9yeSBpcyBwcmVwYXJlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgY2hhcmFjdGVyIGRldmljZXMuIFRoYXQgbWVhbnMgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbW1hcF96ZXJvX3ByZXBhcmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG1tL2NoYXItbWVtLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgdGhlIHByZXBhcmF0aW9uIGZvciB0aGUgbWFnaWMgb2YgbWFwcGluZyB6ZXJvIHBhZ2VzIGludG8gdXNlciBzcGFjZSBtZW1vcnkgb2NjdXJzLiBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cCBiZWZvcmUgdGhlIGFjdHVhbCBtZW1vcnkgbWFwcGluZyB0YWtlcyBwbGFjZSwgb3IgdGhlIGFjdHVhbCB6ZXJvaW5nIGl0c2VsZi4gR2l2ZW4gdGhlIGZpbGUgYW5kIGZ1bmN0aW9uIG5hbWUsIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHN0ZXBzIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLCBvciBwb3NzaWJseSB6ZXJvaW5nIHRoZSBwYWdlcyBhaGVhZCBvZiB0aGUgbWFwcGluZy4gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2YgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBpbnRlcmFjdGlvbiBjb252ZXJnZSwgYW5kIEknbSByZWFkeSB0byBkaWcgaW4uIFRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIG15IGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDI4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6NTIuMDIzNzY4NDE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzgzNDY3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW1hcF96ZXJvX3ByZXBhcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY2hhci1tZW0uYz00NzY9c3RhdGljIHNzaXplX3QgcmVhZF96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbi0tXFxubW0vY2hhci1tZW0uYy01MDItXFxubW0vY2hhci1tZW0uYzo1MDM6c3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxcbm1tL2NoYXItbWVtLmMtNTA0LXtcXG4tLVxcbm1tL2NoYXItbWVtLmM9NTIzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9jaGFyLW1lbS5jLTUyOC1cXHRcXHQvKlxcbm1tL2NoYXItbWVtLmM6NTI5OlxcdFxcdCAqIG1tYXBfemVyb19wcmVwYXJlKCkgd2lsbCBjYWxsIHNobWVtX3plcm9fc2V0dXAoKSB0byBjcmVhdGUgYVxcbm1tL2NoYXItbWVtLmMtNTMwLVxcdFxcdCAqIGZpbGUsIHNvIHVzZSBzaG1lbSdzIGdldF91bm1hcHBlZF9hcmVhIGluIGNhc2UgaXQgY2FuIGJlXFxuLS1cXG5tbS9jaGFyLW1lbS5jPTY2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XFxuLS1cXG5tbS9jaGFyLW1lbS5jLTY3MS1cXHQuc3BsaWNlX3dyaXRlXFx0PSBzcGxpY2Vfd3JpdGVfemVybyxcXG5tbS9jaGFyLW1lbS5jOjY3MjpcXHQubW1hcF9wcmVwYXJlXFx0PSBtbWFwX3plcm9fcHJlcGFyZSxcXG5tbS9jaGFyLW1lbS5jLTY3My1cXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBnZXRfdW5tYXBwZWRfYXJlYV96ZXJvLFxcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmM9MTM9c3RydWN0IHRhc2tfc3RydWN0IF9fY3VycmVudDtcXG50b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYy0xNC1cXG50b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYzoxNTpzdGF0aWMgaW50IG1tYXBfemVyb19wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxudG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmMtMTYte1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmM9MjA9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZXJvX2ZvcHMgPSB7XFxudG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmM6MjE6XFx0Lm1tYXBfcHJlcGFyZSA9IG1tYXBfemVyb19wcmVwYXJlLFxcbnRvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jLTIyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI2OjUzLjc2MjEyOTI0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMDkyODE2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBNYXBwaW5nIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbWVtb3J5IG1hcHBpbmcgaXMgYmVpbmcgcHJlcGFyZWQgYW5kIGV4ZWN1dGVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBjYWxsX21tYXBfcHJlcGFyZWAgYW5kIGBfX21tYXBfcmVnaW9uYCBmdW5jdGlvbnMuIFRoZXNlIGFyZSBsaWtlbHkgdGhlIGNydWNpYWwgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29yZSBsb2dpYyB3aXRoaW4gYG1tL3ZtYS5jYCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS92bWEuY2AgdG8gZ3Jhc3AgdGhlIGZsb3cgYW5kIGNvbnRleHQgYXJvdW5kIHRob3NlIHNwZWNpZmljIGxpbmVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBpcyBiZWluZyBzZXQgdXAgYW5kIGhvdyB0aGUgcmVnaW9uIGlzIGFjdHVhbGx5IGVzdGFibGlzaGVkLiBUaGlzIHNob3VsZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHByZS1jb25kaXRpb25zLCB0aGUgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSwgYW5kIHdoYXQgdGhlIGNvZGUgaXMgKmFjdHVhbGx5KiBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNjo1NS44NzE0MTMyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzgwOlxcdCAqIHRoYXQgYXJlIHBlcm1pdHRlZCB0byBiZSB1cGRhdGVkIGJ5IHRoZSBjYWxsZXIuXFxuMjc4MTpcXHQgKlxcbjI3ODI6XFx0ICogQWxsIGJ1dCB1c2VyLWRlZmluZWQgZmllbGRzIHdpbGwgYmUgcHJlLXBvcHVsYXRlZCB3aXRoIG9yaWdpbmFsIHZhbHVlcy5cXG4yNzgzOlxcdCAqXFxuMjc4NDpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuMjc4NTpcXHQgKi9cXG4yNzg2OlxcdHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcXG4yNzg3OlxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxuMjc4ODpcXHR7XFxuMjc4OTpcXHRcXHRpbnQgZXJyO1xcbjI3OTA6XFx0XFxuMjc5MTpcXHRcXHQvKiBJbnZva2UgdGhlIGhvb2suICovXFxuMjc5MjpcXHRcXHRlcnIgPSB2ZnNfbW1hcF9wcmVwYXJlKG1hcC1cXHUwMDNlZmlsZSwgZGVzYyk7XFxuMjc5MzpcXHRcXHRpZiAoZXJyKVxcbjI3OTQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNzk1OlxcdFxcbjI3OTY6XFx0XFx0LyogSXQncyBpbnZhbGlkIGZvciBtbWFwX3ByZXByYXJlIGhvb2tzIHRvIGNsZWFyIHZtX29wcy4gKi9cXG4yNzk3OlxcdFxcdGlmICghZGVzYy1cXHUwMDNldm1fb3BzKVxcbjI3OTg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjc5OTpcXHRcXG4yODAwOlxcdFxcdGVyciA9IGNhbGxfYWN0aW9uX3ByZXBhcmUobWFwLCBkZXNjKTtcXG4yODAxOlxcdFxcdGlmIChlcnIpXFxuMjgwMjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI4MDM6XFx0XFxuMjgwNDpcXHRcXHQvKiBVcGRhdGUgZmllbGRzIHBlcm1pdHRlZCB0byBiZSBjaGFuZ2VkLiAqL1xcbjI4MDU6XFx0XFx0bWFwLVxcdTAwM2VwZ29mZiA9IGRlc2MtXFx1MDAzZXBnb2ZmO1xcbjI4MDY6XFx0XFx0aWYgKGRlc2MtXFx1MDAzZXZtX2ZpbGUgIT0gbWFwLVxcdTAwM2VmaWxlKSB7XFxuMjgwNzpcXHRcXHRcXHRtYXAtXFx1MDAzZWZpbGVfZG9lc250X25lZWRfZ2V0ID0gdHJ1ZTtcXG4yODA4OlxcdFxcdFxcdG1hcC1cXHUwMDNlZmlsZSA9IGRlc2MtXFx1MDAzZXZtX2ZpbGU7XFxuMjgwOTpcXHRcXHR9XFxuMjgxMDpcXHRcXHRtYXAtXFx1MDAzZXZtYV9mbGFncyA9IGRlc2MtXFx1MDAzZXZtYV9mbGFncztcXG4yODExOlxcdFxcdG1hcC1cXHUwMDNlcGFnZV9wcm90ID0gZGVzYy1cXHUwMDNlcGFnZV9wcm90O1xcbjI4MTI6XFx0XFx0LyogVXNlci1kZWZpbmVkIGZpZWxkcy4gKi9cXG4yODEzOlxcdFxcdG1hcC1cXHUwMDNldm1fb3BzID0gZGVzYy1cXHUwMDNldm1fb3BzO1xcbjI4MTQ6XFx0XFx0bWFwLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBkZXNjLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuMjgxNTpcXHRcXG4yODE2OlxcdFxcdC8qXFxuMjgxNzpcXHRcXHQgKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gbWFwcGluZ3MgYXJlIGFuIGFuY2llbnQgd2F5IG9mIGdldHRpbmdcXG4yODE4OlxcdFxcdCAqIGFub255bW91cyBtYXBwaW5ncy4gUmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlc2UgbWFwcGluZ3MgdG8gYmUgb2RkXFxuMjgxOTpcXHRcXHQgKiBvdXRsaWVycywgc2ltcGx5IG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMuXFxuMjgyMDpcXHRcXHQgKi9cXG4yODIxOlxcdFxcdGlmIChtYXBfaXNfcHJpdmF0ZShtYXApIFxcdTAwMjZcXHUwMDI2IGZpbGVfaXNfZGV2X3plcm8obWFwLVxcdTAwM2VmaWxlKSlcXG4yODIyOlxcdFxcdFxcdG1hcF9zZXRfYW5vbihtYXApO1xcbjI4MjM6XFx0XFxuMjgyNDpcXHRcXHRyZXR1cm4gMDtcXG4yODI1OlxcdH1cXG4yODI2OlxcdFxcbjI4Mjc6XFx0c3RhdGljIHZvaWQgc2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjI4Mjg6XFx0XFx0XFx0c3RydWN0IG1tYXBfc3RhdGUgKm1hcClcXG4yODI5OlxcdHtcXG4yODMwOlxcdFxcdHZtYS1cXHUwMDNldm1fb3BzID0gbWFwLVxcdTAwM2V2bV9vcHM7XFxuMjgzMTpcXHRcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IG1hcC1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbjI4MzI6XFx0fVxcbjI4MzM6XFx0XFxuMjgzNDpcXHQvKlxcbjI4MzU6XFx0ICogQXJlIHdlIGd1YXJhbnRlZWQgbm8gZHJpdmVyIGNhbiBjaGFuZ2Ugc3RhdGUgc3VjaCBhcyB0byBwcmVjbHVkZSBLU00gbWVyZ2luZz9cXG4yODM2OlxcdCAqIElmIHNvLCBsZXQncyBzZXQgdGhlIEtTTSBtZXJnZWFibGUgZmxhZyBlYXJseSBzbyB3ZSBkb24ndCBicmVhayBWTUEgbWVyZ2luZy5cXG4yODM3OlxcdCAqL1xcbjI4Mzg6XFx0c3RhdGljIGJvb2wgY2FuX3NldF9rc21fZmxhZ3NfZWFybHkoc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcXG4yODM5OlxcdHtcXG4yODQwOlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlID0gbWFwLVxcdTAwM2VmaWxlO1xcbjI4NDE6XFx0XFxuMjg0MjpcXHRcXHQvKiBBbm9ueW1vdXMgbWFwcGluZ3MgaGF2ZSBubyBkcml2ZXIgd2hpY2ggY2FuIGNoYW5nZSB0aGVtLiAqL1xcbjI4NDM6XFx0XFx0aWYgKCFmaWxlKVxcbjI4NDQ6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjg0NTpcXHRcXG4yODQ2OlxcdFxcdC8qXFxuMjg0NzpcXHRcXHQgKiBJZiAubW1hcF9wcmVwYXJlKCkgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBkcml2ZXIgd2lsbCBoYXZlIGFscmVhZHlcXG4yODQ4OlxcdFxcdCAqIG1hbmlwdWxhdGVkIHN0YXRlIHByaW9yIHRvIHVwZGF0aW5nIEtTTSBmbGFncy4gU28gbm8gbmVlZCB0byB3b3JyeVxcbjI4NDk6XFx0XFx0ICogYWJvdXQgbW1hcCBjYWxsYmFja3MgbW9kaWZ5aW5nIFZNQSBmbGFncyBhZnRlciB0aGUgS1NNIGZsYWcgaGFzIGJlZW5cXG4yODUwOlxcdFxcdCAqIHVwZGF0ZWQgaGVyZSwgd2hpY2ggY291bGQgb3RoZXJ3aXNlIGFmZmVjdCBLU00gZWxpZ2liaWxpdHkuXFxuMjg1MTpcXHRcXHQgKi9cXG4yODUyOlxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2VtbWFwX3ByZXBhcmUpXFxuMjg1MzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yODU0OlxcdFxcbjI4NTU6XFx0XFx0Lyogc2htZW0gaXMgc2FmZS4gKi9cXG4yODU2OlxcdFxcdGlmIChzaG1lbV9maWxlKGZpbGUpKVxcbjI4NTc6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjg1ODpcXHRcXG4yODU5OlxcdFxcdC8qIEFueSBvdGhlciAubW1hcCBjYWxsYmFjayBpcyBub3Qgc2FmZS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6NTUuODcxNTc4MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE3MDcyODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gTWVtb3J5IE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBfX21tYXBfcmVnaW9uYCBhZ2Fpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5vdCBqdXN0IGlzb2xhdGUgb24gdGhhdCBmdW5jdGlvbiwgYnV0IGJyb2FkZW4gdGhlIHNjb3BlIHNsaWdodGx5LiBUbyB0cnVseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBvZiBjb2RlLiBXaGF0IGNhbGxzIGBfX21tYXBfcmVnaW9uYD8gV2hhdCBkYXRhIGRvZXMgaXQgb3BlcmF0ZSBvbj8gV2hhdCBmb2xsb3dzIGl0cyBleGVjdXRpb24/IEknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBlcnJvciBjaGVja3MsIG9yIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucyBpbiBpdHMgdmljaW5pdHk/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBvciBzaW1wbHkgbW9kaWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIG1hcHBpbmc/IEEgZGVlcGVyIGRpdmUgYXJvdW5kIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gd2lsbCBnaXZlIGEgbXVjaCBjbGVhcmVyIHBpY3R1cmUuIEknbSBhZnRlciB0aGUgYmlnZ2VyIHN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6NTcuOTg4NjUyOTY5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODgwOlxcdFxcdH07XFxuMjg4MTpcXHRcXHRib29sIGFsbG9jYXRlZF9uZXcgPSBmYWxzZTtcXG4yODgyOlxcdFxcdGludCBlcnJvcjtcXG4yODgzOlxcdFxcbjI4ODQ6XFx0XFx0bWFwLmNoZWNrX2tzbV9lYXJseSA9IGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KFxcdTAwMjZtYXApO1xcbjI4ODU6XFx0XFxuMjg4NjpcXHRcXHRlcnJvciA9IF9fbW1hcF9zZXR1cChcXHUwMDI2bWFwLCBcXHUwMDI2ZGVzYywgdWYpO1xcbjI4ODc6XFx0XFx0aWYgKCFlcnJvciBcXHUwMDI2XFx1MDAyNiBoYXZlX21tYXBfcHJlcGFyZSlcXG4yODg4OlxcdFxcdFxcdGVycm9yID0gY2FsbF9tbWFwX3ByZXBhcmUoXFx1MDAyNm1hcCwgXFx1MDAyNmRlc2MpO1xcbjI4ODk6XFx0XFx0aWYgKGVycm9yKVxcbjI4OTA6XFx0XFx0XFx0Z290byBhYm9ydF9tdW5tYXA7XFxuMjg5MTpcXHRcXG4yODkyOlxcdFxcdGlmIChtYXAuY2hlY2tfa3NtX2Vhcmx5KVxcbjI4OTM6XFx0XFx0XFx0dXBkYXRlX2tzbV9mbGFncyhcXHUwMDI2bWFwKTtcXG4yODk0OlxcdFxcbjI4OTU6XFx0XFx0LyogQXR0ZW1wdCB0byBtZXJnZSB3aXRoIGFkamFjZW50IFZNQXMuLi4gKi9cXG4yODk2OlxcdFxcdGlmIChtYXAucHJldiB8fCBtYXAubmV4dCkge1xcbjI4OTc6XFx0XFx0XFx0Vk1HX01NQVBfU1RBVEUodm1nLCBcXHUwMDI2bWFwLCAvKiB2bWEgPSAqLyBOVUxMKTtcXG4yODk4OlxcdFxcbjI4OTk6XFx0XFx0XFx0dm1hID0gdm1hX21lcmdlX25ld19yYW5nZShcXHUwMDI2dm1nKTtcXG4yOTAwOlxcdFxcdH1cXG4yOTAxOlxcdFxcbjI5MDI6XFx0XFx0LyogLi4uYnV0IGlmIHdlIGNhbid0LCBhbGxvY2F0ZSBhIG5ldyBWTUEuICovXFxuMjkwMzpcXHRcXHRpZiAoIXZtYSkge1xcbjI5MDQ6XFx0XFx0XFx0ZXJyb3IgPSBfX21tYXBfbmV3X3ZtYShcXHUwMDI2bWFwLCBcXHUwMDI2dm1hLCBcXHUwMDI2ZGVzYy5hY3Rpb24pO1xcbjI5MDU6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjI5MDY6XFx0XFx0XFx0XFx0Z290byB1bmFjY3RfZXJyb3I7XFxuMjkwNzpcXHRcXHRcXHRhbGxvY2F0ZWRfbmV3ID0gdHJ1ZTtcXG4yOTA4OlxcdFxcdH1cXG4yOTA5OlxcdFxcbjI5MTA6XFx0XFx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFxcdTAwMjZcXHUwMDI2ICFtYXBfaXNfYW5vbihcXHUwMDI2bWFwKSlcXG4yOTExOlxcdFxcdFxcdHNldF92bWFfdXNlcl9kZWZpbmVkX2ZpZWxkcyh2bWEsIFxcdTAwMjZtYXApO1xcbjI5MTI6XFx0XFxuMjkxMzpcXHRcXHRfX21tYXBfY29tcGxldGUoXFx1MDAyNm1hcCwgdm1hKTtcXG4yOTE0OlxcdFxcbjI5MTU6XFx0XFx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFxcdTAwMjZcXHUwMDI2IGFsbG9jYXRlZF9uZXcpIHtcXG4yOTE2OlxcdFxcdFxcdGVycm9yID0gbW1hcF9hY3Rpb25fY29tcGxldGUodm1hLCBcXHUwMDI2ZGVzYy5hY3Rpb24sXFxuMjkxNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIC8qaXNfY29tcGF0PSovZmFsc2UpO1xcbjI5MTg6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjI5MTk6XFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbjI5MjA6XFx0XFx0fVxcbjI5MjE6XFx0XFxuMjkyMjpcXHRcXHRyZXR1cm4gYWRkcjtcXG4yOTIzOlxcdFxcbjI5MjQ6XFx0XFx0LyogQWNjb3VudGluZyB3YXMgZG9uZSBieSBfX21tYXBfc2V0dXAoKS4gKi9cXG4yOTI1OlxcdHVuYWNjdF9lcnJvcjpcXG4yOTI2OlxcdFxcdGlmIChtYXAuY2hhcmdlZClcXG4yOTI3OlxcdFxcdFxcdHZtX3VuYWNjdF9tZW1vcnkobWFwLmNoYXJnZWQpO1xcbjI5Mjg6XFx0YWJvcnRfbXVubWFwOlxcbjI5Mjk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6MjY6NTcuOTg4OTE0ODg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzMxNDg1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1tYXBfZmlsZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBtbWFwX2ZpbGVgLCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGl0cyBkZWZpbml0aW9uIGluIGBtbS9pbnRlcm5hbC5oYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwYXJhbWV0ZXJzLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCAqY2FsbCogYG1tYXBfZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBjbHVlcyB3aWxsIGxpZSDigJMgc2VlaW5nIGhvdyBpdCdzIHVzZWQgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGluc2lnaHQgaW50byBpdHMgaW50ZW5kZWQgYmVoYXZpb3IgYW5kIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93IGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCBgbW1hcF9maWxlYCBvcGVyYXRlcy4gS25vd2luZyB0aGUgY2FsbGVycyBpcyAqa2V5KiB0byBncmFzcGluZyBpdHMgb3ZlcmFsbCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NjMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI2OjU5LjgyMjA2NjQyM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NzIxNDcwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtbWFwX2ZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvOXAvdmZzX2ZpbGUuYy0zMC1cXG5mcy85cC92ZnNfZmlsZS5jOjMxOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdjlmc19tbWFwX2ZpbGVfdm1fb3BzO1xcbmZzLzlwL3Zmc19maWxlLmMtMzItXFxuLS1cXG5mcy85cC92ZnNfZmlsZS5jPTQ2Mj12OWZzX2ZpbGVfbW1hcF9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxuLS1cXG5mcy85cC92ZnNfZmlsZS5jLTQ3Ny1cXHRpZiAoIXJldHZhbClcXG5mcy85cC92ZnNfZmlsZS5jOjQ3ODpcXHRcXHRkZXNjLVxcdTAwM2V2bV9vcHMgPSBcXHUwMDI2djlmc19tbWFwX2ZpbGVfdm1fb3BzO1xcbmZzLzlwL3Zmc19maWxlLmMtNDc5LVxcbi0tXFxuZnMvOXAvdmZzX2ZpbGUuYz00ODk9c3RhdGljIHZvaWQgdjlmc19tbWFwX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuZnMvOXAvdmZzX2ZpbGUuYy01MDEtXFxuZnMvOXAvdmZzX2ZpbGUuYzo1MDI6c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2OWZzX21tYXBfZmlsZV92bV9vcHMgPSB7XFxuZnMvOXAvdmZzX2ZpbGUuYy01MDMtXFx0LmNsb3NlID0gdjlmc19tbWFwX3ZtX2Nsb3NlLFxcbi0tXFxuZnMvYmFja2luZy1maWxlLmM9MzI5PWludCBiYWNraW5nX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5mcy9iYWNraW5nLWZpbGUuYy0zMzctXFxuZnMvYmFja2luZy1maWxlLmM6MzM4OlxcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcXG5mcy9iYWNraW5nLWZpbGUuYy0zMzktXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5mcy9iaW5mbXRfZWxmLmM9NjQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvYWRfZWxmX2ludGVycChzdHJ1Y3QgZWxmaGRyICppbnRlcnBfZWxmX2V4LFxcbi0tXFxuZnMvYmluZm10X2VsZi5jLTY2MC1cXHRcXHRnb3RvIG91dDtcXG5mcy9iaW5mbXRfZWxmLmM6NjYxOlxcdGlmICghY2FuX21tYXBfZmlsZShpbnRlcnByZXRlcikpXFxuZnMvYmluZm10X2VsZi5jLTY2Mi1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmZzL2JpbmZtdF9lbGYuYz04Mjk9c3RhdGljIGludCBsb2FkX2VsZl9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9lbGYuYy04NjItXFx0XFx0Z290byBvdXQ7XFxuZnMvYmluZm10X2VsZi5jOjg2MzpcXHRpZiAoIWNhbl9tbWFwX2ZpbGUoYnBybS1cXHUwMDNlZmlsZSkpXFxuZnMvYmluZm10X2VsZi5jLTg2NC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz0xMDQ9c3RhdGljIGludCBpc19lbGYoc3RydWN0IGVsZmhkciAqaGRyLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0xMTEtXFx0XFx0cmV0dXJuIDA7XFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjExMjpcXHRpZiAoIWNhbl9tbWFwX2ZpbGUoZmlsZSkpXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTExMy1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2NvZGEvZmlsZS5jPTE1MT1jb2RhX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqY29kYV9maWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL2NvZGEvZmlsZS5jLTE2Mi1cXG5mcy9jb2RhL2ZpbGUuYzoxNjM6XFx0aWYgKCFjYW5fbW1hcF9maWxlKGhvc3RfZmlsZSkpXFxuZnMvY29kYS9maWxlLmMtMTY0LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZnMvZWNyeXB0ZnMvZmlsZS5jPTE4Nj1zdGF0aWMgaW50IGVjcnlwdGZzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuZnMvZWNyeXB0ZnMvZmlsZS5jLTE5My1cXHQgKi9cXG5mcy9lY3J5cHRmcy9maWxlLmM6MTk0OlxcdGlmICghY2FuX21tYXBfZmlsZShsb3dlcl9maWxlKSlcXG5mcy9lY3J5cHRmcy9maWxlLmMtMTk1LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxuZnMvZjJmcy9mMmZzLmg9MzYzNT1zdGF0aWMgaW5saW5lIGludCBmMmZzX2V4aXN0X2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2YyZnMvZjJmcy5oLTM2MzktXFxuZnMvZjJmcy9mMmZzLmg6MzY0MDpzdGF0aWMgaW5saW5lIGludCBmMmZzX2lzX21tYXBfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2YyZnMvZjJmcy5oLTM2NDEte1xcbi0tXFxuZnMvZjJmcy9mMmZzLmg9NDg3MT1zdGF0aWMgaW5saW5lIGJvb2wgZjJmc19kaXNhYmxlX2NvbXByZXNzZWRfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZjJmcy9mMmZzLmgtNDg4MC1cXHR9XFxuZnMvZjJmcy9mMmZzLmg6NDg4MTpcXHRpZiAoZjJmc19pc19tbWFwX2ZpbGUoaW5vZGUpIHx8IGF0b21pY19yZWFkKFxcdTAwMjZmaS1cXHUwMDNld3JpdGViYWNrKSB8fFxcbmZzL2YyZnMvZjJmcy5oLTQ4ODItXFx0XFx0KFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgRjJGU19IQVNfQkxPQ0tTKGlub2RlKSkpIHtcXG4tLVxcbmZzL2YyZnMvZjJmcy5oPTUwNDU9c3RhdGljIGlubGluZSBib29sIGYyZnNfbWF5X2NvbXByZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9mMmZzL2YyZnMuaC01MDQ4LVxcdFxcdGYyZnNfaXNfYXRvbWljX2ZpbGUoaW5vZGUpIHx8IGYyZnNfaGFzX2lubGluZV9kYXRhKGlub2RlKSB8fFxcbmZzL2YyZnMvZjJmcy5oOjUwNDk6XFx0XFx0ZjJmc19pc19tbWFwX2ZpbGUoaW5vZGUpKVxcbmZzL2YyZnMvZjJmcy5oLTUwNTAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvZjJmcy9maWxlLmM9NDcyNT1zdGF0aWMgaW50IGYyZnNfaW9jX3NldF9jb21wcmVzc19vcHRpb24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvZjJmcy9maWxlLmMtNDc1OC1cXG5mcy9mMmZzL2ZpbGUuYzo0NzU5OlxcdGlmIChmMmZzX2lzX21tYXBfZmlsZShpbm9kZSkgfHwgZ2V0X2RpcnR5X3BhZ2VzKGlub2RlKSkge1xcbmZzL2YyZnMvZmlsZS5jLTQ3NjAtXFx0XFx0cmV0ID0gLUVCVVNZO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTE5OTQ9c3RydWN0IGlub2RlX29wZXJhdGlvbnMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTIwMzktLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjA0MDpzdGF0aWMgaW5saW5lIGJvb2wgY2FuX21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjA0MS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaD0yMDE9TFNNX0hPT0soaW50LCAwLCBtbWFwX2FkZHIsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaDoyMDI6TFNNX0hPT0soaW50LCAwLCBtbWFwX2ZpbGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXFxuaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgtMjAzLVxcdCB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDc5PWludCBzZWN1cml0eV9maWxlX2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDgwLVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQ4MTppbnQgc2VjdXJpdHlfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQ4Mi1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD0xMTY2PXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2ZpbGVfaW9jdGxfY29tcGF0KHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNzItXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjExNzM6c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTExNzQtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxuaXBjL3NobS5jPTE1MjE9bG9uZyBkb19zaG1hdChpbnQgc2htaWQsIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnLFxcbi0tXFxuaXBjL3NobS5jLTE2NDUtXFxuaXBjL3NobS5jOjE2NDY6XFx0ZXJyID0gc2VjdXJpdHlfbW1hcF9maWxlKGZpbGUsIHByb3QsIGZsYWdzKTtcXG5pcGMvc2htLmMtMTY0Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtLmM9MzQ1PUJURl9JRChmdW5jLCBicGZfbHNtX3BhdGhfY2hvd24pXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0zNDctXFxua2VybmVsL2JwZi9icGZfbHNtLmM6MzQ4OkJURl9JRChmdW5jLCBicGZfbHNtX21tYXBfZmlsZSlcXG5rZXJuZWwvYnBmL2JwZl9sc20uYy0zNDktQlRGX0lEKGZ1bmMsIGJwZl9sc21fbmV0bGlua19zZW5kKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmMtOS0vKlxcbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jOjEwOiAqIFN0cm9uZyBkZWZpbml0aW9uIG9mIHRoZSBtbWFwX2ZpbGUoKSBCUEYgTFNNIGhvb2suIFRoZSBfX251bGxhYmxlIHN1ZmZpeCBvblxcbmtlcm5lbC9icGYvYnBmX2xzbV9wcm90by5jLTExLSAqIHRoZSBzdHJ1Y3QgZmlsZSBwb2ludGVyIHBhcmFtZXRlciBuYW1lIG1hcmtzIGl0IGFzIFBUUl9NQVlCRV9OVUxMLiBUaGlzXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sc21fcHJvdG8uYy0xNC0gKi9cXG5rZXJuZWwvYnBmL2JwZl9sc21fcHJvdG8uYzoxNTppbnQgYnBmX2xzbV9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGVfX251bGxhYmxlLCB1bnNpZ25lZCBsb25nIHJlcXByb3QsXFxua2VybmVsL2JwZi9icGZfbHNtX3Byb3RvLmMtMTYtXFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxubW0vaW50ZXJuYWwuaD0yMTk9c3RhdGljIGlubGluZSB2b2lkICpmb2xpb19yYXdfbWFwcGluZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaW50ZXJuYWwuaC0yMzUtICovXFxubW0vaW50ZXJuYWwuaDoyMzY6c3RhdGljIGlubGluZSBpbnQgbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9pbnRlcm5hbC5oLTIzNy17XFxuLS1cXG5tbS9tbWFwLmM9MzM4PXVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbW1hcC5jLTQ4NC1cXG5tbS9tbWFwLmM6NDg1OlxcdFxcdFxcdGlmICghY2FuX21tYXBfZmlsZShmaWxlKSlcXG5tbS9tbWFwLmMtNDg2LVxcdFxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbi0tXFxubW0vbW1hcC5jPTExMDE9U1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLFxcbi0tXFxubW0vbW1hcC5jLTExNTctXFx0LyogQ2FsbCBvdXRzaWRlIG1tYXBfbG9jayB0byBiZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgY2FsbGVycy4gKi9cXG5tbS9tbWFwLmM6MTE1ODpcXHRyZXQgPSBzZWN1cml0eV9tbWFwX2ZpbGUoZmlsZSwgcHJvdCwgZmxhZ3MpO1xcbm1tL21tYXAuYy0xMTU5LVxcdGlmIChyZXQpIHtcXG4tLVxcbm1tL25vbW11LmM9NjkwPXN0YXRpYyBpbnQgdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vbm9tbXUuYy03MjItXFx0XFx0LyogZmlsZXMgbXVzdCBzdXBwb3J0IG1tYXAgKi9cXG5tbS9ub21tdS5jOjcyMzpcXHRcXHRpZiAoIWNhbl9tbWFwX2ZpbGUoZmlsZSkpXFxubW0vbm9tbXUuYy03MjQtXFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5tbS9ub21tdS5jPTg5Mz1zdGF0aWMgaW50IGRvX21tYXBfc2hhcmVkX2ZpbGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ub21tdS5jLTg5Ni1cXG5tbS9ub21tdS5jOjg5NzpcXHRyZXQgPSBtbWFwX2ZpbGUodm1hLVxcdTAwM2V2bV9maWxlLCB2bWEpO1xcbm1tL25vbW11LmMtODk4LVxcdGlmIChyZXQgPT0gMCkge1xcbi0tXFxubW0vbm9tbXUuYz05MTQ9c3RhdGljIGludCBkb19tbWFwX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ub21tdS5jLTkyOS1cXHRpZiAoY2FwYWJpbGl0aWVzIFxcdTAwMjYgTk9NTVVfTUFQX0RJUkVDVCkge1xcbm1tL25vbW11LmM6OTMwOlxcdFxcdHJldCA9IG1tYXBfZmlsZSh2bWEtXFx1MDAzZXZtX2ZpbGUsIHZtYSk7XFxubW0vbm9tbXUuYy05MzEtXFx0XFx0Lyogc2hvdWxkbid0IHJldHVybiBzdWNjZXNzIGlmIHdlJ3JlIG5vdCBzaGFyaW5nICovXFxuLS1cXG5tbS91dGlsLmM9NTY1PXVuc2lnbmVkIGxvbmcgdm1fbW1hcF9wZ29mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vdXRpbC5jLTU3NC1cXG5tbS91dGlsLmM6NTc1OlxcdHJldCA9IHNlY3VyaXR5X21tYXBfZmlsZShmaWxlLCBwcm90LCBmbGFnKTtcXG5tbS91dGlsLmMtNTc2LVxcdGlmICghcmV0KVxcbi0tXFxubW0vdm1hLmM9MjUxOT1zdGF0aWMgaW50IF9fbW1hcF9zZXR1cChzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxcbi0tXFxubW0vdm1hLmMtMjU3MS1cXHQgKiBjYW5ub3QgcmFjZSB3aXRoIHRoZSBmcmVlaW5nIGxhdGVyIGluIHRoZSB0cnVuY2F0ZSBzY2VuYXJpby5cXG5tbS92bWEuYzoyNTcyOlxcdCAqIFRoaXMgaXMgYWxzbyBuZWVkZWQgZm9yIG1tYXBfZmlsZSgpLCB3aGljaCBpcyB3aHkgdm1fb3BzXFxubW0vdm1hLmMtMjU3My1cXHQgKiBjbG9zZSBmdW5jdGlvbiBpcyBjYWxsZWQuXFxuLS1cXG5tbS92bWEuYz0yNTgyPXN0YXRpYyBpbnQgX19tbWFwX25ld19maWxlX3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbi0tXFxubW0vdm1hLmMtMjU5NC1cXG5tbS92bWEuYzoyNTk1OlxcdGVycm9yID0gbW1hcF9maWxlKHZtYS1cXHUwMDNldm1fZmlsZSwgdm1hKTtcXG5tbS92bWEuYy0yNTk2LVxcdGlmIChlcnJvcikge1xcbi0tXFxuc2NyaXB0cy9yZWNvcmRtY291bnQuYz0xNTE9c3RhdGljIHZvaWQgKiB1bWFsbG9jKHNpemVfdCBzaXplKVxcbi0tXFxuc2NyaXB0cy9yZWNvcmRtY291bnQuYy0xNzUtICovXFxuc2NyaXB0cy9yZWNvcmRtY291bnQuYzoxNzY6c3RhdGljIHZvaWQgKm1tYXBfZmlsZShjaGFyIGNvbnN0ICpmbmFtZSlcXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jLTE3Ny17XFxuLS1cXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jPTUxMT1zdGF0aWMgaW50IGRvX2ZpbGUoY2hhciBjb25zdCAqY29uc3QgZm5hbWUpXFxuLS1cXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jLTUxNi1cXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jOjUxNzpcXHRlaGRyID0gbW1hcF9maWxlKGZuYW1lKTtcXG5zY3JpcHRzL3JlY29yZG1jb3VudC5jLTUxOC1cXHRpZiAoIWVoZHIpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYz01NjE9c3RhdGljIGludCBjb21tb25fbW1hcChjb25zdCBjaGFyICpvcCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTU4Mi1cXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYzo1ODM6c3RhdGljIGludCBhcHBhcm1vcl9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcmVxcHJvdCxcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy01ODQtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM9MTc2Nz1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBhcHBhcm1vcl9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL2xzbS5jLTE3OTQtXFx0TFNNX0hPT0tfSU5JVChmaWxlX2ZyZWVfc2VjdXJpdHksIGFwcGFybW9yX2ZpbGVfZnJlZV9zZWN1cml0eSksXFxuc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmM6MTc5NTpcXHRMU01fSE9PS19JTklUKG1tYXBfZmlsZSwgYXBwYXJtb3JfbW1hcF9maWxlKSxcXG5zZWN1cml0eS9hcHBhcm1vci9sc20uYy0xNzk2LVxcdExTTV9IT09LX0lOSVQoZmlsZV9tcHJvdGVjdCwgYXBwYXJtb3JfZmlsZV9tcHJvdGVjdCksXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmM9MTA2PXN0YXRpYyBpbnQgbW1hcF92aW9sYXRpb25fY2hlY2soZW51bSBpbWFfaG9va3MgZnVuYywgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMtMTIxLVxcdFxcdGludGVncml0eV9hdWRpdF9tc2coQVVESVRfSU5URUdSSVRZX0RBVEEsIGlub2RlLCAqcGF0aG5hbWUsXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jOjEyMjpcXHRcXHRcXHRcXHQgICAgXFxcIm1tYXBfZmlsZVxcXCIsIFxcXCJtbWFwcGVkX3dyaXRlcnNcXFwiLCByYywgMCk7XFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jLTEyMy1cXHR9XFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmM9MTM1Mz1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBpbWFfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9tYWluLmMtMTM1OS1cXHRMU01fSE9PS19JTklUKGZpbGVfcmVsZWFzZSwgaW1hX2ZpbGVfZnJlZSksXFxuc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfbWFpbi5jOjEzNjA6XFx0TFNNX0hPT0tfSU5JVChtbWFwX2ZpbGUsIGltYV9maWxlX21tYXApLFxcbnNlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX21haW4uYy0xMzYxLVxcdExTTV9IT09LX0lOSVQoZmlsZV9tcHJvdGVjdCwgaW1hX2ZpbGVfbXByb3RlY3QpLFxcbi0tXFxuc2VjdXJpdHkvaXBlL2hvb2tzLmM9NTM9aW50IGlwZV9icHJtX2NyZWRzX2Zvcl9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5zZWN1cml0eS9pcGUvaG9va3MuYy02NS0vKipcXG5zZWN1cml0eS9pcGUvaG9va3MuYzo2NjogKiBpcGVfbW1hcF9maWxlKCkgLSBpcGUgc2VjdXJpdHkgaG9vayBmdW5jdGlvbiBmb3IgbW1hcCBjaGVjay5cXG5zZWN1cml0eS9pcGUvaG9va3MuYy02Ny0gKiBAZjogRmlsZSBiZWluZyBtbWFwJ2QuIENhbiBiZSBOVUxMIGluIHRoZSBjYXNlIG9mIGFub255bW91cyBtZW1vcnkuXFxuLS1cXG5zZWN1cml0eS9pcGUvaG9va3MuYy03OS0gKi9cXG5zZWN1cml0eS9pcGUvaG9va3MuYzo4MDppbnQgaXBlX21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgbG9uZyByZXFwcm90IF9fYWx3YXlzX3VudXNlZCxcXG5zZWN1cml0eS9pcGUvaG9va3MuYy04MS1cXHRcXHQgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbnNlY3VyaXR5L2lwZS9ob29rcy5oPTI4PWludCBpcGVfYnBybV9jcmVkc19mb3JfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTtcXG5zZWN1cml0eS9pcGUvaG9va3MuaC0yOS1cXG5zZWN1cml0eS9pcGUvaG9va3MuaDozMDppbnQgaXBlX21tYXBfZmlsZShzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgbG9uZyByZXFwcm90LCB1bnNpZ25lZCBsb25nIHByb3QsXFxuc2VjdXJpdHkvaXBlL2hvb2tzLmgtMzEtXFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG4tLVxcbnNlY3VyaXR5L2lwZS9pcGUuYz00OD1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBpcGVfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9pcGUvaXBlLmMtNTAtXFx0TFNNX0hPT0tfSU5JVChicHJtX2NyZWRzX2Zvcl9leGVjLCBpcGVfYnBybV9jcmVkc19mb3JfZXhlYyksXFxuc2VjdXJpdHkvaXBlL2lwZS5jOjUxOlxcdExTTV9IT09LX0lOSVQobW1hcF9maWxlLCBpcGVfbW1hcF9maWxlKSxcXG5zZWN1cml0eS9pcGUvaXBlLmMtNTItXFx0TFNNX0hPT0tfSU5JVChmaWxlX21wcm90ZWN0LCBpcGVfZmlsZV9tcHJvdGVjdCksXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTI1MzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1tYXBfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTY3LS8qKlxcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MjU2ODogKiBzZWN1cml0eV9tbWFwX2ZpbGUoKSAtIENoZWNrIGlmIG1tYXAnaW5nIGEgZmlsZSBpcyBhbGxvd2VkXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTY5LSAqIEBmaWxlOiBmaWxlXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTI1NzctICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNTc4OmludCBzZWN1cml0eV9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcXG5zZWN1cml0eS9zZWN1cml0eS5jLTI1NzktXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTgwLXtcXG5zZWN1cml0eS9zZWN1cml0eS5jOjI1ODE6XFx0cmV0dXJuIGNhbGxfaW50X2hvb2sobW1hcF9maWxlLCBmaWxlLCBwcm90LCBtbWFwX3Byb3QoZmlsZSwgcHJvdCksXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTgyLVxcdFxcdFxcdCAgICAgZmxhZ3MpO1xcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0yNTkxLSAqIENoZWNrIHBlcm1pc3Npb25zIGZvciBhIG1tYXAgb3BlcmF0aW9uIG9uIGEgc3RhY2tlZCBmaWxlc3lzdGVtLiAgVGhpcyBob29rXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoyNTkyOiAqIGlzIGNhbGxlZCBhZnRlciB0aGUgc2VjdXJpdHlfbW1hcF9maWxlKCkgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBhdXRob3JpemluZ1xcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMjU5My0gKiB0aGUgbW1hcCBvbiBAYmFja2luZ19maWxlLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgbW1hcCBvcGVyYXRpb25cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz00MDI3PXN0YXRpYyBpbnQgc2VsaW51eF9tbWFwX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwMzktXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwNDA6c3RhdGljIGludCBzZWxpbnV4X21tYXBfZmlsZV9jb21tb24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcHJvdCxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA0MS1cXHRcXHRcXHRcXHQgICAgYm9vbCBzaGFyZWQsIGJvb2wgbW91bnRlcl9jaGVjaylcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDU4LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDU5OnN0YXRpYyBpbnQgc2VsaW51eF9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwNjAtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHJlcXByb3QgX19hbHdheXNfdW51c2VkLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwNjIte1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MDYzOlxcdHJldHVybiBzZWxpbnV4X21tYXBfZmlsZV9jb21tb24oZmlsZSwgcHJvdCxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA2NC1cXHRcXHRcXHRcXHRcXHQoZmxhZ3MgXFx1MDAyNiBNQVBfVFlQRSkgPT0gTUFQX1NIQVJFRCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MDczLSAqXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwNzQ6ICogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgc2VsaW51eF9tbWFwX2ZpbGUoKSBvbiBzdGFja2VkIGZpbGVzeXN0ZW1zLCBhbmQgaXRcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNDA3NS0gKiBpcyB0aGlzIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IGFjY2VzcyB0byBAYmFja2luZ19maWxlIGFuZFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQwODM9c3RhdGljIGludCBzZWxpbnV4X21tYXBfYmFja2luZ19maWxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwOTYtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjQwOTc6XFx0cmV0dXJuIHNlbGludXhfbW1hcF9maWxlX2NvbW1vbihiYWNraW5nX2ZpbGUsIHByb3QsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQwOTgtXFx0XFx0XFx0XFx0XFx0dm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1NIQVJFRCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTYwPXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYzOS1cXHRMU01fSE9PS19JTklUKGZpbGVfaW9jdGxfY29tcGF0LCBzZWxpbnV4X2ZpbGVfaW9jdGxfY29tcGF0KSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzY0MDpcXHRMU01fSE9PS19JTklUKG1tYXBfZmlsZSwgc2VsaW51eF9tbWFwX2ZpbGUpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjQxLVxcdExTTV9IT09LX0lOSVQobW1hcF9iYWNraW5nX2ZpbGUsIHNlbGludXhfbW1hcF9iYWNraW5nX2ZpbGUpLFxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmM9MTgwMT1zdGF0aWMgaW50IHNtYWNrX2ZpbGVfZmNudGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYy0xODM1LS8qKlxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjE4MzY6ICogc21hY2tfbW1hcF9maWxlIC0gQ2hlY2sgcGVybWlzc2lvbnMgZm9yIGEgbW1hcCBvcGVyYXRpb24uXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTgzNy0gKiBAZmlsZTogY29udGFpbnMgdGhlIGZpbGUgc3RydWN0dXJlIGZvciBmaWxlIHRvIG1hcCAobWF5IGJlIE5VTEwpLlxcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtMTg0NS0gKi9cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYzoxODQ2OnN0YXRpYyBpbnQgc21hY2tfbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jLTE4NDctXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyByZXFwcm90LCB1bnNpZ25lZCBsb25nIHByb3QsXFxuLS1cXG5zZWN1cml0eS9zbWFjay9zbWFja19sc20uYz01MTU1PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNtYWNrX2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTE5OC1cXHRMU01fSE9PS19JTklUKGZpbGVfZmNudGwsIHNtYWNrX2ZpbGVfZmNudGwpLFxcbnNlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jOjUxOTk6XFx0TFNNX0hPT0tfSU5JVChtbWFwX2ZpbGUsIHNtYWNrX21tYXBfZmlsZSksXFxuc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMtNTIwMC1cXHRMU01fSE9PS19JTklUKG1tYXBfYWRkciwgY2FwX21tYXBfYWRkciksXFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM9NDg9c3RhdGljIGludCB0ZXN0X19QRVJGX1JFQ09SRChzdHJ1Y3QgdGVzdF9zdWl0ZSAqdGVzdCBfX21heWJlX3VudXNlZCwgaW50IHN1YnRlc3QgX19tYXliZV91bnVzZWQpXFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtNjQtXFx0Y29uc3QgY2hhciAqYXJndltdID0geyBjbWQsIFxcXCIxXFxcIiwgTlVMTCwgfTtcXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6NjU6XFx0Y2hhciAqYm5hbWUsICptbWFwX2ZpbGVuYW1lO1xcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy02Ni1cXHR1NjQgcHJldl90aW1lID0gMDtcXG4tLVxcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy0yNzMtXFx0XFx0XFx0XFx0Y2FzZSBQRVJGX1JFQ09SRF9NTUFQOlxcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYzoyNzQ6XFx0XFx0XFx0XFx0XFx0bW1hcF9maWxlbmFtZSA9IGV2ZW50LVxcdTAwM2VtbWFwLmZpbGVuYW1lO1xcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy0yNzUtXFx0XFx0XFx0XFx0XFx0Z290byBjaGVja19ibmFtZTtcXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjc2LVxcdFxcdFxcdFxcdGNhc2UgUEVSRl9SRUNPUkRfTU1BUDI6XFxudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jOjI3NzpcXHRcXHRcXHRcXHRcXHRtbWFwX2ZpbGVuYW1lID0gZXZlbnQtXFx1MDAzZW1tYXAyLmZpbGVuYW1lO1xcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy0yNzgtXFx0XFx0XFx0XFx0Y2hlY2tfYm5hbWU6XFxudG9vbHMvcGVyZi90ZXN0cy9wZXJmLXJlY29yZC5jOjI3OTpcXHRcXHRcXHRcXHRcXHRibmFtZSA9IHN0cnJjaHIobW1hcF9maWxlbmFtZSwgJy8nKTtcXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjgwLVxcdFxcdFxcdFxcdFxcdGlmIChibmFtZSAhPSBOVUxMKSB7XFxuLS1cXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmMtMjg5LVxcdFxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoIWZvdW5kX3Zkc29fbW1hcClcXG50b29scy9wZXJmL3Rlc3RzL3BlcmYtcmVjb3JkLmM6MjkwOlxcdFxcdFxcdFxcdFxcdFxcdGZvdW5kX3Zkc29fbW1hcCA9ICFzdHJjbXAobW1hcF9maWxlbmFtZSwgXFxcIlt2ZHNvXVxcXCIpO1xcbnRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYy0yOTEtXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmM9MTU1PV9fbmFrZWQgaW50IGRpc2FibGVkX2hvb2tfdGVzdDModm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jLTE2Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmM6MTYzOlNFQyhcXFwibHNtL21tYXBfZmlsZVxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jOjE2NDpfX2Rlc2NyaXB0aW9uKFxcXCJub3QgbnVsbCBjaGVja2luZyBudWxsYWJsZSBwb2ludGVyIGluIGJwZl9sc21fbW1hcF9maWxlXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmMtMTY1LV9fZmFpbHVyZSBfX21zZyhcXFwiUjEgaW52YWxpZCBtZW0gYWNjZXNzICd0cnVzdGVkX3B0cl9vcl9udWxsXydcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYz0xNjY9aW50IEJQRl9QUk9HKG5vX251bGxfY2hlY2ssIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jLTE3NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbHNtLmM6MTc2OlNFQyhcXFwibHNtL21tYXBfZmlsZVxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xzbS5jOjE3NzpfX2Rlc2NyaXB0aW9uKFxcXCJudWxsIGNoZWNraW5nIG51bGxhYmxlIHBvaW50ZXIgaW4gYnBmX2xzbV9tbWFwX2ZpbGVcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sc20uYy0xNzgtX19zdWNjZXNzXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTE1NDQ9c3RhdGljIGlubGluZSBpbnQgbWFwcGluZ19tYXBfd3JpdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTE1NTAtLyogRGlkIHRoZSBkcml2ZXIgcHJvdmlkZSB2YWxpZCBtbWFwIGhvb2sgY29uZmlndXJhdGlvbj8gKi9cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjE1NTE6c3RhdGljIGlubGluZSBib29sIGNhbl9tbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0xNTUyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaD0zMjg9c3RhdGljIGlubGluZSB2b2lkIHZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0zMzEtXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oOjMzMjpzdGF0aWMgaW5saW5lIGludCBtbWFwX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC0zMzMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNzowMS4zNjkyODY0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjA2MTg5NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBtbWFwIEltcGxlbWVudGF0aW9uIERldGFpbHMqKlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzIGBjYW5fbW1hcF9maWxlYCBidXNpbmVzcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBzZWUgd2hlcmUgYG1tYXBfZmlsZWAgYW5kIGBtbWFwX3plcm9fcHJlcGFyZWAgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQuIEl0IGxvb2tzIGxpa2UgYG1tL3ZtYS5jYCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgYF9fbW1hcF9uZXdfZmlsZV92bWFgIGNhbGxzIGBtbWFwX2ZpbGVgIHdpdGggdGhlIGB2bWEtXHUwMDNldm1fZmlsZWAgYW5kIHRoZSB2bWEgaXRzZWxmLiBUaGVuLCBJIHJlbWVtYmVyIGBtbWFwX3plcm9fcHJlcGFyZWAgaXMgZGVmaW5lZCBpbiBgbW0vY2hhci1tZW0uY2AgYXMgdGhlIGB6ZXJvX2ZvcHMubW1hcF9wcmVwYXJlYCBmdW5jdGlvbi5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgcmVjb2duaXplcyAvZGV2L3plcm8uIEnigJlsbCBjaGVjayBgZmlsZV9pc19kZXZfemVyb2AgaW4gYG1tL2NoYXItbWVtLmNgLiBMb29rcyBzdHJhaWdodGZvcndhcmQ6IGl0IGp1c3QgdmVyaWZpZXMgaWYgdGhlIGZpbGUgb3BlcmF0aW9uIChgZl9vcGApIG1hdGNoZXMgYFx1MDAyNnplcm9fZm9wc2AuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gYG1tYXBfemVyb19wcmVwYXJlYCBpdHNlbGYuIEluIGBtbS9jaGFyLW1lbS5jYCwgaWYgaXTigJlzIGEgc2hhcmVkIFZNQSAoYFZNQV9TSEFSRURfQklUYCBzZXQpIHRoZW4gYHNobWVtX3plcm9fc2V0dXBfZGVzY2AgZG9lcyB0aGUgd29yaywgb3RoZXJ3aXNlLCBpbiBhIHByaXZhdGUgbWFwcGluZyBjYXNlLCBpdCBqdXN0IHJldHVybnMuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBjb3JlIE1NIHRha2VzIGNhcmUgb2YgcHJpdmF0ZSBzZW1hbnRpY3MuXG5cbk9rYXksIGxldCdzIHN0ZXAgdXAgYSBsZXZlbCB0byBgbW0vdm1hLmNgIGFuZCBsb29rIGF0IGBjYWxsX21tYXBfcHJlcGFyZWAuIFRoaXMgaXMgdGhlIGNvcmUgbW1hcCBwcmVwYXJlIGZ1bmN0aW9uIGFuZCBpdCdzIGNhbGxpbmcgYHZmc19tbWFwX3ByZXBhcmVgLiBUaGF0J3Mgd2hlcmUgZmlsZSBzeXN0ZW0gc3BlY2lmaWMgdGhpbmdzIGFyZSBoYW5kbGVkLiBJdCdzIGFsc28gbWFraW5nIHN1cmUgYHZtX29wc2AgaXMgc3RpbGwgdmFsaWQgYW5kIHRoZW4gY2FsbHMgc29tZSBhY3Rpb24gcHJlcGFyZSBmdW5jdGlvbi4gSWYgdGhlIG1hcHBpbmcgaXMgYSBwcml2YXRlIGAvZGV2L3plcm9gIG1hcHBpbmcgKHdoaWNoIGlzIGFuIGFuY2llbnQgd2F5IG9mIG1ha2luZyBhbm9ueW1vdXMgbWFwcGluZ3MpLCBpdCdzIGNvbnZlcnRlZCB0byBhIHRydWx5IGFub255bW91cyBtYXBwaW5nIHVzaW5nIGBtYXBfc2V0X2Fub25gLiBTbWFydCFcblxuVGltZSB0byBsb29rIGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHdlaXJkIGNvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBtbS9jaGFyLW1lbS5jYCBvciB0aGUgYC9kZXYvemVyb2AgZnVuY3Rpb25hbGl0eS4gTG9va2luZyBpbiBgbW0vTWFrZWZpbGVgLCBgY2hhci1tZW0ub2AgaXMgYWx3YXlzIGJ1aWx0IChgb2JqLXlgKS4gQW5kLCBnaXZlbiB0aGF0IEknbSBvbiBhbWQ2NCwgYENPTkZJR19NTVVgIGlzIGEgZ2l2ZW4sIHNvIHRoYXQncyBub3QgdGhlIGlzc3VlLiBJJ2xsIHRha2UgYSBxdWljayBzY2FuIG9mIGBtbS9jaGFyLW1lbS5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTY0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI3OjA2LjU3NTQ3OTA2OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2Mjc2MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jaGFyLW1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NoYXItbWVtLmM9NTU9c3RhdGljIGlubGluZSBpbnQgdmFsaWRfbW1hcF9waHlzX2FkZHJfcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHNpemVfdCBzaXplKVxcbi0tXFxubW0vY2hhci1tZW0uYy02MC1cXG5tbS9jaGFyLW1lbS5jOjYxOiNpZmRlZiBDT05GSUdfU1RSSUNUX0RFVk1FTVxcbm1tL2NoYXItbWVtLmMtNjItc3RhdGljIGlubGluZSBpbnQgcGFnZV9pc19hbGxvd2VkKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxubW0vY2hhci1tZW0uYz0yNzE9c3RhdGljIHBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL2NoYXItbWVtLmMtMjgzLVxcbm1tL2NoYXItbWVtLmM6Mjg0OiNpZm5kZWYgQ09ORklHX01NVVxcbm1tL2NoYXItbWVtLmMtMjg1LXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhX21lbShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbm1tL2NoYXItbWVtLmM9MzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF9tZW1fb3BzID0ge1xcbm1tL2NoYXItbWVtLmM6MzIyOiNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1RcXG5tbS9jaGFyLW1lbS5jLTMyMy1cXHQuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5c1xcbi0tXFxubW0vY2hhci1tZW0uYz0zMjc9c3RhdGljIGludCBtbWFwX21lbV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxuLS1cXG5tbS9jaGFyLW1lbS5jLTM2Ni1cXG5tbS9jaGFyLW1lbS5jOjM2NzojaWZkZWYgQ09ORklHX0RFVlBPUlRcXG5tbS9jaGFyLW1lbS5jLTM2OC1zdGF0aWMgc3NpemVfdCByZWFkX3BvcnQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5tbS9jaGFyLW1lbS5jPTUwMz1zdGF0aWMgaW50IG1tYXBfemVyb19wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxubW0vY2hhci1tZW0uYy01MDQte1xcbm1tL2NoYXItbWVtLmM6NTA1OiNpZm5kZWYgQ09ORklHX01NVVxcbm1tL2NoYXItbWVtLmMtNTA2LVxcdHJldHVybiAtRU5PU1lTO1xcbi0tXFxubW0vY2hhci1tZW0uYy01MTQtXFxubW0vY2hhci1tZW0uYzo1MTU6I2lmbmRlZiBDT05GSUdfTU1VXFxubW0vY2hhci1tZW0uYy01MTYtc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VubWFwcGVkX2FyZWFfemVybyhzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbm1tL2NoYXItbWVtLmM9NTIzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBlZF9hcmVhX3plcm8oc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9jaGFyLW1lbS5jLTU0Mi1cXHQgKi9cXG5tbS9jaGFyLW1lbS5jOjU0MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vY2hhci1tZW0uYy01NDQtXFx0cmV0dXJuIHRocF9nZXRfdW5tYXBwZWRfYXJlYShmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyk7XFxuLS1cXG5tbS9jaGFyLW1lbS5jLTU0OC19XFxubW0vY2hhci1tZW0uYzo1NDk6I2VuZGlmIC8qIENPTkZJR19NTVUgKi9cXG5tbS9jaGFyLW1lbS5jLTU1MC1cXG4tLVxcbm1tL2NoYXItbWVtLmM9NjMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fbWF5YmVfdW51c2VkIG1lbV9mb3BzID0ge1xcbi0tXFxubW0vY2hhci1tZW0uYy02MzctXFx0Lm9wZW5cXHRcXHQ9IG9wZW5fbWVtLFxcbm1tL2NoYXItbWVtLmM6NjM4OiNpZm5kZWYgQ09ORklHX01NVVxcbm1tL2NoYXItbWVtLmMtNjM5LVxcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF91bm1hcHBlZF9hcmVhX21lbSxcXG4tLVxcbm1tL2NoYXItbWVtLmM9NjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG51bGxfZm9wcyA9IHtcXG4tLVxcbm1tL2NoYXItbWVtLmMtNjU0LVxcbm1tL2NoYXItbWVtLmM6NjU1OiNpZmRlZiBDT05GSUdfREVWUE9SVFxcbm1tL2NoYXItbWVtLmMtNjU2LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZm9wcyA9IHtcXG4tLVxcbm1tL2NoYXItbWVtLmM9NjY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcXG4tLVxcbm1tL2NoYXItbWVtLmMtNjczLVxcdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF91bm1hcHBlZF9hcmVhX3plcm8sXFxubW0vY2hhci1tZW0uYzo2NzQ6I2lmbmRlZiBDT05GSUdfTU1VXFxubW0vY2hhci1tZW0uYy02NzUtXFx0Lm1tYXBfY2FwYWJpbGl0aWVzID0gemVyb19tbWFwX2NhcGFiaWxpdGllcyxcXG4tLVxcbm1tL2NoYXItbWVtLmM9Njg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHtcXG4tLVxcbm1tL2NoYXItbWVtLmMtNjkxLX0gZGV2bGlzdFtdID0ge1xcbm1tL2NoYXItbWVtLmM6NjkyOiNpZmRlZiBDT05GSUdfREVWTUVNXFxubW0vY2hhci1tZW0uYy02OTMtXFx0W0RFVk1FTV9NSU5PUl0gPSB7IFxcXCJtZW1cXFwiLCBcXHUwMDI2bWVtX2ZvcHMsIDAsIDAgfSxcXG4tLVxcbm1tL2NoYXItbWVtLmMtNjk1LVxcdFszXSA9IHsgXFxcIm51bGxcXFwiLCBcXHUwMDI2bnVsbF9mb3BzLCBGTU9ERV9OT1dBSVQsIDA2NjYgfSxcXG5tbS9jaGFyLW1lbS5jOjY5NjojaWZkZWYgQ09ORklHX0RFVlBPUlRcXG5tbS9jaGFyLW1lbS5jLTY5Ny1cXHRbNF0gPSB7IFxcXCJwb3J0XFxcIiwgXFx1MDAyNnBvcnRfZm9wcywgMCwgMCB9LFxcbi0tXFxubW0vY2hhci1tZW0uYy03MDItXFx0WzldID0geyBcXFwidXJhbmRvbVxcXCIsIFxcdTAwMjZ1cmFuZG9tX2ZvcHMsIEZNT0RFX05PV0FJVCwgMDY2NiB9LFxcbm1tL2NoYXItbWVtLmM6NzAzOiNpZmRlZiBDT05GSUdfUFJJTlRLXFxubW0vY2hhci1tZW0uYy03MDQtXFx0WzExXSA9IHsgXFxcImttc2dcXFwiLCBcXHUwMDI2a21zZ19mb3BzLCAwLCAwNjQ0IH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI3OjA2LjYyMTEzNjA4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjYyMjIwMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIC9kZXYvemVybyBQcml2YXRlIE1hcHBpbmcgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciB0aGUgL2Rldi96ZXJvIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIHByaXZhdGUgbWFwcGluZyBpbXBsZW1lbnRhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBgL2Rldi96ZXJvYCBpcyBtaW5vciA1LCB3aGljaCBkb2Vzbid0IHNlZW0gdG8gbmVlZCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIOKAkyBzdGFuZGFyZCBgQ09ORklHX01NVWAgaXMgYWxsIHRoYXQncyByZXF1aXJlZC5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aG9zZSBGb2N1c1N5bWJvbHMgcnVsZXMuIEkgbmVlZCB0byBhdm9pZCB0aG9zZSB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHM7IHRoaW5ncyB0aGF0IGdldCBjYWxsZWQgYnkgKmV2ZXJ5dGhpbmcqIGFyZSBhIGZ1enppbmcgZGlzdHJhY3Rpb24uIEluc3RlYWQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgKnNwZWNpZmljKiBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBhIGJpdCB0cmlja2llciwgYnV0IHRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZWlyIG5vbi1zdGF0aWMgY2FsbGVycy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgSSd2ZSBpZGVudGlmaWVkIGEgZmV3IGtleSBmdW5jdGlvbnMgdGhhdCBzZWVtIHByb21pc2luZzogYGZpbGVfaXNfZGV2X3plcm9gIChpbiBgbW0vY2hhci1tZW0uY2ApLCBgbW1hcF96ZXJvX3ByZXBhcmVgIChhbHNvIGluIGBtbS9jaGFyLW1lbS5jYCksIGBjYWxsX21tYXBfcHJlcGFyZWAgKGluIGBtbS92bWEuY2ApLCBgX19tbWFwX25ld192bWFgIChpbiBgbW0vdm1hLmNgKSwgYW5kIGBfX21tYXBfcmVnaW9uYCAoaW4gYG1tL3ZtYS5jYCkuXG5cbkxldCdzIGRyaWxsIGRvd246XG5cbiogICBgbW1hcF96ZXJvX3ByZXBhcmVgOiBZZXMsIHRoaXMgaXMgKmV4YWN0bHkqIHRoZSBtbWFwIHByZXBhcmF0aW9uIGZvciAvZGV2L3plcm8sIHNvIGl0IGlzIGEgZ29vZCBmb2N1cyBzeW1ib2wuXG4qICAgYGZpbGVfaXNfZGV2X3plcm9gOiBUaGlzIGZ1bmN0aW9uIGlzICpleHBsaWNpdGx5KiBjaGVja2luZyBpZiB0aGUgZmlsZSBpcyAvZGV2L3plcm8sIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIHBhdGggdGhhdCB3ZSBhcmUgcmV2aWV3aW5nLlxuKiAgIGBjYWxsX21tYXBfcHJlcGFyZWA6IFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHdoZXJlIHRoZSBgZmlsZV9pc19kZXZfemVybygpYCBjaGVjayBhbmQgdGhlIGBtYXBfc2V0X2Fub24oKWAgaXMgZXhlY3V0ZWQuIEl0IGlzIGFsc28gd2hlcmUgdGhlIGAhZGVzYy1cdTAwM2V2bV9vcHNgIGVycm9yIGNoZWNrIGlzIGFkZGVkLlxuXG5JIGluaXRpYWxseSBjb25zaWRlcmVkIGBfX21tYXBfbmV3X3ZtYWAgYW5kIGBfX21tYXBfcmVnaW9uYC4gQnV0IGBfX21tYXBfbmV3X3ZtYWAgaXMgYWx0ZXJlZCB0byB1c2UgYG1hcF9pc19hbm9uKG1hcClgLiBBbmQgd2hpbGUgSSdtIGEgYml0IGhlc2l0YW50IGFib3V0IGBfX21tYXBfcmVnaW9uYCwgdGhlIHByaW9yIGZ1bmN0aW9ucyBhcmUgcXVpdGUgc3BlY2lmaWMsIHNvIGxldCdzIHN0aWNrIHdpdGggdGhlbS5cblxuVGhlcmVmb3JlLCBmb3IgdGhlIGZ1enppbmcgZm9jdXMsIG15IHNob3J0bGlzdCBpcyBgW1wiZmlsZV9pc19kZXZfemVyb1wiLCBcIm1tYXBfemVyb19wcmVwYXJlXCIsIFwiY2FsbF9tbWFwX3ByZXBhcmVcIl1gLiBUaGVzZSBhcmUgYWxsIHZlcnkgc3BlY2lmaWMgdG8gdGhlIC9kZXYvemVybyBtbWFwIGNoYW5nZS5cblxuTm93LCBsZXQncyBxdWlja2x5IHRpY2sgb2ZmIHRoZSByZW1haW5pbmcgcmVxdWlyZW1lbnRzOlxuXG4xLiAgYFdvcnRoRnV6emluZ2A6IEFic29sdXRlbHkuIFRoZSBwYXRjaCAqZGlyZWN0bHkqIG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSBpbiBgbW0vdm1hLmNgIGFuZCBgbW0vY2hhci1tZW0uY2AuXG4yLiAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCAqbW92ZXMqIGhhbmRsaW5nIG9mIGAvZGV2L3plcm9gIGBNQVBfUFJJVkFURWAgbWFwcGluZ3MgaW50byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gSXQgY29udmVydHMgdGhlc2UgcHJpdmF0ZSBtYXBwaW5ncyBpbnRvIHRydWUgYW5vbnltb3VzIG1hcHBpbmdzIGR1cmluZyBgbW1hcF9wcmVwYXJlYCwgc28gbG9naWMgaXMgYmVpbmcgc2hpZnRlZCBiZXR3ZWVuIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgbW0gbGF5ZXIuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyBpbiBgbW0vdm1hLmNgLCBgbW0vY2hhci1tZW0uY2AsIGFuZCBpbnRlcm5hbCBWTUEgbWFuYWdlbWVudC5cbjMuICBgRm9jdXNTeW1ib2xzYDogSSd2ZSBhbHJlYWR5IG5haWxlZCB0aGVzZSBkb3duIGFzIGBbXCJmaWxlX2lzX2Rldl96ZXJvXCIsIFwibW1hcF96ZXJvX3ByZXBhcmVcIiwgXCJjYWxsX21tYXBfcHJlcGFyZVwiXWAuXG40LiAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIG9yIGBbXCJNTVVcIl1gIOKAkyBgQ09ORklHX01NVWAgaXMgc3RhbmRhcmQsIHNvIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQuXG5cbkkndmUgZ2l2ZW4gdGhpcyBhIGZpbmFsIG9uY2Utb3ZlciwgYW5kIEknbSBjb25maWRlbnQgdGhhdCB0aGVzZSBhcmUgYWNjdXJhdGUsIHNvIEknbSByZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyMTUsIk91dHB1dFRva2VucyI6MTM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI3OjE0LjI4MzM1ODYzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNDIyMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNTVVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjYWxsX21tYXBfcHJlcGFyZVwiLFxuICAgIFwiZmlsZV9pc19kZXZfemVyb1wiLFxuICAgIFwibW1hcF96ZXJvX3ByZXBhcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGhhbmRsaW5nIG9mIE1BUF9QUklWQVRFIC9kZXYvemVybyBtYXBwaW5ncyBzbyB0aGV5IGJlY29tZSB0cnVseSBhbm9ueW1vdXMgbWFwcGluZ3Mgd2l0aGluIGNvcmUgbW0gcmF0aGVyIHRoYW4gYmVpbmcgdHJlYXRlZCBhcyBzZW1pLWFub255bW91cyBmaWxlIG1hcHBpbmdzLiBJdCBtb2RpZmllcyByZWFjaGFibGUgbG9naWMgaW4gbW0vdm1hLmMsIG1tL2NoYXItbWVtLmMsIGFuZCBoZWFkZXIgaGVscGVycywgYWZmZWN0aW5nIFZNQSBtZXJnaW5nLCBwYWdlIG9mZnNldCBjYWxjdWxhdGlvbnMsIGFuZCBtbWFwIHByZXBhcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNhbGxfbW1hcF9wcmVwYXJlXCIsXG4gICAgXCJmaWxlX2lzX2Rldl96ZXJvXCIsXG4gICAgXCJtbWFwX3plcm9fcHJlcGFyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgaGFuZGxpbmcgb2YgTUFQX1BSSVZBVEUgL2Rldi96ZXJvIG1hcHBpbmdzIHNvIHRoZXkgYmVjb21lIHRydWx5IGFub255bW91cyBtYXBwaW5ncyB3aXRoaW4gY29yZSBtbSByYXRoZXIgdGhhbiBiZWluZyB0cmVhdGVkIGFzIHNlbWktYW5vbnltb3VzIGZpbGUgbWFwcGluZ3MuIEl0IG1vZGlmaWVzIHJlYWNoYWJsZSBsb2dpYyBpbiBtbS92bWEuYywgbW0vY2hhci1tZW0uYywgYW5kIGhlYWRlciBoZWxwZXJzLCBhZmZlY3RpbmcgVk1BIG1lcmdpbmcsIHBhZ2Ugb2Zmc2V0IGNhbGN1bGF0aW9ucywgYW5kIG1tYXAgcHJlcGFyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjI3OjE0LjM2Mzc5OTA4NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MTIwMjA5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNzoxNC4zNjQyODkyODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzUxMTUyNTUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgaGFuZGxpbmcgb2YgTUFQX1BSSVZBVEUgL2Rldi96ZXJvIG1hcHBpbmdzIHRvIG1ha2UgdGhlbSB0cnVseSBhbm9ueW1vdXMgVk1BcyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtb3ZpbmcgZHJpdmVycy9jaGFyL21lbS5jIHRvIG1tL2NoYXItbWVtLmMsIHVwZGF0aW5nIG1tYXBfcHJlcGFyZSBoYW5kbGluZywgYW5kIHJlbW92aW5nIHNwZWNpYWwtY2FzZSB3b3JrYXJvdW5kcyBmb3Igc2VtaS1hbm9ueW1vdXMgVk1BcykuXFxuXFxuS01TQU4gdnMuIEtBU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBhbHRlciBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHJlYWRzLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFsbCBzdHJ1Y3R1cmVzIChlLmcuIHN0cnVjdCB2bV9hcmVhX2Rlc2MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbi0gQW55IGJ1Z3Mgc3RlbW1pbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIChlLmcuIFZNQSBtZXJnaW5nIGRpc2NyZXBhbmNpZXMsIHBhZ2Ugb2Zmc2V0IGVycm9ycywgb3IgcmVmZXJlbmNlL2xpZmV0aW1lIG1hbmFnZW1lbnQgaXNzdWVzKSBhcmUgbWVtb3J5IG1hbmFnZW1lbnQvbG9naWMgaXNzdWVzIHRoYXQgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBleGlzdGluZyBrZXJuZWwgZGVidWcgY2hlY2tzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODYzOTY1ODZlOThkNTgwODg4YzgxYWVmN2YyZDZiMDM2NjlhNDU1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTM6MjY6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAzYTE5ZGE3NGQwMGM5Li5hMGE1ZGI0NDRjNjYzIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTcyNzYsNyArMTcyNzYsNyBAQCBGOlx0RG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tbWVtb3J5LXRpZXJzXG4gRjpcdERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLW51bWFcbiBGOlx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9cbiBGOlx0RG9jdW1lbnRhdGlvbi9tbS9cbi1GOlx0ZHJpdmVycy9jaGFyL21lbS5jXG4rRjpcdG1tL2NoYXItbWVtLmNcbiBGOlx0aW5jbHVkZS9saW51eC9jbWEuaFxuIEY6XHRpbmNsdWRlL2xpbnV4L2RtYXBvb2wuaFxuIEY6XHRpbmNsdWRlL2xpbnV4L2lvcmVtYXAuaFxuQEAgLTE3NDgxLDcgKzE3NDgxLDcgQEAgTDpcdGxpbnV4LW1tQGt2YWNrLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gVzpcdGh0dHA6Ly93d3cubGludXgtbW0ub3JnXG4gVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWtwbS9tbVxuLUY6XHRkcml2ZXJzL2NoYXIvbWVtLmNcbitGOlx0bW0vY2hhci1tZW0uY1xuIEY6XHRpbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWFwLmhcbiBGOlx0ZnMvcHJvYy90YXNrX21tdS5jXG4gRjpcdGZzL3Byb2MvdGFza19ub21tdS5jXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlXG5pbmRleCBhNDZkN2JmN2M0YzgyLi5iYjNiZjY2OTM3YjM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGVcbkBAIC0zLDcgKzMsNyBAQFxuICMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLlxuICNcbiBcbi1vYmoteVx0XHRcdFx0Kz0gbWVtLm8gcmFuZG9tLm9cbitvYmoteVx0XHRcdFx0Kz0gcmFuZG9tLm9cbiBvYmotJChDT05GSUdfVFRZX1BSSU5USylcdCs9IHR0eXByaW50ay5vXG4gb2JqLXlcdFx0XHRcdCs9IG1pc2Mub1xuIG9iai0kKENPTkZJR19URVNUX01JU0NfTUlOT1IpXHQrPSBtaXNjX21pbm9yX2t1bml0Lm9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IGRkMDljNDM4ZmEyM2UuLjg2NGQ1YWMzNzA0ZGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTE1NTEsMTEgKzE1NTEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hX3NldF9hbm9ueW1vdXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHR2bWEtXHUwMDNldm1fb3BzID0gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHZtYV9kZXNjX3NldF9hbm9ueW1vdXMoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbi17XG4tXHRkZXNjLVx1MDAzZXZtX29wcyA9IE5VTEw7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYW5vbnltb3VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHJldHVybiAhdm1hLVx1MDAzZXZtX29wcztcbkBAIC00NDA4LDkgKzQ0MDMsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX3BhZ2VzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuICAqIElmIEB2bWEgaXMgYSBNQVBfUFJJVkFURSBmaWxlLWJhY2tlZCBtYXBwaW5nLCB0aGVuIHRoaXMgcmV0dXJucyB0aGVcbiAgKiBwYWdlIG9mZnNldCB3aXRoaW4gdGhlIGZpbGUuXG4gICpcbi0gKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSwgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIHNhdGlzZmllc1xuLSAqIHZtYV9pc19hbm9ueW1vdXMoKSBidXQgaGFzIGZpbGUtYmFja2VkIHBhZ2Ugb2Zmc2V0LCBhbmQgTUFQX1BSSVZBVEUtcGZubWFwXG4tICogcmVnaW9ucyBoYXZlIHRoZWlyIHBhZ2Ugb2Zmc2V0IHNldCB0byB0aGUgZmlyc3QgUEZOIGluIHRoZSByYW5nZS5cbisgKiBFZGdlIGNhc2VzOiBub21tdSBkb2VzIG5vdCBhYmlkZSBieSB0aGVzZSBhbmQgQ29XIE1BUF9QUklWQVRFLXBmbm1hcCByZWdpb25zXG4rICogaGF2ZSB0aGVpciBwYWdlIG9mZnNldCBzZXQgdG8gdGhlIGZpcnN0IFBGTiBpbiB0aGUgcmFuZ2UuXG4gICpcbiAgKiBSZXR1cm5zOiBUaGUgcGFnZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIEB2bWEuXG4gICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuaW5kZXggMGFkZmE2NjA1NjUzZC4uOTM5ZjNhNWU5NzNmNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTExMjgsOCArMTEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IF9fbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKCF2bWFfaXNfY293X21hcHBpbmcodm1hKSk7XG4tXHQvKiBBY2NvdW50IGZvciBNQVBfUFJJVkFURS0vZGV2L3plcm8gd2hpY2ggaXMgb25seSBzZW1pLWFub255bW91cy4gKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgXHUwMDI2XHUwMDI2ICF2bWEtXHUwMDNldm1fZmlsZSlcbitcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4gXHRcdFZNX1dBUk5fT05fT05DRShwZ29mZiAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTtcbiBcbiBcdHJldHVybiBwZ29mZjtcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXG5pbmRleCBlNzI0NWNiODhjNjY1Li4yYTNlYzUzZDYyZWVmIDEwMDY0NFxuLS0tIGEvbW0vTWFrZWZpbGVcbisrKyBiL21tL01ha2VmaWxlXG5AQCAtNTUsNyArNTUsOCBAQCBvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbiBcdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxuIFx0XHRcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXG4gXHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG4tXHRcdFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vICQobW11LXkpXG4rXHRcdFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vIGNoYXItbWVtLm8gXFxcbitcdFx0XHQgICAkKG1tdS15KVxuIFxuICMgR2l2ZSAncGFnZV9hbGxvYycgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZVxuIHBhZ2UtYWxsb2MteSA6PSBwYWdlX2FsbG9jLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9tbS9jaGFyLW1lbS5jXG5zaW1pbGFyaXR5IGluZGV4IDk3JVxucmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL21lbS5jXG5yZW5hbWUgdG8gbW0vY2hhci1tZW0uY1xuaW5kZXggNjMyNTNkMWRlNWQ3MC4uYzBiNWZiMDE5MjIzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvY2hhci9tZW0uY1xuKysrIGIvbW0vY2hhci1tZW0uY1xuQEAgLTEsNiArMSw2IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKlxuLSAqICBsaW51eC9kcml2ZXJzL2NoYXIvbWVtLmNcbisgKiAgbW0vY2hhci1tZW0uY1xuICAqXG4gICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHNcbiAgKlxuQEAgLTMxLDYgKzMxLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbitcbiAjZGVmaW5lIERFVk1FTV9NSU5PUlx0MVxuICNkZWZpbmUgREVWUE9SVF9NSU5PUlx0NFxuIFxuQEAgLTUwNiwxMSArNTA4LDcgQEAgc3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuIFx0aWYgKHZtYV9kZXNjX3Rlc3QoZGVzYywgVk1BX1NIQVJFRF9CSVQpKVxuIFx0XHRyZXR1cm4gc2htZW1femVyb19zZXR1cF9kZXNjKGRlc2MpO1xuIFxuLVx0Lypcbi1cdCAqIFRoaXMgaXMgYSBoaWdobHkgdW5pcXVlIHNpdHVhdGlvbiB3aGVyZSB3ZSBtYXJrIGEgTUFQX1BSSVZBVEUgbWFwcGluZ1xuLVx0ICogb2YgL2Rldi96ZXJvIGFub255bW91cywgZGVzcGl0ZSBpdCBub3QgYmVpbmcuXG4tXHQgKi9cbi1cdHZtYV9kZXNjX3NldF9hbm9ueW1vdXMoZGVzYyk7XG4rXHQvKiBNQVBfUFJJVkFURSBzZW1hbnRpY3MgYXJlIHRha2VuIGNhcmUgb2YgZm9yIHVzIGJ5IGNvcmUgbW0uICovXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNzA3LDYgKzcwNSwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1lbWRldiB7XG4gI2VuZGlmXG4gfTtcbiBcbisvKipcbisgKiBmaWxlX2lzX2Rldl96ZXJvKCkgLSBpcyB0aGUgc3BlY2lmaWVkIEBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgL2Rldi96ZXJvXG4rICogZHJpdmVyP1xuKyAqIEBmaWxlOiBGaWxlIHRvIHRlc3QuXG4rICogUmV0dXJuczogdHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlLlxuKyAqL1xuK2Jvb2wgZmlsZV9pc19kZXZfemVybyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRyZXR1cm4gZmlsZSBcdTAwMjZcdTAwMjYgZmlsZS1cdTAwM2VmX29wID09IFx1MDAyNnplcm9fZm9wcztcbit9XG4rXG4gc3RhdGljIGludCBtZW1vcnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiB7XG4gXHRpbnQgbWlub3I7XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjI3ODI5MjRhMjc3YzkgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMjM3LDE1ICsyMzcsMTggQEAgc3RhdGljIGlubGluZSBpbnQgbW1hcF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRpbnQgZXJyID0gdmZzX21tYXAoZmlsZSwgdm1hKTtcbiBcbi1cdGlmIChsaWtlbHkoIWVycikpXG4tXHRcdHJldHVybiAwO1xuLVxuIFx0Lypcbi1cdCAqIE9LLCB3ZSB0cmllZCB0byBjYWxsIHRoZSBmaWxlIGhvb2sgZm9yIG1tYXAoKSwgYnV0IGFuIGVycm9yXG4tXHQgKiBhcm9zZS4gVGhlIG1hcHBpbmcgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0IG5vdCBpbnZva2Vcbi1cdCAqIGFueSBmdXJ0aGVyIGhvb2tzIG9uIGl0LlxuK1x0ICogRWl0aGVyIHdlIHRyaWVkIHRvIGNhbGwgdGhlIGZpbGUgaG9vayBmb3IgbW1hcCgpIGFuZCBhbiBlcnJvciBhcm9zZVxuK1x0ICogb3IgYSBkcml2ZXIgc2V0IHZtYS1cdTAwM2V2bV9vcHMgPSBOVUxMIGludGVuZGluZyB0aGVyZSB0byBiZSBubyBWTUFcbitcdCAqIG9wZXJhdGlvbnMuXG4rXHQgKlxuK1x0ICogSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBWTUEgaXMgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGFuZCB3ZSBtdXN0bid0XG4rXHQgKiBpbnZva2UgYW55IGZ1cnRoZXIgaG9va3Mgb24gaXQsIGluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgaG9vayBhY3R1YWxseVxuK1x0ICogd2FudGVkIG5vIGZ1cnRoZXIgaG9va3MgdG8gYmUgaW52b2tlZCwgc28gZml4IGJvdGggYnkgc2V0dGluZyBkdW1teVxuK1x0ICogVk1BIG9wcy5cbiBcdCAqL1xuLVx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtYV9kdW1teV92bV9vcHM7XG4rXHRpZiAodW5saWtlbHkoZXJyIHx8ICF2bWEtXHUwMDNldm1fb3BzKSlcbitcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNnZtYV9kdW1teV92bV9vcHM7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC0xNjU0LDQgKzE2NTcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3NwaW5fdHJ5bG9jayh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuKy8qIGNoYXItbWVtLmMgKi9cbitib29sIGZpbGVfaXNfZGV2X3plcm8oY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xuK1xuICNlbmRpZlx0LyogX19NTV9JTlRFUk5BTF9IICovXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IDg5N2ZhMmI2MTM0NmYuLmM2MDc2M2VmNTYxY2YgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtMjc4Niw3ICsyNzg2LDcgQEAgdW5zaWduZWQgbG9uZyBzaG1lbV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRzYiA9IGZpbGVfaW5vZGUoZmlsZSktXHUwMDNlaV9zYjtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuLVx0XHRcdCAqIENhbGxlZCBkaXJlY3RseSBmcm9tIG1tL21tYXAuYywgb3IgZHJpdmVycy9jaGFyL21lbS5jXG4rXHRcdFx0ICogQ2FsbGVkIGRpcmVjdGx5IGZyb20gbW0vbW1hcC5jLCBvciBtbS9jaGFyLW1lbS5jXG4gXHRcdFx0ICogZm9yIFwiL2Rldi96ZXJvXCIsIHRvIGNyZWF0ZSBhIHNoYXJlZCBhbm9ueW1vdXMgb2JqZWN0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmIChJU19FUlIoc2htX21udCkpXG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmMgYi9tbS92bWEuY1xuaW5kZXggMzVlN2E2NDg1NWZhZC4uNmZkY2U0ODUyY2U2MSAxMDA2NDRcbi0tLSBhL21tL3ZtYS5jXG4rKysgYi9tbS92bWEuY1xuQEAgLTI2MjEsNiArMjYyMSwyMyBAQCBzdGF0aWMgaW50IF9fbW1hcF9uZXdfZmlsZV92bWEoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBtYXBfc2V0X2Fub24oc3RydWN0IG1tYXBfc3RhdGUgKm1hcClcbit7XG4rXHRtYXAtXHUwMDNlZmlsZSA9IE5VTEw7XG4rXHRtYXAtXHUwMDNldm1fb3BzID0gTlVMTDtcbitcdG1hcC1cdTAwM2VwZ29mZiA9IG1hcC1cdTAwM2VhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK31cbitcbitzdGF0aWMgYm9vbCBtYXBfaXNfcHJpdmF0ZShjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuK3tcbitcdHJldHVybiAhdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bWFwLVx1MDAzZXZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuK31cbitcbitzdGF0aWMgYm9vbCBtYXBfaXNfYW5vbihjb25zdCBzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxuK3tcbitcdHJldHVybiBtYXBfaXNfcHJpdmF0ZShtYXApIFx1MDAyNlx1MDAyNiAhbWFwLVx1MDAzZWZpbGU7XG4rfVxuK1xuIC8qXG4gICogX19tbWFwX25ld192bWEoKSAtIEFsbG9jYXRlIGEgbmV3IFZNQSBmb3IgdGhlIHJlZ2lvbiwgYXMgbWVyZ2luZyB3YXMgbm90XG4gICogcG9zc2libGUuXG5AQCAtMjYzNCw4ICsyNjUxLDcgQEAgc3RhdGljIGludCBfX21tYXBfbmV3X2ZpbGVfdm1hKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXG4gc3RhdGljIGludCBfX21tYXBfbmV3X3ZtYShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuIFx0c3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24pXG4ge1xuLVx0Y29uc3QgYm9vbCBpc19hbm9uID0gIW1hcC1cdTAwM2VmaWxlIFx1MDAyNlx1MDAyNlxuLVx0XHQhdm1hX2ZsYWdzX3Rlc3QoXHUwMDI2bWFwLVx1MDAzZXZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuK1x0Y29uc3QgYm9vbCBpc19hbm9uID0gbWFwX2lzX2Fub24obWFwKTtcbiBcdHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSA9IG1hcC1cdTAwM2V2bWk7XG4gXHRpbnQgZXJyb3IgPSAwO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5AQCAtMjc3Nyw2ICsyNzkzLDEwIEBAIHN0YXRpYyBpbnQgY2FsbF9tbWFwX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHQvKiBJdCdzIGludmFsaWQgZm9yIG1tYXBfcHJlcHJhcmUgaG9va3MgdG8gY2xlYXIgdm1fb3BzLiAqL1xuK1x0aWYgKCFkZXNjLVx1MDAzZXZtX29wcylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRlcnIgPSBjYWxsX2FjdGlvbl9wcmVwYXJlKG1hcCwgZGVzYyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTI3OTMsMTYgKzI4MTMsMjEgQEAgc3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxuIFx0bWFwLVx1MDAzZXZtX29wcyA9IGRlc2MtXHUwMDNldm1fb3BzO1xuIFx0bWFwLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGRlc2MtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFxuK1x0LypcbitcdCAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZ1xuK1x0ICogYW5vbnltb3VzIG1hcHBpbmdzLiBSYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVzZSBtYXBwaW5ncyB0byBiZSBvZGRcbitcdCAqIG91dGxpZXJzLCBzaW1wbHkgbWFrZSB0aGVtIHRydWx5IGFub255bW91cy5cbitcdCAqL1xuK1x0aWYgKG1hcF9pc19wcml2YXRlKG1hcCkgXHUwMDI2XHUwMDI2IGZpbGVfaXNfZGV2X3plcm8obWFwLVx1MDAzZWZpbGUpKVxuK1x0XHRtYXBfc2V0X2Fub24obWFwKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdHN0cnVjdCBtbWFwX3N0YXRlICptYXApXG4ge1xuLVx0aWYgKG1hcC1cdTAwM2V2bV9vcHMpXG4tXHRcdHZtYS1cdTAwM2V2bV9vcHMgPSBtYXAtXHUwMDNldm1fb3BzO1xuLVx0ZWxzZVx0LyogT25seSAvZGV2L3plcm8gc2hvdWxkIGRvIHRoaXMuICovXG4tXHRcdHZtYV9zZXRfYW5vbnltb3VzKHZtYSk7XG4rXHR2bWEtXHUwMDNldm1fb3BzID0gbWFwLVx1MDAzZXZtX29wcztcbiBcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBtYXAtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuIH1cbiBcbkBAIC0yODgyLDcgKzI5MDcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGFsbG9jYXRlZF9uZXcgPSB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlKVxuK1x0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFx1MDAyNlx1MDAyNiAhbWFwX2lzX2Fub24oXHUwMDI2bWFwKSlcbiBcdFx0c2V0X3ZtYV91c2VyX2RlZmluZWRfZmllbGRzKHZtYSwgXHUwMDI2bWFwKTtcbiBcbiBcdF9fbW1hcF9jb21wbGV0ZShcdTAwMjZtYXAsIHZtYSk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1hLmggYi9tbS92bWEuaFxuaW5kZXggMDI0ZmFiZTYzNTYwYS4uZTk3YmQyZGZhNzg2ZCAxMDA2NDRcbi0tLSBhL21tL3ZtYS5oXG4rKysgYi9tbS92bWEuaFxuQEAgLTI2Nyw5ICsyNjcsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X3NhbmVfcGdvZmYoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgcGdvZmYpXG4gXHQgKi9cbiBcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKVxuIFx0XHRyZXR1cm47XG4tXHQvKiBNQVBfUFJJVkFURS0vZGV2L3plcm8gaXMgYW5vbiwgbm9uLU5VTEwgdm1fZmlsZSwgYnV0IGhhcyBmaWxlIHBnb2ZmLiAqL1xuLVx0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuLVx0XHRyZXR1cm47XG4gXHQvKiBJZiBmYXVsdGVkIGluLCBjb3VsZCBoYXZlIGJlZW4gcmVtYXBwZWQuICovXG4gXHRpZiAodm1hLVx1MDAzZWFub25fdm1hKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVyZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lcmdlLmNcbmluZGV4IDUyYjg3MjdiNjYyOGUuLjdkZDI5MzM0MTdjMWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZXJnZS5jXG5AQCAtMTM2Miw2ICsxMzYyLDEwMSBAQCBURVNUX0YobWVyZ2UsIGFub25fYW5kX3BhZ2Vfb2Zmc2V0X21pc21hdGNoX21lbWZkKVxuIFx0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICsgNSAqIHBhZ2Vfc2l6ZSk7XG4gfVxuIFxuK1RFU1RfRihtZXJnZSwgbWVyZ2VfbWFwX3ByaXZhdGVfZGV2X3plcm9fdW5mYXVsdGVkKVxuK3tcbitcdHN0cnVjdCBwcm9jbWFwX2ZkICpwcm9jbWFwID0gXHUwMDI2c2VsZi1cdTAwM2Vwcm9jbWFwO1xuK1x0dW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9zaXplO1xuK1x0Y2hhciAqY2FydmVvdXQgPSBzZWxmLVx1MDAzZWNhcnZlb3V0O1xuK1x0Y2hhciAqcHRyLCAqcHRyMjtcbitcdGludCBmZF96ZXJvO1xuK1xuK1x0aWYgKGFjY2VzcyhcIi9kZXYvemVyb1wiLCBGX09LKSlcbitcdFx0U0tJUChyZXR1cm4sIFwiTm8gL2Rldi96ZXJvLlwiKTtcbitcdGZkX3plcm8gPSBvcGVuKFwiL2Rldi96ZXJvXCIsIE9fUkRXUik7XG4rXHRBU1NFUlRfTkUoZmRfemVybywgLTEpO1xuK1xuK1x0LypcbitcdCAqIE1hcCB0d28gTUFQX1BSSVZBVEUtL2Rldi96ZXJvIFZNQXMgbmV4dCB0byBvbmUgYW5vdGhlciB3aXRoIG9mZnNldCAwXG4rXHQgKiBlYWNoLlxuK1x0ICpcbitcdCAqIFdpdGggdGhlc2UgYmVpbmcgbWFkZSB0cnVseSBhbm9ueW1vdXMgdXBvbiBtYXBwaW5nLCB0aGV5IHdpbGxcbitcdCAqIG1lcmdlLiBJZiB0aGV5IHdlcmUgZmlsZS1iYWNrZWQgVk1BcyB0aGUgcGFnZSBvZmZzZXRzIHdvdWxkIHByZXZlbnRcbitcdCAqIHRoZSBtZXJnZTpcbitcdCAqXG4rXHQgKiB8LS0tLS18fC0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS18XG4rXHQgKiB8IHB0ciB8fCBwdHIyIHwgLVx1MDAzZSB8ICAgICBwdHIgICAgIHxcbitcdCAqIHwtLS0tLXx8LS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLXxcbitcdCAqL1xuK1x0cHRyID0gbW1hcChjYXJ2ZW91dCwgNSAqIHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApO1xuK1x0cHRyMiA9IG1tYXAoXHUwMDI2Y2FydmVvdXRbNSAqIHBhZ2Vfc2l6ZV0sIDUgKiBwYWdlX3NpemUsXG4rXHRcdCAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF96ZXJvLCAwKTtcbitcdGNsb3NlKGZkX3plcm8pO1xuK1x0QVNTRVJUX05FKHB0ciwgTUFQX0ZBSUxFRCk7XG4rXHRBU1NFUlRfTkUocHRyMiwgTUFQX0ZBSUxFRCk7XG4rXG4rXHQvKiBBc3NlcnQgdGhhdCB0aGV5IG1lcmdlZC4gKi9cbitcdEFTU0VSVF9UUlVFKGZpbmRfdm1hX3Byb2NtYXAocHJvY21hcCwgcHRyKSk7XG4rXHRBU1NFUlRfRVEocHJvY21hcC1cdTAwM2VxdWVyeS52bWFfc3RhcnQsICh1bnNpZ25lZCBsb25nKXB0cik7XG4rXHRBU1NFUlRfRVEocHJvY21hcC1cdTAwM2VxdWVyeS52bWFfZW5kLCAodW5zaWduZWQgbG9uZylwdHIgKyAxMCAqIHBhZ2Vfc2l6ZSk7XG4rfVxuK1xuK1RFU1RfRihtZXJnZSwgbWVyZ2VfbWFwX3ByaXZhdGVfZGV2X3plcm9fZmF1bHRlZF91bmZhdWx0ZWQpXG4re1xuK1x0c3RydWN0IHByb2NtYXBfZmQgKnByb2NtYXAgPSBcdTAwMjZzZWxmLVx1MDAzZXByb2NtYXA7XG4rXHR1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4rXHRjaGFyICpjYXJ2ZW91dCA9IHNlbGYtXHUwMDNlY2FydmVvdXQ7XG4rXHRjaGFyICpwdHIsICpwdHIyO1xuK1x0aW50IGZkX3plcm87XG4rXG4rXHRpZiAoYWNjZXNzKFwiL2Rldi96ZXJvXCIsIEZfT0spKVxuK1x0XHRTS0lQKHJldHVybiwgXCJObyAvZGV2L3plcm8uXCIpO1xuK1x0ZmRfemVybyA9IG9wZW4oXCIvZGV2L3plcm9cIiwgT19SRFdSKTtcbitcdEFTU0VSVF9ORShmZF96ZXJvLCAtMSk7XG4rXG4rXHQvKlxuK1x0ICogTWFwIGEgTUFQX1BSSVZBVEUgbWFwcGluZyBvZiAvZGV2L3plcm8gd2l0aCBwYWdlIG9mZnNldCAwLCB0aGVuIGZhdWx0XG4rXHQgKiBpdCBpbjpcbitcdCAqXG4rXHQgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbitcdCAqIHwgICAgICAgICAgIGZhdWx0ZWQgICAgICAgICAgICAgfFxuK1x0ICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4rXHQgKi9cbitcdHB0ciA9IG1tYXAoY2FydmVvdXQsIDE1ICogcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0XHQgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCk7XG4rXHRBU1NFUlRfTkUocHRyLCBNQVBfRkFJTEVEKTtcbitcdG1lbXNldChwdHIsICd4JywgMTUgKiBwYWdlX3NpemUpO1xuK1xuK1x0LypcbitcdCAqIFVubWFwIHRoZSBtaWRkbGU6XG4rXHQgKlxuK1x0ICogfC0tLS0tLS0tLXwgICAgICAgICAgIHwtLS0tLS0tLS18XG4rXHQgKiB8IGZhdWx0ZWQgfCAgICAgICAgICAgfCBmYXVsdGVkIHxcbitcdCAqIHwtLS0tLS0tLS18ICAgICAgICAgICB8LS0tLS0tLS0tfFxuK1x0ICovXG4rXHRBU1NFUlRfRVEobXVubWFwKFx1MDAyNnB0cls1ICogcGFnZV9zaXplXSwgNSAqIHBhZ2Vfc2l6ZSksIDApO1xuK1xuK1x0LypcbitcdCAqIE1hcCBpbiBhIG5ldyB1bmZhdWx0ZWQgbWFwcGluZyBpbiB0aGUgbWlkZGxlIHdpdGggcGFnZSBvZmZzZXQgMCAtXG4rXHQgKiB0aGlzIHNob3VsZCBtZXJnZSBhbmQgd291bGQgbm90IGlmIGl0IHdlcmUgdHJlYXRlZCBhcyBhIGZpbGUgcmF0aGVyXG4rXHQgKiB0aGFuIHB1cmUgYW5vbjpcbitcdCAqXG4rXHQgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLXxcbitcdCAqIHwgZmF1bHRlZCB8IHVuZmF1bHRlZCB8IGZhdWx0ZWQgfFxuK1x0ICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18XG4rXHQgKi9cbitcdHB0cjIgPSBtbWFwKFx1MDAyNmNhcnZlb3V0WzUgKiBwYWdlX3NpemVdLCA1ICogcGFnZV9zaXplLFxuK1x0XHQgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsXG4rXHRcdCAgICBmZF96ZXJvLCAwKTtcbitcdGNsb3NlKGZkX3plcm8pO1xuK1x0QVNTRVJUX05FKHB0cjIsIE1BUF9GQUlMRUQpO1xuK1xuK1x0LyogQXNzZXJ0IHRoYXQgdGhleSBtZXJnZWQuICovXG4rXHRBU1NFUlRfVFJVRShmaW5kX3ZtYV9wcm9jbWFwKHByb2NtYXAsIHB0cikpO1xuK1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX3N0YXJ0LCAodW5zaWduZWQgbG9uZylwdHIpO1xuK1x0QVNTRVJUX0VRKHByb2NtYXAtXHUwMDNlcXVlcnkudm1hX2VuZCwgKHVuc2lnbmVkIGxvbmcpcHRyICsgMTUgKiBwYWdlX3NpemUpO1xuK31cbitcbiBURVNUX0YobWVyZ2Vfd2l0aF9mb3JrLCBtcmVtYXBfZmF1bHRlZF90b191bmZhdWx0ZWRfcHJldilcbiB7XG4gXHRzdHJ1Y3QgcHJvY21hcF9mZCAqcHJvY21hcCA9IFx1MDAyNnNlbGYtXHUwMDNlcHJvY21hcDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcbmluZGV4IDQyMDljNjQyODNkNmYuLmJiY2E5ZjllMjc0MzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2Mtc2VsZi1tYXAtZmlsZXMtMDAxLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDEuY1xuQEAgLTUxLDcgKzUxLDcgQEAgaW50IG1haW4odm9pZClcbiBcdGludCBmZDtcbiBcdHVuc2lnbmVkIGxvbmcgYSwgYjtcbiBcbi1cdGZkID0gb3BlbihcIi9kZXYvemVyb1wiLCBPX1JET05MWSk7XG4rXHRmZCA9IG9wZW4oXCIvcHJvYy9zZWxmL2V4ZVwiLCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4gXHRcdHJldHVybiAxO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuY1xuaW5kZXggZTZhYTAwYTE4M2JjZC4uNTc4NmNkZmZiYmY2MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1zZWxmLW1hcC1maWxlcy0wMDIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLXNlbGYtbWFwLWZpbGVzLTAwMi5jXG5AQCAtNTcsNyArNTcsNyBAQCBpbnQgbWFpbih2b2lkKVxuIFx0aW50IGZkO1xuIFx0dW5zaWduZWQgbG9uZyBhLCBiO1xuIFxuLVx0ZmQgPSBvcGVuKFwiL2Rldi96ZXJvXCIsIE9fUkRPTkxZKTtcbitcdGZkID0gb3BlbihcIi9wcm9jL3NlbGYvZXhlXCIsIE9fUkRPTkxZKTtcbiBcdGlmIChmZCA9PSAtMSlcbiBcdFx0cmV0dXJuIDE7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmhcbmluZGV4IDRjNTg0ODdiNzY0ZTkuLjU2NjkwODFkOTFiOWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG4rKysgYi90b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oXG5AQCAtMTYzOCw5ICsxNjM4LDE1IEBAIHN0YXRpYyBpbmxpbmUgcGdvZmZfdCBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0Y29uc3QgcGdvZmZfdCBwZ29mZiA9IF9fbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKCF2bWFfaXNfY293X21hcHBpbmcodm1hKSk7XG4tXHQvKiBBY2NvdW50IGZvciBNQVBfUFJJVkFURS0vZGV2L3plcm8gd2hpY2ggaXMgb25seSBzZW1pLWFub255bW91cy4gKi9cbi1cdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkgXHUwMDI2XHUwMDI2ICF2bWEtXHUwMDNldm1fZmlsZSlcbitcdGlmICh2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4gXHRcdFZNX1dBUk5fT05fT05DRShwZ29mZiAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTtcbiBcbiBcdHJldHVybiBwZ29mZjtcbiB9XG4rXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemVyb19mb3BzO1xuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX2lzX2Rldl96ZXJvKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHJldHVybiBmaWxlIFx1MDAyNlx1MDAyNiBmaWxlLVx1MDAzZWZfb3AgPT0gXHUwMDI2emVyb19mb3BzO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3ZtYS9zaGFyZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXG5pbmRleCA0YTM5YzlkNTA0ODk2Li44YzQ4MjY0OTlmNDA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy92bWEvc2hhcmVkLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3NoYXJlZC5jXG5AQCAtMTIsNiArMTIsMTUgQEAgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtYV9kdW1teV92bV9vcHM7XG4gc3RydWN0IGFub25fdm1hIGR1bW15X2Fub25fdm1hO1xuIHN0cnVjdCB0YXNrX3N0cnVjdCBfX2N1cnJlbnQ7XG4gXG4rc3RhdGljIGludCBtbWFwX3plcm9fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHplcm9fZm9wcyA9IHtcbitcdC5tbWFwX3ByZXBhcmUgPSBtbWFwX3plcm9fcHJlcGFyZSxcbit9O1xuK1xuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYWxsb2Nfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0cGdvZmZfdCBwZ29mZiwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xuaW5kZXggYzg1YmMwMDBkMWNiNy4uZmE3M2ZhZmYyMjYyNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvdm1hL3Rlc3RzL21tYXAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy92bWEvdGVzdHMvbW1hcC5jXG5AQCAtNDUsNyArNDUsNDQgQEAgc3RhdGljIGJvb2wgdGVzdF9tbWFwX3JlZ2lvbl9iYXNpYyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBib29sIHRlc3RfcHVyZV9hbm9uX2Rldl96ZXJvKHZvaWQpXG4re1xuK1x0Y29uc3Qgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9SRUFEX0JJVCwgVk1BX1dSSVRFX0JJVCxcbitcdFx0XHRWTUFfTUFZUkVBRF9CSVQsIFZNQV9NQVlXUklURV9CSVQpO1xuK1x0c3RydWN0IGZpbGUgZmlsZSA9IHtcbitcdFx0LmZfb3AgPSBcdTAwMjZ6ZXJvX2ZvcHMsXG4rXHR9O1xuK1x0c3RydWN0IG1tX3N0cnVjdCBtbSA9IHt9O1xuK1x0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4rXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4rXHRWTUFfSVRFUkFUT1Iodm1pLCBcdTAwMjZtbSwgMCk7XG4rXG4rXHRjdXJyZW50LVx1MDAzZW1tID0gXHUwMDI2bW07XG4rXG4rXHQvKlxuK1x0ICogTWFwIGEgTUFQX1BSSVZBVEUtL2Rldi96ZXJvIG1hcHBpbmcgYXQgYWRkcmVzcyAweDMwMDAwMCB3aXRoIGEgcGFnZVxuK1x0ICogb2Zmc2V0IG9mIDB4MTAsIHdoaWNoIHdlIGV4cGVjdCB0byBiZSByZXNldCB0byB0aGUgYW5vbnltb3VzIHBhZ2VcbitcdCAqIG9mZnNldC5cbitcdCAqL1xuK1x0YWRkciA9IF9fbW1hcF9yZWdpb24oXHUwMDI2ZmlsZSwgMHgzMDAwMDAsIDB4MzAwMCwgdm1hX2ZsYWdzLCAweDEwLCBOVUxMKTtcbitcdEFTU0VSVF9FUShhZGRyLCAweDMwMDAwMCk7XG4rXG4rXHQvKiBBc3NlcnQgdGhhdCBpdCB0cnVseSBpcyBhbiBhbm9ueW1vdXMgbWFwcGluZy4gKi9cbitcdHZtYSA9IHZtYV9sb29rdXAoXHUwMDI2bW0sIGFkZHIpO1xuK1x0QVNTRVJUX05FKHZtYSwgTlVMTCk7XG4rXHRBU1NFUlRfVFJVRSh2bWFfaXNfYW5vbnltb3VzKHZtYSkpO1xuK1x0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9maWxlLCBOVUxMKTtcbitcdEFTU0VSVF9FUSh2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhLCBOVUxMKTtcbitcdC8qIEV4cGVjdCBhbm9ueW1vdXMgcGFnZSBvZmZzZXRzLiAqL1xuK1x0QVNTRVJUX0VRKHZtYS1cdTAwM2V2bV9wZ29mZiwgMHgzMDApO1xuK1x0QVNTRVJUX0VRKHZtYV9zdGFydF9hbm9uX3Bnb2ZmKHZtYSksIDB4MzAwKTtcbitcbitcdGNsZWFudXBfbW0oXHUwMDI2bW0sIFx1MDAyNnZtaSk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnVuX21tYXBfdGVzdHMoaW50ICpudW1fdGVzdHMsIGludCAqbnVtX2ZhaWwpXG4ge1xuIFx0VEVTVChtbWFwX3JlZ2lvbl9iYXNpYyk7XG4rXHRURVNUKHB1cmVfYW5vbl9kZXZfemVybyk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6Mjc6MTQuMzY0MjkwMjY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyODkzNTAzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiB3ZSBuZWVkIHRvIGZpcmUgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCBhIHJlZmFjdG9yLCBtb3ZpbmcgYGRyaXZlcnMvY2hhci9tZW0uY2AgdG8gYG1tL2NoYXItbWVtLmNgLiBUaGF0J3Mgbm90IHRoZSBjcml0aWNhbCBwYXJ0IGhlcmUuIFRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBgL2Rldi96ZXJvYCBNQVBfUFJJVkFURSBtYXBwaW5ncyBhcmUgaGFuZGxlZC5cblxuUHJldmlvdXNseSwgdGhlcmUgd2VyZSBzb21lIHBvdGVudGlhbGx5IFwic2VtaS1hbm9ueW1vdXNcIiBzdGF0ZXMuIE5vdywgaXQgc2VlbXMgbGlrZSB3ZSdyZSBtYWtpbmcgdGhlc2UgdHJ1bHkgYW5vbnltb3VzIGJ5IGNsZWFyaW5nIHRoZSBgZmlsZWAgcG9pbnRlciBhbmQgYHZtX29wc2Agd2l0aGluIGBtbWFwX3plcm9fcHJlcGFyZWAgYW5kIGBtYXBfc2V0X2Fub25gLiBUaGUgY29kZSBzZWVtcyB0byBiZSBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBzaGFyZWQgbWFwcGluZ3MgYW5kIHRoZW4gaGFuZGxpbmcgcHJpdmF0ZSBtYXBwaW5ncyBvZiBgL2Rldi96ZXJvYC4gVGhlcmUgYXJlIGEgbG90IG9mIGRldGFpbHMgcmVsYXRlZCB0byBjaGFuZ2VzIHdpdGhpbiBgX19tbWFwX3JlZ2lvbmAsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IHRob3NlIHNlY3Rpb25zIHdpdGhpbiBgbW0vdm1hLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZSBjaGFuZ2UuXG5cbkkgc2VlIGEgbmV3IGBmaWxlX2lzX2Rldl96ZXJvKClgIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwgZm9yIHNpbXBsaWZ5aW5nIHRoZSBsb2dpYy4gUGx1cywgdGhlcmUgYXJlIHNvbWUgY2xlYW51cHMgb2YgY29tbWVudHMgYW5kIGNoZWNrcyBpbiB2YXJpb3VzIGhlYWRlciBmaWxlcyByZWxhdGVkIHRvIGAvZGV2L3plcm9gIGFuZCBgTUFQX1BSSVZBVEVgIGNhc2VzLiBJJ20gYWxzbyBzZWVpbmcgYWRkZWQgdGVzdHMsIHdoaWNoIGlzIGdvb2QuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0LiBMZXQncyBzZWUgaWYgdGhlcmUgaXMgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBsZWFrcy4gTGV0J3MgcmV2aWV3IHRoZSBLTVNBTiByZXF1aXJlbWVudHMuIFRoZSBnZW5lcmFsIHJ1bGUgaXM6IElmIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGNhbiBjYXRjaCB0aGUgYnVnLCB3ZSBkb24ndCBuZWVkIEtNU0FOLiBXZSBvbmx5IG5lZWQgS01TQU4gaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgdGhpbmdzIGxpa2U6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHBvdGVudGlhbCBpbmZvIGxlYWspLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4zLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLlxuNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy5cblxuQW5kLCB3ZSBjYW4gc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayB0aGluZ3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2VzcyAoS0FTQU4pIG9yIGlmIGFsbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuXG5cbkxldCdzIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgX19tbWFwX3JlZ2lvbmAgYW5kIGBjYWxsX21tYXBfcHJlcGFyZWAgYW5kIG5lYXJieSBjb2RlIHdpdGhpbiBgbW0vdm1hLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaWYgd2UncmUgbm93IG1vcmUgYWdncmVzc2l2ZWx5IGNsZWFyaW5nIGBmaWxlYCBhbmQgYHZtX29wc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBjbGVhcmluZyB0aGVzZSBwb2ludGVycyBkb2Vzbid0IGNyZWF0ZSBhIHdpbmRvdyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZC4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvcHkgb3BlcmF0aW9ucywgb3IgYnJhbmNoaW5nIGxvZ2ljIHRoYXQgdG91Y2hlcyB0aGVzZSB2YXJpYWJsZXMgb3IgbWVtb3J5IHJlZ2lvbnMuIFRoZSBrZXkgaXMgdG8gc2VlIGlmIGJ5IGhhbmRsaW5nIHRoZXNlIG1hcHBpbmdzIHdpdGggdGhlIGNoYW5nZXMsIHdlJ3ZlIGluYWR2ZXJ0ZW50bHkgY3JlYXRlZCBhIHBhdGggdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSdtIGdvaW5nIHRvIHNlYXJjaCBmb3IgYF9fbW1hcF9yZWdpb25gIGluIGBtbS92bWEuY2AsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGl0LCBhbmQgZm9sbG93IHRoZSByZWxldmFudCBwYXRocywgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCB0b3VjaGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTYxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6Mjc6MjAuNjUzNjQyOTgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM5NzQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWxsX21tYXBfcHJlcGFyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hLmM9Mjc2Mz1zdGF0aWMgaW50IGNhbGxfYWN0aW9uX3ByZXBhcmUoc3RydWN0IG1tYXBfc3RhdGUgKm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTI3ODUtICovXFxubW0vdm1hLmM6Mjc4NjpzdGF0aWMgaW50IGNhbGxfbW1hcF9wcmVwYXJlKHN0cnVjdCBtbWFwX3N0YXRlICptYXAsXFxubW0vdm1hLmMtMjc4Ny1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxcbi0tXFxubW0vdm1hLmM9Mjg2Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX21tYXBfcmVnaW9uKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS92bWEuYy0yODg3LVxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgaGF2ZV9tbWFwX3ByZXBhcmUpXFxubW0vdm1hLmM6Mjg4ODpcXHRcXHRlcnJvciA9IGNhbGxfbW1hcF9wcmVwYXJlKFxcdTAwMjZtYXAsIFxcdTAwMjZkZXNjKTtcXG5tbS92bWEuYy0yODg5LVxcdGlmIChlcnJvcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6Mjc6MjAuNzAyMDQ3Njk5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NDAxNjA3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipEaWdnaW5nIGludG8gYG1tL3ZtYS5jYCAtIExpbmVzIDI3NjAtMjkxNSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbS92bWEuY2AgYWdhaW4uIEknbSBmb2N1c2luZyBvbiBsaW5lcyAyNzYwIHRvIDI5MTUgc3BlY2lmaWNhbGx5LiBJIHJlY2FsbCB0aGF0IGFyZWEgb2Z0ZW4gZGVhbHMgd2l0aCB2aXJ0dWFsIG1lbW9yeSBhcmVhIChWTUEpIG1hbmFnZW1lbnQsIGFuZCBnaXZlbiB0aGUgY29udGV4dCBJJ20gd29ya2luZyB3aXRoLCBJIHN1c3BlY3QgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBsb2dpYyBhcm91bmQgW0luc2VydCB0aGUgdXNlcidzIGZpZWxkIGV4cGVydGlzZSBoZXJlIC0gZS5nLiwgbWVtb3J5IG1hcHBpbmcgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIGFub255bW91cyBwYWdlIGFsbG9jYXRpb24sIGhhbmRsaW5nIG9mIGh1Z2UgcGFnZXMsIG9yIGZhdWx0IGhhbmRsaW5nXS4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBWTUFzLCBtYXliZSByZWxhdGVkIHRvIGluc2VydGlvbiwgcmVtb3ZhbCwgb3IgbW9kaWZpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgbG9ja3MgYmVpbmcgdXNlZCAobGlrZWx5IGEgc3BpbmxvY2sgb3IgbXV0ZXggcmVsYXRlZCB0byB0aGUgYG1tYXBfc2VtYCksIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgZGlmZmVyZW50IGNvZGUgcGF0aHMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyB0aGUgVk1BIGlzIGludGVncmF0ZWQgd2l0aCB0aGUgcGFnZSB0YWJsZXMsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgcGFnZXMgYXJlIHJlbGF0ZWQgdG8gdGhlIFZNQS4gSSdtIHJlYWR5IHRvIHNwb3QgdGhlIGtleSB2YXJpYWJsZXMgYW5kIGNvbmRpdGlvbmFsIGNoZWNrcyB0aGF0IGRlZmluZSB0aGUgY29udHJvbCBmbG93IGZvciB0aGlzIHNlY3Rpb24gb2YgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3OTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNzoyMy41NDIyMTA5MDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3ZtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3ODA6XFx0ICogdGhhdCBhcmUgcGVybWl0dGVkIHRvIGJlIHVwZGF0ZWQgYnkgdGhlIGNhbGxlci5cXG4yNzgxOlxcdCAqXFxuMjc4MjpcXHQgKiBBbGwgYnV0IHVzZXItZGVmaW5lZCBmaWVsZHMgd2lsbCBiZSBwcmUtcG9wdWxhdGVkIHdpdGggb3JpZ2luYWwgdmFsdWVzLlxcbjI3ODM6XFx0ICpcXG4yNzg0OlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4yNzg1OlxcdCAqL1xcbjI3ODY6XFx0c3RhdGljIGludCBjYWxsX21tYXBfcHJlcGFyZShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwLFxcbjI3ODc6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4yNzg4OlxcdHtcXG4yNzg5OlxcdFxcdGludCBlcnI7XFxuMjc5MDpcXHRcXG4yNzkxOlxcdFxcdC8qIEludm9rZSB0aGUgaG9vay4gKi9cXG4yNzkyOlxcdFxcdGVyciA9IHZmc19tbWFwX3ByZXBhcmUobWFwLVxcdTAwM2VmaWxlLCBkZXNjKTtcXG4yNzkzOlxcdFxcdGlmIChlcnIpXFxuMjc5NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI3OTU6XFx0XFxuMjc5NjpcXHRcXHQvKiBJdCdzIGludmFsaWQgZm9yIG1tYXBfcHJlcHJhcmUgaG9va3MgdG8gY2xlYXIgdm1fb3BzLiAqL1xcbjI3OTc6XFx0XFx0aWYgKCFkZXNjLVxcdTAwM2V2bV9vcHMpXFxuMjc5ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNzk5OlxcdFxcbjI4MDA6XFx0XFx0ZXJyID0gY2FsbF9hY3Rpb25fcHJlcGFyZShtYXAsIGRlc2MpO1xcbjI4MDE6XFx0XFx0aWYgKGVycilcXG4yODAyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjgwMzpcXHRcXG4yODA0OlxcdFxcdC8qIFVwZGF0ZSBmaWVsZHMgcGVybWl0dGVkIHRvIGJlIGNoYW5nZWQuICovXFxuMjgwNTpcXHRcXHRtYXAtXFx1MDAzZXBnb2ZmID0gZGVzYy1cXHUwMDNlcGdvZmY7XFxuMjgwNjpcXHRcXHRpZiAoZGVzYy1cXHUwMDNldm1fZmlsZSAhPSBtYXAtXFx1MDAzZWZpbGUpIHtcXG4yODA3OlxcdFxcdFxcdG1hcC1cXHUwMDNlZmlsZV9kb2VzbnRfbmVlZF9nZXQgPSB0cnVlO1xcbjI4MDg6XFx0XFx0XFx0bWFwLVxcdTAwM2VmaWxlID0gZGVzYy1cXHUwMDNldm1fZmlsZTtcXG4yODA5OlxcdFxcdH1cXG4yODEwOlxcdFxcdG1hcC1cXHUwMDNldm1hX2ZsYWdzID0gZGVzYy1cXHUwMDNldm1hX2ZsYWdzO1xcbjI4MTE6XFx0XFx0bWFwLVxcdTAwM2VwYWdlX3Byb3QgPSBkZXNjLVxcdTAwM2VwYWdlX3Byb3Q7XFxuMjgxMjpcXHRcXHQvKiBVc2VyLWRlZmluZWQgZmllbGRzLiAqL1xcbjI4MTM6XFx0XFx0bWFwLVxcdTAwM2V2bV9vcHMgPSBkZXNjLVxcdTAwM2V2bV9vcHM7XFxuMjgxNDpcXHRcXHRtYXAtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IGRlc2MtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4yODE1OlxcdFxcbjI4MTY6XFx0XFx0LypcXG4yODE3OlxcdFxcdCAqIE1BUF9QUklWQVRFLS9kZXYvemVybyBtYXBwaW5ncyBhcmUgYW4gYW5jaWVudCB3YXkgb2YgZ2V0dGluZ1xcbjI4MTg6XFx0XFx0ICogYW5vbnltb3VzIG1hcHBpbmdzLiBSYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVzZSBtYXBwaW5ncyB0byBiZSBvZGRcXG4yODE5OlxcdFxcdCAqIG91dGxpZXJzLCBzaW1wbHkgbWFrZSB0aGVtIHRydWx5IGFub255bW91cy5cXG4yODIwOlxcdFxcdCAqL1xcbjI4MjE6XFx0XFx0aWYgKG1hcF9pc19wcml2YXRlKG1hcCkgXFx1MDAyNlxcdTAwMjYgZmlsZV9pc19kZXZfemVybyhtYXAtXFx1MDAzZWZpbGUpKVxcbjI4MjI6XFx0XFx0XFx0bWFwX3NldF9hbm9uKG1hcCk7XFxuMjgyMzpcXHRcXG4yODI0OlxcdFxcdHJldHVybiAwO1xcbjI4MjU6XFx0fVxcbjI4MjY6XFx0XFxuMjgyNzpcXHRzdGF0aWMgdm9pZCBzZXRfdm1hX3VzZXJfZGVmaW5lZF9maWVsZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuMjgyODpcXHRcXHRcXHRzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxcbjI4Mjk6XFx0e1xcbjI4MzA6XFx0XFx0dm1hLVxcdTAwM2V2bV9vcHMgPSBtYXAtXFx1MDAzZXZtX29wcztcXG4yODMxOlxcdFxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbWFwLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuMjgzMjpcXHR9XFxuMjgzMzpcXHRcXG4yODM0OlxcdC8qXFxuMjgzNTpcXHQgKiBBcmUgd2UgZ3VhcmFudGVlZCBubyBkcml2ZXIgY2FuIGNoYW5nZSBzdGF0ZSBzdWNoIGFzIHRvIHByZWNsdWRlIEtTTSBtZXJnaW5nP1xcbjI4MzY6XFx0ICogSWYgc28sIGxldCdzIHNldCB0aGUgS1NNIG1lcmdlYWJsZSBmbGFnIGVhcmx5IHNvIHdlIGRvbid0IGJyZWFrIFZNQSBtZXJnaW5nLlxcbjI4Mzc6XFx0ICovXFxuMjgzODpcXHRzdGF0aWMgYm9vbCBjYW5fc2V0X2tzbV9mbGFnc19lYXJseShzdHJ1Y3QgbW1hcF9zdGF0ZSAqbWFwKVxcbjI4Mzk6XFx0e1xcbjI4NDA6XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUgPSBtYXAtXFx1MDAzZWZpbGU7XFxuMjg0MTpcXHRcXG4yODQyOlxcdFxcdC8qIEFub255bW91cyBtYXBwaW5ncyBoYXZlIG5vIGRyaXZlciB3aGljaCBjYW4gY2hhbmdlIHRoZW0uICovXFxuMjg0MzpcXHRcXHRpZiAoIWZpbGUpXFxuMjg0NDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yODQ1OlxcdFxcbjI4NDY6XFx0XFx0LypcXG4yODQ3OlxcdFxcdCAqIElmIC5tbWFwX3ByZXBhcmUoKSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGRyaXZlciB3aWxsIGhhdmUgYWxyZWFkeVxcbjI4NDg6XFx0XFx0ICogbWFuaXB1bGF0ZWQgc3RhdGUgcHJpb3IgdG8gdXBkYXRpbmcgS1NNIGZsYWdzLiBTbyBubyBuZWVkIHRvIHdvcnJ5XFxuMjg0OTpcXHRcXHQgKiBhYm91dCBtbWFwIGNhbGxiYWNrcyBtb2RpZnlpbmcgVk1BIGZsYWdzIGFmdGVyIHRoZSBLU00gZmxhZyBoYXMgYmVlblxcbjI4NTA6XFx0XFx0ICogdXBkYXRlZCBoZXJlLCB3aGljaCBjb3VsZCBvdGhlcndpc2UgYWZmZWN0IEtTTSBlbGlnaWJpbGl0eS5cXG4yODUxOlxcdFxcdCAqL1xcbjI4NTI6XFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZW1tYXBfcHJlcGFyZSlcXG4yODUzOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI4NTQ6XFx0XFxuMjg1NTpcXHRcXHQvKiBzaG1lbSBpcyBzYWZlLiAqL1xcbjI4NTY6XFx0XFx0aWYgKHNobWVtX2ZpbGUoZmlsZSkpXFxuMjg1NzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yODU4OlxcdFxcbjI4NTk6XFx0XFx0LyogQW55IG90aGVyIC5tbWFwIGNhbGxiYWNrIGlzIG5vdCBzYWZlLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNzoyMy41NDI0Mzc1NDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIzMTkyNjc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZvY3VzaW5nIEluOiBMaW5lcyAyODYwLTI5MjAqKlxuXG5BbHJpZ2h0LCBsZXQncyB6b29tIGluLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgc2VjdGlvbiBmcm9tIGxpbmUgMjg2MCB0byAyOTIwIGlzIGNydWNpYWwsIGFuZCBpdCdzIHRpbWUgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoYXQgcmFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBhcmd1bWVudCBwcmVzZW50ZWQgdGhlcmUuIFdoYXQncyB0aGUgY29yZSBwb2ludCBiZWluZyBjb252ZXllZCB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzZWN0aW9uPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBzZWdtZW50IGNvdWxkIGJlIGNyaXRpY2FsIHRvIGNvbmZpcm1pbmcgb3IgcmVmdXRpbmcgbXkgcHJlbGltaW5hcnkgaHlwb3RoZXNpcy4gVGhpcyBhcmVhIGlzIGxpa2VseSB3aGVyZSB0aGUgYXV0aG9yIHJlYWxseSBkaWdzIGludG8gdGhlIGNvcmUgaXNzdWUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBhdXRob3Igc3VwcG9ydHMgdGhlIGNsYWltcywgdGhlIHR5cGUgb2YgZXZpZGVuY2UgdGhleSBsZXZlcmFnZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHNoaWZ0cyBpbiB0b25lIG9yIGFwcHJvYWNoIHRoYXQgSSBtaWdodCBoYXZlIGluaXRpYWxseSBtaXNzZWQuIEl0J3MgdGltZSBmb3IgYSBjbG9zZSByZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6Mjc6MjUuNzc0MzY4MjI3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bWEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODYwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyODYwOlxcdFxcdHJldHVybiBmYWxzZTtcXG4yODYxOlxcdH1cXG4yODYyOlxcdFxcbjI4NjM6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbjI4NjQ6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBsZW4sIHZtYV9mbGFnc190IHZtYV9mbGFncyxcXG4yODY1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGdvZmYsIHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxcbjI4NjY6XFx0e1xcbjI4Njc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4yODY4OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDtcXG4yODY5OlxcdFxcdGJvb2wgaGF2ZV9tbWFwX3ByZXBhcmUgPSBmaWxlIFxcdTAwMjZcXHUwMDI2IGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZW1tYXBfcHJlcGFyZTtcXG4yODcwOlxcdFxcdFZNQV9JVEVSQVRPUih2bWksIG1tLCBhZGRyKTtcXG4yODcxOlxcdFxcdGNvbnN0IHBnb2ZmX3QgYW5vbl9wZ29mZiA9IGFkZHIgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4yODcyOlxcdFxcdE1NQVBfU1RBVEUobWFwLCBtbSwgXFx1MDAyNnZtaSwgYWRkciwgbGVuLCBwZ29mZiwgYW5vbl9wZ29mZiwgdm1hX2ZsYWdzLCBmaWxlKTtcXG4yODczOlxcdFxcdHN0cnVjdCB2bV9hcmVhX2Rlc2MgZGVzYyA9IHtcXG4yODc0OlxcdFxcdFxcdC5tbSA9IG1tLFxcbjI4NzU6XFx0XFx0XFx0LmZpbGUgPSBmaWxlLFxcbjI4NzY6XFx0XFx0XFx0LmFjdGlvbiA9IHtcXG4yODc3OlxcdFxcdFxcdFxcdC50eXBlID0gTU1BUF9OT1RISU5HLCAvKiBEZWZhdWx0IHRvIG5vIGZ1cnRoZXIgYWN0aW9uLiAqL1xcbjI4Nzg6XFx0XFx0XFx0fSxcXG4yODc5OlxcdFxcdFxcdC52bV9vcHMgPSBcXHUwMDI2dm1hX2R1bW15X3ZtX29wcyxcXG4yODgwOlxcdFxcdH07XFxuMjg4MTpcXHRcXHRib29sIGFsbG9jYXRlZF9uZXcgPSBmYWxzZTtcXG4yODgyOlxcdFxcdGludCBlcnJvcjtcXG4yODgzOlxcdFxcbjI4ODQ6XFx0XFx0bWFwLmNoZWNrX2tzbV9lYXJseSA9IGNhbl9zZXRfa3NtX2ZsYWdzX2Vhcmx5KFxcdTAwMjZtYXApO1xcbjI4ODU6XFx0XFxuMjg4NjpcXHRcXHRlcnJvciA9IF9fbW1hcF9zZXR1cChcXHUwMDI2bWFwLCBcXHUwMDI2ZGVzYywgdWYpO1xcbjI4ODc6XFx0XFx0aWYgKCFlcnJvciBcXHUwMDI2XFx1MDAyNiBoYXZlX21tYXBfcHJlcGFyZSlcXG4yODg4OlxcdFxcdFxcdGVycm9yID0gY2FsbF9tbWFwX3ByZXBhcmUoXFx1MDAyNm1hcCwgXFx1MDAyNmRlc2MpO1xcbjI4ODk6XFx0XFx0aWYgKGVycm9yKVxcbjI4OTA6XFx0XFx0XFx0Z290byBhYm9ydF9tdW5tYXA7XFxuMjg5MTpcXHRcXG4yODkyOlxcdFxcdGlmIChtYXAuY2hlY2tfa3NtX2Vhcmx5KVxcbjI4OTM6XFx0XFx0XFx0dXBkYXRlX2tzbV9mbGFncyhcXHUwMDI2bWFwKTtcXG4yODk0OlxcdFxcbjI4OTU6XFx0XFx0LyogQXR0ZW1wdCB0byBtZXJnZSB3aXRoIGFkamFjZW50IFZNQXMuLi4gKi9cXG4yODk2OlxcdFxcdGlmIChtYXAucHJldiB8fCBtYXAubmV4dCkge1xcbjI4OTc6XFx0XFx0XFx0Vk1HX01NQVBfU1RBVEUodm1nLCBcXHUwMDI2bWFwLCAvKiB2bWEgPSAqLyBOVUxMKTtcXG4yODk4OlxcdFxcbjI4OTk6XFx0XFx0XFx0dm1hID0gdm1hX21lcmdlX25ld19yYW5nZShcXHUwMDI2dm1nKTtcXG4yOTAwOlxcdFxcdH1cXG4yOTAxOlxcdFxcbjI5MDI6XFx0XFx0LyogLi4uYnV0IGlmIHdlIGNhbid0LCBhbGxvY2F0ZSBhIG5ldyBWTUEuICovXFxuMjkwMzpcXHRcXHRpZiAoIXZtYSkge1xcbjI5MDQ6XFx0XFx0XFx0ZXJyb3IgPSBfX21tYXBfbmV3X3ZtYShcXHUwMDI2bWFwLCBcXHUwMDI2dm1hLCBcXHUwMDI2ZGVzYy5hY3Rpb24pO1xcbjI5MDU6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjI5MDY6XFx0XFx0XFx0XFx0Z290byB1bmFjY3RfZXJyb3I7XFxuMjkwNzpcXHRcXHRcXHRhbGxvY2F0ZWRfbmV3ID0gdHJ1ZTtcXG4yOTA4OlxcdFxcdH1cXG4yOTA5OlxcdFxcbjI5MTA6XFx0XFx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFxcdTAwMjZcXHUwMDI2ICFtYXBfaXNfYW5vbihcXHUwMDI2bWFwKSlcXG4yOTExOlxcdFxcdFxcdHNldF92bWFfdXNlcl9kZWZpbmVkX2ZpZWxkcyh2bWEsIFxcdTAwMjZtYXApO1xcbjI5MTI6XFx0XFxuMjkxMzpcXHRcXHRfX21tYXBfY29tcGxldGUoXFx1MDAyNm1hcCwgdm1hKTtcXG4yOTE0OlxcdFxcbjI5MTU6XFx0XFx0aWYgKGhhdmVfbW1hcF9wcmVwYXJlIFxcdTAwMjZcXHUwMDI2IGFsbG9jYXRlZF9uZXcpIHtcXG4yOTE2OlxcdFxcdFxcdGVycm9yID0gbW1hcF9hY3Rpb25fY29tcGxldGUodm1hLCBcXHUwMDI2ZGVzYy5hY3Rpb24sXFxuMjkxNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIC8qaXNfY29tcGF0PSovZmFsc2UpO1xcbjI5MTg6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjI5MTk6XFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzoyNzoyNS43NzQ2MzkwNzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEwMTE0MDQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcgaG93IGAvZGV2L3plcm9gIE1BUF9QUklWQVRFIG1hcHBpbmdzIGFyZSBoYW5kbGVkLiBJbnN0ZWFkIG9mIHRoZSBjdXJyZW50IHNlbWktYW5vbnltb3VzIGFwcHJvYWNoLCBpdCdzIG1ha2luZyB0aGVtIHRydWx5IGFub255bW91cyB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tKSBjb2RlLiBUaGF0J3MgYSBnb29kIGNsZWFudXAsIGFuZCB0aGUgbW92ZSBmcm9tIGBkcml2ZXJzL2NoYXIvbWVtLmNgIHRvIGBtbS9jaGFyLW1lbS5jYCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIExldCdzIGRpZyBpbjpcblxuKiAgICoqSW5pdGlhbGl6YXRpb246KiogTG9va2luZyBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHdpdGhpbiBgX19tbWFwX3JlZ2lvbmAsIHRoZSBgZGVzY2Agc3RydWN0IGlzIGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMuIENydWNpYWxseSwgaW4gYG1hcF9zZXRfYW5vbmAsIHRoZSBwYXRjaCBleHBsaWNpdGx5IHNldHMgYG1hcC1cdTAwM2VmaWxlID0gTlVMTGAsIGBtYXAtXHUwMDNldm1fb3BzID0gTlVMTGAsIGFuZCBgbWFwLVx1MDAzZXBnb2ZmYCBjb3JyZWN0bHkuIE5vdGhpbmcgaXMgbGVmdCBoYW5naW5nLiBUaGVyZSBhcmUgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuXG4qICAgKipEYXRhIEZsb3c6KiogSSdtIG5vdCBzZWVpbmcgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBhbnkgbmV3IHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBjb3VsZCBiZSByZWFkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBpbmZsdWVuY2UgYnJhbmNoaW5nIGxvZ2ljLiBUaGVyZSdzIG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBvciBhbnl0aGluZyBsaWtlIHRoYXQgdGhhdCB3b3VsZCBleHBvc2Uga2VybmVsIG1lbW9yeS5cbiogICAqKktBU0FOIHZzLiBLTVNBTjoqKiBUaGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgaGVyZSBhcmUgY2xhc3NpYyBtZW1vcnkgbWFuYWdlbWVudCBwcm9ibGVtczogbG9naWMgZXJyb3JzIGluIFZNQSBsaWZlY3ljbGVzLCBWTUEgbWVyZ2luZyBidWdzLCBwYWdlIG9mZnNldCBpc3N1ZXMsIGFuZCB0aGUgZHJlYWRlZCBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGF0J3MgZXhhY3RseSB0aGUga2luZCBvZiBzdHVmZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgKmVpdGhlciogb2YgdGhvc2Ugcmlza3MsIEkgZG9uJ3Qgc2VlIGFueSBuZWVkIGZvciBLTVNBTiBoZXJlLlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIGFuYWx5c2lzIGlzIHRoYXQsIHRoaXMgcGF0Y2ggY2FuIGJlIGRlZW1lZCBzYWZlLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLiBJdCBpcyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MTQsIk91dHB1dFRva2VucyI6MjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6Mjc6MzEuODc1NzgyMDIyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3MgdG8gbWFrZSB0aGVtIHRydWx5IGFub255bW91cyBWTUFzIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1vdmluZyBkcml2ZXJzL2NoYXIvbWVtLmMgdG8gbW0vY2hhci1tZW0uYywgdXBkYXRpbmcgbW1hcF9wcmVwYXJlIGhhbmRsaW5nLCBhbmQgcmVtb3Zpbmcgc3BlY2lhbC1jYXNlIHdvcmthcm91bmRzIGZvciBzZW1pLWFub255bW91cyBWTUFzKS5cXG5cXG5LTVNBTiB2cy4gS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHN0cnVjdHVyZXMgKGUuZy4gc3RydWN0IHZtX2FyZWFfZGVzYykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBBbnkgYnVncyBzdGVtbWluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gVk1BIG1lcmdpbmcgZGlzY3JlcGFuY2llcywgcGFnZSBvZmZzZXQgZXJyb3JzLCBvciByZWZlcmVuY2UvbGlmZXRpbWUgbWFuYWdlbWVudCBpc3N1ZXMpIGFyZSBtZW1vcnkgbWFuYWdlbWVudC9sb2dpYyBpc3N1ZXMgdGhhdCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBoYW5kbGluZyBvZiBNQVBfUFJJVkFURSAvZGV2L3plcm8gbWFwcGluZ3MgdG8gbWFrZSB0aGVtIHRydWx5IGFub255bW91cyBWTUFzIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1vdmluZyBkcml2ZXJzL2NoYXIvbWVtLmMgdG8gbW0vY2hhci1tZW0uYywgdXBkYXRpbmcgbW1hcF9wcmVwYXJlIGhhbmRsaW5nLCBhbmQgcmVtb3Zpbmcgc3BlY2lhbC1jYXNlIHdvcmthcm91bmRzIGZvciBzZW1pLWFub255bW91cyBWTUFzKS5cXG5cXG5LTVNBTiB2cy4gS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGFsdGVyIGtlcm5lbC10by11c2VyIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXIgcmVhZHMsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQWxsIHN0cnVjdHVyZXMgKGUuZy4gc3RydWN0IHZtX2FyZWFfZGVzYykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBBbnkgYnVncyBzdGVtbWluZyBmcm9tIHRoaXMgcmVmYWN0b3JpbmcgKGUuZy4gVk1BIG1lcmdpbmcgZGlzY3JlcGFuY2llcywgcGFnZSBvZmZzZXQgZXJyb3JzLCBvciByZWZlcmVuY2UvbGlmZXRpbWUgbWFuYWdlbWVudCBpc3N1ZXMpIGFyZSBtZW1vcnkgbWFuYWdlbWVudC9sb2dpYyBpc3N1ZXMgdGhhdCB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGV4aXN0aW5nIGtlcm5lbCBkZWJ1ZyBjaGVja3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2265z[1] Phase: Succeeded StartedAt: 2026-09-08 13:27:42 +0000 UTC FinishedAt: 2026-09-08 13:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 13:27:42 +0000 UTC FinishedAt: 2026-09-08 13:27:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2] Phase: Succeeded StartedAt: 2026-09-08 13:27:42 +0000 UTC FinishedAt: 2026-09-08 17:07:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 13:27:42 +0000 UTC FinishedAt: 2026-09-08 17:07:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 13:27:42 +0000 UTC FinishedAt: 2026-09-08 13:27:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 13:27:42 +0000 UTC FinishedAt: 2026-09-08 13:27:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflow2265z/series-workflow2265z-convert-artifact-972603918/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 13:27:52 +0000 UTC FinishedAt: 2026-09-08 13:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 13:27:52 +0000 UTC FinishedAt: 2026-09-08 13:44:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e7487264-d361-47db-b8ae-102c1a5372cc,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-workflow2265z/series-workflow2265z-convert-artifact-972603918/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": "ac337eca-f437-4e35-b3a2-11882e45bcb8", "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-workflow2265z/series-workflow2265z-build-action-4243719796/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 13:27:52 +0000 UTC FinishedAt: 2026-09-08 13:44:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e7487264-d361-47db-b8ae-102c1a5372cc,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-workflow2265z/series-workflow2265z-convert-artifact-972603918/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": "ac337eca-f437-4e35-b3a2-11882e45bcb8", "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-workflow2265z/series-workflow2265z-build-action-4243719796/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 13:44:11 +0000 UTC FinishedAt: 2026-09-08 13:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 13:44:11 +0000 UTC FinishedAt: 2026-09-08 13:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 13:44:11 +0000 UTC FinishedAt: 2026-09-08 13:44:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 13:44:11 +0000 UTC FinishedAt: 2026-09-08 13:44:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflow2265z/series-workflow2265z-convert-artifact-3273984513/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 13:44:21 +0000 UTC FinishedAt: 2026-09-08 13:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 13:44:21 +0000 UTC FinishedAt: 2026-09-08 13:46:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ac337eca-f437-4e35-b3a2-11882e45bcb8,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-workflow2265z/series-workflow2265z-build-action-4243719796/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-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 13:46:16 +0000 UTC FinishedAt: 2026-09-08 13:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 13:46:16 +0000 UTC FinishedAt: 2026-09-08 13:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 13:46:16 +0000 UTC FinishedAt: 2026-09-08 14:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 13:46:16 +0000 UTC FinishedAt: 2026-09-08 14:03:46 +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:*e7487264-d361-47db-b8ae-102c1a5372cc,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-workflow2265z/series-workflow2265z-convert-artifact-3273984513/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": "a2b4311c-ed8a-45b1-81b8-89044b13f4ad", "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-workflow2265z/series-workflow2265z-build-action-2453002893/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 13:46:16 +0000 UTC FinishedAt: 2026-09-08 14:03:41 +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:*e7487264-d361-47db-b8ae-102c1a5372cc,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-workflow2265z/series-workflow2265z-convert-artifact-3273984513/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": "a2b4311c-ed8a-45b1-81b8-89044b13f4ad", "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-workflow2265z/series-workflow2265z-build-action-2453002893/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 14:03:46 +0000 UTC FinishedAt: 2026-09-08 14:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 14:03:46 +0000 UTC FinishedAt: 2026-09-08 14:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 14:03:46 +0000 UTC FinishedAt: 2026-09-08 14:05:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 14:03:46 +0000 UTC FinishedAt: 2026-09-08 14:05:45 +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:*a2b4311c-ed8a-45b1-81b8-89044b13f4ad,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-workflow2265z/series-workflow2265z-build-action-2453002893/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-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 14:05:55 +0000 UTC FinishedAt: 2026-09-08 17:07:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 14:05:55 +0000 UTC FinishedAt: 2026-09-08 17:07:32 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"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:*ac337eca-f437-4e35-b3a2-11882e45bcb8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a2b4311c-ed8a-45b1-81b8-89044b13f4ad,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-workflow2265z/series-workflow2265z-build-action-4243719796/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-workflow2265z/series-workflow2265z-build-action-2453002893/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 14:05:55 +0000 UTC FinishedAt: 2026-09-08 14:06:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 14:05:55 +0000 UTC FinishedAt: 2026-09-08 14:06:00 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"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-workflow2265z/series-workflow2265z-convert-artifact-1053460374/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 14:05:55 +0000 UTC FinishedAt: 2026-09-08 14:05:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 14:05:55 +0000 UTC FinishedAt: 2026-09-08 14:05:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 14:05:55 +0000 UTC FinishedAt: 2026-09-08 14:05:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 14:06:05 +0000 UTC FinishedAt: 2026-09-08 17:07:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2265z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["call_mmap_prepare","file_is_dev_zero","mmap_zero_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU"],"series_id":"dd050117-4615-41f2-8c01-2091e8dd27a6","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 14:06:05 +0000 UTC FinishedAt: 2026-09-08 17:07:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ac337eca-f437-4e35-b3a2-11882e45bcb8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a2b4311c-ed8a-45b1-81b8-89044b13f4ad,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-workflow2265z/series-workflow2265z-build-action-4243719796/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-workflow2265z/series-workflow2265z-build-action-2453002893/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-workflow2265z/series-workflow2265z-convert-artifact-1053460374/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,}