Name: series-workflowvbzt2 Phase: Succeeded StartedAt: 2026-07-28 08:24:55 +0000 UTC FinishedAt: 2026-07-28 13:07:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[0] Phase: Succeeded StartedAt: 2026-07-28 08:24:55 +0000 UTC FinishedAt: 2026-07-28 08:52:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 08:24:55 +0000 UTC FinishedAt: 2026-07-28 08:52:07 +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": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IP_MULTICAST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IP_MULTICAST" ], "series_id": "37e6cacb-88fb-4dc2-9a2e-179393800649" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_mr_input", "ip_mr_forward", "ipmr_cache_unresolved" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tcl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpcF9tcl9mb3J3YXJkJiMzNDssCiAgICAmIzM0O2lwbXJfY2FjaGVfdW5yZXNvbHZlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgc2tiLVx1MDAzZWNiIGlzIGNvcGllZCBpbiBpcG1yX2NhY2hlX3JlcG9ydCB3aGVuIGEgbXVsdGljYXN0IHBhY2tldCBpcyByZXBvcnRlZCB0byB0aGUgbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIG11bHRpY2FzdCByb3V0aW5nIGlzIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjOWJiNjBjODE1OWQ2YTIyZTU4NzdhYjkwYzg5MGJmNjc4NTdhZDQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDg6NTA6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCAxZDlhNGFjMTRmY2VmOS4uM2M0NThlYTNkNDIzNTkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXIuY1xuQEAgLTEwNTgsNiAmIzQzOzEwNTgsNyBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpXG4ge1xuIFx0Y29uc3QgaW50IGlobCA9IGlwX2hkcmxlbihwa3QpO1xuJiM0MztcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xuIFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcbiBcdHN0cnVjdCBpZ21waGRyICppZ21wO1xuIFx0c3RydWN0IGlnbXBtc2cgKm1zZztcbkBAIC0xMTEzLDcgJiM0MzsxMTE0LDEwIEBAIHN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXG4gXHRcdG1zZy1cdTAwM2VpbV92aWYgPSB2aWZpO1xuIFx0XHRtc2ctXHUwMDNlaW1fdmlmX2hpID0gdmlmaSBcdTAwM2VcdTAwM2UgODtcbiBcdFx0aXB2NF9wa3RpbmZvX3ByZXBhcmUobXJvdXRlX3NrLCBwa3QsIGZhbHNlKTtcbi1cdFx0bWVtY3B5KHNrYi1cdTAwM2VjYiwgcGt0LVx1MDAzZWNiLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4mIzQzO1x0XHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcbiYjNDM7XHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbiYjNDM7XHRcdGluZm8tXHUwMDNlaXBpX2lmaW5kZXggPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9pZmluZGV4O1xuJiM0MztcdFx0aW5mby1cdTAwM2VpcGlfc3BlY19kc3QgPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9zcGVjX2RzdDtcbiBcdFx0LyogQWRkIG91ciBoZWFkZXIuXG4gXHRcdCAqIE5vdGUgdGhhdCBjb2RlLCBjc3VtIGFuZCBncm91cCBmaWVsZHMgYXJlIGNsZWFyZWQuXG4gXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXBfbXJfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtpcG1yX2NhY2hlX3VucmVzb2x2ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNrYi1cdTAwM2VjYiBpcyBjb3BpZWQgaW4gaXBtcl9jYWNoZV9yZXBvcnQgd2hlbiBhIG11bHRpY2FzdCBwYWNrZXQgaXMgcmVwb3J0ZWQgdG8gdGhlIG11bHRpY2FzdCByb3V0aW5nIGRhZW1vbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBtdWx0aWNhc3Qgcm91dGluZyBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzliYjYwYzgxNTlkNmEyMmU1ODc3YWI5MGM4OTBiZjY3ODU3YWQ0OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDA4OjUwOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDFkOWE0YWMxNGZjZWY5Li4zYzQ1OGVhM2Q0MjM1OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtMTA1OCw2ICYjNDM7MTA1OCw3IEBAIHN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsCiAJCQkgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KQogewogCWNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTsKJiM0MzsJc3RydWN0IGluX3BrdGluZm8gKmluZm87CiAJc3RydWN0IHNvY2sgKm1yb3V0ZV9zazsKIAlzdHJ1Y3QgaWdtcGhkciAqaWdtcDsKIAlzdHJ1Y3QgaWdtcG1zZyAqbXNnOwpAQCAtMTExMyw3ICYjNDM7MTExNCwxMCBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LAogCQltc2ctJmd0O2ltX3ZpZiA9IHZpZmk7CiAJCW1zZy0mZ3Q7aW1fdmlmX2hpID0gdmlmaSAmZ3Q7Jmd0OyA4OwogCQlpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpOwotCQltZW1jcHkoc2tiLSZndDtjYiwgcGt0LSZndDtjYiwgc2l6ZW9mKHNrYi0mZ3Q7Y2IpKTsKJiM0MzsJCWluZm8gPSBQS1RJTkZPX1NLQl9DQihza2IpOwomIzQzOwkJbWVtc2V0KHNrYi0mZ3Q7Y2IsIDAsIHNpemVvZihza2ItJmd0O2NiKSk7CiYjNDM7CQlpbmZvLSZndDtpcGlfaWZpbmRleCA9IFBLVElORk9fU0tCX0NCKHBrdCktJmd0O2lwaV9pZmluZGV4OwomIzQzOwkJaW5mby0mZ3Q7aXBpX3NwZWNfZHN0ID0gUEtUSU5GT19TS0JfQ0IocGt0KS0mZ3Q7aXBpX3NwZWNfZHN0OwogCQkvKiBBZGQgb3VyIGhlYWRlci4KIAkJICogTm90ZSB0aGF0IGNvZGUsIGNzdW0gYW5kIGdyb3VwIGZpZWxkcyBhcmUgY2xlYXJlZC4KIAkJICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTXVsdGljYXN0IFJvdXRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0aW5rZXJpbmcgd2l0aCBgbmV0L2lwdjQvaXBtci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBob3cgaXQgaGFuZGxlcyB0aGUgY29weSBvcGVyYXRpb24gZm9yIGBza2ItJmd0O2NiYC4gSW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgYG1lbWNweWAsIGl0JiMzOTtzIG5vdyB1c2luZyBhIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2guIEluaXRpYWxseSwgdGhlIGZ1bGwgYHNrYi0mZ3Q7Y2JgIHdhcyBjb3BpZWQgZnJvbSBgcGt0LSZndDtjYmAgdXNpbmcgYG1lbWNweWAuIE5vdywgaXQmIzM5O3MgY2xlYXJpbmcgdGhlIGV4aXN0aW5nIGBza2ItJmd0O2NiYCB3aXRoIGBtZW1zZXRgLCB0aGVuIHNlbGVjdGl2ZWx5IGNvcHlpbmcgdHdvIHNwZWNpZmljIGZpZWxkczogYGlwaV9pZmluZGV4YCBhbmQgYGlwaV9zcGVjX2RzdGAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBJUHY0IG11bHRpY2FzdCByb3V0aW5nLCBhIG1vZGlmaWNhdGlvbiB0aGF0IG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCB3aHkgdGhlIGNoYW5nZT8gV2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlIGJlaGluZCB6ZXJvaW5nIG91dCB0aGUgZW50aXJlIGBza2ItJmd0O2NiYCBhbmQgc2VsZWN0aXZlbHkgY29weWluZyBvbmx5IHRob3NlIHR3byBmaWVsZHM/IFRoZXJlIG11c3QgYmUgYSBzcGVjaWZpYyByZWFzb24sIGxpa2VseSByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIG9yIG1heWJlIGV2ZW4gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgbXVsdGljYXN0IHJvdXRpbmcgYmVoYXZpb3IuIEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbGVycyBvZiBgaXBtcl9jYWNoZV9yZXBvcnRgIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgaW1wYWN0LiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIOKAkyB0aGF0JiMzOTtzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYSBzb2xpZCBsaXN0IG9mIHRoZSBjYWxsIHNpdGVzIGFuZCBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwbXJfY2FjaGVfcmVwb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0xMDg9c3RhdGljIHZvaWQgaXBfbXJfZm9yd2FyZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xMTAtXHRcdFx0ICBzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZSwgaW50IGxvY2FsKTtcbm5ldC9pcHY0L2lwbXIuYzoxMTE6c3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY0L2lwbXIuYy0xMTItXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCk7XG4tLVxubmV0L2lwdjQvaXBtci5jPTUyOT1zdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBtci5jLTU1MS1cdC8qIFBhaXJzIHdpdGggV1JJVEVfT05DRSgpIGluIHZpZl9hZGQoKSBhbmQgdmlmX2RlbGV0ZSgpICovXG5uZXQvaXB2NC9pcG1yLmM6NTUyOlx0aXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSxcbm5ldC9pcHY0L2lwbXIuYy01NTMtXHRcdFx0ICBJR01QTVNHX1dIT0xFUEtUKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9Njg3PXN0YXRpYyBpbnQgdmlmX2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IHZpZmksIGludCBub3RpZnksXG4tLVxubmV0L2lwdjQvaXBtci5jLTcwOS1cdGlmICh2aWZpID09IG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIHtcbm5ldC9pcHY0L2lwbXIuYzo3MTA6XHRcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cbm5ldC9pcHY0L2lwbXIuYy03MTEtXHRcdFdSSVRFX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSwgLTEpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz04NDk9c3RhdGljIGludCB2aWZfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTk0MS1cdGlmICh2LVx1MDAzZWZsYWdzIFx1MDAyNiBWSUZGX1JFR0lTVEVSKSB7XG5uZXQvaXB2NC9pcG1yLmM6OTQyOlx0XHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGlwbXJfY2FjaGVfcmVwb3J0KCkgYW5kIHJlZ192aWZfeG1pdCgpICovXG5uZXQvaXB2NC9pcG1yLmMtOTQzLVx0XHRXUklURV9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIHZpZmkpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMDE5PXN0YXRpYyB2b2lkIGlwbXJfY2FjaGVfcmVzb2x2ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xMDU2LSAqL1xubmV0L2lwdjQvaXBtci5jOjEwNTc6c3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY0L2lwbXIuYy0xMDU4LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpXG4tLVxubmV0L2lwdjQvaXBtci5jPTExNDY9c3RhdGljIGludCBpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZpZmlfdCB2aWZpLFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xMTgzLVx0XHQvKiBSZWZsZWN0IGZpcnN0IHF1ZXJ5IGF0IG1yb3V0ZWQuICovXG5uZXQvaXB2NC9pcG1yLmM6MTE4NDpcdFx0ZXJyID0gaXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIHZpZmksIElHTVBNU0dfTk9DQUNIRSk7XG5uZXQvaXB2NC9pcG1yLmMtMTE4NS1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTkwNj1zdGF0aWMgaW50IGlwbXJfcHJlcGFyZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTE5MjQtXHRcdERFVl9TVEFUU19JTkModmlmX2RldiwgdHhfcGFja2V0cyk7XG5uZXQvaXB2NC9pcG1yLmM6MTkyNTpcdFx0aXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIHZpZmksIElHTVBNU0dfV0hPTEVQS1QpO1xubmV0L2lwdjQvaXBtci5jLTE5MjYtXHRcdHJldHVybiAtMTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MjA0NT1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTIxMDAtXHRcdFx0Yy1cdTAwM2VfYy5tZmNfdW4ucmVzLmxhc3RfYXNzZXJ0ID0gamlmZmllcztcbm5ldC9pcHY0L2lwbXIuYzoyMTAxOlx0XHRcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB0cnVlX3ZpZmksIElHTVBNU0dfV1JPTkdWSUYpO1xubmV0L2lwdjQvaXBtci5jLTIxMDItXHRcdFx0aWYgKFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX2RvX3dydmlmd2hvbGUpKVxubmV0L2lwdjQvaXBtci5jOjIxMDM6XHRcdFx0XHRpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgdHJ1ZV92aWZpLFxubmV0L2lwdjQvaXBtci5jLTIxMDQtXHRcdFx0XHRcdFx0ICBJR01QTVNHX1dSVklGV0hPTEUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGlwbXJfY2FjaGVfcmVwb3J0YCBQYXRjaCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzaW5nIG9uIHRoZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYWx0ZXJpbmcgdGhlIHdheSBgc2tiLSZndDtjYmAgaXMgaGFuZGxlZC4gSG1tLCBpbnRlcmVzdGluZy4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgdGhpcyBpcyByZWxhdGVkIHRvIG11bHRpY2FzdCByb3V0aW5nLCBsaWtlbHkgd2l0aCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoZSBjb2RlIHNlZW1zIGZ1bmN0aW9uYWwsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB0aGUgbmV0d29yayBzdGFjaywgc28gdGhpcyBpc24mIzM5O3Qgc29tZSBkZWFkIGNvZGUuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLgoKSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgdG8gZnVsbHkgZ3Jhc3AgdGhlIGludGVudCBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBMZXQgbWUgc2VhcmNoIGZvciBgSVBfTVJPVVRFYCB3aXRoaW4gdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGNvcmUgbXVsdGljYXN0IHJvdXRpbmcgZnVuY3Rpb25hbGl0eS4gVGhhdCBzaG91bGQgaGVscCBjb25uZWN0IHRoZSBkb3RzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01ST1VURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE1LVxubmV0L2lwdjQvS2NvbmZpZzoyMTY6Y29uZmlnIElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjE3LVx0Ym9vbFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE5LVxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMjMxLVxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUyMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgSVAgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGtlcm5lbCBjb25maWcgZm9yIElQIE11bHRpY2FzdCwgc3BlY2lmaWNhbGx5IGBJUF9NUk9VVEVgLCBpcyBkZWZpbmVkLiBHaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSVB2NCwgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBuZXQvaXB2NGAgZGlyZWN0b3J5IHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBBbmQgd2l0aGluIHRoYXQsIHRoZSBmaWxlIHRoYXQgdHlwaWNhbGx5IGhvbGRzIEtjb25maWcgb3B0aW9ucyBmb3IgSVB2NCBuZXR3b3JraW5nIGZlYXR1cmVzIGlzIGBLY29uZmlnYC4gVGhlcmVmb3JlLCBJJiMzOTtsbCBleGFtaW5lIGBuZXQvaXB2NC9LY29uZmlnYCB0byBsb2NhdGUgdGhlIGBJUF9NUk9VVEVgIG9wdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyIEkgbmVlZCBpbiBvcmRlciB0byBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgaXQgaXMgc2V0IGFuZCBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE5Olx0XG4gMjIwOlx0Y29uZmlnIElQX01ST1VURVxuIDIyMTpcdFx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbiAyMjI6XHRcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUXG4gMjIzOlx0XHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxuIDIyNDpcdFx0aGVscFxuIDIyNTpcdFx0ICBUaGlzIGlzIHVzZWQgaWYgeW91IHdhbnQgeW91ciBtYWNoaW5lIHRvIGFjdCBhcyBhIHJvdXRlciBmb3IgSVBcbiAyMjY6XHRcdCAgcGFja2V0cyB0aGF0IGhhdmUgc2V2ZXJhbCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIEl0IGlzIG5lZWRlZCBvbiB0aGVcbiAyMjc6XHRcdCAgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3Agb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXNcbiAyMjg6XHRcdCAgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIEluIG9yZGVyIHRvIGRvIHRoYXQsIHlvdSB3b3VsZCBtb3N0XG4gMjI5Olx0XHQgIGxpa2VseSBydW4gdGhlIHByb2dyYW0gbXJvdXRlZC4gSWYgeW91IGhhdmVuJiMzOTt0IGhlYXJkIGFib3V0IGl0LCB5b3VcbiAyMzA6XHRcdCAgZG9uJiMzOTt0IG5lZWQgaXQuXG4gMjMxOlx0XG4gMjMyOlx0Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbiAyMzM6XHRcdGJvb2wgXCYjMzQ7SVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuIDIzNDpcdFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXHUwMDI2XHUwMDI2IElQX0FEVkFOQ0VEX1JPVVRFUlxuIDIzNTpcdFx0c2VsZWN0IEZJQl9SVUxFU1xuIDIzNjpcdFx0aGVscFxuIDIzNzpcdFx0ICBOb3JtYWxseSwgYSBtdWx0aWNhc3Qgcm91dGVyIHJ1bnMgYSB1c2Vyc3BhY2UgZGFlbW9uIGFuZCBkZWNpZGVzXG4gMjM4Olx0XHQgIHdoYXQgdG8gZG8gd2l0aCBhIG11bHRpY2FzdCBwYWNrZXQgYmFzZWQgb24gdGhlIHNvdXJjZSBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDU2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBNdWx0aWNhc3QgUmVxdWlyZW1lbnRzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgbmV0d29yayBjb25maWd1cmF0aW9uLi4uIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGJvdGggYElQX01ST1VURWAgYW5kIGBJUF9NVUxUSUNBU1RgIGVuYWJsZWQuIEkgY2FuJiMzOTt0IHNlZSBhIHdheSBhcm91bmQgdGhhdCwgZ2l2ZW4gdGhlIHByb2plY3Qgc3BlY3MuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgSVBfTVVMVElDQVNUYCDigJMgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGdvdGNoYXMgSSYjMzk7bSBvdmVybG9va2luZyB0aGVyZSwgYW5kIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvbiBpdHMgaW1wbGVtZW50YXRpb24sIG9yIG1heWJlIGV2ZW4gaWRlbnRpZnkgaWYgYSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsIG9yIHNldHRpbmcgd2l0aGluIGl0IG5lZWRzIGNsb3NlciBpbnNwZWN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9NVUxUSUNBU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZy00LSNcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTYtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBpcG1yX2NhY2hlX3JlcG9ydGAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaXBtcl9jYWNoZV9yZXBvcnRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2V2ZXJhbCBrZXkgYXJlYXM6IGByZWdfdmlmX3htaXRgLCBgaXBtcl9jYWNoZV91bnJlc29sdmVkYCwgYGlwbXJfcHJlcGFyZV94bWl0YCwgYW5kIGBpcF9tcl9mb3J3YXJkYC4gVGhlc2UgYXJlIHByZXR0eSBjZW50cmFsIHRvIG11bHRpY2FzdCByb3V0aW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgYWx0ZXJlZCBoZXJlLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byBgaXBtcl9jYWNoZV9yZXBvcnRgIGl0c2VsZiBhbmQgZXhhbWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggZWFjaCBvZiB0aG9zZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBiZWhhdmlvciBjaGFuZ2UuICBTaW5jZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGlzIHN0YXRpYywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBpbmxpbmVkLiBCYXNlZCBvbiBpdHMgc2l6ZSwgaXQmIzM5O3MgbGlrZWx5IG5vdCBpbmxpbmVkLCBidXQgSSBzaG91bGQgc3RpbGwgY2hlY2sgdGhlIGNvZGUganVzdCB0byBiZSAxMDAlIHN1cmUuIEkgd2FudCB0byBpbmNsdWRlIHRoZSBjYWxsZXJzIGluIG15IGZvY3VzIHNvIEkgY2FuIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSB3aG9sZSB0aGluZy4KCkkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlZmluaXRpb24sIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYG5ldC9pcHY0L2lwbXIuY2AuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDU3Olx0c3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbjEwNTg6XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KVxuMTA1OTpcdHtcbjEwNjA6XHRcdGNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTtcbjEwNjE6XHRcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xuMTA2MjpcdFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcbjEwNjM6XHRcdHN0cnVjdCBpZ21waGRyICppZ21wO1xuMTA2NDpcdFx0c3RydWN0IGlnbXBtc2cgKm1zZztcbjEwNjU6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4xMDY2Olx0XHRpbnQgcmV0O1xuMTA2NzpcdFxuMTA2ODpcdFx0bXJvdXRlX3NrID0gcmN1X2RlcmVmZXJlbmNlKG1ydC1cdTAwM2Vtcm91dGVfc2spO1xuMTA2OTpcdFx0aWYgKCFtcm91dGVfc2spXG4xMDcwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTA3MTpcdFxuMTA3MjpcdFx0aWYgKGFzc2VydCA9PSBJR01QTVNHX1dIT0xFUEtUIHx8IGFzc2VydCA9PSBJR01QTVNHX1dSVklGV0hPTEUpXG4xMDczOlx0XHRcdHNrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHBrdCwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xuMTA3NDpcdFx0ZWxzZVxuMTA3NTpcdFx0XHRza2IgPSBhbGxvY19za2IoMTI4LCBHRlBfQVRPTUlDKTtcbjEwNzY6XHRcbjEwNzc6XHRcdGlmICghc2tiKVxuMTA3ODpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4xMDc5Olx0XG4xMDgwOlx0XHRpZiAoYXNzZXJ0ID09IElHTVBNU0dfV0hPTEVQS1QgfHwgYXNzZXJ0ID09IElHTVBNU0dfV1JWSUZXSE9MRSkge1xuMTA4MTpcdFx0XHQvKiBVZ2x5LCBidXQgd2UgaGF2ZSBubyBjaG9pY2Ugd2l0aCB0aGlzIGludGVyZmFjZS5cbjEwODI6XHRcdFx0ICogRHVwbGljYXRlIG9sZCBoZWFkZXIsIGZpeCBpaGwsIGxlbmd0aCBldGMuXG4xMDgzOlx0XHRcdCAqIEFuZCBhbGwgdGhpcyBvbmx5IHRvIG1hbmdsZSBtc2ctXHUwMDNlaW1fbXNndHlwZSBhbmRcbjEwODQ6XHRcdFx0ICogdG8gc2V0IG1zZy1cdTAwM2VpbV9tYnogdG8gXCYjMzQ7bWJ6XCYjMzQ7IDotKVxuMTA4NTpcdFx0XHQgKi9cbjEwODY6XHRcdFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG4xMDg3Olx0XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuMTA4ODpcdFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuMTA4OTpcdFx0XHRtc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbjEwOTA6XHRcdFx0bWVtY3B5KG1zZywgc2tiX25ldHdvcmtfaGVhZGVyKHBrdCksIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbjEwOTE6XHRcdFx0bXNnLVx1MDAzZWltX21zZ3R5cGUgPSBhc3NlcnQ7XG4xMDkyOlx0XHRcdG1zZy1cdTAwM2VpbV9tYnogPSAwO1xuMTA5MzpcdFx0XHRpZiAoYXNzZXJ0ID09IElHTVBNU0dfV1JWSUZXSE9MRSkge1xuMTA5NDpcdFx0XHRcdG1zZy1cdTAwM2VpbV92aWYgPSB2aWZpO1xuMTA5NTpcdFx0XHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZpIFx1MDAzZVx1MDAzZSA4O1xuMTA5NjpcdFx0XHR9IGVsc2Uge1xuMTA5NzpcdFx0XHRcdC8qIFBhaXJzIHdpdGggV1JJVEVfT05DRSgpIGluIHZpZl9hZGQoKSBhbmQgdmlmX2RlbGV0ZSgpICovXG4xMDk4Olx0XHRcdFx0aW50IHZpZl9udW0gPSBSRUFEX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSk7XG4xMDk5Olx0XG4xMTAwOlx0XHRcdFx0bXNnLVx1MDAzZWltX3ZpZiA9IHZpZl9udW07XG4xMTAxOlx0XHRcdFx0bXNnLVx1MDAzZWltX3ZpZl9oaSA9IHZpZl9udW0gXHUwMDNlXHUwMDNlIDg7XG4xMTAyOlx0XHRcdH1cbjExMDM6XHRcdFx0aXBfaGRyKHNrYiktXHUwMDNlaWhsID0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgXHUwMDNlXHUwMDNlIDI7XG4xMTA0Olx0XHRcdGlwX2hkcihza2IpLVx1MDAzZXRvdF9sZW4gPSBodG9ucyhudG9ocyhpcF9oZHIocGt0KS1cdTAwM2V0b3RfbGVuKSAmIzQzO1xuMTEwNTpcdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbjExMDY6XHRcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NjQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSYjMzk7bSByZXZpZXdpbmcgY29kZSBhcyBhbiBleHBlcnQ6CgoqKkFzc2Vzc21lbnQgb2YgRnVuY3Rpb24gQ29tcGxldGlvbioqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBqdXN0IGJlZW4gc2NydXRpbml6aW5nIGEgc3BlY2lmaWMgc2VnbWVudCwgYW5kIG5vdyBJIG5lZWQgdG8gZXhwYW5kIHRoZSBzY29wZSBvZiBteSByZXZpZXcuIEl0JiMzOTtzIHRpbWUgdG8gc3lzdGVtYXRpY2FsbHkgZXhhbWluZSB0aGUgcmVtYWluZGVyIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMsIGRlcGVuZGVuY2llcywgb3IgcG90ZW50aWFsIGJ1Z3MgdGhhdCBtaWdodCBleGlzdCBpbiB0aGUgdW5leHBsb3JlZCBwYXJ0cyBvZiB0aGUgY29kZS4gTXkgcHJpbWFyeSBnb2FsLCBhcyBhbHdheXMsIGlzIHRvIGVuc3VyZSByb2J1c3QgZnVuY3Rpb25hbGl0eSBhbmQgYWRoZXJlbmNlIHRvIGJlc3QgcHJhY3RpY2VzLCBidXQgSSBhbSBlcXVhbGx5IGNvbmNlcm5lZCBhYm91dCByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTA3Olx0XHRcdC8qIENvcHkgdGhlIElQIGhlYWRlciAqL1xuMTEwODpcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiLVx1MDAzZWxlbik7XG4xMTA5Olx0XHRcdHNrYl9wdXQoc2tiLCBpaGwpO1xuMTExMDpcdFx0XHRza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIHBrdC1cdTAwM2VkYXRhLCBpaGwpO1xuMTExMTpcdFx0XHQvKiBGbGFnIHRvIHRoZSBrZXJuZWwgdGhpcyBpcyBhIHJvdXRlIGFkZCAqL1xuMTExMjpcdFx0XHRpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCA9IDA7XG4xMTEzOlx0XHRcdG1zZyA9IChzdHJ1Y3QgaWdtcG1zZyAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuMTExNDpcdFx0XHRtc2ctXHUwMDNlaW1fdmlmID0gdmlmaTtcbjExMTU6XHRcdFx0bXNnLVx1MDAzZWltX3ZpZl9oaSA9IHZpZmkgXHUwMDNlXHUwMDNlIDg7XG4xMTE2Olx0XHRcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XG4xMTE3Olx0XHRcdGluZm8gPSBQS1RJTkZPX1NLQl9DQihza2IpO1xuMTExODpcdFx0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4xMTE5Olx0XHRcdGluZm8tXHUwMDNlaXBpX2lmaW5kZXggPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9pZmluZGV4O1xuMTEyMDpcdFx0XHRpbmZvLVx1MDAzZWlwaV9zcGVjX2RzdCA9IFBLVElORk9fU0tCX0NCKHBrdCktXHUwMDNlaXBpX3NwZWNfZHN0O1xuMTEyMTpcdFx0XHQvKiBBZGQgb3VyIGhlYWRlci5cbjExMjI6XHRcdFx0ICogTm90ZSB0aGF0IGNvZGUsIGNzdW0gYW5kIGdyb3VwIGZpZWxkcyBhcmUgY2xlYXJlZC5cbjExMjM6XHRcdFx0ICovXG4xMTI0Olx0XHRcdGlnbXAgPSBza2JfcHV0X3plcm8oc2tiLCBzaXplb2Yoc3RydWN0IGlnbXBoZHIpKTtcbjExMjU6XHRcdFx0aWdtcC1cdTAwM2V0eXBlID0gYXNzZXJ0O1xuMTEyNjpcdFx0XHRtc2ctXHUwMDNlaW1fbXNndHlwZSA9IGFzc2VydDtcbjExMjc6XHRcdFx0aXBfaGRyKHNrYiktXHUwMDNldG90X2xlbiA9IGh0b25zKHNrYi1cdTAwM2VsZW4pO1x0LyogRml4IHRoZSBsZW5ndGggKi9cbjExMjg6XHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG4xMTI5Olx0XHR9XG4xMTMwOlx0XG4xMTMxOlx0XHRpZ21wbXNnX25ldGxpbmtfZXZlbnQobXJ0LCBza2IpO1xuMTEzMjpcdFxuMTEzMzpcdFx0LyogRGVsaXZlciB0byBtcm91dGVkICovXG4xMTM0Olx0XHRyZXQgPSBzb2NrX3F1ZXVlX3Jjdl9za2IobXJvdXRlX3NrLCBza2IpO1xuMTEzNTpcdFxuMTEzNjpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTEzNzpcdFx0XHRuZXRfd2Fybl9yYXRlbGltaXRlZChcJiMzNDttcm91dGU6IHBlbmRpbmcgcXVldWUgZnVsbCwgZHJvcHBpbmcgZW50cmllc1xcblwmIzM0Oyk7XG4xMTM4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTEzOTpcdFx0fVxuMTE0MDpcdFxuMTE0MTpcdFx0cmV0dXJuIHJldDtcbjExNDI6XHR9XG4xMTQzOlx0XG4xMTQ0Olx0LyogUXVldWUgYSBwYWNrZXQgZm9yIHJlc29sdXRpb24uIEl0IGdldHMgbG9ja2VkIGNhY2hlIGVudHJ5ISAqL1xuMTE0NTpcdC8qIENhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkgKi9cbjExNDY6XHRzdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXG4xMTQ3Olx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjExNDg6XHR7XG4xMTQ5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG4xMTUwOlx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuMTE1MTpcdFx0c3RydWN0IG1mY19jYWNoZSAqYyA9IE5VTEw7XG4xMTUyOlx0XHRib29sIGZvdW5kID0gZmFsc2U7XG4xMTUzOlx0XHRpbnQgZXJyO1xuMTE1NDpcdFxuMTE1NTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1mY191bnJlc19sb2NrKTtcbjExNTY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcyMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IEluZm9ybWF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBzZWN1cml0eSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIGlzc3VlIHJlbGF0ZWQgdG8gaG93IHBhY2tldCBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpcyB0aGF0IGBza2ItJmd0O2NiYCB3YXMgYmVpbmcgY29waWVkIGRpcmVjdGx5LCB3aGljaCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgb3Igc2Vuc2l0aXZlIGRhdGEuIEl0JiMzOTtzIG11Y2ggY2xlYW5lciBhbmQgc2FmZXIgdG8gb25seSBjb3B5IHRoZSBmaWVsZHMgd2UgYWN0dWFsbHkgbmVlZC4KCldhaXQgYSBzZWNvbmQuIExldCYjMzk7cyB0cmFjZSB0aGlzIGJhY2sgYSBsaXR0bGUuIFRoZSBmdW5jdGlvbiBgaXB2NF9wa3RpbmZvX3ByZXBhcmVgIHByZXBhcmVzIGBwa3QtJmd0O2NiYCwgd2hpY2ggaXMgY2FzdCB0byBgc3RydWN0IGluX3BrdGluZm9gLCByaWdodD8gQW5kICp0aGVuKiBpdCBjb3BpZXMgYHBrdC0mZ3Q7Y2JgIHRvIGBza2ItJmd0O2NiYC4gSSBzZWUuIEJ1dCB0aGUgcGF0Y2ggYWx0ZXJzIHRoaXMgZmxvdywgYW5kIHRoZSBgc2tiYCBpcyBlaXRoZXIgYSBuZXdseSBhbGxvY2F0ZWQgb3IgcmVhbGxvY2F0ZWQgc3RydWN0dXJlLCB3aGljaCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBhbmQgdGhlIHdheSBpdCBpcyBiZWluZyB1c2VkLgoKQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaXMgYmVoYXZpb3IgdG8gb25seSBjb3B5IGBpcGlfaWZpbmRleGAgYW5kIGBpcGlfc3BlY19kc3RgIGFuZCB0aGVuIHplcm9pbmcgb3V0IHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUuIERlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgYWJvdXQgZGF0YSBzYW5pdGl6YXRpb24gYW5kIG1pbmltaXppbmcgd2hhdCBnZXRzIHBhc3NlZCBhcm91bmQuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOb3cgSSBuZWVkIHRvIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgaXBtcl9jYWNoZV9yZXBvcnRgLiBJIHNlZSB0aGVyZSBhcmUgZm91ciBvZiB0aGVtOiBgcmVnX3ZpZl94bWl0YCwgYGlwbXJfY2FjaGVfdW5yZXNvbHZlZGAsIGBpcG1yX3ByZXBhcmVfeG1pdGAsIGFuZCBgaXBfbXJfZm9yd2FyZGAuCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYGlwX21yX2ZvcndhcmRgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgdGhlIG1vc3QgcmVsZXZhbnQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbXJfZm9yd2FyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9MTA1PXN0YXRpYyB2b2lkIGlwbXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTA3LVxubmV0L2lwdjQvaXBtci5jOjEwODpzdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2NC9pcG1yLmMtMTA5LVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTAxOT1zdGF0aWMgdm9pZCBpcG1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTA0Ni1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9pcG1yLmM6MTA0NzpcdFx0XHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBza2ItXHUwMDNlZGV2LCBza2IsIGMsIDApO1xubmV0L2lwdjQvaXBtci5jLTEwNDgtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2lwdjQvaXBtci5jPTIwMzI9c3RhdGljIGludCBpcG1yX2ZpbmRfdmlmKGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMDQ0LS8qIENhbGxlZCB1bmVyIHJjdV9yZWFkX2xvY2soKSAqL1xubmV0L2lwdjQvaXBtci5jOjIwNDU6c3RhdGljIHZvaWQgaXBfbXJfZm9yd2FyZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjQvaXBtci5jLTIwNDYtXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwbXIuYz0yMTkzPWludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMjc1LVxubmV0L2lwdjQvaXBtci5jOjIyNzY6XHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBkZXYsIHNrYiwgY2FjaGUsIGxvY2FsKTtcbm5ldC9pcHY0L2lwbXIuYy0yMjc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE11bHRpY2FzdCBSb3V0aW5nJiMzOTtzIENvcmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpY2FzdCByb3V0aW5nIGlzIGhhbmRsZWQgYXQgdGhlIGVudHJ5IGxldmVsLiBSaWdodCwgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgaXBfbXJfaW5wdXRgLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBiZWdpbnMuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgaW5jb21pbmcgbXVsdGljYXN0IHBhY2tldHMgYXJlIHByb2Nlc3NlZCBhbmQgd2hlcmUgdGhleSBhcmUgcm91dGVkIGZyb20gdGhlcmUuIExldCBtZSBkaXZlIGludG8gdGhhdCBgaXBfbXJfaW5wdXRgIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkga25vdyBJIGNhbiBidWlsZCBvbiB0aGlzIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tcl9pbnB1dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcC5oPTE2OT12b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKTtcbmluY2x1ZGUvbmV0L2lwLmg6MTcwOmludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L2lwLmgtMTcxLWludCBpcF9tcl9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTM2Nz1pbnQgaXBfbWNfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTM4Ni1cdFx0ICAgd2hpY2ggcmV0dXJuZWQgYWZ0ZXIgZm9yd2FyZGluZzsgdGhleSB3aWxsIGJlICBkcm9wcGVkXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzozODc6XHRcdCAgIGJ5IGlwX21yX2lucHV0IGluIGFueSBjYXNlLlxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzg4LVx0XHQgICBOb3RlLCB0aGF0IGxvY2FsIGZyYW1lcyBhcmUgbG9vcGVkIGJhY2sgdG8gYmUgZGVsaXZlcmVkXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzkwLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MzkxOlx0XHQgICBUaGlzIGNoZWNrIGlzIGR1cGxpY2F0ZWQgaW4gaXBfbXJfaW5wdXQgYXQgdGhlIG1vbWVudC5cbm5ldC9pcHY0L2lwX291dHB1dC5jLTM5Mi1cdFx0ICovXG4tLVxubmV0L2lwdjQvaXBtci5jPTIxNjY9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9ydF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMjE5Mi0gKi9cbm5ldC9pcHY0L2lwbXIuYzoyMTkzOmludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvaXBtci5jLTIxOTQte1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTczNz1pcF9yb3V0ZV9pbnB1dF9tYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE3NjktXHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRhZGRyKSBcdTAwMjZcdTAwMjYgSU5fREVWX01GT1JXQVJEKGluX2RldikpXG5uZXQvaXB2NC9yb3V0ZS5jOjE3NzA6XHRcdHJ0aC1cdTAwM2Vkc3QuaW5wdXQgPSBpcF9tcl9pbnB1dDtcbm5ldC9pcHY0L3JvdXRlLmMtMTc3MS0jZW5kaWZcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI1NTc9c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI2NjgtXHRcdFx0ICAgICFpcHY0X2lzX2xvY2FsX211bHRpY2FzdChmbDQtXHUwMDNlZGFkZHIpKSB7XG5uZXQvaXB2NC9yb3V0ZS5jOjI2Njk6XHRcdFx0XHRydGgtXHUwMDNlZHN0LmlucHV0ID0gaXBfbXJfaW5wdXQ7XG5uZXQvaXB2NC9yb3V0ZS5jLTI2NzAtXHRcdFx0XHRydGgtXHUwMDNlZHN0Lm91dHB1dCA9IGlwX21yX291dHB1dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY2NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTXVsdGljYXN0IFBhY2tldCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG11bHRpY2FzdCBwYWNrZXRzIGFyZSBoYW5kbGVkIGhlcmUuIEl0IHNlZW1zIHdlIGhhdmUgdGhyZWUga2V5IGZ1bmN0aW9ucyB0byBjb25zaWRlci4gRmlyc3QsIHRoZXJlJiMzOTtzIGBpcF9tcl9pbnB1dGAsIHdoaWNoIGlzIHRyaWdnZXJlZCB3aGVuIGEgbXVsdGljYXN0IHBhY2tldCBhcnJpdmVzIGFuZCB0aGUgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgZm9yIG11bHRpY2FzdCBmb3J3YXJkaW5nIOKAkyB0aGF0IG1ha2VzIHNlbnNlLiBUaGVuIHdlIGhhdmUgYGlwX21yX291dHB1dGAsIHdoaWNoIGhhbmRsZXMgdGhlIGxvY2FsIHNlbmRpbmcgb2YgbXVsdGljYXN0IHBhY2tldHMgdGhhdCByZXF1aXJlIGZvcndhcmRpbmcuCgpUaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gYmUgd2l0aGluIGBpcG1yX2NhY2hlX3JlcG9ydGAuIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aGVuIHRoZXJlJiMzOTtzIGEgbXVsdGljYXN0IGNhY2hlIG1pc3MsIG9yIHdoZW4gYSBWaXJ0dWFsIEludGVyZmFjZSAoVklGKSBpcyBpbmNvcnJlY3QuIFRoaXMgaXMgd2hhdCBJIHdhcyBsb29raW5nIGZvci4KCk5vdywgYSBxdWljayBub3RlLCBJIHNlZSB0aGF0IGBpcG1yX2NhY2hlX3JlcG9ydGAgaXMgbWFya2VkIGFzIGBzdGF0aWNgLiBJIHdhcyBpbml0aWFsbHkgY29uY2VybmVkIHRoYXQgaXQgbWlnaHQgYmUgaW5saW5lZCwgYnV0IHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgYHN0YXRpY2AgZG9lc24mIzM5O3QgbmVjZXNzYXJpbHkgcnVsZSB0aGF0IG91dCwgYWx0aG91Z2ggc3RhdGljIGZ1bmN0aW9ucyBhcmUgbGVzcyBsaWtlbHkgdG8gYmUgaW5saW5lZC4gR2l2ZW4gdGhhdCBgaXBtcl9jYWNoZV9yZXBvcnRgIGlzIHByb2JhYmx5IGEgc3Vic3RhbnRpYWwgYmxvY2sgb2YgY29kZSwgdGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IG5vdCBpbmxpbmUgaXQuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgZnVuY3Rpb24mIzM5O3Mgc2l6ZSB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODYKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA1NzpcdHN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXG4xMDU4Olx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcbjEwNTk6XHR7XG4xMDYwOlx0XHRjb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7XG4xMDYxOlx0XHRzdHJ1Y3QgaW5fcGt0aW5mbyAqaW5mbztcbjEwNjI6XHRcdHN0cnVjdCBzb2NrICptcm91dGVfc2s7XG4xMDYzOlx0XHRzdHJ1Y3QgaWdtcGhkciAqaWdtcDtcbjEwNjQ6XHRcdHN0cnVjdCBpZ21wbXNnICptc2c7XG4xMDY1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTA2NjpcdFx0aW50IHJldDtcbjEwNjc6XHRcbjEwNjg6XHRcdG1yb3V0ZV9zayA9IHJjdV9kZXJlZmVyZW5jZShtcnQtXHUwMDNlbXJvdXRlX3NrKTtcbjEwNjk6XHRcdGlmICghbXJvdXRlX3NrKVxuMTA3MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwNzE6XHRcbjEwNzI6XHRcdGlmIChhc3NlcnQgPT0gSUdNUE1TR19XSE9MRVBLVCB8fCBhc3NlcnQgPT0gSUdNUE1TR19XUlZJRldIT0xFKVxuMTA3MzpcdFx0XHRza2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShwa3QsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbjEwNzQ6XHRcdGVsc2VcbjEwNzU6XHRcdFx0c2tiID0gYWxsb2Nfc2tiKDEyOCwgR0ZQX0FUT01JQyk7XG4xMDc2Olx0XG4xMDc3Olx0XHRpZiAoIXNrYilcbjEwNzg6XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMTA3OTpcdFxuMTA4MDpcdFx0aWYgKGFzc2VydCA9PSBJR01QTVNHX1dIT0xFUEtUIHx8IGFzc2VydCA9PSBJR01QTVNHX1dSVklGV0hPTEUpIHtcbjEwODE6XHRcdFx0LyogVWdseSwgYnV0IHdlIGhhdmUgbm8gY2hvaWNlIHdpdGggdGhpcyBpbnRlcmZhY2UuXG4xMDgyOlx0XHRcdCAqIER1cGxpY2F0ZSBvbGQgaGVhZGVyLCBmaXggaWhsLCBsZW5ndGggZXRjLlxuMTA4MzpcdFx0XHQgKiBBbmQgYWxsIHRoaXMgb25seSB0byBtYW5nbGUgbXNnLVx1MDAzZWltX21zZ3R5cGUgYW5kXG4xMDg0Olx0XHRcdCAqIHRvIHNldCBtc2ctXHUwMDNlaW1fbWJ6IHRvIFwmIzM0O21ielwmIzM0OyA6LSlcbjEwODU6XHRcdFx0ICovXG4xMDg2Olx0XHRcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xuMTA4NzpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjEwODg6XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjEwODk6XHRcdFx0bXNnID0gKHN0cnVjdCBpZ21wbXNnICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4xMDkwOlx0XHRcdG1lbWNweShtc2csIHNrYl9uZXR3b3JrX2hlYWRlcihwa3QpLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG4xMDkxOlx0XHRcdG1zZy1cdTAwM2VpbV9tc2d0eXBlID0gYXNzZXJ0O1xuMTA5MjpcdFx0XHRtc2ctXHUwMDNlaW1fbWJ6ID0gMDtcbjEwOTM6XHRcdFx0aWYgKGFzc2VydCA9PSBJR01QTVNHX1dSVklGV0hPTEUpIHtcbjEwOTQ6XHRcdFx0XHRtc2ctXHUwMDNlaW1fdmlmID0gdmlmaTtcbjEwOTU6XHRcdFx0XHRtc2ctXHUwMDNlaW1fdmlmX2hpID0gdmlmaSBcdTAwM2VcdTAwM2UgODtcbjEwOTY6XHRcdFx0fSBlbHNlIHtcbjEwOTc6XHRcdFx0XHQvKiBQYWlycyB3aXRoIFdSSVRFX09OQ0UoKSBpbiB2aWZfYWRkKCkgYW5kIHZpZl9kZWxldGUoKSAqL1xuMTA5ODpcdFx0XHRcdGludCB2aWZfbnVtID0gUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pO1xuMTA5OTpcdFxuMTEwMDpcdFx0XHRcdG1zZy1cdTAwM2VpbV92aWYgPSB2aWZfbnVtO1xuMTEwMTpcdFx0XHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZfbnVtIFx1MDAzZVx1MDAzZSA4O1xuMTEwMjpcdFx0XHR9XG4xMTAzOlx0XHRcdGlwX2hkcihza2IpLVx1MDAzZWlobCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpIFx1MDAzZVx1MDAzZSAyO1xuMTEwNDpcdFx0XHRpcF9oZHIoc2tiKS1cdTAwM2V0b3RfbGVuID0gaHRvbnMobnRvaHMoaXBfaGRyKHBrdCktXHUwMDNldG90X2xlbikgJiM0MztcbjExMDU6XHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG4xMTA2Olx0XHR9IGVsc2Uge1xuMTEwNzpcdFx0XHQvKiBDb3B5IHRoZSBJUCBoZWFkZXIgKi9cbjExMDg6XHRcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYi1cdTAwM2VsZW4pO1xuMTEwOTpcdFx0XHRza2JfcHV0KHNrYiwgaWhsKTtcbjExMTA6XHRcdFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBwa3QtXHUwMDNlZGF0YSwgaWhsKTtcbjExMTE6XHRcdFx0LyogRmxhZyB0byB0aGUga2VybmVsIHRoaXMgaXMgYSByb3V0ZSBhZGQgKi9cbjExMTI6XHRcdFx0aXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wgPSAwO1xuMTExMzpcdFx0XHRtc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbjExMTQ6XHRcdFx0bXNnLVx1MDAzZWltX3ZpZiA9IHZpZmk7XG4xMTE1Olx0XHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZpIFx1MDAzZVx1MDAzZSA4O1xuMTExNjpcdFx0XHRpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpO1xuMTExNzpcdFx0XHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcbjExMTg6XHRcdFx0bWVtc2V0KHNrYi1cdTAwM2VjYiwgMCwgc2l6ZW9mKHNrYi1cdTAwM2VjYikpO1xuMTExOTpcdFx0XHRpbmZvLVx1MDAzZWlwaV9pZmluZGV4ID0gUEtUSU5GT19TS0JfQ0IocGt0KS1cdTAwM2VpcGlfaWZpbmRleDtcbjExMjA6XHRcdFx0aW5mby1cdTAwM2VpcGlfc3BlY19kc3QgPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9zcGVjX2RzdDtcbjExMjE6XHRcdFx0LyogQWRkIG91ciBoZWFkZXIuXG4xMTIyOlx0XHRcdCAqIE5vdGUgdGhhdCBjb2RlLCBjc3VtIGFuZCBncm91cCBmaWVsZHMgYXJlIGNsZWFyZWQuXG4xMTIzOlx0XHRcdCAqL1xuMTEyNDpcdFx0XHRpZ21wID0gc2tiX3B1dF96ZXJvKHNrYiwgc2l6ZW9mKHN0cnVjdCBpZ21waGRyKSk7XG4xMTI1Olx0XHRcdGlnbXAtXHUwMDNldHlwZSA9IGFzc2VydDtcbjExMjY6XHRcdFx0bXNnLVx1MDAzZWltX21zZ3R5cGUgPSBhc3NlcnQ7XG4xMTI3Olx0XHRcdGlwX2hkcihza2IpLVx1MDAzZXRvdF9sZW4gPSBodG9ucyhza2ItXHUwMDNlbGVuKTtcdC8qIEZpeCB0aGUgbGVuZ3RoICovXG4xMTI4Olx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyO1xuMTEyOTpcdFx0fVxuMTEzMDpcdFxuMTEzMTpcdFx0aWdtcG1zZ19uZXRsaW5rX2V2ZW50KG1ydCwgc2tiKTtcbjExMzI6XHRcbjExMzM6XHRcdC8qIERlbGl2ZXIgdG8gbXJvdXRlZCAqL1xuMTEzNDpcdFx0cmV0ID0gc29ja19xdWV1ZV9yY3Zfc2tiKG1yb3V0ZV9zaywgc2tiKTtcbjExMzU6XHRcbjExMzY6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjExMzc6XHRcdFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7bXJvdXRlOiBwZW5kaW5nIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIGVudHJpZXNcXG5cJiMzNDspO1xuMTEzODpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjExMzk6XHRcdH1cbjExNDA6XHRcbjExNDE6XHRcdHJldHVybiByZXQ7XG4xMTQyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4NwoJCQkJCQkJb3V0cHV0OiAxMjAKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIElQdjQgTXVsdGljYXN0IFJvdXRpbmcgQ29kZSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZGV0ZXJtaW5lZCBhZnRlciBhIGNsb3NlIGxvb2sgYXQgdGhpcyBjb2RlLiBUaGlzIDg2LWxpbmUgZnVuY3Rpb24sICppcG1yX2NhY2hlX3JlcG9ydCosIGlzbiYjMzk7dCBpbmxpbmVkLCB3aGljaCBpcyBnb29kIHRvIGtub3cgZnJvbSB0aGUgc3RhcnQuIFRvIGVuc3VyZSBJIGNhcHR1cmUgYWxsIHJlbGV2YW50IGRlcGVuZGVuY2llcywgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlICppcF9tcl9pbnB1dCosICppcF9tcl9vdXRwdXQqLCBhbmQgKmlwbXJfY2FjaGVfdW5yZXNvbHZlZCogaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEkgYnJpZWZseSBjaGVja2VkIGlmICppcG1yX2NhY2hlX3JlcG9ydCogd2FzIGV4cG9ydGVkLCBidXQgaXQmIzM5O3Mgc3RhdGljLCBzbyB0aGF0IGNsYXJpZmllcyB0aGluZ3MuIFNpbmNlICppcG1yX2NhY2hlX3JlcG9ydCogaXMgY2FsbGVkIGZyb20gb3RoZXIga2V5IGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5ICppcG1yX2NhY2hlX3VucmVzb2x2ZWQqLCAqaXBtcl9wcmVwYXJlX3htaXQqLCAqaXBfbXJfZm9yd2FyZCosIGFuZCAqcmVnX3ZpZl94bWl0KiwgSSYjMzk7bGwgYWxzbyBhZGQgKmlwX21yX2ZvcndhcmQqIHRvIGBGb2N1c1N5bWJvbHNgLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuICpJUF9NUk9VVEUqIGRlcGVuZHMgb24gKklQX01VTFRJQ0FTVCosIHNvIHRob3NlIHR3byBuZWVkIHRvIGJlIGluIGBFbmFibGVDb25maWdzYC4gSSBqdXN0IGRvdWJsZS1jaGVja2VkLCBhbmQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHN0cmljdGx5ICpyZXF1aXJlZCogYnV0ICpJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTKiBtaWdodCBiZSB1c2VmdWwgdG8gZW5hYmxlLCBidXQgSSB3aWxsIG5vdCBhZGQgaXQuIEl0JiMzOTtzIHNhZmUgdG8gc2F5ICpJUF9NUk9VVEUqIGFuZCAqSVBfTVVMVElDQVNUKiBhcmUgc3VmZmljaWVudC4KClNvLCB0byBzdW1tYXJpemU6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIEFic29sdXRlbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBjb3VsZCByZXZlYWwgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzLgoqICAgKipGb2N1c1N5bWJvbHM6KiogKmlwXF9tclxfaW5wdXQqLCAqaXBcX21yXF9mb3J3YXJkKiwgKmlwbXJcX2NhY2hlXF91bnJlc29sdmVkKiAtIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZC4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiAqSVBcX01ST1VURSosICpJUFxfTVVMVElDQVNUKiAtIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGBza2ItJmd0O2NiYCBpcyBoYW5kbGVkIHdpdGhpbiAqaXBtcl9jYWNoZV9yZXBvcnQqIGR1cmluZyB0aGUgcmVwb3J0aW5nIG9mIG11bHRpY2FzdCBwYWNrZXRzLiBUaGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCB3aXRoaW4gdGhlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgY29kZSB0aGF0JiMzOTtzIHJlYWNoYWJsZSB3aGVuIG11bHRpY2FzdCByb3V0aW5nIGlzIGVuYWJsZWQsIG1lYW5pbmcgdGhpcyBpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKRmluYWxseSwgSSYjMzk7bGwgY29uZmlybSB1c2VyLXNwYWNlIGFjY2Vzc2liaWxpdHkgdG8gKmlwbXJfY2FjaGVfcmVwb3J0Ki4gU2VuZGluZyBtdWx0aWNhc3QgcGFja2V0cyB0aGF0IHRyaWdnZXIgYSBjYWNoZSBtaXNzIGluIHRoZSBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZSBzZW5kcyBhbiBJR01QIG1lc3NhZ2UgdG8gdGhlIG1yb3V0ZSBzb2NrZXQsIHdoaWNoIGlzIHN1ZmZpY2llbnQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXBfbXJfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtpcG1yX2NhY2hlX3VucmVzb2x2ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNrYi1cdTAwM2VjYiBpcyBjb3BpZWQgaW4gaXBtcl9jYWNoZV9yZXBvcnQgd2hlbiBhIG11bHRpY2FzdCBwYWNrZXQgaXMgcmVwb3J0ZWQgdG8gdGhlIG11bHRpY2FzdCByb3V0aW5nIGRhZW1vbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBtdWx0aWNhc3Qgcm91dGluZyBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXBfbXJfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtpcG1yX2NhY2hlX3VucmVzb2x2ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNrYi1cdTAwM2VjYiBpcyBjb3BpZWQgaW4gaXBtcl9jYWNoZV9yZXBvcnQgd2hlbiBhIG11bHRpY2FzdCBwYWNrZXQgaXMgcmVwb3J0ZWQgdG8gdGhlIG11bHRpY2FzdCByb3V0aW5nIGRhZW1vbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBtdWx0aWNhc3Qgcm91dGluZyBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NDYuNjY1ODgyNzMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2ODQyNTA5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tcl9pbnB1dFwiLFxuICAgIFwiaXBfbXJfZm9yd2FyZFwiLFxuICAgIFwiaXBtcl9jYWNoZV91bnJlc29sdmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNrYi1cXHUwMDNlY2IgaXMgY29waWVkIGluIGlwbXJfY2FjaGVfcmVwb3J0IHdoZW4gYSBtdWx0aWNhc3QgcGFja2V0IGlzIHJlcG9ydGVkIHRvIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBkYWVtb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gbXVsdGljYXN0IHJvdXRpbmcgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NDYuNjY1ODg4ODAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzk4MTY5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjOWJiNjBjODE1OWQ2YTIyZTU4NzdhYjkwYzg5MGJmNjc4NTdhZDQ5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDI4IDA4OjUwOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xcbmluZGV4IDFkOWE0YWMxNGZjZWY5Li4zYzQ1OGVhM2Q0MjM1OSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcG1yLmNcXG4rKysgYi9uZXQvaXB2NC9pcG1yLmNcXG5AQCAtMTA1OCw2ICsxMDU4LDcgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcXG4ge1xcbiBcXHRjb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7XFxuK1xcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xcbiBcXHRzdHJ1Y3Qgc29jayAqbXJvdXRlX3NrO1xcbiBcXHRzdHJ1Y3QgaWdtcGhkciAqaWdtcDtcXG4gXFx0c3RydWN0IGlnbXBtc2cgKm1zZztcXG5AQCAtMTExMyw3ICsxMTE0LDEwIEBAIHN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuIFxcdFxcdG1zZy1cXHUwMDNlaW1fdmlmID0gdmlmaTtcXG4gXFx0XFx0bXNnLVxcdTAwM2VpbV92aWZfaGkgPSB2aWZpIFxcdTAwM2VcXHUwMDNlIDg7XFxuIFxcdFxcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XFxuLVxcdFxcdG1lbWNweShza2ItXFx1MDAzZWNiLCBwa3QtXFx1MDAzZWNiLCBzaXplb2Yoc2tiLVxcdTAwM2VjYikpO1xcbitcXHRcXHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcXG4rXFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlY2IsIDAsIHNpemVvZihza2ItXFx1MDAzZWNiKSk7XFxuK1xcdFxcdGluZm8tXFx1MDAzZWlwaV9pZmluZGV4ID0gUEtUSU5GT19TS0JfQ0IocGt0KS1cXHUwMDNlaXBpX2lmaW5kZXg7XFxuK1xcdFxcdGluZm8tXFx1MDAzZWlwaV9zcGVjX2RzdCA9IFBLVElORk9fU0tCX0NCKHBrdCktXFx1MDAzZWlwaV9zcGVjX2RzdDtcXG4gXFx0XFx0LyogQWRkIG91ciBoZWFkZXIuXFxuIFxcdFxcdCAqIE5vdGUgdGhhdCBjb2RlLCBjc3VtIGFuZCBncm91cCBmaWVsZHMgYXJlIGNsZWFyZWQuXFxuIFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MDo0Ny4yMDY0ODI2NjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2OTE0MzYzOTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NUk9VVEVcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcF9tcl9mb3J3YXJkXCIsXG4gICAgXCJpcG1yX2NhY2hlX3VucmVzb2x2ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgc2tiLVxcdTAwM2VjYiBpcyBjb3BpZWQgaW4gaXBtcl9jYWNoZV9yZXBvcnQgd2hlbiBhIG11bHRpY2FzdCBwYWNrZXQgaXMgcmVwb3J0ZWQgdG8gdGhlIG11bHRpY2FzdCByb3V0aW5nIGRhZW1vbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBtdWx0aWNhc3Qgcm91dGluZyBpcyBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjOWJiNjBjODE1OWQ2YTIyZTU4NzdhYjkwYzg5MGJmNjc4NTdhZDQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDg6NTA6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmNcbmluZGV4IDFkOWE0YWMxNGZjZWY5Li4zYzQ1OGVhM2Q0MjM1OSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwbXIuY1xuKysrIGIvbmV0L2lwdjQvaXBtci5jXG5AQCAtMTA1OCw2ICsxMDU4LDcgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KVxuIHtcbiBcdGNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTtcbitcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xuIFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcbiBcdHN0cnVjdCBpZ21waGRyICppZ21wO1xuIFx0c3RydWN0IGlnbXBtc2cgKm1zZztcbkBAIC0xMTEzLDcgKzExMTQsMTAgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0bXNnLVx1MDAzZWltX3ZpZiA9IHZpZmk7XG4gXHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZpIFx1MDAzZVx1MDAzZSA4O1xuIFx0XHRpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpO1xuLVx0XHRtZW1jcHkoc2tiLVx1MDAzZWNiLCBwa3QtXHUwMDNlY2IsIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbitcdFx0aW5mbyA9IFBLVElORk9fU0tCX0NCKHNrYik7XG4rXHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbitcdFx0aW5mby1cdTAwM2VpcGlfaWZpbmRleCA9IFBLVElORk9fU0tCX0NCKHBrdCktXHUwMDNlaXBpX2lmaW5kZXg7XG4rXHRcdGluZm8tXHUwMDNlaXBpX3NwZWNfZHN0ID0gUEtUSU5GT19TS0JfQ0IocGt0KS1cdTAwM2VpcGlfc3BlY19kc3Q7XG4gXHRcdC8qIEFkZCBvdXIgaGVhZGVyLlxuIFx0XHQgKiBOb3RlIHRoYXQgY29kZSwgY3N1bSBhbmQgZ3JvdXAgZmllbGRzIGFyZSBjbGVhcmVkLlxuIFx0XHQgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjQ3LjIwNjQ4Mzk4NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzgxNTM2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTXVsdGljYXN0IFJvdXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0aW5rZXJpbmcgd2l0aCBgbmV0L2lwdjQvaXBtci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBob3cgaXQgaGFuZGxlcyB0aGUgY29weSBvcGVyYXRpb24gZm9yIGBza2ItXHUwMDNlY2JgLiBJbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBgbWVtY3B5YCwgaXQncyBub3cgdXNpbmcgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBJbml0aWFsbHksIHRoZSBmdWxsIGBza2ItXHUwMDNlY2JgIHdhcyBjb3BpZWQgZnJvbSBgcGt0LVx1MDAzZWNiYCB1c2luZyBgbWVtY3B5YC4gTm93LCBpdCdzIGNsZWFyaW5nIHRoZSBleGlzdGluZyBgc2tiLVx1MDAzZWNiYCB3aXRoIGBtZW1zZXRgLCB0aGVuIHNlbGVjdGl2ZWx5IGNvcHlpbmcgdHdvIHNwZWNpZmljIGZpZWxkczogYGlwaV9pZmluZGV4YCBhbmQgYGlwaV9zcGVjX2RzdGAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBJUHY0IG11bHRpY2FzdCByb3V0aW5nLCBhIG1vZGlmaWNhdGlvbiB0aGF0IG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIHdoeSB0aGUgY2hhbmdlPyBXaGF0J3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgemVyb2luZyBvdXQgdGhlIGVudGlyZSBgc2tiLVx1MDAzZWNiYCBhbmQgc2VsZWN0aXZlbHkgY29weWluZyBvbmx5IHRob3NlIHR3byBmaWVsZHM/IFRoZXJlIG11c3QgYmUgYSBzcGVjaWZpYyByZWFzb24sIGxpa2VseSByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIG9yIG1heWJlIGV2ZW4gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBiZWhhdmlvci4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsZXJzIG9mIGBpcG1yX2NhY2hlX3JlcG9ydGAgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBpbXBhY3QuIEknbGwgdXNlIGBncmVwcGVyYCDigJMgdGhhdCdzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYSBzb2xpZCBsaXN0IG9mIHRoZSBjYWxsIHNpdGVzIGFuZCBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NTEuNzQ0NjQwMzE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTcyNjEyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBtcl9jYWNoZV9yZXBvcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTEwOD1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTEwLVxcdFxcdFxcdCAgc3RydWN0IG1mY19jYWNoZSAqY2FjaGUsIGludCBsb2NhbCk7XFxubmV0L2lwdjQvaXBtci5jOjExMTpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0xMTItXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCk7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9NTI5PXN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy01NTEtXFx0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFKCkgaW4gdmlmX2FkZCgpIGFuZCB2aWZfZGVsZXRlKCkgKi9cXG5uZXQvaXB2NC9pcG1yLmM6NTUyOlxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCBSRUFEX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pLFxcbm5ldC9pcHY0L2lwbXIuYy01NTMtXFx0XFx0XFx0ICBJR01QTVNHX1dIT0xFUEtUKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz02ODc9c3RhdGljIGludCB2aWZfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy03MDktXFx0aWYgKHZpZmkgPT0gbXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIHtcXG5uZXQvaXB2NC9pcG1yLmM6NzEwOlxcdFxcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cXG5uZXQvaXB2NC9pcG1yLmMtNzExLVxcdFxcdFdSSVRFX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIC0xKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz04NDk9c3RhdGljIGludCB2aWZfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtOTQxLVxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZJRkZfUkVHSVNURVIpIHtcXG5uZXQvaXB2NC9pcG1yLmM6OTQyOlxcdFxcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cXG5uZXQvaXB2NC9pcG1yLmMtOTQzLVxcdFxcdFdSSVRFX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIHZpZmkpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTEwMTk9c3RhdGljIHZvaWQgaXBtcl9jYWNoZV9yZXNvbHZlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTA1Ni0gKi9cXG5uZXQvaXB2NC9pcG1yLmM6MTA1NzpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0xMDU4LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTE0Nj1zdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTE4My1cXHRcXHQvKiBSZWZsZWN0IGZpcnN0IHF1ZXJ5IGF0IG1yb3V0ZWQuICovXFxubmV0L2lwdjQvaXBtci5jOjExODQ6XFx0XFx0ZXJyID0gaXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIHZpZmksIElHTVBNU0dfTk9DQUNIRSk7XFxubmV0L2lwdjQvaXBtci5jLTExODUtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTkwNj1zdGF0aWMgaW50IGlwbXJfcHJlcGFyZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTkyNC1cXHRcXHRERVZfU1RBVFNfSU5DKHZpZl9kZXYsIHR4X3BhY2tldHMpO1xcbm5ldC9pcHY0L2lwbXIuYzoxOTI1OlxcdFxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB2aWZpLCBJR01QTVNHX1dIT0xFUEtUKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTkyNi1cXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjA0NT1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjEwMC1cXHRcXHRcXHRjLVxcdTAwM2VfYy5tZmNfdW4ucmVzLmxhc3RfYXNzZXJ0ID0gamlmZmllcztcXG5uZXQvaXB2NC9pcG1yLmM6MjEwMTpcXHRcXHRcXHRpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgdHJ1ZV92aWZpLCBJR01QTVNHX1dST05HVklGKTtcXG5uZXQvaXB2NC9pcG1yLmMtMjEwMi1cXHRcXHRcXHRpZiAoUkVBRF9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX2RvX3dydmlmd2hvbGUpKVxcbm5ldC9pcHY0L2lwbXIuYzoyMTAzOlxcdFxcdFxcdFxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB0cnVlX3ZpZmksXFxubmV0L2lwdjQvaXBtci5jLTIxMDQtXFx0XFx0XFx0XFx0XFx0XFx0ICBJR01QTVNHX1dSVklGV0hPTEUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MDo1NC4wNDE5MDc5MTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY2NTE4MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGlwbXJfY2FjaGVfcmVwb3J0YCBQYXRjaCoqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNpbmcgb24gdGhlIGBpcG1yX2NhY2hlX3JlcG9ydGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhbHRlcmluZyB0aGUgd2F5IGBza2ItXHUwMDNlY2JgIGlzIGhhbmRsZWQuIEhtbSwgaW50ZXJlc3RpbmcuIEJhc2VkIG9uIHRoZSBmaWxlIHBhdGgsIHRoaXMgaXMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZywgbGlrZWx5IHdpdGggcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGUgY29kZSBzZWVtcyBmdW5jdGlvbmFsLCBhbmQgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB0aGUgbmV0d29yayBzdGFjaywgc28gdGhpcyBpc24ndCBzb21lIGRlYWQgY29kZS4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuXG5cbkkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbnRlbnQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gTGV0IG1lIHNlYXJjaCBmb3IgYElQX01ST1VURWAgd2l0aGluIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBjb3JlIG11bHRpY2FzdCByb3V0aW5nIGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2hvdWxkIGhlbHAgY29ubmVjdCB0aGUgZG90cyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDI0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NTcuNDA4NDI4OTk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Njc0MDEzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX01ST1VURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMTUtXFxubmV0L2lwdjQvS2NvbmZpZzoyMTY6Y29uZmlnIElQX01ST1VURV9DT01NT05cXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cXHRib29sXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cXG5uZXQvaXB2NC9LY29uZmlnOjIyMDpjb25maWcgSVBfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMzEtXFxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2NC9LY29uZmlnLTIzMy1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MDo1OS4zNzU4MzUwNjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg3NjM1MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS2VybmVsJ3MgSVAgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUga2VybmVsIGNvbmZpZyBmb3IgSVAgTXVsdGljYXN0LCBzcGVjaWZpY2FsbHkgYElQX01ST1VURWAsIGlzIGRlZmluZWQuIEdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIElQdjQsIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgbmV0L2lwdjRgIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gQW5kIHdpdGhpbiB0aGF0LCB0aGUgZmlsZSB0aGF0IHR5cGljYWxseSBob2xkcyBLY29uZmlnIG9wdGlvbnMgZm9yIElQdjQgbmV0d29ya2luZyBmZWF0dXJlcyBpcyBgS2NvbmZpZ2AuIFRoZXJlZm9yZSwgSSdsbCBleGFtaW5lIGBuZXQvaXB2NC9LY29uZmlnYCB0byBsb2NhdGUgdGhlIGBJUF9NUk9VVEVgIG9wdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyIEkgbmVlZCBpbiBvcmRlciB0byBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgaXQgaXMgc2V0IGFuZCBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTIyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTE6MDIuNjYzNDcyMjcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTk6XFx0XFxuIDIyMDpcXHRjb25maWcgSVBfTVJPVVRFXFxuIDIyMTpcXHRcXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuIDIyMjpcXHRcXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxcbiAyMjM6XFx0XFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cXG4gMjI0OlxcdFxcdGhlbHBcXG4gMjI1OlxcdFxcdCAgVGhpcyBpcyB1c2VkIGlmIHlvdSB3YW50IHlvdXIgbWFjaGluZSB0byBhY3QgYXMgYSByb3V0ZXIgZm9yIElQXFxuIDIyNjpcXHRcXHQgIHBhY2tldHMgdGhhdCBoYXZlIHNldmVyYWwgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJdCBpcyBuZWVkZWQgb24gdGhlXFxuIDIyNzpcXHRcXHQgIE1CT05FLCBhIGhpZ2ggYmFuZHdpZHRoIG5ldHdvcmsgb24gdG9wIG9mIHRoZSBJbnRlcm5ldCB3aGljaCBjYXJyaWVzXFxuIDIyODpcXHRcXHQgIGF1ZGlvIGFuZCB2aWRlbyBicm9hZGNhc3RzLiBJbiBvcmRlciB0byBkbyB0aGF0LCB5b3Ugd291bGQgbW9zdFxcbiAyMjk6XFx0XFx0ICBsaWtlbHkgcnVuIHRoZSBwcm9ncmFtIG1yb3V0ZWQuIElmIHlvdSBoYXZlbid0IGhlYXJkIGFib3V0IGl0LCB5b3VcXG4gMjMwOlxcdFxcdCAgZG9uJ3QgbmVlZCBpdC5cXG4gMjMxOlxcdFxcbiAyMzI6XFx0Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG4gMjMzOlxcdFxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuIDIzNDpcXHRcXHRkZXBlbmRzIG9uIElQX01ST1VURSBcXHUwMDI2XFx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcXG4gMjM1OlxcdFxcdHNlbGVjdCBGSUJfUlVMRVNcXG4gMjM2OlxcdFxcdGhlbHBcXG4gMjM3OlxcdFxcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xcbiAyMzg6XFx0XFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjAyLjY2MzU1MTI0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzQwMzE3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTXVsdGljYXN0IFJlcXVpcmVtZW50cyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uLi4gaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgd2UncmUgZ29pbmcgdG8gbmVlZCBib3RoIGBJUF9NUk9VVEVgIGFuZCBgSVBfTVVMVElDQVNUYCBlbmFibGVkLiBJIGNhbid0IHNlZSBhIHdheSBhcm91bmQgdGhhdCwgZ2l2ZW4gdGhlIHByb2plY3Qgc3BlY3MuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYElQX01VTFRJQ0FTVGAg4oCTIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGdvdGNoYXMgSSdtIG92ZXJsb29raW5nIHRoZXJlLCBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9uIGl0cyBpbXBsZW1lbnRhdGlvbiwgb3IgbWF5YmUgZXZlbiBpZGVudGlmeSBpZiBhIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGwgb3Igc2V0dGluZyB3aXRoaW4gaXQgbmVlZHMgY2xvc2VyIGluc3BlY3Rpb24uIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDU2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MTowNS44OTc1ODYzNzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzAxNzc3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX01VTFRJQ0FTVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnLTQtI1xcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvS2NvbmZpZy02LVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3RpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjA4LjA2Nzc3MzIyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE1NjI5MDMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpcG1yX2NhY2hlX3JlcG9ydGAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpcG1yX2NhY2hlX3JlcG9ydGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBhcmVhczogYHJlZ192aWZfeG1pdGAsIGBpcG1yX2NhY2hlX3VucmVzb2x2ZWRgLCBgaXBtcl9wcmVwYXJlX3htaXRgLCBhbmQgYGlwX21yX2ZvcndhcmRgLiBUaGVzZSBhcmUgcHJldHR5IGNlbnRyYWwgdG8gbXVsdGljYXN0IHJvdXRpbmcsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlaW5nIGFsdGVyZWQgaGVyZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byBgaXBtcl9jYWNoZV9yZXBvcnRgIGl0c2VsZiBhbmQgZXhhbWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggZWFjaCBvZiB0aG9zZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGJlaGF2aW9yIGNoYW5nZS4gIFNpbmNlIGBpcG1yX2NhY2hlX3JlcG9ydGAgaXMgc3RhdGljLCBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBpbmxpbmVkLiBCYXNlZCBvbiBpdHMgc2l6ZSwgaXQncyBsaWtlbHkgbm90IGlubGluZWQsIGJ1dCBJIHNob3VsZCBzdGlsbCBjaGVjayB0aGUgY29kZSBqdXN0IHRvIGJlIDEwMCUgc3VyZS4gSSB3YW50IHRvIGluY2x1ZGUgdGhlIGNhbGxlcnMgaW4gbXkgZm9jdXMgc28gSSBjYW4gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIHdob2xlIHRoaW5nLlxuXG5JJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiwgd2hpY2ggaXMgbG9jYXRlZCBpbiBgbmV0L2lwdjQvaXBtci5jYC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzA3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjE4LjIyNDA2NjMwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBtci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNTcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNTc6XFx0c3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4xMDU4OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpXFxuMTA1OTpcXHR7XFxuMTA2MDpcXHRcXHRjb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7XFxuMTA2MTpcXHRcXHRzdHJ1Y3QgaW5fcGt0aW5mbyAqaW5mbztcXG4xMDYyOlxcdFxcdHN0cnVjdCBzb2NrICptcm91dGVfc2s7XFxuMTA2MzpcXHRcXHRzdHJ1Y3QgaWdtcGhkciAqaWdtcDtcXG4xMDY0OlxcdFxcdHN0cnVjdCBpZ21wbXNnICptc2c7XFxuMTA2NTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjEwNjY6XFx0XFx0aW50IHJldDtcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0bXJvdXRlX3NrID0gcmN1X2RlcmVmZXJlbmNlKG1ydC1cXHUwMDNlbXJvdXRlX3NrKTtcXG4xMDY5OlxcdFxcdGlmICghbXJvdXRlX3NrKVxcbjEwNzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTA3MTpcXHRcXG4xMDcyOlxcdFxcdGlmIChhc3NlcnQgPT0gSUdNUE1TR19XSE9MRVBLVCB8fCBhc3NlcnQgPT0gSUdNUE1TR19XUlZJRldIT0xFKVxcbjEwNzM6XFx0XFx0XFx0c2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20ocGt0LCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxuMTA3NDpcXHRcXHRlbHNlXFxuMTA3NTpcXHRcXHRcXHRza2IgPSBhbGxvY19za2IoMTI4LCBHRlBfQVRPTUlDKTtcXG4xMDc2OlxcdFxcbjEwNzc6XFx0XFx0aWYgKCFza2IpXFxuMTA3ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuMTA3OTpcXHRcXG4xMDgwOlxcdFxcdGlmIChhc3NlcnQgPT0gSUdNUE1TR19XSE9MRVBLVCB8fCBhc3NlcnQgPT0gSUdNUE1TR19XUlZJRldIT0xFKSB7XFxuMTA4MTpcXHRcXHRcXHQvKiBVZ2x5LCBidXQgd2UgaGF2ZSBubyBjaG9pY2Ugd2l0aCB0aGlzIGludGVyZmFjZS5cXG4xMDgyOlxcdFxcdFxcdCAqIER1cGxpY2F0ZSBvbGQgaGVhZGVyLCBmaXggaWhsLCBsZW5ndGggZXRjLlxcbjEwODM6XFx0XFx0XFx0ICogQW5kIGFsbCB0aGlzIG9ubHkgdG8gbWFuZ2xlIG1zZy1cXHUwMDNlaW1fbXNndHlwZSBhbmRcXG4xMDg0OlxcdFxcdFxcdCAqIHRvIHNldCBtc2ctXFx1MDAzZWltX21ieiB0byBcXFwibWJ6XFxcIiA6LSlcXG4xMDg1OlxcdFxcdFxcdCAqL1xcbjEwODY6XFx0XFx0XFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxuMTA4NzpcXHRcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4xMDg4OlxcdFxcdFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuMTA4OTpcXHRcXHRcXHRtc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4xMDkwOlxcdFxcdFxcdG1lbWNweShtc2csIHNrYl9uZXR3b3JrX2hlYWRlcihwa3QpLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxuMTA5MTpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX21zZ3R5cGUgPSBhc3NlcnQ7XFxuMTA5MjpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX21ieiA9IDA7XFxuMTA5MzpcXHRcXHRcXHRpZiAoYXNzZXJ0ID09IElHTVBNU0dfV1JWSUZXSE9MRSkge1xcbjEwOTQ6XFx0XFx0XFx0XFx0bXNnLVxcdTAwM2VpbV92aWYgPSB2aWZpO1xcbjEwOTU6XFx0XFx0XFx0XFx0bXNnLVxcdTAwM2VpbV92aWZfaGkgPSB2aWZpIFxcdTAwM2VcXHUwMDNlIDg7XFxuMTA5NjpcXHRcXHRcXHR9IGVsc2Uge1xcbjEwOTc6XFx0XFx0XFx0XFx0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFKCkgaW4gdmlmX2FkZCgpIGFuZCB2aWZfZGVsZXRlKCkgKi9cXG4xMDk4OlxcdFxcdFxcdFxcdGludCB2aWZfbnVtID0gUkVBRF9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0XFx0XFx0bXNnLVxcdTAwM2VpbV92aWYgPSB2aWZfbnVtO1xcbjExMDE6XFx0XFx0XFx0XFx0bXNnLVxcdTAwM2VpbV92aWZfaGkgPSB2aWZfbnVtIFxcdTAwM2VcXHUwMDNlIDg7XFxuMTEwMjpcXHRcXHRcXHR9XFxuMTEwMzpcXHRcXHRcXHRpcF9oZHIoc2tiKS1cXHUwMDNlaWhsID0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgXFx1MDAzZVxcdTAwM2UgMjtcXG4xMTA0OlxcdFxcdFxcdGlwX2hkcihza2IpLVxcdTAwM2V0b3RfbGVuID0gaHRvbnMobnRvaHMoaXBfaGRyKHBrdCktXFx1MDAzZXRvdF9sZW4pICtcXG4xMTA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xcbjExMDY6XFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTE6MTguMjI0MjE0ODY3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODUwMzIxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIHJldmlld2luZyBjb2RlIGFzIGFuIGV4cGVydDpcblxuKipBc3Nlc3NtZW50IG9mIEZ1bmN0aW9uIENvbXBsZXRpb24qKlxuXG5BbHJpZ2h0LCBJJ3ZlIGp1c3QgYmVlbiBzY3J1dGluaXppbmcgYSBzcGVjaWZpYyBzZWdtZW50LCBhbmQgbm93IEkgbmVlZCB0byBleHBhbmQgdGhlIHNjb3BlIG9mIG15IHJldmlldy4gSXQncyB0aW1lIHRvIHN5c3RlbWF0aWNhbGx5IGV4YW1pbmUgdGhlIHJlbWFpbmRlciBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMsIGRlcGVuZGVuY2llcywgb3IgcG90ZW50aWFsIGJ1Z3MgdGhhdCBtaWdodCBleGlzdCBpbiB0aGUgdW5leHBsb3JlZCBwYXJ0cyBvZiB0aGUgY29kZS4gTXkgcHJpbWFyeSBnb2FsLCBhcyBhbHdheXMsIGlzIHRvIGVuc3VyZSByb2J1c3QgZnVuY3Rpb25hbGl0eSBhbmQgYWRoZXJlbmNlIHRvIGJlc3QgcHJhY3RpY2VzLCBidXQgSSBhbSBlcXVhbGx5IGNvbmNlcm5lZCBhYm91dCByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjIxLjYwOTI0OTkzMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBtci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDc6XFx0XFx0XFx0LyogQ29weSB0aGUgSVAgaGVhZGVyICovXFxuMTEwODpcXHRcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiLVxcdTAwM2VsZW4pO1xcbjExMDk6XFx0XFx0XFx0c2tiX3B1dChza2IsIGlobCk7XFxuMTExMDpcXHRcXHRcXHRza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIHBrdC1cXHUwMDNlZGF0YSwgaWhsKTtcXG4xMTExOlxcdFxcdFxcdC8qIEZsYWcgdG8gdGhlIGtlcm5lbCB0aGlzIGlzIGEgcm91dGUgYWRkICovXFxuMTExMjpcXHRcXHRcXHRpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wgPSAwO1xcbjExMTM6XFx0XFx0XFx0bXNnID0gKHN0cnVjdCBpZ21wbXNnICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuMTExNDpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZiA9IHZpZmk7XFxuMTExNTpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZl9oaSA9IHZpZmkgXFx1MDAzZVxcdTAwM2UgODtcXG4xMTE2OlxcdFxcdFxcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XFxuMTExNzpcXHRcXHRcXHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcXG4xMTE4OlxcdFxcdFxcdG1lbXNldChza2ItXFx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVxcdTAwM2VjYikpO1xcbjExMTk6XFx0XFx0XFx0aW5mby1cXHUwMDNlaXBpX2lmaW5kZXggPSBQS1RJTkZPX1NLQl9DQihwa3QpLVxcdTAwM2VpcGlfaWZpbmRleDtcXG4xMTIwOlxcdFxcdFxcdGluZm8tXFx1MDAzZWlwaV9zcGVjX2RzdCA9IFBLVElORk9fU0tCX0NCKHBrdCktXFx1MDAzZWlwaV9zcGVjX2RzdDtcXG4xMTIxOlxcdFxcdFxcdC8qIEFkZCBvdXIgaGVhZGVyLlxcbjExMjI6XFx0XFx0XFx0ICogTm90ZSB0aGF0IGNvZGUsIGNzdW0gYW5kIGdyb3VwIGZpZWxkcyBhcmUgY2xlYXJlZC5cXG4xMTIzOlxcdFxcdFxcdCAqL1xcbjExMjQ6XFx0XFx0XFx0aWdtcCA9IHNrYl9wdXRfemVybyhza2IsIHNpemVvZihzdHJ1Y3QgaWdtcGhkcikpO1xcbjExMjU6XFx0XFx0XFx0aWdtcC1cXHUwMDNldHlwZSA9IGFzc2VydDtcXG4xMTI2OlxcdFxcdFxcdG1zZy1cXHUwMDNlaW1fbXNndHlwZSA9IGFzc2VydDtcXG4xMTI3OlxcdFxcdFxcdGlwX2hkcihza2IpLVxcdTAwM2V0b3RfbGVuID0gaHRvbnMoc2tiLVxcdTAwM2VsZW4pO1xcdC8qIEZpeCB0aGUgbGVuZ3RoICovXFxuMTEyODpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyO1xcbjExMjk6XFx0XFx0fVxcbjExMzA6XFx0XFxuMTEzMTpcXHRcXHRpZ21wbXNnX25ldGxpbmtfZXZlbnQobXJ0LCBza2IpO1xcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHQvKiBEZWxpdmVyIHRvIG1yb3V0ZWQgKi9cXG4xMTM0OlxcdFxcdHJldCA9IHNvY2tfcXVldWVfcmN2X3NrYihtcm91dGVfc2ssIHNrYik7XFxuMTEzNTpcXHRcXG4xMTM2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMTEzNzpcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXFwibXJvdXRlOiBwZW5kaW5nIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIGVudHJpZXNcXFxcblxcXCIpO1xcbjExMzg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTEzOTpcXHRcXHR9XFxuMTE0MDpcXHRcXG4xMTQxOlxcdFxcdHJldHVybiByZXQ7XFxuMTE0MjpcXHR9XFxuMTE0MzpcXHRcXG4xMTQ0OlxcdC8qIFF1ZXVlIGEgcGFja2V0IGZvciByZXNvbHV0aW9uLiBJdCBnZXRzIGxvY2tlZCBjYWNoZSBlbnRyeSEgKi9cXG4xMTQ1OlxcdC8qIENhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkgKi9cXG4xMTQ2OlxcdHN0YXRpYyBpbnQgaXBtcl9jYWNoZV91bnJlc29sdmVkKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCB2aWZpX3QgdmlmaSxcXG4xMTQ3OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjExNDg6XFx0e1xcbjExNDk6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCk7XFxuMTE1MDpcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xcbjExNTE6XFx0XFx0c3RydWN0IG1mY19jYWNoZSAqYyA9IE5VTEw7XFxuMTE1MjpcXHRcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuMTE1MzpcXHRcXHRpbnQgZXJyO1xcbjExNTQ6XFx0XFxuMTE1NTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm1mY191bnJlc19sb2NrKTtcXG4xMTU2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MToyMS42MDk0MDgyMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3ODMyMTI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IEluZm9ybWF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgc2VjdXJpdHkgb3IgaW5mb3JtYXRpb24gbGVha2FnZSBpc3N1ZSByZWxhdGVkIHRvIGhvdyBwYWNrZXQgaW5mb3JtYXRpb24gaXMgaGFuZGxlZC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgdGhhdCBgc2tiLVx1MDAzZWNiYCB3YXMgYmVpbmcgY29waWVkIGRpcmVjdGx5LCB3aGljaCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgb3Igc2Vuc2l0aXZlIGRhdGEuIEl0J3MgbXVjaCBjbGVhbmVyIGFuZCBzYWZlciB0byBvbmx5IGNvcHkgdGhlIGZpZWxkcyB3ZSBhY3R1YWxseSBuZWVkLlxuXG5XYWl0IGEgc2Vjb25kLiBMZXQncyB0cmFjZSB0aGlzIGJhY2sgYSBsaXR0bGUuIFRoZSBmdW5jdGlvbiBgaXB2NF9wa3RpbmZvX3ByZXBhcmVgIHByZXBhcmVzIGBwa3QtXHUwMDNlY2JgLCB3aGljaCBpcyBjYXN0IHRvIGBzdHJ1Y3QgaW5fcGt0aW5mb2AsIHJpZ2h0PyBBbmQgKnRoZW4qIGl0IGNvcGllcyBgcGt0LVx1MDAzZWNiYCB0byBgc2tiLVx1MDAzZWNiYC4gSSBzZWUuIEJ1dCB0aGUgcGF0Y2ggYWx0ZXJzIHRoaXMgZmxvdywgYW5kIHRoZSBgc2tiYCBpcyBlaXRoZXIgYSBuZXdseSBhbGxvY2F0ZWQgb3IgcmVhbGxvY2F0ZWQgc3RydWN0dXJlLCB3aGljaCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBhbmQgdGhlIHdheSBpdCBpcyBiZWluZyB1c2VkLlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhpcyBiZWhhdmlvciB0byBvbmx5IGNvcHkgYGlwaV9pZmluZGV4YCBhbmQgYGlwaV9zcGVjX2RzdGAgYW5kIHRoZW4gemVyb2luZyBvdXQgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZS4gRGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIGFib3V0IGRhdGEgc2FuaXRpemF0aW9uIGFuZCBtaW5pbWl6aW5nIHdoYXQgZ2V0cyBwYXNzZWQgYXJvdW5kLiBNYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5Ob3cgSSBuZWVkIHRvIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBpcG1yX2NhY2hlX3JlcG9ydGAuIEkgc2VlIHRoZXJlIGFyZSBmb3VyIG9mIHRoZW06IGByZWdfdmlmX3htaXRgLCBgaXBtcl9jYWNoZV91bnJlc29sdmVkYCwgYGlwbXJfcHJlcGFyZV94bWl0YCwgYW5kIGBpcF9tcl9mb3J3YXJkYC5cblxuUmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYGlwX21yX2ZvcndhcmRgLiBUaGF0J3Mgd2hlcmUgSSdsbCBwcm9iYWJseSBmaW5kIHRoZSBtb3N0IHJlbGV2YW50IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MToyNy4wODc3MzE0NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzI0NzcyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfbXJfZm9yd2FyZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTA1PXN0YXRpYyB2b2lkIGlwbXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDctXFxubmV0L2lwdjQvaXBtci5jOjEwODpzdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxubmV0L2lwdjQvaXBtci5jLTEwOS1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTAxOT1zdGF0aWMgdm9pZCBpcG1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDQ2LVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2NC9pcG1yLmM6MTA0NzpcXHRcXHRcXHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBza2ItXFx1MDAzZWRldiwgc2tiLCBjLCAwKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTA0OC1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0yMDMyPXN0YXRpYyBpbnQgaXBtcl9maW5kX3ZpZihjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMDQ0LS8qIENhbGxlZCB1bmVyIHJjdV9yZWFkX2xvY2soKSAqL1xcbm5ldC9pcHY0L2lwbXIuYzoyMDQ1OnN0YXRpYyB2b2lkIGlwX21yX2ZvcndhcmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2NC9pcG1yLmMtMjA0Ni1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjE5Mz1pbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMjc1LVxcbm5ldC9pcHY0L2lwbXIuYzoyMjc2OlxcdGlwX21yX2ZvcndhcmQobmV0LCBtcnQsIGRldiwgc2tiLCBjYWNoZSwgbG9jYWwpO1xcbm5ldC9pcHY0L2lwbXIuYy0yMjc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MToyOC44NjAyMTM5NjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NzkwNjMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTXVsdGljYXN0IFJvdXRpbmcncyBDb3JlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpY2FzdCByb3V0aW5nIGlzIGhhbmRsZWQgYXQgdGhlIGVudHJ5IGxldmVsLiBSaWdodCwgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgaXBfbXJfaW5wdXRgLiBUaGF0J3Mgd2hlcmUgaXQgYWxsIGJlZ2lucy4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyBpbmNvbWluZyBtdWx0aWNhc3QgcGFja2V0cyBhcmUgcHJvY2Vzc2VkIGFuZCB3aGVyZSB0aGV5IGFyZSByb3V0ZWQgZnJvbSB0aGVyZS4gTGV0IG1lIGRpdmUgaW50byB0aGF0IGBpcF9tcl9pbnB1dGAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJIGtub3cgSSBjYW4gYnVpbGQgb24gdGhpcyBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjMxLjgyODEyMzM4NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MjcwMjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tcl9pbnB1dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcC5oPTE2OT12b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKTtcXG5pbmNsdWRlL25ldC9pcC5oOjE3MDppbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvaXAuaC0xNzEtaW50IGlwX21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0zNjc9aW50IGlwX21jX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTM4Ni1cXHRcXHQgICB3aGljaCByZXR1cm5lZCBhZnRlciBmb3J3YXJkaW5nOyB0aGV5IHdpbGwgYmUgIGRyb3BwZWRcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzozODc6XFx0XFx0ICAgYnkgaXBfbXJfaW5wdXQgaW4gYW55IGNhc2UuXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzg4LVxcdFxcdCAgIE5vdGUsIHRoYXQgbG9jYWwgZnJhbWVzIGFyZSBsb29wZWQgYmFjayB0byBiZSBkZWxpdmVyZWRcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTM5MC1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzozOTE6XFx0XFx0ICAgVGhpcyBjaGVjayBpcyBkdXBsaWNhdGVkIGluIGlwX21yX2lucHV0IGF0IHRoZSBtb21lbnQuXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzkyLVxcdFxcdCAqL1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTIxNjY9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9ydF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMTkyLSAqL1xcbm5ldC9pcHY0L2lwbXIuYzoyMTkzOmludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwbXIuYy0yMTk0LXtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTczNz1pcF9yb3V0ZV9pbnB1dF9tYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTc2OS1cXHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRhZGRyKSBcXHUwMDI2XFx1MDAyNiBJTl9ERVZfTUZPUldBUkQoaW5fZGV2KSlcXG5uZXQvaXB2NC9yb3V0ZS5jOjE3NzA6XFx0XFx0cnRoLVxcdTAwM2Vkc3QuaW5wdXQgPSBpcF9tcl9pbnB1dDtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE3NzEtI2VuZGlmXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI1NTc9c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjY2OC1cXHRcXHRcXHQgICAgIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGZsNC1cXHUwMDNlZGFkZHIpKSB7XFxubmV0L2lwdjQvcm91dGUuYzoyNjY5OlxcdFxcdFxcdFxcdHJ0aC1cXHUwMDNlZHN0LmlucHV0ID0gaXBfbXJfaW5wdXQ7XFxubmV0L2lwdjQvcm91dGUuYy0yNjcwLVxcdFxcdFxcdFxcdHJ0aC1cXHUwMDNlZHN0Lm91dHB1dCA9IGlwX21yX291dHB1dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTE6MzMuOTgwODMxMzI1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTQ0MTcwNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNdWx0aWNhc3QgUGFja2V0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG11bHRpY2FzdCBwYWNrZXRzIGFyZSBoYW5kbGVkIGhlcmUuIEl0IHNlZW1zIHdlIGhhdmUgdGhyZWUga2V5IGZ1bmN0aW9ucyB0byBjb25zaWRlci4gRmlyc3QsIHRoZXJlJ3MgYGlwX21yX2lucHV0YCwgd2hpY2ggaXMgdHJpZ2dlcmVkIHdoZW4gYSBtdWx0aWNhc3QgcGFja2V0IGFycml2ZXMgYW5kIHRoZSBkZXZpY2UgaXMgY29uZmlndXJlZCBmb3IgbXVsdGljYXN0IGZvcndhcmRpbmcg4oCTIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZW4gd2UgaGF2ZSBgaXBfbXJfb3V0cHV0YCwgd2hpY2ggaGFuZGxlcyB0aGUgbG9jYWwgc2VuZGluZyBvZiBtdWx0aWNhc3QgcGFja2V0cyB0aGF0IHJlcXVpcmUgZm9yd2FyZGluZy5cblxuVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGJlIHdpdGhpbiBgaXBtcl9jYWNoZV9yZXBvcnRgLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2hlbiB0aGVyZSdzIGEgbXVsdGljYXN0IGNhY2hlIG1pc3MsIG9yIHdoZW4gYSBWaXJ0dWFsIEludGVyZmFjZSAoVklGKSBpcyBpbmNvcnJlY3QuIFRoaXMgaXMgd2hhdCBJIHdhcyBsb29raW5nIGZvci5cblxuTm93LCBhIHF1aWNrIG5vdGUsIEkgc2VlIHRoYXQgYGlwbXJfY2FjaGVfcmVwb3J0YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AuIEkgd2FzIGluaXRpYWxseSBjb25jZXJuZWQgdGhhdCBpdCBtaWdodCBiZSBpbmxpbmVkLCBidXQgdGhlIGZhY3QgdGhhdCBpdCdzIGBzdGF0aWNgIGRvZXNuJ3QgbmVjZXNzYXJpbHkgcnVsZSB0aGF0IG91dCwgYWx0aG91Z2ggc3RhdGljIGZ1bmN0aW9ucyBhcmUgbGVzcyBsaWtlbHkgdG8gYmUgaW5saW5lZC4gR2l2ZW4gdGhhdCBgaXBtcl9jYWNoZV9yZXBvcnRgIGlzIHByb2JhYmx5IGEgc3Vic3RhbnRpYWwgYmxvY2sgb2YgY29kZSwgdGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IG5vdCBpbmxpbmUgaXQuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgZnVuY3Rpb24ncyBzaXplIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTE6NDQuMTI1MDA0OTQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcG1yLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1NyxcbiAgXCJMaW5lQ291bnRcIjogODZcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA1NzpcXHRzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbjEwNTg6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcXG4xMDU5OlxcdHtcXG4xMDYwOlxcdFxcdGNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTtcXG4xMDYxOlxcdFxcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xcbjEwNjI6XFx0XFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcXG4xMDYzOlxcdFxcdHN0cnVjdCBpZ21waGRyICppZ21wO1xcbjEwNjQ6XFx0XFx0c3RydWN0IGlnbXBtc2cgKm1zZztcXG4xMDY1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTA2NjpcXHRcXHRpbnQgcmV0O1xcbjEwNjc6XFx0XFxuMTA2ODpcXHRcXHRtcm91dGVfc2sgPSByY3VfZGVyZWZlcmVuY2UobXJ0LVxcdTAwM2Vtcm91dGVfc2spO1xcbjEwNjk6XFx0XFx0aWYgKCFtcm91dGVfc2spXFxuMTA3MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDcxOlxcdFxcbjEwNzI6XFx0XFx0aWYgKGFzc2VydCA9PSBJR01QTVNHX1dIT0xFUEtUIHx8IGFzc2VydCA9PSBJR01QTVNHX1dSVklGV0hPTEUpXFxuMTA3MzpcXHRcXHRcXHRza2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShwa3QsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcXG4xMDc0OlxcdFxcdGVsc2VcXG4xMDc1OlxcdFxcdFxcdHNrYiA9IGFsbG9jX3NrYigxMjgsIEdGUF9BVE9NSUMpO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHRpZiAoIXNrYilcXG4xMDc4OlxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4xMDc5OlxcdFxcbjEwODA6XFx0XFx0aWYgKGFzc2VydCA9PSBJR01QTVNHX1dIT0xFUEtUIHx8IGFzc2VydCA9PSBJR01QTVNHX1dSVklGV0hPTEUpIHtcXG4xMDgxOlxcdFxcdFxcdC8qIFVnbHksIGJ1dCB3ZSBoYXZlIG5vIGNob2ljZSB3aXRoIHRoaXMgaW50ZXJmYWNlLlxcbjEwODI6XFx0XFx0XFx0ICogRHVwbGljYXRlIG9sZCBoZWFkZXIsIGZpeCBpaGwsIGxlbmd0aCBldGMuXFxuMTA4MzpcXHRcXHRcXHQgKiBBbmQgYWxsIHRoaXMgb25seSB0byBtYW5nbGUgbXNnLVxcdTAwM2VpbV9tc2d0eXBlIGFuZFxcbjEwODQ6XFx0XFx0XFx0ICogdG8gc2V0IG1zZy1cXHUwMDNlaW1fbWJ6IHRvIFxcXCJtYnpcXFwiIDotKVxcbjEwODU6XFx0XFx0XFx0ICovXFxuMTA4NjpcXHRcXHRcXHRza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcXG4xMDg3OlxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjEwODg6XFx0XFx0XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4xMDg5OlxcdFxcdFxcdG1zZyA9IChzdHJ1Y3QgaWdtcG1zZyAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjEwOTA6XFx0XFx0XFx0bWVtY3B5KG1zZywgc2tiX25ldHdvcmtfaGVhZGVyKHBrdCksIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcXG4xMDkxOlxcdFxcdFxcdG1zZy1cXHUwMDNlaW1fbXNndHlwZSA9IGFzc2VydDtcXG4xMDkyOlxcdFxcdFxcdG1zZy1cXHUwMDNlaW1fbWJ6ID0gMDtcXG4xMDkzOlxcdFxcdFxcdGlmIChhc3NlcnQgPT0gSUdNUE1TR19XUlZJRldIT0xFKSB7XFxuMTA5NDpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZiA9IHZpZmk7XFxuMTA5NTpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZl9oaSA9IHZpZmkgXFx1MDAzZVxcdTAwM2UgODtcXG4xMDk2OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTA5NzpcXHRcXHRcXHRcXHQvKiBQYWlycyB3aXRoIFdSSVRFX09OQ0UoKSBpbiB2aWZfYWRkKCkgYW5kIHZpZl9kZWxldGUoKSAqL1xcbjEwOTg6XFx0XFx0XFx0XFx0aW50IHZpZl9udW0gPSBSRUFEX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pO1xcbjEwOTk6XFx0XFxuMTEwMDpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZiA9IHZpZl9udW07XFxuMTEwMTpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZl9oaSA9IHZpZl9udW0gXFx1MDAzZVxcdTAwM2UgODtcXG4xMTAyOlxcdFxcdFxcdH1cXG4xMTAzOlxcdFxcdFxcdGlwX2hkcihza2IpLVxcdTAwM2VpaGwgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSBcXHUwMDNlXFx1MDAzZSAyO1xcbjExMDQ6XFx0XFx0XFx0aXBfaGRyKHNrYiktXFx1MDAzZXRvdF9sZW4gPSBodG9ucyhudG9ocyhpcF9oZHIocGt0KS1cXHUwMDNldG90X2xlbikgK1xcbjExMDU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxuMTEwNjpcXHRcXHR9IGVsc2Uge1xcbjExMDc6XFx0XFx0XFx0LyogQ29weSB0aGUgSVAgaGVhZGVyICovXFxuMTEwODpcXHRcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiLVxcdTAwM2VsZW4pO1xcbjExMDk6XFx0XFx0XFx0c2tiX3B1dChza2IsIGlobCk7XFxuMTExMDpcXHRcXHRcXHRza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIHBrdC1cXHUwMDNlZGF0YSwgaWhsKTtcXG4xMTExOlxcdFxcdFxcdC8qIEZsYWcgdG8gdGhlIGtlcm5lbCB0aGlzIGlzIGEgcm91dGUgYWRkICovXFxuMTExMjpcXHRcXHRcXHRpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wgPSAwO1xcbjExMTM6XFx0XFx0XFx0bXNnID0gKHN0cnVjdCBpZ21wbXNnICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuMTExNDpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZiA9IHZpZmk7XFxuMTExNTpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZl9oaSA9IHZpZmkgXFx1MDAzZVxcdTAwM2UgODtcXG4xMTE2OlxcdFxcdFxcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XFxuMTExNzpcXHRcXHRcXHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcXG4xMTE4OlxcdFxcdFxcdG1lbXNldChza2ItXFx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVxcdTAwM2VjYikpO1xcbjExMTk6XFx0XFx0XFx0aW5mby1cXHUwMDNlaXBpX2lmaW5kZXggPSBQS1RJTkZPX1NLQl9DQihwa3QpLVxcdTAwM2VpcGlfaWZpbmRleDtcXG4xMTIwOlxcdFxcdFxcdGluZm8tXFx1MDAzZWlwaV9zcGVjX2RzdCA9IFBLVElORk9fU0tCX0NCKHBrdCktXFx1MDAzZWlwaV9zcGVjX2RzdDtcXG4xMTIxOlxcdFxcdFxcdC8qIEFkZCBvdXIgaGVhZGVyLlxcbjExMjI6XFx0XFx0XFx0ICogTm90ZSB0aGF0IGNvZGUsIGNzdW0gYW5kIGdyb3VwIGZpZWxkcyBhcmUgY2xlYXJlZC5cXG4xMTIzOlxcdFxcdFxcdCAqL1xcbjExMjQ6XFx0XFx0XFx0aWdtcCA9IHNrYl9wdXRfemVybyhza2IsIHNpemVvZihzdHJ1Y3QgaWdtcGhkcikpO1xcbjExMjU6XFx0XFx0XFx0aWdtcC1cXHUwMDNldHlwZSA9IGFzc2VydDtcXG4xMTI2OlxcdFxcdFxcdG1zZy1cXHUwMDNlaW1fbXNndHlwZSA9IGFzc2VydDtcXG4xMTI3OlxcdFxcdFxcdGlwX2hkcihza2IpLVxcdTAwM2V0b3RfbGVuID0gaHRvbnMoc2tiLVxcdTAwM2VsZW4pO1xcdC8qIEZpeCB0aGUgbGVuZ3RoICovXFxuMTEyODpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyO1xcbjExMjk6XFx0XFx0fVxcbjExMzA6XFx0XFxuMTEzMTpcXHRcXHRpZ21wbXNnX25ldGxpbmtfZXZlbnQobXJ0LCBza2IpO1xcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHQvKiBEZWxpdmVyIHRvIG1yb3V0ZWQgKi9cXG4xMTM0OlxcdFxcdHJldCA9IHNvY2tfcXVldWVfcmN2X3NrYihtcm91dGVfc2ssIHNrYik7XFxuMTEzNTpcXHRcXG4xMTM2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMTEzNzpcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXFwibXJvdXRlOiBwZW5kaW5nIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIGVudHJpZXNcXFxcblxcXCIpO1xcbjExMzg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTEzOTpcXHRcXHR9XFxuMTE0MDpcXHRcXG4xMTQxOlxcdFxcdHJldHVybiByZXQ7XFxuMTE0MjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjQ0LjEyNTE2Mjc0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE0MzYzNDc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVB2NCBNdWx0aWNhc3QgUm91dGluZyBDb2RlKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBkZXRlcm1pbmVkIGFmdGVyIGEgY2xvc2UgbG9vayBhdCB0aGlzIGNvZGUuIFRoaXMgODYtbGluZSBmdW5jdGlvbiwgKmlwbXJfY2FjaGVfcmVwb3J0KiwgaXNuJ3QgaW5saW5lZCwgd2hpY2ggaXMgZ29vZCB0byBrbm93IGZyb20gdGhlIHN0YXJ0LiBUbyBlbnN1cmUgSSBjYXB0dXJlIGFsbCByZWxldmFudCBkZXBlbmRlbmNpZXMsIEknbSBnb2luZyB0byBpbmNsdWRlICppcF9tcl9pbnB1dCosICppcF9tcl9vdXRwdXQqLCBhbmQgKmlwbXJfY2FjaGVfdW5yZXNvbHZlZCogaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEkgYnJpZWZseSBjaGVja2VkIGlmICppcG1yX2NhY2hlX3JlcG9ydCogd2FzIGV4cG9ydGVkLCBidXQgaXQncyBzdGF0aWMsIHNvIHRoYXQgY2xhcmlmaWVzIHRoaW5ncy4gU2luY2UgKmlwbXJfY2FjaGVfcmVwb3J0KiBpcyBjYWxsZWQgZnJvbSBvdGhlciBrZXkgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgKmlwbXJfY2FjaGVfdW5yZXNvbHZlZCosICppcG1yX3ByZXBhcmVfeG1pdCosICppcF9tcl9mb3J3YXJkKiwgYW5kICpyZWdfdmlmX3htaXQqLCBJJ2xsIGFsc28gYWRkICppcF9tcl9mb3J3YXJkKiB0byBgRm9jdXNTeW1ib2xzYC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gKklQX01ST1VURSogZGVwZW5kcyBvbiAqSVBfTVVMVElDQVNUKiwgc28gdGhvc2UgdHdvIG5lZWQgdG8gYmUgaW4gYEVuYWJsZUNvbmZpZ3NgLiBJIGp1c3QgZG91YmxlLWNoZWNrZWQsIGFuZCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBzdHJpY3RseSAqcmVxdWlyZWQqIGJ1dCAqSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUyogbWlnaHQgYmUgdXNlZnVsIHRvIGVuYWJsZSwgYnV0IEkgd2lsbCBub3QgYWRkIGl0LiBJdCdzIHNhZmUgdG8gc2F5ICpJUF9NUk9VVEUqIGFuZCAqSVBfTVVMVElDQVNUKiBhcmUgc3VmZmljaWVudC5cblxuU28sIHRvIHN1bW1hcml6ZTpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBBYnNvbHV0ZWx5LCB0aGlzIGlzIGEgY2hhbmdlIHRoYXQgY291bGQgcmV2ZWFsIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy5cbiogICAqKkZvY3VzU3ltYm9sczoqKiAqaXBcXF9tclxcX2lucHV0KiwgKmlwXFxfbXJcXF9mb3J3YXJkKiwgKmlwbXJcXF9jYWNoZVxcX3VucmVzb2x2ZWQqIC0gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiAqSVBcXF9NUk9VVEUqLCAqSVBcXF9NVUxUSUNBU1QqIC0gVGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGBza2ItXHUwMDNlY2JgIGlzIGhhbmRsZWQgd2l0aGluICppcG1yX2NhY2hlX3JlcG9ydCogZHVyaW5nIHRoZSByZXBvcnRpbmcgb2YgbXVsdGljYXN0IHBhY2tldHMuIFRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIHdpdGhpbiB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBjb2RlIHRoYXQncyByZWFjaGFibGUgd2hlbiBtdWx0aWNhc3Qgcm91dGluZyBpcyBlbmFibGVkLCBtZWFuaW5nIHRoaXMgaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cblxuRmluYWxseSwgSSdsbCBjb25maXJtIHVzZXItc3BhY2UgYWNjZXNzaWJpbGl0eSB0byAqaXBtcl9jYWNoZV9yZXBvcnQqLiBTZW5kaW5nIG11bHRpY2FzdCBwYWNrZXRzIHRoYXQgdHJpZ2dlciBhIGNhY2hlIG1pc3MgaW4gdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIHNlbmRzIGFuIElHTVAgbWVzc2FnZSB0byB0aGUgbXJvdXRlIHNvY2tldCwgd2hpY2ggaXMgc3VmZmljaWVudC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY4NywiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MTo1Ni4yNjg4MDAyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzMTkzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBfTVVMVElDQVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbXJfaW5wdXRcIixcbiAgICBcImlwX21yX2ZvcndhcmRcIixcbiAgICBcImlwbXJfY2FjaGVfdW5yZXNvbHZlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBza2ItXFx1MDAzZWNiIGlzIGNvcGllZCBpbiBpcG1yX2NhY2hlX3JlcG9ydCB3aGVuIGEgbXVsdGljYXN0IHBhY2tldCBpcyByZXBvcnRlZCB0byB0aGUgbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIG11bHRpY2FzdCByb3V0aW5nIGlzIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tcl9pbnB1dFwiLFxuICAgIFwiaXBfbXJfZm9yd2FyZFwiLFxuICAgIFwiaXBtcl9jYWNoZV91bnJlc29sdmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNrYi1cXHUwMDNlY2IgaXMgY29waWVkIGluIGlwbXJfY2FjaGVfcmVwb3J0IHdoZW4gYSBtdWx0aWNhc3QgcGFja2V0IGlzIHJlcG9ydGVkIHRvIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBkYWVtb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gbXVsdGljYXN0IHJvdXRpbmcgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvbzt2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 08:24:55 +0000 UTC FinishedAt: 2026-07-28 08:51:57 +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": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IP_MULTICAST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "97ac08560d236ca17f6606d9e671118e5eae5721", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IP_MULTICAST" ], "series_id": "37e6cacb-88fb-4dc2-9a2e-179393800649" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_mr_input", "ip_mr_forward", "ipmr_cache_unresolved" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tcl9pbnB1dCYjMzQ7LAogICAgJiMzNDtpcF9tcl9mb3J3YXJkJiMzNDssCiAgICAmIzM0O2lwbXJfY2FjaGVfdW5yZXNvbHZlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgc2tiLVx1MDAzZWNiIGlzIGNvcGllZCBpbiBpcG1yX2NhY2hlX3JlcG9ydCB3aGVuIGEgbXVsdGljYXN0IHBhY2tldCBpcyByZXBvcnRlZCB0byB0aGUgbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIG11bHRpY2FzdCByb3V0aW5nIGlzIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjOWJiNjBjODE1OWQ2YTIyZTU4NzdhYjkwYzg5MGJmNjc4NTdhZDQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDg6NTA6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCAxZDlhNGFjMTRmY2VmOS4uM2M0NThlYTNkNDIzNTkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcG1yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXIuY1xuQEAgLTEwNTgsNiAmIzQzOzEwNTgsNyBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuIFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpXG4ge1xuIFx0Y29uc3QgaW50IGlobCA9IGlwX2hkcmxlbihwa3QpO1xuJiM0MztcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xuIFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcbiBcdHN0cnVjdCBpZ21waGRyICppZ21wO1xuIFx0c3RydWN0IGlnbXBtc2cgKm1zZztcbkBAIC0xMTEzLDcgJiM0MzsxMTE0LDEwIEBAIHN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXG4gXHRcdG1zZy1cdTAwM2VpbV92aWYgPSB2aWZpO1xuIFx0XHRtc2ctXHUwMDNlaW1fdmlmX2hpID0gdmlmaSBcdTAwM2VcdTAwM2UgODtcbiBcdFx0aXB2NF9wa3RpbmZvX3ByZXBhcmUobXJvdXRlX3NrLCBwa3QsIGZhbHNlKTtcbi1cdFx0bWVtY3B5KHNrYi1cdTAwM2VjYiwgcGt0LVx1MDAzZWNiLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4mIzQzO1x0XHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcbiYjNDM7XHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbiYjNDM7XHRcdGluZm8tXHUwMDNlaXBpX2lmaW5kZXggPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9pZmluZGV4O1xuJiM0MztcdFx0aW5mby1cdTAwM2VpcGlfc3BlY19kc3QgPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9zcGVjX2RzdDtcbiBcdFx0LyogQWRkIG91ciBoZWFkZXIuXG4gXHRcdCAqIE5vdGUgdGhhdCBjb2RlLCBjc3VtIGFuZCBncm91cCBmaWVsZHMgYXJlIGNsZWFyZWQuXG4gXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXBfbXJfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtpcG1yX2NhY2hlX3VucmVzb2x2ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNrYi1cdTAwM2VjYiBpcyBjb3BpZWQgaW4gaXBtcl9jYWNoZV9yZXBvcnQgd2hlbiBhIG11bHRpY2FzdCBwYWNrZXQgaXMgcmVwb3J0ZWQgdG8gdGhlIG11bHRpY2FzdCByb3V0aW5nIGRhZW1vbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBtdWx0aWNhc3Qgcm91dGluZyBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzliYjYwYzgxNTlkNmEyMmU1ODc3YWI5MGM4OTBiZjY3ODU3YWQ0OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDA4OjUwOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDFkOWE0YWMxNGZjZWY5Li4zYzQ1OGVhM2Q0MjM1OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtMTA1OCw2ICYjNDM7MTA1OCw3IEBAIHN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsCiAJCQkgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KQogewogCWNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTsKJiM0MzsJc3RydWN0IGluX3BrdGluZm8gKmluZm87CiAJc3RydWN0IHNvY2sgKm1yb3V0ZV9zazsKIAlzdHJ1Y3QgaWdtcGhkciAqaWdtcDsKIAlzdHJ1Y3QgaWdtcG1zZyAqbXNnOwpAQCAtMTExMyw3ICYjNDM7MTExNCwxMCBAQCBzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LAogCQltc2ctJmd0O2ltX3ZpZiA9IHZpZmk7CiAJCW1zZy0mZ3Q7aW1fdmlmX2hpID0gdmlmaSAmZ3Q7Jmd0OyA4OwogCQlpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpOwotCQltZW1jcHkoc2tiLSZndDtjYiwgcGt0LSZndDtjYiwgc2l6ZW9mKHNrYi0mZ3Q7Y2IpKTsKJiM0MzsJCWluZm8gPSBQS1RJTkZPX1NLQl9DQihza2IpOwomIzQzOwkJbWVtc2V0KHNrYi0mZ3Q7Y2IsIDAsIHNpemVvZihza2ItJmd0O2NiKSk7CiYjNDM7CQlpbmZvLSZndDtpcGlfaWZpbmRleCA9IFBLVElORk9fU0tCX0NCKHBrdCktJmd0O2lwaV9pZmluZGV4OwomIzQzOwkJaW5mby0mZ3Q7aXBpX3NwZWNfZHN0ID0gUEtUSU5GT19TS0JfQ0IocGt0KS0mZ3Q7aXBpX3NwZWNfZHN0OwogCQkvKiBBZGQgb3VyIGhlYWRlci4KIAkJICogTm90ZSB0aGF0IGNvZGUsIGNzdW0gYW5kIGdyb3VwIGZpZWxkcyBhcmUgY2xlYXJlZC4KIAkJICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTXVsdGljYXN0IFJvdXRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0aW5rZXJpbmcgd2l0aCBgbmV0L2lwdjQvaXBtci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBob3cgaXQgaGFuZGxlcyB0aGUgY29weSBvcGVyYXRpb24gZm9yIGBza2ItJmd0O2NiYC4gSW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgYG1lbWNweWAsIGl0JiMzOTtzIG5vdyB1c2luZyBhIG1vcmUgdGFyZ2V0ZWQgYXBwcm9hY2guIEluaXRpYWxseSwgdGhlIGZ1bGwgYHNrYi0mZ3Q7Y2JgIHdhcyBjb3BpZWQgZnJvbSBgcGt0LSZndDtjYmAgdXNpbmcgYG1lbWNweWAuIE5vdywgaXQmIzM5O3MgY2xlYXJpbmcgdGhlIGV4aXN0aW5nIGBza2ItJmd0O2NiYCB3aXRoIGBtZW1zZXRgLCB0aGVuIHNlbGVjdGl2ZWx5IGNvcHlpbmcgdHdvIHNwZWNpZmljIGZpZWxkczogYGlwaV9pZmluZGV4YCBhbmQgYGlwaV9zcGVjX2RzdGAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBJUHY0IG11bHRpY2FzdCByb3V0aW5nLCBhIG1vZGlmaWNhdGlvbiB0aGF0IG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCB3aHkgdGhlIGNoYW5nZT8gV2hhdCYjMzk7cyB0aGUgcmF0aW9uYWxlIGJlaGluZCB6ZXJvaW5nIG91dCB0aGUgZW50aXJlIGBza2ItJmd0O2NiYCBhbmQgc2VsZWN0aXZlbHkgY29weWluZyBvbmx5IHRob3NlIHR3byBmaWVsZHM/IFRoZXJlIG11c3QgYmUgYSBzcGVjaWZpYyByZWFzb24sIGxpa2VseSByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIG9yIG1heWJlIGV2ZW4gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgbXVsdGljYXN0IHJvdXRpbmcgYmVoYXZpb3IuIEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbGVycyBvZiBgaXBtcl9jYWNoZV9yZXBvcnRgIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgaW1wYWN0LiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIOKAkyB0aGF0JiMzOTtzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYSBzb2xpZCBsaXN0IG9mIHRoZSBjYWxsIHNpdGVzIGFuZCBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwbXJfY2FjaGVfcmVwb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz0xMDg9c3RhdGljIHZvaWQgaXBfbXJfZm9yd2FyZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xMTAtXHRcdFx0ICBzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZSwgaW50IGxvY2FsKTtcbm5ldC9pcHY0L2lwbXIuYzoxMTE6c3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY0L2lwbXIuYy0xMTItXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCk7XG4tLVxubmV0L2lwdjQvaXBtci5jPTUyOT1zdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBtci5jLTU1MS1cdC8qIFBhaXJzIHdpdGggV1JJVEVfT05DRSgpIGluIHZpZl9hZGQoKSBhbmQgdmlmX2RlbGV0ZSgpICovXG5uZXQvaXB2NC9pcG1yLmM6NTUyOlx0aXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSxcbm5ldC9pcHY0L2lwbXIuYy01NTMtXHRcdFx0ICBJR01QTVNHX1dIT0xFUEtUKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9Njg3PXN0YXRpYyBpbnQgdmlmX2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgaW50IHZpZmksIGludCBub3RpZnksXG4tLVxubmV0L2lwdjQvaXBtci5jLTcwOS1cdGlmICh2aWZpID09IG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIHtcbm5ldC9pcHY0L2lwbXIuYzo3MTA6XHRcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cbm5ldC9pcHY0L2lwbXIuYy03MTEtXHRcdFdSSVRFX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSwgLTEpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz04NDk9c3RhdGljIGludCB2aWZfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTk0MS1cdGlmICh2LVx1MDAzZWZsYWdzIFx1MDAyNiBWSUZGX1JFR0lTVEVSKSB7XG5uZXQvaXB2NC9pcG1yLmM6OTQyOlx0XHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGlwbXJfY2FjaGVfcmVwb3J0KCkgYW5kIHJlZ192aWZfeG1pdCgpICovXG5uZXQvaXB2NC9pcG1yLmMtOTQzLVx0XHRXUklURV9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIHZpZmkpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMDE5PXN0YXRpYyB2b2lkIGlwbXJfY2FjaGVfcmVzb2x2ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xMDU2LSAqL1xubmV0L2lwdjQvaXBtci5jOjEwNTc6c3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY0L2lwbXIuYy0xMDU4LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpXG4tLVxubmV0L2lwdjQvaXBtci5jPTExNDY9c3RhdGljIGludCBpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG1yX3RhYmxlICptcnQsIHZpZmlfdCB2aWZpLFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xMTgzLVx0XHQvKiBSZWZsZWN0IGZpcnN0IHF1ZXJ5IGF0IG1yb3V0ZWQuICovXG5uZXQvaXB2NC9pcG1yLmM6MTE4NDpcdFx0ZXJyID0gaXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIHZpZmksIElHTVBNU0dfTk9DQUNIRSk7XG5uZXQvaXB2NC9pcG1yLmMtMTE4NS1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTkwNj1zdGF0aWMgaW50IGlwbXJfcHJlcGFyZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTE5MjQtXHRcdERFVl9TVEFUU19JTkModmlmX2RldiwgdHhfcGFja2V0cyk7XG5uZXQvaXB2NC9pcG1yLmM6MTkyNTpcdFx0aXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIHZpZmksIElHTVBNU0dfV0hPTEVQS1QpO1xubmV0L2lwdjQvaXBtci5jLTE5MjYtXHRcdHJldHVybiAtMTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MjA0NT1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjQvaXBtci5jLTIxMDAtXHRcdFx0Yy1cdTAwM2VfYy5tZmNfdW4ucmVzLmxhc3RfYXNzZXJ0ID0gamlmZmllcztcbm5ldC9pcHY0L2lwbXIuYzoyMTAxOlx0XHRcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB0cnVlX3ZpZmksIElHTVBNU0dfV1JPTkdWSUYpO1xubmV0L2lwdjQvaXBtci5jLTIxMDItXHRcdFx0aWYgKFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX2RvX3dydmlmd2hvbGUpKVxubmV0L2lwdjQvaXBtci5jOjIxMDM6XHRcdFx0XHRpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgdHJ1ZV92aWZpLFxubmV0L2lwdjQvaXBtci5jLTIxMDQtXHRcdFx0XHRcdFx0ICBJR01QTVNHX1dSVklGV0hPTEUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGlwbXJfY2FjaGVfcmVwb3J0YCBQYXRjaCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzaW5nIG9uIHRoZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYWx0ZXJpbmcgdGhlIHdheSBgc2tiLSZndDtjYmAgaXMgaGFuZGxlZC4gSG1tLCBpbnRlcmVzdGluZy4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgdGhpcyBpcyByZWxhdGVkIHRvIG11bHRpY2FzdCByb3V0aW5nLCBsaWtlbHkgd2l0aCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIFRoZSBjb2RlIHNlZW1zIGZ1bmN0aW9uYWwsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB0aGUgbmV0d29yayBzdGFjaywgc28gdGhpcyBpc24mIzM5O3Qgc29tZSBkZWFkIGNvZGUuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLgoKSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgdG8gZnVsbHkgZ3Jhc3AgdGhlIGludGVudCBvZiB0aGVzZSBtb2RpZmljYXRpb25zLiBMZXQgbWUgc2VhcmNoIGZvciBgSVBfTVJPVVRFYCB3aXRoaW4gdGhlIGBuZXQvaXB2NC9LY29uZmlnYCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGNvcmUgbXVsdGljYXN0IHJvdXRpbmcgZnVuY3Rpb25hbGl0eS4gVGhhdCBzaG91bGQgaGVscCBjb25uZWN0IHRoZSBkb3RzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01ST1VURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE1LVxubmV0L2lwdjQvS2NvbmZpZzoyMTY6Y29uZmlnIElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjE3LVx0Ym9vbFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjE5LVxubmV0L2lwdjQvS2NvbmZpZzoyMjA6Y29uZmlnIElQX01ST1VURVxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMjMxLVxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUyMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgSVAgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGtlcm5lbCBjb25maWcgZm9yIElQIE11bHRpY2FzdCwgc3BlY2lmaWNhbGx5IGBJUF9NUk9VVEVgLCBpcyBkZWZpbmVkLiBHaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSVB2NCwgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBuZXQvaXB2NGAgZGlyZWN0b3J5IHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLiBBbmQgd2l0aGluIHRoYXQsIHRoZSBmaWxlIHRoYXQgdHlwaWNhbGx5IGhvbGRzIEtjb25maWcgb3B0aW9ucyBmb3IgSVB2NCBuZXR3b3JraW5nIGZlYXR1cmVzIGlzIGBLY29uZmlnYC4gVGhlcmVmb3JlLCBJJiMzOTtsbCBleGFtaW5lIGBuZXQvaXB2NC9LY29uZmlnYCB0byBsb2NhdGUgdGhlIGBJUF9NUk9VVEVgIG9wdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyIEkgbmVlZCBpbiBvcmRlciB0byBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgaXQgaXMgc2V0IGFuZCBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE5Olx0XG4gMjIwOlx0Y29uZmlnIElQX01ST1VURVxuIDIyMTpcdFx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbiAyMjI6XHRcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUXG4gMjIzOlx0XHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxuIDIyNDpcdFx0aGVscFxuIDIyNTpcdFx0ICBUaGlzIGlzIHVzZWQgaWYgeW91IHdhbnQgeW91ciBtYWNoaW5lIHRvIGFjdCBhcyBhIHJvdXRlciBmb3IgSVBcbiAyMjY6XHRcdCAgcGFja2V0cyB0aGF0IGhhdmUgc2V2ZXJhbCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIEl0IGlzIG5lZWRlZCBvbiB0aGVcbiAyMjc6XHRcdCAgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3Agb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXNcbiAyMjg6XHRcdCAgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIEluIG9yZGVyIHRvIGRvIHRoYXQsIHlvdSB3b3VsZCBtb3N0XG4gMjI5Olx0XHQgIGxpa2VseSBydW4gdGhlIHByb2dyYW0gbXJvdXRlZC4gSWYgeW91IGhhdmVuJiMzOTt0IGhlYXJkIGFib3V0IGl0LCB5b3VcbiAyMzA6XHRcdCAgZG9uJiMzOTt0IG5lZWQgaXQuXG4gMjMxOlx0XG4gMjMyOlx0Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbiAyMzM6XHRcdGJvb2wgXCYjMzQ7SVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuIDIzNDpcdFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXHUwMDI2XHUwMDI2IElQX0FEVkFOQ0VEX1JPVVRFUlxuIDIzNTpcdFx0c2VsZWN0IEZJQl9SVUxFU1xuIDIzNjpcdFx0aGVscFxuIDIzNzpcdFx0ICBOb3JtYWxseSwgYSBtdWx0aWNhc3Qgcm91dGVyIHJ1bnMgYSB1c2Vyc3BhY2UgZGFlbW9uIGFuZCBkZWNpZGVzXG4gMjM4Olx0XHQgIHdoYXQgdG8gZG8gd2l0aCBhIG11bHRpY2FzdCBwYWNrZXQgYmFzZWQgb24gdGhlIHNvdXJjZSBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDU2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBNdWx0aWNhc3QgUmVxdWlyZW1lbnRzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgbmV0d29yayBjb25maWd1cmF0aW9uLi4uIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGJvdGggYElQX01ST1VURWAgYW5kIGBJUF9NVUxUSUNBU1RgIGVuYWJsZWQuIEkgY2FuJiMzOTt0IHNlZSBhIHdheSBhcm91bmQgdGhhdCwgZ2l2ZW4gdGhlIHByb2plY3Qgc3BlY3MuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgSVBfTVVMVElDQVNUYCDigJMgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGdvdGNoYXMgSSYjMzk7bSBvdmVybG9va2luZyB0aGVyZSwgYW5kIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvbiBpdHMgaW1wbGVtZW50YXRpb24sIG9yIG1heWJlIGV2ZW4gaWRlbnRpZnkgaWYgYSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsIG9yIHNldHRpbmcgd2l0aGluIGl0IG5lZWRzIGNsb3NlciBpbnNwZWN0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9NVUxUSUNBU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZy00LSNcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTYtXHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3RpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBpcG1yX2NhY2hlX3JlcG9ydGAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgaXBtcl9jYWNoZV9yZXBvcnRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2V2ZXJhbCBrZXkgYXJlYXM6IGByZWdfdmlmX3htaXRgLCBgaXBtcl9jYWNoZV91bnJlc29sdmVkYCwgYGlwbXJfcHJlcGFyZV94bWl0YCwgYW5kIGBpcF9tcl9mb3J3YXJkYC4gVGhlc2UgYXJlIHByZXR0eSBjZW50cmFsIHRvIG11bHRpY2FzdCByb3V0aW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgYWx0ZXJlZCBoZXJlLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byBgaXBtcl9jYWNoZV9yZXBvcnRgIGl0c2VsZiBhbmQgZXhhbWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggZWFjaCBvZiB0aG9zZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBiZWhhdmlvciBjaGFuZ2UuICBTaW5jZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGlzIHN0YXRpYywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBpbmxpbmVkLiBCYXNlZCBvbiBpdHMgc2l6ZSwgaXQmIzM5O3MgbGlrZWx5IG5vdCBpbmxpbmVkLCBidXQgSSBzaG91bGQgc3RpbGwgY2hlY2sgdGhlIGNvZGUganVzdCB0byBiZSAxMDAlIHN1cmUuIEkgd2FudCB0byBpbmNsdWRlIHRoZSBjYWxsZXJzIGluIG15IGZvY3VzIHNvIEkgY2FuIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSB3aG9sZSB0aGluZy4KCkkmIzM5O2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlZmluaXRpb24sIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYG5ldC9pcHY0L2lwbXIuY2AuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA1NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDU3Olx0c3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbjEwNTg6XHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KVxuMTA1OTpcdHtcbjEwNjA6XHRcdGNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTtcbjEwNjE6XHRcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xuMTA2MjpcdFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcbjEwNjM6XHRcdHN0cnVjdCBpZ21waGRyICppZ21wO1xuMTA2NDpcdFx0c3RydWN0IGlnbXBtc2cgKm1zZztcbjEwNjU6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4xMDY2Olx0XHRpbnQgcmV0O1xuMTA2NzpcdFxuMTA2ODpcdFx0bXJvdXRlX3NrID0gcmN1X2RlcmVmZXJlbmNlKG1ydC1cdTAwM2Vtcm91dGVfc2spO1xuMTA2OTpcdFx0aWYgKCFtcm91dGVfc2spXG4xMDcwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTA3MTpcdFxuMTA3MjpcdFx0aWYgKGFzc2VydCA9PSBJR01QTVNHX1dIT0xFUEtUIHx8IGFzc2VydCA9PSBJR01QTVNHX1dSVklGV0hPTEUpXG4xMDczOlx0XHRcdHNrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHBrdCwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xuMTA3NDpcdFx0ZWxzZVxuMTA3NTpcdFx0XHRza2IgPSBhbGxvY19za2IoMTI4LCBHRlBfQVRPTUlDKTtcbjEwNzY6XHRcbjEwNzc6XHRcdGlmICghc2tiKVxuMTA3ODpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4xMDc5Olx0XG4xMDgwOlx0XHRpZiAoYXNzZXJ0ID09IElHTVBNU0dfV0hPTEVQS1QgfHwgYXNzZXJ0ID09IElHTVBNU0dfV1JWSUZXSE9MRSkge1xuMTA4MTpcdFx0XHQvKiBVZ2x5LCBidXQgd2UgaGF2ZSBubyBjaG9pY2Ugd2l0aCB0aGlzIGludGVyZmFjZS5cbjEwODI6XHRcdFx0ICogRHVwbGljYXRlIG9sZCBoZWFkZXIsIGZpeCBpaGwsIGxlbmd0aCBldGMuXG4xMDgzOlx0XHRcdCAqIEFuZCBhbGwgdGhpcyBvbmx5IHRvIG1hbmdsZSBtc2ctXHUwMDNlaW1fbXNndHlwZSBhbmRcbjEwODQ6XHRcdFx0ICogdG8gc2V0IG1zZy1cdTAwM2VpbV9tYnogdG8gXCYjMzQ7bWJ6XCYjMzQ7IDotKVxuMTA4NTpcdFx0XHQgKi9cbjEwODY6XHRcdFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG4xMDg3Olx0XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuMTA4ODpcdFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuMTA4OTpcdFx0XHRtc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbjEwOTA6XHRcdFx0bWVtY3B5KG1zZywgc2tiX25ldHdvcmtfaGVhZGVyKHBrdCksIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbjEwOTE6XHRcdFx0bXNnLVx1MDAzZWltX21zZ3R5cGUgPSBhc3NlcnQ7XG4xMDkyOlx0XHRcdG1zZy1cdTAwM2VpbV9tYnogPSAwO1xuMTA5MzpcdFx0XHRpZiAoYXNzZXJ0ID09IElHTVBNU0dfV1JWSUZXSE9MRSkge1xuMTA5NDpcdFx0XHRcdG1zZy1cdTAwM2VpbV92aWYgPSB2aWZpO1xuMTA5NTpcdFx0XHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZpIFx1MDAzZVx1MDAzZSA4O1xuMTA5NjpcdFx0XHR9IGVsc2Uge1xuMTA5NzpcdFx0XHRcdC8qIFBhaXJzIHdpdGggV1JJVEVfT05DRSgpIGluIHZpZl9hZGQoKSBhbmQgdmlmX2RlbGV0ZSgpICovXG4xMDk4Olx0XHRcdFx0aW50IHZpZl9udW0gPSBSRUFEX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSk7XG4xMDk5Olx0XG4xMTAwOlx0XHRcdFx0bXNnLVx1MDAzZWltX3ZpZiA9IHZpZl9udW07XG4xMTAxOlx0XHRcdFx0bXNnLVx1MDAzZWltX3ZpZl9oaSA9IHZpZl9udW0gXHUwMDNlXHUwMDNlIDg7XG4xMTAyOlx0XHRcdH1cbjExMDM6XHRcdFx0aXBfaGRyKHNrYiktXHUwMDNlaWhsID0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgXHUwMDNlXHUwMDNlIDI7XG4xMTA0Olx0XHRcdGlwX2hkcihza2IpLVx1MDAzZXRvdF9sZW4gPSBodG9ucyhudG9ocyhpcF9oZHIocGt0KS1cdTAwM2V0b3RfbGVuKSAmIzQzO1xuMTEwNTpcdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbjExMDY6XHRcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NjQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSYjMzk7bSByZXZpZXdpbmcgY29kZSBhcyBhbiBleHBlcnQ6CgoqKkFzc2Vzc21lbnQgb2YgRnVuY3Rpb24gQ29tcGxldGlvbioqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBqdXN0IGJlZW4gc2NydXRpbml6aW5nIGEgc3BlY2lmaWMgc2VnbWVudCwgYW5kIG5vdyBJIG5lZWQgdG8gZXhwYW5kIHRoZSBzY29wZSBvZiBteSByZXZpZXcuIEl0JiMzOTtzIHRpbWUgdG8gc3lzdGVtYXRpY2FsbHkgZXhhbWluZSB0aGUgcmVtYWluZGVyIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMsIGRlcGVuZGVuY2llcywgb3IgcG90ZW50aWFsIGJ1Z3MgdGhhdCBtaWdodCBleGlzdCBpbiB0aGUgdW5leHBsb3JlZCBwYXJ0cyBvZiB0aGUgY29kZS4gTXkgcHJpbWFyeSBnb2FsLCBhcyBhbHdheXMsIGlzIHRvIGVuc3VyZSByb2J1c3QgZnVuY3Rpb25hbGl0eSBhbmQgYWRoZXJlbmNlIHRvIGJlc3QgcHJhY3RpY2VzLCBidXQgSSBhbSBlcXVhbGx5IGNvbmNlcm5lZCBhYm91dCByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTA3Olx0XHRcdC8qIENvcHkgdGhlIElQIGhlYWRlciAqL1xuMTEwODpcdFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiLVx1MDAzZWxlbik7XG4xMTA5Olx0XHRcdHNrYl9wdXQoc2tiLCBpaGwpO1xuMTExMDpcdFx0XHRza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIHBrdC1cdTAwM2VkYXRhLCBpaGwpO1xuMTExMTpcdFx0XHQvKiBGbGFnIHRvIHRoZSBrZXJuZWwgdGhpcyBpcyBhIHJvdXRlIGFkZCAqL1xuMTExMjpcdFx0XHRpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCA9IDA7XG4xMTEzOlx0XHRcdG1zZyA9IChzdHJ1Y3QgaWdtcG1zZyAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuMTExNDpcdFx0XHRtc2ctXHUwMDNlaW1fdmlmID0gdmlmaTtcbjExMTU6XHRcdFx0bXNnLVx1MDAzZWltX3ZpZl9oaSA9IHZpZmkgXHUwMDNlXHUwMDNlIDg7XG4xMTE2Olx0XHRcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XG4xMTE3Olx0XHRcdGluZm8gPSBQS1RJTkZPX1NLQl9DQihza2IpO1xuMTExODpcdFx0XHRtZW1zZXQoc2tiLVx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4xMTE5Olx0XHRcdGluZm8tXHUwMDNlaXBpX2lmaW5kZXggPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9pZmluZGV4O1xuMTEyMDpcdFx0XHRpbmZvLVx1MDAzZWlwaV9zcGVjX2RzdCA9IFBLVElORk9fU0tCX0NCKHBrdCktXHUwMDNlaXBpX3NwZWNfZHN0O1xuMTEyMTpcdFx0XHQvKiBBZGQgb3VyIGhlYWRlci5cbjExMjI6XHRcdFx0ICogTm90ZSB0aGF0IGNvZGUsIGNzdW0gYW5kIGdyb3VwIGZpZWxkcyBhcmUgY2xlYXJlZC5cbjExMjM6XHRcdFx0ICovXG4xMTI0Olx0XHRcdGlnbXAgPSBza2JfcHV0X3plcm8oc2tiLCBzaXplb2Yoc3RydWN0IGlnbXBoZHIpKTtcbjExMjU6XHRcdFx0aWdtcC1cdTAwM2V0eXBlID0gYXNzZXJ0O1xuMTEyNjpcdFx0XHRtc2ctXHUwMDNlaW1fbXNndHlwZSA9IGFzc2VydDtcbjExMjc6XHRcdFx0aXBfaGRyKHNrYiktXHUwMDNldG90X2xlbiA9IGh0b25zKHNrYi1cdTAwM2VsZW4pO1x0LyogRml4IHRoZSBsZW5ndGggKi9cbjExMjg6XHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG4xMTI5Olx0XHR9XG4xMTMwOlx0XG4xMTMxOlx0XHRpZ21wbXNnX25ldGxpbmtfZXZlbnQobXJ0LCBza2IpO1xuMTEzMjpcdFxuMTEzMzpcdFx0LyogRGVsaXZlciB0byBtcm91dGVkICovXG4xMTM0Olx0XHRyZXQgPSBzb2NrX3F1ZXVlX3Jjdl9za2IobXJvdXRlX3NrLCBza2IpO1xuMTEzNTpcdFxuMTEzNjpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTEzNzpcdFx0XHRuZXRfd2Fybl9yYXRlbGltaXRlZChcJiMzNDttcm91dGU6IHBlbmRpbmcgcXVldWUgZnVsbCwgZHJvcHBpbmcgZW50cmllc1xcblwmIzM0Oyk7XG4xMTM4Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTEzOTpcdFx0fVxuMTE0MDpcdFxuMTE0MTpcdFx0cmV0dXJuIHJldDtcbjExNDI6XHR9XG4xMTQzOlx0XG4xMTQ0Olx0LyogUXVldWUgYSBwYWNrZXQgZm9yIHJlc29sdXRpb24uIEl0IGdldHMgbG9ja2VkIGNhY2hlIGVudHJ5ISAqL1xuMTE0NTpcdC8qIENhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkgKi9cbjExNDY6XHRzdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXG4xMTQ3Olx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjExNDg6XHR7XG4xMTQ5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2bXJ0LVx1MDAzZW5ldCk7XG4xMTUwOlx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xuMTE1MTpcdFx0c3RydWN0IG1mY19jYWNoZSAqYyA9IE5VTEw7XG4xMTUyOlx0XHRib29sIGZvdW5kID0gZmFsc2U7XG4xMTUzOlx0XHRpbnQgZXJyO1xuMTE1NDpcdFxuMTE1NTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1mY191bnJlc19sb2NrKTtcbjExNTY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcyMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IEluZm9ybWF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBzZWN1cml0eSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIGlzc3VlIHJlbGF0ZWQgdG8gaG93IHBhY2tldCBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBpcyB0aGF0IGBza2ItJmd0O2NiYCB3YXMgYmVpbmcgY29waWVkIGRpcmVjdGx5LCB3aGljaCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgb3Igc2Vuc2l0aXZlIGRhdGEuIEl0JiMzOTtzIG11Y2ggY2xlYW5lciBhbmQgc2FmZXIgdG8gb25seSBjb3B5IHRoZSBmaWVsZHMgd2UgYWN0dWFsbHkgbmVlZC4KCldhaXQgYSBzZWNvbmQuIExldCYjMzk7cyB0cmFjZSB0aGlzIGJhY2sgYSBsaXR0bGUuIFRoZSBmdW5jdGlvbiBgaXB2NF9wa3RpbmZvX3ByZXBhcmVgIHByZXBhcmVzIGBwa3QtJmd0O2NiYCwgd2hpY2ggaXMgY2FzdCB0byBgc3RydWN0IGluX3BrdGluZm9gLCByaWdodD8gQW5kICp0aGVuKiBpdCBjb3BpZXMgYHBrdC0mZ3Q7Y2JgIHRvIGBza2ItJmd0O2NiYC4gSSBzZWUuIEJ1dCB0aGUgcGF0Y2ggYWx0ZXJzIHRoaXMgZmxvdywgYW5kIHRoZSBgc2tiYCBpcyBlaXRoZXIgYSBuZXdseSBhbGxvY2F0ZWQgb3IgcmVhbGxvY2F0ZWQgc3RydWN0dXJlLCB3aGljaCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBhbmQgdGhlIHdheSBpdCBpcyBiZWluZyB1c2VkLgoKQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaXMgYmVoYXZpb3IgdG8gb25seSBjb3B5IGBpcGlfaWZpbmRleGAgYW5kIGBpcGlfc3BlY19kc3RgIGFuZCB0aGVuIHplcm9pbmcgb3V0IHRoZSByZXN0IG9mIHRoZSBzdHJ1Y3R1cmUuIERlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgYWJvdXQgZGF0YSBzYW5pdGl6YXRpb24gYW5kIG1pbmltaXppbmcgd2hhdCBnZXRzIHBhc3NlZCBhcm91bmQuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOb3cgSSBuZWVkIHRvIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgaXBtcl9jYWNoZV9yZXBvcnRgLiBJIHNlZSB0aGVyZSBhcmUgZm91ciBvZiB0aGVtOiBgcmVnX3ZpZl94bWl0YCwgYGlwbXJfY2FjaGVfdW5yZXNvbHZlZGAsIGBpcG1yX3ByZXBhcmVfeG1pdGAsIGFuZCBgaXBfbXJfZm9yd2FyZGAuCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYGlwX21yX2ZvcndhcmRgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgdGhlIG1vc3QgcmVsZXZhbnQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfbXJfZm9yd2FyZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yLmM9MTA1PXN0YXRpYyB2b2lkIGlwbXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTA3LVxubmV0L2lwdjQvaXBtci5jOjEwODpzdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2NC9pcG1yLmMtMTA5LVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTAxOT1zdGF0aWMgdm9pZCBpcG1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTA0Ni1cdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2NC9pcG1yLmM6MTA0NzpcdFx0XHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBza2ItXHUwMDNlZGV2LCBza2IsIGMsIDApO1xubmV0L2lwdjQvaXBtci5jLTEwNDgtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2lwdjQvaXBtci5jPTIwMzI9c3RhdGljIGludCBpcG1yX2ZpbmRfdmlmKGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMDQ0LS8qIENhbGxlZCB1bmVyIHJjdV9yZWFkX2xvY2soKSAqL1xubmV0L2lwdjQvaXBtci5jOjIwNDU6c3RhdGljIHZvaWQgaXBfbXJfZm9yd2FyZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjQvaXBtci5jLTIwNDYtXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwbXIuYz0yMTkzPWludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0yMjc1LVxubmV0L2lwdjQvaXBtci5jOjIyNzY6XHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBkZXYsIHNrYiwgY2FjaGUsIGxvY2FsKTtcbm5ldC9pcHY0L2lwbXIuYy0yMjc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE11bHRpY2FzdCBSb3V0aW5nJiMzOTtzIENvcmUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpY2FzdCByb3V0aW5nIGlzIGhhbmRsZWQgYXQgdGhlIGVudHJ5IGxldmVsLiBSaWdodCwgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgaXBfbXJfaW5wdXRgLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBiZWdpbnMuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgaW5jb21pbmcgbXVsdGljYXN0IHBhY2tldHMgYXJlIHByb2Nlc3NlZCBhbmQgd2hlcmUgdGhleSBhcmUgcm91dGVkIGZyb20gdGhlcmUuIExldCBtZSBkaXZlIGludG8gdGhhdCBgaXBfbXJfaW5wdXRgIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkga25vdyBJIGNhbiBidWlsZCBvbiB0aGlzIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tcl9pbnB1dCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcC5oPTE2OT12b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKTtcbmluY2x1ZGUvbmV0L2lwLmg6MTcwOmludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L2lwLmgtMTcxLWludCBpcF9tcl9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTM2Nz1pbnQgaXBfbWNfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTM4Ni1cdFx0ICAgd2hpY2ggcmV0dXJuZWQgYWZ0ZXIgZm9yd2FyZGluZzsgdGhleSB3aWxsIGJlICBkcm9wcGVkXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzozODc6XHRcdCAgIGJ5IGlwX21yX2lucHV0IGluIGFueSBjYXNlLlxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzg4LVx0XHQgICBOb3RlLCB0aGF0IGxvY2FsIGZyYW1lcyBhcmUgbG9vcGVkIGJhY2sgdG8gYmUgZGVsaXZlcmVkXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzkwLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MzkxOlx0XHQgICBUaGlzIGNoZWNrIGlzIGR1cGxpY2F0ZWQgaW4gaXBfbXJfaW5wdXQgYXQgdGhlIG1vbWVudC5cbm5ldC9pcHY0L2lwX291dHB1dC5jLTM5Mi1cdFx0ICovXG4tLVxubmV0L2lwdjQvaXBtci5jPTIxNjY9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9ydF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMjE5Mi0gKi9cbm5ldC9pcHY0L2lwbXIuYzoyMTkzOmludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvaXBtci5jLTIxOTQte1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTczNz1pcF9yb3V0ZV9pbnB1dF9tYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE3NjktXHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRhZGRyKSBcdTAwMjZcdTAwMjYgSU5fREVWX01GT1JXQVJEKGluX2RldikpXG5uZXQvaXB2NC9yb3V0ZS5jOjE3NzA6XHRcdHJ0aC1cdTAwM2Vkc3QuaW5wdXQgPSBpcF9tcl9pbnB1dDtcbm5ldC9pcHY0L3JvdXRlLmMtMTc3MS0jZW5kaWZcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI1NTc9c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI2NjgtXHRcdFx0ICAgICFpcHY0X2lzX2xvY2FsX211bHRpY2FzdChmbDQtXHUwMDNlZGFkZHIpKSB7XG5uZXQvaXB2NC9yb3V0ZS5jOjI2Njk6XHRcdFx0XHRydGgtXHUwMDNlZHN0LmlucHV0ID0gaXBfbXJfaW5wdXQ7XG5uZXQvaXB2NC9yb3V0ZS5jLTI2NzAtXHRcdFx0XHRydGgtXHUwMDNlZHN0Lm91dHB1dCA9IGlwX21yX291dHB1dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY2NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTXVsdGljYXN0IFBhY2tldCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG11bHRpY2FzdCBwYWNrZXRzIGFyZSBoYW5kbGVkIGhlcmUuIEl0IHNlZW1zIHdlIGhhdmUgdGhyZWUga2V5IGZ1bmN0aW9ucyB0byBjb25zaWRlci4gRmlyc3QsIHRoZXJlJiMzOTtzIGBpcF9tcl9pbnB1dGAsIHdoaWNoIGlzIHRyaWdnZXJlZCB3aGVuIGEgbXVsdGljYXN0IHBhY2tldCBhcnJpdmVzIGFuZCB0aGUgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgZm9yIG11bHRpY2FzdCBmb3J3YXJkaW5nIOKAkyB0aGF0IG1ha2VzIHNlbnNlLiBUaGVuIHdlIGhhdmUgYGlwX21yX291dHB1dGAsIHdoaWNoIGhhbmRsZXMgdGhlIGxvY2FsIHNlbmRpbmcgb2YgbXVsdGljYXN0IHBhY2tldHMgdGhhdCByZXF1aXJlIGZvcndhcmRpbmcuCgpUaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gYmUgd2l0aGluIGBpcG1yX2NhY2hlX3JlcG9ydGAuIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aGVuIHRoZXJlJiMzOTtzIGEgbXVsdGljYXN0IGNhY2hlIG1pc3MsIG9yIHdoZW4gYSBWaXJ0dWFsIEludGVyZmFjZSAoVklGKSBpcyBpbmNvcnJlY3QuIFRoaXMgaXMgd2hhdCBJIHdhcyBsb29raW5nIGZvci4KCk5vdywgYSBxdWljayBub3RlLCBJIHNlZSB0aGF0IGBpcG1yX2NhY2hlX3JlcG9ydGAgaXMgbWFya2VkIGFzIGBzdGF0aWNgLiBJIHdhcyBpbml0aWFsbHkgY29uY2VybmVkIHRoYXQgaXQgbWlnaHQgYmUgaW5saW5lZCwgYnV0IHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgYHN0YXRpY2AgZG9lc24mIzM5O3QgbmVjZXNzYXJpbHkgcnVsZSB0aGF0IG91dCwgYWx0aG91Z2ggc3RhdGljIGZ1bmN0aW9ucyBhcmUgbGVzcyBsaWtlbHkgdG8gYmUgaW5saW5lZC4gR2l2ZW4gdGhhdCBgaXBtcl9jYWNoZV9yZXBvcnRgIGlzIHByb2JhYmx5IGEgc3Vic3RhbnRpYWwgYmxvY2sgb2YgY29kZSwgdGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IG5vdCBpbmxpbmUgaXQuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgZnVuY3Rpb24mIzM5O3Mgc2l6ZSB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODYKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA1NzpcdHN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXG4xMDU4Olx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcbjEwNTk6XHR7XG4xMDYwOlx0XHRjb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7XG4xMDYxOlx0XHRzdHJ1Y3QgaW5fcGt0aW5mbyAqaW5mbztcbjEwNjI6XHRcdHN0cnVjdCBzb2NrICptcm91dGVfc2s7XG4xMDYzOlx0XHRzdHJ1Y3QgaWdtcGhkciAqaWdtcDtcbjEwNjQ6XHRcdHN0cnVjdCBpZ21wbXNnICptc2c7XG4xMDY1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTA2NjpcdFx0aW50IHJldDtcbjEwNjc6XHRcbjEwNjg6XHRcdG1yb3V0ZV9zayA9IHJjdV9kZXJlZmVyZW5jZShtcnQtXHUwMDNlbXJvdXRlX3NrKTtcbjEwNjk6XHRcdGlmICghbXJvdXRlX3NrKVxuMTA3MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwNzE6XHRcbjEwNzI6XHRcdGlmIChhc3NlcnQgPT0gSUdNUE1TR19XSE9MRVBLVCB8fCBhc3NlcnQgPT0gSUdNUE1TR19XUlZJRldIT0xFKVxuMTA3MzpcdFx0XHRza2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShwa3QsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbjEwNzQ6XHRcdGVsc2VcbjEwNzU6XHRcdFx0c2tiID0gYWxsb2Nfc2tiKDEyOCwgR0ZQX0FUT01JQyk7XG4xMDc2Olx0XG4xMDc3Olx0XHRpZiAoIXNrYilcbjEwNzg6XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMTA3OTpcdFxuMTA4MDpcdFx0aWYgKGFzc2VydCA9PSBJR01QTVNHX1dIT0xFUEtUIHx8IGFzc2VydCA9PSBJR01QTVNHX1dSVklGV0hPTEUpIHtcbjEwODE6XHRcdFx0LyogVWdseSwgYnV0IHdlIGhhdmUgbm8gY2hvaWNlIHdpdGggdGhpcyBpbnRlcmZhY2UuXG4xMDgyOlx0XHRcdCAqIER1cGxpY2F0ZSBvbGQgaGVhZGVyLCBmaXggaWhsLCBsZW5ndGggZXRjLlxuMTA4MzpcdFx0XHQgKiBBbmQgYWxsIHRoaXMgb25seSB0byBtYW5nbGUgbXNnLVx1MDAzZWltX21zZ3R5cGUgYW5kXG4xMDg0Olx0XHRcdCAqIHRvIHNldCBtc2ctXHUwMDNlaW1fbWJ6IHRvIFwmIzM0O21ielwmIzM0OyA6LSlcbjEwODU6XHRcdFx0ICovXG4xMDg2Olx0XHRcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xuMTA4NzpcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbjEwODg6XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbjEwODk6XHRcdFx0bXNnID0gKHN0cnVjdCBpZ21wbXNnICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4xMDkwOlx0XHRcdG1lbWNweShtc2csIHNrYl9uZXR3b3JrX2hlYWRlcihwa3QpLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG4xMDkxOlx0XHRcdG1zZy1cdTAwM2VpbV9tc2d0eXBlID0gYXNzZXJ0O1xuMTA5MjpcdFx0XHRtc2ctXHUwMDNlaW1fbWJ6ID0gMDtcbjEwOTM6XHRcdFx0aWYgKGFzc2VydCA9PSBJR01QTVNHX1dSVklGV0hPTEUpIHtcbjEwOTQ6XHRcdFx0XHRtc2ctXHUwMDNlaW1fdmlmID0gdmlmaTtcbjEwOTU6XHRcdFx0XHRtc2ctXHUwMDNlaW1fdmlmX2hpID0gdmlmaSBcdTAwM2VcdTAwM2UgODtcbjEwOTY6XHRcdFx0fSBlbHNlIHtcbjEwOTc6XHRcdFx0XHQvKiBQYWlycyB3aXRoIFdSSVRFX09OQ0UoKSBpbiB2aWZfYWRkKCkgYW5kIHZpZl9kZWxldGUoKSAqL1xuMTA5ODpcdFx0XHRcdGludCB2aWZfbnVtID0gUkVBRF9PTkNFKG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pO1xuMTA5OTpcdFxuMTEwMDpcdFx0XHRcdG1zZy1cdTAwM2VpbV92aWYgPSB2aWZfbnVtO1xuMTEwMTpcdFx0XHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZfbnVtIFx1MDAzZVx1MDAzZSA4O1xuMTEwMjpcdFx0XHR9XG4xMTAzOlx0XHRcdGlwX2hkcihza2IpLVx1MDAzZWlobCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpIFx1MDAzZVx1MDAzZSAyO1xuMTEwNDpcdFx0XHRpcF9oZHIoc2tiKS1cdTAwM2V0b3RfbGVuID0gaHRvbnMobnRvaHMoaXBfaGRyKHBrdCktXHUwMDNldG90X2xlbikgJiM0MztcbjExMDU6XHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG4xMTA2Olx0XHR9IGVsc2Uge1xuMTEwNzpcdFx0XHQvKiBDb3B5IHRoZSBJUCBoZWFkZXIgKi9cbjExMDg6XHRcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYi1cdTAwM2VsZW4pO1xuMTEwOTpcdFx0XHRza2JfcHV0KHNrYiwgaWhsKTtcbjExMTA6XHRcdFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBwa3QtXHUwMDNlZGF0YSwgaWhsKTtcbjExMTE6XHRcdFx0LyogRmxhZyB0byB0aGUga2VybmVsIHRoaXMgaXMgYSByb3V0ZSBhZGQgKi9cbjExMTI6XHRcdFx0aXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wgPSAwO1xuMTExMzpcdFx0XHRtc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbjExMTQ6XHRcdFx0bXNnLVx1MDAzZWltX3ZpZiA9IHZpZmk7XG4xMTE1Olx0XHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZpIFx1MDAzZVx1MDAzZSA4O1xuMTExNjpcdFx0XHRpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpO1xuMTExNzpcdFx0XHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcbjExMTg6XHRcdFx0bWVtc2V0KHNrYi1cdTAwM2VjYiwgMCwgc2l6ZW9mKHNrYi1cdTAwM2VjYikpO1xuMTExOTpcdFx0XHRpbmZvLVx1MDAzZWlwaV9pZmluZGV4ID0gUEtUSU5GT19TS0JfQ0IocGt0KS1cdTAwM2VpcGlfaWZpbmRleDtcbjExMjA6XHRcdFx0aW5mby1cdTAwM2VpcGlfc3BlY19kc3QgPSBQS1RJTkZPX1NLQl9DQihwa3QpLVx1MDAzZWlwaV9zcGVjX2RzdDtcbjExMjE6XHRcdFx0LyogQWRkIG91ciBoZWFkZXIuXG4xMTIyOlx0XHRcdCAqIE5vdGUgdGhhdCBjb2RlLCBjc3VtIGFuZCBncm91cCBmaWVsZHMgYXJlIGNsZWFyZWQuXG4xMTIzOlx0XHRcdCAqL1xuMTEyNDpcdFx0XHRpZ21wID0gc2tiX3B1dF96ZXJvKHNrYiwgc2l6ZW9mKHN0cnVjdCBpZ21waGRyKSk7XG4xMTI1Olx0XHRcdGlnbXAtXHUwMDNldHlwZSA9IGFzc2VydDtcbjExMjY6XHRcdFx0bXNnLVx1MDAzZWltX21zZ3R5cGUgPSBhc3NlcnQ7XG4xMTI3Olx0XHRcdGlwX2hkcihza2IpLVx1MDAzZXRvdF9sZW4gPSBodG9ucyhza2ItXHUwMDNlbGVuKTtcdC8qIEZpeCB0aGUgbGVuZ3RoICovXG4xMTI4Olx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyO1xuMTEyOTpcdFx0fVxuMTEzMDpcdFxuMTEzMTpcdFx0aWdtcG1zZ19uZXRsaW5rX2V2ZW50KG1ydCwgc2tiKTtcbjExMzI6XHRcbjExMzM6XHRcdC8qIERlbGl2ZXIgdG8gbXJvdXRlZCAqL1xuMTEzNDpcdFx0cmV0ID0gc29ja19xdWV1ZV9yY3Zfc2tiKG1yb3V0ZV9zaywgc2tiKTtcbjExMzU6XHRcbjExMzY6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjExMzc6XHRcdFx0bmV0X3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7bXJvdXRlOiBwZW5kaW5nIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIGVudHJpZXNcXG5cJiMzNDspO1xuMTEzODpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjExMzk6XHRcdH1cbjExNDA6XHRcbjExNDE6XHRcdHJldHVybiByZXQ7XG4xMTQyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4NwoJCQkJCQkJb3V0cHV0OiAxMjAKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIElQdjQgTXVsdGljYXN0IFJvdXRpbmcgQ29kZSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZGV0ZXJtaW5lZCBhZnRlciBhIGNsb3NlIGxvb2sgYXQgdGhpcyBjb2RlLiBUaGlzIDg2LWxpbmUgZnVuY3Rpb24sICppcG1yX2NhY2hlX3JlcG9ydCosIGlzbiYjMzk7dCBpbmxpbmVkLCB3aGljaCBpcyBnb29kIHRvIGtub3cgZnJvbSB0aGUgc3RhcnQuIFRvIGVuc3VyZSBJIGNhcHR1cmUgYWxsIHJlbGV2YW50IGRlcGVuZGVuY2llcywgSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlICppcF9tcl9pbnB1dCosICppcF9tcl9vdXRwdXQqLCBhbmQgKmlwbXJfY2FjaGVfdW5yZXNvbHZlZCogaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEkgYnJpZWZseSBjaGVja2VkIGlmICppcG1yX2NhY2hlX3JlcG9ydCogd2FzIGV4cG9ydGVkLCBidXQgaXQmIzM5O3Mgc3RhdGljLCBzbyB0aGF0IGNsYXJpZmllcyB0aGluZ3MuIFNpbmNlICppcG1yX2NhY2hlX3JlcG9ydCogaXMgY2FsbGVkIGZyb20gb3RoZXIga2V5IGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5ICppcG1yX2NhY2hlX3VucmVzb2x2ZWQqLCAqaXBtcl9wcmVwYXJlX3htaXQqLCAqaXBfbXJfZm9yd2FyZCosIGFuZCAqcmVnX3ZpZl94bWl0KiwgSSYjMzk7bGwgYWxzbyBhZGQgKmlwX21yX2ZvcndhcmQqIHRvIGBGb2N1c1N5bWJvbHNgLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuICpJUF9NUk9VVEUqIGRlcGVuZHMgb24gKklQX01VTFRJQ0FTVCosIHNvIHRob3NlIHR3byBuZWVkIHRvIGJlIGluIGBFbmFibGVDb25maWdzYC4gSSBqdXN0IGRvdWJsZS1jaGVja2VkLCBhbmQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHN0cmljdGx5ICpyZXF1aXJlZCogYnV0ICpJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTKiBtaWdodCBiZSB1c2VmdWwgdG8gZW5hYmxlLCBidXQgSSB3aWxsIG5vdCBhZGQgaXQuIEl0JiMzOTtzIHNhZmUgdG8gc2F5ICpJUF9NUk9VVEUqIGFuZCAqSVBfTVVMVElDQVNUKiBhcmUgc3VmZmljaWVudC4KClNvLCB0byBzdW1tYXJpemU6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIEFic29sdXRlbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBjb3VsZCByZXZlYWwgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzLgoqICAgKipGb2N1c1N5bWJvbHM6KiogKmlwXF9tclxfaW5wdXQqLCAqaXBcX21yXF9mb3J3YXJkKiwgKmlwbXJcX2NhY2hlXF91bnJlc29sdmVkKiAtIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZC4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiAqSVBcX01ST1VURSosICpJUFxfTVVMVElDQVNUKiAtIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGBza2ItJmd0O2NiYCBpcyBoYW5kbGVkIHdpdGhpbiAqaXBtcl9jYWNoZV9yZXBvcnQqIGR1cmluZyB0aGUgcmVwb3J0aW5nIG9mIG11bHRpY2FzdCBwYWNrZXRzLiBUaGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsIGFuZCB3aXRoaW4gdGhlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgY29kZSB0aGF0JiMzOTtzIHJlYWNoYWJsZSB3aGVuIG11bHRpY2FzdCByb3V0aW5nIGlzIGVuYWJsZWQsIG1lYW5pbmcgdGhpcyBpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKRmluYWxseSwgSSYjMzk7bGwgY29uZmlybSB1c2VyLXNwYWNlIGFjY2Vzc2liaWxpdHkgdG8gKmlwbXJfY2FjaGVfcmVwb3J0Ki4gU2VuZGluZyBtdWx0aWNhc3QgcGFja2V0cyB0aGF0IHRyaWdnZXIgYSBjYWNoZSBtaXNzIGluIHRoZSBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZSBzZW5kcyBhbiBJR01QIG1lc3NhZ2UgdG8gdGhlIG1yb3V0ZSBzb2NrZXQsIHdoaWNoIGlzIHN1ZmZpY2llbnQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXBfbXJfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtpcG1yX2NhY2hlX3VucmVzb2x2ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNrYi1cdTAwM2VjYiBpcyBjb3BpZWQgaW4gaXBtcl9jYWNoZV9yZXBvcnQgd2hlbiBhIG11bHRpY2FzdCBwYWNrZXQgaXMgcmVwb3J0ZWQgdG8gdGhlIG11bHRpY2FzdCByb3V0aW5nIGRhZW1vbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBtdWx0aWNhc3Qgcm91dGluZyBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbXJfaW5wdXQmIzM0OywKICAgICYjMzQ7aXBfbXJfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDtpcG1yX2NhY2hlX3VucmVzb2x2ZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNrYi1cdTAwM2VjYiBpcyBjb3BpZWQgaW4gaXBtcl9jYWNoZV9yZXBvcnQgd2hlbiBhIG11bHRpY2FzdCBwYWNrZXQgaXMgcmVwb3J0ZWQgdG8gdGhlIG11bHRpY2FzdCByb3V0aW5nIGRhZW1vbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBtdWx0aWNhc3Qgcm91dGluZyBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NDYuNjY1ODgyNzMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2ODQyNTA5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tcl9pbnB1dFwiLFxuICAgIFwiaXBfbXJfZm9yd2FyZFwiLFxuICAgIFwiaXBtcl9jYWNoZV91bnJlc29sdmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNrYi1cXHUwMDNlY2IgaXMgY29waWVkIGluIGlwbXJfY2FjaGVfcmVwb3J0IHdoZW4gYSBtdWx0aWNhc3QgcGFja2V0IGlzIHJlcG9ydGVkIHRvIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBkYWVtb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gbXVsdGljYXN0IHJvdXRpbmcgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NDYuNjY1ODg4ODAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzk4MTY5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjOWJiNjBjODE1OWQ2YTIyZTU4NzdhYjkwYzg5MGJmNjc4NTdhZDQ5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDI4IDA4OjUwOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xcbmluZGV4IDFkOWE0YWMxNGZjZWY5Li4zYzQ1OGVhM2Q0MjM1OSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcG1yLmNcXG4rKysgYi9uZXQvaXB2NC9pcG1yLmNcXG5AQCAtMTA1OCw2ICsxMDU4LDcgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcXG4ge1xcbiBcXHRjb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7XFxuK1xcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xcbiBcXHRzdHJ1Y3Qgc29jayAqbXJvdXRlX3NrO1xcbiBcXHRzdHJ1Y3QgaWdtcGhkciAqaWdtcDtcXG4gXFx0c3RydWN0IGlnbXBtc2cgKm1zZztcXG5AQCAtMTExMyw3ICsxMTE0LDEwIEBAIHN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuIFxcdFxcdG1zZy1cXHUwMDNlaW1fdmlmID0gdmlmaTtcXG4gXFx0XFx0bXNnLVxcdTAwM2VpbV92aWZfaGkgPSB2aWZpIFxcdTAwM2VcXHUwMDNlIDg7XFxuIFxcdFxcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XFxuLVxcdFxcdG1lbWNweShza2ItXFx1MDAzZWNiLCBwa3QtXFx1MDAzZWNiLCBzaXplb2Yoc2tiLVxcdTAwM2VjYikpO1xcbitcXHRcXHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcXG4rXFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlY2IsIDAsIHNpemVvZihza2ItXFx1MDAzZWNiKSk7XFxuK1xcdFxcdGluZm8tXFx1MDAzZWlwaV9pZmluZGV4ID0gUEtUSU5GT19TS0JfQ0IocGt0KS1cXHUwMDNlaXBpX2lmaW5kZXg7XFxuK1xcdFxcdGluZm8tXFx1MDAzZWlwaV9zcGVjX2RzdCA9IFBLVElORk9fU0tCX0NCKHBrdCktXFx1MDAzZWlwaV9zcGVjX2RzdDtcXG4gXFx0XFx0LyogQWRkIG91ciBoZWFkZXIuXFxuIFxcdFxcdCAqIE5vdGUgdGhhdCBjb2RlLCBjc3VtIGFuZCBncm91cCBmaWVsZHMgYXJlIGNsZWFyZWQuXFxuIFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MDo0Ny4yMDY0ODI2NjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2OTE0MzYzOTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NUk9VVEVcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX21yX2lucHV0XCIsXG4gICAgXCJpcF9tcl9mb3J3YXJkXCIsXG4gICAgXCJpcG1yX2NhY2hlX3VucmVzb2x2ZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgc2tiLVxcdTAwM2VjYiBpcyBjb3BpZWQgaW4gaXBtcl9jYWNoZV9yZXBvcnQgd2hlbiBhIG11bHRpY2FzdCBwYWNrZXQgaXMgcmVwb3J0ZWQgdG8gdGhlIG11bHRpY2FzdCByb3V0aW5nIGRhZW1vbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY0IG11bHRpY2FzdCByb3V0aW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBtdWx0aWNhc3Qgcm91dGluZyBpcyBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjOWJiNjBjODE1OWQ2YTIyZTU4NzdhYjkwYzg5MGJmNjc4NTdhZDQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDg6NTA6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmNcbmluZGV4IDFkOWE0YWMxNGZjZWY5Li4zYzQ1OGVhM2Q0MjM1OSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwbXIuY1xuKysrIGIvbmV0L2lwdjQvaXBtci5jXG5AQCAtMTA1OCw2ICsxMDU4LDcgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KVxuIHtcbiBcdGNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTtcbitcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xuIFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcbiBcdHN0cnVjdCBpZ21waGRyICppZ21wO1xuIFx0c3RydWN0IGlnbXBtc2cgKm1zZztcbkBAIC0xMTEzLDcgKzExMTQsMTAgQEAgc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbiBcdFx0bXNnLVx1MDAzZWltX3ZpZiA9IHZpZmk7XG4gXHRcdG1zZy1cdTAwM2VpbV92aWZfaGkgPSB2aWZpIFx1MDAzZVx1MDAzZSA4O1xuIFx0XHRpcHY0X3BrdGluZm9fcHJlcGFyZShtcm91dGVfc2ssIHBrdCwgZmFsc2UpO1xuLVx0XHRtZW1jcHkoc2tiLVx1MDAzZWNiLCBwa3QtXHUwMDNlY2IsIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbitcdFx0aW5mbyA9IFBLVElORk9fU0tCX0NCKHNrYik7XG4rXHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihza2ItXHUwMDNlY2IpKTtcbitcdFx0aW5mby1cdTAwM2VpcGlfaWZpbmRleCA9IFBLVElORk9fU0tCX0NCKHBrdCktXHUwMDNlaXBpX2lmaW5kZXg7XG4rXHRcdGluZm8tXHUwMDNlaXBpX3NwZWNfZHN0ID0gUEtUSU5GT19TS0JfQ0IocGt0KS1cdTAwM2VpcGlfc3BlY19kc3Q7XG4gXHRcdC8qIEFkZCBvdXIgaGVhZGVyLlxuIFx0XHQgKiBOb3RlIHRoYXQgY29kZSwgY3N1bSBhbmQgZ3JvdXAgZmllbGRzIGFyZSBjbGVhcmVkLlxuIFx0XHQgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUwOjQ3LjIwNjQ4Mzk4NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzgxNTM2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTXVsdGljYXN0IFJvdXRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0aW5rZXJpbmcgd2l0aCBgbmV0L2lwdjQvaXBtci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaXBtcl9jYWNoZV9yZXBvcnRgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBob3cgaXQgaGFuZGxlcyB0aGUgY29weSBvcGVyYXRpb24gZm9yIGBza2ItXHUwMDNlY2JgLiBJbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBgbWVtY3B5YCwgaXQncyBub3cgdXNpbmcgYSBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLiBJbml0aWFsbHksIHRoZSBmdWxsIGBza2ItXHUwMDNlY2JgIHdhcyBjb3BpZWQgZnJvbSBgcGt0LVx1MDAzZWNiYCB1c2luZyBgbWVtY3B5YC4gTm93LCBpdCdzIGNsZWFyaW5nIHRoZSBleGlzdGluZyBgc2tiLVx1MDAzZWNiYCB3aXRoIGBtZW1zZXRgLCB0aGVuIHNlbGVjdGl2ZWx5IGNvcHlpbmcgdHdvIHNwZWNpZmljIGZpZWxkczogYGlwaV9pZmluZGV4YCBhbmQgYGlwaV9zcGVjX2RzdGAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBJUHY0IG11bHRpY2FzdCByb3V0aW5nLCBhIG1vZGlmaWNhdGlvbiB0aGF0IG5lZWRzIGNhcmVmdWwgc2NydXRpbnkuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIHdoeSB0aGUgY2hhbmdlPyBXaGF0J3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgemVyb2luZyBvdXQgdGhlIGVudGlyZSBgc2tiLVx1MDAzZWNiYCBhbmQgc2VsZWN0aXZlbHkgY29weWluZyBvbmx5IHRob3NlIHR3byBmaWVsZHM/IFRoZXJlIG11c3QgYmUgYSBzcGVjaWZpYyByZWFzb24sIGxpa2VseSByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQsIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIG9yIG1heWJlIGV2ZW4gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBiZWhhdmlvci4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsZXJzIG9mIGBpcG1yX2NhY2hlX3JlcG9ydGAgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBpbXBhY3QuIEknbGwgdXNlIGBncmVwcGVyYCDigJMgdGhhdCdzIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYSBzb2xpZCBsaXN0IG9mIHRoZSBjYWxsIHNpdGVzIGFuZCBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NTEuNzQ0NjQwMzE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTcyNjEyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBtcl9jYWNoZV9yZXBvcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTEwOD1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTEwLVxcdFxcdFxcdCAgc3RydWN0IG1mY19jYWNoZSAqY2FjaGUsIGludCBsb2NhbCk7XFxubmV0L2lwdjQvaXBtci5jOjExMTpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0xMTItXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCk7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9NTI5PXN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy01NTEtXFx0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFKCkgaW4gdmlmX2FkZCgpIGFuZCB2aWZfZGVsZXRlKCkgKi9cXG5uZXQvaXB2NC9pcG1yLmM6NTUyOlxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCBSRUFEX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pLFxcbm5ldC9pcHY0L2lwbXIuYy01NTMtXFx0XFx0XFx0ICBJR01QTVNHX1dIT0xFUEtUKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz02ODc9c3RhdGljIGludCB2aWZfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy03MDktXFx0aWYgKHZpZmkgPT0gbXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIHtcXG5uZXQvaXB2NC9pcG1yLmM6NzEwOlxcdFxcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cXG5uZXQvaXB2NC9pcG1yLmMtNzExLVxcdFxcdFdSSVRFX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIC0xKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz04NDk9c3RhdGljIGludCB2aWZfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtOTQxLVxcdGlmICh2LVxcdTAwM2VmbGFncyBcXHUwMDI2IFZJRkZfUkVHSVNURVIpIHtcXG5uZXQvaXB2NC9pcG1yLmM6OTQyOlxcdFxcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFKCkgaW4gaXBtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cXG5uZXQvaXB2NC9pcG1yLmMtOTQzLVxcdFxcdFdSSVRFX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0sIHZpZmkpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTEwMTk9c3RhdGljIHZvaWQgaXBtcl9jYWNoZV9yZXNvbHZlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTA1Ni0gKi9cXG5uZXQvaXB2NC9pcG1yLmM6MTA1NzpzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY0L2lwbXIuYy0xMDU4LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTE0Nj1zdGF0aWMgaW50IGlwbXJfY2FjaGVfdW5yZXNvbHZlZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgdmlmaV90IHZpZmksXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTE4My1cXHRcXHQvKiBSZWZsZWN0IGZpcnN0IHF1ZXJ5IGF0IG1yb3V0ZWQuICovXFxubmV0L2lwdjQvaXBtci5jOjExODQ6XFx0XFx0ZXJyID0gaXBtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIHZpZmksIElHTVBNU0dfTk9DQUNIRSk7XFxubmV0L2lwdjQvaXBtci5jLTExODUtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTkwNj1zdGF0aWMgaW50IGlwbXJfcHJlcGFyZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTkyNC1cXHRcXHRERVZfU1RBVFNfSU5DKHZpZl9kZXYsIHR4X3BhY2tldHMpO1xcbm5ldC9pcHY0L2lwbXIuYzoxOTI1OlxcdFxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB2aWZpLCBJR01QTVNHX1dIT0xFUEtUKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTkyNi1cXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjA0NT1zdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMjEwMC1cXHRcXHRcXHRjLVxcdTAwM2VfYy5tZmNfdW4ucmVzLmxhc3RfYXNzZXJ0ID0gamlmZmllcztcXG5uZXQvaXB2NC9pcG1yLmM6MjEwMTpcXHRcXHRcXHRpcG1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgdHJ1ZV92aWZpLCBJR01QTVNHX1dST05HVklGKTtcXG5uZXQvaXB2NC9pcG1yLmMtMjEwMi1cXHRcXHRcXHRpZiAoUkVBRF9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX2RvX3dydmlmd2hvbGUpKVxcbm5ldC9pcHY0L2lwbXIuYzoyMTAzOlxcdFxcdFxcdFxcdGlwbXJfY2FjaGVfcmVwb3J0KG1ydCwgc2tiLCB0cnVlX3ZpZmksXFxubmV0L2lwdjQvaXBtci5jLTIxMDQtXFx0XFx0XFx0XFx0XFx0XFx0ICBJR01QTVNHX1dSVklGV0hPTEUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MDo1NC4wNDE5MDc5MTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY2NTE4MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGlwbXJfY2FjaGVfcmVwb3J0YCBQYXRjaCoqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNpbmcgb24gdGhlIGBpcG1yX2NhY2hlX3JlcG9ydGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhbHRlcmluZyB0aGUgd2F5IGBza2ItXHUwMDNlY2JgIGlzIGhhbmRsZWQuIEhtbSwgaW50ZXJlc3RpbmcuIEJhc2VkIG9uIHRoZSBmaWxlIHBhdGgsIHRoaXMgaXMgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZywgbGlrZWx5IHdpdGggcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGUgY29kZSBzZWVtcyBmdW5jdGlvbmFsLCBhbmQgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB0aGUgbmV0d29yayBzdGFjaywgc28gdGhpcyBpc24ndCBzb21lIGRlYWQgY29kZS4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuXG5cbkkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBJUHY0IG11bHRpY2FzdCByb3V0aW5nIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbnRlbnQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gTGV0IG1lIHNlYXJjaCBmb3IgYElQX01ST1VURWAgd2l0aGluIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBjb3JlIG11bHRpY2FzdCByb3V0aW5nIGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2hvdWxkIGhlbHAgY29ubmVjdCB0aGUgZG90cyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDI0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTA6NTcuNDA4NDI4OTk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Njc0MDEzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX01ST1VURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMTUtXFxubmV0L2lwdjQvS2NvbmZpZzoyMTY6Y29uZmlnIElQX01ST1VURV9DT01NT05cXG5uZXQvaXB2NC9LY29uZmlnLTIxNy1cXHRib29sXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cXG5uZXQvaXB2NC9LY29uZmlnOjIyMDpjb25maWcgSVBfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yMjEtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMzEtXFxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2NC9LY29uZmlnLTIzMy1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MDo1OS4zNzU4MzUwNjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg3NjM1MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS2VybmVsJ3MgSVAgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUga2VybmVsIGNvbmZpZyBmb3IgSVAgTXVsdGljYXN0LCBzcGVjaWZpY2FsbHkgYElQX01ST1VURWAsIGlzIGRlZmluZWQuIEdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIElQdjQsIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgbmV0L2lwdjRgIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gQW5kIHdpdGhpbiB0aGF0LCB0aGUgZmlsZSB0aGF0IHR5cGljYWxseSBob2xkcyBLY29uZmlnIG9wdGlvbnMgZm9yIElQdjQgbmV0d29ya2luZyBmZWF0dXJlcyBpcyBgS2NvbmZpZ2AuIFRoZXJlZm9yZSwgSSdsbCBleGFtaW5lIGBuZXQvaXB2NC9LY29uZmlnYCB0byBsb2NhdGUgdGhlIGBJUF9NUk9VVEVgIG9wdGlvbi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyIEkgbmVlZCBpbiBvcmRlciB0byBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgaXQgaXMgc2V0IGFuZCBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTIyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTE6MDIuNjYzNDcyMjcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTk6XFx0XFxuIDIyMDpcXHRjb25maWcgSVBfTVJPVVRFXFxuIDIyMTpcXHRcXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuIDIyMjpcXHRcXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxcbiAyMjM6XFx0XFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cXG4gMjI0OlxcdFxcdGhlbHBcXG4gMjI1OlxcdFxcdCAgVGhpcyBpcyB1c2VkIGlmIHlvdSB3YW50IHlvdXIgbWFjaGluZSB0byBhY3QgYXMgYSByb3V0ZXIgZm9yIElQXFxuIDIyNjpcXHRcXHQgIHBhY2tldHMgdGhhdCBoYXZlIHNldmVyYWwgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJdCBpcyBuZWVkZWQgb24gdGhlXFxuIDIyNzpcXHRcXHQgIE1CT05FLCBhIGhpZ2ggYmFuZHdpZHRoIG5ldHdvcmsgb24gdG9wIG9mIHRoZSBJbnRlcm5ldCB3aGljaCBjYXJyaWVzXFxuIDIyODpcXHRcXHQgIGF1ZGlvIGFuZCB2aWRlbyBicm9hZGNhc3RzLiBJbiBvcmRlciB0byBkbyB0aGF0LCB5b3Ugd291bGQgbW9zdFxcbiAyMjk6XFx0XFx0ICBsaWtlbHkgcnVuIHRoZSBwcm9ncmFtIG1yb3V0ZWQuIElmIHlvdSBoYXZlbid0IGhlYXJkIGFib3V0IGl0LCB5b3VcXG4gMjMwOlxcdFxcdCAgZG9uJ3QgbmVlZCBpdC5cXG4gMjMxOlxcdFxcbiAyMzI6XFx0Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG4gMjMzOlxcdFxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuIDIzNDpcXHRcXHRkZXBlbmRzIG9uIElQX01ST1VURSBcXHUwMDI2XFx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcXG4gMjM1OlxcdFxcdHNlbGVjdCBGSUJfUlVMRVNcXG4gMjM2OlxcdFxcdGhlbHBcXG4gMjM3OlxcdFxcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xcbiAyMzg6XFx0XFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjAyLjY2MzU1MTI0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzQwMzE3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTXVsdGljYXN0IFJlcXVpcmVtZW50cyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uLi4gaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgd2UncmUgZ29pbmcgdG8gbmVlZCBib3RoIGBJUF9NUk9VVEVgIGFuZCBgSVBfTVVMVElDQVNUYCBlbmFibGVkLiBJIGNhbid0IHNlZSBhIHdheSBhcm91bmQgdGhhdCwgZ2l2ZW4gdGhlIHByb2plY3Qgc3BlY3MuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgYElQX01VTFRJQ0FTVGAg4oCTIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGdvdGNoYXMgSSdtIG92ZXJsb29raW5nIHRoZXJlLCBhbmQgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9uIGl0cyBpbXBsZW1lbnRhdGlvbiwgb3IgbWF5YmUgZXZlbiBpZGVudGlmeSBpZiBhIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGwgb3Igc2V0dGluZyB3aXRoaW4gaXQgbmVlZHMgY2xvc2VyIGluc3BlY3Rpb24uIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDU2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MTowNS44OTc1ODYzNzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzAxNzc3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX01VTFRJQ0FTVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnLTQtI1xcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvS2NvbmZpZy02LVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3RpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjA4LjA2Nzc3MzIyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE1NjI5MDMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBpcG1yX2NhY2hlX3JlcG9ydGAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBpcG1yX2NhY2hlX3JlcG9ydGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBhcmVhczogYHJlZ192aWZfeG1pdGAsIGBpcG1yX2NhY2hlX3VucmVzb2x2ZWRgLCBgaXBtcl9wcmVwYXJlX3htaXRgLCBhbmQgYGlwX21yX2ZvcndhcmRgLiBUaGVzZSBhcmUgcHJldHR5IGNlbnRyYWwgdG8gbXVsdGljYXN0IHJvdXRpbmcsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGJlaW5nIGFsdGVyZWQgaGVyZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byBgaXBtcl9jYWNoZV9yZXBvcnRgIGl0c2VsZiBhbmQgZXhhbWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggZWFjaCBvZiB0aG9zZSBjYWxsaW5nIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGJlaGF2aW9yIGNoYW5nZS4gIFNpbmNlIGBpcG1yX2NhY2hlX3JlcG9ydGAgaXMgc3RhdGljLCBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBpbmxpbmVkLiBCYXNlZCBvbiBpdHMgc2l6ZSwgaXQncyBsaWtlbHkgbm90IGlubGluZWQsIGJ1dCBJIHNob3VsZCBzdGlsbCBjaGVjayB0aGUgY29kZSBqdXN0IHRvIGJlIDEwMCUgc3VyZS4gSSB3YW50IHRvIGluY2x1ZGUgdGhlIGNhbGxlcnMgaW4gbXkgZm9jdXMgc28gSSBjYW4gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIHdob2xlIHRoaW5nLlxuXG5JJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiwgd2hpY2ggaXMgbG9jYXRlZCBpbiBgbmV0L2lwdjQvaXBtci5jYC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzA3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjE4LjIyNDA2NjMwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBtci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNTcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNTc6XFx0c3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4xMDU4OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpXFxuMTA1OTpcXHR7XFxuMTA2MDpcXHRcXHRjb25zdCBpbnQgaWhsID0gaXBfaGRybGVuKHBrdCk7XFxuMTA2MTpcXHRcXHRzdHJ1Y3QgaW5fcGt0aW5mbyAqaW5mbztcXG4xMDYyOlxcdFxcdHN0cnVjdCBzb2NrICptcm91dGVfc2s7XFxuMTA2MzpcXHRcXHRzdHJ1Y3QgaWdtcGhkciAqaWdtcDtcXG4xMDY0OlxcdFxcdHN0cnVjdCBpZ21wbXNnICptc2c7XFxuMTA2NTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjEwNjY6XFx0XFx0aW50IHJldDtcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0bXJvdXRlX3NrID0gcmN1X2RlcmVmZXJlbmNlKG1ydC1cXHUwMDNlbXJvdXRlX3NrKTtcXG4xMDY5OlxcdFxcdGlmICghbXJvdXRlX3NrKVxcbjEwNzA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTA3MTpcXHRcXG4xMDcyOlxcdFxcdGlmIChhc3NlcnQgPT0gSUdNUE1TR19XSE9MRVBLVCB8fCBhc3NlcnQgPT0gSUdNUE1TR19XUlZJRldIT0xFKVxcbjEwNzM6XFx0XFx0XFx0c2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20ocGt0LCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxuMTA3NDpcXHRcXHRlbHNlXFxuMTA3NTpcXHRcXHRcXHRza2IgPSBhbGxvY19za2IoMTI4LCBHRlBfQVRPTUlDKTtcXG4xMDc2OlxcdFxcbjEwNzc6XFx0XFx0aWYgKCFza2IpXFxuMTA3ODpcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuMTA3OTpcXHRcXG4xMDgwOlxcdFxcdGlmIChhc3NlcnQgPT0gSUdNUE1TR19XSE9MRVBLVCB8fCBhc3NlcnQgPT0gSUdNUE1TR19XUlZJRldIT0xFKSB7XFxuMTA4MTpcXHRcXHRcXHQvKiBVZ2x5LCBidXQgd2UgaGF2ZSBubyBjaG9pY2Ugd2l0aCB0aGlzIGludGVyZmFjZS5cXG4xMDgyOlxcdFxcdFxcdCAqIER1cGxpY2F0ZSBvbGQgaGVhZGVyLCBmaXggaWhsLCBsZW5ndGggZXRjLlxcbjEwODM6XFx0XFx0XFx0ICogQW5kIGFsbCB0aGlzIG9ubHkgdG8gbWFuZ2xlIG1zZy1cXHUwMDNlaW1fbXNndHlwZSBhbmRcXG4xMDg0OlxcdFxcdFxcdCAqIHRvIHNldCBtc2ctXFx1MDAzZWltX21ieiB0byBcXFwibWJ6XFxcIiA6LSlcXG4xMDg1OlxcdFxcdFxcdCAqL1xcbjEwODY6XFx0XFx0XFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxuMTA4NzpcXHRcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4xMDg4OlxcdFxcdFxcdHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuMTA4OTpcXHRcXHRcXHRtc2cgPSAoc3RydWN0IGlnbXBtc2cgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4xMDkwOlxcdFxcdFxcdG1lbWNweShtc2csIHNrYl9uZXR3b3JrX2hlYWRlcihwa3QpLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxuMTA5MTpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX21zZ3R5cGUgPSBhc3NlcnQ7XFxuMTA5MjpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX21ieiA9IDA7XFxuMTA5MzpcXHRcXHRcXHRpZiAoYXNzZXJ0ID09IElHTVBNU0dfV1JWSUZXSE9MRSkge1xcbjEwOTQ6XFx0XFx0XFx0XFx0bXNnLVxcdTAwM2VpbV92aWYgPSB2aWZpO1xcbjEwOTU6XFx0XFx0XFx0XFx0bXNnLVxcdTAwM2VpbV92aWZfaGkgPSB2aWZpIFxcdTAwM2VcXHUwMDNlIDg7XFxuMTA5NjpcXHRcXHRcXHR9IGVsc2Uge1xcbjEwOTc6XFx0XFx0XFx0XFx0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFKCkgaW4gdmlmX2FkZCgpIGFuZCB2aWZfZGVsZXRlKCkgKi9cXG4xMDk4OlxcdFxcdFxcdFxcdGludCB2aWZfbnVtID0gUkVBRF9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0XFx0XFx0bXNnLVxcdTAwM2VpbV92aWYgPSB2aWZfbnVtO1xcbjExMDE6XFx0XFx0XFx0XFx0bXNnLVxcdTAwM2VpbV92aWZfaGkgPSB2aWZfbnVtIFxcdTAwM2VcXHUwMDNlIDg7XFxuMTEwMjpcXHRcXHRcXHR9XFxuMTEwMzpcXHRcXHRcXHRpcF9oZHIoc2tiKS1cXHUwMDNlaWhsID0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgXFx1MDAzZVxcdTAwM2UgMjtcXG4xMTA0OlxcdFxcdFxcdGlwX2hkcihza2IpLVxcdTAwM2V0b3RfbGVuID0gaHRvbnMobnRvaHMoaXBfaGRyKHBrdCktXFx1MDAzZXRvdF9sZW4pICtcXG4xMTA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xcbjExMDY6XFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTE6MTguMjI0MjE0ODY3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODUwMzIxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIHJldmlld2luZyBjb2RlIGFzIGFuIGV4cGVydDpcblxuKipBc3Nlc3NtZW50IG9mIEZ1bmN0aW9uIENvbXBsZXRpb24qKlxuXG5BbHJpZ2h0LCBJJ3ZlIGp1c3QgYmVlbiBzY3J1dGluaXppbmcgYSBzcGVjaWZpYyBzZWdtZW50LCBhbmQgbm93IEkgbmVlZCB0byBleHBhbmQgdGhlIHNjb3BlIG9mIG15IHJldmlldy4gSXQncyB0aW1lIHRvIHN5c3RlbWF0aWNhbGx5IGV4YW1pbmUgdGhlIHJlbWFpbmRlciBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGVkZ2UgY2FzZXMsIGRlcGVuZGVuY2llcywgb3IgcG90ZW50aWFsIGJ1Z3MgdGhhdCBtaWdodCBleGlzdCBpbiB0aGUgdW5leHBsb3JlZCBwYXJ0cyBvZiB0aGUgY29kZS4gTXkgcHJpbWFyeSBnb2FsLCBhcyBhbHdheXMsIGlzIHRvIGVuc3VyZSByb2J1c3QgZnVuY3Rpb25hbGl0eSBhbmQgYWRoZXJlbmNlIHRvIGJlc3QgcHJhY3RpY2VzLCBidXQgSSBhbSBlcXVhbGx5IGNvbmNlcm5lZCBhYm91dCByZWFkYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjIxLjYwOTI0OTkzMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBtci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDc6XFx0XFx0XFx0LyogQ29weSB0aGUgSVAgaGVhZGVyICovXFxuMTEwODpcXHRcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiLVxcdTAwM2VsZW4pO1xcbjExMDk6XFx0XFx0XFx0c2tiX3B1dChza2IsIGlobCk7XFxuMTExMDpcXHRcXHRcXHRza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIHBrdC1cXHUwMDNlZGF0YSwgaWhsKTtcXG4xMTExOlxcdFxcdFxcdC8qIEZsYWcgdG8gdGhlIGtlcm5lbCB0aGlzIGlzIGEgcm91dGUgYWRkICovXFxuMTExMjpcXHRcXHRcXHRpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wgPSAwO1xcbjExMTM6XFx0XFx0XFx0bXNnID0gKHN0cnVjdCBpZ21wbXNnICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuMTExNDpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZiA9IHZpZmk7XFxuMTExNTpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZl9oaSA9IHZpZmkgXFx1MDAzZVxcdTAwM2UgODtcXG4xMTE2OlxcdFxcdFxcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XFxuMTExNzpcXHRcXHRcXHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcXG4xMTE4OlxcdFxcdFxcdG1lbXNldChza2ItXFx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVxcdTAwM2VjYikpO1xcbjExMTk6XFx0XFx0XFx0aW5mby1cXHUwMDNlaXBpX2lmaW5kZXggPSBQS1RJTkZPX1NLQl9DQihwa3QpLVxcdTAwM2VpcGlfaWZpbmRleDtcXG4xMTIwOlxcdFxcdFxcdGluZm8tXFx1MDAzZWlwaV9zcGVjX2RzdCA9IFBLVElORk9fU0tCX0NCKHBrdCktXFx1MDAzZWlwaV9zcGVjX2RzdDtcXG4xMTIxOlxcdFxcdFxcdC8qIEFkZCBvdXIgaGVhZGVyLlxcbjExMjI6XFx0XFx0XFx0ICogTm90ZSB0aGF0IGNvZGUsIGNzdW0gYW5kIGdyb3VwIGZpZWxkcyBhcmUgY2xlYXJlZC5cXG4xMTIzOlxcdFxcdFxcdCAqL1xcbjExMjQ6XFx0XFx0XFx0aWdtcCA9IHNrYl9wdXRfemVybyhza2IsIHNpemVvZihzdHJ1Y3QgaWdtcGhkcikpO1xcbjExMjU6XFx0XFx0XFx0aWdtcC1cXHUwMDNldHlwZSA9IGFzc2VydDtcXG4xMTI2OlxcdFxcdFxcdG1zZy1cXHUwMDNlaW1fbXNndHlwZSA9IGFzc2VydDtcXG4xMTI3OlxcdFxcdFxcdGlwX2hkcihza2IpLVxcdTAwM2V0b3RfbGVuID0gaHRvbnMoc2tiLVxcdTAwM2VsZW4pO1xcdC8qIEZpeCB0aGUgbGVuZ3RoICovXFxuMTEyODpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyO1xcbjExMjk6XFx0XFx0fVxcbjExMzA6XFx0XFxuMTEzMTpcXHRcXHRpZ21wbXNnX25ldGxpbmtfZXZlbnQobXJ0LCBza2IpO1xcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHQvKiBEZWxpdmVyIHRvIG1yb3V0ZWQgKi9cXG4xMTM0OlxcdFxcdHJldCA9IHNvY2tfcXVldWVfcmN2X3NrYihtcm91dGVfc2ssIHNrYik7XFxuMTEzNTpcXHRcXG4xMTM2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMTEzNzpcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXFwibXJvdXRlOiBwZW5kaW5nIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIGVudHJpZXNcXFxcblxcXCIpO1xcbjExMzg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTEzOTpcXHRcXHR9XFxuMTE0MDpcXHRcXG4xMTQxOlxcdFxcdHJldHVybiByZXQ7XFxuMTE0MjpcXHR9XFxuMTE0MzpcXHRcXG4xMTQ0OlxcdC8qIFF1ZXVlIGEgcGFja2V0IGZvciByZXNvbHV0aW9uLiBJdCBnZXRzIGxvY2tlZCBjYWNoZSBlbnRyeSEgKi9cXG4xMTQ1OlxcdC8qIENhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkgKi9cXG4xMTQ2OlxcdHN0YXRpYyBpbnQgaXBtcl9jYWNoZV91bnJlc29sdmVkKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCB2aWZpX3QgdmlmaSxcXG4xMTQ3OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjExNDg6XFx0e1xcbjExNDk6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFxcdTAwMjZtcnQtXFx1MDAzZW5ldCk7XFxuMTE1MDpcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpO1xcbjExNTE6XFx0XFx0c3RydWN0IG1mY19jYWNoZSAqYyA9IE5VTEw7XFxuMTE1MjpcXHRcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuMTE1MzpcXHRcXHRpbnQgZXJyO1xcbjExNTQ6XFx0XFxuMTE1NTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm1mY191bnJlc19sb2NrKTtcXG4xMTU2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MToyMS42MDk0MDgyMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3ODMyMTI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IEluZm9ybWF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgc2VjdXJpdHkgb3IgaW5mb3JtYXRpb24gbGVha2FnZSBpc3N1ZSByZWxhdGVkIHRvIGhvdyBwYWNrZXQgaW5mb3JtYXRpb24gaXMgaGFuZGxlZC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgdGhhdCBgc2tiLVx1MDAzZWNiYCB3YXMgYmVpbmcgY29waWVkIGRpcmVjdGx5LCB3aGljaCBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgb3Igc2Vuc2l0aXZlIGRhdGEuIEl0J3MgbXVjaCBjbGVhbmVyIGFuZCBzYWZlciB0byBvbmx5IGNvcHkgdGhlIGZpZWxkcyB3ZSBhY3R1YWxseSBuZWVkLlxuXG5XYWl0IGEgc2Vjb25kLiBMZXQncyB0cmFjZSB0aGlzIGJhY2sgYSBsaXR0bGUuIFRoZSBmdW5jdGlvbiBgaXB2NF9wa3RpbmZvX3ByZXBhcmVgIHByZXBhcmVzIGBwa3QtXHUwMDNlY2JgLCB3aGljaCBpcyBjYXN0IHRvIGBzdHJ1Y3QgaW5fcGt0aW5mb2AsIHJpZ2h0PyBBbmQgKnRoZW4qIGl0IGNvcGllcyBgcGt0LVx1MDAzZWNiYCB0byBgc2tiLVx1MDAzZWNiYC4gSSBzZWUuIEJ1dCB0aGUgcGF0Y2ggYWx0ZXJzIHRoaXMgZmxvdywgYW5kIHRoZSBgc2tiYCBpcyBlaXRoZXIgYSBuZXdseSBhbGxvY2F0ZWQgb3IgcmVhbGxvY2F0ZWQgc3RydWN0dXJlLCB3aGljaCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBhbmQgdGhlIHdheSBpdCBpcyBiZWluZyB1c2VkLlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhpcyBiZWhhdmlvciB0byBvbmx5IGNvcHkgYGlwaV9pZmluZGV4YCBhbmQgYGlwaV9zcGVjX2RzdGAgYW5kIHRoZW4gemVyb2luZyBvdXQgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZS4gRGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIGFib3V0IGRhdGEgc2FuaXRpemF0aW9uIGFuZCBtaW5pbWl6aW5nIHdoYXQgZ2V0cyBwYXNzZWQgYXJvdW5kLiBNYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5Ob3cgSSBuZWVkIHRvIHNlZSBob3cgdGhpcyBhZmZlY3RzIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBpcG1yX2NhY2hlX3JlcG9ydGAuIEkgc2VlIHRoZXJlIGFyZSBmb3VyIG9mIHRoZW06IGByZWdfdmlmX3htaXRgLCBgaXBtcl9jYWNoZV91bnJlc29sdmVkYCwgYGlwbXJfcHJlcGFyZV94bWl0YCwgYW5kIGBpcF9tcl9mb3J3YXJkYC5cblxuUmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYGlwX21yX2ZvcndhcmRgLiBUaGF0J3Mgd2hlcmUgSSdsbCBwcm9iYWJseSBmaW5kIHRoZSBtb3N0IHJlbGV2YW50IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MToyNy4wODc3MzE0NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzI0NzcyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfbXJfZm9yd2FyZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTA1PXN0YXRpYyB2b2lkIGlwbXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDctXFxubmV0L2lwdjQvaXBtci5jOjEwODpzdGF0aWMgdm9pZCBpcF9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxubmV0L2lwdjQvaXBtci5jLTEwOS1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTAxOT1zdGF0aWMgdm9pZCBpcG1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0xMDQ2LVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2NC9pcG1yLmM6MTA0NzpcXHRcXHRcXHRpcF9tcl9mb3J3YXJkKG5ldCwgbXJ0LCBza2ItXFx1MDAzZWRldiwgc2tiLCBjLCAwKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTA0OC1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0yMDMyPXN0YXRpYyBpbnQgaXBtcl9maW5kX3ZpZihjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMDQ0LS8qIENhbGxlZCB1bmVyIHJjdV9yZWFkX2xvY2soKSAqL1xcbm5ldC9pcHY0L2lwbXIuYzoyMDQ1OnN0YXRpYyB2b2lkIGlwX21yX2ZvcndhcmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2NC9pcG1yLmMtMjA0Ni1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MjE5Mz1pbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMjc1LVxcbm5ldC9pcHY0L2lwbXIuYzoyMjc2OlxcdGlwX21yX2ZvcndhcmQobmV0LCBtcnQsIGRldiwgc2tiLCBjYWNoZSwgbG9jYWwpO1xcbm5ldC9pcHY0L2lwbXIuYy0yMjc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MToyOC44NjAyMTM5NjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NzkwNjMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTXVsdGljYXN0IFJvdXRpbmcncyBDb3JlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpY2FzdCByb3V0aW5nIGlzIGhhbmRsZWQgYXQgdGhlIGVudHJ5IGxldmVsLiBSaWdodCwgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgaXBfbXJfaW5wdXRgLiBUaGF0J3Mgd2hlcmUgaXQgYWxsIGJlZ2lucy4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyBpbmNvbWluZyBtdWx0aWNhc3QgcGFja2V0cyBhcmUgcHJvY2Vzc2VkIGFuZCB3aGVyZSB0aGV5IGFyZSByb3V0ZWQgZnJvbSB0aGVyZS4gTGV0IG1lIGRpdmUgaW50byB0aGF0IGBpcF9tcl9pbnB1dGAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJIGtub3cgSSBjYW4gYnVpbGQgb24gdGhpcyBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjMxLjgyODEyMzM4NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MjcwMjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tcl9pbnB1dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcC5oPTE2OT12b2lkIGlwX3Byb3RvY29sX2RlbGl2ZXJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKTtcXG5pbmNsdWRlL25ldC9pcC5oOjE3MDppbnQgaXBfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvaXAuaC0xNzEtaW50IGlwX21yX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0zNjc9aW50IGlwX21jX291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTM4Ni1cXHRcXHQgICB3aGljaCByZXR1cm5lZCBhZnRlciBmb3J3YXJkaW5nOyB0aGV5IHdpbGwgYmUgIGRyb3BwZWRcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzozODc6XFx0XFx0ICAgYnkgaXBfbXJfaW5wdXQgaW4gYW55IGNhc2UuXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzg4LVxcdFxcdCAgIE5vdGUsIHRoYXQgbG9jYWwgZnJhbWVzIGFyZSBsb29wZWQgYmFjayB0byBiZSBkZWxpdmVyZWRcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTM5MC1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzozOTE6XFx0XFx0ICAgVGhpcyBjaGVjayBpcyBkdXBsaWNhdGVkIGluIGlwX21yX2lucHV0IGF0IHRoZSBtb21lbnQuXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzkyLVxcdFxcdCAqL1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTIxNjY9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9ydF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yMTkyLSAqL1xcbm5ldC9pcHY0L2lwbXIuYzoyMTkzOmludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY0L2lwbXIuYy0yMTk0LXtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTczNz1pcF9yb3V0ZV9pbnB1dF9tYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTc2OS1cXHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRhZGRyKSBcXHUwMDI2XFx1MDAyNiBJTl9ERVZfTUZPUldBUkQoaW5fZGV2KSlcXG5uZXQvaXB2NC9yb3V0ZS5jOjE3NzA6XFx0XFx0cnRoLVxcdTAwM2Vkc3QuaW5wdXQgPSBpcF9tcl9pbnB1dDtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE3NzEtI2VuZGlmXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI1NTc9c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjY2OC1cXHRcXHRcXHQgICAgIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGZsNC1cXHUwMDNlZGFkZHIpKSB7XFxubmV0L2lwdjQvcm91dGUuYzoyNjY5OlxcdFxcdFxcdFxcdHJ0aC1cXHUwMDNlZHN0LmlucHV0ID0gaXBfbXJfaW5wdXQ7XFxubmV0L2lwdjQvcm91dGUuYy0yNjcwLVxcdFxcdFxcdFxcdHJ0aC1cXHUwMDNlZHN0Lm91dHB1dCA9IGlwX21yX291dHB1dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTE6MzMuOTgwODMxMzI1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTQ0MTcwNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNdWx0aWNhc3QgUGFja2V0IEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG11bHRpY2FzdCBwYWNrZXRzIGFyZSBoYW5kbGVkIGhlcmUuIEl0IHNlZW1zIHdlIGhhdmUgdGhyZWUga2V5IGZ1bmN0aW9ucyB0byBjb25zaWRlci4gRmlyc3QsIHRoZXJlJ3MgYGlwX21yX2lucHV0YCwgd2hpY2ggaXMgdHJpZ2dlcmVkIHdoZW4gYSBtdWx0aWNhc3QgcGFja2V0IGFycml2ZXMgYW5kIHRoZSBkZXZpY2UgaXMgY29uZmlndXJlZCBmb3IgbXVsdGljYXN0IGZvcndhcmRpbmcg4oCTIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZW4gd2UgaGF2ZSBgaXBfbXJfb3V0cHV0YCwgd2hpY2ggaGFuZGxlcyB0aGUgbG9jYWwgc2VuZGluZyBvZiBtdWx0aWNhc3QgcGFja2V0cyB0aGF0IHJlcXVpcmUgZm9yd2FyZGluZy5cblxuVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGJlIHdpdGhpbiBgaXBtcl9jYWNoZV9yZXBvcnRgLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2hlbiB0aGVyZSdzIGEgbXVsdGljYXN0IGNhY2hlIG1pc3MsIG9yIHdoZW4gYSBWaXJ0dWFsIEludGVyZmFjZSAoVklGKSBpcyBpbmNvcnJlY3QuIFRoaXMgaXMgd2hhdCBJIHdhcyBsb29raW5nIGZvci5cblxuTm93LCBhIHF1aWNrIG5vdGUsIEkgc2VlIHRoYXQgYGlwbXJfY2FjaGVfcmVwb3J0YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AuIEkgd2FzIGluaXRpYWxseSBjb25jZXJuZWQgdGhhdCBpdCBtaWdodCBiZSBpbmxpbmVkLCBidXQgdGhlIGZhY3QgdGhhdCBpdCdzIGBzdGF0aWNgIGRvZXNuJ3QgbmVjZXNzYXJpbHkgcnVsZSB0aGF0IG91dCwgYWx0aG91Z2ggc3RhdGljIGZ1bmN0aW9ucyBhcmUgbGVzcyBsaWtlbHkgdG8gYmUgaW5saW5lZC4gR2l2ZW4gdGhhdCBgaXBtcl9jYWNoZV9yZXBvcnRgIGlzIHByb2JhYmx5IGEgc3Vic3RhbnRpYWwgYmxvY2sgb2YgY29kZSwgdGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IG5vdCBpbmxpbmUgaXQuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayB0aGUgZnVuY3Rpb24ncyBzaXplIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDg6NTE6NDQuMTI1MDA0OTQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcG1yLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA1NyxcbiAgXCJMaW5lQ291bnRcIjogODZcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA1NzpcXHRzdGF0aWMgaW50IGlwbXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbjEwNTg6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydClcXG4xMDU5OlxcdHtcXG4xMDYwOlxcdFxcdGNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTtcXG4xMDYxOlxcdFxcdHN0cnVjdCBpbl9wa3RpbmZvICppbmZvO1xcbjEwNjI6XFx0XFx0c3RydWN0IHNvY2sgKm1yb3V0ZV9zaztcXG4xMDYzOlxcdFxcdHN0cnVjdCBpZ21waGRyICppZ21wO1xcbjEwNjQ6XFx0XFx0c3RydWN0IGlnbXBtc2cgKm1zZztcXG4xMDY1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTA2NjpcXHRcXHRpbnQgcmV0O1xcbjEwNjc6XFx0XFxuMTA2ODpcXHRcXHRtcm91dGVfc2sgPSByY3VfZGVyZWZlcmVuY2UobXJ0LVxcdTAwM2Vtcm91dGVfc2spO1xcbjEwNjk6XFx0XFx0aWYgKCFtcm91dGVfc2spXFxuMTA3MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDcxOlxcdFxcbjEwNzI6XFx0XFx0aWYgKGFzc2VydCA9PSBJR01QTVNHX1dIT0xFUEtUIHx8IGFzc2VydCA9PSBJR01QTVNHX1dSVklGV0hPTEUpXFxuMTA3MzpcXHRcXHRcXHRza2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShwa3QsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcXG4xMDc0OlxcdFxcdGVsc2VcXG4xMDc1OlxcdFxcdFxcdHNrYiA9IGFsbG9jX3NrYigxMjgsIEdGUF9BVE9NSUMpO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHRpZiAoIXNrYilcXG4xMDc4OlxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4xMDc5OlxcdFxcbjEwODA6XFx0XFx0aWYgKGFzc2VydCA9PSBJR01QTVNHX1dIT0xFUEtUIHx8IGFzc2VydCA9PSBJR01QTVNHX1dSVklGV0hPTEUpIHtcXG4xMDgxOlxcdFxcdFxcdC8qIFVnbHksIGJ1dCB3ZSBoYXZlIG5vIGNob2ljZSB3aXRoIHRoaXMgaW50ZXJmYWNlLlxcbjEwODI6XFx0XFx0XFx0ICogRHVwbGljYXRlIG9sZCBoZWFkZXIsIGZpeCBpaGwsIGxlbmd0aCBldGMuXFxuMTA4MzpcXHRcXHRcXHQgKiBBbmQgYWxsIHRoaXMgb25seSB0byBtYW5nbGUgbXNnLVxcdTAwM2VpbV9tc2d0eXBlIGFuZFxcbjEwODQ6XFx0XFx0XFx0ICogdG8gc2V0IG1zZy1cXHUwMDNlaW1fbWJ6IHRvIFxcXCJtYnpcXFwiIDotKVxcbjEwODU6XFx0XFx0XFx0ICovXFxuMTA4NjpcXHRcXHRcXHRza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcXG4xMDg3OlxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjEwODg6XFx0XFx0XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4xMDg5OlxcdFxcdFxcdG1zZyA9IChzdHJ1Y3QgaWdtcG1zZyAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjEwOTA6XFx0XFx0XFx0bWVtY3B5KG1zZywgc2tiX25ldHdvcmtfaGVhZGVyKHBrdCksIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcXG4xMDkxOlxcdFxcdFxcdG1zZy1cXHUwMDNlaW1fbXNndHlwZSA9IGFzc2VydDtcXG4xMDkyOlxcdFxcdFxcdG1zZy1cXHUwMDNlaW1fbWJ6ID0gMDtcXG4xMDkzOlxcdFxcdFxcdGlmIChhc3NlcnQgPT0gSUdNUE1TR19XUlZJRldIT0xFKSB7XFxuMTA5NDpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZiA9IHZpZmk7XFxuMTA5NTpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZl9oaSA9IHZpZmkgXFx1MDAzZVxcdTAwM2UgODtcXG4xMDk2OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTA5NzpcXHRcXHRcXHRcXHQvKiBQYWlycyB3aXRoIFdSSVRFX09OQ0UoKSBpbiB2aWZfYWRkKCkgYW5kIHZpZl9kZWxldGUoKSAqL1xcbjEwOTg6XFx0XFx0XFx0XFx0aW50IHZpZl9udW0gPSBSRUFEX09OQ0UobXJ0LVxcdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pO1xcbjEwOTk6XFx0XFxuMTEwMDpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZiA9IHZpZl9udW07XFxuMTEwMTpcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZl9oaSA9IHZpZl9udW0gXFx1MDAzZVxcdTAwM2UgODtcXG4xMTAyOlxcdFxcdFxcdH1cXG4xMTAzOlxcdFxcdFxcdGlwX2hkcihza2IpLVxcdTAwM2VpaGwgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSBcXHUwMDNlXFx1MDAzZSAyO1xcbjExMDQ6XFx0XFx0XFx0aXBfaGRyKHNrYiktXFx1MDAzZXRvdF9sZW4gPSBodG9ucyhudG9ocyhpcF9oZHIocGt0KS1cXHUwMDNldG90X2xlbikgK1xcbjExMDU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxuMTEwNjpcXHRcXHR9IGVsc2Uge1xcbjExMDc6XFx0XFx0XFx0LyogQ29weSB0aGUgSVAgaGVhZGVyICovXFxuMTEwODpcXHRcXHRcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiLVxcdTAwM2VsZW4pO1xcbjExMDk6XFx0XFx0XFx0c2tiX3B1dChza2IsIGlobCk7XFxuMTExMDpcXHRcXHRcXHRza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIHBrdC1cXHUwMDNlZGF0YSwgaWhsKTtcXG4xMTExOlxcdFxcdFxcdC8qIEZsYWcgdG8gdGhlIGtlcm5lbCB0aGlzIGlzIGEgcm91dGUgYWRkICovXFxuMTExMjpcXHRcXHRcXHRpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wgPSAwO1xcbjExMTM6XFx0XFx0XFx0bXNnID0gKHN0cnVjdCBpZ21wbXNnICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuMTExNDpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZiA9IHZpZmk7XFxuMTExNTpcXHRcXHRcXHRtc2ctXFx1MDAzZWltX3ZpZl9oaSA9IHZpZmkgXFx1MDAzZVxcdTAwM2UgODtcXG4xMTE2OlxcdFxcdFxcdGlwdjRfcGt0aW5mb19wcmVwYXJlKG1yb3V0ZV9zaywgcGt0LCBmYWxzZSk7XFxuMTExNzpcXHRcXHRcXHRpbmZvID0gUEtUSU5GT19TS0JfQ0Ioc2tiKTtcXG4xMTE4OlxcdFxcdFxcdG1lbXNldChza2ItXFx1MDAzZWNiLCAwLCBzaXplb2Yoc2tiLVxcdTAwM2VjYikpO1xcbjExMTk6XFx0XFx0XFx0aW5mby1cXHUwMDNlaXBpX2lmaW5kZXggPSBQS1RJTkZPX1NLQl9DQihwa3QpLVxcdTAwM2VpcGlfaWZpbmRleDtcXG4xMTIwOlxcdFxcdFxcdGluZm8tXFx1MDAzZWlwaV9zcGVjX2RzdCA9IFBLVElORk9fU0tCX0NCKHBrdCktXFx1MDAzZWlwaV9zcGVjX2RzdDtcXG4xMTIxOlxcdFxcdFxcdC8qIEFkZCBvdXIgaGVhZGVyLlxcbjExMjI6XFx0XFx0XFx0ICogTm90ZSB0aGF0IGNvZGUsIGNzdW0gYW5kIGdyb3VwIGZpZWxkcyBhcmUgY2xlYXJlZC5cXG4xMTIzOlxcdFxcdFxcdCAqL1xcbjExMjQ6XFx0XFx0XFx0aWdtcCA9IHNrYl9wdXRfemVybyhza2IsIHNpemVvZihzdHJ1Y3QgaWdtcGhkcikpO1xcbjExMjU6XFx0XFx0XFx0aWdtcC1cXHUwMDNldHlwZSA9IGFzc2VydDtcXG4xMTI2OlxcdFxcdFxcdG1zZy1cXHUwMDNlaW1fbXNndHlwZSA9IGFzc2VydDtcXG4xMTI3OlxcdFxcdFxcdGlwX2hkcihza2IpLVxcdTAwM2V0b3RfbGVuID0gaHRvbnMoc2tiLVxcdTAwM2VsZW4pO1xcdC8qIEZpeCB0aGUgbGVuZ3RoICovXFxuMTEyODpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyO1xcbjExMjk6XFx0XFx0fVxcbjExMzA6XFx0XFxuMTEzMTpcXHRcXHRpZ21wbXNnX25ldGxpbmtfZXZlbnQobXJ0LCBza2IpO1xcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHQvKiBEZWxpdmVyIHRvIG1yb3V0ZWQgKi9cXG4xMTM0OlxcdFxcdHJldCA9IHNvY2tfcXVldWVfcmN2X3NrYihtcm91dGVfc2ssIHNrYik7XFxuMTEzNTpcXHRcXG4xMTM2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMTEzNzpcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXFwibXJvdXRlOiBwZW5kaW5nIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIGVudHJpZXNcXFxcblxcXCIpO1xcbjExMzg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTEzOTpcXHRcXHR9XFxuMTE0MDpcXHRcXG4xMTQxOlxcdFxcdHJldHVybiByZXQ7XFxuMTE0MjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA4OjUxOjQ0LjEyNTE2Mjc0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE0MzYzNDc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVB2NCBNdWx0aWNhc3QgUm91dGluZyBDb2RlKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBkZXRlcm1pbmVkIGFmdGVyIGEgY2xvc2UgbG9vayBhdCB0aGlzIGNvZGUuIFRoaXMgODYtbGluZSBmdW5jdGlvbiwgKmlwbXJfY2FjaGVfcmVwb3J0KiwgaXNuJ3QgaW5saW5lZCwgd2hpY2ggaXMgZ29vZCB0byBrbm93IGZyb20gdGhlIHN0YXJ0LiBUbyBlbnN1cmUgSSBjYXB0dXJlIGFsbCByZWxldmFudCBkZXBlbmRlbmNpZXMsIEknbSBnb2luZyB0byBpbmNsdWRlICppcF9tcl9pbnB1dCosICppcF9tcl9vdXRwdXQqLCBhbmQgKmlwbXJfY2FjaGVfdW5yZXNvbHZlZCogaW4gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEkgYnJpZWZseSBjaGVja2VkIGlmICppcG1yX2NhY2hlX3JlcG9ydCogd2FzIGV4cG9ydGVkLCBidXQgaXQncyBzdGF0aWMsIHNvIHRoYXQgY2xhcmlmaWVzIHRoaW5ncy4gU2luY2UgKmlwbXJfY2FjaGVfcmVwb3J0KiBpcyBjYWxsZWQgZnJvbSBvdGhlciBrZXkgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgKmlwbXJfY2FjaGVfdW5yZXNvbHZlZCosICppcG1yX3ByZXBhcmVfeG1pdCosICppcF9tcl9mb3J3YXJkKiwgYW5kICpyZWdfdmlmX3htaXQqLCBJJ2xsIGFsc28gYWRkICppcF9tcl9mb3J3YXJkKiB0byBgRm9jdXNTeW1ib2xzYC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gKklQX01ST1VURSogZGVwZW5kcyBvbiAqSVBfTVVMVElDQVNUKiwgc28gdGhvc2UgdHdvIG5lZWQgdG8gYmUgaW4gYEVuYWJsZUNvbmZpZ3NgLiBJIGp1c3QgZG91YmxlLWNoZWNrZWQsIGFuZCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBzdHJpY3RseSAqcmVxdWlyZWQqIGJ1dCAqSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUyogbWlnaHQgYmUgdXNlZnVsIHRvIGVuYWJsZSwgYnV0IEkgd2lsbCBub3QgYWRkIGl0LiBJdCdzIHNhZmUgdG8gc2F5ICpJUF9NUk9VVEUqIGFuZCAqSVBfTVVMVElDQVNUKiBhcmUgc3VmZmljaWVudC5cblxuU28sIHRvIHN1bW1hcml6ZTpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBBYnNvbHV0ZWx5LCB0aGlzIGlzIGEgY2hhbmdlIHRoYXQgY291bGQgcmV2ZWFsIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy5cbiogICAqKkZvY3VzU3ltYm9sczoqKiAqaXBcXF9tclxcX2lucHV0KiwgKmlwXFxfbXJcXF9mb3J3YXJkKiwgKmlwbXJcXF9jYWNoZVxcX3VucmVzb2x2ZWQqIC0gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiAqSVBcXF9NUk9VVEUqLCAqSVBcXF9NVUxUSUNBU1QqIC0gVGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGBza2ItXHUwMDNlY2JgIGlzIGhhbmRsZWQgd2l0aGluICppcG1yX2NhY2hlX3JlcG9ydCogZHVyaW5nIHRoZSByZXBvcnRpbmcgb2YgbXVsdGljYXN0IHBhY2tldHMuIFRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIHdpdGhpbiB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBjb2RlIHRoYXQncyByZWFjaGFibGUgd2hlbiBtdWx0aWNhc3Qgcm91dGluZyBpcyBlbmFibGVkLCBtZWFuaW5nIHRoaXMgaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy5cblxuRmluYWxseSwgSSdsbCBjb25maXJtIHVzZXItc3BhY2UgYWNjZXNzaWJpbGl0eSB0byAqaXBtcl9jYWNoZV9yZXBvcnQqLiBTZW5kaW5nIG11bHRpY2FzdCBwYWNrZXRzIHRoYXQgdHJpZ2dlciBhIGNhY2hlIG1pc3MgaW4gdGhlIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIHNlbmRzIGFuIElHTVAgbWVzc2FnZSB0byB0aGUgbXJvdXRlIHNvY2tldCwgd2hpY2ggaXMgc3VmZmljaWVudC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY4NywiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwODo1MTo1Ni4yNjg4MDAyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzMTkzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBfTVVMVElDQVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbXJfaW5wdXRcIixcbiAgICBcImlwX21yX2ZvcndhcmRcIixcbiAgICBcImlwbXJfY2FjaGVfdW5yZXNvbHZlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBza2ItXFx1MDAzZWNiIGlzIGNvcGllZCBpbiBpcG1yX2NhY2hlX3JlcG9ydCB3aGVuIGEgbXVsdGljYXN0IHBhY2tldCBpcyByZXBvcnRlZCB0byB0aGUgbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjQgbXVsdGljYXN0IHJvdXRpbmcgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIG11bHRpY2FzdCByb3V0aW5nIGlzIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tcl9pbnB1dFwiLFxuICAgIFwiaXBfbXJfZm9yd2FyZFwiLFxuICAgIFwiaXBtcl9jYWNoZV91bnJlc29sdmVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNrYi1cXHUwMDNlY2IgaXMgY29waWVkIGluIGlwbXJfY2FjaGVfcmVwb3J0IHdoZW4gYSBtdWx0aWNhc3QgcGFja2V0IGlzIHJlcG9ydGVkIHRvIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBkYWVtb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NCBtdWx0aWNhc3Qgcm91dGluZyBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gbXVsdGljYXN0IHJvdXRpbmcgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvbzt2[1] Phase: Succeeded StartedAt: 2026-07-28 08:52:07 +0000 UTC FinishedAt: 2026-07-28 08:52:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 08:52:07 +0000 UTC FinishedAt: 2026-07-28 08:52:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2] Phase: Succeeded StartedAt: 2026-07-28 08:52:07 +0000 UTC FinishedAt: 2026-07-28 13:07:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 08:52:07 +0000 UTC FinishedAt: 2026-07-28 13:07:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 08:52:07 +0000 UTC FinishedAt: 2026-07-28 08:52:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 08:52:07 +0000 UTC FinishedAt: 2026-07-28 08:52:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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-workflowvbzt2/series-workflowvbzt2-convert-artifact-1065446712/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 08:52:17 +0000 UTC FinishedAt: 2026-07-28 09:24:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 08:52:17 +0000 UTC FinishedAt: 2026-07-28 09:24:31 +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:*96be336e-1bff-43b8-92e1-dc8ca311cbe9,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-workflowvbzt2/series-workflowvbzt2-convert-artifact-1065446712/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": "85bca994-5e15-4ce1-9971-df0073bf255c", "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-workflowvbzt2/series-workflowvbzt2-build-action-3451040494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 08:52:17 +0000 UTC FinishedAt: 2026-07-28 09:24:09 +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:*96be336e-1bff-43b8-92e1-dc8ca311cbe9,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-workflowvbzt2/series-workflowvbzt2-convert-artifact-1065446712/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": "85bca994-5e15-4ce1-9971-df0073bf255c", "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-workflowvbzt2/series-workflowvbzt2-build-action-3451040494/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 09:24:31 +0000 UTC FinishedAt: 2026-07-28 09:24:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 09:24:31 +0000 UTC FinishedAt: 2026-07-28 09:24:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 09:24:31 +0000 UTC FinishedAt: 2026-07-28 09:24:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 09:24:31 +0000 UTC FinishedAt: 2026-07-28 09:24:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-workflowvbzt2/series-workflowvbzt2-convert-artifact-3979810463/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 09:24:41 +0000 UTC FinishedAt: 2026-07-28 09:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 09:24:41 +0000 UTC FinishedAt: 2026-07-28 09:26:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*85bca994-5e15-4ce1-9971-df0073bf255c,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-workflowvbzt2/series-workflowvbzt2-build-action-3451040494/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-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 09:27:05 +0000 UTC FinishedAt: 2026-07-28 09:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 09:27:05 +0000 UTC FinishedAt: 2026-07-28 09:27:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 09:27:05 +0000 UTC FinishedAt: 2026-07-28 10:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 09:27:05 +0000 UTC FinishedAt: 2026-07-28 10:02:10 +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:*96be336e-1bff-43b8-92e1-dc8ca311cbe9,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-workflowvbzt2/series-workflowvbzt2-convert-artifact-3979810463/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": "4170aa46-bc6b-43e9-b4ff-5dda61c5d6b1", "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-workflowvbzt2/series-workflowvbzt2-build-action-1380116787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 09:27:05 +0000 UTC FinishedAt: 2026-07-28 10:02:00 +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:*96be336e-1bff-43b8-92e1-dc8ca311cbe9,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-workflowvbzt2/series-workflowvbzt2-convert-artifact-3979810463/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": "4170aa46-bc6b-43e9-b4ff-5dda61c5d6b1", "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-workflowvbzt2/series-workflowvbzt2-build-action-1380116787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:02:10 +0000 UTC FinishedAt: 2026-07-28 10:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:02:10 +0000 UTC FinishedAt: 2026-07-28 10:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:02:10 +0000 UTC FinishedAt: 2026-07-28 10:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:02:10 +0000 UTC FinishedAt: 2026-07-28 10:03:51 +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:*4170aa46-bc6b-43e9-b4ff-5dda61c5d6b1,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-workflowvbzt2/series-workflowvbzt2-build-action-1380116787/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-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:04:01 +0000 UTC FinishedAt: 2026-07-28 13:07:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:04:01 +0000 UTC FinishedAt: 2026-07-28 13:07:22 +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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"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:*85bca994-5e15-4ce1-9971-df0073bf255c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4170aa46-bc6b-43e9-b4ff-5dda61c5d6b1,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-workflowvbzt2/series-workflowvbzt2-build-action-3451040494/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-workflowvbzt2/series-workflowvbzt2-build-action-1380116787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:04:01 +0000 UTC FinishedAt: 2026-07-28 10:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:04:01 +0000 UTC FinishedAt: 2026-07-28 10:04:19 +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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"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-workflowvbzt2/series-workflowvbzt2-convert-artifact-2142769336/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:04:01 +0000 UTC FinishedAt: 2026-07-28 10:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:04:01 +0000 UTC FinishedAt: 2026-07-28 10:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:04:01 +0000 UTC FinishedAt: 2026-07-28 10:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:04:27 +0000 UTC FinishedAt: 2026-07-28 13:07:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbzt2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"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":["ip_mr_input","ip_mr_forward","ipmr_cache_unresolved"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"97ac08560d236ca17f6606d9e671118e5eae5721","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IP_MULTICAST"],"series_id":"37e6cacb-88fb-4dc2-9a2e-179393800649","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-28 10:04:27 +0000 UTC FinishedAt: 2026-07-28 13:07:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*85bca994-5e15-4ce1-9971-df0073bf255c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4170aa46-bc6b-43e9-b4ff-5dda61c5d6b1,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-workflowvbzt2/series-workflowvbzt2-build-action-3451040494/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-workflowvbzt2/series-workflowvbzt2-build-action-1380116787/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-workflowvbzt2/series-workflowvbzt2-convert-artifact-2142769336/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,}