Name: series-workflow7dhm8 Phase: Succeeded StartedAt: 2026-07-29 03:53:56 +0000 UTC FinishedAt: 2026-07-29 08:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[0] Phase: Succeeded StartedAt: 2026-07-29 03:53:56 +0000 UTC FinishedAt: 2026-07-29 04:50:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 03:53:56 +0000 UTC FinishedAt: 2026-07-29 04:50:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b515dc54795ef370be3cb396e7c12ad91686b6d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "TAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b515dc54795ef370be3cb396e7c12ad91686b6d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "TAP" ], "series_id": "b2f43368-c58f-422f-bbdd-b0d05ea87e9e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zerocopy_sg_from_iter" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9zZ19mcm9tX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uL3NpZ25lZG5lc3MgaXNzdWUgaW4gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgd2hlbiBjYWxjdWxhdGluZyB0aGUgY29weSBsZW5ndGguIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVU4vVEFQIGRldmljZXMgd2hlbiB6ZXJvY29weSBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDJlOWM2ODFmNWQxNjM2MDQ0NWY1ZTJjYjM1MTJiYjM4MWQ0MWQ2ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDA0OjQ4OjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jXG5pbmRleCBjMjg1YzY0NjU5MjNlLi5mZDhlMTdkMjVhM2RiIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGF0YWdyYW0uY1xuQEAgLTc4Myw3ICYjNDM7NzgzLDcgQEAgRVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XG4gICovXG4gaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuLVx0aW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTtcbiYjNDM7XHRpbnQgY29weSA9IG1pbl90KHNpemVfdCwgc2tiX2hlYWRsZW4oc2tiKSwgaW92X2l0ZXJfY291bnQoZnJvbSkpO1xuIFxuIFx0LyogY29weSB1cCB0byBza2IgaGVhZGxlbiAqL1xuIFx0aWYgKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcihza2IsIDAsIGZyb20sIGNvcHkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUVU4mIzM0OywKICAgICYjMzQ7VEFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emVyb2NvcHlfc2dfZnJvbV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbi9zaWduZWRuZXNzIGlzc3VlIGluIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvcHkgbGVuZ3RoLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVFVOL1RBUCBkZXZpY2VzIHdoZW4gemVyb2NvcHkgaXMgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyZTljNjgxZjVkMTYzNjA0NDVmNWUyY2IzNTEyYmIzODFkNDFkNmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAwNDo0ODo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IGMyODVjNjQ2NTkyM2UuLmZkOGUxN2QyNWEzZGIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtNzgzLDcgJiM0Mzs3ODMsNyBAQCBFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTsKICAqLwogaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiB7Ci0JaW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKJiM0MzsJaW50IGNvcHkgPSBtaW5fdChzaXplX3QsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKIAogCS8qIGNvcHkgdXAgdG8gc2tiIGhlYWRsZW4gKi8KIAlpZiAoc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgMCwgZnJvbSwgY29weSkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBDb3JlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZSBjaGFuZ2UgaXMgcHJldHR5IGNvbnRhaW5lZC4gSXQmIzM5O3MganVzdCBtb2RpZnlpbmcgdGhhdCBsaW5lIGluIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBjaGFuZ2luZyBgbWluX3QoaW50LCAuLi4pYCB0byBgbWluX3Qoc2l6ZV90LCAuLi4pYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBvciBzaWduZWRuZXNzIGlzc3VlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvcHkgc2l6ZS4gU21hcnQuIFRoYXQmIzM5O3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuCgpUaGUgZmFjdCB0aGF0IGl0IGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBsaWtlIHRoaXMgbWFrZXMgbXkgaW50ZXJuYWwgYWxhcm0gYmVsbHMgZ28gb2ZmLiBXZSAqYWJzb2x1dGVseSogbmVlZCB0byBmdXp6IHRoaXMgYXJlYS4gQW55dGltZSB3ZSB0b3VjaCB0aGUgY2FsY3VsYXRpb24gb2YgZGF0YSBzaXplcyBvciBsZW5ndGhzLCB3ZSYjMzk7cmUgcG90ZW50aWFsbHkgb3BlbmluZyBhIGNhbiBvZiB3b3Jtcy4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeSwgYW5kIHNpbmNlIHRoaXMgaXMgdG91Y2hpbmcgYSBmdW5jdGlvbiB3aXRoICYjMzQ7emVyb2NvcHkmIzM0OyBpbiB0aGUgbmFtZSwgaXQgaXMgZXZlbiBtb3JlIGltcG9ydGFudCB0byBtYWtlIHN1cmUgaXQgaXMgY29ycmVjdC4KCk5vdywgbGV0IG1lIGp1c3QgbG9jYXRlIHRoYXQgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9kYXRhZ3JhbS5jYCBhbmQgZGlnIGEgbGl0dGxlIGRlZXBlci4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2RhdGFncmFtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ1LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDY6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDctXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3MS19XG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3MjpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzczLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtLyoqXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTogKlx0emVyb2NvcHlfc2dfZnJvbV9pdGVyIC0gQnVpbGQgYSB6ZXJvY29weSBkYXRhZ3JhbSBmcm9tIGFuIGlvdl9pdGVyXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni0gKlx0QHNrYjogYnVmZmVyIHRvIGNvcHlcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4My0gKi9cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODUte1xuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkxLVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTI6XHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTMtfVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTQ6RVhQT1JUX1NZTUJPTCh6ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipFeGFtaW5pbmcgdGhlIFVzYWdlIG9mIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgKioKClJpZ2h0LCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBpcyBhbiAqZXhwb3J0ZWQgc3ltYm9sKi4gVGhhdCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBvciBhdCBsZWFzdCB2aXNpYmxlIG91dHNpZGUgdGhlIG1vZHVsZSBpdCYjMzk7cyBkZWZpbmVkIGluLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gU28sIG15IGZpcnN0IG1vdmUgaXMgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB0cmFjZSBiYWNrIGl0cyBjYWxsIHNpdGVzIHRvIGdyYXNwIGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCBzdGFydCBzZWFyY2hpbmcgZm9yIGl0cyByZWZlcmVuY2VzLiBHb3R0YSBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTYyNy1cdGlmICh6ZXJvY29weSlcbmRyaXZlcnMvbmV0L3RhcC5jOjYyODpcdFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XG5kcml2ZXJzL25ldC90YXAuYy02MjktXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTcyNj1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xODE5LVx0XHRcdCAqIElmIHplcm9jb3B5IGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBsYXlvdXQgd2lsbCBiZVxuZHJpdmVycy9uZXQvdHVuLmM6MTgyMDpcdFx0XHQgKiBvdmVyd3JpdHRlbiBieSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKS5cbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjEtXHRcdFx0ICovXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTgzNS1cdFx0aWYgKHplcm9jb3B5KVxuZHJpdmVycy9uZXQvdHVuLmM6MTgzNjpcdFx0XHRlcnIgPSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc2tiLCBmcm9tKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MzctXHRcdGVsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cdFx0XHRcdCAgICAgICBOVUxMKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNTI9aW50IHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTMtXHRcdFx0XHQgICAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgaW50IGxlbik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNTQ6aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZybSk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTUtdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDEyLVx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlx0ICogZS5nLiwgdmlhIHplcm9jb3B5X3NnX2Zyb21faXRlcigpIG9yIHNrYl9vcnBoYW5fZnJhZ3NfcngoKVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVx0ICovXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ1LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDY6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDctXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3MS19XG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3MjpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzczLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtLyoqXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTogKlx0emVyb2NvcHlfc2dfZnJvbV9pdGVyIC0gQnVpbGQgYSB6ZXJvY29weSBkYXRhZ3JhbSBmcm9tIGFuIGlvdl9pdGVyXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni0gKlx0QHNrYjogYnVmZmVyIHRvIGNvcHlcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4My0gKi9cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODUte1xuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkxLVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTI6XHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTMtfVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTQ6RVhQT1JUX1NZTUJPTCh6ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTUtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkwNj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI3LVxubmV0L2NvcmUvc2tidWZmLmM6MTkyODpcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI5LVx0XHRcdFx0ICAgICAgYmluZGluZyk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cdGlmICh6Y29weSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcdFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXHQvKiBJZiAmIzM5O3ZzayYjMzk7ICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcdCAqIHdpbGwgbmV2ZXIgY2FsbCAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyBiZWxvdyB3aXRob3V0XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJiMzOTtza2Jfc2V0X293bmVyX3coKSYjMzk7LiBUaGUgb25seSBjYXNlXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyB1c2VzXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICYjMzk7c2tfd21lbV9hbGxvYyYjMzk7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IHplcm9jb3B5X3NnX2Zyb21faXRlcioqCgpPa2F5LCBzbyB0aGUgZnVuY3Rpb24gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgbHVya2luZyBpbiBgZHJpdmVycy9uZXQvdGFwLmNgIGFuZCBgZHJpdmVycy9uZXQvdHVuLmNgIOKAkyBpbnRlcmVzdGluZy4gQW5kIGl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBhZmZlY3RzIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBiZWVuIHRvdWNoZWQsIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuCgpUaGUga2V5IGhlcmUgaXMgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaXRzZWxmLiBJcyBpdCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2U/IEFoLCB5ZXMsIGl0IGFwcGVhcnMgdG8gYmUgYWNjZXNzaWJsZSB2aWEgVFVOL1RBUCBkZXZpY2VzLiBUaGF0JiMzOTtzIGEgcHJvbWlzaW5nIGF0dGFjayBzdXJmYWNlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZyBvcHRpb25zIHRoYXQgd2UgbmVlZCB0byBiZSBhd2FyZSBvZi4gYENPTkZJR19UVU5gIGFuZCBgQ09ORklHX01BQ1ZUQVBgIG9yIGBDT05GSUdfVEFQYCBhcmUgdXN1YWxseSBlbmFibGVkLiBUaW1lIHRvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmb3IgdGhlIGRlZmluaXRpdmUgYW5zd2VyIG9uIHRob3NlIGBUVU5gIGFuZCBgVEFQYCBvcHRpb25zLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRVTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zODY9Y29uZmlnIFJJT05FVF9SWF9TSVpFXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MTpjb25maWcgVFVOXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5Mi1cdHRyaXN0YXRlIFwmIzM0O1VuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDE1PWNvbmZpZyBUQVBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDIxOmNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGNyb3NzLWVuZGlhbiB2bmV0IGhlYWRlcnMgb24gbGl0dGxlLWVuZGlhbiBrZXJuZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYyMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIE5ldHdvcmsgSW50ZXJmYWNlIE9wdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgZXhwYW5kaW5nIG91ciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGBUVU5gIGFuZCBgVEFQYCB3aXRoaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaG9zZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsLCBhbmQgSSYjMzk7ZCBiZSBzdXJwcmlzZWQgaWYgdGhleSB3ZXJlbiYjMzk7dCBhbHJlYWR5IGNvbnNpZGVyZWQsIGJ1dCBhIHNhbml0eSBjaGVjayBuZXZlciBodXJ0cy4gSSYjMzk7bSBhbHNvIHRoaW5raW5nIHdlIHNob3VsZCBldmFsdWF0ZSBgTUFDVlRBUGAgYW5kIGBJUFZMQU5gIGFzIHBvdGVudGlhbGx5IHJlbGV2YW50IGFkZGl0aW9ucyB0byB0aGUgY29uZmlndXJhdGlvbiBzY29wZS4KClRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGB0YXBgIGFuZCBgdHVuYCBkcml2ZXJzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvdGFwLmNgIGFuZCBgZHJpdmVycy9uZXQvdHVuLmNgIHNwZWNpZmljYWxseS4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBjdXJyZW50IGZlYXR1cmUgc2V0IGFuZCB0aGUgcG90ZW50aWFsIGludGVncmF0aW9uIGNoYWxsZW5nZXMgYmVmb3JlIEkgZGl2ZSBhbnkgZGVlcGVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBkZXZpY2VzIGFyZSBjdXJyZW50bHkgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgaWYgYW55IGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIGNvdWxkIGJlIGxldmVyYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zOTE9Y29uZmlnIFRVTlxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNDE0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTU6Y29uZmlnIFRBUFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MTYtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgJiMzOTtzIENhbGxlcnMqKgoKT2theSwgaG9sZCBvbi4gSSYjMzk7bSBzZWVpbmcgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgcmVmZXJlbmNlZCBoZXJlLCBhbmQgdGhhdCByYW5nIGEgYmVsbC4gV2FzbiYjMzk7dCB0aGF0IGFsc28gdXNlZCBpbmRpcmVjdGx5IHRocm91Z2ggYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYD8gQW5kIGlzbiYjMzk7dCAqdGhhdCogZnVuY3Rpb24sIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIsIGludm9sdmVkIGluIHRoZSBUQ1Agc3RhY2ssIG1heWJlIHdpdGhpbiBgbmV0L2lwdjQvdGNwLmNgIG9yIGEgcmVsYXRlZCBmaWxlPyBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIGhvdyBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHRyYWNlIHRoaXMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weV9pdGVyX2RncmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcwLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXHRcdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTk0OT1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjUtXHRcdH0gZWxzZSB7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjY2Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY3LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE0NDk9c3RhdGljIGludCBfX2lwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzEtXHRcdH0gZWxzZSB7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTgzMjpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzMtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYxMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgY2FsbHMgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYnV0IHdhaXQsIEkgc2VlIGl0JiMzOTtzIGFjdHVhbGx5IGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHRoYXQmIzM5O3MgdGhlIGZvY3VzIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrLCBidXQgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgbm90IHRoZSBpbnRlcm5hbCB2YXJpYW50LgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5OyByaWdodCwgaXQmIzM5O3MgdGhlIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGZ1bmN0aW9uLgoKYGBgYwogaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiB7Ci0JaW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKJiM0MzsJaW50IGNvcHkgPSBtaW5fdChzaXplX3QsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKIAogCS8qIGNvcHkgdXAgdG8gc2tiIGhlYWRsZW4gKi8KIAlpZiAoc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgMCwgZnJvbSwgY29weSkpCmBgYAoKRXhjZWxsZW50LCBqdXN0IGFzIEkgdGhvdWdodCwgdGhlIHNpbmdsZSBmdW5jdGlvbiBjaGFuZ2VkIGlzIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLiBOb3csIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gdXNlZD8gSXQmIzM5O3MgdXNlZCBpbiBgZHJpdmVycy9uZXQvdGFwLmNgIGFuZCBgZHJpdmVycy9uZXQvdHVuLmNgLiBTbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgVFVOYCBhbmQgYFRBUGAgY29uZmlndXJhdGlvbnMuIFNpbmNlIGl0JiMzOTtzIGV4cG9ydGVkLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIHBvdGVudGlhbCB1c2FnZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgYmVpbmcgdHVubmVsLXZpc2lvbmVkLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBmdW5jdGlvbiBpdHNlbGYsIHBsdXMgYHR1bl9nZXRfdXNlcmAgYW5kIGB0YXBfZ2V0X3VzZXJgLCBzaW5jZSB0aGV5IGNhbGwgaXQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgdXNlZCBlbHNld2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTYyNy1cdGlmICh6ZXJvY29weSlcbmRyaXZlcnMvbmV0L3RhcC5jOjYyODpcdFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XG5kcml2ZXJzL25ldC90YXAuYy02MjktXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTcyNj1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xODE5LVx0XHRcdCAqIElmIHplcm9jb3B5IGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBsYXlvdXQgd2lsbCBiZVxuZHJpdmVycy9uZXQvdHVuLmM6MTgyMDpcdFx0XHQgKiBvdmVyd3JpdHRlbiBieSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKS5cbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjEtXHRcdFx0ICovXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTgzNS1cdFx0aWYgKHplcm9jb3B5KVxuZHJpdmVycy9uZXQvdHVuLmM6MTgzNjpcdFx0XHRlcnIgPSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc2tiLCBmcm9tKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MzctXHRcdGVsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cdFx0XHRcdCAgICAgICBOVUxMKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNTI9aW50IHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTMtXHRcdFx0XHQgICAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgaW50IGxlbik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNTQ6aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZybSk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTUtdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDEyLVx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlx0ICogZS5nLiwgdmlhIHplcm9jb3B5X3NnX2Zyb21faXRlcigpIG9yIHNrYl9vcnBoYW5fZnJhZ3NfcngoKVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVx0ICovXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ1LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDY6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDctXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3MS19XG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3MjpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzczLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtLyoqXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTogKlx0emVyb2NvcHlfc2dfZnJvbV9pdGVyIC0gQnVpbGQgYSB6ZXJvY29weSBkYXRhZ3JhbSBmcm9tIGFuIGlvdl9pdGVyXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni0gKlx0QHNrYjogYnVmZmVyIHRvIGNvcHlcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4My0gKi9cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODUte1xuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkxLVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTI6XHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTMtfVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTQ6RVhQT1JUX1NZTUJPTCh6ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTUtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkwNj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI3LVxubmV0L2NvcmUvc2tidWZmLmM6MTkyODpcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI5LVx0XHRcdFx0ICAgICAgYmluZGluZyk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cdGlmICh6Y29weSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcdFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXHQvKiBJZiAmIzM5O3ZzayYjMzk7ICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcdCAqIHdpbGwgbmV2ZXIgY2FsbCAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyBiZWxvdyB3aXRob3V0XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJiMzOTtza2Jfc2V0X293bmVyX3coKSYjMzk7LiBUaGUgb25seSBjYXNlXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyB1c2VzXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICYjMzk7c2tfd21lbV9hbGxvYyYjMzk7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzExCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkV4YW1pbmluZyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBhbmQgaXRzIGFwcGxpY2F0aW9uLiBJdCBsb29rcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgYWN0aXZlbHkgdXNlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC90YXAuY2AgYW5kIGBkcml2ZXJzL25ldC90dW4uY2AgZmlsZXMuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2YgdGhlIG5ldHdvcmtpbmcgY29udGV4dC4gVGhlIHByZXNlbmNlIG9mIGBUVU5gIGFuZCBgVEFQYCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBpbW1lZGlhdGVseSBzaWduYWxzIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLCB3aGljaCBtYWtlcyBzZW5zZS4KCk5vdywgSSBzZWVtIHRvIHJlbWVtYmVyIGBNQUNWVEFQYCBiZWluZyBzb21laG93IHJlbGF0ZWQgdG8gdGhpcyBgdGFwLmNgIG1vZHVsZSwgYnV0IEkgd2FudCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAuIElzIGBNQUNWVEFQYCBhY3R1YWxseSBwYXJ0IG9mIHRoZSBgdGFwLmNgIG1vZHVsZT8gTm8sIHRoYXQmIzM5O3MgaW5jb3JyZWN0LiBJIHJlY2FsbCBub3cgdGhhdCBgdGFwLmNgIGlzIGFjdHVhbGx5IGEgc2VwYXJhdGUgbG9hZGFibGUgbW9kdWxlLCBgdGFwLmtvYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBNQUNWVEFQYCB0aWVzIGluLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBnby10byBwbGFjZSBmb3IgdW5jb3ZlcmluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIG9mIHRoZXNlIG5ldHdvcmsgZHJpdmVycy4gSXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE1BQ1ZUQVBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDVlRBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0xNjU9Y29uZmlnIE1BQ1ZMQU5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTE3OC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MTc5OmNvbmZpZyBNQUNWVEFQXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4MC1cdHRyaXN0YXRlIFwmIzM0O01BQy1WTEFOIGJhc2VkIHRhcCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc4OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYHRhcC5jYCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGB0YXAuY2AgZHJpdmVyIGlzIGNvbXBpbGVkIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGRyaXZlcnMvbmV0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYnVpbGQgcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIHRoZSBjb21waWxhdGlvbiBmbGFncyBmb3IgbmV0d29yayBkZXZpY2UgZHJpdmVycyBhcmUgbGlrZWx5IGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGF0IE1ha2VmaWxlIHRvIHNlZSBleGFjdGx5IGhvdyBgdGFwLmNgIGlzIGhhbmRsZWQsIHdoZXRoZXIgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgaWYgaXTigJlzIGxpbmtlZCBhZ2FpbnN0IHNwZWNpZmljIGxpYnJhcmllcywgYW5kIHdoaWNoIHByZXByb2Nlc3NvciBkZWZpbmVzIGFyZSByZWxldmFudCB0byBpdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGRyaXZlciBmaXRzIGludG8gdGhlIGxhcmdlciBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBNYWtlZmlsZSBhbmQgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RhcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTUFDVkxBTikgJiM0Mzs9IG1hY3ZsYW4ub1xuZHJpdmVycy9uZXQvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX01BQ1ZUQVApICYjNDM7PSBtYWN2dGFwLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19NSUkpICYjNDM7PSBtaWkub1xuLS1cbmRyaXZlcnMvbmV0L01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19UVU4pICYjNDM7PSB0dW4ub1xuZHJpdmVycy9uZXQvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1RBUCkgJiM0Mzs9IHRhcC5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfVkVUSCkgJiM0Mzs9IHZldGgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE3MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUQVAvVFVOIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBTZWxlY3Rpb24qKgoKT2theSwgaGVyZSYjMzk7cyBob3cgSSYjMzk7bSBhcHByb2FjaGluZyB0aGlzOiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGVuIHdoaWNoIHNwZWNpZmljIHN5bWJvbHMgdG8gaW5jbHVkZSBpbiBteSBhbmFseXNpcyByZWxhdGVkIHRvIFRBUCBhbmQgVFVOIGRyaXZlcnMuIEkga25vdyBgQ09ORklHX1RBUGAgY29tcGlsZXMgYHRhcC5jYCwgYW5kIGBDT05GSUdfVFVOYCBjb21waWxlcyBgdHVuLmNgLiBUaGUgY29yZSBmdW5jdGlvbiBvZiBpbnRlcmVzdCwgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAsIGlzIGRlZmluZWQgaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQsIHNvIHRoYXQgcGFydCBpcyBzdHJhaWdodGZvcndhcmQuIFRoZXJlZm9yZSwgYENPTkZJR19UVU5gIGFuZCBgQ09ORklHX1RBUGAgYXJlIHRoZSBrZXlzIGZvciBlbmFibGluZyB0aGUgZHJpdmVycyB0aGVtc2VsdmVzLgoKTm93LCB0aGUgaW1wb3J0YW50IHN5bWJvbHM6IG15IGluaXRpYWwgdGhvdWdodCB3YXMgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAsIGB0dW5fZ2V0X3VzZXJgLCBhbmQgYHRhcF9nZXRfdXNlcmAuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGluc3RydWN0cyBtZSB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYHR1bl9nZXRfdXNlcmAgYW5kIGB0YXBfZ2V0X3VzZXJgIGFyZSBzdGF0aWMsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgYWx0ZXJuYXRpdmVzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZ3JlcCBvdXRwdXQuIEFoLCB5ZXMsIGl0IGNsZWFybHkgc2hvd3MgYHR1bl9nZXRfdXNlcmAgYW5kIGB0YXBfZ2V0X3VzZXJgIGFzIHN0YXRpYyBmdW5jdGlvbnMuIFNpbmNlIHRoZXkgYXJlIHN0YXRpYywgSSBzaG91bGQgZXhjbHVkZSB0aGVtIGZyb20gbXkgZmluYWwgc2VsZWN0aW9uIHVubGVzcyB0aGV5IGFyZSBwYXJ0aWN1bGFybHkgbGFyZ2UgYW5kIHVubGlrZWx5IHRvIGJlIGlubGluZWQuIFRoZSBwcm9tcHQgaXMgdmVyeSBjbGVhciBvbiBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgZ2l2ZW4gdGhhdCB0aGVzZSBhcmUgaGVscGVyIGZ1bmN0aW9ucywgdGhlIGluc3RydWN0aW9uIGlzIHJlbGV2YW50LgoKU28sIEkgbmVlZCB0byBodW50IGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cyBpbiBgdHVuLmNgIGFuZCBgdGFwLmNgLiBTY2FubmluZyB0aGUgY29kZSwgSSBzZWUgYHR1bl9jaHJfd3JpdGVfaXRlcmAgYW5kIGB0YXBfd3JpdGVfaXRlcmAgdGhhdCBsb29rcyBwcm9taXNpbmcuIFRoZXkgYXJlIGxpa2VseSB0aGUgd3JpdGUgZW50cnkgcG9pbnRzLCBzbyB0aGV5IHdvdWxkIGJlIHRoZSBjYW5kaWRhdGVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZW0gY2FyZWZ1bGx5LCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5JiMzOTtyZSBzdWl0YWJsZSBhbmQgdGhlIGJlc3QgY2hvaWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fY2hyX3dyaXRlX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0xNzI2PXN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIwMTctXG5kcml2ZXJzL25ldC90dW4uYzoyMDE4OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmRyaXZlcnMvbmV0L3R1bi5jLTIwMTkte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM1Mzc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzUzOS1cdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXG5kcml2ZXJzL25ldC90dW4uYzozNTQwOlx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXG5kcml2ZXJzL25ldC90dW4uYy0zNTQxLVx0LnBvbGxcdD0gdHVuX2Nocl9wb2xsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gYHR1bl9jaHJfd3JpdGVfaXRlcmAgaXMgYWxzbyBzdGF0aWMsIG1ha2luZyBpdCB1bmxpa2VseSB0byBiZSBpbmxpbmVkIHNpbmNlIGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuIHdpdGhpbiB0aGUgZmlsZSBvcGVyYXRpb24uIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBXaGlsZSB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBNYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBqdXN0IHV0aWxpemUgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaGVyZS4KCkJ1dCBob2xkIG9uLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZy4gSXMgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgcmVhY2hhYmxlIGVsc2V3aGVyZT8gSXQgc2VlbXMgaXQgaXMgb25seSB1c2VkIGJ5IGB0dW5gIGFuZCBgdGFwYCBzcGVjaWZpY2FsbHkuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIFRoZXJlZm9yZSwgYFRVTmAgYW5kIGBUQVBgIGFyZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyB0byBmb2N1cyBvbi4KCkxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayB0byBiZSBzdXJlIHRoZXJlIGFyZSBub3QgYW55IG90aGVyIGNvbmZpZ3MgdG8gYmUgY29uc2lkZXJlZC4gYENPTkZJR19ORVRgIGlzIGFuIG9idmlvdXMgY2hvaWNlLiBXaGlsZSBgQ09ORklHX0lORVRgIG1pZ2h0IG5vdCBiZSBzdHJpY3RseSByZXF1aXJlZCBmb3IgYHR1bmAvYHRhcGAsIGl0JiMzOTtzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBhbG9uZ3NpZGUgdGhlbS4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgVFVOYCBhbmQgYFRBUGAgd2lsbCBzdWZmaWNlLgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGY6CgpgYGBjCi0JaW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKJiM0MzsJaW50IGNvcHkgPSBtaW5fdChzaXplX3QsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKYGBgCgpBaGEhIFRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgYnVnLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIHNpdHVhdGlvbiB3aGVyZSBgaW92X2l0ZXJfY291bnQoZnJvbSlgIGNvdWxkIGV4Y2VlZCBgSU5UX01BWGAsIGxlYWRpbmcgdG8gYGNvcHlgIGVpdGhlciBiZWluZyBuZWdhdGl2ZSBvciB0cnVuY2F0ZWQsIGEgY2xhc3NpYyBpbnRlZ2VyIG92ZXJmbG93IHNpdHVhdGlvbi4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgZGF0YWdyYW0gaGFuZGxpbmcsIHdoaWNoIG1ha2VzIHRoaXMgd29ydGggZnV6emluZyB0byBjYXRjaCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gRm9jdXNpbmcgb24gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuCgpXaXRoIHRoYXQsIGBUVU5gIGFuZCBgVEFQYCB3aWxsIGVuYWJsZSB0aGlzIHRvIGJlIGZ1enotdGVzdGVkLiBCZWNhdXNlIHRoZSBwYXRjaCByZXNvbHZlcyBhIHBvc3NpYmxlIGludGVnZXIgdHJ1bmNhdGlvbi9zaWduZWRuZXNzIGlzc3VlIHdpdGhpbiBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgaXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVU4vVEFQIGRldmljZXMgYW5kIHdoZW4gemVyb2NvcHkgaXMgZW5hYmxlZC4KCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYHRhcF93cml0ZV9pdGVyYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXBfd3JpdGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RhcC5jPTU3Mj1zdGF0aWMgc3NpemVfdCB0YXBfZ2V0X3VzZXIoc3RydWN0IHRhcF9xdWV1ZSAqcSwgdm9pZCAqbXNnX2NvbnRyb2wsXG4tLVxuZHJpdmVycy9uZXQvdGFwLmMtNjkwLVxuZHJpdmVycy9uZXQvdGFwLmM6NjkxOnN0YXRpYyBzc2l6ZV90IHRhcF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZHJpdmVycy9uZXQvdGFwLmMtNjkyLXtcbi0tXG5kcml2ZXJzL25ldC90YXAuYz0xMDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRhcF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTEwMzgtXHQucmVhZF9pdGVyXHQ9IHRhcF9yZWFkX2l0ZXIsXG5kcml2ZXJzL25ldC90YXAuYzoxMDM5Olx0LndyaXRlX2l0ZXJcdD0gdGFwX3dyaXRlX2l0ZXIsXG5kcml2ZXJzL25ldC90YXAuYy0xMDQwLVx0LnBvbGxcdFx0PSB0YXBfcG9sbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNjEKCQkJCQkJCW91dHB1dDogOTcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqU3RyZWFtbGluaW5nIHRoZSBEYXRhIFdyaXRlIFBhdGgqKgoKQWxyaWdodCwgc28gYHRhcF93cml0ZV9pdGVyYCBpcyBpbmRlZWQgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhlIGFwcHJvYWNoLiBNeSBpbnN0aW5jdCBpcyBjb3JyZWN0LCBJJiMzOTtsbCBzdGljayB3aXRoIHByb3ZpZGluZyB0aGF0IGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGZ1bmN0aW9uLiBUaGF0IHNob3VsZCBoYW5kbGUgdGhlIGRhdGEgdHJhbnNmZXIgZGlyZWN0bHkuCgpOb3csIHdpdGggdGhhdCBjb25maXJtZWQsIEkmIzM5O2xsIG1vdmUgb24gdG8gY2FsbGluZyBgc2V0LXJlc3VsdHNgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHByb2dyZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1RBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24vc2lnbmVkbmVzcyBpc3N1ZSBpbiBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBjb3B5IGxlbmd0aC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRVTi9UQVAgZGV2aWNlcyB3aGVuIHplcm9jb3B5IGlzIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9zZ19mcm9tX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uL3NpZ25lZG5lc3MgaXNzdWUgaW4gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgd2hlbiBjYWxjdWxhdGluZyB0aGUgY29weSBsZW5ndGguIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVU4vVEFQIGRldmljZXMgd2hlbiB6ZXJvY29weSBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDg6NTkuNDQwNjUzMjA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4ODAzMDEwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJUQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6ZXJvY29weV9zZ19mcm9tX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24vc2lnbmVkbmVzcyBpc3N1ZSBpbiBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBjb3B5IGxlbmd0aC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRVTi9UQVAgZGV2aWNlcyB3aGVuIHplcm9jb3B5IGlzIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ4OjU5LjQ0MDY2Mzg4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1OTAyMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDJlOWM2ODFmNWQxNjM2MDQ0NWY1ZTJjYjM1MTJiYjM4MWQ0MWQ2ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAwNDo0ODo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uY1xcbmluZGV4IGMyODVjNjQ2NTkyM2UuLmZkOGUxN2QyNWEzZGIgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uY1xcbisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmNcXG5AQCAtNzgzLDcgKzc4Myw3IEBAIEVYUE9SVF9TWU1CT0woX196ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xcbiAgKi9cXG4gaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuIHtcXG4tXFx0aW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTtcXG4rXFx0aW50IGNvcHkgPSBtaW5fdChzaXplX3QsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTtcXG4gXFxuIFxcdC8qIGNvcHkgdXAgdG8gc2tiIGhlYWRsZW4gKi9cXG4gXFx0aWYgKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcihza2IsIDAsIGZyb20sIGNvcHkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0ODo1OS44ODgyMDQxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU2NDMyNzQwOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVEFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemVyb2NvcHlfc2dfZnJvbV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uL3NpZ25lZG5lc3MgaXNzdWUgaW4gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgd2hlbiBjYWxjdWxhdGluZyB0aGUgY29weSBsZW5ndGguIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVU4vVEFQIGRldmljZXMgd2hlbiB6ZXJvY29weSBpcyBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MmU5YzY4MWY1ZDE2MzYwNDQ1ZjVlMmNiMzUxMmJiMzgxZDQxZDZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDQ6NDg6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uY1xuaW5kZXggYzI4NWM2NDY1OTIzZS4uZmQ4ZTE3ZDI1YTNkYiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcbisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbkBAIC03ODMsNyArNzgzLDcgQEAgRVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XG4gICovXG4gaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuLVx0aW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTtcbitcdGludCBjb3B5ID0gbWluX3Qoc2l6ZV90LCBza2JfaGVhZGxlbihza2IpLCBpb3ZfaXRlcl9jb3VudChmcm9tKSk7XG4gXG4gXHQvKiBjb3B5IHVwIHRvIHNrYiBoZWFkbGVuICovXG4gXHRpZiAoc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgMCwgZnJvbSwgY29weSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0ODo1OS44ODgyMDYyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDQ3OTQ0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBDb3JlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyB0aGUgY2hhbmdlIGlzIHByZXR0eSBjb250YWluZWQuIEl0J3MganVzdCBtb2RpZnlpbmcgdGhhdCBsaW5lIGluIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBjaGFuZ2luZyBgbWluX3QoaW50LCAuLi4pYCB0byBgbWluX3Qoc2l6ZV90LCAuLi4pYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBvciBzaWduZWRuZXNzIGlzc3VlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvcHkgc2l6ZS4gU21hcnQuIFRoYXQncyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy5cblxuVGhlIGZhY3QgdGhhdCBpdCBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgbGlrZSB0aGlzIG1ha2VzIG15IGludGVybmFsIGFsYXJtIGJlbGxzIGdvIG9mZi4gV2UgKmFic29sdXRlbHkqIG5lZWQgdG8gZnV6eiB0aGlzIGFyZWEuIEFueXRpbWUgd2UgdG91Y2ggdGhlIGNhbGN1bGF0aW9uIG9mIGRhdGEgc2l6ZXMgb3IgbGVuZ3Rocywgd2UncmUgcG90ZW50aWFsbHkgb3BlbmluZyBhIGNhbiBvZiB3b3Jtcy4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeSwgYW5kIHNpbmNlIHRoaXMgaXMgdG91Y2hpbmcgYSBmdW5jdGlvbiB3aXRoIFwiemVyb2NvcHlcIiBpbiB0aGUgbmFtZSwgaXQgaXMgZXZlbiBtb3JlIGltcG9ydGFudCB0byBtYWtlIHN1cmUgaXQgaXMgY29ycmVjdC5cblxuTm93LCBsZXQgbWUganVzdCBsb2NhdGUgdGhhdCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgIGFuZCBkaWcgYSBsaXR0bGUgZGVlcGVyLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OTowNS4wOTMwMDQyMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTkxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2RhdGFncmFtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDUtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDY6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ3LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3MS19XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzI6RVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzMtXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtLyoqXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzU6ICpcXHR6ZXJvY29weV9zZ19mcm9tX2l0ZXIgLSBCdWlsZCBhIHplcm9jb3B5IGRhdGFncmFtIGZyb20gYW4gaW92X2l0ZXJcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni0gKlxcdEBza2I6IGJ1ZmZlciB0byBjb3B5XFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4My0gKi9cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc4NDppbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4NS17XFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5MS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5MjpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkzLX1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5NDpFWFBPUlRfU1lNQk9MKHplcm9jb3B5X3NnX2Zyb21faXRlcik7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjA1LjEzODkwNzEwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDI4NTk1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipFeGFtaW5pbmcgdGhlIFVzYWdlIG9mIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgKipcblxuUmlnaHQsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzIGFuICpleHBvcnRlZCBzeW1ib2wqLiBUaGF0IG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgb3IgYXQgbGVhc3QgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUgaXQncyBkZWZpbmVkIGluLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gU28sIG15IGZpcnN0IG1vdmUgaXMgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSXQncyBjcnVjaWFsIHRvIHRyYWNlIGJhY2sgaXRzIGNhbGwgc2l0ZXMgdG8gZ3Jhc3AgaXRzIGludGVuZGVkIHB1cnBvc2UgYW5kIGludGVncmF0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIHN0YXJ0IHNlYXJjaGluZyBmb3IgaXRzIHJlZmVyZW5jZXMuIEdvdHRhIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OTowNy45NDE3NzA4ODlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5NDQyNTgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6ZXJvY29weV9zZ19mcm9tX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTU3Mj1zdGF0aWMgc3NpemVfdCB0YXBfZ2V0X3VzZXIoc3RydWN0IHRhcF9xdWV1ZSAqcSwgdm9pZCAqbXNnX2NvbnRyb2wsXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy02MjctXFx0aWYgKHplcm9jb3B5KVxcbmRyaXZlcnMvbmV0L3RhcC5jOjYyODpcXHRcXHRlcnIgPSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc2tiLCBmcm9tKTtcXG5kcml2ZXJzL25ldC90YXAuYy02MjktXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTcyNj1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MTktXFx0XFx0XFx0ICogSWYgemVyb2NvcHkgaXMgZW5hYmxlZCwgdGhlbiB0aGlzIGxheW91dCB3aWxsIGJlXFxuZHJpdmVycy9uZXQvdHVuLmM6MTgyMDpcXHRcXHRcXHQgKiBvdmVyd3JpdHRlbiBieSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKS5cXG5kcml2ZXJzL25ldC90dW4uYy0xODIxLVxcdFxcdFxcdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTgzNS1cXHRcXHRpZiAoemVyb2NvcHkpXFxuZHJpdmVycy9uZXQvdHVuLmM6MTgzNjpcXHRcXHRcXHRlcnIgPSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc2tiLCBmcm9tKTtcXG5kcml2ZXJzL25ldC90dW4uYy0xODM3LVxcdFxcdGVsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2MT1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZztcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzYzOmludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjQtXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc3MT1zdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzQ6XFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2tiLVxcdTAwM2Vzaywgc2tiLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cXHRcXHRcXHRcXHQgICAgICAgTlVMTCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNTI9aW50IHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjUzLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBpbnQgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNTQ6aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZybSk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjU1LXZvaWQgc2tiX2ZyZWVfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XFxuLS1cXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTItXFx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oOjQxMzpcXHQgKiBlLmcuLCB2aWEgemVyb2NvcHlfc2dfZnJvbV9pdGVyKCkgb3Igc2tiX29ycGhhbl9mcmFnc19yeCgpXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVxcdCAqL1xcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDUtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDY6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ3LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3MS19XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzI6RVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzMtXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtLyoqXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzU6ICpcXHR6ZXJvY29weV9zZ19mcm9tX2l0ZXIgLSBCdWlsZCBhIHplcm9jb3B5IGRhdGFncmFtIGZyb20gYW4gaW92X2l0ZXJcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni0gKlxcdEBza2I6IGJ1ZmZlciB0byBjb3B5XFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4My0gKi9cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc4NDppbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4NS17XFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5MS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5MjpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkzLX1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5NDpFWFBPUlRfU1lNQk9MKHplcm9jb3B5X3NnX2Zyb21faXRlcik7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTUtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xOTA2PWludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTkyNy1cXG5uZXQvY29yZS9za2J1ZmYuYzoxOTI4OlxcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIsIGxlbixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI5LVxcdFxcdFxcdFxcdCAgICAgIGJpbmRpbmcpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg3LVxcdGlmICh6Y29weSlcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6ODg6XFx0XFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04OS1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIsIGxlbiwgTlVMTCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MjEyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmlydGlvX3RyYW5zcG9ydF9hbGxvY19za2Ioc3RydWN0IHZpcnRpb192c29ja19wa3RfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXFx0LyogSWYgJ3ZzaycgIT0gTlVMTCB0aGVuIHBheWxvYWQgaXMgYWx3YXlzIHByZXNlbnQsIHNvIHdlXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcXHQgKiB3aWxsIG5ldmVyIGNhbGwgJ19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCknIGJlbG93IHdpdGhvdXRcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVxcdCAqIHNldHRpbmcgc2tiIG93bmVyIGluICdza2Jfc2V0X293bmVyX3coKScuIFRoZSBvbmx5IGNhc2VcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDYtXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0NzpcXHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAnX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoKScgdXNlc1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDgtXFx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICdza193bWVtX2FsbG9jJy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6MDkuNzM2MjAzMzQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3Mjk1NDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogemVyb2NvcHlfc2dfZnJvbV9pdGVyKipcblxuT2theSwgc28gdGhlIGZ1bmN0aW9uIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzIGx1cmtpbmcgaW4gYGRyaXZlcnMvbmV0L3RhcC5jYCBhbmQgYGRyaXZlcnMvbmV0L3R1bi5jYCDigJMgaW50ZXJlc3RpbmcuIEFuZCBpdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gYWZmZWN0cyBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuIERlZmluaXRlbHkgZnV6ei13b3J0aHkuIEdpdmVuIHRoYXQgaXQncyBiZWVuIHRvdWNoZWQsIHRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy5cblxuVGhlIGtleSBoZXJlIGlzIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGl0c2VsZi4gSXMgaXQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlPyBBaCwgeWVzLCBpdCBhcHBlYXJzIHRvIGJlIGFjY2Vzc2libGUgdmlhIFRVTi9UQVAgZGV2aWNlcy4gVGhhdCdzIGEgcHJvbWlzaW5nIGF0dGFjayBzdXJmYWNlLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWcgb3B0aW9ucyB0aGF0IHdlIG5lZWQgdG8gYmUgYXdhcmUgb2YuIGBDT05GSUdfVFVOYCBhbmQgYENPTkZJR19NQUNWVEFQYCBvciBgQ09ORklHX1RBUGAgYXJlIHVzdWFsbHkgZW5hYmxlZC4gVGltZSB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZm9yIHRoZSBkZWZpbml0aXZlIGFuc3dlciBvbiB0aG9zZSBgVFVOYCBhbmQgYFRBUGAgb3B0aW9ucywganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDMzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjEzLjkwOTE2MTkwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ2MDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zODY9Y29uZmlnIFJJT05FVF9SWF9TSVpFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MTpjb25maWcgVFVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDE1PWNvbmZpZyBUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDIwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDIxOmNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGNyb3NzLWVuZGlhbiB2bmV0IGhlYWRlcnMgb24gbGl0dGxlLWVuZGlhbiBrZXJuZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OToxMy45NTM2Mjc1NzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY5MDA2NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIE5ldHdvcmsgSW50ZXJmYWNlIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGV4cGFuZGluZyBvdXIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBgVFVOYCBhbmQgYFRBUGAgd2l0aGluIGBFbmFibGVDb25maWdzYC4gVGhvc2UgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCwgYW5kIEknZCBiZSBzdXJwcmlzZWQgaWYgdGhleSB3ZXJlbid0IGFscmVhZHkgY29uc2lkZXJlZCwgYnV0IGEgc2FuaXR5IGNoZWNrIG5ldmVyIGh1cnRzLiBJJ20gYWxzbyB0aGlua2luZyB3ZSBzaG91bGQgZXZhbHVhdGUgYE1BQ1ZUQVBgIGFuZCBgSVBWTEFOYCBhcyBwb3RlbnRpYWxseSByZWxldmFudCBhZGRpdGlvbnMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc2NvcGUuXG5cblRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLCBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgYHRhcGAgYW5kIGB0dW5gIGRyaXZlcnMuIEknbGwgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3RhcC5jYCBhbmQgYGRyaXZlcnMvbmV0L3R1bi5jYCBzcGVjaWZpY2FsbHkuIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgY3VycmVudCBmZWF0dXJlIHNldCBhbmQgdGhlIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzIGJlZm9yZSBJIGRpdmUgYW55IGRlZXBlci4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZGV2aWNlcyBhcmUgY3VycmVudGx5IGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwgYW5kIGlmIGFueSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZSBjb3VsZCBiZSBsZXZlcmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OToxNy42MjI2MzY5MjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzA1NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5MT1jb25maWcgVFVOXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQxNC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxNTpjb25maWcgVEFQXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MTYtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6MTcuNjY2OTQ3NjU0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTYwMDY2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCdzIENhbGxlcnMqKlxuXG5Pa2F5LCBob2xkIG9uLiBJJ20gc2VlaW5nIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHJlZmVyZW5jZWQgaGVyZSwgYW5kIHRoYXQgcmFuZyBhIGJlbGwuIFdhc24ndCB0aGF0IGFsc28gdXNlZCBpbmRpcmVjdGx5IHRocm91Z2ggYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYD8gQW5kIGlzbid0ICp0aGF0KiBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHZlcnkgc2ltaWxhciwgaW52b2x2ZWQgaW4gdGhlIFRDUCBzdGFjaywgbWF5YmUgd2l0aGluIGBuZXQvaXB2NC90Y3AuY2Agb3IgYSByZWxhdGVkIGZpbGU/IEkgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uLiBMZXQncyBkaWcgaW50byBob3cgYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHRyYWNlIHRoaXMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OToyMC42NjI5NTcxMTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM1ODk1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzAtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6MjIuNDY2NTUyMjg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODI4NDczODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYCBjYWxscyBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBidXQgd2FpdCwgSSBzZWUgaXQncyBhY3R1YWxseSBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCB0aGF0J3MgdGhlIGZvY3VzIGhlcmUuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2ssIGJ1dCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBub3QgdGhlIGludGVybmFsIHZhcmlhbnQuXG5cbkxldCBtZSByZWZyZXNoIG15IG1lbW9yeTsgcmlnaHQsIGl0J3MgdGhlIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGZ1bmN0aW9uLlxuXG5gYGBjXG4gaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuLVx0aW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTtcbitcdGludCBjb3B5ID0gbWluX3Qoc2l6ZV90LCBza2JfaGVhZGxlbihza2IpLCBpb3ZfaXRlcl9jb3VudChmcm9tKSk7XG4gXG4gXHQvKiBjb3B5IHVwIHRvIHNrYiBoZWFkbGVuICovXG4gXHRpZiAoc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgMCwgZnJvbSwgY29weSkpXG5gYGBcblxuRXhjZWxsZW50LCBqdXN0IGFzIEkgdGhvdWdodCwgdGhlIHNpbmdsZSBmdW5jdGlvbiBjaGFuZ2VkIGlzIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLiBOb3csIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gdXNlZD8gSXQncyB1c2VkIGluIGBkcml2ZXJzL25ldC90YXAuY2AgYW5kIGBkcml2ZXJzL25ldC90dW4uY2AuIFNvIHdlJ3JlIGxvb2tpbmcgYXQgYFRVTmAgYW5kIGBUQVBgIGNvbmZpZ3VyYXRpb25zLiBTaW5jZSBpdCdzIGV4cG9ydGVkLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcG90ZW50aWFsIHVzYWdlcy4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgYmVpbmcgdHVubmVsLXZpc2lvbmVkLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBmdW5jdGlvbiBpdHNlbGYsIHBsdXMgYHR1bl9nZXRfdXNlcmAgYW5kIGB0YXBfZ2V0X3VzZXJgLCBzaW5jZSB0aGV5IGNhbGwgaXQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgdXNlZCBlbHNld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6MjguNDQ5NDAyNDE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk5MDA1ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGFwLmM9NTcyPXN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTYyNy1cXHRpZiAoemVyb2NvcHkpXFxuZHJpdmVycy9uZXQvdGFwLmM6NjI4OlxcdFxcdGVyciA9IHplcm9jb3B5X3NnX2Zyb21faXRlcihza2IsIGZyb20pO1xcbmRyaXZlcnMvbmV0L3RhcC5jLTYyOS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xNzI2PXN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTgxOS1cXHRcXHRcXHQgKiBJZiB6ZXJvY29weSBpcyBlbmFibGVkLCB0aGVuIHRoaXMgbGF5b3V0IHdpbGwgYmVcXG5kcml2ZXJzL25ldC90dW4uYzoxODIwOlxcdFxcdFxcdCAqIG92ZXJ3cml0dGVuIGJ5IHplcm9jb3B5X3NnX2Zyb21faXRlcigpLlxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjEtXFx0XFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xODM1LVxcdFxcdGlmICh6ZXJvY29weSlcXG5kcml2ZXJzL25ldC90dW4uYzoxODM2OlxcdFxcdFxcdGVyciA9IHplcm9jb3B5X3NnX2Zyb21faXRlcihza2IsIGZyb20pO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MzctXFx0XFx0ZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYxPXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2Mi1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2NC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzMte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBza2ItXFx1MDAzZXNrLCBza2IsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc1LVxcdFxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDI1Mj1pbnQgc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyX2Z1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCxcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGludCBsZW4pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI1NDppbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJtKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTUtdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg9MTM4PWVudW0gc2tiX2Ryb3BfcmVhc29uIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxMi1cXHQgKiBAU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVDogZmFpbGVkIHRvIGNvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UsXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlxcdCAqIGUuZy4sIHZpYSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKSBvciBza2Jfb3JwaGFuX2ZyYWdzX3J4KClcXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTQtXFx0ICovXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc0NS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc0NjppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDctXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzcxLX1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3MjpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3My1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3NC0vKipcXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTogKlxcdHplcm9jb3B5X3NnX2Zyb21faXRlciAtIEJ1aWxkIGEgemVyb2NvcHkgZGF0YWdyYW0gZnJvbSBhbiBpb3ZfaXRlclxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc2LSAqXFx0QHNrYjogYnVmZmVyIHRvIGNvcHlcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzgzLSAqL1xcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzg1LXtcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkxLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzkyOlxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihOVUxMLCBOVUxMLCBza2IsIGZyb20sIH4wVSwgTlVMTCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTMtfVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk0OkVYUE9SVF9TWU1CT0woemVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5NS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MDY9aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI3LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5Mjg6XFx0ZXJyID0gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBzaywgc2tiLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MjktXFx0XFx0XFx0XFx0ICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9ODA9c3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X2ZpbGxfc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODctXFx0aWYgKHpjb3B5KVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcXHRcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBOVUxMLCBza2IsXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLCBOVUxMKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTIzOS1cXHQvKiBJZiAndnNrJyAhPSBOVUxMIHRoZW4gcGF5bG9hZCBpcyBhbHdheXMgcHJlc2VudCwgc28gd2VcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQwOlxcdCAqIHdpbGwgbmV2ZXIgY2FsbCAnX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoKScgYmVsb3cgd2l0aG91dFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDEtXFx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJ3NrYl9zZXRfb3duZXJfdygpJy4gVGhlIG9ubHkgY2FzZVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQ3OlxcdC8qIFNldCBvd25lciBoZXJlLCBiZWNhdXNlICdfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJyB1c2VzXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0OC1cXHQgKiBvd25lciBvZiBza2Igd2l0aG91dCBjaGVjayB0byB1cGRhdGUgJ3NrX3dtZW1fYWxsb2MnLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OTozMC4wNDg0MTI5NDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0MTA0MTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkV4YW1pbmluZyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgYW5kIGl0cyBhcHBsaWNhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdGl2ZWx5IHVzZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdGFwLmNgIGFuZCBgZHJpdmVycy9uZXQvdHVuLmNgIGZpbGVzLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2YgdGhlIG5ldHdvcmtpbmcgY29udGV4dC4gVGhlIHByZXNlbmNlIG9mIGBUVU5gIGFuZCBgVEFQYCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBpbW1lZGlhdGVseSBzaWduYWxzIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLCB3aGljaCBtYWtlcyBzZW5zZS5cblxuTm93LCBJIHNlZW0gdG8gcmVtZW1iZXIgYE1BQ1ZUQVBgIGJlaW5nIHNvbWVob3cgcmVsYXRlZCB0byB0aGlzIGB0YXAuY2AgbW9kdWxlLCBidXQgSSB3YW50IHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcC4gSXMgYE1BQ1ZUQVBgIGFjdHVhbGx5IHBhcnQgb2YgdGhlIGB0YXAuY2AgbW9kdWxlPyBObywgdGhhdCdzIGluY29ycmVjdC4gSSByZWNhbGwgbm93IHRoYXQgYHRhcC5jYCBpcyBhY3R1YWxseSBhIHNlcGFyYXRlIGxvYWRhYmxlIG1vZHVsZSwgYHRhcC5rb2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgTUFDVlRBUGAgdGllcyBpbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBnby10byBwbGFjZSBmb3IgdW5jb3ZlcmluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIG9mIHRoZXNlIG5ldHdvcmsgZHJpdmVycy4gSXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE1BQ1ZUQVBgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzExLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6MzQuNDg5NDU3OTQ3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUzNTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDVlRBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MTY1PWNvbmZpZyBNQUNWTEFOXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjE3OTpjb25maWcgTUFDVlRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgwLVxcdHRyaXN0YXRlIFxcXCJNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OTozNC41MzUwMDAwMTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMzYzNTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYHRhcC5jYCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHRhcC5jYCBkcml2ZXIgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgZHJpdmVycy9uZXQvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMgYXJlIGxpa2VseSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGF0IE1ha2VmaWxlIHRvIHNlZSBleGFjdGx5IGhvdyBgdGFwLmNgIGlzIGhhbmRsZWQsIHdoZXRoZXIgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpZiBpdOKAmXMgbGlua2VkIGFnYWluc3Qgc3BlY2lmaWMgbGlicmFyaWVzLCBhbmQgd2hpY2ggcHJlcHJvY2Vzc29yIGRlZmluZXMgYXJlIHJlbGV2YW50IHRvIGl0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZHJpdmVyIGZpdHMgaW50byB0aGUgbGFyZ2VyIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IE1ha2VmaWxlIGFuZCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc4OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjM4LjE1ODYzODcyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIxNDE5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19NQUNWTEFOKSArPSBtYWN2bGFuLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTUFDVlRBUCkgKz0gbWFjdnRhcC5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX01JSSkgKz0gbWlpLm9cXG4tLVxcbmRyaXZlcnMvbmV0L01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19UVU4pICs9IHR1bi5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1RBUCkgKz0gdGFwLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfVkVUSCkgKz0gdmV0aC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjM4LjIzMDc5MTA4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODIxODczNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRBUC9UVU4gQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFNlbGVjdGlvbioqXG5cbk9rYXksIGhlcmUncyBob3cgSSdtIGFwcHJvYWNoaW5nIHRoaXM6IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZW4gd2hpY2ggc3BlY2lmaWMgc3ltYm9scyB0byBpbmNsdWRlIGluIG15IGFuYWx5c2lzIHJlbGF0ZWQgdG8gVEFQIGFuZCBUVU4gZHJpdmVycy4gSSBrbm93IGBDT05GSUdfVEFQYCBjb21waWxlcyBgdGFwLmNgLCBhbmQgYENPTkZJR19UVU5gIGNvbXBpbGVzIGB0dW4uY2AuIFRoZSBjb3JlIGZ1bmN0aW9uIG9mIGludGVyZXN0LCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgaXMgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGF0YWdyYW0uY2AsIHdoaWNoIGlzIGFsd2F5cyBjb21waWxlZCwgc28gdGhhdCBwYXJ0IGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlcmVmb3JlLCBgQ09ORklHX1RVTmAgYW5kIGBDT05GSUdfVEFQYCBhcmUgdGhlIGtleXMgZm9yIGVuYWJsaW5nIHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBzeW1ib2xzOiBteSBpbml0aWFsIHRob3VnaHQgd2FzIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgdHVuX2dldF91c2VyYCwgYW5kIGB0YXBfZ2V0X3VzZXJgLiBIb3dldmVyLCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBpbnN0cnVjdHMgbWUgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGB0dW5fZ2V0X3VzZXJgIGFuZCBgdGFwX2dldF91c2VyYCBhcmUgc3RhdGljLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGFsdGVybmF0aXZlcy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBncmVwIG91dHB1dC4gQWgsIHllcywgaXQgY2xlYXJseSBzaG93cyBgdHVuX2dldF91c2VyYCBhbmQgYHRhcF9nZXRfdXNlcmAgYXMgc3RhdGljIGZ1bmN0aW9ucy4gU2luY2UgdGhleSBhcmUgc3RhdGljLCBJIHNob3VsZCBleGNsdWRlIHRoZW0gZnJvbSBteSBmaW5hbCBzZWxlY3Rpb24gdW5sZXNzIHRoZXkgYXJlIHBhcnRpY3VsYXJseSBsYXJnZSBhbmQgdW5saWtlbHkgdG8gYmUgaW5saW5lZC4gVGhlIHByb21wdCBpcyB2ZXJ5IGNsZWFyIG9uIHByZWZlcnJpbmcgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFuZCBnaXZlbiB0aGF0IHRoZXNlIGFyZSBoZWxwZXIgZnVuY3Rpb25zLCB0aGUgaW5zdHJ1Y3Rpb24gaXMgcmVsZXZhbnQuXG5cblNvLCBJIG5lZWQgdG8gaHVudCBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgaW4gYHR1bi5jYCBhbmQgYHRhcC5jYC4gU2Nhbm5pbmcgdGhlIGNvZGUsIEkgc2VlIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGFuZCBgdGFwX3dyaXRlX2l0ZXJgIHRoYXQgbG9va3MgcHJvbWlzaW5nLiBUaGV5IGFyZSBsaWtlbHkgdGhlIHdyaXRlIGVudHJ5IHBvaW50cywgc28gdGhleSB3b3VsZCBiZSB0aGUgY2FuZGlkYXRlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZW0gY2FyZWZ1bGx5LCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5J3JlIHN1aXRhYmxlIGFuZCB0aGUgYmVzdCBjaG9pY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjQ1LjA1MjY2Njc0NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2NTY0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2Nocl93cml0ZV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTE3MjY9c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMDE3LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIwMTg6c3RhdGljIHNzaXplX3QgdHVuX2Nocl93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIwMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzUzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0dW5fZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM1MzktXFx0LnJlYWRfaXRlciAgPSB0dW5fY2hyX3JlYWRfaXRlcixcXG5kcml2ZXJzL25ldC90dW4uYzozNTQwOlxcdC53cml0ZV9pdGVyID0gdHVuX2Nocl93cml0ZV9pdGVyLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM1NDEtXFx0LnBvbGxcXHQ9IHR1bl9jaHJfcG9sbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6NDUuMTE1MzI4NTk1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMTEzODA5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gYHR1bl9jaHJfd3JpdGVfaXRlcmAgaXMgYWxzbyBzdGF0aWMsIG1ha2luZyBpdCB1bmxpa2VseSB0byBiZSBpbmxpbmVkIHNpbmNlIGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuIHdpdGhpbiB0aGUgZmlsZSBvcGVyYXRpb24uIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBXaGlsZSB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBNYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBqdXN0IHV0aWxpemUgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaGVyZS5cblxuQnV0IGhvbGQgb24sIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nLiBJcyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCByZWFjaGFibGUgZWxzZXdoZXJlPyBJdCBzZWVtcyBpdCBpcyBvbmx5IHVzZWQgYnkgYHR1bmAgYW5kIGB0YXBgIHNwZWNpZmljYWxseS4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlcmVmb3JlLCBgVFVOYCBhbmQgYFRBUGAgYXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIHRvIGZvY3VzIG9uLlxuXG5MZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm90IGFueSBvdGhlciBjb25maWdzIHRvIGJlIGNvbnNpZGVyZWQuIGBDT05GSUdfTkVUYCBpcyBhbiBvYnZpb3VzIGNob2ljZS4gV2hpbGUgYENPTkZJR19JTkVUYCBtaWdodCBub3QgYmUgc3RyaWN0bHkgcmVxdWlyZWQgZm9yIGB0dW5gL2B0YXBgLCBpdCdzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBhbG9uZ3NpZGUgdGhlbS4gSSdtIGNvbmZpZGVudCB0aGF0IGBUVU5gIGFuZCBgVEFQYCB3aWxsIHN1ZmZpY2UuXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGY6XG5cbmBgYGNcbi1cdGludCBjb3B5ID0gbWluX3QoaW50LCBza2JfaGVhZGxlbihza2IpLCBpb3ZfaXRlcl9jb3VudChmcm9tKSk7XG4rXHRpbnQgY29weSA9IG1pbl90KHNpemVfdCwgc2tiX2hlYWRsZW4oc2tiKSwgaW92X2l0ZXJfY291bnQoZnJvbSkpO1xuYGBgXG5cbkFoYSEgVGhpcyBmaXhlcyBhIHBvdGVudGlhbCBidWcuIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgc2l0dWF0aW9uIHdoZXJlIGBpb3ZfaXRlcl9jb3VudChmcm9tKWAgY291bGQgZXhjZWVkIGBJTlRfTUFYYCwgbGVhZGluZyB0byBgY29weWAgZWl0aGVyIGJlaW5nIG5lZ2F0aXZlIG9yIHRydW5jYXRlZCwgYSBjbGFzc2ljIGludGVnZXIgb3ZlcmZsb3cgc2l0dWF0aW9uLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGRhdGFncmFtIGhhbmRsaW5nLCB3aGljaCBtYWtlcyB0aGlzIHdvcnRoIGZ1enppbmcgdG8gY2F0Y2ggcG90ZW50aWFsIGVkZ2UgY2FzZXMuIEZvY3VzaW5nIG9uIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIG1ha2VzIHRoZSBtb3N0IHNlbnNlLlxuXG5XaXRoIHRoYXQsIGBUVU5gIGFuZCBgVEFQYCB3aWxsIGVuYWJsZSB0aGlzIHRvIGJlIGZ1enotdGVzdGVkLiBCZWNhdXNlIHRoZSBwYXRjaCByZXNvbHZlcyBhIHBvc3NpYmxlIGludGVnZXIgdHJ1bmNhdGlvbi9zaWduZWRuZXNzIGlzc3VlIHdpdGhpbiBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgaXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVU4vVEFQIGRldmljZXMgYW5kIHdoZW4gemVyb2NvcHkgaXMgZW5hYmxlZC5cblxuSSdsbCBxdWlja2x5IGNoZWNrIGB0YXBfd3JpdGVfaXRlcmAgYXMgd2VsbCwganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6NTIuNDI2NzEyNTA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYwOTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXBfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtNjkwLVxcbmRyaXZlcnMvbmV0L3RhcC5jOjY5MTpzdGF0aWMgc3NpemVfdCB0YXBfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5kcml2ZXJzL25ldC90YXAuYy02OTIte1xcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTAzND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0YXBfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwMzgtXFx0LnJlYWRfaXRlclxcdD0gdGFwX3JlYWRfaXRlcixcXG5kcml2ZXJzL25ldC90YXAuYzoxMDM5OlxcdC53cml0ZV9pdGVyXFx0PSB0YXBfd3JpdGVfaXRlcixcXG5kcml2ZXJzL25ldC90YXAuYy0xMDQwLVxcdC5wb2xsXFx0XFx0PSB0YXBfcG9sbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6NTIuNDcxMzI4NzU4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzU0MDEwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlN0cmVhbWxpbmluZyB0aGUgRGF0YSBXcml0ZSBQYXRoKipcblxuQWxyaWdodCwgc28gYHRhcF93cml0ZV9pdGVyYCBpcyBpbmRlZWQgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhlIGFwcHJvYWNoLiBNeSBpbnN0aW5jdCBpcyBjb3JyZWN0LCBJJ2xsIHN0aWNrIHdpdGggcHJvdmlkaW5nIHRoYXQgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgZnVuY3Rpb24uIFRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgZGF0YSB0cmFuc2ZlciBkaXJlY3RseS5cblxuTm93LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJ2xsIG1vdmUgb24gdG8gY2FsbGluZyBgc2V0LXJlc3VsdHNgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHByb2dyZXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2MSwiT3V0cHV0VG9rZW5zIjo5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjU2LjI0NjczMjczMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjA5MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlRBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbi9zaWduZWRuZXNzIGlzc3VlIGluIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvcHkgbGVuZ3RoLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVFVOL1RBUCBkZXZpY2VzIHdoZW4gemVyb2NvcHkgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlRBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbi9zaWduZWRuZXNzIGlzc3VlIGluIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvcHkgbGVuZ3RoLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVFVOL1RBUCBkZXZpY2VzIHdoZW4gemVyb2NvcHkgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7dhm8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 03:53:56 +0000 UTC FinishedAt: 2026-07-29 04:49:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b515dc54795ef370be3cb396e7c12ad91686b6d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "TAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b515dc54795ef370be3cb396e7c12ad91686b6d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "TAP" ], "series_id": "b2f43368-c58f-422f-bbdd-b0d05ea87e9e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "zerocopy_sg_from_iter" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9zZ19mcm9tX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uL3NpZ25lZG5lc3MgaXNzdWUgaW4gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgd2hlbiBjYWxjdWxhdGluZyB0aGUgY29weSBsZW5ndGguIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVU4vVEFQIGRldmljZXMgd2hlbiB6ZXJvY29weSBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDJlOWM2ODFmNWQxNjM2MDQ0NWY1ZTJjYjM1MTJiYjM4MWQ0MWQ2ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDA0OjQ4OjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jXG5pbmRleCBjMjg1YzY0NjU5MjNlLi5mZDhlMTdkMjVhM2RiIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGF0YWdyYW0uY1xuQEAgLTc4Myw3ICYjNDM7NzgzLDcgQEAgRVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XG4gICovXG4gaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuLVx0aW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTtcbiYjNDM7XHRpbnQgY29weSA9IG1pbl90KHNpemVfdCwgc2tiX2hlYWRsZW4oc2tiKSwgaW92X2l0ZXJfY291bnQoZnJvbSkpO1xuIFxuIFx0LyogY29weSB1cCB0byBza2IgaGVhZGxlbiAqL1xuIFx0aWYgKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcihza2IsIDAsIGZyb20sIGNvcHkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUVU4mIzM0OywKICAgICYjMzQ7VEFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emVyb2NvcHlfc2dfZnJvbV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbi9zaWduZWRuZXNzIGlzc3VlIGluIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvcHkgbGVuZ3RoLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVFVOL1RBUCBkZXZpY2VzIHdoZW4gemVyb2NvcHkgaXMgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyZTljNjgxZjVkMTYzNjA0NDVmNWUyY2IzNTEyYmIzODFkNDFkNmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAwNDo0ODo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IGMyODVjNjQ2NTkyM2UuLmZkOGUxN2QyNWEzZGIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtNzgzLDcgJiM0Mzs3ODMsNyBAQCBFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTsKICAqLwogaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiB7Ci0JaW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKJiM0MzsJaW50IGNvcHkgPSBtaW5fdChzaXplX3QsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKIAogCS8qIGNvcHkgdXAgdG8gc2tiIGhlYWRsZW4gKi8KIAlpZiAoc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgMCwgZnJvbSwgY29weSkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBDb3JlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZSBjaGFuZ2UgaXMgcHJldHR5IGNvbnRhaW5lZC4gSXQmIzM5O3MganVzdCBtb2RpZnlpbmcgdGhhdCBsaW5lIGluIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBjaGFuZ2luZyBgbWluX3QoaW50LCAuLi4pYCB0byBgbWluX3Qoc2l6ZV90LCAuLi4pYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBvciBzaWduZWRuZXNzIGlzc3VlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvcHkgc2l6ZS4gU21hcnQuIFRoYXQmIzM5O3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuCgpUaGUgZmFjdCB0aGF0IGl0IGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBsaWtlIHRoaXMgbWFrZXMgbXkgaW50ZXJuYWwgYWxhcm0gYmVsbHMgZ28gb2ZmLiBXZSAqYWJzb2x1dGVseSogbmVlZCB0byBmdXp6IHRoaXMgYXJlYS4gQW55dGltZSB3ZSB0b3VjaCB0aGUgY2FsY3VsYXRpb24gb2YgZGF0YSBzaXplcyBvciBsZW5ndGhzLCB3ZSYjMzk7cmUgcG90ZW50aWFsbHkgb3BlbmluZyBhIGNhbiBvZiB3b3Jtcy4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeSwgYW5kIHNpbmNlIHRoaXMgaXMgdG91Y2hpbmcgYSBmdW5jdGlvbiB3aXRoICYjMzQ7emVyb2NvcHkmIzM0OyBpbiB0aGUgbmFtZSwgaXQgaXMgZXZlbiBtb3JlIGltcG9ydGFudCB0byBtYWtlIHN1cmUgaXQgaXMgY29ycmVjdC4KCk5vdywgbGV0IG1lIGp1c3QgbG9jYXRlIHRoYXQgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9kYXRhZ3JhbS5jYCBhbmQgZGlnIGEgbGl0dGxlIGRlZXBlci4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2RhdGFncmFtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ1LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDY6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDctXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3MS19XG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3MjpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzczLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtLyoqXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTogKlx0emVyb2NvcHlfc2dfZnJvbV9pdGVyIC0gQnVpbGQgYSB6ZXJvY29weSBkYXRhZ3JhbSBmcm9tIGFuIGlvdl9pdGVyXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni0gKlx0QHNrYjogYnVmZmVyIHRvIGNvcHlcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4My0gKi9cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODUte1xuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkxLVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTI6XHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTMtfVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTQ6RVhQT1JUX1NZTUJPTCh6ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipFeGFtaW5pbmcgdGhlIFVzYWdlIG9mIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgKioKClJpZ2h0LCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBpcyBhbiAqZXhwb3J0ZWQgc3ltYm9sKi4gVGhhdCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBvciBhdCBsZWFzdCB2aXNpYmxlIG91dHNpZGUgdGhlIG1vZHVsZSBpdCYjMzk7cyBkZWZpbmVkIGluLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gU28sIG15IGZpcnN0IG1vdmUgaXMgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB0cmFjZSBiYWNrIGl0cyBjYWxsIHNpdGVzIHRvIGdyYXNwIGl0cyBpbnRlbmRlZCBwdXJwb3NlIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCBzdGFydCBzZWFyY2hpbmcgZm9yIGl0cyByZWZlcmVuY2VzLiBHb3R0YSBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTYyNy1cdGlmICh6ZXJvY29weSlcbmRyaXZlcnMvbmV0L3RhcC5jOjYyODpcdFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XG5kcml2ZXJzL25ldC90YXAuYy02MjktXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTcyNj1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xODE5LVx0XHRcdCAqIElmIHplcm9jb3B5IGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBsYXlvdXQgd2lsbCBiZVxuZHJpdmVycy9uZXQvdHVuLmM6MTgyMDpcdFx0XHQgKiBvdmVyd3JpdHRlbiBieSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKS5cbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjEtXHRcdFx0ICovXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTgzNS1cdFx0aWYgKHplcm9jb3B5KVxuZHJpdmVycy9uZXQvdHVuLmM6MTgzNjpcdFx0XHRlcnIgPSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc2tiLCBmcm9tKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MzctXHRcdGVsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cdFx0XHRcdCAgICAgICBOVUxMKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNTI9aW50IHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTMtXHRcdFx0XHQgICAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgaW50IGxlbik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNTQ6aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZybSk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTUtdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDEyLVx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlx0ICogZS5nLiwgdmlhIHplcm9jb3B5X3NnX2Zyb21faXRlcigpIG9yIHNrYl9vcnBoYW5fZnJhZ3NfcngoKVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVx0ICovXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ1LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDY6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDctXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3MS19XG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3MjpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzczLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtLyoqXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTogKlx0emVyb2NvcHlfc2dfZnJvbV9pdGVyIC0gQnVpbGQgYSB6ZXJvY29weSBkYXRhZ3JhbSBmcm9tIGFuIGlvdl9pdGVyXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni0gKlx0QHNrYjogYnVmZmVyIHRvIGNvcHlcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4My0gKi9cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODUte1xuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkxLVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTI6XHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTMtfVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTQ6RVhQT1JUX1NZTUJPTCh6ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTUtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkwNj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI3LVxubmV0L2NvcmUvc2tidWZmLmM6MTkyODpcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI5LVx0XHRcdFx0ICAgICAgYmluZGluZyk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cdGlmICh6Y29weSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcdFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXHQvKiBJZiAmIzM5O3ZzayYjMzk7ICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcdCAqIHdpbGwgbmV2ZXIgY2FsbCAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyBiZWxvdyB3aXRob3V0XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJiMzOTtza2Jfc2V0X293bmVyX3coKSYjMzk7LiBUaGUgb25seSBjYXNlXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyB1c2VzXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICYjMzk7c2tfd21lbV9hbGxvYyYjMzk7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IHplcm9jb3B5X3NnX2Zyb21faXRlcioqCgpPa2F5LCBzbyB0aGUgZnVuY3Rpb24gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgbHVya2luZyBpbiBgZHJpdmVycy9uZXQvdGFwLmNgIGFuZCBgZHJpdmVycy9uZXQvdHVuLmNgIOKAkyBpbnRlcmVzdGluZy4gQW5kIGl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBhZmZlY3RzIGBuZXQvY29yZS9kYXRhZ3JhbS5jYC4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBiZWVuIHRvdWNoZWQsIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuCgpUaGUga2V5IGhlcmUgaXMgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaXRzZWxmLiBJcyBpdCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2U/IEFoLCB5ZXMsIGl0IGFwcGVhcnMgdG8gYmUgYWNjZXNzaWJsZSB2aWEgVFVOL1RBUCBkZXZpY2VzLiBUaGF0JiMzOTtzIGEgcHJvbWlzaW5nIGF0dGFjayBzdXJmYWNlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZyBvcHRpb25zIHRoYXQgd2UgbmVlZCB0byBiZSBhd2FyZSBvZi4gYENPTkZJR19UVU5gIGFuZCBgQ09ORklHX01BQ1ZUQVBgIG9yIGBDT05GSUdfVEFQYCBhcmUgdXN1YWxseSBlbmFibGVkLiBUaW1lIHRvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmb3IgdGhlIGRlZmluaXRpdmUgYW5zd2VyIG9uIHRob3NlIGBUVU5gIGFuZCBgVEFQYCBvcHRpb25zLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRVTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zODY9Y29uZmlnIFJJT05FVF9SWF9TSVpFXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MTpjb25maWcgVFVOXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5Mi1cdHRyaXN0YXRlIFwmIzM0O1VuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDE1PWNvbmZpZyBUQVBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDIxOmNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGNyb3NzLWVuZGlhbiB2bmV0IGhlYWRlcnMgb24gbGl0dGxlLWVuZGlhbiBrZXJuZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYyMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIE5ldHdvcmsgSW50ZXJmYWNlIE9wdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgZXhwYW5kaW5nIG91ciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlIGRlZmluaXRlbHkgbmVlZCB0byBpbmNsdWRlIGBUVU5gIGFuZCBgVEFQYCB3aXRoaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaG9zZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsLCBhbmQgSSYjMzk7ZCBiZSBzdXJwcmlzZWQgaWYgdGhleSB3ZXJlbiYjMzk7dCBhbHJlYWR5IGNvbnNpZGVyZWQsIGJ1dCBhIHNhbml0eSBjaGVjayBuZXZlciBodXJ0cy4gSSYjMzk7bSBhbHNvIHRoaW5raW5nIHdlIHNob3VsZCBldmFsdWF0ZSBgTUFDVlRBUGAgYW5kIGBJUFZMQU5gIGFzIHBvdGVudGlhbGx5IHJlbGV2YW50IGFkZGl0aW9ucyB0byB0aGUgY29uZmlndXJhdGlvbiBzY29wZS4KClRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGB0YXBgIGFuZCBgdHVuYCBkcml2ZXJzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9uZXQvdGFwLmNgIGFuZCBgZHJpdmVycy9uZXQvdHVuLmNgIHNwZWNpZmljYWxseS4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBjdXJyZW50IGZlYXR1cmUgc2V0IGFuZCB0aGUgcG90ZW50aWFsIGludGVncmF0aW9uIGNoYWxsZW5nZXMgYmVmb3JlIEkgZGl2ZSBhbnkgZGVlcGVyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBkZXZpY2VzIGFyZSBjdXJyZW50bHkgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCBhbmQgaWYgYW55IGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIGNvdWxkIGJlIGxldmVyYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zOTE9Y29uZmlnIFRVTlxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNDE0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTU6Y29uZmlnIFRBUFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MTYtXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgJiMzOTtzIENhbGxlcnMqKgoKT2theSwgaG9sZCBvbi4gSSYjMzk7bSBzZWVpbmcgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgcmVmZXJlbmNlZCBoZXJlLCBhbmQgdGhhdCByYW5nIGEgYmVsbC4gV2FzbiYjMzk7dCB0aGF0IGFsc28gdXNlZCBpbmRpcmVjdGx5IHRocm91Z2ggYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYD8gQW5kIGlzbiYjMzk7dCAqdGhhdCogZnVuY3Rpb24sIG9yIHNvbWV0aGluZyB2ZXJ5IHNpbWlsYXIsIGludm9sdmVkIGluIHRoZSBUQ1Agc3RhY2ssIG1heWJlIHdpdGhpbiBgbmV0L2lwdjQvdGNwLmNgIG9yIGEgcmVsYXRlZCBmaWxlPyBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIGhvdyBgc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1gIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHRyYWNlIHRoaXMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weV9pdGVyX2RncmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcwLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzItXHRcdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTk0OT1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjUtXHRcdH0gZWxzZSB7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjY2Olx0XHRcdGVyciA9IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHNrYiwgZnJvbSwgY29weSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY3LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE0NDk9c3RhdGljIGludCBfX2lwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzEtXHRcdH0gZWxzZSB7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTgzMjpcdFx0XHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4MzMtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYxMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbWAgY2FsbHMgYF9femVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgYnV0IHdhaXQsIEkgc2VlIGl0JiMzOTtzIGFjdHVhbGx5IGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHRoYXQmIzM5O3MgdGhlIGZvY3VzIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrLCBidXQgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgbm90IHRoZSBpbnRlcm5hbCB2YXJpYW50LgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5OyByaWdodCwgaXQmIzM5O3MgdGhlIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGZ1bmN0aW9uLgoKYGBgYwogaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiB7Ci0JaW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKJiM0MzsJaW50IGNvcHkgPSBtaW5fdChzaXplX3QsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKIAogCS8qIGNvcHkgdXAgdG8gc2tiIGhlYWRsZW4gKi8KIAlpZiAoc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgMCwgZnJvbSwgY29weSkpCmBgYAoKRXhjZWxsZW50LCBqdXN0IGFzIEkgdGhvdWdodCwgdGhlIHNpbmdsZSBmdW5jdGlvbiBjaGFuZ2VkIGlzIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLiBOb3csIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gdXNlZD8gSXQmIzM5O3MgdXNlZCBpbiBgZHJpdmVycy9uZXQvdGFwLmNgIGFuZCBgZHJpdmVycy9uZXQvdHVuLmNgLiBTbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgVFVOYCBhbmQgYFRBUGAgY29uZmlndXJhdGlvbnMuIFNpbmNlIGl0JiMzOTtzIGV4cG9ydGVkLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIHBvdGVudGlhbCB1c2FnZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgYmVpbmcgdHVubmVsLXZpc2lvbmVkLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBmdW5jdGlvbiBpdHNlbGYsIHBsdXMgYHR1bl9nZXRfdXNlcmAgYW5kIGB0YXBfZ2V0X3VzZXJgLCBzaW5jZSB0aGV5IGNhbGwgaXQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgdXNlZCBlbHNld2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTYyNy1cdGlmICh6ZXJvY29weSlcbmRyaXZlcnMvbmV0L3RhcC5jOjYyODpcdFx0ZXJyID0gemVyb2NvcHlfc2dfZnJvbV9pdGVyKHNrYiwgZnJvbSk7XG5kcml2ZXJzL25ldC90YXAuYy02MjktXHRlbHNlXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTcyNj1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xODE5LVx0XHRcdCAqIElmIHplcm9jb3B5IGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBsYXlvdXQgd2lsbCBiZVxuZHJpdmVycy9uZXQvdHVuLmM6MTgyMDpcdFx0XHQgKiBvdmVyd3JpdHRlbiBieSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKS5cbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjEtXHRcdFx0ICovXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTgzNS1cdFx0aWYgKHplcm9jb3B5KVxuZHJpdmVycy9uZXQvdHVuLmM6MTgzNjpcdFx0XHRlcnIgPSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc2tiLCBmcm9tKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MzctXHRcdGVsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTE3NjE9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzY0LVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihtc2csIHNrYi1cdTAwM2Vzaywgc2tiLCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIGxlbixcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cdFx0XHRcdCAgICAgICBOVUxMKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNTI9aW50IHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTMtXHRcdFx0XHQgICAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgaW50IGxlbik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNTQ6aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZybSk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTUtdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDEyLVx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlx0ICogZS5nLiwgdmlhIHplcm9jb3B5X3NnX2Zyb21faXRlcigpIG9yIHNrYl9vcnBoYW5fZnJhZ3NfcngoKVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVx0ICovXG4tLVxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ1LVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDY6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDctXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3MS19XG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3MjpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzczLVxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtLyoqXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTogKlx0emVyb2NvcHlfc2dfZnJvbV9pdGVyIC0gQnVpbGQgYSB6ZXJvY29weSBkYXRhZ3JhbSBmcm9tIGFuIGlvdl9pdGVyXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni0gKlx0QHNrYjogYnVmZmVyIHRvIGNvcHlcbi0tXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4My0gKi9cbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxubmV0L2NvcmUvZGF0YWdyYW0uYy03ODUte1xuLS1cbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkxLVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTI6XHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTMtfVxubmV0L2NvcmUvZGF0YWdyYW0uYzo3OTQ6RVhQT1JUX1NZTUJPTCh6ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xubmV0L2NvcmUvZGF0YWdyYW0uYy03OTUtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTkwNj1pbnQgc2tiX3plcm9jb3B5X2l0ZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI3LVxubmV0L2NvcmUvc2tidWZmLmM6MTkyODpcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI5LVx0XHRcdFx0ICAgICAgYmluZGluZyk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04Ny1cdGlmICh6Y29weSlcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcdFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVx0XHRcdFx0XHQgICAgICAgXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBsZW4sIE5VTEwpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXHQvKiBJZiAmIzM5O3ZzayYjMzk7ICE9IE5VTEwgdGhlbiBwYXlsb2FkIGlzIGFsd2F5cyBwcmVzZW50LCBzbyB3ZVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcdCAqIHdpbGwgbmV2ZXIgY2FsbCAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyBiZWxvdyB3aXRob3V0XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJiMzOTtza2Jfc2V0X293bmVyX3coKSYjMzk7LiBUaGUgb25seSBjYXNlXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoyNDc6XHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAmIzM5O19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCkmIzM5OyB1c2VzXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQ4LVx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICYjMzk7c2tfd21lbV9hbGxvYyYjMzk7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzExCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkV4YW1pbmluZyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBhbmQgaXRzIGFwcGxpY2F0aW9uLiBJdCBsb29rcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgYWN0aXZlbHkgdXNlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC90YXAuY2AgYW5kIGBkcml2ZXJzL25ldC90dW4uY2AgZmlsZXMuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2YgdGhlIG5ldHdvcmtpbmcgY29udGV4dC4gVGhlIHByZXNlbmNlIG9mIGBUVU5gIGFuZCBgVEFQYCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBpbW1lZGlhdGVseSBzaWduYWxzIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLCB3aGljaCBtYWtlcyBzZW5zZS4KCk5vdywgSSBzZWVtIHRvIHJlbWVtYmVyIGBNQUNWVEFQYCBiZWluZyBzb21laG93IHJlbGF0ZWQgdG8gdGhpcyBgdGFwLmNgIG1vZHVsZSwgYnV0IEkgd2FudCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAuIElzIGBNQUNWVEFQYCBhY3R1YWxseSBwYXJ0IG9mIHRoZSBgdGFwLmNgIG1vZHVsZT8gTm8sIHRoYXQmIzM5O3MgaW5jb3JyZWN0LiBJIHJlY2FsbCBub3cgdGhhdCBgdGFwLmNgIGlzIGFjdHVhbGx5IGEgc2VwYXJhdGUgbG9hZGFibGUgbW9kdWxlLCBgdGFwLmtvYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBNQUNWVEFQYCB0aWVzIGluLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBnby10byBwbGFjZSBmb3IgdW5jb3ZlcmluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIG9mIHRoZXNlIG5ldHdvcmsgZHJpdmVycy4gSXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE1BQ1ZUQVBgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDVlRBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0xNjU9Y29uZmlnIE1BQ1ZMQU5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTE3OC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MTc5OmNvbmZpZyBNQUNWVEFQXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4MC1cdHRyaXN0YXRlIFwmIzM0O01BQy1WTEFOIGJhc2VkIHRhcCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc4OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYHRhcC5jYCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGB0YXAuY2AgZHJpdmVyIGlzIGNvbXBpbGVkIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGRyaXZlcnMvbmV0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYnVpbGQgcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIHRoZSBjb21waWxhdGlvbiBmbGFncyBmb3IgbmV0d29yayBkZXZpY2UgZHJpdmVycyBhcmUgbGlrZWx5IGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGF0IE1ha2VmaWxlIHRvIHNlZSBleGFjdGx5IGhvdyBgdGFwLmNgIGlzIGhhbmRsZWQsIHdoZXRoZXIgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgaWYgaXTigJlzIGxpbmtlZCBhZ2FpbnN0IHNwZWNpZmljIGxpYnJhcmllcywgYW5kIHdoaWNoIHByZXByb2Nlc3NvciBkZWZpbmVzIGFyZSByZWxldmFudCB0byBpdC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGRyaXZlciBmaXRzIGludG8gdGhlIGxhcmdlciBidWlsZCBwcm9jZXNzLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBNYWtlZmlsZSBhbmQgZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RhcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTUFDVkxBTikgJiM0Mzs9IG1hY3ZsYW4ub1xuZHJpdmVycy9uZXQvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX01BQ1ZUQVApICYjNDM7PSBtYWN2dGFwLm9cbmRyaXZlcnMvbmV0L01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19NSUkpICYjNDM7PSBtaWkub1xuLS1cbmRyaXZlcnMvbmV0L01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19UVU4pICYjNDM7PSB0dW4ub1xuZHJpdmVycy9uZXQvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1RBUCkgJiM0Mzs9IHRhcC5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfVkVUSCkgJiM0Mzs9IHZldGgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE3MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUQVAvVFVOIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBTZWxlY3Rpb24qKgoKT2theSwgaGVyZSYjMzk7cyBob3cgSSYjMzk7bSBhcHByb2FjaGluZyB0aGlzOiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGVuIHdoaWNoIHNwZWNpZmljIHN5bWJvbHMgdG8gaW5jbHVkZSBpbiBteSBhbmFseXNpcyByZWxhdGVkIHRvIFRBUCBhbmQgVFVOIGRyaXZlcnMuIEkga25vdyBgQ09ORklHX1RBUGAgY29tcGlsZXMgYHRhcC5jYCwgYW5kIGBDT05GSUdfVFVOYCBjb21waWxlcyBgdHVuLmNgLiBUaGUgY29yZSBmdW5jdGlvbiBvZiBpbnRlcmVzdCwgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAsIGlzIGRlZmluZWQgaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQsIHNvIHRoYXQgcGFydCBpcyBzdHJhaWdodGZvcndhcmQuIFRoZXJlZm9yZSwgYENPTkZJR19UVU5gIGFuZCBgQ09ORklHX1RBUGAgYXJlIHRoZSBrZXlzIGZvciBlbmFibGluZyB0aGUgZHJpdmVycyB0aGVtc2VsdmVzLgoKTm93LCB0aGUgaW1wb3J0YW50IHN5bWJvbHM6IG15IGluaXRpYWwgdGhvdWdodCB3YXMgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAsIGB0dW5fZ2V0X3VzZXJgLCBhbmQgYHRhcF9nZXRfdXNlcmAuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGluc3RydWN0cyBtZSB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYHR1bl9nZXRfdXNlcmAgYW5kIGB0YXBfZ2V0X3VzZXJgIGFyZSBzdGF0aWMsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgYWx0ZXJuYXRpdmVzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZ3JlcCBvdXRwdXQuIEFoLCB5ZXMsIGl0IGNsZWFybHkgc2hvd3MgYHR1bl9nZXRfdXNlcmAgYW5kIGB0YXBfZ2V0X3VzZXJgIGFzIHN0YXRpYyBmdW5jdGlvbnMuIFNpbmNlIHRoZXkgYXJlIHN0YXRpYywgSSBzaG91bGQgZXhjbHVkZSB0aGVtIGZyb20gbXkgZmluYWwgc2VsZWN0aW9uIHVubGVzcyB0aGV5IGFyZSBwYXJ0aWN1bGFybHkgbGFyZ2UgYW5kIHVubGlrZWx5IHRvIGJlIGlubGluZWQuIFRoZSBwcm9tcHQgaXMgdmVyeSBjbGVhciBvbiBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgZ2l2ZW4gdGhhdCB0aGVzZSBhcmUgaGVscGVyIGZ1bmN0aW9ucywgdGhlIGluc3RydWN0aW9uIGlzIHJlbGV2YW50LgoKU28sIEkgbmVlZCB0byBodW50IGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cyBpbiBgdHVuLmNgIGFuZCBgdGFwLmNgLiBTY2FubmluZyB0aGUgY29kZSwgSSBzZWUgYHR1bl9jaHJfd3JpdGVfaXRlcmAgYW5kIGB0YXBfd3JpdGVfaXRlcmAgdGhhdCBsb29rcyBwcm9taXNpbmcuIFRoZXkgYXJlIGxpa2VseSB0aGUgd3JpdGUgZW50cnkgcG9pbnRzLCBzbyB0aGV5IHdvdWxkIGJlIHRoZSBjYW5kaWRhdGVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZW0gY2FyZWZ1bGx5LCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5JiMzOTtyZSBzdWl0YWJsZSBhbmQgdGhlIGJlc3QgY2hvaWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fY2hyX3dyaXRlX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0xNzI2PXN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIwMTctXG5kcml2ZXJzL25ldC90dW4uYzoyMDE4OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbmRyaXZlcnMvbmV0L3R1bi5jLTIwMTkte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM1Mzc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzUzOS1cdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXG5kcml2ZXJzL25ldC90dW4uYzozNTQwOlx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXG5kcml2ZXJzL25ldC90dW4uYy0zNTQxLVx0LnBvbGxcdD0gdHVuX2Nocl9wb2xsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gYHR1bl9jaHJfd3JpdGVfaXRlcmAgaXMgYWxzbyBzdGF0aWMsIG1ha2luZyBpdCB1bmxpa2VseSB0byBiZSBpbmxpbmVkIHNpbmNlIGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuIHdpdGhpbiB0aGUgZmlsZSBvcGVyYXRpb24uIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBXaGlsZSB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBNYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBqdXN0IHV0aWxpemUgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaGVyZS4KCkJ1dCBob2xkIG9uLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZy4gSXMgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgcmVhY2hhYmxlIGVsc2V3aGVyZT8gSXQgc2VlbXMgaXQgaXMgb25seSB1c2VkIGJ5IGB0dW5gIGFuZCBgdGFwYCBzcGVjaWZpY2FsbHkuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIFRoZXJlZm9yZSwgYFRVTmAgYW5kIGBUQVBgIGFyZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyB0byBmb2N1cyBvbi4KCkxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayB0byBiZSBzdXJlIHRoZXJlIGFyZSBub3QgYW55IG90aGVyIGNvbmZpZ3MgdG8gYmUgY29uc2lkZXJlZC4gYENPTkZJR19ORVRgIGlzIGFuIG9idmlvdXMgY2hvaWNlLiBXaGlsZSBgQ09ORklHX0lORVRgIG1pZ2h0IG5vdCBiZSBzdHJpY3RseSByZXF1aXJlZCBmb3IgYHR1bmAvYHRhcGAsIGl0JiMzOTtzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBhbG9uZ3NpZGUgdGhlbS4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgVFVOYCBhbmQgYFRBUGAgd2lsbCBzdWZmaWNlLgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGY6CgpgYGBjCi0JaW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKJiM0MzsJaW50IGNvcHkgPSBtaW5fdChzaXplX3QsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTsKYGBgCgpBaGEhIFRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgYnVnLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIHNpdHVhdGlvbiB3aGVyZSBgaW92X2l0ZXJfY291bnQoZnJvbSlgIGNvdWxkIGV4Y2VlZCBgSU5UX01BWGAsIGxlYWRpbmcgdG8gYGNvcHlgIGVpdGhlciBiZWluZyBuZWdhdGl2ZSBvciB0cnVuY2F0ZWQsIGEgY2xhc3NpYyBpbnRlZ2VyIG92ZXJmbG93IHNpdHVhdGlvbi4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgZGF0YWdyYW0gaGFuZGxpbmcsIHdoaWNoIG1ha2VzIHRoaXMgd29ydGggZnV6emluZyB0byBjYXRjaCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gRm9jdXNpbmcgb24gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuCgpXaXRoIHRoYXQsIGBUVU5gIGFuZCBgVEFQYCB3aWxsIGVuYWJsZSB0aGlzIHRvIGJlIGZ1enotdGVzdGVkLiBCZWNhdXNlIHRoZSBwYXRjaCByZXNvbHZlcyBhIHBvc3NpYmxlIGludGVnZXIgdHJ1bmNhdGlvbi9zaWduZWRuZXNzIGlzc3VlIHdpdGhpbiBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgaXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVU4vVEFQIGRldmljZXMgYW5kIHdoZW4gemVyb2NvcHkgaXMgZW5hYmxlZC4KCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYHRhcF93cml0ZV9pdGVyYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXBfd3JpdGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RhcC5jPTU3Mj1zdGF0aWMgc3NpemVfdCB0YXBfZ2V0X3VzZXIoc3RydWN0IHRhcF9xdWV1ZSAqcSwgdm9pZCAqbXNnX2NvbnRyb2wsXG4tLVxuZHJpdmVycy9uZXQvdGFwLmMtNjkwLVxuZHJpdmVycy9uZXQvdGFwLmM6NjkxOnN0YXRpYyBzc2l6ZV90IHRhcF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZHJpdmVycy9uZXQvdGFwLmMtNjkyLXtcbi0tXG5kcml2ZXJzL25ldC90YXAuYz0xMDM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRhcF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTEwMzgtXHQucmVhZF9pdGVyXHQ9IHRhcF9yZWFkX2l0ZXIsXG5kcml2ZXJzL25ldC90YXAuYzoxMDM5Olx0LndyaXRlX2l0ZXJcdD0gdGFwX3dyaXRlX2l0ZXIsXG5kcml2ZXJzL25ldC90YXAuYy0xMDQwLVx0LnBvbGxcdFx0PSB0YXBfcG9sbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNjEKCQkJCQkJCW91dHB1dDogOTcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqU3RyZWFtbGluaW5nIHRoZSBEYXRhIFdyaXRlIFBhdGgqKgoKQWxyaWdodCwgc28gYHRhcF93cml0ZV9pdGVyYCBpcyBpbmRlZWQgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhlIGFwcHJvYWNoLiBNeSBpbnN0aW5jdCBpcyBjb3JyZWN0LCBJJiMzOTtsbCBzdGljayB3aXRoIHByb3ZpZGluZyB0aGF0IGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGZ1bmN0aW9uLiBUaGF0IHNob3VsZCBoYW5kbGUgdGhlIGRhdGEgdHJhbnNmZXIgZGlyZWN0bHkuCgpOb3csIHdpdGggdGhhdCBjb25maXJtZWQsIEkmIzM5O2xsIG1vdmUgb24gdG8gY2FsbGluZyBgc2V0LXJlc3VsdHNgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHByb2dyZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1RBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3plcm9jb3B5X3NnX2Zyb21faXRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24vc2lnbmVkbmVzcyBpc3N1ZSBpbiBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBjb3B5IGxlbmd0aC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRVTi9UQVAgZGV2aWNlcyB3aGVuIHplcm9jb3B5IGlzIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6ZXJvY29weV9zZ19mcm9tX2l0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uL3NpZ25lZG5lc3MgaXNzdWUgaW4gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgd2hlbiBjYWxjdWxhdGluZyB0aGUgY29weSBsZW5ndGguIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVU4vVEFQIGRldmljZXMgd2hlbiB6ZXJvY29weSBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDg6NTkuNDQwNjUzMjA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4ODAzMDEwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJUQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6ZXJvY29weV9zZ19mcm9tX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24vc2lnbmVkbmVzcyBpc3N1ZSBpbiBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBjb3B5IGxlbmd0aC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRVTi9UQVAgZGV2aWNlcyB3aGVuIHplcm9jb3B5IGlzIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ4OjU5LjQ0MDY2Mzg4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1OTAyMTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDJlOWM2ODFmNWQxNjM2MDQ0NWY1ZTJjYjM1MTJiYjM4MWQ0MWQ2ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAwNDo0ODo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uY1xcbmluZGV4IGMyODVjNjQ2NTkyM2UuLmZkOGUxN2QyNWEzZGIgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uY1xcbisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmNcXG5AQCAtNzgzLDcgKzc4Myw3IEBAIEVYUE9SVF9TWU1CT0woX196ZXJvY29weV9zZ19mcm9tX2l0ZXIpO1xcbiAgKi9cXG4gaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuIHtcXG4tXFx0aW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTtcXG4rXFx0aW50IGNvcHkgPSBtaW5fdChzaXplX3QsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTtcXG4gXFxuIFxcdC8qIGNvcHkgdXAgdG8gc2tiIGhlYWRsZW4gKi9cXG4gXFx0aWYgKHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcihza2IsIDAsIGZyb20sIGNvcHkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0ODo1OS44ODgyMDQxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU2NDMyNzQwOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVEFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemVyb2NvcHlfc2dfZnJvbV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uL3NpZ25lZG5lc3MgaXNzdWUgaW4gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgd2hlbiBjYWxjdWxhdGluZyB0aGUgY29weSBsZW5ndGguIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVU4vVEFQIGRldmljZXMgd2hlbiB6ZXJvY29weSBpcyBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MmU5YzY4MWY1ZDE2MzYwNDQ1ZjVlMmNiMzUxMmJiMzgxZDQxZDZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDQ6NDg6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uY1xuaW5kZXggYzI4NWM2NDY1OTIzZS4uZmQ4ZTE3ZDI1YTNkYiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmNcbisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmNcbkBAIC03ODMsNyArNzgzLDcgQEAgRVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XG4gICovXG4gaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuLVx0aW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTtcbitcdGludCBjb3B5ID0gbWluX3Qoc2l6ZV90LCBza2JfaGVhZGxlbihza2IpLCBpb3ZfaXRlcl9jb3VudChmcm9tKSk7XG4gXG4gXHQvKiBjb3B5IHVwIHRvIHNrYiBoZWFkbGVuICovXG4gXHRpZiAoc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgMCwgZnJvbSwgY29weSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0ODo1OS44ODgyMDYyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDQ3OTQ0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBDb3JlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9jb3JlL2RhdGFncmFtLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyB0aGUgY2hhbmdlIGlzIHByZXR0eSBjb250YWluZWQuIEl0J3MganVzdCBtb2RpZnlpbmcgdGhhdCBsaW5lIGluIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBjaGFuZ2luZyBgbWluX3QoaW50LCAuLi4pYCB0byBgbWluX3Qoc2l6ZV90LCAuLi4pYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBvciBzaWduZWRuZXNzIGlzc3VlIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvcHkgc2l6ZS4gU21hcnQuIFRoYXQncyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy5cblxuVGhlIGZhY3QgdGhhdCBpdCBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgbGlrZSB0aGlzIG1ha2VzIG15IGludGVybmFsIGFsYXJtIGJlbGxzIGdvIG9mZi4gV2UgKmFic29sdXRlbHkqIG5lZWQgdG8gZnV6eiB0aGlzIGFyZWEuIEFueXRpbWUgd2UgdG91Y2ggdGhlIGNhbGN1bGF0aW9uIG9mIGRhdGEgc2l6ZXMgb3IgbGVuZ3Rocywgd2UncmUgcG90ZW50aWFsbHkgb3BlbmluZyBhIGNhbiBvZiB3b3Jtcy4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeSwgYW5kIHNpbmNlIHRoaXMgaXMgdG91Y2hpbmcgYSBmdW5jdGlvbiB3aXRoIFwiemVyb2NvcHlcIiBpbiB0aGUgbmFtZSwgaXQgaXMgZXZlbiBtb3JlIGltcG9ydGFudCB0byBtYWtlIHN1cmUgaXQgaXMgY29ycmVjdC5cblxuTm93LCBsZXQgbWUganVzdCBsb2NhdGUgdGhhdCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9jb3JlL2RhdGFncmFtLmNgIGFuZCBkaWcgYSBsaXR0bGUgZGVlcGVyLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OTowNS4wOTMwMDQyMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTkxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemVyb2NvcHlfc2dfZnJvbV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2RhdGFncmFtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDUtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDY6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ3LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3MS19XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzI6RVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzMtXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtLyoqXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzU6ICpcXHR6ZXJvY29weV9zZ19mcm9tX2l0ZXIgLSBCdWlsZCBhIHplcm9jb3B5IGRhdGFncmFtIGZyb20gYW4gaW92X2l0ZXJcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni0gKlxcdEBza2I6IGJ1ZmZlciB0byBjb3B5XFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4My0gKi9cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc4NDppbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4NS17XFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5MS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5MjpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkzLX1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5NDpFWFBPUlRfU1lNQk9MKHplcm9jb3B5X3NnX2Zyb21faXRlcik7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjA1LjEzODkwNzEwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDI4NTk1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipFeGFtaW5pbmcgdGhlIFVzYWdlIG9mIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgKipcblxuUmlnaHQsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzIGFuICpleHBvcnRlZCBzeW1ib2wqLiBUaGF0IG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgb3IgYXQgbGVhc3QgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUgaXQncyBkZWZpbmVkIGluLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gU28sIG15IGZpcnN0IG1vdmUgaXMgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gSXQncyBjcnVjaWFsIHRvIHRyYWNlIGJhY2sgaXRzIGNhbGwgc2l0ZXMgdG8gZ3Jhc3AgaXRzIGludGVuZGVkIHB1cnBvc2UgYW5kIGludGVncmF0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIHN0YXJ0IHNlYXJjaGluZyBmb3IgaXRzIHJlZmVyZW5jZXMuIEdvdHRhIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OTowNy45NDE3NzA4ODlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5NDQyNTgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6ZXJvY29weV9zZ19mcm9tX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTU3Mj1zdGF0aWMgc3NpemVfdCB0YXBfZ2V0X3VzZXIoc3RydWN0IHRhcF9xdWV1ZSAqcSwgdm9pZCAqbXNnX2NvbnRyb2wsXFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYy02MjctXFx0aWYgKHplcm9jb3B5KVxcbmRyaXZlcnMvbmV0L3RhcC5jOjYyODpcXHRcXHRlcnIgPSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc2tiLCBmcm9tKTtcXG5kcml2ZXJzL25ldC90YXAuYy02MjktXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTcyNj1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MTktXFx0XFx0XFx0ICogSWYgemVyb2NvcHkgaXMgZW5hYmxlZCwgdGhlbiB0aGlzIGxheW91dCB3aWxsIGJlXFxuZHJpdmVycy9uZXQvdHVuLmM6MTgyMDpcXHRcXHRcXHQgKiBvdmVyd3JpdHRlbiBieSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKS5cXG5kcml2ZXJzL25ldC90dW4uYy0xODIxLVxcdFxcdFxcdCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTgzNS1cXHRcXHRpZiAoemVyb2NvcHkpXFxuZHJpdmVycy9uZXQvdHVuLmM6MTgzNjpcXHRcXHRcXHRlcnIgPSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc2tiLCBmcm9tKTtcXG5kcml2ZXJzL25ldC90dW4uYy0xODM3LVxcdFxcdGVsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2MT1zdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZztcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjItXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzYzOmludCBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzayxcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NjQtXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc3MT1zdGF0aWMgaW5saW5lIGludCBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzczLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NzQ6XFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2tiLVxcdTAwM2Vzaywgc2tiLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc3NS1cXHRcXHRcXHRcXHQgICAgICAgTlVMTCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNTI9aW50IHNrYl9jb3B5X2RhdGFncmFtX2Zyb21faXRlcl9mdWxsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjUzLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBpbnQgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNTQ6aW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZybSk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC00MjU1LXZvaWQgc2tiX2ZyZWVfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oPTEzOD1lbnVtIHNrYl9kcm9wX3JlYXNvbiB7XFxuLS1cXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTItXFx0ICogQFNLQl9EUk9QX1JFQVNPTl9TS0JfVUNPUFlfRkFVTFQ6IGZhaWxlZCB0byBjb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlLFxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oOjQxMzpcXHQgKiBlLmcuLCB2aWEgemVyb2NvcHlfc2dfZnJvbV9pdGVyKCkgb3Igc2tiX29ycGhhbl9mcmFnc19yeCgpXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtNDE0LVxcdCAqL1xcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYz03MDc9emVyb2NvcHlfZmlsbF9za2JfZnJvbV9kZXZtZW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDUtXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NDY6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzQ3LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3MS19XFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzI6RVhQT1JUX1NZTUJPTChfX3plcm9jb3B5X3NnX2Zyb21faXRlcik7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzMtXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NzQtLyoqXFxubmV0L2NvcmUvZGF0YWdyYW0uYzo3NzU6ICpcXHR6ZXJvY29weV9zZ19mcm9tX2l0ZXIgLSBCdWlsZCBhIHplcm9jb3B5IGRhdGFncmFtIGZyb20gYW4gaW92X2l0ZXJcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3Ni0gKlxcdEBza2I6IGJ1ZmZlciB0byBjb3B5XFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4My0gKi9cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc4NDppbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc4NS17XFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5MS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5MjpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoTlVMTCwgTlVMTCwgc2tiLCBmcm9tLCB+MFUsIE5VTEwpO1xcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkzLX1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc5NDpFWFBPUlRfU1lNQk9MKHplcm9jb3B5X3NnX2Zyb21faXRlcik7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTUtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xOTA2PWludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTkyNy1cXG5uZXQvY29yZS9za2J1ZmYuYzoxOTI4OlxcdGVyciA9IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgc2ssIHNrYiwgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIsIGxlbixcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI5LVxcdFxcdFxcdFxcdCAgICAgIGJpbmRpbmcpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTgwPXN0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9maWxsX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg3LVxcdGlmICh6Y29weSlcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6ODg6XFx0XFx0cmV0dXJuIF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKG1zZywgTlVMTCwgc2tiLFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy04OS1cXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIsIGxlbiwgTlVMTCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MjEyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmlydGlvX3RyYW5zcG9ydF9hbGxvY19za2Ioc3RydWN0IHZpcnRpb192c29ja19wa3RfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yMzktXFx0LyogSWYgJ3ZzaycgIT0gTlVMTCB0aGVuIHBheWxvYWQgaXMgYWx3YXlzIHByZXNlbnQsIHNvIHdlXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0MDpcXHQgKiB3aWxsIG5ldmVyIGNhbGwgJ19femVyb2NvcHlfc2dfZnJvbV9pdGVyKCknIGJlbG93IHdpdGhvdXRcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMjQxLVxcdCAqIHNldHRpbmcgc2tiIG93bmVyIGluICdza2Jfc2V0X293bmVyX3coKScuIFRoZSBvbmx5IGNhc2VcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDYtXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjI0NzpcXHQvKiBTZXQgb3duZXIgaGVyZSwgYmVjYXVzZSAnX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoKScgdXNlc1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDgtXFx0ICogb3duZXIgb2Ygc2tiIHdpdGhvdXQgY2hlY2sgdG8gdXBkYXRlICdza193bWVtX2FsbG9jJy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6MDkuNzM2MjAzMzQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3Mjk1NDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogemVyb2NvcHlfc2dfZnJvbV9pdGVyKipcblxuT2theSwgc28gdGhlIGZ1bmN0aW9uIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzIGx1cmtpbmcgaW4gYGRyaXZlcnMvbmV0L3RhcC5jYCBhbmQgYGRyaXZlcnMvbmV0L3R1bi5jYCDigJMgaW50ZXJlc3RpbmcuIEFuZCBpdCBsb29rcyBsaWtlIHRoZSBtb2RpZmljYXRpb24gYWZmZWN0cyBgbmV0L2NvcmUvZGF0YWdyYW0uY2AuIERlZmluaXRlbHkgZnV6ei13b3J0aHkuIEdpdmVuIHRoYXQgaXQncyBiZWVuIHRvdWNoZWQsIHRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy5cblxuVGhlIGtleSBoZXJlIGlzIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGl0c2VsZi4gSXMgaXQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlPyBBaCwgeWVzLCBpdCBhcHBlYXJzIHRvIGJlIGFjY2Vzc2libGUgdmlhIFRVTi9UQVAgZGV2aWNlcy4gVGhhdCdzIGEgcHJvbWlzaW5nIGF0dGFjayBzdXJmYWNlLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWcgb3B0aW9ucyB0aGF0IHdlIG5lZWQgdG8gYmUgYXdhcmUgb2YuIGBDT05GSUdfVFVOYCBhbmQgYENPTkZJR19NQUNWVEFQYCBvciBgQ09ORklHX1RBUGAgYXJlIHVzdWFsbHkgZW5hYmxlZC4gVGltZSB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZm9yIHRoZSBkZWZpbml0aXZlIGFuc3dlciBvbiB0aG9zZSBgVFVOYCBhbmQgYFRBUGAgb3B0aW9ucywganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDMzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjEzLjkwOTE2MTkwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ2MDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zODY9Y29uZmlnIFJJT05FVF9SWF9TSVpFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MTpjb25maWcgVFVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDE1PWNvbmZpZyBUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDIwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDIxOmNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGNyb3NzLWVuZGlhbiB2bmV0IGhlYWRlcnMgb24gbGl0dGxlLWVuZGlhbiBrZXJuZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OToxMy45NTM2Mjc1NzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY5MDA2NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIE5ldHdvcmsgSW50ZXJmYWNlIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGV4cGFuZGluZyBvdXIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBgVFVOYCBhbmQgYFRBUGAgd2l0aGluIGBFbmFibGVDb25maWdzYC4gVGhvc2UgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCwgYW5kIEknZCBiZSBzdXJwcmlzZWQgaWYgdGhleSB3ZXJlbid0IGFscmVhZHkgY29uc2lkZXJlZCwgYnV0IGEgc2FuaXR5IGNoZWNrIG5ldmVyIGh1cnRzLiBJJ20gYWxzbyB0aGlua2luZyB3ZSBzaG91bGQgZXZhbHVhdGUgYE1BQ1ZUQVBgIGFuZCBgSVBWTEFOYCBhcyBwb3RlbnRpYWxseSByZWxldmFudCBhZGRpdGlvbnMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc2NvcGUuXG5cblRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLCBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgYHRhcGAgYW5kIGB0dW5gIGRyaXZlcnMuIEknbGwgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3RhcC5jYCBhbmQgYGRyaXZlcnMvbmV0L3R1bi5jYCBzcGVjaWZpY2FsbHkuIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgY3VycmVudCBmZWF0dXJlIHNldCBhbmQgdGhlIHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzIGJlZm9yZSBJIGRpdmUgYW55IGRlZXBlci4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZGV2aWNlcyBhcmUgY3VycmVudGx5IGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwgYW5kIGlmIGFueSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZSBjb3VsZCBiZSBsZXZlcmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OToxNy42MjI2MzY5MjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzA1NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5MT1jb25maWcgVFVOXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQxNC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxNTpjb25maWcgVEFQXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MTYtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6MTcuNjY2OTQ3NjU0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTYwMDY2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCdzIENhbGxlcnMqKlxuXG5Pa2F5LCBob2xkIG9uLiBJJ20gc2VlaW5nIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHJlZmVyZW5jZWQgaGVyZSwgYW5kIHRoYXQgcmFuZyBhIGJlbGwuIFdhc24ndCB0aGF0IGFsc28gdXNlZCBpbmRpcmVjdGx5IHRocm91Z2ggYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYD8gQW5kIGlzbid0ICp0aGF0KiBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHZlcnkgc2ltaWxhciwgaW52b2x2ZWQgaW4gdGhlIFRDUCBzdGFjaywgbWF5YmUgd2l0aGluIGBuZXQvaXB2NC90Y3AuY2Agb3IgYSByZWxhdGVkIGZpbGU/IEkgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uLiBMZXQncyBkaWcgaW50byBob3cgYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIHRyYWNlIHRoaXMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OToyMC42NjI5NTcxMTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM1ODk1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3plcm9jb3B5X2l0ZXJfZGdyYW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmg9MTc2OD1pbnQgemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzAtXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxNzcxOnN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzcyLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTQ5PXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjY1LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTI2NjpcXHRcXHRcXHRlcnIgPSBza2JfemVyb2NvcHlfaXRlcl9kZ3JhbShza2IsIGZyb20sIGNvcHkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyNjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ0OT1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODMxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4MzI6XFx0XFx0XFx0ZXJyID0gc2tiX3plcm9jb3B5X2l0ZXJfZGdyYW0oc2tiLCBmcm9tLCBjb3B5KTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTgzMy1cXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6MjIuNDY2NTUyMjg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODI4NDczODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYHNrYl96ZXJvY29weV9pdGVyX2RncmFtYCBjYWxscyBgX196ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBidXQgd2FpdCwgSSBzZWUgaXQncyBhY3R1YWxseSBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCB0aGF0J3MgdGhlIGZvY3VzIGhlcmUuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2ssIGJ1dCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBub3QgdGhlIGludGVybmFsIHZhcmlhbnQuXG5cbkxldCBtZSByZWZyZXNoIG15IG1lbW9yeTsgcmlnaHQsIGl0J3MgdGhlIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGZ1bmN0aW9uLlxuXG5gYGBjXG4gaW50IHplcm9jb3B5X3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuLVx0aW50IGNvcHkgPSBtaW5fdChpbnQsIHNrYl9oZWFkbGVuKHNrYiksIGlvdl9pdGVyX2NvdW50KGZyb20pKTtcbitcdGludCBjb3B5ID0gbWluX3Qoc2l6ZV90LCBza2JfaGVhZGxlbihza2IpLCBpb3ZfaXRlcl9jb3VudChmcm9tKSk7XG4gXG4gXHQvKiBjb3B5IHVwIHRvIHNrYiBoZWFkbGVuICovXG4gXHRpZiAoc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyKHNrYiwgMCwgZnJvbSwgY29weSkpXG5gYGBcblxuRXhjZWxsZW50LCBqdXN0IGFzIEkgdGhvdWdodCwgdGhlIHNpbmdsZSBmdW5jdGlvbiBjaGFuZ2VkIGlzIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLiBOb3csIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gdXNlZD8gSXQncyB1c2VkIGluIGBkcml2ZXJzL25ldC90YXAuY2AgYW5kIGBkcml2ZXJzL25ldC90dW4uY2AuIFNvIHdlJ3JlIGxvb2tpbmcgYXQgYFRVTmAgYW5kIGBUQVBgIGNvbmZpZ3VyYXRpb25zLiBTaW5jZSBpdCdzIGV4cG9ydGVkLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcG90ZW50aWFsIHVzYWdlcy4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgYmVpbmcgdHVubmVsLXZpc2lvbmVkLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhpcyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBmdW5jdGlvbiBpdHNlbGYsIHBsdXMgYHR1bl9nZXRfdXNlcmAgYW5kIGB0YXBfZ2V0X3VzZXJgLCBzaW5jZSB0aGV5IGNhbGwgaXQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaXMgdXNlZCBlbHNld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6MjguNDQ5NDAyNDE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk5MDA1ODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGFwLmM9NTcyPXN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTYyNy1cXHRpZiAoemVyb2NvcHkpXFxuZHJpdmVycy9uZXQvdGFwLmM6NjI4OlxcdFxcdGVyciA9IHplcm9jb3B5X3NnX2Zyb21faXRlcihza2IsIGZyb20pO1xcbmRyaXZlcnMvbmV0L3RhcC5jLTYyOS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xNzI2PXN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTgxOS1cXHRcXHRcXHQgKiBJZiB6ZXJvY29weSBpcyBlbmFibGVkLCB0aGVuIHRoaXMgbGF5b3V0IHdpbGwgYmVcXG5kcml2ZXJzL25ldC90dW4uYzoxODIwOlxcdFxcdFxcdCAqIG92ZXJ3cml0dGVuIGJ5IHplcm9jb3B5X3NnX2Zyb21faXRlcigpLlxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjEtXFx0XFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xODM1LVxcdFxcdGlmICh6ZXJvY29weSlcXG5kcml2ZXJzL25ldC90dW4uYzoxODM2OlxcdFxcdFxcdGVyciA9IHplcm9jb3B5X3NnX2Zyb21faXRlcihza2IsIGZyb20pO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MzctXFx0XFx0ZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzYxPXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2Mi1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjE3NjM6aW50IF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTc2NC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xNzcxPXN0YXRpYyBpbmxpbmUgaW50IHNrYl96ZXJvY29weV9pdGVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTE3NzMte1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTc3NDpcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBza2ItXFx1MDAzZXNrLCBza2IsIFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBsZW4sXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xNzc1LVxcdFxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9NDI1Mj1pbnQgc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pdGVyX2Z1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCxcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGludCBsZW4pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI1NDppbnQgemVyb2NvcHlfc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJtKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTQyNTUtdm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg9MTM4PWVudW0gc2tiX2Ryb3BfcmVhc29uIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oLTQxMi1cXHQgKiBAU0tCX0RST1BfUkVBU09OX1NLQl9VQ09QWV9GQVVMVDogZmFpbGVkIHRvIGNvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UsXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmg6NDEzOlxcdCAqIGUuZy4sIHZpYSB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoKSBvciBza2Jfb3JwaGFuX2ZyYWdzX3J4KClcXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC00MTQtXFx0ICovXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jPTcwNz16ZXJvY29weV9maWxsX3NrYl9mcm9tX2Rldm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc0NS1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc0NjppbnQgX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2NvcmUvZGF0YWdyYW0uYy03NDctXFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzcxLX1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3MjpFWFBPUlRfU1lNQk9MKF9femVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3My1cXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc3NC0vKipcXG5uZXQvY29yZS9kYXRhZ3JhbS5jOjc3NTogKlxcdHplcm9jb3B5X3NnX2Zyb21faXRlciAtIEJ1aWxkIGEgemVyb2NvcHkgZGF0YWdyYW0gZnJvbSBhbiBpb3ZfaXRlclxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzc2LSAqXFx0QHNrYjogYnVmZmVyIHRvIGNvcHlcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzgzLSAqL1xcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzg0OmludCB6ZXJvY29weV9zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzg1LXtcXG4tLVxcbm5ldC9jb3JlL2RhdGFncmFtLmMtNzkxLVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6NzkyOlxcdHJldHVybiBfX3plcm9jb3B5X3NnX2Zyb21faXRlcihOVUxMLCBOVUxMLCBza2IsIGZyb20sIH4wVSwgTlVMTCk7XFxubmV0L2NvcmUvZGF0YWdyYW0uYy03OTMtfVxcbm5ldC9jb3JlL2RhdGFncmFtLmM6Nzk0OkVYUE9SVF9TWU1CT0woemVyb2NvcHlfc2dfZnJvbV9pdGVyKTtcXG5uZXQvY29yZS9kYXRhZ3JhbS5jLTc5NS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE5MDY9aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xOTI3LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5Mjg6XFx0ZXJyID0gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBzaywgc2tiLCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MjktXFx0XFx0XFx0XFx0ICAgICAgYmluZGluZyk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9ODA9c3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X2ZpbGxfc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtODctXFx0aWYgKHpjb3B5KVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo4ODpcXHRcXHRyZXR1cm4gX196ZXJvY29weV9zZ19mcm9tX2l0ZXIobXNnLCBOVUxMLCBza2IsXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTg5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLCBOVUxMKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0yMTI9c3RhdGljIHN0cnVjdCBza19idWZmICp2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3NrYihzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvLFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTIzOS1cXHQvKiBJZiAndnNrJyAhPSBOVUxMIHRoZW4gcGF5bG9hZCBpcyBhbHdheXMgcHJlc2VudCwgc28gd2VcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQwOlxcdCAqIHdpbGwgbmV2ZXIgY2FsbCAnX196ZXJvY29weV9zZ19mcm9tX2l0ZXIoKScgYmVsb3cgd2l0aG91dFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0yNDEtXFx0ICogc2V0dGluZyBza2Igb3duZXIgaW4gJ3NrYl9zZXRfb3duZXJfdygpJy4gVGhlIG9ubHkgY2FzZVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0Ni1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MjQ3OlxcdC8qIFNldCBvd25lciBoZXJlLCBiZWNhdXNlICdfX3plcm9jb3B5X3NnX2Zyb21faXRlcigpJyB1c2VzXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTI0OC1cXHQgKiBvd25lciBvZiBza2Igd2l0aG91dCBjaGVjayB0byB1cGRhdGUgJ3NrX3dtZW1fYWxsb2MnLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OTozMC4wNDg0MTI5NDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0MTA0MTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkV4YW1pbmluZyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgYW5kIGl0cyBhcHBsaWNhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdGl2ZWx5IHVzZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdGFwLmNgIGFuZCBgZHJpdmVycy9uZXQvdHVuLmNgIGZpbGVzLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2YgdGhlIG5ldHdvcmtpbmcgY29udGV4dC4gVGhlIHByZXNlbmNlIG9mIGBUVU5gIGFuZCBgVEFQYCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBpbW1lZGlhdGVseSBzaWduYWxzIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLCB3aGljaCBtYWtlcyBzZW5zZS5cblxuTm93LCBJIHNlZW0gdG8gcmVtZW1iZXIgYE1BQ1ZUQVBgIGJlaW5nIHNvbWVob3cgcmVsYXRlZCB0byB0aGlzIGB0YXAuY2AgbW9kdWxlLCBidXQgSSB3YW50IHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcC4gSXMgYE1BQ1ZUQVBgIGFjdHVhbGx5IHBhcnQgb2YgdGhlIGB0YXAuY2AgbW9kdWxlPyBObywgdGhhdCdzIGluY29ycmVjdC4gSSByZWNhbGwgbm93IHRoYXQgYHRhcC5jYCBpcyBhY3R1YWxseSBhIHNlcGFyYXRlIGxvYWRhYmxlIG1vZHVsZSwgYHRhcC5rb2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgTUFDVlRBUGAgdGllcyBpbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBnby10byBwbGFjZSBmb3IgdW5jb3ZlcmluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIG9mIHRoZXNlIG5ldHdvcmsgZHJpdmVycy4gSXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE1BQ1ZUQVBgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzExLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6MzQuNDg5NDU3OTQ3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTUzNTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDVlRBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MTY1PWNvbmZpZyBNQUNWTEFOXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjE3OTpjb25maWcgTUFDVlRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgwLVxcdHRyaXN0YXRlIFxcXCJNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNDo0OTozNC41MzUwMDAwMTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMzYzNTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYHRhcC5jYCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHRhcC5jYCBkcml2ZXIgaXMgY29tcGlsZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgZHJpdmVycy9uZXQvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMgYXJlIGxpa2VseSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGF0IE1ha2VmaWxlIHRvIHNlZSBleGFjdGx5IGhvdyBgdGFwLmNgIGlzIGhhbmRsZWQsIHdoZXRoZXIgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpZiBpdOKAmXMgbGlua2VkIGFnYWluc3Qgc3BlY2lmaWMgbGlicmFyaWVzLCBhbmQgd2hpY2ggcHJlcHJvY2Vzc29yIGRlZmluZXMgYXJlIHJlbGV2YW50IHRvIGl0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZHJpdmVyIGZpdHMgaW50byB0aGUgbGFyZ2VyIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IE1ha2VmaWxlIGFuZCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc4OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjM4LjE1ODYzODcyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIxNDE5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19NQUNWTEFOKSArPSBtYWN2bGFuLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTUFDVlRBUCkgKz0gbWFjdnRhcC5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX01JSSkgKz0gbWlpLm9cXG4tLVxcbmRyaXZlcnMvbmV0L01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19UVU4pICs9IHR1bi5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1RBUCkgKz0gdGFwLm9cXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfVkVUSCkgKz0gdmV0aC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjM4LjIzMDc5MTA4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODIxODczNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRBUC9UVU4gQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFNlbGVjdGlvbioqXG5cbk9rYXksIGhlcmUncyBob3cgSSdtIGFwcHJvYWNoaW5nIHRoaXM6IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZW4gd2hpY2ggc3BlY2lmaWMgc3ltYm9scyB0byBpbmNsdWRlIGluIG15IGFuYWx5c2lzIHJlbGF0ZWQgdG8gVEFQIGFuZCBUVU4gZHJpdmVycy4gSSBrbm93IGBDT05GSUdfVEFQYCBjb21waWxlcyBgdGFwLmNgLCBhbmQgYENPTkZJR19UVU5gIGNvbXBpbGVzIGB0dW4uY2AuIFRoZSBjb3JlIGZ1bmN0aW9uIG9mIGludGVyZXN0LCBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgaXMgZGVmaW5lZCBpbiBgbmV0L2NvcmUvZGF0YWdyYW0uY2AsIHdoaWNoIGlzIGFsd2F5cyBjb21waWxlZCwgc28gdGhhdCBwYXJ0IGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlcmVmb3JlLCBgQ09ORklHX1RVTmAgYW5kIGBDT05GSUdfVEFQYCBhcmUgdGhlIGtleXMgZm9yIGVuYWJsaW5nIHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBzeW1ib2xzOiBteSBpbml0aWFsIHRob3VnaHQgd2FzIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgLCBgdHVuX2dldF91c2VyYCwgYW5kIGB0YXBfZ2V0X3VzZXJgLiBIb3dldmVyLCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBpbnN0cnVjdHMgbWUgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGB0dW5fZ2V0X3VzZXJgIGFuZCBgdGFwX2dldF91c2VyYCBhcmUgc3RhdGljLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGFsdGVybmF0aXZlcy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBncmVwIG91dHB1dC4gQWgsIHllcywgaXQgY2xlYXJseSBzaG93cyBgdHVuX2dldF91c2VyYCBhbmQgYHRhcF9nZXRfdXNlcmAgYXMgc3RhdGljIGZ1bmN0aW9ucy4gU2luY2UgdGhleSBhcmUgc3RhdGljLCBJIHNob3VsZCBleGNsdWRlIHRoZW0gZnJvbSBteSBmaW5hbCBzZWxlY3Rpb24gdW5sZXNzIHRoZXkgYXJlIHBhcnRpY3VsYXJseSBsYXJnZSBhbmQgdW5saWtlbHkgdG8gYmUgaW5saW5lZC4gVGhlIHByb21wdCBpcyB2ZXJ5IGNsZWFyIG9uIHByZWZlcnJpbmcgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFuZCBnaXZlbiB0aGF0IHRoZXNlIGFyZSBoZWxwZXIgZnVuY3Rpb25zLCB0aGUgaW5zdHJ1Y3Rpb24gaXMgcmVsZXZhbnQuXG5cblNvLCBJIG5lZWQgdG8gaHVudCBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgaW4gYHR1bi5jYCBhbmQgYHRhcC5jYC4gU2Nhbm5pbmcgdGhlIGNvZGUsIEkgc2VlIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGFuZCBgdGFwX3dyaXRlX2l0ZXJgIHRoYXQgbG9va3MgcHJvbWlzaW5nLiBUaGV5IGFyZSBsaWtlbHkgdGhlIHdyaXRlIGVudHJ5IHBvaW50cywgc28gdGhleSB3b3VsZCBiZSB0aGUgY2FuZGlkYXRlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZW0gY2FyZWZ1bGx5LCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5J3JlIHN1aXRhYmxlIGFuZCB0aGUgYmVzdCBjaG9pY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjQ1LjA1MjY2Njc0NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2NTY0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2Nocl93cml0ZV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTE3MjY9c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMDE3LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIwMTg6c3RhdGljIHNzaXplX3QgdHVuX2Nocl93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIwMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzUzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0dW5fZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM1MzktXFx0LnJlYWRfaXRlciAgPSB0dW5fY2hyX3JlYWRfaXRlcixcXG5kcml2ZXJzL25ldC90dW4uYzozNTQwOlxcdC53cml0ZV9pdGVyID0gdHVuX2Nocl93cml0ZV9pdGVyLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM1NDEtXFx0LnBvbGxcXHQ9IHR1bl9jaHJfcG9sbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6NDUuMTE1MzI4NTk1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMTEzODA5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gYHR1bl9jaHJfd3JpdGVfaXRlcmAgaXMgYWxzbyBzdGF0aWMsIG1ha2luZyBpdCB1bmxpa2VseSB0byBiZSBpbmxpbmVkIHNpbmNlIGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuIHdpdGhpbiB0aGUgZmlsZSBvcGVyYXRpb24uIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBXaGlsZSB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQsIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBNYWtlcyB0aGUgbW9zdCBzZW5zZSB0byBqdXN0IHV0aWxpemUgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgaGVyZS5cblxuQnV0IGhvbGQgb24sIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nLiBJcyBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCByZWFjaGFibGUgZWxzZXdoZXJlPyBJdCBzZWVtcyBpdCBpcyBvbmx5IHVzZWQgYnkgYHR1bmAgYW5kIGB0YXBgIHNwZWNpZmljYWxseS4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlcmVmb3JlLCBgVFVOYCBhbmQgYFRBUGAgYXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIHRvIGZvY3VzIG9uLlxuXG5MZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgdG8gYmUgc3VyZSB0aGVyZSBhcmUgbm90IGFueSBvdGhlciBjb25maWdzIHRvIGJlIGNvbnNpZGVyZWQuIGBDT05GSUdfTkVUYCBpcyBhbiBvYnZpb3VzIGNob2ljZS4gV2hpbGUgYENPTkZJR19JTkVUYCBtaWdodCBub3QgYmUgc3RyaWN0bHkgcmVxdWlyZWQgZm9yIGB0dW5gL2B0YXBgLCBpdCdzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBhbG9uZ3NpZGUgdGhlbS4gSSdtIGNvbmZpZGVudCB0aGF0IGBUVU5gIGFuZCBgVEFQYCB3aWxsIHN1ZmZpY2UuXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSBwYXRjaCBpdHNlbGY6XG5cbmBgYGNcbi1cdGludCBjb3B5ID0gbWluX3QoaW50LCBza2JfaGVhZGxlbihza2IpLCBpb3ZfaXRlcl9jb3VudChmcm9tKSk7XG4rXHRpbnQgY29weSA9IG1pbl90KHNpemVfdCwgc2tiX2hlYWRsZW4oc2tiKSwgaW92X2l0ZXJfY291bnQoZnJvbSkpO1xuYGBgXG5cbkFoYSEgVGhpcyBmaXhlcyBhIHBvdGVudGlhbCBidWcuIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgc2l0dWF0aW9uIHdoZXJlIGBpb3ZfaXRlcl9jb3VudChmcm9tKWAgY291bGQgZXhjZWVkIGBJTlRfTUFYYCwgbGVhZGluZyB0byBgY29weWAgZWl0aGVyIGJlaW5nIG5lZ2F0aXZlIG9yIHRydW5jYXRlZCwgYSBjbGFzc2ljIGludGVnZXIgb3ZlcmZsb3cgc2l0dWF0aW9uLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGRhdGFncmFtIGhhbmRsaW5nLCB3aGljaCBtYWtlcyB0aGlzIHdvcnRoIGZ1enppbmcgdG8gY2F0Y2ggcG90ZW50aWFsIGVkZ2UgY2FzZXMuIEZvY3VzaW5nIG9uIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIG1ha2VzIHRoZSBtb3N0IHNlbnNlLlxuXG5XaXRoIHRoYXQsIGBUVU5gIGFuZCBgVEFQYCB3aWxsIGVuYWJsZSB0aGlzIHRvIGJlIGZ1enotdGVzdGVkLiBCZWNhdXNlIHRoZSBwYXRjaCByZXNvbHZlcyBhIHBvc3NpYmxlIGludGVnZXIgdHJ1bmNhdGlvbi9zaWduZWRuZXNzIGlzc3VlIHdpdGhpbiBgemVyb2NvcHlfc2dfZnJvbV9pdGVyYCwgaXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVU4vVEFQIGRldmljZXMgYW5kIHdoZW4gemVyb2NvcHkgaXMgZW5hYmxlZC5cblxuSSdsbCBxdWlja2x5IGNoZWNrIGB0YXBfd3JpdGVfaXRlcmAgYXMgd2VsbCwganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6NTIuNDI2NzEyNTA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYwOTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXBfd3JpdGVfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtNjkwLVxcbmRyaXZlcnMvbmV0L3RhcC5jOjY5MTpzdGF0aWMgc3NpemVfdCB0YXBfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG5kcml2ZXJzL25ldC90YXAuYy02OTIte1xcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTAzND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0YXBfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwMzgtXFx0LnJlYWRfaXRlclxcdD0gdGFwX3JlYWRfaXRlcixcXG5kcml2ZXJzL25ldC90YXAuYzoxMDM5OlxcdC53cml0ZV9pdGVyXFx0PSB0YXBfd3JpdGVfaXRlcixcXG5kcml2ZXJzL25ldC90YXAuYy0xMDQwLVxcdC5wb2xsXFx0XFx0PSB0YXBfcG9sbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDQ6NDk6NTIuNDcxMzI4NzU4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzU0MDEwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlN0cmVhbWxpbmluZyB0aGUgRGF0YSBXcml0ZSBQYXRoKipcblxuQWxyaWdodCwgc28gYHRhcF93cml0ZV9pdGVyYCBpcyBpbmRlZWQgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhlIGFwcHJvYWNoLiBNeSBpbnN0aW5jdCBpcyBjb3JyZWN0LCBJJ2xsIHN0aWNrIHdpdGggcHJvdmlkaW5nIHRoYXQgYHplcm9jb3B5X3NnX2Zyb21faXRlcmAgZnVuY3Rpb24uIFRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgZGF0YSB0cmFuc2ZlciBkaXJlY3RseS5cblxuTm93LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJ2xsIG1vdmUgb24gdG8gY2FsbGluZyBgc2V0LXJlc3VsdHNgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHByb2dyZXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2MSwiT3V0cHV0VG9rZW5zIjo5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA0OjQ5OjU2LjI0NjczMjczMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjA5MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlRBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbi9zaWduZWRuZXNzIGlzc3VlIGluIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvcHkgbGVuZ3RoLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVFVOL1RBUCBkZXZpY2VzIHdoZW4gemVyb2NvcHkgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlRBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInplcm9jb3B5X3NnX2Zyb21faXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbi9zaWduZWRuZXNzIGlzc3VlIGluIGB6ZXJvY29weV9zZ19mcm9tX2l0ZXJgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGNvcHkgbGVuZ3RoLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVFVOL1RBUCBkZXZpY2VzIHdoZW4gemVyb2NvcHkgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7dhm8[1] Phase: Succeeded StartedAt: 2026-07-29 04:50:08 +0000 UTC FinishedAt: 2026-07-29 04:50:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 04:50:08 +0000 UTC FinishedAt: 2026-07-29 04:50:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2] Phase: Succeeded StartedAt: 2026-07-29 04:50:08 +0000 UTC FinishedAt: 2026-07-29 08:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-29 04:50:08 +0000 UTC FinishedAt: 2026-07-29 08:43:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 04:50:08 +0000 UTC FinishedAt: 2026-07-29 04:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 04:50:08 +0000 UTC FinishedAt: 2026-07-29 04:50:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow7dhm8/series-workflow7dhm8-convert-artifact-1807319366/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 04:50:18 +0000 UTC FinishedAt: 2026-07-29 05:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 04:50:18 +0000 UTC FinishedAt: 2026-07-29 05:09:25 +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:*9d78a190-899f-4a1c-8575-b1ddfa470f0d,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-workflow7dhm8/series-workflow7dhm8-convert-artifact-1807319366/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": "25789f6f-bf3a-4b20-aacb-045fc7fe0272", "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-workflow7dhm8/series-workflow7dhm8-build-action-3081129692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 04:50:18 +0000 UTC FinishedAt: 2026-07-29 05:09:15 +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:*9d78a190-899f-4a1c-8575-b1ddfa470f0d,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-workflow7dhm8/series-workflow7dhm8-convert-artifact-1807319366/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": "25789f6f-bf3a-4b20-aacb-045fc7fe0272", "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-workflow7dhm8/series-workflow7dhm8-build-action-3081129692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 05:09:25 +0000 UTC FinishedAt: 2026-07-29 05:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 05:09:25 +0000 UTC FinishedAt: 2026-07-29 05:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 05:09:25 +0000 UTC FinishedAt: 2026-07-29 05:09:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 05:09:25 +0000 UTC FinishedAt: 2026-07-29 05:09:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow7dhm8/series-workflow7dhm8-convert-artifact-2007234201/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 05:09:35 +0000 UTC FinishedAt: 2026-07-29 05:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 05:09:35 +0000 UTC FinishedAt: 2026-07-29 05:11:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*25789f6f-bf3a-4b20-aacb-045fc7fe0272,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-workflow7dhm8/series-workflow7dhm8-build-action-3081129692/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-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 05:11:40 +0000 UTC FinishedAt: 2026-07-29 05:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 05:11:40 +0000 UTC FinishedAt: 2026-07-29 05:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 05:11:40 +0000 UTC FinishedAt: 2026-07-29 05:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 05:11:40 +0000 UTC FinishedAt: 2026-07-29 05:37:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9d78a190-899f-4a1c-8575-b1ddfa470f0d,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-workflow7dhm8/series-workflow7dhm8-convert-artifact-2007234201/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": "e780c6f0-3e2e-45ae-a6bd-c164e954966b", "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-workflow7dhm8/series-workflow7dhm8-build-action-3951953397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 05:11:40 +0000 UTC FinishedAt: 2026-07-29 05:37:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9d78a190-899f-4a1c-8575-b1ddfa470f0d,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-workflow7dhm8/series-workflow7dhm8-convert-artifact-2007234201/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": "e780c6f0-3e2e-45ae-a6bd-c164e954966b", "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-workflow7dhm8/series-workflow7dhm8-build-action-3951953397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 05:37:18 +0000 UTC FinishedAt: 2026-07-29 05:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 05:37:18 +0000 UTC FinishedAt: 2026-07-29 05:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 05:37:18 +0000 UTC FinishedAt: 2026-07-29 05:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 05:37:18 +0000 UTC FinishedAt: 2026-07-29 05:39:16 +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:*e780c6f0-3e2e-45ae-a6bd-c164e954966b,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-workflow7dhm8/series-workflow7dhm8-build-action-3951953397/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-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 05:39:26 +0000 UTC FinishedAt: 2026-07-29 08:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 05:39:26 +0000 UTC FinishedAt: 2026-07-29 08:43:04 +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":["zerocopy_sg_from_iter"],"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:*25789f6f-bf3a-4b20-aacb-045fc7fe0272,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e780c6f0-3e2e-45ae-a6bd-c164e954966b,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-workflow7dhm8/series-workflow7dhm8-build-action-3081129692/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-workflow7dhm8/series-workflow7dhm8-build-action-3951953397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 05:39:26 +0000 UTC FinishedAt: 2026-07-29 05:40:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 05:39:26 +0000 UTC FinishedAt: 2026-07-29 05:39:52 +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":["zerocopy_sg_from_iter"],"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-workflow7dhm8/series-workflow7dhm8-convert-artifact-1575551630/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 05:39:26 +0000 UTC FinishedAt: 2026-07-29 05:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 05:39:26 +0000 UTC FinishedAt: 2026-07-29 05:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 05:39:26 +0000 UTC FinishedAt: 2026-07-29 05:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 05:40:02 +0000 UTC FinishedAt: 2026-07-29 08:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7dhm8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["zerocopy_sg_from_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b515dc54795ef370be3cb396e7c12ad91686b6d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP"],"series_id":"b2f43368-c58f-422f-bbdd-b0d05ea87e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 05:40:02 +0000 UTC FinishedAt: 2026-07-29 08:42:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*25789f6f-bf3a-4b20-aacb-045fc7fe0272,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e780c6f0-3e2e-45ae-a6bd-c164e954966b,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-workflow7dhm8/series-workflow7dhm8-build-action-3081129692/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-workflow7dhm8/series-workflow7dhm8-build-action-3951953397/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-workflow7dhm8/series-workflow7dhm8-convert-artifact-1575551630/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,}