Name: series-workflow57szv Phase: Succeeded StartedAt: 2026-07-12 07:28:45 +0000 UTC FinishedAt: 2026-07-12 12:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[0] Phase: Succeeded StartedAt: 2026-07-12 07:28:45 +0000 UTC FinishedAt: 2026-07-12 07:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[0].run-triage Phase: Succeeded StartedAt: 2026-07-12 07:28:45 +0000 UTC FinishedAt: 2026-07-12 07:52:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_ILA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_ILA" ], "series_id": "1ecf4ed4-b7d6-45ba-b005-84348f71cd80" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ila_csum_adjust_transport", "ila_update_ipv6_locator", "ila_xlat_addr", "ila_nf_input", "ila_output", "ila_input" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfSUxBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDtpbGFfdXBkYXRlX2lwdjZfbG9jYXRvciYjMzQ7LAogICAgJiMzNDtpbGFfeGxhdF9hZGRyJiMzNDssCiAgICAmIzM0O2lsYV9uZl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpbGFfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lsYV9pbnB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSB3aGVyZSB0aGUgYGlwNmhgIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGwoKWAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBzb2NrZXQgYnVmZmVyIGRhdGEuIFJlLWZldGNoaW5nIHRoZSBwb2ludGVyIHZpYSBgaXB2Nl9oZHIoc2tiKWAgZW5zdXJlcyB0aGUgY29ycmVjdCBtZW1vcnkgYWRkcmVzcyBpcyB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMgKElQdjYgSUxBKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyYmZmMzhhMzBiOWRhMWJiMzg2ZTM2ZThjOTY3MmI4OTYyNzllYTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAwNzo1MDoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jIGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuaW5kZXggZTcxNTcxNDU1YzhhMGEuLmFjZWRjNWE4NGU0ZDczIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuQEAgLTg1LDYgJiM0Mzs4NSw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRzdHJ1Y3QgdGNwaGRyICp0aCA9IChzdHJ1Y3QgdGNwaGRyICopXG4gXHRcdFx0XHRcdChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBuaG9mZik7XG4gXG4mIzQzO1x0XHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuIFx0XHRcdGRpZmYgPSBnZXRfY3N1bV9kaWZmKGlwNmgsIHApO1xuIFx0XHRcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXHUwMDI2dGgtXHUwMDNlY2hlY2ssIHNrYixcbiBcdFx0XHRcdFx0XHRcdGRpZmYsIHRydWUsIHRydWUpO1xuQEAgLTk2LDYgJiM0Mzs5Nyw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG5ob2ZmKTtcbiBcbiBcdFx0XHRpZiAodWgtXHUwMDNlY2hlY2sgfHwgc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4mIzQzO1x0XHRcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRcdFx0XHRkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTtcbiBcdFx0XHRcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXHUwMDI2dWgtXHUwMDNlY2hlY2ssIHNrYixcbiBcdFx0XHRcdFx0XHRcdFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XG5AQCAtMTEwLDYgJiM0MzsxMTIsNyBAQCBzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0c3RydWN0IGljbXA2aGRyICppaCA9IChzdHJ1Y3QgaWNtcDZoZHIgKilcbiBcdFx0XHRcdFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG5ob2ZmKTtcbiBcbiYjNDM7XHRcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRcdFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XG4gXHRcdFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2VfYnlfZGlmZihcdTAwMjZpaC1cdTAwM2VpY21wNl9ja3N1bSwgc2tiLFxuIFx0XHRcdFx0XHRcdFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XG5AQCAtMTUxLDYgJiM0MzsxNTQsOSBAQCB2b2lkIGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbGFfcGFyYW1zICpwLFxuIFx0XHRicmVhaztcbiBcdH1cbiBcbiYjNDM7XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiYjNDM7XHRpYWRkciA9IGlsYV9hMmkoXHUwMDI2aXA2aC1cdTAwM2VkYWRkcik7XG4mIzQzO1xuIFx0LyogTm93IGNoYW5nZSBkZXN0aW5hdGlvbiBhZGRyZXNzICovXG4gXHRpYWRkci1cdTAwM2Vsb2MgPSBwLVx1MDAzZWxvY2F0b3I7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfSUxBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDtpbGFfdXBkYXRlX2lwdjZfbG9jYXRvciYjMzQ7LAogICAgJiMzNDtpbGFfeGxhdF9hZGRyJiMzNDssCiAgICAmIzM0O2lsYV9uZl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpbGFfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lsYV9pbnB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSB3aGVyZSB0aGUgYGlwNmhgIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGwoKWAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBzb2NrZXQgYnVmZmVyIGRhdGEuIFJlLWZldGNoaW5nIHRoZSBwb2ludGVyIHZpYSBgaXB2Nl9oZHIoc2tiKWAgZW5zdXJlcyB0aGUgY29ycmVjdCBtZW1vcnkgYWRkcmVzcyBpcyB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMgKElQdjYgSUxBKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJiZmYzOGEzMGI5ZGExYmIzODZlMzZlOGM5NjcyYjg5NjI3OWVhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDA3OjUwOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYyBiL25ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmMKaW5kZXggZTcxNTcxNDU1YzhhMGEuLmFjZWRjNWE4NGU0ZDczIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmMKQEAgLTg1LDYgJiM0Mzs4NSw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCB0Y3BoZHIgKnRoID0gKHN0cnVjdCB0Y3BoZHIgKikKIAkJCQkJKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG5ob2ZmKTsKIAomIzQzOwkJCWlwNmggPSBpcHY2X2hkcihza2IpOwogCQkJZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7CiAJCQlpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKCZhbXA7dGgtJmd0O2NoZWNrLCBza2IsCiAJCQkJCQkJZGlmZiwgdHJ1ZSwgdHJ1ZSk7CkBAIC05Niw2ICYjNDM7OTcsNyBAQCBzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBuaG9mZik7CiAKIAkJCWlmICh1aC0mZ3Q7Y2hlY2sgfHwgc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewomIzQzOwkJCQlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKIAkJCQlkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTsKIAkJCQlpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKCZhbXA7dWgtJmd0O2NoZWNrLCBza2IsCiAJCQkJCQkJCWRpZmYsIHRydWUsIHRydWUpOwpAQCAtMTEwLDYgJiM0MzsxMTIsNyBAQCBzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgaWNtcDZoZHIgKmloID0gKHN0cnVjdCBpY21wNmhkciAqKQogCQkJCQkoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgbmhvZmYpOwogCiYjNDM7CQkJaXA2aCA9IGlwdjZfaGRyKHNrYik7CiAJCQlkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTsKIAkJCWluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoJmFtcDtpaC0mZ3Q7aWNtcDZfY2tzdW0sIHNrYiwKIAkJCQkJCQlkaWZmLCB0cnVlLCB0cnVlKTsKQEAgLTE1MSw2ICYjNDM7MTU0LDkgQEAgdm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCwKIAkJYnJlYWs7CiAJfQogCiYjNDM7CWlwNmggPSBpcHY2X2hkcihza2IpOwomIzQzOwlpYWRkciA9IGlsYV9hMmkoJmFtcDtpcDZoLSZndDtkYWRkcik7CiYjNDM7CiAJLyogTm93IGNoYW5nZSBkZXN0aW5hdGlvbiBhZGRyZXNzICovCiAJaWFkZHItJmd0O2xvYyA9IHAtJmd0O2xvY2F0b3I7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCBhbmQgYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB0aGV5JiMzOTt2ZSBhZGRlZCBgaXA2aCA9IGlwdjZfaGRyKHNrYik7YCByaWdodCBiZWZvcmUgdGhlIGNhbGxzIHRvIGBnZXRfY3N1bV9kaWZmYCBpbiB0aGUgZm9ybWVyIGFuZCBiZWZvcmUgZ2V0dGluZyB0aGUgSUxBIGFkZHJlc3MgZnJvbSB0aGUgZGVzdGluYXRpb24gSVAgaW4gdGhlIGxhdHRlci4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBzdGFsZSBwb2ludGVyIGlzc3VlLiBUaGV5JiMzOTtyZSByZS1hY3F1aXJpbmcgdGhlIElQdjYgaGVhZGVyIHBvaW50ZXIuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBlaXRoZXIgYHBza2JfbWF5X3B1bGxgIG9yIHNvbWUgb3RoZXIgc2tiIG1hbmlwdWxhdGlvbiBmdW5jdGlvbiBpcyBsaWtlbHkgYmVpbmcgY2FsbGVkIGluIGJldHdlZW4sIHdoaWNoIGNvdWxkIGludmFsaWRhdGUgb3IgbW92ZSB0aGUgb3JpZ2luYWwgYGlwNmhgIHBvaW50ZXIuIEFsdGVybmF0aXZlbHksIHBlcmhhcHMgdGhlIG9yaWdpbmFsIGBpcDZoYCBqdXN0IHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IHVwZGF0ZWQgYWZ0ZXIgc29tZSBvcGVyYXRpb24uCgpJIG5lZWQgdG8gZGl2ZSBpbnRvIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCBhbmQgYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCB0byBjb25maXJtIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBleGFjdCBsb2dpYyBhbmQgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgY2FsbGVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgYnVnIGFuZCBob3cgdGhpcyBwYXRjaCBmaXhlcyBpdC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHZlcmlmeSBpZiB0aGVyZSYjMzk7cyBhIHJlYWwtd29ybGQgc2NlbmFyaW8gd2hlcmUgdGhlIGluaXRpYWwgYGlwNmhgIGNvdWxkIGJlIGNvcnJ1cHRlZCBvciBnbyBzdGFsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jPTY0PXN0YXRpYyB2b2lkIGlsYV9jc3VtX2RvX25ldXRyYWxfbm9mbXQoc3RydWN0IGlsYV9hZGRyICppYWRkcixcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTc0LVxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYzo3NTpzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTc2LVx0XHRcdFx0ICAgICAgc3RydWN0IGlsYV9wYXJhbXMgKnApXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYz0xMjQ9dm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCxcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEzMS1cdGNhc2UgSUxBX0NTVU1fQURKVVNUX1RSQU5TUE9SVDpcbm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmM6MTMyOlx0XHRpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHNrYiwgcCk7XG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEzMy1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgcHJlc2VudGVkIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCBpdCBteXNlbGY6CgoqKkRpdmluZyBpbnRvIHRoZSBJTEEgQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgSVB2NiBJTEEgKEludGVsbGlnZW50IExpbmsgQWdncmVnYXRpb24pIGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgYGlsYV9jb21tb24uY2AgZmlsZS4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBuZXR3b3JraW5nIGludGVybmFscywgSSYjMzk7bGwgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyA3NSBhbmQgMTI0IG9mIHRoYXQgZmlsZS4gTXkgaHVuY2ggaXMsIHRoZXNlIGxvY2F0aW9ucyB3aWxsIHJldmVhbCB0aGUgY29yZSBhc3BlY3RzIG9mIHdoYXQmIzM5O3MgYmVpbmcgZGlzY3Vzc2VkIC0gd2hhdGV2ZXIgdGhhdCBpcyAtIGluIGdyZWF0ZXIgZGV0YWlsLiBJIGV4cGVjdCB0aG9zZSBsaW5lcyB0byBzZXQgdGhlIHN0YWdlIGZvciB3aGF0ZXZlciBwcm9ibGVtIG9yIGZ1bmN0aW9uIHRoZSBzbmlwcGV0IHJlZmVycyB0by4gV2l0aCB0aGF0IGNvbnRleHQsIEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHQgKi9cbiAgNjE6XHRcdGlhZGRyLVx1MDAzZWlkZW50LmNzdW1fbmV1dHJhbCBePSAxO1xuICA2MjpcdH1cbiAgNjM6XHRcbiAgNjQ6XHRzdGF0aWMgdm9pZCBpbGFfY3N1bV9kb19uZXV0cmFsX25vZm10KHN0cnVjdCBpbGFfYWRkciAqaWFkZHIsXG4gIDY1Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaWxhX3BhcmFtcyAqcClcbiAgNjY6XHR7XG4gIDY3Olx0XHRfX3N1bTE2ICphZGp1c3QgPSAoX19mb3JjZSBfX3N1bTE2ICopXHUwMDI2aWFkZHItXHUwMDNlaWRlbnQudjE2WzNdO1xuICA2ODpcdFx0X193c3VtIGRpZmY7XG4gIDY5Olx0XG4gIDcwOlx0XHRkaWZmID0gZ2V0X2NzdW1fZGlmZl9pYWRkcihpYWRkciwgcCk7XG4gIDcxOlx0XG4gIDcyOlx0XHQqYWRqdXN0ID0gfmNzdW1fZm9sZChjc3VtX2FkZChkaWZmLCBjc3VtX3VuZm9sZCgqYWRqdXN0KSkpO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsXG4gIDc2Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaWxhX3BhcmFtcyAqcClcbiAgNzc6XHR7XG4gIDc4Olx0XHRzaXplX3QgbmhvZmYgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuICA3OTpcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xuICA4MDpcdFx0X193c3VtIGRpZmY7XG4gIDgxOlx0XG4gIDgyOlx0XHRzd2l0Y2ggKGlwNmgtXHUwMDNlbmV4dGhkcikge1xuICA4MzpcdFx0Y2FzZSBORVhUSERSX1RDUDpcbiAgODQ6XHRcdFx0aWYgKGxpa2VseShwc2tiX21heV9wdWxsKHNrYiwgbmhvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKSkpIHtcbiAgODU6XHRcdFx0XHRzdHJ1Y3QgdGNwaGRyICp0aCA9IChzdHJ1Y3QgdGNwaGRyICopXG4gIDg2Olx0XHRcdFx0XHRcdChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBuaG9mZik7XG4gIDg3Olx0XG4gIDg4Olx0XHRcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gIDg5Olx0XHRcdFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XG4gIDkwOlx0XHRcdFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2VfYnlfZGlmZihcdTAwMjZ0aC1cdTAwM2VjaGVjaywgc2tiLFxuICA5MTpcdFx0XHRcdFx0XHRcdFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XG4gIDkyOlx0XHRcdH1cbiAgOTM6XHRcdFx0YnJlYWs7XG4gIDk0Olx0XHRjYXNlIE5FWFRIRFJfVURQOlxuICA5NTpcdFx0XHRpZiAobGlrZWx5KHBza2JfbWF5X3B1bGwoc2tiLCBuaG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikpKSkge1xuICA5NjpcdFx0XHRcdHN0cnVjdCB1ZHBoZHIgKnVoID0gKHN0cnVjdCB1ZHBoZHIgKilcbiAgOTc6XHRcdFx0XHRcdFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG5ob2ZmKTtcbiAgOTg6XHRcbiAgOTk6XHRcdFx0XHRpZiAodWgtXHUwMDNlY2hlY2sgfHwgc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4gMTAwOlx0XHRcdFx0XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiAxMDE6XHRcdFx0XHRcdGRpZmYgPSBnZXRfY3N1bV9kaWZmKGlwNmgsIHApO1xuIDEwMjpcdFx0XHRcdFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2VfYnlfZGlmZihcdTAwMjZ1aC1cdTAwM2VjaGVjaywgc2tiLFxuIDEwMzpcdFx0XHRcdFx0XHRcdFx0XHRkaWZmLCB0cnVlLCB0cnVlKTtcbiAxMDQ6XHRcdFx0XHRcdGlmICghdWgtXHUwMDNlY2hlY2spXG4gMTA1Olx0XHRcdFx0XHRcdHVoLVx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XG4gMTA2Olx0XHRcdFx0fVxuIDEwNzpcdFx0XHR9XG4gMTA4Olx0XHRcdGJyZWFrO1xuIDEwOTpcdFx0Y2FzZSBORVhUSERSX0lDTVA6XG4gMTEwOlx0XHRcdGlmIChsaWtlbHkocHNrYl9tYXlfcHVsbChza2IsXG4gMTExOlx0XHRcdFx0XHRcdCBuaG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKSkpKSB7XG4gMTEyOlx0XHRcdFx0c3RydWN0IGljbXA2aGRyICppaCA9IChzdHJ1Y3QgaWNtcDZoZHIgKilcbiAxMTM6XHRcdFx0XHRcdFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG5ob2ZmKTtcbiAxMTQ6XHRcbiAxMTU6XHRcdFx0XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiAxMTY6XHRcdFx0XHRkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTtcbiAxMTc6XHRcdFx0XHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKFx1MDAyNmloLVx1MDAzZWljbXA2X2Nrc3VtLCBza2IsXG4gMTE4Olx0XHRcdFx0XHRcdFx0XHRkaWZmLCB0cnVlLCB0cnVlKTtcbiAxMTk6XHRcdFx0fVxuIDEyMDpcdFx0XHRicmVhaztcbiAxMjE6XHRcdH1cbiAxMjI6XHR9XG4gMTIzOlx0XG4gMTI0Olx0dm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCxcbiAxMjU6XHRcdFx0XHQgICAgIGJvb2wgc2lyMmlsYSlcbiAxMjY6XHR7XG4gMTI3Olx0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gMTI4Olx0XHRzdHJ1Y3QgaWxhX2FkZHIgKmlhZGRyID0gaWxhX2EyaShcdTAwMjZpcDZoLVx1MDAzZWRhZGRyKTtcbiAxMjk6XHRcbiAxMzA6XHRcdHN3aXRjaCAocC1cdTAwM2Vjc3VtX21vZGUpIHtcbiAxMzE6XHRcdGNhc2UgSUxBX0NTVU1fQURKVVNUX1RSQU5TUE9SVDpcbiAxMzI6XHRcdFx0aWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydChza2IsIHApO1xuIDEzMzpcdFx0XHRicmVhaztcbiAxMzQ6XHRcdGNhc2UgSUxBX0NTVU1fTkVVVFJBTF9NQVA6XG4gMTM1Olx0XHRcdGlmIChzaXIyaWxhKSB7XG4gMTM2Olx0XHRcdFx0aWYgKFdBUk5fT04oaWxhX2NzdW1fbmV1dHJhbF9zZXQoaWFkZHItXHUwMDNlaWRlbnQpKSkge1xuIDEzNzpcdFx0XHRcdFx0LyogQ2hlY2tzdW0gZmxhZyBzaG91bGQgbmV2ZXIgYmVcbiAxMzg6XHRcdFx0XHRcdCAqIHNldCBpbiBhIGZvcm1hdHRlZCBTSVIgYWRkcmVzcy5cbiAxMzk6XHRcdFx0XHRcdCAqL1xuIDE0MDpcdFx0XHRcdFx0YnJlYWs7XG4gMTQxOlx0XHRcdFx0fVxuIDE0MjpcdFx0XHR9IGVsc2UgaWYgKCFpbGFfY3N1bV9uZXV0cmFsX3NldChpYWRkci1cdTAwM2VpZGVudCkpIHtcbiAxNDM6XHRcdFx0XHQvKiBJTEEgdG8gU0lSIHRyYW5zbGF0aW9uIGFuZCBDLWJpdCBpc24mIzM5O3RcbiAxNDQ6XHRcdFx0XHQgKiBzZXQgc28gd2UmIzM5O3JlIGdvb2QuXG4gMTQ1Olx0XHRcdFx0ICovXG4gMTQ2Olx0XHRcdFx0YnJlYWs7XG4gMTQ3Olx0XHRcdH1cbiAxNDg6XHRcdFx0aWxhX2NzdW1fZG9fbmV1dHJhbF9mbXQoaWFkZHIsIHApO1xuIDE0OTpcdFx0XHRicmVhaztcbiAxNTA6XHRcdGNhc2UgSUxBX0NTVU1fTkVVVFJBTF9NQVBfQVVUTzpcbiAxNTE6XHRcdFx0aWxhX2NzdW1fZG9fbmV1dHJhbF9ub2ZtdChpYWRkciwgcCk7XG4gMTUyOlx0XHRcdGJyZWFrO1xuIDE1MzpcdFx0Y2FzZSBJTEFfQ1NVTV9OT19BQ1RJT046XG4gMTU0Olx0XHRcdGJyZWFrO1xuIDE1NTpcdFx0fVxuIDE1NjpcdFxuIDE1NzpcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gMTU4Olx0XHRpYWRkciA9IGlsYV9hMmkoXHUwMDI2aXA2aC1cdTAwM2VkYWRkcik7XG4gMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBJUHY2IEhlYWRlciBWdWxuZXJhYmlsaXR5IEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIHdoaWNoIGlzIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gdGhlIGZhY3QgdGhhdCBgcHNrYl9tYXlfcHVsbGAgY2FuIHJlYWxsb2NhdGUgdGhlIGBza2JgIGRhdGEuIFRoYXQgbWVhbnMgdGhlIHBvaW50ZXIgYGlwNmggPSBpcHY2X2hkcihza2IpO2AgbWlnaHQgYmVjb21lIHN0YWxlIGFmdGVyIGEgYHBza2JfbWF5X3B1bGxgIGNhbGwuIFRoZSBwYXRjaCBzbWFydGx5IHJlLWV2YWx1YXRlcyBgaXA2aGAgYWZ0ZXIgdGhvc2UgY2FsbHMgdG8gZW5zdXJlIHdlJiMzOTtyZSBhbHdheXMgd29ya2luZyB3aXRoIGEgdmFsaWQgcG9pbnRlciB0byB0aGUgSVB2NiBoZWFkZXIuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBmaXguCgpNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzLCAmIzM0O1doYXQgY29uZmlnIG9wdGlvbnMgZW5hYmxlIHRoaXMgY29kZSBwYXRoPyYjMzQ7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24gdG8gdHJpZ2dlciB0aGlzIHZ1bG5lcmFiaWxpdHksIHNvIEkgY2FuIHRhcmdldCBpdCBwcm9wZXJseSBpbiBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBmaWxlIG1lbnRpb25lZCwgYG5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmNgLCBpcyBteSBzdGFydGluZyBwb2ludC4gVGhlIHJlbGF0ZWQgTWFrZWZpbGVzLCBlaXRoZXIgYG5ldC9pcHY2L2lsYS9NYWtlZmlsZWAgb3IgYG5ldC9pcHY2L01ha2VmaWxlYCwgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY2x1ZXMgSSBuZWVkLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgaWYgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBtb2R1bGUgdGhhdCBoYXMgdG8gYmUgbG9hZGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbGFfY29tbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pbGEvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBWNl9JTEEpICYjNDM7PSBpbGEub1xubmV0L2lwdjYvaWxhL01ha2VmaWxlLTctXG5uZXQvaXB2Ni9pbGEvTWFrZWZpbGU6ODppbGEtb2JqcyA6PSBpbGFfbWFpbi5vIGlsYV9jb21tb24ubyBpbGFfbHd0Lm8gaWxhX3hsYXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCB0ZXh0OgoKKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIHRleHQgc2VlbXMgdG8gYmUgcG9pbnRpbmcgbWUgdG93YXJkcyBgQ09ORklHX0lQVjZfSUxBYC4gUmlnaHQsIEkga25vdyB0aGF0IG9uZSDigJMgaXQmIzM5O3MgbGlrZWx5IGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4gSSBuZWVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgSVB2NiBjb25maWd1cmF0aW9uIGlzIGNydWNpYWwgZm9yIHRoaXMga2luZCBvZiB3b3JrLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGJlZm9yZSBJIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYENPTkZJR19JUFY2X0lMQWAuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIGlzIG91dCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfSUxBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzMyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBzb21lIElQdjYgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBLY29uZmlnIGZpbGUgZm9yIElQdjYsIGFuZCBpdCBsb29rcyBsaWtlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgc2VjdGlvbiBhcm91bmQgbGluZSAxMjAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGZlYXR1cmUmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlc2lkZSwgc28gSSYjMzk7bGwgc3RhcnQgdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBzZXR0aW5ncyBJIG5lZWQgdG8gcmV2aWV3LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gd29yay4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdFx0aGVscFxuIDExNjpcdFx0ICBTdXBwb3J0IGZvciBJUHY2IE1vYmlsaXR5IGRlc2NyaWJlZCBpbiBSRkMgMzc3NS5cbiAxMTc6XHRcbiAxMTg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMTk6XHRcbiAxMjA6XHRjb25maWcgSVBWNl9JTEFcbiAxMjE6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXCYjMzQ7XG4gMTIyOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUlxuIDEyMzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuIDEyNDpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMTI1Olx0XHRoZWxwXG4gMTI2Olx0XHQgIFN1cHBvcnQgZm9yIElQdjYgSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSkuXG4gMTI3Olx0XG4gMTI4Olx0XHQgIElMQSBpcyBhIG1lY2hhbmlzbSB0byBkbyBuZXR3b3JrIHZpcnR1YWxpemF0aW9uIHdpdGhvdXRcbiAxMjk6XHRcdCAgZW5jYXBzdWxhdGlvbi4gVGhlIGJhc2ljIGNvbmNlcHQgb2YgSUxBIGlzIHRoYXQgd2Ugc3BsaXQgYW5cbiAxMzA6XHRcdCAgSVB2NiBhZGRyZXNzIGludG8gYSA2NCBiaXQgbG9jYXRvciBhbmQgNjQgYml0IGlkZW50aWZpZXIuIFRoZVxuIDEzMTpcdFx0ICBpZGVudGlmaWVyIGlzIHRoZSBpZGVudGl0eSBvZiBhbiBlbnRpdHkgaW4gY29tbXVuaWNhdGlvblxuIDEzMjpcdFx0ICAoXCYjMzQ7d2hvXCYjMzQ7KSBhbmQgdGhlIGxvY2F0b3IgZXhwcmVzc2VzIHRoZSBsb2NhdGlvbiBvZiB0aGVcbiAxMzM6XHRcdCAgZW50aXR5IChcJiMzNDt3aGVyZVwmIzM0OykuXG4gMTM0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFY2X0lMQSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgSVBWNl9JTEFgIGlzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBBbmQgaXQgcmVsaWVzIG9uIGBORVRGSUxURVJgLCBzbyB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzPwoKSXQgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb25zIGFyZSBjZW50ZXJlZCBhcm91bmQgYGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnRgIGFuZCBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgLiBUaGUgZmFjdCB0aGF0IGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCBpcyBzdGF0aWMgaXMgYSBiaXQgb2YgYSBodXJkbGUuIElmIGl0JiMzOTtzIGlubGluZWQsIGRpcmVjdGx5IGZvY3VzaW5nIG9uIGl0IG1pZ2h0IGJlIGRpZmZpY3VsdC4gQnV0LCBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgIGlzIHN0aWxsIGEgdmFsaWQgZnVuY3Rpb24gdG8gZm9jdXMgb24uIFdoZXJlIGl0JiMzOTtzIGNhbGxlZCwgdGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBzZWUuIExldCYjMzk7cyB0cmFjZSB0aG9zZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pbGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lsYS9pbGEuaD04OD1zdGF0aWMgaW5saW5lIGJvb2wgaWxhX2NzdW1fbmV1dHJhbF9zZXQoc3RydWN0IGlsYV9pZGVudGlmaWVyIGlkZW50KVxuLS1cbm5ldC9pcHY2L2lsYS9pbGEuaC05Mi1cbm5ldC9pcHY2L2lsYS9pbGEuaDo5Mzp2b2lkIGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbGFfcGFyYW1zICpwLFxubmV0L2lwdjYvaWxhL2lsYS5oLTk0LVx0XHRcdCAgICAgYm9vbCBzZXRfY3N1bV9uZXV0cmFsKTtcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jPTc1PXN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEyMy1cbm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmM6MTI0OnZvaWQgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlsYV9wYXJhbXMgKnAsXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEyNS1cdFx0XHQgICAgIGJvb2wgc2lyMmlsYSlcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTM4PXN0YXRpYyBpbnQgaWxhX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTQ5LVx0aWYgKGlsd3QtXHUwMDNlbHd0X291dHB1dClcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6NTA6XHRcdGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHNrYixcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtNTEtXHRcdFx0XHRcdGlsYV9wYXJhbXNfbHd0dW5uZWwob3JpZ19kc3QtXHUwMDNlbHd0c3RhdGUpLFxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MTA4PXN0YXRpYyBpbnQgaWxhX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMTYtXHRpZiAoIWlsd3QtXHUwMDNlbHd0X291dHB1dClcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MTE3Olx0XHRpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihza2IsXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTExOC1cdFx0XHRcdFx0aWxhX3BhcmFtc19sd3R1bm5lbChkc3QtXHUwMDNlbHd0c3RhdGUpLFxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jPTY0MT1zdGF0aWMgaW50IGlsYV94bGF0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzaXIyaWxhKVxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTY1OS1cdGlmIChpbGEpXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzo2NjA6XHRcdGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHNrYiwgXHUwMDI2aWxhLVx1MDAzZXhwLmlwLCBzaXIyaWxhKTtcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTY2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwNgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBJUHY2IExvY2F0b3IgVXBkYXRlcyoqCgpPa2F5LCBzbyBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlsYV9vdXRwdXRgLCBgaWxhX2lucHV0YCwgYW5kIGBpbGFfeGxhdF9hZGRyYC4gR2l2ZW4gdGhhdCwgdGhvc2UgdGhyZWUgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB0byBzdGFydCBkaWdnaW5nLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGV4YW1pbmUgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zLgoKQSBxdWljayBzY2FuIHNob3dzIHRoYXQgYGlsYV9vdXRwdXRgIGFuZCBgaWxhX2lucHV0YCBhcmUgcmVsYXRlZCB0byB0aGUgTGlnaHQgV2VpZ2h0IFR1bm5lbCAoTFdUKSBob29rcywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbiBwb2ludHMuIE1lYW53aGlsZSwgYGlsYV94bGF0X2FkZHJgIGlzIGEgbmV0ZmlsdGVyIGhvb2suIFRoYXQgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uLgoKUmlnaHQsIGBpbGFfeGxhdF9hZGRyYCwgbmV0ZmlsdGVyIGhvb2ssIGFkZHJlc3MgdHJhbnNsYXRpb24uIFRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudCBwbGFjZSB0byBsb29rIGZpcnN0LCBzbyBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV94bGF0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzNTpcdFxuIDYzNjpcdFx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFx1MDAyNmlsYW4tXHUwMDNleGxhdC5yaGFzaF90YWJsZSwgaWxhX2ZyZWVfY2IsIE5VTEwpO1xuIDYzNzpcdFxuIDYzODpcdFx0ZnJlZV9idWNrZXRfc3BpbmxvY2tzKGlsYW4tXHUwMDNleGxhdC5sb2Nrcyk7XG4gNjM5Olx0fVxuIDY0MDpcdFxuIDY0MTpcdHN0YXRpYyBpbnQgaWxhX3hsYXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHNpcjJpbGEpXG4gNjQyOlx0e1xuIDY0MzpcdFx0c3RydWN0IGlsYV9tYXAgKmlsYTtcbiA2NDQ6XHRcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiA2NDU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNjQ2Olx0XHRzdHJ1Y3QgaWxhX25ldCAqaWxhbiA9IG5ldF9nZW5lcmljKG5ldCwgaWxhX25ldF9pZCk7XG4gNjQ3Olx0XHRzdHJ1Y3QgaWxhX2FkZHIgKmlhZGRyID0gaWxhX2EyaShcdTAwMjZpcDZoLVx1MDAzZWRhZGRyKTtcbiA2NDg6XHRcbiA2NDk6XHRcdC8qIEFzc3VtZXMgc2tiIGNvbnRhaW5zIGEgdmFsaWQgSVB2NiBoZWFkZXIgdGhhdCBpcyBwdWxsZWQgKi9cbiA2NTA6XHRcbiA2NTE6XHRcdC8qIE5vIGNoZWNrIGhlcmUgdGhhdCBJTEEgdHlwZSBpbiB0aGUgbWFwcGluZyBtYXRjaGVzIHdoYXQgaXMgaW4gdGhlXG4gNjUyOlx0XHQgKiBhZGRyZXNzLiBXZSBhc3N1bWUgdGhhdCB3aGF0ZXZlciBzZW5kZXIgZ2F2ZXMgdXMgY2FuIGJlIHRyYW5zbGF0ZWQuXG4gNjUzOlx0XHQgKiBUaGUgY2hlY2tzdW0gbW9kZSBob3dldmVyIGlzIHJlbGV2YW50LlxuIDY1NDpcdFx0ICovXG4gNjU1Olx0XG4gNjU2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNjU3Olx0XG4gNjU4Olx0XHRpbGEgPSBpbGFfbG9va3VwX3dpbGRjYXJkcyhpYWRkciwgc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LCBpbGFuKTtcbiA2NTk6XHRcdGlmIChpbGEpXG4gNjYwOlx0XHRcdGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHNrYiwgXHUwMDI2aWxhLVx1MDAzZXhwLmlwLCBzaXIyaWxhKTtcbiA2NjE6XHRcbiA2NjI6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDY2MzpcdFxuIDY2NDpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGwgU2l0ZXMgb2YgYGlsYV94bGF0X2FkZHJgKioKCk9rYXksIHNvIGBpbGFfeGxhdF9hZGRyYCBpcyBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGVyZSBJIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMuIFRoYXQmIzM5O3MgZ29vZDsgbm8gZ2xvYmFsIG5hbWVzcGFjZSBwb2xsdXRpb24gdG8gd29ycnkgYWJvdXQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGludm9jYXRpb25zLiBLbm93aW5nIHRoZSBjb250ZXh0cyBvZiB0aG9zZSBjYWxscyB3aWxsIGJlIGNyaXRpY2FsIHRvIGdyYXNwaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBtb2RpZnlpbmcgaXQuIFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHBhc3NlZD8gQXJlIGFueSBvZiB0aG9zZSB2b2xhdGlsZSBvciBzaGFyZWQ/IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIGlmIGFueSBpbmxpbmUgYXNzZW1ibHkgaXMgdXNlZCBpbiBpdHMgdXNlIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lsYV94bGF0X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz0xNzM9c3RhdGljIHZvaWQgaWxhX2ZyZWVfY2Iodm9pZCAqcHRyLCB2b2lkICphcmcpXG4tLVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTc3LVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6MTc4OnN0YXRpYyBpbnQgaWxhX3hsYXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHNpcjJpbGEpO1xubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTc5LVxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jPTE4MT1pbGFfbmZfaW5wdXQodm9pZCAqcHJpdixcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xODQte1xubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6MTg1Olx0aWxhX3hsYXRfYWRkcihza2IsIGZhbHNlKTtcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE4Ni1cdHJldHVybiBORl9BQ0NFUFQ7XG4tLVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9NjMyPXZvaWQgaWxhX3hsYXRfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTY0MC1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjY0MTpzdGF0aWMgaW50IGlsYV94bGF0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzaXIyaWxhKVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNjQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY0OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBpbGFfbmZfaW5wdXRgKioKCk9rYXksIEkmIzM5O20gdHJhY2luZyB0aGlzIGV4ZWN1dGlvbiBhbmQgSSBzZWUgaXQmIzM5O3Mgb3JpZ2luYXRpbmcgZnJvbSBgaWxhX25mX2lucHV0YC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icy4gU28sIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgaWxhX25mX2lucHV0YC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMsIGl0cyBwcm9jZXNzaW5nIGxvZ2ljLCBhbmQgZXNwZWNpYWxseSB3aGF0IGRhdGEgaXQmIzM5O3MgZmVlZGluZyBpbnRvIHRoZSBzdWJzZXF1ZW50IGZ1bmN0aW9ucy4gVGhpcyBsb29rcyBsaWtlIGEgY3JpdGljYWwgcG9pbnQgd2hlcmUgc29tZXRoaW5nIGlzIGdldHRpbmcgaW5pdGlhbGl6ZWQgb3IgcHJlcGFyZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWxhX25mX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV94bGF0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9MTgwPXN0YXRpYyB1bnNpZ25lZCBpbnRcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjE4MTppbGFfbmZfaW5wdXQodm9pZCAqcHJpdixcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE4Mi1cdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz0xODk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpbGFfbmZfaG9va19vcHNbXSA9IHtcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE5MC1cdHtcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjE5MTpcdFx0Lmhvb2sgPSBpbGFfbmZfaW5wdXQsXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xOTItXHRcdC5wZiA9IE5GUFJPVE9fSVBWNixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmsgc3RhY2sgaW50ZXJuYWxzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEhvb2s6IElsYV9uZl9pbnB1dCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpbGFfbmZfaW5wdXRgLiBPa2F5LCBzbywgdGhpcyBpcyBhIG5ldGZpbHRlciBob29rLiBUaGF0JiMzOTtzIGdvb2QgY29udGV4dCB0byBzdGFydCB3aXRoLCBJIGtub3cgaG93IG5ldGZpbHRlciB3b3Jrcywgc28gSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgaW1tZWRpYXRlbHkuIEl0JiMzOTtzIGFuIGVudHJ5IHBvaW50IGZvciBwcm9jZXNzaW5nIHBhY2tldHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZWxzZSBpbnRlcmFjdHMgd2l0aCB0aGlzIGZ1bmN0aW9uLiBBaGEsIEkgc2VlIGluIHRoZSBjYWxsIGdyYXBoIHRoYXQgb3RoZXIgY2FsbGVycyBpbmNsdWRlIGBpbGFfb3V0cHV0YCBhbmQgYGlsYV9pbnB1dGAuIEFuZCB0aG9zZSBsaXZlIGluIGBuZXQvaXB2Ni9pbGEvaWxhX2x3dC5jYC4gT2theSwgbm93IEkgaGF2ZSBhIG11Y2ggYmV0dGVyIHBpY3R1cmUuIFRoaXMgbGlrZWx5IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gSW50ZXJtZWRpYXRlIExpbmsgQWRkcmVzcyAoSUxBKSBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgbmV0ZmlsdGVyIGZvciBwYWNrZXQgbWFuaXB1bGF0aW9uLCBhbmQgdGhlIGBsd3RgIChsaWdodHdlaWdodCB0dW5uZWwpIGFzcGVjdCBpcyBoYW5kbGluZyB0aGUgZW5jYXBzdWxhdGlvbiBhbmQgZGVjYXBzdWxhdGlvbiwgb3Igb3RoZXIgbWFuaXB1bGF0aW9uLCBvZiB0aGUgSVAgcGFja2V0cy4gVGhlIGBpbnB1dGAgYW5kIGBvdXRwdXRgIGNhbGxzIHN1Z2dlc3QgdGhhdCB0aGlzIG5ldGZpbHRlciBob29rIGBpbGFfbmZfaW5wdXRgIGlzIGJlaW5nIHVzZWQgdG8gZGVhbCB3aXRoIHBhY2tldHMgY29taW5nIGluIGZyb20gdGhlIG5ldHdvcmssIGFuZCB0aGUgYGlsYV9sd3RgIGNhbGxzIGFyZSBkZWFsaW5nIHdpdGggcGFja2V0cyBvbiB0aGUgbG9jYWwgaG9zdC4gSSYjMzk7bSBzdGFydGluZyB0byBnZXQgYSBnb29kIHNlbnNlIG9mIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlciwgYW5kIHRoZSBkaXJlY3Rpb24gSSBuZWVkIHRvIHN0YXJ0IG15IGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWxhX291dHB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lsYS9pbGFfbHd0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0zMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbGFfcGFyYW1zICppbGFfcGFyYW1zX2x3dHVubmVsKFxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzctXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjM4OnN0YXRpYyBpbnQgaWxhX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzkte1xuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlsYV9lbmNhcF9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMTUtXHQuZGVzdHJveV9zdGF0ZSA9IGlsYV9kZXN0cm95X3N0YXRlLFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzozMTY6XHQub3V0cHV0ID0gaWxhX291dHB1dCxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzE3LVx0LmlucHV0ID0gaWxhX2lucHV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njk0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIExXVHVubmVsIEVuY2Fwc3VsYXRpb24gT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgaWxhX291dHB1dGAgYW5kIGBpbGFfaW5wdXRgLiBSaWdodCwgdGhvc2UgYXJlIGNsZWFybHkgaW52b2x2ZWQgaW4gTFdUdW5uZWwgZW5jYXBzdWxhdGlvbiBvcGVyYXRpb25zLiBNYWtlcyBzZW5zZS4gSSBjYW4gcHJvYmFibHkgbmFycm93IG15IGZvY3VzIHRvIGBpbGFfbmZfaW5wdXRgLCBgaWxhX291dHB1dGAsIGFuZCBgaWxhX2lucHV0YCBmb3IgdGhlIG1vbWVudDsgdGhvc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBiaXRzLiBIb2xkIG9uIGEgc2Vjb25kLi4uIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAgaXMgKmV4cG9ydGVkKj8gVGhhdOKAmXMgYSBiaXQgdW51c3VhbCBmb3IgdGhpcyB0eXBlIG9mIGludGVybmFsIGZ1bmN0aW9uLiBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgZXhhY3RseSBob3cgYW5kIHdoZXJlIHRoYXQmIzM5O3MgYmVpbmcgZXhwb3NlZCwgc2luY2UgdGhhdCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3Igc2VjdXJpdHkgb3IgZGVzaWduLiBHb3R0YSBpbnZlc3RpZ2F0ZSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NzIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIFJlZmluZW1lbnQgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgdGhpcyBmb2N1cyBzeW1ib2wgYnVzaW5lc3MgZm9yIHN5emthbGxlciwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSByaWdodCBmdW5jdGlvbnMuIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgc2luY2Ugc29tZXRoaW5nIHdhc24mIzM5O3QgZXhwb3J0ZWQsIHRoYXQgaXQgd2FzIGluYWNjZXNzaWJsZSwgYnV0IHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlIGlmIHRoZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2l0aGluIHRoZSBzYW1lIG1vZHVsZS4KCk15IGZpcnN0IHRob3VnaHQgd2FzIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAuIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyBkZWZpbmVkIGluIGBpbGFfY29tbW9uLmNgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCwganVzdCB0byBiZSBjZXJ0YWluLiBBaCwgeWVzLCBgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydGAgaXMgc3RhdGljLCBhbHNvIGluIGBpbGFfY29tbW9uLmNgLgoKUmlnaHQsIG15IG9yaWdpbmFsIGNhbmRpZGF0ZXMgZm9yIGZvY3VzIHdlcmUgYGlsYV9uZl9pbnB1dGAsIGBpbGFfb3V0cHV0YCwgYW5kIGBpbGFfaW5wdXRgLiBIYW5nIG9uLCB0aG91Z2guIFdlcmVuJiMzOTt0IGBpbGFfb3V0cHV0YCBhbmQgYGlsYV9pbnB1dGAgc3RhdGljIGluIGBpbGFfbHd0LmNgPyBUaGF0JiMzOTtzIHJpZ2h0LiBUaGUgcXVlc3Rpb24gaXMgY2FuIHN5emthbGxlciBldmVuIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnM/IFllcywgdGhhdCYjMzk7cyByaWdodCwgc3l6a2FsbGVyIHV0aWxpemVzIGZ1bmN0aW9uIG5hbWVzIGFzIHRoZSBwcmltYXJ5IGZvY3VzIG1lY2hhbmlzbSwgc28gaXQmIzM5O3Mgbm90IGEgcHJvYmxlbS4KCkhtbSwgYGlsYV9uZl9pbnB1dGAgaXMgc3RhdGljIGFzIHdlbGwuIEkmIzM5O2QgYmV0dGVyIGJlIHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzLgoKYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCBpcyAqbm90KiBzdGF0aWMsIGFuZCBpdCYjMzk7cyBpbiBgaWxhX2NvbW1vbi5jYC4gSSBjYW4gZm9jdXMgb24gdGhhdCBkaXJlY3RseS4gQWN0dWFsbHksIEkgdGhpbmsgYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCB3b3VsZCBiZSBhIGdyZWF0IGZvY3VzIHN5bWJvbC4KCkxldCYjMzk7cyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gSSBuZWVkIHRvIG1ha2UgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb2luZyBiYWNrIHRvIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCwgaXQmIzM5O3Mgc3RhdGljLCBidXQgSSByZW1lbWJlciB0aGF0IHRoYXQgd2FzIHRoZSBvbmUgdGhhdCB3YXMgZml4ZWQgZWFybGllciwgc28gdGhhdCBmdW5jdGlvbiBjb3VsZCBiZSBhbiBhcHByb3ByaWF0ZSBhZGRpdGlvbi4KClNpbmNlIHN5emthbGxlciB1c2VzIGZ1bmN0aW9uIG5hbWVzIGZvciBmb2N1c2luZywgSSBjYW4gc2ltcGx5IGFkZCB0aGVtIHRvIHRoZSBmb2N1cyBsaXN0LiBMZXQmIzM5O3MgYWRkIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAsIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCwgYGlsYV9uZl9pbnB1dGAsIGBpbGFfb3V0cHV0YCwgYW5kIGBpbGFfaW5wdXRgLgoKVGhlIGxhc3QgdGhpbmcgdG8gY2hlY2sgaXMgdGhhdCBgaWxhX291dHB1dGAgYW5kIGBpbGFfaW5wdXRgIGFyZSBhIGxpdHRsZSBnZW5lcmljLCBzbyBpdCYjMzk7cyB3b3J0aCBzZWVpbmcgaWYgdGhvc2Ugc3ltYm9sIG5hbWVzIGNsYXNoLiBUaGVyZSBtaWdodCBiZSBzb21lIG90aGVyIGBpbGFfb3V0cHV0YCBvciBgaWxhX2lucHV0YCBzb21ld2hlcmUuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRvIHZlcmlmeSB0aGF0IHRoZSBuYW1lcyBhcmUgdW5pcXVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbGFfb3V0cHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWxhX3BhcmFtcyAqaWxhX3BhcmFtc19sd3R1bm5lbChcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTM3LVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzozODpzdGF0aWMgaW50IGlsYV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTM5LXtcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTMxMz1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpbGFfZW5jYXBfb3BzID0ge1xuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzE1LVx0LmRlc3Ryb3lfc3RhdGUgPSBpbGFfZGVzdHJveV9zdGF0ZSxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MzE2Olx0Lm91dHB1dCA9IGlsYV9vdXRwdXQsXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTMxNy1cdC5pbnB1dCA9IGlsYV9pbnB1dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIGEgS2V5IENvbnNpZGVyYXRpb24qKgoKWWVzLCB0aGlzIHNpdHVhdGlvbiBpcyBpbmRlZWQgdW5pcXVlLiBJdCBwcmVzZW50cyBhIHNwZWNpZmljIHNldCBvZiBjaXJjdW1zdGFuY2VzIHRoYXQgSSBoYXZlbiYjMzk7dCBkaXJlY3RseSBlbmNvdW50ZXJlZCBiZWZvcmUsIGF0IGxlYXN0IG5vdCBpbiB0aGlzIGV4YWN0IGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBwb3NpdGl2ZSwgaG93ZXZlciwgSSB3YW50IHRvIGV4cGxvcmUgY2VydGFpbiBjb25zaWRlcmF0aW9ucyBiZWZvcmUgZ29pbmcgZnVydGhlci4gTXkgaW50dWl0aW9uIGlzIHRoYXQgdGhpcyBpcyB1bnVzdWFsLCBhbmQgd2FycmFudHMgYSBmdWxsIHJldmlldy4KClRoZSBwcmltYXJ5IGFyZWEgdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMgdGhlIGBpbGFfaW5wdXRgIHZhcmlhYmxlIG9yIGZ1bmN0aW9uLiBXaGF0IGlzIHRoZSBhcmNoaXRlY3R1cmUgaGVyZT8gSXMgdGhpcyB0aGUgcmlnaHQgY29udGV4dD8gVGhpcyBzZWVtcyBsaWtlIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiBteSB0aG91Z2h0IHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgaXRzIGNoYXJhY3RlcmlzdGljcywgaW50ZXJhY3Rpb25zLCBhbmQgcG90ZW50aWFsIGltcGFjdCBpcyB2aXRhbCBiZWZvcmUgSSBjYW4gZm9ybXVsYXRlIGEgc29saWQgY29uY2x1c2lvbiBvciByZWNvbW1lbmQgYSBjb3Vyc2Ugb2YgYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbGFfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0zOD1zdGF0aWMgaW50IGlsYV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMDctXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjEwODpzdGF0aWMgaW50IGlsYV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMDkte1xuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlsYV9lbmNhcF9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMTYtXHQub3V0cHV0ID0gaWxhX291dHB1dCxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MzE3Olx0LmlucHV0ID0gaWxhX2lucHV0LFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMTgtXHQuZmlsbF9lbmNhcCA9IGlsYV9maWxsX2VuY2FwX2luZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjE5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgcmVxdWVzdGVkOgoKKipDb25zaWRlcmluZyBVbmlxdWVuZXNzIGFuZCBBZGRyZXNzIFRyYW5zbGF0aW9uKioKClllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBuZXcsIHNvbWV0aGluZyBzcGVjaWFsLiBCdXQsIHdhaXQuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgcGllY2VzLiBXaGF0IGFib3V0IGBpbGFfeGxhdF9hZGRyYD8gSG93IGRvZXMgdGhhdCBmaXQgaW50byB0aGlzIHBpY3R1cmU/IEkgaGF2ZSB0byBhbmFseXplIGhvdyB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIHJlbGF0ZXMgdG8gdGhlIG92ZXJhbGwgaWRlYSBvZiB1bmlxdWVuZXNzLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbGFfeGxhdF9hZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lsYS9pbGFfeGxhdC5jPTE3Mz1zdGF0aWMgdm9pZCBpbGFfZnJlZV9jYih2b2lkICpwdHIsIHZvaWQgKmFyZylcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xNzctXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzoxNzg6c3RhdGljIGludCBpbGFfeGxhdF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc2lyMmlsYSk7XG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xNzktXG4tLVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9MTgxPWlsYV9uZl9pbnB1dCh2b2lkICpwcml2LFxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE4NC17XG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzoxODU6XHRpbGFfeGxhdF9hZGRyKHNrYiwgZmFsc2UpO1xubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTg2LVx0cmV0dXJuIE5GX0FDQ0VQVDtcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz02MzI9dm9pZCBpbGFfeGxhdF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNjQwLVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6NjQxOnN0YXRpYyBpbnQgaWxhX3hsYXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHNpcjJpbGEpXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy02NDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEwOAoJCQkJCQkJb3V0cHV0OiAxODMKCQkJCQkJCXRob3VnaHRzOiA2MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSYjMzk7dmUgZ290IGEgZnVuY3Rpb25hbCBmaXggaGVyZSByZWxhdGVkIHRvIElQdjYgSUxBLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgY29ycnVwdGlvbiBzY2VuYXJpby4gVGhlIHZ1bG5lcmFiaWxpdHkgb2NjdXJzIHdoZW4gYHBza2JfbWF5X3B1bGwoKWAgcmVhbGxvY2F0ZXMgdGhlIHNvY2tldCBidWZmZXIsIHdoaWNoIGludmFsaWRhdGVzIHRoZSBgaXA2aGAgcG9pbnRlciB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhlIHBhdGNoIHJlc29sdmVzIHRoaXMgYnkgcmUtZmV0Y2hpbmcgdGhlIGBpcDZoYCBwb2ludGVyIGFmdGVyIHRoZSBwb3RlbnRpYWwgcmVhbGxvY2F0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBhdm9pZGluZyBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydGAgYW5kIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAgYXJlIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBvbmVzIGJlaW5nIG1vZGlmaWVkIHRvIHByZXZlbnQgdGhlIGVycm9yLiBUaGUgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBpbGFfeGxhdF9hZGRyYCwgYGlsYV9uZl9pbnB1dGAsIGBpbGFfb3V0cHV0YCwgYW5kIGBpbGFfaW5wdXRgLCBsb29rIGxpa2UgY2FsbGVycyBvZiB0aGUgZml4ZWQgZnVuY3Rpb25zLiBXZSBzaG91bGQgaW5jbHVkZSB0aG9zZSBpbiBvdXIgZnV6emluZyB0YXJnZXQgbGlzdCBhcyB3ZWxsLCB0byBoZWxwIHRoZSBmdXp6ZXIgZXhwbG9yZSB0aGUgZXhlY3V0aW9uIHBhdGhzLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBtYWluIG9uZSBhcHBlYXJzIHRvIGJlIGBJUFY2X0lMQWAuIEJ1dCwgbGV0JiMzOTtzIHNlZSwgZG9lcyBpdCByZXF1aXJlIGFueXRoaW5nIGVsc2U/IE9rYXksIGBJUFY2X0lMQWAgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgYW5kIGl0IHNlbGVjdHMgYERTVF9DQUNIRWAgYW5kIGBMV1RVTk5FTGAuIFNvLCBhcyBsb25nIGFzIGBJUFY2X0lMQWAgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkIGJlIGdvb2QgdG8gZ28uCgpUaGlzIGZpeCBpcyBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQsIHJlYWNoYWJsZSBuZXR3b3JrIGxvZ2ljLCBhbmQgYWRkcmVzc2VzIGEgY2xlYXIgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXR5LiBUaGF0IG1ha2VzIHRoaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2X0lMQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQmIzM0OywKICAgICYjMzQ7aWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3ImIzM0OywKICAgICYjMzQ7aWxhX3hsYXRfYWRkciYjMzQ7LAogICAgJiMzNDtpbGFfbmZfaW5wdXQmIzM0OywKICAgICYjMzQ7aWxhX291dHB1dCYjMzQ7LAogICAgJiMzNDtpbGFfaW5wdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgd2hlcmUgdGhlIGBpcDZoYCBwb2ludGVyIGJlY29tZXMgaW52YWxpZCBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsKClgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBSZS1mZXRjaGluZyB0aGUgcG9pbnRlciB2aWEgYGlwdjZfaGRyKHNrYilgIGVuc3VyZXMgdGhlIGNvcnJlY3QgbWVtb3J5IGFkZHJlc3MgaXMgdXNlZCBmb3IgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGFuZCBsb2NhdG9yIHVwZGF0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIGxvZ2ljIChJUHY2IElMQSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfSUxBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDtpbGFfdXBkYXRlX2lwdjZfbG9jYXRvciYjMzQ7LAogICAgJiMzNDtpbGFfeGxhdF9hZGRyJiMzNDssCiAgICAmIzM0O2lsYV9uZl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpbGFfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lsYV9pbnB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSB3aGVyZSB0aGUgYGlwNmhgIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGwoKWAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBzb2NrZXQgYnVmZmVyIGRhdGEuIFJlLWZldGNoaW5nIHRoZSBwb2ludGVyIHZpYSBgaXB2Nl9oZHIoc2tiKWAgZW5zdXJlcyB0aGUgY29ycmVjdCBtZW1vcnkgYWRkcmVzcyBpcyB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMgKElQdjYgSUxBKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjIzLjQyMzAxODI5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODM2MzY4MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfSUxBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydFwiLFxuICAgIFwiaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JcIixcbiAgICBcImlsYV94bGF0X2FkZHJcIixcbiAgICBcImlsYV9uZl9pbnB1dFwiLFxuICAgIFwiaWxhX291dHB1dFwiLFxuICAgIFwiaWxhX2lucHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgd2hlcmUgdGhlIGBpcDZoYCBwb2ludGVyIGJlY29tZXMgaW52YWxpZCBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsKClgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBSZS1mZXRjaGluZyB0aGUgcG9pbnRlciB2aWEgYGlwdjZfaGRyKHNrYilgIGVuc3VyZXMgdGhlIGNvcnJlY3QgbWVtb3J5IGFkZHJlc3MgaXMgdXNlZCBmb3IgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGFuZCBsb2NhdG9yIHVwZGF0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIGxvZ2ljIChJUHY2IElMQSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjIzLjQyMzAyNDU1MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxNzQ0MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDJiZmYzOGEzMGI5ZGExYmIzODZlMzZlOGM5NjcyYjg5NjI3OWVhNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxMiAwNzo1MDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jIGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xcbmluZGV4IGU3MTU3MTQ1NWM4YTBhLi5hY2VkYzVhODRlNGQ3MyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jXFxuKysrIGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xcbkBAIC04NSw2ICs4NSw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0c3RydWN0IHRjcGhkciAqdGggPSAoc3RydWN0IHRjcGhkciAqKVxcbiBcXHRcXHRcXHRcXHRcXHQoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBuaG9mZik7XFxuIFxcbitcXHRcXHRcXHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcXG4gXFx0XFx0XFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XFxuIFxcdFxcdFxcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXFx1MDAyNnRoLVxcdTAwM2VjaGVjaywgc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRkaWZmLCB0cnVlLCB0cnVlKTtcXG5AQCAtOTYsNiArOTcsNyBAQCBzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdChza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG5ob2ZmKTtcXG4gXFxuIFxcdFxcdFxcdGlmICh1aC1cXHUwMDNlY2hlY2sgfHwgc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbitcXHRcXHRcXHRcXHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcXG4gXFx0XFx0XFx0XFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XFxuIFxcdFxcdFxcdFxcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXFx1MDAyNnVoLVxcdTAwM2VjaGVjaywgc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkaWZmLCB0cnVlLCB0cnVlKTtcXG5AQCAtMTEwLDYgKzExMiw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0c3RydWN0IGljbXA2aGRyICppaCA9IChzdHJ1Y3QgaWNtcDZoZHIgKilcXG4gXFx0XFx0XFx0XFx0XFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgbmhvZmYpO1xcbiBcXG4rXFx0XFx0XFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuIFxcdFxcdFxcdGRpZmYgPSBnZXRfY3N1bV9kaWZmKGlwNmgsIHApO1xcbiBcXHRcXHRcXHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKFxcdTAwMjZpaC1cXHUwMDNlaWNtcDZfY2tzdW0sIHNrYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XFxuQEAgLTE1MSw2ICsxNTQsOSBAQCB2b2lkIGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbGFfcGFyYW1zICpwLFxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4rXFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuK1xcdGlhZGRyID0gaWxhX2EyaShcXHUwMDI2aXA2aC1cXHUwMDNlZGFkZHIpO1xcbitcXG4gXFx0LyogTm93IGNoYW5nZSBkZXN0aW5hdGlvbiBhZGRyZXNzICovXFxuIFxcdGlhZGRyLVxcdTAwM2Vsb2MgPSBwLVxcdTAwM2Vsb2NhdG9yO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjI0LjA5NTcwMDE0MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUxNjM2Mzc0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9JTEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0XCIsXG4gICAgXCJpbGFfdXBkYXRlX2lwdjZfbG9jYXRvclwiLFxuICAgIFwiaWxhX3hsYXRfYWRkclwiLFxuICAgIFwiaWxhX25mX2lucHV0XCIsXG4gICAgXCJpbGFfb3V0cHV0XCIsXG4gICAgXCJpbGFfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSB3aGVyZSB0aGUgYGlwNmhgIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGwoKWAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBzb2NrZXQgYnVmZmVyIGRhdGEuIFJlLWZldGNoaW5nIHRoZSBwb2ludGVyIHZpYSBgaXB2Nl9oZHIoc2tiKWAgZW5zdXJlcyB0aGUgY29ycmVjdCBtZW1vcnkgYWRkcmVzcyBpcyB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMgKElQdjYgSUxBKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMmJmZjM4YTMwYjlkYTFiYjM4NmUzNmU4Yzk2NzJiODk2Mjc5ZWE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMTIgMDc6NTA6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jIGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuaW5kZXggZTcxNTcxNDU1YzhhMGEuLmFjZWRjNWE4NGU0ZDczIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuKysrIGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuQEAgLTg1LDYgKzg1LDcgQEAgc3RhdGljIHZvaWQgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHN0cnVjdCB0Y3BoZHIgKnRoID0gKHN0cnVjdCB0Y3BoZHIgKilcbiBcdFx0XHRcdFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgbmhvZmYpO1xuIFxuK1x0XHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuIFx0XHRcdGRpZmYgPSBnZXRfY3N1bV9kaWZmKGlwNmgsIHApO1xuIFx0XHRcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXHUwMDI2dGgtXHUwMDNlY2hlY2ssIHNrYixcbiBcdFx0XHRcdFx0XHRcdGRpZmYsIHRydWUsIHRydWUpO1xuQEAgLTk2LDYgKzk3LDcgQEAgc3RhdGljIHZvaWQgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBuaG9mZik7XG4gXG4gXHRcdFx0aWYgKHVoLVx1MDAzZWNoZWNrIHx8IHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuK1x0XHRcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRcdFx0XHRkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTtcbiBcdFx0XHRcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXHUwMDI2dWgtXHUwMDNlY2hlY2ssIHNrYixcbiBcdFx0XHRcdFx0XHRcdFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XG5AQCAtMTEwLDYgKzExMiw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRzdHJ1Y3QgaWNtcDZoZHIgKmloID0gKHN0cnVjdCBpY21wNmhkciAqKVxuIFx0XHRcdFx0XHQoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBuaG9mZik7XG4gXG4rXHRcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRcdFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XG4gXHRcdFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2VfYnlfZGlmZihcdTAwMjZpaC1cdTAwM2VpY21wNl9ja3N1bSwgc2tiLFxuIFx0XHRcdFx0XHRcdFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XG5AQCAtMTUxLDYgKzE1NCw5IEBAIHZvaWQgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlsYV9wYXJhbXMgKnAsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuK1x0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4rXHRpYWRkciA9IGlsYV9hMmkoXHUwMDI2aXA2aC1cdTAwM2VkYWRkcik7XG4rXG4gXHQvKiBOb3cgY2hhbmdlIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi9cbiBcdGlhZGRyLVx1MDAzZWxvYyA9IHAtXHUwMDNlbG9jYXRvcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNzo1MDoyNC4wOTU3MDIzMTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDcxNTM3Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGluIG5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY2AuIEl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydGAgYW5kIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgdGhleSd2ZSBhZGRlZCBgaXA2aCA9IGlwdjZfaGRyKHNrYik7YCByaWdodCBiZWZvcmUgdGhlIGNhbGxzIHRvIGBnZXRfY3N1bV9kaWZmYCBpbiB0aGUgZm9ybWVyIGFuZCBiZWZvcmUgZ2V0dGluZyB0aGUgSUxBIGFkZHJlc3MgZnJvbSB0aGUgZGVzdGluYXRpb24gSVAgaW4gdGhlIGxhdHRlci5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHN0YWxlIHBvaW50ZXIgaXNzdWUuIFRoZXkncmUgcmUtYWNxdWlyaW5nIHRoZSBJUHY2IGhlYWRlciBwb2ludGVyLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgZWl0aGVyIGBwc2tiX21heV9wdWxsYCBvciBzb21lIG90aGVyIHNrYiBtYW5pcHVsYXRpb24gZnVuY3Rpb24gaXMgbGlrZWx5IGJlaW5nIGNhbGxlZCBpbiBiZXR3ZWVuLCB3aGljaCBjb3VsZCBpbnZhbGlkYXRlIG9yIG1vdmUgdGhlIG9yaWdpbmFsIGBpcDZoYCBwb2ludGVyLiBBbHRlcm5hdGl2ZWx5LCBwZXJoYXBzIHRoZSBvcmlnaW5hbCBgaXA2aGAganVzdCB3YXNuJ3QgYmVpbmcgY29ycmVjdGx5IHVwZGF0ZWQgYWZ0ZXIgc29tZSBvcGVyYXRpb24uXG5cbkkgbmVlZCB0byBkaXZlIGludG8gYGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnRgIGFuZCBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgIHRvIGNvbmZpcm0gd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBleGFjdCBsb2dpYyBhbmQgd2hlcmUgdGhleSdyZSBiZWluZyBjYWxsZWQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBidWcgYW5kIGhvdyB0aGlzIHBhdGNoIGZpeGVzIGl0LiBJdCdzIGltcG9ydGFudCB0byB2ZXJpZnkgaWYgdGhlcmUncyBhIHJlYWwtd29ybGQgc2NlbmFyaW8gd2hlcmUgdGhlIGluaXRpYWwgYGlwNmhgIGNvdWxkIGJlIGNvcnJ1cHRlZCBvciBnbyBzdGFsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjMxLjE2NzI0MjEwNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0NDc2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmM9NjQ9c3RhdGljIHZvaWQgaWxhX2NzdW1fZG9fbmV1dHJhbF9ub2ZtdChzdHJ1Y3QgaWxhX2FkZHIgKmlhZGRyLFxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYy03NC1cXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jOjc1OnN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTc2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbGFfcGFyYW1zICpwKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYz0xMjQ9dm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCxcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmMtMTMxLVxcdGNhc2UgSUxBX0NTVU1fQURKVVNUX1RSQU5TUE9SVDpcXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jOjEzMjpcXHRcXHRpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHNrYiwgcCk7XFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYy0xMzMtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjMxLjMwMjY5NTg5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzQwMTc4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIHByZXNlbnRlZCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggaXQgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJTEEgQ29kZSoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIElQdjYgSUxBIChJbnRlbGxpZ2VudCBMaW5rIEFnZ3JlZ2F0aW9uKSBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBpbGFfY29tbW9uLmNgIGZpbGUuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggbmV0d29ya2luZyBpbnRlcm5hbHMsIEknbGwgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIGV4YW1pbmUgdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDc1IGFuZCAxMjQgb2YgdGhhdCBmaWxlLiBNeSBodW5jaCBpcywgdGhlc2UgbG9jYXRpb25zIHdpbGwgcmV2ZWFsIHRoZSBjb3JlIGFzcGVjdHMgb2Ygd2hhdCdzIGJlaW5nIGRpc2N1c3NlZCAtIHdoYXRldmVyIHRoYXQgaXMgLSBpbiBncmVhdGVyIGRldGFpbC4gSSBleHBlY3QgdGhvc2UgbGluZXMgdG8gc2V0IHRoZSBzdGFnZSBmb3Igd2hhdGV2ZXIgcHJvYmxlbSBvciBmdW5jdGlvbiB0aGUgc25pcHBldCByZWZlcnMgdG8uIFdpdGggdGhhdCBjb250ZXh0LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTA6MzUuMTM2NzE2NDA1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdCAqL1xcbiAgNjE6XFx0XFx0aWFkZHItXFx1MDAzZWlkZW50LmNzdW1fbmV1dHJhbCBePSAxO1xcbiAgNjI6XFx0fVxcbiAgNjM6XFx0XFxuICA2NDpcXHRzdGF0aWMgdm9pZCBpbGFfY3N1bV9kb19uZXV0cmFsX25vZm10KHN0cnVjdCBpbGFfYWRkciAqaWFkZHIsXFxuICA2NTpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWxhX3BhcmFtcyAqcClcXG4gIDY2OlxcdHtcXG4gIDY3OlxcdFxcdF9fc3VtMTYgKmFkanVzdCA9IChfX2ZvcmNlIF9fc3VtMTYgKilcXHUwMDI2aWFkZHItXFx1MDAzZWlkZW50LnYxNlszXTtcXG4gIDY4OlxcdFxcdF9fd3N1bSBkaWZmO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRkaWZmID0gZ2V0X2NzdW1fZGlmZl9pYWRkcihpYWRkciwgcCk7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdCphZGp1c3QgPSB+Y3N1bV9mb2xkKGNzdW1fYWRkKGRpZmYsIGNzdW1fdW5mb2xkKCphZGp1c3QpKSk7XFxuICA3MzpcXHR9XFxuICA3NDpcXHRcXG4gIDc1OlxcdHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDc2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbGFfcGFyYW1zICpwKVxcbiAgNzc6XFx0e1xcbiAgNzg6XFx0XFx0c2l6ZV90IG5ob2ZmID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4gIDc5OlxcdFxcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTtcXG4gIDgwOlxcdFxcdF9fd3N1bSBkaWZmO1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRzd2l0Y2ggKGlwNmgtXFx1MDAzZW5leHRoZHIpIHtcXG4gIDgzOlxcdFxcdGNhc2UgTkVYVEhEUl9UQ1A6XFxuICA4NDpcXHRcXHRcXHRpZiAobGlrZWx5KHBza2JfbWF5X3B1bGwoc2tiLCBuaG9mZiArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSkpKSB7XFxuICA4NTpcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwaGRyICp0aCA9IChzdHJ1Y3QgdGNwaGRyICopXFxuICA4NjpcXHRcXHRcXHRcXHRcXHRcXHQoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBuaG9mZik7XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdFxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbiAgODk6XFx0XFx0XFx0XFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XFxuICA5MDpcXHRcXHRcXHRcXHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKFxcdTAwMjZ0aC1cXHUwMDNlY2hlY2ssIHNrYixcXG4gIDkxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRpZmYsIHRydWUsIHRydWUpO1xcbiAgOTI6XFx0XFx0XFx0fVxcbiAgOTM6XFx0XFx0XFx0YnJlYWs7XFxuICA5NDpcXHRcXHRjYXNlIE5FWFRIRFJfVURQOlxcbiAgOTU6XFx0XFx0XFx0aWYgKGxpa2VseShwc2tiX21heV9wdWxsKHNrYiwgbmhvZmYgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpKSkge1xcbiAgOTY6XFx0XFx0XFx0XFx0c3RydWN0IHVkcGhkciAqdWggPSAoc3RydWN0IHVkcGhkciAqKVxcbiAgOTc6XFx0XFx0XFx0XFx0XFx0XFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgbmhvZmYpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRcXHRcXHRpZiAodWgtXFx1MDAzZWNoZWNrIHx8IHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHtcXG4gMTAwOlxcdFxcdFxcdFxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbiAxMDE6XFx0XFx0XFx0XFx0XFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XFxuIDEwMjpcXHRcXHRcXHRcXHRcXHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKFxcdTAwMjZ1aC1cXHUwMDNlY2hlY2ssIHNrYixcXG4gMTAzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRpZmYsIHRydWUsIHRydWUpO1xcbiAxMDQ6XFx0XFx0XFx0XFx0XFx0aWYgKCF1aC1cXHUwMDNlY2hlY2spXFxuIDEwNTpcXHRcXHRcXHRcXHRcXHRcXHR1aC1cXHUwMDNlY2hlY2sgPSBDU1VNX01BTkdMRURfMDtcXG4gMTA2OlxcdFxcdFxcdFxcdH1cXG4gMTA3OlxcdFxcdFxcdH1cXG4gMTA4OlxcdFxcdFxcdGJyZWFrO1xcbiAxMDk6XFx0XFx0Y2FzZSBORVhUSERSX0lDTVA6XFxuIDExMDpcXHRcXHRcXHRpZiAobGlrZWx5KHBza2JfbWF5X3B1bGwoc2tiLFxcbiAxMTE6XFx0XFx0XFx0XFx0XFx0XFx0IG5ob2ZmICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcikpKSkge1xcbiAxMTI6XFx0XFx0XFx0XFx0c3RydWN0IGljbXA2aGRyICppaCA9IChzdHJ1Y3QgaWNtcDZoZHIgKilcXG4gMTEzOlxcdFxcdFxcdFxcdFxcdFxcdChza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG5ob2ZmKTtcXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0XFx0XFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuIDExNjpcXHRcXHRcXHRcXHRkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTtcXG4gMTE3OlxcdFxcdFxcdFxcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXFx1MDAyNmloLVxcdTAwM2VpY21wNl9ja3N1bSwgc2tiLFxcbiAxMTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XFxuIDExOTpcXHRcXHRcXHR9XFxuIDEyMDpcXHRcXHRcXHRicmVhaztcXG4gMTIxOlxcdFxcdH1cXG4gMTIyOlxcdH1cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0dm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCxcXG4gMTI1OlxcdFxcdFxcdFxcdCAgICAgYm9vbCBzaXIyaWxhKVxcbiAxMjY6XFx0e1xcbiAxMjc6XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xcbiAxMjg6XFx0XFx0c3RydWN0IGlsYV9hZGRyICppYWRkciA9IGlsYV9hMmkoXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyKTtcXG4gMTI5OlxcdFxcbiAxMzA6XFx0XFx0c3dpdGNoIChwLVxcdTAwM2Vjc3VtX21vZGUpIHtcXG4gMTMxOlxcdFxcdGNhc2UgSUxBX0NTVU1fQURKVVNUX1RSQU5TUE9SVDpcXG4gMTMyOlxcdFxcdFxcdGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc2tiLCBwKTtcXG4gMTMzOlxcdFxcdFxcdGJyZWFrO1xcbiAxMzQ6XFx0XFx0Y2FzZSBJTEFfQ1NVTV9ORVVUUkFMX01BUDpcXG4gMTM1OlxcdFxcdFxcdGlmIChzaXIyaWxhKSB7XFxuIDEzNjpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTihpbGFfY3N1bV9uZXV0cmFsX3NldChpYWRkci1cXHUwMDNlaWRlbnQpKSkge1xcbiAxMzc6XFx0XFx0XFx0XFx0XFx0LyogQ2hlY2tzdW0gZmxhZyBzaG91bGQgbmV2ZXIgYmVcXG4gMTM4OlxcdFxcdFxcdFxcdFxcdCAqIHNldCBpbiBhIGZvcm1hdHRlZCBTSVIgYWRkcmVzcy5cXG4gMTM5OlxcdFxcdFxcdFxcdFxcdCAqL1xcbiAxNDA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE0MTpcXHRcXHRcXHRcXHR9XFxuIDE0MjpcXHRcXHRcXHR9IGVsc2UgaWYgKCFpbGFfY3N1bV9uZXV0cmFsX3NldChpYWRkci1cXHUwMDNlaWRlbnQpKSB7XFxuIDE0MzpcXHRcXHRcXHRcXHQvKiBJTEEgdG8gU0lSIHRyYW5zbGF0aW9uIGFuZCBDLWJpdCBpc24ndFxcbiAxNDQ6XFx0XFx0XFx0XFx0ICogc2V0IHNvIHdlJ3JlIGdvb2QuXFxuIDE0NTpcXHRcXHRcXHRcXHQgKi9cXG4gMTQ2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDc6XFx0XFx0XFx0fVxcbiAxNDg6XFx0XFx0XFx0aWxhX2NzdW1fZG9fbmV1dHJhbF9mbXQoaWFkZHIsIHApO1xcbiAxNDk6XFx0XFx0XFx0YnJlYWs7XFxuIDE1MDpcXHRcXHRjYXNlIElMQV9DU1VNX05FVVRSQUxfTUFQX0FVVE86XFxuIDE1MTpcXHRcXHRcXHRpbGFfY3N1bV9kb19uZXV0cmFsX25vZm10KGlhZGRyLCBwKTtcXG4gMTUyOlxcdFxcdFxcdGJyZWFrO1xcbiAxNTM6XFx0XFx0Y2FzZSBJTEFfQ1NVTV9OT19BQ1RJT046XFxuIDE1NDpcXHRcXHRcXHRicmVhaztcXG4gMTU1OlxcdFxcdH1cXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuIDE1ODpcXHRcXHRpYWRkciA9IGlsYV9hMmkoXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyKTtcXG4gMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNzo1MDozNS4xMzY4NDE5MjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTU5MjE4NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIElQdjYgSGVhZGVyIFZ1bG5lcmFiaWxpdHkgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBjbG9zZXIgbG9vay4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0aGUgcHJvYmxlbSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgYHBza2JfbWF5X3B1bGxgIGNhbiByZWFsbG9jYXRlIHRoZSBgc2tiYCBkYXRhLiBUaGF0IG1lYW5zIHRoZSBwb2ludGVyIGBpcDZoID0gaXB2Nl9oZHIoc2tiKTtgIG1pZ2h0IGJlY29tZSBzdGFsZSBhZnRlciBhIGBwc2tiX21heV9wdWxsYCBjYWxsLiBUaGUgcGF0Y2ggc21hcnRseSByZS1ldmFsdWF0ZXMgYGlwNmhgIGFmdGVyIHRob3NlIGNhbGxzIHRvIGVuc3VyZSB3ZSdyZSBhbHdheXMgd29ya2luZyB3aXRoIGEgdmFsaWQgcG9pbnRlciB0byB0aGUgSVB2NiBoZWFkZXIuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBmaXguXG5cbk15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMsIFwiV2hhdCBjb25maWcgb3B0aW9ucyBlbmFibGUgdGhpcyBjb2RlIHBhdGg/XCIgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgY29uZmlndXJhdGlvbiB0byB0cmlnZ2VyIHRoaXMgdnVsbmVyYWJpbGl0eSwgc28gSSBjYW4gdGFyZ2V0IGl0IHByb3Blcmx5IGluIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIGZpbGUgbWVudGlvbmVkLCBgbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY2AsIGlzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGUgcmVsYXRlZCBNYWtlZmlsZXMsIGVpdGhlciBgbmV0L2lwdjYvaWxhL01ha2VmaWxlYCBvciBgbmV0L2lwdjYvTWFrZWZpbGVgLCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjbHVlcyBJIG5lZWQuIExldCdzIHNlZSBpZiB0aGUgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIGlmIHRoZXJlJ3MgYSBzcGVjaWZpYyBtb2R1bGUgdGhhdCBoYXMgdG8gYmUgbG9hZGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjQwLjY5NjA2MjQ2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkxNzExMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWxhX2NvbW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pbGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lsYS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUFY2X0lMQSkgKz0gaWxhLm9cXG5uZXQvaXB2Ni9pbGEvTWFrZWZpbGUtNy1cXG5uZXQvaXB2Ni9pbGEvTWFrZWZpbGU6ODppbGEtb2JqcyA6PSBpbGFfbWFpbi5vIGlsYV9jb21tb24ubyBpbGFfbHd0Lm8gaWxhX3hsYXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNzo1MDo0MC44MjUyMzk0NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM5Mzk3MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgdGV4dDpcblxuKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdGV4dCBzZWVtcyB0byBiZSBwb2ludGluZyBtZSB0b3dhcmRzIGBDT05GSUdfSVBWNl9JTEFgLiBSaWdodCwgSSBrbm93IHRoYXQgb25lIOKAkyBpdCdzIGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0IG9mIElQdjYgY29uZmlndXJhdGlvbiBpcyBjcnVjaWFsIGZvciB0aGlzIGtpbmQgb2Ygd29yay4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBiZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBDT05GSUdfSVBWNl9JTEFgLiBMZXQncyBzZWUgd2hhdCBlbHNlIGlzIG91dCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjQzLjg2NDYzOTg5MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMTAxMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X0lMQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0xMTI9Y29uZmlnIElQVjZfTUlQNlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNzo1MDo0NC4wMTQ3NDY1NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NTU3MTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHNvbWUgSVB2NiBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIEtjb25maWcgZmlsZSBmb3IgSVB2NiwgYW5kIGl0IGxvb2tzIGxpa2UgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmUgMTIwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGZlYXR1cmUncyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVzaWRlLCBzbyBJJ2xsIHN0YXJ0IHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBzZXR0aW5ncyBJIG5lZWQgdG8gcmV2aWV3LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSdyZSBpbnRlbmRlZCB0byB3b3JrLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTA6NDYuOTYwMzIwODM4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRoZWxwXFxuIDExNjpcXHRcXHQgIFN1cHBvcnQgZm9yIElQdjYgTW9iaWxpdHkgZGVzY3JpYmVkIGluIFJGQyAzNzc1LlxcbiAxMTc6XFx0XFxuIDExODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDExOTpcXHRcXG4gMTIwOlxcdGNvbmZpZyBJUFY2X0lMQVxcbiAxMjE6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbiAxMjI6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJcXG4gMTIzOlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMTI0OlxcdFxcdHNlbGVjdCBMV1RVTk5FTFxcbiAxMjU6XFx0XFx0aGVscFxcbiAxMjY6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHY2IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpLlxcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHQgIElMQSBpcyBhIG1lY2hhbmlzbSB0byBkbyBuZXR3b3JrIHZpcnR1YWxpemF0aW9uIHdpdGhvdXRcXG4gMTI5OlxcdFxcdCAgZW5jYXBzdWxhdGlvbi4gVGhlIGJhc2ljIGNvbmNlcHQgb2YgSUxBIGlzIHRoYXQgd2Ugc3BsaXQgYW5cXG4gMTMwOlxcdFxcdCAgSVB2NiBhZGRyZXNzIGludG8gYSA2NCBiaXQgbG9jYXRvciBhbmQgNjQgYml0IGlkZW50aWZpZXIuIFRoZVxcbiAxMzE6XFx0XFx0ICBpZGVudGlmaWVyIGlzIHRoZSBpZGVudGl0eSBvZiBhbiBlbnRpdHkgaW4gY29tbXVuaWNhdGlvblxcbiAxMzI6XFx0XFx0ICAoXFxcIndob1xcXCIpIGFuZCB0aGUgbG9jYXRvciBleHByZXNzZXMgdGhlIGxvY2F0aW9uIG9mIHRoZVxcbiAxMzM6XFx0XFx0ICBlbnRpdHkgKFxcXCJ3aGVyZVxcXCIpLlxcbiAxMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjQ2Ljk2MDQzODc4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTU0NjYxNDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWNl9JTEEgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBJUFY2X0lMQWAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gQW5kIGl0IHJlbGllcyBvbiBgTkVURklMVEVSYCwgc28gd2UgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcz9cblxuSXQgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb25zIGFyZSBjZW50ZXJlZCBhcm91bmQgYGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnRgIGFuZCBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgLiBUaGUgZmFjdCB0aGF0IGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCBpcyBzdGF0aWMgaXMgYSBiaXQgb2YgYSBodXJkbGUuIElmIGl0J3MgaW5saW5lZCwgZGlyZWN0bHkgZm9jdXNpbmcgb24gaXQgbWlnaHQgYmUgZGlmZmljdWx0LiBCdXQsIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAgaXMgc3RpbGwgYSB2YWxpZCBmdW5jdGlvbiB0byBmb2N1cyBvbi4gV2hlcmUgaXQncyBjYWxsZWQsIHRoYXQncyB3aGF0IEkgd2FudCB0byBzZWUuIExldCdzIHRyYWNlIHRob3NlIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjEyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTA6NTEuNTE1MTAyODc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI4NTA4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaWxhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pbGEvaWxhLmg9ODg9c3RhdGljIGlubGluZSBib29sIGlsYV9jc3VtX25ldXRyYWxfc2V0KHN0cnVjdCBpbGFfaWRlbnRpZmllciBpZGVudClcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGEuaC05Mi1cXG5uZXQvaXB2Ni9pbGEvaWxhLmg6OTM6dm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCxcXG5uZXQvaXB2Ni9pbGEvaWxhLmgtOTQtXFx0XFx0XFx0ICAgICBib29sIHNldF9jc3VtX25ldXRyYWwpO1xcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYz03NT1zdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEyMy1cXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jOjEyNDp2b2lkIGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbGFfcGFyYW1zICpwLFxcbm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmMtMTI1LVxcdFxcdFxcdCAgICAgYm9vbCBzaXIyaWxhKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0zOD1zdGF0aWMgaW50IGlsYV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTQ5LVxcdGlmIChpbHd0LVxcdTAwM2Vsd3Rfb3V0cHV0KVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6NTA6XFx0XFx0aWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3Ioc2tiLFxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtNTEtXFx0XFx0XFx0XFx0XFx0aWxhX3BhcmFtc19sd3R1bm5lbChvcmlnX2RzdC1cXHUwMDNlbHd0c3RhdGUpLFxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0xMDg9c3RhdGljIGludCBpbGFfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMTE2LVxcdGlmICghaWx3dC1cXHUwMDNlbHd0X291dHB1dClcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjExNzpcXHRcXHRpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihza2IsXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMTgtXFx0XFx0XFx0XFx0XFx0aWxhX3BhcmFtc19sd3R1bm5lbChkc3QtXFx1MDAzZWx3dHN0YXRlKSxcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jPTY0MT1zdGF0aWMgaW50IGlsYV94bGF0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzaXIyaWxhKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNjU5LVxcdGlmIChpbGEpXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6NjYwOlxcdFxcdGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHNrYiwgXFx1MDAyNmlsYS1cXHUwMDNleHAuaXAsIHNpcjJpbGEpO1xcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTY2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTA6NTEuNjY3OTU4NzQxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Mjk1ODAwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSVB2NiBMb2NhdG9yIFVwZGF0ZXMqKlxuXG5Pa2F5LCBzbyBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBgaWxhX291dHB1dGAsIGBpbGFfaW5wdXRgLCBhbmQgYGlsYV94bGF0X2FkZHJgLiBHaXZlbiB0aGF0LCB0aG9zZSB0aHJlZSBhcmUgdGhlIG9idmlvdXMgcGxhY2VzIHRvIHN0YXJ0IGRpZ2dpbmcuIExldCdzIG1ha2Ugc3VyZSB3ZSBleGFtaW5lIHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucy5cblxuQSBxdWljayBzY2FuIHNob3dzIHRoYXQgYGlsYV9vdXRwdXRgIGFuZCBgaWxhX2lucHV0YCBhcmUgcmVsYXRlZCB0byB0aGUgTGlnaHQgV2VpZ2h0IFR1bm5lbCAoTFdUKSBob29rcywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbiBwb2ludHMuIE1lYW53aGlsZSwgYGlsYV94bGF0X2FkZHJgIGlzIGEgbmV0ZmlsdGVyIGhvb2suIFRoYXQgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uLlxuXG5SaWdodCwgYGlsYV94bGF0X2FkZHJgLCBuZXRmaWx0ZXIgaG9vaywgYWRkcmVzcyB0cmFuc2xhdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IHBsYWNlIHRvIGxvb2sgZmlyc3QsIHNvIGxldCdzIGhlYWQgb3ZlciB0byBgbmV0L2lwdjYvaWxhL2lsYV94bGF0LmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjA2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjU2LjE5NzU0MTA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzEzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaWxhL2lsYV94bGF0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM1OlxcdFxcbiA2MzY6XFx0XFx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFxcdTAwMjZpbGFuLVxcdTAwM2V4bGF0LnJoYXNoX3RhYmxlLCBpbGFfZnJlZV9jYiwgTlVMTCk7XFxuIDYzNzpcXHRcXG4gNjM4OlxcdFxcdGZyZWVfYnVja2V0X3NwaW5sb2NrcyhpbGFuLVxcdTAwM2V4bGF0LmxvY2tzKTtcXG4gNjM5OlxcdH1cXG4gNjQwOlxcdFxcbiA2NDE6XFx0c3RhdGljIGludCBpbGFfeGxhdF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc2lyMmlsYSlcXG4gNjQyOlxcdHtcXG4gNjQzOlxcdFxcdHN0cnVjdCBpbGFfbWFwICppbGE7XFxuIDY0NDpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuIDY0NTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gNjQ2OlxcdFxcdHN0cnVjdCBpbGFfbmV0ICppbGFuID0gbmV0X2dlbmVyaWMobmV0LCBpbGFfbmV0X2lkKTtcXG4gNjQ3OlxcdFxcdHN0cnVjdCBpbGFfYWRkciAqaWFkZHIgPSBpbGFfYTJpKFxcdTAwMjZpcDZoLVxcdTAwM2VkYWRkcik7XFxuIDY0ODpcXHRcXG4gNjQ5OlxcdFxcdC8qIEFzc3VtZXMgc2tiIGNvbnRhaW5zIGEgdmFsaWQgSVB2NiBoZWFkZXIgdGhhdCBpcyBwdWxsZWQgKi9cXG4gNjUwOlxcdFxcbiA2NTE6XFx0XFx0LyogTm8gY2hlY2sgaGVyZSB0aGF0IElMQSB0eXBlIGluIHRoZSBtYXBwaW5nIG1hdGNoZXMgd2hhdCBpcyBpbiB0aGVcXG4gNjUyOlxcdFxcdCAqIGFkZHJlc3MuIFdlIGFzc3VtZSB0aGF0IHdoYXRldmVyIHNlbmRlciBnYXZlcyB1cyBjYW4gYmUgdHJhbnNsYXRlZC5cXG4gNjUzOlxcdFxcdCAqIFRoZSBjaGVja3N1bSBtb2RlIGhvd2V2ZXIgaXMgcmVsZXZhbnQuXFxuIDY1NDpcXHRcXHQgKi9cXG4gNjU1OlxcdFxcbiA2NTY6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA2NTc6XFx0XFxuIDY1ODpcXHRcXHRpbGEgPSBpbGFfbG9va3VwX3dpbGRjYXJkcyhpYWRkciwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsIGlsYW4pO1xcbiA2NTk6XFx0XFx0aWYgKGlsYSlcXG4gNjYwOlxcdFxcdFxcdGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHNrYiwgXFx1MDAyNmlsYS1cXHUwMDNleHAuaXAsIHNpcjJpbGEpO1xcbiA2NjE6XFx0XFxuIDY2MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNjYzOlxcdFxcbiA2NjQ6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjU2LjE5OTcxNTcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzUwNDAyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgaWxhX3hsYXRfYWRkcmAqKlxuXG5Pa2F5LCBzbyBgaWxhX3hsYXRfYWRkcmAgaXMgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzLiBUaGF0J3MgZ29vZDsgbm8gZ2xvYmFsIG5hbWVzcGFjZSBwb2xsdXRpb24gdG8gd29ycnkgYWJvdXQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uIEknbGwgc3RhcnQgYnkgdHJhY2luZyBpdHMgaW52b2NhdGlvbnMuIEtub3dpbmcgdGhlIGNvbnRleHRzIG9mIHRob3NlIGNhbGxzIHdpbGwgYmUgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgbW9kaWZ5aW5nIGl0LiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBwYXNzZWQ/IEFyZSBhbnkgb2YgdGhvc2Ugdm9sYXRpbGUgb3Igc2hhcmVkPyBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIGlmIGFueSBpbmxpbmUgYXNzZW1ibHkgaXMgdXNlZCBpbiBpdHMgdXNlIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjAwLjEzNDc1ODQ0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTI5NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlsYV94bGF0X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaWxhL2lsYV94bGF0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9MTczPXN0YXRpYyB2b2lkIGlsYV9mcmVlX2NiKHZvaWQgKnB0ciwgdm9pZCAqYXJnKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTc3LVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjE3ODpzdGF0aWMgaW50IGlsYV94bGF0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzaXIyaWxhKTtcXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xNzktXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz0xODE9aWxhX25mX2lucHV0KHZvaWQgKnByaXYsXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xODQte1xcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjE4NTpcXHRpbGFfeGxhdF9hZGRyKHNrYiwgZmFsc2UpO1xcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE4Ni1cXHRyZXR1cm4gTkZfQUNDRVBUO1xcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9NjMyPXZvaWQgaWxhX3hsYXRfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNjQwLVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjY0MTpzdGF0aWMgaW50IGlsYV94bGF0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzaXIyaWxhKVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTY0Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjAwLjI2MjY5NDY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODI2MTQwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBpbGFfbmZfaW5wdXRgKipcblxuT2theSwgSSdtIHRyYWNpbmcgdGhpcyBleGVjdXRpb24gYW5kIEkgc2VlIGl0J3Mgb3JpZ2luYXRpbmcgZnJvbSBgaWxhX25mX2lucHV0YC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icy4gU28sIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBpbGFfbmZfaW5wdXRgLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGlucHV0cywgaXRzIHByb2Nlc3NpbmcgbG9naWMsIGFuZCBlc3BlY2lhbGx5IHdoYXQgZGF0YSBpdCdzIGZlZWRpbmcgaW50byB0aGUgc3Vic2VxdWVudCBmdW5jdGlvbnMuIFRoaXMgbG9va3MgbGlrZSBhIGNyaXRpY2FsIHBvaW50IHdoZXJlIHNvbWV0aGluZyBpcyBnZXR0aW5nIGluaXRpYWxpemVkIG9yIHByZXBhcmVkLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjAzLjM0NTMxMTgxN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDk3OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlsYV9uZl9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz0xODA9c3RhdGljIHVuc2lnbmVkIGludFxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjE4MTppbGFfbmZfaW5wdXQodm9pZCAqcHJpdixcXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xODItXFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9MTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaWxhX25mX2hvb2tfb3BzW10gPSB7XFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTkwLVxcdHtcXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzoxOTE6XFx0XFx0Lmhvb2sgPSBpbGFfbmZfaW5wdXQsXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTkyLVxcdFxcdC5wZiA9IE5GUFJPVE9fSVBWNixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MDMuNDkwODE2NjA1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDQ3OTI0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBuZXR3b3JrIHN0YWNrIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEhvb2s6IElsYV9uZl9pbnB1dCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgaWxhX25mX2lucHV0YC4gT2theSwgc28sIHRoaXMgaXMgYSBuZXRmaWx0ZXIgaG9vay4gVGhhdCdzIGdvb2QgY29udGV4dCB0byBzdGFydCB3aXRoLCBJIGtub3cgaG93IG5ldGZpbHRlciB3b3Jrcywgc28gSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgaW1tZWRpYXRlbHkuIEl0J3MgYW4gZW50cnkgcG9pbnQgZm9yIHByb2Nlc3NpbmcgcGFja2V0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIGludGVyYWN0cyB3aXRoIHRoaXMgZnVuY3Rpb24uIEFoYSwgSSBzZWUgaW4gdGhlIGNhbGwgZ3JhcGggdGhhdCBvdGhlciBjYWxsZXJzIGluY2x1ZGUgYGlsYV9vdXRwdXRgIGFuZCBgaWxhX2lucHV0YC4gQW5kIHRob3NlIGxpdmUgaW4gYG5ldC9pcHY2L2lsYS9pbGFfbHd0LmNgLiBPa2F5LCBub3cgSSBoYXZlIGEgbXVjaCBiZXR0ZXIgcGljdHVyZS4gVGhpcyBsaWtlbHkgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGFuIEludGVybWVkaWF0ZSBMaW5rIEFkZHJlc3MgKElMQSkgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIG5ldGZpbHRlciBmb3IgcGFja2V0IG1hbmlwdWxhdGlvbiwgYW5kIHRoZSBgbHd0YCAobGlnaHR3ZWlnaHQgdHVubmVsKSBhc3BlY3QgaXMgaGFuZGxpbmcgdGhlIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24sIG9yIG90aGVyIG1hbmlwdWxhdGlvbiwgb2YgdGhlIElQIHBhY2tldHMuIFRoZSBgaW5wdXRgIGFuZCBgb3V0cHV0YCBjYWxscyBzdWdnZXN0IHRoYXQgdGhpcyBuZXRmaWx0ZXIgaG9vayBgaWxhX25mX2lucHV0YCBpcyBiZWluZyB1c2VkIHRvIGRlYWwgd2l0aCBwYWNrZXRzIGNvbWluZyBpbiBmcm9tIHRoZSBuZXR3b3JrLCBhbmQgdGhlIGBpbGFfbHd0YCBjYWxscyBhcmUgZGVhbGluZyB3aXRoIHBhY2tldHMgb24gdGhlIGxvY2FsIGhvc3QuIEknbSBzdGFydGluZyB0byBnZXQgYSBnb29kIHNlbnNlIG9mIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlciwgYW5kIHRoZSBkaXJlY3Rpb24gSSBuZWVkIHRvIHN0YXJ0IG15IGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjA3LjgzNTYxMzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjA3NzY5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbGFfb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lsYS9pbGFfbHd0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0zMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbGFfcGFyYW1zICppbGFfcGFyYW1zX2x3dHVubmVsKFxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zNy1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjM4OnN0YXRpYyBpbnQgaWxhX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTM5LXtcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlsYV9lbmNhcF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTMxNS1cXHQuZGVzdHJveV9zdGF0ZSA9IGlsYV9kZXN0cm95X3N0YXRlLFxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MzE2OlxcdC5vdXRwdXQgPSBpbGFfb3V0cHV0LFxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzE3LVxcdC5pbnB1dCA9IGlsYV9pbnB1dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MDguMDE3Njk2NzE0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzcyNTQxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBMV1R1bm5lbCBFbmNhcHN1bGF0aW9uIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBpbGFfb3V0cHV0YCBhbmQgYGlsYV9pbnB1dGAuIFJpZ2h0LCB0aG9zZSBhcmUgY2xlYXJseSBpbnZvbHZlZCBpbiBMV1R1bm5lbCBlbmNhcHN1bGF0aW9uIG9wZXJhdGlvbnMuIE1ha2VzIHNlbnNlLiBJIGNhbiBwcm9iYWJseSBuYXJyb3cgbXkgZm9jdXMgdG8gYGlsYV9uZl9pbnB1dGAsIGBpbGFfb3V0cHV0YCwgYW5kIGBpbGFfaW5wdXRgIGZvciB0aGUgbW9tZW50OyB0aG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGJpdHMuIEhvbGQgb24gYSBzZWNvbmQuLi4gYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCBpcyAqZXhwb3J0ZWQqPyBUaGF04oCZcyBhIGJpdCB1bnVzdWFsIGZvciB0aGlzIHR5cGUgb2YgaW50ZXJuYWwgZnVuY3Rpb24uIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIGV4YWN0bHkgaG93IGFuZCB3aGVyZSB0aGF0J3MgYmVpbmcgZXhwb3NlZCwgc2luY2UgdGhhdCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3Igc2VjdXJpdHkgb3IgZGVzaWduLiBHb3R0YSBpbnZlc3RpZ2F0ZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njk0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MTEuNDk0OTUzMzE2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NTU2MTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lsYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjExLjYyNzcyMTMyNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzExNDMyNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBSZWZpbmVtZW50IGZvciBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gcmV2aXNpdGluZyB0aGlzIGZvY3VzIHN5bWJvbCBidXNpbmVzcyBmb3Igc3l6a2FsbGVyLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gemVyb2luZyBpbiBvbiB0aGUgcmlnaHQgZnVuY3Rpb25zLiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IHNpbmNlIHNvbWV0aGluZyB3YXNuJ3QgZXhwb3J0ZWQsIHRoYXQgaXQgd2FzIGluYWNjZXNzaWJsZSwgYnV0IHRoYXQncyBub3QgdGhlIGNhc2UgaWYgdGhlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIHNhbWUgbW9kdWxlLlxuXG5NeSBmaXJzdCB0aG91Z2h0IHdhcyBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgLiBJIHJlbWVtYmVyIHRoYXQncyBkZWZpbmVkIGluIGBpbGFfY29tbW9uLmNgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCwganVzdCB0byBiZSBjZXJ0YWluLiBBaCwgeWVzLCBgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydGAgaXMgc3RhdGljLCBhbHNvIGluIGBpbGFfY29tbW9uLmNgLlxuXG5SaWdodCwgbXkgb3JpZ2luYWwgY2FuZGlkYXRlcyBmb3IgZm9jdXMgd2VyZSBgaWxhX25mX2lucHV0YCwgYGlsYV9vdXRwdXRgLCBhbmQgYGlsYV9pbnB1dGAuIEhhbmcgb24sIHRob3VnaC4gV2VyZW4ndCBgaWxhX291dHB1dGAgYW5kIGBpbGFfaW5wdXRgIHN0YXRpYyBpbiBgaWxhX2x3dC5jYD8gVGhhdCdzIHJpZ2h0LiBUaGUgcXVlc3Rpb24gaXMgY2FuIHN5emthbGxlciBldmVuIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnM/IFllcywgdGhhdCdzIHJpZ2h0LCBzeXprYWxsZXIgdXRpbGl6ZXMgZnVuY3Rpb24gbmFtZXMgYXMgdGhlIHByaW1hcnkgZm9jdXMgbWVjaGFuaXNtLCBzbyBpdCdzIG5vdCBhIHByb2JsZW0uXG5cbkhtbSwgYGlsYV9uZl9pbnB1dGAgaXMgc3RhdGljIGFzIHdlbGwuIEknZCBiZXR0ZXIgYmUgdGhvcm91Z2ggYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWwgY2FuZGlkYXRlcy5cblxuYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCBpcyAqbm90KiBzdGF0aWMsIGFuZCBpdCdzIGluIGBpbGFfY29tbW9uLmNgLiBJIGNhbiBmb2N1cyBvbiB0aGF0IGRpcmVjdGx5LiBBY3R1YWxseSwgSSB0aGluayBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgIHdvdWxkIGJlIGEgZ3JlYXQgZm9jdXMgc3ltYm9sLlxuXG5MZXQncyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gSSBuZWVkIHRvIG1ha2UgY2VydGFpbiBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEdvaW5nIGJhY2sgdG8gYGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnRgLCBpdCdzIHN0YXRpYywgYnV0IEkgcmVtZW1iZXIgdGhhdCB0aGF0IHdhcyB0aGUgb25lIHRoYXQgd2FzIGZpeGVkIGVhcmxpZXIsIHNvIHRoYXQgZnVuY3Rpb24gY291bGQgYmUgYW4gYXBwcm9wcmlhdGUgYWRkaXRpb24uXG5cblNpbmNlIHN5emthbGxlciB1c2VzIGZ1bmN0aW9uIG5hbWVzIGZvciBmb2N1c2luZywgSSBjYW4gc2ltcGx5IGFkZCB0aGVtIHRvIHRoZSBmb2N1cyBsaXN0LiBMZXQncyBhZGQgYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCwgYGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnRgLCBgaWxhX25mX2lucHV0YCwgYGlsYV9vdXRwdXRgLCBhbmQgYGlsYV9pbnB1dGAuXG5cblRoZSBsYXN0IHRoaW5nIHRvIGNoZWNrIGlzIHRoYXQgYGlsYV9vdXRwdXRgIGFuZCBgaWxhX2lucHV0YCBhcmUgYSBsaXR0bGUgZ2VuZXJpYywgc28gaXQncyB3b3J0aCBzZWVpbmcgaWYgdGhvc2Ugc3ltYm9sIG5hbWVzIGNsYXNoLiBUaGVyZSBtaWdodCBiZSBzb21lIG90aGVyIGBpbGFfb3V0cHV0YCBvciBgaWxhX2lucHV0YCBzb21ld2hlcmUuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gdmVyaWZ5IHRoYXQgdGhlIG5hbWVzIGFyZSB1bmlxdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MTguOTM5MTU2OTM3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODg2Njk5MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlsYV9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWxhX3BhcmFtcyAqaWxhX3BhcmFtc19sd3R1bm5lbChcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzctXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzozODpzdGF0aWMgaW50IGlsYV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zOS17XFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTMxMz1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpbGFfZW5jYXBfb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMTUtXFx0LmRlc3Ryb3lfc3RhdGUgPSBpbGFfZGVzdHJveV9zdGF0ZSxcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjMxNjpcXHQub3V0cHV0ID0gaWxhX291dHB1dCxcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTMxNy1cXHQuaW5wdXQgPSBpbGFfaW5wdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjI0LjgyNTg3NjM3NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzODM4NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIGEgS2V5IENvbnNpZGVyYXRpb24qKlxuXG5ZZXMsIHRoaXMgc2l0dWF0aW9uIGlzIGluZGVlZCB1bmlxdWUuIEl0IHByZXNlbnRzIGEgc3BlY2lmaWMgc2V0IG9mIGNpcmN1bXN0YW5jZXMgdGhhdCBJIGhhdmVuJ3QgZGlyZWN0bHkgZW5jb3VudGVyZWQgYmVmb3JlLCBhdCBsZWFzdCBub3QgaW4gdGhpcyBleGFjdCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcG9zaXRpdmUsIGhvd2V2ZXIsIEkgd2FudCB0byBleHBsb3JlIGNlcnRhaW4gY29uc2lkZXJhdGlvbnMgYmVmb3JlIGdvaW5nIGZ1cnRoZXIuIE15IGludHVpdGlvbiBpcyB0aGF0IHRoaXMgaXMgdW51c3VhbCwgYW5kIHdhcnJhbnRzIGEgZnVsbCByZXZpZXcuXG5cblRoZSBwcmltYXJ5IGFyZWEgdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMgdGhlIGBpbGFfaW5wdXRgIHZhcmlhYmxlIG9yIGZ1bmN0aW9uLiBXaGF0IGlzIHRoZSBhcmNoaXRlY3R1cmUgaGVyZT8gSXMgdGhpcyB0aGUgcmlnaHQgY29udGV4dD8gVGhpcyBzZWVtcyBsaWtlIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiBteSB0aG91Z2h0IHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgaXRzIGNoYXJhY3RlcmlzdGljcywgaW50ZXJhY3Rpb25zLCBhbmQgcG90ZW50aWFsIGltcGFjdCBpcyB2aXRhbCBiZWZvcmUgSSBjYW4gZm9ybXVsYXRlIGEgc29saWQgY29uY2x1c2lvbiBvciByZWNvbW1lbmQgYSBjb3Vyc2Ugb2YgYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjI3Ljg0OTcxNzc2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MTQ2Nzk5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbGFfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9Mzg9c3RhdGljIGludCBpbGFfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMDctXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzoxMDg6c3RhdGljIGludCBpbGFfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTEwOS17XFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTMxMz1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpbGFfZW5jYXBfb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMTYtXFx0Lm91dHB1dCA9IGlsYV9vdXRwdXQsXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzozMTc6XFx0LmlucHV0ID0gaWxhX2lucHV0LFxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzE4LVxcdC5maWxsX2VuY2FwID0gaWxhX2ZpbGxfZW5jYXBfaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MzIuMjExMTkwNzUyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NjE5MzU0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ29uc2lkZXJpbmcgVW5pcXVlbmVzcyBhbmQgQWRkcmVzcyBUcmFuc2xhdGlvbioqXG5cblllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBuZXcsIHNvbWV0aGluZyBzcGVjaWFsLiBCdXQsIHdhaXQuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgcGllY2VzLiBXaGF0IGFib3V0IGBpbGFfeGxhdF9hZGRyYD8gSG93IGRvZXMgdGhhdCBmaXQgaW50byB0aGlzIHBpY3R1cmU/IEkgaGF2ZSB0byBhbmFseXplIGhvdyB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIHJlbGF0ZXMgdG8gdGhlIG92ZXJhbGwgaWRlYSBvZiB1bmlxdWVuZXNzLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjM0Ljc3MzEzMDI3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NTc3Njk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbGFfeGxhdF9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz0xNzM9c3RhdGljIHZvaWQgaWxhX2ZyZWVfY2Iodm9pZCAqcHRyLCB2b2lkICphcmcpXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xNzctXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6MTc4OnN0YXRpYyBpbnQgaWxhX3hsYXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHNpcjJpbGEpO1xcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE3OS1cXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jPTE4MT1pbGFfbmZfaW5wdXQodm9pZCAqcHJpdixcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE4NC17XFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6MTg1OlxcdGlsYV94bGF0X2FkZHIoc2tiLCBmYWxzZSk7XFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTg2LVxcdHJldHVybiBORl9BQ0NFUFQ7XFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz02MzI9dm9pZCBpbGFfeGxhdF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy02NDAtXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6NjQxOnN0YXRpYyBpbnQgaWxhX3hsYXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHNpcjJpbGEpXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNjQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MzkuMTM4OTEzNDM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5Mjc2MDAwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJ3ZlIGdvdCBhIGZ1bmN0aW9uYWwgZml4IGhlcmUgcmVsYXRlZCB0byBJUHY2IElMQSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWUuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgd2FzIHZ1bG5lcmFibGUgdG8gYSB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIGNvcnJ1cHRpb24gc2NlbmFyaW8uIFRoZSB2dWxuZXJhYmlsaXR5IG9jY3VycyB3aGVuIGBwc2tiX21heV9wdWxsKClgIHJlYWxsb2NhdGVzIHRoZSBzb2NrZXQgYnVmZmVyLCB3aGljaCBpbnZhbGlkYXRlcyB0aGUgYGlwNmhgIHBvaW50ZXIgdXNlZCBmb3IgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGFuZCBsb2NhdG9yIHVwZGF0ZXMuIFRoZSBwYXRjaCByZXNvbHZlcyB0aGlzIGJ5IHJlLWZldGNoaW5nIHRoZSBgaXA2aGAgcG9pbnRlciBhZnRlciB0aGUgcG90ZW50aWFsIHJlYWxsb2NhdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwgYXZvaWRpbmcgYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydGAgYW5kIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAgYXJlIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBvbmVzIGJlaW5nIG1vZGlmaWVkIHRvIHByZXZlbnQgdGhlIGVycm9yLiBUaGUgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBpbGFfeGxhdF9hZGRyYCwgYGlsYV9uZl9pbnB1dGAsIGBpbGFfb3V0cHV0YCwgYW5kIGBpbGFfaW5wdXRgLCBsb29rIGxpa2UgY2FsbGVycyBvZiB0aGUgZml4ZWQgZnVuY3Rpb25zLiBXZSBzaG91bGQgaW5jbHVkZSB0aG9zZSBpbiBvdXIgZnV6emluZyB0YXJnZXQgbGlzdCBhcyB3ZWxsLCB0byBoZWxwIHRoZSBmdXp6ZXIgZXhwbG9yZSB0aGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5Ob3csIGxldCdzIGp1c3QgcXVpY2tseSBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgbWFpbiBvbmUgYXBwZWFycyB0byBiZSBgSVBWNl9JTEFgLiBCdXQsIGxldCdzIHNlZSwgZG9lcyBpdCByZXF1aXJlIGFueXRoaW5nIGVsc2U/IE9rYXksIGBJUFY2X0lMQWAgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgYW5kIGl0IHNlbGVjdHMgYERTVF9DQUNIRWAgYW5kIGBMV1RVTk5FTGAuIFNvLCBhcyBsb25nIGFzIGBJUFY2X0lMQWAgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkIGJlIGdvb2QgdG8gZ28uXG5cblRoaXMgZml4IGlzIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCwgcmVhY2hhYmxlIG5ldHdvcmsgbG9naWMsIGFuZCBhZGRyZXNzZXMgYSBjbGVhciBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdHkuIFRoYXQgbWFrZXMgdGhpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gc2V0IHRoZXNlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwOCwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6NDkuMDY2NTE1ODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI4MTU2NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfSUxBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydFwiLFxuICAgIFwiaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JcIixcbiAgICBcImlsYV94bGF0X2FkZHJcIixcbiAgICBcImlsYV9uZl9pbnB1dFwiLFxuICAgIFwiaWxhX291dHB1dFwiLFxuICAgIFwiaWxhX2lucHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgd2hlcmUgdGhlIGBpcDZoYCBwb2ludGVyIGJlY29tZXMgaW52YWxpZCBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsKClgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBSZS1mZXRjaGluZyB0aGUgcG9pbnRlciB2aWEgYGlwdjZfaGRyKHNrYilgIGVuc3VyZXMgdGhlIGNvcnJlY3QgbWVtb3J5IGFkZHJlc3MgaXMgdXNlZCBmb3IgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGFuZCBsb2NhdG9yIHVwZGF0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIGxvZ2ljIChJUHY2IElMQSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9JTEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0XCIsXG4gICAgXCJpbGFfdXBkYXRlX2lwdjZfbG9jYXRvclwiLFxuICAgIFwiaWxhX3hsYXRfYWRkclwiLFxuICAgIFwiaWxhX25mX2lucHV0XCIsXG4gICAgXCJpbGFfb3V0cHV0XCIsXG4gICAgXCJpbGFfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSB3aGVyZSB0aGUgYGlwNmhgIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGwoKWAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBzb2NrZXQgYnVmZmVyIGRhdGEuIFJlLWZldGNoaW5nIHRoZSBwb2ludGVyIHZpYSBgaXB2Nl9oZHIoc2tiKWAgZW5zdXJlcyB0aGUgY29ycmVjdCBtZW1vcnkgYWRkcmVzcyBpcyB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMgKElQdjYgSUxBKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow57szv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-12 07:28:45 +0000 UTC FinishedAt: 2026-07-12 07:51:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_ILA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_ILA" ], "series_id": "1ecf4ed4-b7d6-45ba-b005-84348f71cd80" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ila_csum_adjust_transport", "ila_update_ipv6_locator", "ila_xlat_addr", "ila_nf_input", "ila_output", "ila_input" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfSUxBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDtpbGFfdXBkYXRlX2lwdjZfbG9jYXRvciYjMzQ7LAogICAgJiMzNDtpbGFfeGxhdF9hZGRyJiMzNDssCiAgICAmIzM0O2lsYV9uZl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpbGFfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lsYV9pbnB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSB3aGVyZSB0aGUgYGlwNmhgIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGwoKWAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBzb2NrZXQgYnVmZmVyIGRhdGEuIFJlLWZldGNoaW5nIHRoZSBwb2ludGVyIHZpYSBgaXB2Nl9oZHIoc2tiKWAgZW5zdXJlcyB0aGUgY29ycmVjdCBtZW1vcnkgYWRkcmVzcyBpcyB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMgKElQdjYgSUxBKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyYmZmMzhhMzBiOWRhMWJiMzg2ZTM2ZThjOTY3MmI4OTYyNzllYTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAwNzo1MDoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jIGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuaW5kZXggZTcxNTcxNDU1YzhhMGEuLmFjZWRjNWE4NGU0ZDczIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuQEAgLTg1LDYgJiM0Mzs4NSw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRzdHJ1Y3QgdGNwaGRyICp0aCA9IChzdHJ1Y3QgdGNwaGRyICopXG4gXHRcdFx0XHRcdChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBuaG9mZik7XG4gXG4mIzQzO1x0XHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuIFx0XHRcdGRpZmYgPSBnZXRfY3N1bV9kaWZmKGlwNmgsIHApO1xuIFx0XHRcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXHUwMDI2dGgtXHUwMDNlY2hlY2ssIHNrYixcbiBcdFx0XHRcdFx0XHRcdGRpZmYsIHRydWUsIHRydWUpO1xuQEAgLTk2LDYgJiM0Mzs5Nyw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG5ob2ZmKTtcbiBcbiBcdFx0XHRpZiAodWgtXHUwMDNlY2hlY2sgfHwgc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4mIzQzO1x0XHRcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRcdFx0XHRkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTtcbiBcdFx0XHRcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXHUwMDI2dWgtXHUwMDNlY2hlY2ssIHNrYixcbiBcdFx0XHRcdFx0XHRcdFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XG5AQCAtMTEwLDYgJiM0MzsxMTIsNyBAQCBzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0c3RydWN0IGljbXA2aGRyICppaCA9IChzdHJ1Y3QgaWNtcDZoZHIgKilcbiBcdFx0XHRcdFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG5ob2ZmKTtcbiBcbiYjNDM7XHRcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRcdFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XG4gXHRcdFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2VfYnlfZGlmZihcdTAwMjZpaC1cdTAwM2VpY21wNl9ja3N1bSwgc2tiLFxuIFx0XHRcdFx0XHRcdFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XG5AQCAtMTUxLDYgJiM0MzsxNTQsOSBAQCB2b2lkIGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbGFfcGFyYW1zICpwLFxuIFx0XHRicmVhaztcbiBcdH1cbiBcbiYjNDM7XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiYjNDM7XHRpYWRkciA9IGlsYV9hMmkoXHUwMDI2aXA2aC1cdTAwM2VkYWRkcik7XG4mIzQzO1xuIFx0LyogTm93IGNoYW5nZSBkZXN0aW5hdGlvbiBhZGRyZXNzICovXG4gXHRpYWRkci1cdTAwM2Vsb2MgPSBwLVx1MDAzZWxvY2F0b3I7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfSUxBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDtpbGFfdXBkYXRlX2lwdjZfbG9jYXRvciYjMzQ7LAogICAgJiMzNDtpbGFfeGxhdF9hZGRyJiMzNDssCiAgICAmIzM0O2lsYV9uZl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpbGFfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lsYV9pbnB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSB3aGVyZSB0aGUgYGlwNmhgIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGwoKWAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBzb2NrZXQgYnVmZmVyIGRhdGEuIFJlLWZldGNoaW5nIHRoZSBwb2ludGVyIHZpYSBgaXB2Nl9oZHIoc2tiKWAgZW5zdXJlcyB0aGUgY29ycmVjdCBtZW1vcnkgYWRkcmVzcyBpcyB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMgKElQdjYgSUxBKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJiZmYzOGEzMGI5ZGExYmIzODZlMzZlOGM5NjcyYjg5NjI3OWVhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDA3OjUwOjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYyBiL25ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmMKaW5kZXggZTcxNTcxNDU1YzhhMGEuLmFjZWRjNWE4NGU0ZDczIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmMKQEAgLTg1LDYgJiM0Mzs4NSw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCXN0cnVjdCB0Y3BoZHIgKnRoID0gKHN0cnVjdCB0Y3BoZHIgKikKIAkJCQkJKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG5ob2ZmKTsKIAomIzQzOwkJCWlwNmggPSBpcHY2X2hkcihza2IpOwogCQkJZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7CiAJCQlpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKCZhbXA7dGgtJmd0O2NoZWNrLCBza2IsCiAJCQkJCQkJZGlmZiwgdHJ1ZSwgdHJ1ZSk7CkBAIC05Niw2ICYjNDM7OTcsNyBAQCBzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBuaG9mZik7CiAKIAkJCWlmICh1aC0mZ3Q7Y2hlY2sgfHwgc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewomIzQzOwkJCQlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKIAkJCQlkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTsKIAkJCQlpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKCZhbXA7dWgtJmd0O2NoZWNrLCBza2IsCiAJCQkJCQkJCWRpZmYsIHRydWUsIHRydWUpOwpAQCAtMTEwLDYgJiM0MzsxMTIsNyBAQCBzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgaWNtcDZoZHIgKmloID0gKHN0cnVjdCBpY21wNmhkciAqKQogCQkJCQkoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgbmhvZmYpOwogCiYjNDM7CQkJaXA2aCA9IGlwdjZfaGRyKHNrYik7CiAJCQlkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTsKIAkJCWluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoJmFtcDtpaC0mZ3Q7aWNtcDZfY2tzdW0sIHNrYiwKIAkJCQkJCQlkaWZmLCB0cnVlLCB0cnVlKTsKQEAgLTE1MSw2ICYjNDM7MTU0LDkgQEAgdm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCwKIAkJYnJlYWs7CiAJfQogCiYjNDM7CWlwNmggPSBpcHY2X2hkcihza2IpOwomIzQzOwlpYWRkciA9IGlsYV9hMmkoJmFtcDtpcDZoLSZndDtkYWRkcik7CiYjNDM7CiAJLyogTm93IGNoYW5nZSBkZXN0aW5hdGlvbiBhZGRyZXNzICovCiAJaWFkZHItJmd0O2xvYyA9IHAtJmd0O2xvY2F0b3I7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCBhbmQgYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYC4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCB0aGV5JiMzOTt2ZSBhZGRlZCBgaXA2aCA9IGlwdjZfaGRyKHNrYik7YCByaWdodCBiZWZvcmUgdGhlIGNhbGxzIHRvIGBnZXRfY3N1bV9kaWZmYCBpbiB0aGUgZm9ybWVyIGFuZCBiZWZvcmUgZ2V0dGluZyB0aGUgSUxBIGFkZHJlc3MgZnJvbSB0aGUgZGVzdGluYXRpb24gSVAgaW4gdGhlIGxhdHRlci4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBzdGFsZSBwb2ludGVyIGlzc3VlLiBUaGV5JiMzOTtyZSByZS1hY3F1aXJpbmcgdGhlIElQdjYgaGVhZGVyIHBvaW50ZXIuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBlaXRoZXIgYHBza2JfbWF5X3B1bGxgIG9yIHNvbWUgb3RoZXIgc2tiIG1hbmlwdWxhdGlvbiBmdW5jdGlvbiBpcyBsaWtlbHkgYmVpbmcgY2FsbGVkIGluIGJldHdlZW4sIHdoaWNoIGNvdWxkIGludmFsaWRhdGUgb3IgbW92ZSB0aGUgb3JpZ2luYWwgYGlwNmhgIHBvaW50ZXIuIEFsdGVybmF0aXZlbHksIHBlcmhhcHMgdGhlIG9yaWdpbmFsIGBpcDZoYCBqdXN0IHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IHVwZGF0ZWQgYWZ0ZXIgc29tZSBvcGVyYXRpb24uCgpJIG5lZWQgdG8gZGl2ZSBpbnRvIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCBhbmQgYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCB0byBjb25maXJtIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBleGFjdCBsb2dpYyBhbmQgd2hlcmUgdGhleSYjMzk7cmUgYmVpbmcgY2FsbGVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgYnVnIGFuZCBob3cgdGhpcyBwYXRjaCBmaXhlcyBpdC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHZlcmlmeSBpZiB0aGVyZSYjMzk7cyBhIHJlYWwtd29ybGQgc2NlbmFyaW8gd2hlcmUgdGhlIGluaXRpYWwgYGlwNmhgIGNvdWxkIGJlIGNvcnJ1cHRlZCBvciBnbyBzdGFsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jPTY0PXN0YXRpYyB2b2lkIGlsYV9jc3VtX2RvX25ldXRyYWxfbm9mbXQoc3RydWN0IGlsYV9hZGRyICppYWRkcixcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTc0LVxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYzo3NTpzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTc2LVx0XHRcdFx0ICAgICAgc3RydWN0IGlsYV9wYXJhbXMgKnApXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYz0xMjQ9dm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCxcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEzMS1cdGNhc2UgSUxBX0NTVU1fQURKVVNUX1RSQU5TUE9SVDpcbm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmM6MTMyOlx0XHRpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHNrYiwgcCk7XG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEzMy1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgcHJlc2VudGVkIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCBpdCBteXNlbGY6CgoqKkRpdmluZyBpbnRvIHRoZSBJTEEgQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgSVB2NiBJTEEgKEludGVsbGlnZW50IExpbmsgQWdncmVnYXRpb24pIGNvZGUsIHNwZWNpZmljYWxseSBpbiB0aGUgYGlsYV9jb21tb24uY2AgZmlsZS4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCBuZXR3b3JraW5nIGludGVybmFscywgSSYjMzk7bGwgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyA3NSBhbmQgMTI0IG9mIHRoYXQgZmlsZS4gTXkgaHVuY2ggaXMsIHRoZXNlIGxvY2F0aW9ucyB3aWxsIHJldmVhbCB0aGUgY29yZSBhc3BlY3RzIG9mIHdoYXQmIzM5O3MgYmVpbmcgZGlzY3Vzc2VkIC0gd2hhdGV2ZXIgdGhhdCBpcyAtIGluIGdyZWF0ZXIgZGV0YWlsLiBJIGV4cGVjdCB0aG9zZSBsaW5lcyB0byBzZXQgdGhlIHN0YWdlIGZvciB3aGF0ZXZlciBwcm9ibGVtIG9yIGZ1bmN0aW9uIHRoZSBzbmlwcGV0IHJlZmVycyB0by4gV2l0aCB0aGF0IGNvbnRleHQsIEkmIzM5O2xsIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHQgKi9cbiAgNjE6XHRcdGlhZGRyLVx1MDAzZWlkZW50LmNzdW1fbmV1dHJhbCBePSAxO1xuICA2MjpcdH1cbiAgNjM6XHRcbiAgNjQ6XHRzdGF0aWMgdm9pZCBpbGFfY3N1bV9kb19uZXV0cmFsX25vZm10KHN0cnVjdCBpbGFfYWRkciAqaWFkZHIsXG4gIDY1Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaWxhX3BhcmFtcyAqcClcbiAgNjY6XHR7XG4gIDY3Olx0XHRfX3N1bTE2ICphZGp1c3QgPSAoX19mb3JjZSBfX3N1bTE2ICopXHUwMDI2aWFkZHItXHUwMDNlaWRlbnQudjE2WzNdO1xuICA2ODpcdFx0X193c3VtIGRpZmY7XG4gIDY5Olx0XG4gIDcwOlx0XHRkaWZmID0gZ2V0X2NzdW1fZGlmZl9pYWRkcihpYWRkciwgcCk7XG4gIDcxOlx0XG4gIDcyOlx0XHQqYWRqdXN0ID0gfmNzdW1fZm9sZChjc3VtX2FkZChkaWZmLCBjc3VtX3VuZm9sZCgqYWRqdXN0KSkpO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsXG4gIDc2Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaWxhX3BhcmFtcyAqcClcbiAgNzc6XHR7XG4gIDc4Olx0XHRzaXplX3QgbmhvZmYgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuICA3OTpcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xuICA4MDpcdFx0X193c3VtIGRpZmY7XG4gIDgxOlx0XG4gIDgyOlx0XHRzd2l0Y2ggKGlwNmgtXHUwMDNlbmV4dGhkcikge1xuICA4MzpcdFx0Y2FzZSBORVhUSERSX1RDUDpcbiAgODQ6XHRcdFx0aWYgKGxpa2VseShwc2tiX21heV9wdWxsKHNrYiwgbmhvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKSkpIHtcbiAgODU6XHRcdFx0XHRzdHJ1Y3QgdGNwaGRyICp0aCA9IChzdHJ1Y3QgdGNwaGRyICopXG4gIDg2Olx0XHRcdFx0XHRcdChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBuaG9mZik7XG4gIDg3Olx0XG4gIDg4Olx0XHRcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gIDg5Olx0XHRcdFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XG4gIDkwOlx0XHRcdFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2VfYnlfZGlmZihcdTAwMjZ0aC1cdTAwM2VjaGVjaywgc2tiLFxuICA5MTpcdFx0XHRcdFx0XHRcdFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XG4gIDkyOlx0XHRcdH1cbiAgOTM6XHRcdFx0YnJlYWs7XG4gIDk0Olx0XHRjYXNlIE5FWFRIRFJfVURQOlxuICA5NTpcdFx0XHRpZiAobGlrZWx5KHBza2JfbWF5X3B1bGwoc2tiLCBuaG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikpKSkge1xuICA5NjpcdFx0XHRcdHN0cnVjdCB1ZHBoZHIgKnVoID0gKHN0cnVjdCB1ZHBoZHIgKilcbiAgOTc6XHRcdFx0XHRcdFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG5ob2ZmKTtcbiAgOTg6XHRcbiAgOTk6XHRcdFx0XHRpZiAodWgtXHUwMDNlY2hlY2sgfHwgc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4gMTAwOlx0XHRcdFx0XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiAxMDE6XHRcdFx0XHRcdGRpZmYgPSBnZXRfY3N1bV9kaWZmKGlwNmgsIHApO1xuIDEwMjpcdFx0XHRcdFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2VfYnlfZGlmZihcdTAwMjZ1aC1cdTAwM2VjaGVjaywgc2tiLFxuIDEwMzpcdFx0XHRcdFx0XHRcdFx0XHRkaWZmLCB0cnVlLCB0cnVlKTtcbiAxMDQ6XHRcdFx0XHRcdGlmICghdWgtXHUwMDNlY2hlY2spXG4gMTA1Olx0XHRcdFx0XHRcdHVoLVx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XG4gMTA2Olx0XHRcdFx0fVxuIDEwNzpcdFx0XHR9XG4gMTA4Olx0XHRcdGJyZWFrO1xuIDEwOTpcdFx0Y2FzZSBORVhUSERSX0lDTVA6XG4gMTEwOlx0XHRcdGlmIChsaWtlbHkocHNrYl9tYXlfcHVsbChza2IsXG4gMTExOlx0XHRcdFx0XHRcdCBuaG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKSkpKSB7XG4gMTEyOlx0XHRcdFx0c3RydWN0IGljbXA2aGRyICppaCA9IChzdHJ1Y3QgaWNtcDZoZHIgKilcbiAxMTM6XHRcdFx0XHRcdFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG5ob2ZmKTtcbiAxMTQ6XHRcbiAxMTU6XHRcdFx0XHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiAxMTY6XHRcdFx0XHRkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTtcbiAxMTc6XHRcdFx0XHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKFx1MDAyNmloLVx1MDAzZWljbXA2X2Nrc3VtLCBza2IsXG4gMTE4Olx0XHRcdFx0XHRcdFx0XHRkaWZmLCB0cnVlLCB0cnVlKTtcbiAxMTk6XHRcdFx0fVxuIDEyMDpcdFx0XHRicmVhaztcbiAxMjE6XHRcdH1cbiAxMjI6XHR9XG4gMTIzOlx0XG4gMTI0Olx0dm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCxcbiAxMjU6XHRcdFx0XHQgICAgIGJvb2wgc2lyMmlsYSlcbiAxMjY6XHR7XG4gMTI3Olx0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gMTI4Olx0XHRzdHJ1Y3QgaWxhX2FkZHIgKmlhZGRyID0gaWxhX2EyaShcdTAwMjZpcDZoLVx1MDAzZWRhZGRyKTtcbiAxMjk6XHRcbiAxMzA6XHRcdHN3aXRjaCAocC1cdTAwM2Vjc3VtX21vZGUpIHtcbiAxMzE6XHRcdGNhc2UgSUxBX0NTVU1fQURKVVNUX1RSQU5TUE9SVDpcbiAxMzI6XHRcdFx0aWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydChza2IsIHApO1xuIDEzMzpcdFx0XHRicmVhaztcbiAxMzQ6XHRcdGNhc2UgSUxBX0NTVU1fTkVVVFJBTF9NQVA6XG4gMTM1Olx0XHRcdGlmIChzaXIyaWxhKSB7XG4gMTM2Olx0XHRcdFx0aWYgKFdBUk5fT04oaWxhX2NzdW1fbmV1dHJhbF9zZXQoaWFkZHItXHUwMDNlaWRlbnQpKSkge1xuIDEzNzpcdFx0XHRcdFx0LyogQ2hlY2tzdW0gZmxhZyBzaG91bGQgbmV2ZXIgYmVcbiAxMzg6XHRcdFx0XHRcdCAqIHNldCBpbiBhIGZvcm1hdHRlZCBTSVIgYWRkcmVzcy5cbiAxMzk6XHRcdFx0XHRcdCAqL1xuIDE0MDpcdFx0XHRcdFx0YnJlYWs7XG4gMTQxOlx0XHRcdFx0fVxuIDE0MjpcdFx0XHR9IGVsc2UgaWYgKCFpbGFfY3N1bV9uZXV0cmFsX3NldChpYWRkci1cdTAwM2VpZGVudCkpIHtcbiAxNDM6XHRcdFx0XHQvKiBJTEEgdG8gU0lSIHRyYW5zbGF0aW9uIGFuZCBDLWJpdCBpc24mIzM5O3RcbiAxNDQ6XHRcdFx0XHQgKiBzZXQgc28gd2UmIzM5O3JlIGdvb2QuXG4gMTQ1Olx0XHRcdFx0ICovXG4gMTQ2Olx0XHRcdFx0YnJlYWs7XG4gMTQ3Olx0XHRcdH1cbiAxNDg6XHRcdFx0aWxhX2NzdW1fZG9fbmV1dHJhbF9mbXQoaWFkZHIsIHApO1xuIDE0OTpcdFx0XHRicmVhaztcbiAxNTA6XHRcdGNhc2UgSUxBX0NTVU1fTkVVVFJBTF9NQVBfQVVUTzpcbiAxNTE6XHRcdFx0aWxhX2NzdW1fZG9fbmV1dHJhbF9ub2ZtdChpYWRkciwgcCk7XG4gMTUyOlx0XHRcdGJyZWFrO1xuIDE1MzpcdFx0Y2FzZSBJTEFfQ1NVTV9OT19BQ1RJT046XG4gMTU0Olx0XHRcdGJyZWFrO1xuIDE1NTpcdFx0fVxuIDE1NjpcdFxuIDE1NzpcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gMTU4Olx0XHRpYWRkciA9IGlsYV9hMmkoXHUwMDI2aXA2aC1cdTAwM2VkYWRkcik7XG4gMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBJUHY2IEhlYWRlciBWdWxuZXJhYmlsaXR5IEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUsIHdoaWNoIGlzIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gdGhlIGZhY3QgdGhhdCBgcHNrYl9tYXlfcHVsbGAgY2FuIHJlYWxsb2NhdGUgdGhlIGBza2JgIGRhdGEuIFRoYXQgbWVhbnMgdGhlIHBvaW50ZXIgYGlwNmggPSBpcHY2X2hkcihza2IpO2AgbWlnaHQgYmVjb21lIHN0YWxlIGFmdGVyIGEgYHBza2JfbWF5X3B1bGxgIGNhbGwuIFRoZSBwYXRjaCBzbWFydGx5IHJlLWV2YWx1YXRlcyBgaXA2aGAgYWZ0ZXIgdGhvc2UgY2FsbHMgdG8gZW5zdXJlIHdlJiMzOTtyZSBhbHdheXMgd29ya2luZyB3aXRoIGEgdmFsaWQgcG9pbnRlciB0byB0aGUgSVB2NiBoZWFkZXIuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBmaXguCgpNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzLCAmIzM0O1doYXQgY29uZmlnIG9wdGlvbnMgZW5hYmxlIHRoaXMgY29kZSBwYXRoPyYjMzQ7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24gdG8gdHJpZ2dlciB0aGlzIHZ1bG5lcmFiaWxpdHksIHNvIEkgY2FuIHRhcmdldCBpdCBwcm9wZXJseSBpbiBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBmaWxlIG1lbnRpb25lZCwgYG5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmNgLCBpcyBteSBzdGFydGluZyBwb2ludC4gVGhlIHJlbGF0ZWQgTWFrZWZpbGVzLCBlaXRoZXIgYG5ldC9pcHY2L2lsYS9NYWtlZmlsZWAgb3IgYG5ldC9pcHY2L01ha2VmaWxlYCwgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY2x1ZXMgSSBuZWVkLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgaWYgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBtb2R1bGUgdGhhdCBoYXMgdG8gYmUgbG9hZGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbGFfY29tbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pbGEvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVBWNl9JTEEpICYjNDM7PSBpbGEub1xubmV0L2lwdjYvaWxhL01ha2VmaWxlLTctXG5uZXQvaXB2Ni9pbGEvTWFrZWZpbGU6ODppbGEtb2JqcyA6PSBpbGFfbWFpbi5vIGlsYV9jb21tb24ubyBpbGFfbHd0Lm8gaWxhX3hsYXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCB0ZXh0OgoKKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIHRleHQgc2VlbXMgdG8gYmUgcG9pbnRpbmcgbWUgdG93YXJkcyBgQ09ORklHX0lQVjZfSUxBYC4gUmlnaHQsIEkga25vdyB0aGF0IG9uZSDigJMgaXQmIzM5O3MgbGlrZWx5IGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4gSSBuZWVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgSVB2NiBjb25maWd1cmF0aW9uIGlzIGNydWNpYWwgZm9yIHRoaXMga2luZCBvZiB3b3JrLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNjb3BlLCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGJlZm9yZSBJIGRlbHZlIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYENPTkZJR19JUFY2X0lMQWAuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIGlzIG91dCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfSUxBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzMyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBzb21lIElQdjYgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBLY29uZmlnIGZpbGUgZm9yIElQdjYsIGFuZCBpdCBsb29rcyBsaWtlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgc2VjdGlvbiBhcm91bmQgbGluZSAxMjAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGZlYXR1cmUmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlc2lkZSwgc28gSSYjMzk7bGwgc3RhcnQgdGhlcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBzZXR0aW5ncyBJIG5lZWQgdG8gcmV2aWV3LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSYjMzk7cmUgaW50ZW5kZWQgdG8gd29yay4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdFx0aGVscFxuIDExNjpcdFx0ICBTdXBwb3J0IGZvciBJUHY2IE1vYmlsaXR5IGRlc2NyaWJlZCBpbiBSRkMgMzc3NS5cbiAxMTc6XHRcbiAxMTg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMTk6XHRcbiAxMjA6XHRjb25maWcgSVBWNl9JTEFcbiAxMjE6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXCYjMzQ7XG4gMTIyOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUlxuIDEyMzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuIDEyNDpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMTI1Olx0XHRoZWxwXG4gMTI2Olx0XHQgIFN1cHBvcnQgZm9yIElQdjYgSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSkuXG4gMTI3Olx0XG4gMTI4Olx0XHQgIElMQSBpcyBhIG1lY2hhbmlzbSB0byBkbyBuZXR3b3JrIHZpcnR1YWxpemF0aW9uIHdpdGhvdXRcbiAxMjk6XHRcdCAgZW5jYXBzdWxhdGlvbi4gVGhlIGJhc2ljIGNvbmNlcHQgb2YgSUxBIGlzIHRoYXQgd2Ugc3BsaXQgYW5cbiAxMzA6XHRcdCAgSVB2NiBhZGRyZXNzIGludG8gYSA2NCBiaXQgbG9jYXRvciBhbmQgNjQgYml0IGlkZW50aWZpZXIuIFRoZVxuIDEzMTpcdFx0ICBpZGVudGlmaWVyIGlzIHRoZSBpZGVudGl0eSBvZiBhbiBlbnRpdHkgaW4gY29tbXVuaWNhdGlvblxuIDEzMjpcdFx0ICAoXCYjMzQ7d2hvXCYjMzQ7KSBhbmQgdGhlIGxvY2F0b3IgZXhwcmVzc2VzIHRoZSBsb2NhdGlvbiBvZiB0aGVcbiAxMzM6XHRcdCAgZW50aXR5IChcJiMzNDt3aGVyZVwmIzM0OykuXG4gMTM0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFY2X0lMQSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgSVBWNl9JTEFgIGlzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBBbmQgaXQgcmVsaWVzIG9uIGBORVRGSUxURVJgLCBzbyB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzPwoKSXQgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb25zIGFyZSBjZW50ZXJlZCBhcm91bmQgYGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnRgIGFuZCBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgLiBUaGUgZmFjdCB0aGF0IGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCBpcyBzdGF0aWMgaXMgYSBiaXQgb2YgYSBodXJkbGUuIElmIGl0JiMzOTtzIGlubGluZWQsIGRpcmVjdGx5IGZvY3VzaW5nIG9uIGl0IG1pZ2h0IGJlIGRpZmZpY3VsdC4gQnV0LCBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgIGlzIHN0aWxsIGEgdmFsaWQgZnVuY3Rpb24gdG8gZm9jdXMgb24uIFdoZXJlIGl0JiMzOTtzIGNhbGxlZCwgdGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBzZWUuIExldCYjMzk7cyB0cmFjZSB0aG9zZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pbGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lsYS9pbGEuaD04OD1zdGF0aWMgaW5saW5lIGJvb2wgaWxhX2NzdW1fbmV1dHJhbF9zZXQoc3RydWN0IGlsYV9pZGVudGlmaWVyIGlkZW50KVxuLS1cbm5ldC9pcHY2L2lsYS9pbGEuaC05Mi1cbm5ldC9pcHY2L2lsYS9pbGEuaDo5Mzp2b2lkIGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbGFfcGFyYW1zICpwLFxubmV0L2lwdjYvaWxhL2lsYS5oLTk0LVx0XHRcdCAgICAgYm9vbCBzZXRfY3N1bV9uZXV0cmFsKTtcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jPTc1PXN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEyMy1cbm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmM6MTI0OnZvaWQgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlsYV9wYXJhbXMgKnAsXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEyNS1cdFx0XHQgICAgIGJvb2wgc2lyMmlsYSlcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTM4PXN0YXRpYyBpbnQgaWxhX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTQ5LVx0aWYgKGlsd3QtXHUwMDNlbHd0X291dHB1dClcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6NTA6XHRcdGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHNrYixcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtNTEtXHRcdFx0XHRcdGlsYV9wYXJhbXNfbHd0dW5uZWwob3JpZ19kc3QtXHUwMDNlbHd0c3RhdGUpLFxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MTA4PXN0YXRpYyBpbnQgaWxhX2lucHV0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMTYtXHRpZiAoIWlsd3QtXHUwMDNlbHd0X291dHB1dClcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MTE3Olx0XHRpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihza2IsXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTExOC1cdFx0XHRcdFx0aWxhX3BhcmFtc19sd3R1bm5lbChkc3QtXHUwMDNlbHd0c3RhdGUpLFxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jPTY0MT1zdGF0aWMgaW50IGlsYV94bGF0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzaXIyaWxhKVxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTY1OS1cdGlmIChpbGEpXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzo2NjA6XHRcdGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHNrYiwgXHUwMDI2aWxhLVx1MDAzZXhwLmlwLCBzaXIyaWxhKTtcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTY2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwNgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBJUHY2IExvY2F0b3IgVXBkYXRlcyoqCgpPa2F5LCBzbyBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlsYV9vdXRwdXRgLCBgaWxhX2lucHV0YCwgYW5kIGBpbGFfeGxhdF9hZGRyYC4gR2l2ZW4gdGhhdCwgdGhvc2UgdGhyZWUgYXJlIHRoZSBvYnZpb3VzIHBsYWNlcyB0byBzdGFydCBkaWdnaW5nLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGV4YW1pbmUgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zLgoKQSBxdWljayBzY2FuIHNob3dzIHRoYXQgYGlsYV9vdXRwdXRgIGFuZCBgaWxhX2lucHV0YCBhcmUgcmVsYXRlZCB0byB0aGUgTGlnaHQgV2VpZ2h0IFR1bm5lbCAoTFdUKSBob29rcywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbiBwb2ludHMuIE1lYW53aGlsZSwgYGlsYV94bGF0X2FkZHJgIGlzIGEgbmV0ZmlsdGVyIGhvb2suIFRoYXQgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uLgoKUmlnaHQsIGBpbGFfeGxhdF9hZGRyYCwgbmV0ZmlsdGVyIGhvb2ssIGFkZHJlc3MgdHJhbnNsYXRpb24uIFRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudCBwbGFjZSB0byBsb29rIGZpcnN0LCBzbyBsZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV94bGF0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzNTpcdFxuIDYzNjpcdFx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFx1MDAyNmlsYW4tXHUwMDNleGxhdC5yaGFzaF90YWJsZSwgaWxhX2ZyZWVfY2IsIE5VTEwpO1xuIDYzNzpcdFxuIDYzODpcdFx0ZnJlZV9idWNrZXRfc3BpbmxvY2tzKGlsYW4tXHUwMDNleGxhdC5sb2Nrcyk7XG4gNjM5Olx0fVxuIDY0MDpcdFxuIDY0MTpcdHN0YXRpYyBpbnQgaWxhX3hsYXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHNpcjJpbGEpXG4gNjQyOlx0e1xuIDY0MzpcdFx0c3RydWN0IGlsYV9tYXAgKmlsYTtcbiA2NDQ6XHRcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTtcbiA2NDU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNjQ2Olx0XHRzdHJ1Y3QgaWxhX25ldCAqaWxhbiA9IG5ldF9nZW5lcmljKG5ldCwgaWxhX25ldF9pZCk7XG4gNjQ3Olx0XHRzdHJ1Y3QgaWxhX2FkZHIgKmlhZGRyID0gaWxhX2EyaShcdTAwMjZpcDZoLVx1MDAzZWRhZGRyKTtcbiA2NDg6XHRcbiA2NDk6XHRcdC8qIEFzc3VtZXMgc2tiIGNvbnRhaW5zIGEgdmFsaWQgSVB2NiBoZWFkZXIgdGhhdCBpcyBwdWxsZWQgKi9cbiA2NTA6XHRcbiA2NTE6XHRcdC8qIE5vIGNoZWNrIGhlcmUgdGhhdCBJTEEgdHlwZSBpbiB0aGUgbWFwcGluZyBtYXRjaGVzIHdoYXQgaXMgaW4gdGhlXG4gNjUyOlx0XHQgKiBhZGRyZXNzLiBXZSBhc3N1bWUgdGhhdCB3aGF0ZXZlciBzZW5kZXIgZ2F2ZXMgdXMgY2FuIGJlIHRyYW5zbGF0ZWQuXG4gNjUzOlx0XHQgKiBUaGUgY2hlY2tzdW0gbW9kZSBob3dldmVyIGlzIHJlbGV2YW50LlxuIDY1NDpcdFx0ICovXG4gNjU1Olx0XG4gNjU2Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNjU3Olx0XG4gNjU4Olx0XHRpbGEgPSBpbGFfbG9va3VwX3dpbGRjYXJkcyhpYWRkciwgc2tiLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4LCBpbGFuKTtcbiA2NTk6XHRcdGlmIChpbGEpXG4gNjYwOlx0XHRcdGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHNrYiwgXHUwMDI2aWxhLVx1MDAzZXhwLmlwLCBzaXIyaWxhKTtcbiA2NjE6XHRcbiA2NjI6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDY2MzpcdFxuIDY2NDpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGwgU2l0ZXMgb2YgYGlsYV94bGF0X2FkZHJgKioKCk9rYXksIHNvIGBpbGFfeGxhdF9hZGRyYCBpcyBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGVyZSBJIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMuIFRoYXQmIzM5O3MgZ29vZDsgbm8gZ2xvYmFsIG5hbWVzcGFjZSBwb2xsdXRpb24gdG8gd29ycnkgYWJvdXQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGludm9jYXRpb25zLiBLbm93aW5nIHRoZSBjb250ZXh0cyBvZiB0aG9zZSBjYWxscyB3aWxsIGJlIGNyaXRpY2FsIHRvIGdyYXNwaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBtb2RpZnlpbmcgaXQuIFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHBhc3NlZD8gQXJlIGFueSBvZiB0aG9zZSB2b2xhdGlsZSBvciBzaGFyZWQ/IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIGlmIGFueSBpbmxpbmUgYXNzZW1ibHkgaXMgdXNlZCBpbiBpdHMgdXNlIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lsYV94bGF0X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz0xNzM9c3RhdGljIHZvaWQgaWxhX2ZyZWVfY2Iodm9pZCAqcHRyLCB2b2lkICphcmcpXG4tLVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTc3LVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6MTc4OnN0YXRpYyBpbnQgaWxhX3hsYXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHNpcjJpbGEpO1xubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTc5LVxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jPTE4MT1pbGFfbmZfaW5wdXQodm9pZCAqcHJpdixcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xODQte1xubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6MTg1Olx0aWxhX3hsYXRfYWRkcihza2IsIGZhbHNlKTtcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE4Ni1cdHJldHVybiBORl9BQ0NFUFQ7XG4tLVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9NjMyPXZvaWQgaWxhX3hsYXRfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTY0MC1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjY0MTpzdGF0aWMgaW50IGlsYV94bGF0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzaXIyaWxhKVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNjQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY0OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBpbGFfbmZfaW5wdXRgKioKCk9rYXksIEkmIzM5O20gdHJhY2luZyB0aGlzIGV4ZWN1dGlvbiBhbmQgSSBzZWUgaXQmIzM5O3Mgb3JpZ2luYXRpbmcgZnJvbSBgaWxhX25mX2lucHV0YC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icy4gU28sIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgaWxhX25mX2lucHV0YC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMsIGl0cyBwcm9jZXNzaW5nIGxvZ2ljLCBhbmQgZXNwZWNpYWxseSB3aGF0IGRhdGEgaXQmIzM5O3MgZmVlZGluZyBpbnRvIHRoZSBzdWJzZXF1ZW50IGZ1bmN0aW9ucy4gVGhpcyBsb29rcyBsaWtlIGEgY3JpdGljYWwgcG9pbnQgd2hlcmUgc29tZXRoaW5nIGlzIGdldHRpbmcgaW5pdGlhbGl6ZWQgb3IgcHJlcGFyZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWxhX25mX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV94bGF0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9MTgwPXN0YXRpYyB1bnNpZ25lZCBpbnRcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjE4MTppbGFfbmZfaW5wdXQodm9pZCAqcHJpdixcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE4Mi1cdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz0xODk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpbGFfbmZfaG9va19vcHNbXSA9IHtcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE5MC1cdHtcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjE5MTpcdFx0Lmhvb2sgPSBpbGFfbmZfaW5wdXQsXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xOTItXHRcdC5wZiA9IE5GUFJPVE9fSVBWNixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmsgc3RhY2sgaW50ZXJuYWxzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEhvb2s6IElsYV9uZl9pbnB1dCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpbGFfbmZfaW5wdXRgLiBPa2F5LCBzbywgdGhpcyBpcyBhIG5ldGZpbHRlciBob29rLiBUaGF0JiMzOTtzIGdvb2QgY29udGV4dCB0byBzdGFydCB3aXRoLCBJIGtub3cgaG93IG5ldGZpbHRlciB3b3Jrcywgc28gSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgaW1tZWRpYXRlbHkuIEl0JiMzOTtzIGFuIGVudHJ5IHBvaW50IGZvciBwcm9jZXNzaW5nIHBhY2tldHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZWxzZSBpbnRlcmFjdHMgd2l0aCB0aGlzIGZ1bmN0aW9uLiBBaGEsIEkgc2VlIGluIHRoZSBjYWxsIGdyYXBoIHRoYXQgb3RoZXIgY2FsbGVycyBpbmNsdWRlIGBpbGFfb3V0cHV0YCBhbmQgYGlsYV9pbnB1dGAuIEFuZCB0aG9zZSBsaXZlIGluIGBuZXQvaXB2Ni9pbGEvaWxhX2x3dC5jYC4gT2theSwgbm93IEkgaGF2ZSBhIG11Y2ggYmV0dGVyIHBpY3R1cmUuIFRoaXMgbGlrZWx5IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gSW50ZXJtZWRpYXRlIExpbmsgQWRkcmVzcyAoSUxBKSBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgbmV0ZmlsdGVyIGZvciBwYWNrZXQgbWFuaXB1bGF0aW9uLCBhbmQgdGhlIGBsd3RgIChsaWdodHdlaWdodCB0dW5uZWwpIGFzcGVjdCBpcyBoYW5kbGluZyB0aGUgZW5jYXBzdWxhdGlvbiBhbmQgZGVjYXBzdWxhdGlvbiwgb3Igb3RoZXIgbWFuaXB1bGF0aW9uLCBvZiB0aGUgSVAgcGFja2V0cy4gVGhlIGBpbnB1dGAgYW5kIGBvdXRwdXRgIGNhbGxzIHN1Z2dlc3QgdGhhdCB0aGlzIG5ldGZpbHRlciBob29rIGBpbGFfbmZfaW5wdXRgIGlzIGJlaW5nIHVzZWQgdG8gZGVhbCB3aXRoIHBhY2tldHMgY29taW5nIGluIGZyb20gdGhlIG5ldHdvcmssIGFuZCB0aGUgYGlsYV9sd3RgIGNhbGxzIGFyZSBkZWFsaW5nIHdpdGggcGFja2V0cyBvbiB0aGUgbG9jYWwgaG9zdC4gSSYjMzk7bSBzdGFydGluZyB0byBnZXQgYSBnb29kIHNlbnNlIG9mIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlciwgYW5kIHRoZSBkaXJlY3Rpb24gSSBuZWVkIHRvIHN0YXJ0IG15IGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWxhX291dHB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lsYS9pbGFfbHd0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0zMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbGFfcGFyYW1zICppbGFfcGFyYW1zX2x3dHVubmVsKFxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzctXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjM4OnN0YXRpYyBpbnQgaWxhX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzkte1xuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlsYV9lbmNhcF9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMTUtXHQuZGVzdHJveV9zdGF0ZSA9IGlsYV9kZXN0cm95X3N0YXRlLFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzozMTY6XHQub3V0cHV0ID0gaWxhX291dHB1dCxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzE3LVx0LmlucHV0ID0gaWxhX2lucHV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njk0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIExXVHVubmVsIEVuY2Fwc3VsYXRpb24gT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgaWxhX291dHB1dGAgYW5kIGBpbGFfaW5wdXRgLiBSaWdodCwgdGhvc2UgYXJlIGNsZWFybHkgaW52b2x2ZWQgaW4gTFdUdW5uZWwgZW5jYXBzdWxhdGlvbiBvcGVyYXRpb25zLiBNYWtlcyBzZW5zZS4gSSBjYW4gcHJvYmFibHkgbmFycm93IG15IGZvY3VzIHRvIGBpbGFfbmZfaW5wdXRgLCBgaWxhX291dHB1dGAsIGFuZCBgaWxhX2lucHV0YCBmb3IgdGhlIG1vbWVudDsgdGhvc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBiaXRzLiBIb2xkIG9uIGEgc2Vjb25kLi4uIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAgaXMgKmV4cG9ydGVkKj8gVGhhdOKAmXMgYSBiaXQgdW51c3VhbCBmb3IgdGhpcyB0eXBlIG9mIGludGVybmFsIGZ1bmN0aW9uLiBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgZXhhY3RseSBob3cgYW5kIHdoZXJlIHRoYXQmIzM5O3MgYmVpbmcgZXhwb3NlZCwgc2luY2UgdGhhdCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3Igc2VjdXJpdHkgb3IgZGVzaWduLiBHb3R0YSBpbnZlc3RpZ2F0ZSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NzIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIFJlZmluZW1lbnQgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHJldmlzaXRpbmcgdGhpcyBmb2N1cyBzeW1ib2wgYnVzaW5lc3MgZm9yIHN5emthbGxlciwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSByaWdodCBmdW5jdGlvbnMuIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgc2luY2Ugc29tZXRoaW5nIHdhc24mIzM5O3QgZXhwb3J0ZWQsIHRoYXQgaXQgd2FzIGluYWNjZXNzaWJsZSwgYnV0IHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlIGlmIHRoZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2l0aGluIHRoZSBzYW1lIG1vZHVsZS4KCk15IGZpcnN0IHRob3VnaHQgd2FzIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAuIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyBkZWZpbmVkIGluIGBpbGFfY29tbW9uLmNgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCwganVzdCB0byBiZSBjZXJ0YWluLiBBaCwgeWVzLCBgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydGAgaXMgc3RhdGljLCBhbHNvIGluIGBpbGFfY29tbW9uLmNgLgoKUmlnaHQsIG15IG9yaWdpbmFsIGNhbmRpZGF0ZXMgZm9yIGZvY3VzIHdlcmUgYGlsYV9uZl9pbnB1dGAsIGBpbGFfb3V0cHV0YCwgYW5kIGBpbGFfaW5wdXRgLiBIYW5nIG9uLCB0aG91Z2guIFdlcmVuJiMzOTt0IGBpbGFfb3V0cHV0YCBhbmQgYGlsYV9pbnB1dGAgc3RhdGljIGluIGBpbGFfbHd0LmNgPyBUaGF0JiMzOTtzIHJpZ2h0LiBUaGUgcXVlc3Rpb24gaXMgY2FuIHN5emthbGxlciBldmVuIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnM/IFllcywgdGhhdCYjMzk7cyByaWdodCwgc3l6a2FsbGVyIHV0aWxpemVzIGZ1bmN0aW9uIG5hbWVzIGFzIHRoZSBwcmltYXJ5IGZvY3VzIG1lY2hhbmlzbSwgc28gaXQmIzM5O3Mgbm90IGEgcHJvYmxlbS4KCkhtbSwgYGlsYV9uZl9pbnB1dGAgaXMgc3RhdGljIGFzIHdlbGwuIEkmIzM5O2QgYmV0dGVyIGJlIHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzLgoKYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCBpcyAqbm90KiBzdGF0aWMsIGFuZCBpdCYjMzk7cyBpbiBgaWxhX2NvbW1vbi5jYC4gSSBjYW4gZm9jdXMgb24gdGhhdCBkaXJlY3RseS4gQWN0dWFsbHksIEkgdGhpbmsgYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCB3b3VsZCBiZSBhIGdyZWF0IGZvY3VzIHN5bWJvbC4KCkxldCYjMzk7cyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gSSBuZWVkIHRvIG1ha2UgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb2luZyBiYWNrIHRvIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCwgaXQmIzM5O3Mgc3RhdGljLCBidXQgSSByZW1lbWJlciB0aGF0IHRoYXQgd2FzIHRoZSBvbmUgdGhhdCB3YXMgZml4ZWQgZWFybGllciwgc28gdGhhdCBmdW5jdGlvbiBjb3VsZCBiZSBhbiBhcHByb3ByaWF0ZSBhZGRpdGlvbi4KClNpbmNlIHN5emthbGxlciB1c2VzIGZ1bmN0aW9uIG5hbWVzIGZvciBmb2N1c2luZywgSSBjYW4gc2ltcGx5IGFkZCB0aGVtIHRvIHRoZSBmb2N1cyBsaXN0LiBMZXQmIzM5O3MgYWRkIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAsIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCwgYGlsYV9uZl9pbnB1dGAsIGBpbGFfb3V0cHV0YCwgYW5kIGBpbGFfaW5wdXRgLgoKVGhlIGxhc3QgdGhpbmcgdG8gY2hlY2sgaXMgdGhhdCBgaWxhX291dHB1dGAgYW5kIGBpbGFfaW5wdXRgIGFyZSBhIGxpdHRsZSBnZW5lcmljLCBzbyBpdCYjMzk7cyB3b3J0aCBzZWVpbmcgaWYgdGhvc2Ugc3ltYm9sIG5hbWVzIGNsYXNoLiBUaGVyZSBtaWdodCBiZSBzb21lIG90aGVyIGBpbGFfb3V0cHV0YCBvciBgaWxhX2lucHV0YCBzb21ld2hlcmUuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRvIHZlcmlmeSB0aGF0IHRoZSBuYW1lcyBhcmUgdW5pcXVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbGFfb3V0cHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWxhX3BhcmFtcyAqaWxhX3BhcmFtc19sd3R1bm5lbChcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTM3LVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzozODpzdGF0aWMgaW50IGlsYV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTM5LXtcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTMxMz1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpbGFfZW5jYXBfb3BzID0ge1xuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzE1LVx0LmRlc3Ryb3lfc3RhdGUgPSBpbGFfZGVzdHJveV9zdGF0ZSxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MzE2Olx0Lm91dHB1dCA9IGlsYV9vdXRwdXQsXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTMxNy1cdC5pbnB1dCA9IGlsYV9pbnB1dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIGEgS2V5IENvbnNpZGVyYXRpb24qKgoKWWVzLCB0aGlzIHNpdHVhdGlvbiBpcyBpbmRlZWQgdW5pcXVlLiBJdCBwcmVzZW50cyBhIHNwZWNpZmljIHNldCBvZiBjaXJjdW1zdGFuY2VzIHRoYXQgSSBoYXZlbiYjMzk7dCBkaXJlY3RseSBlbmNvdW50ZXJlZCBiZWZvcmUsIGF0IGxlYXN0IG5vdCBpbiB0aGlzIGV4YWN0IGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBwb3NpdGl2ZSwgaG93ZXZlciwgSSB3YW50IHRvIGV4cGxvcmUgY2VydGFpbiBjb25zaWRlcmF0aW9ucyBiZWZvcmUgZ29pbmcgZnVydGhlci4gTXkgaW50dWl0aW9uIGlzIHRoYXQgdGhpcyBpcyB1bnVzdWFsLCBhbmQgd2FycmFudHMgYSBmdWxsIHJldmlldy4KClRoZSBwcmltYXJ5IGFyZWEgdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMgdGhlIGBpbGFfaW5wdXRgIHZhcmlhYmxlIG9yIGZ1bmN0aW9uLiBXaGF0IGlzIHRoZSBhcmNoaXRlY3R1cmUgaGVyZT8gSXMgdGhpcyB0aGUgcmlnaHQgY29udGV4dD8gVGhpcyBzZWVtcyBsaWtlIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiBteSB0aG91Z2h0IHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgaXRzIGNoYXJhY3RlcmlzdGljcywgaW50ZXJhY3Rpb25zLCBhbmQgcG90ZW50aWFsIGltcGFjdCBpcyB2aXRhbCBiZWZvcmUgSSBjYW4gZm9ybXVsYXRlIGEgc29saWQgY29uY2x1c2lvbiBvciByZWNvbW1lbmQgYSBjb3Vyc2Ugb2YgYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbGFfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0zOD1zdGF0aWMgaW50IGlsYV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMDctXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjEwODpzdGF0aWMgaW50IGlsYV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMDkte1xuLS1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlsYV9lbmNhcF9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMTYtXHQub3V0cHV0ID0gaWxhX291dHB1dCxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MzE3Olx0LmlucHV0ID0gaWxhX2lucHV0LFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMTgtXHQuZmlsbF9lbmNhcCA9IGlsYV9maWxsX2VuY2FwX2luZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjE5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgcmVxdWVzdGVkOgoKKipDb25zaWRlcmluZyBVbmlxdWVuZXNzIGFuZCBBZGRyZXNzIFRyYW5zbGF0aW9uKioKClllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBuZXcsIHNvbWV0aGluZyBzcGVjaWFsLiBCdXQsIHdhaXQuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgcGllY2VzLiBXaGF0IGFib3V0IGBpbGFfeGxhdF9hZGRyYD8gSG93IGRvZXMgdGhhdCBmaXQgaW50byB0aGlzIHBpY3R1cmU/IEkgaGF2ZSB0byBhbmFseXplIGhvdyB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIHJlbGF0ZXMgdG8gdGhlIG92ZXJhbGwgaWRlYSBvZiB1bmlxdWVuZXNzLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbGFfeGxhdF9hZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lsYS9pbGFfeGxhdC5jPTE3Mz1zdGF0aWMgdm9pZCBpbGFfZnJlZV9jYih2b2lkICpwdHIsIHZvaWQgKmFyZylcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xNzctXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzoxNzg6c3RhdGljIGludCBpbGFfeGxhdF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc2lyMmlsYSk7XG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xNzktXG4tLVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9MTgxPWlsYV9uZl9pbnB1dCh2b2lkICpwcml2LFxuLS1cbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE4NC17XG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzoxODU6XHRpbGFfeGxhdF9hZGRyKHNrYiwgZmFsc2UpO1xubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTg2LVx0cmV0dXJuIE5GX0FDQ0VQVDtcbi0tXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz02MzI9dm9pZCBpbGFfeGxhdF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNjQwLVxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6NjQxOnN0YXRpYyBpbnQgaWxhX3hsYXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHNpcjJpbGEpXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy02NDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjEwOAoJCQkJCQkJb3V0cHV0OiAxODMKCQkJCQkJCXRob3VnaHRzOiA2MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSYjMzk7dmUgZ290IGEgZnVuY3Rpb25hbCBmaXggaGVyZSByZWxhdGVkIHRvIElQdjYgSUxBLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSB0byBhIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgY29ycnVwdGlvbiBzY2VuYXJpby4gVGhlIHZ1bG5lcmFiaWxpdHkgb2NjdXJzIHdoZW4gYHBza2JfbWF5X3B1bGwoKWAgcmVhbGxvY2F0ZXMgdGhlIHNvY2tldCBidWZmZXIsIHdoaWNoIGludmFsaWRhdGVzIHRoZSBgaXA2aGAgcG9pbnRlciB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhlIHBhdGNoIHJlc29sdmVzIHRoaXMgYnkgcmUtZmV0Y2hpbmcgdGhlIGBpcDZoYCBwb2ludGVyIGFmdGVyIHRoZSBwb3RlbnRpYWwgcmVhbGxvY2F0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLCBhdm9pZGluZyBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydGAgYW5kIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAgYXJlIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBvbmVzIGJlaW5nIG1vZGlmaWVkIHRvIHByZXZlbnQgdGhlIGVycm9yLiBUaGUgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBpbGFfeGxhdF9hZGRyYCwgYGlsYV9uZl9pbnB1dGAsIGBpbGFfb3V0cHV0YCwgYW5kIGBpbGFfaW5wdXRgLCBsb29rIGxpa2UgY2FsbGVycyBvZiB0aGUgZml4ZWQgZnVuY3Rpb25zLiBXZSBzaG91bGQgaW5jbHVkZSB0aG9zZSBpbiBvdXIgZnV6emluZyB0YXJnZXQgbGlzdCBhcyB3ZWxsLCB0byBoZWxwIHRoZSBmdXp6ZXIgZXhwbG9yZSB0aGUgZXhlY3V0aW9uIHBhdGhzLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBtYWluIG9uZSBhcHBlYXJzIHRvIGJlIGBJUFY2X0lMQWAuIEJ1dCwgbGV0JiMzOTtzIHNlZSwgZG9lcyBpdCByZXF1aXJlIGFueXRoaW5nIGVsc2U/IE9rYXksIGBJUFY2X0lMQWAgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgYW5kIGl0IHNlbGVjdHMgYERTVF9DQUNIRWAgYW5kIGBMV1RVTk5FTGAuIFNvLCBhcyBsb25nIGFzIGBJUFY2X0lMQWAgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkIGJlIGdvb2QgdG8gZ28uCgpUaGlzIGZpeCBpcyBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQsIHJlYWNoYWJsZSBuZXR3b3JrIGxvZ2ljLCBhbmQgYWRkcmVzc2VzIGEgY2xlYXIgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXR5LiBUaGF0IG1ha2VzIHRoaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2X0lMQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQmIzM0OywKICAgICYjMzQ7aWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3ImIzM0OywKICAgICYjMzQ7aWxhX3hsYXRfYWRkciYjMzQ7LAogICAgJiMzNDtpbGFfbmZfaW5wdXQmIzM0OywKICAgICYjMzQ7aWxhX291dHB1dCYjMzQ7LAogICAgJiMzNDtpbGFfaW5wdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgd2hlcmUgdGhlIGBpcDZoYCBwb2ludGVyIGJlY29tZXMgaW52YWxpZCBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsKClgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBSZS1mZXRjaGluZyB0aGUgcG9pbnRlciB2aWEgYGlwdjZfaGRyKHNrYilgIGVuc3VyZXMgdGhlIGNvcnJlY3QgbWVtb3J5IGFkZHJlc3MgaXMgdXNlZCBmb3IgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGFuZCBsb2NhdG9yIHVwZGF0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIGxvZ2ljIChJUHY2IElMQSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfSUxBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDtpbGFfdXBkYXRlX2lwdjZfbG9jYXRvciYjMzQ7LAogICAgJiMzNDtpbGFfeGxhdF9hZGRyJiMzNDssCiAgICAmIzM0O2lsYV9uZl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpbGFfb3V0cHV0JiMzNDssCiAgICAmIzM0O2lsYV9pbnB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSB3aGVyZSB0aGUgYGlwNmhgIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGwoKWAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBzb2NrZXQgYnVmZmVyIGRhdGEuIFJlLWZldGNoaW5nIHRoZSBwb2ludGVyIHZpYSBgaXB2Nl9oZHIoc2tiKWAgZW5zdXJlcyB0aGUgY29ycmVjdCBtZW1vcnkgYWRkcmVzcyBpcyB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMgKElQdjYgSUxBKSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjIzLjQyMzAxODI5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODM2MzY4MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfSUxBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydFwiLFxuICAgIFwiaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JcIixcbiAgICBcImlsYV94bGF0X2FkZHJcIixcbiAgICBcImlsYV9uZl9pbnB1dFwiLFxuICAgIFwiaWxhX291dHB1dFwiLFxuICAgIFwiaWxhX2lucHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgd2hlcmUgdGhlIGBpcDZoYCBwb2ludGVyIGJlY29tZXMgaW52YWxpZCBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsKClgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBSZS1mZXRjaGluZyB0aGUgcG9pbnRlciB2aWEgYGlwdjZfaGRyKHNrYilgIGVuc3VyZXMgdGhlIGNvcnJlY3QgbWVtb3J5IGFkZHJlc3MgaXMgdXNlZCBmb3IgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGFuZCBsb2NhdG9yIHVwZGF0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIGxvZ2ljIChJUHY2IElMQSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjIzLjQyMzAyNDU1MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxNzQ0MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDJiZmYzOGEzMGI5ZGExYmIzODZlMzZlOGM5NjcyYjg5NjI3OWVhNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxMiAwNzo1MDoyMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jIGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xcbmluZGV4IGU3MTU3MTQ1NWM4YTBhLi5hY2VkYzVhODRlNGQ3MyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jXFxuKysrIGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xcbkBAIC04NSw2ICs4NSw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0c3RydWN0IHRjcGhkciAqdGggPSAoc3RydWN0IHRjcGhkciAqKVxcbiBcXHRcXHRcXHRcXHRcXHQoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBuaG9mZik7XFxuIFxcbitcXHRcXHRcXHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcXG4gXFx0XFx0XFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XFxuIFxcdFxcdFxcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXFx1MDAyNnRoLVxcdTAwM2VjaGVjaywgc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRkaWZmLCB0cnVlLCB0cnVlKTtcXG5AQCAtOTYsNiArOTcsNyBAQCBzdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdChza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG5ob2ZmKTtcXG4gXFxuIFxcdFxcdFxcdGlmICh1aC1cXHUwMDNlY2hlY2sgfHwgc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbitcXHRcXHRcXHRcXHRpcDZoID0gaXB2Nl9oZHIoc2tiKTtcXG4gXFx0XFx0XFx0XFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XFxuIFxcdFxcdFxcdFxcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXFx1MDAyNnVoLVxcdTAwM2VjaGVjaywgc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkaWZmLCB0cnVlLCB0cnVlKTtcXG5AQCAtMTEwLDYgKzExMiw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0c3RydWN0IGljbXA2aGRyICppaCA9IChzdHJ1Y3QgaWNtcDZoZHIgKilcXG4gXFx0XFx0XFx0XFx0XFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgbmhvZmYpO1xcbiBcXG4rXFx0XFx0XFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuIFxcdFxcdFxcdGRpZmYgPSBnZXRfY3N1bV9kaWZmKGlwNmgsIHApO1xcbiBcXHRcXHRcXHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKFxcdTAwMjZpaC1cXHUwMDNlaWNtcDZfY2tzdW0sIHNrYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XFxuQEAgLTE1MSw2ICsxNTQsOSBAQCB2b2lkIGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbGFfcGFyYW1zICpwLFxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4rXFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuK1xcdGlhZGRyID0gaWxhX2EyaShcXHUwMDI2aXA2aC1cXHUwMDNlZGFkZHIpO1xcbitcXG4gXFx0LyogTm93IGNoYW5nZSBkZXN0aW5hdGlvbiBhZGRyZXNzICovXFxuIFxcdGlhZGRyLVxcdTAwM2Vsb2MgPSBwLVxcdTAwM2Vsb2NhdG9yO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjI0LjA5NTcwMDE0MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUxNjM2Mzc0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9JTEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0XCIsXG4gICAgXCJpbGFfdXBkYXRlX2lwdjZfbG9jYXRvclwiLFxuICAgIFwiaWxhX3hsYXRfYWRkclwiLFxuICAgIFwiaWxhX25mX2lucHV0XCIsXG4gICAgXCJpbGFfb3V0cHV0XCIsXG4gICAgXCJpbGFfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSB3aGVyZSB0aGUgYGlwNmhgIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGwoKWAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBzb2NrZXQgYnVmZmVyIGRhdGEuIFJlLWZldGNoaW5nIHRoZSBwb2ludGVyIHZpYSBgaXB2Nl9oZHIoc2tiKWAgZW5zdXJlcyB0aGUgY29ycmVjdCBtZW1vcnkgYWRkcmVzcyBpcyB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMgKElQdjYgSUxBKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMmJmZjM4YTMwYjlkYTFiYjM4NmUzNmU4Yzk2NzJiODk2Mjc5ZWE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMTIgMDc6NTA6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jIGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuaW5kZXggZTcxNTcxNDU1YzhhMGEuLmFjZWRjNWE4NGU0ZDczIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuKysrIGIvbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY1xuQEAgLTg1LDYgKzg1LDcgQEAgc3RhdGljIHZvaWQgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHN0cnVjdCB0Y3BoZHIgKnRoID0gKHN0cnVjdCB0Y3BoZHIgKilcbiBcdFx0XHRcdFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgbmhvZmYpO1xuIFxuK1x0XHRcdGlwNmggPSBpcHY2X2hkcihza2IpO1xuIFx0XHRcdGRpZmYgPSBnZXRfY3N1bV9kaWZmKGlwNmgsIHApO1xuIFx0XHRcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXHUwMDI2dGgtXHUwMDNlY2hlY2ssIHNrYixcbiBcdFx0XHRcdFx0XHRcdGRpZmYsIHRydWUsIHRydWUpO1xuQEAgLTk2LDYgKzk3LDcgQEAgc3RhdGljIHZvaWQgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBuaG9mZik7XG4gXG4gXHRcdFx0aWYgKHVoLVx1MDAzZWNoZWNrIHx8IHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuK1x0XHRcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRcdFx0XHRkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTtcbiBcdFx0XHRcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXHUwMDI2dWgtXHUwMDNlY2hlY2ssIHNrYixcbiBcdFx0XHRcdFx0XHRcdFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XG5AQCAtMTEwLDYgKzExMiw3IEBAIHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRzdHJ1Y3QgaWNtcDZoZHIgKmloID0gKHN0cnVjdCBpY21wNmhkciAqKVxuIFx0XHRcdFx0XHQoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBuaG9mZik7XG4gXG4rXHRcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4gXHRcdFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XG4gXHRcdFx0aW5ldF9wcm90b19jc3VtX3JlcGxhY2VfYnlfZGlmZihcdTAwMjZpaC1cdTAwM2VpY21wNl9ja3N1bSwgc2tiLFxuIFx0XHRcdFx0XHRcdFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XG5AQCAtMTUxLDYgKzE1NCw5IEBAIHZvaWQgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlsYV9wYXJhbXMgKnAsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuK1x0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4rXHRpYWRkciA9IGlsYV9hMmkoXHUwMDI2aXA2aC1cdTAwM2VkYWRkcik7XG4rXG4gXHQvKiBOb3cgY2hhbmdlIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi9cbiBcdGlhZGRyLVx1MDAzZWxvYyA9IHAtXHUwMDNlbG9jYXRvcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNzo1MDoyNC4wOTU3MDIzMTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDcxNTM3Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGluIG5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY2AuIEl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydGAgYW5kIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgdGhleSd2ZSBhZGRlZCBgaXA2aCA9IGlwdjZfaGRyKHNrYik7YCByaWdodCBiZWZvcmUgdGhlIGNhbGxzIHRvIGBnZXRfY3N1bV9kaWZmYCBpbiB0aGUgZm9ybWVyIGFuZCBiZWZvcmUgZ2V0dGluZyB0aGUgSUxBIGFkZHJlc3MgZnJvbSB0aGUgZGVzdGluYXRpb24gSVAgaW4gdGhlIGxhdHRlci5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHN0YWxlIHBvaW50ZXIgaXNzdWUuIFRoZXkncmUgcmUtYWNxdWlyaW5nIHRoZSBJUHY2IGhlYWRlciBwb2ludGVyLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgZWl0aGVyIGBwc2tiX21heV9wdWxsYCBvciBzb21lIG90aGVyIHNrYiBtYW5pcHVsYXRpb24gZnVuY3Rpb24gaXMgbGlrZWx5IGJlaW5nIGNhbGxlZCBpbiBiZXR3ZWVuLCB3aGljaCBjb3VsZCBpbnZhbGlkYXRlIG9yIG1vdmUgdGhlIG9yaWdpbmFsIGBpcDZoYCBwb2ludGVyLiBBbHRlcm5hdGl2ZWx5LCBwZXJoYXBzIHRoZSBvcmlnaW5hbCBgaXA2aGAganVzdCB3YXNuJ3QgYmVpbmcgY29ycmVjdGx5IHVwZGF0ZWQgYWZ0ZXIgc29tZSBvcGVyYXRpb24uXG5cbkkgbmVlZCB0byBkaXZlIGludG8gYGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnRgIGFuZCBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgIHRvIGNvbmZpcm0gd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBleGFjdCBsb2dpYyBhbmQgd2hlcmUgdGhleSdyZSBiZWluZyBjYWxsZWQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIHBvdGVudGlhbCBidWcgYW5kIGhvdyB0aGlzIHBhdGNoIGZpeGVzIGl0LiBJdCdzIGltcG9ydGFudCB0byB2ZXJpZnkgaWYgdGhlcmUncyBhIHJlYWwtd29ybGQgc2NlbmFyaW8gd2hlcmUgdGhlIGluaXRpYWwgYGlwNmhgIGNvdWxkIGJlIGNvcnJ1cHRlZCBvciBnbyBzdGFsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjMxLjE2NzI0MjEwNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU0NDc2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmM9NjQ9c3RhdGljIHZvaWQgaWxhX2NzdW1fZG9fbmV1dHJhbF9ub2ZtdChzdHJ1Y3QgaWxhX2FkZHIgKmlhZGRyLFxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYy03NC1cXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jOjc1OnN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTc2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbGFfcGFyYW1zICpwKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYz0xMjQ9dm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCxcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmMtMTMxLVxcdGNhc2UgSUxBX0NTVU1fQURKVVNUX1RSQU5TUE9SVDpcXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jOjEzMjpcXHRcXHRpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHNrYiwgcCk7XFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYy0xMzMtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjMxLjMwMjY5NTg5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzQwMTc4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIHByZXNlbnRlZCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggaXQgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJTEEgQ29kZSoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIElQdjYgSUxBIChJbnRlbGxpZ2VudCBMaW5rIEFnZ3JlZ2F0aW9uKSBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBpbGFfY29tbW9uLmNgIGZpbGUuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggbmV0d29ya2luZyBpbnRlcm5hbHMsIEknbGwgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIGV4YW1pbmUgdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDc1IGFuZCAxMjQgb2YgdGhhdCBmaWxlLiBNeSBodW5jaCBpcywgdGhlc2UgbG9jYXRpb25zIHdpbGwgcmV2ZWFsIHRoZSBjb3JlIGFzcGVjdHMgb2Ygd2hhdCdzIGJlaW5nIGRpc2N1c3NlZCAtIHdoYXRldmVyIHRoYXQgaXMgLSBpbiBncmVhdGVyIGRldGFpbC4gSSBleHBlY3QgdGhvc2UgbGluZXMgdG8gc2V0IHRoZSBzdGFnZSBmb3Igd2hhdGV2ZXIgcHJvYmxlbSBvciBmdW5jdGlvbiB0aGUgc25pcHBldCByZWZlcnMgdG8uIFdpdGggdGhhdCBjb250ZXh0LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTA6MzUuMTM2NzE2NDA1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdCAqL1xcbiAgNjE6XFx0XFx0aWFkZHItXFx1MDAzZWlkZW50LmNzdW1fbmV1dHJhbCBePSAxO1xcbiAgNjI6XFx0fVxcbiAgNjM6XFx0XFxuICA2NDpcXHRzdGF0aWMgdm9pZCBpbGFfY3N1bV9kb19uZXV0cmFsX25vZm10KHN0cnVjdCBpbGFfYWRkciAqaWFkZHIsXFxuICA2NTpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWxhX3BhcmFtcyAqcClcXG4gIDY2OlxcdHtcXG4gIDY3OlxcdFxcdF9fc3VtMTYgKmFkanVzdCA9IChfX2ZvcmNlIF9fc3VtMTYgKilcXHUwMDI2aWFkZHItXFx1MDAzZWlkZW50LnYxNlszXTtcXG4gIDY4OlxcdFxcdF9fd3N1bSBkaWZmO1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRkaWZmID0gZ2V0X2NzdW1fZGlmZl9pYWRkcihpYWRkciwgcCk7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdCphZGp1c3QgPSB+Y3N1bV9mb2xkKGNzdW1fYWRkKGRpZmYsIGNzdW1fdW5mb2xkKCphZGp1c3QpKSk7XFxuICA3MzpcXHR9XFxuICA3NDpcXHRcXG4gIDc1OlxcdHN0YXRpYyB2b2lkIGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDc2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbGFfcGFyYW1zICpwKVxcbiAgNzc6XFx0e1xcbiAgNzg6XFx0XFx0c2l6ZV90IG5ob2ZmID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4gIDc5OlxcdFxcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTtcXG4gIDgwOlxcdFxcdF9fd3N1bSBkaWZmO1xcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRzd2l0Y2ggKGlwNmgtXFx1MDAzZW5leHRoZHIpIHtcXG4gIDgzOlxcdFxcdGNhc2UgTkVYVEhEUl9UQ1A6XFxuICA4NDpcXHRcXHRcXHRpZiAobGlrZWx5KHBza2JfbWF5X3B1bGwoc2tiLCBuaG9mZiArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSkpKSB7XFxuICA4NTpcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwaGRyICp0aCA9IChzdHJ1Y3QgdGNwaGRyICopXFxuICA4NjpcXHRcXHRcXHRcXHRcXHRcXHQoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBuaG9mZik7XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdFxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbiAgODk6XFx0XFx0XFx0XFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XFxuICA5MDpcXHRcXHRcXHRcXHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKFxcdTAwMjZ0aC1cXHUwMDNlY2hlY2ssIHNrYixcXG4gIDkxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRpZmYsIHRydWUsIHRydWUpO1xcbiAgOTI6XFx0XFx0XFx0fVxcbiAgOTM6XFx0XFx0XFx0YnJlYWs7XFxuICA5NDpcXHRcXHRjYXNlIE5FWFRIRFJfVURQOlxcbiAgOTU6XFx0XFx0XFx0aWYgKGxpa2VseShwc2tiX21heV9wdWxsKHNrYiwgbmhvZmYgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpKSkge1xcbiAgOTY6XFx0XFx0XFx0XFx0c3RydWN0IHVkcGhkciAqdWggPSAoc3RydWN0IHVkcGhkciAqKVxcbiAgOTc6XFx0XFx0XFx0XFx0XFx0XFx0KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgbmhvZmYpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRcXHRcXHRpZiAodWgtXFx1MDAzZWNoZWNrIHx8IHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHtcXG4gMTAwOlxcdFxcdFxcdFxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbiAxMDE6XFx0XFx0XFx0XFx0XFx0ZGlmZiA9IGdldF9jc3VtX2RpZmYoaXA2aCwgcCk7XFxuIDEwMjpcXHRcXHRcXHRcXHRcXHRpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZV9ieV9kaWZmKFxcdTAwMjZ1aC1cXHUwMDNlY2hlY2ssIHNrYixcXG4gMTAzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRpZmYsIHRydWUsIHRydWUpO1xcbiAxMDQ6XFx0XFx0XFx0XFx0XFx0aWYgKCF1aC1cXHUwMDNlY2hlY2spXFxuIDEwNTpcXHRcXHRcXHRcXHRcXHRcXHR1aC1cXHUwMDNlY2hlY2sgPSBDU1VNX01BTkdMRURfMDtcXG4gMTA2OlxcdFxcdFxcdFxcdH1cXG4gMTA3OlxcdFxcdFxcdH1cXG4gMTA4OlxcdFxcdFxcdGJyZWFrO1xcbiAxMDk6XFx0XFx0Y2FzZSBORVhUSERSX0lDTVA6XFxuIDExMDpcXHRcXHRcXHRpZiAobGlrZWx5KHBza2JfbWF5X3B1bGwoc2tiLFxcbiAxMTE6XFx0XFx0XFx0XFx0XFx0XFx0IG5ob2ZmICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcikpKSkge1xcbiAxMTI6XFx0XFx0XFx0XFx0c3RydWN0IGljbXA2aGRyICppaCA9IChzdHJ1Y3QgaWNtcDZoZHIgKilcXG4gMTEzOlxcdFxcdFxcdFxcdFxcdFxcdChza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG5ob2ZmKTtcXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0XFx0XFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuIDExNjpcXHRcXHRcXHRcXHRkaWZmID0gZ2V0X2NzdW1fZGlmZihpcDZoLCBwKTtcXG4gMTE3OlxcdFxcdFxcdFxcdGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlX2J5X2RpZmYoXFx1MDAyNmloLVxcdTAwM2VpY21wNl9ja3N1bSwgc2tiLFxcbiAxMTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGlmZiwgdHJ1ZSwgdHJ1ZSk7XFxuIDExOTpcXHRcXHRcXHR9XFxuIDEyMDpcXHRcXHRcXHRicmVhaztcXG4gMTIxOlxcdFxcdH1cXG4gMTIyOlxcdH1cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0dm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCxcXG4gMTI1OlxcdFxcdFxcdFxcdCAgICAgYm9vbCBzaXIyaWxhKVxcbiAxMjY6XFx0e1xcbiAxMjc6XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpO1xcbiAxMjg6XFx0XFx0c3RydWN0IGlsYV9hZGRyICppYWRkciA9IGlsYV9hMmkoXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyKTtcXG4gMTI5OlxcdFxcbiAxMzA6XFx0XFx0c3dpdGNoIChwLVxcdTAwM2Vjc3VtX21vZGUpIHtcXG4gMTMxOlxcdFxcdGNhc2UgSUxBX0NTVU1fQURKVVNUX1RSQU5TUE9SVDpcXG4gMTMyOlxcdFxcdFxcdGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnQoc2tiLCBwKTtcXG4gMTMzOlxcdFxcdFxcdGJyZWFrO1xcbiAxMzQ6XFx0XFx0Y2FzZSBJTEFfQ1NVTV9ORVVUUkFMX01BUDpcXG4gMTM1OlxcdFxcdFxcdGlmIChzaXIyaWxhKSB7XFxuIDEzNjpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTihpbGFfY3N1bV9uZXV0cmFsX3NldChpYWRkci1cXHUwMDNlaWRlbnQpKSkge1xcbiAxMzc6XFx0XFx0XFx0XFx0XFx0LyogQ2hlY2tzdW0gZmxhZyBzaG91bGQgbmV2ZXIgYmVcXG4gMTM4OlxcdFxcdFxcdFxcdFxcdCAqIHNldCBpbiBhIGZvcm1hdHRlZCBTSVIgYWRkcmVzcy5cXG4gMTM5OlxcdFxcdFxcdFxcdFxcdCAqL1xcbiAxNDA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE0MTpcXHRcXHRcXHRcXHR9XFxuIDE0MjpcXHRcXHRcXHR9IGVsc2UgaWYgKCFpbGFfY3N1bV9uZXV0cmFsX3NldChpYWRkci1cXHUwMDNlaWRlbnQpKSB7XFxuIDE0MzpcXHRcXHRcXHRcXHQvKiBJTEEgdG8gU0lSIHRyYW5zbGF0aW9uIGFuZCBDLWJpdCBpc24ndFxcbiAxNDQ6XFx0XFx0XFx0XFx0ICogc2V0IHNvIHdlJ3JlIGdvb2QuXFxuIDE0NTpcXHRcXHRcXHRcXHQgKi9cXG4gMTQ2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDc6XFx0XFx0XFx0fVxcbiAxNDg6XFx0XFx0XFx0aWxhX2NzdW1fZG9fbmV1dHJhbF9mbXQoaWFkZHIsIHApO1xcbiAxNDk6XFx0XFx0XFx0YnJlYWs7XFxuIDE1MDpcXHRcXHRjYXNlIElMQV9DU1VNX05FVVRSQUxfTUFQX0FVVE86XFxuIDE1MTpcXHRcXHRcXHRpbGFfY3N1bV9kb19uZXV0cmFsX25vZm10KGlhZGRyLCBwKTtcXG4gMTUyOlxcdFxcdFxcdGJyZWFrO1xcbiAxNTM6XFx0XFx0Y2FzZSBJTEFfQ1NVTV9OT19BQ1RJT046XFxuIDE1NDpcXHRcXHRcXHRicmVhaztcXG4gMTU1OlxcdFxcdH1cXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuIDE1ODpcXHRcXHRpYWRkciA9IGlsYV9hMmkoXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyKTtcXG4gMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNzo1MDozNS4xMzY4NDE5MjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTU5MjE4NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIElQdjYgSGVhZGVyIFZ1bG5lcmFiaWxpdHkgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBjbG9zZXIgbG9vay4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0aGUgcHJvYmxlbSBzdGVtcyBmcm9tIHRoZSBmYWN0IHRoYXQgYHBza2JfbWF5X3B1bGxgIGNhbiByZWFsbG9jYXRlIHRoZSBgc2tiYCBkYXRhLiBUaGF0IG1lYW5zIHRoZSBwb2ludGVyIGBpcDZoID0gaXB2Nl9oZHIoc2tiKTtgIG1pZ2h0IGJlY29tZSBzdGFsZSBhZnRlciBhIGBwc2tiX21heV9wdWxsYCBjYWxsLiBUaGUgcGF0Y2ggc21hcnRseSByZS1ldmFsdWF0ZXMgYGlwNmhgIGFmdGVyIHRob3NlIGNhbGxzIHRvIGVuc3VyZSB3ZSdyZSBhbHdheXMgd29ya2luZyB3aXRoIGEgdmFsaWQgcG9pbnRlciB0byB0aGUgSVB2NiBoZWFkZXIuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBmaXguXG5cbk15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMsIFwiV2hhdCBjb25maWcgb3B0aW9ucyBlbmFibGUgdGhpcyBjb2RlIHBhdGg/XCIgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgY29uZmlndXJhdGlvbiB0byB0cmlnZ2VyIHRoaXMgdnVsbmVyYWJpbGl0eSwgc28gSSBjYW4gdGFyZ2V0IGl0IHByb3Blcmx5IGluIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIGZpbGUgbWVudGlvbmVkLCBgbmV0L2lwdjYvaWxhL2lsYV9jb21tb24uY2AsIGlzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGUgcmVsYXRlZCBNYWtlZmlsZXMsIGVpdGhlciBgbmV0L2lwdjYvaWxhL01ha2VmaWxlYCBvciBgbmV0L2lwdjYvTWFrZWZpbGVgLCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjbHVlcyBJIG5lZWQuIExldCdzIHNlZSBpZiB0aGUgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIGlmIHRoZXJlJ3MgYSBzcGVjaWZpYyBtb2R1bGUgdGhhdCBoYXMgdG8gYmUgbG9hZGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjQwLjY5NjA2MjQ2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkxNzExMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWxhX2NvbW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pbGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lsYS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19JUFY2X0lMQSkgKz0gaWxhLm9cXG5uZXQvaXB2Ni9pbGEvTWFrZWZpbGUtNy1cXG5uZXQvaXB2Ni9pbGEvTWFrZWZpbGU6ODppbGEtb2JqcyA6PSBpbGFfbWFpbi5vIGlsYV9jb21tb24ubyBpbGFfbHd0Lm8gaWxhX3hsYXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNzo1MDo0MC44MjUyMzk0NDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM5Mzk3MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgdGV4dDpcblxuKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdGV4dCBzZWVtcyB0byBiZSBwb2ludGluZyBtZSB0b3dhcmRzIGBDT05GSUdfSVBWNl9JTEFgLiBSaWdodCwgSSBrbm93IHRoYXQgb25lIOKAkyBpdCdzIGxpa2VseSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkuIEkgbmVlZCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0IG9mIElQdjYgY29uZmlndXJhdGlvbiBpcyBjcnVjaWFsIGZvciB0aGlzIGtpbmQgb2Ygd29yay4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBiZWZvcmUgSSBkZWx2ZSBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mIGBDT05GSUdfSVBWNl9JTEFgLiBMZXQncyBzZWUgd2hhdCBlbHNlIGlzIG91dCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzNywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjQzLjg2NDYzOTg5MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMTAxMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X0lMQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0xMTI9Y29uZmlnIElQVjZfTUlQNlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNzo1MDo0NC4wMTQ3NDY1NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NTU3MTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHNvbWUgSVB2NiBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIEtjb25maWcgZmlsZSBmb3IgSVB2NiwgYW5kIGl0IGxvb2tzIGxpa2UgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmUgMTIwLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGZlYXR1cmUncyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVzaWRlLCBzbyBJJ2xsIHN0YXJ0IHRoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBzZXR0aW5ncyBJIG5lZWQgdG8gcmV2aWV3LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSdyZSBpbnRlbmRlZCB0byB3b3JrLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTA6NDYuOTYwMzIwODM4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXHRoZWxwXFxuIDExNjpcXHRcXHQgIFN1cHBvcnQgZm9yIElQdjYgTW9iaWxpdHkgZGVzY3JpYmVkIGluIFJGQyAzNzc1LlxcbiAxMTc6XFx0XFxuIDExODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDExOTpcXHRcXG4gMTIwOlxcdGNvbmZpZyBJUFY2X0lMQVxcbiAxMjE6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbiAxMjI6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJcXG4gMTIzOlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMTI0OlxcdFxcdHNlbGVjdCBMV1RVTk5FTFxcbiAxMjU6XFx0XFx0aGVscFxcbiAxMjY6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHY2IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpLlxcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHQgIElMQSBpcyBhIG1lY2hhbmlzbSB0byBkbyBuZXR3b3JrIHZpcnR1YWxpemF0aW9uIHdpdGhvdXRcXG4gMTI5OlxcdFxcdCAgZW5jYXBzdWxhdGlvbi4gVGhlIGJhc2ljIGNvbmNlcHQgb2YgSUxBIGlzIHRoYXQgd2Ugc3BsaXQgYW5cXG4gMTMwOlxcdFxcdCAgSVB2NiBhZGRyZXNzIGludG8gYSA2NCBiaXQgbG9jYXRvciBhbmQgNjQgYml0IGlkZW50aWZpZXIuIFRoZVxcbiAxMzE6XFx0XFx0ICBpZGVudGlmaWVyIGlzIHRoZSBpZGVudGl0eSBvZiBhbiBlbnRpdHkgaW4gY29tbXVuaWNhdGlvblxcbiAxMzI6XFx0XFx0ICAoXFxcIndob1xcXCIpIGFuZCB0aGUgbG9jYXRvciBleHByZXNzZXMgdGhlIGxvY2F0aW9uIG9mIHRoZVxcbiAxMzM6XFx0XFx0ICBlbnRpdHkgKFxcXCJ3aGVyZVxcXCIpLlxcbiAxMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjQ2Ljk2MDQzODc4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTU0NjYxNDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVBWNl9JTEEgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBJUFY2X0lMQWAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gQW5kIGl0IHJlbGllcyBvbiBgTkVURklMVEVSYCwgc28gd2UgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcz9cblxuSXQgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBtb2RpZmljYXRpb25zIGFyZSBjZW50ZXJlZCBhcm91bmQgYGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnRgIGFuZCBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgLiBUaGUgZmFjdCB0aGF0IGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCBpcyBzdGF0aWMgaXMgYSBiaXQgb2YgYSBodXJkbGUuIElmIGl0J3MgaW5saW5lZCwgZGlyZWN0bHkgZm9jdXNpbmcgb24gaXQgbWlnaHQgYmUgZGlmZmljdWx0LiBCdXQsIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAgaXMgc3RpbGwgYSB2YWxpZCBmdW5jdGlvbiB0byBmb2N1cyBvbi4gV2hlcmUgaXQncyBjYWxsZWQsIHRoYXQncyB3aGF0IEkgd2FudCB0byBzZWUuIExldCdzIHRyYWNlIHRob3NlIGNhbGxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjEyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTA6NTEuNTE1MTAyODc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI4NTA4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaWxhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pbGEvaWxhLmg9ODg9c3RhdGljIGlubGluZSBib29sIGlsYV9jc3VtX25ldXRyYWxfc2V0KHN0cnVjdCBpbGFfaWRlbnRpZmllciBpZGVudClcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGEuaC05Mi1cXG5uZXQvaXB2Ni9pbGEvaWxhLmg6OTM6dm9pZCBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWxhX3BhcmFtcyAqcCxcXG5uZXQvaXB2Ni9pbGEvaWxhLmgtOTQtXFx0XFx0XFx0ICAgICBib29sIHNldF9jc3VtX25ldXRyYWwpO1xcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9jb21tb24uYz03NT1zdGF0aWMgdm9pZCBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jLTEyMy1cXG5uZXQvaXB2Ni9pbGEvaWxhX2NvbW1vbi5jOjEyNDp2b2lkIGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbGFfcGFyYW1zICpwLFxcbm5ldC9pcHY2L2lsYS9pbGFfY29tbW9uLmMtMTI1LVxcdFxcdFxcdCAgICAgYm9vbCBzaXIyaWxhKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0zOD1zdGF0aWMgaW50IGlsYV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTQ5LVxcdGlmIChpbHd0LVxcdTAwM2Vsd3Rfb3V0cHV0KVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6NTA6XFx0XFx0aWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3Ioc2tiLFxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtNTEtXFx0XFx0XFx0XFx0XFx0aWxhX3BhcmFtc19sd3R1bm5lbChvcmlnX2RzdC1cXHUwMDNlbHd0c3RhdGUpLFxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0xMDg9c3RhdGljIGludCBpbGFfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMTE2LVxcdGlmICghaWx3dC1cXHUwMDNlbHd0X291dHB1dClcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjExNzpcXHRcXHRpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcihza2IsXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMTgtXFx0XFx0XFx0XFx0XFx0aWxhX3BhcmFtc19sd3R1bm5lbChkc3QtXFx1MDAzZWx3dHN0YXRlKSxcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jPTY0MT1zdGF0aWMgaW50IGlsYV94bGF0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzaXIyaWxhKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNjU5LVxcdGlmIChpbGEpXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6NjYwOlxcdFxcdGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHNrYiwgXFx1MDAyNmlsYS1cXHUwMDNleHAuaXAsIHNpcjJpbGEpO1xcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTY2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTA6NTEuNjY3OTU4NzQxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Mjk1ODAwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gSVB2NiBMb2NhdG9yIFVwZGF0ZXMqKlxuXG5Pa2F5LCBzbyBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBgaWxhX291dHB1dGAsIGBpbGFfaW5wdXRgLCBhbmQgYGlsYV94bGF0X2FkZHJgLiBHaXZlbiB0aGF0LCB0aG9zZSB0aHJlZSBhcmUgdGhlIG9idmlvdXMgcGxhY2VzIHRvIHN0YXJ0IGRpZ2dpbmcuIExldCdzIG1ha2Ugc3VyZSB3ZSBleGFtaW5lIHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucy5cblxuQSBxdWljayBzY2FuIHNob3dzIHRoYXQgYGlsYV9vdXRwdXRgIGFuZCBgaWxhX2lucHV0YCBhcmUgcmVsYXRlZCB0byB0aGUgTGlnaHQgV2VpZ2h0IFR1bm5lbCAoTFdUKSBob29rcywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGVuY2Fwc3VsYXRpb24vZGVjYXBzdWxhdGlvbiBwb2ludHMuIE1lYW53aGlsZSwgYGlsYV94bGF0X2FkZHJgIGlzIGEgbmV0ZmlsdGVyIGhvb2suIFRoYXQgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uLlxuXG5SaWdodCwgYGlsYV94bGF0X2FkZHJgLCBuZXRmaWx0ZXIgaG9vaywgYWRkcmVzcyB0cmFuc2xhdGlvbi4gVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IHBsYWNlIHRvIGxvb2sgZmlyc3QsIHNvIGxldCdzIGhlYWQgb3ZlciB0byBgbmV0L2lwdjYvaWxhL2lsYV94bGF0LmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjA2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjU2LjE5NzU0MTA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzEzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaWxhL2lsYV94bGF0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM1OlxcdFxcbiA2MzY6XFx0XFx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFxcdTAwMjZpbGFuLVxcdTAwM2V4bGF0LnJoYXNoX3RhYmxlLCBpbGFfZnJlZV9jYiwgTlVMTCk7XFxuIDYzNzpcXHRcXG4gNjM4OlxcdFxcdGZyZWVfYnVja2V0X3NwaW5sb2NrcyhpbGFuLVxcdTAwM2V4bGF0LmxvY2tzKTtcXG4gNjM5OlxcdH1cXG4gNjQwOlxcdFxcbiA2NDE6XFx0c3RhdGljIGludCBpbGFfeGxhdF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgc2lyMmlsYSlcXG4gNjQyOlxcdHtcXG4gNjQzOlxcdFxcdHN0cnVjdCBpbGFfbWFwICppbGE7XFxuIDY0NDpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7XFxuIDY0NTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gNjQ2OlxcdFxcdHN0cnVjdCBpbGFfbmV0ICppbGFuID0gbmV0X2dlbmVyaWMobmV0LCBpbGFfbmV0X2lkKTtcXG4gNjQ3OlxcdFxcdHN0cnVjdCBpbGFfYWRkciAqaWFkZHIgPSBpbGFfYTJpKFxcdTAwMjZpcDZoLVxcdTAwM2VkYWRkcik7XFxuIDY0ODpcXHRcXG4gNjQ5OlxcdFxcdC8qIEFzc3VtZXMgc2tiIGNvbnRhaW5zIGEgdmFsaWQgSVB2NiBoZWFkZXIgdGhhdCBpcyBwdWxsZWQgKi9cXG4gNjUwOlxcdFxcbiA2NTE6XFx0XFx0LyogTm8gY2hlY2sgaGVyZSB0aGF0IElMQSB0eXBlIGluIHRoZSBtYXBwaW5nIG1hdGNoZXMgd2hhdCBpcyBpbiB0aGVcXG4gNjUyOlxcdFxcdCAqIGFkZHJlc3MuIFdlIGFzc3VtZSB0aGF0IHdoYXRldmVyIHNlbmRlciBnYXZlcyB1cyBjYW4gYmUgdHJhbnNsYXRlZC5cXG4gNjUzOlxcdFxcdCAqIFRoZSBjaGVja3N1bSBtb2RlIGhvd2V2ZXIgaXMgcmVsZXZhbnQuXFxuIDY1NDpcXHRcXHQgKi9cXG4gNjU1OlxcdFxcbiA2NTY6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA2NTc6XFx0XFxuIDY1ODpcXHRcXHRpbGEgPSBpbGFfbG9va3VwX3dpbGRjYXJkcyhpYWRkciwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsIGlsYW4pO1xcbiA2NTk6XFx0XFx0aWYgKGlsYSlcXG4gNjYwOlxcdFxcdFxcdGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yKHNrYiwgXFx1MDAyNmlsYS1cXHUwMDNleHAuaXAsIHNpcjJpbGEpO1xcbiA2NjE6XFx0XFxuIDY2MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNjYzOlxcdFxcbiA2NjQ6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUwOjU2LjE5OTcxNTcxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzUwNDAyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgaWxhX3hsYXRfYWRkcmAqKlxuXG5Pa2F5LCBzbyBgaWxhX3hsYXRfYWRkcmAgaXMgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzLiBUaGF0J3MgZ29vZDsgbm8gZ2xvYmFsIG5hbWVzcGFjZSBwb2xsdXRpb24gdG8gd29ycnkgYWJvdXQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uIEknbGwgc3RhcnQgYnkgdHJhY2luZyBpdHMgaW52b2NhdGlvbnMuIEtub3dpbmcgdGhlIGNvbnRleHRzIG9mIHRob3NlIGNhbGxzIHdpbGwgYmUgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgbW9kaWZ5aW5nIGl0LiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBwYXNzZWQ/IEFyZSBhbnkgb2YgdGhvc2Ugdm9sYXRpbGUgb3Igc2hhcmVkPyBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIGlmIGFueSBpbmxpbmUgYXNzZW1ibHkgaXMgdXNlZCBpbiBpdHMgdXNlIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjAwLjEzNDc1ODQ0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTI5NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlsYV94bGF0X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaWxhL2lsYV94bGF0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9MTczPXN0YXRpYyB2b2lkIGlsYV9mcmVlX2NiKHZvaWQgKnB0ciwgdm9pZCAqYXJnKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTc3LVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjE3ODpzdGF0aWMgaW50IGlsYV94bGF0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzaXIyaWxhKTtcXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xNzktXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz0xODE9aWxhX25mX2lucHV0KHZvaWQgKnByaXYsXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xODQte1xcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjE4NTpcXHRpbGFfeGxhdF9hZGRyKHNrYiwgZmFsc2UpO1xcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE4Ni1cXHRyZXR1cm4gTkZfQUNDRVBUO1xcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9NjMyPXZvaWQgaWxhX3hsYXRfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNjQwLVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjY0MTpzdGF0aWMgaW50IGlsYV94bGF0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBzaXIyaWxhKVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTY0Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjAwLjI2MjY5NDY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODI2MTQwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBpbGFfbmZfaW5wdXRgKipcblxuT2theSwgSSdtIHRyYWNpbmcgdGhpcyBleGVjdXRpb24gYW5kIEkgc2VlIGl0J3Mgb3JpZ2luYXRpbmcgZnJvbSBgaWxhX25mX2lucHV0YC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icy4gU28sIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBpbGFfbmZfaW5wdXRgLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGlucHV0cywgaXRzIHByb2Nlc3NpbmcgbG9naWMsIGFuZCBlc3BlY2lhbGx5IHdoYXQgZGF0YSBpdCdzIGZlZWRpbmcgaW50byB0aGUgc3Vic2VxdWVudCBmdW5jdGlvbnMuIFRoaXMgbG9va3MgbGlrZSBhIGNyaXRpY2FsIHBvaW50IHdoZXJlIHNvbWV0aGluZyBpcyBnZXR0aW5nIGluaXRpYWxpemVkIG9yIHByZXBhcmVkLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjAzLjM0NTMxMTgxN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDk3OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlsYV9uZl9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz0xODA9c3RhdGljIHVuc2lnbmVkIGludFxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jOjE4MTppbGFfbmZfaW5wdXQodm9pZCAqcHJpdixcXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xODItXFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM9MTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaWxhX25mX2hvb2tfb3BzW10gPSB7XFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTkwLVxcdHtcXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYzoxOTE6XFx0XFx0Lmhvb2sgPSBpbGFfbmZfaW5wdXQsXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTkyLVxcdFxcdC5wZiA9IE5GUFJPVE9fSVBWNixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MDMuNDkwODE2NjA1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDQ3OTI0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBuZXR3b3JrIHN0YWNrIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEhvb2s6IElsYV9uZl9pbnB1dCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgaWxhX25mX2lucHV0YC4gT2theSwgc28sIHRoaXMgaXMgYSBuZXRmaWx0ZXIgaG9vay4gVGhhdCdzIGdvb2QgY29udGV4dCB0byBzdGFydCB3aXRoLCBJIGtub3cgaG93IG5ldGZpbHRlciB3b3Jrcywgc28gSSBjYW4gc3RhcnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgaW1tZWRpYXRlbHkuIEl0J3MgYW4gZW50cnkgcG9pbnQgZm9yIHByb2Nlc3NpbmcgcGFja2V0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIGludGVyYWN0cyB3aXRoIHRoaXMgZnVuY3Rpb24uIEFoYSwgSSBzZWUgaW4gdGhlIGNhbGwgZ3JhcGggdGhhdCBvdGhlciBjYWxsZXJzIGluY2x1ZGUgYGlsYV9vdXRwdXRgIGFuZCBgaWxhX2lucHV0YC4gQW5kIHRob3NlIGxpdmUgaW4gYG5ldC9pcHY2L2lsYS9pbGFfbHd0LmNgLiBPa2F5LCBub3cgSSBoYXZlIGEgbXVjaCBiZXR0ZXIgcGljdHVyZS4gVGhpcyBsaWtlbHkgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGFuIEludGVybWVkaWF0ZSBMaW5rIEFkZHJlc3MgKElMQSkgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIG5ldGZpbHRlciBmb3IgcGFja2V0IG1hbmlwdWxhdGlvbiwgYW5kIHRoZSBgbHd0YCAobGlnaHR3ZWlnaHQgdHVubmVsKSBhc3BlY3QgaXMgaGFuZGxpbmcgdGhlIGVuY2Fwc3VsYXRpb24gYW5kIGRlY2Fwc3VsYXRpb24sIG9yIG90aGVyIG1hbmlwdWxhdGlvbiwgb2YgdGhlIElQIHBhY2tldHMuIFRoZSBgaW5wdXRgIGFuZCBgb3V0cHV0YCBjYWxscyBzdWdnZXN0IHRoYXQgdGhpcyBuZXRmaWx0ZXIgaG9vayBgaWxhX25mX2lucHV0YCBpcyBiZWluZyB1c2VkIHRvIGRlYWwgd2l0aCBwYWNrZXRzIGNvbWluZyBpbiBmcm9tIHRoZSBuZXR3b3JrLCBhbmQgdGhlIGBpbGFfbHd0YCBjYWxscyBhcmUgZGVhbGluZyB3aXRoIHBhY2tldHMgb24gdGhlIGxvY2FsIGhvc3QuIEknbSBzdGFydGluZyB0byBnZXQgYSBnb29kIHNlbnNlIG9mIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlciwgYW5kIHRoZSBkaXJlY3Rpb24gSSBuZWVkIHRvIHN0YXJ0IG15IGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjA3LjgzNTYxMzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjA3NzY5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbGFfb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lsYS9pbGFfbHd0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0zMj1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbGFfcGFyYW1zICppbGFfcGFyYW1zX2x3dHVubmVsKFxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zNy1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjM4OnN0YXRpYyBpbnQgaWxhX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTM5LXtcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzEzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIGlsYV9lbmNhcF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTMxNS1cXHQuZGVzdHJveV9zdGF0ZSA9IGlsYV9kZXN0cm95X3N0YXRlLFxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6MzE2OlxcdC5vdXRwdXQgPSBpbGFfb3V0cHV0LFxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzE3LVxcdC5pbnB1dCA9IGlsYV9pbnB1dCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MDguMDE3Njk2NzE0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzcyNTQxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBMV1R1bm5lbCBFbmNhcHN1bGF0aW9uIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBpbGFfb3V0cHV0YCBhbmQgYGlsYV9pbnB1dGAuIFJpZ2h0LCB0aG9zZSBhcmUgY2xlYXJseSBpbnZvbHZlZCBpbiBMV1R1bm5lbCBlbmNhcHN1bGF0aW9uIG9wZXJhdGlvbnMuIE1ha2VzIHNlbnNlLiBJIGNhbiBwcm9iYWJseSBuYXJyb3cgbXkgZm9jdXMgdG8gYGlsYV9uZl9pbnB1dGAsIGBpbGFfb3V0cHV0YCwgYW5kIGBpbGFfaW5wdXRgIGZvciB0aGUgbW9tZW50OyB0aG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGJpdHMuIEhvbGQgb24gYSBzZWNvbmQuLi4gYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCBpcyAqZXhwb3J0ZWQqPyBUaGF04oCZcyBhIGJpdCB1bnVzdWFsIGZvciB0aGlzIHR5cGUgb2YgaW50ZXJuYWwgZnVuY3Rpb24uIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIGV4YWN0bHkgaG93IGFuZCB3aGVyZSB0aGF0J3MgYmVpbmcgZXhwb3NlZCwgc2luY2UgdGhhdCBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3Igc2VjdXJpdHkgb3IgZGVzaWduLiBHb3R0YSBpbnZlc3RpZ2F0ZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njk0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MTEuNDk0OTUzMzE2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NTU2MTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lsYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjExLjYyNzcyMTMyNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzExNDMyNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzIFN5bWJvbCBSZWZpbmVtZW50IGZvciBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gcmV2aXNpdGluZyB0aGlzIGZvY3VzIHN5bWJvbCBidXNpbmVzcyBmb3Igc3l6a2FsbGVyLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gemVyb2luZyBpbiBvbiB0aGUgcmlnaHQgZnVuY3Rpb25zLiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IHNpbmNlIHNvbWV0aGluZyB3YXNuJ3QgZXhwb3J0ZWQsIHRoYXQgaXQgd2FzIGluYWNjZXNzaWJsZSwgYnV0IHRoYXQncyBub3QgdGhlIGNhc2UgaWYgdGhlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aXRoaW4gdGhlIHNhbWUgbW9kdWxlLlxuXG5NeSBmaXJzdCB0aG91Z2h0IHdhcyBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgLiBJIHJlbWVtYmVyIHRoYXQncyBkZWZpbmVkIGluIGBpbGFfY29tbW9uLmNgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGBpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0YCwganVzdCB0byBiZSBjZXJ0YWluLiBBaCwgeWVzLCBgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydGAgaXMgc3RhdGljLCBhbHNvIGluIGBpbGFfY29tbW9uLmNgLlxuXG5SaWdodCwgbXkgb3JpZ2luYWwgY2FuZGlkYXRlcyBmb3IgZm9jdXMgd2VyZSBgaWxhX25mX2lucHV0YCwgYGlsYV9vdXRwdXRgLCBhbmQgYGlsYV9pbnB1dGAuIEhhbmcgb24sIHRob3VnaC4gV2VyZW4ndCBgaWxhX291dHB1dGAgYW5kIGBpbGFfaW5wdXRgIHN0YXRpYyBpbiBgaWxhX2x3dC5jYD8gVGhhdCdzIHJpZ2h0LiBUaGUgcXVlc3Rpb24gaXMgY2FuIHN5emthbGxlciBldmVuIGZvY3VzIG9uIHN0YXRpYyBmdW5jdGlvbnM/IFllcywgdGhhdCdzIHJpZ2h0LCBzeXprYWxsZXIgdXRpbGl6ZXMgZnVuY3Rpb24gbmFtZXMgYXMgdGhlIHByaW1hcnkgZm9jdXMgbWVjaGFuaXNtLCBzbyBpdCdzIG5vdCBhIHByb2JsZW0uXG5cbkhtbSwgYGlsYV9uZl9pbnB1dGAgaXMgc3RhdGljIGFzIHdlbGwuIEknZCBiZXR0ZXIgYmUgdGhvcm91Z2ggYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWwgY2FuZGlkYXRlcy5cblxuYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCBpcyAqbm90KiBzdGF0aWMsIGFuZCBpdCdzIGluIGBpbGFfY29tbW9uLmNgLiBJIGNhbiBmb2N1cyBvbiB0aGF0IGRpcmVjdGx5LiBBY3R1YWxseSwgSSB0aGluayBgaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JgIHdvdWxkIGJlIGEgZ3JlYXQgZm9jdXMgc3ltYm9sLlxuXG5MZXQncyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gSSBuZWVkIHRvIG1ha2UgY2VydGFpbiBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEdvaW5nIGJhY2sgdG8gYGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnRgLCBpdCdzIHN0YXRpYywgYnV0IEkgcmVtZW1iZXIgdGhhdCB0aGF0IHdhcyB0aGUgb25lIHRoYXQgd2FzIGZpeGVkIGVhcmxpZXIsIHNvIHRoYXQgZnVuY3Rpb24gY291bGQgYmUgYW4gYXBwcm9wcmlhdGUgYWRkaXRpb24uXG5cblNpbmNlIHN5emthbGxlciB1c2VzIGZ1bmN0aW9uIG5hbWVzIGZvciBmb2N1c2luZywgSSBjYW4gc2ltcGx5IGFkZCB0aGVtIHRvIHRoZSBmb2N1cyBsaXN0LiBMZXQncyBhZGQgYGlsYV91cGRhdGVfaXB2Nl9sb2NhdG9yYCwgYGlsYV9jc3VtX2FkanVzdF90cmFuc3BvcnRgLCBgaWxhX25mX2lucHV0YCwgYGlsYV9vdXRwdXRgLCBhbmQgYGlsYV9pbnB1dGAuXG5cblRoZSBsYXN0IHRoaW5nIHRvIGNoZWNrIGlzIHRoYXQgYGlsYV9vdXRwdXRgIGFuZCBgaWxhX2lucHV0YCBhcmUgYSBsaXR0bGUgZ2VuZXJpYywgc28gaXQncyB3b3J0aCBzZWVpbmcgaWYgdGhvc2Ugc3ltYm9sIG5hbWVzIGNsYXNoLiBUaGVyZSBtaWdodCBiZSBzb21lIG90aGVyIGBpbGFfb3V0cHV0YCBvciBgaWxhX2lucHV0YCBzb21ld2hlcmUuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gdmVyaWZ5IHRoYXQgdGhlIG5hbWVzIGFyZSB1bmlxdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MTguOTM5MTU2OTM3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODg2Njk5MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlsYV9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9MzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgaWxhX3BhcmFtcyAqaWxhX3BhcmFtc19sd3R1bm5lbChcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzctXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzozODpzdGF0aWMgaW50IGlsYV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zOS17XFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTMxMz1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpbGFfZW5jYXBfb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMTUtXFx0LmRlc3Ryb3lfc3RhdGUgPSBpbGFfZGVzdHJveV9zdGF0ZSxcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjMxNjpcXHQub3V0cHV0ID0gaWxhX291dHB1dCxcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTMxNy1cXHQuaW5wdXQgPSBpbGFfaW5wdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjI0LjgyNTg3NjM3NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzODM4NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIGEgS2V5IENvbnNpZGVyYXRpb24qKlxuXG5ZZXMsIHRoaXMgc2l0dWF0aW9uIGlzIGluZGVlZCB1bmlxdWUuIEl0IHByZXNlbnRzIGEgc3BlY2lmaWMgc2V0IG9mIGNpcmN1bXN0YW5jZXMgdGhhdCBJIGhhdmVuJ3QgZGlyZWN0bHkgZW5jb3VudGVyZWQgYmVmb3JlLCBhdCBsZWFzdCBub3QgaW4gdGhpcyBleGFjdCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgcG9zaXRpdmUsIGhvd2V2ZXIsIEkgd2FudCB0byBleHBsb3JlIGNlcnRhaW4gY29uc2lkZXJhdGlvbnMgYmVmb3JlIGdvaW5nIGZ1cnRoZXIuIE15IGludHVpdGlvbiBpcyB0aGF0IHRoaXMgaXMgdW51c3VhbCwgYW5kIHdhcnJhbnRzIGEgZnVsbCByZXZpZXcuXG5cblRoZSBwcmltYXJ5IGFyZWEgdGhhdCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgaXMgdGhlIGBpbGFfaW5wdXRgIHZhcmlhYmxlIG9yIGZ1bmN0aW9uLiBXaGF0IGlzIHRoZSBhcmNoaXRlY3R1cmUgaGVyZT8gSXMgdGhpcyB0aGUgcmlnaHQgY29udGV4dD8gVGhpcyBzZWVtcyBsaWtlIHRoZSBjcnVjaWFsIG5leHQgc3RlcCBpbiBteSB0aG91Z2h0IHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgaXRzIGNoYXJhY3RlcmlzdGljcywgaW50ZXJhY3Rpb25zLCBhbmQgcG90ZW50aWFsIGltcGFjdCBpcyB2aXRhbCBiZWZvcmUgSSBjYW4gZm9ybXVsYXRlIGEgc29saWQgY29uY2x1c2lvbiBvciByZWNvbW1lbmQgYSBjb3Vyc2Ugb2YgYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjI3Ljg0OTcxNzc2OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MTQ2Nzk5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbGFfaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9Mzg9c3RhdGljIGludCBpbGFfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0xMDctXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzoxMDg6c3RhdGljIGludCBpbGFfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTEwOS17XFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jPTMxMz1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBpbGFfZW5jYXBfb3BzID0ge1xcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy0zMTYtXFx0Lm91dHB1dCA9IGlsYV9vdXRwdXQsXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYzozMTc6XFx0LmlucHV0ID0gaWxhX2lucHV0LFxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmMtMzE4LVxcdC5maWxsX2VuY2FwID0gaWxhX2ZpbGxfZW5jYXBfaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MzIuMjExMTkwNzUyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NjE5MzU0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ29uc2lkZXJpbmcgVW5pcXVlbmVzcyBhbmQgQWRkcmVzcyBUcmFuc2xhdGlvbioqXG5cblllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBuZXcsIHNvbWV0aGluZyBzcGVjaWFsLiBCdXQsIHdhaXQuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgcGllY2VzLiBXaGF0IGFib3V0IGBpbGFfeGxhdF9hZGRyYD8gSG93IGRvZXMgdGhhdCBmaXQgaW50byB0aGlzIHBpY3R1cmU/IEkgaGF2ZSB0byBhbmFseXplIGhvdyB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uIHJlbGF0ZXMgdG8gdGhlIG92ZXJhbGwgaWRlYSBvZiB1bmlxdWVuZXNzLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA3OjUxOjM0Ljc3MzEzMDI3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NTc3Njk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbGFfeGxhdF9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz0xNzM9c3RhdGljIHZvaWQgaWxhX2ZyZWVfY2Iodm9pZCAqcHRyLCB2b2lkICphcmcpXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy0xNzctXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6MTc4OnN0YXRpYyBpbnQgaWxhX3hsYXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHNpcjJpbGEpO1xcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE3OS1cXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jPTE4MT1pbGFfbmZfaW5wdXQodm9pZCAqcHJpdixcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfeGxhdC5jLTE4NC17XFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6MTg1OlxcdGlsYV94bGF0X2FkZHIoc2tiLCBmYWxzZSk7XFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtMTg2LVxcdHJldHVybiBORl9BQ0NFUFQ7XFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYz02MzI9dm9pZCBpbGFfeGxhdF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pbGEvaWxhX3hsYXQuYy02NDAtXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmM6NjQxOnN0YXRpYyBpbnQgaWxhX3hsYXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHNpcjJpbGEpXFxubmV0L2lwdjYvaWxhL2lsYV94bGF0LmMtNjQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6MzkuMTM4OTEzNDM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5Mjc2MDAwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJ3ZlIGdvdCBhIGZ1bmN0aW9uYWwgZml4IGhlcmUgcmVsYXRlZCB0byBJUHY2IElMQSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWUuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgd2FzIHZ1bG5lcmFibGUgdG8gYSB1c2UtYWZ0ZXItZnJlZSBvciBkYXRhIGNvcnJ1cHRpb24gc2NlbmFyaW8uIFRoZSB2dWxuZXJhYmlsaXR5IG9jY3VycyB3aGVuIGBwc2tiX21heV9wdWxsKClgIHJlYWxsb2NhdGVzIHRoZSBzb2NrZXQgYnVmZmVyLCB3aGljaCBpbnZhbGlkYXRlcyB0aGUgYGlwNmhgIHBvaW50ZXIgdXNlZCBmb3IgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGFuZCBsb2NhdG9yIHVwZGF0ZXMuIFRoZSBwYXRjaCByZXNvbHZlcyB0aGlzIGJ5IHJlLWZldGNoaW5nIHRoZSBgaXA2aGAgcG9pbnRlciBhZnRlciB0aGUgcG90ZW50aWFsIHJlYWxsb2NhdGlvbi4gVGhhdCBtYWtlcyBzZW5zZSwgYXZvaWRpbmcgYW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydGAgYW5kIGBpbGFfdXBkYXRlX2lwdjZfbG9jYXRvcmAgYXJlIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBvbmVzIGJlaW5nIG1vZGlmaWVkIHRvIHByZXZlbnQgdGhlIGVycm9yLiBUaGUgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBpbGFfeGxhdF9hZGRyYCwgYGlsYV9uZl9pbnB1dGAsIGBpbGFfb3V0cHV0YCwgYW5kIGBpbGFfaW5wdXRgLCBsb29rIGxpa2UgY2FsbGVycyBvZiB0aGUgZml4ZWQgZnVuY3Rpb25zLiBXZSBzaG91bGQgaW5jbHVkZSB0aG9zZSBpbiBvdXIgZnV6emluZyB0YXJnZXQgbGlzdCBhcyB3ZWxsLCB0byBoZWxwIHRoZSBmdXp6ZXIgZXhwbG9yZSB0aGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5Ob3csIGxldCdzIGp1c3QgcXVpY2tseSBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgbWFpbiBvbmUgYXBwZWFycyB0byBiZSBgSVBWNl9JTEFgLiBCdXQsIGxldCdzIHNlZSwgZG9lcyBpdCByZXF1aXJlIGFueXRoaW5nIGVsc2U/IE9rYXksIGBJUFY2X0lMQWAgZGVwZW5kcyBvbiBgTkVURklMVEVSYCwgYW5kIGl0IHNlbGVjdHMgYERTVF9DQUNIRWAgYW5kIGBMV1RVTk5FTGAuIFNvLCBhcyBsb25nIGFzIGBJUFY2X0lMQWAgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkIGJlIGdvb2QgdG8gZ28uXG5cblRoaXMgZml4IGlzIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCwgcmVhY2hhYmxlIG5ldHdvcmsgbG9naWMsIGFuZCBhZGRyZXNzZXMgYSBjbGVhciBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdHkuIFRoYXQgbWFrZXMgdGhpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gc2V0IHRoZXNlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwOCwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDc6NTE6NDkuMDY2NTE1ODVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI4MTU2NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfSUxBXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWxhX2NzdW1fYWRqdXN0X3RyYW5zcG9ydFwiLFxuICAgIFwiaWxhX3VwZGF0ZV9pcHY2X2xvY2F0b3JcIixcbiAgICBcImlsYV94bGF0X2FkZHJcIixcbiAgICBcImlsYV9uZl9pbnB1dFwiLFxuICAgIFwiaWxhX291dHB1dFwiLFxuICAgIFwiaWxhX2lucHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgd2hlcmUgdGhlIGBpcDZoYCBwb2ludGVyIGJlY29tZXMgaW52YWxpZCBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsKClgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBSZS1mZXRjaGluZyB0aGUgcG9pbnRlciB2aWEgYGlwdjZfaGRyKHNrYilgIGVuc3VyZXMgdGhlIGNvcnJlY3QgbWVtb3J5IGFkZHJlc3MgaXMgdXNlZCBmb3IgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGFuZCBsb2NhdG9yIHVwZGF0ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JrIGxvZ2ljIChJUHY2IElMQSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9JTEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbGFfY3N1bV9hZGp1c3RfdHJhbnNwb3J0XCIsXG4gICAgXCJpbGFfdXBkYXRlX2lwdjZfbG9jYXRvclwiLFxuICAgIFwiaWxhX3hsYXRfYWRkclwiLFxuICAgIFwiaWxhX25mX2lucHV0XCIsXG4gICAgXCJpbGFfb3V0cHV0XCIsXG4gICAgXCJpbGFfaW5wdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSB3aGVyZSB0aGUgYGlwNmhgIHBvaW50ZXIgYmVjb21lcyBpbnZhbGlkIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGwoKWAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBzb2NrZXQgYnVmZmVyIGRhdGEuIFJlLWZldGNoaW5nIHRoZSBwb2ludGVyIHZpYSBgaXB2Nl9oZHIoc2tiKWAgZW5zdXJlcyB0aGUgY29ycmVjdCBtZW1vcnkgYWRkcmVzcyBpcyB1c2VkIGZvciBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYW5kIGxvY2F0b3IgdXBkYXRlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgbG9naWMgKElQdjYgSUxBKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow57szv[1] Phase: Succeeded StartedAt: 2026-07-12 07:52:01 +0000 UTC FinishedAt: 2026-07-12 07:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-12 07:52:01 +0000 UTC FinishedAt: 2026-07-12 07:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2] Phase: Succeeded StartedAt: 2026-07-12 07:52:01 +0000 UTC FinishedAt: 2026-07-12 12:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-12 07:52:01 +0000 UTC FinishedAt: 2026-07-12 12:15:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-12 07:52:01 +0000 UTC FinishedAt: 2026-07-12 07:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-12 07:52:01 +0000 UTC FinishedAt: 2026-07-12 07:52:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow57szv/series-workflow57szv-convert-artifact-1788689721/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-12 07:52:29 +0000 UTC FinishedAt: 2026-07-12 08:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-12 07:52:29 +0000 UTC FinishedAt: 2026-07-12 08:23:39 +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:*d356b081-6ddd-4690-8e86-7285c13dce38,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-workflow57szv/series-workflow57szv-convert-artifact-1788689721/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": "6528afd7-89fe-43ed-b11b-8848fe193590", "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-workflow57szv/series-workflow57szv-build-action-3370232407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-12 07:52:29 +0000 UTC FinishedAt: 2026-07-12 08:23:29 +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:*d356b081-6ddd-4690-8e86-7285c13dce38,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-workflow57szv/series-workflow57szv-convert-artifact-1788689721/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": "6528afd7-89fe-43ed-b11b-8848fe193590", "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-workflow57szv/series-workflow57szv-build-action-3370232407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-12 08:23:39 +0000 UTC FinishedAt: 2026-07-12 08:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-12 08:23:39 +0000 UTC FinishedAt: 2026-07-12 08:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-12 08:23:39 +0000 UTC FinishedAt: 2026-07-12 08:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-12 08:23:39 +0000 UTC FinishedAt: 2026-07-12 08:23:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow57szv/series-workflow57szv-convert-artifact-291387916/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-12 08:23:49 +0000 UTC FinishedAt: 2026-07-12 08:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-12 08:23:49 +0000 UTC FinishedAt: 2026-07-12 08:25:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6528afd7-89fe-43ed-b11b-8848fe193590,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-workflow57szv/series-workflow57szv-build-action-3370232407/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-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-12 08:26:01 +0000 UTC FinishedAt: 2026-07-12 08:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-12 08:26:01 +0000 UTC FinishedAt: 2026-07-12 08:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-12 08:26:01 +0000 UTC FinishedAt: 2026-07-12 09:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-12 08:26:01 +0000 UTC FinishedAt: 2026-07-12 09:11:04 +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:*d356b081-6ddd-4690-8e86-7285c13dce38,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-workflow57szv/series-workflow57szv-convert-artifact-291387916/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": "f9e54b2e-4367-4a99-9277-023f00aa5181", "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-workflow57szv/series-workflow57szv-build-action-1732812328/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-12 08:26:01 +0000 UTC FinishedAt: 2026-07-12 09:10:40 +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:*d356b081-6ddd-4690-8e86-7285c13dce38,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-workflow57szv/series-workflow57szv-convert-artifact-291387916/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": "f9e54b2e-4367-4a99-9277-023f00aa5181", "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-workflow57szv/series-workflow57szv-build-action-1732812328/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-12 09:11:04 +0000 UTC FinishedAt: 2026-07-12 09:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-12 09:11:04 +0000 UTC FinishedAt: 2026-07-12 09:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-12 09:11:04 +0000 UTC FinishedAt: 2026-07-12 09:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-12 09:11:04 +0000 UTC FinishedAt: 2026-07-12 09:13:20 +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:*f9e54b2e-4367-4a99-9277-023f00aa5181,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-workflow57szv/series-workflow57szv-build-action-1732812328/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-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-12 09:13:30 +0000 UTC FinishedAt: 2026-07-12 12:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-12 09:13:30 +0000 UTC FinishedAt: 2026-07-12 12:15:54 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},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:*6528afd7-89fe-43ed-b11b-8848fe193590,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f9e54b2e-4367-4a99-9277-023f00aa5181,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-workflow57szv/series-workflow57szv-build-action-3370232407/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-workflow57szv/series-workflow57szv-build-action-1732812328/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-12 09:13:30 +0000 UTC FinishedAt: 2026-07-12 09:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-12 09:13:30 +0000 UTC FinishedAt: 2026-07-12 09:13:36 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},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-workflow57szv/series-workflow57szv-convert-artifact-365391477/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-12 09:13:30 +0000 UTC FinishedAt: 2026-07-12 09:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-12 09:13:30 +0000 UTC FinishedAt: 2026-07-12 09:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-12 09:13:30 +0000 UTC FinishedAt: 2026-07-12 09:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-12 09:13:40 +0000 UTC FinishedAt: 2026-07-12 12:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow57szv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ila_csum_adjust_transport","ila_update_ipv6_locator","ila_xlat_addr","ila_nf_input","ila_output","ila_input"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_ILA"],"series_id":"1ecf4ed4-b7d6-45ba-b005-84348f71cd80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-12 09:13:40 +0000 UTC FinishedAt: 2026-07-12 12:15:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6528afd7-89fe-43ed-b11b-8848fe193590,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f9e54b2e-4367-4a99-9277-023f00aa5181,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-workflow57szv/series-workflow57szv-build-action-3370232407/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-workflow57szv/series-workflow57szv-build-action-1732812328/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-workflow57szv/series-workflow57szv-convert-artifact-365391477/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,}