Name: series-workflowg9sk7 Phase: Succeeded StartedAt: 2026-08-14 11:08:07 +0000 UTC FinishedAt: 2026-08-14 14:51:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[0] Phase: Succeeded StartedAt: 2026-08-14 11:08:07 +0000 UTC FinishedAt: 2026-08-14 11:11:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 11:08:07 +0000 UTC FinishedAt: 2026-08-14 11:11:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPLS", "MPLS_ROUTING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPLS", "MPLS_ROUTING" ], "series_id": "b33b2a58-1451-490e-a4df-087a33c1f2a9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mpls_forward", "mpls_getroute" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QTFMmIzM0OywKICAgICYjMzQ7TVBMU19ST1VUSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXBsc19mb3J3YXJkJiMzNDssCiAgICAmIzM0O21wbHNfZ2V0cm91dGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyB3aGVyZSBgcHNrYl9tYXlfcHVsbCgpYCBjYW4gcmVhbGxvY2F0ZSB0aGUgc2tiIGRhdGEgYnVmZmVyLCBpbnZhbGlkYXRpbmcgdGhlIHByZXZpb3VzbHkgY29tcHV0ZWQgYGhkcmAgcG9pbnRlci4gQWNjZXNzaW5nIGBoZHJgIGFmdGVyIGBwc2tiX21heV9wdWxsKClgIHdpdGhvdXQgcmVjb21wdXRpbmcgaXQgbGVhZHMgdG8gYSB1c2UtYWZ0ZXItZnJlZS4gVGhpcyB0eXBlIG9mIG1lbW9yeSBlcnJvciBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIGludm9sdmVkLCBzbyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAgYnkgcmVsb2FkaW5nIHRoZSBgaGRyYCBwb2ludGVyIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGxgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBUaGlzIGFmZmVjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjJmZTI3OWJhZDJmNGFkMzE5Y2RhZDExYTYwNGIxZmJhZjNmNTNhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDExOjEwOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcGxzL2FmX21wbHMuYyBiL25ldC9tcGxzL2FmX21wbHMuY1xuaW5kZXggOTYxYmU1MDU0YTAzOS4uMTdiNzhkY2JmOGFiYyAxMDA2NDRcbi0tLSBhL25ldC9tcGxzL2FmX21wbHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wbHMvYWZfbXBscy5jXG5AQCAtMjIxLDYgJiM0MzsyMjEsNyBAQCBzdGF0aWMgdTMyIG1wbHNfbXVsdGlwYXRoX2hhc2goc3RydWN0IG1wbHNfcm91dGUgKnJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAocHNrYl9tYXlfcHVsbChza2IsIG1wbHNfaGRyX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSkpIHtcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyO1xuIFxuJiM0MztcdFx0XHRoZHIgPSBtcGxzX2hkcihza2IpICYjNDM7IGxhYmVsX2luZGV4O1xuIFx0XHRcdHY0aGRyID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKShoZHIgJiM0MzsgMSk7XG4gXHRcdFx0aWYgKHY0aGRyLVx1MDAzZXZlcnNpb24gPT0gNCkge1xuIFx0XHRcdFx0aGFzaCA9IGpoYXNoXzN3b3JkcyhudG9obCh2NGhkci1cdTAwM2VzYWRkciksXG5AQCAtMjMxLDYgJiM0MzsyMzIsNyBAQCBzdGF0aWMgdTMyIG1wbHNfbXVsdGlwYXRoX2hhc2goc3RydWN0IG1wbHNfcm91dGUgKnJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKnY2aGRyO1xuIFxuJiM0MztcdFx0XHRcdGhkciA9IG1wbHNfaGRyKHNrYikgJiM0MzsgbGFiZWxfaW5kZXg7XG4gXHRcdFx0XHR2NmhkciA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKShoZHIgJiM0MzsgMSk7XG4gXHRcdFx0XHRoYXNoID0gX19pcHY2X2FkZHJfamhhc2goXHUwMDI2djZoZHItXHUwMDNlc2FkZHIsIGhhc2gpO1xuIFx0XHRcdFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFx1MDAyNnY2aGRyLVx1MDAzZWRhZGRyLCBoYXNoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBMUyYjMzQ7LAogICAgJiMzNDtNUExTX1JPVVRJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcGxzX2ZvcndhcmQmIzM0OywKICAgICYjMzQ7bXBsc19nZXRyb3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIHJlYWQgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGJ5IHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YS4gVGhpcyBhZmZlY3RzIE1QTFMgcGFja2V0IGZvcndhcmRpbmcgYW5kIHJvdXRlIHJldHJpZXZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyZmUyNzliYWQyZjRhZDMxOWNkYWQxMWE2MDRiMWZiYWYzZjUzYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxMToxMDowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tcGxzL2FmX21wbHMuYyBiL25ldC9tcGxzL2FmX21wbHMuYwppbmRleCA5NjFiZTUwNTRhMDM5Li4xN2I3OGRjYmY4YWJjIDEwMDY0NAotLS0gYS9uZXQvbXBscy9hZl9tcGxzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wbHMvYWZfbXBscy5jCkBAIC0yMjEsNiAmIzQzOzIyMSw3IEBAIHN0YXRpYyB1MzIgbXBsc19tdWx0aXBhdGhfaGFzaChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IpCiAJCWlmIChwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkgewogCQkJY29uc3Qgc3RydWN0IGlwaGRyICp2NGhkcjsKIAomIzQzOwkJCWhkciA9IG1wbHNfaGRyKHNrYikgJiM0MzsgbGFiZWxfaW5kZXg7CiAJCQl2NGhkciA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKikoaGRyICYjNDM7IDEpOwogCQkJaWYgKHY0aGRyLSZndDt2ZXJzaW9uID09IDQpIHsKIAkJCQloYXNoID0gamhhc2hfM3dvcmRzKG50b2hsKHY0aGRyLSZndDtzYWRkciksCkBAIC0yMzEsNiAmIzQzOzIzMiw3IEBAIHN0YXRpYyB1MzIgbXBsc19tdWx0aXBhdGhfaGFzaChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHsKIAkJCQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqdjZoZHI7CiAKJiM0MzsJCQkJaGRyID0gbXBsc19oZHIoc2tiKSAmIzQzOyBsYWJlbF9pbmRleDsKIAkJCQl2NmhkciA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKShoZHIgJiM0MzsgMSk7CiAJCQkJaGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKCZhbXA7djZoZHItJmd0O3NhZGRyLCBoYXNoKTsKIAkJCQloYXNoID0gX19pcHY2X2FkZHJfamhhc2goJmFtcDt2Nmhkci0mZ3Q7ZGFkZHIsIGhhc2gpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVBMUyBNdWx0aXBhdGggSGFzaCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB3aXRoaW4gYG5ldC9tcGxzL2FmX21wbHMuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGZpeGluZyBhIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmUtYXNzaWdubWVudCBvZiBgaGRyYCBhZnRlciBhIGBwc2tiX21heV9wdWxsYCBjYWxsOiBgaGRyID0gbXBsc19oZHIoc2tiKSAmIzQzOyBsYWJlbF9pbmRleDtgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHJlYWxsb2NhdGlvbiBwcm9ibGVtLiBUaGUgYHBza2JfbWF5X3B1bGxgIGZ1bmN0aW9uLCBhcyBJIHJlY2FsbCwgY2FuIHBvdGVudGlhbGx5IHJlYWxsb2NhdGUgdGhlIFNvY2tldCBCdWZmZXIgKHNrYikgZGF0YS4gSWYgdGhhdCBoYXBwZW5zLCBhbnkgcG9pbnRlcnMgdG8gdGhlIG9yaWdpbmFsIGRhdGEsIGluY2x1ZGluZyBvdXIgYGhkcmAgcG9pbnRlciwgd291bGQgYmVjb21lIGludmFsaWQuIFRoZXJlZm9yZSwgcmUtY2FsY3VsYXRpbmcgdGhlIGBoZHJgIG9mZnNldCBwb3N0LWBwc2tiX21heV9wdWxsYCBpcyBhIHNtYXJ0IGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0YWN0aWMuIEl0IGVuc3VyZXMgd2UmIzM5O3JlIGFsd2F5cyB3b3JraW5nIHdpdGggYSB2YWxpZCBwb2ludGVyIHRvIHRoZSBNUExTIGhlYWRlciwgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBza2IgaGFzIGJlZW4gbW92ZWQgaW4gbWVtb3J5LiBJIHdpbGwgbm93IGV4YW1pbmUgYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGluIGBuZXQvbXBscy9hZl9tcGxzLmNgIHRvIGZ1cnRoZXIgY29uZmlybSB0aGVzZSBzdXNwaWNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wbHNfbXVsdGlwYXRoX2hhc2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9hZl9tcGxzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jPTE3OD1FWFBPUlRfU1lNQk9MX0dQTChtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMpO1xubmV0L21wbHMvYWZfbXBscy5jLTE3OS1cbm5ldC9tcGxzL2FmX21wbHMuYzoxODA6c3RhdGljIHUzMiBtcGxzX211bHRpcGF0aF9oYXNoKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcGxzL2FmX21wbHMuYy0xODEte1xuLS1cbm5ldC9tcGxzL2FmX21wbHMuYz0yNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBtcGxzX25oICptcGxzX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IG1wbHNfcm91dGUgKnJ0LFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yNzYtXG5uZXQvbXBscy9hZl9tcGxzLmM6Mjc3Olx0aGFzaCA9IG1wbHNfbXVsdGlwYXRoX2hhc2gocnQsIHNrYik7XG5uZXQvbXBscy9hZl9tcGxzLmMtMjc4LVx0bmhfaW5kZXggPSBoYXNoICUgYWxpdmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTXVsdGlwYXRoIEhhc2hpbmcgTG9naWMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbXBsc19tdWx0aXBhdGhfaGFzaGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIHRoZSBtdWx0aXBhdGggc2VsZWN0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSBiZWluZyBpbnZva2VkIGJ5IGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAuIFdoZXJlIGlzICp0aGF0KiBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgb2YgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAgd2lsbCBnaXZlIG1lIGludmFsdWFibGUgaW5zaWdodCBpbnRvIHRoZSBoaWdoZXItbGV2ZWwgbG9naWMgZmxvdyBhbmQgdHJpZ2dlciBjb25kaXRpb25zIHRoYXQgdWx0aW1hdGVseSByZWx5IG9uIHRoaXMgaGFzaGluZyBtZWNoYW5pc20uIEl0JiMzOTtzIGFsbCBhYm91dCB0cmFjaW5nIHRoZSBkZXBlbmRlbmN5IGNoYWluIHRvIGZ1bGx5IGdyYXNwIHRoZSBvcGVyYXRpb25hbCBpbXBhY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmRyaXZpbmcqIHRoaXMgc2VsZWN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXBsc19zZWxlY3RfbXVsdGlwYXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL2FmX21wbHMuYz0yNDk9c3RhdGljIHN0cnVjdCBtcGxzX25oICptcGxzX2dldF9uZXh0aG9wKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgdTggaW5kZXgpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTI1OC0gKi9cbm5ldC9tcGxzL2FmX21wbHMuYzoyNTk6c3RhdGljIGNvbnN0IHN0cnVjdCBtcGxzX25oICptcGxzX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IG1wbHNfcm91dGUgKnJ0LFxubmV0L21wbHMvYWZfbXBscy5jLTI2MC1cdFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYz0zNjc9c3RhdGljIGludCBtcGxzX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmMtNDE3LVxubmV0L21wbHMvYWZfbXBscy5jOjQxODpcdG5oID0gbXBsc19zZWxlY3RfbXVsdGlwYXRoKHJ0LCBza2IpO1xubmV0L21wbHMvYWZfbXBscy5jLTQxOS1cdGlmICghbmgpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jPTI0MTM9c3RhdGljIGludCBtcGxzX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqaW5fbmxoLFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yNTIxLVxubmV0L21wbHMvYWZfbXBscy5jOjI1MjI6XHRuaCA9IG1wbHNfc2VsZWN0X211bHRpcGF0aChydCwgc2tiKTtcbm5ldC9tcGxzL2FmX21wbHMuYy0yNTIzLVx0aWYgKCFuaCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNUExTIEZvcndhcmRpbmcgTG9naWMgUmV2aWV3KioKCk9rYXksIHNvIGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAgYm90aCB1bHRpbWF0ZWx5IGZ1bm5lbCBpbnRvIGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgLiBUaGF0JiMzOTtzIHRoZSBoZWFydCBvZiB0aGUgTVBMUyBmb3J3YXJkaW5nIHByb2Nlc3MsIHRoZSBjb3JlIGtlcm5lbCBsb2dpYy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZsb3cgY29tcGxldGVseS4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSB0byBlbnN1cmUgdGhlIE1QTFMgY29uZmlndXJhdGlvbiBpcyB3aGF0IEkgZXhwZWN0LiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBjb25maXJtIHRoZSBiYXNpY3MgYmVmb3JlIGRpc3NlY3RpbmcgdGhlIG1vcmUgY29tcGxleCBicmFuY2hpbmcgbG9naWMgd2l0aGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNUExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wbHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL0tjb25maWctNS1cbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcbm5ldC9tcGxzL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7TXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcJiMzNDtcbi0tXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cbi0tXG5uZXQvbXBscy9LY29uZmlnLTI1LVxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXG5uZXQvbXBscy9LY29uZmlnLTI3LVx0dHJpc3RhdGUgXCYjMzQ7TVBMUzogcm91dGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21wbHMvS2NvbmZpZy0zMi1cbm5ldC9tcGxzL0tjb25maWc6MzM6Y29uZmlnIE1QTFNfSVBUVU5ORUxcbm5ldC9tcGxzL0tjb25maWctMzQtXHR0cmlzdGF0ZSBcJiMzNDtNUExTOiBJUCBvdmVyIE1QTFMgdHVubmVsIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBNUExTIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhlIGBhZl9tcGxzLmNgIG1vZHVsZSBnZXRzIGJ1aWx0LiBUaW1lIHRvIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIGNoZWNrIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMuIEkmIzM5O2xsIG9wZW4gdXAgYG5ldC9tcGxzL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZXhwbGljaXQgZGVwZW5kZW5jaWVzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCB0byBicmluZyB0aGF0IHBpZWNlIG9mIHRoZSBwdXp6bGUgdG9nZXRoZXIuIEkgZXhwZWN0IGl0JiMzOTtzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgYnV0IGl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHByZWNpc2UgYW5kIGNvbmZpcm0gdGhlIHNwZWNpZmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZfbXBscyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcGxzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX01QTFNfSVBUVU5ORUwpICYjNDM7PSBtcGxzX2lwdHVubmVsLm9cbm5ldC9tcGxzL01ha2VmaWxlLTgtXG5uZXQvbXBscy9NYWtlZmlsZTo5Om1wbHNfcm91dGVyLXkgOj0gYWZfbXBscy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIGBtcGxzX3JvdXRlci15YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1wbHNfcm91dGVyLXlgLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUmIzM5O3MgdGhpcyB0aGluZyBldmVuIGNvbWluZyBmcm9tPyYjMzQ7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBjaGFpbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCYjMzk7cyBiZWluZyBjb21waWxlZC4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIOKAkyBpbiB0aGlzIGNhc2UsIGl0JiMzOTtzIHByZXR0eSBvYnZpb3VzIHRoYXQgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBNUExTLCBJIHNob3VsZCBjaGVjayB0aGUgYG5ldC9tcGxzL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBpcyBtb3N0IGxpa2VseS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHRyYWNrIGRvd24gdGhvc2UgY29tcGlsYXRpb24gdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXBscy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBNUExTLlxuICAgNDpcdCNcbiAgIDU6XHRvYmotJChDT05GSUdfTkVUX01QTFNfR1NPKSAmIzQzOz0gbXBsc19nc28ub1xuICAgNjpcdG9iai0kKENPTkZJR19NUExTX1JPVVRJTkcpICYjNDM7PSBtcGxzX3JvdXRlci5vXG4gICA3Olx0b2JqLSQoQ09ORklHX01QTFNfSVBUVU5ORUwpICYjNDM7PSBtcGxzX2lwdHVubmVsLm9cbiAgIDg6XHRcbiAgIDk6XHRtcGxzX3JvdXRlci15IDo9IGFmX21wbHMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBNUExTIFJvdXRpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBrZXJuZWwgYnVpbGRzIHRoZSBNUExTIHJvdXRpbmcgY29tcG9uZW50cy4gSSBzZWUgdGhhdCBgQ09ORklHX01QTFNfUk9VVElOR2AgaXMgdGhlIGtleSBoZXJlOyBpdCBkaXJlY3RseSBsZWFkcyB0byB0aGUgY29tcGlsYXRpb24gb2YgYG1wbHNfcm91dGVyLm9gLCBhbmQsIGNydWNpYWxseSwgdGhhdCBpbmNsdWRlcyBgYWZfbXBscy5vYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBwYXJ0IEkgbmVlZCB0byB1bmRlcnN0YW5kLgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCB0aGlzIGlzIGFsbCBkcml2ZW4gYnkgdGhlIGBNUExTX1JPVVRJTkdgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBoaWRkZW4gc3VycHJpc2VzIG9yIHJlbGF0ZWQgY29uZmlncyB0aGF0IGluZmx1ZW5jZSB0aGlzIGJ1aWxkLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvbXBscy9LY29uZmlnYCB0byBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGdvaW5nIG9uIGJlaGluZCB0aGUgc2NlbmVzIHdpdGggdGhpcyBgTVBMU19ST1VUSU5HYCBvcHRpb24uIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcyBmb3IgYSBmdWxsIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wbHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O01QTFM6IEdTTyBzdXBwb3J0XCYjMzQ7XG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgVGhpcyBpcyBoZWxwZXIgbW9kdWxlIHRvIGFsbG93IHNlZ21lbnRhdGlvbiBvZiBub24tTVBMUyBHU08gcGFja2V0c1xuICAyMzpcdFx0IHRoYXQgaGF2ZSBoYWQgTVBMUyBzdGFjayBlbnRyaWVzIHB1c2hlZCBvbnRvIHRoZW0gYW5kIHRodXNcbiAgMjQ6XHRcdCBiZWNvbWUgTVBMUyBHU08gcGFja2V0cy5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgTVBMU19ST1VUSU5HXG4gIDI3Olx0XHR0cmlzdGF0ZSBcJiMzNDtNUExTOiByb3V0aW5nIHN1cHBvcnRcJiMzNDtcbiAgMjg6XHRcdGRlcGVuZHMgb24gTkVUX0lQX1RVTk5FTCB8fCBORVRfSVBfVFVOTkVMPW5cbiAgMjk6XHRcdGRlcGVuZHMgb24gUFJPQ19TWVNDVExcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCBBZGQgc3VwcG9ydCBmb3IgZm9yd2FyZGluZyBvZiBtcGxzIHBhY2tldHMuXG4gIDMyOlx0XG4gIDMzOlx0Y29uZmlnIE1QTFNfSVBUVU5ORUxcbiAgMzQ6XHRcdHRyaXN0YXRlIFwmIzM0O01QTFM6IElQIG92ZXIgTVBMUyB0dW5uZWwgc3VwcG9ydFwmIzM0O1xuICAzNTpcdFx0ZGVwZW5kcyBvbiBMV1RVTk5FTCBcdTAwMjZcdTAwMjYgTVBMU19ST1VUSU5HXG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgbXBscyBpcCB0dW5uZWwgc3VwcG9ydC5cbiAgMzg6XHRcbiAgMzk6XHRlbmRpZiAjIE1QTFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNUExTIFJvdXRpbmcgTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgTVBMU19ST1VUSU5HYC4gSSBzZWUgaW1tZWRpYXRlbHkgdGhhdCBpdHMgY29uZmlndXJhdGlvbiBkZXBlbmRzIG9uIGJvdGggYE5FVF9JUF9UVU5ORUxgIChvciwgY3J1Y2lhbGx5LCBiZWluZyAqdW5zZXQqIHRvIGVuc3VyZSB0dW5uZWwgZnVuY3Rpb25hbGl0eSBpc24mIzM5O3QgcHJlc2VudCkgYW5kIGBQUk9DX1NZU0NUTGAuIFNlZW1zIGxvZ2ljYWwuIEl0JiMzOTtzIHVuZGVyIHRoZSBgbWVudWNvbmZpZyBNUExTYCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBNUExTYCBhbmQgYE1QTFNfUk9VVElOR2AgYXJlIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gZ2V0IHRoaXMgY29kZSBpbnZvbHZlZC4gR29vZCwgSSBrbm93IHRoZSBkZXBlbmRlbmNpZXMuCgpOb3csIHRoaXMgcGF0Y2guLi4gdGhpcyBpcyBpbnRlcmVzdGluZy4gVGhleSYjMzk7cmUgc2F5aW5nIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIGBwc2tiX21heV9wdWxsYCBwb3NzaWJseSByZWFsbG9jYXRpbmcgdGhlIGBza2JgIGRhdGEsIGJ1dCBub3QgdXBkYXRpbmcgdGhlIGBoZHJgIHBvaW50ZXIuIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHRoZXkgdHJ5IHRvIGFjY2VzcyBgdjRoZHJgIG9yIGB2NmhkcmAuIERlZmluaXRlbHkgYSB2dWxuZXJhYmlsaXR5IGNhbmRpZGF0ZS4gVGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggdGhyb3dpbmcgZnV6emluZyBhdC4gSSYjMzk7bGwgZmxhZyBpdCBmb3IgZGV0YWlsZWQgZnV6emluZywgdG8gYmUgY2VydGFpbi4KCkxldCYjMzk7cyBzZWUsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIGJlIGZvY3VzaW5nIG9uIGhlcmU/IEkgc2VlIGBtcGxzX211bHRpcGF0aF9oYXNoYCBhbmQgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAgYXJlIGJvdGggc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLiBgbXBsc19mb3J3YXJkYCBpcyBhbHNvIHN0YXRpYy4uLiB3YWl0IGEgc2Vjb25kLi4uIGBtcGxzX2ZvcndhcmRgIGlzIHJlZ2lzdGVyZWQgYXMgYSAqcGFja2V0IGhhbmRsZXIqPyBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCEgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgYWZfbXBscy5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBlbnRyeSBwb2ludCBpcywgYW5kIHRoYXQgd2lsbCBnaXZlIG1lIG15IGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcGxzX2ZvcndhcmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9hZl9tcGxzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jPTI5NT1zdGF0aWMgYm9vbCBtcGxzX2VncmVzcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcGxzX3JvdXRlICpydCxcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmMtMzY2LVxubmV0L21wbHMvYWZfbXBscy5jOjM2NzpzdGF0aWMgaW50IG1wbHNfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L21wbHMvYWZfbXBscy5jLTM2OC1cdFx0XHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jPTUwNT1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIG1wbHNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHtcbm5ldC9tcGxzL2FmX21wbHMuYy01MDYtXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01QTFNfVUMpLFxubmV0L21wbHMvYWZfbXBscy5jOjUwNzpcdC5mdW5jID0gbXBsc19mb3J3YXJkLFxubmV0L21wbHMvYWZfbXBscy5jLTUwOC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTE4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIE1QTFMgRm9yd2FyZGluZyBpbiB0aGUgUmVjZWl2ZSBQYXRoKioKCkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXMgdXNpbmcgYG1wbHNfZm9yd2FyZGAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gKGAuZnVuY2ApIGZvciBoYW5kbGluZyBgbXBsc19wYWNrZXRfdHlwZWAuIFRoYXQgc2VlbXMgbG9naWNhbDsgaXQmIzM5O3MgdGhlIGV4cGVjdGVkIGVudHJ5IHBvaW50IGZvciBNUExTIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBuZXR3b3JrJiMzOTtzIHJlY2VpdmUgcGF0aC4gVGhhdCBtYWtlcyBzZW5zZS4gSG93ZXZlciwgYmVmb3JlIEkgZmluYWxpemUgdGhpcyB1bmRlcnN0YW5kaW5nLCBJIHNob3VsZCBjcm9zcy1yZWZlcmVuY2UgdGhpcyBhbmQgZW5zdXJlIHRoYXQgaXQgaXMgbm90IGJlaW5nIGRvbmUgZWxzZXdoZXJlLgoKSSBzaG91bGQgYWxzbyBxdWlja2x5IGNvbnNpZGVyIGlmIGBtcGxzX2dldHJvdXRlYCBpcyBkb2luZyBhbnkgcGFydCBvZiB0aGlzIHRhc2suIEl0IGlzIHBvc3NpYmxlIHRoYXQgYG1wbHNfZ2V0cm91dGVgIGhhbmRsZXMgdGhpcyB0cmFmZmljIGFuZCB0aHVzIGRvZXMgbm90IHVzZSBgbXBsc19mb3J3YXJkYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBob3cgYG1wbHNfZ2V0cm91dGVgIGlzIGltcGxlbWVudGVkIHRvIG1ha2Ugc3VyZSBpdCBkb2VzbiYjMzk7dCBhbHNvIHBsYXkgYSBzaWduaWZpY2FudCByb2xlLiBHb3R0YSBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSBpbiB0aGUgZm9yd2FyZGluZyBwbGFuZS4gV2UgY2FuJiMzOTt0IGhhdmUgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wbHNfZ2V0cm91dGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9hZl9tcGxzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jPTIzNTU9c3RhdGljIGludCBtcGxzX3ZhbGlkX2dldHJvdXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yNDEyLVxubmV0L21wbHMvYWZfbXBscy5jOjI0MTM6c3RhdGljIGludCBtcGxzX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqaW5fbmxoLFxubmV0L21wbHMvYWZfbXBscy5jLTI0MTQtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmM9MjgyOD1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbXBsc19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGRhdGFfb3JfbW9kdWxlID0ge1xuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yODMyLVx0IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbm5ldC9tcGxzL2FmX21wbHMuYzoyODMzOlx0e1RISVNfTU9EVUxFLCBQRl9NUExTLCBSVE1fR0VUUk9VVEUsIG1wbHNfZ2V0cm91dGUsIG1wbHNfZHVtcF9yb3V0ZXMsXG5uZXQvbXBscy9hZl9tcGxzLmMtMjgzNC1cdCBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYG1wbHNfZ2V0cm91dGVgIGFzIGEgUG90ZW50aWFsIFRlc3QgRW50cnlwb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1wbHNfZ2V0cm91dGVgLiBJdCYjMzk7cyBhIGhhbmRsZXIgZm9yIGBSVE1fR0VUUk9VVEVgIHdpdGhpbiB0aGUgYFBGX01QTFNgIGZhbWlseSwgbWVhbmluZyBpdCYjMzk7cyBhbiBSVE5MIChSb3V0aW5nIFRhYmxlIE5ldGxpbmspIGhhbmRsZXIuIFRoYXQgc291bmRzIGxpa2UgYSBkZWNlbnQgcGxhY2UgdG8gc3RhcnQsIGRlZmluaXRlbHkgbm90IGEgaG90LXBhdGggZnVuY3Rpb24sIHVubGlrZSwgc2F5LCBgbXBsc19mb3J3YXJkYCB3aGljaCBpcywgb2J2aW91c2x5LCBpbnZvbHZlZCBpbiBwYWNrZXQgZm9yd2FyZGluZyBhbmQgdGh1cywgcGVyZm9ybWFuY2UgY3JpdGljYWwuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIHRob3NlLiBTbywgYG1wbHNfZ2V0cm91dGVgIGlzIGdvb2QsIGEgbmV0bGluayBoYW5kbGVyIGlzIGV4YWN0bHkgd2hhdCB0aGV5IGFyZSBhc2tpbmcgZm9yLgoKSG1tLCB3YWl0LiBJcyBgbXBsc19nZXRyb3V0ZWAgc3RhdGljPyBBaCwgeWVzLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IG1wbHNfZ2V0cm91dGUoLi4uKWAuIFRoZSBwcm9tcHQgc3BlY2lmaWVzOiAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4mIzM0OyBUaGF0JiMzOTtzIGEgYml0IG9mIGEgd3JpbmtsZS4gSG93ZXZlciwgaXQgKmlzKiBhbiBBUEkgZW50cnlwb2ludCwgaXQmIzM5O3MgdGhlIG5ldGxpbmsgaGFuZGxlciBmdW5jdGlvbiwgZXZlbiBpZiBpdCAqaXMqIHN0YXRpYy4gSXQmIzM5O3MgYSBkaXJlY3QgaW50ZXJmYWNlIHRvIHRoZSBrZXJuZWwmIzM5O3Mgcm91dGluZyBpbmZvcm1hdGlvbi4KClNvLCBhbHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHN0aWxsIGFuIEFQSSBlbnRyeXBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSwganVzdCB0byBiZSBzdXJlLCBhbmQgdG8gY29tcGx5IHByZWNpc2VseSB3aXRoIHRoZSBndWlkZWxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL2FmX21wbHMuYz0xMTI9Ym9vbCBtcGxzX291dHB1dF9wb3NzaWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0xMTUtfVxubmV0L21wbHMvYWZfbXBscy5jOjExNjpFWFBPUlRfU1lNQk9MX0dQTChtcGxzX291dHB1dF9wb3NzaWJsZSk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMTE3LVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYz0xMzU9dW5zaWduZWQgaW50IG1wbHNfZGV2X210dShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0xMzktfVxubmV0L21wbHMvYWZfbXBscy5jOjE0MDpFWFBPUlRfU1lNQk9MX0dQTChtcGxzX2Rldl9tdHUpO1xubmV0L21wbHMvYWZfbXBscy5jLTE0MS1cbm5ldC9tcGxzL2FmX21wbHMuYz0xNDI9Ym9vbCBtcGxzX3BrdF90b29fYmlnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBtdHUpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTE1MS19XG5uZXQvbXBscy9hZl9tcGxzLmM6MTUyOkVYUE9SVF9TWU1CT0xfR1BMKG1wbHNfcGt0X3Rvb19iaWcpO1xubmV0L21wbHMvYWZfbXBscy5jLTE1My1cbm5ldC9tcGxzL2FmX21wbHMuYz0xNTQ9dm9pZCBtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0xNzctfVxubmV0L21wbHMvYWZfbXBscy5jOjE3ODpFWFBPUlRfU1lNQk9MX0dQTChtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMpO1xubmV0L21wbHMvYWZfbXBscy5jLTE3OS1cbi0tXG5uZXQvbXBscy9hZl9tcGxzLmM9MTc0Nz1pbnQgbmxhX3B1dF9sYWJlbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0xNzY2LX1cbm5ldC9tcGxzL2FmX21wbHMuYzoxNzY3OkVYUE9SVF9TWU1CT0xfR1BMKG5sYV9wdXRfbGFiZWxzKTtcbm5ldC9tcGxzL2FmX21wbHMuYy0xNzY4LVxubmV0L21wbHMvYWZfbXBscy5jPTE3Njk9aW50IG5sYV9nZXRfbGFiZWxzKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgdTggbWF4X2xhYmVscywgdTggKmxhYmVscyxcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmMtMTg0Ny19XG5uZXQvbXBscy9hZl9tcGxzLmM6MTg0ODpFWFBPUlRfU1lNQk9MX0dQTChubGFfZ2V0X2xhYmVscyk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMTg0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIE1QTFMgUm91dGluZzogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgTVBMUyBjb2RlLCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBwbGFjZXMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgbm9uZSBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRob3NlIGhhc2ggb3IgbXVsdGlwYXRoIHNlbGVjdGlvbiBmdW5jdGlvbnMsIHdoaWNoIGlzIGZpbmUsIGJ1dCBJIG5lZWQgYW4gZW50cnkgcG9pbnQuIExvb2tpbmcgYXQgdGhlIGNhbGwgc2l0ZXMgb2YgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAsIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAuCgpBbHJpZ2h0LCBgbXBsc19nZXRyb3V0ZWAgaXMgYSBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGV4Y2VsbGVudCEgTmV0bGluayBoYW5kbGVycyBhcmUgdXN1YWxseSBwcmV0dHkgZWFzeSB0byB0cmlnZ2VyIHdpdGggY3JhZnRlZCBtZXNzYWdlcywgbWFraW5nIHRoZW0gaWRlYWwgdGFyZ2V0cyBmb3IgZnV6emluZy4gYG1wbHNfZm9yd2FyZGAgaXMgYSBwYWNrZXQgaGFuZGxlciwgc28gdGhlb3JldGljYWxseSBpdCYjMzk7cyBhbHNvIGEgZ29vZCBjaG9pY2UuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBhIGhvdC1wYXRoIGZ1bmN0aW9uOyB3aGljaCBpcyBub3QgaWRlYWwgZm9yIGZ1enppbmcuCgpXYWl0IGEgc2Vjb25k4oCmIGBtcGxzX2ZvcndhcmRgIGlzIHJlZ2lzdGVyZWQgYXMgYSBwYWNrZXQgdHlwZSBoYW5kbGVyPyAqVGhhdCogbWVhbnMgaXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHJlY2VpdmluZyBNUExTIHBhY2tldHMg4oCTIGJpbmdvISBJcyBpdCBzdGF0aWM/IFllcy4gSXMgYG1wbHNfZ2V0cm91dGVgIHN0YXRpYz8gWWVzLiBTbyBub3cgSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBvbmVzLCBqdXN0IHRvIGhhdmUgYSB3aWRlciBzY29wZS4gQnV0IG15IG1haW4gZ29hbCBpcyB0byBmdXp6IHRoZSAqbW9kaWZpZWQqIGxvZ2ljLCB3aGljaCBtYWtlcyB0aGUgY2hvaWNlIGV2ZW4gc2ltcGxlci4KCkNvbnNpZGVyaW5nIHRoYXQgYG1wbHNfZ2V0cm91dGVgIGlzIGEgbmV0bGluayBoYW5kbGVyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSB0b3AgY29udGVuZGVyIGZvciBub3cuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIG5ldGxpbmsgaGFuZGxlcnMgaW52b2x2ZWQgaW4gdGhpcyBjb2RlIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgYXR0YWNrIHZlY3RvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wbHNfcnRubF9tc2dfaGFuZGxlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9hZl9tcGxzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jPTI4MjI9c3RhdGljIHN0cnVjdCBydG5sX2FmX29wcyBtcGxzX2FmX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yODI3LVxubmV0L21wbHMvYWZfbXBscy5jOjI4Mjg6c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIG1wbHNfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRkYXRhX29yX21vZHVsZSA9IHtcbm5ldC9tcGxzL2FmX21wbHMuYy0yODI5LVx0e1RISVNfTU9EVUxFLCBQRl9NUExTLCBSVE1fTkVXUk9VVEUsIG1wbHNfcnRtX25ld3JvdXRlLCBOVUxMLFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYz0yODQwPXN0YXRpYyBpbnQgX19pbml0IG1wbHNfaW5pdCh2b2lkKVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yODU5LVxubmV0L21wbHMvYWZfbXBscy5jOjI4NjA6XHRlcnIgPSBydG5sX3JlZ2lzdGVyX21hbnkobXBsc19ydG5sX21zZ19oYW5kbGVycyk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMjg2MS1cdGlmIChlcnIpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTI4NzQtb3V0X3VucmVnaXN0ZXJfcnRubDpcbm5ldC9tcGxzL2FmX21wbHMuYzoyODc1Olx0cnRubF91bnJlZ2lzdGVyX21hbnkobXBsc19ydG5sX21zZ19oYW5kbGVycyk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMjg3Ni1vdXRfdW5yZWdpc3Rlcl9ydG5sX2FmOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzUxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNUExTIFJvdXRlIFNlbGVjdGlvbiBhbmQgUGF0Y2ggSW1wYWN0KioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBhZl9tcGxzLmNgIGZpbGUgYW5kIGl0cyBhc3NvY2lhdGVkIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGluIGxpZ2h0IG9mIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYG1wbHNfcnRtX25ld3JvdXRlYCBpcyBhIG5ldGxpbmsgaGFuZGxlciwgYnV0IGl0IGRvZXNuJiMzOTt0IGRpcmVjdGx5IGNhbGwgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAuIE5vLCBpdCBjcmVhdGVzIHJvdXRlcy4gTm93LCBgbXBsc19nZXRyb3V0ZWAgKmRvZXMqIGNhbGwgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAuIFRoYXQgc2VlbXMgcHJvbWlzaW5nLCBidXQgd2FpdCBhIG1pbnV0ZSwgdGhlIG1haW4gcGFja2V0IHByb2Nlc3NpbmcgZnVuY3Rpb24sIGBtcGxzX2ZvcndhcmRgLCBpcyB0aGUgcHJpbWFyeSB0cmlnZ2VyIGZvciBgbXBsc19zZWxlY3RfbXVsdGlwYXRoYCAqd2l0aCogYW4gYWN0dWFsIHBhY2tldC4gU28sIEkgbmVlZCB0byBpbmNsdWRlIGJvdGggYG1wbHNfZ2V0cm91dGVgIGFuZCBgbXBsc19mb3J3YXJkYCBpbiBteSBhbmFseXNpcy4KClRoZSBwcm9tcHQgc3BlY2lmaWVkIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0IG1lIGNoZWNrLi4uIGJlY2F1c2UgYG1wbHNfZ2V0cm91dGVgIGFuZCBgbXBsc19mb3J3YXJkYCBhcmUgcmVnaXN0ZXJlZCBhcyBmdW5jdGlvbiBwb2ludGVycyAoaW4gYHJ0bmxfbXNnX2hhbmRsZXJgIGFuZCBgcGFja2V0X3R5cGVgKSwgdGhleSBjYW5ub3QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRoYXQmIzM5O3MgZ29vZC4gVGhleSB3aWxsIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgc28gdGhleSBhcmUgcGVyZmVjdGx5IGZpbmUgdG8gdXNlLgoKTGV0JiMzOTtzIHZlcmlmeSB0aGUgY29uZmlncy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYE1QTFNgIGFuZCBgTVBMU19ST1VUSU5HYC4gQWgsIGBNUExTX1JPVVRJTkdgIGhhcyBhIGRlcGVuZGVuY3ksIGl0IG5lZWRzIGBORVRfSVBfVFVOTkVMIHx8IE5FVF9JUF9UVU5ORUw9bmAuIEFscmlnaHQsIGlzIGBNUExTX1JPVVRJTkdgIHN1ZmZpY2llbnQ/IFllcywgaXQgbG9va3MgbGlrZSBgTVBMU19ST1VUSU5HYCBpcyB0aGUgY29uZmlnIHRoYXQgYnVpbGRzIGBhZl9tcGxzLmNgLiBObyBuZWVkIGZvciBgTVBMU19JUFRVTk5FTGAgZm9yIHRoaXMgcGFydC4KCk5vdywgcmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGYuIEFoLCB0aGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIHJlYWQgZml4LiBUaGUgYGhkcmAgcG9pbnRlciBpcyBiZWluZyB1c2VkIGFmdGVyIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhLiBTbywgdGhlIHBhdGNoIGlzIHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciB0aGUgcG90ZW50aWFsIHJlYWxsb2NhdGlvbi4gVGhpcyBkZWZpbml0ZWx5IGhhcyBmdW5jdGlvbmFsIGltcGFjdCBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHN0YWJpbGl0eS4KCkxldCYjMzk7cyBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcy4gYG1wbHNfZm9yd2FyZGAgaXMgc3RhdGljOiBgc3RhdGljIGludCBtcGxzX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KWAuIEFuZCBgbXBsc19nZXRyb3V0ZWAgaXMgc3RhdGljIGFzIHdlbGw6IGBzdGF0aWMgaW50IG1wbHNfZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICppbl9ubGgsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylgLiBBbHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4sIHNvIHRoZXkgY2Fubm90IGJlIGlubGluZWQuCgpBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0byBjb25zaWRlcj8gTGV0IG1lIHNlZS4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGlzIGFsc28gc3RhdGljLCBhbmQgaXRzIGFkZHJlc3MgaXNuJiMzOTt0IHRha2VuLiBJdCBtaWdodCBiZSBpbmxpbmVkLiBJIHNob3VsZCBhdm9pZCB1c2luZyBgbXBsc19tdWx0aXBhdGhfaGFzaGAgZm9yIHRoYXQgcmVhc29uLgoKU28sIHRvIHN1bW1hcml6ZTogdGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIHJlYWQgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGJ5IHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggbWlnaHQgcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlci4gVGhpcyBpbXBhY3RzIE1QTFMgcGFja2V0IGZvcndhcmRpbmcgYW5kIHJvdXRlIHJldHJpZXZhbC4gVGhlIGNoYW5nZXMgYXJlIGluIHRoZSBjb3JlIG5ldHdvcmsgbG9naWMsIHNvIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBGb2N1cyBTeW1ib2xzLCBnaXZlbiB0aGF0LCBzaG91bGQgYmU6CiogICBgbXBsc19mb3J3YXJkYAoqICAgYG1wbHNfZ2V0cm91dGVgCgpBbmQgdGhlIHJlcXVpcmVkIENvbmZpZ3M6CiogICBgTVBMU2AKKiAgIGBNUExTX1JPVVRJTkdgCgpJIHNob3VsZCB2ZXJpZnkgdGhlIGBNUExTYCBjb25maWd1cmF0aW9uLi4uIHllcywgaXQgbG9va3MgbGlrZSBgY29uZmlnIE1QTFNgIGlzIGluIGBuZXQvbXBscy9LY29uZmlnYC4gSXQmIzM5O3MgYSBtZW51Y29uZmlnLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgZW5hYmxlZC4gSSBzZWUgYENPTkZJR19NUExTPXlgIGluIHRoZSBkb2N1bWVudGF0aW9uLiBPa2F5LCBJJiMzOTttIGhhcHB5IHdpdGggdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL0tjb25maWctNS1cbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcbm5ldC9tcGxzL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7TXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcJiMzNDtcbi0tXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cbi0tXG5uZXQvbXBscy9LY29uZmlnLTI1LVxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXG5uZXQvbXBscy9LY29uZmlnLTI3LVx0dHJpc3RhdGUgXCYjMzQ7TVBMUzogcm91dGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21wbHMvS2NvbmZpZy0zMi1cbm5ldC9tcGxzL0tjb25maWc6MzM6Y29uZmlnIE1QTFNfSVBUVU5ORUxcbm5ldC9tcGxzL0tjb25maWctMzQtXHR0cmlzdGF0ZSBcJiMzNDtNUExTOiBJUCBvdmVyIE1QTFMgdHVubmVsIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDaGVja2luZyBNUExTIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYE1QTFNgIGlzIGRlZmluaXRlbHkgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBTaW1wbGUgZW5vdWdoLiBMZXQgbWUganVzdCBjb25maXJtIHNvbWV0aGluZyBxdWljay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgbXBsc19mb3J3YXJkYCBpcyAqdGhlKiBvbmx5IHBhY2tldCBoYW5kbGVyIGluIHBsYWNlIHRoYXQgZGVhbHMgd2l0aCBNUExTIHRyYWZmaWMuIEkgbmVlZCB0byBiZSAxMDAlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gb3IgY29uZmxpY3Qgd2l0aCBzb21lIG90aGVyIG1vZHVsZS4gR290dGEgZG90IG15IGkmIzM5O3MgYW5kIGNyb3NzIG15IHQmIzM5O3Mgb24gdGhpcyBvbmUgdG8ga2VlcCB0aGUgc3lzdGVtIHJ1bm5pbmcgc21vb3RobHkuIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3MgaXNvbGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wbHNfcGFja2V0X3R5cGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9hZl9tcGxzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jPTM2Nz1zdGF0aWMgaW50IG1wbHNfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy01MDQtXG5uZXQvbXBscy9hZl9tcGxzLmM6NTA1OnN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbXBsc19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L21wbHMvYWZfbXBscy5jLTUwNi1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVBMU19VQyksXG4tLVxubmV0L21wbHMvYWZfbXBscy5jPTI4NDA9c3RhdGljIGludCBfX2luaXQgbXBsc19pbml0KHZvaWQpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTI4NTMtXG5uZXQvbXBscy9hZl9tcGxzLmM6Mjg1NDpcdGRldl9hZGRfcGFjayhcdTAwMjZtcGxzX3BhY2tldF90eXBlKTtcbm5ldC9tcGxzL2FmX21wbHMuYy0yODU1LVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yODc4LW91dF91bnJlZ2lzdGVyX2Rldl90eXBlOlxubmV0L21wbHMvYWZfbXBscy5jOjI4Nzk6XHRkZXZfcmVtb3ZlX3BhY2soXHUwMDI2bXBsc19wYWNrZXRfdHlwZSk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMjg4MC1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNm1wbHNfZGV2X25vdGlmaWVyKTtcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmM9Mjg4Nz1zdGF0aWMgdm9pZCBfX2V4aXQgbXBsc19leGl0KHZvaWQpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTI4OTAtXHRydG5sX2FmX3VucmVnaXN0ZXIoXHUwMDI2bXBsc19hZl9vcHMpO1xubmV0L21wbHMvYWZfbXBscy5jOjI4OTE6XHRkZXZfcmVtb3ZlX3BhY2soXHUwMDI2bXBsc19wYWNrZXRfdHlwZSk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMjg5Mi1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNm1wbHNfZGV2X25vdGlmaWVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NzcKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMzE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNUExTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUmIzM5O3MgaGFuZGxpbmcgb2YgYEVUSF9QX01QTFNfVUNgIHBhY2tldHMsIHRoYXQmIzM5O3Mgd2hhdCBgbXBsc19mb3J3YXJkYCBpcyByZXNwb25zaWJsZSBmb3IuIEkgd2FzIGluaXRpYWxseSB3b25kZXJpbmcgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzIEkgbmVlZGVkIHRvIGNvbnNpZGVyLiBJdCBsb29rcyBsaWtlIGBtcGxzX2dldHJvdXRlYCBoYW5kbGVzIGBSVE1fR0VUUk9VVEVgLCBgbXBsc19ydG1fbmV3cm91dGVgIGhhbmRsZXMgYFJUTV9ORVdST1VURWAsIGFuZCBgbXBsc19ydG1fZGVscm91dGVgIHRha2VzIGNhcmUgb2YgYFJUTV9ERUxST1VURWAuIEFuZCB0aGVuIGBtcGxzX2R1bXBfcm91dGVzYCBhbHNvIGhhbmRsZXMgdGhlIGR1bXAgZm9yIGBSVE1fR0VUUk9VVEVgLCByaWdodC4KClRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBtcGxzX211bHRpcGF0aF9oYXNoYCwgYW5kIHRoYXQmIzM5O3MgKmNhbGxlZCogYnkgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAuIEFuZCwgaW1wb3J0YW50bHksIGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgIGdldHMgKmNhbGxlZCogYnkgYm90aCBgbXBsc19mb3J3YXJkYCBhbmQgYG1wbHNfZ2V0cm91dGVgLiBTbywgZm9jdXNpbmcgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgbW92ZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQuCgpCYXNpY2FsbHksIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBmYWN0IHRoYXQgY2FsbGluZyBgcHNrYl9tYXlfcHVsbGAgY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YSwgd2hpY2ggbWVhbnMgdGhlIGBoZHJgIHBvaW50ZXIgbmVlZHMgdG8gYmUgcmVsb2FkZWQgdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgZGF0YS4gVGhpcyB2dWxuZXJhYmlsaXR5IGltcGFjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLiBJIGRlZmluaXRlbHkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEkgc3RhcnQgbXkgZnV6emluZyBydW5zLgoKQmFzZWQgb24gYWxsIG9mIHRoaXMsIHRoZSBjcml0aWNhbCB0YXJnZXRzIGFyZSBgbXBsc19mb3J3YXJkYCBhbmQgYG1wbHNfZ2V0cm91dGVgLiBUaGUgcmVsZXZhbnQgY29uZmlncyBhcmUgYE1QTFNgIGFuZCBgTVBMU19ST1VUSU5HYC4gSSB3aWxsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUExTJiMzNDssCiAgICAmIzM0O01QTFNfUk9VVElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wbHNfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDttcGxzX2dldHJvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAgYnkgcmVsb2FkaW5nIHRoZSBgaGRyYCBwb2ludGVyIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGxgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBUaGlzIGFmZmVjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUExTJiMzNDssCiAgICAmIzM0O01QTFNfUk9VVElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wbHNfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDttcGxzX2dldHJvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAgYnkgcmVsb2FkaW5nIHRoZSBgaGRyYCBwb2ludGVyIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGxgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBUaGlzIGFmZmVjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIHdoZXJlIGBwc2tiX21heV9wdWxsKClgIGNhbiByZWFsbG9jYXRlIHRoZSBza2IgZGF0YSBidWZmZXIsIGludmFsaWRhdGluZyB0aGUgcHJldmlvdXNseSBjb21wdXRlZCBgaGRyYCBwb2ludGVyLiBBY2Nlc3NpbmcgYGhkcmAgYWZ0ZXIgYHBza2JfbWF5X3B1bGwoKWAgd2l0aG91dCByZWNvbXB1dGluZyBpdCBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlLiBUaGlzIHR5cGUgb2YgbWVtb3J5IGVycm9yIGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgaW52b2x2ZWQsIHNvIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjJmZTI3OWJhZDJmNGFkMzE5Y2RhZDExYTYwNGIxZmJhZjNmNTNhNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDExOjEwOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21wbHMvYWZfbXBscy5jIGIvbmV0L21wbHMvYWZfbXBscy5jCmluZGV4IDk2MWJlNTA1NGEwMzkuLjE3Yjc4ZGNiZjhhYmMgMTAwNjQ0Ci0tLSBhL25ldC9tcGxzL2FmX21wbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXBscy9hZl9tcGxzLmMKQEAgLTIyMSw2ICYjNDM7MjIxLDcgQEAgc3RhdGljIHUzMiBtcGxzX211bHRpcGF0aF9oYXNoKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWYgKHBza2JfbWF5X3B1bGwoc2tiLCBtcGxzX2hkcl9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKSB7CiAJCQljb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyOwogCiYjNDM7CQkJaGRyID0gbXBsc19oZHIoc2tiKSAmIzQzOyBsYWJlbF9pbmRleDsKIAkJCXY0aGRyID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKShoZHIgJiM0MzsgMSk7CiAJCQlpZiAodjRoZHItJmd0O3ZlcnNpb24gPT0gNCkgewogCQkJCWhhc2ggPSBqaGFzaF8zd29yZHMobnRvaGwodjRoZHItJmd0O3NhZGRyKSwKQEAgLTIzMSw2ICYjNDM7MjMyLDcgQEAgc3RhdGljIHUzMiBtcGxzX211bHRpcGF0aF9oYXNoKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCQkJCSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkgewogCQkJCWNvbnN0IHN0cnVjdCBpcHY2aGRyICp2NmhkcjsKIAomIzQzOwkJCQloZHIgPSBtcGxzX2hkcihza2IpICYjNDM7IGxhYmVsX2luZGV4OwogCQkJCXY2aGRyID0gKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopKGhkciAmIzQzOyAxKTsKIAkJCQloYXNoID0gX19pcHY2X2FkZHJfamhhc2goJmFtcDt2Nmhkci0mZ3Q7c2FkZHIsIGhhc2gpOwogCQkJCWhhc2ggPSBfX2lwdjZfYWRkcl9qaGFzaCgmYW1wO3Y2aGRyLSZndDtkYWRkciwgaGFzaCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSBpbiBNUExTIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L21wbHMvYWZfbXBscy5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSByZS1ldmFsdWF0aW9uIG9mIHRoZSBgaGRyYCBwb2ludGVyIGFmdGVyIGBsYWJlbF9pbmRleGAsIHJpZ2h0IGJlZm9yZSB3ZSBnZXQgdG8gdGhlIElQdjQvSVB2NiBoZWFkZXIgZXh0cmFjdGlvbi4gSSBpbW1lZGlhdGVseSBzZWUgdGhpcyBhcyBhIGNsYXNzaWMgZml4IGZvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIGxvZ2ljIGhlcmUgaXMgdGhhdCBgaGRyID0gbXBsc19oZHIoc2tiKSAmIzQzOyBsYWJlbF9pbmRleDtgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBwc2tiX21heV9wdWxsKClgIGhhcyB0aGUgbmFzdHkgaGFiaXQgb2YgcG9zc2libHkgcmVhbGxvY2F0aW5nIHRoZSBTS0ImIzM5O3MgbGluZWFyIGRhdGEgYXJlYS4gVGhhdCBtZWFucyBhbnkgcG9pbnRlcnMgaW50byB0aGF0IGFyZWEsIGxpa2Ugb3VyIGBoZHJgIHZhcmlhYmxlLCBjYW4gYmVjb21lIGNvbXBsZXRlbHkgaW52YWxpZC4KCkFuZCwgaWYgd2UgdGhlbiB0cmllZCB0byBkZXJlZmVyZW5jZSBhbiBpbnZhbGlkYXRlZCBwb2ludGVyIHRvIGBoZHJgLCB3ZSYjMzk7cmUgc3RhcmluZyBkb3duIHRoZSBiYXJyZWwgb2YgYSBVQUYgYnVnIOKAkyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIEtBU0FOIGxvdmVzIHRvIGNhdGNoLiBUaGUgY29kZSB3YXMgdXNpbmcgYW4gaW52YWxpZGF0ZWQgcG9pbnRlciBhbmQgZGVyZWZlcmVuY2luZyBpdCEgVGhhdCYjMzk7cyBhIHByb2JsZW0uIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIGJlIHVzaW5nIGFuIG9sZCBwb2ludGVyLCBhbmQgdGhpcyBwYXRjaCBtYWtlcyBzdXJlIHdlIGhhdmUgYSBmcmVzaCBwb2ludGVyIHRvIHRoZSBNUExTIGhlYWRlciwgZXZlbiBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYC4KCk5vdywgYmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgcGVlayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyBwcm9wZXJseSBzY29wZWQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGlzc3VlcyBieSBpbmFkdmVydGVudGx5IGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgYWRqYWNlbnQgcm91dGluZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gVGhpcyBsb29rcyBsaWtlIGEgcmVhc29uYWJsZSBmaXgsIGJ1dCB2ZXJpZmljYXRpb24gaXMgY3JpdGljYWwsIHBhcnRpY3VsYXJseSBhcm91bmQgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRcdFx0XHQgKi9cbiAyMTE6XHRcdFx0XHRpZiAoZWxpX3NlZW4pXG4gMjEyOlx0XHRcdFx0XHRicmVhaztcbiAyMTM6XHRcdFx0fSBlbHNlIGlmIChkZWMubGFiZWwgPT0gTVBMU19MQUJFTF9FTlRST1BZKSB7XG4gMjE0Olx0XHRcdFx0ZWxpX3NlZW4gPSB0cnVlO1xuIDIxNTpcdFx0XHR9XG4gMjE2Olx0XG4gMjE3Olx0XHRcdGlmICghZGVjLmJvcylcbiAyMTg6XHRcdFx0XHRjb250aW51ZTtcbiAyMTk6XHRcbiAyMjA6XHRcdFx0LyogZm91bmQgYm90dG9tIGxhYmVsOyBkb2VzIHNrYiBoYXZlIHJvb20gZm9yIGEgaGVhZGVyPyAqL1xuIDIyMTpcdFx0XHRpZiAocHNrYl9tYXlfcHVsbChza2IsIG1wbHNfaGRyX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSkpIHtcbiAyMjI6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyO1xuIDIyMzpcdFxuIDIyNDpcdFx0XHRcdGhkciA9IG1wbHNfaGRyKHNrYikgJiM0MzsgbGFiZWxfaW5kZXg7XG4gMjI1Olx0XHRcdFx0djRoZHIgPSAoY29uc3Qgc3RydWN0IGlwaGRyICopKGhkciAmIzQzOyAxKTtcbiAyMjY6XHRcdFx0XHRpZiAodjRoZHItXHUwMDNldmVyc2lvbiA9PSA0KSB7XG4gMjI3Olx0XHRcdFx0XHRoYXNoID0gamhhc2hfM3dvcmRzKG50b2hsKHY0aGRyLVx1MDAzZXNhZGRyKSxcbiAyMjg6XHRcdFx0XHRcdFx0XHQgICAgbnRvaGwodjRoZHItXHUwMDNlZGFkZHIpLFxuIDIyOTpcdFx0XHRcdFx0XHRcdCAgICB2NGhkci1cdTAwM2Vwcm90b2NvbCwgaGFzaCk7XG4gMjMwOlx0XHRcdFx0fSBlbHNlIGlmICh2NGhkci1cdTAwM2V2ZXJzaW9uID09IDYgXHUwMDI2XHUwMDI2XG4gMjMxOlx0XHRcdFx0XHQgICBwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICYjNDM7XG4gMjMyOlx0XHRcdFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XG4gMjMzOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqdjZoZHI7XG4gMjM0Olx0XG4gMjM1Olx0XHRcdFx0XHRoZHIgPSBtcGxzX2hkcihza2IpICYjNDM7IGxhYmVsX2luZGV4O1xuIDIzNjpcdFx0XHRcdFx0djZoZHIgPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKikoaGRyICYjNDM7IDEpO1xuIDIzNzpcdFx0XHRcdFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFx1MDAyNnY2aGRyLVx1MDAzZXNhZGRyLCBoYXNoKTtcbiAyMzg6XHRcdFx0XHRcdGhhc2ggPSBfX2lwdjZfYWRkcl9qaGFzaChcdTAwMjZ2Nmhkci1cdTAwM2VkYWRkciwgaGFzaCk7XG4gMjM5Olx0XHRcdFx0XHRoYXNoID0gamhhc2hfMXdvcmQodjZoZHItXHUwMDNlbmV4dGhkciwgaGFzaCk7XG4gMjQwOlx0XHRcdFx0fVxuIDI0MTpcdFx0XHR9XG4gMjQyOlx0XG4gMjQzOlx0XHRcdGJyZWFrO1xuIDI0NDpcdFx0fVxuIDI0NTpcdFxuIDI0NjpcdFx0cmV0dXJuIGhhc2g7XG4gMjQ3Olx0fVxuIDI0ODpcdFxuIDI0OTpcdHN0YXRpYyBzdHJ1Y3QgbXBsc19uaCAqbXBsc19nZXRfbmV4dGhvcChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHU4IGluZGV4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk3CgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgYGhkciA9IG1wbHNfaGRyKHNrYikgJiM0MzsgbGFiZWxfaW5kZXg7YCBsaW5lIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGB2NGhkcmAgYW5kIGB2NmhkcmAgc3RydWN0dXJlcyB3aXRoaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgLiBUaGUgcHJvYmxlbSBJIHNlZSBpcyB0aGF0IHRoZXJlJiMzOTtzIGEgYHBza2JfbWF5X3B1bGxgIGNhbGwgaGFwcGVuaW5nICpiZWZvcmUqIHRob3NlIGFjY2Vzc2VzLiBJIGtub3cgYHBza2JfbWF5X3B1bGxgIGNhbiBwb3RlbnRpYWxseSByZWFsbG9jYXRlIHRoZSBgc2tiYCYjMzk7cyBkYXRhIGJ1ZmZlci4gVGhhdCBtZWFucyB0aGUgYGhkcmAgcG9pbnRlciwgd2hpY2ggd2FzIHNldCBlYXJsaWVyLCBjb3VsZCBiZWNvbWUgaW52YWxpZCDigJMgYSBjbGFzc2ljIGRhbmdsaW5nIHBvaW50ZXIgc2l0dWF0aW9uLgoKSWYgYHBza2JfbWF5X3B1bGxgIHJlYWxsb2NhdGVzIHRoZSBidWZmZXIsIGBoZHJgIGlzIG5vdyBwb2ludGluZyB0byBmcmVlZCBtZW1vcnkuIEFuZCB0aGVuLCB3ZSB0cnkgdG8gZGVyZWZlcmVuY2UgaXQgdG8gcmVhZCBJUCBoZWFkZXIgZGF0YSAtIHRoYXQmIzM5O3MgYSBibGF0YW50IHVzZS1hZnRlci1mcmVlIGJ1Zy4gVGhhdCYjMzk7cyB3aHkgdGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcmUtZXZhbHVhdGluZyBgaGRyID0gbXBsc19oZHIoc2tiKSAmIzQzOyBsYWJlbF9pbmRleDtgICphZnRlciogdGhlIGBwc2tiX21heV9wdWxsYCBjYWxsLiBTaW1wbGUsIGJ1dCBjcml0aWNhbC4KCkkmIzM5O20gdGhpbmtpbmcgdGhpcyBpcyBwcmVjaXNlbHkgdGhlIHNvcnQgb2YgdGhpbmcgS0FTQU4gZXhjZWxzIGF0IGNhdGNoaW5nLiBJdCYjMzk7cyBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGFuIGlzc3VlIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcHJlLXBhdGNoIGNvZGUgdG8gc29saWRpZnkgdGhlIHRob3VnaHQ6CgpgYGBjCgkJLyogZm91bmQgYm90dG9tIGxhYmVsOyBkb2VzIHNrYiBoYXZlIHJvb20gZm9yIGEgaGVhZGVyPyAqLwoJCWlmIChwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkgewoJCQljb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyOwoKCQkJdjRoZHIgPSAoY29uc3Qgc3RydWN0IGlwaGRyICopKGhkciAmIzQzOyAxKTsKCQkJaWYgKHY0aGRyLSZndDt2ZXJzaW9uID09IDQpIHsKCQkJCWhhc2ggPSBqaGFzaF8zd29yZHMobnRvaGwodjRoZHItJmd0O3NhZGRyKSwKCQkJCQkJICAgIG50b2hsKHY0aGRyLSZndDtkYWRkciksCgkJCQkJCSAgICB2NGhkci0mZ3Q7cHJvdG9jb2wsIGhhc2gpOwoJCQl9IGVsc2UgaWYgKHY0aGRyLSZndDt2ZXJzaW9uID09IDYgJmFtcDsmYW1wOwoJCQkJICAgcHNrYl9tYXlfcHVsbChza2IsIG1wbHNfaGRyX2xlbiAmIzQzOwoJCQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHsKCQkJCWNvbnN0IHN0cnVjdCBpcHY2aGRyICp2NmhkcjsKCgkJCQl2NmhkciA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKShoZHIgJiM0MzsgMSk7CgkJCQloYXNoID0gX19pcHY2X2FkZHJfamhhc2goJmFtcDt2Nmhkci0mZ3Q7c2FkZHIsIGhhc2gpOwoJCQkJaGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKCZhbXA7djZoZHItJmd0O2RhZGRyLCBoYXNoKTsKCQkJCWhhc2ggPSBqaGFzaF8xd29yZCh2Nmhkci0mZ3Q7bmV4dGhkciwgaGFzaCk7CgkJCX0KCQl9CmBgYAoKWWVwLCBhcyBJIHN1c3BlY3RlZCwgdGhlIGBwc2tiX21heV9wdWxsYCBjYWxsIGNvdWxkIGluZGVlZCBpbnZhbGlkYXRlIGBza2ItJmd0O2hlYWRgIGFuZCBgc2tiLSZndDtkYXRhYCwgbGVhdmluZyBgaGRyYCBkYW5nbGluZy4gVGhpcyBpcyBhIGNsZWFyLWN1dCB1c2UtYWZ0ZXItZnJlZS4gIEtBU0FOIHdvdWxkIGFic29sdXRlbHkgbmFpbCB0aGlzLiBLTVNBTiwgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNhbml0aXplciwgaXNuJiMzOTt0IGFwcGxpY2FibGUgaGVyZSwgc28gYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4gR29vZCBjYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYHBza2JfbWF5X3B1bGwoKWAgY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhIGJ1ZmZlciwgaW52YWxpZGF0aW5nIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIGBoZHJgIHBvaW50ZXIuIEFjY2Vzc2luZyBgaGRyYCBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYCB3aXRob3V0IHJlY29tcHV0aW5nIGl0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUuIFRoaXMgdHlwZSBvZiBtZW1vcnkgZXJyb3IgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnZvbHZlZCwgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYHBza2JfbWF5X3B1bGwoKWAgY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhIGJ1ZmZlciwgaW52YWxpZGF0aW5nIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIGBoZHJgIHBvaW50ZXIuIEFjY2Vzc2luZyBgaGRyYCBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYCB3aXRob3V0IHJlY29tcHV0aW5nIGl0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUuIFRoaXMgdHlwZSBvZiBtZW1vcnkgZXJyb3IgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnZvbHZlZCwgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDowMy40NDg2MTQ5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MTE0NTEyOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QTFNcIixcbiAgICBcIk1QTFNfUk9VVElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wbHNfZm9yd2FyZFwiLFxuICAgIFwibXBsc19nZXRyb3V0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYHBza2JfbWF5X3B1bGwoKWAgY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhIGJ1ZmZlciwgaW52YWxpZGF0aW5nIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIGBoZHJgIHBvaW50ZXIuIEFjY2Vzc2luZyBgaGRyYCBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYCB3aXRob3V0IHJlY29tcHV0aW5nIGl0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUuIFRoaXMgdHlwZSBvZiBtZW1vcnkgZXJyb3IgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnZvbHZlZCwgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAgYnkgcmVsb2FkaW5nIHRoZSBgaGRyYCBwb2ludGVyIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGxgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBUaGlzIGFmZmVjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDowMy40NDg2MjM0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNTQ0NjEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIyZmUyNzliYWQyZjRhZDMxOWNkYWQxMWE2MDRiMWZiYWYzZjUzYTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTE6MTA6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L21wbHMvYWZfbXBscy5jIGIvbmV0L21wbHMvYWZfbXBscy5jXFxuaW5kZXggOTYxYmU1MDU0YTAzOS4uMTdiNzhkY2JmOGFiYyAxMDA2NDRcXG4tLS0gYS9uZXQvbXBscy9hZl9tcGxzLmNcXG4rKysgYi9uZXQvbXBscy9hZl9tcGxzLmNcXG5AQCAtMjIxLDYgKzIyMSw3IEBAIHN0YXRpYyB1MzIgbXBsc19tdWx0aXBhdGhfaGFzaChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGlmIChwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKSB7XFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqdjRoZHI7XFxuIFxcbitcXHRcXHRcXHRoZHIgPSBtcGxzX2hkcihza2IpICsgbGFiZWxfaW5kZXg7XFxuIFxcdFxcdFxcdHY0aGRyID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKShoZHIgKyAxKTtcXG4gXFx0XFx0XFx0aWYgKHY0aGRyLVxcdTAwM2V2ZXJzaW9uID09IDQpIHtcXG4gXFx0XFx0XFx0XFx0aGFzaCA9IGpoYXNoXzN3b3JkcyhudG9obCh2NGhkci1cXHUwMDNlc2FkZHIpLFxcbkBAIC0yMzEsNiArMjMyLDcgQEAgc3RhdGljIHUzMiBtcGxzX211bHRpcGF0aF9oYXNoKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICp2NmhkcjtcXG4gXFxuK1xcdFxcdFxcdFxcdGhkciA9IG1wbHNfaGRyKHNrYikgKyBsYWJlbF9pbmRleDtcXG4gXFx0XFx0XFx0XFx0djZoZHIgPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKikoaGRyICsgMSk7XFxuIFxcdFxcdFxcdFxcdGhhc2ggPSBfX2lwdjZfYWRkcl9qaGFzaChcXHUwMDI2djZoZHItXFx1MDAzZXNhZGRyLCBoYXNoKTtcXG4gXFx0XFx0XFx0XFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFxcdTAwMjZ2Nmhkci1cXHUwMDNlZGFkZHIsIGhhc2gpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDowNC44NjQ3MjE4MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTA3Nzg2NzUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUExTXCIsXG4gICAgXCJNUExTX1JPVVRJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcGxzX2ZvcndhcmRcIixcbiAgICBcIm1wbHNfZ2V0cm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIHJlYWQgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGJ5IHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YS4gVGhpcyBhZmZlY3RzIE1QTFMgcGFja2V0IGZvcndhcmRpbmcgYW5kIHJvdXRlIHJldHJpZXZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjJmZTI3OWJhZDJmNGFkMzE5Y2RhZDExYTYwNGIxZmJhZjNmNTNhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDExOjEwOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wbHMvYWZfbXBscy5jIGIvbmV0L21wbHMvYWZfbXBscy5jXG5pbmRleCA5NjFiZTUwNTRhMDM5Li4xN2I3OGRjYmY4YWJjIDEwMDY0NFxuLS0tIGEvbmV0L21wbHMvYWZfbXBscy5jXG4rKysgYi9uZXQvbXBscy9hZl9tcGxzLmNcbkBAIC0yMjEsNiArMjIxLDcgQEAgc3RhdGljIHUzMiBtcGxzX211bHRpcGF0aF9oYXNoKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKHBza2JfbWF5X3B1bGwoc2tiLCBtcGxzX2hkcl9sZW4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSkpIHtcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyO1xuIFxuK1x0XHRcdGhkciA9IG1wbHNfaGRyKHNrYikgKyBsYWJlbF9pbmRleDtcbiBcdFx0XHR2NGhkciA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKikoaGRyICsgMSk7XG4gXHRcdFx0aWYgKHY0aGRyLVx1MDAzZXZlcnNpb24gPT0gNCkge1xuIFx0XHRcdFx0aGFzaCA9IGpoYXNoXzN3b3JkcyhudG9obCh2NGhkci1cdTAwM2VzYWRkciksXG5AQCAtMjMxLDYgKzIzMiw3IEBAIHN0YXRpYyB1MzIgbXBsc19tdWx0aXBhdGhfaGFzaChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqdjZoZHI7XG4gXG4rXHRcdFx0XHRoZHIgPSBtcGxzX2hkcihza2IpICsgbGFiZWxfaW5kZXg7XG4gXHRcdFx0XHR2NmhkciA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKShoZHIgKyAxKTtcbiBcdFx0XHRcdGhhc2ggPSBfX2lwdjZfYWRkcl9qaGFzaChcdTAwMjZ2Nmhkci1cdTAwM2VzYWRkciwgaGFzaCk7XG4gXHRcdFx0XHRoYXNoID0gX19pcHY2X2FkZHJfamhhc2goXHUwMDI2djZoZHItXHUwMDNlZGFkZHIsIGhhc2gpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MDQuODY0NzIzMDU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0MjMwMjcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QTFMgTXVsdGlwYXRoIEhhc2ggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L21wbHMvYWZfbXBscy5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBmaXhpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgaW4gdGhlIGBtcGxzX211bHRpcGF0aF9oYXNoYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlLWFzc2lnbm1lbnQgb2YgYGhkcmAgYWZ0ZXIgYSBgcHNrYl9tYXlfcHVsbGAgY2FsbDogYGhkciA9IG1wbHNfaGRyKHNrYikgKyBsYWJlbF9pbmRleDtgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHJlYWxsb2NhdGlvbiBwcm9ibGVtLiBUaGUgYHBza2JfbWF5X3B1bGxgIGZ1bmN0aW9uLCBhcyBJIHJlY2FsbCwgY2FuIHBvdGVudGlhbGx5IHJlYWxsb2NhdGUgdGhlIFNvY2tldCBCdWZmZXIgKHNrYikgZGF0YS4gSWYgdGhhdCBoYXBwZW5zLCBhbnkgcG9pbnRlcnMgdG8gdGhlIG9yaWdpbmFsIGRhdGEsIGluY2x1ZGluZyBvdXIgYGhkcmAgcG9pbnRlciwgd291bGQgYmVjb21lIGludmFsaWQuIFRoZXJlZm9yZSwgcmUtY2FsY3VsYXRpbmcgdGhlIGBoZHJgIG9mZnNldCBwb3N0LWBwc2tiX21heV9wdWxsYCBpcyBhIHNtYXJ0IGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0YWN0aWMuIEl0IGVuc3VyZXMgd2UncmUgYWx3YXlzIHdvcmtpbmcgd2l0aCBhIHZhbGlkIHBvaW50ZXIgdG8gdGhlIE1QTFMgaGVhZGVyLCBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIHNrYiBoYXMgYmVlbiBtb3ZlZCBpbiBtZW1vcnkuIEkgd2lsbCBub3cgZXhhbWluZSBgbXBsc19tdWx0aXBhdGhfaGFzaGAgaW4gYG5ldC9tcGxzL2FmX21wbHMuY2AgdG8gZnVydGhlciBjb25maXJtIHRoZXNlIHN1c3BpY2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDowOC43MDcwMzA0MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyNTkxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXBsc19tdWx0aXBhdGhfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXBscy9hZl9tcGxzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wbHMvYWZfbXBscy5jPTE3OD1FWFBPUlRfU1lNQk9MX0dQTChtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMpO1xcbm5ldC9tcGxzL2FmX21wbHMuYy0xNzktXFxubmV0L21wbHMvYWZfbXBscy5jOjE4MDpzdGF0aWMgdTMyIG1wbHNfbXVsdGlwYXRoX2hhc2goc3RydWN0IG1wbHNfcm91dGUgKnJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tcGxzL2FmX21wbHMuYy0xODEte1xcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jPTI1OT1zdGF0aWMgY29uc3Qgc3RydWN0IG1wbHNfbmggKm1wbHNfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjc2LVxcbm5ldC9tcGxzL2FmX21wbHMuYzoyNzc6XFx0aGFzaCA9IG1wbHNfbXVsdGlwYXRoX2hhc2gocnQsIHNrYik7XFxubmV0L21wbHMvYWZfbXBscy5jLTI3OC1cXHRuaF9pbmRleCA9IGhhc2ggJSBhbGl2ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MDguNzc0Mjk0MDY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3MTAzMzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNdWx0aXBhdGggSGFzaGluZyBMb2dpYyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbXBsc19tdWx0aXBhdGhfaGFzaGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIG11bHRpcGF0aCBzZWxlY3Rpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGJlaW5nIGludm9rZWQgYnkgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgbXBsc19zZWxlY3RfbXVsdGlwYXRoYC4gV2hlcmUgaXMgKnRoYXQqIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBvZiBgbXBsc19zZWxlY3RfbXVsdGlwYXRoYCB3aWxsIGdpdmUgbWUgaW52YWx1YWJsZSBpbnNpZ2h0IGludG8gdGhlIGhpZ2hlci1sZXZlbCBsb2dpYyBmbG93IGFuZCB0cmlnZ2VyIGNvbmRpdGlvbnMgdGhhdCB1bHRpbWF0ZWx5IHJlbHkgb24gdGhpcyBoYXNoaW5nIG1lY2hhbmlzbS4gSXQncyBhbGwgYWJvdXQgdHJhY2luZyB0aGUgZGVwZW5kZW5jeSBjaGFpbiB0byBmdWxseSBncmFzcCB0aGUgb3BlcmF0aW9uYWwgaW1wYWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmRyaXZpbmcqIHRoaXMgc2VsZWN0aW9uLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjExLjc0NTMzMDU5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTQyODA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcGxzX3NlbGVjdF9tdWx0aXBhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wbHMvYWZfbXBscy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcGxzL2FmX21wbHMuYz0yNDk9c3RhdGljIHN0cnVjdCBtcGxzX25oICptcGxzX2dldF9uZXh0aG9wKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgdTggaW5kZXgpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjU4LSAqL1xcbm5ldC9tcGxzL2FmX21wbHMuYzoyNTk6c3RhdGljIGNvbnN0IHN0cnVjdCBtcGxzX25oICptcGxzX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IG1wbHNfcm91dGUgKnJ0LFxcbm5ldC9tcGxzL2FmX21wbHMuYy0yNjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYz0zNjc9c3RhdGljIGludCBtcGxzX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy00MTctXFxubmV0L21wbHMvYWZfbXBscy5jOjQxODpcXHRuaCA9IG1wbHNfc2VsZWN0X211bHRpcGF0aChydCwgc2tiKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtNDE5LVxcdGlmICghbmgpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9MjQxMz1zdGF0aWMgaW50IG1wbHNfZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICppbl9ubGgsXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjUyMS1cXG5uZXQvbXBscy9hZl9tcGxzLmM6MjUyMjpcXHRuaCA9IG1wbHNfc2VsZWN0X211bHRpcGF0aChydCwgc2tiKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtMjUyMy1cXHRpZiAoIW5oKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjExLjgzMDc3OTYxNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjE2MzA5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBMUyBGb3J3YXJkaW5nIExvZ2ljIFJldmlldyoqXG5cbk9rYXksIHNvIGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAgYm90aCB1bHRpbWF0ZWx5IGZ1bm5lbCBpbnRvIGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBNUExTIGZvcndhcmRpbmcgcHJvY2VzcywgdGhlIGNvcmUga2VybmVsIGxvZ2ljLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmxvdyBjb21wbGV0ZWx5LiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgdG8gZW5zdXJlIHRoZSBNUExTIGNvbmZpZ3VyYXRpb24gaXMgd2hhdCBJIGV4cGVjdC4gSXQncyBhbHdheXMgZ29vZCB0byBjb25maXJtIHRoZSBiYXNpY3MgYmVmb3JlIGRpc3NlY3RpbmcgdGhlIG1vcmUgY29tcGxleCBicmFuY2hpbmcgbG9naWMgd2l0aGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MTQuNTUyNDE2ODU4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzIyMTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXBscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wbHMvS2NvbmZpZy01LVxcbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcXG5uZXQvbXBscy9LY29uZmlnLTctXFx0Ym9vbCBcXFwiTXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcXFwiXFxuLS1cXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cXG4tLVxcbm5ldC9tcGxzL0tjb25maWctMjUtXFxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXFxubmV0L21wbHMvS2NvbmZpZy0yNy1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogcm91dGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21wbHMvS2NvbmZpZy0zMi1cXG5uZXQvbXBscy9LY29uZmlnOjMzOmNvbmZpZyBNUExTX0lQVFVOTkVMXFxubmV0L21wbHMvS2NvbmZpZy0zNC1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogSVAgb3ZlciBNUExTIHR1bm5lbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDoxNC42NTk2NDQ2ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjYwMjk1NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE1QTFMgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoZSBgYWZfbXBscy5jYCBtb2R1bGUgZ2V0cyBidWlsdC4gVGltZSB0byBnbyByaWdodCB0byB0aGUgc291cmNlIGFuZCBjaGVjayB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBJJ2xsIG9wZW4gdXAgYG5ldC9tcGxzL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZXhwbGljaXQgZGVwZW5kZW5jaWVzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCB0byBicmluZyB0aGF0IHBpZWNlIG9mIHRoZSBwdXp6bGUgdG9nZXRoZXIuIEkgZXhwZWN0IGl0J3MgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBwcm9jZXNzLCBidXQgaXQncyBhbHdheXMgYmVzdCB0byBiZSBwcmVjaXNlIGFuZCBjb25maXJtIHRoZSBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDoxNy4zMTk5NDM3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3MDAzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZfbXBsc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXBscy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXBscy9NYWtlZmlsZT03PW9iai0kKENPTkZJR19NUExTX0lQVFVOTkVMKSArPSBtcGxzX2lwdHVubmVsLm9cXG5uZXQvbXBscy9NYWtlZmlsZS04LVxcbm5ldC9tcGxzL01ha2VmaWxlOjk6bXBsc19yb3V0ZXIteSA6PSBhZl9tcGxzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MTcuMzg1NjUwOTA5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjYzMjY0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBmb3IgYG1wbHNfcm91dGVyLXlgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1wbHNfcm91dGVyLXlgLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUncyB0aGlzIHRoaW5nIGV2ZW4gY29taW5nIGZyb20/XCIgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNoYWluLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBob3cgaXQncyBiZWluZyBjb21waWxlZC4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIOKAkyBpbiB0aGlzIGNhc2UsIGl0J3MgcHJldHR5IG9idmlvdXMgdGhhdCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggTVBMUywgSSBzaG91bGQgY2hlY2sgdGhlIGBuZXQvbXBscy9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBpcyBtb3N0IGxpa2VseS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHRyYWNrIGRvd24gdGhvc2UgY29tcGlsYXRpb24gdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjIwLjIxMTk4MDIwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXBscy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgTVBMUy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdG9iai0kKENPTkZJR19ORVRfTVBMU19HU08pICs9IG1wbHNfZ3NvLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19NUExTX1JPVVRJTkcpICs9IG1wbHNfcm91dGVyLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19NUExTX0lQVFVOTkVMKSArPSBtcGxzX2lwdHVubmVsLm9cXG4gICA4OlxcdFxcbiAgIDk6XFx0bXBsc19yb3V0ZXIteSA6PSBhZl9tcGxzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MjAuMjEyMDYwODkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjE5MzAyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBNUExTIFJvdXRpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUga2VybmVsIGJ1aWxkcyB0aGUgTVBMUyByb3V0aW5nIGNvbXBvbmVudHMuIEkgc2VlIHRoYXQgYENPTkZJR19NUExTX1JPVVRJTkdgIGlzIHRoZSBrZXkgaGVyZTsgaXQgZGlyZWN0bHkgbGVhZHMgdG8gdGhlIGNvbXBpbGF0aW9uIG9mIGBtcGxzX3JvdXRlci5vYCwgYW5kLCBjcnVjaWFsbHksIHRoYXQgaW5jbHVkZXMgYGFmX21wbHMub2AuIFRoYXQncyB0aGUgY29yZSBwYXJ0IEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5Ob3csIEknbSB0aGlua2luZywgdGhpcyBpcyBhbGwgZHJpdmVuIGJ5IHRoZSBgTVBMU19ST1VUSU5HYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gc3VycHJpc2VzIG9yIHJlbGF0ZWQgY29uZmlncyB0aGF0IGluZmx1ZW5jZSB0aGlzIGJ1aWxkLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvbXBscy9LY29uZmlnYCB0byBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGdvaW5nIG9uIGJlaGluZCB0aGUgc2NlbmVzIHdpdGggdGhpcyBgTVBMU19ST1VUSU5HYCBvcHRpb24uIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcyBmb3IgYSBmdWxsIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjIzLjE3Mzk5Mzk0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wbHMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTVBMUzogR1NPIHN1cHBvcnRcXFwiXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgVGhpcyBpcyBoZWxwZXIgbW9kdWxlIHRvIGFsbG93IHNlZ21lbnRhdGlvbiBvZiBub24tTVBMUyBHU08gcGFja2V0c1xcbiAgMjM6XFx0XFx0IHRoYXQgaGF2ZSBoYWQgTVBMUyBzdGFjayBlbnRyaWVzIHB1c2hlZCBvbnRvIHRoZW0gYW5kIHRodXNcXG4gIDI0OlxcdFxcdCBiZWNvbWUgTVBMUyBHU08gcGFja2V0cy5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIE1QTFNfUk9VVElOR1xcbiAgMjc6XFx0XFx0dHJpc3RhdGUgXFxcIk1QTFM6IHJvdXRpbmcgc3VwcG9ydFxcXCJcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0lQX1RVTk5FTCB8fCBORVRfSVBfVFVOTkVMPW5cXG4gIDI5OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19TWVNDVExcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCBBZGQgc3VwcG9ydCBmb3IgZm9yd2FyZGluZyBvZiBtcGxzIHBhY2tldHMuXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNvbmZpZyBNUExTX0lQVFVOTkVMXFxuICAzNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTVBMUzogSVAgb3ZlciBNUExTIHR1bm5lbCBzdXBwb3J0XFxcIlxcbiAgMzU6XFx0XFx0ZGVwZW5kcyBvbiBMV1RVTk5FTCBcXHUwMDI2XFx1MDAyNiBNUExTX1JPVVRJTkdcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCBtcGxzIGlwIHR1bm5lbCBzdXBwb3J0LlxcbiAgMzg6XFx0XFxuICAzOTpcXHRlbmRpZiAjIE1QTFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MjMuMTc0MDk4ODYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDYyNDQ3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTVBMUyBSb3V0aW5nIE1vZHVsZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBNUExTX1JPVVRJTkdgLiBJIHNlZSBpbW1lZGlhdGVseSB0aGF0IGl0cyBjb25maWd1cmF0aW9uIGRlcGVuZHMgb24gYm90aCBgTkVUX0lQX1RVTk5FTGAgKG9yLCBjcnVjaWFsbHksIGJlaW5nICp1bnNldCogdG8gZW5zdXJlIHR1bm5lbCBmdW5jdGlvbmFsaXR5IGlzbid0IHByZXNlbnQpIGFuZCBgUFJPQ19TWVNDVExgLiBTZWVtcyBsb2dpY2FsLiBJdCdzIHVuZGVyIHRoZSBgbWVudWNvbmZpZyBNUExTYCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBNUExTYCBhbmQgYE1QTFNfUk9VVElOR2AgYXJlIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gZ2V0IHRoaXMgY29kZSBpbnZvbHZlZC4gR29vZCwgSSBrbm93IHRoZSBkZXBlbmRlbmNpZXMuXG5cbk5vdywgdGhpcyBwYXRjaC4uLiB0aGlzIGlzIGludGVyZXN0aW5nLiBUaGV5J3JlIHNheWluZyB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGBwc2tiX21heV9wdWxsYCBwb3NzaWJseSByZWFsbG9jYXRpbmcgdGhlIGBza2JgIGRhdGEsIGJ1dCBub3QgdXBkYXRpbmcgdGhlIGBoZHJgIHBvaW50ZXIuIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHRoZXkgdHJ5IHRvIGFjY2VzcyBgdjRoZHJgIG9yIGB2NmhkcmAuIERlZmluaXRlbHkgYSB2dWxuZXJhYmlsaXR5IGNhbmRpZGF0ZS4gVGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggdGhyb3dpbmcgZnV6emluZyBhdC4gSSdsbCBmbGFnIGl0IGZvciBkZXRhaWxlZCBmdXp6aW5nLCB0byBiZSBjZXJ0YWluLlxuXG5MZXQncyBzZWUsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIGJlIGZvY3VzaW5nIG9uIGhlcmU/IEkgc2VlIGBtcGxzX211bHRpcGF0aF9oYXNoYCBhbmQgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAgYXJlIGJvdGggc3RhdGljLCBzbyB0aGV5J3JlIGludGVybmFsIHRvIHRoZSBtb2R1bGUuIGBtcGxzX2ZvcndhcmRgIGlzIGFsc28gc3RhdGljLi4uIHdhaXQgYSBzZWNvbmQuLi4gYG1wbHNfZm9yd2FyZGAgaXMgcmVnaXN0ZXJlZCBhcyBhICpwYWNrZXQgaGFuZGxlcio/IFRoYXQncyBhIGtleSBkZXRhaWwhIEknbGwgbmVlZCB0byBjaGVjayBgYWZfbXBscy5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgZW50cnkgcG9pbnQgaXMsIGFuZCB0aGF0IHdpbGwgZ2l2ZSBtZSBteSBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjI4LjU4MDM0NzI0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2NDY3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXBsc19mb3J3YXJkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcGxzL2FmX21wbHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXBscy9hZl9tcGxzLmM9Mjk1PXN0YXRpYyBib29sIG1wbHNfZWdyZXNzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1wbHNfcm91dGUgKnJ0LFxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jLTM2Ni1cXG5uZXQvbXBscy9hZl9tcGxzLmM6MzY3OnN0YXRpYyBpbnQgbXBsc19mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L21wbHMvYWZfbXBscy5jLTM2OC1cXHRcXHRcXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9NTA1PXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbXBsc19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9tcGxzL2FmX21wbHMuYy01MDYtXFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9NUExTX1VDKSxcXG5uZXQvbXBscy9hZl9tcGxzLmM6NTA3OlxcdC5mdW5jID0gbXBsc19mb3J3YXJkLFxcbm5ldC9tcGxzL2FmX21wbHMuYy01MDgtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MjguNjYwOTk3OTk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjEzMjk1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBNUExTIEZvcndhcmRpbmcgaW4gdGhlIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXMgdXNpbmcgYG1wbHNfZm9yd2FyZGAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gKGAuZnVuY2ApIGZvciBoYW5kbGluZyBgbXBsc19wYWNrZXRfdHlwZWAuIFRoYXQgc2VlbXMgbG9naWNhbDsgaXQncyB0aGUgZXhwZWN0ZWQgZW50cnkgcG9pbnQgZm9yIE1QTFMgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIG5ldHdvcmsncyByZWNlaXZlIHBhdGguIFRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIGJlZm9yZSBJIGZpbmFsaXplIHRoaXMgdW5kZXJzdGFuZGluZywgSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgYW5kIGVuc3VyZSB0aGF0IGl0IGlzIG5vdCBiZWluZyBkb25lIGVsc2V3aGVyZS5cblxuSSBzaG91bGQgYWxzbyBxdWlja2x5IGNvbnNpZGVyIGlmIGBtcGxzX2dldHJvdXRlYCBpcyBkb2luZyBhbnkgcGFydCBvZiB0aGlzIHRhc2suIEl0IGlzIHBvc3NpYmxlIHRoYXQgYG1wbHNfZ2V0cm91dGVgIGhhbmRsZXMgdGhpcyB0cmFmZmljIGFuZCB0aHVzIGRvZXMgbm90IHVzZSBgbXBsc19mb3J3YXJkYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBob3cgYG1wbHNfZ2V0cm91dGVgIGlzIGltcGxlbWVudGVkIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGFsc28gcGxheSBhIHNpZ25pZmljYW50IHJvbGUuIEdvdHRhIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IGluIHRoZSBmb3J3YXJkaW5nIHBsYW5lLiBXZSBjYW4ndCBoYXZlIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTE4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MzEuOTIyMzMxNDUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc3MzIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcGxzX2dldHJvdXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcGxzL2FmX21wbHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXBscy9hZl9tcGxzLmM9MjM1NT1zdGF0aWMgaW50IG1wbHNfdmFsaWRfZ2V0cm91dGVfcmVxKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjQxMi1cXG5uZXQvbXBscy9hZl9tcGxzLmM6MjQxMzpzdGF0aWMgaW50IG1wbHNfZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICppbl9ubGgsXFxubmV0L21wbHMvYWZfbXBscy5jLTI0MTQtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYz0yODI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBtcGxzX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0ZGF0YV9vcl9tb2R1bGUgPSB7XFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjgzMi1cXHQgUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxcbm5ldC9tcGxzL2FmX21wbHMuYzoyODMzOlxcdHtUSElTX01PRFVMRSwgUEZfTVBMUywgUlRNX0dFVFJPVVRFLCBtcGxzX2dldHJvdXRlLCBtcGxzX2R1bXBfcm91dGVzLFxcbm5ldC9tcGxzL2FmX21wbHMuYy0yODM0LVxcdCBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MzEuOTg3MTEzNDkyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTUzNTAzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBtcGxzX2dldHJvdXRlYCBhcyBhIFBvdGVudGlhbCBUZXN0IEVudHJ5cG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbXBsc19nZXRyb3V0ZWAuIEl0J3MgYSBoYW5kbGVyIGZvciBgUlRNX0dFVFJPVVRFYCB3aXRoaW4gdGhlIGBQRl9NUExTYCBmYW1pbHksIG1lYW5pbmcgaXQncyBhbiBSVE5MIChSb3V0aW5nIFRhYmxlIE5ldGxpbmspIGhhbmRsZXIuIFRoYXQgc291bmRzIGxpa2UgYSBkZWNlbnQgcGxhY2UgdG8gc3RhcnQsIGRlZmluaXRlbHkgbm90IGEgaG90LXBhdGggZnVuY3Rpb24sIHVubGlrZSwgc2F5LCBgbXBsc19mb3J3YXJkYCB3aGljaCBpcywgb2J2aW91c2x5LCBpbnZvbHZlZCBpbiBwYWNrZXQgZm9yd2FyZGluZyBhbmQgdGh1cywgcGVyZm9ybWFuY2UgY3JpdGljYWwuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIHRob3NlLiBTbywgYG1wbHNfZ2V0cm91dGVgIGlzIGdvb2QsIGEgbmV0bGluayBoYW5kbGVyIGlzIGV4YWN0bHkgd2hhdCB0aGV5IGFyZSBhc2tpbmcgZm9yLlxuXG5IbW0sIHdhaXQuIElzIGBtcGxzX2dldHJvdXRlYCBzdGF0aWM/IEFoLCB5ZXMsIGl0J3MgZGVmaW5lZCBhcyBgc3RhdGljIGludCBtcGxzX2dldHJvdXRlKC4uLilgLiBUaGUgcHJvbXB0IHNwZWNpZmllczogXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuXCIgVGhhdCdzIGEgYml0IG9mIGEgd3JpbmtsZS4gSG93ZXZlciwgaXQgKmlzKiBhbiBBUEkgZW50cnlwb2ludCwgaXQncyB0aGUgbmV0bGluayBoYW5kbGVyIGZ1bmN0aW9uLCBldmVuIGlmIGl0ICppcyogc3RhdGljLiBJdCdzIGEgZGlyZWN0IGludGVyZmFjZSB0byB0aGUga2VybmVsJ3Mgcm91dGluZyBpbmZvcm1hdGlvbi5cblxuU28sIGFsdGhvdWdoIGl0J3Mgc3RhdGljLCBpdCdzIHN0aWxsIGFuIEFQSSBlbnRyeXBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSwganVzdCB0byBiZSBzdXJlLCBhbmQgdG8gY29tcGx5IHByZWNpc2VseSB3aXRoIHRoZSBndWlkZWxpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjM2LjQ4MjQ2NzEzNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkxNDM3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXBscy9hZl9tcGxzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wbHMvYWZfbXBscy5jPTExMj1ib29sIG1wbHNfb3V0cHV0X3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMTE1LX1cXG5uZXQvbXBscy9hZl9tcGxzLmM6MTE2OkVYUE9SVF9TWU1CT0xfR1BMKG1wbHNfb3V0cHV0X3Bvc3NpYmxlKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtMTE3LVxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jPTEzNT11bnNpZ25lZCBpbnQgbXBsc19kZXZfbXR1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMTM5LX1cXG5uZXQvbXBscy9hZl9tcGxzLmM6MTQwOkVYUE9SVF9TWU1CT0xfR1BMKG1wbHNfZGV2X210dSk7XFxubmV0L21wbHMvYWZfbXBscy5jLTE0MS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9MTQyPWJvb2wgbXBsc19wa3RfdG9vX2JpZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbXR1KVxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jLTE1MS19XFxubmV0L21wbHMvYWZfbXBscy5jOjE1MjpFWFBPUlRfU1lNQk9MX0dQTChtcGxzX3BrdF90b29fYmlnKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtMTUzLVxcbm5ldC9tcGxzL2FmX21wbHMuYz0xNTQ9dm9pZCBtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jLTE3Ny19XFxubmV0L21wbHMvYWZfbXBscy5jOjE3ODpFWFBPUlRfU1lNQk9MX0dQTChtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMpO1xcbm5ldC9tcGxzL2FmX21wbHMuYy0xNzktXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9MTc0Nz1pbnQgbmxhX3B1dF9sYWJlbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLFxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jLTE3NjYtfVxcbm5ldC9tcGxzL2FmX21wbHMuYzoxNzY3OkVYUE9SVF9TWU1CT0xfR1BMKG5sYV9wdXRfbGFiZWxzKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtMTc2OC1cXG5uZXQvbXBscy9hZl9tcGxzLmM9MTc2OT1pbnQgbmxhX2dldF9sYWJlbHMoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCB1OCBtYXhfbGFiZWxzLCB1OCAqbGFiZWxzLFxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jLTE4NDctfVxcbm5ldC9tcGxzL2FmX21wbHMuYzoxODQ4OkVYUE9SVF9TWU1CT0xfR1BMKG5sYV9nZXRfbGFiZWxzKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtMTg0OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MzYuNTgxNjE3ODM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjc5OTIyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBNUExTIFJvdXRpbmc6IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBNUExTIGNvZGUsIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBsYWNlcyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBub25lIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3J0ZWQgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhvc2UgaGFzaCBvciBtdWx0aXBhdGggc2VsZWN0aW9uIGZ1bmN0aW9ucywgd2hpY2ggaXMgZmluZSwgYnV0IEkgbmVlZCBhbiBlbnRyeSBwb2ludC4gTG9va2luZyBhdCB0aGUgY2FsbCBzaXRlcyBvZiBgbXBsc19zZWxlY3RfbXVsdGlwYXRoYCwgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBieSBgbXBsc19mb3J3YXJkYCBhbmQgYG1wbHNfZ2V0cm91dGVgLlxuXG5BbHJpZ2h0LCBgbXBsc19nZXRyb3V0ZWAgaXMgYSBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGV4Y2VsbGVudCEgTmV0bGluayBoYW5kbGVycyBhcmUgdXN1YWxseSBwcmV0dHkgZWFzeSB0byB0cmlnZ2VyIHdpdGggY3JhZnRlZCBtZXNzYWdlcywgbWFraW5nIHRoZW0gaWRlYWwgdGFyZ2V0cyBmb3IgZnV6emluZy4gYG1wbHNfZm9yd2FyZGAgaXMgYSBwYWNrZXQgaGFuZGxlciwgc28gdGhlb3JldGljYWxseSBpdCdzIGFsc28gYSBnb29kIGNob2ljZS4gSG93ZXZlciwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IGl0J3MgcHJvYmFibHkgYSBob3QtcGF0aCBmdW5jdGlvbjsgd2hpY2ggaXMgbm90IGlkZWFsIGZvciBmdXp6aW5nLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBtcGxzX2ZvcndhcmRgIGlzIHJlZ2lzdGVyZWQgYXMgYSBwYWNrZXQgdHlwZSBoYW5kbGVyPyAqVGhhdCogbWVhbnMgaXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgcmVjZWl2aW5nIE1QTFMgcGFja2V0cyDigJMgYmluZ28hIElzIGl0IHN0YXRpYz8gWWVzLiBJcyBgbXBsc19nZXRyb3V0ZWAgc3RhdGljPyBZZXMuIFNvIG5vdyBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgd2hldGhlciB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlc2Ugb25lcywganVzdCB0byBoYXZlIGEgd2lkZXIgc2NvcGUuIEJ1dCBteSBtYWluIGdvYWwgaXMgdG8gZnV6eiB0aGUgKm1vZGlmaWVkKiBsb2dpYywgd2hpY2ggbWFrZXMgdGhlIGNob2ljZSBldmVuIHNpbXBsZXIuXG5cbkNvbnNpZGVyaW5nIHRoYXQgYG1wbHNfZ2V0cm91dGVgIGlzIGEgbmV0bGluayBoYW5kbGVyLCBpdCdzIGRlZmluaXRlbHkgdGhlIHRvcCBjb250ZW5kZXIgZm9yIG5vdy4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgbmV0bGluayBoYW5kbGVycyBpbnZvbHZlZCBpbiB0aGlzIGNvZGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBhdHRhY2sgdmVjdG9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDo0MS42NDk2MTUxMDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODUxMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wbHNfcnRubF9tc2dfaGFuZGxlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wbHMvYWZfbXBscy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcGxzL2FmX21wbHMuYz0yODIyPXN0YXRpYyBzdHJ1Y3QgcnRubF9hZl9vcHMgbXBsc19hZl9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy0yODI3LVxcbm5ldC9tcGxzL2FmX21wbHMuYzoyODI4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBtcGxzX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0ZGF0YV9vcl9tb2R1bGUgPSB7XFxubmV0L21wbHMvYWZfbXBscy5jLTI4MjktXFx0e1RISVNfTU9EVUxFLCBQRl9NUExTLCBSVE1fTkVXUk9VVEUsIG1wbHNfcnRtX25ld3JvdXRlLCBOVUxMLFxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jPTI4NDA9c3RhdGljIGludCBfX2luaXQgbXBsc19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjg1OS1cXG5uZXQvbXBscy9hZl9tcGxzLmM6Mjg2MDpcXHRlcnIgPSBydG5sX3JlZ2lzdGVyX21hbnkobXBsc19ydG5sX21zZ19oYW5kbGVycyk7XFxubmV0L21wbHMvYWZfbXBscy5jLTI4NjEtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy0yODc0LW91dF91bnJlZ2lzdGVyX3J0bmw6XFxubmV0L21wbHMvYWZfbXBscy5jOjI4NzU6XFx0cnRubF91bnJlZ2lzdGVyX21hbnkobXBsc19ydG5sX21zZ19oYW5kbGVycyk7XFxubmV0L21wbHMvYWZfbXBscy5jLTI4NzYtb3V0X3VucmVnaXN0ZXJfcnRubF9hZjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6NDEuNzA2NDcyOTIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTgyNTQ1NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1QTFMgUm91dGUgU2VsZWN0aW9uIGFuZCBQYXRjaCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MuIEknbSBmb2N1c2luZyBvbiB0aGUgYGFmX21wbHMuY2AgZmlsZSBhbmQgaXRzIGFzc29jaWF0ZWQgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgaW4gbGlnaHQgb2YgdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCBgbXBsc19ydG1fbmV3cm91dGVgIGlzIGEgbmV0bGluayBoYW5kbGVyLCBidXQgaXQgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgLiBObywgaXQgY3JlYXRlcyByb3V0ZXMuIE5vdywgYG1wbHNfZ2V0cm91dGVgICpkb2VzKiBjYWxsIGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgLiBUaGF0IHNlZW1zIHByb21pc2luZywgYnV0IHdhaXQgYSBtaW51dGUsIHRoZSBtYWluIHBhY2tldCBwcm9jZXNzaW5nIGZ1bmN0aW9uLCBgbXBsc19mb3J3YXJkYCwgaXMgdGhlIHByaW1hcnkgdHJpZ2dlciBmb3IgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAgKndpdGgqIGFuIGFjdHVhbCBwYWNrZXQuIFNvLCBJIG5lZWQgdG8gaW5jbHVkZSBib3RoIGBtcGxzX2dldHJvdXRlYCBhbmQgYG1wbHNfZm9yd2FyZGAgaW4gbXkgYW5hbHlzaXMuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWVkIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0IG1lIGNoZWNrLi4uIGJlY2F1c2UgYG1wbHNfZ2V0cm91dGVgIGFuZCBgbXBsc19mb3J3YXJkYCBhcmUgcmVnaXN0ZXJlZCBhcyBmdW5jdGlvbiBwb2ludGVycyAoaW4gYHJ0bmxfbXNnX2hhbmRsZXJgIGFuZCBgcGFja2V0X3R5cGVgKSwgdGhleSBjYW5ub3QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRoYXQncyBnb29kLiBUaGV5IHdpbGwgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBzbyB0aGV5IGFyZSBwZXJmZWN0bHkgZmluZSB0byB1c2UuXG5cbkxldCdzIHZlcmlmeSB0aGUgY29uZmlncy4gV2UncmUgbG9va2luZyBhdCBgTVBMU2AgYW5kIGBNUExTX1JPVVRJTkdgLiBBaCwgYE1QTFNfUk9VVElOR2AgaGFzIGEgZGVwZW5kZW5jeSwgaXQgbmVlZHMgYE5FVF9JUF9UVU5ORUwgfHwgTkVUX0lQX1RVTk5FTD1uYC4gQWxyaWdodCwgaXMgYE1QTFNfUk9VVElOR2Agc3VmZmljaWVudD8gWWVzLCBpdCBsb29rcyBsaWtlIGBNUExTX1JPVVRJTkdgIGlzIHRoZSBjb25maWcgdGhhdCBidWlsZHMgYGFmX21wbHMuY2AuIE5vIG5lZWQgZm9yIGBNUExTX0lQVFVOTkVMYCBmb3IgdGhpcyBwYXJ0LlxuXG5Ob3csIHJldmlld2luZyB0aGUgcGF0Y2ggaXRzZWxmLiBBaCwgdGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyByZWFkIGZpeC4gVGhlIGBoZHJgIHBvaW50ZXIgaXMgYmVpbmcgdXNlZCBhZnRlciBgcHNrYl9tYXlfcHVsbGAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBza2IgZGF0YS4gU28sIHRoZSBwYXRjaCBpcyByZWxvYWRpbmcgdGhlIGBoZHJgIHBvaW50ZXIgYWZ0ZXIgdGhlIHBvdGVudGlhbCByZWFsbG9jYXRpb24uIFRoaXMgZGVmaW5pdGVseSBoYXMgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBzdGFiaWxpdHkuXG5cbkxldCdzIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzLiBgbXBsc19mb3J3YXJkYCBpcyBzdGF0aWM6IGBzdGF0aWMgaW50IG1wbHNfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpYC4gQW5kIGBtcGxzX2dldHJvdXRlYCBpcyBzdGF0aWMgYXMgd2VsbDogYHN0YXRpYyBpbnQgbXBsc19nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKmluX25saCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKWAuIEFsdGhvdWdoIHRoZXkncmUgc3RhdGljLCB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuLCBzbyB0aGV5IGNhbm5vdCBiZSBpbmxpbmVkLlxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0byBjb25zaWRlcj8gTGV0IG1lIHNlZS4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGlzIGFsc28gc3RhdGljLCBhbmQgaXRzIGFkZHJlc3MgaXNuJ3QgdGFrZW4uIEl0IG1pZ2h0IGJlIGlubGluZWQuIEkgc2hvdWxkIGF2b2lkIHVzaW5nIGBtcGxzX211bHRpcGF0aF9oYXNoYCBmb3IgdGhhdCByZWFzb24uXG5cblNvLCB0byBzdW1tYXJpemU6IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyByZWFkIGluIGBtcGxzX211bHRpcGF0aF9oYXNoYCBieSByZWxvYWRpbmcgdGhlIGBoZHJgIHBvaW50ZXIgYWZ0ZXIgY2FsbGluZyBgcHNrYl9tYXlfcHVsbGAsIHdoaWNoIG1pZ2h0IHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIuIFRoaXMgaW1wYWN0cyBNUExTIHBhY2tldCBmb3J3YXJkaW5nIGFuZCByb3V0ZSByZXRyaWV2YWwuIFRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgY29yZSBuZXR3b3JrIGxvZ2ljLCBzbyBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IEZvY3VzIFN5bWJvbHMsIGdpdmVuIHRoYXQsIHNob3VsZCBiZTpcbiogICBgbXBsc19mb3J3YXJkYFxuKiAgIGBtcGxzX2dldHJvdXRlYFxuXG5BbmQgdGhlIHJlcXVpcmVkIENvbmZpZ3M6XG4qICAgYE1QTFNgXG4qICAgYE1QTFNfUk9VVElOR2BcblxuSSBzaG91bGQgdmVyaWZ5IHRoZSBgTVBMU2AgY29uZmlndXJhdGlvbi4uLiB5ZXMsIGl0IGxvb2tzIGxpa2UgYGNvbmZpZyBNUExTYCBpcyBpbiBgbmV0L21wbHMvS2NvbmZpZ2AuIEl0J3MgYSBtZW51Y29uZmlnLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgZW5hYmxlZC4gSSBzZWUgYENPTkZJR19NUExTPXlgIGluIHRoZSBkb2N1bWVudGF0aW9uLiBPa2F5LCBJJ20gaGFwcHkgd2l0aCB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzUxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDo1NC4yODkwMjE1OTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDIxNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcGxzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wbHMvS2NvbmZpZy01LVxcbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcXG5uZXQvbXBscy9LY29uZmlnLTctXFx0Ym9vbCBcXFwiTXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcXFwiXFxuLS1cXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cXG4tLVxcbm5ldC9tcGxzL0tjb25maWctMjUtXFxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXFxubmV0L21wbHMvS2NvbmZpZy0yNy1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogcm91dGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21wbHMvS2NvbmZpZy0zMi1cXG5uZXQvbXBscy9LY29uZmlnOjMzOmNvbmZpZyBNUExTX0lQVFVOTkVMXFxubmV0L21wbHMvS2NvbmZpZy0zNC1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogSVAgb3ZlciBNUExTIHR1bm5lbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDo1NC4zNzcwNDgwMzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NzA3OTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ2hlY2tpbmcgTVBMUyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYE1QTFNgIGlzIGRlZmluaXRlbHkgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBTaW1wbGUgZW5vdWdoLiBMZXQgbWUganVzdCBjb25maXJtIHNvbWV0aGluZyBxdWljay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgbXBsc19mb3J3YXJkYCBpcyAqdGhlKiBvbmx5IHBhY2tldCBoYW5kbGVyIGluIHBsYWNlIHRoYXQgZGVhbHMgd2l0aCBNUExTIHRyYWZmaWMuIEkgbmVlZCB0byBiZSAxMDAlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiBvciBjb25mbGljdCB3aXRoIHNvbWUgb3RoZXIgbW9kdWxlLiBHb3R0YSBkb3QgbXkgaSdzIGFuZCBjcm9zcyBteSB0J3Mgb24gdGhpcyBvbmUgdG8ga2VlcCB0aGUgc3lzdGVtIHJ1bm5pbmcgc21vb3RobHkuIExldCdzIG1ha2Ugc3VyZSBpdCdzIGlzb2xhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjU3LjUzNDEzMjM5M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5ODY5OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wbHNfcGFja2V0X3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wbHMvYWZfbXBscy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcGxzL2FmX21wbHMuYz0zNjc9c3RhdGljIGludCBtcGxzX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy01MDQtXFxubmV0L21wbHMvYWZfbXBscy5jOjUwNTpzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIG1wbHNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbXBscy9hZl9tcGxzLmMtNTA2LVxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVBMU19VQyksXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9Mjg0MD1zdGF0aWMgaW50IF9faW5pdCBtcGxzX2luaXQodm9pZClcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy0yODUzLVxcbm5ldC9tcGxzL2FmX21wbHMuYzoyODU0OlxcdGRldl9hZGRfcGFjayhcXHUwMDI2bXBsc19wYWNrZXRfdHlwZSk7XFxubmV0L21wbHMvYWZfbXBscy5jLTI4NTUtXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjg3OC1vdXRfdW5yZWdpc3Rlcl9kZXZfdHlwZTpcXG5uZXQvbXBscy9hZl9tcGxzLmM6Mjg3OTpcXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNm1wbHNfcGFja2V0X3R5cGUpO1xcbm5ldC9tcGxzL2FmX21wbHMuYy0yODgwLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZtcGxzX2Rldl9ub3RpZmllcik7XFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9Mjg4Nz1zdGF0aWMgdm9pZCBfX2V4aXQgbXBsc19leGl0KHZvaWQpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjg5MC1cXHRydG5sX2FmX3VucmVnaXN0ZXIoXFx1MDAyNm1wbHNfYWZfb3BzKTtcXG5uZXQvbXBscy9hZl9tcGxzLmM6Mjg5MTpcXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNm1wbHNfcGFja2V0X3R5cGUpO1xcbm5ldC9tcGxzL2FmX21wbHMuYy0yODkyLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZtcGxzX2Rldl9ub3RpZmllcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjU3LjY1NDAwODc3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTM1NzExNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNUExTIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUncyBoYW5kbGluZyBvZiBgRVRIX1BfTVBMU19VQ2AgcGFja2V0cywgdGhhdCdzIHdoYXQgYG1wbHNfZm9yd2FyZGAgaXMgcmVzcG9uc2libGUgZm9yLiBJIHdhcyBpbml0aWFsbHkgd29uZGVyaW5nIGlmIHRoZXJlIHdlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyBJIG5lZWRlZCB0byBjb25zaWRlci4gSXQgbG9va3MgbGlrZSBgbXBsc19nZXRyb3V0ZWAgaGFuZGxlcyBgUlRNX0dFVFJPVVRFYCwgYG1wbHNfcnRtX25ld3JvdXRlYCBoYW5kbGVzIGBSVE1fTkVXUk9VVEVgLCBhbmQgYG1wbHNfcnRtX2RlbHJvdXRlYCB0YWtlcyBjYXJlIG9mIGBSVE1fREVMUk9VVEVgLiBBbmQgdGhlbiBgbXBsc19kdW1wX3JvdXRlc2AgYWxzbyBoYW5kbGVzIHRoZSBkdW1wIGZvciBgUlRNX0dFVFJPVVRFYCwgcmlnaHQuXG5cblRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBtcGxzX211bHRpcGF0aF9oYXNoYCwgYW5kIHRoYXQncyAqY2FsbGVkKiBieSBgbXBsc19zZWxlY3RfbXVsdGlwYXRoYC4gQW5kLCBpbXBvcnRhbnRseSwgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAgZ2V0cyAqY2FsbGVkKiBieSBib3RoIGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAuIFNvLCBmb2N1c2luZyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYG1wbHNfZm9yd2FyZGAgYW5kIGBtcGxzX2dldHJvdXRlYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBtb3ZlLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkLlxuXG5CYXNpY2FsbHksIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBmYWN0IHRoYXQgY2FsbGluZyBgcHNrYl9tYXlfcHVsbGAgY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YSwgd2hpY2ggbWVhbnMgdGhlIGBoZHJgIHBvaW50ZXIgbmVlZHMgdG8gYmUgcmVsb2FkZWQgdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgZGF0YS4gVGhpcyB2dWxuZXJhYmlsaXR5IGltcGFjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLiBJIGRlZmluaXRlbHkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEkgc3RhcnQgbXkgZnV6emluZyBydW5zLlxuXG5CYXNlZCBvbiBhbGwgb2YgdGhpcywgdGhlIGNyaXRpY2FsIHRhcmdldHMgYXJlIGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAuIFRoZSByZWxldmFudCBjb25maWdzIGFyZSBgTVBMU2AgYW5kIGBNUExTX1JPVVRJTkdgLiBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzcsIk91dHB1dFRva2VucyI6MTIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjExOjAzLjc4OTcyMzQ2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyODYxMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUExTXCIsXG4gICAgXCJNUExTX1JPVVRJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcGxzX2ZvcndhcmRcIixcbiAgICBcIm1wbHNfZ2V0cm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIHJlYWQgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGJ5IHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YS4gVGhpcyBhZmZlY3RzIE1QTFMgcGFja2V0IGZvcndhcmRpbmcgYW5kIHJvdXRlIHJldHJpZXZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUExTXCIsXG4gICAgXCJNUExTX1JPVVRJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcGxzX2ZvcndhcmRcIixcbiAgICBcIm1wbHNfZ2V0cm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIHJlYWQgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGJ5IHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YS4gVGhpcyBhZmZlY3RzIE1QTFMgcGFja2V0IGZvcndhcmRpbmcgYW5kIHJvdXRlIHJldHJpZXZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTE6MDMuOTQyNTk1Mjg4WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDYyMDUyNDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjExOjAzLjk0MzY0NzExOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNDYxOTQ2NzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYHBza2JfbWF5X3B1bGwoKWAgY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhIGJ1ZmZlciwgaW52YWxpZGF0aW5nIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIGBoZHJgIHBvaW50ZXIuIEFjY2Vzc2luZyBgaGRyYCBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYCB3aXRob3V0IHJlY29tcHV0aW5nIGl0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUuIFRoaXMgdHlwZSBvZiBtZW1vcnkgZXJyb3IgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnZvbHZlZCwgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyZmUyNzliYWQyZjRhZDMxOWNkYWQxMWE2MDRiMWZiYWYzZjUzYTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMToxMDowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcGxzL2FmX21wbHMuYyBiL25ldC9tcGxzL2FmX21wbHMuY1xuaW5kZXggOTYxYmU1MDU0YTAzOS4uMTdiNzhkY2JmOGFiYyAxMDA2NDRcbi0tLSBhL25ldC9tcGxzL2FmX21wbHMuY1xuKysrIGIvbmV0L21wbHMvYWZfbXBscy5jXG5AQCAtMjIxLDYgKzIyMSw3IEBAIHN0YXRpYyB1MzIgbXBsc19tdWx0aXBhdGhfaGFzaChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGlmIChwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKSB7XG4gXHRcdFx0Y29uc3Qgc3RydWN0IGlwaGRyICp2NGhkcjtcbiBcbitcdFx0XHRoZHIgPSBtcGxzX2hkcihza2IpICsgbGFiZWxfaW5kZXg7XG4gXHRcdFx0djRoZHIgPSAoY29uc3Qgc3RydWN0IGlwaGRyICopKGhkciArIDEpO1xuIFx0XHRcdGlmICh2NGhkci1cdTAwM2V2ZXJzaW9uID09IDQpIHtcbiBcdFx0XHRcdGhhc2ggPSBqaGFzaF8zd29yZHMobnRvaGwodjRoZHItXHUwMDNlc2FkZHIpLFxuQEAgLTIzMSw2ICsyMzIsNyBAQCBzdGF0aWMgdTMyIG1wbHNfbXVsdGlwYXRoX2hhc2goc3RydWN0IG1wbHNfcm91dGUgKnJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKnY2aGRyO1xuIFxuK1x0XHRcdFx0aGRyID0gbXBsc19oZHIoc2tiKSArIGxhYmVsX2luZGV4O1xuIFx0XHRcdFx0djZoZHIgPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKikoaGRyICsgMSk7XG4gXHRcdFx0XHRoYXNoID0gX19pcHY2X2FkZHJfamhhc2goXHUwMDI2djZoZHItXHUwMDNlc2FkZHIsIGhhc2gpO1xuIFx0XHRcdFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFx1MDAyNnY2aGRyLVx1MDAzZWRhZGRyLCBoYXNoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjExOjAzLjk0MzY0ODY3OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzE3OTA5MDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgaW4gTVBMUyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbXBscy9hZl9tcGxzLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIHJlLWV2YWx1YXRpb24gb2YgdGhlIGBoZHJgIHBvaW50ZXIgYWZ0ZXIgYGxhYmVsX2luZGV4YCwgcmlnaHQgYmVmb3JlIHdlIGdldCB0byB0aGUgSVB2NC9JUHY2IGhlYWRlciBleHRyYWN0aW9uLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGlzIGFzIGEgY2xhc3NpYyBmaXggZm9yIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgbG9naWMgaGVyZSBpcyB0aGF0IGBoZHIgPSBtcGxzX2hkcihza2IpICsgbGFiZWxfaW5kZXg7YCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgcHNrYl9tYXlfcHVsbCgpYCBoYXMgdGhlIG5hc3R5IGhhYml0IG9mIHBvc3NpYmx5IHJlYWxsb2NhdGluZyB0aGUgU0tCJ3MgbGluZWFyIGRhdGEgYXJlYS4gVGhhdCBtZWFucyBhbnkgcG9pbnRlcnMgaW50byB0aGF0IGFyZWEsIGxpa2Ugb3VyIGBoZHJgIHZhcmlhYmxlLCBjYW4gYmVjb21lIGNvbXBsZXRlbHkgaW52YWxpZC5cblxuQW5kLCBpZiB3ZSB0aGVuIHRyaWVkIHRvIGRlcmVmZXJlbmNlIGFuIGludmFsaWRhdGVkIHBvaW50ZXIgdG8gYGhkcmAsIHdlJ3JlIHN0YXJpbmcgZG93biB0aGUgYmFycmVsIG9mIGEgVUFGIGJ1ZyDigJMgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBsb3ZlcyB0byBjYXRjaC4gVGhlIGNvZGUgd2FzIHVzaW5nIGFuIGludmFsaWRhdGVkIHBvaW50ZXIgYW5kIGRlcmVmZXJlbmNpbmcgaXQhIFRoYXQncyBhIHByb2JsZW0uIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIGJlIHVzaW5nIGFuIG9sZCBwb2ludGVyLCBhbmQgdGhpcyBwYXRjaCBtYWtlcyBzdXJlIHdlIGhhdmUgYSBmcmVzaCBwb2ludGVyIHRvIHRoZSBNUExTIGhlYWRlciwgZXZlbiBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYC5cblxuTm93LCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBJJ20gZ29pbmcgdG8gdGFrZSBhIHBlZWsgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgLiBMZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyBwcm9wZXJseSBzY29wZWQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzIGJ5IGluYWR2ZXJ0ZW50bHkgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBhZGphY2VudCByb3V0aW5lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBUaGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIGZpeCwgYnV0IHZlcmlmaWNhdGlvbiBpcyBjcml0aWNhbCwgcGFydGljdWxhcmx5IGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjExOjIxLjEyMjc0MjkwNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wbHMvYWZfbXBscy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHRcXHRcXHQgKi9cXG4gMjExOlxcdFxcdFxcdFxcdGlmIChlbGlfc2VlbilcXG4gMjEyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMTM6XFx0XFx0XFx0fSBlbHNlIGlmIChkZWMubGFiZWwgPT0gTVBMU19MQUJFTF9FTlRST1BZKSB7XFxuIDIxNDpcXHRcXHRcXHRcXHRlbGlfc2VlbiA9IHRydWU7XFxuIDIxNTpcXHRcXHRcXHR9XFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdFxcdGlmICghZGVjLmJvcylcXG4gMjE4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHRcXHQvKiBmb3VuZCBib3R0b20gbGFiZWw7IGRvZXMgc2tiIGhhdmUgcm9vbSBmb3IgYSBoZWFkZXI/ICovXFxuIDIyMTpcXHRcXHRcXHRpZiAocHNrYl9tYXlfcHVsbChza2IsIG1wbHNfaGRyX2xlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkge1xcbiAyMjI6XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGlwaGRyICp2NGhkcjtcXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0XFx0XFx0aGRyID0gbXBsc19oZHIoc2tiKSArIGxhYmVsX2luZGV4O1xcbiAyMjU6XFx0XFx0XFx0XFx0djRoZHIgPSAoY29uc3Qgc3RydWN0IGlwaGRyICopKGhkciArIDEpO1xcbiAyMjY6XFx0XFx0XFx0XFx0aWYgKHY0aGRyLVxcdTAwM2V2ZXJzaW9uID09IDQpIHtcXG4gMjI3OlxcdFxcdFxcdFxcdFxcdGhhc2ggPSBqaGFzaF8zd29yZHMobnRvaGwodjRoZHItXFx1MDAzZXNhZGRyKSxcXG4gMjI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBudG9obCh2NGhkci1cXHUwMDNlZGFkZHIpLFxcbiAyMjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHY0aGRyLVxcdTAwM2Vwcm90b2NvbCwgaGFzaCk7XFxuIDIzMDpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHY0aGRyLVxcdTAwM2V2ZXJzaW9uID09IDYgXFx1MDAyNlxcdTAwMjZcXG4gMjMxOlxcdFxcdFxcdFxcdFxcdCAgIHBza2JfbWF5X3B1bGwoc2tiLCBtcGxzX2hkcl9sZW4gK1xcbiAyMzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XFxuIDIzMzpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqdjZoZHI7XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdFxcdFxcdFxcdGhkciA9IG1wbHNfaGRyKHNrYikgKyBsYWJlbF9pbmRleDtcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdHY2aGRyID0gKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopKGhkciArIDEpO1xcbiAyMzc6XFx0XFx0XFx0XFx0XFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFxcdTAwMjZ2Nmhkci1cXHUwMDNlc2FkZHIsIGhhc2gpO1xcbiAyMzg6XFx0XFx0XFx0XFx0XFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFxcdTAwMjZ2Nmhkci1cXHUwMDNlZGFkZHIsIGhhc2gpO1xcbiAyMzk6XFx0XFx0XFx0XFx0XFx0aGFzaCA9IGpoYXNoXzF3b3JkKHY2aGRyLVxcdTAwM2VuZXh0aGRyLCBoYXNoKTtcXG4gMjQwOlxcdFxcdFxcdFxcdH1cXG4gMjQxOlxcdFxcdFxcdH1cXG4gMjQyOlxcdFxcbiAyNDM6XFx0XFx0XFx0YnJlYWs7XFxuIDI0NDpcXHRcXHR9XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdHJldHVybiBoYXNoO1xcbiAyNDc6XFx0fVxcbiAyNDg6XFx0XFxuIDI0OTpcXHRzdGF0aWMgc3RydWN0IG1wbHNfbmggKm1wbHNfZ2V0X25leHRob3Aoc3RydWN0IG1wbHNfcm91dGUgKnJ0LCB1OCBpbmRleClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTE6MjEuMTIzMDY4MzI1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NDQwMDI2MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgYGhkciA9IG1wbHNfaGRyKHNrYikgKyBsYWJlbF9pbmRleDtgIGxpbmUgYmVmb3JlIGFjY2Vzc2luZyB0aGUgYHY0aGRyYCBhbmQgYHY2aGRyYCBzdHJ1Y3R1cmVzIHdpdGhpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAuIFRoZSBwcm9ibGVtIEkgc2VlIGlzIHRoYXQgdGhlcmUncyBhIGBwc2tiX21heV9wdWxsYCBjYWxsIGhhcHBlbmluZyAqYmVmb3JlKiB0aG9zZSBhY2Nlc3Nlcy4gSSBrbm93IGBwc2tiX21heV9wdWxsYCBjYW4gcG90ZW50aWFsbHkgcmVhbGxvY2F0ZSB0aGUgYHNrYmAncyBkYXRhIGJ1ZmZlci4gVGhhdCBtZWFucyB0aGUgYGhkcmAgcG9pbnRlciwgd2hpY2ggd2FzIHNldCBlYXJsaWVyLCBjb3VsZCBiZWNvbWUgaW52YWxpZCDigJMgYSBjbGFzc2ljIGRhbmdsaW5nIHBvaW50ZXIgc2l0dWF0aW9uLlxuXG5JZiBgcHNrYl9tYXlfcHVsbGAgcmVhbGxvY2F0ZXMgdGhlIGJ1ZmZlciwgYGhkcmAgaXMgbm93IHBvaW50aW5nIHRvIGZyZWVkIG1lbW9yeS4gQW5kIHRoZW4sIHdlIHRyeSB0byBkZXJlZmVyZW5jZSBpdCB0byByZWFkIElQIGhlYWRlciBkYXRhIC0gdGhhdCdzIGEgYmxhdGFudCB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoYXQncyB3aHkgdGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcmUtZXZhbHVhdGluZyBgaGRyID0gbXBsc19oZHIoc2tiKSArIGxhYmVsX2luZGV4O2AgKmFmdGVyKiB0aGUgYHBza2JfbWF5X3B1bGxgIGNhbGwuIFNpbXBsZSwgYnV0IGNyaXRpY2FsLlxuXG5JJ20gdGhpbmtpbmcgdGhpcyBpcyBwcmVjaXNlbHkgdGhlIHNvcnQgb2YgdGhpbmcgS0FTQU4gZXhjZWxzIGF0IGNhdGNoaW5nLiBJdCdzIGEgdGV4dGJvb2sgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIEl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBhbiBpc3N1ZSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHByZS1wYXRjaCBjb2RlIHRvIHNvbGlkaWZ5IHRoZSB0aG91Z2h0OlxuXG5gYGBjXG5cdFx0LyogZm91bmQgYm90dG9tIGxhYmVsOyBkb2VzIHNrYiBoYXZlIHJvb20gZm9yIGEgaGVhZGVyPyAqL1xuXHRcdGlmIChwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKSB7XG5cdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyO1xuXG5cdFx0XHR2NGhkciA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKikoaGRyICsgMSk7XG5cdFx0XHRpZiAodjRoZHItXHUwMDNldmVyc2lvbiA9PSA0KSB7XG5cdFx0XHRcdGhhc2ggPSBqaGFzaF8zd29yZHMobnRvaGwodjRoZHItXHUwMDNlc2FkZHIpLFxuXHRcdFx0XHRcdFx0ICAgIG50b2hsKHY0aGRyLVx1MDAzZWRhZGRyKSxcblx0XHRcdFx0XHRcdCAgICB2NGhkci1cdTAwM2Vwcm90b2NvbCwgaGFzaCk7XG5cdFx0XHR9IGVsc2UgaWYgKHY0aGRyLVx1MDAzZXZlcnNpb24gPT0gNiBcdTAwMjZcdTAwMjZcblx0XHRcdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIG1wbHNfaGRyX2xlbiArXG5cdFx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcblx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKnY2aGRyO1xuXG5cdFx0XHRcdHY2aGRyID0gKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopKGhkciArIDEpO1xuXHRcdFx0XHRoYXNoID0gX19pcHY2X2FkZHJfamhhc2goXHUwMDI2djZoZHItXHUwMDNlc2FkZHIsIGhhc2gpO1xuXHRcdFx0XHRoYXNoID0gX19pcHY2X2FkZHJfamhhc2goXHUwMDI2djZoZHItXHUwMDNlZGFkZHIsIGhhc2gpO1xuXHRcdFx0XHRoYXNoID0gamhhc2hfMXdvcmQodjZoZHItXHUwMDNlbmV4dGhkciwgaGFzaCk7XG5cdFx0XHR9XG5cdFx0fVxuYGBgXG5cblllcCwgYXMgSSBzdXNwZWN0ZWQsIHRoZSBgcHNrYl9tYXlfcHVsbGAgY2FsbCBjb3VsZCBpbmRlZWQgaW52YWxpZGF0ZSBgc2tiLVx1MDAzZWhlYWRgIGFuZCBgc2tiLVx1MDAzZWRhdGFgLCBsZWF2aW5nIGBoZHJgIGRhbmdsaW5nLiBUaGlzIGlzIGEgY2xlYXItY3V0IHVzZS1hZnRlci1mcmVlLiAgS0FTQU4gd291bGQgYWJzb2x1dGVseSBuYWlsIHRoaXMuIEtNU0FOLCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgc2FuaXRpemVyLCBpc24ndCBhcHBsaWNhYmxlIGhlcmUsIHNvIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuIEdvb2QgY2F0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTcsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTE6MzguNTYzMDk3OTg4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyB3aGVyZSBgcHNrYl9tYXlfcHVsbCgpYCBjYW4gcmVhbGxvY2F0ZSB0aGUgc2tiIGRhdGEgYnVmZmVyLCBpbnZhbGlkYXRpbmcgdGhlIHByZXZpb3VzbHkgY29tcHV0ZWQgYGhkcmAgcG9pbnRlci4gQWNjZXNzaW5nIGBoZHJgIGFmdGVyIGBwc2tiX21heV9wdWxsKClgIHdpdGhvdXQgcmVjb21wdXRpbmcgaXQgbGVhZHMgdG8gYSB1c2UtYWZ0ZXItZnJlZS4gVGhpcyB0eXBlIG9mIG1lbW9yeSBlcnJvciBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIGludm9sdmVkLCBzbyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYHBza2JfbWF5X3B1bGwoKWAgY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhIGJ1ZmZlciwgaW52YWxpZGF0aW5nIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIGBoZHJgIHBvaW50ZXIuIEFjY2Vzc2luZyBgaGRyYCBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYCB3aXRob3V0IHJlY29tcHV0aW5nIGl0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUuIFRoaXMgdHlwZSBvZiBtZW1vcnkgZXJyb3IgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnZvbHZlZCwgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg9sk7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 11:08:07 +0000 UTC FinishedAt: 2026-08-14 11:11:40 +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": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPLS", "MPLS_ROUTING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPLS", "MPLS_ROUTING" ], "series_id": "b33b2a58-1451-490e-a4df-087a33c1f2a9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mpls_forward", "mpls_getroute" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QTFMmIzM0OywKICAgICYjMzQ7TVBMU19ST1VUSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXBsc19mb3J3YXJkJiMzNDssCiAgICAmIzM0O21wbHNfZ2V0cm91dGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyB3aGVyZSBgcHNrYl9tYXlfcHVsbCgpYCBjYW4gcmVhbGxvY2F0ZSB0aGUgc2tiIGRhdGEgYnVmZmVyLCBpbnZhbGlkYXRpbmcgdGhlIHByZXZpb3VzbHkgY29tcHV0ZWQgYGhkcmAgcG9pbnRlci4gQWNjZXNzaW5nIGBoZHJgIGFmdGVyIGBwc2tiX21heV9wdWxsKClgIHdpdGhvdXQgcmVjb21wdXRpbmcgaXQgbGVhZHMgdG8gYSB1c2UtYWZ0ZXItZnJlZS4gVGhpcyB0eXBlIG9mIG1lbW9yeSBlcnJvciBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIGludm9sdmVkLCBzbyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAgYnkgcmVsb2FkaW5nIHRoZSBgaGRyYCBwb2ludGVyIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGxgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBUaGlzIGFmZmVjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjJmZTI3OWJhZDJmNGFkMzE5Y2RhZDExYTYwNGIxZmJhZjNmNTNhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDExOjEwOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcGxzL2FmX21wbHMuYyBiL25ldC9tcGxzL2FmX21wbHMuY1xuaW5kZXggOTYxYmU1MDU0YTAzOS4uMTdiNzhkY2JmOGFiYyAxMDA2NDRcbi0tLSBhL25ldC9tcGxzL2FmX21wbHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wbHMvYWZfbXBscy5jXG5AQCAtMjIxLDYgJiM0MzsyMjEsNyBAQCBzdGF0aWMgdTMyIG1wbHNfbXVsdGlwYXRoX2hhc2goc3RydWN0IG1wbHNfcm91dGUgKnJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRpZiAocHNrYl9tYXlfcHVsbChza2IsIG1wbHNfaGRyX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSkpIHtcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyO1xuIFxuJiM0MztcdFx0XHRoZHIgPSBtcGxzX2hkcihza2IpICYjNDM7IGxhYmVsX2luZGV4O1xuIFx0XHRcdHY0aGRyID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKShoZHIgJiM0MzsgMSk7XG4gXHRcdFx0aWYgKHY0aGRyLVx1MDAzZXZlcnNpb24gPT0gNCkge1xuIFx0XHRcdFx0aGFzaCA9IGpoYXNoXzN3b3JkcyhudG9obCh2NGhkci1cdTAwM2VzYWRkciksXG5AQCAtMjMxLDYgJiM0MzsyMzIsNyBAQCBzdGF0aWMgdTMyIG1wbHNfbXVsdGlwYXRoX2hhc2goc3RydWN0IG1wbHNfcm91dGUgKnJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKnY2aGRyO1xuIFxuJiM0MztcdFx0XHRcdGhkciA9IG1wbHNfaGRyKHNrYikgJiM0MzsgbGFiZWxfaW5kZXg7XG4gXHRcdFx0XHR2NmhkciA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKShoZHIgJiM0MzsgMSk7XG4gXHRcdFx0XHRoYXNoID0gX19pcHY2X2FkZHJfamhhc2goXHUwMDI2djZoZHItXHUwMDNlc2FkZHIsIGhhc2gpO1xuIFx0XHRcdFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFx1MDAyNnY2aGRyLVx1MDAzZWRhZGRyLCBoYXNoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBMUyYjMzQ7LAogICAgJiMzNDtNUExTX1JPVVRJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcGxzX2ZvcndhcmQmIzM0OywKICAgICYjMzQ7bXBsc19nZXRyb3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIHJlYWQgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGJ5IHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YS4gVGhpcyBhZmZlY3RzIE1QTFMgcGFja2V0IGZvcndhcmRpbmcgYW5kIHJvdXRlIHJldHJpZXZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyZmUyNzliYWQyZjRhZDMxOWNkYWQxMWE2MDRiMWZiYWYzZjUzYTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxMToxMDowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tcGxzL2FmX21wbHMuYyBiL25ldC9tcGxzL2FmX21wbHMuYwppbmRleCA5NjFiZTUwNTRhMDM5Li4xN2I3OGRjYmY4YWJjIDEwMDY0NAotLS0gYS9uZXQvbXBscy9hZl9tcGxzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wbHMvYWZfbXBscy5jCkBAIC0yMjEsNiAmIzQzOzIyMSw3IEBAIHN0YXRpYyB1MzIgbXBsc19tdWx0aXBhdGhfaGFzaChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IpCiAJCWlmIChwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkgewogCQkJY29uc3Qgc3RydWN0IGlwaGRyICp2NGhkcjsKIAomIzQzOwkJCWhkciA9IG1wbHNfaGRyKHNrYikgJiM0MzsgbGFiZWxfaW5kZXg7CiAJCQl2NGhkciA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKikoaGRyICYjNDM7IDEpOwogCQkJaWYgKHY0aGRyLSZndDt2ZXJzaW9uID09IDQpIHsKIAkJCQloYXNoID0gamhhc2hfM3dvcmRzKG50b2hsKHY0aGRyLSZndDtzYWRkciksCkBAIC0yMzEsNiAmIzQzOzIzMiw3IEBAIHN0YXRpYyB1MzIgbXBsc19tdWx0aXBhdGhfaGFzaChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHsKIAkJCQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqdjZoZHI7CiAKJiM0MzsJCQkJaGRyID0gbXBsc19oZHIoc2tiKSAmIzQzOyBsYWJlbF9pbmRleDsKIAkJCQl2NmhkciA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKShoZHIgJiM0MzsgMSk7CiAJCQkJaGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKCZhbXA7djZoZHItJmd0O3NhZGRyLCBoYXNoKTsKIAkJCQloYXNoID0gX19pcHY2X2FkZHJfamhhc2goJmFtcDt2Nmhkci0mZ3Q7ZGFkZHIsIGhhc2gpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVBMUyBNdWx0aXBhdGggSGFzaCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB3aXRoaW4gYG5ldC9tcGxzL2FmX21wbHMuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGZpeGluZyBhIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmUtYXNzaWdubWVudCBvZiBgaGRyYCBhZnRlciBhIGBwc2tiX21heV9wdWxsYCBjYWxsOiBgaGRyID0gbXBsc19oZHIoc2tiKSAmIzQzOyBsYWJlbF9pbmRleDtgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHJlYWxsb2NhdGlvbiBwcm9ibGVtLiBUaGUgYHBza2JfbWF5X3B1bGxgIGZ1bmN0aW9uLCBhcyBJIHJlY2FsbCwgY2FuIHBvdGVudGlhbGx5IHJlYWxsb2NhdGUgdGhlIFNvY2tldCBCdWZmZXIgKHNrYikgZGF0YS4gSWYgdGhhdCBoYXBwZW5zLCBhbnkgcG9pbnRlcnMgdG8gdGhlIG9yaWdpbmFsIGRhdGEsIGluY2x1ZGluZyBvdXIgYGhkcmAgcG9pbnRlciwgd291bGQgYmVjb21lIGludmFsaWQuIFRoZXJlZm9yZSwgcmUtY2FsY3VsYXRpbmcgdGhlIGBoZHJgIG9mZnNldCBwb3N0LWBwc2tiX21heV9wdWxsYCBpcyBhIHNtYXJ0IGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0YWN0aWMuIEl0IGVuc3VyZXMgd2UmIzM5O3JlIGFsd2F5cyB3b3JraW5nIHdpdGggYSB2YWxpZCBwb2ludGVyIHRvIHRoZSBNUExTIGhlYWRlciwgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBza2IgaGFzIGJlZW4gbW92ZWQgaW4gbWVtb3J5LiBJIHdpbGwgbm93IGV4YW1pbmUgYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGluIGBuZXQvbXBscy9hZl9tcGxzLmNgIHRvIGZ1cnRoZXIgY29uZmlybSB0aGVzZSBzdXNwaWNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wbHNfbXVsdGlwYXRoX2hhc2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9hZl9tcGxzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jPTE3OD1FWFBPUlRfU1lNQk9MX0dQTChtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMpO1xubmV0L21wbHMvYWZfbXBscy5jLTE3OS1cbm5ldC9tcGxzL2FmX21wbHMuYzoxODA6c3RhdGljIHUzMiBtcGxzX211bHRpcGF0aF9oYXNoKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcGxzL2FmX21wbHMuYy0xODEte1xuLS1cbm5ldC9tcGxzL2FmX21wbHMuYz0yNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBtcGxzX25oICptcGxzX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IG1wbHNfcm91dGUgKnJ0LFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yNzYtXG5uZXQvbXBscy9hZl9tcGxzLmM6Mjc3Olx0aGFzaCA9IG1wbHNfbXVsdGlwYXRoX2hhc2gocnQsIHNrYik7XG5uZXQvbXBscy9hZl9tcGxzLmMtMjc4LVx0bmhfaW5kZXggPSBoYXNoICUgYWxpdmU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTXVsdGlwYXRoIEhhc2hpbmcgTG9naWMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbXBsc19tdWx0aXBhdGhfaGFzaGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IG9mIHRoZSBtdWx0aXBhdGggc2VsZWN0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSBiZWluZyBpbnZva2VkIGJ5IGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAuIFdoZXJlIGlzICp0aGF0KiBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgb2YgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAgd2lsbCBnaXZlIG1lIGludmFsdWFibGUgaW5zaWdodCBpbnRvIHRoZSBoaWdoZXItbGV2ZWwgbG9naWMgZmxvdyBhbmQgdHJpZ2dlciBjb25kaXRpb25zIHRoYXQgdWx0aW1hdGVseSByZWx5IG9uIHRoaXMgaGFzaGluZyBtZWNoYW5pc20uIEl0JiMzOTtzIGFsbCBhYm91dCB0cmFjaW5nIHRoZSBkZXBlbmRlbmN5IGNoYWluIHRvIGZ1bGx5IGdyYXNwIHRoZSBvcGVyYXRpb25hbCBpbXBhY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKmRyaXZpbmcqIHRoaXMgc2VsZWN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXBsc19zZWxlY3RfbXVsdGlwYXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL2FmX21wbHMuYz0yNDk9c3RhdGljIHN0cnVjdCBtcGxzX25oICptcGxzX2dldF9uZXh0aG9wKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgdTggaW5kZXgpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTI1OC0gKi9cbm5ldC9tcGxzL2FmX21wbHMuYzoyNTk6c3RhdGljIGNvbnN0IHN0cnVjdCBtcGxzX25oICptcGxzX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IG1wbHNfcm91dGUgKnJ0LFxubmV0L21wbHMvYWZfbXBscy5jLTI2MC1cdFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYz0zNjc9c3RhdGljIGludCBtcGxzX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmMtNDE3LVxubmV0L21wbHMvYWZfbXBscy5jOjQxODpcdG5oID0gbXBsc19zZWxlY3RfbXVsdGlwYXRoKHJ0LCBza2IpO1xubmV0L21wbHMvYWZfbXBscy5jLTQxOS1cdGlmICghbmgpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jPTI0MTM9c3RhdGljIGludCBtcGxzX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqaW5fbmxoLFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yNTIxLVxubmV0L21wbHMvYWZfbXBscy5jOjI1MjI6XHRuaCA9IG1wbHNfc2VsZWN0X211bHRpcGF0aChydCwgc2tiKTtcbm5ldC9tcGxzL2FmX21wbHMuYy0yNTIzLVx0aWYgKCFuaCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNUExTIEZvcndhcmRpbmcgTG9naWMgUmV2aWV3KioKCk9rYXksIHNvIGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAgYm90aCB1bHRpbWF0ZWx5IGZ1bm5lbCBpbnRvIGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgLiBUaGF0JiMzOTtzIHRoZSBoZWFydCBvZiB0aGUgTVBMUyBmb3J3YXJkaW5nIHByb2Nlc3MsIHRoZSBjb3JlIGtlcm5lbCBsb2dpYy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZsb3cgY29tcGxldGVseS4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSB0byBlbnN1cmUgdGhlIE1QTFMgY29uZmlndXJhdGlvbiBpcyB3aGF0IEkgZXhwZWN0LiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBjb25maXJtIHRoZSBiYXNpY3MgYmVmb3JlIGRpc3NlY3RpbmcgdGhlIG1vcmUgY29tcGxleCBicmFuY2hpbmcgbG9naWMgd2l0aGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNUExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wbHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL0tjb25maWctNS1cbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcbm5ldC9tcGxzL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7TXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcJiMzNDtcbi0tXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cbi0tXG5uZXQvbXBscy9LY29uZmlnLTI1LVxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXG5uZXQvbXBscy9LY29uZmlnLTI3LVx0dHJpc3RhdGUgXCYjMzQ7TVBMUzogcm91dGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21wbHMvS2NvbmZpZy0zMi1cbm5ldC9tcGxzL0tjb25maWc6MzM6Y29uZmlnIE1QTFNfSVBUVU5ORUxcbm5ldC9tcGxzL0tjb25maWctMzQtXHR0cmlzdGF0ZSBcJiMzNDtNUExTOiBJUCBvdmVyIE1QTFMgdHVubmVsIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBNUExTIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhlIGBhZl9tcGxzLmNgIG1vZHVsZSBnZXRzIGJ1aWx0LiBUaW1lIHRvIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIGNoZWNrIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMuIEkmIzM5O2xsIG9wZW4gdXAgYG5ldC9tcGxzL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZXhwbGljaXQgZGVwZW5kZW5jaWVzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCB0byBicmluZyB0aGF0IHBpZWNlIG9mIHRoZSBwdXp6bGUgdG9nZXRoZXIuIEkgZXhwZWN0IGl0JiMzOTtzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgYnV0IGl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHByZWNpc2UgYW5kIGNvbmZpcm0gdGhlIHNwZWNpZmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZfbXBscyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcGxzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX01QTFNfSVBUVU5ORUwpICYjNDM7PSBtcGxzX2lwdHVubmVsLm9cbm5ldC9tcGxzL01ha2VmaWxlLTgtXG5uZXQvbXBscy9NYWtlZmlsZTo5Om1wbHNfcm91dGVyLXkgOj0gYWZfbXBscy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIGBtcGxzX3JvdXRlci15YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1wbHNfcm91dGVyLXlgLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUmIzM5O3MgdGhpcyB0aGluZyBldmVuIGNvbWluZyBmcm9tPyYjMzQ7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBjaGFpbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCYjMzk7cyBiZWluZyBjb21waWxlZC4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIOKAkyBpbiB0aGlzIGNhc2UsIGl0JiMzOTtzIHByZXR0eSBvYnZpb3VzIHRoYXQgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBNUExTLCBJIHNob3VsZCBjaGVjayB0aGUgYG5ldC9tcGxzL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBpcyBtb3N0IGxpa2VseS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHRyYWNrIGRvd24gdGhvc2UgY29tcGlsYXRpb24gdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXBscy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBNUExTLlxuICAgNDpcdCNcbiAgIDU6XHRvYmotJChDT05GSUdfTkVUX01QTFNfR1NPKSAmIzQzOz0gbXBsc19nc28ub1xuICAgNjpcdG9iai0kKENPTkZJR19NUExTX1JPVVRJTkcpICYjNDM7PSBtcGxzX3JvdXRlci5vXG4gICA3Olx0b2JqLSQoQ09ORklHX01QTFNfSVBUVU5ORUwpICYjNDM7PSBtcGxzX2lwdHVubmVsLm9cbiAgIDg6XHRcbiAgIDk6XHRtcGxzX3JvdXRlci15IDo9IGFmX21wbHMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBNUExTIFJvdXRpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBrZXJuZWwgYnVpbGRzIHRoZSBNUExTIHJvdXRpbmcgY29tcG9uZW50cy4gSSBzZWUgdGhhdCBgQ09ORklHX01QTFNfUk9VVElOR2AgaXMgdGhlIGtleSBoZXJlOyBpdCBkaXJlY3RseSBsZWFkcyB0byB0aGUgY29tcGlsYXRpb24gb2YgYG1wbHNfcm91dGVyLm9gLCBhbmQsIGNydWNpYWxseSwgdGhhdCBpbmNsdWRlcyBgYWZfbXBscy5vYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBwYXJ0IEkgbmVlZCB0byB1bmRlcnN0YW5kLgoKTm93LCBJJiMzOTttIHRoaW5raW5nLCB0aGlzIGlzIGFsbCBkcml2ZW4gYnkgdGhlIGBNUExTX1JPVVRJTkdgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBoaWRkZW4gc3VycHJpc2VzIG9yIHJlbGF0ZWQgY29uZmlncyB0aGF0IGluZmx1ZW5jZSB0aGlzIGJ1aWxkLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvbXBscy9LY29uZmlnYCB0byBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGdvaW5nIG9uIGJlaGluZCB0aGUgc2NlbmVzIHdpdGggdGhpcyBgTVBMU19ST1VUSU5HYCBvcHRpb24uIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcyBmb3IgYSBmdWxsIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wbHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHRcdHRyaXN0YXRlIFwmIzM0O01QTFM6IEdTTyBzdXBwb3J0XCYjMzQ7XG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgVGhpcyBpcyBoZWxwZXIgbW9kdWxlIHRvIGFsbG93IHNlZ21lbnRhdGlvbiBvZiBub24tTVBMUyBHU08gcGFja2V0c1xuICAyMzpcdFx0IHRoYXQgaGF2ZSBoYWQgTVBMUyBzdGFjayBlbnRyaWVzIHB1c2hlZCBvbnRvIHRoZW0gYW5kIHRodXNcbiAgMjQ6XHRcdCBiZWNvbWUgTVBMUyBHU08gcGFja2V0cy5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgTVBMU19ST1VUSU5HXG4gIDI3Olx0XHR0cmlzdGF0ZSBcJiMzNDtNUExTOiByb3V0aW5nIHN1cHBvcnRcJiMzNDtcbiAgMjg6XHRcdGRlcGVuZHMgb24gTkVUX0lQX1RVTk5FTCB8fCBORVRfSVBfVFVOTkVMPW5cbiAgMjk6XHRcdGRlcGVuZHMgb24gUFJPQ19TWVNDVExcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCBBZGQgc3VwcG9ydCBmb3IgZm9yd2FyZGluZyBvZiBtcGxzIHBhY2tldHMuXG4gIDMyOlx0XG4gIDMzOlx0Y29uZmlnIE1QTFNfSVBUVU5ORUxcbiAgMzQ6XHRcdHRyaXN0YXRlIFwmIzM0O01QTFM6IElQIG92ZXIgTVBMUyB0dW5uZWwgc3VwcG9ydFwmIzM0O1xuICAzNTpcdFx0ZGVwZW5kcyBvbiBMV1RVTk5FTCBcdTAwMjZcdTAwMjYgTVBMU19ST1VUSU5HXG4gIDM2Olx0XHRoZWxwXG4gIDM3Olx0XHQgbXBscyBpcCB0dW5uZWwgc3VwcG9ydC5cbiAgMzg6XHRcbiAgMzk6XHRlbmRpZiAjIE1QTFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNUExTIFJvdXRpbmcgTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgTVBMU19ST1VUSU5HYC4gSSBzZWUgaW1tZWRpYXRlbHkgdGhhdCBpdHMgY29uZmlndXJhdGlvbiBkZXBlbmRzIG9uIGJvdGggYE5FVF9JUF9UVU5ORUxgIChvciwgY3J1Y2lhbGx5LCBiZWluZyAqdW5zZXQqIHRvIGVuc3VyZSB0dW5uZWwgZnVuY3Rpb25hbGl0eSBpc24mIzM5O3QgcHJlc2VudCkgYW5kIGBQUk9DX1NZU0NUTGAuIFNlZW1zIGxvZ2ljYWwuIEl0JiMzOTtzIHVuZGVyIHRoZSBgbWVudWNvbmZpZyBNUExTYCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBNUExTYCBhbmQgYE1QTFNfUk9VVElOR2AgYXJlIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gZ2V0IHRoaXMgY29kZSBpbnZvbHZlZC4gR29vZCwgSSBrbm93IHRoZSBkZXBlbmRlbmNpZXMuCgpOb3csIHRoaXMgcGF0Y2guLi4gdGhpcyBpcyBpbnRlcmVzdGluZy4gVGhleSYjMzk7cmUgc2F5aW5nIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSB3aXRoIGBwc2tiX21heV9wdWxsYCBwb3NzaWJseSByZWFsbG9jYXRpbmcgdGhlIGBza2JgIGRhdGEsIGJ1dCBub3QgdXBkYXRpbmcgdGhlIGBoZHJgIHBvaW50ZXIuIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHRoZXkgdHJ5IHRvIGFjY2VzcyBgdjRoZHJgIG9yIGB2NmhkcmAuIERlZmluaXRlbHkgYSB2dWxuZXJhYmlsaXR5IGNhbmRpZGF0ZS4gVGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggdGhyb3dpbmcgZnV6emluZyBhdC4gSSYjMzk7bGwgZmxhZyBpdCBmb3IgZGV0YWlsZWQgZnV6emluZywgdG8gYmUgY2VydGFpbi4KCkxldCYjMzk7cyBzZWUsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIGJlIGZvY3VzaW5nIG9uIGhlcmU/IEkgc2VlIGBtcGxzX211bHRpcGF0aF9oYXNoYCBhbmQgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAgYXJlIGJvdGggc3RhdGljLCBzbyB0aGV5JiMzOTtyZSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLiBgbXBsc19mb3J3YXJkYCBpcyBhbHNvIHN0YXRpYy4uLiB3YWl0IGEgc2Vjb25kLi4uIGBtcGxzX2ZvcndhcmRgIGlzIHJlZ2lzdGVyZWQgYXMgYSAqcGFja2V0IGhhbmRsZXIqPyBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCEgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgYWZfbXBscy5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBlbnRyeSBwb2ludCBpcywgYW5kIHRoYXQgd2lsbCBnaXZlIG1lIG15IGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcGxzX2ZvcndhcmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9hZl9tcGxzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jPTI5NT1zdGF0aWMgYm9vbCBtcGxzX2VncmVzcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcGxzX3JvdXRlICpydCxcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmMtMzY2LVxubmV0L21wbHMvYWZfbXBscy5jOjM2NzpzdGF0aWMgaW50IG1wbHNfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L21wbHMvYWZfbXBscy5jLTM2OC1cdFx0XHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jPTUwNT1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIG1wbHNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHtcbm5ldC9tcGxzL2FmX21wbHMuYy01MDYtXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01QTFNfVUMpLFxubmV0L21wbHMvYWZfbXBscy5jOjUwNzpcdC5mdW5jID0gbXBsc19mb3J3YXJkLFxubmV0L21wbHMvYWZfbXBscy5jLTUwOC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTE4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIE1QTFMgRm9yd2FyZGluZyBpbiB0aGUgUmVjZWl2ZSBQYXRoKioKCkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXMgdXNpbmcgYG1wbHNfZm9yd2FyZGAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gKGAuZnVuY2ApIGZvciBoYW5kbGluZyBgbXBsc19wYWNrZXRfdHlwZWAuIFRoYXQgc2VlbXMgbG9naWNhbDsgaXQmIzM5O3MgdGhlIGV4cGVjdGVkIGVudHJ5IHBvaW50IGZvciBNUExTIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBuZXR3b3JrJiMzOTtzIHJlY2VpdmUgcGF0aC4gVGhhdCBtYWtlcyBzZW5zZS4gSG93ZXZlciwgYmVmb3JlIEkgZmluYWxpemUgdGhpcyB1bmRlcnN0YW5kaW5nLCBJIHNob3VsZCBjcm9zcy1yZWZlcmVuY2UgdGhpcyBhbmQgZW5zdXJlIHRoYXQgaXQgaXMgbm90IGJlaW5nIGRvbmUgZWxzZXdoZXJlLgoKSSBzaG91bGQgYWxzbyBxdWlja2x5IGNvbnNpZGVyIGlmIGBtcGxzX2dldHJvdXRlYCBpcyBkb2luZyBhbnkgcGFydCBvZiB0aGlzIHRhc2suIEl0IGlzIHBvc3NpYmxlIHRoYXQgYG1wbHNfZ2V0cm91dGVgIGhhbmRsZXMgdGhpcyB0cmFmZmljIGFuZCB0aHVzIGRvZXMgbm90IHVzZSBgbXBsc19mb3J3YXJkYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBob3cgYG1wbHNfZ2V0cm91dGVgIGlzIGltcGxlbWVudGVkIHRvIG1ha2Ugc3VyZSBpdCBkb2VzbiYjMzk7dCBhbHNvIHBsYXkgYSBzaWduaWZpY2FudCByb2xlLiBHb3R0YSBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSBpbiB0aGUgZm9yd2FyZGluZyBwbGFuZS4gV2UgY2FuJiMzOTt0IGhhdmUgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wbHNfZ2V0cm91dGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9hZl9tcGxzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jPTIzNTU9c3RhdGljIGludCBtcGxzX3ZhbGlkX2dldHJvdXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yNDEyLVxubmV0L21wbHMvYWZfbXBscy5jOjI0MTM6c3RhdGljIGludCBtcGxzX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqaW5fbmxoLFxubmV0L21wbHMvYWZfbXBscy5jLTI0MTQtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmM9MjgyOD1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbXBsc19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGRhdGFfb3JfbW9kdWxlID0ge1xuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yODMyLVx0IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbm5ldC9tcGxzL2FmX21wbHMuYzoyODMzOlx0e1RISVNfTU9EVUxFLCBQRl9NUExTLCBSVE1fR0VUUk9VVEUsIG1wbHNfZ2V0cm91dGUsIG1wbHNfZHVtcF9yb3V0ZXMsXG5uZXQvbXBscy9hZl9tcGxzLmMtMjgzNC1cdCBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYG1wbHNfZ2V0cm91dGVgIGFzIGEgUG90ZW50aWFsIFRlc3QgRW50cnlwb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1wbHNfZ2V0cm91dGVgLiBJdCYjMzk7cyBhIGhhbmRsZXIgZm9yIGBSVE1fR0VUUk9VVEVgIHdpdGhpbiB0aGUgYFBGX01QTFNgIGZhbWlseSwgbWVhbmluZyBpdCYjMzk7cyBhbiBSVE5MIChSb3V0aW5nIFRhYmxlIE5ldGxpbmspIGhhbmRsZXIuIFRoYXQgc291bmRzIGxpa2UgYSBkZWNlbnQgcGxhY2UgdG8gc3RhcnQsIGRlZmluaXRlbHkgbm90IGEgaG90LXBhdGggZnVuY3Rpb24sIHVubGlrZSwgc2F5LCBgbXBsc19mb3J3YXJkYCB3aGljaCBpcywgb2J2aW91c2x5LCBpbnZvbHZlZCBpbiBwYWNrZXQgZm9yd2FyZGluZyBhbmQgdGh1cywgcGVyZm9ybWFuY2UgY3JpdGljYWwuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIHRob3NlLiBTbywgYG1wbHNfZ2V0cm91dGVgIGlzIGdvb2QsIGEgbmV0bGluayBoYW5kbGVyIGlzIGV4YWN0bHkgd2hhdCB0aGV5IGFyZSBhc2tpbmcgZm9yLgoKSG1tLCB3YWl0LiBJcyBgbXBsc19nZXRyb3V0ZWAgc3RhdGljPyBBaCwgeWVzLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IG1wbHNfZ2V0cm91dGUoLi4uKWAuIFRoZSBwcm9tcHQgc3BlY2lmaWVzOiAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4mIzM0OyBUaGF0JiMzOTtzIGEgYml0IG9mIGEgd3JpbmtsZS4gSG93ZXZlciwgaXQgKmlzKiBhbiBBUEkgZW50cnlwb2ludCwgaXQmIzM5O3MgdGhlIG5ldGxpbmsgaGFuZGxlciBmdW5jdGlvbiwgZXZlbiBpZiBpdCAqaXMqIHN0YXRpYy4gSXQmIzM5O3MgYSBkaXJlY3QgaW50ZXJmYWNlIHRvIHRoZSBrZXJuZWwmIzM5O3Mgcm91dGluZyBpbmZvcm1hdGlvbi4KClNvLCBhbHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHN0aWxsIGFuIEFQSSBlbnRyeXBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSwganVzdCB0byBiZSBzdXJlLCBhbmQgdG8gY29tcGx5IHByZWNpc2VseSB3aXRoIHRoZSBndWlkZWxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL2FmX21wbHMuYz0xMTI9Ym9vbCBtcGxzX291dHB1dF9wb3NzaWJsZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0xMTUtfVxubmV0L21wbHMvYWZfbXBscy5jOjExNjpFWFBPUlRfU1lNQk9MX0dQTChtcGxzX291dHB1dF9wb3NzaWJsZSk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMTE3LVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYz0xMzU9dW5zaWduZWQgaW50IG1wbHNfZGV2X210dShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0xMzktfVxubmV0L21wbHMvYWZfbXBscy5jOjE0MDpFWFBPUlRfU1lNQk9MX0dQTChtcGxzX2Rldl9tdHUpO1xubmV0L21wbHMvYWZfbXBscy5jLTE0MS1cbm5ldC9tcGxzL2FmX21wbHMuYz0xNDI9Ym9vbCBtcGxzX3BrdF90b29fYmlnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBtdHUpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTE1MS19XG5uZXQvbXBscy9hZl9tcGxzLmM6MTUyOkVYUE9SVF9TWU1CT0xfR1BMKG1wbHNfcGt0X3Rvb19iaWcpO1xubmV0L21wbHMvYWZfbXBscy5jLTE1My1cbm5ldC9tcGxzL2FmX21wbHMuYz0xNTQ9dm9pZCBtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0xNzctfVxubmV0L21wbHMvYWZfbXBscy5jOjE3ODpFWFBPUlRfU1lNQk9MX0dQTChtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMpO1xubmV0L21wbHMvYWZfbXBscy5jLTE3OS1cbi0tXG5uZXQvbXBscy9hZl9tcGxzLmM9MTc0Nz1pbnQgbmxhX3B1dF9sYWJlbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0xNzY2LX1cbm5ldC9tcGxzL2FmX21wbHMuYzoxNzY3OkVYUE9SVF9TWU1CT0xfR1BMKG5sYV9wdXRfbGFiZWxzKTtcbm5ldC9tcGxzL2FmX21wbHMuYy0xNzY4LVxubmV0L21wbHMvYWZfbXBscy5jPTE3Njk9aW50IG5sYV9nZXRfbGFiZWxzKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgdTggbWF4X2xhYmVscywgdTggKmxhYmVscyxcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmMtMTg0Ny19XG5uZXQvbXBscy9hZl9tcGxzLmM6MTg0ODpFWFBPUlRfU1lNQk9MX0dQTChubGFfZ2V0X2xhYmVscyk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMTg0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc1MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIE1QTFMgUm91dGluZzogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgTVBMUyBjb2RlLCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBwbGFjZXMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgbm9uZSBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRob3NlIGhhc2ggb3IgbXVsdGlwYXRoIHNlbGVjdGlvbiBmdW5jdGlvbnMsIHdoaWNoIGlzIGZpbmUsIGJ1dCBJIG5lZWQgYW4gZW50cnkgcG9pbnQuIExvb2tpbmcgYXQgdGhlIGNhbGwgc2l0ZXMgb2YgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAsIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAuCgpBbHJpZ2h0LCBgbXBsc19nZXRyb3V0ZWAgaXMgYSBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGV4Y2VsbGVudCEgTmV0bGluayBoYW5kbGVycyBhcmUgdXN1YWxseSBwcmV0dHkgZWFzeSB0byB0cmlnZ2VyIHdpdGggY3JhZnRlZCBtZXNzYWdlcywgbWFraW5nIHRoZW0gaWRlYWwgdGFyZ2V0cyBmb3IgZnV6emluZy4gYG1wbHNfZm9yd2FyZGAgaXMgYSBwYWNrZXQgaGFuZGxlciwgc28gdGhlb3JldGljYWxseSBpdCYjMzk7cyBhbHNvIGEgZ29vZCBjaG9pY2UuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBhIGhvdC1wYXRoIGZ1bmN0aW9uOyB3aGljaCBpcyBub3QgaWRlYWwgZm9yIGZ1enppbmcuCgpXYWl0IGEgc2Vjb25k4oCmIGBtcGxzX2ZvcndhcmRgIGlzIHJlZ2lzdGVyZWQgYXMgYSBwYWNrZXQgdHlwZSBoYW5kbGVyPyAqVGhhdCogbWVhbnMgaXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHJlY2VpdmluZyBNUExTIHBhY2tldHMg4oCTIGJpbmdvISBJcyBpdCBzdGF0aWM/IFllcy4gSXMgYG1wbHNfZ2V0cm91dGVgIHN0YXRpYz8gWWVzLiBTbyBub3cgSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBvbmVzLCBqdXN0IHRvIGhhdmUgYSB3aWRlciBzY29wZS4gQnV0IG15IG1haW4gZ29hbCBpcyB0byBmdXp6IHRoZSAqbW9kaWZpZWQqIGxvZ2ljLCB3aGljaCBtYWtlcyB0aGUgY2hvaWNlIGV2ZW4gc2ltcGxlci4KCkNvbnNpZGVyaW5nIHRoYXQgYG1wbHNfZ2V0cm91dGVgIGlzIGEgbmV0bGluayBoYW5kbGVyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSB0b3AgY29udGVuZGVyIGZvciBub3cuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIG5ldGxpbmsgaGFuZGxlcnMgaW52b2x2ZWQgaW4gdGhpcyBjb2RlIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgYXR0YWNrIHZlY3RvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wbHNfcnRubF9tc2dfaGFuZGxlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9hZl9tcGxzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jPTI4MjI9c3RhdGljIHN0cnVjdCBydG5sX2FmX29wcyBtcGxzX2FmX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yODI3LVxubmV0L21wbHMvYWZfbXBscy5jOjI4Mjg6c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIG1wbHNfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRkYXRhX29yX21vZHVsZSA9IHtcbm5ldC9tcGxzL2FmX21wbHMuYy0yODI5LVx0e1RISVNfTU9EVUxFLCBQRl9NUExTLCBSVE1fTkVXUk9VVEUsIG1wbHNfcnRtX25ld3JvdXRlLCBOVUxMLFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYz0yODQwPXN0YXRpYyBpbnQgX19pbml0IG1wbHNfaW5pdCh2b2lkKVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yODU5LVxubmV0L21wbHMvYWZfbXBscy5jOjI4NjA6XHRlcnIgPSBydG5sX3JlZ2lzdGVyX21hbnkobXBsc19ydG5sX21zZ19oYW5kbGVycyk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMjg2MS1cdGlmIChlcnIpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTI4NzQtb3V0X3VucmVnaXN0ZXJfcnRubDpcbm5ldC9tcGxzL2FmX21wbHMuYzoyODc1Olx0cnRubF91bnJlZ2lzdGVyX21hbnkobXBsc19ydG5sX21zZ19oYW5kbGVycyk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMjg3Ni1vdXRfdW5yZWdpc3Rlcl9ydG5sX2FmOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzUxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNUExTIFJvdXRlIFNlbGVjdGlvbiBhbmQgUGF0Y2ggSW1wYWN0KioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBhZl9tcGxzLmNgIGZpbGUgYW5kIGl0cyBhc3NvY2lhdGVkIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGluIGxpZ2h0IG9mIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYG1wbHNfcnRtX25ld3JvdXRlYCBpcyBhIG5ldGxpbmsgaGFuZGxlciwgYnV0IGl0IGRvZXNuJiMzOTt0IGRpcmVjdGx5IGNhbGwgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAuIE5vLCBpdCBjcmVhdGVzIHJvdXRlcy4gTm93LCBgbXBsc19nZXRyb3V0ZWAgKmRvZXMqIGNhbGwgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAuIFRoYXQgc2VlbXMgcHJvbWlzaW5nLCBidXQgd2FpdCBhIG1pbnV0ZSwgdGhlIG1haW4gcGFja2V0IHByb2Nlc3NpbmcgZnVuY3Rpb24sIGBtcGxzX2ZvcndhcmRgLCBpcyB0aGUgcHJpbWFyeSB0cmlnZ2VyIGZvciBgbXBsc19zZWxlY3RfbXVsdGlwYXRoYCAqd2l0aCogYW4gYWN0dWFsIHBhY2tldC4gU28sIEkgbmVlZCB0byBpbmNsdWRlIGJvdGggYG1wbHNfZ2V0cm91dGVgIGFuZCBgbXBsc19mb3J3YXJkYCBpbiBteSBhbmFseXNpcy4KClRoZSBwcm9tcHQgc3BlY2lmaWVkIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0IG1lIGNoZWNrLi4uIGJlY2F1c2UgYG1wbHNfZ2V0cm91dGVgIGFuZCBgbXBsc19mb3J3YXJkYCBhcmUgcmVnaXN0ZXJlZCBhcyBmdW5jdGlvbiBwb2ludGVycyAoaW4gYHJ0bmxfbXNnX2hhbmRsZXJgIGFuZCBgcGFja2V0X3R5cGVgKSwgdGhleSBjYW5ub3QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRoYXQmIzM5O3MgZ29vZC4gVGhleSB3aWxsIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcywgc28gdGhleSBhcmUgcGVyZmVjdGx5IGZpbmUgdG8gdXNlLgoKTGV0JiMzOTtzIHZlcmlmeSB0aGUgY29uZmlncy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYE1QTFNgIGFuZCBgTVBMU19ST1VUSU5HYC4gQWgsIGBNUExTX1JPVVRJTkdgIGhhcyBhIGRlcGVuZGVuY3ksIGl0IG5lZWRzIGBORVRfSVBfVFVOTkVMIHx8IE5FVF9JUF9UVU5ORUw9bmAuIEFscmlnaHQsIGlzIGBNUExTX1JPVVRJTkdgIHN1ZmZpY2llbnQ/IFllcywgaXQgbG9va3MgbGlrZSBgTVBMU19ST1VUSU5HYCBpcyB0aGUgY29uZmlnIHRoYXQgYnVpbGRzIGBhZl9tcGxzLmNgLiBObyBuZWVkIGZvciBgTVBMU19JUFRVTk5FTGAgZm9yIHRoaXMgcGFydC4KCk5vdywgcmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGYuIEFoLCB0aGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIHJlYWQgZml4LiBUaGUgYGhkcmAgcG9pbnRlciBpcyBiZWluZyB1c2VkIGFmdGVyIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhLiBTbywgdGhlIHBhdGNoIGlzIHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciB0aGUgcG90ZW50aWFsIHJlYWxsb2NhdGlvbi4gVGhpcyBkZWZpbml0ZWx5IGhhcyBmdW5jdGlvbmFsIGltcGFjdCBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHN0YWJpbGl0eS4KCkxldCYjMzk7cyBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcy4gYG1wbHNfZm9yd2FyZGAgaXMgc3RhdGljOiBgc3RhdGljIGludCBtcGxzX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KWAuIEFuZCBgbXBsc19nZXRyb3V0ZWAgaXMgc3RhdGljIGFzIHdlbGw6IGBzdGF0aWMgaW50IG1wbHNfZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICppbl9ubGgsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylgLiBBbHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZWlyIGFkZHJlc3NlcyBhcmUgdGFrZW4sIHNvIHRoZXkgY2Fubm90IGJlIGlubGluZWQuCgpBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0byBjb25zaWRlcj8gTGV0IG1lIHNlZS4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGlzIGFsc28gc3RhdGljLCBhbmQgaXRzIGFkZHJlc3MgaXNuJiMzOTt0IHRha2VuLiBJdCBtaWdodCBiZSBpbmxpbmVkLiBJIHNob3VsZCBhdm9pZCB1c2luZyBgbXBsc19tdWx0aXBhdGhfaGFzaGAgZm9yIHRoYXQgcmVhc29uLgoKU28sIHRvIHN1bW1hcml6ZTogdGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIHJlYWQgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGJ5IHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggbWlnaHQgcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlci4gVGhpcyBpbXBhY3RzIE1QTFMgcGFja2V0IGZvcndhcmRpbmcgYW5kIHJvdXRlIHJldHJpZXZhbC4gVGhlIGNoYW5nZXMgYXJlIGluIHRoZSBjb3JlIG5ldHdvcmsgbG9naWMsIHNvIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBGb2N1cyBTeW1ib2xzLCBnaXZlbiB0aGF0LCBzaG91bGQgYmU6CiogICBgbXBsc19mb3J3YXJkYAoqICAgYG1wbHNfZ2V0cm91dGVgCgpBbmQgdGhlIHJlcXVpcmVkIENvbmZpZ3M6CiogICBgTVBMU2AKKiAgIGBNUExTX1JPVVRJTkdgCgpJIHNob3VsZCB2ZXJpZnkgdGhlIGBNUExTYCBjb25maWd1cmF0aW9uLi4uIHllcywgaXQgbG9va3MgbGlrZSBgY29uZmlnIE1QTFNgIGlzIGluIGBuZXQvbXBscy9LY29uZmlnYC4gSXQmIzM5O3MgYSBtZW51Y29uZmlnLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgZW5hYmxlZC4gSSBzZWUgYENPTkZJR19NUExTPXlgIGluIHRoZSBkb2N1bWVudGF0aW9uLiBPa2F5LCBJJiMzOTttIGhhcHB5IHdpdGggdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcGxzL0tjb25maWctNS1cbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcbm5ldC9tcGxzL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7TXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcJiMzNDtcbi0tXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cbi0tXG5uZXQvbXBscy9LY29uZmlnLTI1LVxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXG5uZXQvbXBscy9LY29uZmlnLTI3LVx0dHJpc3RhdGUgXCYjMzQ7TVBMUzogcm91dGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21wbHMvS2NvbmZpZy0zMi1cbm5ldC9tcGxzL0tjb25maWc6MzM6Y29uZmlnIE1QTFNfSVBUVU5ORUxcbm5ldC9tcGxzL0tjb25maWctMzQtXHR0cmlzdGF0ZSBcJiMzNDtNUExTOiBJUCBvdmVyIE1QTFMgdHVubmVsIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDaGVja2luZyBNUExTIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYE1QTFNgIGlzIGRlZmluaXRlbHkgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBTaW1wbGUgZW5vdWdoLiBMZXQgbWUganVzdCBjb25maXJtIHNvbWV0aGluZyBxdWljay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgbXBsc19mb3J3YXJkYCBpcyAqdGhlKiBvbmx5IHBhY2tldCBoYW5kbGVyIGluIHBsYWNlIHRoYXQgZGVhbHMgd2l0aCBNUExTIHRyYWZmaWMuIEkgbmVlZCB0byBiZSAxMDAlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gb3IgY29uZmxpY3Qgd2l0aCBzb21lIG90aGVyIG1vZHVsZS4gR290dGEgZG90IG15IGkmIzM5O3MgYW5kIGNyb3NzIG15IHQmIzM5O3Mgb24gdGhpcyBvbmUgdG8ga2VlcCB0aGUgc3lzdGVtIHJ1bm5pbmcgc21vb3RobHkuIExldCYjMzk7cyBtYWtlIHN1cmUgaXQmIzM5O3MgaXNvbGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wbHNfcGFja2V0X3R5cGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXBscy9hZl9tcGxzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jPTM2Nz1zdGF0aWMgaW50IG1wbHNfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy01MDQtXG5uZXQvbXBscy9hZl9tcGxzLmM6NTA1OnN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbXBsc19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L21wbHMvYWZfbXBscy5jLTUwNi1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVBMU19VQyksXG4tLVxubmV0L21wbHMvYWZfbXBscy5jPTI4NDA9c3RhdGljIGludCBfX2luaXQgbXBsc19pbml0KHZvaWQpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTI4NTMtXG5uZXQvbXBscy9hZl9tcGxzLmM6Mjg1NDpcdGRldl9hZGRfcGFjayhcdTAwMjZtcGxzX3BhY2tldF90eXBlKTtcbm5ldC9tcGxzL2FmX21wbHMuYy0yODU1LVxuLS1cbm5ldC9tcGxzL2FmX21wbHMuYy0yODc4LW91dF91bnJlZ2lzdGVyX2Rldl90eXBlOlxubmV0L21wbHMvYWZfbXBscy5jOjI4Nzk6XHRkZXZfcmVtb3ZlX3BhY2soXHUwMDI2bXBsc19wYWNrZXRfdHlwZSk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMjg4MC1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNm1wbHNfZGV2X25vdGlmaWVyKTtcbi0tXG5uZXQvbXBscy9hZl9tcGxzLmM9Mjg4Nz1zdGF0aWMgdm9pZCBfX2V4aXQgbXBsc19leGl0KHZvaWQpXG4tLVxubmV0L21wbHMvYWZfbXBscy5jLTI4OTAtXHRydG5sX2FmX3VucmVnaXN0ZXIoXHUwMDI2bXBsc19hZl9vcHMpO1xubmV0L21wbHMvYWZfbXBscy5jOjI4OTE6XHRkZXZfcmVtb3ZlX3BhY2soXHUwMDI2bXBsc19wYWNrZXRfdHlwZSk7XG5uZXQvbXBscy9hZl9tcGxzLmMtMjg5Mi1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNm1wbHNfZGV2X25vdGlmaWVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NzcKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMzE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNUExTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUmIzM5O3MgaGFuZGxpbmcgb2YgYEVUSF9QX01QTFNfVUNgIHBhY2tldHMsIHRoYXQmIzM5O3Mgd2hhdCBgbXBsc19mb3J3YXJkYCBpcyByZXNwb25zaWJsZSBmb3IuIEkgd2FzIGluaXRpYWxseSB3b25kZXJpbmcgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzIEkgbmVlZGVkIHRvIGNvbnNpZGVyLiBJdCBsb29rcyBsaWtlIGBtcGxzX2dldHJvdXRlYCBoYW5kbGVzIGBSVE1fR0VUUk9VVEVgLCBgbXBsc19ydG1fbmV3cm91dGVgIGhhbmRsZXMgYFJUTV9ORVdST1VURWAsIGFuZCBgbXBsc19ydG1fZGVscm91dGVgIHRha2VzIGNhcmUgb2YgYFJUTV9ERUxST1VURWAuIEFuZCB0aGVuIGBtcGxzX2R1bXBfcm91dGVzYCBhbHNvIGhhbmRsZXMgdGhlIGR1bXAgZm9yIGBSVE1fR0VUUk9VVEVgLCByaWdodC4KClRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBtcGxzX211bHRpcGF0aF9oYXNoYCwgYW5kIHRoYXQmIzM5O3MgKmNhbGxlZCogYnkgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAuIEFuZCwgaW1wb3J0YW50bHksIGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgIGdldHMgKmNhbGxlZCogYnkgYm90aCBgbXBsc19mb3J3YXJkYCBhbmQgYG1wbHNfZ2V0cm91dGVgLiBTbywgZm9jdXNpbmcgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgbW92ZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIGhpdHMgdGhlIHJvYWQuCgpCYXNpY2FsbHksIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBmYWN0IHRoYXQgY2FsbGluZyBgcHNrYl9tYXlfcHVsbGAgY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YSwgd2hpY2ggbWVhbnMgdGhlIGBoZHJgIHBvaW50ZXIgbmVlZHMgdG8gYmUgcmVsb2FkZWQgdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgZGF0YS4gVGhpcyB2dWxuZXJhYmlsaXR5IGltcGFjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLiBJIGRlZmluaXRlbHkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEkgc3RhcnQgbXkgZnV6emluZyBydW5zLgoKQmFzZWQgb24gYWxsIG9mIHRoaXMsIHRoZSBjcml0aWNhbCB0YXJnZXRzIGFyZSBgbXBsc19mb3J3YXJkYCBhbmQgYG1wbHNfZ2V0cm91dGVgLiBUaGUgcmVsZXZhbnQgY29uZmlncyBhcmUgYE1QTFNgIGFuZCBgTVBMU19ST1VUSU5HYC4gSSB3aWxsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUExTJiMzNDssCiAgICAmIzM0O01QTFNfUk9VVElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wbHNfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDttcGxzX2dldHJvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAgYnkgcmVsb2FkaW5nIHRoZSBgaGRyYCBwb2ludGVyIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGxgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBUaGlzIGFmZmVjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUExTJiMzNDssCiAgICAmIzM0O01QTFNfUk9VVElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wbHNfZm9yd2FyZCYjMzQ7LAogICAgJiMzNDttcGxzX2dldHJvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAgYnkgcmVsb2FkaW5nIHRoZSBgaGRyYCBwb2ludGVyIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGxgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBUaGlzIGFmZmVjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIHdoZXJlIGBwc2tiX21heV9wdWxsKClgIGNhbiByZWFsbG9jYXRlIHRoZSBza2IgZGF0YSBidWZmZXIsIGludmFsaWRhdGluZyB0aGUgcHJldmlvdXNseSBjb21wdXRlZCBgaGRyYCBwb2ludGVyLiBBY2Nlc3NpbmcgYGhkcmAgYWZ0ZXIgYHBza2JfbWF5X3B1bGwoKWAgd2l0aG91dCByZWNvbXB1dGluZyBpdCBsZWFkcyB0byBhIHVzZS1hZnRlci1mcmVlLiBUaGlzIHR5cGUgb2YgbWVtb3J5IGVycm9yIGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWsgaW52b2x2ZWQsIHNvIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjJmZTI3OWJhZDJmNGFkMzE5Y2RhZDExYTYwNGIxZmJhZjNmNTNhNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDExOjEwOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21wbHMvYWZfbXBscy5jIGIvbmV0L21wbHMvYWZfbXBscy5jCmluZGV4IDk2MWJlNTA1NGEwMzkuLjE3Yjc4ZGNiZjhhYmMgMTAwNjQ0Ci0tLSBhL25ldC9tcGxzL2FmX21wbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXBscy9hZl9tcGxzLmMKQEAgLTIyMSw2ICYjNDM7MjIxLDcgQEAgc3RhdGljIHUzMiBtcGxzX211bHRpcGF0aF9oYXNoKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWYgKHBza2JfbWF5X3B1bGwoc2tiLCBtcGxzX2hkcl9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKSB7CiAJCQljb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyOwogCiYjNDM7CQkJaGRyID0gbXBsc19oZHIoc2tiKSAmIzQzOyBsYWJlbF9pbmRleDsKIAkJCXY0aGRyID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKShoZHIgJiM0MzsgMSk7CiAJCQlpZiAodjRoZHItJmd0O3ZlcnNpb24gPT0gNCkgewogCQkJCWhhc2ggPSBqaGFzaF8zd29yZHMobnRvaGwodjRoZHItJmd0O3NhZGRyKSwKQEAgLTIzMSw2ICYjNDM7MjMyLDcgQEAgc3RhdGljIHUzMiBtcGxzX211bHRpcGF0aF9oYXNoKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCQkJCSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkgewogCQkJCWNvbnN0IHN0cnVjdCBpcHY2aGRyICp2NmhkcjsKIAomIzQzOwkJCQloZHIgPSBtcGxzX2hkcihza2IpICYjNDM7IGxhYmVsX2luZGV4OwogCQkJCXY2aGRyID0gKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopKGhkciAmIzQzOyAxKTsKIAkJCQloYXNoID0gX19pcHY2X2FkZHJfamhhc2goJmFtcDt2Nmhkci0mZ3Q7c2FkZHIsIGhhc2gpOwogCQkJCWhhc2ggPSBfX2lwdjZfYWRkcl9qaGFzaCgmYW1wO3Y2aGRyLSZndDtkYWRkciwgaGFzaCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSBpbiBNUExTIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L21wbHMvYWZfbXBscy5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSByZS1ldmFsdWF0aW9uIG9mIHRoZSBgaGRyYCBwb2ludGVyIGFmdGVyIGBsYWJlbF9pbmRleGAsIHJpZ2h0IGJlZm9yZSB3ZSBnZXQgdG8gdGhlIElQdjQvSVB2NiBoZWFkZXIgZXh0cmFjdGlvbi4gSSBpbW1lZGlhdGVseSBzZWUgdGhpcyBhcyBhIGNsYXNzaWMgZml4IGZvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIGxvZ2ljIGhlcmUgaXMgdGhhdCBgaGRyID0gbXBsc19oZHIoc2tiKSAmIzQzOyBsYWJlbF9pbmRleDtgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBwc2tiX21heV9wdWxsKClgIGhhcyB0aGUgbmFzdHkgaGFiaXQgb2YgcG9zc2libHkgcmVhbGxvY2F0aW5nIHRoZSBTS0ImIzM5O3MgbGluZWFyIGRhdGEgYXJlYS4gVGhhdCBtZWFucyBhbnkgcG9pbnRlcnMgaW50byB0aGF0IGFyZWEsIGxpa2Ugb3VyIGBoZHJgIHZhcmlhYmxlLCBjYW4gYmVjb21lIGNvbXBsZXRlbHkgaW52YWxpZC4KCkFuZCwgaWYgd2UgdGhlbiB0cmllZCB0byBkZXJlZmVyZW5jZSBhbiBpbnZhbGlkYXRlZCBwb2ludGVyIHRvIGBoZHJgLCB3ZSYjMzk7cmUgc3RhcmluZyBkb3duIHRoZSBiYXJyZWwgb2YgYSBVQUYgYnVnIOKAkyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIEtBU0FOIGxvdmVzIHRvIGNhdGNoLiBUaGUgY29kZSB3YXMgdXNpbmcgYW4gaW52YWxpZGF0ZWQgcG9pbnRlciBhbmQgZGVyZWZlcmVuY2luZyBpdCEgVGhhdCYjMzk7cyBhIHByb2JsZW0uIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIGJlIHVzaW5nIGFuIG9sZCBwb2ludGVyLCBhbmQgdGhpcyBwYXRjaCBtYWtlcyBzdXJlIHdlIGhhdmUgYSBmcmVzaCBwb2ludGVyIHRvIHRoZSBNUExTIGhlYWRlciwgZXZlbiBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYC4KCk5vdywgYmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgcGVlayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyBwcm9wZXJseSBzY29wZWQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGlzc3VlcyBieSBpbmFkdmVydGVudGx5IGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgYWRqYWNlbnQgcm91dGluZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dC4gVGhpcyBsb29rcyBsaWtlIGEgcmVhc29uYWJsZSBmaXgsIGJ1dCB2ZXJpZmljYXRpb24gaXMgY3JpdGljYWwsIHBhcnRpY3VsYXJseSBhcm91bmQgbWVtb3J5IG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wbHMvYWZfbXBscy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRcdFx0XHQgKi9cbiAyMTE6XHRcdFx0XHRpZiAoZWxpX3NlZW4pXG4gMjEyOlx0XHRcdFx0XHRicmVhaztcbiAyMTM6XHRcdFx0fSBlbHNlIGlmIChkZWMubGFiZWwgPT0gTVBMU19MQUJFTF9FTlRST1BZKSB7XG4gMjE0Olx0XHRcdFx0ZWxpX3NlZW4gPSB0cnVlO1xuIDIxNTpcdFx0XHR9XG4gMjE2Olx0XG4gMjE3Olx0XHRcdGlmICghZGVjLmJvcylcbiAyMTg6XHRcdFx0XHRjb250aW51ZTtcbiAyMTk6XHRcbiAyMjA6XHRcdFx0LyogZm91bmQgYm90dG9tIGxhYmVsOyBkb2VzIHNrYiBoYXZlIHJvb20gZm9yIGEgaGVhZGVyPyAqL1xuIDIyMTpcdFx0XHRpZiAocHNrYl9tYXlfcHVsbChza2IsIG1wbHNfaGRyX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSkpIHtcbiAyMjI6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyO1xuIDIyMzpcdFxuIDIyNDpcdFx0XHRcdGhkciA9IG1wbHNfaGRyKHNrYikgJiM0MzsgbGFiZWxfaW5kZXg7XG4gMjI1Olx0XHRcdFx0djRoZHIgPSAoY29uc3Qgc3RydWN0IGlwaGRyICopKGhkciAmIzQzOyAxKTtcbiAyMjY6XHRcdFx0XHRpZiAodjRoZHItXHUwMDNldmVyc2lvbiA9PSA0KSB7XG4gMjI3Olx0XHRcdFx0XHRoYXNoID0gamhhc2hfM3dvcmRzKG50b2hsKHY0aGRyLVx1MDAzZXNhZGRyKSxcbiAyMjg6XHRcdFx0XHRcdFx0XHQgICAgbnRvaGwodjRoZHItXHUwMDNlZGFkZHIpLFxuIDIyOTpcdFx0XHRcdFx0XHRcdCAgICB2NGhkci1cdTAwM2Vwcm90b2NvbCwgaGFzaCk7XG4gMjMwOlx0XHRcdFx0fSBlbHNlIGlmICh2NGhkci1cdTAwM2V2ZXJzaW9uID09IDYgXHUwMDI2XHUwMDI2XG4gMjMxOlx0XHRcdFx0XHQgICBwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICYjNDM7XG4gMjMyOlx0XHRcdFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XG4gMjMzOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqdjZoZHI7XG4gMjM0Olx0XG4gMjM1Olx0XHRcdFx0XHRoZHIgPSBtcGxzX2hkcihza2IpICYjNDM7IGxhYmVsX2luZGV4O1xuIDIzNjpcdFx0XHRcdFx0djZoZHIgPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKikoaGRyICYjNDM7IDEpO1xuIDIzNzpcdFx0XHRcdFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFx1MDAyNnY2aGRyLVx1MDAzZXNhZGRyLCBoYXNoKTtcbiAyMzg6XHRcdFx0XHRcdGhhc2ggPSBfX2lwdjZfYWRkcl9qaGFzaChcdTAwMjZ2Nmhkci1cdTAwM2VkYWRkciwgaGFzaCk7XG4gMjM5Olx0XHRcdFx0XHRoYXNoID0gamhhc2hfMXdvcmQodjZoZHItXHUwMDNlbmV4dGhkciwgaGFzaCk7XG4gMjQwOlx0XHRcdFx0fVxuIDI0MTpcdFx0XHR9XG4gMjQyOlx0XG4gMjQzOlx0XHRcdGJyZWFrO1xuIDI0NDpcdFx0fVxuIDI0NTpcdFxuIDI0NjpcdFx0cmV0dXJuIGhhc2g7XG4gMjQ3Olx0fVxuIDI0ODpcdFxuIDI0OTpcdHN0YXRpYyBzdHJ1Y3QgbXBsc19uaCAqbXBsc19nZXRfbmV4dGhvcChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHU4IGluZGV4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk3CgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDU1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgYGhkciA9IG1wbHNfaGRyKHNrYikgJiM0MzsgbGFiZWxfaW5kZXg7YCBsaW5lIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGB2NGhkcmAgYW5kIGB2NmhkcmAgc3RydWN0dXJlcyB3aXRoaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgLiBUaGUgcHJvYmxlbSBJIHNlZSBpcyB0aGF0IHRoZXJlJiMzOTtzIGEgYHBza2JfbWF5X3B1bGxgIGNhbGwgaGFwcGVuaW5nICpiZWZvcmUqIHRob3NlIGFjY2Vzc2VzLiBJIGtub3cgYHBza2JfbWF5X3B1bGxgIGNhbiBwb3RlbnRpYWxseSByZWFsbG9jYXRlIHRoZSBgc2tiYCYjMzk7cyBkYXRhIGJ1ZmZlci4gVGhhdCBtZWFucyB0aGUgYGhkcmAgcG9pbnRlciwgd2hpY2ggd2FzIHNldCBlYXJsaWVyLCBjb3VsZCBiZWNvbWUgaW52YWxpZCDigJMgYSBjbGFzc2ljIGRhbmdsaW5nIHBvaW50ZXIgc2l0dWF0aW9uLgoKSWYgYHBza2JfbWF5X3B1bGxgIHJlYWxsb2NhdGVzIHRoZSBidWZmZXIsIGBoZHJgIGlzIG5vdyBwb2ludGluZyB0byBmcmVlZCBtZW1vcnkuIEFuZCB0aGVuLCB3ZSB0cnkgdG8gZGVyZWZlcmVuY2UgaXQgdG8gcmVhZCBJUCBoZWFkZXIgZGF0YSAtIHRoYXQmIzM5O3MgYSBibGF0YW50IHVzZS1hZnRlci1mcmVlIGJ1Zy4gVGhhdCYjMzk7cyB3aHkgdGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcmUtZXZhbHVhdGluZyBgaGRyID0gbXBsc19oZHIoc2tiKSAmIzQzOyBsYWJlbF9pbmRleDtgICphZnRlciogdGhlIGBwc2tiX21heV9wdWxsYCBjYWxsLiBTaW1wbGUsIGJ1dCBjcml0aWNhbC4KCkkmIzM5O20gdGhpbmtpbmcgdGhpcyBpcyBwcmVjaXNlbHkgdGhlIHNvcnQgb2YgdGhpbmcgS0FTQU4gZXhjZWxzIGF0IGNhdGNoaW5nLiBJdCYjMzk7cyBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGFuIGlzc3VlIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcHJlLXBhdGNoIGNvZGUgdG8gc29saWRpZnkgdGhlIHRob3VnaHQ6CgpgYGBjCgkJLyogZm91bmQgYm90dG9tIGxhYmVsOyBkb2VzIHNrYiBoYXZlIHJvb20gZm9yIGEgaGVhZGVyPyAqLwoJCWlmIChwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkgewoJCQljb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyOwoKCQkJdjRoZHIgPSAoY29uc3Qgc3RydWN0IGlwaGRyICopKGhkciAmIzQzOyAxKTsKCQkJaWYgKHY0aGRyLSZndDt2ZXJzaW9uID09IDQpIHsKCQkJCWhhc2ggPSBqaGFzaF8zd29yZHMobnRvaGwodjRoZHItJmd0O3NhZGRyKSwKCQkJCQkJICAgIG50b2hsKHY0aGRyLSZndDtkYWRkciksCgkJCQkJCSAgICB2NGhkci0mZ3Q7cHJvdG9jb2wsIGhhc2gpOwoJCQl9IGVsc2UgaWYgKHY0aGRyLSZndDt2ZXJzaW9uID09IDYgJmFtcDsmYW1wOwoJCQkJICAgcHNrYl9tYXlfcHVsbChza2IsIG1wbHNfaGRyX2xlbiAmIzQzOwoJCQkJCQkgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHsKCQkJCWNvbnN0IHN0cnVjdCBpcHY2aGRyICp2NmhkcjsKCgkJCQl2NmhkciA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKShoZHIgJiM0MzsgMSk7CgkJCQloYXNoID0gX19pcHY2X2FkZHJfamhhc2goJmFtcDt2Nmhkci0mZ3Q7c2FkZHIsIGhhc2gpOwoJCQkJaGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKCZhbXA7djZoZHItJmd0O2RhZGRyLCBoYXNoKTsKCQkJCWhhc2ggPSBqaGFzaF8xd29yZCh2Nmhkci0mZ3Q7bmV4dGhkciwgaGFzaCk7CgkJCX0KCQl9CmBgYAoKWWVwLCBhcyBJIHN1c3BlY3RlZCwgdGhlIGBwc2tiX21heV9wdWxsYCBjYWxsIGNvdWxkIGluZGVlZCBpbnZhbGlkYXRlIGBza2ItJmd0O2hlYWRgIGFuZCBgc2tiLSZndDtkYXRhYCwgbGVhdmluZyBgaGRyYCBkYW5nbGluZy4gVGhpcyBpcyBhIGNsZWFyLWN1dCB1c2UtYWZ0ZXItZnJlZS4gIEtBU0FOIHdvdWxkIGFic29sdXRlbHkgbmFpbCB0aGlzLiBLTVNBTiwgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNhbml0aXplciwgaXNuJiMzOTt0IGFwcGxpY2FibGUgaGVyZSwgc28gYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4gR29vZCBjYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYHBza2JfbWF5X3B1bGwoKWAgY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhIGJ1ZmZlciwgaW52YWxpZGF0aW5nIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIGBoZHJgIHBvaW50ZXIuIEFjY2Vzc2luZyBgaGRyYCBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYCB3aXRob3V0IHJlY29tcHV0aW5nIGl0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUuIFRoaXMgdHlwZSBvZiBtZW1vcnkgZXJyb3IgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnZvbHZlZCwgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYHBza2JfbWF5X3B1bGwoKWAgY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhIGJ1ZmZlciwgaW52YWxpZGF0aW5nIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIGBoZHJgIHBvaW50ZXIuIEFjY2Vzc2luZyBgaGRyYCBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYCB3aXRob3V0IHJlY29tcHV0aW5nIGl0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUuIFRoaXMgdHlwZSBvZiBtZW1vcnkgZXJyb3IgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnZvbHZlZCwgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDowMy40NDg2MTQ5MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MTE0NTEyOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QTFNcIixcbiAgICBcIk1QTFNfUk9VVElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wbHNfZm9yd2FyZFwiLFxuICAgIFwibXBsc19nZXRyb3V0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYHBza2JfbWF5X3B1bGwoKWAgY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhIGJ1ZmZlciwgaW52YWxpZGF0aW5nIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIGBoZHJgIHBvaW50ZXIuIEFjY2Vzc2luZyBgaGRyYCBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYCB3aXRob3V0IHJlY29tcHV0aW5nIGl0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUuIFRoaXMgdHlwZSBvZiBtZW1vcnkgZXJyb3IgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnZvbHZlZCwgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgcmVhZCBpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAgYnkgcmVsb2FkaW5nIHRoZSBgaGRyYCBwb2ludGVyIGFmdGVyIGNhbGxpbmcgYHBza2JfbWF5X3B1bGxgLCB3aGljaCBjYW4gcmVhbGxvY2F0ZSB0aGUgc29ja2V0IGJ1ZmZlciBkYXRhLiBUaGlzIGFmZmVjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDowMy40NDg2MjM0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNTQ0NjEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIyZmUyNzliYWQyZjRhZDMxOWNkYWQxMWE2MDRiMWZiYWYzZjUzYTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTE6MTA6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L21wbHMvYWZfbXBscy5jIGIvbmV0L21wbHMvYWZfbXBscy5jXFxuaW5kZXggOTYxYmU1MDU0YTAzOS4uMTdiNzhkY2JmOGFiYyAxMDA2NDRcXG4tLS0gYS9uZXQvbXBscy9hZl9tcGxzLmNcXG4rKysgYi9uZXQvbXBscy9hZl9tcGxzLmNcXG5AQCAtMjIxLDYgKzIyMSw3IEBAIHN0YXRpYyB1MzIgbXBsc19tdWx0aXBhdGhfaGFzaChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGlmIChwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKSB7XFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqdjRoZHI7XFxuIFxcbitcXHRcXHRcXHRoZHIgPSBtcGxzX2hkcihza2IpICsgbGFiZWxfaW5kZXg7XFxuIFxcdFxcdFxcdHY0aGRyID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKShoZHIgKyAxKTtcXG4gXFx0XFx0XFx0aWYgKHY0aGRyLVxcdTAwM2V2ZXJzaW9uID09IDQpIHtcXG4gXFx0XFx0XFx0XFx0aGFzaCA9IGpoYXNoXzN3b3JkcyhudG9obCh2NGhkci1cXHUwMDNlc2FkZHIpLFxcbkBAIC0yMzEsNiArMjMyLDcgQEAgc3RhdGljIHUzMiBtcGxzX211bHRpcGF0aF9oYXNoKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICp2NmhkcjtcXG4gXFxuK1xcdFxcdFxcdFxcdGhkciA9IG1wbHNfaGRyKHNrYikgKyBsYWJlbF9pbmRleDtcXG4gXFx0XFx0XFx0XFx0djZoZHIgPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKikoaGRyICsgMSk7XFxuIFxcdFxcdFxcdFxcdGhhc2ggPSBfX2lwdjZfYWRkcl9qaGFzaChcXHUwMDI2djZoZHItXFx1MDAzZXNhZGRyLCBoYXNoKTtcXG4gXFx0XFx0XFx0XFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFxcdTAwMjZ2Nmhkci1cXHUwMDNlZGFkZHIsIGhhc2gpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDowNC44NjQ3MjE4MjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1OTA3Nzg2NzUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUExTXCIsXG4gICAgXCJNUExTX1JPVVRJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcGxzX2ZvcndhcmRcIixcbiAgICBcIm1wbHNfZ2V0cm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIHJlYWQgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGJ5IHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YS4gVGhpcyBhZmZlY3RzIE1QTFMgcGFja2V0IGZvcndhcmRpbmcgYW5kIHJvdXRlIHJldHJpZXZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjJmZTI3OWJhZDJmNGFkMzE5Y2RhZDExYTYwNGIxZmJhZjNmNTNhNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDExOjEwOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wbHMvYWZfbXBscy5jIGIvbmV0L21wbHMvYWZfbXBscy5jXG5pbmRleCA5NjFiZTUwNTRhMDM5Li4xN2I3OGRjYmY4YWJjIDEwMDY0NFxuLS0tIGEvbmV0L21wbHMvYWZfbXBscy5jXG4rKysgYi9uZXQvbXBscy9hZl9tcGxzLmNcbkBAIC0yMjEsNiArMjIxLDcgQEAgc3RhdGljIHUzMiBtcGxzX211bHRpcGF0aF9oYXNoKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWYgKHBza2JfbWF5X3B1bGwoc2tiLCBtcGxzX2hkcl9sZW4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSkpIHtcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyO1xuIFxuK1x0XHRcdGhkciA9IG1wbHNfaGRyKHNrYikgKyBsYWJlbF9pbmRleDtcbiBcdFx0XHR2NGhkciA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKikoaGRyICsgMSk7XG4gXHRcdFx0aWYgKHY0aGRyLVx1MDAzZXZlcnNpb24gPT0gNCkge1xuIFx0XHRcdFx0aGFzaCA9IGpoYXNoXzN3b3JkcyhudG9obCh2NGhkci1cdTAwM2VzYWRkciksXG5AQCAtMjMxLDYgKzIzMiw3IEBAIHN0YXRpYyB1MzIgbXBsc19tdWx0aXBhdGhfaGFzaChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqdjZoZHI7XG4gXG4rXHRcdFx0XHRoZHIgPSBtcGxzX2hkcihza2IpICsgbGFiZWxfaW5kZXg7XG4gXHRcdFx0XHR2NmhkciA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKShoZHIgKyAxKTtcbiBcdFx0XHRcdGhhc2ggPSBfX2lwdjZfYWRkcl9qaGFzaChcdTAwMjZ2Nmhkci1cdTAwM2VzYWRkciwgaGFzaCk7XG4gXHRcdFx0XHRoYXNoID0gX19pcHY2X2FkZHJfamhhc2goXHUwMDI2djZoZHItXHUwMDNlZGFkZHIsIGhhc2gpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MDQuODY0NzIzMDU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0MjMwMjcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QTFMgTXVsdGlwYXRoIEhhc2ggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L21wbHMvYWZfbXBscy5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBmaXhpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgaW4gdGhlIGBtcGxzX211bHRpcGF0aF9oYXNoYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlLWFzc2lnbm1lbnQgb2YgYGhkcmAgYWZ0ZXIgYSBgcHNrYl9tYXlfcHVsbGAgY2FsbDogYGhkciA9IG1wbHNfaGRyKHNrYikgKyBsYWJlbF9pbmRleDtgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIHJlYWxsb2NhdGlvbiBwcm9ibGVtLiBUaGUgYHBza2JfbWF5X3B1bGxgIGZ1bmN0aW9uLCBhcyBJIHJlY2FsbCwgY2FuIHBvdGVudGlhbGx5IHJlYWxsb2NhdGUgdGhlIFNvY2tldCBCdWZmZXIgKHNrYikgZGF0YS4gSWYgdGhhdCBoYXBwZW5zLCBhbnkgcG9pbnRlcnMgdG8gdGhlIG9yaWdpbmFsIGRhdGEsIGluY2x1ZGluZyBvdXIgYGhkcmAgcG9pbnRlciwgd291bGQgYmVjb21lIGludmFsaWQuIFRoZXJlZm9yZSwgcmUtY2FsY3VsYXRpbmcgdGhlIGBoZHJgIG9mZnNldCBwb3N0LWBwc2tiX21heV9wdWxsYCBpcyBhIHNtYXJ0IGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0YWN0aWMuIEl0IGVuc3VyZXMgd2UncmUgYWx3YXlzIHdvcmtpbmcgd2l0aCBhIHZhbGlkIHBvaW50ZXIgdG8gdGhlIE1QTFMgaGVhZGVyLCBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIHNrYiBoYXMgYmVlbiBtb3ZlZCBpbiBtZW1vcnkuIEkgd2lsbCBub3cgZXhhbWluZSBgbXBsc19tdWx0aXBhdGhfaGFzaGAgaW4gYG5ldC9tcGxzL2FmX21wbHMuY2AgdG8gZnVydGhlciBjb25maXJtIHRoZXNlIHN1c3BpY2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDowOC43MDcwMzA0MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyNTkxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXBsc19tdWx0aXBhdGhfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXBscy9hZl9tcGxzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wbHMvYWZfbXBscy5jPTE3OD1FWFBPUlRfU1lNQk9MX0dQTChtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMpO1xcbm5ldC9tcGxzL2FmX21wbHMuYy0xNzktXFxubmV0L21wbHMvYWZfbXBscy5jOjE4MDpzdGF0aWMgdTMyIG1wbHNfbXVsdGlwYXRoX2hhc2goc3RydWN0IG1wbHNfcm91dGUgKnJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tcGxzL2FmX21wbHMuYy0xODEte1xcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jPTI1OT1zdGF0aWMgY29uc3Qgc3RydWN0IG1wbHNfbmggKm1wbHNfc2VsZWN0X211bHRpcGF0aChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjc2LVxcbm5ldC9tcGxzL2FmX21wbHMuYzoyNzc6XFx0aGFzaCA9IG1wbHNfbXVsdGlwYXRoX2hhc2gocnQsIHNrYik7XFxubmV0L21wbHMvYWZfbXBscy5jLTI3OC1cXHRuaF9pbmRleCA9IGhhc2ggJSBhbGl2ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MDguNzc0Mjk0MDY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3MTAzMzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNdWx0aXBhdGggSGFzaGluZyBMb2dpYyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbXBsc19tdWx0aXBhdGhfaGFzaGAgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIG11bHRpcGF0aCBzZWxlY3Rpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGJlaW5nIGludm9rZWQgYnkgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgbXBsc19zZWxlY3RfbXVsdGlwYXRoYC4gV2hlcmUgaXMgKnRoYXQqIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBvZiBgbXBsc19zZWxlY3RfbXVsdGlwYXRoYCB3aWxsIGdpdmUgbWUgaW52YWx1YWJsZSBpbnNpZ2h0IGludG8gdGhlIGhpZ2hlci1sZXZlbCBsb2dpYyBmbG93IGFuZCB0cmlnZ2VyIGNvbmRpdGlvbnMgdGhhdCB1bHRpbWF0ZWx5IHJlbHkgb24gdGhpcyBoYXNoaW5nIG1lY2hhbmlzbS4gSXQncyBhbGwgYWJvdXQgdHJhY2luZyB0aGUgZGVwZW5kZW5jeSBjaGFpbiB0byBmdWxseSBncmFzcCB0aGUgb3BlcmF0aW9uYWwgaW1wYWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKmRyaXZpbmcqIHRoaXMgc2VsZWN0aW9uLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjExLjc0NTMzMDU5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTQyODA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcGxzX3NlbGVjdF9tdWx0aXBhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wbHMvYWZfbXBscy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcGxzL2FmX21wbHMuYz0yNDk9c3RhdGljIHN0cnVjdCBtcGxzX25oICptcGxzX2dldF9uZXh0aG9wKHN0cnVjdCBtcGxzX3JvdXRlICpydCwgdTggaW5kZXgpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjU4LSAqL1xcbm5ldC9tcGxzL2FmX21wbHMuYzoyNTk6c3RhdGljIGNvbnN0IHN0cnVjdCBtcGxzX25oICptcGxzX3NlbGVjdF9tdWx0aXBhdGgoc3RydWN0IG1wbHNfcm91dGUgKnJ0LFxcbm5ldC9tcGxzL2FmX21wbHMuYy0yNjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYz0zNjc9c3RhdGljIGludCBtcGxzX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy00MTctXFxubmV0L21wbHMvYWZfbXBscy5jOjQxODpcXHRuaCA9IG1wbHNfc2VsZWN0X211bHRpcGF0aChydCwgc2tiKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtNDE5LVxcdGlmICghbmgpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9MjQxMz1zdGF0aWMgaW50IG1wbHNfZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICppbl9ubGgsXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjUyMS1cXG5uZXQvbXBscy9hZl9tcGxzLmM6MjUyMjpcXHRuaCA9IG1wbHNfc2VsZWN0X211bHRpcGF0aChydCwgc2tiKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtMjUyMy1cXHRpZiAoIW5oKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjExLjgzMDc3OTYxNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjE2MzA5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBMUyBGb3J3YXJkaW5nIExvZ2ljIFJldmlldyoqXG5cbk9rYXksIHNvIGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAgYm90aCB1bHRpbWF0ZWx5IGZ1bm5lbCBpbnRvIGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgLiBUaGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBNUExTIGZvcndhcmRpbmcgcHJvY2VzcywgdGhlIGNvcmUga2VybmVsIGxvZ2ljLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZmxvdyBjb21wbGV0ZWx5LiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgdG8gZW5zdXJlIHRoZSBNUExTIGNvbmZpZ3VyYXRpb24gaXMgd2hhdCBJIGV4cGVjdC4gSXQncyBhbHdheXMgZ29vZCB0byBjb25maXJtIHRoZSBiYXNpY3MgYmVmb3JlIGRpc3NlY3RpbmcgdGhlIG1vcmUgY29tcGxleCBicmFuY2hpbmcgbG9naWMgd2l0aGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MTQuNTUyNDE2ODU4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzIyMTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXBscy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wbHMvS2NvbmZpZy01LVxcbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcXG5uZXQvbXBscy9LY29uZmlnLTctXFx0Ym9vbCBcXFwiTXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcXFwiXFxuLS1cXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cXG4tLVxcbm5ldC9tcGxzL0tjb25maWctMjUtXFxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXFxubmV0L21wbHMvS2NvbmZpZy0yNy1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogcm91dGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21wbHMvS2NvbmZpZy0zMi1cXG5uZXQvbXBscy9LY29uZmlnOjMzOmNvbmZpZyBNUExTX0lQVFVOTkVMXFxubmV0L21wbHMvS2NvbmZpZy0zNC1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogSVAgb3ZlciBNUExTIHR1bm5lbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDoxNC42NTk2NDQ2ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjYwMjk1NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE1QTFMgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoZSBgYWZfbXBscy5jYCBtb2R1bGUgZ2V0cyBidWlsdC4gVGltZSB0byBnbyByaWdodCB0byB0aGUgc291cmNlIGFuZCBjaGVjayB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBJJ2xsIG9wZW4gdXAgYG5ldC9tcGxzL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZXhwbGljaXQgZGVwZW5kZW5jaWVzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCB0byBicmluZyB0aGF0IHBpZWNlIG9mIHRoZSBwdXp6bGUgdG9nZXRoZXIuIEkgZXhwZWN0IGl0J3MgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBwcm9jZXNzLCBidXQgaXQncyBhbHdheXMgYmVzdCB0byBiZSBwcmVjaXNlIGFuZCBjb25maXJtIHRoZSBzcGVjaWZpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDoxNy4zMTk5NDM3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3MDAzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZfbXBsc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXBscy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXBscy9NYWtlZmlsZT03PW9iai0kKENPTkZJR19NUExTX0lQVFVOTkVMKSArPSBtcGxzX2lwdHVubmVsLm9cXG5uZXQvbXBscy9NYWtlZmlsZS04LVxcbm5ldC9tcGxzL01ha2VmaWxlOjk6bXBsc19yb3V0ZXIteSA6PSBhZl9tcGxzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MTcuMzg1NjUwOTA5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjYzMjY0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBmb3IgYG1wbHNfcm91dGVyLXlgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1wbHNfcm91dGVyLXlgLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUncyB0aGlzIHRoaW5nIGV2ZW4gY29taW5nIGZyb20/XCIgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNoYWluLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBob3cgaXQncyBiZWluZyBjb21waWxlZC4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIOKAkyBpbiB0aGlzIGNhc2UsIGl0J3MgcHJldHR5IG9idmlvdXMgdGhhdCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggTVBMUywgSSBzaG91bGQgY2hlY2sgdGhlIGBuZXQvbXBscy9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBpcyBtb3N0IGxpa2VseS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHRyYWNrIGRvd24gdGhvc2UgY29tcGlsYXRpb24gdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjIwLjIxMTk4MDIwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXBscy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgTVBMUy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdG9iai0kKENPTkZJR19ORVRfTVBMU19HU08pICs9IG1wbHNfZ3NvLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19NUExTX1JPVVRJTkcpICs9IG1wbHNfcm91dGVyLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19NUExTX0lQVFVOTkVMKSArPSBtcGxzX2lwdHVubmVsLm9cXG4gICA4OlxcdFxcbiAgIDk6XFx0bXBsc19yb3V0ZXIteSA6PSBhZl9tcGxzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MjAuMjEyMDYwODkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjE5MzAyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBNUExTIFJvdXRpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUga2VybmVsIGJ1aWxkcyB0aGUgTVBMUyByb3V0aW5nIGNvbXBvbmVudHMuIEkgc2VlIHRoYXQgYENPTkZJR19NUExTX1JPVVRJTkdgIGlzIHRoZSBrZXkgaGVyZTsgaXQgZGlyZWN0bHkgbGVhZHMgdG8gdGhlIGNvbXBpbGF0aW9uIG9mIGBtcGxzX3JvdXRlci5vYCwgYW5kLCBjcnVjaWFsbHksIHRoYXQgaW5jbHVkZXMgYGFmX21wbHMub2AuIFRoYXQncyB0aGUgY29yZSBwYXJ0IEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5Ob3csIEknbSB0aGlua2luZywgdGhpcyBpcyBhbGwgZHJpdmVuIGJ5IHRoZSBgTVBMU19ST1VUSU5HYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gc3VycHJpc2VzIG9yIHJlbGF0ZWQgY29uZmlncyB0aGF0IGluZmx1ZW5jZSB0aGlzIGJ1aWxkLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvbXBscy9LY29uZmlnYCB0byBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGdvaW5nIG9uIGJlaGluZCB0aGUgc2NlbmVzIHdpdGggdGhpcyBgTVBMU19ST1VUSU5HYCBvcHRpb24uIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcyBmb3IgYSBmdWxsIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjIzLjE3Mzk5Mzk0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wbHMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTVBMUzogR1NPIHN1cHBvcnRcXFwiXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgVGhpcyBpcyBoZWxwZXIgbW9kdWxlIHRvIGFsbG93IHNlZ21lbnRhdGlvbiBvZiBub24tTVBMUyBHU08gcGFja2V0c1xcbiAgMjM6XFx0XFx0IHRoYXQgaGF2ZSBoYWQgTVBMUyBzdGFjayBlbnRyaWVzIHB1c2hlZCBvbnRvIHRoZW0gYW5kIHRodXNcXG4gIDI0OlxcdFxcdCBiZWNvbWUgTVBMUyBHU08gcGFja2V0cy5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIE1QTFNfUk9VVElOR1xcbiAgMjc6XFx0XFx0dHJpc3RhdGUgXFxcIk1QTFM6IHJvdXRpbmcgc3VwcG9ydFxcXCJcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0lQX1RVTk5FTCB8fCBORVRfSVBfVFVOTkVMPW5cXG4gIDI5OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19TWVNDVExcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCBBZGQgc3VwcG9ydCBmb3IgZm9yd2FyZGluZyBvZiBtcGxzIHBhY2tldHMuXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNvbmZpZyBNUExTX0lQVFVOTkVMXFxuICAzNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTVBMUzogSVAgb3ZlciBNUExTIHR1bm5lbCBzdXBwb3J0XFxcIlxcbiAgMzU6XFx0XFx0ZGVwZW5kcyBvbiBMV1RVTk5FTCBcXHUwMDI2XFx1MDAyNiBNUExTX1JPVVRJTkdcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCBtcGxzIGlwIHR1bm5lbCBzdXBwb3J0LlxcbiAgMzg6XFx0XFxuICAzOTpcXHRlbmRpZiAjIE1QTFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MjMuMTc0MDk4ODYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDYyNDQ3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTVBMUyBSb3V0aW5nIE1vZHVsZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBNUExTX1JPVVRJTkdgLiBJIHNlZSBpbW1lZGlhdGVseSB0aGF0IGl0cyBjb25maWd1cmF0aW9uIGRlcGVuZHMgb24gYm90aCBgTkVUX0lQX1RVTk5FTGAgKG9yLCBjcnVjaWFsbHksIGJlaW5nICp1bnNldCogdG8gZW5zdXJlIHR1bm5lbCBmdW5jdGlvbmFsaXR5IGlzbid0IHByZXNlbnQpIGFuZCBgUFJPQ19TWVNDVExgLiBTZWVtcyBsb2dpY2FsLiBJdCdzIHVuZGVyIHRoZSBgbWVudWNvbmZpZyBNUExTYCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIGBNUExTYCBhbmQgYE1QTFNfUk9VVElOR2AgYXJlIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gZ2V0IHRoaXMgY29kZSBpbnZvbHZlZC4gR29vZCwgSSBrbm93IHRoZSBkZXBlbmRlbmNpZXMuXG5cbk5vdywgdGhpcyBwYXRjaC4uLiB0aGlzIGlzIGludGVyZXN0aW5nLiBUaGV5J3JlIHNheWluZyB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGBwc2tiX21heV9wdWxsYCBwb3NzaWJseSByZWFsbG9jYXRpbmcgdGhlIGBza2JgIGRhdGEsIGJ1dCBub3QgdXBkYXRpbmcgdGhlIGBoZHJgIHBvaW50ZXIuIFRoaXMgbGVhZHMgdG8gYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHRoZXkgdHJ5IHRvIGFjY2VzcyBgdjRoZHJgIG9yIGB2NmhkcmAuIERlZmluaXRlbHkgYSB2dWxuZXJhYmlsaXR5IGNhbmRpZGF0ZS4gVGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggdGhyb3dpbmcgZnV6emluZyBhdC4gSSdsbCBmbGFnIGl0IGZvciBkZXRhaWxlZCBmdXp6aW5nLCB0byBiZSBjZXJ0YWluLlxuXG5MZXQncyBzZWUsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIGJlIGZvY3VzaW5nIG9uIGhlcmU/IEkgc2VlIGBtcGxzX211bHRpcGF0aF9oYXNoYCBhbmQgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAgYXJlIGJvdGggc3RhdGljLCBzbyB0aGV5J3JlIGludGVybmFsIHRvIHRoZSBtb2R1bGUuIGBtcGxzX2ZvcndhcmRgIGlzIGFsc28gc3RhdGljLi4uIHdhaXQgYSBzZWNvbmQuLi4gYG1wbHNfZm9yd2FyZGAgaXMgcmVnaXN0ZXJlZCBhcyBhICpwYWNrZXQgaGFuZGxlcio/IFRoYXQncyBhIGtleSBkZXRhaWwhIEknbGwgbmVlZCB0byBjaGVjayBgYWZfbXBscy5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgZW50cnkgcG9pbnQgaXMsIGFuZCB0aGF0IHdpbGwgZ2l2ZSBtZSBteSBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjI4LjU4MDM0NzI0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2NDY3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXBsc19mb3J3YXJkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcGxzL2FmX21wbHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXBscy9hZl9tcGxzLmM9Mjk1PXN0YXRpYyBib29sIG1wbHNfZWdyZXNzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1wbHNfcm91dGUgKnJ0LFxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jLTM2Ni1cXG5uZXQvbXBscy9hZl9tcGxzLmM6MzY3OnN0YXRpYyBpbnQgbXBsc19mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L21wbHMvYWZfbXBscy5jLTM2OC1cXHRcXHRcXHRzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9NTA1PXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbXBsc19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9tcGxzL2FmX21wbHMuYy01MDYtXFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9NUExTX1VDKSxcXG5uZXQvbXBscy9hZl9tcGxzLmM6NTA3OlxcdC5mdW5jID0gbXBsc19mb3J3YXJkLFxcbm5ldC9tcGxzL2FmX21wbHMuYy01MDgtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MjguNjYwOTk3OTk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjEzMjk1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBNUExTIEZvcndhcmRpbmcgaW4gdGhlIFJlY2VpdmUgUGF0aCoqXG5cbkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXMgdXNpbmcgYG1wbHNfZm9yd2FyZGAgYXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gKGAuZnVuY2ApIGZvciBoYW5kbGluZyBgbXBsc19wYWNrZXRfdHlwZWAuIFRoYXQgc2VlbXMgbG9naWNhbDsgaXQncyB0aGUgZXhwZWN0ZWQgZW50cnkgcG9pbnQgZm9yIE1QTFMgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIG5ldHdvcmsncyByZWNlaXZlIHBhdGguIFRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIGJlZm9yZSBJIGZpbmFsaXplIHRoaXMgdW5kZXJzdGFuZGluZywgSSBzaG91bGQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgYW5kIGVuc3VyZSB0aGF0IGl0IGlzIG5vdCBiZWluZyBkb25lIGVsc2V3aGVyZS5cblxuSSBzaG91bGQgYWxzbyBxdWlja2x5IGNvbnNpZGVyIGlmIGBtcGxzX2dldHJvdXRlYCBpcyBkb2luZyBhbnkgcGFydCBvZiB0aGlzIHRhc2suIEl0IGlzIHBvc3NpYmxlIHRoYXQgYG1wbHNfZ2V0cm91dGVgIGhhbmRsZXMgdGhpcyB0cmFmZmljIGFuZCB0aHVzIGRvZXMgbm90IHVzZSBgbXBsc19mb3J3YXJkYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBob3cgYG1wbHNfZ2V0cm91dGVgIGlzIGltcGxlbWVudGVkIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGFsc28gcGxheSBhIHNpZ25pZmljYW50IHJvbGUuIEdvdHRhIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IGluIHRoZSBmb3J3YXJkaW5nIHBsYW5lLiBXZSBjYW4ndCBoYXZlIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTE4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MzEuOTIyMzMxNDUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc3MzIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcGxzX2dldHJvdXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcGxzL2FmX21wbHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXBscy9hZl9tcGxzLmM9MjM1NT1zdGF0aWMgaW50IG1wbHNfdmFsaWRfZ2V0cm91dGVfcmVxKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjQxMi1cXG5uZXQvbXBscy9hZl9tcGxzLmM6MjQxMzpzdGF0aWMgaW50IG1wbHNfZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICppbl9ubGgsXFxubmV0L21wbHMvYWZfbXBscy5jLTI0MTQtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYz0yODI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBtcGxzX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0ZGF0YV9vcl9tb2R1bGUgPSB7XFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjgzMi1cXHQgUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxcbm5ldC9tcGxzL2FmX21wbHMuYzoyODMzOlxcdHtUSElTX01PRFVMRSwgUEZfTVBMUywgUlRNX0dFVFJPVVRFLCBtcGxzX2dldHJvdXRlLCBtcGxzX2R1bXBfcm91dGVzLFxcbm5ldC9tcGxzL2FmX21wbHMuYy0yODM0LVxcdCBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MzEuOTg3MTEzNDkyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTUzNTAzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBtcGxzX2dldHJvdXRlYCBhcyBhIFBvdGVudGlhbCBUZXN0IEVudHJ5cG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbXBsc19nZXRyb3V0ZWAuIEl0J3MgYSBoYW5kbGVyIGZvciBgUlRNX0dFVFJPVVRFYCB3aXRoaW4gdGhlIGBQRl9NUExTYCBmYW1pbHksIG1lYW5pbmcgaXQncyBhbiBSVE5MIChSb3V0aW5nIFRhYmxlIE5ldGxpbmspIGhhbmRsZXIuIFRoYXQgc291bmRzIGxpa2UgYSBkZWNlbnQgcGxhY2UgdG8gc3RhcnQsIGRlZmluaXRlbHkgbm90IGEgaG90LXBhdGggZnVuY3Rpb24sIHVubGlrZSwgc2F5LCBgbXBsc19mb3J3YXJkYCB3aGljaCBpcywgb2J2aW91c2x5LCBpbnZvbHZlZCBpbiBwYWNrZXQgZm9yd2FyZGluZyBhbmQgdGh1cywgcGVyZm9ybWFuY2UgY3JpdGljYWwuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIHRob3NlLiBTbywgYG1wbHNfZ2V0cm91dGVgIGlzIGdvb2QsIGEgbmV0bGluayBoYW5kbGVyIGlzIGV4YWN0bHkgd2hhdCB0aGV5IGFyZSBhc2tpbmcgZm9yLlxuXG5IbW0sIHdhaXQuIElzIGBtcGxzX2dldHJvdXRlYCBzdGF0aWM/IEFoLCB5ZXMsIGl0J3MgZGVmaW5lZCBhcyBgc3RhdGljIGludCBtcGxzX2dldHJvdXRlKC4uLilgLiBUaGUgcHJvbXB0IHNwZWNpZmllczogXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuXCIgVGhhdCdzIGEgYml0IG9mIGEgd3JpbmtsZS4gSG93ZXZlciwgaXQgKmlzKiBhbiBBUEkgZW50cnlwb2ludCwgaXQncyB0aGUgbmV0bGluayBoYW5kbGVyIGZ1bmN0aW9uLCBldmVuIGlmIGl0ICppcyogc3RhdGljLiBJdCdzIGEgZGlyZWN0IGludGVyZmFjZSB0byB0aGUga2VybmVsJ3Mgcm91dGluZyBpbmZvcm1hdGlvbi5cblxuU28sIGFsdGhvdWdoIGl0J3Mgc3RhdGljLCBpdCdzIHN0aWxsIGFuIEFQSSBlbnRyeXBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBzZWUgaWYgdGhlcmUgYXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSwganVzdCB0byBiZSBzdXJlLCBhbmQgdG8gY29tcGx5IHByZWNpc2VseSB3aXRoIHRoZSBndWlkZWxpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjM2LjQ4MjQ2NzEzNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkxNDM3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXBscy9hZl9tcGxzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wbHMvYWZfbXBscy5jPTExMj1ib29sIG1wbHNfb3V0cHV0X3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMTE1LX1cXG5uZXQvbXBscy9hZl9tcGxzLmM6MTE2OkVYUE9SVF9TWU1CT0xfR1BMKG1wbHNfb3V0cHV0X3Bvc3NpYmxlKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtMTE3LVxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jPTEzNT11bnNpZ25lZCBpbnQgbXBsc19kZXZfbXR1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMTM5LX1cXG5uZXQvbXBscy9hZl9tcGxzLmM6MTQwOkVYUE9SVF9TWU1CT0xfR1BMKG1wbHNfZGV2X210dSk7XFxubmV0L21wbHMvYWZfbXBscy5jLTE0MS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9MTQyPWJvb2wgbXBsc19wa3RfdG9vX2JpZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbXR1KVxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jLTE1MS19XFxubmV0L21wbHMvYWZfbXBscy5jOjE1MjpFWFBPUlRfU1lNQk9MX0dQTChtcGxzX3BrdF90b29fYmlnKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtMTUzLVxcbm5ldC9tcGxzL2FmX21wbHMuYz0xNTQ9dm9pZCBtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jLTE3Ny19XFxubmV0L21wbHMvYWZfbXBscy5jOjE3ODpFWFBPUlRfU1lNQk9MX0dQTChtcGxzX3N0YXRzX2luY19vdXR1Y2FzdHBrdHMpO1xcbm5ldC9tcGxzL2FmX21wbHMuYy0xNzktXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9MTc0Nz1pbnQgbmxhX3B1dF9sYWJlbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLFxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jLTE3NjYtfVxcbm5ldC9tcGxzL2FmX21wbHMuYzoxNzY3OkVYUE9SVF9TWU1CT0xfR1BMKG5sYV9wdXRfbGFiZWxzKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtMTc2OC1cXG5uZXQvbXBscy9hZl9tcGxzLmM9MTc2OT1pbnQgbmxhX2dldF9sYWJlbHMoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCB1OCBtYXhfbGFiZWxzLCB1OCAqbGFiZWxzLFxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jLTE4NDctfVxcbm5ldC9tcGxzL2FmX21wbHMuYzoxODQ4OkVYUE9SVF9TWU1CT0xfR1BMKG5sYV9nZXRfbGFiZWxzKTtcXG5uZXQvbXBscy9hZl9tcGxzLmMtMTg0OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6MzYuNTgxNjE3ODM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjc5OTIyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBNUExTIFJvdXRpbmc6IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBNUExTIGNvZGUsIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBsYWNlcyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIEZpcnN0LCBJIG5vdGljZWQgdGhhdCBub25lIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3J0ZWQgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhvc2UgaGFzaCBvciBtdWx0aXBhdGggc2VsZWN0aW9uIGZ1bmN0aW9ucywgd2hpY2ggaXMgZmluZSwgYnV0IEkgbmVlZCBhbiBlbnRyeSBwb2ludC4gTG9va2luZyBhdCB0aGUgY2FsbCBzaXRlcyBvZiBgbXBsc19zZWxlY3RfbXVsdGlwYXRoYCwgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBieSBgbXBsc19mb3J3YXJkYCBhbmQgYG1wbHNfZ2V0cm91dGVgLlxuXG5BbHJpZ2h0LCBgbXBsc19nZXRyb3V0ZWAgaXMgYSBuZXRsaW5rIGhhbmRsZXIsIHdoaWNoIGlzIGV4Y2VsbGVudCEgTmV0bGluayBoYW5kbGVycyBhcmUgdXN1YWxseSBwcmV0dHkgZWFzeSB0byB0cmlnZ2VyIHdpdGggY3JhZnRlZCBtZXNzYWdlcywgbWFraW5nIHRoZW0gaWRlYWwgdGFyZ2V0cyBmb3IgZnV6emluZy4gYG1wbHNfZm9yd2FyZGAgaXMgYSBwYWNrZXQgaGFuZGxlciwgc28gdGhlb3JldGljYWxseSBpdCdzIGFsc28gYSBnb29kIGNob2ljZS4gSG93ZXZlciwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IGl0J3MgcHJvYmFibHkgYSBob3QtcGF0aCBmdW5jdGlvbjsgd2hpY2ggaXMgbm90IGlkZWFsIGZvciBmdXp6aW5nLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBtcGxzX2ZvcndhcmRgIGlzIHJlZ2lzdGVyZWQgYXMgYSBwYWNrZXQgdHlwZSBoYW5kbGVyPyAqVGhhdCogbWVhbnMgaXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgcmVjZWl2aW5nIE1QTFMgcGFja2V0cyDigJMgYmluZ28hIElzIGl0IHN0YXRpYz8gWWVzLiBJcyBgbXBsc19nZXRyb3V0ZWAgc3RhdGljPyBZZXMuIFNvIG5vdyBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgd2hldGhlciB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlc2Ugb25lcywganVzdCB0byBoYXZlIGEgd2lkZXIgc2NvcGUuIEJ1dCBteSBtYWluIGdvYWwgaXMgdG8gZnV6eiB0aGUgKm1vZGlmaWVkKiBsb2dpYywgd2hpY2ggbWFrZXMgdGhlIGNob2ljZSBldmVuIHNpbXBsZXIuXG5cbkNvbnNpZGVyaW5nIHRoYXQgYG1wbHNfZ2V0cm91dGVgIGlzIGEgbmV0bGluayBoYW5kbGVyLCBpdCdzIGRlZmluaXRlbHkgdGhlIHRvcCBjb250ZW5kZXIgZm9yIG5vdy4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgbmV0bGluayBoYW5kbGVycyBpbnZvbHZlZCBpbiB0aGlzIGNvZGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBhdHRhY2sgdmVjdG9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc1MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDo0MS42NDk2MTUxMDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODUxMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wbHNfcnRubF9tc2dfaGFuZGxlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wbHMvYWZfbXBscy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcGxzL2FmX21wbHMuYz0yODIyPXN0YXRpYyBzdHJ1Y3QgcnRubF9hZl9vcHMgbXBsc19hZl9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy0yODI3LVxcbm5ldC9tcGxzL2FmX21wbHMuYzoyODI4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBtcGxzX3J0bmxfbXNnX2hhbmRsZXJzW10gX19pbml0ZGF0YV9vcl9tb2R1bGUgPSB7XFxubmV0L21wbHMvYWZfbXBscy5jLTI4MjktXFx0e1RISVNfTU9EVUxFLCBQRl9NUExTLCBSVE1fTkVXUk9VVEUsIG1wbHNfcnRtX25ld3JvdXRlLCBOVUxMLFxcbi0tXFxubmV0L21wbHMvYWZfbXBscy5jPTI4NDA9c3RhdGljIGludCBfX2luaXQgbXBsc19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjg1OS1cXG5uZXQvbXBscy9hZl9tcGxzLmM6Mjg2MDpcXHRlcnIgPSBydG5sX3JlZ2lzdGVyX21hbnkobXBsc19ydG5sX21zZ19oYW5kbGVycyk7XFxubmV0L21wbHMvYWZfbXBscy5jLTI4NjEtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy0yODc0LW91dF91bnJlZ2lzdGVyX3J0bmw6XFxubmV0L21wbHMvYWZfbXBscy5jOjI4NzU6XFx0cnRubF91bnJlZ2lzdGVyX21hbnkobXBsc19ydG5sX21zZ19oYW5kbGVycyk7XFxubmV0L21wbHMvYWZfbXBscy5jLTI4NzYtb3V0X3VucmVnaXN0ZXJfcnRubF9hZjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTA6NDEuNzA2NDcyOTIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTgyNTQ1NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1QTFMgUm91dGUgU2VsZWN0aW9uIGFuZCBQYXRjaCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3MuIEknbSBmb2N1c2luZyBvbiB0aGUgYGFmX21wbHMuY2AgZmlsZSBhbmQgaXRzIGFzc29jaWF0ZWQgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgaW4gbGlnaHQgb2YgdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCBgbXBsc19ydG1fbmV3cm91dGVgIGlzIGEgbmV0bGluayBoYW5kbGVyLCBidXQgaXQgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgLiBObywgaXQgY3JlYXRlcyByb3V0ZXMuIE5vdywgYG1wbHNfZ2V0cm91dGVgICpkb2VzKiBjYWxsIGBtcGxzX3NlbGVjdF9tdWx0aXBhdGhgLiBUaGF0IHNlZW1zIHByb21pc2luZywgYnV0IHdhaXQgYSBtaW51dGUsIHRoZSBtYWluIHBhY2tldCBwcm9jZXNzaW5nIGZ1bmN0aW9uLCBgbXBsc19mb3J3YXJkYCwgaXMgdGhlIHByaW1hcnkgdHJpZ2dlciBmb3IgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAgKndpdGgqIGFuIGFjdHVhbCBwYWNrZXQuIFNvLCBJIG5lZWQgdG8gaW5jbHVkZSBib3RoIGBtcGxzX2dldHJvdXRlYCBhbmQgYG1wbHNfZm9yd2FyZGAgaW4gbXkgYW5hbHlzaXMuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWVkIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0IG1lIGNoZWNrLi4uIGJlY2F1c2UgYG1wbHNfZ2V0cm91dGVgIGFuZCBgbXBsc19mb3J3YXJkYCBhcmUgcmVnaXN0ZXJlZCBhcyBmdW5jdGlvbiBwb2ludGVycyAoaW4gYHJ0bmxfbXNnX2hhbmRsZXJgIGFuZCBgcGFja2V0X3R5cGVgKSwgdGhleSBjYW5ub3QgYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRoYXQncyBnb29kLiBUaGV5IHdpbGwgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBzbyB0aGV5IGFyZSBwZXJmZWN0bHkgZmluZSB0byB1c2UuXG5cbkxldCdzIHZlcmlmeSB0aGUgY29uZmlncy4gV2UncmUgbG9va2luZyBhdCBgTVBMU2AgYW5kIGBNUExTX1JPVVRJTkdgLiBBaCwgYE1QTFNfUk9VVElOR2AgaGFzIGEgZGVwZW5kZW5jeSwgaXQgbmVlZHMgYE5FVF9JUF9UVU5ORUwgfHwgTkVUX0lQX1RVTk5FTD1uYC4gQWxyaWdodCwgaXMgYE1QTFNfUk9VVElOR2Agc3VmZmljaWVudD8gWWVzLCBpdCBsb29rcyBsaWtlIGBNUExTX1JPVVRJTkdgIGlzIHRoZSBjb25maWcgdGhhdCBidWlsZHMgYGFmX21wbHMuY2AuIE5vIG5lZWQgZm9yIGBNUExTX0lQVFVOTkVMYCBmb3IgdGhpcyBwYXJ0LlxuXG5Ob3csIHJldmlld2luZyB0aGUgcGF0Y2ggaXRzZWxmLiBBaCwgdGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyByZWFkIGZpeC4gVGhlIGBoZHJgIHBvaW50ZXIgaXMgYmVpbmcgdXNlZCBhZnRlciBgcHNrYl9tYXlfcHVsbGAsIHdoaWNoIGNhbiByZWFsbG9jYXRlIHRoZSBza2IgZGF0YS4gU28sIHRoZSBwYXRjaCBpcyByZWxvYWRpbmcgdGhlIGBoZHJgIHBvaW50ZXIgYWZ0ZXIgdGhlIHBvdGVudGlhbCByZWFsbG9jYXRpb24uIFRoaXMgZGVmaW5pdGVseSBoYXMgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBzdGFiaWxpdHkuXG5cbkxldCdzIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzLiBgbXBsc19mb3J3YXJkYCBpcyBzdGF0aWM6IGBzdGF0aWMgaW50IG1wbHNfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpYC4gQW5kIGBtcGxzX2dldHJvdXRlYCBpcyBzdGF0aWMgYXMgd2VsbDogYHN0YXRpYyBpbnQgbXBsc19nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKmluX25saCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKWAuIEFsdGhvdWdoIHRoZXkncmUgc3RhdGljLCB0aGVpciBhZGRyZXNzZXMgYXJlIHRha2VuLCBzbyB0aGV5IGNhbm5vdCBiZSBpbmxpbmVkLlxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0byBjb25zaWRlcj8gTGV0IG1lIHNlZS4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGlzIGFsc28gc3RhdGljLCBhbmQgaXRzIGFkZHJlc3MgaXNuJ3QgdGFrZW4uIEl0IG1pZ2h0IGJlIGlubGluZWQuIEkgc2hvdWxkIGF2b2lkIHVzaW5nIGBtcGxzX211bHRpcGF0aF9oYXNoYCBmb3IgdGhhdCByZWFzb24uXG5cblNvLCB0byBzdW1tYXJpemU6IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyByZWFkIGluIGBtcGxzX211bHRpcGF0aF9oYXNoYCBieSByZWxvYWRpbmcgdGhlIGBoZHJgIHBvaW50ZXIgYWZ0ZXIgY2FsbGluZyBgcHNrYl9tYXlfcHVsbGAsIHdoaWNoIG1pZ2h0IHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIuIFRoaXMgaW1wYWN0cyBNUExTIHBhY2tldCBmb3J3YXJkaW5nIGFuZCByb3V0ZSByZXRyaWV2YWwuIFRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgY29yZSBuZXR3b3JrIGxvZ2ljLCBzbyBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IEZvY3VzIFN5bWJvbHMsIGdpdmVuIHRoYXQsIHNob3VsZCBiZTpcbiogICBgbXBsc19mb3J3YXJkYFxuKiAgIGBtcGxzX2dldHJvdXRlYFxuXG5BbmQgdGhlIHJlcXVpcmVkIENvbmZpZ3M6XG4qICAgYE1QTFNgXG4qICAgYE1QTFNfUk9VVElOR2BcblxuSSBzaG91bGQgdmVyaWZ5IHRoZSBgTVBMU2AgY29uZmlndXJhdGlvbi4uLiB5ZXMsIGl0IGxvb2tzIGxpa2UgYGNvbmZpZyBNUExTYCBpcyBpbiBgbmV0L21wbHMvS2NvbmZpZ2AuIEl0J3MgYSBtZW51Y29uZmlnLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgZW5hYmxlZC4gSSBzZWUgYENPTkZJR19NUExTPXlgIGluIHRoZSBkb2N1bWVudGF0aW9uLiBPa2F5LCBJJ20gaGFwcHkgd2l0aCB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzUxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDo1NC4yODkwMjE1OTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDIxNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcGxzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wbHMvS2NvbmZpZy01LVxcbm5ldC9tcGxzL0tjb25maWc6NjptZW51Y29uZmlnIE1QTFNcXG5uZXQvbXBscy9LY29uZmlnLTctXFx0Ym9vbCBcXFwiTXVsdGlQcm90b2NvbCBMYWJlbCBTd2l0Y2hpbmdcXFwiXFxuLS1cXG5uZXQvbXBscy9LY29uZmlnPTE5PWNvbmZpZyBORVRfTVBMU19HU09cXG4tLVxcbm5ldC9tcGxzL0tjb25maWctMjUtXFxubmV0L21wbHMvS2NvbmZpZzoyNjpjb25maWcgTVBMU19ST1VUSU5HXFxubmV0L21wbHMvS2NvbmZpZy0yNy1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogcm91dGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21wbHMvS2NvbmZpZy0zMi1cXG5uZXQvbXBscy9LY29uZmlnOjMzOmNvbmZpZyBNUExTX0lQVFVOTkVMXFxubmV0L21wbHMvS2NvbmZpZy0zNC1cXHR0cmlzdGF0ZSBcXFwiTVBMUzogSVAgb3ZlciBNUExTIHR1bm5lbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxMToxMDo1NC4zNzcwNDgwMzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NzA3OTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ2hlY2tpbmcgTVBMUyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYE1QTFNgIGlzIGRlZmluaXRlbHkgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBTaW1wbGUgZW5vdWdoLiBMZXQgbWUganVzdCBjb25maXJtIHNvbWV0aGluZyBxdWljay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgbXBsc19mb3J3YXJkYCBpcyAqdGhlKiBvbmx5IHBhY2tldCBoYW5kbGVyIGluIHBsYWNlIHRoYXQgZGVhbHMgd2l0aCBNUExTIHRyYWZmaWMuIEkgbmVlZCB0byBiZSAxMDAlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiBvciBjb25mbGljdCB3aXRoIHNvbWUgb3RoZXIgbW9kdWxlLiBHb3R0YSBkb3QgbXkgaSdzIGFuZCBjcm9zcyBteSB0J3Mgb24gdGhpcyBvbmUgdG8ga2VlcCB0aGUgc3lzdGVtIHJ1bm5pbmcgc21vb3RobHkuIExldCdzIG1ha2Ugc3VyZSBpdCdzIGlzb2xhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjU3LjUzNDEzMjM5M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5ODY5OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wbHNfcGFja2V0X3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wbHMvYWZfbXBscy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcGxzL2FmX21wbHMuYz0zNjc9c3RhdGljIGludCBtcGxzX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy01MDQtXFxubmV0L21wbHMvYWZfbXBscy5jOjUwNTpzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIG1wbHNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbXBscy9hZl9tcGxzLmMtNTA2LVxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVBMU19VQyksXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9Mjg0MD1zdGF0aWMgaW50IF9faW5pdCBtcGxzX2luaXQodm9pZClcXG4tLVxcbm5ldC9tcGxzL2FmX21wbHMuYy0yODUzLVxcbm5ldC9tcGxzL2FmX21wbHMuYzoyODU0OlxcdGRldl9hZGRfcGFjayhcXHUwMDI2bXBsc19wYWNrZXRfdHlwZSk7XFxubmV0L21wbHMvYWZfbXBscy5jLTI4NTUtXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjg3OC1vdXRfdW5yZWdpc3Rlcl9kZXZfdHlwZTpcXG5uZXQvbXBscy9hZl9tcGxzLmM6Mjg3OTpcXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNm1wbHNfcGFja2V0X3R5cGUpO1xcbm5ldC9tcGxzL2FmX21wbHMuYy0yODgwLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZtcGxzX2Rldl9ub3RpZmllcik7XFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmM9Mjg4Nz1zdGF0aWMgdm9pZCBfX2V4aXQgbXBsc19leGl0KHZvaWQpXFxuLS1cXG5uZXQvbXBscy9hZl9tcGxzLmMtMjg5MC1cXHRydG5sX2FmX3VucmVnaXN0ZXIoXFx1MDAyNm1wbHNfYWZfb3BzKTtcXG5uZXQvbXBscy9hZl9tcGxzLmM6Mjg5MTpcXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNm1wbHNfcGFja2V0X3R5cGUpO1xcbm5ldC9tcGxzL2FmX21wbHMuYy0yODkyLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZtcGxzX2Rldl9ub3RpZmllcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjEwOjU3LjY1NDAwODc3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTM1NzExNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNUExTIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUncyBoYW5kbGluZyBvZiBgRVRIX1BfTVBMU19VQ2AgcGFja2V0cywgdGhhdCdzIHdoYXQgYG1wbHNfZm9yd2FyZGAgaXMgcmVzcG9uc2libGUgZm9yLiBJIHdhcyBpbml0aWFsbHkgd29uZGVyaW5nIGlmIHRoZXJlIHdlcmUgYW55IG90aGVyIGVudHJ5IHBvaW50cyBJIG5lZWRlZCB0byBjb25zaWRlci4gSXQgbG9va3MgbGlrZSBgbXBsc19nZXRyb3V0ZWAgaGFuZGxlcyBgUlRNX0dFVFJPVVRFYCwgYG1wbHNfcnRtX25ld3JvdXRlYCBoYW5kbGVzIGBSVE1fTkVXUk9VVEVgLCBhbmQgYG1wbHNfcnRtX2RlbHJvdXRlYCB0YWtlcyBjYXJlIG9mIGBSVE1fREVMUk9VVEVgLiBBbmQgdGhlbiBgbXBsc19kdW1wX3JvdXRlc2AgYWxzbyBoYW5kbGVzIHRoZSBkdW1wIGZvciBgUlRNX0dFVFJPVVRFYCwgcmlnaHQuXG5cblRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBtcGxzX211bHRpcGF0aF9oYXNoYCwgYW5kIHRoYXQncyAqY2FsbGVkKiBieSBgbXBsc19zZWxlY3RfbXVsdGlwYXRoYC4gQW5kLCBpbXBvcnRhbnRseSwgYG1wbHNfc2VsZWN0X211bHRpcGF0aGAgZ2V0cyAqY2FsbGVkKiBieSBib3RoIGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAuIFNvLCBmb2N1c2luZyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYG1wbHNfZm9yd2FyZGAgYW5kIGBtcGxzX2dldHJvdXRlYCBpcyBkZWZpbml0ZWx5IHRoZSByaWdodCBtb3ZlLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkLlxuXG5CYXNpY2FsbHksIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBmYWN0IHRoYXQgY2FsbGluZyBgcHNrYl9tYXlfcHVsbGAgY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YSwgd2hpY2ggbWVhbnMgdGhlIGBoZHJgIHBvaW50ZXIgbmVlZHMgdG8gYmUgcmVsb2FkZWQgdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgZGF0YS4gVGhpcyB2dWxuZXJhYmlsaXR5IGltcGFjdHMgTVBMUyBwYWNrZXQgZm9yd2FyZGluZyBhbmQgcm91dGUgcmV0cmlldmFsLiBJIGRlZmluaXRlbHkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEkgc3RhcnQgbXkgZnV6emluZyBydW5zLlxuXG5CYXNlZCBvbiBhbGwgb2YgdGhpcywgdGhlIGNyaXRpY2FsIHRhcmdldHMgYXJlIGBtcGxzX2ZvcndhcmRgIGFuZCBgbXBsc19nZXRyb3V0ZWAuIFRoZSByZWxldmFudCBjb25maWdzIGFyZSBgTVBMU2AgYW5kIGBNUExTX1JPVVRJTkdgLiBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzcsIk91dHB1dFRva2VucyI6MTIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjExOjAzLjc4OTcyMzQ2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyODYxMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUExTXCIsXG4gICAgXCJNUExTX1JPVVRJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcGxzX2ZvcndhcmRcIixcbiAgICBcIm1wbHNfZ2V0cm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIHJlYWQgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGJ5IHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YS4gVGhpcyBhZmZlY3RzIE1QTFMgcGFja2V0IGZvcndhcmRpbmcgYW5kIHJvdXRlIHJldHJpZXZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUExTXCIsXG4gICAgXCJNUExTX1JPVVRJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcGxzX2ZvcndhcmRcIixcbiAgICBcIm1wbHNfZ2V0cm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIHJlYWQgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgIGJ5IHJlbG9hZGluZyB0aGUgYGhkcmAgcG9pbnRlciBhZnRlciBjYWxsaW5nIGBwc2tiX21heV9wdWxsYCwgd2hpY2ggY2FuIHJlYWxsb2NhdGUgdGhlIHNvY2tldCBidWZmZXIgZGF0YS4gVGhpcyBhZmZlY3RzIE1QTFMgcGFja2V0IGZvcndhcmRpbmcgYW5kIHJvdXRlIHJldHJpZXZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTE6MDMuOTQyNTk1Mjg4WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDYyMDUyNDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjExOjAzLjk0MzY0NzExOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNDYxOTQ2NzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYHBza2JfbWF5X3B1bGwoKWAgY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhIGJ1ZmZlciwgaW52YWxpZGF0aW5nIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIGBoZHJgIHBvaW50ZXIuIEFjY2Vzc2luZyBgaGRyYCBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYCB3aXRob3V0IHJlY29tcHV0aW5nIGl0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUuIFRoaXMgdHlwZSBvZiBtZW1vcnkgZXJyb3IgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnZvbHZlZCwgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyZmUyNzliYWQyZjRhZDMxOWNkYWQxMWE2MDRiMWZiYWYzZjUzYTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxMToxMDowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcGxzL2FmX21wbHMuYyBiL25ldC9tcGxzL2FmX21wbHMuY1xuaW5kZXggOTYxYmU1MDU0YTAzOS4uMTdiNzhkY2JmOGFiYyAxMDA2NDRcbi0tLSBhL25ldC9tcGxzL2FmX21wbHMuY1xuKysrIGIvbmV0L21wbHMvYWZfbXBscy5jXG5AQCAtMjIxLDYgKzIyMSw3IEBAIHN0YXRpYyB1MzIgbXBsc19tdWx0aXBhdGhfaGFzaChzdHJ1Y3QgbXBsc19yb3V0ZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGlmIChwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKSB7XG4gXHRcdFx0Y29uc3Qgc3RydWN0IGlwaGRyICp2NGhkcjtcbiBcbitcdFx0XHRoZHIgPSBtcGxzX2hkcihza2IpICsgbGFiZWxfaW5kZXg7XG4gXHRcdFx0djRoZHIgPSAoY29uc3Qgc3RydWN0IGlwaGRyICopKGhkciArIDEpO1xuIFx0XHRcdGlmICh2NGhkci1cdTAwM2V2ZXJzaW9uID09IDQpIHtcbiBcdFx0XHRcdGhhc2ggPSBqaGFzaF8zd29yZHMobnRvaGwodjRoZHItXHUwMDNlc2FkZHIpLFxuQEAgLTIzMSw2ICsyMzIsNyBAQCBzdGF0aWMgdTMyIG1wbHNfbXVsdGlwYXRoX2hhc2goc3RydWN0IG1wbHNfcm91dGUgKnJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkge1xuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKnY2aGRyO1xuIFxuK1x0XHRcdFx0aGRyID0gbXBsc19oZHIoc2tiKSArIGxhYmVsX2luZGV4O1xuIFx0XHRcdFx0djZoZHIgPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKikoaGRyICsgMSk7XG4gXHRcdFx0XHRoYXNoID0gX19pcHY2X2FkZHJfamhhc2goXHUwMDI2djZoZHItXHUwMDNlc2FkZHIsIGhhc2gpO1xuIFx0XHRcdFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFx1MDAyNnY2aGRyLVx1MDAzZWRhZGRyLCBoYXNoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjExOjAzLjk0MzY0ODY3OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzE3OTA5MDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgaW4gTVBMUyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbXBscy9hZl9tcGxzLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIHJlLWV2YWx1YXRpb24gb2YgdGhlIGBoZHJgIHBvaW50ZXIgYWZ0ZXIgYGxhYmVsX2luZGV4YCwgcmlnaHQgYmVmb3JlIHdlIGdldCB0byB0aGUgSVB2NC9JUHY2IGhlYWRlciBleHRyYWN0aW9uLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGlzIGFzIGEgY2xhc3NpYyBmaXggZm9yIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgbG9naWMgaGVyZSBpcyB0aGF0IGBoZHIgPSBtcGxzX2hkcihza2IpICsgbGFiZWxfaW5kZXg7YCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgcHNrYl9tYXlfcHVsbCgpYCBoYXMgdGhlIG5hc3R5IGhhYml0IG9mIHBvc3NpYmx5IHJlYWxsb2NhdGluZyB0aGUgU0tCJ3MgbGluZWFyIGRhdGEgYXJlYS4gVGhhdCBtZWFucyBhbnkgcG9pbnRlcnMgaW50byB0aGF0IGFyZWEsIGxpa2Ugb3VyIGBoZHJgIHZhcmlhYmxlLCBjYW4gYmVjb21lIGNvbXBsZXRlbHkgaW52YWxpZC5cblxuQW5kLCBpZiB3ZSB0aGVuIHRyaWVkIHRvIGRlcmVmZXJlbmNlIGFuIGludmFsaWRhdGVkIHBvaW50ZXIgdG8gYGhkcmAsIHdlJ3JlIHN0YXJpbmcgZG93biB0aGUgYmFycmVsIG9mIGEgVUFGIGJ1ZyDigJMgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBLQVNBTiBsb3ZlcyB0byBjYXRjaC4gVGhlIGNvZGUgd2FzIHVzaW5nIGFuIGludmFsaWRhdGVkIHBvaW50ZXIgYW5kIGRlcmVmZXJlbmNpbmcgaXQhIFRoYXQncyBhIHByb2JsZW0uIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIGJlIHVzaW5nIGFuIG9sZCBwb2ludGVyLCBhbmQgdGhpcyBwYXRjaCBtYWtlcyBzdXJlIHdlIGhhdmUgYSBmcmVzaCBwb2ludGVyIHRvIHRoZSBNUExTIGhlYWRlciwgZXZlbiBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYC5cblxuTm93LCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBJJ20gZ29pbmcgdG8gdGFrZSBhIHBlZWsgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1wbHNfbXVsdGlwYXRoX2hhc2hgLiBMZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyBwcm9wZXJseSBzY29wZWQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzIGJ5IGluYWR2ZXJ0ZW50bHkgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBhZGphY2VudCByb3V0aW5lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBUaGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIGZpeCwgYnV0IHZlcmlmaWNhdGlvbiBpcyBjcml0aWNhbCwgcGFydGljdWxhcmx5IGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDExOjExOjIxLjEyMjc0MjkwNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wbHMvYWZfbXBscy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHRcXHRcXHQgKi9cXG4gMjExOlxcdFxcdFxcdFxcdGlmIChlbGlfc2VlbilcXG4gMjEyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMTM6XFx0XFx0XFx0fSBlbHNlIGlmIChkZWMubGFiZWwgPT0gTVBMU19MQUJFTF9FTlRST1BZKSB7XFxuIDIxNDpcXHRcXHRcXHRcXHRlbGlfc2VlbiA9IHRydWU7XFxuIDIxNTpcXHRcXHRcXHR9XFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdFxcdGlmICghZGVjLmJvcylcXG4gMjE4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHRcXHQvKiBmb3VuZCBib3R0b20gbGFiZWw7IGRvZXMgc2tiIGhhdmUgcm9vbSBmb3IgYSBoZWFkZXI/ICovXFxuIDIyMTpcXHRcXHRcXHRpZiAocHNrYl9tYXlfcHVsbChza2IsIG1wbHNfaGRyX2xlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkge1xcbiAyMjI6XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGlwaGRyICp2NGhkcjtcXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0XFx0XFx0aGRyID0gbXBsc19oZHIoc2tiKSArIGxhYmVsX2luZGV4O1xcbiAyMjU6XFx0XFx0XFx0XFx0djRoZHIgPSAoY29uc3Qgc3RydWN0IGlwaGRyICopKGhkciArIDEpO1xcbiAyMjY6XFx0XFx0XFx0XFx0aWYgKHY0aGRyLVxcdTAwM2V2ZXJzaW9uID09IDQpIHtcXG4gMjI3OlxcdFxcdFxcdFxcdFxcdGhhc2ggPSBqaGFzaF8zd29yZHMobnRvaGwodjRoZHItXFx1MDAzZXNhZGRyKSxcXG4gMjI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBudG9obCh2NGhkci1cXHUwMDNlZGFkZHIpLFxcbiAyMjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHY0aGRyLVxcdTAwM2Vwcm90b2NvbCwgaGFzaCk7XFxuIDIzMDpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHY0aGRyLVxcdTAwM2V2ZXJzaW9uID09IDYgXFx1MDAyNlxcdTAwMjZcXG4gMjMxOlxcdFxcdFxcdFxcdFxcdCAgIHBza2JfbWF5X3B1bGwoc2tiLCBtcGxzX2hkcl9sZW4gK1xcbiAyMzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSB7XFxuIDIzMzpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqdjZoZHI7XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdFxcdFxcdFxcdGhkciA9IG1wbHNfaGRyKHNrYikgKyBsYWJlbF9pbmRleDtcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdHY2aGRyID0gKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopKGhkciArIDEpO1xcbiAyMzc6XFx0XFx0XFx0XFx0XFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFxcdTAwMjZ2Nmhkci1cXHUwMDNlc2FkZHIsIGhhc2gpO1xcbiAyMzg6XFx0XFx0XFx0XFx0XFx0aGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKFxcdTAwMjZ2Nmhkci1cXHUwMDNlZGFkZHIsIGhhc2gpO1xcbiAyMzk6XFx0XFx0XFx0XFx0XFx0aGFzaCA9IGpoYXNoXzF3b3JkKHY2aGRyLVxcdTAwM2VuZXh0aGRyLCBoYXNoKTtcXG4gMjQwOlxcdFxcdFxcdFxcdH1cXG4gMjQxOlxcdFxcdFxcdH1cXG4gMjQyOlxcdFxcbiAyNDM6XFx0XFx0XFx0YnJlYWs7XFxuIDI0NDpcXHRcXHR9XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdHJldHVybiBoYXNoO1xcbiAyNDc6XFx0fVxcbiAyNDg6XFx0XFxuIDI0OTpcXHRzdGF0aWMgc3RydWN0IG1wbHNfbmggKm1wbHNfZ2V0X25leHRob3Aoc3RydWN0IG1wbHNfcm91dGUgKnJ0LCB1OCBpbmRleClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTE6MjEuMTIzMDY4MzI1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3NDQwMDI2MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZy4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIHRoaXMgYGhkciA9IG1wbHNfaGRyKHNrYikgKyBsYWJlbF9pbmRleDtgIGxpbmUgYmVmb3JlIGFjY2Vzc2luZyB0aGUgYHY0aGRyYCBhbmQgYHY2aGRyYCBzdHJ1Y3R1cmVzIHdpdGhpbiBgbXBsc19tdWx0aXBhdGhfaGFzaGAuIFRoZSBwcm9ibGVtIEkgc2VlIGlzIHRoYXQgdGhlcmUncyBhIGBwc2tiX21heV9wdWxsYCBjYWxsIGhhcHBlbmluZyAqYmVmb3JlKiB0aG9zZSBhY2Nlc3Nlcy4gSSBrbm93IGBwc2tiX21heV9wdWxsYCBjYW4gcG90ZW50aWFsbHkgcmVhbGxvY2F0ZSB0aGUgYHNrYmAncyBkYXRhIGJ1ZmZlci4gVGhhdCBtZWFucyB0aGUgYGhkcmAgcG9pbnRlciwgd2hpY2ggd2FzIHNldCBlYXJsaWVyLCBjb3VsZCBiZWNvbWUgaW52YWxpZCDigJMgYSBjbGFzc2ljIGRhbmdsaW5nIHBvaW50ZXIgc2l0dWF0aW9uLlxuXG5JZiBgcHNrYl9tYXlfcHVsbGAgcmVhbGxvY2F0ZXMgdGhlIGJ1ZmZlciwgYGhkcmAgaXMgbm93IHBvaW50aW5nIHRvIGZyZWVkIG1lbW9yeS4gQW5kIHRoZW4sIHdlIHRyeSB0byBkZXJlZmVyZW5jZSBpdCB0byByZWFkIElQIGhlYWRlciBkYXRhIC0gdGhhdCdzIGEgYmxhdGFudCB1c2UtYWZ0ZXItZnJlZSBidWcuIFRoYXQncyB3aHkgdGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcmUtZXZhbHVhdGluZyBgaGRyID0gbXBsc19oZHIoc2tiKSArIGxhYmVsX2luZGV4O2AgKmFmdGVyKiB0aGUgYHBza2JfbWF5X3B1bGxgIGNhbGwuIFNpbXBsZSwgYnV0IGNyaXRpY2FsLlxuXG5JJ20gdGhpbmtpbmcgdGhpcyBpcyBwcmVjaXNlbHkgdGhlIHNvcnQgb2YgdGhpbmcgS0FTQU4gZXhjZWxzIGF0IGNhdGNoaW5nLiBJdCdzIGEgdGV4dGJvb2sgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIEl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBhbiBpc3N1ZSB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHByZS1wYXRjaCBjb2RlIHRvIHNvbGlkaWZ5IHRoZSB0aG91Z2h0OlxuXG5gYGBjXG5cdFx0LyogZm91bmQgYm90dG9tIGxhYmVsOyBkb2VzIHNrYiBoYXZlIHJvb20gZm9yIGEgaGVhZGVyPyAqL1xuXHRcdGlmIChwc2tiX21heV9wdWxsKHNrYiwgbXBsc19oZHJfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKSB7XG5cdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnY0aGRyO1xuXG5cdFx0XHR2NGhkciA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKikoaGRyICsgMSk7XG5cdFx0XHRpZiAodjRoZHItXHUwMDNldmVyc2lvbiA9PSA0KSB7XG5cdFx0XHRcdGhhc2ggPSBqaGFzaF8zd29yZHMobnRvaGwodjRoZHItXHUwMDNlc2FkZHIpLFxuXHRcdFx0XHRcdFx0ICAgIG50b2hsKHY0aGRyLVx1MDAzZWRhZGRyKSxcblx0XHRcdFx0XHRcdCAgICB2NGhkci1cdTAwM2Vwcm90b2NvbCwgaGFzaCk7XG5cdFx0XHR9IGVsc2UgaWYgKHY0aGRyLVx1MDAzZXZlcnNpb24gPT0gNiBcdTAwMjZcdTAwMjZcblx0XHRcdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIG1wbHNfaGRyX2xlbiArXG5cdFx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHtcblx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKnY2aGRyO1xuXG5cdFx0XHRcdHY2aGRyID0gKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopKGhkciArIDEpO1xuXHRcdFx0XHRoYXNoID0gX19pcHY2X2FkZHJfamhhc2goXHUwMDI2djZoZHItXHUwMDNlc2FkZHIsIGhhc2gpO1xuXHRcdFx0XHRoYXNoID0gX19pcHY2X2FkZHJfamhhc2goXHUwMDI2djZoZHItXHUwMDNlZGFkZHIsIGhhc2gpO1xuXHRcdFx0XHRoYXNoID0gamhhc2hfMXdvcmQodjZoZHItXHUwMDNlbmV4dGhkciwgaGFzaCk7XG5cdFx0XHR9XG5cdFx0fVxuYGBgXG5cblllcCwgYXMgSSBzdXNwZWN0ZWQsIHRoZSBgcHNrYl9tYXlfcHVsbGAgY2FsbCBjb3VsZCBpbmRlZWQgaW52YWxpZGF0ZSBgc2tiLVx1MDAzZWhlYWRgIGFuZCBgc2tiLVx1MDAzZWRhdGFgLCBsZWF2aW5nIGBoZHJgIGRhbmdsaW5nLiBUaGlzIGlzIGEgY2xlYXItY3V0IHVzZS1hZnRlci1mcmVlLiAgS0FTQU4gd291bGQgYWJzb2x1dGVseSBuYWlsIHRoaXMuIEtNU0FOLCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgc2FuaXRpemVyLCBpc24ndCBhcHBsaWNhYmxlIGhlcmUsIHNvIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuIEdvb2QgY2F0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTcsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTE6MTE6MzguNTYzMDk3OTg4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyB3aGVyZSBgcHNrYl9tYXlfcHVsbCgpYCBjYW4gcmVhbGxvY2F0ZSB0aGUgc2tiIGRhdGEgYnVmZmVyLCBpbnZhbGlkYXRpbmcgdGhlIHByZXZpb3VzbHkgY29tcHV0ZWQgYGhkcmAgcG9pbnRlci4gQWNjZXNzaW5nIGBoZHJgIGFmdGVyIGBwc2tiX21heV9wdWxsKClgIHdpdGhvdXQgcmVjb21wdXRpbmcgaXQgbGVhZHMgdG8gYSB1c2UtYWZ0ZXItZnJlZS4gVGhpcyB0eXBlIG9mIG1lbW9yeSBlcnJvciBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrIGludm9sdmVkLCBzbyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYHBza2JfbWF5X3B1bGwoKWAgY2FuIHJlYWxsb2NhdGUgdGhlIHNrYiBkYXRhIGJ1ZmZlciwgaW52YWxpZGF0aW5nIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIGBoZHJgIHBvaW50ZXIuIEFjY2Vzc2luZyBgaGRyYCBhZnRlciBgcHNrYl9tYXlfcHVsbCgpYCB3aXRob3V0IHJlY29tcHV0aW5nIGl0IGxlYWRzIHRvIGEgdXNlLWFmdGVyLWZyZWUuIFRoaXMgdHlwZSBvZiBtZW1vcnkgZXJyb3IgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVhayBpbnZvbHZlZCwgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg9sk7[1] Phase: Succeeded StartedAt: 2026-08-14 11:11:50 +0000 UTC FinishedAt: 2026-08-14 11:11:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 11:11:50 +0000 UTC FinishedAt: 2026-08-14 11:11:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2] Phase: Succeeded StartedAt: 2026-08-14 11:11:50 +0000 UTC FinishedAt: 2026-08-14 14:51:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:11:50 +0000 UTC FinishedAt: 2026-08-14 14:51:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:11:50 +0000 UTC FinishedAt: 2026-08-14 11:12:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:11:50 +0000 UTC FinishedAt: 2026-08-14 11:11:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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-workflowg9sk7/series-workflowg9sk7-convert-artifact-989469514/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:12:01 +0000 UTC FinishedAt: 2026-08-14 11:29:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:12:01 +0000 UTC FinishedAt: 2026-08-14 11:29:23 +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:*eccb437a-1c49-4904-8c3f-ecb215562b46,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-workflowg9sk7/series-workflowg9sk7-convert-artifact-989469514/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": "6e0de902-5ef5-4611-ab37-d23b4e263029", "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-workflowg9sk7/series-workflowg9sk7-build-action-1850651448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:12:01 +0000 UTC FinishedAt: 2026-08-14 11:29:13 +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:*eccb437a-1c49-4904-8c3f-ecb215562b46,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-workflowg9sk7/series-workflowg9sk7-convert-artifact-989469514/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": "6e0de902-5ef5-4611-ab37-d23b4e263029", "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-workflowg9sk7/series-workflowg9sk7-build-action-1850651448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:29:23 +0000 UTC FinishedAt: 2026-08-14 11:29:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:29:23 +0000 UTC FinishedAt: 2026-08-14 11:29:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:29:23 +0000 UTC FinishedAt: 2026-08-14 11:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:29:23 +0000 UTC FinishedAt: 2026-08-14 11:29:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-workflowg9sk7/series-workflowg9sk7-convert-artifact-3075609317/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:29:33 +0000 UTC FinishedAt: 2026-08-14 11:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:29:33 +0000 UTC FinishedAt: 2026-08-14 11:31:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6e0de902-5ef5-4611-ab37-d23b4e263029,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-workflowg9sk7/series-workflowg9sk7-build-action-1850651448/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-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:31:38 +0000 UTC FinishedAt: 2026-08-14 11:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:31:38 +0000 UTC FinishedAt: 2026-08-14 11:31:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:31:38 +0000 UTC FinishedAt: 2026-08-14 11:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:31:38 +0000 UTC FinishedAt: 2026-08-14 11:48:26 +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:*eccb437a-1c49-4904-8c3f-ecb215562b46,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-workflowg9sk7/series-workflowg9sk7-convert-artifact-3075609317/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": "90275a8e-d29d-4a19-b039-885eab18170c", "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-workflowg9sk7/series-workflowg9sk7-build-action-1402267441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:31:38 +0000 UTC FinishedAt: 2026-08-14 11:48:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*eccb437a-1c49-4904-8c3f-ecb215562b46,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-workflowg9sk7/series-workflowg9sk7-convert-artifact-3075609317/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": "90275a8e-d29d-4a19-b039-885eab18170c", "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-workflowg9sk7/series-workflowg9sk7-build-action-1402267441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:48:26 +0000 UTC FinishedAt: 2026-08-14 11:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:48:26 +0000 UTC FinishedAt: 2026-08-14 11:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:48:26 +0000 UTC FinishedAt: 2026-08-14 11:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:48:26 +0000 UTC FinishedAt: 2026-08-14 11:50:12 +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:*90275a8e-d29d-4a19-b039-885eab18170c,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-workflowg9sk7/series-workflowg9sk7-build-action-1402267441/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-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:50:22 +0000 UTC FinishedAt: 2026-08-14 14:51:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:50:22 +0000 UTC FinishedAt: 2026-08-14 14:51:52 +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":["mpls_forward","mpls_getroute"],"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:*6e0de902-5ef5-4611-ab37-d23b4e263029,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*90275a8e-d29d-4a19-b039-885eab18170c,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-workflowg9sk7/series-workflowg9sk7-build-action-1850651448/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-workflowg9sk7/series-workflowg9sk7-build-action-1402267441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:50:22 +0000 UTC FinishedAt: 2026-08-14 11:50:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:50:22 +0000 UTC FinishedAt: 2026-08-14 11:50:27 +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":["mpls_forward","mpls_getroute"],"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-workflowg9sk7/series-workflowg9sk7-convert-artifact-2332079978/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:50:22 +0000 UTC FinishedAt: 2026-08-14 11:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:50:22 +0000 UTC FinishedAt: 2026-08-14 11:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:50:22 +0000 UTC FinishedAt: 2026-08-14 11:50:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:50:32 +0000 UTC FinishedAt: 2026-08-14 14:51:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg9sk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"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":["mpls_forward","mpls_getroute"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPLS","MPLS_ROUTING"],"series_id":"b33b2a58-1451-490e-a4df-087a33c1f2a9","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-08-14 11:50:32 +0000 UTC FinishedAt: 2026-08-14 14:51:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6e0de902-5ef5-4611-ab37-d23b4e263029,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*90275a8e-d29d-4a19-b039-885eab18170c,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-workflowg9sk7/series-workflowg9sk7-build-action-1850651448/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-workflowg9sk7/series-workflowg9sk7-build-action-1402267441/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-workflowg9sk7/series-workflowg9sk7-convert-artifact-2332079978/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,}